|
|
@@ -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;
|