vue2-client 1.20.63 → 1.20.65

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.
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="CopilotChatHistory">
4
+ <option name="conversations">
5
+ <list>
6
+ <Conversation>
7
+ <option name="createTime" value="1751936027311" />
8
+ <option name="id" value="0197e7864aaf7383abd8fcc579d97f0e" />
9
+ <option name="title" value="新对话 2025年7月08日 08:53:47" />
10
+ <option name="updateTime" value="1751936027311" />
11
+ </Conversation>
12
+ <Conversation>
13
+ <option name="createTime" value="1751504039181" />
14
+ <option name="id" value="0197cdc6ad0d74de92481b3b338ef77d" />
15
+ <option name="title" value="新对话 2025年7月03日 08:53:59" />
16
+ <option name="updateTime" value="1751504039181" />
17
+ </Conversation>
18
+ <Conversation>
19
+ <option name="createTime" value="1751417570211" />
20
+ <option name="id" value="0197c89f43a37f5aa39c941d198784ba" />
21
+ <option name="title" value="新对话 2025年7月02日 08:52:50" />
22
+ <option name="updateTime" value="1751417570211" />
23
+ </Conversation>
24
+ <Conversation>
25
+ <option name="createTime" value="1750899191763" />
26
+ <option name="id" value="0197a9b96fd37d9e8fb5269c9fc6f3ec" />
27
+ <option name="title" value="新对话 2025年6月26日 08:53:11" />
28
+ <option name="updateTime" value="1750899191763" />
29
+ </Conversation>
30
+ <Conversation>
31
+ <option name="createTime" value="1750380684498" />
32
+ <option name="id" value="01978ad1a4d27fcbab7810685ef316e7" />
33
+ <option name="title" value="新对话 2025年6月20日 08:51:24" />
34
+ <option name="updateTime" value="1750380684498" />
35
+ </Conversation>
36
+ </list>
37
+ </option>
38
+ </component>
39
+ </project>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="com.codeverse.userSettings.MarscodeWorkspaceAppSettingsState">
4
+ <option name="chatAppRouterInfo" value="builder/691d37a10c28806eaf3d4104" />
5
+ <option name="ckgOperationStatus" value="SUCCESS" />
6
+ <option name="progress" value="1.0" />
7
+ </component>
8
+ </project>
@@ -1,8 +1,11 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="JAVA_MODULE" version="4">
3
- <component name="NewModuleRootManager" inherit-compiler-output="true">
4
- <exclude-output />
5
- <content url="file://$MODULE_DIR$" />
2
+ <module type="WEB_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$">
5
+ <excludeFolder url="file://$MODULE_DIR$/.tmp" />
6
+ <excludeFolder url="file://$MODULE_DIR$/temp" />
7
+ <excludeFolder url="file://$MODULE_DIR$/tmp" />
8
+ </content>
6
9
  <orderEntry type="inheritedJdk" />
7
10
  <orderEntry type="sourceFolder" forTests="false" />
8
11
  </component>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="MigrateChatHistoryStorage">
4
+ <option name="migratedHistories">
5
+ <list>
6
+ <option value="361d659190747ec3ba09aff10517e3b0" />
7
+ </list>
8
+ </option>
9
+ </component>
10
+ </project>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.20.63",
3
+ "version": "1.20.65",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -25,7 +25,7 @@
25
25
  </a-upload>
26
26
  </template>
27
27
  <a-upload-dragger
28
- v-else-if="model.type === 'file'"
28
+ v-else-if="model.type === 'file' || model.type === 'signature'"
29
29
  :accept="model.accept?.join('')"
30
30
  :customRequest="uploadFiles"
31
31
  :file-list="uploadedFileList"
@@ -156,6 +156,21 @@ export default {
156
156
  readOnly: {
157
157
  type: Boolean,
158
158
  default: false
159
+ },
160
+ // 兼容图片(新的image类型的表单项的字段名可自定义了,不再固定为Images,该属性为传入的新的图片列表)
161
+ // 如果字段名依旧为Images,则不需要该属性,而是使用images属性(兼容旧版的代码)
162
+ compatibleImages: {
163
+ type: Array,
164
+ default: () => {
165
+ return []
166
+ }
167
+ },
168
+ // 兼容签名(PC端没有签名功能,只做展示,归属到文件上传中,该属性为传入的签名列表)
169
+ signs: {
170
+ type: Array,
171
+ default: () => {
172
+ return []
173
+ }
159
174
  }
160
175
  },
