<!-- 监测智能模型详情 --> <script lang="ts" setup name="EquipementMonitorDeviceDetail"> import { ref } from 'vue' import { ElLoading, ElMessage } from 'element-plus' import type { IForm } from './device-interface' import { getUserList } from '@/api/system/user' import useUserStore from '@/store/modules/user' import { getDictByCode } from '@/api/system/dict' import type { deptType, dictType } from '@/global' import countries from '@/components/AddressSelect/country-code.json' import { getDeptTreeList } from '@/api/system/dept' import { toTreeList } from '@/utils/structure' import { addMonitorDeviceList, getInfo, updateMonitorDeviceList } from '@/api/equipment/monitor/device' // import type { IOptions } from '@/views/device/standardEquipment/standard_interface' const user = useUserStore() // 用户信息 const textMap: { [key: string]: string } = { edit: '编辑', add: '新建', detail: '详情', }// 字典 const $router = useRouter() // 关闭页面使用 const $route = useRoute() // 路由参数 const pageType = ref('add') // 页面类型: add, edit, detail const infoId = ref('') // 列表id const countryList = ref(countries) // 国家列表 const ruleFormRef = ref() // 表单ref const form = ref<IForm>({ equipmentNo: '', // 统一编号 equipmentName: '', // 智能模型名称 model: '', // 规格型号 checkCycle: 0, // 检定周期 productCountry: '', // 生产国家 manufacturer: '', // 厂商 manufactureNo: '', // 出厂编号 produceDate: '', // 生产日期 traceCompany: '', // 溯源单位 traceDate: '', // 溯源日期 measureValidDate: '', // 检定有效期 meterIdentifyName: '', // 计量标识 meterIdentify: '', // 计量标识code createDept: '', // 所属部门 createDeptId: '', // 所属部门id createUserId: '', // 负责人id createUserName: '', // 负责人 remark: '', // 备注 intro: '', // 简介 norm: '', // 指标 ability: '', // 功能 compose: '', // 组成 }) // 校验规则 const formRules = ref({ equipmentName: [{ required: true, message: '智能模型名称不能为空', trigger: ['blur', 'change'] }], model: [{ required: true, message: '规格型号不能为空', trigger: ['blur', 'change'] }], checkCycle: [{ required: true, message: '检定周期不能为空', trigger: ['blur', 'change'] }], traceCompany: [{ required: true, message: '溯源单位不能为空', trigger: ['blur', 'change'] }], measureValidDate: [{ required: true, message: '检定有效期不能为空', trigger: ['blur', 'change'] }], meterIdentify: [{ required: true, message: '计量标识不能为空', trigger: ['blur', 'change'] }], createDeptId: [{ required: true, message: '所属部门不能为空', trigger: ['blur', 'change'] }], createUserId: [{ required: true, message: '负责人不能为空', trigger: ['blur', 'change'] }], }) const isMulti = ref(false) // 是否多选 // -------------------------------------------字典------------------------------------------ const meterIdentifyDict = ref<dictType[]>([]) // 计量标识 const userList = ref<{ [key: string]: string }[]>([]) // 用户列表 const useDeptList = ref<deptType[]>([]) // 所属部门列表 const deptList = ref<deptType[]>([]) // 所属部门列表 // 获取字典值 async function getDict() { // 计量标识 getDictByCode('bizMeterIdentify').then((response) => { meterIdentifyDict.value = response.data }) // 获取用户列表 getUserList({ offset: 1, limit: 999999 }).then((res: any) => { userList.value = res.data.rows }) // 获取部门列表 getDeptTreeList().then((res) => { deptList.value = res.data // 转成树结构 useDeptList.value = toTreeList(res.data, '0', true) }) // 获取用户列表 // getStaffList({ offset: 1, limit: 999999 }).then((res: any) => { // userList.value = res.data.rows // }) } // ----------------------------------路由参数-------------------------------------------- if ($route.params && $route.params.type) { pageType.value = $route.params.type as string console.log(pageType.value) if ($route.params.id) { infoId.value = $route.params.id as string } } // -------------------------------------------按钮---------------------------------------------- // 关闭新增页面的回调 const close = () => { $router.back() } // 点击编辑按钮 const edit = () => { pageType.value = 'edit' } // 保存 const save = () => { ruleFormRef.value!.validate((valid: boolean) => { if (valid) { const loading = ElLoading.service({ lock: true, background: 'rgba(255, 255, 255, 0.8)', }) const params = { ...form.value, createDept: deptList.value.find(item => item.id === form.value.createDeptId)?.name, createUserName: userList.value.find(item => item.id === form.value.createUserId)?.name, id: infoId.value, } // 新建 if (pageType.value === 'add') { // 新建 addMonitorDeviceList(params).then((res) => { ElMessage.success('保存成功') form.value.equipmentNo = res.data.equipmentNo // 统一编号 pageType.value = 'detail' loading.close() }).catch(() => { loading.close() }) } // 保存 else if (pageType.value === 'edit') { // 编辑 updateMonitorDeviceList(params).then((res) => { ElMessage.success('保存成功') pageType.value = 'detail' loading.close() }).catch(() => { loading.close() }) } } else { console.log('表单校验不通过') } }) } // -------------------------------------------获取详情信息-------------------------------------------------- // 获取详情信息 const fetchInfo = () => { const loading = ElLoading.service({ lock: true, background: 'rgba(255, 255, 255, 0.8)', }) getInfo({ id: infoId.value }).then((res) => { form.value = res.data loading.close() }) } onMounted(async () => { getDict().then(() => { if (pageType.value !== 'add') { fetchInfo() } }) }) </script> <template> <app-container> <detail-page :title="`监测智能模型-${textMap[pageType]}`"> <template #btns> <el-button v-if="pageType !== 'detail'" type="primary" @click="save"> 保存 </el-button> <el-button v-if="pageType === 'detail'" type="primary" @click="edit"> 编辑 </el-button> <el-button type="info" @click="close"> 关闭 </el-button> </template> <el-form ref="ruleFormRef" :model="form" label-width="120" label-position="right" :rules="formRules" > <el-row :gutter="24"> <el-col :span="6"> <el-form-item label="统一编号:" prop="equipmentNo"> <el-input v-model="form.equipmentNo" disabled placeholder="系统自动生成" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="智能模型名称:" prop="equipmentName"> <el-input v-model.trim="form.equipmentName" :placeholder="pageType === 'detail' ? '' : '请输入智能模型名称'" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="规格型号" prop="model"> <el-input v-model.trim="form.model" :placeholder="pageType === 'detail' ? '' : '请输入规格型号'" :disabled="pageType === 'detail'" class="full-width-input" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="检定周期(月)" prop="checkCycle"> <el-input-number v-model="form.checkCycle" :placeholder="pageType === 'detail' ? '' : '请输入检定周期'" :disabled="pageType === 'detail'" class="full-width-input" :min="0" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="生产国家:" prop="productCountry"> <el-select v-model="form.productCountry" filterable :placeholder="pageType === 'detail' ? ' ' : '请选择生产国家'" :disabled="pageType === 'detail'" class="full-width-input" > <el-option v-for="country of countryList" :key="country.code" :label="country.CNName" :value="country.code" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="厂商:" prop="manufacturer"> <el-input v-model.trim="form.manufacturer" :placeholder="pageType === 'detail' ? '' : '请输入厂商'" :class="{ 'detail-input': pageType === 'detail' }" :disabled="pageType === 'detail'" class="full-width-input" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="出厂编号:" prop="manufactureNo"> <el-input v-model.trim="form.manufactureNo" :placeholder="pageType === 'detail' ? '' : '请输入出厂编号'" :class="{ 'detail-input': pageType === 'detail' }" :disabled="pageType === 'detail'" class="full-width-input" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="生产日期:" prop="produceDate"> <el-date-picker v-model="form.produceDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" :placeholder="pageType === 'detail' ? ' ' : '请选择生产日期'" :disabled="pageType === 'detail'" class="full-width-input" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="溯源单位:" prop="traceCompany" style="flex: 1;"> <el-input v-model="form.traceCompany" :disabled="pageType === 'detail'" :placeholder="pageType === 'detail' ? ' ' : '请输入溯源单位'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="溯源日期:" prop="traceDate" style="flex: 1;"> <el-date-picker v-model="form.traceDate" type="date" :placeholder="pageType === 'detail' ? ' ' : '请选择日期'" format="YYYY-MM-DD" value-format="YYYY-MM-DD" :disabled="pageType === 'detail'" class="full-width-input" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="检定有效期:" prop="measureValidDate" style="flex: 1;"> <el-date-picker v-model="form.measureValidDate" type="date" :placeholder="pageType === 'detail' ? ' ' : '请选择日期'" format="YYYY-MM-DD" value-format="YYYY-MM-DD" :disabled="pageType === 'detail'" class="full-width-input" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="计量标识:" prop="meterIdentify" style="flex: 1;"> <el-select v-model="form.meterIdentify" :placeholder="pageType === 'detail' ? ' ' : '请选择计量标识'" :disabled="pageType === 'detail'" class="full-width-input" > <el-option v-for="item of meterIdentifyDict" :key="item.value" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="所属部门" prop="createDeptId"> <dept-select v-model="form.createDeptId" :data="useDeptList" :disabled="pageType === 'detail'" :placeholder="pageType === 'detail' ? ' ' : '所属部门'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="负责人" prop="createUserId"> <el-select v-model.trim="form.createUserId" placeholder="请选择负责人" filterable :disabled="pageType === 'detail'" class="full-width-input" > <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="备注:" prop="remark"> <el-input v-model="form.remark" class="full-width-input" :placeholder="pageType === 'detail' ? ' ' : '请输入备注'" autosize type="textarea" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="简介:" prop="intro"> <el-input v-model="form.intro" class="full-width-input" :placeholder="pageType === 'detail' ? ' ' : '请输入简介'" autosize type="textarea" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="指标:" prop="norm"> <el-input v-model="form.norm" class="full-width-input" :placeholder="pageType === 'detail' ? ' ' : '请输入指标'" autosize type="textarea" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="功能:" prop="ability"> <el-input v-model="form.ability" class="full-width-input" :placeholder="pageType === 'detail' ? ' ' : '请输入功能'" autosize type="textarea" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="组成:" prop="compose"> <el-input v-model="form.compose" class="full-width-input" :placeholder="pageType === 'detail' ? ' ' : '请输入组成'" autosize type="textarea" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> </el-form> </detail-page> </app-container> </template> <style lang="scss" scoped> .step { line-height: 28px; font-size: 20px; color: #3d7eff; font-weight: bold; margin-bottom: 5px; width: fit-content; } </style> <style lang="scss"> .fieldtest-record-detail { .el-table thead.is-group th.el-table__cell { background: #f2f6ff; } } </style>