@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,168 @@
1
+ <!--
2
+ * @Author: 谢力
3
+ * @Date: 2025-07-22 15:46:55
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-10-21 21:26:08
6
+ -->
7
+ <template>
8
+ <BxRoundedContainer class="position-relative">
9
+ <template v-if="collectable">
10
+ <vxe-icon v-if="isCollect" name="star-fill" status="warning" :style="{ fontSize: '18px' }" class="cursor-pointer bold position-absolute top-3 right-3" @click="handleCancelCollect" />
11
+ <vxe-icon v-else name="star" status="warning" :style="{ fontSize: '18px' }" class="cursor-pointer position-absolute top-3 right-3 bold" @click="handleAddCollect" />
12
+ </template>
13
+ <BxContainer :title="title">
14
+ <Base ref="base" />
15
+ <template v-if="!isApprovePage">
16
+ <Other ref="other" />
17
+ <Sign ref="sign" />
18
+ </template>
19
+ </BxContainer>
20
+ </BxRoundedContainer>
21
+ </template>
22
+
23
+ <script setup lang="ts">
24
+ import { computed, inject, provide, ref } from 'vue'
25
+ import { ElMessage } from 'element-plus'
26
+ import Base from './Base/index.vue'
27
+ import Other from './Other/index.vue'
28
+ import Sign from './Sign/index.vue'
29
+ import { useUserStore } from '@/stores/modules/user'
30
+ import { isEmpty } from '@/utils/is'
31
+ import { createEiBlock, sendService } from '@/utils/eiTools'
32
+ import { usePageRefreshStore } from '@/stores/modules/pageRefresh'
33
+
34
+ const base = ref<any>(null)
35
+ const other = ref<any>(null)
36
+ const sign = ref<any>(null)
37
+
38
+ const modules = {
39
+ base,
40
+ other,
41
+ sign,
42
+ }
43
+
44
+ provide('__PMPC0101__main__module__', modules)
45
+
46
+ const { detailInfo, isHistory, isApprovePage, isCorrecteOrChange } = inject('__PMPC0101__info__') as any
47
+
48
+ const { userInfo } = useUserStore()
49
+ const pageRefreshStore = usePageRefreshStore()
50
+
51
+ const title = computed(() => isApprovePage.value && isCorrecteOrChange.value ? '审批情况' : '合同信息')
52
+
53
+ function getData() {
54
+ return Object.keys(modules).reduce((ob, key) => {
55
+ const module = modules[key]
56
+ if (module.value?.getData) {
57
+ ob[key] = module.value.getData()
58
+ }
59
+ return ob
60
+ }, {})
61
+ }
62
+
63
+ async function validator(flag: boolean = true) {
64
+ try {
65
+ await base.value.validator(flag)
66
+ await other.value.validator(flag)
67
+ await sign.value.validator(flag)
68
+ return Promise.resolve(true)
69
+ }
70
+ catch {
71
+ return Promise.reject(false)
72
+ }
73
+ }
74
+
75
+ function updateFormData(data) {
76
+ Object.keys(modules).forEach((key) => {
77
+ const module = modules[key]
78
+ module.value?.updateFormData?.(data)
79
+ })
80
+ }
81
+
82
+ const collectable = computed(() => !isApprovePage.value && !isHistory.value && !isEmpty(detailInfo.value.pcContractMainId) && !isEmpty(detailInfo.value.pcContractCode))
83
+
84
+ const isCollect = ref(false)
85
+
86
+ async function queryCollectInfo() {
87
+ try {
88
+ const collectResult = await sendService({
89
+ serviceName: 'BMBI05',
90
+ methodName: 'query1',
91
+ loading: false,
92
+ eiBlocks: [
93
+ createEiBlock({
94
+ billId: detailInfo.value.pcContractMainId,
95
+ }, 'inqu_status'),
96
+ ],
97
+ blockName: true,
98
+ }) as any
99
+ isCollect.value = (collectResult?.extAttr?.flag) ?? false
100
+ return Promise.resolve(true)
101
+ }
102
+ catch (error) {
103
+ return Promise.reject(error)
104
+ }
105
+ }
106
+
107
+ if (collectable.value) {
108
+ queryCollectInfo()
109
+ }
110
+ const route = useRoute()
111
+ async function handleAddCollect() {
112
+ try {
113
+ await sendService({
114
+ serviceName: 'BMBI05',
115
+ methodName: 'insert',
116
+ eiBlocks: [
117
+ createEiBlock({
118
+ collectionPageType: 'COM',
119
+ collectionPageName: detailInfo.value.contractName,
120
+ collectionPageUrl: route.fullPath,
121
+ billId: detailInfo.value.pcContractMainId,
122
+ billCode: detailInfo.value.pcContractCode,
123
+ userCode: userInfo?.loginCode || '',
124
+ }, 'result'),
125
+ ],
126
+ })
127
+ ElMessage.success(`添加收藏成功`)
128
+ pageRefreshStore.setRefreshFlag('homeCollect')
129
+ await queryCollectInfo()
130
+ }
131
+ catch {
132
+
133
+ }
134
+ }
135
+
136
+ async function handleCancelCollect() {
137
+ try {
138
+ await sendService({
139
+ serviceName: 'BMBI05',
140
+ methodName: 'delete',
141
+ eiBlocks: [
142
+ createEiBlock({
143
+ billId: detailInfo.value.pcContractMainId,
144
+ billCode: detailInfo.value.pcContractCode,
145
+ userCode: userInfo?.loginCode || '',
146
+ }, 'result'),
147
+ ],
148
+ })
149
+ ElMessage.success(`取消收藏成功`)
150
+ pageRefreshStore.setRefreshFlag('homeCollect')
151
+ await queryCollectInfo()
152
+ }
153
+ catch {
154
+
155
+ }
156
+ }
157
+
158
+ defineExpose({
159
+ getData,
160
+ validator,
161
+ base,
162
+ other,
163
+ sign,
164
+ updateFormData,
165
+ })
166
+ </script>
167
+
168
+ <style scoped></style>
@@ -0,0 +1,257 @@
1
+ import { computed, inject, reactive, watch } from 'vue'
2
+ import { merge } from 'xe-utils'
3
+ import { useForm } from '@/hooks/useForm'
4
+ import { isEmpty } from '@/utils/is'
5
+ import PMPC9901 from '@/views/PM/PC/PMPC9901.vue'
6
+ import UMUC9903 from '@/views/UM/UC/UMUC9903.vue'
7
+ import UMUC9904 from '@/views/UM/UC/UMUC9904.vue'
8
+
9
+ export function createFormConfig() {
10
+ const { commonVxeInput, commonVxeTextarea, commonFormSelect, commonSelectDialog, createFormRules, validator, validateField, getFormData } = useForm()
11
+
12
+ const { editable, isCorrecteOrChange, diffable, majorInfo, majorDiffInfo } = inject('__PMPC0101__info__') as any
13
+
14
+ const { getId } = inject('__PMPC0101__method__') as any
15
+
16
+ const { main: mainModule } = inject('__PMPC0101__module__') as { main: Ref }
17
+
18
+ const baseModule = computed(() => mainModule?.value?.base)
19
+
20
+ const baseModuleFormData = computed(() => baseModule?.value?.formData)
21
+
22
+ const defaultData = {
23
+ isSign: 'Y',
24
+ isSettle: 'Y',
25
+ }
26
+
27
+ const formData = reactive(merge({
28
+ [getId('pcContractPartyId')]: '',
29
+ isSign: '',
30
+ isSettle: '',
31
+ partyCorpCode: '',
32
+ partyName: '',
33
+ partyNameEn: '',
34
+ partyGroupCode: '',
35
+ partyCorpId: '',
36
+ partyBankName: '',
37
+ partyBankAccount: '',
38
+ partyContactPerson: '',
39
+ partyContactTelephone: '',
40
+ partyAddress: '',
41
+ remark: '',
42
+ }, defaultData, majorInfo.value))
43
+
44
+ watch(() => formData.partyGroupCode, () => {
45
+ if (isEmpty(formData.partyGroupCode)) {
46
+ formData.partyBankAccount = ''
47
+ formData.partyBankName = ''
48
+ formData.partyContactPerson = ''
49
+ formData.partyContactTelephone = ''
50
+ formData.partyAddress = ''
51
+ }
52
+ })
53
+
54
+ const baseFields = computed(() => {
55
+ return [
56
+ {
57
+ field: 'isSign',
58
+ title: '是否签约客商',
59
+ itemRender: commonFormSelect('brmerp.bm.yesOrNo', {
60
+ disabled: true,
61
+ }),
62
+ required: true,
63
+ },
64
+ {
65
+ field: 'isSettle',
66
+ title: '是否结算客商',
67
+ itemRender: commonFormSelect('brmerp.bm.yesOrNo'),
68
+ required: true,
69
+ },
70
+ {
71
+ field: 'partyGroupCode',
72
+ title: '客商编码',
73
+ itemRender: commonSelectDialog({
74
+ clearable: computed(() => editable.value ? !isCorrecteOrChange.value : false),
75
+ title: '客商查询',
76
+ component: PMPC9901,
77
+ componentParam: {
78
+ disableIds: computed(() => {
79
+ if (isCorrecteOrChange.value) {
80
+ return ['supplierStatus', 'corpGroupCode', 'corpName', 'corpNameEn', 'ucCorpCode']
81
+ }
82
+ return ['supplierStatus']
83
+ }),
84
+ param: computed(() => {
85
+ const oData = {
86
+ bookId: baseModuleFormData.value?.bookId,
87
+ orgId: baseModuleFormData.value?.orgId,
88
+ deptId: baseModuleFormData.value?.deptId,
89
+ groupId: baseModuleFormData.value?.groupId,
90
+ companyId: baseModuleFormData.value?.companyId,
91
+ supplierStatus: '40',
92
+ }
93
+ if (isCorrecteOrChange.value) {
94
+ return {
95
+ ...oData,
96
+ corpGroupCode: formData.partyGroupCode || '',
97
+ // corpName: formData.partyName || '',
98
+ // corpNameEn: formData.partyNameEn || '',
99
+ ucCorpId: formData.partyCorpId || '',
100
+ ucCorpCode: formData.partyCorpCode || '',
101
+ }
102
+ }
103
+ return oData
104
+ }),
105
+ },
106
+ }, {
107
+ events: {
108
+ change({ currData }) {
109
+ formData.partyGroupCode = currData?.corpGroupCode || ''
110
+ formData.partyName = currData?.corpName || ''
111
+ formData.partyNameEn = currData?.corpNameEn || ''
112
+ formData.partyCorpId = currData?.ucCorpId || ''
113
+ formData.partyCorpCode = currData?.ucCorpCode || ''
114
+ formData.partyBankAccount = currData?.accountNo || ''
115
+ formData.partyBankName = currData?.bankBranchName || ''
116
+ formData.partyContactPerson = currData?.contactName || ''
117
+ formData.partyContactTelephone = currData?.contactPhone || ''
118
+ formData.partyAddress = currData?.contactAddress || ''
119
+ },
120
+ },
121
+ }),
122
+ required: true,
123
+ },
124
+ {
125
+ field: 'partyName',
126
+ title: '客商中文名称',
127
+ itemRender: commonVxeInput({
128
+ disabled: true,
129
+ }),
130
+ },
131
+ {
132
+ field: 'partyNameEn',
133
+ title: '客商英文名称',
134
+ itemRender: commonVxeInput({
135
+ disabled: true,
136
+ }),
137
+ },
138
+ {
139
+ field: 'partyBankName',
140
+ title: '银行名称',
141
+ itemRender: commonSelectDialog({
142
+ disabled: computed(() => !editable.value || isEmpty(formData.partyGroupCode)),
143
+ title: '银行查询',
144
+ mask: true,
145
+ component: UMUC9903,
146
+ componentParam: {
147
+ disableIds: ['ucCorpCode', 'ucCorpId', 'corpName', 'corpGroupCode', 'accountStatus'],
148
+ param: {
149
+ ucCorpCode: formData.partyCorpCode,
150
+ ucCorpId: formData.partyCorpId,
151
+ corpName: formData.partyName,
152
+ corpGroupCode: formData.partyGroupCode,
153
+ accountStatus: '40',
154
+ },
155
+ },
156
+ }, {
157
+ events: {
158
+ change({ currData }) {
159
+ formData.partyBankAccount = currData?.accountNo || ''
160
+ formData.partyBankName = currData?.bankBranchName || ''
161
+ },
162
+ },
163
+ }),
164
+ },
165
+ {
166
+ field: 'partyBankAccount',
167
+ title: '银行账号',
168
+ itemRender: commonVxeInput({
169
+ disabled: true,
170
+ }),
171
+ },
172
+ {
173
+ field: 'partyContactPerson',
174
+ title: '联系人',
175
+ itemRender: commonSelectDialog({
176
+ disabled: computed(() => !editable.value || isEmpty(formData.partyGroupCode)),
177
+ title: '联系人查询',
178
+ component: UMUC9904,
179
+ componentParam: {
180
+ disableIds: ['ucCorpCode', 'ucCorpId', 'corpName', 'corpGroupCode', 'contactStatus'],
181
+ param: {
182
+ ucCorpCode: formData.partyCorpCode,
183
+ ucCorpId: formData.partyCorpId,
184
+ corpName: formData.partyName,
185
+ corpGroupCode: formData.partyGroupCode,
186
+ contactStatus: '40',
187
+ },
188
+ },
189
+ }, {
190
+ events: {
191
+ change({ currData }) {
192
+ formData.partyContactPerson = currData?.contactName || ''
193
+ formData.partyContactTelephone = currData?.contactPhone || ''
194
+ formData.partyAddress = currData?.contactAddress || ''
195
+ },
196
+ },
197
+ }),
198
+ },
199
+ {
200
+ field: 'partyContactTelephone',
201
+ title: '联系电话',
202
+ itemRender: commonVxeInput({
203
+ disabled: true,
204
+ }),
205
+ },
206
+ {
207
+ field: 'partyAddress',
208
+ title: '单位地址',
209
+ span: 16,
210
+ itemRender: commonVxeInput({
211
+ disabled: true,
212
+ }),
213
+ },
214
+ {
215
+ field: 'remark',
216
+ title: '备注',
217
+ itemRender: commonVxeTextarea(),
218
+ span: 24,
219
+ },
220
+ ]
221
+ })
222
+
223
+ const getData = () => {
224
+ const data = getFormData(baseFields.value, formData) as any
225
+ data[getId('pcContractPartyId')] = formData[getId('pcContractPartyId')]
226
+ data.contractPartyStatus = '40'
227
+ data.contractPartyType = 'SUPPLIER'
228
+ return data
229
+ }
230
+
231
+ const formRules = computed(() => createFormRules(baseFields.value))
232
+
233
+ const diffConfig = computed(() => {
234
+ const fields = baseFields.value.filter(item => ((item as any).visible ?? true) && !isEmpty(item.field)).map(item => item.field)
235
+ const enabled = diffable.value && Object.keys(majorDiffInfo.value).some(field => fields.includes(field))
236
+ return {
237
+ enabled,
238
+ data: majorDiffInfo.value,
239
+ }
240
+ })
241
+
242
+ const formConfig = reactive({
243
+ data: formData,
244
+ items: baseFields,
245
+ titleWidth: 170,
246
+ rules: formRules,
247
+ diffConfig,
248
+ })
249
+
250
+ return {
251
+ formData,
252
+ getData,
253
+ formConfig,
254
+ validator,
255
+ validateField,
256
+ }
257
+ }
@@ -0,0 +1,47 @@
1
+ <!--
2
+ * @Author: 谢力
3
+ * @Date: 2025-07-22 15:57:39
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2026-01-15 15:31:35
6
+ -->
7
+ <template>
8
+ <VxePlusForm
9
+ ref="xForm"
10
+ :disabled="!editable"
11
+ :title-asterisk="editable"
12
+ :form-options="formConfig"
13
+ />
14
+ </template>
15
+
16
+ <script setup lang="ts">
17
+ import { inject, ref } from 'vue'
18
+ import { createFormConfig } from './formConfig'
19
+
20
+ const xForm = ref<any>(null)
21
+
22
+ const { editable } = inject('__PMPC0101__info__') as any
23
+
24
+ const { formData, getData, formConfig, validator } = createFormConfig()
25
+
26
+ function handleValidator(flag: boolean = true) {
27
+ return validator(xForm, flag)
28
+ }
29
+
30
+ function updateFormData(data) {
31
+ Object.assign(formData, data)
32
+ }
33
+
34
+ defineExpose({
35
+ formData,
36
+ getData: () => {
37
+ return {
38
+ ...formData,
39
+ ...getData(),
40
+ }
41
+ },
42
+ validator: handleValidator,
43
+ updateFormData,
44
+ })
45
+ </script>
46
+
47
+ <style scoped></style>