n20-common-lib 2.9.13 → 2.9.14

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 (130) hide show
  1. package/nstc-g6/components/NstcCharts/NstcCharts.vue +16 -8
  2. package/package.json +8 -5
  3. package/src/assets/css/approve-card.scss +1 -1
  4. package/src/assets/css/date-quarter.scss +8 -0
  5. package/src/assets/css/expandable-pane.scss +7 -0
  6. package/src/assets/css/file-upload-table.scss +2 -3
  7. package/src/assets/css/font-icon.scss +3 -1
  8. package/src/assets/css/message.scss +6 -6
  9. package/src/assets/css/normalize.scss +4 -1
  10. package/src/assets/css/table.scss +16 -11
  11. package/src/assets/iconFont/SIMSUN.ttf +0 -0
  12. package/src/assets/iconFont/font.css +4 -0
  13. package/src/components/AIButton/index.vue +101 -0
  14. package/src/components/AdvancedFilter/formItemRender.vue +7 -4
  15. package/src/components/AdvancedFilter/index.vue +6 -7
  16. package/src/components/Anchor/index.vue +1 -0
  17. package/src/components/ApprovalButtons/index.vue +404 -82
  18. package/src/components/ApprovalButtons/indexApp.vue +1102 -0
  19. package/src/components/ApprovalButtons/selectSpr.vue +128 -0
  20. package/src/components/ApprovalButtons/setCarboncopyProp.vue +1 -1
  21. package/src/components/ApprovalButtons/setRejectToProp.vue +45 -5
  22. package/src/components/ApprovalButtons/showAppOpi.vue +265 -8
  23. package/src/components/ApprovalButtons/showOtherAttrNew.vue +161 -0
  24. package/src/components/ApprovalCard/index.vue +190 -44
  25. package/src/components/ApprovalCard/indexApp.vue +592 -0
  26. package/src/components/ApprovalRecord/approvalImgPro/child.vue +1 -1
  27. package/src/components/ApprovalRecord/approvalImgPro/index.vue +42 -5
  28. package/src/components/ApprovalRecord/index.vue +23 -6
  29. package/src/components/ApprovalRecord/indexApp.vue +79 -0
  30. package/src/components/AttachmentPass/index.vue +286 -0
  31. package/src/components/Button/button-group.vue +3 -1
  32. package/src/components/CascaderArea/index.vue +5 -6
  33. package/src/components/DatePicker/por.vue +31 -1
  34. package/src/components/DateSelect/quarterDatePicker.vue +23 -1
  35. package/src/components/Descriptions/index.vue +7 -3
  36. package/src/components/Dialog/index.vue +4 -0
  37. package/src/components/Diff/index.vue +4 -2
  38. package/src/components/DynamicField/DynamicField.vue +29 -6
  39. package/src/components/DynamicField/DynamicFieldMixin.js +13 -5
  40. package/src/components/DynamicField/DynamicFieldOptions.vue +135 -62
  41. package/src/components/DynamicField/DynamicTable.vue +11 -1
  42. package/src/components/DynamicField/contentPop.vue +110 -0
  43. package/src/components/DynamicField/tableList.vue +5 -1
  44. package/src/components/DynamicField/tableView.vue +143 -0
  45. package/src/components/ECharts/index.vue +15 -9
  46. package/src/components/Expandable/main.vue +17 -2
  47. package/src/components/FileImport/index.vue +4 -5
  48. package/src/components/FileUploadTable/FileUploadTableV3.vue +937 -0
  49. package/src/components/FileUploadTable/aiCheckDialog.vue +139 -0
  50. package/src/components/FileUploadTable/index.vue +251 -33
  51. package/src/components/FileUploadTable/jytg.svg +6 -0
  52. package/src/components/FileUploadTable/wsc.svg +3 -0
  53. package/src/components/FileUploadTable/ysc.svg +3 -0
  54. package/src/components/HandlingAdvice/index.vue +191 -0
  55. package/src/components/InputAccount/index.vue +105 -0
  56. package/src/components/InputNumber/index.vue +16 -4
  57. package/src/components/InputNumber/numberRange.vue +14 -0
  58. package/src/components/InputSearch/index.vue +8 -0
  59. package/src/components/Layout/HeaderWrap/changePwd.vue +50 -23
  60. package/src/components/Layout/HeaderWrap/index.vue +2 -2
  61. package/src/components/Layout/HeaderWrap/indexN.vue +296 -119
  62. package/src/components/Layout/SubContent/index.vue +45 -14
  63. package/src/components/Layout/indexN.vue +26 -5
  64. package/src/components/LoginTemporary/form.vue +126 -34
  65. package/src/components/LoginTemporary/index.vue +14 -3
  66. package/src/components/LoginTemporary/indexN.vue +35 -13
  67. package/src/components/Preview/index.vue +199 -0
  68. package/src/components/SelectDatePickerPro/customDatePicker.vue +7 -0
  69. package/src/components/SelectDatePickerPro/halfYearPicker.vue +165 -0
  70. package/src/components/SelectDatePickerPro/index.vue +44 -4
  71. package/src/components/SelectDatePickerPro/quarterDatePicker.vue +32 -10
  72. package/src/components/SelectTree/index.vue +10 -4
  73. package/src/components/SelectTree/pro.vue +3 -0
  74. package/src/components/ShowColumn/index copy 2.vue +545 -0
  75. package/src/components/ShowColumn/index copy.vue +566 -0
  76. package/src/components/ShowColumn/index.vue +11 -7
  77. package/src/components/Statis/statisItem.vue +8 -7
  78. package/src/components/Table/filters.js +13 -0
  79. package/src/components/Table/index.vue +4 -4
  80. package/src/components/TablePro/filterContent.vue +18 -8
  81. package/src/components/TablePro/index.js +41 -1
  82. package/src/components/TablePro/index.vue +117 -6
  83. package/src/components/TableProOperateColumn/OperateBtns.vue +11 -53
  84. package/src/components/TableProOperateColumn/OperateBtns_copy.vue +141 -0
  85. package/src/components/TableProOperateColumn/childrenOperateBtn.vue +108 -0
  86. package/src/components/TableProOperateColumn/index.vue +3 -6
  87. package/src/components/TableSetSize/index.vue +1 -1
  88. package/src/components/Tree/index.vue +21 -5
  89. package/src/components/Upload/index.vue +25 -10
  90. package/src/components/Upload/uploadMsg.vue +30 -25
  91. package/src/components/operatingStatus/index.vue +3 -4
  92. package/src/directives/VTitle/index.js +15 -5
  93. package/src/directives/watermark/index.js +140 -56
  94. package/src/i18n.json +146 -18
  95. package/src/index.js +31 -3
  96. package/src/plugins/Sign/CaMap.js +47 -8
  97. package/src/plugins/Sign/Itrus/index.js +1 -1
  98. package/src/plugins/Sign/Itrus/sign_3720.js +2 -1
  99. package/src/plugins/Sign/NetSM3/index.js +20 -11
  100. package/src/plugins/Sign/NetV3/index.js +163 -22
  101. package/src/plugins/Sign/SkfSign/index.js +55 -52
  102. package/src/plugins/Sign/bjca/index.js +229 -9
  103. package/src/plugins/Sign/hnca/index.js +5064 -0
  104. package/src/plugins/Sign/index.js +155 -103
  105. package/src/plugins/Sign/kySign/base64.js +160 -0
  106. package/src/plugins/Sign/kySign/hex.js +92 -0
  107. package/src/plugins/Sign/kySign/index.js +186 -0
  108. package/src/plugins/Sign/kySign/skf.js +937 -0
  109. package/src/plugins/Sign/kySign/test.html +463 -0
  110. package/src/plugins/Sign/sdca/index.js +73 -0
  111. package/src/plugins/Sign/sign.js +72 -52
  112. package/src/plugins/Sign/signV3/InfosecNetSignCNGAgent.min.js +1 -0
  113. package/src/plugins/Sign/signV3/sign.js +187 -0
  114. package/src/plugins/Sign/sign_back.js +172 -0
  115. package/src/utils/accountFormat.js +7 -0
  116. package/src/utils/asyncGetRelaNos.js +79 -46
  117. package/src/utils/axios.js +3 -5
  118. package/src/utils/i18n/index.js +1 -1
  119. package/src/utils/importGlobal.js +23 -12
  120. package/style/fonts/SIMSUN.5e0c362c.ttf +0 -0
  121. package/style/index.css +2 -2
  122. package/theme/blue.css +2 -2
  123. package/theme/cctcRed.css +2 -2
  124. package/theme/fonts/SIMSUN.5e0c362c.ttf +0 -0
  125. package/theme/green.css +2 -2
  126. package/theme/lightBlue.css +2 -2
  127. package/theme/orange.css +2 -2
  128. package/theme/purple.css +2 -2
  129. package/theme/red.css +2 -2
  130. package/theme/yellow.css +2 -2
