@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,62 @@
1
+ <!--
2
+ * @Author: 谢力
3
+ * @Date: 2025-07-22 20:55:43
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-11-06 17:02:36
6
+ -->
7
+ <template>
8
+ <div>
9
+ <template v-if="isApprovePage">
10
+ <template v-if="isCorrecteOrChange">
11
+ <Approve2 />
12
+ <Diff />
13
+ </template>
14
+ <Approve v-else />
15
+ </template>
16
+ <BxContainer v-else title="基本信息" level-two>
17
+ <VxePlusForm
18
+ ref="xForm"
19
+ :disabled="!editable"
20
+ :title-asterisk="editable"
21
+ :form-options="formConfig"
22
+ />
23
+ </BxContainer>
24
+ </div>
25
+ </template>
26
+
27
+ <script setup lang="ts">
28
+ import { inject, ref } from 'vue'
29
+ import { createFormConfig } from './formConfig'
30
+ import Approve from './Approve/index.vue'
31
+ import Approve2 from './Approve2/index.vue'
32
+ import Diff from './Diff/index.vue'
33
+
34
+ const xForm = ref<any>(null)
35
+
36
+ const { editable, isApprovePage, isCorrecteOrChange } = inject('__PMPC0101__info__') as any
37
+
38
+ const { formData, formConfig, validator, getData, updateInvalidStatus } = createFormConfig()
39
+
40
+ function handleValidator(flag: boolean = true) {
41
+ return validator(xForm, flag)
42
+ }
43
+
44
+ function updateFormData(data) {
45
+ Object.assign(formData, data)
46
+ }
47
+
48
+ function updateInvalidFieldStatus(event: unknown) {
49
+ const { field, message } = event as { field: string, message: string }
50
+ updateInvalidStatus(xForm, field, message)
51
+ }
52
+
53
+ defineExpose({
54
+ formData,
55
+ getData,
56
+ validator: handleValidator,
57
+ updateFormData,
58
+ updateInvalidFieldStatus,
59
+ })
60
+ </script>
61
+
62
+ <style scoped></style>
@@ -0,0 +1,179 @@
1
+ /*
2
+ * @Author: 谢力
3
+ * @Date: 2025-07-22 15:57:39
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2026-03-10 16:17:58
6
+ */
7
+ import { computed, inject, reactive } from 'vue'
8
+ import type { Ref } from 'vue'
9
+ import { merge } from 'xe-utils'
10
+ import { useForm } from '@/hooks/useForm'
11
+ import { isEmpty } from '@/utils/is'
12
+ import ABBP01 from '@/views/AB/BP/ABBP01.vue'
13
+ import PMPC9920 from '@/views/PM/PC/PMPC9920.vue'
14
+
15
+ export function createFormConfig() {
16
+ const { commonVxeInput, commonFormSelect, commonSelectDialog, createFormRules, validator, validateField, getFormData } = useForm()
17
+
18
+ const { diffable, detailInfo, diffInfo, businessType, fileCount } = inject('__PMPC0101__info__') as any
19
+
20
+ const { base: baseModule } = inject('__PMPC0101__main__module__') as { base: Ref }
21
+
22
+ const baseModuleFormData = computed(() => baseModule?.value?.formData)
23
+
24
+ const formData = reactive(merge({
25
+ bpExtStrategicSourcingCode: '',
26
+ bpExtStrategicSourcingId: '',
27
+ paAgreementMainId: '',
28
+ paAgreementCode: '',
29
+ paAgreementNo: '',
30
+ paAgreementName: '',
31
+ paAgreementVersion: '',
32
+ bpProposalMainCode: '',
33
+ proposalBusinessType: '',
34
+ fileCount: '',
35
+ }, detailInfo.value, {
36
+ fileCount: fileCount.value,
37
+ }))
38
+
39
+ const baseFields = computed(() => {
40
+ return [
41
+ {
42
+ field: 'bpExtStrategicSourcingCode',
43
+ title: '策略采购方案',
44
+ visibleMethod: () => baseModuleFormData.value?.contractTypeSourcing === 'STRATEGIC',
45
+ itemRender: commonSelectDialog({
46
+ title: '策略采购方案',
47
+ component: ABBP01,
48
+ componentParam: {
49
+ toolbarHidden: true,
50
+ },
51
+ }, {
52
+ events: {
53
+ change({ currData }) {
54
+ formData.bpExtStrategicSourcingCode = currData?.bpExtStrategicSourcingCode || ''
55
+ formData.bpExtStrategicSourcingId = currData?.bpExtStrategicSourcingId || ''
56
+ },
57
+ },
58
+ }),
59
+ required: true,
60
+ },
61
+ {
62
+ field: 'paAgreementName',
63
+ title: '采购协议名称',
64
+ itemRender: commonVxeInput({
65
+ disabled: true,
66
+ }),
67
+ },
68
+ {
69
+ field: 'paAgreementCode',
70
+ title: '采购协议合同号',
71
+ itemRender: commonSelectDialog({
72
+ title: '采购协议合同号',
73
+ component: PMPC9920,
74
+ componentParam: {
75
+ disableIds: ['agreementStatus'],
76
+ param: {
77
+ agreementStatus: '40',
78
+ },
79
+ },
80
+ }, {
81
+ events: {
82
+ change({ currData }) {
83
+ formData.paAgreementMainId = currData?.paAgreementMainId || ''
84
+ formData.paAgreementCode = currData?.paAgreementCode || ''
85
+ formData.paAgreementNo = currData?.paAgreementNo || ''
86
+ formData.paAgreementName = currData?.agreementName || ''
87
+ formData.paAgreementVersion = currData?.agreementVersion || ''
88
+ },
89
+ },
90
+ }),
91
+ },
92
+ {
93
+ field: 'paAgreementVersion',
94
+ title: '采购协议版本号',
95
+ itemRender: commonVxeInput({
96
+ disabled: true,
97
+ }),
98
+ },
99
+ {
100
+ field: 'bpProposalCom',
101
+ title: '询报价',
102
+ itemRender: {
103
+ name: 'formComponentsList',
104
+ props: {
105
+ compsProps: [
106
+ {
107
+ field: 'bpProposalMainCode',
108
+ span: 12,
109
+ ...commonVxeInput({
110
+ disabled: true,
111
+ }),
112
+ },
113
+ {
114
+ field: 'proposalBusinessType',
115
+ span: 12,
116
+ ...commonFormSelect('brmerp.abbp.businessType', {
117
+ disabled: true,
118
+ }),
119
+ },
120
+ ],
121
+ },
122
+ },
123
+ },
124
+ {
125
+ field: 'proposalVersion',
126
+ title: '询报价版本号',
127
+ slots: {
128
+ default: 'proposalVersion_default',
129
+ },
130
+ },
131
+ {
132
+ field: 'fileCount',
133
+ title: '附件信息',
134
+ slots: {
135
+ default: 'fileCount_default',
136
+ },
137
+ visibleMethod: () => ['10'].includes(businessType.value) && !isEmpty(detailInfo.value.pcContractMainId),
138
+ },
139
+ ]
140
+ })
141
+
142
+ const getData = () => {
143
+ const data = getFormData(baseFields.value, formData)
144
+ delete data.fileCount
145
+ data.bpExtStrategicSourcingId = formData.bpExtStrategicSourcingId
146
+ data.paAgreementMainId = formData.paAgreementMainId
147
+ data.paAgreementNo = formData.paAgreementNo
148
+ data.paAgreementName = formData.paAgreementName
149
+ data.paAgreementVersion = formData.paAgreementVersion
150
+ return data
151
+ }
152
+
153
+ const formRules = computed(() => createFormRules(baseFields.value))
154
+
155
+ const diffConfig = computed(() => {
156
+ const fields = baseFields.value.filter(item => ((item as any).visible ?? true) && !isEmpty(item.field)).map(item => item.field)
157
+ const enabled = diffable.value && Object.keys(diffInfo.value).some(field => fields.includes(field))
158
+ return {
159
+ enabled,
160
+ data: diffInfo.value,
161
+ }
162
+ })
163
+
164
+ const formConfig = reactive({
165
+ data: formData,
166
+ items: baseFields,
167
+ titleWidth: 170,
168
+ rules: formRules,
169
+ diffConfig,
170
+ })
171
+
172
+ return {
173
+ formData,
174
+ getData,
175
+ formConfig,
176
+ validator,
177
+ validateField,
178
+ }
179
+ }
@@ -0,0 +1,140 @@
1
+ <!--
2
+ * @Author: 谢力
3
+ * @Date: 2025-07-22 15:57:39
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2026-03-10 17:24:25
6
+ -->
7
+ <template>
8
+ <BxContainer title="其他信息" level-two>
9
+ <VxePlusForm
10
+ ref="xForm"
11
+ :disabled="!editable"
12
+ :title-asterisk="editable"
13
+ :form-options="formConfig"
14
+ >
15
+ <template #fileCount_default="{ data }">
16
+ <div class="flex-row align-center-row">
17
+ <el-button type="primary" @click="handleUpload">
18
+ 附件管理
19
+ </el-button>
20
+ <span class="font16 ml10 red bold">附件个数:{{ data.fileCount }}</span>
21
+ </div>
22
+ </template>
23
+ <template #proposalVersion_default>
24
+ <div class="flex-row align-center-row">
25
+ <vxe-input v-model="formData.proposalVersion" placeholder="" disabled style="width:100px;" />
26
+ <div v-if="updateable" class="ml10 flex-row align-center-row">
27
+ <el-button type="primary" :disabled="!editable" @click="handleUpdate">
28
+ 更新
29
+ </el-button>
30
+ <span class="font16 ml10 red bold">最新版本:{{ formData.newProposalVersion }}</span>
31
+ </div>
32
+ </div>
33
+ </template>
34
+ </VxePlusForm>
35
+ </BxContainer>
36
+ </template>
37
+
38
+ <script setup lang="ts">
39
+ import { computed, inject, ref } from 'vue'
40
+ import { ElMessage } from 'element-plus'
41
+ import { createFormConfig } from './formConfig'
42
+ import { useFileUpload } from '@/hooks/useFileUpload'
43
+ import { createEiBlock, sendService } from '@/utils/eiTools'
44
+ import { isEmpty } from '@/utils/is'
45
+ import { useRefreshPage } from '@/hooks/useRefreshPage'
46
+
47
+ const xForm = ref<any>(null)
48
+
49
+ const { editable, detailInfo, fileCount, foreignFlag, isCorrecteOrChange, addable } = inject('__PMPC0101__info__') as any
50
+
51
+ const { getId } = inject('__PMPC0101__method__') as any
52
+
53
+ const { main: mainModule } = inject('__PMPC0101__module__') as { main: Ref }
54
+
55
+ const baseModule = computed(() => mainModule?.value?.base)
56
+
57
+ const baseModuleFormData = computed(() => baseModule?.value?.formData)
58
+
59
+ const { formData, getData, formConfig, validator } = createFormConfig()
60
+
61
+ const { openFileBFSS0001 } = useFileUpload()
62
+
63
+ const { refreshPage } = useRefreshPage()
64
+
65
+ const updateable = computed(() => {
66
+ return !addable.value && !isCorrecteOrChange.value && !isEmpty(formData.newProposalVersion) && !isEmpty(formData.proposalVersion) && formData.proposalVersion !== formData.newProposalVersion
67
+ })
68
+
69
+ function handleUpload() {
70
+ if (!detailInfo.value[getId('pcContractMainId')]) {
71
+ return ElMessage.warning('请先保存合同信息!')
72
+ }
73
+ if (editable.value && foreignFlag.value && !detailInfo.value.pcContractCode) {
74
+ return ElMessage.warning('请先生成合同号!')
75
+ }
76
+ const bizTypeCode = editable.value ? 'PM_CONTRACT_PROPOSE' : 'PM_CONTRACT_PROPOSE,PM_CONTRACT_FORMAL,PM_CONTRACT_CORRECT,PM_CONTRACT_END'
77
+ const flag = editable.value ? 'operate' : 'view'
78
+ const bizBillId = detailInfo.value.pcContractMainId
79
+ const bizBillCode = detailInfo.value.pcContractCode
80
+ const bizBillVersion = detailInfo.value.contractVersion
81
+ const bookId = detailInfo.value.bookId
82
+ const verFlag = 'N'
83
+ const fileTypeCode = ''
84
+ openFileBFSS0001({
85
+ bizTypeCode,
86
+ contractId: bizBillId,
87
+ bizBillId,
88
+ bizBillCode,
89
+ bizBillVersion,
90
+ fileTypeCode,
91
+ verFlag,
92
+ flag,
93
+ bookId,
94
+ data: baseModuleFormData.value,
95
+ editable: editable.value,
96
+ cb: ({ total }) => {
97
+ formData.fileCount = total
98
+ },
99
+ })
100
+ }
101
+
102
+ function handleValidator(flag: boolean = true) {
103
+ return validator(xForm, flag)
104
+ }
105
+
106
+ function updateFormData(data) {
107
+ Object.assign(formData, data, {
108
+ fileCount: fileCount.value,
109
+ })
110
+ }
111
+
112
+ async function handleUpdate() {
113
+ try {
114
+ await sendService({
115
+ serviceName: 'PMPC0101',
116
+ methodName: 'updateFromProposal',
117
+ eiBlocks: [
118
+ createEiBlock({
119
+ pcContractMainId: detailInfo.value.pcContractMainId,
120
+ [getId('pcContractMainId')]: detailInfo.value[getId('pcContractMainId')],
121
+ }, 'inqu_status'),
122
+ ],
123
+ })
124
+ ElMessage.success('更新成功')
125
+ refreshPage()
126
+ }
127
+ catch {
128
+
129
+ }
130
+ }
131
+
132
+ defineExpose({
133
+ formData,
134
+ getData,
135
+ validator: handleValidator,
136
+ updateFormData,
137
+ })
138
+ </script>
139
+
140
+ <style scoped></style>
@@ -0,0 +1,118 @@
1
+ /*
2
+ * @Author: 谢力
3
+ * @Date: 2025-07-22 15:59:06
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-09-15 17:19:21
6
+ */
7
+ import { computed, inject, reactive } from 'vue'
8
+ import type { Ref } from 'vue'
9
+ import { merge } from 'xe-utils'
10
+ import { useForm } from '@/hooks/useForm'
11
+ import { isEmpty } from '@/utils/is'
12
+ import DMBF9901 from '@/views/DM/BF/DMBF9901.vue'
13
+
14
+ export function createFormConfig() {
15
+ const { commonVxeInput, commonSelectDialog, commonVxeDatePicker, createFormRules, validator, validateField, getFormData } = useForm()
16
+
17
+ const { editable, diffable, detailInfo, diffInfo, foreignFlag } = inject('__PMPC0101__info__') as any
18
+
19
+ const { base: baseModule } = inject('__PMPC0101__main__module__') as { base: Ref }
20
+
21
+ const baseModuleFormData = computed(() => baseModule?.value?.formData)
22
+
23
+ const formData = reactive(merge({
24
+ signSite: '',
25
+ legalSite: '',
26
+ signFirstPerson: '',
27
+ signSecondPersonCode: '',
28
+ signSecondPersonName: '',
29
+ signDate: '',
30
+ }, detailInfo.value))
31
+
32
+ const baseFields = computed(() => {
33
+ return [
34
+ {
35
+ field: 'signSite',
36
+ title: '签约地',
37
+ itemRender: commonVxeInput(),
38
+ required: computed(() => !foreignFlag.value),
39
+ },
40
+ {
41
+ field: 'legalSite',
42
+ title: '诉讼地',
43
+ itemRender: commonVxeInput(),
44
+ required: computed(() => !foreignFlag.value),
45
+ },
46
+ {
47
+ field: 'signFirstPerson',
48
+ title: '对方签约人',
49
+ itemRender: commonVxeInput({
50
+ disabled: computed(() => !editable.value || baseModuleFormData.value?.textElectronicFlag === 'PAPER'),
51
+ }),
52
+ },
53
+ {
54
+ field: 'signSecondPersonName',
55
+ title: '我方签约人',
56
+ itemRender: commonSelectDialog({
57
+ disabled: computed(() => !editable.value || baseModuleFormData.value?.textElectronicFlag === 'PAPER'),
58
+ title: '我方签约人',
59
+ component: DMBF9901,
60
+ width: 800,
61
+ componentParam: {
62
+ param: {
63
+ beOrgDeptId: baseModuleFormData.value?.deptId || '',
64
+ bookId: baseModuleFormData.value?.bookId || '',
65
+ },
66
+ },
67
+ }, {
68
+ events: {
69
+ change({ currData }) {
70
+ formData.signSecondPersonCode = currData?.empCode || ''
71
+ formData.signSecondPersonName = currData?.empName || ''
72
+ },
73
+ },
74
+ }),
75
+ },
76
+ {
77
+ field: 'signDate',
78
+ title: '签约日期',
79
+ itemRender: commonVxeDatePicker({
80
+ disabled: true,
81
+ }),
82
+ },
83
+ ]
84
+ })
85
+
86
+ const getData = () => {
87
+ const data = getFormData(baseFields.value, formData)
88
+ data.signSecondPersonCode = formData.signSecondPersonCode
89
+ return data
90
+ }
91
+
92
+ const formRules = computed(() => createFormRules(baseFields.value))
93
+
94
+ const diffConfig = computed(() => {
95
+ const fields = baseFields.value.filter(item => ((item as any).visible ?? true) && !isEmpty(item.field)).map(item => item.field)
96
+ const enabled = diffable.value && Object.keys(diffInfo.value).some(field => fields.includes(field))
97
+ return {
98
+ enabled,
99
+ data: diffInfo.value,
100
+ }
101
+ })
102
+
103
+ const formConfig = reactive({
104
+ data: formData,
105
+ items: baseFields,
106
+ titleWidth: 170,
107
+ rules: formRules,
108
+ diffConfig,
109
+ })
110
+
111
+ return {
112
+ formData,
113
+ getData,
114
+ formConfig,
115
+ validator,
116
+ validateField,
117
+ }
118
+ }
@@ -0,0 +1,44 @@
1
+ <!--
2
+ * @Author: 谢力
3
+ * @Date: 2025-07-22 15:59:06
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-08-20 15:50:59
6
+ -->
7
+ <template>
8
+ <BxContainer title="签约信息" level-two>
9
+ <VxePlusForm
10
+ ref="xForm"
11
+ :disabled="!editable"
12
+ :title-asterisk="editable"
13
+ :form-options="formConfig"
14
+ />
15
+ </BxContainer>
16
+ </template>
17
+
18
+ <script setup lang="ts">
19
+ import { inject, ref } from 'vue'
20
+ import { createFormConfig } from './formConfig'
21
+
22
+ const xForm = ref<any>(null)
23
+
24
+ const { editable } = inject('__PMPC0101__info__') as any
25
+
26
+ const { formData, getData, formConfig, validator } = createFormConfig()
27
+
28
+ function handleValidator(flag: boolean = true) {
29
+ return validator(xForm, flag)
30
+ }
31
+
32
+ function updateFormData(data) {
33
+ Object.assign(formData, data)
34
+ }
35
+
36
+ defineExpose({
37
+ formData,
38
+ getData,
39
+ validator: handleValidator,
40
+ updateFormData,
41
+ })
42
+ </script>
43
+
44
+ <style scoped></style>