feat:设备/模具/质量-检验任务-取消任务添加原因、详情添加原因回显

main
黄伟杰 2 days ago
parent 5d663e1c54
commit 2ac4f4a1e8

@ -13,6 +13,7 @@ export interface TicketManagementVO {
jobUser?: string
taskTime?: string
taskEndTime?: string
cancelReason?: string
remark?: string
creator?: string
createTime?: string
@ -41,7 +42,7 @@ export const TicketManagementApi = {
return await request.download({ url: `/mes/ticket-management/export-excel`, params })
},
batchUpdateTicketStatus: async (data: { ids: string; jobStatus: string | number }) => {
batchUpdateTicketStatus: async (data: { ids: string; jobStatus: string | number; cancelReason?: string }) => {
return await request.put({ url: `/mes/ticket-management/batchUpdateStatus`, data })
},

@ -15,6 +15,7 @@ export interface ZjTaskVO {
executorId: string
executorName: string
status: string
cancelReason?: string
result: string
createTime: string
roleIds?: number[]
@ -54,6 +55,10 @@ export const ZjTaskApi = {
return await request.download({ url: `/mes/zj-task/export-excel`, params })
},
batchUpdateZjTaskStatus: async (data: { ids: string; status: string | number; cancelReason?: string }) => {
return await request.put({ url: `/mes/zj-task/batchUpdateStatus`, data })
},
getZjTaskResultPage: async (params: any) => {
return await request.get({ url: `/mes/zj-task-results/page`, params })
},

@ -13,6 +13,7 @@ export interface TicketManagementVO {
jobUser?: string
taskTime?: string
taskEndTime?: string
cancelReason?: string
remark?: string
creator?: string
createTime?: string
@ -37,7 +38,7 @@ export const TicketManagementApi = {
return await request.get({ url: `/mes/mold-ticket-management/page`, params })
},
batchUpdateTicketStatus: async (data: { ids: string; jobStatus: string | number }) => {
batchUpdateTicketStatus: async (data: { ids: string; jobStatus: string | number; cancelReason?: string }) => {
return await request.put({ url: `/mes/mold-ticket-management/batchUpdateStatus`, data })
},

@ -2178,6 +2178,8 @@ export default {
createTime: 'Create Time',
operate: 'Operate',
inspect: 'Inspect',
cancelTask: 'Cancel Task',
cancelSuccess: 'Cancel task successfully',
exportFilename: 'Quality-InspectionTask.xls',
placeholderCode: 'Please input code',
placeholderType: 'Please select inspection category',

@ -1761,6 +1761,8 @@ export default {
createTime: '创建时间',
operate: '操作',
inspect: '检验',
cancelTask: '取消任务',
cancelSuccess: '取消任务成功',
exportFilename: '质量管理-检验任务.xls',
placeholderCode: '请输入单号',
placeholderType: '请选择质检分类',

@ -102,6 +102,13 @@
@size-change="handleSizeChange"
@current-change="handleCurrentChange" />
<div v-if="String(jobStatus) === '4'" class="mt-10px text-14px">
<span>{{ t('EquipmentManagement.WorkOrderManagement.jobStatus') }}</span>
<dict-tag :type="'job_status'" :value="jobStatus" />
<span class="ml-20px">取消原因</span>
<span>{{ cancelReason || '-' }}</span>
</div>
<template #footer>
<el-button @click="dialogVisible = false">{{ t('EquipmentManagement.WorkOrderManagement.dialogCancel') }}</el-button>
<el-button
@ -133,6 +140,8 @@ const submitLoading = ref(false)
const list = ref<TicketResultVO[]>([])
const total = ref(0)
const managementId = ref<number | undefined>(undefined)
const jobStatus = ref<string | number | undefined>(undefined)
const cancelReason = ref<string | undefined>(undefined)
const decisionMap = reactive<Record<string, '1' | '2' | undefined>>({})
const imageMap = reactive<Record<string, string>>({})
@ -141,10 +150,12 @@ const queryParams = reactive({
pageSize: 10
})
const open = async (options: { managementId: number; title?: string }) => {
const open = async (options: { managementId: number; title?: string; jobStatus?: string | number; cancelReason?: string }) => {
dialogVisible.value = true
dialogTitle.value = options.title || t('EquipmentManagement.WorkOrderManagement.dialogTitleDefault')
managementId.value = options.managementId
jobStatus.value = options.jobStatus
cancelReason.value = options.cancelReason
for (const key of Object.keys(decisionMap)) delete decisionMap[key]
for (const key of Object.keys(imageMap)) delete imageMap[key]
queryParams.pageNo = 1

@ -260,9 +260,18 @@ const handleSelectionChange = (rows: TicketManagementVO[]) => {
const handleBatchCancel = async () => {
if (!selectedIds.value.length) return
try {
await message.confirm(t('EquipmentManagement.WorkOrderManagement.cancelConfirm'))
const { value } = await ElMessageBox.prompt('请输入取消原因', t('EquipmentManagement.WorkOrderManagement.cancelTask'), {
confirmButtonText: t('common.ok'),
cancelButtonText: t('common.cancel'),
inputPattern: /^[\s\S]*.*\S[\s\S]*$/,
inputErrorMessage: '取消原因不能为空'
})
cancelLoading.value = true
await TicketManagementApi.batchUpdateTicketStatus({ ids: selectedIds.value.join(','), jobStatus: '4' })
await TicketManagementApi.batchUpdateTicketStatus({
ids: selectedIds.value.join(','),
jobStatus: '4',
cancelReason: value
})
message.success(t('EquipmentManagement.WorkOrderManagement.cancelSuccess'))
selectedIds.value = []
await getList()
@ -297,6 +306,8 @@ const handleRowClick = async (row: TicketManagementVO, column: any) => {
if (!row?.id) return
await resultDialogRef.value?.open({
managementId: row.id,
jobStatus: row.jobStatus,
cancelReason: row.cancelReason,
title: row.planNo
? `${t('EquipmentManagement.WorkOrderManagement.dialogTitleDefault')}-${row.planNo}`
: t('EquipmentManagement.WorkOrderManagement.dialogTitleDefault')

@ -133,6 +133,13 @@
@current-change="handleCurrentChange"
/>
<div v-if="String(status) === '4'" class="mt-10px text-14px">
<span>{{ t('QualityManagement.ZjTask.status') }}</span>
<DictTag :type="'job_status'" :value="status" />
<span class="ml-20px">取消原因</span>
<span>{{ cancelReason || '-' }}</span>
</div>
<template #footer>
<el-button @click="dialogVisible = false">
{{ t('QualityManagement.TicketResultDialog.cancel') }}
@ -152,6 +159,7 @@
<script setup lang="ts">
import type { ZjTaskResultVO } from '@/api/mes/zjtask'
import { ZjTaskApi } from '@/api/mes/zjtask'
import { DictTag } from '@/components/DictTag'
defineOptions({ name: 'ZjTaskResultDialog' })
@ -167,6 +175,8 @@ const message = useMessage()
const list = ref<ZjTaskResultVO[]>([])
const total = ref(0)
const taskId = ref<number | undefined>(undefined)
const status = ref<string | number | undefined>(undefined)
const cancelReason = ref<string | undefined>(undefined)
const decisionMap = reactive<Record<string, number | undefined>>({})
const imageMap = reactive<Record<string, string>>({})
@ -175,10 +185,12 @@ const queryParams = reactive({
pageSize: 10,
})
const open = async (id: number) => {
const open = async (options: { id: number; status?: string | number; cancelReason?: string }) => {
dialogVisible.value = true
dialogTitle.value = t('QualityManagement.TicketResultDialog.moduleName')
taskId.value = id
taskId.value = options.id
status.value = options.status
cancelReason.value = options.cancelReason
for (const key of Object.keys(decisionMap)) delete decisionMap[key]
for (const key of Object.keys(imageMap)) delete imageMap[key]
queryParams.pageNo = 1

@ -90,6 +90,17 @@ type="success" plain @click="handleExport" :loading="exportLoading"
</ContentWrap>
<ContentWrap>
<div class="mb-10px">
<el-button
type="warning"
plain
@click="handleBatchCancel"
:disabled="!selectedIds.length"
>
{{ t('QualityManagement.ZjTask.cancelTask') }}
</el-button>
</div>
<el-table
v-loading="loading"
:data="list"
@ -216,6 +227,7 @@ const exportLoading = ref(false)
const orgTypeOptions = getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)
const selectedIds = ref<number[]>([])
const cancelLoading = ref(false)
const getList = async () => {
loading.value = true
@ -247,7 +259,7 @@ const openForm = (type: string, row?: ZjTaskVO) => {
const handleRowClick = (row: ZjTaskVO) => {
if (!row?.id) return
resultDialogRef.value?.open(row.id)
resultDialogRef.value?.open({ id: row.id, status: row.status, cancelReason: row.cancelReason })
}
const handleDelete = async (id: number) => {
@ -263,6 +275,30 @@ const handleSelectionChange = (rows: ZjTaskVO[]) => {
selectedIds.value = (rows.map((row) => row.id).filter((id) => id !== undefined && id !== null) as number[])
}
const handleBatchCancel = async () => {
if (!selectedIds.value.length) return
try {
const { value } = await ElMessageBox.prompt('请输入取消原因', t('QualityManagement.ZjTask.cancelTask'), {
confirmButtonText: t('common.ok'),
cancelButtonText: t('common.cancel'),
inputPattern: /^[\s\S]*.*\S[\s\S]*$/,
inputErrorMessage: '取消原因不能为空',
})
cancelLoading.value = true
await ZjTaskApi.batchUpdateZjTaskStatus({
ids: selectedIds.value.join(','),
status: '4',
cancelReason: value,
})
message.success(t('QualityManagement.ZjTask.cancelSuccess'))
selectedIds.value = []
await getList()
} catch {
} finally {
cancelLoading.value = false
}
}
const handleExport = async () => {
try {
await message.exportConfirm()

@ -42,10 +42,17 @@ v-else-if="scope.row.images" :src="parseFirstImage(scope.row.images)"
</el-table>
<el-pagination
v-show="total > 0" v-model:current-page="queryParams.pageNo" v-model:page-size="queryParams.pageSize"
:background="true" :page-sizes="[10, 20, 30, 50, 100]" :pager-count="7" :total="total"
class="mt-15px mb-15px flex justify-end" layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
v-show="total > 0" v-model:current-page="queryParams.pageNo" v-model:page-size="queryParams.pageSize"
:background="true" :page-sizes="[10, 20, 30, 50, 100]" :pager-count="7" :total="total"
class="mt-15px mb-15px flex justify-end" layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
<div v-if="String(jobStatus) === '4'" class="mt-10px text-14px">
<span>{{ t('MoldManagement.MoldWorkOrderInquiry.jobStatus') }}</span>
<dict-tag :type="'job_status'" :value="jobStatus" />
<span class="ml-20px">取消原因</span>
<span>{{ cancelReason || '-' }}</span>
</div>
<template #footer>
<el-button @click="dialogVisible = false">{{ t('MoldManagement.TicketResultDialog.cancel') }}</el-button>
@ -70,6 +77,8 @@ const submitLoading = ref(false)
const list = ref<TicketResultVO[]>([])
const total = ref(0)
const managementId = ref<number | undefined>(undefined)
const jobStatus = ref<string | number | undefined>(undefined)
const cancelReason = ref<string | undefined>(undefined)
const decisionMap = reactive<Record<string, '1' | '2' | undefined>>({})
const imageMap = reactive<Record<string, string>>({})
@ -78,10 +87,12 @@ const queryParams = reactive({
pageSize: 10
})
const open = async (options: { managementId: number; title?: string }) => {
const open = async (options: { managementId: number; title?: string; jobStatus?: string | number; cancelReason?: string }) => {
dialogVisible.value = true
dialogTitle.value = options.title || t('MoldManagement.TicketResultDialog.moduleName')
managementId.value = options.managementId
jobStatus.value = options.jobStatus
cancelReason.value = options.cancelReason
for (const key of Object.keys(decisionMap)) delete decisionMap[key]
for (const key of Object.keys(imageMap)) delete imageMap[key]
queryParams.pageNo = 1

@ -173,9 +173,18 @@ const handleSelectionChange = (rows: TicketManagementVO[]) => {
const handleBatchCancel = async () => {
if (!selectedIds.value.length) return
try {
await message.confirm(t('MoldManagement.MoldWorkOrderInquiry.cancelConfirm'))
const { value } = await ElMessageBox.prompt('请输入取消原因', t('MoldManagement.MoldWorkOrderInquiry.cancelTask'), {
confirmButtonText: t('common.ok'),
cancelButtonText: t('common.cancel'),
inputPattern: /^[\s\S]*.*\S[\s\S]*$/,
inputErrorMessage: '取消原因不能为空'
})
cancelLoading.value = true
await TicketManagementApi.batchUpdateTicketStatus({ ids: selectedIds.value.join(','), jobStatus: '4' })
await TicketManagementApi.batchUpdateTicketStatus({
ids: selectedIds.value.join(','),
jobStatus: '4',
cancelReason: value
})
message.success(t('MoldManagement.MoldWorkOrderInquiry.cancelSuccess'))
selectedIds.value = []
await getList()
@ -192,6 +201,8 @@ const handleRowClick = async (row: TicketManagementVO, column: any) => {
if (!row?.id) return
await resultDialogRef.value?.open({
managementId: row.id,
jobStatus: row.jobStatus,
cancelReason: row.cancelReason,
title: row.planNo
? `${t('MoldManagement.MoldWorkOrderInquiry.inspectResultTitlePrefix')}${row.planNo}`
: t('MoldManagement.MoldWorkOrderInquiry.inspectResultTitle')

Loading…
Cancel
Save