<!-- 设备信息表格 --> <script lang="ts" setup name="LoginLog"> import { reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import { getInfoList, getInfoListPage, getInfoListTogether } from '@/api/eqpt/device/info' const $props = defineProps({ statusName: { type: String, default: '', }, }) const { proxy } = getCurrentInstance() as any const listQuery = reactive({ certificateValidStart: '', certificateValidEnd: '', deptIds: '', // 使用部门 usageStatus: '', // 使用状态 // usePosition: '', // 使用岗位 equipmentNo: '', // 统一编号 equipmentName: '', // 设备名称 equipmentType: '1', // 设备类型(1受检设备;2特种设备) offset: 1, limit: 1, }) const columns = ref([ { text: '统一编号', value: 'equipmentNo', align: 'center', }, { text: '设备名称', value: 'equipmentName', align: 'center', }, { text: '型号规格', value: 'model', align: 'center', }, { text: '出场编号', value: 'succeed', align: 'center', }, { text: '使用岗位', value: 'usePosition', align: 'center', }, { text: '计量标识', value: 'meterIdentify', align: 'center', }, { text: '检定周期', value: 'checkCycle', align: 'center', }, { text: '证书有效期', value: 'certificateValid', align: 'center', }, ]) const allColums = ref([ { text: '管理状态', value: 'usageStatus', align: 'center', }, { text: '管理状态', value: 'usageStatus', align: 'center', }, ]) const list = ref([]) const total = ref(0) const listLoading = ref(true) // 获取日志数据 const fetchData = (isNowPage = true) => { listLoading.value = true if (!isNowPage) { // 是否显示当前页,否则跳转第一页 listQuery.offset = 1 } getInfoListPage(listQuery, $props.statusName).then((response) => { list.value = response.data.rows total.value = parseInt(response.data.total) listLoading.value = false }) } fetchData() // 打开详情对话框 const detail = (row: any) => { ElMessageBox.alert(row.message, '详情', { confirmButtonText: '确定', }) } // 清空日志 const cleanAll = () => { ElMessageBox.confirm('确定要清空全部日志吗?', '确认操作', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', }).then(() => { // delLoginLog().then((response) => { // if (response.code === 200) { // ElMessage({ // message: '删除成功', // type: 'success', // }) // list.value = [] // total.value = 0 // // this.fetchData() // } // }) }) } // 查询数据 const search = () => { fetchData(false) } // 获取聚合表格数据 const togetherLoading = ref(true) const togetherList = ref([]) const fetchTogetherData = () => { togetherLoading.value = true getInfoListTogether(listQuery).then((res) => { togetherList.value = res.data togetherLoading.value = false }) } // 获取展开行内表格数据 const expandLoading = ref(true) const expandList = ref([]) const fetchExpandData = (params: any) => { expandLoading.value = true getInfoList(params).then((res) => { expandList.value = res.data expandLoading.value = false }) } const getRowKeys = (row: any) => { // 获取当前行id return row.equipmentName // 这里看这一行中需要根据哪个属性值是id } // 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写 const changePage = (val: { size: number; page: number }) => { if (val && val.size) { listQuery.limit = val.size } if (val && val.page) { listQuery.offset = val.page } fetchData() } // 证书有效期开始结束时间 const datetimerange = ref() watch(() => datetimerange.value, (newVal) => { if (newVal.length === 2) { listQuery.certificateValidStart = newVal[0] listQuery.certificateValidEnd = newVal[1] } }) // 控制展开行 const expands = ref() const expandChange = (row: any, expandedRows: any) => { if (expandedRows.length) { expands.value = [] if (row) { expands.value.push(row.equipmentName) } } else { expands.value = [] } } watch(() => expands.value, (newVal) => { fetchExpandData({ equipmentName: newVal[0] }) }, { deep: true, }) const $router = useRouter() // 新建编辑操作 const handler = (row: any, type: string) => { $router.push({ path: `/dinfo/${type}`, query: { row: JSON.stringify(row), }, }) } // 切换表格标识 true:普通表格 false:聚合表格 const tableFlage = ref(true) const changeTable = () => { tableFlage.value = !tableFlage.value if (tableFlage.value) { // 获取普通表格数据 fetchData() } else { // 获取聚合表格数据 fetchTogetherData() } } // 审批状态发生变化 watch(() => $props.statusName, (newVal) => { fetchData() tableFlage.value = true }, { deep: true, immediate: true, }) </script> <template> <app-container> <!-- 筛选条件 --> <search-area @search="search"> <search-item> <el-input v-model.trim="listQuery.equipmentNo" placeholder="统一编号" clearable /> </search-item> <search-item> <el-input v-model.trim="listQuery.equipmentName" placeholder="设备名称" clearable /> </search-item> <search-item> <el-input v-model.trim="listQuery.deptIds" placeholder="所属岗位" clearable /> </search-item> <search-item> <el-select v-model="listQuery.usageStatus" placeholder="管理状态" clearable> <el-option v-for="item in []" :key="item.value" :label="item.name" :value="item.value" /> </el-select> </search-item> <search-item> <el-date-picker v-model="datetimerange" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" range-separator="至" start-placeholder="证书有效期开始时间" end-placeholder="证书有效期结束时间" /> </search-item> </search-area> <table-container> <template v-if="$props.statusName === '全部'" #btns-right> <icon-button icon="icon-change" title="切换列表状态" @click="changeTable" /> <icon-button icon="icon-sweep" title="扫描" /> <icon-button icon="icon-add" title="新增" @click="handler({}, 'create')" /> <icon-button icon="icon-import" title="批量导入" /> <icon-button icon="icon-template" title="模板下载" /> <icon-button icon="icon-export" title="导出" /> </template> <!-- 普通表格 --> <normal-table v-show="tableFlage" :data="list" :total="total" :columns="columns" :query="listQuery" :list-loading="listLoading" :is-showmulti-select="true" @change="changePage" > <template #columns> <el-table-column v-if="$props.statusName === '全部'" label="管理状态" align="center"> <template #default="scope"> {{ scope.row.usageStatus }} </template> </el-table-column> <el-table-column v-if="$props.statusName === '全部'" label="备注" align="center"> <template #default="scope"> {{ scope.row.remark }} </template> </el-table-column> <el-table-column label="操作" width="140" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="handler({ id: scope.row.id }, 'detail')"> 查看 </el-button> <el-button link type="primary" size="small" @click="handler({ id: scope.row.id }, 'update')"> 编辑 </el-button> <el-button link type="danger" size="small" @click="detail(scope.row)"> 删除 </el-button> </template> </el-table-column> </template> </normal-table> <!-- 展开行表格 --> <normal-table v-show="!tableFlage" class="nortable-header" :data="[]" :total="0" :columns="columns" :options="{ needIndex: false, // 是否需要序号列 border: true, // 是否需要上方边框 }" :pagination="false" :is-showmulti-select="true" /> <el-table v-show="!tableFlage" v-loading="togetherLoading" :data="togetherList" border style="width: 100%;" :row-key="getRowKeys" :expand-row-keys="expands" :show-header="false" @expand-change="expandChange" > <el-table-column type="expand"> <template #default="props"> <normal-table :data="list" :total="total" :columns="columns" :list-loading="expandLoading" :options="{ needIndex: false, // 是否需要序号列 border: true, // 是否需要上方边框 }" :pagination="false" :is-showmulti-select="true" :show-header="false" /> </template> </el-table-column> <el-table-column label="设备名称" prop="equipmentName" align="center" /> <el-table-column label="数量" align="center"> <template #default="scope"> 共计{{ scope.row.count }}台 </template> </el-table-column> </el-table> </table-container> </app-container> </template> <style lang="scss" scoped> .nortable-header { ::v-deep(.el-table__body-wrapper) { display: none; } } </style>