From d4e5744f3df7c90b44a900d1f61f5850b199b47d Mon Sep 17 00:00:00 2001 From: zhuguifei <zhuguifei@zhuguifeideiMac.local> Date: 星期二, 04 三月 2025 10:20:59 +0800 Subject: [PATCH] 完成维修工单评价功能 --- eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue | 92 ++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 84 insertions(+), 8 deletions(-) diff --git a/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue b/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue index d4f5852..5a7d45b 100644 --- a/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue +++ b/eims-ui/apps/web-antd/src/views/eims/repair-res/index.vue @@ -1,10 +1,12 @@ <script setup lang="ts"> import type { Recordable } from '@vben/types'; -import { onMounted } from 'vue'; +import { computed, onMounted, ref } from 'vue'; +import { useAccess } from '@vben/access'; import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui'; import { $t } from '@vben/locales'; +import { useUserStore } from '@vben/stores'; import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils'; import { Modal, Popconfirm, Space } from 'ant-design-vue'; @@ -12,11 +14,15 @@ import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table'; import { delRepairRes, listRepairRes, repairResExport } from '#/api/eims/repair-res'; import { getDeptTree, userList } from '#/api/system/user'; +import { REPAIR_RES_STATUS } from '#/constants/dict'; import { commonDownloadExcel } from '#/utils/file/download'; +import RepairRecord from '../repair-record/index.vue'; import { columns, querySchema } from './data'; import repairResDrawer from './repair-res-drawer.vue'; -import { useUserStore } from '@vben/stores'; + +import repairFbDrawer from '../repair-fb/repair-fb-drawer.vue' +import fbPreviewDrawer from '../repair-fb/fb-preview-drawer.vue' const userStore = useUserStore(); const userId = userStore.userInfo?.userId; @@ -74,17 +80,41 @@ id: 'eims-repair-res-index' }; +const resId = ref<string>(); const [BasicTable, tableApi] = useVbenVxeGrid({ formOptions, gridOptions, gridEvents: { - sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams) + sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams), + cellClick: (e: any) => { + const { row } = e; + resId.value = row.id; + } } }); const [RepairResDrawer, repairResDrawerApi] = useVbenDrawer({ connectedComponent: repairResDrawer }); + +const [RepairFbDrawer, repairFbDrawerApi] = useVbenDrawer({ + connectedComponent: repairFbDrawer +}); + +const [FbPreviewDrawer, fbPreviewDrawerApi] = useVbenDrawer({ + connectedComponent: fbPreviewDrawer +}); + +function handleAddFb(record: Recordable<any>) { + repairFbDrawerApi.setData({ resId: record.id, resCode: record.resCode, fbUser: userId, fbDept: deptId}); + repairFbDrawerApi.open(); +} + +function handleDetailFb(record: Recordable<any>) { + fbPreviewDrawerApi.setData({ id: record.fbId }); + fbPreviewDrawerApi.open(); +} + function handleAdd() { repairResDrawerApi.setData({ resUser: userId, resDept: deptId }); @@ -94,6 +124,31 @@ async function handleEdit(record: Recordable<any>) { repairResDrawerApi.setData({ id: record.id }); repairResDrawerApi.open(); +} + +async function handleEditStatus(record: Recordable<any>, status: string) { + repairResDrawerApi.setData({ id: record.id, action: status, status }); + repairResDrawerApi.open(); +} + +const { hasAccessByRoles } = useAccess(); +const isSuperAdmin = computed(() => hasAccessByRoles(['superadmin'])); + + +function pingjiaAdd(row: any) { + return (isSuperAdmin.value || row.reqUser === userId) && row.status === REPAIR_RES_STATUS.WANCHENG && !row.fbId; +} + +function pingjiaDetail(row: any) { + return (isSuperAdmin.value || row.reqUser === userId) && row.status === REPAIR_RES_STATUS.WANCHENG && row.fbId; +} + +function weixiu(row: any) { + return (isSuperAdmin.value || row.resUser === userId) && row.status === REPAIR_RES_STATUS.YIJIEDAN; +} + +function wancheng(row: any) { + return (isSuperAdmin.value || row.resUser === userId) && row.status === REPAIR_RES_STATUS.WEIXIU; } async function handleDelete(row: Recordable<any>) { @@ -195,8 +250,8 @@ <template> <Page :auto-content-height="true"> - <div class="flex h-full gap-[8px]"> - <BasicTable class="flex-1 overflow-hidden" table-title="缁翠慨宸ュ崟鍒楄〃"> + <div class="flex h-full gap-[8px] flex-col"> + <BasicTable class="h-2/3" table-title="缁翠慨宸ュ崟鍒楄〃"> <template #toolbar-tools> <Space> <a-button v-access:code="['eims:repairRes:export']" @click="handleDownloadExcel"> @@ -211,14 +266,32 @@ > {{ $t('pages.common.delete') }} </a-button> - <a-button type="primary" v-access:code="['eims:repairRes:add']" @click="handleAdd"> - {{ $t('pages.common.add') }} - </a-button> + <a-button type="primary" v-access:code="['eims:repairRes:add']" @click="handleAdd"> 鎺ュ崟</a-button> </Space> </template> <template #action="{ row }"> <Space> + <ghost-button v-if="pingjiaAdd(row)" class="btn-success" v-access:code="['eims:repairRes:edit']" @click.stop="handleAddFb(row)"> 璇勪环 </ghost-button> + <ghost-button v-if="pingjiaDetail(row)" class="btn-success" v-access:code="['eims:repairRes:edit']" @click.stop="handleDetailFb(row)"> 闃呰瘎 </ghost-button> + <ghost-button + v-if="weixiu(row)" + class="btn-success" + v-access:code="['eims:repairRes:edit']" + @click.stop="handleEditStatus(row, REPAIR_RES_STATUS.WEIXIU)" + > + 缁翠慨 + </ghost-button> + + <ghost-button + v-if="wancheng(row)" + class="btn-success" + v-access:code="['eims:repairRes:edit']" + @click.stop="handleEditStatus(row, REPAIR_RES_STATUS.WANCHENG)" + > + 瀹屾垚 + </ghost-button> + <ghost-button v-access:code="['eims:repairRes:edit']" @click.stop="handleEdit(row)"> {{ $t('pages.common.edit') }} </ghost-button> @@ -230,7 +303,10 @@ </Space> </template> </BasicTable> + <RepairRecord :res-id="resId" class="h-1/3" table-title="缁翠慨璁板綍" /> </div> <RepairResDrawer @reload="tableApi.query()" /> + <RepairFbDrawer @reload="tableApi.query()" /> + <FbPreviewDrawer /> </Page> </template> -- Gitblit v1.9.3