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.
- package/nstc-g6/components/NstcCharts/NstcCharts.vue +16 -8
- package/package.json +8 -5
- package/src/assets/css/approve-card.scss +1 -1
- package/src/assets/css/date-quarter.scss +8 -0
- package/src/assets/css/expandable-pane.scss +7 -0
- package/src/assets/css/file-upload-table.scss +2 -3
- package/src/assets/css/font-icon.scss +3 -1
- package/src/assets/css/message.scss +6 -6
- package/src/assets/css/normalize.scss +4 -1
- package/src/assets/css/table.scss +16 -11
- package/src/assets/iconFont/SIMSUN.ttf +0 -0
- package/src/assets/iconFont/font.css +4 -0
- package/src/components/AIButton/index.vue +101 -0
- package/src/components/AdvancedFilter/formItemRender.vue +7 -4
- package/src/components/AdvancedFilter/index.vue +6 -7
- package/src/components/Anchor/index.vue +1 -0
- package/src/components/ApprovalButtons/index.vue +404 -82
- package/src/components/ApprovalButtons/indexApp.vue +1102 -0
- package/src/components/ApprovalButtons/selectSpr.vue +128 -0
- package/src/components/ApprovalButtons/setCarboncopyProp.vue +1 -1
- package/src/components/ApprovalButtons/setRejectToProp.vue +45 -5
- package/src/components/ApprovalButtons/showAppOpi.vue +265 -8
- package/src/components/ApprovalButtons/showOtherAttrNew.vue +161 -0
- package/src/components/ApprovalCard/index.vue +190 -44
- package/src/components/ApprovalCard/indexApp.vue +592 -0
- package/src/components/ApprovalRecord/approvalImgPro/child.vue +1 -1
- package/src/components/ApprovalRecord/approvalImgPro/index.vue +42 -5
- package/src/components/ApprovalRecord/index.vue +23 -6
- package/src/components/ApprovalRecord/indexApp.vue +79 -0
- package/src/components/AttachmentPass/index.vue +286 -0
- package/src/components/Button/button-group.vue +3 -1
- package/src/components/CascaderArea/index.vue +5 -6
- package/src/components/DatePicker/por.vue +31 -1
- package/src/components/DateSelect/quarterDatePicker.vue +23 -1
- package/src/components/Descriptions/index.vue +7 -3
- package/src/components/Dialog/index.vue +4 -0
- package/src/components/Diff/index.vue +4 -2
- package/src/components/DynamicField/DynamicField.vue +29 -6
- package/src/components/DynamicField/DynamicFieldMixin.js +13 -5
- package/src/components/DynamicField/DynamicFieldOptions.vue +135 -62
- package/src/components/DynamicField/DynamicTable.vue +11 -1
- package/src/components/DynamicField/contentPop.vue +110 -0
- package/src/components/DynamicField/tableList.vue +5 -1
- package/src/components/DynamicField/tableView.vue +143 -0
- package/src/components/ECharts/index.vue +15 -9
- package/src/components/Expandable/main.vue +17 -2
- package/src/components/FileImport/index.vue +4 -5
- package/src/components/FileUploadTable/FileUploadTableV3.vue +937 -0
- package/src/components/FileUploadTable/aiCheckDialog.vue +139 -0
- package/src/components/FileUploadTable/index.vue +251 -33
- package/src/components/FileUploadTable/jytg.svg +6 -0
- package/src/components/FileUploadTable/wsc.svg +3 -0
- package/src/components/FileUploadTable/ysc.svg +3 -0
- package/src/components/HandlingAdvice/index.vue +191 -0
- package/src/components/InputAccount/index.vue +105 -0
- package/src/components/InputNumber/index.vue +16 -4
- package/src/components/InputNumber/numberRange.vue +14 -0
- package/src/components/InputSearch/index.vue +8 -0
- package/src/components/Layout/HeaderWrap/changePwd.vue +50 -23
- package/src/components/Layout/HeaderWrap/index.vue +2 -2
- package/src/components/Layout/HeaderWrap/indexN.vue +296 -119
- package/src/components/Layout/SubContent/index.vue +45 -14
- package/src/components/Layout/indexN.vue +26 -5
- package/src/components/LoginTemporary/form.vue +126 -34
- package/src/components/LoginTemporary/index.vue +14 -3
- package/src/components/LoginTemporary/indexN.vue +35 -13
- package/src/components/Preview/index.vue +199 -0
- package/src/components/SelectDatePickerPro/customDatePicker.vue +7 -0
- package/src/components/SelectDatePickerPro/halfYearPicker.vue +165 -0
- package/src/components/SelectDatePickerPro/index.vue +44 -4
- package/src/components/SelectDatePickerPro/quarterDatePicker.vue +32 -10
- package/src/components/SelectTree/index.vue +10 -4
- package/src/components/SelectTree/pro.vue +3 -0
- package/src/components/ShowColumn/index copy 2.vue +545 -0
- package/src/components/ShowColumn/index copy.vue +566 -0
- package/src/components/ShowColumn/index.vue +11 -7
- package/src/components/Statis/statisItem.vue +8 -7
- package/src/components/Table/filters.js +13 -0
- package/src/components/Table/index.vue +4 -4
- package/src/components/TablePro/filterContent.vue +18 -8
- package/src/components/TablePro/index.js +41 -1
- package/src/components/TablePro/index.vue +117 -6
- package/src/components/TableProOperateColumn/OperateBtns.vue +11 -53
- package/src/components/TableProOperateColumn/OperateBtns_copy.vue +141 -0
- package/src/components/TableProOperateColumn/childrenOperateBtn.vue +108 -0
- package/src/components/TableProOperateColumn/index.vue +3 -6
- package/src/components/TableSetSize/index.vue +1 -1
- package/src/components/Tree/index.vue +21 -5
- package/src/components/Upload/index.vue +25 -10
- package/src/components/Upload/uploadMsg.vue +30 -25
- package/src/components/operatingStatus/index.vue +3 -4
- package/src/directives/VTitle/index.js +15 -5
- package/src/directives/watermark/index.js +140 -56
- package/src/i18n.json +146 -18
- package/src/index.js +31 -3
- package/src/plugins/Sign/CaMap.js +47 -8
- package/src/plugins/Sign/Itrus/index.js +1 -1
- package/src/plugins/Sign/Itrus/sign_3720.js +2 -1
- package/src/plugins/Sign/NetSM3/index.js +20 -11
- package/src/plugins/Sign/NetV3/index.js +163 -22
- package/src/plugins/Sign/SkfSign/index.js +55 -52
- package/src/plugins/Sign/bjca/index.js +229 -9
- package/src/plugins/Sign/hnca/index.js +5064 -0
- package/src/plugins/Sign/index.js +155 -103
- package/src/plugins/Sign/kySign/base64.js +160 -0
- package/src/plugins/Sign/kySign/hex.js +92 -0
- package/src/plugins/Sign/kySign/index.js +186 -0
- package/src/plugins/Sign/kySign/skf.js +937 -0
- package/src/plugins/Sign/kySign/test.html +463 -0
- package/src/plugins/Sign/sdca/index.js +73 -0
- package/src/plugins/Sign/sign.js +72 -52
- package/src/plugins/Sign/signV3/InfosecNetSignCNGAgent.min.js +1 -0
- package/src/plugins/Sign/signV3/sign.js +187 -0
- package/src/plugins/Sign/sign_back.js +172 -0
- package/src/utils/accountFormat.js +7 -0
- package/src/utils/asyncGetRelaNos.js +79 -46
- package/src/utils/axios.js +3 -5
- package/src/utils/i18n/index.js +1 -1
- package/src/utils/importGlobal.js +23 -12
- package/style/fonts/SIMSUN.5e0c362c.ttf +0 -0
- package/style/index.css +2 -2
- package/theme/blue.css +2 -2
- package/theme/cctcRed.css +2 -2
- package/theme/fonts/SIMSUN.5e0c362c.ttf +0 -0
- package/theme/green.css +2 -2
- package/theme/lightBlue.css +2 -2
- package/theme/orange.css +2 -2
- package/theme/purple.css +2 -2
- package/theme/red.css +2 -2
- package/theme/yellow.css +2 -2
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div v-if="isEqual">
|
|
3
|
-
|
|
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="
|
|
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="
|
|
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] = [
|
|
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
|
|
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
|
|
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="
|
|
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
|
-
|
|
119
|
-
type:
|
|
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
|
-
|
|
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: '
|
|
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: '
|
|
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
|
-
|
|
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
|
-
|
|
367
|
-
.
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
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: {
|