vue2-client 1.2.24 → 1.2.27
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/CHANGELOG.md +17 -0
- package/package.json +1 -1
- package/src/base-client/components/common/CreateQuery/CreateQuery.vue +11 -1
- package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +10 -1
- package/src/base-client/components/common/XAddForm/XAddForm.vue +14 -0
- package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +315 -0
- package/src/base-client/components/common/XAddNativeForm/index.js +3 -0
- package/src/base-client/components/common/XAddNativeForm/index.md +56 -0
- package/src/base-client/components/common/XForm/XFormItem.vue +2 -2
- package/src/base-client/components/iot/DataAnalysisViewGD/DataAnalysisViewGD.vue +1 -0
- package/src/base-client/components/iot/DeviceDetailsView/DeviceDetailsView.vue +2 -2
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +4 -4
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +3 -7
- package/src/services/api.js +6 -6
- package/src/utils/request.js +2 -1
- package/src/utils/routerUtil.js +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
> 所有关于本项目的变化都在该文档里。
|
|
3
3
|
|
|
4
|
+
**##1.2.27 -2022-03-29 @朱子峰**
|
|
5
|
+
- 功能新增:
|
|
6
|
+
- [XAddNativeForm]:将XAddForm从模态框中抽取,用于页面直接展示Form
|
|
7
|
+
|
|
8
|
+
**##1.2.25 -2022-03-26 @江超**
|
|
9
|
+
- 功能修改:
|
|
10
|
+
- [查询配置生成]:表单[新增/修改场景]增加[version(版本号)]类型
|
|
11
|
+
- [api.js]:移除[跨域代理前缀]
|
|
12
|
+
- 问题修复:
|
|
13
|
+
- [查询配置生成]:修复修改已有查询配置时,部分数据显示状态不一致的问题
|
|
14
|
+
- [设备详情页]:修复设备抄表记录,异常记录查询报错的问题
|
|
15
|
+
- [XFormItem]:修复非懒加载搜索的下拉框显示问题
|
|
16
|
+
|
|
17
|
+
**##1.2.20 - 1.2.24 -2022-03-25 @朱子峰**
|
|
18
|
+
- 功能修改:
|
|
19
|
+
- [工单关闭/开始处理]:工单关闭和开始处理时,不由id来进行判断,改由姓名进行判断是否为同一个人
|
|
20
|
+
|
|
4
21
|
**##1.2.17 - 1.2.19 -2022-03-25 @朱子峰**
|
|
5
22
|
- 问题修复:
|
|
6
23
|
- [钉钉消息推送]:将类别字段从int修改为String,直接传字典中的值
|
package/package.json
CHANGED
|
@@ -440,6 +440,7 @@
|
|
|
440
440
|
<a-select-option key="add">仅支持新增</a-select-option>
|
|
441
441
|
<a-select-option key="edit">仅支持修改</a-select-option>
|
|
442
442
|
<a-select-option key="silenceAdd">静默新增(不生成表单)</a-select-option>
|
|
443
|
+
<a-select-option key="version">版本号</a-select-option>
|
|
443
444
|
<a-popover
|
|
444
445
|
slot="suffixIcon"
|
|
445
446
|
title="关于新增/修改场景选择"
|
|
@@ -807,7 +808,7 @@ export default {
|
|
|
807
808
|
}
|
|
808
809
|
}
|
|
809
810
|
// 必选项兼容处理
|
|
810
|
-
if (columnItem.rule &&
|
|
811
|
+
if (columnItem.rule && columnItem.rule.required && columnItem.rule.required !== 'false') {
|
|
811
812
|
columnItem.rule.required = columnItem.rule.required.toString()
|
|
812
813
|
} else {
|
|
813
814
|
if (!columnItem.rule) {
|
|
@@ -815,6 +816,12 @@ export default {
|
|
|
815
816
|
}
|
|
816
817
|
columnItem.rule.required = 'false'
|
|
817
818
|
}
|
|
819
|
+
// 数据源加载方式兼容处理
|
|
820
|
+
if (columnItem.lazyLoad && columnItem.lazyLoad !== 'false') {
|
|
821
|
+
columnItem.lazyLoad = columnItem.lazyLoad.toString()
|
|
822
|
+
} else {
|
|
823
|
+
columnItem.lazyLoad = 'false'
|
|
824
|
+
}
|
|
818
825
|
// 下拉框数据源兼容处理
|
|
819
826
|
if ((columnItem.formType === 'select' || columnItem.formType === 'cascader') && columnItem.selectKey) {
|
|
820
827
|
// 数据源为logic
|
|
@@ -1015,6 +1022,9 @@ export default {
|
|
|
1015
1022
|
if (item.selectKey.substring(0, 6) !== 'logic@') {
|
|
1016
1023
|
item.selectKey = 'logic@' + item.selectKey
|
|
1017
1024
|
}
|
|
1025
|
+
if (!item.lazyLoad) {
|
|
1026
|
+
delete item.lazyLoad
|
|
1027
|
+
}
|
|
1018
1028
|
} else if (item.selectType === 'fixArray') {
|
|
1019
1029
|
// 数据源为固定json集合
|
|
1020
1030
|
if (!this.isJSON(item.selectKey)) {
|
|
@@ -492,7 +492,7 @@ export default {
|
|
|
492
492
|
)
|
|
493
493
|
for (const columnItem of this.form.column) {
|
|
494
494
|
// 必选项兼容处理
|
|
495
|
-
if (columnItem.rule &&
|
|
495
|
+
if (columnItem.rule && columnItem.rule.required && columnItem.rule.required !== 'false') {
|
|
496
496
|
columnItem.rule.required = columnItem.rule.required.toString()
|
|
497
497
|
} else {
|
|
498
498
|
if (!columnItem.rule) {
|
|
@@ -500,6 +500,12 @@ export default {
|
|
|
500
500
|
}
|
|
501
501
|
columnItem.rule.required = 'false'
|
|
502
502
|
}
|
|
503
|
+
// 数据源加载方式兼容处理
|
|
504
|
+
if (columnItem.lazyLoad && columnItem.lazyLoad !== 'false') {
|
|
505
|
+
columnItem.lazyLoad = columnItem.lazyLoad.toString()
|
|
506
|
+
} else {
|
|
507
|
+
columnItem.lazyLoad = 'false'
|
|
508
|
+
}
|
|
503
509
|
// 下拉框数据源兼容处理
|
|
504
510
|
if ((columnItem.formType === 'select' || columnItem.formType === 'cascader') && columnItem.selectKey) {
|
|
505
511
|
// 数据源为logic
|
|
@@ -623,6 +629,9 @@ export default {
|
|
|
623
629
|
if (item.selectKey.substring(0, 6) !== 'logic@') {
|
|
624
630
|
item.selectKey = 'logic@' + item.selectKey
|
|
625
631
|
}
|
|
632
|
+
if (!item.lazyLoad) {
|
|
633
|
+
delete item.lazyLoad
|
|
634
|
+
}
|
|
626
635
|
} else if (item.selectType === 'fixArray') {
|
|
627
636
|
// 数据源为固定json集合
|
|
628
637
|
if (!this.isJSON(item.selectKey)) {
|
|
@@ -113,6 +113,12 @@ export default {
|
|
|
113
113
|
return item.addOrEdit === 'silenceAdd'
|
|
114
114
|
})
|
|
115
115
|
},
|
|
116
|
+
// 过滤出版本号表单项
|
|
117
|
+
versionJsonData: function () {
|
|
118
|
+
return this.jsonData.filter(function (item) {
|
|
119
|
+
return item.addOrEdit === 'version'
|
|
120
|
+
})
|
|
121
|
+
},
|
|
116
122
|
...mapState('account', { currUser: 'user' })
|
|
117
123
|
},
|
|
118
124
|
props: {
|
|
@@ -314,6 +320,14 @@ export default {
|
|
|
314
320
|
this.form[item.model] = undefined
|
|
315
321
|
}
|
|
316
322
|
}
|
|
323
|
+
// 追加版本号信息
|
|
324
|
+
for (const item of this.versionJsonData) {
|
|
325
|
+
if (!this.modifyModelData[item.model]) {
|
|
326
|
+
this.form[item.model] = 0
|
|
327
|
+
} else {
|
|
328
|
+
this.form[item.model] = this.modifyModelData[item.model] + ''
|
|
329
|
+
}
|
|
330
|
+
}
|
|
317
331
|
},
|
|
318
332
|
onClose () {
|
|
319
333
|
this.$emit('update:visible', false)
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="table-page-search-wrapper">
|
|
3
|
+
<a-form-model
|
|
4
|
+
v-if="loaded"
|
|
5
|
+
ref="selectForm"
|
|
6
|
+
:model="form"
|
|
7
|
+
:rules="rules">
|
|
8
|
+
<a-row :gutter="16">
|
|
9
|
+
<x-form-item
|
|
10
|
+
v-for="(item, index) in realJsonData"
|
|
11
|
+
mode="新增/修改"
|
|
12
|
+
:attr="item"
|
|
13
|
+
:form="form"
|
|
14
|
+
:key="index"
|
|
15
|
+
:disabled="itemDisabled(item)"
|
|
16
|
+
:xl="12"
|
|
17
|
+
:xxl="8"
|
|
18
|
+
/>
|
|
19
|
+
<div v-for="group in realJsonSelectsData" :key="group[0].group">
|
|
20
|
+
<x-form-col v-for="groupItem in group" :key="groupItem.group + groupItem.groupIndex" :xl="12" :xxl="8">
|
|
21
|
+
<a-form-model-item :label="groupItem.name" :disabled="itemDisabled(groupItem)">
|
|
22
|
+
<a-select v-model="form[groupItem.model]" :disabled="itemDisabledPlus(groupItem.group,groupItem.groupIndex)" :allowClear="true" @change="selectsItemCheck(groupItem.group,groupItem.groupIndex,form[groupItem.model],group)" placeholder="请选择">
|
|
23
|
+
<template v-for="option in SelectsArray[groupItem.group][groupItem.groupIndex]">
|
|
24
|
+
<a-select-option :key="option.label" :value="option.value">
|
|
25
|
+
{{ option.label }}
|
|
26
|
+
</a-select-option>
|
|
27
|
+
</template>
|
|
28
|
+
</a-select>
|
|
29
|
+
</a-form-model-item>
|
|
30
|
+
</x-form-col>
|
|
31
|
+
</div>
|
|
32
|
+
</a-row>
|
|
33
|
+
</a-form-model>
|
|
34
|
+
</div>
|
|
35
|
+
</template>
|
|
36
|
+
<script>
|
|
37
|
+
import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
|
|
38
|
+
import { formatDate } from '@vue2-client/utils/util'
|
|
39
|
+
import { mapState } from 'vuex'
|
|
40
|
+
import { post } from '@vue2-client/services/api/restTools'
|
|
41
|
+
|
|
42
|
+
export default {
|
|
43
|
+
name: 'XAddNativeForm',
|
|
44
|
+
components: {
|
|
45
|
+
XFormItem
|
|
46
|
+
},
|
|
47
|
+
data () {
|
|
48
|
+
return {
|
|
49
|
+
// 内容加载是否完成
|
|
50
|
+
loaded: false,
|
|
51
|
+
// 表单Model
|
|
52
|
+
form: undefined,
|
|
53
|
+
// 多层下拉框组 数据储存
|
|
54
|
+
SelectsArray: {},
|
|
55
|
+
// 多层下拉框组 各组数量
|
|
56
|
+
SelectsNumber: {},
|
|
57
|
+
// 校验
|
|
58
|
+
rules: {},
|
|
59
|
+
// 图标样式
|
|
60
|
+
iconStyle: {
|
|
61
|
+
position: 'relative',
|
|
62
|
+
top: '1px'
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
computed: {
|
|
67
|
+
// 过滤出用于新增/修改场景的表单项
|
|
68
|
+
realJsonData: function () {
|
|
69
|
+
return this.jsonData.filter(function (item) {
|
|
70
|
+
return item.addOrEdit && item.addOrEdit !== 'no' && item.addOrEdit !== 'silenceAdd' && !item.group
|
|
71
|
+
})
|
|
72
|
+
},
|
|
73
|
+
// 过滤出多个下拉框分组级联得数据
|
|
74
|
+
realJsonSelectsData: function () {
|
|
75
|
+
const Selectsata = this.jsonData.filter(item => !item.isOnlyAddOrEdit && item.group)
|
|
76
|
+
const groupName = [...new Set(Selectsata.map(item => item.group))]
|
|
77
|
+
// 初始化数据组
|
|
78
|
+
groupName.forEach(item => {
|
|
79
|
+
this.SelectsArray[item] = []
|
|
80
|
+
})
|
|
81
|
+
return groupName.map(groupName => {
|
|
82
|
+
const SelectsItem = Selectsata.filter(item => {
|
|
83
|
+
if (item.groupIndex === 1) {
|
|
84
|
+
if (item.keyName.substring(0, 6) === 'logic@') {
|
|
85
|
+
// 请求logic
|
|
86
|
+
post('/webmeterapi/' + item.keyName.substring(6), {}).then(res => {
|
|
87
|
+
this.SelectsArray[item.group][item.groupIndex] = res
|
|
88
|
+
})
|
|
89
|
+
} else {
|
|
90
|
+
this.SelectsArray[item.group][item.groupIndex] = JSON.parse(item.keyName)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return item.group === groupName
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
this.SelectsNumber[groupName] = SelectsItem.length ? SelectsItem.length : 0
|
|
97
|
+
return SelectsItem
|
|
98
|
+
})
|
|
99
|
+
},
|
|
100
|
+
// 过滤出用于静默新增场景的表单项
|
|
101
|
+
silenceAddJsonData: function () {
|
|
102
|
+
return this.jsonData.filter(function (item) {
|
|
103
|
+
return item.addOrEdit === 'silenceAdd'
|
|
104
|
+
})
|
|
105
|
+
},
|
|
106
|
+
// 过滤出版本号表单项
|
|
107
|
+
versionJsonData: function () {
|
|
108
|
+
return this.jsonData.filter(function (item) {
|
|
109
|
+
return item.addOrEdit === 'version'
|
|
110
|
+
})
|
|
111
|
+
},
|
|
112
|
+
...mapState('account', { currUser: 'user' })
|
|
113
|
+
},
|
|
114
|
+
props: {
|
|
115
|
+
jsonData: {
|
|
116
|
+
type: Array,
|
|
117
|
+
default: () => {
|
|
118
|
+
return []
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
// 业务类型
|
|
122
|
+
businessType: {
|
|
123
|
+
type: String,
|
|
124
|
+
default: ''
|
|
125
|
+
},
|
|
126
|
+
// 修改操作前查询出的业务数据
|
|
127
|
+
modifyModelData: {
|
|
128
|
+
type: Object,
|
|
129
|
+
default: () => {
|
|
130
|
+
return {}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
// 新增或修改业务是否执行中
|
|
134
|
+
loading: {
|
|
135
|
+
type: Boolean,
|
|
136
|
+
default: () => {
|
|
137
|
+
return false
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
// 固定新增表单
|
|
141
|
+
fixedAddForm: {
|
|
142
|
+
type: Object,
|
|
143
|
+
default: () => {
|
|
144
|
+
return {}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
watch: {
|
|
149
|
+
visible (rel) {
|
|
150
|
+
if (rel) {
|
|
151
|
+
this.formItemLoad()
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
mounted () {
|
|
156
|
+
this.formItemLoad()
|
|
157
|
+
},
|
|
158
|
+
methods: {
|
|
159
|
+
selectsItemCheck (groupName, index, value, group) {
|
|
160
|
+
const tem = { }
|
|
161
|
+
// 获取当前下拉框子下拉框的数据
|
|
162
|
+
this.SelectsArray[groupName][index + 1] = this.SelectsArray[groupName][index].filter(item => item.value === value)[0].children
|
|
163
|
+
// 清空子下拉框的子们的数据
|
|
164
|
+
for (let i = index; i < this.SelectsNumber[groupName]; i++) {
|
|
165
|
+
tem[group[i].model] = undefined
|
|
166
|
+
}
|
|
167
|
+
this.form = Object.assign({}, this.form, tem)
|
|
168
|
+
// 清空子下拉框的子们的数据源
|
|
169
|
+
for (let i = index + 2; i <= this.SelectsNumber[groupName]; i++) {
|
|
170
|
+
this.SelectsArray[groupName][i] = []
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
formItemLoad () {
|
|
174
|
+
const formData = Object.assign({}, this.fixedAddForm)
|
|
175
|
+
for (let i = 0; i < this.realJsonData.length; i++) {
|
|
176
|
+
const item = this.realJsonData[i]
|
|
177
|
+
formData[item.model] = undefined
|
|
178
|
+
// 处理表单校验情况
|
|
179
|
+
if (item.rule) {
|
|
180
|
+
this.rules[item.model] = []
|
|
181
|
+
const required = item.rule.required ? item.rule.required === true || item.rule.required === 'true' : false
|
|
182
|
+
let trigger
|
|
183
|
+
let message
|
|
184
|
+
if (required) {
|
|
185
|
+
switch (item.type) {
|
|
186
|
+
case 'select':
|
|
187
|
+
message = '请选择' + item.name
|
|
188
|
+
trigger = 'change'
|
|
189
|
+
break
|
|
190
|
+
default:
|
|
191
|
+
message = '请输入' + item.name
|
|
192
|
+
trigger = 'blur'
|
|
193
|
+
}
|
|
194
|
+
this.rules[item.model].push({
|
|
195
|
+
required: true,
|
|
196
|
+
message: message,
|
|
197
|
+
trigger: trigger
|
|
198
|
+
})
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
switch (item.rule.type) {
|
|
202
|
+
case 'number':
|
|
203
|
+
case 'integer':
|
|
204
|
+
case 'float':
|
|
205
|
+
let defaultValue
|
|
206
|
+
let message
|
|
207
|
+
switch (item.rule.type) {
|
|
208
|
+
case 'number':
|
|
209
|
+
message = '数字'
|
|
210
|
+
defaultValue = 0
|
|
211
|
+
break
|
|
212
|
+
case 'integer':
|
|
213
|
+
message = '整数'
|
|
214
|
+
defaultValue = 0
|
|
215
|
+
break
|
|
216
|
+
case 'float':
|
|
217
|
+
message = '小数'
|
|
218
|
+
defaultValue = 0.0
|
|
219
|
+
break
|
|
220
|
+
}
|
|
221
|
+
this.rules[item.model].push({
|
|
222
|
+
type: item.rule.type,
|
|
223
|
+
message: item.name + '必须为' + message,
|
|
224
|
+
transform: (value) => {
|
|
225
|
+
if (value && value.length !== 0) {
|
|
226
|
+
return Number(value)
|
|
227
|
+
} else {
|
|
228
|
+
return defaultValue
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
trigger: 'blur'
|
|
232
|
+
})
|
|
233
|
+
break
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
this.form = formData
|
|
238
|
+
if (Object.keys(this.modifyModelData).length > 0) {
|
|
239
|
+
this.getModifyModelData()
|
|
240
|
+
}
|
|
241
|
+
this.loaded = true
|
|
242
|
+
},
|
|
243
|
+
itemDisabled (value) {
|
|
244
|
+
return (this.businessType === '新增' && value.addOrEdit === 'edit') ||
|
|
245
|
+
(this.businessType === '修改' && value.addOrEdit === 'add')
|
|
246
|
+
},
|
|
247
|
+
itemDisabledPlus (group, index) {
|
|
248
|
+
return (!this.SelectsArray[group][index]) || (this.SelectsArray[group][index] && this.SelectsArray[group][index].length === 0)
|
|
249
|
+
},
|
|
250
|
+
resetForm () {
|
|
251
|
+
this.$refs.selectForm.resetFields()
|
|
252
|
+
},
|
|
253
|
+
async onSubmit () {
|
|
254
|
+
this.$refs.selectForm.validate(async valid => {
|
|
255
|
+
for (const key of Object.keys(this.form)) {
|
|
256
|
+
if (this.form[key] === null || this.form[key] === '') {
|
|
257
|
+
this.form[key] = undefined
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
const requestParameters = Object.assign({}, this.form)
|
|
261
|
+
// 追加静默新增字段
|
|
262
|
+
if (this.businessType === '新增') {
|
|
263
|
+
for (const item of this.silenceAddJsonData) {
|
|
264
|
+
switch (item.silencePurpose) {
|
|
265
|
+
case 'createTime':
|
|
266
|
+
requestParameters[item.model] = formatDate('now')
|
|
267
|
+
break
|
|
268
|
+
case 'operator':
|
|
269
|
+
requestParameters[item.model] = this.currUser.name
|
|
270
|
+
break
|
|
271
|
+
case 'orgId':
|
|
272
|
+
requestParameters[item.model] = this.currUser.orgid
|
|
273
|
+
break
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// 通过请求追加静默新增:自定义字段
|
|
277
|
+
for (const item of this.silenceAddJsonData.filter((item) => item.silencePurpose === 'customize')) {
|
|
278
|
+
requestParameters[item.model] = await this.getSilenceSource(item.silenceSource, requestParameters)
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
const data = {
|
|
282
|
+
valid: valid,
|
|
283
|
+
form: requestParameters
|
|
284
|
+
}
|
|
285
|
+
this.$emit('onSubmit', data)
|
|
286
|
+
})
|
|
287
|
+
},
|
|
288
|
+
async getSilenceSource (silenceSource, requestParameters) {
|
|
289
|
+
const result = await post('/webmeterapi/' + silenceSource, requestParameters)
|
|
290
|
+
return result
|
|
291
|
+
},
|
|
292
|
+
getModifyModelData () {
|
|
293
|
+
for (let i = 0; i < this.realJsonData.length; i++) {
|
|
294
|
+
const item = this.realJsonData[i]
|
|
295
|
+
if (this.modifyModelData[item.model] || this.modifyModelData[item.model] === 0) {
|
|
296
|
+
this.form[item.model] = this.modifyModelData[item.model] + ''
|
|
297
|
+
} else {
|
|
298
|
+
this.form[item.model] = undefined
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// 追加版本号信息
|
|
302
|
+
for (const item of this.versionJsonData) {
|
|
303
|
+
if (!this.modifyModelData[item.model]) {
|
|
304
|
+
this.form[item.model] = 0
|
|
305
|
+
} else {
|
|
306
|
+
this.form[item.model] = this.modifyModelData[item.model] + ''
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
onClose () {
|
|
311
|
+
this.$emit('update:visible', false)
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
</script>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# XAddNativeForm
|
|
2
|
+
|
|
3
|
+
动态新增/修改表单控件,根据JSON配置生成一个完整的可供新增/修改数据的动态表单
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## 何时使用
|
|
7
|
+
|
|
8
|
+
当需要一个可供新增/修改数据的动态生成的表单时
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
引用方式:
|
|
12
|
+
|
|
13
|
+
```javascript
|
|
14
|
+
import XAddNativeForm from '@vue2-client/base-client/components/XAddNativeForm/XAddNativeForm'
|
|
15
|
+
|
|
16
|
+
export default {
|
|
17
|
+
components: {
|
|
18
|
+
XAddNativeForm
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## 代码演示
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<x-add-form
|
|
29
|
+
:business-type="businessType"
|
|
30
|
+
:json-data="formItems"
|
|
31
|
+
:modify-model-data="modifyModelData"
|
|
32
|
+
:loading="loading"
|
|
33
|
+
@onSubmit="onSubmit">
|
|
34
|
+
</x-add-form>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## API
|
|
38
|
+
|
|
39
|
+
| 参数 | 说明 | 类型 | 默认值 |
|
|
40
|
+
|-----------------|--------------------------|---------|-------|
|
|
41
|
+
| businessType | 业务类型 | String | '' |
|
|
42
|
+
| jsonData | JSON配置,根据[工具>查询配置生成]功能生成 | Object | {} |
|
|
43
|
+
| modifyModelData | 修改操作前查询出的业务数据 | Object | {} |
|
|
44
|
+
| loading | 新增或修改业务是否执行中 | Boolean | false |
|
|
45
|
+
| fixedAddForm | 固定新增表单,会和新增表单合并 | Object | {} |
|
|
46
|
+
| @onSubmit | 表单的提交事件 | event | - |
|
|
47
|
+
|
|
48
|
+
## 例子1
|
|
49
|
+
----
|
|
50
|
+
参考XFormTable组件
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
注意事项
|
|
54
|
+
----
|
|
55
|
+
|
|
56
|
+
> 本组件已经实现了自适应布局,在不同分辨率下的设备均可得到基本理想的展示效果
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
:label="attr.name"
|
|
45
45
|
:prop="attr.model">
|
|
46
46
|
<a-select
|
|
47
|
-
v-if="!attr.lazyLoad"
|
|
47
|
+
v-if="!attr.lazyLoad || attr.lazyLoad === 'false'"
|
|
48
48
|
v-model="form[attr.model]"
|
|
49
49
|
:disabled="disabled"
|
|
50
50
|
show-search
|
|
@@ -216,7 +216,7 @@ export default {
|
|
|
216
216
|
}
|
|
217
217
|
},
|
|
218
218
|
created () {
|
|
219
|
-
if (!this.attr.lazyLoad && this.attr.keyName && this.attr.keyName.indexOf('logic@') !== -1) {
|
|
219
|
+
if ((!this.attr.lazyLoad || this.attr.lazyLoad === 'false') && this.attr.keyName && this.attr.keyName.indexOf('logic@') !== -1) {
|
|
220
220
|
this.getData({}, res => {
|
|
221
221
|
this.option = res
|
|
222
222
|
})
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
</a-tabs>
|
|
46
46
|
<div v-if="!loadDeviceDetails">
|
|
47
47
|
<device-details-main :details="details" v-if="tabActiveKey === '1'"/>
|
|
48
|
-
<device-details-read :device-
|
|
48
|
+
<device-details-read :device-id="details.id" v-if="tabActiveKey === '2'"/>
|
|
49
49
|
<device-details-instruct :device-no="details.f_device_no" v-if="tabActiveKey === '3'"/>
|
|
50
|
-
<device-details-singular :device-
|
|
50
|
+
<device-details-singular :device-id="details.id" v-if="tabActiveKey === '4'"/>
|
|
51
51
|
<device-details-instruct-operate :device="details" v-if="tabActiveKey === '5'"/>
|
|
52
52
|
</div>
|
|
53
53
|
</template>
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
props: {
|
|
34
|
-
|
|
35
|
-
type:
|
|
34
|
+
deviceId: {
|
|
35
|
+
type: Number,
|
|
36
36
|
required: true
|
|
37
37
|
}
|
|
38
38
|
},
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
methods: {
|
|
43
43
|
initView () {
|
|
44
44
|
this.tabActiveKey = '1'
|
|
45
|
-
this.fixedQueryForm['e_f_device_id'] = this.
|
|
45
|
+
this.fixedQueryForm['e_f_device_id'] = this.deviceId
|
|
46
46
|
},
|
|
47
47
|
onSubmit (res) {
|
|
48
|
-
res.form['e_f_device_id'] = this.
|
|
48
|
+
res.form['e_f_device_id'] = this.deviceId
|
|
49
49
|
this.$emit('onSubmit', res)
|
|
50
50
|
},
|
|
51
51
|
toDetail (record, id) {
|
|
@@ -23,10 +23,6 @@
|
|
|
23
23
|
XFormTable
|
|
24
24
|
},
|
|
25
25
|
props: {
|
|
26
|
-
deviceNo: {
|
|
27
|
-
type: String,
|
|
28
|
-
required: true
|
|
29
|
-
},
|
|
30
26
|
deviceId: {
|
|
31
27
|
type: Number,
|
|
32
28
|
required: true
|
|
@@ -68,12 +64,12 @@
|
|
|
68
64
|
methods: {
|
|
69
65
|
initView () {
|
|
70
66
|
this.logicParam = {
|
|
71
|
-
id: this.
|
|
67
|
+
id: this.deviceId
|
|
72
68
|
}
|
|
73
|
-
this.fixedQueryForm['
|
|
69
|
+
this.fixedQueryForm['d_id'] = this.deviceId
|
|
74
70
|
},
|
|
75
71
|
onSubmit (res) {
|
|
76
|
-
res.form['
|
|
72
|
+
res.form['d_id'] = this.deviceId
|
|
77
73
|
this.$emit('onSubmit', res)
|
|
78
74
|
},
|
|
79
75
|
refresh () {
|
package/src/services/api.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// 跨域代理前缀
|
|
2
2
|
// const API_PROXY_PREFIX='/api'
|
|
3
3
|
// const BASE_URL = process.env.NODE_ENV === 'production' ? process.env.VUE_APP_API_BASE_URL : API_PROXY_PREFIX
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
module.exports = {
|
|
6
|
-
LOGIN:
|
|
7
|
-
ROUTES:
|
|
8
|
-
SEARCH:
|
|
9
|
-
GOODS:
|
|
10
|
-
GOODS_COLUMNS:
|
|
6
|
+
LOGIN: `/rs/logic/getLogin`,
|
|
7
|
+
ROUTES: `/rs/user/userLogin/智慧燃气`,
|
|
8
|
+
SEARCH: `/rs/search`,
|
|
9
|
+
GOODS: `/goods`,
|
|
10
|
+
GOODS_COLUMNS: `/columns`
|
|
11
11
|
}
|
package/src/utils/request.js
CHANGED
|
@@ -113,9 +113,10 @@ function loadInterceptors () {
|
|
|
113
113
|
// 让每个请求携带自定义 token 请根据实际情况自行修改
|
|
114
114
|
if (token) {
|
|
115
115
|
config.headers['Access-Token'] = token
|
|
116
|
+
config.headers['Cookie'] = Cookie
|
|
116
117
|
}
|
|
117
118
|
if (!config.headers['Content-Type']) {
|
|
118
|
-
config.headers['Content-Type'] = 'application/json;charset=UTF-8'
|
|
119
|
+
config.headers['Content-Type'] = 'application/json/x-www-form-urlencoded;charset=UTF-8'
|
|
119
120
|
}
|
|
120
121
|
return config
|
|
121
122
|
}, errorHandler)
|
package/src/utils/routerUtil.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import Vue from 'vue'
|
|
1
2
|
import routerMap from '@vue2-client/router/async/router.map'
|
|
2
3
|
import { mergeI18nFromRoutes } from '@vue2-client/utils/i18n'
|
|
3
4
|
import Router from 'vue-router'
|
|
@@ -135,6 +136,11 @@ function loadRoutes (routesConfig) {
|
|
|
135
136
|
// 应用配置
|
|
136
137
|
const { router, store, i18n } = appOptions
|
|
137
138
|
|
|
139
|
+
// 刷新页面时,有些全局状态丢失,在此处从本地缓存拿出来赋值
|
|
140
|
+
if (JSON.stringify(Vue.$login.f) == '{}') {
|
|
141
|
+
const login = store.getters['account/login']
|
|
142
|
+
Object.assign(Vue.$login, login)
|
|
143
|
+
}
|
|
138
144
|
// 如果 routesConfig 有值,则更新到本地,否则从本地获取
|
|
139
145
|
if (routesConfig) {
|
|
140
146
|
store.commit('account/setRoutesConfig', routesConfig)
|