@brms/ai-skills 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +256 -0
  2. package/bin/brms-skills.mjs +411 -0
  3. package/package.json +30 -0
  4. package/skills/brms-prototype-generator/SKILL.md +129 -0
  5. package/skills/brms-prototype-generator/agents/openai.yaml +7 -0
  6. package/skills/brms-prototype-generator/examples/few-shot-examples.md +577 -0
  7. package/skills/brms-prototype-generator/references/01-list-query.md +444 -0
  8. package/skills/brms-prototype-generator/references/02-form-entry.md +129 -0
  9. package/skills/brms-prototype-generator/references/03-detail-display.md +125 -0
  10. package/skills/brms-prototype-generator/references/04-composite-page-package.md +339 -0
  11. package/skills/brms-prototype-generator/references/05-dialog-patterns.md +113 -0
  12. package/skills/brms-prototype-generator/references/06-backend-request-patterns.md +118 -0
  13. package/skills/brms-prototype-generator/references/resource-index.md +46 -0
  14. package/skills/brms-prototype-generator/references/system-prompt.md +242 -0
  15. package/skills/brms-prototype-generator/scripts/analyze-doc.mjs +554 -0
  16. package/skills/brms-prototype-generator/scripts/check-project.mjs +228 -0
  17. package/skills/brms-prototype-generator/scripts/discover-targets.mjs +158 -0
  18. package/skills/brms-prototype-generator/scripts/install-codex.mjs +74 -0
  19. package/skills/brms-prototype-generator/scripts/plan-pages.mjs +390 -0
  20. package/skills/brms-prototype-generator/scripts/validate-generated.mjs +838 -0
  21. package/skills/brms-prototype-generator/templates/user-input-template.md +182 -0
  22. package/skills/brms-vxe-plus-developer/SKILL.md +105 -0
  23. package/skills/brms-vxe-plus-developer/agents/openai.yaml +7 -0
  24. package/skills/brms-vxe-plus-developer/references/prototype-to-real.md +54 -0
  25. package/skills/brms-vxe-plus-developer/references/real-base-development.md +110 -0
  26. package/skills/brms-vxe-plus-developer/references/resource-index.md +43 -0
  27. package/skills/brms-vxe-plus-developer/references/review-checklist.md +49 -0
  28. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/01-mental-model.md +150 -0
  29. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/02-vxe-plus-form.md +302 -0
  30. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/03-vxe-plus-table.md +253 -0
  31. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/04-example-map.md +488 -0
  32. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/05-request-and-eiinfo.md +170 -0
  33. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/90-anti-patterns.md +137 -0
  34. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/README.md +43 -0
  35. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/README.md +21 -0
  36. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/A1/P0/A1P01601.vue +483 -0
  37. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/A1/P1/A1P11011.vue +444 -0
  38. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/AB/BP/ABBP0201.vue +1648 -0
  39. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/AM/AF/component/AMAF0601/Bidding/formConfig.ts +228 -0
  40. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/AM/AF/component/AMAF0601/Record/columns.ts +110 -0
  41. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/BM/BR/BMBR01.vue +130 -0
  42. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/BM/BR/component/BMBR01/columns.ts +94 -0
  43. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/BM/BR/component/BMBR01/formConfig.ts +108 -0
  44. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Change/formConfig.ts +123 -0
  45. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Change/index.vue +103 -0
  46. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Clause/columns.ts +48 -0
  47. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Clause/index.vue +202 -0
  48. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Correcte/formConfig.ts +117 -0
  49. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Correcte/index.vue +103 -0
  50. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Pay/Payment/formConfig.ts +90 -0
  51. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Pay/Payment/index.vue +42 -0
  52. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Pay/columns.ts +376 -0
  53. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Pay/index.vue +619 -0
  54. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/Domestic/formConfig.ts +73 -0
  55. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/Domestic/index.vue +47 -0
  56. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/Foreign/formConfig.ts +141 -0
  57. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/Foreign/index.vue +42 -0
  58. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/columns.ts +123 -0
  59. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/Settle/index.vue +593 -0
  60. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Explain/index.vue +68 -0
  61. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Fee/columns.ts +150 -0
  62. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Fee/index.vue +235 -0
  63. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Files/columns.ts +63 -0
  64. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Files/index.vue +117 -0
  65. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Goods/columns.ts +327 -0
  66. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Goods/index.vue +790 -0
  67. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Approve/formConfig.ts +341 -0
  68. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Approve/index.vue +63 -0
  69. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Approve2/formConfig.ts +232 -0
  70. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Approve2/index.vue +27 -0
  71. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Diff/columns.ts +46 -0
  72. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/Diff/index.vue +92 -0
  73. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/formConfig.ts +979 -0
  74. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Base/index.vue +62 -0
  75. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Other/formConfig.ts +179 -0
  76. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Other/index.vue +140 -0
  77. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Sign/formConfig.ts +118 -0
  78. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/Sign/index.vue +44 -0
  79. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Main/index.vue +168 -0
  80. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Party/Major/formConfig.ts +257 -0
  81. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Party/Major/index.vue +47 -0
  82. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Party/columns.ts +256 -0
  83. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Party/index.vue +738 -0
  84. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Price/formConfig.ts +174 -0
  85. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Price/index.vue +51 -0
  86. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/PM/PC/component/PMPC0101/Top/index.vue +924 -0
  87. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/SM/SW/SMSW0101.vue +567 -0
  88. package/skills/brms-vxe-plus-developer/references/vxe-plus-knowledge/sources/project/base/src/views/demo/index.vue +448 -0
  89. package/skills/brms-vxe-plus-developer/scripts/check-project.mjs +259 -0
  90. package/skills/brms-vxe-plus-developer/scripts/check-vxe-plus-page.mjs +137 -0