@@ -8,6 +8,10 @@ export default {
8
8
  type: Boolean,
9
9
  default: false
10
10
  },
11
+ destroyOnClose: {
12
+ type: Boolean,
13
+ default: true
14
+ },
11
15
  appendToBody: {
12
16
  type: Boolean,
13
17
  default: true
@@ -1,6 +1,8 @@
1
1
  <template>
2
- <div v-if="isEqual">
3
- {{ value }}
2
+ <div v-if="isEqual" class="truncate">
3
+ <el-tooltip v-if="tooltip" :content="value" placement="top">
4
+ <span>{{ value }}</span>
5
+ </el-tooltip>
4
6
  </div>
5
7
  <div v-else class="n20-descriptions">
6
8
  <div class="m-b-ss">
@@ -14,6 +14,9 @@
14
14
  <span v-if="item.tabNamehtml" v-html="item.tabNamehtml"></span>
15
15
  <span v-else>{{ item.tabName }}</span>
16
16
  </template>
17
+ <template slot="tips">
18
+ <slot :name="`tips_${index}`"></slot>
19
+ </template>
17
20
  <template v-if="item.slotName">
18
21
  <slot :name="item.slotName" :list="item.list"></slot>
19
22
  </template>
@@ -79,6 +82,7 @@
79
82
  :max="formItem.max || 9999999999.99"
80
83
  :min="formItem.min || formItem.min === 0 ? formItem.min : 0"
81
84
  :d-num="formItem.dNum || formItem.dNum === 0 ? formItem.dNum : 2"
85
+ :type="formItem.numberType || 'money'"
82
86
  @change="(value) => $emit('valueChange', value, key)"
83
87
  />
84
88
  </template>
@@ -127,7 +131,9 @@
127
131
  v-model="value[key]"
128
132
  v-title
129
133
  class="input-w"
130
- :placeholder="formItem.placeholder || (formItem.filterable ? '请输入关键词' : formItem.label)"
134
+ :placeholder="
135
+ formItem.placeholder || (formItem.filterable ? $lc('请输入关键词') : formItem.label)
136
+ "
131
137
  :remote-method="
132
138
  (query) => formItem.remoteMethod && formItem.remoteMethod(query, { ...$attrs, item, value })
133
139
  "
@@ -164,7 +170,9 @@
164
170
  <el-select
165
171
  v-model="value[key]"
166
172
  class="input-w"
167
- :placeholder="formItem.placeholder || (formItem.filterable ? '请输入关键词' : formItem.label)"
173
+ :placeholder="
174
+ formItem.placeholder || (formItem.filterable ? $lc('请输入关键词') : formItem.label)
175
+ "
168
176
  :remote-method="
169
177
  (query) => formItem.remoteMethod && formItem.remoteMethod(query, { ...$attrs, item, value })
170
178
  "
@@ -204,7 +212,7 @@
204
212
  class="input-w"
205
213
  type="date"
206
214
  value-format="yyyy-MM-dd"
207
- placeholder="请选择日期"
215
+ :placeholder="$lc('请选择日期')"
208
216
  :clearable="formItem.clearable === false ? false : true"
209
217
  @change="(value) => $emit('valueChange', value, key)"
210
218
  />
@@ -228,9 +236,13 @@
228
236
  v-model="value[key]"
229
237
  v-title
230
238
  type="textarea"
231
- placeholder="请输入内容"
239
+ :placeholder="$lc('请输入内容')"
232
240
  :maxlength="formItem.maxlength || '150'"
233
- show-word-limit
241
+ :show-word-limit="
242
+ formItem.showWordLimit === null || formItem.showWordLimit === undefined
243
+ ? true
244
+ : formItem.showWordLimit
245
+ "
234
246
  v-bind="{ rows: 4, ...formItem }"
235
247
  :clearable="formItem.clearable === false ? false : true"
236
248
  @change="(value) => $emit('valueChange', value, key)"
@@ -255,7 +267,7 @@
255
267
  filterable
256
268
  remote
257
269
  reserve-keyword
258
- placeholder="请输入"
270
+ :placeholder="$lc('请输入')"
259
271
  v-bind="formItem"
260
272
  :remote-method="
261
273
  (query) => formItem.remoteMethod && formItem.remoteMethod(query, { ...$attrs, item, value })
@@ -323,6 +335,12 @@
323
335
  </template>
324
336
 
325
337
  <script>
338
+ import clAnchorItem from '../Anchor/AnchorItem.vue'
339
+ import clInputNumber from '../InputNumber/index.vue'
340
+ import clInputNumberRange from '../InputNumber/numberRange.vue'
341
+ import clDatePicker from '../DatePicker/index.vue'
342
+ import clDatePickerPor from '../DatePicker/por.vue'
343
+ import clInputSearch from '../InputSearch/index.vue'
326
344
  /*
327
345
  1.初始化值 是否能出发change事件
328
346
  2.当前表单change 触发其他表单的修改(未在自身作用域)
@@ -330,6 +348,7 @@
330
348
  */
331
349
  export default {
332
350
  name: 'DynamicField',
351
+ components: { clInputSearch, clDatePickerPor, clDatePicker, clAnchorItem, clInputNumber, clInputNumberRange },
333
352
  filters: {
334
353
  formatValue(value, row) {
335
354
  switch (row.type) {
@@ -418,6 +437,10 @@ export default {
418
437
  validate(callback) {
419
438
  return this.$refs.form.validate(callback)
420
439
  },
440
+ // 表单单项校验
441
+ validateField(field, callback) {
442
+ return this.$refs.form.validateField(field, callback)
443
+ },
421
444
  // 表单重置方法
422
445
  resetFields() {
423
446
  return this.$refs.form.resetFields()
@@ -1,3 +1,4 @@
1
+ import { $lc } from '../../utils/i18n/index.js'
1
2
  const obj = {
2
3
  mounted() {
3
4
  this.setRules()
@@ -29,14 +30,20 @@ const obj = {
29
30
  if (item.list[key].requiredMessage) {
30
31
  msg = item.list[key].requiredMessage
31
32
  } else if (['select', 'date-picker', 'searchSelect', 'daterange'].includes(item.list[key].type)) {
32
- msg = '请选择' + item.list[key].label
33
+ msg = $lc('请选择') + item.list[key].label
33
34
  } else {
34
- msg = '请输入' + item.list[key].label
35
+ msg = $lc('请输入') + item.list[key].label
35
36
  }
36
- rules[key] = [{ required: item.list[key].requiredFlag, message: msg, trigger: ['submit', 'change'] }]
37
+ rules[key] = [
38
+ {
39
+ required: item.list[key].requiredFlag && item.list[key].type,
40
+ message: msg,
41
+ trigger: ['submit', 'change']
42
+ }
43
+ ]
37
44
  }
38
45
  })
39
- this.rules = { ...this.staticRules, ...rules }
46
+ this.rules = { ...rules, ...this.staticRules }
40
47
  this.$nextTick(() => {
41
48
  this.$refs.form && this.$refs.form.clearValidate()
42
49
  })
@@ -78,7 +85,8 @@ const obj = {
78
85
  type: item2.fieldType,
79
86
  label: item2.fieldName,
80
87
  requiredFlag: item2.isMust,
81
- remark: item2.remark
88
+ remark: item2.remark,
89
+ options: item2.fieldValue
82
90
  }
83
91
  }
84
92
  })
@@ -5,8 +5,28 @@
5
5
  <el-button v-if="type === 1" icon="n20-icon-shuaxin" plain onlyicon size="mini" @click="getData" />
6
6
  <el-button v-if="type === 1" size="mini" type="primary" @click="option('新增')">新增</el-button>
7
7
  <el-button v-if="type === 1" size="mini" type="danger" plain @click="option('删除')">删除</el-button>
8
+ <el-button v-if="hasTransform" size="mini" plain onlyicon @click="option('下载Json配置')"
9
+ >下载Json配置</el-button
10
+ >
8
11
  <!-- <el-button v-if="type === 1" size="mini" plain @click="option('导出')">导出</el-button> -->
9
- <el-button size="mini" icon="n20-icon-caidan" plain onlyicon @click="option('转换')" />
12
+ <el-button
13
+ v-if="hasTransform"
14
+ v-title="'转换'"
15
+ size="mini"
16
+ icon="n20-icon-caidan"
17
+ plain
18
+ onlyicon
19
+ @click="option('转换')"
20
+ />
21
+ <el-button
22
+ v-if="hasTableOption"
23
+ v-title="'生成table配置'"
24
+ size="mini"
25
+ icon="n20-icon-wenjian"
26
+ plain
27
+ onlyicon
28
+ @click="option('生成table配置')"
29
+ />
10
30
  </div>
11
31
  </div>
12
32
  <transition name="el-zoom-in-center">
@@ -15,13 +35,34 @@
15
35
  ref="xTable"
16
36
  :loading="loading"
17
37
  :data="tableData"
18
- :columns="TableHeader"
38
+ :columns="checkColumns"
19
39
  height="100%"
20
40
  class="m-t-s Tabledrag"
21
41
  @selection-change-method="handleSelectionChange"
22
42
  >
23
43
  <vxe-column slot="order" title="排序" width="60px" align="center">
24
- <i class="n20-icon-tuodong"></i>
44
+ <i class="n20-icon-tuodong draggable-button"></i>
45
+ </vxe-column>
46
+ <!-- 取值规则 -->
47
+ <vxe-column
48
+ slot="fieldValue"
49
+ slot-scope="{ column }"
50
+ v-bind="column"
51
+ :field="column.prop"
52
+ :title="column.label"
53
+ >
54
+ <template slot-scope="{ row, $rowIndex }">
55
+ <el-input
56
+ v-if="row.fieldType !== 'select'"
57
+ v-model="row[column.prop]"
58
+ placeholder="请输入"
59
+ size="normal"
60
+ clearable
61
+ />
62
+ <el-button v-else type="text" size="small" @click="pz(row, $rowIndex)">{{
63
+ row[column.prop] || '配置'
64
+ }}</el-button>
65
+ </template>
25
66
  </vxe-column>
26
67
  <vxe-column slot="input" slot-scope="{ column }" v-bind="column" :field="column.prop" :title="column.label">
27
68
  <el-input v-model="row[column.prop]" slot-scope="{ row }" placeholder="请输入" size="normal" clearable />
@@ -81,20 +122,37 @@
81
122
  <el-button type="primary" @click="option('保存')">保存</el-button>
82
123
  <el-button plain @click="option('重置')">重置</el-button>
83
124
  </div>
125
+ <cl-dialog v-drag :visible.sync="visible" title="数据引用" :destroy-on-open="true">
126
+ <content-pop v-model="selectFieldValue" :visible.sync="visible" @save="dialogSave" />
127
+ </cl-dialog>
128
+ <tableView ref="tableView" />
84
129
  </cl-page>
85
130
  </template>
86
131
 
87
132
  <script>
133
+ import ClPage from '../PageLayout/page.vue'
88
134
  import Sortable from 'sortablejs'
89
135
  import customFormOptionsData from './jsonData/customFormOptionsData.json'
90
136
  import DynamicField from './DynamicField.vue'
91
137
  import DynamicFieldMixin from './DynamicFieldMixin.js'
92
138
  import { deepClone } from './utils'
139
+ import contentPop from './contentPop.vue'
140
+ import tableView from './tableView.vue'
141
+ import ClDialog from '../Dialog/index.vue'
142
+ import ClTablePro from '../TablePro/index.vue'
93
143
  export default {
94
144
  name: 'DynamicFieldOptions',
95
- components: { DynamicField },
145
+ components: { DynamicField, contentPop, tableView, ClPage, ClDialog, ClTablePro },
96
146
  mixins: [DynamicFieldMixin],
97
147
  props: {
148
+ hasTransform: {
149
+ type: Boolean,
150
+ default: false
151
+ },
152
+ hasTableOption: {
153
+ type: Boolean,
154
+ default: false
155
+ },
98
156
  showItems: {
99
157
  type: Array,
100
158
  default: () => {
@@ -103,7 +161,7 @@ export default {
103
161
  '序号',
104
162
  '栏目',
105
163
  '字段名称',
106
- '显示字段名称',
164
+ '是否在列表显示',
107
165
  '是否启用',
108
166
  '是否必填',
109
167
  '是否可编辑',
@@ -115,9 +173,11 @@ export default {
115
173
  ]
116
174
  }
117
175
  },
118
- busKey: {
119
- type: String,
120
- default: ''
176
+ value: {
177
+ type: Array,
178
+ default: () => {
179
+ return []
180
+ }
121
181
  },
122
182
  options: {
123
183
  type: Object,
@@ -135,16 +195,18 @@ export default {
135
195
  },
136
196
  data() {
137
197
  return {
198
+ visible: false,
138
199
  fieldType: [
139
200
  { code: 'input', name: '输入框' },
140
201
  { code: 'input-number', name: '金额输入框' },
141
- { code: 'input-number-range', name: '金额区间' },
142
- { code: 'input-rate-range', name: '利率区间' },
143
202
  { code: 'select', name: '下拉框' },
144
203
  { code: 'selectMultiple', name: '多选下拉框' },
145
204
  { code: 'date-picker', name: '日期选择' },
146
- { code: 'textarea', name: '大文本' },
147
- { code: 'searchinput', name: '搜索框' }
205
+ { code: 'textarea', name: '大文本' }
206
+ // 这三种暂时不开放
207
+ /* { code: 'input-number-range', name: '金额区间' },
208
+ { code: 'input-rate-range', name: '利率区间' },
209
+ /* { code: 'searchinput', name: '搜索框' } */
148
210
  ],
149
211
  type: 1,
150
212
  selectData: [],
@@ -193,14 +255,14 @@ export default {
193
255
  width: '150',
194
256
  'show-overflow-tooltip': true
195
257
  },
196
- /* {
258
+ {
197
259
  slotName: 'check',
198
- label: '是否多选',
199
- prop: 'isMultiple',
260
+ label: '是否在列表显示',
261
+ prop: 'isTableShow',
200
262
  align: 'center',
201
263
  width: '120',
202
264
  'show-overflow-tooltip': true
203
- }, */
265
+ },
204
266
  {
205
267
  slotName: 'check',
206
268
  label: '是否启用',
@@ -235,7 +297,7 @@ export default {
235
297
  },
236
298
 
237
299
  {
238
- slotName: 'input',
300
+ slotName: 'fieldValue',
239
301
  label: '取值规则',
240
302
  prop: 'fieldValue',
241
303
  align: 'center',
@@ -264,20 +326,45 @@ export default {
264
326
  checkColumns: [],
265
327
  formValue: {},
266
328
  form: [],
267
- rules: {}
329
+ rules: {},
330
+ selectFieldValue: [],
331
+ selectIndex: {}
268
332
  }
269
333
  },
270
334
  computed: {},
271
- watch: {},
335
+ watch: {
336
+ value: {
337
+ handler(val) {
338
+ this.tableData = val
339
+ },
340
+ immediate: true,
341
+ deep: true
342
+ }
343
+ },
272
344
  created() {},
273
345
  mounted() {
274
- this.setFieldType()
275
346
  this.getData()
347
+ this.setFieldType()
276
348
  this.checkColumns = this.TableHeader.filter((item) => {
277
349
  return this.showItems.includes(item.label)
278
350
  })
279
351
  },
280
352
  methods: {
353
+ pz(row, index) {
354
+ this.selectFieldValue = row.fieldValue || []
355
+ this.selectIndex = index
356
+ this.title = '数据来源'
357
+ this.visible = true
358
+ },
359
+ dialogSave(value) {
360
+ this.visible = false
361
+ this.tableData[this.selectIndex].fieldValue = value.map((item) => {
362
+ return {
363
+ label: item.label,
364
+ value: item.value
365
+ }
366
+ })
367
+ },
281
368
  // 处理控件类型
282
369
  setFieldType() {
283
370
  this.options.fieldType.forEach((item) => {
@@ -302,24 +389,7 @@ export default {
302
389
  this.selectData = data
303
390
  },
304
391
  getData() {
305
- if (!this.busKey) {
306
- this.$message.warning('busKey缺失,请检查')
307
- return false
308
- }
309
- /* this.$axios.get(`/test/dyfield/list/${this.busKey}`).then(res => {
310
- const { code, data } = res
311
- if (code !== 200) {
312
- return false
313
- }
314
- this.tableData = data.map((item, index) => {
315
- item.selectId = index
316
- return item
317
- })
318
- this.initData()
319
- }) */
320
-
321
- this.tableData = customFormOptionsData.data
322
- this.initData()
392
+ this.tableData = this.value
323
393
  this.$nextTick(() => {
324
394
  this.rowDrop()
325
395
  })
@@ -328,26 +398,39 @@ export default {
328
398
  console.log(this.tableData)
329
399
  this.form = this.transform(this.tableData).form
330
400
  this.formValue = this.transform(this.tableData).formValue
331
- this.setType('select', {
332
- options: [
333
- { value: '1', label: '网银' },
334
- { value: '2', label: '网关' },
335
- { value: '3', label: '其他' }
336
- ]
337
- })
338
401
  this.setRules()
339
402
  },
340
403
  option(key) {
404
+ // 将本地数据转换为 JSON 字符串
405
+ const jsonData = JSON.stringify(this.value, null, 2)
406
+ // 创建一个 Blob 对象
407
+ const blob = new Blob([jsonData], { type: 'application/json' })
408
+ // 创建一个下载链接
409
+ const url = window.URL.createObjectURL(blob)
410
+ const a = document.createElement('a')
341
411
  const selectIds = this.selectData.map((item) => {
342
412
  return item.selectId
343
413
  })
344
414
  switch (key) {
415
+ case '下载Json配置':
416
+ a.href = url
417
+ a.download = '动态字段配置.json'
418
+ document.body.appendChild(a)
419
+ a.click()
420
+ // 释放 URL 对象
421
+ window.URL.revokeObjectURL(url)
422
+ document.body.removeChild(a)
423
+ break
424
+ case '生成table配置':
425
+ this.$refs.tableView.setView(this.tableData)
426
+ break
345
427
  case '转换':
346
428
  if (this.type === 2) {
347
429
  this.type = 1
348
430
  } else {
349
431
  this.type = 2
350
432
  }
433
+ this.initData()
351
434
  break
352
435
  case '新增':
353
436
  this.tableData.push({ selectId: this.tableData.length })
@@ -363,23 +446,12 @@ export default {
363
446
  break
364
447
  case '保存':
365
448
  if (this.type === 1) {
366
- /* this.$axios
367
- .post(
368
- '/test/dyfield/save',
369
- this.tableData.map((item, index) => {
370
- item.busKey = this.busKey
371
- item.sort = index
372
- return item
373
- })
374
- )
375
- .then(res => {
376
- const { code } = res
377
- if (code !== 200) {
378
- return false
379
- }
380
- this.$message.success('保存成功')
381
- }) */
382
- this.initData()
449
+ const tableData = this.tableData.map((item, index) => {
450
+ item.busKey = this.busKey
451
+ item.sort = index
452
+ return item
453
+ })
454
+ this.$emit('save', tableData)
383
455
  } else {
384
456
  this.$refs['DynamicField'].validate((valid) => {
385
457
  if (valid) {
@@ -402,6 +474,7 @@ export default {
402
474
  const tbody = document.querySelector('.Tabledrag tbody')
403
475
  const _this = this
404
476
  Sortable.create(tbody, {
477
+ handle: '.draggable-button',
405
478
  onEnd({ newIndex, oldIndex }) {
406
479
  // 页面重新渲染
407
480
  const tableData = deepClone(_this.tableData)
@@ -296,9 +296,19 @@
296
296
  </template>
297
297
 
298
298
  <script>
299
+ import clInputNumber from '../InputNumber/index.vue'
300
+ import clDatePicker from '../DatePicker/index.vue'
301
+ import clDatePickerPor from '../DatePicker/por.vue'
302
+ import ClTablePro from '../TablePro/index.vue'
303
+
299
304
  export default {
300
305
  name: 'DynamicTable',
301
- components: {},
306
+ components: {
307
+ ClTablePro,
308
+ clDatePickerPor,
309
+ clDatePicker,
310
+ clInputNumber
311
+ },
302
312
  props: {
303
313
  listName: {
304
314
  type: String,
@@ -0,0 +1,110 @@
1
+ <template>
2
+ <cl-page class="contentPop">
3
+ <div class="flex-box flex-lr flex-v m-b-s">
4
+ <div></div>
5
+ <div>
6
+ <el-button type="primary" size="mini" @click="option('新增')">新增</el-button>
7
+ </div>
8
+ </div>
9
+ <cl-table-pro ref="xTable" :loading="loading" :data="value" :columns="TableHeader" :height="'300px'">
10
+ <vxe-column slot="input" slot-scope="{ column }" v-bind="column" :field="column.prop" :title="column.label">
11
+ <el-input v-model="row[column.prop]" slot-scope="{ row }" placeholder="请输入" size="normal" clearable />
12
+ </vxe-column>
13
+ <vxe-column slot="delete" slot-scope="{ column }" v-bind="column" :field="column.prop" :title="column.label">
14
+ <el-link
15
+ slot-scope="{ row, $rowIndex }"
16
+ class="m-r-s"
17
+ :underline="false"
18
+ icon="n20-icon-a-shanchuxuanzhong"
19
+ @click="option('删除', row, $rowIndex)"
20
+ />
21
+ </vxe-column>
22
+ </cl-table-pro>
23
+
24
+ <div slot="footer" class="page-button-shadow flex-box flex-c flex-v">
25
+ <el-button type="primary" @click="option('保存')">保存</el-button>
26
+ <!-- <el-button plain @click="option('重置')">重置</el-button> -->
27
+ </div>
28
+ </cl-page>
29
+ </template>
30
+
31
+ <script>
32
+ import ClPage from '../PageLayout/page.vue'
33
+ import ClTablePro from '../TablePro/index.vue'
34
+ export default {
35
+ name: 'ContentPop',
36
+ components: {
37
+ ClPage,
38
+ ClTablePro
39
+ },
40
+ props: {
41
+ value: {
42
+ type: Array,
43
+ default: () => {
44
+ return []
45
+ }
46
+ }
47
+ },
48
+ data() {
49
+ return {
50
+ TableHeader: [
51
+ /* {
52
+ type: 'checkbox',
53
+ static: 'pre' // 静态不被"显示列"显示的,且最终会被拼接到"显示列"排序后的表格的"前面"
54
+ }, */
55
+ {
56
+ type: 'seq',
57
+ label: '序号',
58
+ width: '56',
59
+ align: 'center'
60
+ },
61
+ {
62
+ slotName: 'input',
63
+ label: '枚举名',
64
+ prop: 'label',
65
+ align: 'left',
66
+ minWidth: '120',
67
+ 'show-overflow-tooltip': true
68
+ },
69
+ {
70
+ slotName: 'input',
71
+ label: '枚举值',
72
+ prop: 'value',
73
+ width: '260'
74
+ },
75
+ {
76
+ slotName: 'delete',
77
+ width: '50'
78
+ }
79
+ ],
80
+ loading: false
81
+ }
82
+ },
83
+ computed: {},
84
+ watch: {},
85
+ created() {},
86
+ mounted() {},
87
+ methods: {
88
+ option(key, row, index) {
89
+ switch (key) {
90
+ case '删除':
91
+ this.value.splice(index, 1)
92
+ break
93
+ case '新增':
94
+ this.value.push({})
95
+ break
96
+ case '保存':
97
+ this.$emit('save', this.value)
98
+ break
99
+ default:
100
+ break
101
+ }
102
+ }
103
+ }
104
+ }
105
+ </script>
106
+ <style scoped>
107
+ .contentPop {
108
+ font-size: 14px;
109
+ }
110
+ </style>
@@ -75,10 +75,14 @@
75
75
 
76
76
  <script>
77
77
  import DynamicTable from './DynamicTable.vue'
78
+ import clPage from '../PageLayout/page.vue'
79
+ import clStatisItem from '../Statis/statisItem.vue'
78
80
  export default {
79
81
  name: 'TableList',
80
82
  components: {
81
- DynamicTable
83
+ DynamicTable,
84
+ clPage,
85
+ clStatisItem
82
86
  },
83
87
  mixins: [],
84
88
  props: {