vue2-client 1.2.51 → 1.2.54
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/.env +15 -14
- package/.eslintrc.js +82 -82
- package/CHANGELOG.md +5 -0
- package/package.json +1 -1
- package/src/base-client/all.js +64 -61
- package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +225 -0
- package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -0
- package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +111 -107
- package/src/base-client/components/common/CitySelect/CitySelect.vue +244 -0
- package/src/base-client/components/common/CitySelect/index.js +3 -0
- package/src/base-client/components/common/CitySelect/index.md +109 -0
- package/src/base-client/components/common/CreateQuery/CreateQuery.vue +483 -1342
- package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +770 -555
- package/src/base-client/components/common/Upload/Upload.vue +124 -124
- package/src/base-client/components/common/Upload/index.js +3 -3
- package/src/base-client/components/common/XAddForm/XAddForm.vue +38 -46
- package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +316 -316
- package/src/base-client/components/common/XForm/XForm.vue +268 -275
- package/src/base-client/components/common/XForm/XFormItem.vue +348 -285
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +57 -57
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +131 -131
- package/src/base-client/components/iot/WebmeterAnalysisView/WebmeterAnalysisView.vue +205 -205
- package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
- package/src/base-client/plugins/AppData.js +72 -57
- package/src/config/CreateQueryConfig.js +298 -80
- package/src/pages/resourceManage/orgListManage.vue +40 -40
- package/src/router/async/config.async.js +26 -26
- package/src/router/index.js +27 -27
- package/src/services/api/manage.js +16 -14
- package/src/services/api/restTools.js +24 -24
- package/src/theme/default/style.less +47 -47
- package/src/utils/map-utils.js +28 -29
- package/src/utils/request.js +198 -198
- package/src/utils/util.js +222 -176
- package/vue.config.js +2 -2
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<a-upload-dragger
|
|
4
|
-
v-if="model.type === 'file'"
|
|
5
|
-
name="file"
|
|
6
|
-
:multiple="true"
|
|
7
|
-
:remove="deleteFileItem"
|
|
8
|
-
:customRequest="uploadFiles"
|
|
9
|
-
:file-list="uploadedFileList">
|
|
10
|
-
<p class="ant-upload-drag-icon">
|
|
11
|
-
<a-icon type="inbox"/>
|
|
12
|
-
</p>
|
|
13
|
-
<p class="ant-upload-text">
|
|
14
|
-
点击或拖动文件到该区域上传
|
|
15
|
-
</p>
|
|
16
|
-
<p class="ant-upload-hint">
|
|
17
|
-
支持单个或多个文件
|
|
18
|
-
</p>
|
|
19
|
-
</a-upload-dragger>
|
|
20
|
-
<a-upload
|
|
21
|
-
v-if=" model.type === 'image'"
|
|
22
|
-
list-type="picture-card"
|
|
23
|
-
:customRequest="uploadFiles"
|
|
24
|
-
:remove="deleteFileItem"
|
|
25
|
-
:file-list="uploadedFileList">
|
|
26
|
-
<a-icon type="plus"/>
|
|
27
|
-
<div class="ant-upload-text">
|
|
28
|
-
Upload
|
|
29
|
-
</div>
|
|
30
|
-
</a-upload>
|
|
31
|
-
</div>
|
|
32
|
-
</template>
|
|
33
|
-
|
|
34
|
-
<script>
|
|
35
|
-
|
|
36
|
-
import { post } from '@vue2-client/services/api'
|
|
37
|
-
import { mapState } from 'vuex'
|
|
38
|
-
|
|
39
|
-
export default {
|
|
40
|
-
name: 'uploads',
|
|
41
|
-
data () {
|
|
42
|
-
return {
|
|
43
|
-
uploadedFileList: [],
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
props: {
|
|
47
|
-
// 表单属性
|
|
48
|
-
model: {
|
|
49
|
-
type: Object,
|
|
50
|
-
default: () => {
|
|
51
|
-
return {}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
computed: {
|
|
56
|
-
...mapState('account', { currUser: 'user' })
|
|
57
|
-
},
|
|
58
|
-
methods: {
|
|
59
|
-
uploadFiles (info) {
|
|
60
|
-
// 初始化文件信息
|
|
61
|
-
const fileInfo = {
|
|
62
|
-
uid: info.file.uid,
|
|
63
|
-
name: info.file.name,
|
|
64
|
-
status: 'uploading',
|
|
65
|
-
response: '',
|
|
66
|
-
url: '',
|
|
67
|
-
}
|
|
68
|
-
// 放入上传列表中,以便于显示上传进度
|
|
69
|
-
this.uploadedFileList.push(fileInfo)
|
|
70
|
-
// 组装上传数据
|
|
71
|
-
const headers = {
|
|
72
|
-
'Content-Type': 'multipart/form-data',
|
|
73
|
-
}
|
|
74
|
-
const formData = new FormData()
|
|
75
|
-
formData.append('avatar', info.file)
|
|
76
|
-
formData.append('resUploadMode', this.model.resUploadMode)
|
|
77
|
-
if (this.model.pathKey) {
|
|
78
|
-
formData.append('pathKey', this.model.pathKey)
|
|
79
|
-
}
|
|
80
|
-
formData.append('stockAlias', this.model.stockAlias)
|
|
81
|
-
formData.append('resUploadStock', this.model.resUploadStock)
|
|
82
|
-
formData.append('filename', info.file.name)
|
|
83
|
-
formData.append('filesize', (info.file.size / 1024 / 1024).toFixed(4))
|
|
84
|
-
formData.append('f_operator', this.currUser.username)
|
|
85
|
-
|
|
86
|
-
let url = '/webmeteruploadapi/upload'
|
|
87
|
-
if (process.env.NODE_ENV === 'production') {
|
|
88
|
-
url = `/${this.model.stockAlias}/webmeteruploadapi/upload`
|
|
89
|
-
}
|
|
90
|
-
post(url, formData, { headers }).then(res => {
|
|
91
|
-
// 根据服务端返回的结果判断成功与否,设置文件条目的状态
|
|
92
|
-
if (res.success) {
|
|
93
|
-
fileInfo.status = 'done'
|
|
94
|
-
fileInfo.response = JSON.parse(res.data)
|
|
95
|
-
fileInfo.id = JSON.parse(res.data).id
|
|
96
|
-
fileInfo.url = JSON.parse(res.data).f_downloadpath
|
|
97
|
-
this.$emit('setFiles', this.uploadedFileList.filter(item => item.status === 'done').map(item => item.id))
|
|
98
|
-
this.$message.success('上传成功!')
|
|
99
|
-
} else {
|
|
100
|
-
fileInfo.status = 'error'
|
|
101
|
-
fileInfo.response = res.data
|
|
102
|
-
this.$message.error('上传失败!')
|
|
103
|
-
}
|
|
104
|
-
}).catch((e) => {
|
|
105
|
-
fileInfo.status = 'error'
|
|
106
|
-
fileInfo.response = e
|
|
107
|
-
this.$message.error(`请求失败!${e}`)
|
|
108
|
-
})
|
|
109
|
-
},
|
|
110
|
-
// 删除文件
|
|
111
|
-
deleteFileItem (file) {
|
|
112
|
-
// 找到当前文件所在列表的索引
|
|
113
|
-
const index = this.uploadedFileList.indexOf(file)
|
|
114
|
-
// 从列表中移除该文件
|
|
115
|
-
this.uploadedFileList.splice(index, 1)
|
|
116
|
-
this.$emit('setFiles', this.uploadedFileList.filter(item => item.status === 'done').map(item => item.id))
|
|
117
|
-
return true
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
</script>
|
|
122
|
-
<style lang="less" scoped>
|
|
123
|
-
|
|
124
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<a-upload-dragger
|
|
4
|
+
v-if="model.type === 'file'"
|
|
5
|
+
name="file"
|
|
6
|
+
:multiple="true"
|
|
7
|
+
:remove="deleteFileItem"
|
|
8
|
+
:customRequest="uploadFiles"
|
|
9
|
+
:file-list="uploadedFileList">
|
|
10
|
+
<p class="ant-upload-drag-icon">
|
|
11
|
+
<a-icon type="inbox"/>
|
|
12
|
+
</p>
|
|
13
|
+
<p class="ant-upload-text">
|
|
14
|
+
点击或拖动文件到该区域上传
|
|
15
|
+
</p>
|
|
16
|
+
<p class="ant-upload-hint">
|
|
17
|
+
支持单个或多个文件
|
|
18
|
+
</p>
|
|
19
|
+
</a-upload-dragger>
|
|
20
|
+
<a-upload
|
|
21
|
+
v-if=" model.type === 'image'"
|
|
22
|
+
list-type="picture-card"
|
|
23
|
+
:customRequest="uploadFiles"
|
|
24
|
+
:remove="deleteFileItem"
|
|
25
|
+
:file-list="uploadedFileList">
|
|
26
|
+
<a-icon type="plus"/>
|
|
27
|
+
<div class="ant-upload-text">
|
|
28
|
+
Upload
|
|
29
|
+
</div>
|
|
30
|
+
</a-upload>
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<script>
|
|
35
|
+
|
|
36
|
+
import { post } from '@vue2-client/services/api'
|
|
37
|
+
import { mapState } from 'vuex'
|
|
38
|
+
|
|
39
|
+
export default {
|
|
40
|
+
name: 'uploads',
|
|
41
|
+
data () {
|
|
42
|
+
return {
|
|
43
|
+
uploadedFileList: [],
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
props: {
|
|
47
|
+
// 表单属性
|
|
48
|
+
model: {
|
|
49
|
+
type: Object,
|
|
50
|
+
default: () => {
|
|
51
|
+
return {}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
computed: {
|
|
56
|
+
...mapState('account', { currUser: 'user' })
|
|
57
|
+
},
|
|
58
|
+
methods: {
|
|
59
|
+
uploadFiles (info) {
|
|
60
|
+
// 初始化文件信息
|
|
61
|
+
const fileInfo = {
|
|
62
|
+
uid: info.file.uid,
|
|
63
|
+
name: info.file.name,
|
|
64
|
+
status: 'uploading',
|
|
65
|
+
response: '',
|
|
66
|
+
url: '',
|
|
67
|
+
}
|
|
68
|
+
// 放入上传列表中,以便于显示上传进度
|
|
69
|
+
this.uploadedFileList.push(fileInfo)
|
|
70
|
+
// 组装上传数据
|
|
71
|
+
const headers = {
|
|
72
|
+
'Content-Type': 'multipart/form-data',
|
|
73
|
+
}
|
|
74
|
+
const formData = new FormData()
|
|
75
|
+
formData.append('avatar', info.file)
|
|
76
|
+
formData.append('resUploadMode', this.model.resUploadMode)
|
|
77
|
+
if (this.model.pathKey) {
|
|
78
|
+
formData.append('pathKey', this.model.pathKey)
|
|
79
|
+
}
|
|
80
|
+
formData.append('stockAlias', this.model.stockAlias)
|
|
81
|
+
formData.append('resUploadStock', this.model.resUploadStock)
|
|
82
|
+
formData.append('filename', info.file.name)
|
|
83
|
+
formData.append('filesize', (info.file.size / 1024 / 1024).toFixed(4))
|
|
84
|
+
formData.append('f_operator', this.currUser.username)
|
|
85
|
+
|
|
86
|
+
let url = '/webmeteruploadapi/upload'
|
|
87
|
+
if (process.env.NODE_ENV === 'production') {
|
|
88
|
+
url = `/${this.model.stockAlias}/webmeteruploadapi/upload`
|
|
89
|
+
}
|
|
90
|
+
post(url, formData, { headers }).then(res => {
|
|
91
|
+
// 根据服务端返回的结果判断成功与否,设置文件条目的状态
|
|
92
|
+
if (res.success) {
|
|
93
|
+
fileInfo.status = 'done'
|
|
94
|
+
fileInfo.response = JSON.parse(res.data)
|
|
95
|
+
fileInfo.id = JSON.parse(res.data).id
|
|
96
|
+
fileInfo.url = JSON.parse(res.data).f_downloadpath
|
|
97
|
+
this.$emit('setFiles', this.uploadedFileList.filter(item => item.status === 'done').map(item => item.id))
|
|
98
|
+
this.$message.success('上传成功!')
|
|
99
|
+
} else {
|
|
100
|
+
fileInfo.status = 'error'
|
|
101
|
+
fileInfo.response = res.data
|
|
102
|
+
this.$message.error('上传失败!')
|
|
103
|
+
}
|
|
104
|
+
}).catch((e) => {
|
|
105
|
+
fileInfo.status = 'error'
|
|
106
|
+
fileInfo.response = e
|
|
107
|
+
this.$message.error(`请求失败!${e}`)
|
|
108
|
+
})
|
|
109
|
+
},
|
|
110
|
+
// 删除文件
|
|
111
|
+
deleteFileItem (file) {
|
|
112
|
+
// 找到当前文件所在列表的索引
|
|
113
|
+
const index = this.uploadedFileList.indexOf(file)
|
|
114
|
+
// 从列表中移除该文件
|
|
115
|
+
this.uploadedFileList.splice(index, 1)
|
|
116
|
+
this.$emit('setFiles', this.uploadedFileList.filter(item => item.status === 'done').map(item => item.id))
|
|
117
|
+
return true
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
</script>
|
|
122
|
+
<style lang="less" scoped>
|
|
123
|
+
|
|
124
|
+
</style>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import Upload from './Upload'
|
|
2
|
-
|
|
3
|
-
export default Upload
|
|
1
|
+
import Upload from './Upload'
|
|
2
|
+
|
|
3
|
+
export default Upload
|
|
@@ -25,20 +25,9 @@
|
|
|
25
25
|
:disabled="itemDisabled(item)"
|
|
26
26
|
:xl="12"
|
|
27
27
|
:xxl="8"
|
|
28
|
+
:selectsArray="SelectsArray"
|
|
29
|
+
@selectsItemCheck="selectsItemCheck"
|
|
28
30
|
/>
|
|
29
|
-
<div v-for="group in realJsonSelectsData" :key="group[0].group">
|
|
30
|
-
<x-form-col v-for="groupItem in group" :key="groupItem.group + groupItem.groupIndex" :xl="12" :xxl="8">
|
|
31
|
-
<a-form-model-item :label="groupItem.name" :disabled="itemDisabled(groupItem)">
|
|
32
|
-
<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="请选择">
|
|
33
|
-
<template v-for="option in SelectsArray[groupItem.group][groupItem.groupIndex]">
|
|
34
|
-
<a-select-option :key="option.label" :value="option.value">
|
|
35
|
-
{{ option.label }}
|
|
36
|
-
</a-select-option>
|
|
37
|
-
</template>
|
|
38
|
-
</a-select>
|
|
39
|
-
</a-form-model-item>
|
|
40
|
-
</x-form-col>
|
|
41
|
-
</div>
|
|
42
31
|
</a-row>
|
|
43
32
|
</a-form-model>
|
|
44
33
|
</div>
|
|
@@ -62,7 +51,7 @@ export default {
|
|
|
62
51
|
// 表单Model
|
|
63
52
|
form: undefined,
|
|
64
53
|
// 多层下拉框组 数据储存
|
|
65
|
-
SelectsArray: {},
|
|
54
|
+
SelectsArray: { },
|
|
66
55
|
// 多层下拉框组 各组数量
|
|
67
56
|
SelectsNumber: {},
|
|
68
57
|
// 校验
|
|
@@ -78,35 +67,7 @@ export default {
|
|
|
78
67
|
// 过滤出用于新增/修改场景的表单项
|
|
79
68
|
realJsonData: function () {
|
|
80
69
|
return this.jsonData.filter(function (item) {
|
|
81
|
-
return item.addOrEdit && item.addOrEdit !== 'no' &&
|
|
82
|
-
item.addOrEdit !== 'silenceAdd' && !item.group && item.addOrEdit !== 'version'
|
|
83
|
-
})
|
|
84
|
-
},
|
|
85
|
-
// 过滤出多个下拉框分组级联得数据
|
|
86
|
-
realJsonSelectsData: function () {
|
|
87
|
-
const Selectsata = this.jsonData.filter(item => !item.isOnlyAddOrEdit && item.group)
|
|
88
|
-
const groupName = [...new Set(Selectsata.map(item => item.group))]
|
|
89
|
-
// 初始化数据组
|
|
90
|
-
groupName.forEach(item => {
|
|
91
|
-
this.SelectsArray[item] = []
|
|
92
|
-
})
|
|
93
|
-
return groupName.map(groupName => {
|
|
94
|
-
const SelectsItem = Selectsata.filter(item => {
|
|
95
|
-
if (item.groupIndex === 1) {
|
|
96
|
-
if (item.keyName.substring(0, 6) === 'logic@') {
|
|
97
|
-
// 请求logic
|
|
98
|
-
post('/webmeterapi/' + item.keyName.substring(6), {}).then(res => {
|
|
99
|
-
this.SelectsArray[item.group][item.groupIndex] = res
|
|
100
|
-
})
|
|
101
|
-
} else {
|
|
102
|
-
this.SelectsArray[item.group][item.groupIndex] = JSON.parse(item.keyName)
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return item.group === groupName
|
|
106
|
-
}
|
|
107
|
-
)
|
|
108
|
-
this.SelectsNumber[groupName] = SelectsItem.length ? SelectsItem.length : 0
|
|
109
|
-
return SelectsItem
|
|
70
|
+
return item.addOrEdit && item.addOrEdit !== 'no' && item.addOrEdit !== 'silenceAdd' && item.addOrEdit !== 'version'
|
|
110
71
|
})
|
|
111
72
|
},
|
|
112
73
|
// 过滤出用于静默新增场景的表单项
|
|
@@ -173,15 +134,46 @@ export default {
|
|
|
173
134
|
visible (rel) {
|
|
174
135
|
if (rel) {
|
|
175
136
|
this.formItemLoad()
|
|
137
|
+
this.getSelectsArray()
|
|
176
138
|
}
|
|
177
139
|
}
|
|
178
140
|
},
|
|
179
|
-
|
|
141
|
+
created () {
|
|
180
142
|
this.formItemLoad()
|
|
143
|
+
this.getSelectsArray()
|
|
181
144
|
},
|
|
182
145
|
methods: {
|
|
183
|
-
|
|
146
|
+
// 初始化级联框数据
|
|
147
|
+
getSelectsArray () {
|
|
148
|
+
const selectSate = this.jsonData.filter(item => !item.isOnlyAddOrEdit && item.group)
|
|
149
|
+
const groupName = [...new Set(selectSate.map(item => item.group))]
|
|
150
|
+
// 初始化数据组
|
|
151
|
+
groupName.forEach(groupName => {
|
|
152
|
+
this.SelectsArray[groupName] = []
|
|
153
|
+
const SelectsItem = selectSate.filter(item => {
|
|
154
|
+
if (item.groupIndex === 1) {
|
|
155
|
+
if (item.keyName.substring(0, 6) === 'logic@') {
|
|
156
|
+
// 请求logic
|
|
157
|
+
post('/webmeterapi/' + item.keyName.substring(6), {}).then(res => {
|
|
158
|
+
this.SelectsArray[item.group][item.groupIndex] = res
|
|
159
|
+
this.SelectsArray = JSON.parse(JSON.stringify(this.SelectsArray))
|
|
160
|
+
})
|
|
161
|
+
} else {
|
|
162
|
+
this.SelectsArray[item.group][item.groupIndex] = JSON.parse(item.keyName)
|
|
163
|
+
this.SelectsArray = JSON.parse(JSON.stringify(this.SelectsArray))
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return item.group === groupName
|
|
167
|
+
}
|
|
168
|
+
)
|
|
169
|
+
this.SelectsNumber[groupName] = SelectsItem.length ? SelectsItem.length : 0
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
this.loaded = true
|
|
173
|
+
},
|
|
174
|
+
selectsItemCheck (callback, groupName, index, value) {
|
|
184
175
|
const tem = { }
|
|
176
|
+
const group = this.realJsonData.filter(item => item.addOrEdit && item.group && item.group === groupName)
|
|
185
177
|
// 获取当前下拉框子下拉框的数据
|
|
186
178
|
this.SelectsArray[groupName][index + 1] = this.SelectsArray[groupName][index].filter(item => item.value === value)[0].children
|
|
187
179
|
// 清空子下拉框的子们的数据
|
|
@@ -193,6 +185,7 @@ export default {
|
|
|
193
185
|
for (let i = index + 2; i <= this.SelectsNumber[groupName]; i++) {
|
|
194
186
|
this.SelectsArray[groupName][i] = []
|
|
195
187
|
}
|
|
188
|
+
callback(this.SelectsArray)
|
|
196
189
|
},
|
|
197
190
|
formItemLoad () {
|
|
198
191
|
const formData = Object.assign({}, this.fixedAddForm)
|
|
@@ -262,7 +255,6 @@ export default {
|
|
|
262
255
|
if (Object.keys(this.modifyModelData).length > 0) {
|
|
263
256
|
this.getModifyModelData()
|
|
264
257
|
}
|
|
265
|
-
this.loaded = true
|
|
266
258
|
},
|
|
267
259
|
itemDisabled (value) {
|
|
268
260
|
return (this.businessType === '新增' && value.addOrEdit === 'edit') ||
|