Pārlūkot izejas kodu

列表办理按钮、待评分工单

HD_wangm 4 mēneši atpakaļ
vecāks
revīzija
7c5f11595d

+ 14 - 0
api/score/index.uts

@@ -46,4 +46,18 @@ export const listMobileOrderScores = (query: UTSJSONObject | null): Promise<any>
         method: 'GET',
         data: query
     })
+}
+
+/*
+ * 获取待评分工单列表
+ * @param page 页码
+ * @param rows 每页数量
+ */
+export const listMyRate = (query: UTSJSONObject | null): Promise<any> => {
+    let url = '/mobile/order/listMyRate'
+    return request({
+        url: url,
+        method: 'GET',
+		data: query
+    })
 }

+ 1 - 1
pages/index/index.uvue

@@ -136,7 +136,7 @@
     import { getUserInfo } from '../../utils/storage'
     import FlowChart from '../../components/index/flow-chart/flow-chart.uvue'
     import { getOrderList, almostOverdueList, overdueList, pendingList } from '../../api/order/list'
-    import { listMobileOrderScores } from '../../api/score/index'
+    import { listMyRate } from '../../api/score/index'
 	import type { SysDictData } from '../../types/dict'
 	import { getDictDataByType } from '../../api/dict/index'
 	// import {startKeepAlive,stopKeepAlive} from '@/uni_modules/ygtx-keepService'

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

@@ -153,7 +153,7 @@
         </scroll-view>
 
         <!-- 接单按钮 -->
-        <view class="accept-button-container" v-if="checkPermi(['gxt:maintenance:order:accept','gxt:repairOrder:accept'])">
+        <view class="accept-button-container" v-if="checkPermi(detailData.orderType == 2 ? ['gxt:maintenance:order:accept'] : ['gxt:repairOrder:accept'] )">
             <button class="accept-button" @click="handleAcceptOrder">接 单</button>
         </view>
 
@@ -174,7 +174,7 @@
 	import { getUserList } from '../../../api/user/list'
 	import type { UserInfo } from '../../../types/user'
 	import {checkPermi} from '../../../utils/storage'
-
+	
 	const teamLeaderName = ref<string>("")
 	const statusDictList = ref<SysDictData[]>([]) // 工单状态字典列表
 	// 添加字典加载状态

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

@@ -116,7 +116,7 @@
         </scroll-view>
 
         <!-- 接单按钮 -->
-        <view class="accept-button-container" v-if="checkPermi(['gxt:maintenance:order:approve','gxt:repairOrder:approve'])">
+        <view class="accept-button-container" v-if="checkPermi(detailData.orderType == 2 ? ['gxt:maintenance:order:approve'] : ['gxt:repairOrder:approve'])">
 			<button class="reject-btn" @click="handleRejectOrder">驳回</button>
             <button class="accept-button" @click="handleAcceptOrder">通过</button>
         </view>

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

@@ -77,7 +77,7 @@
         </scroll-view>
 
         <!-- 接单按钮 -->
-        <view class="accept-button-container" v-if="checkPermi(['gxt:maintenance:order:resume','gxt:repairOrder:resume'])">
+        <view class="accept-button-container" v-if="checkPermi(detailData.orderType == 2 ? ['gxt:maintenance:order:resume'] : ['gxt:repairOrder:resume'])">
             <button class="accept-button" @click="handleResumeOrder">恢 复</button>
         </view>
 

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

@@ -127,7 +127,7 @@
         </scroll-view>
 
         <!-- 接单按钮 -->
-        <view class="accept-button-container" v-if="checkPermi(['gxt:maintenance:order:suspend','gxt:repairOrder:suspend'])">
+        <view class="accept-button-container" v-if="checkPermi(detailData.orderType == 2 ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend'])">
             <button class="accept-button" @click="handleSuspendOrder">挂 起</button>
         </view>
 

+ 54 - 32
pages/order/index.uvue

@@ -59,22 +59,36 @@
 							<view class="info-label">
 								<text class="text-gray">{{ getDisplayTime(item) }}</text>
 							</view>
-							<!-- <view class="info-value">
+							<view class="info-value">
 								<button