161
176
  computed: {
@@ -163,7 +178,22 @@ export default {
163
178
  ...mapState('setting', ['compatible'])
164
179
  },
165
180
  created () {
166
- const list = this.model.type === 'file' ? [...this.files] : [...this.images]
181
+ // const list = this.model.type === 'file' ? [...this.files] : [...this.images]
182
+ let list = []
183
+ if (this.model.type === 'file') {
184
+ list = [...this.files]
185
+ } else if (this.model.type === 'signature') {
186
+ list = [...this.signs]
187
+ } else {
188
+ if (this.model.type === 'image' && this.model.model === 'Images') {
189
+ list = [...this.images]
190
+ } else if (this.model.type === 'image' && this.model.model !== 'Images') {
191
+ list = [...this.compatibleImages]
192
+ } else {
193
+ list = []
194
+ }
195
+ }
196
+
167
197
  if (this.model.useType) {
168
198
  // {uid,url,name,f_use_type?,f_form_type?}
169
199
  this.uploadedFileList = list.filter(item => item.f_use_type === this.model.useType)
@@ -29,6 +29,7 @@
29
29
  :disabled="itemDisabled(item.formItem)"
30
30
  :read-only="readonly(item.formItem)"
31
31
  :files="files"
32
+ :signs="signs"
32
33
  :form="form"
33
34
  :images="images"
34
35
  :service-name="serviceName"
@@ -83,6 +84,7 @@
83
84
  :disabled="itemDisabled(item)"
84
85
  :read-only="readonly(item)"
85
86
  :files="files"
87
+ :signs="signs"
86
88
  v-bind="formItemLayoutGen"
87
89
  :style="layout === 'inline' ? { marginTop: '5px' } : undefined"
88
90
  :form="form"
@@ -111,6 +113,7 @@
111
113
  :disabled="itemDisabled(item)"
112
114
  :readonly="readonly(item)"
113
115
  :files="files"
116
+ :signs="signs"
114
117
  v-bind="formItemLayoutGen"
115
118
  :style="layout === 'inline' ? { marginTop: '5px' } : undefined"
116
119
  :form="form[groupItem.model]"
@@ -145,6 +148,7 @@
145
148
  :disabled="itemDisabled(formItem)"
146
149
  :readonly="readonly(formItem)"
147
150
  :files="files"
151
+ :signs="signs"
148
152
  :enablePopupToBody="enablePopupToBody"
149
153
  v-bind="formItemLayoutGen"
150
154
  :style="layout === 'inline' ? { marginTop: '5px' } : undefined"
@@ -260,6 +264,8 @@ export default {
260
264
  // 修改有文件的表单时使用
261
265
  files: [],
262
266
  images: [],
267
+ // 签名
268
+ signs: [],
263
269
  // 校验
264
270
  rules: {},
265
271
  // 调用logic获取数据源的追加参数
@@ -621,6 +627,9 @@ export default {
621
627
  if (modifyModelData && modifyModelData.images) {
622
628
  this.images = modifyModelData.images
623
629
  }
630
+ if (modifyModelData && modifyModelData.signs) {
631
+ this.signs = modifyModelData.signs
632
+ }
624
633
  this.loaded = true
625
634
  this._emitConfigEnd()
626
635
  },
@@ -380,7 +380,7 @@
380
380
  </x-form-col>
381
381
  <!-- 文件上传 -->
382
382
  <x-form-col
383
- v-else-if="(attr.type === 'file' || attr.type === 'image') && show"
383
+ v-else-if="(attr.type === 'file' || attr.type === 'image' || attr.type === 'signature') && show"
384
384
  :labelCol="labelCol"
385
385
 
386
386
  :mode="mode"
@@ -396,8 +396,10 @@
396
396
  >
397
397
  <upload
398
398
  :files="files"
399
+ :signs="signs"
399
400
  :read-only="readOnly"
400
401
  :images="images"
402
+ :compatible-images="form[attr.model]"
401
403
  :model="attr"
402
404
  v-bind="attr"
403
405
  :service-name="serviceName"
@@ -765,6 +767,12 @@ export default {
765
767
  return []
766
768
  }
767
769
  },
770
+ signs: {
771
+ type: Array,
772
+ default: () => {
773
+ return []
774
+ }
775
+ },
768
776
  images: {
769
777
  type: Array,
770
778
  default: () => {
@@ -88,7 +88,7 @@ export default {
88
88
  if (this.mode === '新增/修改') {
89
89
  if (
90
90
  ['horizontal', 'vertical'].includes(this.layout) ||
91
- ['textarea', 'file', 'image'].includes(this.attrType)
91
+ ['textarea', 'file', 'image','signature'].includes(this.attrType)
92
92
  ) {
93
93
  // 新增修改表单 horizontal 模式下默认为一行
94
94
  return {
@@ -2,31 +2,51 @@
2
2
  <a-card :bordered="false">
3
3
  <x-form-table
4
4
  title="示例表单"
5
- :queryParamsName="queryParamsName"
5
+ queryParamsName="scanCodeAndNFCRUD"
6
6
  :fixedAddForm="fixedAddForm"
7
7
  :externalSelectedRowKeys="selectedKeys"
8
+ :defaultPageSize="100"
9
+ :pageSizeArray="['100','200']"
8
10
  @action="action"
9
11
  @selectRow="selectRow"
10
12
  @columnClick="columnClick"
11
13
  @ceshi="ceshi"
12
- @rowDblClick="rowDblClick"
13
- serviceName="af-revenue"
14
+ @startService="startService"
15
+ serviceName="af-safecheck"
14
16
  ref="xFormTable"
15
17
  :reserveSpaceForButtons="true"
16
- @addFormSubmit="addFormSubmit"
17
- ></x-form-table>
18
+ >
19
+ </x-form-table>
20
+ <a-modal
21
+ v-model="formModalVisible"
22
+ title="工单回访"
23
+ :zIndex="1002"
24
+ width="50vw"
25
+ :destroy-on-close="true"
26
+ @cancel="formModalVisible = false"
27
+ @ok="ok"
28
+ >
29
+ <x-add-native-form
30
+ ref="xForm"
31
+ />
32
+ </a-modal>
33
+ <button @click="backDealData">提交</button>
18
34
  </a-card>
19
35
  </template>
20
36
 
21
37
  <script>
22
38
  import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable.vue'
39
+ import XAddNativeForm from '@vue2-client/base-client/components/common/XAddNativeForm/XAddNativeForm.vue'
23
40
  import { microDispatch } from '@vue2-client/utils/microAppUtils'
41
+ import {getConfigByNameAsync, runLogic} from '@vue2-client/services/api/common'
42
+
24
43
  export default {
25
44
  name: 'Demo',
26
45
  components: {
27
- XFormTable
46
+ XFormTable,
47
+ XAddNativeForm,
28
48
  },
29
- data() {
49
+ data () {
30
50
  return {
31
51
  // 查询配置文件名
32
52
  queryParamsName: 'ceshiCRUD',
@@ -42,26 +62,32 @@ export default {
42
62
  selectedKeys: [],
43
63
  selected: {
44
64
  keys: [],
45
- rows: []
46
- }
65
+ rows: [],
66
+ },
67
+ formModalVisible: false,
47
68
  }
48
69
  },
49
-
50
70
  methods: {
51
- handleCustomQuery() {
52
- this.$refs.xFormTable.queryTable({
53
- uf_f_alias: 'XianFeng',
54
- uf_f_card_id: '10500030'
71
+ backDealData () {
72
+ this.$refs.xFormTable.$refs.xForm.backDealData().then(data => {
73
+ console.log('backDealData', data)
74
+ console.log('selected', this.$refs.xFormTable.$refs.xForm?.form)
55
75
  })
56
76
  },
57
- rowDblClick(record) {
58
- console.log('rowDblClick', record)
59
- },
60
77
  // input框 行編輯參數傳遞
61
- ceshi(...args) {
78
+ ceshi (...args) {
62
79
  // attr, value, currentRecord, currentIndex, nextRecord, nextIndex
63
- const [attr, value, currentRecord, currentIndex, nextRecord, nextIndex] = args
64
- console.log('ceshi', attr, value, currentRecord, currentIndex, nextRecord, nextIndex)
80
+ const [attr, value, currentRecord, currentIndex, nextRecord, nextIndex] =
81
+ args
82
+ console.log(
83
+ 'ceshi',
84
+ attr,
85
+ value,
86
+ currentRecord,
87
+ currentIndex,
88
+ nextRecord,
89
+ nextIndex
90
+ )
65
91
  // 示例:当按下 Enter 键且有下一行时,跳转到下一行的同一列
66
92
  // 可以在这里执行业务逻辑(例如:保存数据)
67
93
  console.log('当前行:', currentIndex, '下一行:', nextIndex)
@@ -72,45 +98,115 @@ export default {
72
98
  // 跳转到下一行的同一列
73
99
  this.$refs.xFormTable.$refs.xTable.focusInput(nextIndex, attr.model)
74
100
  },
75
- test() {
101
+ test () {
76
102
  this.$refs.xFormTable.setTableData([])
77
103
  },
78
- defaultF() {
104
+ defaultF () {
79
105
  this.$refs.xFormTable.setTableSize('default')
80
106
  },
81
- middleF() {
107
+ middleF () {
82
108
  this.$refs.xFormTable.setTableSize('middle')
83
109
  },
84
- smallF() {
110
+ smallF () {
85
111
  this.$refs.xFormTable.setTableSize('small')
86
112
  },
87
- columnClick(key, value, record) {
113
+ columnClick (key, value, record) {
88
114
  microDispatch({
89
115
  type: 'v3route',
90
116
  path: '/bingliguanli/dianzibingliluru',
91
- props: { selected: arguments[0].his_f_admission_id }
117
+ props: { selected: arguments[0].his_f_admission_id },
92
118
  })
93
119
  },
94
- action(record, id, actionType) {
95
- this.detailVisible = true
96
- console.log('触发了详情操作', record, id, actionType)
120
+ startService (record, id, actionType) {
121
+ getConfigByNameAsync('测试Form', 'af-safecheck').then(config => {
122
+ this.formModalVisible = true
123
+ this.$nextTick(
124
+ () => {
125
+ this.formModalVisible = true
126
+ this.$refs.xForm.init({
127
+ formItems: config.formJson,
128
+ title: '工单回访',
129
+ businessType: '只读',
130
+ ...config,
131
+ fixedAddForm: {
132
+ Images:[
133
+ {
134
+ 'uid': 1850,
135
+ 'url': '/resource/af-system/images/3de85050493f4404ad3d0a00d53bca12.png',
136
+ 'name': '3de85050493f4404ad3d0a00d53bca12.png'
137
+ }
138
+ ],
139
+ f_image1:[
140
+ {
141
+ 'uid': 1850,
142
+ 'url': '/resource/af-system/images/3de85050493f4404ad3d0a00d53bca12.png',
143
+ 'name': '3de85050493f4404ad3d0a00d53bca12.png'
144
+ }
145
+ ],
146
+ signs: [
147
+ {
148
+ 'uid': 1850,
149
+ 'url': '/resource/af-system/images/3de85050493f4404ad3d0a00d53bca12.png',
150
+ 'name': '3de85050493f4404ad3d0a00d53bca12.png'
151
+ }
152
+ ],
153
+ },
154
+ modifyModelData: {
155
+ data: {
156
+ Images:[
157
+ {
158
+ 'uid': 1850,
159
+ 'url': '/resource/af-system/images/3de85050493f4404ad3d0a00d53bca12.png',
160
+ 'name': '3de85050493f4404ad3d0a00d53bca12.png'
161
+ }
162
+ ],
163
+ f_image1:[
164
+ {
165
+ 'uid': 1850,
166
+ 'url': '/resource/af-system/images/3de85050493f4404ad3d0a00d53bca12.png',
167
+ 'name': '3de85050493f4404ad3d0a00d53bca12.png'
168
+ }
169
+ ],
170
+ f_image2: [
171
+ {
172
+ 'uid': 1850,
173
+ 'url': '/resource/af-system/images/3de85050493f4404ad3d0a00d53bca12.png',
174
+ 'name': '3de85050493f4404ad3d0a00d53bca12.png'
175
+ }
176
+ ],
177
+ },
178
+ signs: [
179
+ {
180
+ 'uid': 1850,
181
+ 'url': '/resource/af-system/images/3de85050493f4404ad3d0a00d53bca12.png',
182
+ 'name': '3de85050493f4404ad3d0a00d53bca12.png'
183
+ }
184
+ ],
185
+ },
186
+ })
187
+ })
188
+ })
189
+ // this.detailVisible = true
190
+ // console.log('触发了详情操作', record, id, actionType)
191
+ },
192
+ async ok () {
193
+ const res = await this.$refs.xForm.asyncSubmit()
194
+ await runLogic('ceshwewei', res.realForm)
97
195
  },
98
- onClose() {
196
+ onClose () {
99
197
  this.detailVisible = false
100
198
  // 关闭详情之后重新查询表单
101
199
  this.$refs.xFormTable.refreshTable(true)
102
200
  },
103
- selectRow(selectedRowKeys, selectedRows) {
104
- console.log('selectRow', selectedRowKeys, selectedRows)
201
+ selectRow (selectedRowKeys, selectedRows) {
105
202
  this.selected = {
106
203
  keys: selectedRowKeys,
107
- rows: selectedRows
204
+ rows: selectedRows,
108
205
  }
206
+ console.log('selectedDemo', this.selected)
109
207
  },
110
- addFormSubmit(params, callback){
111
- callback()
112
- }
113
- }
208
+ },
209
+ computed: {},
114
210
  }
115
211
  </script>
116
212
 
@@ -0,0 +1,127 @@
1
+ <template>
2
+ <a-card :bordered="false">
3
+ <a-tabs default-active-key="1" @change="changeTab">
4
+ <a-tab-pane key="1" tab="待办">
5
+ <x-form-table
6
+ title="站点工单(待办)"
7
+ ref="xFormTable"
8
+ queryParamsName="teleProcessCRUD"
9
+ :fixed-query-form="{
10
+ wo_f_department_id: currUser.depids,
11
+ }"
12
+ serviceName="af-telephone"
13
+ @toDeal="toDetail"
14
+ @updateInfo="updateInfo"
15
+ @transfer="transfer"
16
+ @toFinish="toFinish"
17
+ >
18
+ </x-form-table>
19
+ </a-tab-pane>
20
+ <a-tab-pane key="2" tab="已办">
21
+ <x-form-table
22
+ title="站点工单(已办)"
23
+ ref="xFormTableDone"
24
+ queryParamsName="teleProcessDoneCRUD"
25
+ :fixed-query-form="{
26
+ wo_f_department_id: currUser.depids,
27
+ }"
28
+ serviceName="af-telephone"
29
+ @action="toView"
30
+ @reminder="toReminder"
31
+ >
32
+ </x-form-table>
33
+ </a-tab-pane>
34
+ </a-tabs>
35
+ <WorkflowDetail
36
+ ref="workFlow"
37
+ @preClick="preClick"
38
+ @success="success"
39
+ @nextClick="nextClick"
40
+ @x-form-item-emit-func="handleFormItemEvent"
41
+ >
42
+ </WorkflowDetail>
43
+ </a-card>
44
+ </template>
45
+
46
+ <script>
47
+ import WorkflowDetail from '@vue2-client/pages/WorkflowDetail/WorkflowDetail.vue'
48
+ import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
49
+ import { mapState } from 'vuex'
50
+ import XAddNativeForm from '@vue2-client/base-client/components/common/XAddNativeForm/XAddNativeForm.vue'
51
+
52
+ export default {
53
+ name: 'Telephone',
54
+ components: {
55
+ XFormTable,
56
+ WorkflowDetail,
57
+ XAddNativeForm
58
+ },
59
+ // 透传给子组件的方法(目前XFormTable接了)
60
+ provide () {
61
+ return {
62
+ generalFunction: {}
63
+ }
64
+ },
65
+ data () {
66
+ return {
67
+ // 当前工单id
68
+ currentWorkOrderId: '',
69
+ // 提交加载动画
70
+ confirmLoading: false,
71
+ chargeVisible: false,
72
+ // 环节人员信息
73
+ chargePerson: {},
74
+ chargePersonOptions: [],
75
+ transferData: {
76
+ optionsValue: '',
77
+ remark: ''
78
+ },
79
+ record: {},
80
+ define: {},
81
+ // 是否展示催单结案弹窗
82
+ showReminder: false,
83
+ // 弹窗类型 催单/ 结案
84
+ modelType: ''
85
+ }
86
+ },
87
+ computed: {
88
+ ...mapState('account', { currUser: 'user' }),
89
+ },
90
+ methods: {
91
+ changeTab (key) {
92
+ console.log('切换tab', key)
93
+ if (key === '1') {
94
+ this.$refs.xFormTable.refreshTable(true)
95
+ } else if (key === '2') {
96
+ this.$refs.xFormTableDone.refreshTable(true)
97
+ }
98
+ },
99
+ success () {
100
+ console.log('完工')
101
+ },
102
+ toDetail (record) {
103
+ // 修改第一步的工单
104
+ if (record.ws_f_step_id === 1 && record.w_f_state === 0) {
105
+ console.log('进入工单详情')
106
+ if (record.w_f_workflow_define_name === '报修单处理流程') {
107
+ this.$refs.dealOrUpdate.dealOrUpdate(record, '处理工单')
108
+ } else if (record.w_f_workflow_define_name === '投诉单处理流程') {
109
+ this.$refs.dealComplaint.dealComplaintOrder(record)
110
+ } else if (record.w_f_workflow_define_name === '咨询单处理流程') {
111
+ this.$refs.dealConsultation.dealConsultationOrder(record)
112
+ } else {
113
+ this.$message.warn('未知流程类型')
114
+ }
115
+ } else {
116
+ // 记录流程节点名称
117
+ this.currentWorkOrderId = record.wo_id
118
+ // 进入流程详情
119
+ this.$refs.workFlow.init({
120
+ workflowId: record.wo_f_workflow_id,
121
+ stepId: record.ws_f_step_id
122
+ })
123
+ }
124
+ },
125
+ }
126
+ }
127
+ </script>