From be92dd1a7b4cfe88e83064bf24f7497bcdca3502 Mon Sep 17 00:00:00 2001 From: shaoleiliu-netizen123 <480188199@qq.com> Date: Thu, 6 Aug 2026 09:59:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BE=E5=B7=A5=E5=B7=A5=E5=8D=95=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/AssingWorkDetail.ts | 7 +- src/api/qualityTesting.ts | 4 +- src/api/submitLog.ts | 5 +- src/views/biz/device/index.vue | 8 +- src/views/biz/station/index.vue | 1 - src/views/login/index.vue | 1 - .../componets/AssingWorkTreeTable.vue | 110 ++++++++++++++---- .../production/componets/QualityInfoPage.vue | 45 ++++++- .../componets/SubmitLogInfoPage.vue | 44 ++++++- vite.config.ts | 4 +- 10 files changed, 188 insertions(+), 41 deletions(-) diff --git a/src/api/AssingWorkDetail.ts b/src/api/AssingWorkDetail.ts index 1ec912c..81c4598 100644 --- a/src/api/AssingWorkDetail.ts +++ b/src/api/AssingWorkDetail.ts @@ -72,10 +72,11 @@ export const assingWorkDetailApi = { //根据派工id获取详情信息 - selectAssingWorkDetailListByAssingWorkId(assingWorkId:number) { + selectAssingWorkDetailListByAssingWorkId(params:{page?:number;pageSize?:number;assingWorkId?:number}) { return request({ - url:`/biz/assingWorkDetail/getAssingWorkDetailList/${assingWorkId}`, - method:"get" + url:`/biz/assingWorkDetail/getAssingWorkDetailList`, + method:"get", + params }) } } \ No newline at end of file diff --git a/src/api/qualityTesting.ts b/src/api/qualityTesting.ts index 54df286..cd7f07d 100644 --- a/src/api/qualityTesting.ts +++ b/src/api/qualityTesting.ts @@ -106,7 +106,7 @@ export const qualityTestingApi = { }, //加载质检单 - loadQualityTestingList(assingId:number) { - return request({url:`/mes/qc/loadQualityTestingList/${assingId}`,method:'get'}) + loadQualityTestingList(params:{page?:number,pageSize?:number,assingId?:number}) { + return request({url:`/mes/qc/loadQualityTestingList`,method:'get', params}) } } \ No newline at end of file diff --git a/src/api/submitLog.ts b/src/api/submitLog.ts index 97f7962..80f2d8d 100644 --- a/src/api/submitLog.ts +++ b/src/api/submitLog.ts @@ -99,7 +99,8 @@ export const submitLogApi = { }, //加载汇报列表 - loadSumbitLog(assingId?:number){ - return request({url:`/mes/report/loadSumbitLog/${assingId}`,method:'get'}) + loadSumbitLog(params:{assingId:number,page?:number,pageSize?:number}){ + console.log(params) + return request({url:`/mes/report/loadSumbitLog`,method:'get',params}) } } diff --git a/src/views/biz/device/index.vue b/src/views/biz/device/index.vue index ff7a71a..ef9804e 100644 --- a/src/views/biz/device/index.vue +++ b/src/views/biz/device/index.vue @@ -379,7 +379,13 @@ const columns: DataTableColumns = [ title: '新代ID', key: 'synEquipId', width: 90, render: (row) => row.synEquipId ?? '-' }, - {title: '设备类型', key: 'deviceType'}, + {title: '设备类型', key: 'deviceTypeId', + render: (row) =>{ + let val = row.deviceTypeId + const opt = deviceTypeList.value.find(o => o.value === val || String(o.value) === String(val)) + return h(NTag, {type: opt.class, size: 'small'}, {default: () => opt.label}) + } + }, {title: '设备负责人', key: 'deviceManagerName'}, {title: '所属工段', key: 'sectionName'}, {title: '设备型号', key: 'spec'}, diff --git a/src/views/biz/station/index.vue b/src/views/biz/station/index.vue index d6c4c60..4ece1e6 100644 --- a/src/views/biz/station/index.vue +++ b/src/views/biz/station/index.vue @@ -217,7 +217,6 @@ const columns: DataTableColumns = [ { type: 'selection' }, { title: '工位编码', key: 'deviceCode' }, { title: '工位名称', key: 'deviceName' }, - { title: '工位类型', key: 'deviceType' }, { title: '所属工段', key: 'sectionName' }, { title: '状态', key: 'status', render:(row) =>{ diff --git a/src/views/login/index.vue b/src/views/login/index.vue index b68194a..c553e4c 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -606,7 +606,6 @@ async function doLogin() { if (rememberMeEnabled.value) { loginData.rememberMe = formData.rememberMe } - await userStore.login(loginData) message.success('登录成功') const redirect = route.query.redirect as string diff --git a/src/views/production/componets/AssingWorkTreeTable.vue b/src/views/production/componets/AssingWorkTreeTable.vue index 279040a..144c4e4 100644 --- a/src/views/production/componets/AssingWorkTreeTable.vue +++ b/src/views/production/componets/AssingWorkTreeTable.vue @@ -22,6 +22,7 @@ :max-height="1000" size="small" style="margin-bottom:15px" + @update-expanded-row-keys="handleExpandChange" /> @@ -105,7 +106,7 @@ import { import { mytasks,type AssingWork } from '@/api/production'; import { - NButton, NSpace, NTag, NDataTable, DataTableColumns, NDescriptions, NDescriptionsItem + NButton, NSpace, NTag, NDataTable, DataTableColumns, NDescriptions, NDescriptionsItem, NPagination } from 'naive-ui' import { dictDataApi } from '@/api/org' import { assingWorkDetailApi,AssingWorkDetail } from '@/api/AssingWorkDetail' @@ -360,6 +361,7 @@ const AssingWorkDetailColums:DataTableColumns = [ render(row:any) { const val = row.status const opt = qcAssingWorkDetailStatusOptions.value.find(o => o.value === val || String(o.value) === String(val)) + if (!opt) return val ?? '-' return h(NTag, { type: opt.class, size: 'small' }, { default: () => opt.label }) @@ -449,48 +451,112 @@ function AssingWorkToggleExpandAll() { } // 缓存:key=派工id,value=明细数组 -const expandDataMap = new Map() +interface DetailPageState { + list: AssingWorkDetail[] + page: number + pageSize: number + total: number + loading: boolean +} +// key:父行id +const expandDetailMap = new Map() function renderAssingWorkExpand(row: AssingWork) { - // 1. 首次展开,发起请求 - if (!expandDataMap.has(row.id)) { - expandDataMap.set(row.id, []) - loadingRowIds.value.add(row.id) + const rowId = row.id - // 异步请求,不阻塞当前渲染 - getAssingWorkDetail(row.id).then((detailList) => { - expandDataMap.set(row.id, detailList) - loadingRowIds.value.delete(row.id) - }) + if (!expandDetailMap.has(rowId)) { + expandDetailMap.set(rowId, reactive({ + list: [], + page: 1, + pageSize: 10, + total: 0, + loading: true + })) + loadDetail(rowId) } - // 2. 根据缓存状态渲染 - if (loadingRowIds.value.has(row.id)) { - return h('div', { style: 'padding:12px' }, '加载中...') - } + const state = expandDetailMap.get(rowId)! + console.log(state) + console.log(state.list) + + // 加载中提示 + // if (state.loading) { + // return h('div', {style: 'padding:12px'}, '加载中...') + // } + - const tableData = expandDataMap.get(row.id)! return h('div', { style: 'padding: 0 16px 12px' }, [ h(NDataTable, { columns: AssingWorkDetailColums, - data: tableData, + data: state.list, rowKey: DetailRowKey, size: 'small', bordered: true, striped: true, scrollX: 1360 - }) + }), + // ✅ 复刻你原来的分页容器 + n‑pagination + prefix插槽 + h('div', { + class: 'pagination-container', + style: 'display: flex; justify-content: flex-end; margin-top: 12px' + }, [ + h(NPagination, { + page: state.page, + pageSize: state.pageSize, + itemCount: state.total, + onUpdatePage: (p: number) => handleDetailPageChange(rowId, p), + onUpdatePageSize: (sz: number) => handleDetailPageSizeChange(rowId, sz) + }, { + // ✅ #prefix 插槽 + prefix: () => h('span', `共 ${state.total} 条`) + }) + ]) ]) } +// 分页切换事件,点击页码/每页大小 +async function handleDetailPageChange(rowId: number,page:number) { + const state = expandDetailMap.get(rowId) + if (!state) return + state.page = page + loadDetail(rowId) +} + +async function handleDetailPageSizeChange(rowId: number,pageSize: number) { + const state = expandDetailMap.get(rowId) + if (!state) return + state.pageSize = pageSize + state.page = 1 + loadDetail(rowId) +} + +function handleExpandChange(openKeys: number[]){ + for (const [rowId] of expandDetailMap) { + if (!openKeys.includes(rowId)) { + expandDetailMap.delete(rowId) + } + } +} -async function getAssingWorkDetail(assingWorkId:number) { - const res = await assingWorkDetailApi.selectAssingWorkDetailListByAssingWorkId(assingWorkId) - return res - } +const loadDetail = async (rowId: number)=>{ + const state = expandDetailMap.get(rowId) + if (!state) return + state.loading = true + try { + const res = await assingWorkDetailApi.selectAssingWorkDetailListByAssingWorkId({ + assingWorkId: rowId, + page: state.page, + pageSize: state.pageSize + }) + state.list = res.list + state.total = res.total + }finally { + state.loading = false + } +} // 加载字典选项 async function loadDictOptions() { diff --git a/src/views/production/componets/QualityInfoPage.vue b/src/views/production/componets/QualityInfoPage.vue index 9db9414..2222e83 100644 --- a/src/views/production/componets/QualityInfoPage.vue +++ b/src/views/production/componets/QualityInfoPage.vue @@ -31,12 +31,27 @@ remote :scroll-x="600" /> - +
+ + + +