-									v-if="currentStatus === 'assigned'"
+									v-if="currentStatus === 'assigned' && canHandleOrder(item)"
 									class="btn-primary info-value"
-									@click.stop="acceptOrder(item)"
+									@click.stop="handleItemClick(item)"
 									>
 									接单
 								</button>
 								<button
-									v-else-if="currentStatus === 'to_approve'"
+									v-else-if="currentStatus === 'to_approve' && canHandleOrder(item)"
 									class="btn-primary info-value"
-									@click="approveOrder(item)"
+									@click.stop="handleItemClick(item)"
 									>
 									审批
 								</button>
-							</view> -->
+								<button
+									v-else-if="currentStatus === 'to_finish' && canHandleOrder(item)"
+									class="btn-primary info-value"
+									@click.stop="handleItemClick(item)"
+									>
+									挂起
+								</button>
+								<button
+									v-else-if="currentStatus === 'suspended' && canHandleOrder(item)"
+									class="btn-primary info-value"
+									@click.stop="handleItemClick(item)"
+									>
+									恢复
+								</button>
+							</view>
 						</view>
                     </view>
                 </view>
@@ -423,10 +437,36 @@ const statusConfig: StatusItem[] = [
 	const handleSearchOnBlur = (): void => {
 		handleSearch()
 	}
+	
+	// 方法:判断当前工单是否显示操作按钮(基于 orderType)
+	const canHandleOrder = (item: any | null): boolean => {
+	  if (item == null) return false
+	  let permit: string[] = []
+	  const orderItem = item as acceptOrderInfo
+	  if(currentStatus.value === '' || currentStatus.value === 'completed' || currentStatus.value === 'all') {
+	  	// 传递orderType参数以便详情页决定调用哪个API
+	  	
+	  } else if(orderItem.workOrderStatus == 'assigned') {
+	  	// 接单
+	  	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:accept'] : ['gxt:repairOrder:accept']
+	  } else if(orderItem.workOrderStatus == 'to_finish') {
+	  	// 挂起
+	  	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend']
+	  } else if(orderItem.workOrderStatus == 'to_approve') {
+	  	// 审批
+	  	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:approve'] : ['gxt:repairOrder:approve']
+	  } else if(orderItem.workOrderStatus == 'suspended') {
+	  	// 恢复
+	  	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:resume'] : ['gxt:repairOrder:resume']
+	  }
+	  
+	  // const orderType = (item as acceptOrderInfo).orderType
+	  return checkPermi(permit)
+	}
 
 
     // 点击列表项
-    const handleItemClick = (item: any | null, index: number): void => {
+    const handleItemClick = (item: any | null): void => {
         if (item == null) return
         const orderItem = item as acceptOrderInfo
 		if(currentStatus.value === '' || currentStatus.value === 'completed' || currentStatus.value === 'all') {
@@ -458,29 +498,6 @@ const statusConfig: StatusItem[] = [
 
     }
 
-    // 接单操作
-    const acceptOrder = (item: any | null): void => {
-        if (item == null) return
-        const orderItem = item as acceptOrderInfo
-        console.log('接单操作:', orderItem.id)
-        // 跳转到接单页面
-        uni.navigateTo({
-            url: `/pages/order/detail/acceptIndex?id=${orderItem.id}&orderType=${orderItem.orderType}`
-        })
-    }
-
-    // 审批操作
-    const approveOrder = (item: any | null): void => {
-        if (item == null) return
-        const orderItem = item as acceptOrderInfo
-        console.log('审批操作:', orderItem.id)
-        // 这里可以添加实际的审批逻辑
-        uni.showToast({
-            title: '审批成功',
-            icon: 'success'
-        })
-    }
-
     // 查看工单详情
     const showWorkOrderDetail = (item: any | null): void => {
         if (item == null) return
@@ -644,8 +661,13 @@ const statusConfig: StatusItem[] = [
     }
 
 	.btn-primary {
-		font-size: 14px;
-	    background-color: #165DFF;
+		z-index: 999;
+		border-radius: 10rpx;
+		font-size: 24rpx;
+		white-space: nowrap;
+		margin-left: 20rpx;
+		background-color: #165DFF;
+		line-height: 45rpx;
 	    color: #ffffff;
 	}
 .item-header {

+ 32 - 1
pages/order/overdue.uvue

@@ -31,6 +31,15 @@
 							<view class="info-label">
 								<text class="text-gray">{{ getCreateTime(item) }}</text>
 							</view>
+							<view class="info-value">
+								<button
+									v-if="canHandleOrder(item)"
+									class="btn-primary info-value"
+									@click.stop="handleItemClick(item)"
+									>
+									接单
+								</button>
+								</view>
 						</view>
                     </view>
                 </view>
@@ -45,6 +54,7 @@ import type { acceptOrderInfo } from '../../types/order'
 import type { SysDictData } from '../../types/dict'
 import { overdueList } from '../../api/order/list'
 import { getDictDataByType } from '../../api/dict/index'
+import {checkPermi} from '../../utils/storage'
 
     // 列表数据
     const dataList = ref<acceptOrderInfo[]>([])
@@ -59,6 +69,16 @@ import { getDictDataByType } from '../../api/dict/index'
 
 	// 添加字典加载状态
 	const dictLoaded = ref<boolean>(false)
+	
+	// 方法:判断当前工单是否显示操作按钮(基于 orderType)
+	const canHandleOrder = (item: any | null): boolean => {
+	    if (item == null) return false
+	    let permit: string[] = []
+	    const orderItem = item as acceptOrderInfo
+	    // 接单
+	  	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:accept'] : ['gxt:repairOrder:accept']
+	    return checkPermi(permit)
+	}
 
 	// 获取工单状态字典列表
 	const loadStatusDictList = async (): Promise<void> => {
@@ -281,7 +301,7 @@ import { getDictDataByType } from '../../api/dict/index'
     }
 
     // 点击列表项
-    const handleItemClick = (item: any | null, index: number): void => {
+    const handleItemClick = (item: any | null): void => {
         if (item == null) return
         const orderItem = item as acceptOrderInfo
 		// 跳转到工单详情页
@@ -483,6 +503,17 @@ import { getDictDataByType } from '../../api/dict/index'
 	border-color: #c2e7b0;
 }
 
+.btn-primary {
+	z-index: 999;
+	border-radius: 10rpx;
+	font-size: 24rpx;
+	white-space: nowrap;
+	margin-left: 20rpx;
+	background-color: #165DFF;
+	line-height: 45rpx;
+	color: #ffffff;
+}
+
 // /* 超时 */
 // .status-overdue {
 // 	background-color: #fff2f0;

+ 86 - 3
pages/order/pendingOrder.uvue

@@ -31,6 +31,36 @@
 							<view class="info-label">
 								<text class="text-gray">{{ getDisplayTime(item) }}</text>
 							</view>
+							<view class="info-value">
+								<button
+									v-if="getOrderStatus(item) == 'assigned' && canHandleOrder(item)"
+									class="btn-primary info-value"
+									@click.stop="handleItemClick(item)"
+									>
+									接单
+								</button>
+								<button
+									v-else-if="getOrderStatus(item) == 'to_approve' && canHandleOrder(item)"
+									class="btn-primary info-value"
+									@click.stop="handleItemClick(item)"
+									>
+									审批
+								</button>
+								<!-- <button
+									v-else-if="getOrderStatus(item) == 'to_finish' && canHandleOrder(item)"
+									class="btn-primary info-value"
+									@click.stop="handleItemClick(item)"
+									>
+									挂起
+								</button> -->
+								<button
+									v-else-if="getOrderStatus(item) == 'suspended' && canHandleOrder(item)"
+									class="btn-primary info-value"
+									@click.stop="handleItemClick(item)"
+									>
+									恢复
+								</button>
+							</view>
 						</view>
                     </view>
                 </view>
@@ -45,6 +75,7 @@ import type { acceptOrderInfo } from '../../types/order'
 import type { SysDictData } from '../../types/dict'
 import { pendingList } from '../../api/order/list'
 import { getDictDataByType } from '../../api/dict/index'
+import {checkPermi} from '../../utils/storage'
 
     // 列表数据
     const dataList = ref<acceptOrderInfo[]>([])
@@ -59,6 +90,35 @@ import { getDictDataByType } from '../../api/dict/index'
 
 	// 添加字典加载状态
 	const dictLoaded = ref<boolean>(false)
+	
+	const getOrderStatus = (item: any | null): string => {
+		if (item == null) return ''
+		const orderItem = item as acceptOrderInfo
+		return orderItem.workOrderStatus ?? ''
+	}
+	
+	// 方法:判断当前工单是否显示操作按钮(基于 orderType)
+	const canHandleOrder = (item: any | null): boolean => {
+	  if (item == null) return false
+	  let permit: string[] = []
+	  const orderItem = item as acceptOrderInfo
+	  if(orderItem.workOrderStatus == 'assigned') {
+	  	// 接单
+	  	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:accept'] : ['gxt:repairOrder:accept']
+	  // } else if(orderItem.workOrderStatus == 'to_finish') {
+	  // 	// 挂起
+	  // 	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend']
+	  } else if(orderItem.workOrderStatus == 'to_approve') {
+	  	// 审批
+	  	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:approve'] : ['gxt:repairOrder:approve']
+	  } else if(orderItem.workOrderStatus == 'suspended') {
+	  	// 恢复
+	  	permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:resume'] : ['gxt:repairOrder:resume']
+	  }
+	  
+	  // const orderType = (item as acceptOrderInfo).orderType
+	  return checkPermi(permit)
+	}
 
 	// 获取工单状态字典列表
 	const loadStatusDictList = async (): Promise<void> => {
@@ -118,7 +178,6 @@ import { getDictDataByType } from '../../api/dict/index'
             if (shouldRefresh) {
                 page.value = 1
             }
-			console.log("searchKeyword===" + keyword.value)
             // 调用 API,传递关键字参数
             const searchKeyword = keyword.value.length > 0 ? keyword.value : null
 
@@ -298,12 +357,11 @@ import { getDictDataByType } from '../../api/dict/index'
     // 搜索
     const handleSearch = (): void => {
         page.value = 1
-		console.log("======搜索=====" + keyword.value)
         loadData(true as boolean | null)
     }
 
     // 点击列表项
-    const handleItemClick = (item: any | null, index: number): void => {
+    const handleItemClick = (item: any | null): void => {
         if (item == null) return
         const orderItem = item as acceptOrderInfo
 		if(orderItem.workOrderStatus == 'assigned') {
@@ -521,6 +579,31 @@ import { getDictDataByType } from '../../api/dict/index'
 	border-color: #c2e7b0;
 }
 
+/* 退回 */
+.status-return {
+	background-color: #fff2f0;
+	color: #ff4d4f;
+	border-color: #ffccc7;
+}
+
+/* 退回 */
+.status-accept_return {
+	background-color: #fff2f0;
+	color: #ff4d4f;
+	border-color: #ffccc7;
+}
+
+.btn-primary {
+	z-index: 999;
+	border-radius: 10rpx;
+	font-size: 24rpx;
+	white-space: nowrap;
+	margin-left: 20rpx;
+	background-color: #165DFF;
+	line-height: 45rpx;
+	color: #ffffff;
+}
+
 // /* 超时 */
 // .status-overdue {
 // 	background-color: #fff2f0;

+ 3 - 3
pages/score/pending.uvue

@@ -188,12 +188,12 @@
 
 <script setup lang="uts">
     import { ref, computed, onMounted } from 'vue'
-    import { listOrderScores, getOrderScoreStatistics, listMobileOrderScores } from '@/api/score/index'
+    import { listOrderScores, getOrderScoreStatistics, listMobileOrderScores, listMyRate } from '@/api/score/index'
     import { getDictDataByType } from '@/api/dict/index'
     import type { SysDictData } from '@/types/dict'
 
     // 数据状态
-    const searchKeyword = ref<string>('')
+    let searchKeyword = ref<string>('')
     const statusFilter = ref<string>('')
     const selectedMonth = ref<string>('current')
     const loading = ref<boolean>(false)
@@ -551,7 +551,7 @@
         month: monthValue
       }
 
-      listMobileOrderScores(params).then((response: any) => {
+      listMyRate(params).then((response: any) => {
         // 提取响应数据
         const resultObj = response as UTSJSONObject
         console.log('API响应数据:', resultObj)