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 {
const columns: CustomColumn<BatchManageData>[] = [ label: string
{ key: 'batchNo', prop: 'batchNo', label: '批次号', minWidth: 120 }, value: string
{ }
key: 'downloadStatus', const processType = ref<ProcessTypeData[]>([
prop: 'downloadStatus',
label: '下载状态',
minWidth: 90,
align: 'center',
slot: 'downloadStatus',
},
{ {
key: 'orderCount', label: '烫画',
prop: 'orderCount', value: 'TH',
label: '订单数量',
minWidth: 90,
align: 'center',
}, },
{ {
key: 'totalCount', label: '直喷',
prop: 'totalCount', value: 'ZP',
label: '全部数量',
minWidth: 90,
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', value: 'CX',
label: '创建时间',
minWidth: 160,
sortable: true,
}, },
{ {
key: 'createTimeSort', label: '雕刻',
prop: 'createTime', value: 'DK',
label: '创建时间排序',
minWidth: 110,
sortable: true,
}, },
{ {
key: 'extractTimes', label: '白胚',
prop: 'extractTimes', value: 'BP',
label: '提取次数排序',
minWidth: 110,
sortable: true,
}, },
{ {
key: 'operation', label: '其他',
label: '操作', value: 'QT',
minWidth: 120,
fixed: 'right',
slot: 'operation',
}, },
])
const getStandardDesignImageText = (value: number): string => {
const map: Record<number, string> = { 0: '否', 1: '是', 2: '混合' }
return map[value] ?? '-'
}
const columns: CustomColumn<BatchManageData>[] = [
[
{
label: '批次号',
prop: 'batchArrangeNum',
width: 120,
align: 'center',
},
{
label: '下载状态',
slot: 'downloadStatus',
width: 90,
align: 'center',
render: (item: BatchManageData) => {
return (
<div>
<el-tag type={item.downloadStatus ? 'success' : 'danger'}>
{item.downloadStatus ? '已下载' : '未下载'}
</el-tag>
</div>
)
},
},
{
label: '订单数量',
prop: 'productNum',
width: 85,
align: 'center',
},
{
label: '素材数量',
width: 85,
prop: 'materialNum',
align: 'center',
},
{
label: '创建人',
width: 85,
prop: 'employeeAccount',
align: 'center',
},
{
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',
align: 'center',
},
{
label: '完成时间',
width: 180,
prop: 'finishTime',
align: 'center',
},
{
label: '自动排版',
width: 85,
prop: 'automaticComposing',
align: 'center',
render: (item: BatchManageData) => {
return (
<div>
<span>{item.automaticComposing ? '是' : '否'}</span>
</div>
)
},
},
{
label: '排版参数',
width: 140,
prop: 'composingParam',
align: 'center',
render: (item: BatchManageData) => {
return (
<div>
<span>{item.composingParam?.split(';').join('\n')}</span>
</div>
)
},
},
{
label: '操作',
slot: 'operate',
width: 260,
align: 'center',
fixed: 'right',
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
......
# 左侧状态树每个状态的页面说明: # 每个状态调用接口及字段说明:
## 待接单状态
### 页面布局
-- 分为上下两个表格,如图片1所示
### 主表格上面操作按钮栏,分别有如下按钮:
#### 确认接单
- 当主表格选中的数据大于 0 时,可以点击该按钮,否则提示请先选择订单 ## 待接单、待创建物流、配货中、待发货、已完成、已取消、已归档
- 点击确认接单按钮后,弹出 “确认接单弹框”
- 确认接单弹框打开后,需要让用户选择发货仓库,使用下拉选择,数据源是仓库列表,仓库列表接口可调用 `src/api/common.ts` 中的 `loadWarehouseListApi` 接口
- 点击确认后,调用后端的接口(后端接口暂未提供,可预留占位)
- 加全局 loading 以防重复调用接口
- 调用成功后,弹出"接单成功",并刷新主表格数据
- 调用失败后,弹出"接单失败"弹框(使用 `ElMessageBox.prompt` 显示),并显示失败原因(这里是后端返回的错误信息)
#### 取消订单
- 当主表格选中的数据大于 0 时,可以点击该按钮,否则提示请先选择订单 - 主表格分页查询接口: `factory/podOrder/list_page` post 请求
- 点击取消订单按钮后,弹出 “取消订单弹框” - 请求参数:
- 取消订单弹框打开后,需要让用户选择取消原因,使用下拉选择,数据源是分别是 `协商取消``客户取消``其他` - 平台: `platform`,筛选时传平台 type
- 点击确认后,调用后端的接口(后端接口暂未提供,可预留占位) - 状态: `status`
- 加全局 loading 以防重复调用接口 - 工艺:`craftCode`
- 调用成功后,弹出"取消订单成功",并刷新主表格数据 - 库存 SKU:`thirdSkuCode`
- 调用失败后,弹出"取消订单失败"弹框(使用 `ElMessageBox.prompt` 显示),并显示失败原因(这里是后端返回的错误信息) - 款号:`supplierProductNo`
#### 刷新商品信息 - 批次号:`batchArrangeNumber`
- 操作单号: `orderNumber`
- 商品类型: `productMark`
- 数量: `multi`
- 时间类型: `timeType`
- 开始时间: `startTime`
- 结束时间: `endTime`
- 订单号: `factoryOrderNumber`
- 客户: `userMark`
- Variant SKU: `sku`
- 物流跟踪号: `trackingNumber`
- 收件国家: `receiverCountry`
- 是否代发: `replaceShipment` 筛选时传 0 和 1,0:不代发,1:代发
- ERP 标签: `tagsIdArr` 筛选时传数组,数组中传 ERP 标签 id
- 订单来源: `source` 筛选时传订单来源 id
- 尺码筛选: `size` 筛选时传尺码
- 自有物流公司: `logisticsCompanyCode` 筛选时传自有物流公司 id
- 拦截订单: `interceptStatus` 筛选传拦截订单 id
- 规范素材: `standardDesignImage` 筛选传 0 和 1,0:不规范,1:规范
- 页码: `currentPage`
- 每页条数: `pageSize`
- 点击主表格每行后会加载子表格下数据
- 子表格包含商品Tab接口 `factory/podOrder/get` get 请求,
- 参数: `id` 主表格每行 id
- 子表格包含操作日志Tab接口 `factory/podOrder/getLog` get 请求,
- 参数: `id` 主表格每行 id
- 字段说明:
-- 平台: `platform`
-- 状态: `status`
-- 工艺:`craftCode`
-- 库存 SKU:`thirdSkuCode`
-- 款号:`supplierProductNo`
-- 批次号:`batchArrangeNumber`
-- 操作单号: `orderNumber`
-- 商品类型: `productMark`
-- 数量: `multi`
-- 时间类型: `timeType`
-- 开始时间: `startTime`
-- 结束时间: `endTime`
-- 订单号: `factoryOrderNumber`
-- 客户: `userMark`
-- Variant SKU: `sku`
-- 物流跟踪号: `trackingNumber`
-- 收件国家: `receiverCountry`
-- 是否代发: `replaceShipment`
-- ERP 标签: `tagsIdArr`
-- 订单来源: `source`
-- 尺码筛选: `size`
-- 自有物流公司: `logisticsCompanyCode`
-- 拦截订单: `interceptStatus`
-- 规范素材: `standardDesignImage`
-- 店铺单号: `shopNumber`
-- 订单状态: `statusName`
-- 物流方式: `logisticsWayName`
-- 总克重: `weight`
-- 商品总数量: `productNum`
-- 收货人: `receiverName`
-- 收货人电话: `receiverPhone`
-- 收货人邮编: `receiverCode`
-- 收货地址: `receiverAddress`
-- 创建时间: `createTime`
-- 接单时间: `acceptTime`
-- 完成时间: `finishTime`
-- 客户标签: `customerTags`
- 当主表格选中的数据大于 0 时,可以点击该按钮,否则提示请先选择订单 ## 待排单、待补胚、生产中、待配货
- 点击刷新商品信息按钮后,调用后端的接口(后端接口暂未提供,可预留占位)
- 成功后,弹出"刷新商品信息成功",并刷新主表格数据
- 失败则展示错误信息
## 待创建物流状态
### 页面布局
-- 分为上下两个表格,如图片1所示
### 主表格上面操作按钮栏,分别有如下按钮:
#### 物流接口
-- 此功能为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `物流接口` 功能拷贝过来
#### 挂起
-- 当主表格选中的数据大于 0 时,可以点击该按钮,否则提示请先选择订单
-- 点击挂起按钮后,弹出 “挂起订单”弹框
- 挂起订单弹框打开后,需要让用户选择挂起原因和是否需要客户处理,使用下拉选择,这两个字段都是必填的,其中挂起原因数据源是分别是 `客户拦截``地址异常``素材异常``其他`,是否需要客户处理数据源是分别是 `需要客户处理``无需客户处理`
- 点击确认后,调用后端的接口(后端接口暂未提供,可预留占位)
- 加全局 loading 以防重复调用接口
- 调用成功后,弹出"挂起订单成功",并刷新主表格数据
- 调用失败后,弹出"挂起订单失败"弹框(使用 `ElMessageBox.prompt` 显示),并显示失败原因(这里是后端返回的错误信息)
#### 更新报关信息
-- 此功能为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `更新报关信息` 功能拷贝过来
## 待派单状态
### 页面布局
-- 卡片布局,页面样式如图片2所示
-- 注意:这里可用 `src/components/CommonCard.vue` 组件,使用时注意传递对应的 props 和插槽
-- 可参考 `src/views/order/podCN/index.vue` 中的卡片实现方法,但是内容需要根据图片2所示进行调整
### 该状态中的操作栏,分别有如下按钮:
#### 排单
-- 此为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `排单` 功能拷贝过来
#### 下载素材
-- 此为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `下载素材` 功能拷贝过来
## 批量管理状态
### 页面布局
-- 表格布局,页面样式如图片3所示
-- 注意:这里可封装组件,使代码更易维护
## 等待捕获
### 页面布局
-- 表格布局,页面样式如图片4所示
-- 注意:这里可封装组件,使代码更易维护
## 配货中状态
### 页面布局
-- 表格布局,页面样式如图片1所示
### 该状态中的操作栏,分别有如下按钮:
#### 挂起
-- 当主表格选中的数据大于 0 时,可以点击该按钮,否则提示请先选择订单
-- 点击挂起按钮后,弹出 “挂起订单”弹框
- 挂起订单弹框打开后,需要让用户选择挂起原因和是否需要客户处理,使用下拉选择,这两个字段都是必填的,其中挂起原因数据源是分别是 `客户拦截``地址异常``素材异常``其他`,是否需要客户处理数据源是分别是 `需要客户处理``无需客户处理`
- 点击确认后,调用后端的接口(后端接口暂未提供,可预留占位)
- 加全局 loading 以防重复调用接口
- 调用成功后,弹出"挂起订单成功",并刷新主表格数据
- 调用失败后,弹出"挂起订单失败"弹框(使用 `ElMessageBox.prompt` 显示),并显示失败原因(这里是后端返回的错误信息)
### 配货中子状态
#### 待拣胚
##### 页面布局
-- 卡片布局,页面样式如图片2所示
-- 注意:这里可用 `src/components/CommonCard.vue` 组件,使用时注意传递对应的 props 和插槽
-- 可参考 `src/views/order/podCN/index.vue` 中的卡片实现方法,但是内容需要根据图片2所示进行调整
##### 该状态中的操作栏,分别有如下按钮:
###### DTF排版
-- 此为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `DTF排版` 功能拷贝过来
###### 打印生产单
-- 此为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `打印生产单` 功能拷贝过来
###### 打印拣胚单
-- 当选择卡片数量大于0时,可以点击该按钮,否则提示请先选择订单
-- 点击打印拣胚单后,调用后端接口(后端接口暂未提供,可预留占位)
-- 给按钮加loading效果,防止重复点击
-- 调用成功后,弹出"打印拣胚单成功",并刷新主表格数据
-- 调用失败后,弹出"打印拣胚单失败"弹框(使用 `ElMessageBox.prompt` 显示),并显示失败原因(这里是后端返回的错误信息)
###### 拣胚完成
-- 当选择卡片数量大于0时,可以点击该按钮,否则提示请先选择订单
-- 当点击拣胚完成后,弹出“拣配完成”弹框,弹框页面如图片5所示(图片中紫色字体是描述和情况1文案,情况2文案,情况3文案都无需写上)
-- 此功能较难,可先实现页面
###### 拣胚失败
-- 当选择卡片数量大于0时,可以点击该按钮,否则提示请先选择订单
-- 当点击拣胚失败后,弹出“拣胚失败”弹框,弹框页面如图片6所示(图片中紫色字体是描述无需写上)
-- 此功能较难,可先实现页面
#### 待补胚
##### 页面布局
-- 卡片布局,页面样式如图片2所示
-- 注意:这里可用 `src/components/CommonCard.vue` 组件,使用时注意传递对应的 props 和插槽
-- 可参考 `src/views/order/podCN/index.vue` 中的卡片实现方法,但是内容需要根据图片2所示进行调整
##### 该状态中的操作栏和待拣胚一致:DTF排版、打印生产单、打印拣胚单、拣胚完成、拣胚失败
#### 生产中
-- -- 卡片布局,页面样式如图片2所示
-- 注意:这里可用 `src/components/CommonCard.vue` 组件,使用时注意传递对应的 props 和插槽
-- 可参考 `src/views/order/podCN/index.vue` 中的卡片实现方法,但是内容需要根据图片2所示进行调整
##### 该状态中的操作栏,分别有如下按钮:
###### 申请补胚
-- 当选择卡片数量大于0时,可以点击该按钮,否则提示请先选择订单
-- 点击申请补胚后,前端提示“确定申请补胚吗?”
-- 点击确认后,调用后端接口(后端接口暂未提供,可预留占位)
-- 点击取消后,关闭 `messageBox`,不进行任何操作
-- 加全局 loading 以防重复调用接口
-- 调用成功后,弹出"申请补胚成功",并刷新主表格数据
-- 调用失败后,弹出"申请补胚失败"弹框(使用 `ElMessageBox.prompt` 显示),并显示失败原因(这里是后端返回的错误信息)
###### 生产完成
-- 此为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `生产完成` 功能拷贝过来
###### 播种墙配货
-- 此为原有逻辑,可把 `src/views/order/podUs/index.vue` 中的 `播种墙配货` 功能拷贝过来
## 待发货 - 接口: `factory/podOrderBatchDownload/list_page` post 请求
### 页面布局 - 请求参数:
-- 表格布局,页面样式如图片1所示 - 页码: `currentPage`
### 该状态中的操作栏,分别有如下按钮: - 每页条数: `pageSize`
#### 称重分拣
-- 此为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `称重分拣` 功能拷贝过来 ## 批次管理
#### 下载素材
-- 此为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `下载素材` 功能拷贝过来 - 接口: `factory/podOrderBatchDownload/list_page` post 请求
## 已完成状态 - 请求参数:
### 页面布局 - 页码: `currentPage`
-- 表格布局,页面样式如图片1所示 - 每页条数: `pageSize`
### 该状态中的操作栏,分别有如下按钮: - 开始时间: `startTime`
#### 下载素材 - 结束时间: `endTime`
#### 订单归档 - 创建人: `employeeId` 筛选时创建人 id
-- 当主表格选中的数据大于 0 时,可以点击该按钮,否则提示请先选择订单 - 列表创建人: `employeeAccount`
-- 点击订单归档按钮后,调用后端接口(后端接口暂未提供,可预留占位) - 工艺类型: `craftType` 传工艺类型 value
-- 加全局 loading 以防重复调用接口 - 下载状态: `downloadStatus` 传 0 和 1,0:未下载,1:已下载
-- 调用成功后,弹出"订单归档成功",并刷新主表格数据 - 排版状态: `syntheticStatus` 传 0 和 1,0:否,1:是
-- 调用失败后,弹出"订单归档失败"弹框(使用 `ElMessageBox.prompt` 显示),并显示失败原因(这里是后端返回的错误信息) - 自动排版: `automaticComposing` 传 0 和 1,0:否,1:是
## 挂起状态 - 批次号: `batchArrangeNumber`
### 页面布局 - 字段:
-- 表格布局,页面样式如图片1所示 - 开始时间: `startTime`
-- 根据挂起原因,分多Tab展示 - 结束时间: `endTime`
- 放再操作栏的上面,数据源分别是`客户拦截``地址异常``其他` - 创建人: `employeeId`
- 点击Tab后,表格数据会根据Tab切换,并刷新表格数据 - 列表创建人: `employeeAccount`
- 具体样式可以参考现在已有“待派单状态”Tab的样式 - 工艺类型: `craftType`
### 该状态中的操作栏,分别有如下按钮: - 下载状态: `downloadStatus`
#### 取消挂起 - 排版状态: `syntheticStatus`
-- 当主表格选中的数据大于 0 时,可以点击该按钮,否则提示请先选择订单 - 自动排版: `automaticComposing`
-- 点击取消挂起按钮后,调用后端接口(后端接口暂未提供,可预留占位) - 批次号: `batchArrangeNumber`
-- 加全局 loading 以防重复调用接口 - 订单数量: `productNum`
-- 调用成功后,弹出"取消挂起成功",并刷新主表格数据 - 素材数量: `materialNum`
#### 同步收货地址 - 规范素材: `standardDesignImage`
-- 此为原有逻辑,可把 `src/views/order/podCN/index.vue` 中的 `同步收货地址` 功能拷贝过来 - 失败原因: `failReason`
\ No newline at end of file - 创建时间: `createTime`
- 完成时间: `finishTime`
- 自动排版: `automaticComposing`
- 排版参数: `composingParam`
## 等待补货
- 接口: `factory/podOrderBatchDownload/list_page`
- 请求参数:
- 页码: `currentPage`
- 每页条数: `pageSize`
- 字段: 暂时还不清楚,只需空出位置,以便后续开发
## 挂起
- 主表格分页查询接口: `factory/podOrderPauseControl/list_page` post 请求
- 点击主表格每行后会加载子表格下数据
- 子表格包含商品Tab接口 `factory/podOrderPauseControl/get` get 请求,
- 参数: `id` 主表格每行 id
- 子表格包含操作日志Tab接口 `factory/podOrderPauseControl/getLog` get 请求,
- 参数: `id` 主表格每行 id
- 请求参数:
- 页码: `currentPage`
- 每页条数: `pageSize`
- 字段: 暂时还不清楚,只需空出位置,以便后续开发
- 注意:挂起状态和待接单、待接单、待创建物流、配货中、待发货、已完成、已取消、已归档页面一致,只是接口不一样,返回的返回的数据结构暂时还不清楚是否一样,所以先按照不一样处理,到挂起状态时,调用不一样的接口
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