Commit fe10c73e94da69fe9435c8a40d86d5fd663676bb
1 parent
5cbe46ae
feat: update 商品新增
Showing
3 changed files
with
323 additions
and
113 deletions
src/pages/Order/components/OrderDrawer.tsx
... | ... | @@ -3,6 +3,8 @@ import { |
3 | 3 | postKingdeeRepCustomer, |
4 | 4 | postKingdeeRepCustomerDetail, |
5 | 5 | postKingdeeRepMaterial, |
6 | + postKingdeeRepMaterialUnit, | |
7 | + postKingdeeRepMeasureUnit, | |
6 | 8 | postServiceOrderAddOrder, |
7 | 9 | postServiceOrderQuerySalesCode, |
8 | 10 | postServiceOrderUpdateOrder, |
... | ... | @@ -43,6 +45,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
43 | 45 | const [customer, setCustomer] = useState({}); |
44 | 46 | const [kingdeeCstomerModalVisible, setKingdeeCstomerModalVisible] = |
45 | 47 | useState(false); |
48 | + const [ | |
49 | + productParametersDisabledFlagList, | |
50 | + setProductParametersDisabledFlagList, | |
51 | + ] = useState([]); | |
46 | 52 | // const [productInvStockOptionsList, setProductInvStockOptionsList] = useState( |
47 | 53 | // [], |
48 | 54 | // ); //商品的仓库选项 |
... | ... | @@ -249,38 +255,85 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
249 | 255 | currentRowData: any, |
250 | 256 | index: any, |
251 | 257 | ) { |
252 | - let copyList = form.getFieldValue('list'); | |
253 | - let currentData = copyList[currentRowData.field.key]; | |
254 | - currentData.productCode = option?.number; | |
255 | - currentData.parameters = option?.model; | |
256 | - currentData.unit = option?.base_unit_name; | |
258 | + let newProductParametersDisabledFlagList = [ | |
259 | + ...productParametersDisabledFlagList, | |
260 | + ]; | |
261 | + let newProductUnitOptionsList = [...productUnitOptionsList]; | |
262 | + newProductUnitOptionsList[index] = []; | |
257 | 263 | |
258 | - //商品id | |
259 | - currentData.materialId = option?.id; | |
264 | + //是新增商品 | |
265 | + if (option.type === 'add') { | |
266 | + //商品参数开放权限可以编辑 | |
267 | + newProductParametersDisabledFlagList[index] = false; | |
260 | 268 | |
261 | - //单位 | |
262 | - currentData.unit = option.base_unit_name; | |
263 | - currentData.unitId = option.base_unit_id; | |
269 | + //清空商品信息 | |
270 | + let copyList = form.getFieldValue('list'); | |
271 | + let currentData = copyList[index]; | |
272 | + currentData.productCode = undefined; | |
273 | + currentData.parameters = undefined; | |
274 | + currentData.unit = undefined; | |
275 | + currentData.subOrderPayment = undefined; | |
276 | + currentData.quantity = undefined; | |
277 | + currentData.notes = undefined; | |
278 | + currentData.productPrice = undefined; | |
279 | + form.setFieldValue('list', copyList); | |
264 | 280 | |
265 | - form.setFieldValue('list', copyList); | |
281 | + //查询计量单价列表 | |
282 | + let res = await postKingdeeRepMeasureUnit({ data: {} }); | |
283 | + if (res && res?.rows) { | |
284 | + for (let row of res?.rows) { | |
285 | + newProductUnitOptionsList[index].push({ | |
286 | + label: row.name, | |
287 | + value: row.id, | |
288 | + }); | |
289 | + } | |
290 | + } | |
291 | + } else { | |
292 | + //选择的是已有的商品,进行内容自动填充 | |
293 | + let copyList = form.getFieldValue('list'); | |
294 | + let currentData = copyList[index]; | |
295 | + currentData.productCode = option?.number; | |
296 | + currentData.parameters = option?.model; | |
297 | + currentData.unit = option?.base_unit_name; | |
266 | 298 | |
267 | - //商品所在的仓库选项填充 | |
268 | - // let res = await postKingdeeRepMaterialStock({ | |
269 | - // data: { | |
270 | - // material_id: option.id, | |
271 | - // }, | |
272 | - // }); | |
273 | - // let newProductInvStockOptionsList = [...productInvStockOptionsList]; | |
274 | - // newProductInvStockOptionsList[index] = res?.rows?.map((item) => { | |
275 | - // return { label: item.inv_stock, value: item.inv_stock_id }; | |
276 | - // }); | |
277 | - // setProductInvStockOptionsList(newProductInvStockOptionsList); | |
299 | + //商品id | |
300 | + currentData.materialId = option?.id; | |
278 | 301 | |
279 | - //商品单位填充,目前一个商品暂时只有一个单位 | |
280 | - let newProductUnitOptionsList = [...productUnitOptionsList]; | |
281 | - newProductUnitOptionsList[index] = [ | |
282 | - { label: option.base_unit_name, value: option.base_unit_id }, | |
283 | - ]; | |
302 | + //单位 | |
303 | + currentData.unit = option.base_unit_name; | |
304 | + currentData.unitId = option.base_unit_id; | |
305 | + | |
306 | + form.setFieldValue('list', copyList); | |
307 | + | |
308 | + //商品所在的仓库选项填充 | |
309 | + // let res = await postKingdeeRepMaterialStock({ | |
310 | + // data: { | |
311 | + // material_id: option.id, | |
312 | + // }, | |
313 | + // }); | |
314 | + // let newProductInvStockOptionsList = [...productInvStockOptionsList]; | |
315 | + // newProductInvStockOptionsList[index] = res?.rows?.map((item) => { | |
316 | + // return { label: item.inv_stock, value: item.inv_stock_id }; | |
317 | + // }); | |
318 | + // setProductInvStockOptionsList(newProductInvStockOptionsList); | |
319 | + | |
320 | + //商品单位填充,查询商品单位列表 | |
321 | + let res = await postKingdeeRepMaterialUnit({ | |
322 | + data: { material_id: option.id }, | |
323 | + }); | |
324 | + if (res && res.rows) { | |
325 | + for (let row of res.rows) { | |
326 | + newProductUnitOptionsList[index].push({ | |
327 | + label: row.unit_name, | |
328 | + value: row.unit_id, | |
329 | + }); | |
330 | + } | |
331 | + } | |
332 | + //商品参数不允许编辑 | |
333 | + newProductParametersDisabledFlagList[index] = true; | |
334 | + } | |
335 | + | |
336 | + setProductParametersDisabledFlagList(newProductParametersDisabledFlagList); | |
284 | 337 | setProductUnitOptionsList(newProductUnitOptionsList); |
285 | 338 | } |
286 | 339 | |
... | ... | @@ -308,6 +361,18 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
308 | 361 | } |
309 | 362 | |
310 | 363 | /** |
364 | + * 选择商品单位后自动填充 | |
365 | + * @param option | |
366 | + * @param index | |
367 | + */ | |
368 | + function autoFillUnit(option: any, index: any) { | |
369 | + let copyList = form.getFieldValue('list'); | |
370 | + let currentData = copyList[index]; | |
371 | + currentData.unit = option?.label; | |
372 | + form.setFieldValue('list', copyList); | |
373 | + } | |
374 | + | |
375 | + /** | |
311 | 376 | * 计算子订单金额 |
312 | 377 | * @param listMeta 当前商品信息 |
313 | 378 | */ |
... | ... | @@ -616,89 +681,6 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
616 | 681 | }} |
617 | 682 | initialValue={data.contactAddress} |
618 | 683 | options={productCustomerContactOptions} |
619 | - // fieldProps={{ | |
620 | - // optionItemRender(item) { | |
621 | - // if (item.type === 'add') { | |
622 | - // return ( | |
623 | - // <div title={item.name + '(新增收货人)'}> | |
624 | - // <span style={{ color: '#333333' }}>{item.name}</span> | |
625 | - // {' | '} | |
626 | - // <span style={{ color: 'orange' }}>自定义</span> | |
627 | - // </div> | |
628 | - // ); | |
629 | - // } | |
630 | - // return ( | |
631 | - // <div | |
632 | - // title={ | |
633 | - // item.name + | |
634 | - // ' | ' + | |
635 | - // item.customerContactNumber + | |
636 | - // ' | ' + | |
637 | - // (item.customerShippingAddress === undefined | |
638 | - // ? '无地址' | |
639 | - // : item.customerShippingAddress) + | |
640 | - // ' | ' + | |
641 | - // item.institutionContactName + | |
642 | - // ' | ' + | |
643 | - // item.institution | |
644 | - // } | |
645 | - // > | |
646 | - // <span style={{ color: '#333333' }}>{item.name}</span> | |
647 | - // {' | '} | |
648 | - // <span style={{ color: '#339999' }}> | |
649 | - // {item.customerContactNumber === undefined | |
650 | - // ? '无电话号码' | |
651 | - // : item.customerContactNumber} | |
652 | - // </span> | |
653 | - // {' | '} | |
654 | - // <span style={{ color: '#666666' }}> | |
655 | - // {item.customerShippingAddress === undefined | |
656 | - // ? '无地址' | |
657 | - // : item.customerShippingAddress} | |
658 | - // </span> | |
659 | - // {' | '} | |
660 | - // <span style={{ color: '#666666' }}> | |
661 | - // {item.institutionContactName === undefined | |
662 | - // ? '无课题组' | |
663 | - // : item.institutionContactName} | |
664 | - // </span> | |
665 | - // {' | '} | |
666 | - // <span style={{ color: '#666666' }}> | |
667 | - // {item.institution === undefined ? '无单位' : item.institution} | |
668 | - // </span> | |
669 | - // </div> | |
670 | - // ); | |
671 | - // }, | |
672 | - // }} | |
673 | - // debounceTime={1000} | |
674 | - // request={async (value, { params }) => { | |
675 | - // const keywords = value.keyWords; | |
676 | - // const res = await postKingdeeRepCustomer({ | |
677 | - // data: { search: keywords }, | |
678 | - // params: params, | |
679 | - // }); | |
680 | - // console.log(res) | |
681 | - // let options = res?.rows?.map((c: any) => { | |
682 | - // return { | |
683 | - // ...c, | |
684 | - // label: c.name, | |
685 | - // value: c.id, | |
686 | - // key: c.id, | |
687 | - // }; | |
688 | - // }); | |
689 | - | |
690 | - // //第一个商品默认为要新增的商品 | |
691 | - // if (keywords.trim() !== '') { | |
692 | - // options.unshift({ | |
693 | - // name: keywords, | |
694 | - // type: 'add', | |
695 | - // label: keywords, | |
696 | - // value: 3.1415926, | |
697 | - // key: keywords, | |
698 | - // }); | |
699 | - // } | |
700 | - // return options; | |
701 | - // }} | |
702 | 684 | /> |
703 | 685 | <ProFormText |
704 | 686 | width="lg" |
... | ... | @@ -939,7 +921,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
939 | 921 | return ( |
940 | 922 | <div title={item.name + '(新增商品信息)'}> |
941 | 923 | <span style={{ color: '#333333' }}> |
942 | - {item.name} | |
924 | + {item.label} | |
943 | 925 | </span> |
944 | 926 | {' | '} |
945 | 927 | <span style={{ color: 'orange' }}>新增商品</span> |
... | ... | @@ -1016,7 +998,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
1016 | 998 | </span> |
1017 | 999 | </> |
1018 | 1000 | } |
1019 | - placeholder="未输入商品名称" | |
1001 | + placeholder="商品编码" | |
1020 | 1002 | />, |
1021 | 1003 | // <ProFormSelect |
1022 | 1004 | // key="inv_stock" |
... | ... | @@ -1033,7 +1015,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
1033 | 1015 | label="商品参数" |
1034 | 1016 | placeholder="请输入商品参数" |
1035 | 1017 | rules={[{ required: true, message: '商品参数必填' }]} |
1036 | - disabled | |
1018 | + disabled={ | |
1019 | + productParametersDisabledFlagList[listMeta.index] !== | |
1020 | + false | |
1021 | + } | |
1037 | 1022 | />, |
1038 | 1023 | <ProFormDigit |
1039 | 1024 | key={'quantity' + listMeta.index} |
... | ... | @@ -1071,6 +1056,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
1071 | 1056 | name="unitId" |
1072 | 1057 | width="lg" |
1073 | 1058 | label="单位" |
1059 | + showSearch | |
1060 | + onChange={(_, option) => { | |
1061 | + autoFillUnit(option, listMeta.index); | |
1062 | + }} | |
1074 | 1063 | options={productUnitOptionsList[listMeta.index]} |
1075 | 1064 | rules={[{ required: true, message: '商品单位必填' }]} |
1076 | 1065 | />, | ... | ... |
src/services/definition.ts
... | ... | @@ -720,6 +720,58 @@ export interface MaterialStockRow { |
720 | 720 | invStockPosition?: string; |
721 | 721 | } |
722 | 722 | |
723 | +export interface MaterialUnitListRes { | |
724 | + count?: string; | |
725 | + /** @format int32 */ | |
726 | + currentPage?: number; | |
727 | + /** @format int32 */ | |
728 | + currentPageSize?: number; | |
729 | + /** @format int32 */ | |
730 | + page?: number; | |
731 | + /** @format int32 */ | |
732 | + pageSize?: number; | |
733 | + rows?: Array<MaterialUnitListResRow>; | |
734 | + /** @format int32 */ | |
735 | + totalPage?: number; | |
736 | +} | |
737 | + | |
738 | +export interface MaterialUnitListResRow { | |
739 | + /** @format double */ | |
740 | + coefficient?: number; | |
741 | + conversionUnitId?: string; | |
742 | + conversionUnitName?: string; | |
743 | + id?: string; | |
744 | + /** @format int32 */ | |
745 | + index?: number; | |
746 | + isDefault?: boolean; | |
747 | + isFloat?: boolean; | |
748 | + materialId?: string; | |
749 | + unitId?: string; | |
750 | + unitName?: string; | |
751 | +} | |
752 | + | |
753 | +export interface MeasureUnitListRes { | |
754 | + count?: string; | |
755 | + /** @format int32 */ | |
756 | + currentPage?: number; | |
757 | + /** @format int32 */ | |
758 | + currentPageSize?: number; | |
759 | + /** @format int32 */ | |
760 | + page?: number; | |
761 | + /** @format int32 */ | |
762 | + pageSize?: number; | |
763 | + rows?: Array<MeasureUnitListResRow>; | |
764 | + /** @format int32 */ | |
765 | + totalPage?: number; | |
766 | +} | |
767 | + | |
768 | +export interface MeasureUnitListResRow { | |
769 | + id?: string; | |
770 | + name?: string; | |
771 | + number?: string; | |
772 | + precision?: string; | |
773 | +} | |
774 | + | |
723 | 775 | export interface ModelAndView { |
724 | 776 | empty?: boolean; |
725 | 777 | model?: any; |
... | ... | @@ -1298,6 +1350,29 @@ export interface Unit { |
1298 | 1350 | unitidName?: string; |
1299 | 1351 | } |
1300 | 1352 | |
1353 | +export interface UnitMaterialUnitListReq { | |
1354 | + createEndTime?: string; | |
1355 | + createStartTime?: string; | |
1356 | + materialId?: Array<string>; | |
1357 | + modifyEndTime?: string; | |
1358 | + modifyStartTime?: string; | |
1359 | + page?: string; | |
1360 | + pageSize?: string; | |
1361 | + search?: string; | |
1362 | + unPage?: string; | |
1363 | +} | |
1364 | + | |
1365 | +export interface UnitMeasureUnitListReq { | |
1366 | + createEndTime?: string; | |
1367 | + createStartTime?: string; | |
1368 | + enable?: string; | |
1369 | + modifyEndTime?: string; | |
1370 | + modifyStartTime?: string; | |
1371 | + page?: string; | |
1372 | + pageSize?: string; | |
1373 | + search?: string; | |
1374 | +} | |
1375 | + | |
1301 | 1376 | export interface UpdateHirePurchaseDto { |
1302 | 1377 | /** |
1303 | 1378 | * @description | ... | ... |
src/services/request.ts
... | ... | @@ -36,6 +36,8 @@ import type { |
36 | 36 | MaterialListReply, |
37 | 37 | MaterialMaterialListReq, |
38 | 38 | MaterialStockRes, |
39 | + MaterialUnitListRes, | |
40 | + MeasureUnitListRes, | |
39 | 41 | ModelAndView, |
40 | 42 | OrderAddVO, |
41 | 43 | OrderAuditLogQueryVO, |
... | ... | @@ -62,6 +64,8 @@ import type { |
62 | 64 | ServerResult, |
63 | 65 | SysLogQueryVO, |
64 | 66 | SystemCustomFieldReq, |
67 | + UnitMaterialUnitListReq, | |
68 | + UnitMeasureUnitListReq, | |
65 | 69 | UpdateHirePurchaseDto, |
66 | 70 | UpdatePwdVO, |
67 | 71 | } from './definition'; |
... | ... | @@ -983,6 +987,148 @@ export const postKingdeeRepMaterialStock = /* #__PURE__ */ (() => { |
983 | 987 | return request; |
984 | 988 | })(); |
985 | 989 | |
990 | +/** @description request parameter type for postKingdeeRepMaterialUnit */ | |
991 | +export interface PostKingdeeRepMaterialUnitOption { | |
992 | + /** | |
993 | + * @description | |
994 | + * req | |
995 | + */ | |
996 | + body: { | |
997 | + /** | |
998 | + @description | |
999 | + req */ | |
1000 | + req: UnitMaterialUnitListReq; | |
1001 | + }; | |
1002 | +} | |
1003 | + | |
1004 | +/** @description response type for postKingdeeRepMaterialUnit */ | |
1005 | +export interface PostKingdeeRepMaterialUnitResponse { | |
1006 | + /** | |
1007 | + * @description | |
1008 | + * OK | |
1009 | + */ | |
1010 | + 200: MaterialUnitListRes; | |
1011 | + /** | |
1012 | + * @description | |
1013 | + * Created | |
1014 | + */ | |
1015 | + 201: any; | |
1016 | + /** | |
1017 | + * @description | |
1018 | + * Unauthorized | |
1019 | + */ | |
1020 | + 401: any; | |
1021 | + /** | |
1022 | + * @description | |
1023 | + * Forbidden | |
1024 | + */ | |
1025 | + 403: any; | |
1026 | + /** | |
1027 | + * @description | |
1028 | + * Not Found | |
1029 | + */ | |
1030 | + 404: any; | |
1031 | +} | |
1032 | + | |
1033 | +export type PostKingdeeRepMaterialUnitResponseSuccess = | |
1034 | + PostKingdeeRepMaterialUnitResponse[200]; | |
1035 | +/** | |
1036 | + * @description | |
1037 | + * getMaterialDetail | |
1038 | + * @tags kingdee-erp-controller | |
1039 | + * @produces * | |
1040 | + * @consumes application/json | |
1041 | + */ | |
1042 | +export const postKingdeeRepMaterialUnit = /* #__PURE__ */ (() => { | |
1043 | + const method = 'post'; | |
1044 | + const url = '/kingdee/rep/materialUnit'; | |
1045 | + function request( | |
1046 | + option: PostKingdeeRepMaterialUnitOption, | |
1047 | + ): Promise<PostKingdeeRepMaterialUnitResponseSuccess> { | |
1048 | + return requester(request.url, { | |
1049 | + method: request.method, | |
1050 | + ...option, | |
1051 | + }) as unknown as Promise<PostKingdeeRepMaterialUnitResponseSuccess>; | |
1052 | + } | |
1053 | + | |
1054 | + /** http method */ | |
1055 | + request.method = method; | |
1056 | + /** request url */ | |
1057 | + request.url = url; | |
1058 | + return request; | |
1059 | +})(); | |
1060 | + | |
1061 | +/** @description request parameter type for postKingdeeRepMeasureUnit */ | |
1062 | +export interface PostKingdeeRepMeasureUnitOption { | |
1063 | + /** | |
1064 | + * @description | |
1065 | + * req | |
1066 | + */ | |
1067 | + body: { | |
1068 | + /** | |
1069 | + @description | |
1070 | + req */ | |
1071 | + req: UnitMeasureUnitListReq; | |
1072 | + }; | |
1073 | +} | |
1074 | + | |
1075 | +/** @description response type for postKingdeeRepMeasureUnit */ | |
1076 | +export interface PostKingdeeRepMeasureUnitResponse { | |
1077 | + /** | |
1078 | + * @description | |
1079 | + * OK | |
1080 | + */ | |
1081 | + 200: MeasureUnitListRes; | |
1082 | + /** | |
1083 | + * @description | |
1084 | + * Created | |
1085 | + */ | |
1086 | + 201: any; | |
1087 | + /** | |
1088 | + * @description | |
1089 | + * Unauthorized | |
1090 | + */ | |
1091 | + 401: any; | |
1092 | + /** | |
1093 | + * @description | |
1094 | + * Forbidden | |
1095 | + */ | |
1096 | + 403: any; | |
1097 | + /** | |
1098 | + * @description | |
1099 | + * Not Found | |
1100 | + */ | |
1101 | + 404: any; | |
1102 | +} | |
1103 | + | |
1104 | +export type PostKingdeeRepMeasureUnitResponseSuccess = | |
1105 | + PostKingdeeRepMeasureUnitResponse[200]; | |
1106 | +/** | |
1107 | + * @description | |
1108 | + * getCustomerDetail | |
1109 | + * @tags kingdee-erp-controller | |
1110 | + * @produces * | |
1111 | + * @consumes application/json | |
1112 | + */ | |
1113 | +export const postKingdeeRepMeasureUnit = /* #__PURE__ */ (() => { | |
1114 | + const method = 'post'; | |
1115 | + const url = '/kingdee/rep/measureUnit'; | |
1116 | + function request( | |
1117 | + option: PostKingdeeRepMeasureUnitOption, | |
1118 | + ): Promise<PostKingdeeRepMeasureUnitResponseSuccess> { | |
1119 | + return requester(request.url, { | |
1120 | + method: request.method, | |
1121 | + ...option, | |
1122 | + }) as unknown as Promise<PostKingdeeRepMeasureUnitResponseSuccess>; | |
1123 | + } | |
1124 | + | |
1125 | + /** http method */ | |
1126 | + request.method = method; | |
1127 | + /** request url */ | |
1128 | + request.url = url; | |
1129 | + return request; | |
1130 | +})(); | |
1131 | + | |
986 | 1132 | /** @description request parameter type for postKingdeeRepSystemCustomField */ |
987 | 1133 | export interface PostKingdeeRepSystemCustomFieldOption { |
988 | 1134 | /** | ... | ... |