<!-- 设备收发管理详情 -- 任务单信息 --> <script lang="ts" setup name="SendReceiveDetailOrder"> import type { Ref } from 'vue' import { ElLoading, ElMessage, ElMessageBox } from 'element-plus' import type { DateModelType, FormInstance, FormRules, UploadUserFile } from 'element-plus' import dayjs from 'dayjs' import type { IDetailTableList, IForm } from '@/views/business/manager/order/order-interface' import { getDictByCode } from '@/api/system/dict' import { getUid } from '@/utils/getUid' import { getOrderDetail } from '@/api/business/manager/order' import type { dictType } from '@/global' import { getUserList } from '@/api/system/user' const props = defineProps({ orderId: { // 任务单id type: String, }, }) const emits = defineEmits(['giveCustomerId']) // 表单 const form: Ref<IForm> = ref({ orderNo: '', // 任务单编号 delivererId: '', // 送检人id deliverer: '', // 送检人 customerId: '', // 委托方id customerNo: '', // 委托方代码 customerName: '', // 委托方名称 customerPhone: '', // 委托方电话 customerAddress: '', // 委托方地址 planDeliverTime: '', // 预计送达时间 requireOverTime: '', // 要求检完时间 isUrgent: '', // 是否加急 maintainMajor: '', // 检修专业 createUserId: '', // 创建人id createUserName: '', // 创建人 createTime: '', // 创建时间 measureCompany: '', // 检定(校准)单位 undertakerId: '', // 承接人id undertakerName: '', // 承接人 undertakeTime: '', // 承接时间 receiveStatus: '', // 接收状态 receiveIllustrate: '', // 接收说明 isOnSiteCheck: 0, // 是否现场检定 onSiteCheckTime: '', // 现场检定时间 siteExecutiveId: '', // 现场测试、校准或检定审批单id siteExecutiveName: '', // 现场测试、校准或检定审批单名称 siteExecutiveNo: '', // 现场测试、校准或检定审批单编号 }) const onSiteCheckTimeRange = ref<[DateModelType, DateModelType]>(['', '']) // 现场检定时间范围 // -------------------------------------------字典------------------------------------------ const isUrgentMap = ref({}) as any // 是否加急{1: 是} const isUrgentList = ref<dictType[]>([])// 是否加急 const statusList = ref<dictType[]>([]) // 接收状态 const statusMap = ref({}) as any // 检定完成度、样品检定状态 const userList = ref<{ [key: string]: string }[]>([]) // 用户列表 // 获取字典值 async function getDict() { // 检测完成度 const res = await getDictByCode('sampleStatus') res.data.forEach((item: any) => { statusMap.value[`${item.value}`] = item.name }) // 是否加急 getDictByCode('isUrgent').then((response) => { isUrgentList.value = response.data }) // 接收状态 getDictByCode('orderStatus').then((response) => { statusList.value = response.data }) // 获取用户列表 getUserList({ offset: 1, limit: 999999 }).then((res: any) => { userList.value = res.data.rows }) } // -------------------------------------------表格------------------------------------------ const list = ref<IDetailTableList[]>([])// 表格数据 // 表头 const columns = ref([ { text: '统一编号', value: 'sampleNo', align: 'center', width: '180', disabled: true, required: true }, { text: '设备名称', value: 'sampleName', align: 'center', required: false }, { text: '规格型号', value: 'sampleModel', align: 'center', required: false }, { text: '出厂编号', value: 'manufactureNo', align: 'center', required: false }, { text: '生产厂家', value: 'manufacturer', align: 'center', required: false }, { text: '辅助字段', value: 'helpInstruction', align: 'center', required: false }, { text: '附件', value: 'appendixDescn', align: 'center', required: true }, { text: '特殊要求', value: 'specialRequire', align: 'center', required: false }, { text: '受检设备状态', value: 'sampleStatusName', align: 'center' }, { text: '检测完成度', value: 'measureCompletePercent', align: 'center' }, { text: '检定完成时间', value: 'measureCompleteTime', align: 'center', width: '180' }, ]) // 获取详细信息 const getInfo = () => { const loading = ElLoading.service({ lock: true, background: 'rgba(255, 255, 255, 0.8)', }) getOrderDetail({ id: props.orderId }).then((res) => { form.value = res.data.data emits('giveCustomerId', res.data.data.customerId) form.value.isUrgent = `${res.data.data.isUrgent}` // 是否加急 list.value = res.data.data.customerSampleInfoList.map((item: { editable: Boolean; sampleStatus: string | number }) => { return { ...item, editable: false, sampleStatus: `${item.sampleStatus}` ? statusMap.value[item.sampleStatus] : item.sampleStatus, } }) if (res.data.data.onSiteCheckTime) { onSiteCheckTimeRange.value = res.data.data.onSiteCheckTime.split(',') console.log('onSiteCheckTimeRange', onSiteCheckTimeRange.value) } loading.close() }) } watch(onSiteCheckTimeRange, (val) => { // 监听现场检定时间 if (val) { form.value.onSiteCheckTime = val.join(',') } else { form.value.onSiteCheckTime = '' } }) onMounted(async () => { getDict().then(() => { getInfo() }) }) </script> <template> <detail-block title="" class="mytask-order-detail"> <el-form ref="ruleFormRef" :model="form" :label-width="130" label-position="right" > <el-row :gutter="24"> <el-col :span="6"> <el-form-item label="任务单编号:" prop="orderNo"> <el-input v-model="form.orderNo" placeholder="任务单编号" class="detail-input" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="送检人" prop="delivererId"> <el-select v-model="form.deliverer" filterable placeholder="送检人" class="detail-input" disabled > <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="委托方" prop="customerName"> <el-input v-model="form.customerName" placeholder="委托方" class="detail-input" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="使用部门"> <el-input v-model="form.deptName" placeholder="使用部门" class="detail-input" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="电话" prop="customerPhone"> <el-input v-model="form.customerPhone" placeholder="电话" class="detail-input" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="是否现场检定:" prop="isOnSiteCheck"> <el-radio-group v-model="form.isOnSiteCheck" disabled> <el-radio :label="1"> 是 </el-radio> <el-radio :label="0"> 否 </el-radio> </el-radio-group> </el-form-item> </el-col> <el-col v-if="form.isOnSiteCheck === 1" :span="12"> <el-form-item label="现场检定时间:"> <el-date-picker v-model="onSiteCheckTimeRange" type="daterange" range-separator="至" format="YYYY-MM-DD" value-format="YYYY-MM-DD" start-placeholder="现场检定时间(开始)" end-placeholder="现场检定时间(结束)" disabled /> </el-form-item> </el-col> <el-col v-if="form.isOnSiteCheck === 1" :span="6"> <el-form-item label="现场检定审批单"> <el-input v-model="form.siteExecutiveNo" placeholder="现场检定审批单" class="detail-input" disabled /> </el-form-item> </el-col> <el-col v-if="form.isOnSiteCheck === 0" :span="6"> <el-form-item label="预计送达时间:" prop="planDeliverTime"> <el-date-picker v-model="form.planDeliverTime" type="datetime" class="full-width-input" placeholder="预计送达时间" disabled format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" /> </el-form-item> </el-col> <el-col v-if="form.isOnSiteCheck === 0" :span="6"> <el-form-item label="要求检完时间:" prop="requireOverTime"> <el-date-picker v-model="form.requireOverTime" type="datetime" placeholder="要求检完时间" class="detail-input" disabled format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="是否加急:" prop="isUrgent"> <el-select v-model="form.isUrgent" placeholder="是否加急" disabled class="full-width-input"> <el-option v-for="i in isUrgentList" :key="i.value" :label="i.name" :value="i.value" /> </el-select> </el-form-item> </el-col> <!-- <el-col :span="6"> <el-form-item label="检修专业:" prop="maintainMajor"> <el-input v-model="form.maintainMajor" placeholder="检修专业" class="detail-input" disabled /> </el-form-item> </el-col> --> </el-row> <el-row :gutter="24"> <el-col :span="6"> <el-form-item label="创建人:"> <el-input v-model="form.createUserName" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="创建时间:"> <el-date-picker v-model="form.createTime" type="datetime" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" disabled class="full-width-input" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="委托方地址:"> <el-input v-model="form.customerAddress" type="textarea" placeholder="委托方地址" autosize class="detail-input" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="检定(校准)单位:"> <el-input v-model="form.measureCompany" class="detail-input" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="承接人:"> <el-input v-model="form.undertakerName" disabled /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="承接时间:"> <el-date-picker v-model="form.undertakeTime" type="datetime" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" disabled class="full-width-input" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="接收状态:"> <el-select v-model="form.receiveStatus" placeholder="接收状态" disabled class="full-width-input"> <el-option v-for="i in statusList" :key="i.value" :label="i.name" :value="i.value" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="24" class="marg" prop="receiveIllustrate"> <el-col :span="12"> <el-form-item label="接收说明:"> <el-input v-model="form.receiveIllustrate" type="textarea" autosize laceholder="接收说明" disabled class="detail-input" /> </el-form-item> </el-col> </el-row> </el-form> </detail-block> <!-- 表格 --> <detail-block title="任务单列表"> <el-table :data="list" border style="width: 100%;" > <el-table-column align="center" label="序号" width="80" type="index" /> <el-table-column v-for="item in columns" :key="item.value" show-overflow-tooltip :prop="item.value" :label="item.text" :width="item.width" align="center" /> </el-table> </detail-block> </template> <style lang="scss" scoped> .customer-title { display: flex; justify-content: center; align-items: center; font-size: 24px; font-weight: 700; margin: 24px 0; .img { width: 32px; height: 32px; margin-right: 14px; vertical-align: middle; } } .customer-info { display: flex; justify-content: space-around; align-items: center; flex-wrap: nowrap; margin: 40px 0; .content { display: flex; font-size: 14px; .title { font-weight: 600; color: #000; } .value { margin-left: 10px; } } } .selectBtn { position: absolute; top: 0; right: 0; } .receipt-signature { display: flex; justify-content: flex-end; margin-right: 300px; // padding: 50px 250px 50px 150px; padding: 50px; font-size: 28px; color: #000; font-weight: 600; .content { display: flex; position: relative; .img { position: absolute; right: 0; top: 0; z-index: 2; } .img-name { position: absolute; left: 220px; top: -30px; z-index: 1; } .title { margin-right: 32px; letter-spacing: 6px; } .deliverer-time { display: flex; flex-direction: column; .text-title { letter-spacing: 2px; } .time { margin-top: 30px; letter-spacing: 2px; } .text { font-size: 24px; font-weight: 500; margin-left: 10px; } } } } </style> <style lang="scss"> .mytask-order-detail { .el-radio__label { display: block !important; } } </style>