<!-- 受检智能模型管理 --> <script lang="ts" setup name="EqptManage"> import { ElMessage } from 'element-plus' import dayjs from 'dayjs' import { getDictByCode } from '@/api/system/dict' import type { deptType, dictType } from '@/global' import { getDeptMeasureList, getTaskList } from '@/api/business/manager/task' import useUserStore from '@/store/modules/user' const user = useUserStore() // 用户信息 const $router = useRouter() const loading = ref(false) const labCode = ref('') // 实验室代码 const groupCode = ref('') as any // 组别代码 const isAdministrator = ref('0') // 是不是超级管理员 const showEmpty = ref(false) const emptyDisc = ref('') // 描述文字 const columns = ref([ { text: '智能模型名称', value: 'sampleName', align: 'center' }, { text: '规格型号', value: 'sampleModel', align: 'center' }, { text: '出厂编号', value: 'manufactureNo', align: 'center' }, { text: '送检时间', value: 'realDeliverTime', align: 'center', width: '120' }, { text: '要求检完时间', value: 'requireOverTime', align: 'center', width: '120' }, ]) as any const columns_distributed = [ { text: '智能模型名称', value: 'sampleName', align: 'center' }, { text: '规格型号', value: 'sampleModel', align: 'center' }, { text: '出厂编号', value: 'manufactureNo', align: 'center' }, { text: '送检时间', value: 'realDeliverTime', align: 'center', width: '120' }, { text: '要求检完时间', value: 'requireOverTime', align: 'center', width: '120' }, ] const columns_measure = [ { text: '智能模型名称', value: 'sampleName', align: 'center' }, { text: '规格型号', value: 'sampleModel', align: 'center' }, { text: '出厂编号', value: 'manufactureNo', align: 'center' }, // { text: '送检时间', value: 'realDeliverTime', align: 'center', width: '120' }, { text: '要求检完时间', value: 'requireOverTime', align: 'center', width: '120' }, ] const distributedEquipmentCount = ref('-') // 待分发智能模型数量 const measureEquipmentCount = ref('-') // 待检智能模型数量 const overdueEquipmentCount = ref('-') // 超期未检智能模型数量 const distributedList = ref([]) // 待分发检智能模型数量 const measureList = ref([]) // 待检智能模型数量 const overdueList = ref([]) // 超期未检智能模型数量 // -------------------------------------标签-------------------------------------------------- const radioMenus = ref([ // 标签内容 { name: '待分发列表', value: 'distributed' }, { name: '待检列表', value: 'measure' }, { name: '超期未检列表', value: 'overdue' }, ]) const current = ref('') // 选择的tab 默认基本信息 // ------------------------------------------字典---------------------------------------------- const groupCodeList = ref([]) as any // 组别 const labCodeList = ref<dictType[]>([]) // 实验室 /** * 获取字典 */ function getDict() { // 组别 getDictByCode('bizGroupCode').then((response) => { const tempMenu = ['电学电源组', '热工力学组', '无线电脉冲组'] tempMenu.forEach((item) => { const tempFindData = response.data.find((e: { name: string; value: string }) => e.name === item) if (tempFindData) { groupCodeList.value.push({ name: tempFindData.name, id: `${tempFindData.id}`, value: `${tempFindData.value}`, }) } }) groupCodeList.value.unshift({ id: 'all', name: '全部', value: null, }) }) // 实验室 getDictByCode('bizGroupCodeEquipment').then((response) => { labCodeList.value = response.data }) } getDict() // -------------------------------------数据-------------------------------------------------------- // ============待分发、已超期列表=====来源于任务分发======= const listQueryDistributed = ref({ sampleNo: '', // 样品编号 sampleName: '', // 样品名称 orderNo: '', // 委托书编号 customerNo: '', // 委托方代码 customerName: '', // 委托方名称 isUrgent: '', // 是否加急 sampleBelong: '', // 样品属性 startTime: '', // 应检完时间-开始 endTime: '', // 应检完时间-结束 sampleStatus: '2', // 样品状态:默认待分发 groupCode: '', // 实验室组别 labCode: '', // 实验室代码 offset: 1, limit: 99999999, }) /** * 查询待分发和已超期列表 * @param type 查询类型 distributed待分发 overdue已超期 */ function fetchDistributedData(type: 'distributed' | 'overdue') { listQueryDistributed.value.sampleStatus = type === 'distributed' ? '2' : '8' listQueryDistributed.value.labCode = labCode.value listQueryDistributed.value.groupCode = groupCode.value loading.value = true getTaskList(listQueryDistributed.value).then((response) => { const tempList = response.data.rows.map((item: { realDeliverTime: string; requireOverTime: string }, index: number) => { return { ...item, realDeliverTime: item.realDeliverTime ? dayjs(item.realDeliverTime).format('YYYY-MM-DD') : item.realDeliverTime, requireOverTime: item.requireOverTime ? dayjs(item.requireOverTime).format('YYYY-MM-DD') : item.requireOverTime, sampleName: index % 3 === 0 ? '吸烟检测模型' : index % 3 === 1 ? '安全帽检测模型' : '工服检测模型', } }) if (type === 'distributed') { // 待分发 distributedList.value = tempList distributedEquipmentCount.value = response.data.total } else { // 已超期 overdueList.value = tempList // overdueEquipmentCount.value = response.data.total overdueEquipmentCount.value = '0' } loading.value = false }) } // =================待检测(来源于实验室待检测智能模型)============ const listQueryMeasure = ref({ customerName: '', // 委托方名称 customerNo: '', // 委托方编号 helpInstruction: '', // 辅助字段 isUrgent: '', // 是否加急(1是0否null全部) manufactureNo: '', // 出厂编号 manufacturer: '', // 厂商 model: '', // 规格型号 orderNo: '', // 任务单编号 sampleName: '', // 受检智能模型名称 sampleNo: '', // 样品编号 startTime: '', // 要求检完时间开始 endTime: '', // 要求检完时间结束 measureStatus: '2', // 检测状态 2 待检测 measureValidDateStart: '', // 检定有效期开始 measureValidDateEnd: '', // 检定有效期结束 meterIdentify: '', // 计量标识 traceDateStart: '', // 测试、校准或检定日期开始 traceDateEnd: '', // 测试、校准或检定日期结束 restrictionInstruction: '', // 限用说明 conclusion: '', // 结论 groupCode: '', // 实验室组别 labCode: '', // 实验室代码 glStaff: '0', // 是否为综合管理组人员1/0 offset: 1, limit: 99999999, }) // 数据查询 function fetchMeasureData() { listQueryMeasure.value.glStaff = user.groupNo === 'GL' ? '1' : '0' listQueryMeasure.value.labCode = labCode.value listQueryMeasure.value.groupCode = groupCode.value loading.value = true getDeptMeasureList(listQueryMeasure.value).then((res) => { measureList.value = res.data.rows.map((item: any, index: number) => { return { ...item, realDeliverTime: item.realDeliverTime ? dayjs(item.realDeliverTime).format('YYYY-MM-DD') : item.realDeliverTime, requireOverTime: item.requireOverTime ? dayjs(item.requireOverTime).format('YYYY-MM-DD') : item.requireOverTime, sampleName: index % 3 === 0 ? '吸烟检测模型' : index % 3 === 1 ? '安全帽检测模型' : '工服检测模型', } }) // measureEquipmentCount.value = res.data.total measureEquipmentCount.value = '6' loading.value = false }) } // --------------------------------------------钩子------------------------------------------------- // 改变实验室\组别 const changeSelect = () => { if (!showEmpty.value && (isAdministrator.value === '1' || (user.bizLabCode && user.groupNo))) { fetchData() } } function fetchData() { fetchDistributedData('distributed') fetchDistributedData('overdue') fetchMeasureData() } const controlMenu = () => { if (user.bizLabCode && user.groupNo) { if (user.groupNo === 'GL' || isAdministrator.value === '1') { radioMenus.value = [ // 标签内容 { name: '待分发列表', value: 'distributed' }, { name: '待检列表', value: 'measure' }, { name: '超期未检列表', value: 'overdue' }, ] } else { radioMenus.value = [ // 标签内容 { name: '待检列表', value: 'measure' }, { name: '超期未检列表', value: 'overdue' }, ] } } current.value = radioMenus.value[0].value } watch(() => current.value, (newValue) => { if (newValue === 'measure') { columns.value = columns_measure } else { columns.value = columns_distributed } }) onMounted(() => { isAdministrator.value = user.roleTips.includes('administrator') ? '1' : '0' // 是否是超级管理员 console.log('是否是超级管理员', user.roleTips, isAdministrator.value) if (isAdministrator.value === '1') { // 超级管理员 labCode.value = user.bizLabCode || 'H' // 有实验室就默认本人实验室,没有实验室就默认海口 groupCode.value = null // 超级管理员默认查看全部 controlMenu() fetchData() } else { // 不是超级管理员 if (!user.bizLabCode) { // 没有实验室 emptyDisc.value = '此用户非超级管理员且无实验室,无权限查看' showEmpty.value = true } else if (!user.groupNo) { // 有实验室但没有组 emptyDisc.value = '此用户非超级管理员且无组别,无权限查看' showEmpty.value = true } else { // 有实验室且有组 showEmpty.value = false if (user.groupNo === 'GL') { // 综合管理组 labCode.value = user.bizLabCode // 实验室 // 综合管理组默认查实验室下面的所有数据,不筛选组别 groupCode.value = '' // 综合管理组可以查看待分发 } else { // 其他组 labCode.value = user.bizLabCode // 实验室 // 其他组默认筛选自己组 groupCode.value = user.groupNo } controlMenu() fetchData() } } }) </script> <template> <el-empty v-show="showEmpty" :description="emptyDisc" /> <div v-show="!showEmpty" class="workBench-measure-manage"> <!-- 超级管理员才可以筛选实验室 --> <el-select v-model="labCode" :disabled="isAdministrator === '0'" style="width: 130px;position: absolute; top: 5px;right: 150px;" class="short-input" placeholder="实验室" clearable @change="changeSelect"> <el-option v-for="item in labCodeList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> <!-- 综合管理组才可以筛选组别 --> <el-select v-model="groupCode" :disabled="isAdministrator === '0' && user.groupNo !== 'GL'" style="width: 130px;position: absolute; top: 5px;right: 10px;" class="short-input" placeholder="组别" clearable @change="changeSelect"> <el-option v-for="item in groupCodeList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> <div v-loading="loading" style="display: flex;flex-direction: column;width: 100%;height: 100%;"> <!-- 核查记录统计 --> <div style="height: 40px;display: flex;margin: 16px 0;justify-content: space-around;"> <div v-show="user.groupNo === 'GL' || isAdministrator === '1'" style="display: flex;margin-right: 20px;"> <el-icon :size="30" color="#3d7eff"> <svg-icon name="icon-device" /> </el-icon> <div> <div style="font-size: 14px;"> 待分发智能模型数量 </div> <div style="margin-left: 10px;color: #000;font-weight: 600;"> {{ distributedEquipmentCount }} </div> </div> </div> <div style="display: flex;"> <el-icon :size="30" color="#ff9a00"> <svg-icon name="icon-device" /> </el-icon> <div> <div style="font-size: 14px;"> 待检智能模型数量 </div> <div style="margin-left: 10px;color: #000;font-weight: 600;"> {{ measureEquipmentCount }} </div> </div> </div> <div style="display: flex;"> <el-icon :size="30" color="#df4b44"> <svg-icon name="icon-device" /> </el-icon> <div> <div style="font-size: 14px;"> 超期未检智能模型数量 </div> <div style="margin-left: 10px;color: #000;font-weight: 600;"> {{ overdueEquipmentCount }} </div> </div> </div> </div> <el-radio-group v-model="current" size="small" style="margin-bottom: 10px;"> <el-radio-button v-for="item in radioMenus" :key="item.value" :label="item.value"> {{ item.name }} </el-radio-button> </el-radio-group> <el-table :data="current === 'distributed' ? distributedList : current === 'measure' ? measureList : overdueList" border style="width: 100%;height: 100%;" > <el-table-column align="center" label="序号" width="80" type="index" /> <el-table-column v-for="item in columns" :key="item.value" :prop="item.value" :label="item.text" :width="item.width" align="center" show-overflow-tooltip /> </el-table> </div> </div> </template> <style lang="scss" scoped> .workBench-measure-manage { width: 100%; height: 100%; overflow: auto; box-sizing: border-box; .title { font-size: 16px; padding: 0; margin: 0 0 6px; } } </style>