Compare commits
7 Commits
438bb9c8d1
...
338c26c943
| Author | SHA1 | Date |
|---|---|---|
|
|
338c26c943 | 2 weeks ago |
|
|
b20046c3a1 | 2 weeks ago |
|
|
207b318dc2 | 2 weeks ago |
|
|
582bfcc676 | 2 weeks ago |
|
|
e7d16254fe | 2 weeks ago |
|
|
75329f9af9 | 2 weeks ago |
|
|
fc68c28464 | 2 weeks ago |
@ -0,0 +1,66 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export interface ZjTaskVO {
|
||||
id: number
|
||||
code: string
|
||||
name: string
|
||||
type: string
|
||||
schemaId: number
|
||||
schemaName: string
|
||||
remark: string
|
||||
ticket: string
|
||||
orgType: string
|
||||
managerId: string
|
||||
managerName: string
|
||||
executorId: string
|
||||
executorName: string
|
||||
status: string
|
||||
result: string
|
||||
createTime: string
|
||||
roleIds?: number[]
|
||||
}
|
||||
|
||||
export interface ZjTaskResultVO {
|
||||
id: number
|
||||
name: string
|
||||
tool: string
|
||||
standardVal: number
|
||||
unit: string
|
||||
upperVal: number
|
||||
lowerVal: number
|
||||
remark: string
|
||||
images?: string
|
||||
zjResult?: number
|
||||
}
|
||||
|
||||
export const ZjTaskApi = {
|
||||
getZjTaskPage: async (params: any) => {
|
||||
return await request.get({ url: `/mes/zj-task/page`, params })
|
||||
},
|
||||
|
||||
createZjTask: async (data: ZjTaskVO) => {
|
||||
return await request.post({ url: `/mes/zj-task/create`, data })
|
||||
},
|
||||
|
||||
updateZjTask: async (data: ZjTaskVO) => {
|
||||
return await request.put({ url: `/mes/zj-task/update`, data })
|
||||
},
|
||||
|
||||
deleteZjTask: async (id: number) => {
|
||||
return await request.delete({ url: `/mes/zj-task/delete?id=` + id })
|
||||
},
|
||||
|
||||
exportZjTask: async (params: any) => {
|
||||
return await request.download({ url: `/mes/zj-task/export-excel`, params })
|
||||
},
|
||||
|
||||
getZjTaskResultPage: async (params: any) => {
|
||||
return await request.get({ url: `/mes/zj-task-results/page`, params })
|
||||
},
|
||||
|
||||
batchUpdateZjTaskResults: async (
|
||||
results: { id: number; taskId: number; images?: string; zjResult: number }[],
|
||||
) => {
|
||||
return await request.post({ url: `/mes/zj-task-results/batch-update`, data: { results } })
|
||||
},
|
||||
}
|
||||
@ -0,0 +1,262 @@
|
||||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
|
||||
<el-form-item label="单号" prop="code">
|
||||
<el-input v-model="formData.code" placeholder="请输入单号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="质检分类" prop="type">
|
||||
<el-select v-model="formData.type" clearable filterable placeholder="请选择质检分类">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions('mes_zj_task_type')" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="检验方案" prop="schemaId">
|
||||
<el-row :gutter="8" class="w-full">
|
||||
<el-col :span="22">
|
||||
<el-input v-model="formData.schemaName" placeholder="请选择检验方案" readonly />
|
||||
</el-col>
|
||||
<el-col :span="2" class="text-right">
|
||||
<el-button type="primary" @click="openSchemaDialog">选择</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
<el-form-item label="工单" prop="ticket">
|
||||
<el-input v-model="formData.ticket" placeholder="请输入工单" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工序" prop="orgType">
|
||||
<el-select v-model="formData.orgType" clearable placeholder="请选择工序">
|
||||
<el-option v-for="item in orgTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人" prop="managerId">
|
||||
<el-select
|
||||
v-model="formData.managerId"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请选择负责人"
|
||||
@change="handleManagerChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
<el-dialog v-model="schemaDialogVisible" title="选择检验方案" width="1200px" draggable>
|
||||
<el-table :data="schemaList" v-loading="schemaLoading" height="400px" @row-click="handleSchemaRowClick">
|
||||
<el-table-column width="60">
|
||||
<template #default="scope">
|
||||
<el-radio :label="scope.row.id" v-model="selectedSchemaId">
|
||||
<span></span>
|
||||
</el-radio>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column type="index" label="序号" width="80" />
|
||||
<el-table-column label="名称" prop="name" />
|
||||
<el-table-column label="类型" prop="type">
|
||||
<template #default="scope">
|
||||
<dict-tag type="mes_zj_schema_type" :value="scope.row.type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="抽检方式" prop="sampleMethod">
|
||||
<template #default="scope">
|
||||
<dict-tag type="mes_zj_schema_sample_method" :value="scope.row.sampleMethod" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="值" prop="val">
|
||||
<template #default="scope">
|
||||
{{ formatSchemaVal(scope.row.val) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark" />
|
||||
</el-table>
|
||||
<template #footer>
|
||||
<el-button @click="schemaDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="confirmSelectSchema">确 定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ZjTaskApi, ZjTaskVO } from '@/api/mes/zjtask'
|
||||
import { ZjSchemaApi, ZjSchemaVO } from '@/api/mes/zjschema'
|
||||
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||
import * as UserApi from '@/api/system/user'
|
||||
|
||||
defineOptions({ name: 'ZjTaskForm' })
|
||||
|
||||
const { t } = useI18n()
|
||||
const message = useMessage()
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
const dialogTitle = ref('')
|
||||
const formLoading = ref(false)
|
||||
const formType = ref('')
|
||||
|
||||
const formData = ref<{ [key: string]: any }>({
|
||||
id: undefined,
|
||||
code: undefined,
|
||||
name: undefined,
|
||||
type: undefined,
|
||||
schemaId: undefined,
|
||||
schemaName: undefined,
|
||||
ticket: undefined,
|
||||
orgType: undefined,
|
||||
remark: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
})
|
||||
|
||||
const formRules = reactive({
|
||||
code: [{ required: true, message: '单号不能为空', trigger: 'blur' }],
|
||||
type: [{ required: true, message: '质检分类不能为空', trigger: 'change' }],
|
||||
schemaId: [{ required: true, message: '检验方案不能为空', trigger: 'change' }],
|
||||
ticket: [{ required: true, message: '工单不能为空', trigger: 'blur' }],
|
||||
orgType: [{ required: true, message: '工序不能为空', trigger: 'change' }],
|
||||
})
|
||||
|
||||
const formRef = ref()
|
||||
|
||||
const schemaDialogVisible = ref(false)
|
||||
const schemaLoading = ref(false)
|
||||
const schemaList = ref<ZjSchemaVO[]>([])
|
||||
const selectedSchemaId = ref<number | undefined>(undefined)
|
||||
const orgTypeOptions = getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)
|
||||
const userList = ref<UserApi.UserVO[]>([])
|
||||
|
||||
const formatSchemaVal = (val: string | number | null | undefined) => {
|
||||
if (val === null || val === undefined || val === '') return ''
|
||||
const text = String(val).trim()
|
||||
if (!text) return ''
|
||||
if (text.includes(',')) {
|
||||
const parts = text
|
||||
.split(',')
|
||||
.map((v) => v.trim())
|
||||
.filter((v) => v)
|
||||
const first = parts[0] ?? ''
|
||||
const second = parts[1] ?? ''
|
||||
return `每间隔${first}抽取${second}`
|
||||
}
|
||||
return `${text}%`
|
||||
}
|
||||
|
||||
const loadSchemaList = async () => {
|
||||
if (schemaList.value.length) return
|
||||
schemaLoading.value = true
|
||||
try {
|
||||
const data = await ZjSchemaApi.getZjSchemaList()
|
||||
schemaList.value = data || []
|
||||
} finally {
|
||||
schemaLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const openSchemaDialog = async () => {
|
||||
schemaDialogVisible.value = true
|
||||
await loadSchemaList()
|
||||
}
|
||||
|
||||
const loadUserList = async () => {
|
||||
if (userList.value.length) return
|
||||
const data = await UserApi.getSimpleUserList()
|
||||
userList.value = data || []
|
||||
}
|
||||
|
||||
const handleSchemaRowClick = (row: ZjSchemaVO) => {
|
||||
selectedSchemaId.value = row.id
|
||||
}
|
||||
|
||||
const confirmSelectSchema = () => {
|
||||
if (!selectedSchemaId.value) return
|
||||
const matched = schemaList.value.find((item) => item.id === selectedSchemaId.value)
|
||||
if (!matched) return
|
||||
formData.value.schemaId = matched.id
|
||||
formData.value.schemaName = matched.name
|
||||
schemaDialogVisible.value = false
|
||||
}
|
||||
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
code: undefined,
|
||||
name: undefined,
|
||||
type: undefined,
|
||||
schemaId: undefined,
|
||||
schemaName: undefined,
|
||||
ticket: undefined,
|
||||
orgType: undefined,
|
||||
remark: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
}
|
||||
selectedSchemaId.value = undefined
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
|
||||
const open = async (type: string, record?: ZjTaskVO) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
await loadUserList()
|
||||
if (type === 'update' && record) {
|
||||
formData.value = {
|
||||
id: record.id,
|
||||
code: record.code,
|
||||
name: record.name,
|
||||
type: record.type,
|
||||
schemaId: record.schemaId,
|
||||
schemaName: record.schemaName,
|
||||
ticket: record.ticket,
|
||||
orgType: record.orgType,
|
||||
remark: record.remark,
|
||||
managerId: record.managerId,
|
||||
managerName: record.managerName,
|
||||
}
|
||||
selectedSchemaId.value = record.schemaId
|
||||
}
|
||||
}
|
||||
|
||||
const handleManagerChange = (value: number | undefined) => {
|
||||
if (!value) {
|
||||
formData.value.managerName = undefined
|
||||
return
|
||||
}
|
||||
const matched = userList.value.find((item) => item.id === value)
|
||||
formData.value.managerName = matched ? matched.nickname : undefined
|
||||
}
|
||||
|
||||
defineExpose({ open })
|
||||
|
||||
const emit = defineEmits(['success'])
|
||||
|
||||
const submitForm = async () => {
|
||||
await formRef.value.validate()
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as ZjTaskVO
|
||||
if (formType.value === 'create') {
|
||||
await ZjTaskApi.createZjTask(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await ZjTaskApi.updateZjTask(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,227 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" :title="dialogTitle" width="1500px">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="list"
|
||||
:stripe="true"
|
||||
:show-overflow-tooltip="true"
|
||||
:row-key="getRowKey"
|
||||
>
|
||||
<el-table-column type="index" label="序号" align="center" width="60" />
|
||||
<el-table-column label="名称" align="center" prop="name" min-width="160" />
|
||||
<el-table-column label="作业方式" align="center" prop="tool" min-width="120" />
|
||||
<el-table-column label="标准值" align="center" prop="standardVal" min-width="100" />
|
||||
<el-table-column label="单位" align="center" prop="unit" min-width="80" />
|
||||
<el-table-column label="上限值" align="center" prop="upperVal" min-width="100" />
|
||||
<el-table-column label="下限值" align="center" prop="lowerVal" min-width="100" />
|
||||
<el-table-column label="图片" align="center" prop="images" width="160">
|
||||
<template #default="scope">
|
||||
<UploadImg
|
||||
v-if="String(scope.row.zjResult) === '0'"
|
||||
v-model="imageMap[String(scope.row.id)]"
|
||||
:drag="false"
|
||||
:show-btn-text="false"
|
||||
width="64px"
|
||||
height="64px"
|
||||
/>
|
||||
<el-image
|
||||
v-else-if="scope.row.images"
|
||||
:src="parseFirstImage(scope.row.images)"
|
||||
:preview-src-list="parseImages(scope.row.images)"
|
||||
preview-teleported
|
||||
fit="cover"
|
||||
style="width: 64px; height: 64px"
|
||||
/>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" min-width="160" />
|
||||
<el-table-column label="检验结果" align="center" prop="zjResult" width="120">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="String(scope.row.zjResult) === '0'" type="info">待检测</el-tag>
|
||||
<el-tag v-else-if="String(scope.row.zjResult) === '1'" type="success">通过</el-tag>
|
||||
<el-tag v-else-if="String(scope.row.zjResult) === '2'" type="danger">不通过</el-tag>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="200" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-radio-group
|
||||
v-if="String(scope.row.zjResult) === '0'"
|
||||
v-model="decisionMap[String(scope.row.id)]"
|
||||
>
|
||||
<el-radio :label="1">通过</el-radio>
|
||||
<el-radio :label="2">不通过</el-radio>
|
||||
</el-radio-group>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</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"
|
||||
/>
|
||||
|
||||
<template #footer>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleSave"
|
||||
:loading="submitLoading"
|
||||
:disabled="submitLoading || !isAllSelected()"
|
||||
>
|
||||
保 存
|
||||
</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { ZjTaskResultVO } from '@/api/mes/zjtask'
|
||||
import { ZjTaskApi } from '@/api/mes/zjtask'
|
||||
|
||||
defineOptions({ name: 'ZjTaskResultDialog' })
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
const dialogTitle = ref('检验结果')
|
||||
const loading = ref(false)
|
||||
const submitLoading = ref(false)
|
||||
|
||||
const emit = defineEmits(['success'])
|
||||
const message = useMessage()
|
||||
|
||||
const list = ref<ZjTaskResultVO[]>([])
|
||||
const total = ref(0)
|
||||
const taskId = ref<number | undefined>(undefined)
|
||||
const decisionMap = reactive<Record<string, number | undefined>>({})
|
||||
const imageMap = reactive<Record<string, string>>({})
|
||||
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
})
|
||||
|
||||
const open = async (id: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = '检验结果'
|
||||
taskId.value = id
|
||||
for (const key of Object.keys(decisionMap)) delete decisionMap[key]
|
||||
for (const key of Object.keys(imageMap)) delete imageMap[key]
|
||||
queryParams.pageNo = 1
|
||||
await getList()
|
||||
}
|
||||
|
||||
defineExpose({ open })
|
||||
|
||||
const getList = async () => {
|
||||
if (!taskId.value) return
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await ZjTaskApi.getZjTaskResultPage({
|
||||
pageNo: queryParams.pageNo,
|
||||
pageSize: queryParams.pageSize,
|
||||
taskId: taskId.value,
|
||||
})
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
for (const row of list.value) {
|
||||
const id = row?.id
|
||||
if (!id) continue
|
||||
if (row.images && !imageMap[String(id)]) {
|
||||
imageMap[String(id)] = parseFirstImage(row.images)
|
||||
}
|
||||
if (row.zjResult !== undefined && row.zjResult !== null && !decisionMap[String(id)]) {
|
||||
decisionMap[String(id)] = Number(row.zjResult)
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const handleSizeChange = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
const handleCurrentChange = () => {
|
||||
getList()
|
||||
}
|
||||
|
||||
const getRowKey = (row: ZjTaskResultVO) => {
|
||||
return String(row.id ?? '')
|
||||
}
|
||||
|
||||
const handleSave = async () => {
|
||||
if (!taskId.value) {
|
||||
message.error('任务标识不存在,无法保存')
|
||||
return
|
||||
}
|
||||
const currentTaskId = taskId.value
|
||||
const hasUnselected = list.value.some((row) => {
|
||||
if (!row?.id) return false
|
||||
const decision = decisionMap[String(row.id)]
|
||||
return decision !== 1 && decision !== 2
|
||||
})
|
||||
if (hasUnselected) {
|
||||
message.error('请先为所有记录选择通过或不通过')
|
||||
return
|
||||
}
|
||||
const payload: { id: number; taskId: number; images?: string; zjResult: number }[] = []
|
||||
for (const row of list.value) {
|
||||
if (!row?.id) continue
|
||||
const decision = decisionMap[String(row.id)]
|
||||
if (decision !== 1 && decision !== 2) continue
|
||||
const img = imageMap[String(row.id)] || row.images
|
||||
payload.push({ id: row.id, taskId: currentTaskId, images: img, zjResult: decision })
|
||||
}
|
||||
if (!payload.length) {
|
||||
message.error('暂无需要保存的记录')
|
||||
return
|
||||
}
|
||||
submitLoading.value = true
|
||||
try {
|
||||
await ZjTaskApi.batchUpdateZjTaskResults(payload)
|
||||
message.success('更新成功')
|
||||
emit('success')
|
||||
dialogVisible.value = false
|
||||
} catch {
|
||||
message.error('更新失败')
|
||||
} finally {
|
||||
submitLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const parseImages = (value: any): string[] => {
|
||||
if (!value) return []
|
||||
if (Array.isArray(value)) return value.map(String).filter(Boolean)
|
||||
return String(value)
|
||||
.split(',')
|
||||
.map((v) => v.trim())
|
||||
.filter(Boolean)
|
||||
}
|
||||
|
||||
const parseFirstImage = (value: any): string => {
|
||||
return parseImages(value)[0] || ''
|
||||
}
|
||||
|
||||
const isAllSelected = () => {
|
||||
if (!list.value.length) return false
|
||||
for (const row of list.value) {
|
||||
if (!row?.id) continue
|
||||
const decision = decisionMap[String(row.id)]
|
||||
if (decision !== 1 && decision !== 2) return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,228 @@
|
||||
<template>
|
||||
<ContentWrap>
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="80px">
|
||||
<el-form-item label="单号" prop="code">
|
||||
<el-input
|
||||
v-model="queryParams.code" placeholder="请输入单号" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="质检分类" prop="type">
|
||||
<el-select v-model="queryParams.type" clearable filterable placeholder="请选择质检分类" class="!w-240px">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions('mes_zj_task_type')" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工单" prop="ticket">
|
||||
<el-input
|
||||
v-model="queryParams.ticket" placeholder="请输入工单" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工序" prop="orgType">
|
||||
<el-select v-model="queryParams.orgType" clearable placeholder="请选择工序" class="!w-240px">
|
||||
<el-option v-for="item in orgTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" clearable placeholder="请选择状态" class="!w-240px">
|
||||
<el-option
|
||||
v-for="opt in getStrDictOptions('job_status')" :key="String(opt.value)" :label="opt.label"
|
||||
:value="opt.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="结果" prop="result">
|
||||
<el-input
|
||||
v-model="queryParams.result" placeholder="请输入结果" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-260px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery">
|
||||
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||
</el-button>
|
||||
<el-button @click="resetQuery">
|
||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||
</el-button>
|
||||
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['mes:zj-task:create']">
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success" plain @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['mes:zj-task:export']">
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="序号" type="index" width="80" />
|
||||
<el-table-column label="单号" align="center" prop="code" />
|
||||
<el-table-column label="质检分类" align="center">
|
||||
<template #default="scope">
|
||||
<DictTag type="mes_zj_task_type" :value="scope.row.type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template #default="scope">
|
||||
<DictTag :type="'job_status'" :value="scope.row.status" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工单" align="center" prop="ticket" />
|
||||
<el-table-column label="工序" align="center" prop="orgType">
|
||||
<template #default="scope">
|
||||
<DictTag :type="DICT_TYPE.MES_ORG_TYPE" :value="scope.row.orgType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="检验方案" align="center" prop="schemaName" />
|
||||
<el-table-column label="负责人" align="center" prop="managerName" />
|
||||
<el-table-column label="执行人" align="center" prop="executorName" />
|
||||
<el-table-column label="执行时间" align="center" prop="executeTime" :formatter="dateFormatter" width="180px" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="结果" align="center" prop="result">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.result === '1' || scope.row.result === 1" type="success">通过</el-tag>
|
||||
<el-tag v-else-if="scope.row.result === '2' || scope.row.result === 2" type="danger">不通过</el-tag>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" min-width="160px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="warning"
|
||||
@click.stop="handleRowClick(scope.row)"
|
||||
>
|
||||
检验
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click.stop="openForm('update', scope.row)"
|
||||
v-hasPermi="['mes:zj-task:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click.stop="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['mes:zj-task:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<Pagination
|
||||
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
</ContentWrap>
|
||||
|
||||
<ZjTaskForm ref="formRef" @success="getList" />
|
||||
<ZjTaskResultDialog ref="resultDialogRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { DictTag } from '@/components/DictTag'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
||||
import { ZjTaskApi, ZjTaskVO } from '@/api/mes/zjtask'
|
||||
import ZjTaskForm from './ZjTaskForm.vue'
|
||||
import ZjTaskResultDialog from './components/ZjTaskResultDialog.vue'
|
||||
|
||||
defineOptions({ name: 'ZjTask' })
|
||||
|
||||
const message = useMessage()
|
||||
const { t } = useI18n()
|
||||
|
||||
const loading = ref(true)
|
||||
const list = ref<ZjTaskVO[]>([])
|
||||
const total = ref(0)
|
||||
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
code: undefined as string | undefined,
|
||||
name: undefined as string | undefined,
|
||||
type: undefined as string | undefined,
|
||||
schemaName: undefined as string | undefined,
|
||||
ticket: undefined as string | undefined,
|
||||
orgType: undefined as string | undefined,
|
||||
managerName: undefined as string | undefined,
|
||||
executorName: undefined as string | undefined,
|
||||
status: undefined as string | undefined,
|
||||
result: undefined as string | undefined,
|
||||
createTime: [] as string[] | [],
|
||||
})
|
||||
|
||||
const queryFormRef = ref()
|
||||
const exportLoading = ref(false)
|
||||
|
||||
const orgTypeOptions = getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)
|
||||
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await ZjTaskApi.getZjTaskPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
const formRef = ref()
|
||||
const resultDialogRef = ref()
|
||||
|
||||
const openForm = (type: string, row?: ZjTaskVO) => {
|
||||
formRef.value.open(type, row)
|
||||
}
|
||||
|
||||
const handleRowClick = (row: ZjTaskVO) => {
|
||||
if (!row?.id) return
|
||||
resultDialogRef.value?.open(row.id)
|
||||
}
|
||||
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
await message.delConfirm()
|
||||
await ZjTaskApi.deleteZjTask(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
await getList()
|
||||
} catch { }
|
||||
}
|
||||
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
await message.exportConfirm()
|
||||
exportLoading.value = true
|
||||
const data = await ZjTaskApi.exportZjTask(queryParams)
|
||||
download.excel(data, '检验任务.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
await getList()
|
||||
})
|
||||
</script>
|
||||
Loading…
Reference in New Issue