Commit f7899557 by qinjianhui

feat: 代码优化

parent d70f0b3f
...@@ -33,7 +33,7 @@ export interface SearchForm { ...@@ -33,7 +33,7 @@ export interface SearchForm {
size?: string size?: string
logisticsCompanyCode?: string logisticsCompanyCode?: string
blocking?: boolean blocking?: boolean
standardDesignImage?: boolean standardDesignImage?: number
} }
export interface FactoryOrderNewListData { export interface FactoryOrderNewListData {
...@@ -91,15 +91,29 @@ export interface LogListData { ...@@ -91,15 +91,29 @@ export interface LogListData {
export interface BatchManageData { export interface BatchManageData {
id: number id: number
batchNo?: string factoryId?: number
downloadStatus?: string batchArrangeNum?: string
orderCount?: number billType?: string
totalCount?: number url?: string
creator?: string tiffUrl?: string
syntheticStatus?: boolean
downloadStatus?: boolean
productNum?: number
materialNum?: number
craftType?: string craftType?: string
timesRange?: string employeeAccount?: string
employeeId?: number
createTime?: string createTime?: string
extractTimes?: number failReason?: string
failTime?: string
automaticComposing?: boolean
composingParam?: string
printProductOrder?: boolean
printPickOrder?: boolean
prnUrl?: string
prnDownloadStatus?: string
enableArrange?: boolean
standardDesignImage?: number
} }
export interface RestockData { export interface RestockData {
......
...@@ -35,12 +35,12 @@ ...@@ -35,12 +35,12 @@
clearable clearable
style="width: 120px" style="width: 120px"
> >
<ElOption label="烫画" value="TH" /> <ElOption
<ElOption label="直喷" value="ZP" /> v-for="(item, index) in processType"
<ElOption label="刺绣" value="CX" /> :key="index"
<ElOption label="雕刻" value="DK" /> :value="item.value"
<ElOption label="白胚" value="BP" /> :label="item.label"
<ElOption label="其他" value="QT" /> ></ElOption>
</ElSelect> </ElSelect>
</ElFormItem> </ElFormItem>
<ElFormItem label="下载状态"> <ElFormItem label="下载状态">
...@@ -95,6 +95,7 @@ ...@@ -95,6 +95,7 @@
<div class="batch-manage-table"> <div class="batch-manage-table">
<TableView <TableView
v-loading="loading"
:paginated-data="tableData" :paginated-data="tableData"
:columns="columns" :columns="columns"
selectionable selectionable
...@@ -109,12 +110,7 @@ ...@@ -109,12 +110,7 @@
</el-tag> </el-tag>
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<ElButton <ElButton type="primary" link size="small" @click="handleDownload()">
type="primary"
link
size="small"
@click="handleDownload()"
>
下载 下载
</ElButton> </ElButton>
<ElButton type="primary" link size="small" @click="handlePrintPick()"> <ElButton type="primary" link size="small" @click="handlePrintPick()">
...@@ -128,7 +124,12 @@ ...@@ -128,7 +124,12 @@
> >
生产单 生产单
</ElButton> </ElButton>
<ElButton type="warning" link size="small" @click="handleReArrange(row)"> <ElButton
type="warning"
link
size="small"
@click="handleReArrange(row)"
>
重排 重排
</ElButton> </ElButton>
<ElButton type="danger" link size="small" @click="handleDelete()"> <ElButton type="danger" link size="small" @click="handleDelete()">
...@@ -138,7 +139,7 @@ ...@@ -138,7 +139,7 @@
</TableView> </TableView>
</div> </div>
<ArrangeDialog ref="arrangeDialogRef" @success="loadData" /> <ArrangeDialog ref="arrangeDialogRef" @success="refresh" />
<ElPagination <ElPagination
v-model:current-page="currentPage" v-model:current-page="currentPage"
...@@ -148,87 +149,208 @@ ...@@ -148,87 +149,208 @@
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
style="margin: 10px auto 0" style="margin: 10px auto 0"
@size-change="handlePageSizeChange" @size-change="onPageSizeChange"
@current-change="handleCurrentPageChange" @current-change="onCurrentPageChange"
/> />
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="tsx">
import { ref, reactive, onMounted } from 'vue' import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { getBatchManageListApi, batchDeleteApi } from '@/api/factoryOrderNew' import { getBatchManageListApi, batchDeleteApi } from '@/api/factoryOrderNew'
import type { BatchManageData } from '@/types/api/factoryOrderNew' import type { BatchManageData } from '@/types/api/factoryOrderNew'
import type { PaginationData } from '@/types/api'
import type { CustomColumn } from '@/types/table' import type { CustomColumn } from '@/types/table'
import TableView from '@/components/TableView.vue' import TableView from '@/components/TableView.vue'
import ArrangeDialog from './ArrangeDialog.vue' import ArrangeDialog from './ArrangeDialog.vue'
import { getEmployeeListApi } from '@/api/common' import { getEmployeeListApi } from '@/api/common'
import type { userData } from '@/types/api/user' import type { userData } from '@/types/api/user'
import usePageList from '@/utils/hooks/usePageList'
const loading = ref(false)
const tableData = ref<BatchManageData[]>([])
const selectedRows = ref<BatchManageData[]>([]) const selectedRows = ref<BatchManageData[]>([])
const currentPage = ref(1)
const pageSize = ref(50)
const total = ref(0)
const employeeList = ref<userData[]>([]) const employeeList = ref<userData[]>([])
const arrangeDialogRef = ref<InstanceType<typeof ArrangeDialog>>() const arrangeDialogRef = ref<InstanceType<typeof ArrangeDialog>>()
interface ProcessTypeData {
label: string
value: string
}
const processType = ref<ProcessTypeData[]>([
{
label: '烫画',
value: 'TH',
},
{
label: '直喷',
value: 'ZP',
},
{
label: '刺绣',
value: 'CX',
},
{
label: '雕刻',
value: 'DK',
},
{
label: '白胚',
value: 'BP',
},
{
label: '其他',
value: 'QT',
},
])
const getStandardDesignImageText = (value: number): string => {
const map: Record<number, string> = { 0: '否', 1: '是', 2: '混合' }
return map[value] ?? '-'
}
const columns: CustomColumn<BatchManageData>[] = [ const columns: CustomColumn<BatchManageData>[] = [
{ key: 'batchNo', prop: 'batchNo', label: '批次号', minWidth: 120 }, [
{ {
key: 'downloadStatus', label: '批次号',
prop: 'downloadStatus', prop: 'batchArrangeNum',
label: '下载状态', width: 120,
minWidth: 90,
align: 'center', align: 'center',
},
{
label: '下载状态',
slot: 'downloadStatus', slot: 'downloadStatus',
width: 90,
align: 'center',
render: (item: BatchManageData) => {
return (
<div>
<el-tag type={item.downloadStatus ? 'success' : 'danger'}>
{item.downloadStatus ? '已下载' : '未下载'}
</el-tag>
</div>
)
},
}, },
{ {
key: 'orderCount',
prop: 'orderCount',
label: '订单数量', label: '订单数量',
minWidth: 90, prop: 'productNum',
width: 85,
align: 'center', align: 'center',
}, },
{ {
key: 'totalCount', label: '素材数量',
prop: 'totalCount', width: 85,
label: '全部数量', prop: 'materialNum',
minWidth: 90,
align: 'center', align: 'center',
}, },
{ key: 'creator', prop: 'creator', label: '创建人', minWidth: 80 },
{ key: 'craftType', prop: 'craftType', label: '工艺类型', minWidth: 90 },
{ key: 'timesRange', prop: 'timesRange', label: '次数范围', minWidth: 90 },
{ {
key: 'createTime', label: '创建人',
prop: 'createTime', width: 85,
label: '创建时间', prop: 'employeeAccount',
minWidth: 160, align: 'center',
sortable: true,
}, },
{ {
key: 'createTimeSort', label: '工艺类型',
width: 150,
prop: 'craftType',
align: 'center',
render: (item: BatchManageData) => {
if (!item.craftType) {
return (
<div>
<span>-</span>
</div>
)
}
const labels = item.craftType
.split(',')
.map((type) => type.trim())
.map(
(type) =>
processType.value.find((e: ProcessTypeData) => e.value === type)
?.label || type,
)
.filter(Boolean)
return (
<div>
<span>{labels.join(',')}</span>
</div>
)
},
},
{
label: '规范素材',
minWidth: 180,
prop: 'standardDesignImage',
align: 'center',
render: (item: BatchManageData) => {
return (
<div>
<span>
{getStandardDesignImageText(item.standardDesignImage ?? 0)}
</span>
</div>
)
},
},
{
label: '失败原因',
minWidth: 250,
prop: 'failReason',
align: 'left',
render: (item: BatchManageData) => {
return (
<div>
<span v-html={item.failReason}></span>
</div>
)
},
},
{
label: '创建时间',
width: 180,
prop: 'createTime', prop: 'createTime',
label: '创建时间排序', align: 'center',
minWidth: 110, },
sortable: true, {
label: '完成时间',
width: 180,
prop: 'finishTime',
align: 'center',
},
{
label: '自动排版',
width: 85,
prop: 'automaticComposing',
align: 'center',
render: (item: BatchManageData) => {
return (
<div>
<span>{item.automaticComposing ? '是' : '否'}</span>
</div>
)
},
}, },
{ {
key: 'extractTimes', label: '排版参数',
prop: 'extractTimes', width: 140,
label: '提取次数排序', prop: 'composingParam',
minWidth: 110, align: 'center',
sortable: true, render: (item: BatchManageData) => {
return (
<div>
<span>{item.composingParam?.split(';').join('\n')}</span>
</div>
)
},
}, },
{ {
key: 'operation',
label: '操作', label: '操作',
minWidth: 120, slot: 'operate',
width: 260,
align: 'center',
fixed: 'right', fixed: 'right',
slot: 'operation', prop: 'operate',
}, },
],
] ]
const filterForm = reactive({ const filterForm = reactive({
...@@ -244,23 +366,27 @@ const filterForm = reactive({ ...@@ -244,23 +366,27 @@ const filterForm = reactive({
batchNo: '', batchNo: '',
}) })
const loadData = async () => { const {
loading.value = true loading,
try { currentPage,
const res = await getBatchManageListApi( pageSize,
{ ...filterForm }, total,
currentPage.value, data: tableData,
pageSize.value, onCurrentPageChange,
) onPageSizeChange,
const page = res.data refresh,
tableData.value = page?.records || [] } = usePageList<BatchManageData>({
total.value = page?.total || 0 initPageSize: 50,
} catch (_e) { query: async (current, size) => {
tableData.value = [] const res = await getBatchManageListApi({ ...filterForm }, current, size)
} finally { return (res.data || {
loading.value = false total: 0,
} size,
} current,
records: [],
}) as PaginationData<BatchManageData>
},
})
const loadEmployeeList = async () => { const loadEmployeeList = async () => {
try { try {
...@@ -287,14 +413,13 @@ const handleBatchDelete = async () => { ...@@ -287,14 +413,13 @@ const handleBatchDelete = async () => {
try { try {
await batchDeleteApi(selectedRows.value.map((r) => r.id)) await batchDeleteApi(selectedRows.value.map((r) => r.id))
ElMessage.success('删除成功') ElMessage.success('删除成功')
loadData() refresh()
} catch (e) { } catch (e) {
const err = e as Error & { message?: string } const err = e as Error & { message?: string }
ElMessage.error(err?.message || '删除失败') ElMessage.error(err?.message || '删除失败')
} }
} }
const handleDownload = () => { const handleDownload = () => {
ElMessage.info('接口待提供') ElMessage.info('接口待提供')
} }
...@@ -319,25 +444,8 @@ const handleReArrange = (row: BatchManageData) => { ...@@ -319,25 +444,8 @@ const handleReArrange = (row: BatchManageData) => {
}) })
} }
const handlePageSizeChange = (size: number) => {
pageSize.value = size
currentPage.value = 1
loadData()
}
const handleCurrentPageChange = (page: number) => {
currentPage.value = page
loadData()
}
const refresh = () => {
currentPage.value = 1
loadData()
}
onMounted(() => { onMounted(() => {
loadEmployeeList() loadEmployeeList()
loadData()
}) })
defineExpose({ refresh }) defineExpose({ refresh })
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<div class="restock-table"> <div class="restock-table">
<TableView <TableView
v-loading="loading" v-loading="loading"
:paginated-data="pageData" :paginated-data="data"
:columns="columns" :columns="columns"
serial-numberable serial-numberable
> >
...@@ -66,29 +66,52 @@ ...@@ -66,29 +66,52 @@
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
style="margin: 10px auto 0;" style="margin: 10px auto 0;"
@size-change="handlePageSizeChange" @size-change="onPageSizeChange"
@current-change="handleCurrentPageChange" @current-change="onCurrentPageChange"
/> />
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, ref, reactive, onMounted } from 'vue' import { reactive } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { getRestockListApi, restockCheckApi } from '@/api/factoryOrderNew' import { getRestockListApi, restockCheckApi } from '@/api/factoryOrderNew'
import type { RestockData } from '@/types/api/factoryOrderNew' import type { RestockData } from '@/types/api/factoryOrderNew'
import type { PaginationData } from '@/types/api'
import type { CustomColumn } from '@/types/table' import type { CustomColumn } from '@/types/table'
import TableView from '@/components/TableView.vue' import TableView from '@/components/TableView.vue'
import usePageList from '@/utils/hooks/usePageList'
const loading = ref(false) const filterForm = reactive({
const allData = ref<RestockData[]>([]) stockSku: '',
const currentPage = ref(1) styleNo: '',
const pageSize = ref(50) })
const total = ref(0)
const pageData = computed(() => { const {
const start = (currentPage.value - 1) * pageSize.value loading,
return allData.value.slice(start, start + pageSize.value) currentPage,
pageSize,
total,
data,
onCurrentPageChange,
onPageSizeChange,
refresh,
} = usePageList<RestockData>({
initPageSize: 50,
query: async (current, size) => {
const res = await getRestockListApi({
stockSku: filterForm.stockSku || undefined,
styleNo: filterForm.styleNo || undefined,
})
const records = res.data || []
const start = (current - 1) * size
return {
total: records.length,
size,
current,
records: records.slice(start, start + size),
} as PaginationData<RestockData>
},
}) })
const columns: CustomColumn<RestockData>[] = [ const columns: CustomColumn<RestockData>[] = [
...@@ -154,69 +177,27 @@ const columns: CustomColumn<RestockData>[] = [ ...@@ -154,69 +177,27 @@ const columns: CustomColumn<RestockData>[] = [
}, },
] ]
const filterForm = reactive({
stockSku: '',
styleNo: '',
})
const loadData = async () => {
loading.value = true
try {
const res = await getRestockListApi({
stockSku: filterForm.stockSku || undefined,
styleNo: filterForm.styleNo || undefined,
})
allData.value = res.data || []
total.value = allData.value.length
} catch (_e) {
allData.value = []
total.value = 0
} finally {
loading.value = false
}
}
const handleSearch = () => { const handleSearch = () => {
currentPage.value = 1 refresh()
loadData()
} }
const handleReset = () => { const handleReset = () => {
filterForm.stockSku = '' filterForm.stockSku = ''
filterForm.styleNo = '' filterForm.styleNo = ''
currentPage.value = 1 refresh()
loadData()
}
const handlePageSizeChange = (size: number) => {
pageSize.value = size
currentPage.value = 1
}
const handleCurrentPageChange = (page: number) => {
currentPage.value = page
} }
const handleRestockCheck = async (row: RestockData) => { const handleRestockCheck = async (row: RestockData) => {
try { try {
await restockCheckApi(row.id) await restockCheckApi(row.id)
ElMessage.success('补货校验成功') ElMessage.success('补货校验成功')
loadData() refresh()
} catch (e) { } catch (e) {
const err = e as Error & { message?: string } const err = e as Error & { message?: string }
ElMessage.error(err?.message || '补货校验失败') ElMessage.error(err?.message || '补货校验失败')
} }
} }
const refresh = () => {
currentPage.value = 1
loadData()
}
onMounted(() => {
loadData()
})
defineExpose({ refresh }) defineExpose({ refresh })
</script> </script>
......
...@@ -1310,10 +1310,9 @@ const handleStatusNodeClick = (node: StatusTreeNode) => { ...@@ -1310,10 +1310,9 @@ const handleStatusNodeClick = (node: StatusTreeNode) => {
currentRow.value = null currentRow.value = null
productList.value = [] productList.value = []
logList.value = [] logList.value = []
// if (!isSpecialLayout.value) { if (!isSpecialLayout.value) {
// onCurrentPageChange(1) refresh()
// refresh() }
// }
} }
const toggleExpand = (node: { expanded?: boolean }) => { const toggleExpand = (node: { expanded?: boolean }) => {
node.expanded = !node.expanded node.expanded = !node.expanded
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment