Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

ouyj vor 2 Monaten
Ursprung
Commit
6bb1e3df71

+ 51 - 2
App.uvue

@@ -3,12 +3,61 @@
 	let timer = 0;
 	
 	export default {
-		onLaunch: function () {
+		onLaunch: function (options: OnLaunchOptions) {
 			console.log('App Launch')
+			console.log('启动参数:', options)
+						
+			// 清空之前的缓存
+			uni.removeStorageSync('ice_apptoken')
+			
+			// 如果有启动参数,尝试提取apptoken
+			if (options != null) {
+				// 1. 从query获取
+				const query = options.query
+				if (query != null) {
+					const apptokenValue = query['apptoken']
+					if (apptokenValue != null) {
+						const apptoken = apptokenValue as string
+						console.log('保存apptoken到缓存:', apptoken)
+						uni.setStorageSync('ice_apptoken', apptoken)
+					}
+				}
+				
+				// 2. 从appScheme获取
+				const appScheme = options.appScheme
+				if (appScheme != null) {
+					const schemeStr = appScheme as string
+					console.log('AppScheme:', schemeStr)
+					
+					// 简单解析apptoken
+					if (schemeStr.includes('apptoken=')) {
+						const parts = schemeStr.split('apptoken=')
+						if (parts.length > 1) {
+							const tokenPart = parts[1]
+							const token = tokenPart.split('&')[0]  // 去掉可能的后缀
+							console.log('从scheme解析apptoken:', token)
+							uni.setStorageSync('ice_apptoken', token)
+						}
+					}
+				}
+			}
 			uni.setStorageSync("notify_key", "0")
 		},
-		onShow: function () {
+		onShow: function (options: OnShowOptions) {
 			console.log('App Show')
+			
+			// 再次检查并保存(确保不会漏掉)
+			if (options != null) {
+				const query = options.query
+				if (query != null) {
+					const apptokenValue = query['apptoken']
+					if (apptokenValue != null) {
+						const apptoken = apptokenValue as string
+						console.log('Show时保存apptoken:', apptoken)
+						uni.setStorageSync('ice_apptoken', apptoken)
+					}
+				}
+			}
 		},
 		onHide: function () {
 			console.log('App Hide')

+ 17 - 0
api/auth/login.uts

@@ -32,6 +32,23 @@ export const loginByAccount = async (username: string, password: string): Promis
     })
 }
 
+
+/**
+ * SSO账号登录
+ * @returns 返回整个响应对象 { status, msg, success, data }
+ */
+export const loginSSO = async (apptoken: string): Promise<any> => {	
+	return request({
+        url: `/ice/sso/login`,
+        method: 'POST',
+		header: {
+		  isToken: false,
+		  repeatSubmit: false
+		},
+		data:  {apptoken: apptoken}
+    })
+}
+
 export const getUserInfo = ():Promise<any> =>{
 	return request({
 		url: '/getInfo',

+ 14 - 0
api/order/list.uts

@@ -128,3 +128,17 @@ export const listAutoMisInfo = (query: UTSJSONObject | null): Promise<any> => {
 		data: query
     })
 }
+
+/**
+ * 获取所有工单列表
+ * @param query 查询条件
+ */
+export const allListOrder = (query: UTSJSONObject | null): Promise<any> => {
+    let url = `/mobile/order/allListOrder`
+
+    return request({
+        url: url,
+        method: 'GET',
+		data: query
+    })
+}

+ 4 - 8
api/user/list.uts

@@ -7,16 +7,12 @@ import type { UserInfo } from '../../types/user'
 /**
  * 获取用户列表
  */
-export const getUserList = (deptId?: any): Promise<any> => {
-	let url = `/system/user/listNoPermi?status=0`
-	if (deptId != null ) {
-	    // 支持工单编码和风机编号查询
-	    url += `&deptId=${deptId}`
-	}
-
+export const getUserList = (query: UTSJSONObject | null): Promise<any> => {
+	let url = `/system/user/listData`
     return request({
         url: url,
-        method: 'GET'
+        method: 'GET',
+		data: query
     })
 }
 

+ 2 - 2
components/uni-navbar-lite/uni-navbar-lite.uvue

@@ -56,7 +56,7 @@
         created() {
 			// #ifndef WEB
 				// 非WEB平台使用原有方式
-				const iconpath = './uniicons.ttf';
+				const iconpath = '/static/css/uniicons.ttf';
 				uni.loadFontFace({
 					global: false,
 					family: 'UniIconsFontFamily',
@@ -104,7 +104,7 @@
 	// #ifdef WEB
 	@font-face {
 		font-family: 'UniIconsFontFamily';
-		src: url('/components/uni-navbar-lite/uniicons.ttf') format('truetype');
+		src: url('/static/css/uniicons.ttf') format('truetype');
 	}
 	// #endif
     .uni-icons {

+ 52 - 0
components/upload-image/upload-image.uvue

@@ -34,6 +34,24 @@
         maxSize?: number // MB
         businessType?: string
     }
+	
+	let cameraInput: HTMLInputElement | null = null
+	const createNativeInput = () => {
+		if (cameraInput) return cameraInput
+		// 创建原生 input 元素
+		cameraInput = document.createElement('input')
+		cameraInput.type = 'file'
+		cameraInput.accept = 'image/*'
+		cameraInput.style.position = 'fixed'
+		cameraInput.style.top = '-1000px'
+		cameraInput.style.left = '-1000px'
+		cameraInput.style.opacity = '0'
+		cameraInput.style.pointerEvents = 'none'
+		cameraInput.setAttribute('capture', 'camera')
+		// 添加到 body
+		document.body.appendChild(cameraInput)
+		return cameraInput
+	}
 
     const props = withDefaults(defineProps<Props>(), {
         modelValue: () => [],
@@ -93,9 +111,43 @@
             uploading.value = false
         }
     }
+	
+	const openCamera = () => {
+	    const input = createNativeInput()
+	    // 清除事件监听器(避免重复绑定)
+	    input.onchange = null
+	    input.onchange = (event: Event) => {
+	        const target = event.target as HTMLInputElement
+	        if (target.files && target.files.length > 0) {
+	            const file = target.files[0]
+	            handleFile(file)
+	        }
+	        // 清除值以便下次选择
+	        input.value = ''
+	    }
+	    // 触发点击
+	    input.click()
+	}
+	
+	const handleFile = (file: File) => {
+		const blobUrl = URL.createObjectURL(file)
+		const result = {
+			tempFilePaths: [blobUrl],  // 类似: blob:http://localhost:8080/550e8400-e29b-41d4-a716-446655440000
+			tempFiles: [{
+				path: blobUrl,
+				size: file.size,
+				name: file.name,
+				type: file.type,
+				lastModified: file.lastModified
+			}]
+		}
+		handleUpload(result.tempFilePaths)
+	}
+
 
     // 选择图片
     const handleChooseImage = (): void => {
+		// let inputHtml = createNativeInput();
         if (imageList.value.length >= props.maxCount) {
             uni.showToast({
                 title: `最多上传${props.maxCount}张图片`,

+ 13 - 7
manifest.json

@@ -2,8 +2,8 @@
 	"name": "工效通",
 	"appid": "__UNI__1050C07",
 	"description": "工效通任务管理平台",
-	"versionName": "1.3.5",
-	"versionCode": "135",
+	"versionName": "1.3.6",
+	"versionCode": "136",
 	"uni-app-x": {},
 	"quickapp": {},
 	"mp-weixin": {
@@ -63,10 +63,10 @@
 				"uni-push": {}
 			},
 			"icons": {
-				"hdpi": "C:/project/ygtx-gxt/gxt_app/static/images/splash/72.png",
-				"xhdpi": "C:/project/ygtx-gxt/gxt_app/static/images/splash/96.png",
-				"xxhdpi": "C:/project/ygtx-gxt/gxt_app/static/images/splash/144.png",
-				"xxxhdpi": "C:/project/ygtx-gxt/gxt_app/static/images/splash/192.png"
+				"hdpi": "D:/ygtx/aiSys/split_project/gxt_app/static/images/splash/72.png",
+				"xhdpi": "D:/ygtx/aiSys/split_project/gxt_app/static/images/splash/96.png",
+				"xxhdpi": "D:/ygtx/aiSys/split_project/gxt_app/static/images/splash/144.png",
+				"xxxhdpi": "D:/ygtx/aiSys/split_project/gxt_app/static/images/splash/192.png"
 			},
 			"splashScreens": {
 				"default": {
@@ -92,6 +92,9 @@
 				"x86_64"
 			],
 			"targetSdkVersion": "33",
+			"schemes": [
+				"gxtapp"
+			],
 			"minSdkVersion": "21"
 		}
 	},
@@ -103,7 +106,10 @@
 			},
 			"splashScreens": {
 				"storyboard": ""
-			}
+			},
+			"urltypes": [{
+				"urlscheme": "gxtapp"
+			}]
 		}
 	},
 	"web": {

+ 118 - 56
pages/login/index.uvue

@@ -80,7 +80,7 @@
 
 <script setup lang="uts">
     import { ref, computed, onMounted } from 'vue'
-    import { loginByAccount, getUserInfo, resetPassword , getIsKey} from '../../api/auth/login'
+    import { loginByAccount, loginSSO, getUserInfo, resetPassword , getIsKey} from '../../api/auth/login'
 	import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update'
     import {
         saveAccessToken,
@@ -161,6 +161,60 @@
 		    })
 		}
 	};
+	
+	
+	const loginSuccess = async(result: any) : Promise<void> => {
+		// 提取 data 部分
+		const resultObj = result as UTSJSONObject
+		// const data = resultObj['data'] as UTSJSONObject
+				
+		const isInitPassword = resultObj["isInitPassword"] as boolean | null;
+		// console.log("================"+ code)
+		if(isInitPassword==true){
+			showPasswordPicker.value = true;
+			return
+		}
+		
+		uni.setStorageSync("login_key", "1")
+		
+		// 保存登录信息
+		saveAccessToken(resultObj['token'] as string)
+		
+		const userInfoJson = await getUserInfo();
+		console.log(userInfoJson);
+		
+		const userInfoObj = userInfoJson as UTSJSONObject
+		const userInfo = userInfoObj['user'] as UTSJSONObject
+		const deptInfo = userInfo['dept'] as UTSJSONObject
+		const permissions = userInfoObj['permissions'] as any[]
+		saveUserInfo({
+		    userId: userInfo['userId'],
+		    userName: userInfo['userName'],
+			nickName: userInfo['nickName'],
+			phone: userInfo['phonenumber'],
+			deptName: deptInfo['deptName'],
+			roleNames: userInfoObj['roleNames'],
+			permissions: permissions
+		})
+		
+		// 保存或清除记住的账号密码
+		if (rememberPassword.value) {
+		    saveRememberedAccount(username.value, password.value)
+		} else {
+		    clearRememberedAccount()
+		}
+
+		// 跳转到首页
+		setTimeout(() => {
+		    /* uni.redirectTo({
+		        url: '/pages/index/index'
+		    }) */
+			uni.redirectTo({
+			    url: '/pages/splash/index'
+			}) 
+		}, 1000)
+	}
+	
     // 登录处理
     const handleLogin = async (): Promise<void> => {
 
@@ -192,61 +246,13 @@
 			saveStoreIsKey(isKey);
 
             const result = await loginByAccount(username.value, password.value)
-            // 提取 data 部分
-            const resultObj = result as UTSJSONObject
-            // const data = resultObj['data'] as UTSJSONObject
-					
-			const isInitPassword = resultObj["isInitPassword"] as boolean | null;
-			// console.log("================"+ code)
-			if(isInitPassword==true){
-				showPasswordPicker.value = true;
-				return
-			}
-
-			uni.setStorageSync("login_key", "1")
-			
-            // 保存登录信息
-            saveAccessToken(resultObj['token'] as string)
-
-			const userInfoJson = await getUserInfo();
-			console.log(userInfoJson);
-
-			const userInfoObj = userInfoJson as UTSJSONObject
-			const userInfo = userInfoObj['user'] as UTSJSONObject
-			const deptInfo = userInfo['dept'] as UTSJSONObject
-			const permissions = userInfoObj['permissions'] as any[]
-            saveUserInfo({
-                userId: userInfo['userId'],
-                userName: userInfo['userName'],
-				nickName: userInfo['nickName'],
-				phone: userInfo['phonenumber'],
-				deptName: deptInfo['deptName'],
-				roleNames: userInfoObj['roleNames'],
-				permissions: permissions
-            })
-
-            // 保存或清除记住的账号密码
-            if (rememberPassword.value) {
-                saveRememberedAccount(username.value, password.value)
-            } else {
-                clearRememberedAccount()
-            }
-
-            uni.showToast({
-                title: '登录成功',
-                icon: 'success'
-            })
-
-            // 跳转到首页
-            setTimeout(() => {
-                /* uni.redirectTo({
-                    url: '/pages/index/index'
-                }) */
-				uni.redirectTo({
-				    url: '/pages/splash/index'
-				}) 
-            }, 1000)
-
+            loginSuccess(result);
+		
+			uni.showToast({
+				title: '登录成功',
+				icon: 'success'
+			})
+		
         } catch (e: any) {
             uni.showToast({
                 title: e.message ?? '登录失败',
@@ -257,6 +263,62 @@
             loading.value = false
         }
     }
+	
+	const handleLoginSSO = async (apptoken:string): Promise<void> => {
+		try {
+			const resultKey = await getIsKey();
+			const resultKeyObj = resultKey as UTSJSONObject
+			const isKey = resultKeyObj["data"] as string |'0'
+			saveStoreIsKey(isKey);
+			
+			let result = await loginSSO(apptoken)
+			console.log('自动登录:', result)
+			loginSuccess(result);
+		} catch (e: any) {
+		    uni.showToast({
+		        title: e.message ?? '登录失败',
+		        icon: 'none',
+		        duration: 2000
+		    })
+		} finally {
+		    loading.value = false
+		}
+	}
+	
+	onLoad((options: UTSJSONObject | null) => {
+	    console.log('URL参数:', options)
+		 // 延迟一点执行,确保App.vue已保存到缓存
+		setTimeout(() => {
+			// 1. 从缓存获取ICE的apptoken
+			const iceToken = uni.getStorageSync('ice_apptoken')
+			if (iceToken != null) {
+				if (typeof iceToken == 'string') {
+					if(iceToken.length > 0){
+						console.log('从缓存获取ICE apptoken:', iceToken)
+						handleLoginSSO(iceToken)
+					}
+					// 清除缓存,避免重复登录
+					uni.removeStorageSync('ice_apptoken')
+					return
+				}
+			}
+			
+			// 2. 从页面参数获取
+			if (options != null) {
+				const apptokenValue = options['apptoken']
+				if (apptokenValue != null) {
+					if (typeof apptokenValue == 'string') {
+						if(apptokenValue.length > 0){
+							const apptoken = apptokenValue as string
+							console.log('获取到自动登录apptoken:', apptoken)
+							handleLoginSSO(apptoken);
+						}
+					}
+				}
+			}
+			console.log('未检测到ICE登录,显示普通登录界面')
+		}, 500)
+	})
 
     // 初始化:加载记住的账号密码
     onMounted(() => {

+ 8 - 2
pages/order/detail/acceptIndex.uvue

@@ -56,9 +56,13 @@
 					    <text class="info-value">{{ detailData.faultCode ?? '' }}</text>
 					</view>
 					<view class="info-item" v-if="detailData.orderType == 1">
-					    <text class="info-label">故障信息</text>
+					    <text class="info-label">故障条纹</text>
 					    <text class="info-value">{{ detailData.faultBarcode ?? '' }}</text>
 					</view>
+					<view class="info-item" v-if="detailData.orderType == 1 && faultDesc != ''">
+					    <text class="info-label">故障描述</text>
+					    <text class="info-value">{{ faultDesc }}</text>
+					</view>
 					<!-- <view class="info-item" v-if="detailData.orderType == 1">
 					    <text class="info-label">工作负责人</text>
 					    <view class="form-picker" @click="showLeaderPicker = true">
@@ -172,6 +176,7 @@
 	const dictLoaded = ref<boolean>(false)
 	let keyword = ref<string>("")
 	const inspectionTypeLabel = ref<string>("") //维保类型
+	const faultDesc = ref<string>("") //故障描述
 
 	// 详情数据
 	const detailData = ref<acceptOrderInfo2>({
@@ -478,13 +483,14 @@
                     workEndTime: data['workEndTime'] as string | null  // 新增字段
                 }
                 detailData.value = orderDtail
+				faultDesc.value = (data['faultDesc'] as string | null) ?? ''
 
 				// 如果工单数据中已有负责人信息,设置到输入框中
 				if (orderDtail.teamLeaderName != null && orderDtail.teamLeaderName.length > 0) {
 					teamLeaderName.value = orderDtail.teamLeaderName as string
 				}
 				loadTeamLeaderList()
-				
+
 				if(data['orderType'] == 2 && data['inspectionType'] != null) {
 					const result = await getDictDataByType("gxt_inspection_type")
 					const resultObj = result as UTSJSONObject

+ 1 - 1
pages/order/detail/resetIndex.uvue

@@ -89,7 +89,7 @@
         </scroll-view>
 
         <!-- 接单按钮 -->
-            <view class="accept-button-container" v-if="checkPermi(orderType == '2' ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend'])">
+            <view class="accept-button-container" v-if="checkPermi(orderType == '2' ? ['gxt:maintenance:order:complete'] : ['gxt:repairOrder:finalize'])">
             <button class="accept-button" @click="handleSuspendOrder">{{ isDealing ? '复启中...' : '复 启' }}</button>
         </view>
 

+ 7 - 7
pages/order/detail/restartIndex.uvue

@@ -39,7 +39,7 @@
 						<view class="info-label">
 							<text class="form-label required">恢复运行时间<text style="color: red;">*</text></text>
 						</view>
-						
+
 						<view class="info-value">
 						    <view class="form-picker" @click="showshutdownTimePicker = true">
 								<input
@@ -55,7 +55,7 @@
 						<view class="info-label">
 							<text class="form-label required">损失电量(kWh)<text style="color: red;">*</text></text>
 						</view>
-						
+
 						<view class="info-value">
 								<input
 								    class="input-field"
@@ -69,7 +69,7 @@
 					</view>
 			    </view>
 			</view>
-			
+
 			<!-- 时间选择器弹窗 -->
 			<!-- Start Date Picker -->
 			<l-popup v-model="showshutdownTimePicker" position="bottom">
@@ -87,7 +87,7 @@
         </scroll-view>
 
         <!-- 接单按钮 -->
-        <view class="accept-button-container" v-if="checkPermi(orderType == '2' ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend'])">
+        <view class="accept-button-container" v-if="checkPermi(orderType == '2' ? ['gxt:maintenance:order:restart'] : ['gxt:repairOrder:restart'])">
             <button class="accept-button" @click="handleRestartOrderr">{{ isDealing ? '复运中...' : '复 运' }}</button>
         </view>
 
@@ -114,7 +114,7 @@
 	const dictLoaded = ref<boolean>(false)
 	const restartTime = ref<string>("")
 	const lostPower = ref<string>("")
-	
+
 	// 工单信息
 	const orderId = ref<string>('')
 	const workOrderProjectNo = ref<string>('')
@@ -128,7 +128,7 @@
 	const assignTime = ref<string>('')
 
 	const showshutdownTimePicker = ref<boolean>(false)
-	
+
 	// 输入过滤方法,只允许数字和小数点,并确保值大于0
 	const handleLostPowerInput = () => {
 	  let value = lostPower.value;
@@ -151,7 +151,7 @@
       // 更新值
       lostPower.value = value;
 	};
-	
+
 	// 验证损失电量是否大于0
 	const validateLostPower = () => {
 		if (lostPower.value.trim() !== '') {

+ 26 - 25
pages/order/detail/wbBackfillFinalize.uvue

@@ -58,12 +58,13 @@
                             <text class="form-label required">开始时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showStartTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showStartTimePicker = false : showStartTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择开始时间"
 								    v-model="realStartTime"
 									type="none"
+									style="pointer-events: none;"
 								/>
                             </view>
                         </view>
@@ -75,17 +76,18 @@
                             <text class="form-label required">结束时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showEndTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showEndTimePicker = false : showEndTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择结束时间"
 								    v-model="realEndTime"
 									type="none"
+									style="pointer-events: none;"
 								/>
                             </view>
                         </view>
                     </view>
-					
+
 					<!-- 挂起结束时间 -->
 					<view class="info-item" v-if="resumeInfo != null && resumeShow">
 					    <view class="info-label">
@@ -234,7 +236,7 @@
 					@cancel="showEndTimePicker = false">
 				</l-date-time-picker>
 			</l-popup>
-			
+
 			<l-popup v-model="showResumeTimePicker" position="bottom" :safe-area-inset-bottom="true" :z-index="10000">
 				<l-date-time-picker
 					title="选择挂起结束时间"
@@ -353,7 +355,7 @@
     const startTimeTime = ref<string>('')
     const endTimeDate = ref<string>('')
     const endTimeTime = ref<string>('')
-    
+
     // 搜索关键词
 	const userKeyword = ref<string>('')
     // 人员选择相关变量
@@ -363,7 +365,7 @@
 
     // 信息录入选项
 	const selectedMisInfoIndex = ref<number>(-1)
-	
+
 	//挂起结束时间
 	const suspendReason = ref<string>('') // 挂起原因
 	const flowList = ref<UTSJSONObject[]>([]) //流转过程
@@ -372,7 +374,7 @@
 	const resumeShow = ref<boolean>(false)
 	const resumeTime = ref<string>('') // 挂起结束时间
 	const showResumeTimePicker = ref<boolean>(false)
-	
+
 	// 监听开始时间和结束时间变化
 	watch(realStartTime, (value: string) => {
 	    console.log('开始时间变化:', value)
@@ -406,7 +408,7 @@
 	        }
 	    }
 	})
-	
+
 	watch(realEndTime, (value: string) => {
 	    console.log('结束时间变化:', value)
 	    // 在这里添加结束时间变化时的处理逻辑
@@ -420,7 +422,7 @@
 		      } else {
 		        resumeShow.value = false
 		      }
-		
+
 		    } else if(suspendTime != '' && realStartTime.value != '' && new Date(suspendTime).getTime() >= new Date(realStartTime.value).getTime()) { // 作业中挂起
 		      if (realStartTime.value != '' && resumeTime.value != '' && new Date(resumeTime.value).getTime() < new Date(realStartTime.value).getTime()) {
 		        resumeShow.value = true
@@ -523,14 +525,14 @@
 	  realEndTime.value = value
 	  showEndTimePicker.value = false
 	}
-	
+
 	function onResumeTimeConfirm(value: string) {
 	  // 检查新的结束时间是否小于开始时间
 	  if (resumeTime.value != '' && new Date(realStartTime.value as string) > new Date(value)) {
 	    uni.showToast({ title: '结束时间不能小于开始时间', icon: 'none' })
 	    return
 	  }
-	
+
 	  resumeTime.value = value
 	  showResumeTimePicker.value = false
 	}
@@ -618,10 +620,10 @@
         // 清空选中的用户数组
         selectedUsers.value = [];
         selectedUserIds.value = [];
-        
+
         // 清空显示的用户名
         workGroupMemberName.value = '';
-        
+
         // 清空工作班成员列表
         workOrderPersonList.value = [];
     };
@@ -659,7 +661,7 @@
             });
             return false;
         }
-		
+
 		if(resumeShow.value) {
 			if(resumeTime.value == '') {
 				uni.showToast({
@@ -700,7 +702,7 @@
 				}
 			}
 		}
-		
+
 		// if (infoEntry.value == '2' && (workGroupMemberName.value == '' || selectedUsers.value.length == 0)) {
 		//     uni.showToast({
 		//         title: '请选择工作班成员',
@@ -726,7 +728,7 @@
 			isDealing.value = true
 	        // 确保附件URLs是最新的逗号分隔格式
 	        attachmentUrls.value = uploadedFiles.value.map(file => file.fileName).join(',');
-			
+
 			flowList.value = []
 			if (resumeTime.value != '' && resumeInfo.value != null && resumeTime.value != (resumeInfo.value['actionTime'] as string | null)) { //存入新的挂起结束时间
 				resumeInfo.value['actionTime'] = resumeTime.value
@@ -779,10 +781,9 @@
 	                icon: 'none'
 	            });
 	        }
-	    } catch (error: any) {
-	        console.error('结单失败:', error);
+	    } catch (error: Error) {
 	        uni.showToast({
-	            title: '结单失败',
+	            title: error.message,
 	            icon: 'none'
 	        });
 	    } finally {
@@ -831,7 +832,7 @@
 				misNo.value = (data['misNo'] as string | null) ?? ''
 				workPermitNum.value = (data['workPermitNum'] as string | null) ?? ''
 				suspendReason.value = (data['suspendReason'] as string | null) ?? ''
-				
+
 				const queryParams = {
 					misNo: misNo.value,
 				} as UTSJSONObject;
@@ -865,7 +866,7 @@
 							}
 						})
 					}
