派工工单添加分页

This commit is contained in:
shaoleiliu-netizen123 2026-08-06 09:59:48 +08:00
parent 59890053b9
commit be92dd1a7b
10 changed files with 188 additions and 41 deletions

View File

@ -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
})
}
}

View File

@ -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})
}
}

View File

@ -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})
}
}

View File

@ -379,7 +379,13 @@ const columns: DataTableColumns<Device> = [
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'},

View File

@ -217,7 +217,6 @@ const columns: DataTableColumns<Device> = [
{ type: 'selection' },
{ title: '工位编码', key: 'deviceCode' },
{ title: '工位名称', key: 'deviceName' },
{ title: '工位类型', key: 'deviceType' },
{ title: '所属工段', key: 'sectionName' },
{ title: '状态', key: 'status',
render:(row) =>{

View File

@ -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

View File

@ -22,6 +22,7 @@
:max-height="1000"
size="small"
style="margin-bottom:15px"
@update-expanded-row-keys="handleExpandChange"
/>
</n-scrollbar>
@ -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<AssingWorkDetail> = [
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=idvalue=
const expandDataMap = new Map<number, any[]>()
interface DetailPageState {
list: AssingWorkDetail[]
page: number
pageSize: number
total: number
loading: boolean
}
// keyid
const expandDetailMap = new Map<number, DetailPageState>()
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
})
}),
// + npagination + 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() {

View File

@ -31,12 +31,27 @@
remote
:scroll-x="600"
/>
<div class="pagination-container" style="display: flex; justify-content: flex-end; margin-top: 12px">
<n-pagination
v-model:page="pagination.page"
v-model:page-size="pagination.pageSize"
:item-count="pagination.itemCount"
:page-sizes="[2,10, 20, 50, 100]"
show-size-picker
show-quick-jumper
@update:page="handlePageChange"
@update:page-size="handlePageSizeChange"
>
<template #prefix>
{{ pagination.itemCount }}
</template>
</n-pagination>
</div>
</n-card>
</template>
<script setup lang="ts">
import { NCard, NDataTable, NGi,NTag, NGrid,DataTableColumns} from "naive-ui";
import {onMounted, ref,h} from "vue";
import {onMounted, ref, h, reactive} from "vue";
import { dictDataApi } from '@/api/org'
import {QualityTesting,qualityTestingApi} from "@/api/qualityTesting.ts";
@ -47,6 +62,12 @@ const props =defineProps(
baseInfo:Object
}
)
const pagination = reactive({
page: 1,
pageSize: 10,
itemCount: 0
})
//
const qcSourceTypeOptions = ref<{ label: string; value: any;class:any }[]>([])
@ -93,8 +114,24 @@ async function loadDictOptions() {
const qualityTestingList = ref<QualityTesting[]>([])
async function loadQualityTestingList() {
const res = await qualityTestingApi.loadQualityTestingList(props.assingId)
qualityTestingList.value = res
const res = await qualityTestingApi.loadQualityTestingList({
assingId:props.assingId,
page: pagination.page,
pageSize: pagination.pageSize
})
qualityTestingList.value = res.list
pagination.itemCount = res.total
}
function handlePageChange(page: number) {
pagination.page = page
loadQualityTestingList()
}
function handlePageSizeChange(pageSize: number) {
pagination.pageSize = pageSize
pagination.page = 1
loadQualityTestingList()
}
onMounted(()=>{

View File

@ -32,11 +32,27 @@
:scroll-x="600"
/>
<div class="pagination-container" style="display: flex; justify-content: flex-end; margin-top: 12px">
<n-pagination
v-model:page="pagination.page"
v-model:page-size="pagination.pageSize"
:item-count="pagination.itemCount"
:page-sizes="[2,10, 20, 50, 100]"
show-size-picker
show-quick-jumper
@update:page="handlePageChange"
@update:page-size="handlePageSizeChange"
>
<template #prefix>
{{ pagination.itemCount }}
</template>
</n-pagination>
</div>
</n-card>
</template>
<script setup lang="ts">
import { NCard, NDataTable, NGi,NTag, NGrid,DataTableColumns} from "naive-ui";
import {onMounted, ref,h} from "vue";
import {onMounted, ref, h, reactive} from "vue";
import { dictDataApi } from '@/api/org'
import { SubmitLog,submitLogApi} from '@/api/submitLog'
@ -51,6 +67,12 @@ const props =defineProps(
const submitStatusOptions = ref<{ label: string; value: any ;class:any}[]>([])
const pagination = reactive({
page: 1,
pageSize: 10,
itemCount: 0
})
//
const reportRecordsColums:DataTableColumns<SubmitLog> = [
@ -79,8 +101,24 @@ async function loadDictOptions() {
//
const submitLogList = ref<SubmitLog[]>([])
async function load() {
const res = await submitLogApi.loadSumbitLog(props.assingId)
submitLogList.value = res
const res = await submitLogApi.loadSumbitLog({
assingId:props.assingId,
page: pagination.page,
pageSize: pagination.pageSize
})
submitLogList.value = res.list
pagination.itemCount = res.total
}
function handlePageChange(page: number) {
pagination.page = page
load()
}
function handlePageSizeChange(pageSize: number) {
pagination.pageSize = pageSize
pagination.page = 1
load()
}
onMounted(()=>{

View File

@ -16,11 +16,11 @@ export default defineConfig({
emptyOutDir: true
},
server: {
// host:'192.168.12.11', //true,
host:'192.168.12.4', //true,
port: 3000,
proxy: {
'/api': {
target:'http://192.168.12.12:8888/', //'http://192.168.5.230:8888',
target:'http://192.168.12.4:8888/', //'http://192.168.5.230:8888',
//target:'http://192.168.12.4:8888/',
//target:'http://192.168.12.230:8888',
//target:'http://192.168.5.230:8888',