@@ -0,0 +1,979 @@
1
+ import type { Ref } from 'vue'
2
+ import { computed, inject, reactive, toValue, watch } from 'vue'
3
+ import type { EiInfo } from '@eplat/ei'
4
+ import { commafy, merge } from 'xe-utils'
5
+ import { isEmpty } from '@/utils/is'
6
+ import { getCodeSetByService } from '@/utils/eiTools'
7
+ import { useForm } from '@/hooks/useForm'
8
+ import { useValidator } from '@/hooks/useValidator'
9
+ import DMBD01 from '@/views/DM/BD/DMBD01.vue'
10
+ import DMBF9901 from '@/views/DM/BF/DMBF9901.vue'
11
+ import ACAT9901 from '@/views/AC/AT/ACAT9901.vue'
12
+
13
+ export function createFormConfig() {
14
+ const {
15
+ commonVxeInput,
16
+ commonVxeTextarea,
17
+ commonFormSelect,
18
+ commonFormRadio,
19
+ // commonDateRange,
20
+ commonSelectDialog,
21
+ createFormRules,
22
+ validator,
23
+ validateField,
24
+ getFormData,
25
+ updateInvalidStatus,
26
+ } = useForm()
27
+
28
+ const { validateNumber } = useValidator()
29
+
30
+ const { editable, diffable, detailInfo, attrInfo, diffInfo, isChange, foreignFlag, addable } = inject('__PMPC0101__info__') as any
31
+
32
+ const { sign: signModule } = inject('__PMPC0101__main__module__') as { sign: Ref }
33
+
34
+ const { party: partyModule } = inject('__PMPC0101__module__') as { party: Ref }
35
+
36
+ const initLoadEiInfo = toValue(inject<Ref<EiInfo> | undefined>('__eiInfo__', undefined))
37
+ // console.log('initLoadEiInfo', initLoadEiInfo)
38
+
39
+ const signOnceAccreditName = computed(() => addable.value ? initLoadEiInfo?.get('signOnceAccreditName') : attrInfo.value?.signOnceAccreditName)
40
+ const jyzzControl = computed(() => addable.value ? initLoadEiInfo?.get('jyzzControl') : attrInfo.value?.jyzzControl)
41
+ const showCashBasisFlag = computed(() => addable.value ? initLoadEiInfo?.get('showCashBasisFlag') : attrInfo.value?.showCashBasisFlag)
42
+ const showBeSignAuthorizeStateDesc = computed(() => addable.value ? initLoadEiInfo?.get('showBeSignAuthorizeStateDesc') : attrInfo.value?.showBeSignAuthorizeStateDesc)
43
+
44
+ const jyzzControlFlag = computed(() => ['0', '1'].includes(jyzzControl.value))
45
+ const signOnceAccreditNameFlag = computed(() => ['0', '1', '2'].includes(signOnceAccreditName.value))
46
+ const showBeSignAuthorizeStateDescFlag = computed(() => ['true', true].includes(showBeSignAuthorizeStateDesc.value))
47
+
48
+ const inquList = initLoadEiInfo?.getBlock('inqu_status')?.getMappedRows() || []
49
+ // console.log('inquList', inquList)
50
+
51
+ const defaultData = {
52
+ contractStatus: '10',
53
+ textElectronicFlag: 'PAPER',
54
+ textType: 'STD',
55
+ textFirstFlag: 'Y',
56
+ cashBasisFlag: inquList[0]?.cashBasisFlag || '',
57
+ // sealUsageType: '10',
58
+ orgId: inquList[0]?.orgId || '',
59
+ bookId: inquList[0]?.bookId || '',
60
+ deptId: inquList[0]?.deptId || '',
61
+ groupId: inquList[0]?.groupId || '',
62
+ companyId: inquList[0]?.companyId || '',
63
+ operatorDepartmentCode: inquList[0]?.operatorDepartmentCode || '',
64
+ operatorPersonCode: inquList[0]?.operatorPersonCode || '',
65
+ contractTypeStock: 'HEDGING',
66
+ contractTypeArea: 'INNER',
67
+ contractTypeSourcing: 'CHANNEL',
68
+ contractTypeMode: 'BUYOUT',
69
+ contractTypeOpen: 'N',
70
+ signOnceAccreditName: inquList[0]?.signOnceAccreditName || '',
71
+ signOnceAccreditCode: inquList[0]?.signOnceAccreditCode || '',
72
+ recommendSignerCompanyName: inquList[0]?.recommendSignerCompanyName || '',
73
+ signOnceAccreditPost: inquList[0]?.signOnceAccreditPost || '',
74
+ signOnceAccreditPostId: inquList[0]?.signOnceAccreditPostId || '',
75
+ // 先默认值 后期删除
76
+ tradePropertyCode: 'STOCK',
77
+ supplierCreditFlag: 'N',
78
+ directFlag: foreignFlag.value ? 'N' : '',
79
+ }
80
+
81
+ const formData = reactive(merge({
82
+ pcContractMainId: '',
83
+ pcContractMainHisId: '',
84
+ orgId: '',
85
+ bookId: '',
86
+ deptId: '',
87
+ groupId: '',
88
+ companyId: '',
89
+ pcContractCode: '',
90
+ contractVersion: '',
91
+ pcContractExternalNo: '',
92
+ contractName: '',
93
+ contractStatus: '',
94
+ tradePropertyCode: '',
95
+ contractTypeStock: '',
96
+ contractTypeArea: '',
97
+ contractTypeSourcing: '',
98
+ contractTypeMode: '',
99
+ contractTypeOpen: '',
100
+ jyzz: '',
101
+ responsibilityCategoryLCode: '',
102
+ responsibilityCategoryLName: '',
103
+ responsibilityCategoryMCode: '',
104
+ responsibilityCategoryMName: '',
105
+ responsibilityCategorySCode: '',
106
+ responsibilityCategorySName: '',
107
+ signOnceAccreditName: '',
108
+ signOnceAccreditCode: '',
109
+ recommendSignerCompanyName: '',
110
+ signOnceAccreditPost: '',
111
+ signOnceAccreditPostId: '',
112
+ beSignAuthorizeStateDesc: '',
113
+ supplierCreditFlag: '',
114
+ lastShipmentDate: '',
115
+ contractAmount: '',
116
+ contractAmountTax: '',
117
+ contractAmountNoTax: '',
118
+ textType: '',
119
+ textFirstFlag: '',
120
+ mouldName: '',
121
+ mouldCode: '',
122
+ mouldId: '',
123
+ mouldVersion: '',
124
+ textElectronicFlag: '',
125
+ // sealUsageType: '',
126
+ // contractStartDate: '',
127
+ // contractEndDate: '',
128
+ teamCode: '',
129
+ teamName: '',
130
+ salesPersonCode: '',
131
+ salesPersonName: '',
132
+ relContractMainCode: '',
133
+ contractInfo: '',
134
+ cashBasisFlag: '',
135
+ directFlag: '',
136
+ purchaseType: '',
137
+ operatorDepartmentCode: '',
138
+ operatorDepartmentName: '',
139
+ operatorPersonCode: '',
140
+ operatorPersonName: '',
141
+ customerShipFlag: '',
142
+ remark: '',
143
+ }, defaultData, detailInfo.value))
144
+
145
+ watch(() => detailInfo.value.contractAmount, () => {
146
+ formData.contractAmount = !isEmpty(detailInfo.value.contractAmount) ? commafy(Number.parseFloat(detailInfo.value.contractAmount), { digits: 2 }) : ''
147
+ }, {
148
+ immediate: true,
149
+ })
150
+
151
+ watch(() => detailInfo.value.contractAmountTax, () => {
152
+ formData.contractAmountTax = !isEmpty(detailInfo.value.contractAmountTax) ? commafy(Number.parseFloat(detailInfo.value.contractAmountTax), { digits: 2 }) : ''
153
+ }, {
154
+ immediate: true,
155
+ })
156
+
157
+ watch(() => detailInfo.value.contractAmountNoTax, () => {
158
+ formData.contractAmountNoTax = !isEmpty(detailInfo.value.contractAmountNoTax) ? commafy(Number.parseFloat(detailInfo.value.contractAmountNoTax), { digits: 2 }) : ''
159
+ }, {
160
+ immediate: true,
161
+ })
162
+
163
+ watch(() => formData.contractTypeSourcing, () => {
164
+ if (formData.contractTypeSourcing === 'STRATEGIC') {
165
+ formData.contractTypeMode = 'BUYOUT'
166
+ };
167
+ }, {
168
+ immediate: true,
169
+ })
170
+
171
+ watch(() => formData.textType, () => {
172
+ if (formData.textType === 'STD') {
173
+ formData.textFirstFlag = 'N'
174
+ };
175
+ }, {
176
+ immediate: true,
177
+ })
178
+
179
+ watch(() => formData.responsibilityCategoryMCode, () => {
180
+ formData.mouldId = ''
181
+ formData.mouldCode = ''
182
+ formData.mouldVersion = ''
183
+ formData.mouldName = ''
184
+ })
185
+
186
+ watch([
187
+ () => formData.responsibilityCategoryLCode,
188
+ () => formData.responsibilityCategoryLName,
189
+ () => formData.responsibilityCategoryMCode,
190
+ () => formData.responsibilityCategoryMName,
191
+ () => formData.responsibilityCategorySCode,
192
+ () => formData.responsibilityCategorySName,
193
+ ], () => {
194
+ const jyzz: string[] = []
195
+ if (!isEmpty(formData.responsibilityCategoryLName)) {
196
+ jyzz.push(formData.responsibilityCategoryLName)
197
+ if (!isEmpty(formData.responsibilityCategoryMName)) {
198
+ jyzz.push(formData.responsibilityCategoryMName)
199
+ if (!isEmpty(formData.responsibilityCategorySName)) {
200
+ jyzz.push(formData.responsibilityCategorySName)
201
+ }
202
+ }
203
+ }
204
+ formData.jyzz = jyzz.join('/')
205
+ }, {
206
+ immediate: true,
207
+ })
208
+
209
+ watch([
210
+ () => formData.orgId,
211
+ () => formData.deptId,
212
+ () => formData.bookId,
213
+ ], () => {
214
+ formData.responsibilityCategoryLCode = ''
215
+ formData.responsibilityCategoryLName = ''
216
+ formData.responsibilityCategoryMCode = ''
217
+ formData.responsibilityCategoryMName = ''
218
+ formData.responsibilityCategorySCode = ''
219
+ formData.responsibilityCategorySName = ''
220
+ formData.jyzz = ''
221
+ formData.signOnceAccreditName = ''
222
+ formData.signOnceAccreditCode = ''
223
+ formData.recommendSignerCompanyName = ''
224
+ formData.signOnceAccreditPost = ''
225
+ formData.signOnceAccreditPostId = ''
226
+ signModule.value.updateFormData({
227
+ signSecondPersonCode: '',
228
+ signSecondPersonName: '',
229
+ })
230
+ formData.teamCode = ''
231
+ formData.teamName = ''
232
+ formData.salesPersonCode = ''
233
+ formData.salesPersonName = ''
234
+ formData.operatorDepartmentCode = ''
235
+ formData.operatorDepartmentName = ''
236
+ formData.operatorPersonCode = ''
237
+ formData.operatorPersonName = ''
238
+ })
239
+
240
+ watch([
241
+ () => formData.bookId,
242
+ () => formData.orgId,
243
+ () => formData.deptId,
244
+ () => formData.groupId,
245
+ () => formData.companyId,
246
+ ], () => {
247
+ partyModule.value?.major?.updateFormData({
248
+ partyGroupCode: '',
249
+ partyName: '',
250
+ partyNameEn: '',
251
+ partyCorpId: '',
252
+ partyCorpCode: '',
253
+ partyBankAccount: '',
254
+ partyBankName: '',
255
+ partyContactPerson: '',
256
+ partyContactTelephone: '',
257
+ partyAddress: '',
258
+ })
259
+ })
260
+
261
+ const baseFields = computed(() => {
262
+ return [
263
+ {
264
+ field: 'orgId',
265
+ title: '所属账套',
266
+ itemRender: commonFormSelect('BMBE0000.queryBookOrgByListByPurOrg', {
267
+ disabled: computed(() => !editable.value || !isEmpty(formData.pcContractMainId)),
268
+ promiseFn: (params: any) => getCodeSetByService({
269
+ serviceName: 'BMBE0000',
270
+ methodName: 'queryBookOrgByListByPurOrg',
271
+ params,
272
+ blockName: 'bookResult',
273
+ value: 'orgId',
274
+ label: 'bookAndOrgDeptName',
275
+ }),
276
+ cascadeFields: 'operatorDepartmentCode,salesPersonCode,teamCode,operatorPersonCode',
277
+ cascadePromiseFnFields: 'orgId,orgId,orgId,orgId',
278
+ cascadePromiseFnItemFields: 'orgId,orgId,orgId,orgId',
279
+ }, {
280
+ events: {
281
+ change({ currData }) {
282
+ const item = currData?.item
283
+ formData.bookId = item?.bookId || ''
284
+ formData.deptId = item?.deptId || ''
285
+ formData.groupId = item?.groupId || ''
286
+ formData.companyId = item?.companyId || ''
287
+ },
288
+ },
289
+ }),
290
+ required: true,
291
+ validator: ({ itemValue }) => {
292
+ if (!isEmpty(itemValue) && (isEmpty(formData.bookId) || isEmpty(formData.deptId) || isEmpty(formData.groupId) || isEmpty(formData.companyId))) {
293
+ return Promise.reject('未能匹配,请重新选择所属账套')
294
+ }
295
+ return Promise.resolve(true)
296
+ },
297
+ },
298
+ {
299
+ field: 'contract',
300
+ title: '合同号',
301
+ itemRender: {
302
+ name: 'formComponentsList',
303
+ props: {
304
+ disabled: true,
305
+ compsProps: [
306
+ {
307
+ field: 'pcContractCode',
308
+ span: 16,
309
+ ...commonVxeInput({
310
+ placeholder: '请输入合同号',
311
+ }),
312
+ },
313
+ {
314
+ field: 'contractVersion',
315
+ span: 8,
316
+ ...commonVxeInput({
317
+ placeholder: '请输入版本号',
318
+ }),
319
+ },
320
+ ],
321
+ },
322
+ },
323
+ },
324
+ {
325
+ field: 'pcContractExternalNo',
326
+ title: '外部合同号',
327
+ itemRender: commonVxeInput(),
328
+ },
329
+ {
330
+ field: 'contractName',
331
+ title: '采购合同名称',
332
+ itemRender: commonVxeInput(),
333
+ span: 16,
334
+ required: true,
335
+ },
336
+ {
337
+ field: 'contractStatus',
338
+ title: '合同状态',
339
+ itemRender: commonFormSelect('brmerp.pm.contractStatus', {
340
+ disabled: true,
341
+ }),
342
+ },
343
+ {
344
+ field: 'tradePropertyCode',
345
+ title: '贸易性质',
346
+ itemRender: commonFormSelect('brmerp.pm.natureOfTrade', {
347
+ // disabled: true,
348
+ }),
349
+ required: true,
350
+ },
351
+ {
352
+ field: 'contractType',
353
+ title: '合同类型',
354
+ span: 16,
355
+ required: true,
356
+ itemRender: {
357
+ name: 'formComponentsList',
358
+ props: {
359
+ disabled: !editable.value,
360
+ compsProps: [
361
+ {
362
+ field: 'contractTypeStock',
363
+ span: 0,
364
+ classname: 'flex-1',
365
+ ...commonFormSelect('brmerp.pm.contractTypeStock'),
366
+ },
367
+ {
368
+ field: 'contractTypeArea',
369
+ span: 0,
370
+ classname: 'flex-1',
371
+ ...commonFormSelect('brmerp.pm.contractTypeArea', {
372
+ clearable: false,
373
+ }),
374
+ },
375
+ {
376
+ field: 'contractTypeSourcing',
377
+ span: 0,
378
+ classname: 'flex-1',
379
+ ...commonFormSelect('brmerp.pm.contractTypeSourcingNew'),
380
+ },
381
+ {
382
+ field: 'contractTypeMode',
383
+ span: 0,
384
+ classname: 'flex-1',
385
+ ...commonFormSelect('brmerp.pm.contractTypeModeNew', {
386
+ disabled: computed(() => !editable.value || formData.contractTypeSourcing === 'STRATEGIC'),
387
+ }),
388
+ },
389
+ {
390
+ field: 'contractTypeOpen',
391
+ span: 0,
392
+ classname: 'flex-1',
393
+ ...commonFormSelect('brmerp.ac.contractTypeOpen'),
394
+ },
395
+ ],
396
+ },
397
+ },
398
+ },
399
+ {
400
+ field: 'jyzz',
401
+ title: '交易职责',
402
+ visibleMethod: () => jyzzControlFlag.value,
403
+ itemRender: commonSelectDialog({
404
+ title: '交易职责',
405
+ component: DMBD01,
406
+ componentParam: {
407
+ param: computed(() => {
408
+ return {
409
+ bookId: formData.bookId,
410
+ orgId: formData.orgId,
411
+ }
412
+ }),
413
+ },
414
+ }, {
415
+ events: {
416
+ change({ currData }) {
417
+ formData.responsibilityCategoryLCode = currData?.categoryCode1 || ''
418
+ formData.responsibilityCategoryLName = currData?.categoryName1 || ''
419
+ formData.responsibilityCategoryMCode = currData?.categoryCode2 || ''
420
+ formData.responsibilityCategoryMName = currData?.categoryName2 || ''
421
+ formData.responsibilityCategorySCode = currData?.categoryCode3 || ''
422
+ formData.responsibilityCategorySName = currData?.categoryName3 || ''
423
+ },
424
+ },
425
+ }),
426
+ // required: true,
427
+ },
428
+ {
429
+ field: 'signOnceAccreditName',
430
+ title: `${['0', '1'].includes(signOnceAccreditName.value) ? '推荐' : '授权'}签约人`,
431
+ visibleMethod: () => signOnceAccreditNameFlag.value,
432
+ itemRender: commonSelectDialog({
433
+ title: `${['0', '1'].includes(signOnceAccreditName.value) ? '推荐' : '授权'}签约人`,
434
+ component: DMBF9901,
435
+ width: 800,
436
+ componentParam: {
437
+ param: computed(() => {
438
+ return {
439
+ beOrgDeptId: formData.deptId,
440
+ bookId: formData.bookId,
441
+ }
442
+ }),
443
+ },
444
+ }, {
445
+ events: {
446
+ change({ currData }) {
447
+ formData.signOnceAccreditName = currData?.empName || ''
448
+ formData.signOnceAccreditCode = currData?.empCode || ''
449
+ formData.recommendSignerCompanyName = currData?.companyName || ''
450
+ formData.signOnceAccreditPost = currData?.posName || ''
451
+ formData.signOnceAccreditPostId = currData?.bePosId || ''
452
+ },
453
+ },
454
+ }),
455
+ required: ['1', '2'].includes(signOnceAccreditName.value),
456
+ },
457
+ {
458
+ field: 'beSignAuthorizeStateDesc',
459
+ title: '签约权限',
460
+ visibleMethod: () => showBeSignAuthorizeStateDescFlag.value,
461
+ itemRender: commonVxeInput({
462
+ disabled: true,
463
+ }),
464
+ },
465
+ {
466
+ span: computed(() => {
467
+ const spans = [] as any[]
468
+ if (!jyzzControlFlag.value) {
469
+ spans.push(true)
470
+ }
471
+ if (!signOnceAccreditNameFlag.value) {
472
+ spans.push(true)
473
+ }
474
+ if (!showBeSignAuthorizeStateDescFlag.value) {
475
+ spans.push(true)
476
+ }
477
+ return 8 * spans.length
478
+ }),
479
+ visibleMethod: () => {
480
+ const spans = [] as any[]
481
+ if (jyzzControlFlag.value) {
482
+ spans.push(true)
483
+ }
484
+ if (signOnceAccreditNameFlag.value) {
485
+ spans.push(true)
486
+ }
487
+ if (showBeSignAuthorizeStateDescFlag.value) {
488
+ spans.push(true)
489
+ }
490
+ return spans.length && spans.length < 3
491
+ },
492
+ },
493
+ {
494
+ field: 'contractAmount',
495
+ title: '合同总金额',
496
+ formatter: ({ itemValue }) => !isEmpty(itemValue) ? commafy(Number.parseFloat(itemValue), { digits: 2 }) : '',
497
+ itemRender: commonVxeInput({
498
+ disabled: true,
499
+ }),
500
+ validator: ({ itemValue }) => {
501
+ const contractAmount = !isEmpty(itemValue) ? `${itemValue}`.replaceAll(',', '') : ''
502
+ const result = validateNumber(contractAmount, 2)
503
+ if (!result.status) {
504
+ return Promise.reject(result.msg)
505
+ }
506
+ return Promise.resolve(true)
507
+ },
508
+ },
509
+ {
510
+ field: 'contractAmountTax',
511
+ title: '合同总税额',
512
+ formatter: ({ itemValue }) => !isEmpty(itemValue) ? commafy(Number.parseFloat(itemValue), { digits: 2 }) : '',
513
+ itemRender: commonVxeInput({
514
+ disabled: true,
515
+ }),
516
+ validator: ({ itemValue }) => {
517
+ const contractAmountTax = !isEmpty(itemValue) ? `${itemValue}`.replaceAll(',', '') : ''
518
+ const result = validateNumber(contractAmountTax, 2)
519
+ if (!result.status) {
520
+ return Promise.reject(result.msg)
521
+ }
522
+ return Promise.resolve(true)
523
+ },
524
+ },
525
+ {
526
+ field: 'contractAmountNoTax',
527
+ title: '合同不含税金额',
528
+ formatter: ({ itemValue }) => !isEmpty(itemValue) ? commafy(Number.parseFloat(itemValue), { digits: 2 }) : '',
529
+ itemRender: commonVxeInput({
530
+ disabled: true,
531
+ }),
532
+ validator: ({ itemValue }) => {
533
+ const contractAmountNoTax = !isEmpty(itemValue) ? `${itemValue}`.replaceAll(',', '') : ''
534
+ const result = validateNumber(contractAmountNoTax, 2)
535
+ if (!result.status) {
536
+ return Promise.reject(result.msg)
537
+ }
538
+ return Promise.resolve(true)
539
+ },
540
+ },
541
+ {
542
+ field: 'textType',
543
+ title: '合同文本类型',
544
+ itemRender: commonFormRadio('brmerp.pm.contractTxtType'),
545
+ required: true,
546
+ },
547
+ {
548
+ field: 'textFirstFlag',
549
+ title: '是否第一次使用该文本',
550
+ visibleMethod: ({ data }) => data.textType === 'UNSTD',
551
+ itemRender: commonFormRadio('brmerp.pm.isfirstext'),
552
+ required: true,
553
+ },
554
+ {
555
+ field: 'mouldName',
556
+ title: '标准合同模板',
557
+ visibleMethod: ({ data }) => data.textType === 'STD',
558
+ itemRender: commonSelectDialog({
559
+ title: '标准合同模板',
560
+ component: ACAT9901,
561
+ componentParam: {
562
+ param: computed(() => {
563
+ return {
564
+ suitContractTypeS: formData.responsibilityCategoryMCode,
565
+ }
566
+ }),
567
+ },
568
+ }, {
569
+ events: {
570
+ change({ currData }) {
571
+ formData.mouldId = currData?.mouldId || ''
572
+ formData.mouldCode = currData?.mouldCode || ''
573
+ formData.mouldVersion = currData?.mouldVersion || ''
574
+ formData.mouldName = currData?.mouldName || ''
575
+ },
576
+ },
577
+ }),
578
+ },
579
+ {
580
+ field: 'supplierCreditFlag',
581
+ title: '供应商是否已授信',
582
+ itemRender: commonFormSelect('brmerp.pm.isCreditOrNot', {
583
+ // disabled: true,
584
+ }),
585
+ required: true,
586
+ },
587
+ {
588
+ visibleMethod: ({ data }) => isEmpty(data.textType),
589
+ span: 8,
590
+ },
591
+ {
592
+ field: 'textElectronicFlag',
593
+ title: '是否发送电子签章平台',
594
+ itemRender: commonFormRadio('brmerp.pm.textElectronicFlag'),
595
+ required: true,
596
+ },
597
+ // {
598
+ // field: 'sealUsageType',
599
+ // title: '合同用章',
600
+ // visibleMethod: () => !foreignFlag.value,
601
+ // itemRender: commonFormRadio('brmerp.pm.sealUsageTypes', {
602
+ // multiple: true,
603
+ // }),
604
+ // required: true,
605
+ // },
606
+ // {
607
+ // field: 'contractDate',
608
+ // title: '合同履约期',
609
+ // span: 10,
610
+ // titleSuffix: {
611
+ // content: '合同履约起始日需早于等于合同履约终止日,如合同中未规定,需根据预计的最后付款时间填写',
612
+ // },
613
+ // itemRender: commonDateRange('contractStartDate', 'contractEndDate'),
614
+ // required: true,
615
+ // },
616
+ {
617
+ span: 16,
618
+ // visibleMethod: () => foreignFlag.value,
619
+ },
620
+ {
621
+ field: 'teamCode',
622
+ title: '创业团队',
623
+ itemRender: commonFormSelect(null, {
624
+ cascadePromiseFn: async (params) => {
625
+ const delay = (ms) => {
626
+ return new Promise(resolve => setTimeout(async () => {
627
+ try {
628
+ params.set('inqu_status-0-bookId', formData.bookId)
629
+ params.set('inqu_status-0-deptId', formData.deptId)
630
+ const list = await getCodeSetByService({
631
+ serviceName: 'ACCO03',
632
+ methodName: 'queryTeam',
633
+ params,
634
+ blockName: 'teamBlock',
635
+ value: 'valueField',
636
+ label: 'textField',
637
+ })
638
+ resolve(list || [])
639
+ }
640
+ catch {
641
+ resolve([])
642
+ }
643
+ }, ms))
644
+ }
645
+ try {
646
+ const list = await delay(10)
647
+ return Promise.resolve(list)
648
+ }
649
+ catch {
650
+ return Promise.resolve([])
651
+ }
652
+ },
653
+ }, {
654
+ events: {
655
+ change({ currData }) {
656
+ formData.teamName = currData?.label || ''
657
+ },
658
+ },
659
+ }),
660
+ validator: ({ itemValue }) => {
661
+ if (!isEmpty(itemValue) && isEmpty(formData.teamName)) {
662
+ return Promise.reject('未能匹配,请重新选择创业团队')
663
+ }
664
+ return Promise.resolve(true)
665
+ },
666
+ },
667
+ {
668
+ field: 'salesPersonCode',
669
+ title: '业务人员',
670
+ itemRender: commonFormSelect(null, {
671
+ cascadePromiseFn: async (params) => {
672
+ const delay = (ms) => {
673
+ return new Promise(resolve => setTimeout(async () => {
674
+ try {
675
+ params.set('inqu_status-0-bookId', formData.bookId)
676
+ params.set('inqu_status-0-deptId', formData.deptId)
677
+ const list = await getCodeSetByService({
678
+ serviceName: 'PMPC0101',
679
+ methodName: 'queryDeptInfo',
680
+ params,
681
+ blockName: 'logEmpBlock',
682
+ value: 'valueField',
683
+ label: 'textField',
684
+ })
685
+ resolve(list || [])
686
+ }
687
+ catch {
688
+ resolve([])
689
+ }
690
+ }, ms))
691
+ }
692
+ try {
693
+ const list = await delay(10)
694
+ return Promise.resolve(list)
695
+ }
696
+ catch {
697
+ return Promise.resolve([])
698
+ }
699
+ },
700
+ }, {
701
+ events: {
702
+ change({ currData }) {
703
+ formData.salesPersonName = currData?.label || ''
704
+ },
705
+ },
706
+ }),
707
+ required: true,
708
+ validator: ({ itemValue }) => {
709
+ if (!isEmpty(itemValue) && isEmpty(formData.salesPersonName)) {
710
+ return Promise.reject('未能匹配,请重新选择业务人员')
711
+ }
712
+ return Promise.resolve(true)
713
+ },
714
+ },
715
+ {
716
+ field: 'relContractMainCode',
717
+ title: '内部交易关联合同号',
718
+ itemRender: commonVxeInput({
719
+ disabled: true,
720
+ }),
721
+ },
722
+ {
723
+ field: 'contractInfo',
724
+ title: '合同概况',
725
+ itemRender: commonVxeTextarea(),
726
+ span: 24,
727
+ required: true,
728
+ },
729
+ {
730
+ field: 'cashBasisFlag',
731
+ title: '收入确认法',
732
+ visibleMethod: () => ['true', true].includes(showCashBasisFlag.value),
733
+ itemRender: commonFormRadio('brmerp.ac.cashBasisFlag'),
734
+ required: true,
735
+ },
736
+ {
737
+ field: 'directFlag',
738
+ title: '直发业务',
739
+ visibleMethod: () => !foreignFlag.value,
740
+ itemRender: commonFormSelect('brmerp.pm.selfPurchaseType', {
741
+ disabled: computed(() => {
742
+ if (!editable.value) {
743
+ return true
744
+ }
745
+ if (!isEmpty(detailInfo.value.pcContractMainHisId) && isChange.value) {
746
+ return true
747
+ }
748
+ return false
749
+ }),
750
+ }),
751
+ required: true,
752
+ },
753
+ {
754
+ field: 'purchaseType',
755
+ title: '采购方式',
756
+ visibleMethod: () => !foreignFlag.value,
757
+ itemRender: commonFormSelect('brmerp.pm.purchaseType'),
758
+ required: true,
759
+ },
760
+ {
761
+ visibleMethod: () => !foreignFlag.value && !['true', true].includes(showCashBasisFlag.value),
762
+ span: 8,
763
+ },
764
+ {
765
+ visibleMethod: () => foreignFlag.value && ['true', true].includes(showCashBasisFlag.value),
766
+ span: 16,
767
+ },
768
+ {
769
+ field: 'operatorDepartmentCode',
770
+ title: '执行部门',
771
+ itemRender: commonFormSelect(null, {
772
+ cascadePromiseFn: async (params) => {
773
+ const delay = (ms) => {
774
+ return new Promise(resolve => setTimeout(async () => {
775
+ try {
776
+ params.set('inqu_status-0-bookId', formData.bookId)
777
+ params.set('inqu_status-0-deptId', formData.deptId)
778
+ const list = await getCodeSetByService({
779
+ serviceName: 'PMPC0101',
780
+ methodName: 'queryDeptInfo',
781
+ params,
782
+ blockName: 'deptBlock',
783
+ value: 'valueField',
784
+ label: 'textField',
785
+ })
786
+ resolve(list || [])
787
+ }
788
+ catch {
789
+ resolve([])
790
+ }
791
+ }, ms))
792
+ }
793
+ try {
794
+ const list = await delay(10)
795
+ return Promise.resolve(list)
796
+ }
797
+ catch {
798
+ return Promise.resolve([])
799
+ }
800
+ },
801
+ cascadeFields: 'operatorPersonCode',
802
+ cascadePromiseFnFields: 'orgCode',
803
+ cascadePromiseFnItemFields: 'valueField',
804
+ }, {
805
+ events: {
806
+ change({ currData }) {
807
+ formData.operatorDepartmentName = currData?.label || ''
808
+ },
809
+ },
810
+ }),
811
+ required: true,
812
+ validator: ({ itemValue }) => {
813
+ if (!isEmpty(itemValue) && isEmpty(formData.operatorDepartmentName)) {
814
+ return Promise.reject('未能匹配,请重新选择执行部门')
815
+ }
816
+ return Promise.resolve(true)
817
+ },
818
+ },
819
+ {
820
+ field: 'operatorPersonCode',
821
+ title: '执行人员',
822
+ itemRender: commonFormSelect(null, {
823
+ cascadePromiseFn: async (params) => {
824
+ const delay = (ms) => {
825
+ return new Promise(resolve => setTimeout(async () => {
826
+ try {
827
+ const orgId = params.getBlock('inqu_status').getCell(0, 'orgId')
828
+ if (orgId) {
829
+ params.set('inqu_status-0-bookId', formData.bookId)
830
+ params.set('inqu_status-0-deptId', formData.deptId)
831
+ const list = await getCodeSetByService({
832
+ serviceName: 'PMPC0101',
833
+ methodName: 'queryDeptInfo',
834
+ params,
835
+ blockName: 'optEmpBlock',
836
+ value: 'valueField',
837
+ label: 'textField',
838
+ })
839
+ resolve(list || [])
840
+ return
841
+ }
842
+ const beorgId = params.getBlock('inqu_status').getCell(0, 'orgCode')
843
+ params.setByNameValue('orgCode', beorgId)
844
+ const newOrgId = await getCodeSetByService({
845
+ serviceName: 'PMPC0101',
846
+ methodName: 'queryDeptIdByOrgCode',
847
+ params,
848
+ blockName: 'orgId',
849
+ })
850
+ params.setByNameValue('inqu_status-0-orgId', newOrgId)
851
+ const operatorPersonList = await getCodeSetByService({
852
+ serviceName: 'ACCO01',
853
+ methodName: 'queryDeptAndName',
854
+ params,
855
+ value: 'valueField',
856
+ label: 'textField',
857
+ })
858
+ resolve(operatorPersonList || [])
859
+ }
860
+ catch {
861
+ resolve([])
862
+ }
863
+ }, ms))
864
+ }
865
+ try {
866
+ const list = await delay(10)
867
+ return Promise.resolve(list)
868
+ }
869
+ catch {
870
+ return Promise.resolve([])
871
+ }
872
+ },
873
+ }, {
874
+ events: {
875
+ change({ currData }) {
876
+ formData.operatorPersonName = currData?.label || ''
877
+ },
878
+ },
879
+ }),
880
+ required: true,
881
+ validator: ({ itemValue }) => {
882
+ if (!isEmpty(itemValue) && isEmpty(formData.operatorPersonName)) {
883
+ return Promise.reject('未能匹配,请重新选择执行人员')
884
+ }
885
+ return Promise.resolve(true)
886
+ },
887
+ },
888
+ {
889
+ field: 'customerShipFlag',
890
+ title: '是否客户租船',
891
+ visibleMethod: () => detailInfo.value.tradeTermsCode === 'FOB',
892
+ itemRender: commonFormSelect('brmerp.bm.yesOrNo', {
893
+ disabled: true,
894
+ }),
895
+ },
896
+ {
897
+ field: 'remark',
898
+ title: '备注',
899
+ titleSuffix: {
900
+ content: '备注最多允许录入可用字数200个',
901
+ },
902
+ itemRender: commonVxeTextarea(5, {
903
+ maxlength: 200,
904
+ }),
905
+ span: 24,
906
+ },
907
+ ]
908
+ })
909
+
910
+ const getData = () => {
911
+ const data = getFormData(baseFields.value, formData) as any
912
+ if (jyzzControlFlag.value) {
913
+ delete data.jyzz
914
+ data.responsibilityCategoryLCode = formData.responsibilityCategoryLCode
915
+ data.responsibilityCategoryLName = formData.responsibilityCategoryLName
916
+ data.responsibilityCategoryMCode = formData.responsibilityCategoryMCode
917
+ data.responsibilityCategoryMName = formData.responsibilityCategoryMName
918
+ data.responsibilityCategorySCode = formData.responsibilityCategorySCode
919
+ data.responsibilityCategorySName = formData.responsibilityCategorySName
920
+ }
921
+ if (signOnceAccreditNameFlag.value) {
922
+ data.signOnceAccreditCode = formData.signOnceAccreditCode
923
+ data.recommendSignerCompanyName = formData.recommendSignerCompanyName
924
+ data.signOnceAccreditPost = formData.signOnceAccreditPost
925
+ data.signOnceAccreditPostId = formData.signOnceAccreditPostId
926
+ }
927
+ data.lastShipmentDate = formData.lastShipmentDate
928
+ data.mouldId = formData.mouldId
929
+ data.mouldCode = formData.mouldCode
930
+ data.mouldVersion = formData.mouldVersion
931
+ data.pcContractMainId = formData.pcContractMainId
932
+ data.textFirstFlag = formData.textFirstFlag
933
+ data.bookId = formData.bookId
934
+ data.deptId = formData.deptId
935
+ data.groupId = formData.groupId
936
+ data.companyId = formData.companyId
937
+ data.teamName = formData.teamName
938
+ data.salesPersonName = formData.salesPersonName
939
+ data.operatorDepartmentName = formData.operatorDepartmentName
940
+ data.operatorPersonName = formData.operatorPersonName
941
+ data.contractAmount = !isEmpty(formData.contractAmount) ? `${formData.contractAmount}`.replaceAll(',', '') : ''
942
+ data.contractAmountTax = !isEmpty(formData.contractAmountTax) ? `${formData.contractAmountTax}`.replaceAll(',', '') : ''
943
+ data.contractAmountNoTax = !isEmpty(formData.contractAmountNoTax) ? `${formData.contractAmountNoTax}`.replaceAll(',', '') : ''
944
+ if (foreignFlag.value) {
945
+ data.directFlag = 'N'
946
+ }
947
+ data.customerShipFlag = formData.customerShipFlag
948
+ data.relContractMainCode = formData.relContractMainCode
949
+ return data
950
+ }
951
+
952
+ const formRules = computed(() => createFormRules(baseFields.value))
953
+
954
+ const diffConfig = computed(() => {
955
+ const fields = baseFields.value.filter(item => ((item as any).visible ?? true) && !isEmpty(item.field)).map(item => item.field)
956
+ const enabled = diffable.value && Object.keys(diffInfo.value).some(field => fields.includes(field))
957
+ return {
958
+ enabled,
959
+ data: diffInfo.value,
960
+ }
961
+ })
962
+
963
+ const formConfig = reactive({
964
+ data: formData,
965
+ items: baseFields,
966
+ titleWidth: 170,
967
+ rules: formRules,
968
+ diffConfig,
969
+ })
970
+
971
+ return {
972
+ formData,
973
+ formConfig,
974
+ validator,
975
+ validateField,
976
+ getData,
977
+ updateInvalidStatus,
978
+ }
979
+ }