From fd6a5aedf27331de071ba84fdb682a567c4cc692 Mon Sep 17 00:00:00 2001 From: yufei_wang <2267742828@qq.com> Date: Tue, 18 Feb 2025 11:25:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E7=BA=BF=E7=BB=93=E7=AE=97=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/wms/settlementConfiguration/index.ts | 4 + src/components/BasicForm/src/BasicForm.vue | 1 + .../settlementConfiguration/index.vue | 219 +++++++++++++++--- .../settlementConfiguration.data.ts | 177 +++++++++++--- 4 files changed, 340 insertions(+), 61 deletions(-) diff --git a/src/api/wms/settlementConfiguration/index.ts b/src/api/wms/settlementConfiguration/index.ts index 6a75bd7c4..6b7ef57ab 100644 --- a/src/api/wms/settlementConfiguration/index.ts +++ b/src/api/wms/settlementConfiguration/index.ts @@ -26,6 +26,10 @@ export const getSettlementConfiguration = async (id: number) => { return await request.get({ url: `/wms/settlement-configuration/get?id=` + id }) } +export const editSettlementConfiguration = async (id: number) => { + return await request.get({ url: `/wms/settlement-configuration/editView?id=` + id }) +} + // 新增上线结算配置 export const createSettlementConfiguration = async (data: SettlementConfigurationVO) => { return await request.post({ url: `/wms/settlement-configuration/create`, data }) diff --git a/src/components/BasicForm/src/BasicForm.vue b/src/components/BasicForm/src/BasicForm.vue index fbc4bb175..3e61da23b 100644 --- a/src/components/BasicForm/src/BasicForm.vue +++ b/src/components/BasicForm/src/BasicForm.vue @@ -78,6 +78,7 @@ <el-input v-model="formSchema.value" v-if="isDetail && formTypeDetail == 'InputString'" /> </template> </Form> + <slot name="tableForm"></slot> <Tabs ref="tabRef" v-if="includeCollectionTable&&formType=='create'&&tableAllSchemas&&tableAllSchemas.tableFormColumns.find(item=>item.field == 'itemCode')" :tabsList="[{ label: '明细', prop: 'TableForm' diff --git a/src/views/wms/issueManage/onlinesettlement/settlementConfiguration/index.vue b/src/views/wms/issueManage/onlinesettlement/settlementConfiguration/index.vue index a83603ffd..6e05b7db3 100644 --- a/src/views/wms/issueManage/onlinesettlement/settlementConfiguration/index.vue +++ b/src/views/wms/issueManage/onlinesettlement/settlementConfiguration/index.vue @@ -39,16 +39,71 @@ </ContentWrap> <!-- 表单弹窗:添加/修改 --> - <BasicForm + <BasicForm basicFormWidth="68" ref="basicFormRef" - @success="formsSuccess" + @success="submitForm" :rules="SettlementConfigurationRules" :formAllSchemas="SettlementConfiguration.allSchemas" :apiUpdate="SettlementConfigurationApi.updateSettlementConfiguration" :apiCreate="SettlementConfigurationApi.createSettlementConfiguration" @searchTableSuccess="searchTableSuccess" :isBusiness="false" - /> + > + <template #tableForm> + <!-- 来源库位 --> + <template style="display: flex; flex-direction: row;"> + <div> + <span style="font-weight: bold; margin-left: 10px;">来源仓库</span> + <ContentWrap style="margin-right: 20px;margin-top: 5px;"> + <TableForm + ref="tableFormFromRef" + class="w-[100%]" + :isShowButton="true" + :isShowReduceButtonSelection="true" + :tableFields="SettlementConfigurationDetail.allSchemas.tableFormColumns" + :tableData="tableDataFrom" + :tableFormRules="SettlementConfigurationDetailRules" + @handleAddTable="handleAddTable('from')" + @handleDeleteTable="(item, index)=>handleDeleteTable(item, index,'from')" + @tableSelectionDelete="(selection)=>tableSelectionDelete(selection,'from')" + @inpuFocus="inpuFocus" + @inputStringBlur="inputStringBlur" + :routeName="routeName" + > + <!-- <template v-slot="{ row }"> + <slot :row="row"></slot> + </template> --> + </TableForm> + </ContentWrap> + </div> + <div> + <span style="font-weight: bold; margin-left: 10px;">目标仓库</span> + <ContentWrap style="margin-right: 20px;margin-top: 5px;"> + <TableForm + ref="tableFormToRef" + class="w-[100%]" + :isShowButton="true" + :isShowReduceButtonSelection="true" + :tableFields="SettlementConfigurationDetail.allSchemas.tableFormColumns" + :tableData="tableDataTo" + :tableFormRules="SettlementConfigurationDetailRules" + @handleAddTable="handleAddTable('to')" + @handleDeleteTable="(item, index)=>handleDeleteTable(item, index,'to')" + @tableSelectionDelete="(selection)=>tableSelectionDelete(selection,'to')" + @inpuFocus="inpuFocus" + @inputStringBlur="inputStringBlur" + :routeName="routeName" + > + <!-- <template v-slot="{ row }"> + <slot :row="row"></slot> + </template> --> + </TableForm> + </ContentWrap> + </div> + </template> + </template> + + </BasicForm> <!-- 详情 --> <Detail ref="detailRef" :isBasic="true" :allSchemas="SettlementConfiguration.allSchemas" /> @@ -59,13 +114,17 @@ <script setup lang="ts"> import download from '@/utils/download' -import { SettlementConfiguration,SettlementConfigurationRules } from './settlementConfiguration.data' +import { SettlementConfiguration,SettlementConfigurationRules,SettlementConfigurationDetail,SettlementConfigurationDetailRules } from './settlementConfiguration.data' import * as SettlementConfigurationApi from '@/api/wms/settlementConfiguration' import * as defaultButtons from '@/utils/disposition/defaultButtons' import TableHead from '@/components/TableHead/src/TableHead.vue' import ImportForm from '@/components/ImportForm/src/ImportForm.vue' import Detail from '@/components/Detail/src/Detail.vue' +import { Warehouse } from '@/views/wms/basicDataManage/factoryModeling/warehouse/warehouse.data' +import * as WarehouseApi from '@/api/wms/warehouse' + +// 上线结算配置管理 defineOptions({ name: 'SettlementConfiguration' }) const message = useMessage() // 消息弹窗 @@ -76,15 +135,129 @@ const routeName = ref() routeName.value = route.name const tableColumns = ref(SettlementConfiguration.allSchemas.tableColumns) + // 主子数据 提交 + const submitForm = async (formType, submitData) => { + let data = {...submitData} + if(data.masterId){ + data.id = data.masterId + } + data.fromWarehouseCode = tableDataFrom.value.map(item=>(item['warehouseCode'])).join(',') // 拼接子表数据参数 + data.toWarehouseCode = tableDataTo.value.map(item=>(item['warehouseCode'])).join(',') // 拼接子表数据参数 + console.log('新增参数',data) + try { + if (formType === 'create') { + await SettlementConfigurationApi.createSettlementConfiguration(data) + message.success(t('common.createSuccess')) + } else { + await SettlementConfigurationApi.updateSettlementConfiguration(data) + message.success(t('common.updateSuccess')) + } + basicFormRef.value.dialogVisible = false + // 刷新当前列表 + getList() + } finally { + basicFormRef.value.formLoading = false + } +} + +const tableFormKeys = {} +SettlementConfigurationDetail.allSchemas.tableFormColumns.forEach((item) => { + tableFormKeys[item.field] = item.default ? item.default : '' +}) // 查询页面返回 -const searchTableSuccess = (formField, searchField, val, formRef) => { +const searchTableSuccess = (formField, searchField, val, formRef, type, row) => { + + console.log('searchTableSuccess',formField, searchField, val, formRef, type, row ) nextTick(() => { - const setV = {} - setV[formField] = val[0][searchField] - formRef.setValues(setV) + if (formField == 'warehouseCode') { + if(addType.value== 'from'){ + // 来源 + let warehouseCodes = val.filter(item=>tableDataFrom.value.find(item1=>item1['warehouseCode']==item['code'])) + if(warehouseCodes.length>0){ + warehouseCodes = warehouseCodes.map(item=>(item.code)) + message.warning(`仓库代码${warehouseCodes.join(',')}已经存在`) + } + val = val.filter(item=>!tableDataFrom.value.find(item1=>item1['warehouseCode']==item['code'])) + if(val.length==0) return + val.forEach(item=>{ + const newRow = JSON.parse(JSON.stringify({...tableFormKeys,...item})) + newRow['warehouseCode'] = item['code'] + newRow['warehouseName'] = item['name'] + tableDataFrom.value.push(newRow) + }) + }else{ + // 目标 + let warehouseCodes = val.filter(item=>tableDataTo.value.find(item1=>item1['warehouseCode']==item['code'])) + if(warehouseCodes.length>0){ + warehouseCodes = warehouseCodes.map(item=>(item.code)) + message.warning(`仓库代码${warehouseCodes.join(',')}已经存在`) + } + val = val.filter(item=>!tableDataTo.value.find(item1=>item1['warehouseCode']==item['code'])) + if(val.length==0) return + val.forEach(item=>{ + const newRow = JSON.parse(JSON.stringify({...tableFormKeys,...item})) + newRow['warehouseCode'] = item['code'] + newRow['warehouseName'] = item['name'] + tableDataTo.value.push(newRow) + }) + } + }else{ + const setV = {} + setV[formField] = val[0][searchField] + if(formField == 'supplierCode'){ + setV['supplierName'] = val[0]['name'] + }else if(formField == 'itemCode'){ + setV['itemName'] = val[0]['itemName'] + setV['itemDesc1'] = val[0]['itemDesc1'] + setV['itemDesc2'] = val[0]['itemDesc2'] + } + formRef.setValues(setV) + } + }) } - +// 来源库位 +const tableDataFrom = ref([]) +// 目标库位 +const tableDataTo = ref([]) +const addType = ref('') +const handleAddTable = (type)=>{ + addType.value = type + //供应商代码 + basicFormRef.value.opensearchTable('warehouseCode', 'code', '仓库信息', Warehouse.allSchemas, WarehouseApi.getWarehousePage,[{ + key: 'available', + value: 'TRUE', + isMainValue: false + }],true,'tableForm1') + //修改弹窗宽度 + basicFormRef.value.changeDialogWidth('1085px') +} + // 删除明细 + const handleDeleteTable = (item, index, type) => { + if(type == 'from'){ + // 来源 + tableDataFrom.value.splice(index, 1) + }else { + // 目标 + tableDataTo.value.splice(index, 1) + } +} +// 批量删除 +const tableSelectionDelete = (selection,type) => { + if(type == 'from'){ + // 来源 + tableDataFrom.value = tableDataFrom.value.filter(item => !selection.includes(item)) + }else{ + // 目标 + tableDataTo.value = tableDataTo.value.filter(item => !selection.includes(item)) + } +} +const inpuFocus = ()=>{ + +} +const inputStringBlur = ()=>{ + +} // 字段设置 更新主列表字段 const updataTableColumns = (val) => { tableColumns.value = val @@ -140,6 +313,10 @@ const butttondata = [ // 列表-操作按钮事件 const buttonTableClick = async (val, row) => { if (val == 'edit') { // 编辑 + let res = await SettlementConfigurationApi.editSettlementConfiguration(row.id) + console.log('编辑',res) + tableDataFrom.value = res.fromWarehouseCodeList + tableDataTo.value = res.toWarehouseCodeList openForm('update', row) } else if (val == 'delete') { // 删除 handleDelete(row.id) @@ -152,29 +329,7 @@ const openForm = (type: string, row?: any) => { basicFormRef.value.open(type, row) } -// form表单提交 -const formsSuccess = async (formType,data) => { - var isHave =SettlementConfiguration.allSchemas.formSchema.some(function (item) { - return item.field === 'activeTime' || item.field === 'expireTime'; - }); - if(isHave){ - if(data.activeTime && data.expireTime && data.activeTime >=data.expireTime){ - message.error('失效时间要大于生效时间') - return; - } - } - if(data.activeTime==0)data.activeTime = null; - if(data.expireTime==0)data.expireTime = null; - if (formType === 'create') { - await SettlementConfigurationApi.createSettlementConfiguration(data) - message.success(t('common.createSuccess')) - } else { - await SettlementConfigurationApi.updateSettlementConfiguration(data) - message.success(t('common.updateSuccess')) - } - basicFormRef.value.dialogVisible = false - getList() -} + /** 详情操作 */ const detailRef = ref() diff --git a/src/views/wms/issueManage/onlinesettlement/settlementConfiguration/settlementConfiguration.data.ts b/src/views/wms/issueManage/onlinesettlement/settlementConfiguration/settlementConfiguration.data.ts index 0fc48c77b..7764c1f8e 100644 --- a/src/views/wms/issueManage/onlinesettlement/settlementConfiguration/settlementConfiguration.data.ts +++ b/src/views/wms/issueManage/onlinesettlement/settlementConfiguration/settlementConfiguration.data.ts @@ -1,5 +1,11 @@ import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import { dateFormatter } from '@/utils/formatTime' +import * as SupplierApi from '@/api/wms/supplier' +import { Supplier } from '@/views/wms/basicDataManage/supplierManage/supplier/supplier.data' +import * as SupplieritemApi from '@/api/wms/supplieritem' +import { Supplieritem} from '@/views/wms/basicDataManage/supplierManage/supplieritem/supplieritem.data' +import { Warehouse } from '@/views/wms/basicDataManage/factoryModeling/warehouse/warehouse.data' +import * as WarehouseApi from '@/api/wms/warehouse' // 表单校验 export const SettlementConfigurationRules = reactive({ @@ -18,28 +24,89 @@ export const SettlementConfiguration = useCrudSchemas(reactive<CrudSchema[]>([ field: 'supplierCode', sort: 'custom', isSearch: true, + form: { + componentProps: { + enterSearch:true, + isSearchList: true, // 开启查询弹窗 + searchListPlaceholder: '请选择供应商代码', // 输入框占位文本 + searchField: 'code', // 查询弹窗赋值字段 + searchTitle: '供应商信息', // 查询弹窗标题 + searchAllSchemas: Supplier.allSchemas, // 查询弹窗所需类 + searchPage: SupplierApi.getSupplierPage, // 查询弹窗所需分页方法 + searchCondition: [{ + key: 'available', + value: 'TRUE', + isMainValue: false + }], + verificationParams: [{ + key: 'code', + action: '==', + value: '', + isMainValue: false, + isSearch: true, + isFormModel: true, + }], // 失去焦点校验参数 + } + }, }, { label: '供应商名称', field: 'supplierName', sort: 'custom', + form: { + componentProps: { + disabled: true + } + } }, { label: '物料代码', field: 'itemCode', sort: 'custom', isSearch: true, + form: { + componentProps: { + enterSearch:true, + isSearchList: true, // 开启查询弹窗 + searchListPlaceholder: '请选择物料代码', // 输入框占位文本 + searchField: 'itemCode', // 查询弹窗赋值字段 + searchTitle: '供应商物料信息', // 查询弹窗标题 + searchAllSchemas: Supplieritem.allSchemas, // 查询弹窗所需类 + searchPage: SupplieritemApi.getSupplieritemPage, // 查询弹窗所需分页方法 + searchCondition: [{ + key: 'supplierCode', + value: 'supplierCode', + message: '请填写供应商代码!', + isMainValue: true, + isCSV:true,//是否用逗号分隔参数 + },{ + key: 'available', + value: 'TRUE', + isMainValue: false + }] + } + } }, { label: '物品名称', field: 'itemName', sort: 'custom', isSearch: true, + form: { + componentProps: { + disabled: true + } + } }, { label: '物品描述', field: 'itemDesc1', sort: 'custom', + form: { + componentProps: { + disabled: true + } + } }, { label: '物品描述2', @@ -48,24 +115,24 @@ export const SettlementConfiguration = useCrudSchemas(reactive<CrudSchema[]>([ isTable: false, isForm: false, }, - { - label: '来源仓库', - field: 'fromWarehouseCode', - sort: 'custom', - isSearch: true, - }, - { - label: '目标仓库', - field: 'toWarehouseCode', - sort: 'custom', - isSearch: true, - }, - { - label: '备注', - field: 'remark', - sort: 'custom', - isSearch: true, - }, + // { + // label: '来源仓库', + // field: 'fromWarehouseCode', + // sort: 'custom', + // isSearch: true, + // }, + // { + // label: '目标仓库', + // field: 'toWarehouseCode', + // sort: 'custom', + // isSearch: true, + // }, + // { + // label: '备注', + // field: 'remark', + // sort: 'custom', + // isSearch: true, + // }, { label: '创建时间', field: 'createTime', @@ -82,17 +149,17 @@ export const SettlementConfiguration = useCrudSchemas(reactive<CrudSchema[]>([ }, isForm: false, }, - { - label: '并发乐观锁', - field: 'concurrencyStamp', - sort: 'custom', - isSearch: false, - isTable: false, - form: { - component: 'InputNumber', - value: 0 - }, - }, + // { + // label: '并发乐观锁', + // field: 'concurrencyStamp', + // sort: 'custom', + // isSearch: false, + // isTable: false, + // form: { + // component: 'InputNumber', + // value: 0 + // }, + // }, { label: '操作', field: 'action', @@ -103,3 +170,55 @@ export const SettlementConfiguration = useCrudSchemas(reactive<CrudSchema[]>([ } } ])) + +export const SettlementConfigurationDetail = useCrudSchemas(reactive<CrudSchema[]>([ + { + label: '仓库代码', + field: 'warehouseCode', + sort: 'custom', + tableForm:{ + multiple:true,//多选 + enterSearch: false, + isInpuFocusShow: false, // 开启查询弹窗 + disabled: true, + searchListPlaceholder: '请选择仓库代码', + searchField: 'code', + searchTitle: '仓库信息', + searchAllSchemas: Warehouse.allSchemas, + searchPage: WarehouseApi.getWarehousePage, + searchCondition: [ + { + key: 'available', + value: 'TRUE', + isMainValue: false + } + ], + verificationParams: [ + { + key: 'code', + action: '==', + value: '', + isMainValue: false, + isSearch: true, + isFormModel: true + } + ] // 失去焦点校验参数 + }, + }, + { + label: '仓库名称', + field: 'warehouseName', + sort: 'custom', + tableForm:{ + disabled: true + } + }, +])) + + +//表单校验 +export const SettlementConfigurationDetailRules = reactive({ + fromWarehouseCode: [ + { required: true, message: '请选择来源仓库', trigger: 'change' } + ], +})