From 62bc1ed96c5637540e9ac8d0a843e990ced15d44 Mon Sep 17 00:00:00 2001 From: songguoqiang <765017469@qq.com> Date: Wed, 9 Oct 2024 10:13:52 +0800 Subject: [PATCH 1/6] =?UTF-8?q?YT-170=EF=BC=9A=E5=AE=A2=E6=88=B7=E5=AF=B9?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E6=A8=A1=E5=9D=97=E9=83=A8=E5=88=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/wms/customerStatementDetail/index.ts | 77 ++++ src/api/wms/customerStatementMain/index.ts | 63 +++ .../src/ImportCustomerStatementForm.vue | 426 ++++++++++++++++++ .../customerSaleInvoiceDetail.data.ts | 121 +++++ .../customerStatementMain.data.ts | 224 +++++++++ .../customerStatement/index.vue | 251 +++++++++++ .../customerToolApportStatementDetail.data.ts | 173 +++++++ .../customerToolApportStatement/index.vue | 244 ++++++++++ 8 files changed, 1579 insertions(+) create mode 100644 src/api/wms/customerStatementDetail/index.ts create mode 100644 src/api/wms/customerStatementMain/index.ts create mode 100644 src/components/ImportForm/src/ImportCustomerStatementForm.vue create mode 100644 src/views/wms/deliversettlementManage/customerStatement/customerStatement/customerSaleInvoiceDetail.data.ts create mode 100644 src/views/wms/deliversettlementManage/customerStatement/customerStatement/customerStatementMain.data.ts create mode 100644 src/views/wms/deliversettlementManage/customerStatement/customerStatement/index.vue create mode 100644 src/views/wms/deliversettlementManage/customerStatement/customerToolApportStatement/customerToolApportStatementDetail.data.ts create mode 100644 src/views/wms/deliversettlementManage/customerStatement/customerToolApportStatement/index.vue diff --git a/src/api/wms/customerStatementDetail/index.ts b/src/api/wms/customerStatementDetail/index.ts new file mode 100644 index 000000000..0c4729f6d --- /dev/null +++ b/src/api/wms/customerStatementDetail/index.ts @@ -0,0 +1,77 @@ +import request from '@/config/axios' + +export interface CustomerStatementDetailVO { + id: number + number: string + masterId: number + invoiceType: string + releaseNumber: string + ingress: string + ingress2: string + itemCode: string + articleNumber: string + articleName: string + backNumber: string + checkTime: Date + uom: string + qty: number + price: number + amount: number + allocationPrice: number + tftmQuantity: number + intexQuantity: number + quantityVariance: number + tftmPrice: number + intexPrice: number + priceVariance: number + tftmAmount: number + intexAmount: number + amountVariance: number + dischargingTime: Date + acceptCheckTime: Date + remark: string + available: string + siteId: string + concurrencyStamp: string +} + +// 查询客户对账单子信息表(WMS)列表 +export const getCustomerStatementDetailPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customer-statement-detail/senior', data }) + } else { + return await request.get({ url: `/wms/customer-statement-detail/page`, params }) + } +} + +// 查询客户对账单子信息表(WMS)详情 +export const getCustomerStatementDetail = async (id: number) => { + return await request.get({ url: `/wms/customer-statement-detail/get?id=` + id }) +} + +// 新增客户对账单子信息表(WMS) +export const createCustomerStatementDetail = async (data: CustomerStatementDetailVO) => { + return await request.post({ url: `/wms/customer-statement-detail/create`, data }) +} + +// 修改客户对账单子信息表(WMS) +export const updateCustomerStatementDetail = async (data: CustomerStatementDetailVO) => { + return await request.put({ url: `/wms/customer-statement-detail/update`, data }) +} + +// 删除客户对账单子信息表(WMS) +export const deleteCustomerStatementDetail = async (id: number) => { + return await request.delete({ url: `/wms/customer-statement-detail/delete?id=` + id }) +} + +// 导出客户对账单子信息表(WMS) Excel +export const exportCustomerStatementDetail = async (params) => { + return await request.download({ url: `/wms/customer-statement-detail/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customer-statement-detail/get-import-template' }) +} \ No newline at end of file diff --git a/src/api/wms/customerStatementMain/index.ts b/src/api/wms/customerStatementMain/index.ts new file mode 100644 index 000000000..df91e823d --- /dev/null +++ b/src/api/wms/customerStatementMain/index.ts @@ -0,0 +1,63 @@ +import request from '@/config/axios' + +export interface CustomerStatementMainVO { + id: number + number: string + customerCode: string + customerName: string + yearsMonth: Date + status: string + comparisonTime: Date + publishTime: Date + shareTime: Date + beInvoicedTime: Date + invoicedTime: Date + issuedInvoicedTime: Date + abrogateTime: Date + versionNumber: string + remark: string + available: string + siteId: string + concurrencyStamp: string +} + +// 查询客户对账单主信息表(WMS)列表 +export const getCustomerStatementMainPage = async (params) => { + if (params.isSearch) { + delete params.isSearch + const data = {...params} + return await request.post({ url: '/wms/customer-statement-main/senior', data }) + } else { + return await request.get({ url: `/wms/customer-statement-main/page`, params }) + } +} + +// 查询客户对账单主信息表(WMS)详情 +export const getCustomerStatementMain = async (id: number) => { + return await request.get({ url: `/wms/customer-statement-main/get?id=` + id }) +} + +// 新增客户对账单主信息表(WMS) +export const createCustomerStatementMain = async (data: CustomerStatementMainVO) => { + return await request.post({ url: `/wms/customer-statement-main/create`, data }) +} + +// 修改客户对账单主信息表(WMS) +export const updateCustomerStatementMain = async (data: CustomerStatementMainVO) => { + return await request.put({ url: `/wms/customer-statement-main/update`, data }) +} + +// 删除客户对账单主信息表(WMS) +export const deleteCustomerStatementMain = async (id: number) => { + return await request.delete({ url: `/wms/customer-statement-main/delete?id=` + id }) +} + +// 导出客户对账单主信息表(WMS) Excel +export const exportCustomerStatementMain = async (params) => { + return await request.download({ url: `/wms/customer-statement-main/export-excel`, params }) +} + +// 下载用户导入模板 +export const importTemplate = () => { + return request.download({ url: '/wms/customer-statement-main/get-import-template' }) +} \ No newline at end of file diff --git a/src/components/ImportForm/src/ImportCustomerStatementForm.vue b/src/components/ImportForm/src/ImportCustomerStatementForm.vue new file mode 100644 index 000000000..ad5816da4 --- /dev/null +++ b/src/components/ImportForm/src/ImportCustomerStatementForm.vue @@ -0,0 +1,426 @@ + + + + + + + + + + + + + + + + + + {{t('ts.将文件拖到此处,或')}}{{t('ts.点击上传')}} + + + + {{t('ts.注意事项')}} + + + {{ item }} + + + + + {{t('ts.导入模式')}} + + + + {{ t('ts.更新')}} + {{ t('ts.追加') }} + {{ t('ts.覆盖') }} + + + + + {{t('ts.更新:新增并修改')}} + {{ t('ts.追加:只新增,不修改') }} + {{ t('ts.覆盖:只修改不新增') }} + + + + + {{ t('ts.部分保存') }} + + + + + + {{ t('ts.部分保存:如存在错误数据,正确数据正常导入') }} + {{ t('ts.全部保存:全部数据正确,才能导入') }} + + + + + 是否外部资源 + + + + + + + + + + + + + + + {{ t('ts.下载模板') }} + + + {{ t('ts.确 定') }} + {{ t('ts.取 消') }} + + + + + + + diff --git a/src/views/wms/deliversettlementManage/customerStatement/customerStatement/customerSaleInvoiceDetail.data.ts b/src/views/wms/deliversettlementManage/customerStatement/customerStatement/customerSaleInvoiceDetail.data.ts new file mode 100644 index 000000000..f2bb64ea2 --- /dev/null +++ b/src/views/wms/deliversettlementManage/customerStatement/customerStatement/customerSaleInvoiceDetail.data.ts @@ -0,0 +1,121 @@ +import type { CrudSchema } from '@/hooks/web/useCrudSchemas' +import { dateFormatter } from '@/utils/formatTime' + +// 表单校验 +export const CustomerSaleInvoiceDetailRules = reactive({ + itemCode: [required], + articleNumber: [required], + qty: [required], + price: [required], + allocationPrice: [required], + sumPrice: [required], + afterTaxAmount: [required], + beforeTaxAmount: [required], + taxAmount: [required], +}) + +export const CustomerSaleInvoiceDetail = useCrudSchemas(reactive([ + { + label: 'id', + field: 'id', + sort: 'custom', + isTable: false, + isForm: false, + }, + { + label: '单据号', + field: 'number', + sort: 'custom', + }, + { + label: '主id', + field: 'masterId', + sort: 'custom', + form: { + component: 'InputNumber', + value: 0 + }, + }, + { + label: '品番即物料代码', + field: 'itemCode', + sort: 'custom', + isSearch: true, + }, + { + label: '品号即品番2', + field: 'articleNumber', + sort: 'custom', + isSearch: true, + }, + { + label: '数量', + field: 'qty', + sort: 'custom', + }, + { + label: '单价', + field: 'price', + sort: 'custom', + }, + { + label: '模具分摊单价', + field: 'allocationPrice', + sort: 'custom', + }, + { + label: '合计单价', + field: 'sumPrice', + sort: 'custom', + }, + { + label: '含税金额', + field: 'afterTaxAmount', + sort: 'custom', + }, + { + label: '未税金额', + field: 'beforeTaxAmount', + sort: 'custom', + }, + { + label: '税额', + field: 'taxAmount', + sort: 'custom', + }, + { + label: '备注', + field: 'remark', + sort: 'custom', + }, + { + label: '是否可用默认TRUE', + field: 'available', + sort: 'custom', + }, + { + label: '创建时间', + field: 'createTime', + sort: 'custom', + formatter: dateFormatter, + isSearch: true, + search: { + component: 'DatePicker', + componentProps: { + valueFormat: 'YYYY-MM-DD HH:mm:ss', + type: 'daterange', + defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')] + } + }, + isForm: false, + }, + { + label: '操作', + field: 'action', + isForm: false, + table: { + width: 150, + fixed: 'right' + } + } +])) diff --git a/src/views/wms/deliversettlementManage/customerStatement/customerStatement/customerStatementMain.data.ts b/src/views/wms/deliversettlementManage/customerStatement/customerStatement/customerStatementMain.data.ts new file mode 100644 index 000000000..55c7540dd --- /dev/null +++ b/src/views/wms/deliversettlementManage/customerStatement/customerStatement/customerStatementMain.data.ts @@ -0,0 +1,224 @@ +import type { CrudSchema } from '@/hooks/web/useCrudSchemas' +import { dateFormatter } from '@/utils/formatTime' + +// 表单校验 +export const CustomerStatementMainRules = reactive({ + customerCode: [required], + customerName: [required], + yearsMonth: [required], +}) + +export const CustomerStatementMain = useCrudSchemas(reactive([ + { + label: 'id', + field: 'id', + sort: 'custom', + isTable: false, + isForm: false, + }, + { + label: '单据号', + field: 'number', + sort: 'custom', + isSearch: true, + }, + { + label: '客户代码', + field: 'customerCode', + sort: 'custom', + isSearch: true, + }, + { + label: '客户名称', + field: 'customerName', + sort: 'custom', + isSearch: true, + }, + { + label: '年月', + field: 'yearsMonth', + sort: 'custom', + formatter: dateFormatter, + isSearch: true, + search: { + component: 'DatePicker', + componentProps: { + valueFormat: 'YYYY-MM-DD HH:mm:ss', + type: 'daterange', + defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')] + } + }, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '状态', + field: 'status', + sort: 'custom', + isSearch: true, + form: { + component: 'Select' + }, + }, + { + label: '重新比对更新时间', + field: 'comparisonTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '发布时间', + field: 'publishTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '已分摊时间', + field: 'shareTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '待开票时间', + field: 'beInvoicedTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '开票中时间', + field: 'invoicedTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '已开票时间', + field: 'issuedInvoicedTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '已作废时间', + field: 'abrogateTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '版本号', + field: 'versionNumber', + sort: 'custom', + }, + { + label: '备注', + field: 'remark', + sort: 'custom', + }, + // { + // label: '是否可用默认TRUE', + // field: 'available', + // sort: 'custom', + // }, + { + label: '创建时间', + field: 'createTime', + sort: 'custom', + formatter: dateFormatter, + isSearch: true, + search: { + component: 'DatePicker', + componentProps: { + valueFormat: 'YYYY-MM-DD HH:mm:ss', + type: 'daterange', + defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')] + } + }, + isForm: false, + }, + // { + // label: '地点ID', + // field: 'siteId', + // sort: 'custom', + // }, + // { + // label: '并发乐观锁', + // field: 'concurrencyStamp', + // sort: 'custom', + // }, + { + label: '操作', + field: 'action', + isForm: false, + table: { + width: 150, + fixed: 'right' + } + } +])) + +// 表单校验 +export const CustomerStatementDetailRules = reactive({ + releaseNumber: [required], + ingress: [required], + ingress2: [required], + itemCode: [required], + articleNumber: [required], + articleName: [required], + checkTime: [required], + uom: [required], + qty: [required], + price: [required], + amount: [required], +}) diff --git a/src/views/wms/deliversettlementManage/customerStatement/customerStatement/index.vue b/src/views/wms/deliversettlementManage/customerStatement/customerStatement/index.vue new file mode 100644 index 000000000..bb04e6c19 --- /dev/null +++ b/src/views/wms/deliversettlementManage/customerStatement/customerStatement/index.vue @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + {{ row.code }} + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/wms/deliversettlementManage/customerStatement/customerToolApportStatement/customerToolApportStatementDetail.data.ts b/src/views/wms/deliversettlementManage/customerStatement/customerToolApportStatement/customerToolApportStatementDetail.data.ts new file mode 100644 index 000000000..9e047ee33 --- /dev/null +++ b/src/views/wms/deliversettlementManage/customerStatement/customerToolApportStatement/customerToolApportStatementDetail.data.ts @@ -0,0 +1,173 @@ +import type { CrudSchema } from '@/hooks/web/useCrudSchemas' +import { dateFormatter } from '@/utils/formatTime' + +// 表单校验 +export const CustomerToolApportStatementDetailRules = reactive({ + invoiceNumber: [required], + articleNumber: [required], + vehicleType: [required], + amount: [required], + qty: [required], + allocationPrice: [required], + adjustmentAmount: [required], +}) + +export const CustomerToolApportStatementDetail = useCrudSchemas(reactive([ + { + label: 'id', + field: 'id', + sort: 'custom', + isTable: false, + isForm: false, + }, + { + label: '客户对账单单据号', + field: 'customerStatementNumber', + sort: 'custom', + isSearch: true, + }, + { + label: '年月预留字段', + field: 'yearsMonth', + sort: 'custom', + }, + { + label: '客户对账单主id', + field: 'masterId', + sort: 'custom', + form: { + component: 'InputNumber', + value: 0 + }, + }, + { + label: '账票号', + field: 'invoiceNumber', + sort: 'custom', + isSearch: true, + }, + { + label: '品号', + field: 'articleNumber', + sort: 'custom', + isSearch: true, + }, + { + label: '车型', + field: 'vehicleType', + sort: 'custom', + isSearch: true, + form: { + component: 'SelectV2' + }, + }, + { + label: '金额', + field: 'amount', + sort: 'custom', + }, + { + label: '数量', + field: 'qty', + sort: 'custom', + }, + { + label: '模具分摊单价', + field: 'allocationPrice', + sort: 'custom', + }, + { + label: '调整金额', + field: 'adjustmentAmount', + sort: 'custom', + }, + { + label: '确认分摊时间', + field: 'verifyTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '已作废时间', + field: 'abrogateTime', + sort: 'custom', + formatter: dateFormatter, + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + }, + { + label: '0:新增1:已作废', + field: 'status', + sort: 'custom', + isSearch: true, + form: { + component: 'SelectV2' + }, + }, + { + label: '版本号', + field: 'versionNumber', + sort: 'custom', + }, + { + label: '备注', + field: 'remark', + sort: 'custom', + }, + { + label: '是否可用默认TRUE', + field: 'available', + sort: 'custom', + }, + { + label: '创建时间', + field: 'createTime', + sort: 'custom', + formatter: dateFormatter, + isSearch: true, + search: { + component: 'DatePicker', + componentProps: { + valueFormat: 'YYYY-MM-DD HH:mm:ss', + type: 'daterange', + defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')] + } + }, + isForm: false, + }, + { + label: '地点ID', + field: 'siteId', + sort: 'custom', + isTable: false, + isSearch: true, + }, + { + label: '并发乐观锁', + field: 'concurrencyStamp', + sort: 'custom', + isTable: false, + isSearch: true, + }, + { + label: '操作', + field: 'action', + isForm: false, + table: { + width: 150, + fixed: 'right' + } + } +])) diff --git a/src/views/wms/deliversettlementManage/customerStatement/customerToolApportStatement/index.vue b/src/views/wms/deliversettlementManage/customerStatement/customerToolApportStatement/index.vue new file mode 100644 index 000000000..0dce2c81b --- /dev/null +++ b/src/views/wms/deliversettlementManage/customerStatement/customerToolApportStatement/index.vue @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + {{ row.code }} + + + + + + + + + + + + + + + + + + + From cf021a982b7b36a62e0902e08ff16cc633a2a535 Mon Sep 17 00:00:00 2001 From: songguoqiang <765017469@qq.com> Date: Wed, 9 Oct 2024 11:04:36 +0800 Subject: [PATCH 2/6] =?UTF-8?q?YT-170=EF=BC=9A=E6=B7=BB=E5=8A=A0=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E5=AF=B9=E8=B4=A6=E5=8D=95=E5=AF=BC=E5=85=A5=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/wms/customerStatementMain/index.ts | 5 ++ .../src/ImportCustomerStatementForm.vue | 46 +++++++++++++++++-- src/utils/dict.ts | 1 + .../customerStatementMain.data.ts | 9 ++-- .../customerStatement/index.vue | 2 - 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/api/wms/customerStatementMain/index.ts b/src/api/wms/customerStatementMain/index.ts index df91e823d..e37a5b356 100644 --- a/src/api/wms/customerStatementMain/index.ts +++ b/src/api/wms/customerStatementMain/index.ts @@ -60,4 +60,9 @@ export const exportCustomerStatementMain = async (params) => { // 下载用户导入模板 export const importTemplate = () => { return request.download({ url: '/wms/customer-statement-main/get-import-template' }) +} + +// 导入客户对账单前校验是否有相同客户代码和年月的数据存在 +export const verifyDataExist = async (yearsMonthStr: String,customerCode:String) => { + return await request.get({ url: `/wms/customer-statement-main/verifyDataExist?yearsMonthStr=` + yearsMonthStr+'&customerCode='+customerCode }) } \ No newline at end of file diff --git a/src/components/ImportForm/src/ImportCustomerStatementForm.vue b/src/components/ImportForm/src/ImportCustomerStatementForm.vue index ad5816da4..817b28da3 100644 --- a/src/components/ImportForm/src/ImportCustomerStatementForm.vue +++ b/src/components/ImportForm/src/ImportCustomerStatementForm.vue @@ -64,7 +64,7 @@ > {{t('ts.将文件拖到此处,或')}}{{t('ts.点击上传')}} - + @@ -139,7 +139,7 @@ {{ t('ts.下载模板') }} - {{ t('ts.确 定') }} + {{ t('ts.确 定') }} {{ t('ts.取 消') }} @@ -150,6 +150,7 @@ import { getAccessToken, getTenantId } from '@/utils/auth' import download from '@/utils/download' import { getBaseUrl } from '@/utils/systemParam' import * as CustomerApi from '@/api/wms/customer' +import * as CustomerStatementMainApi from '@/api/wms/customerStatementMain' defineOptions({ name: 'ImportForm' }) const { t } = useI18n() @@ -283,6 +284,44 @@ const open = () => { } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 +/** 校验数据 */ +const verifyData = async () => { + if (queryParams.yearsMonthStr==''||queryParams.yearsMonthStr==null) { + message.error('请选择年月') + return + } + if (queryParams.customerCode==''||queryParams.customerCode==null) { + message.error('请选择客户代码') + return + } + if (fileList.value.length == 0) { + message.error('请上传文件') + return + } + const data = await CustomerStatementMainApi.verifyDataExist(queryParams.yearsMonthStr,queryParams.customerCode); + console.log('data',data) + if(data.status==0){ + submitForm(); + }else if(data.status==2){ + try { + // 确认 + await message.confirm('已存在相同客户编号及年月的对账单,是否确认导入?注意:如确认则上一版本对账单将自动作废。') + //确定走的 + submitForm(); + // await PurchasepriceApi.deletePurchaseprice(id) + // tableObject.loading = false + // message.success(t('common.delSuccess')) + // // 刷新列表 + // buttonBaseClick('refresh',null) + } catch { + //取消走的 + alert(123); + } + }else if(data.status==3){ + await message.alertWarning('已存在相同客户编号及年月的对账单,且已提交,无法导入。') + } +} + /** 提交表单 */ const submitForm = async () => { if (fileList.value.length == 0) { @@ -399,6 +438,7 @@ const getCustomerList = async () => {//获取客户列表 const list = await CustomerApi.getCustomerList(param); customerList.value = list; } +