-					
+
 					flowList.value = data['workOrderFlowList'] as UTSJSONObject[]
 					if (suspendReason.value != '' && flowList.value.length > 0) {
 					  // 获取最后一个 actionType 等于 'resume' 的项
@@ -875,7 +876,7 @@
 						// 直接给 resumeTime 赋值,无需 formData
 						resumeTime.value = (lastResumeItem['actionTime'] as string | null) ?? ''
 					  }
-								
+
 					  const lastSuspendItem = flowList.value.findLast(item => (item['actionType'] as string | null) === 'to_approve') as UTSJSONObject | null
 					  if (lastSuspendItem != null) {
 						suspendInfo.value = lastSuspendItem
@@ -889,7 +890,7 @@
 					icon: 'none'
 				})
 			}
-				
+
 		} catch (e) {
 			uni.showToast({
 				title: (e as Error).message ?? '加载失败',
@@ -1007,13 +1008,13 @@
                         border-radius: 8rpx;
                         padding: 10rpx;
                     }
-					
+
 					.input-with-clear {
 						position: relative;
 						display: flex;
 						align-items: center;
 					}
-					
+
 					.select-clear {
 						position: absolute;
 						right: 20rpx;

+ 48 - 20
pages/order/detail/wbFinalize.uvue

@@ -106,12 +106,13 @@
                             <text class="form-label required">开始时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showStartTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showStartTimePicker = false : showStartTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择开始时间"
 								    v-model="realStartTime"
 									type="none"
+									style="pointer-events: none;"
 								/>
                             </view>
                         </view>
@@ -123,17 +124,18 @@
                             <text class="form-label required">结束时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showEndTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showEndTimePicker = false : showEndTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择结束时间"
 								    v-model="realEndTime"
 									type="none"
+									style="pointer-events: none;"
 								/>
                             </view>
                         </view>
                     </view>
-					
+
 					<!-- 挂起结束时间 -->
 					<view class="info-item" v-if="resumeInfo != null && resumeShow">
 					    <view class="info-label">
@@ -195,6 +197,7 @@
                                     placeholder="请选择工作负责人"
                                     v-model="teamLeaderName"
                                     @click="showLeaderPicker = true"
+									:disabled="infoEntry == '1'"
                                 />
                             </view>
                         </view>
@@ -283,7 +286,7 @@
 					@cancel="showEndTimePicker = false">
 				</l-date-time-picker>
 			</l-popup>
-			
+
 			<l-popup v-model="showResumeTimePicker" position="bottom" :safe-area-inset-bottom="true" :z-index="10000">
 				<l-date-time-picker
 					title="选择挂起结束时间"
@@ -431,7 +434,7 @@
     import type { acceptOrderInfo } from '../../../types/order'
     import type { WorkOrderFlow } from '../../../types/flow'
     import { getOrderInfoById, getRepairOrderInfoById, returnRepairOrder, finishOrder } from '../../../api/order/detail'
-    import { getMisInfoList, listWorkPerson, getOrderList, listAutoMisInfo } from '../../../api/order/list'
+    import { getMisInfoList, listWorkPerson, getOrderList, listAutoMisInfo, allListOrder } from '../../../api/order/list'
     import type { SysDictData } from '../../../types/dict'
     import { getDictDataByType } from '../../../api/dict/index'
     import type { UserInfo } from '../../../types/user'
@@ -520,7 +523,7 @@
 	const teamLeaderList = ref<UTSJSONObject[]>([])
 	const teamAllLeaderList = ref<UTSJSONObject[]>([])
 	let teamKeyword = ref<string>("")
-	
+
 	//挂起结束时间
 	const suspendReason = ref<string>('') // 挂起原因
 	const flowList = ref<UTSJSONObject[]>([]) //流转过程
@@ -529,7 +532,7 @@
 	const resumeShow = ref<boolean>(false)
 	const resumeTime = ref<string>('') // 挂起结束时间
 	const showResumeTimePicker = ref<boolean>(false)
-	
+
 	// 监听开始时间和结束时间变化
 	watch(realStartTime, (value: string) => {
 	    console.log('开始时间变化:', value)
@@ -563,7 +566,7 @@
 	        }
 	    }
 	})
-	
+
 	watch(realEndTime, (value: string) => {
 	    console.log('结束时间变化:', value)
 	    // 在这里添加结束时间变化时的处理逻辑
@@ -577,7 +580,7 @@
 		      } else {
 		        resumeShow.value = false
 		      }
-		
+
 		    } else if(suspendTime != '' && realStartTime.value != '' && new Date(suspendTime).getTime() >= new Date(realStartTime.value).getTime()) { // 作业中挂起
 		      if (realStartTime.value != '' && resumeTime.value != '' && new Date(resumeTime.value).getTime() < new Date(realStartTime.value).getTime()) {
 		        resumeShow.value = true
@@ -723,7 +726,10 @@
 	const handleWorkPermitNumChange = async(): Promise<void> => {
 	    if (infoEntry.value == '2') {
 			// 查询工作票编号是否已存在
-			const response = await getOrderList(1, 10, workPermitNum.value, '')
+			const queryParams = {
+				workPermitNum: workPermitNum.value,
+			} as UTSJSONObject;
+			const response = await allListOrder(queryParams)
 			const responseObj = response as UTSJSONObject
 			const rows = responseObj['rows'] as UTSJSONObject[] | null
 			if (rows != null && rows.length > 0) {
@@ -923,14 +929,14 @@
 	  realEndTime.value = value
 	  showEndTimePicker.value = false
 	}
-	
+
 	function onResumeTimeConfirm(value: string) {
 	  // 检查新的结束时间是否小于开始时间
 	  if (resumeTime.value != '' && new Date(realStartTime.value as string) > new Date(value)) {
 	    uni.showToast({ title: '结束时间不能小于开始时间', icon: 'none' })
 	    return
 	  }
-	
+
 	  resumeTime.value = value
 	  showResumeTimePicker.value = false
 	}
@@ -1092,7 +1098,7 @@
 		    });
 		    return false;
 		}
-		
+
 		if(resumeShow.value) {
 			if(resumeTime.value == '') {
 				uni.showToast({
@@ -1151,7 +1157,7 @@
 			isDealing.value = true
 	        // 确保附件URLs是最新的逗号分隔格式
 	        attachmentUrls.value = uploadedFiles.value.map(file => file.fileName).join(',');
-			
+
 			flowList.value = []
 			if (resumeTime.value != '' && resumeInfo.value != null && resumeTime.value != (resumeInfo.value['actionTime'] as string | null)) { //存入新的挂起结束时间
 				resumeInfo.value['actionTime'] = resumeTime.value
@@ -1205,10 +1211,9 @@
 	                icon: 'none'
 	            });
 	        }
-	    } catch (error: any) {
-	        console.error('结单失败:', error);
+	    } catch (error: Error) {
 	        uni.showToast({
-	            title: '结单失败',
+	            title: error.message,
 	            icon: 'none'
 	        });
 	    } finally {
@@ -1319,7 +1324,7 @@
 									realEndTime.value = (misInfo[0]['realEndTime'] as string | null) ?? ''
 									workPermitNum.value = (misInfo[0]['workPermitNum'] as string | null) ?? ''
 									// 查询相关工作班成员
-									await listWorkPerson(misNo.value).then(response => {
+									listWorkPerson(misNo.value).then(response => {
 										const responseObj = response as UTSJSONObject
 										const rows = responseObj['rows'] as UTSJSONObject[] | null
 										workOrderPersonList.value = rows ?? []
@@ -1338,6 +1343,29 @@
 												.map(person => (person.nickName as string | null) ?? '')
 												.join(',');
 											workGroupMemberName.value = nickNames;
+											
+											workOrderPersonList.value.map(person => {
+												// 构造查询参数:username 和 nickName
+												const queryParams = {
+												  userName: person.userName, // 假设person对象有username字段
+												  nickName: person.nickName  // 假设person对象有nickName字段
+												};
+												getUserList(queryParams).then(response => {
+													const responseObj = response as UTSJSONObject
+													const rows = responseObj['rows'] as UTSJSONObject[] | null
+													if (rows == null || rows.length == 0) {
+														let msg = "已匹配到MIS工单,但工作班成员'" + person.nickName + "'在系统中不存在,系统无法自动结单,请检查"
+														if (person.isLeader == 1) {
+														  msg = "已匹配到MIS工单,但工作负责人'" + person.nickName + "'在系统中不存在,系统无法自动结单,请检查"
+														}
+														uni.showToast({
+															title: msg,
+															icon: 'none',
+															duration: 2000 // 自定义显示时间,单位ms
+														});
+													}
+												});
+											})
 										}
 									})
 								}
@@ -1372,7 +1400,7 @@
 						icon: 'none'
 					});
 				}
-				
+
 				flowList.value = data['workOrderFlowList'] as UTSJSONObject[]
 				if (suspendReason.value != '' && flowList.value.length > 0) {
 				  // 获取最后一个 actionType 等于 'resume' 的项
@@ -1382,7 +1410,7 @@
 					// 直接给 resumeTime 赋值,无需 formData
 					resumeTime.value = (lastResumeItem['actionTime'] as string | null) ?? ''
 				  }
-							
+
 				  const lastSuspendItem = flowList.value.findLast(item => (item['actionType'] as string | null) === 'to_approve') as UTSJSONObject | null
 				  if (lastSuspendItem != null) {
 					suspendInfo.value = lastSuspendItem

+ 64 - 39
pages/order/detail/wxFinalize.uvue

@@ -118,7 +118,7 @@
                             <text class="form-label required">开始时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showStartTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showStartTimePicker = false : showStartTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择开始时间"
@@ -136,13 +136,13 @@
                             <text class="form-label required">结束时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showEndTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showEndTimePicker = false : showEndTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择结束时间"
 								    v-model="realEndTime"
 									type="none"
-
+									style="pointer-events: none;"
 								/>
 								<!-- <text class="input-field">
 									{{ realEndTime != '' ? realEndTime : '请选择结束时间' }}
@@ -150,7 +150,7 @@
                             </view>
                         </view>
                     </view>
-					
+
 					<!-- 挂起结束时间 -->
 					<view class="info-item" v-if="resumeInfo != null && resumeShow">
 					    <view class="info-label">
@@ -163,7 +163,7 @@
 								    placeholder="请选择挂起结束时间"
 								    v-model="resumeTime"
 									type="none"
-					
+
 								/>
 					        </view>
 					    </view>
@@ -230,6 +230,7 @@
 							        placeholder="请选择工作负责人"
 							        v-model="teamLeaderName"
 							        @click="showLeaderPicker = true"
+									:disabled="infoEntry == '1'"
 							    />
 							</view>
                         </view>
@@ -317,7 +318,7 @@
 					@cancel="showEndTimePicker = false">
 				</l-date-time-picker>
 			</l-popup>
-			
+
 			<l-popup v-model="showResumeTimePicker" position="bottom" :safe-area-inset-bottom="true" :z-index="10000">
 				<l-date-time-picker
 					title="选择挂起结束时间"
@@ -389,11 +390,11 @@
 								@click="selectMisItem(item, index)"
 							>
 								<!-- <text class="option-text">{{ option.label }}</text> -->
-								<view> 
+								<view>
 									<text class="option-text">MIS工单编码</text>
 									<text class="option-text">工作票编号</text>
 								</view>
-								<view> 	
+								<view>
 									<text class="option-text">{{ ((item['misNo'] as string | null) ?? '-')}}</text>
 									<text class="option-text">{{ item['workPermitNum'] as string | null ?? '-' }}</text>
 								</view>
@@ -487,7 +488,7 @@
     import type { acceptOrderInfo } from '../../../types/order'
     import type { WorkOrderFlow } from '../../../types/flow'
     import { getOrderInfoById, getRepairOrderInfoById, returnRepairOrder, repairFinishOrder } from '../../../api/order/detail'
-    import { getMisInfoList, listWorkPerson, getOrderList, listAutoMisInfo } from '../../../api/order/list'
+    import { getMisInfoList, listWorkPerson, getOrderList, listAutoMisInfo, allListOrder } from '../../../api/order/list'
     import type { SysDictData } from '../../../types/dict'
     import { getDictDataByType } from '../../../api/dict/index'
     import type { UserInfo } from '../../../types/user'
@@ -569,7 +570,6 @@
 
     // 监听开始时间和结束时间变化
     watch(realStartTime, (value: string) => {
-        console.log('开始时间变化:', value)
         // 在这里添加开始时间变化时的处理逻辑
         if (resumeInfo.value != null && value != '') {
             const suspendTime = (suspendInfo.value?.['actionTime'] as string | null) ?? ''
@@ -602,7 +602,6 @@
     })
 
     watch(realEndTime, (value: string) => {
-        console.log('结束时间变化:', value)
         // 在这里添加结束时间变化时的处理逻辑
 		if (resumeInfo.value != null && value != '') {
 		    const suspendTime = (suspendInfo.value?.['actionTime'] as string | null) ?? ''
@@ -614,7 +613,7 @@
 		      } else {
 		        resumeShow.value = false
 		      }
-		
+
 		    } else if(suspendTime != '' && realStartTime.value != '' && new Date(suspendTime).getTime() >= new Date(realStartTime.value).getTime()) { // 作业中挂起
 		      if (realStartTime.value != '' && resumeTime.value != '' && new Date(resumeTime.value).getTime() < new Date(realStartTime.value).getTime()) {
 		        resumeShow.value = true
@@ -819,12 +818,15 @@
             workGroupMemberName.value = '';
         }
     };
-	
+
 	// 工作票编号变化处理
 	const handleWorkPermitNumChange = async(): Promise<void> => {
 	    if (infoEntry.value == '2') {
 			// 查询工作票编号是否已存在
-			const response = await getOrderList(1, 10, workPermitNum.value, '')
+			const queryParams = {
+				workPermitNum: workPermitNum.value,
+			} as UTSJSONObject;
+			const response = await allListOrder(queryParams)
 			const responseObj = response as UTSJSONObject
 			const rows = responseObj['rows'] as UTSJSONObject[] | null
 			if (rows != null && rows.length > 0) {
@@ -1024,14 +1026,14 @@
 	  realEndTime.value = value
 	  showEndTimePicker.value = false
 	}
-	
+
 	function onResumeTimeConfirm(value: string) {
 	  // 检查新的结束时间是否小于开始时间
 	  if (resumeTime.value != '' && new Date(realStartTime.value as string) > new Date(value)) {
 	    uni.showToast({ title: '结束时间不能小于开始时间', icon: 'none' })
 	    return
 	  }
-	
+
 	  resumeTime.value = value
 	  showResumeTimePicker.value = false
 	}
@@ -1297,13 +1299,13 @@
 			isDealing.value = true
 	        // 确保附件URLs是最新的逗号分隔格式
 	        attachmentUrls.value = uploadedFiles.value.map(file => file.fileName).join(',');
-			
+
 			flowList.value = []
 			if (resumeTime.value != '' && resumeInfo.value != null && resumeTime.value != (resumeInfo.value['actionTime'] as string | null)) { //存入新的挂起结束时间
 				resumeInfo.value['actionTime'] = resumeTime.value
 				flowList.value.push(resumeInfo.value as UTSJSONObject)
 			}
-	
+
 	        const finishData = {
 	            id: orderId.value,
 	            orderType: orderType.value,
@@ -1346,17 +1348,16 @@
 	            setTimeout(() => {
 	                uni.navigateBack();
 	            }, 800);
-	        } else {
-	            const msg = resultObj['msg'] as string;
-	            uni.showToast({
-	                title: msg.length > 0 ? msg : '结单失败',
-	                icon: 'none'
-	            });
-	        }
-	    } catch (error: any) {
-	        console.error('结单失败:', error);
-	        uni.showToast({
-	            title: '结单失败',
+          } else {
+              const msg = resultObj['msg'] as string;
+              uni.showToast({
+                  title: msg.length > 0 ? msg : '结单失败',
+                  icon: 'none'
+              });
+          }
+		} catch (error: Error) {
+			uni.showToast({
+	            title: error.message,
 	            icon: 'none'
 	        });
 	    } finally {
@@ -1428,7 +1429,7 @@
 					}
 					uploadedFiles.value = fileArr
 				}
-				pauseTime.value = (data['pauseTime'] as string | null) ?? ''
+				pauseTime.value = (data['occurTime'] as string | null) ?? ''
 				restartTime.value = (data['restartTime'] as string | null) ?? ''
 
 				if(pauseTime.value != '' && restartTime.value != '') {
@@ -1449,7 +1450,7 @@
 							// 有工作票号提示
 							const workPermitNum2 = misInfo[0]['workPermitNum'] as string | null
 							const misNo2 = misInfo[0]['misNo'] as string | null
-
+							
 							if (workPermitNum2 != null && workPermitNum2.length > 0) {
 
 								const response = await getOrderList(1, 10, misNo2 ?? '', '')
@@ -1469,7 +1470,7 @@
 									realEndTime.value = (misInfo[0]['realEndTime'] as string | null) ?? ''
 									workPermitNum.value = (misInfo[0]['workPermitNum'] as string | null) ?? ''
 									// 查询相关工作班成员
-									await listWorkPerson(misNo.value).then(response => {
+									listWorkPerson(misNo.value).then(response => {
 										const responseObj = response as UTSJSONObject
 										const rows = responseObj['rows'] as UTSJSONObject[] | null
 										repairOrderPersonList.value = rows ?? []
@@ -1488,6 +1489,30 @@
 												.map(person => (person.nickName as string | null) ?? '')
 												.join(',');
 											workGroupMemberName.value = nickNames;
+											
+											repairOrderPersonList.value.map(person => {
+												// 构造查询参数:username 和 nickName
+												const queryParams = {
+												  userName: person.userName, // 假设person对象有username字段
+												  nickName: person.nickName  // 假设person对象有nickName字段
+												};
+												getUserList(queryParams).then(response => {
+													const responseObj = response as UTSJSONObject
+													const rows = responseObj['rows'] as UTSJSONObject[] | null
+													if (rows == null || rows.length == 0) {
+														let msg = "已匹配到MIS工单,但工作班成员'" + person.nickName + "'在系统中不存在,系统无法自动结单,请检查"
+														if (person.isLeader == 1) {
+														  msg = "已匹配到MIS工单,但工作负责人'" + person.nickName + "'在系统中不存在,系统无法自动结单,请检查"
+														}
+														uni.showToast({
+															title: msg,
+															icon: 'none',
+															duration: 2000 // 自定义显示时间,单位ms
+														});
+													}
+												});
+											})
+											
 										}
 									})
 								}
@@ -1522,7 +1547,7 @@
 						icon: 'none'
 					});
 				}
-				
+
 				flowList.value = data['repairOrderFlowList'] as UTSJSONObject[]
 				if (suspendReason.value != '' && flowList.value.length > 0) {
 				  // 获取最后一个 actionType 等于 'resume' 的项
@@ -1532,12 +1557,12 @@
 					// 直接给 resumeTime 赋值,无需 formData
 					resumeTime.value = (lastResumeItem['actionTime'] as string | null) ?? ''
 				  }
-			
+
 				  const lastSuspendItem = flowList.value.findLast(item => (item['actionType'] as string | null) === 'to_approve') as UTSJSONObject | null
 				  if (lastSuspendItem != null) {
 					suspendInfo.value = lastSuspendItem
 				  }
-			
+
 				}
             } else {
                 const msg = resultObj['msg'] as string | null
@@ -1906,19 +1931,19 @@
 	.picker-option.selected {
 	    background-color: #f8f9fa;
 	}
-	
-	
+
+
 	.picker-mis-option {
 	    justify-content: space-between;
 	    align-items: center;
 	    padding: 24rpx 30rpx;
 	    border-bottom: 1rpx solid #f0f0f0;
 	}
-	
+
 	.picker-mis-option:last-child {
 	    border-bottom: none;
 	}
-	
+
 	.picker-mis-option.selected {
 	    background-color: #f8f9fa;
 	}

+ 16 - 8
pages/order/index.uvue

@@ -11,7 +11,7 @@
         </view>
 
 		<view class="status-bar">
-			<scroll-view class="scroll-view_H" direction="horizontal" show-scrollbar="false">
+			<scroll-view class="scroll-view_H" direction="horizontal" :show-scrollbar="false">
 				<view class="scroll-view-item_H uni-bg-red">
 					<text class="status-txt" :class="{'stauts-sel': currentStatus === 'all'}" @click="switchStatus('all')">全部</text>
 				</view>
@@ -68,7 +68,7 @@
 							<view
 								v-if="(getOrderStatus(item) == 'assigned' || getOrderStatus(item) == 'return') && canHandleOrder(item,'accept')"
 								class="btn-primary info-value"
-								@click.stop="handleItemClick(item,'')"
+								@click.stop="handleItemClick(item,'accept')"
 								>
 								<text class="btn-text">接单</text>
 							</view>
@@ -643,13 +643,13 @@ const canHandleOrder = (item: any | null, buttonType: string | ''): boolean => {
 			permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:restart'] : ['gxt:repairOrder:restart']
 		}
 	} else if(orderItem.workOrderStatus == 'to_finish') {
-		if(buttonType != '' && buttonType == "suspend" && (orderItem.teamLeaderId == parseInt(userId.value) || roles.value.includes("管理员"))) {
+		if(buttonType != '' && buttonType == "suspend" ) {
 			// 挂起
 			permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend']
 		} else if(buttonType != '' && buttonType == "return" && orderItem.orderType == 1 && (orderItem.teamLeaderId == parseInt(userId.value) || roles.value.includes("管理员"))) {
 			// 退回
 			permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:return'] : ['gxt:repairOrder:return']
-		} else if(buttonType != '' && buttonType == "finalize" && orderItem.orderType == 1 && (orderItem.teamLeaderId == parseInt(userId.value) || roles.value.includes("管理员"))) {
+		} else if(buttonType != '' && buttonType == "finalize" && orderItem.orderType == 1) {
 			// 复启
 			permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:complete'] : ['gxt:repairOrder:finalize']
 		  // } else if(buttonType != '' && buttonType == "complete" && (orderItem.teamLeaderId == parseInt(userId.value) || roles.value.includes("管理员"))) {
@@ -774,10 +774,18 @@ const canHandleOrder = (item: any | null, buttonType: string | ''): boolean => {
 			    url: `/pages/order/detail/resumeIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
 			})
 		} else if(orderItem.workOrderStatus == 'return') {
-			// 跳转到退回页面
-			uni.navigateTo({
-			    url: `/pages/order/detail/returnIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
-			})
+			if(buttonType != '' && buttonType == "accept") {
+				// 跳转到接单页面
+				uni.navigateTo({
+				    url: `/pages/order/detail/acceptIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
+				})
+			} else if(buttonType != '' && buttonType == "acceptReturn") {
+				// 跳转到退回页面
+				uni.navigateTo({
+				    url: `/pages/order/detail/returnIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
+				})
+			}
+
 		} else if(orderItem.workOrderStatus == 'completed') {
 			if(buttonType != '' && buttonType == "restart") {
 				// 跳转到复运页面

+ 13 - 6
pages/order/pendingOrder.uvue

@@ -34,9 +34,9 @@
 						</view>
 						<view class="btn-group">
 							<view
-								v-if="getOrderStatus(item) == 'assigned' && canHandleOrder(item,'accept')"
+								v-if="(getOrderStatus(item) == 'assigned' || getOrderStatus(item) == 'return') && canHandleOrder(item,'accept')"
 								class="btn-primary info-value"
-								@click.stop="handleItemClick(item,'')"
+								@click.stop="handleItemClick(item,'accept')"
 								>
 								<text class="btn-text">接单</text>
 							</view>
@@ -668,10 +668,17 @@ type acceptOrderInfoExtend = {
 			    url: `/pages/order/detail/resumeIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
 			})
 		} else if(orderItem.workOrderStatus == 'return') {
-			// 跳转到退回页面
-			uni.navigateTo({
-			    url: `/pages/order/detail/returnIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
-			})
+			if(buttonType != '' && buttonType == "accept") {
+				// 跳转到接单页面
+				uni.navigateTo({
+				    url: `/pages/order/detail/acceptIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
+				})
+			} else if(buttonType != '' && buttonType == "acceptReturn") {
+				// 跳转到退回页面
+				uni.navigateTo({
+				    url: `/pages/order/detail/returnIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
+				})
+			}
 		} else if(orderItem.workOrderStatus == 'completed') {
 			if(buttonType != '' && buttonType == "restart") {
 				// 跳转到复运页面

BIN
static/css/uniicons.ttf


+ 2 - 2
utils/request.uts

@@ -14,10 +14,10 @@ export type RequestConfig = {
 
 // 基础 URL
 // const BASE_URL = "http://192.168.110.105:8080";
-// const BASE_URL = "http://222.243.138.146:5095" //测试服务器;
+const BASE_URL = "http://222.243.138.146:5095" //测试服务器;
 	// const BASE_URL = "http://222.243.138.146:5097" //正式服务器;
 // const BASE_URL = "http://10.170.129.135:8089";
-const BASE_URL = "http://222.243.138.146:5096/prod-api"
+// const BASE_URL = "http://222.243.138.146:5096/prod-api"
 // const BASE_URL = "http://10.170.129.135/prod-api";
 
 /**

+ 22 - 17
utils/upload.uts

@@ -84,23 +84,28 @@ export const uploadFile = (filePath: string, businessType: string): Promise<Uplo
                         const result = JSON.parse(resData) as UTSJSONObject
                         // 获取第一个文件信息
                         const fileInfo = result as UTSJSONObject
-                        const fileName = fileInfo['fileName'] as string
-                        
-                        // 构建完整的 URL
-                        const url = getFileViewUrl(fileName)
-                        
-                        // 返回 UploadResponse
-                        const uploadResult: UploadResponse = {
-                            url: url,
-                            fileId: fileName,
-                            fileName: fileName,
-                            filePath: filePath,
-                            fileSize: 0,
-                            fileExt: '',
-                            businessType: businessType
-                        }
-                        
-                        resolve(uploadResult)
+						let code = fileInfo["code"] as number | null;
+						let msg = fileInfo["msg"] as string | null;
+						if (code == 200) {
+							const fileName = fileInfo['fileName'] as string
+							// 构建完整的 URL
+							const url = getFileViewUrl(fileName)
+							// 返回 UploadResponse
+							const uploadResult: UploadResponse = {
+							    url: url,
+							    fileId: fileName,
+							    fileName: fileName,
+							    filePath: filePath,
+							    fileSize: 0,
+							    fileExt: '',
+							    businessType: businessType
+							}
+							resolve(uploadResult)
+						}else{
+							const errorMsg = msg != null ? msg : "请求失败";
+							console.error('响应数据解析失败:', errorMsg)
+							reject(new Error(errorMsg))
+						}
                     } catch (e: any) {
                         console.error('响应数据解析失败:', e)
                         reject(new Error('响应数据解析失败'))