vue2-client 1.12.63 → 1.12.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,108 +1,108 @@
1
- {
2
- "name": "vue2-client",
3
- "version": "1.12.63",
4
- "private": false,
5
- "scripts": {
6
- "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
7
- "serve:gaslink": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode gaslink",
8
- "serve:revenue": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode revenue",
9
- "serve:liuli": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode liuli",
10
- "serve:scada": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode scada",
11
- "serve:iot": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode iot",
12
- "serve:his": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode his",
13
- "mac-serve": "vue-cli-service serve --no-eslint --mode his",
14
- "build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
15
- "test:unit": "vue-cli-service test:unit",
16
- "lint": "vue-cli-service lint",
17
- "build:preview": "vue-cli-service build --mode preview",
18
- "lint:nofix": "vue-cli-service lint --no-fix",
19
- "test": "jest"
20
- },
21
- "dependencies": {
22
- "@afwenming123/vue-easy-tree": "^1.0.1",
23
- "@afwenming123/vue-plugin-hiprint": "^0.0.70",
24
- "@amap/amap-jsapi-loader": "^1.0.1",
25
- "@antv/data-set": "^0.11.8",
26
- "@antv/g2plot": "^2.4.31",
27
- "@hufe921/canvas-editor": "^0.9.49",
28
- "@microsoft/fetch-event-source": "^2.0.1",
29
- "@vue/babel-preset-jsx": "^1.4.0",
30
- "animate.css": "^4.1.1",
31
- "ant-design-vue": "^1.7.8",
32
- "axios": "^0.27.2",
33
- "clipboard": "^2.0.11",
34
- "core-js": "^3.33.0",
35
- "crypto-js": "^4.1.1",
36
- "date-fns": "^2.29.3",
37
- "default-passive-events": "^2.0.0",
38
- "dotenv": "^16.3.1",
39
- "echarts": "^5.5.0",
40
- "enquire.js": "^2.1.6",
41
- "file-saver": "^2.0.5",
42
- "highlight.js": "^11.7.0",
43
- "html2canvas": "^1.4.1",
44
- "js-base64": "^3.7.5",
45
- "js-cookie": "^2.2.1",
46
- "jsencrypt": "^3.3.2",
47
- "jspdf": "^2.5.1",
48
- "lodash.clonedeep": "^4.5.0",
49
- "lodash.debounce": "^4",
50
- "lodash.get": "^4.4.2",
51
- "marked": "^4",
52
- "mockjs": "^1.1.0",
53
- "nprogress": "^0.2.0",
54
- "qs": "^6.11.2",
55
- "regenerator-runtime": "^0.14.0",
56
- "videojs-contrib-hls": "^5.15.0",
57
- "viser-vue": "^2.4.8",
58
- "vue": "^2.7.14",
59
- "vue-codemirror": "4.0.6",
60
- "vue-draggable-resizable": "^2",
61
- "vue-i18n": "^8.28.2",
62
- "vue-json-viewer": "^2.2.22",
63
- "vue-router": "^3.6.5",
64
- "vue-video-player": "^5.0.2",
65
- "vue-virtual-scroller": "^1.1.2",
66
- "vuedraggable": "^2.24.3",
67
- "vuex": "^3.6.2",
68
- "xlsx": "0.18.5"
69
- },
70
- "devDependencies": {
71
- "@ant-design/colors": "^7.0.0",
72
- "@babel/core": "^7.22.20",
73
- "@babel/eslint-parser": "^7.22.15",
74
- "@babel/preset-env": "^7.22.20",
75
- "@vue/cli-plugin-babel": "^5.0.8",
76
- "@vue/cli-plugin-eslint": "^5.0.8",
77
- "@vue/cli-service": "^5.0.8",
78
- "@vue/eslint-config-standard": "^8.0.1",
79
- "@vue/test-utils": "^1.3.6",
80
- "@jest/globals": "^29.7.0",
81
- "babel-plugin-transform-remove-console": "^6.9.4",
82
- "compression-webpack-plugin": "^10.0.0",
83
- "css-minimizer-webpack-plugin": "^5.0.1",
84
- "deepmerge": "^4.3.1",
85
- "eslint": "^8.51.0",
86
- "eslint-plugin-vue": "^9.17.0",
87
- "fast-deep-equal": "^3.1.3",
88
- "ignore-loader": "^0.1.2",
89
- "jest": "^29.7.0",
90
- "jest-environment-jsdom": "^29.7.0",
91
- "jest-transform-stub": "^2.0.0",
92
- "less-loader": "^6.2.0",
93
- "script-loader": "^0.7.2",
94
- "style-resources-loader": "^1.5.0",
95
- "vue-cli-plugin-style-resources-loader": "^0.1.5",
96
- "vue-jest": "^4.0.1",
97
- "vue-template-compiler": "^2.7.14",
98
- "webpack": "^5.88.2",
99
- "webpack-theme-color-replacer": "^1.4.7",
100
- "whatwg-fetch": "^3.6.19"
101
- },
102
- "browserslist": [
103
- "> 1%",
104
- "last 2 versions",
105
- "not dead",
106
- "not ie 11"
107
- ]
108
- }
1
+ {
2
+ "name": "vue2-client",
3
+ "version": "1.12.65",
4
+ "private": false,
5
+ "scripts": {
6
+ "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
7
+ "serve:gaslink": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode gaslink",
8
+ "serve:revenue": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode revenue",
9
+ "serve:liuli": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode liuli",
10
+ "serve:scada": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode scada",
11
+ "serve:iot": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode iot",
12
+ "serve:his": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint --mode his",
13
+ "mac-serve": "vue-cli-service serve --no-eslint --mode his",
14
+ "build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
15
+ "test:unit": "vue-cli-service test:unit",
16
+ "lint": "vue-cli-service lint",
17
+ "build:preview": "vue-cli-service build --mode preview",
18
+ "lint:nofix": "vue-cli-service lint --no-fix",
19
+ "test": "jest"
20
+ },
21
+ "dependencies": {
22
+ "@afwenming123/vue-easy-tree": "^1.0.1",
23
+ "@afwenming123/vue-plugin-hiprint": "^0.0.70",
24
+ "@amap/amap-jsapi-loader": "^1.0.1",
25
+ "@antv/data-set": "^0.11.8",
26
+ "@antv/g2plot": "^2.4.31",
27
+ "@hufe921/canvas-editor": "^0.9.49",
28
+ "@microsoft/fetch-event-source": "^2.0.1",
29
+ "@vue/babel-preset-jsx": "^1.4.0",
30
+ "animate.css": "^4.1.1",
31
+ "ant-design-vue": "^1.7.8",
32
+ "axios": "^0.27.2",
33
+ "clipboard": "^2.0.11",
34
+ "core-js": "^3.33.0",
35
+ "crypto-js": "^4.1.1",
36
+ "date-fns": "^2.29.3",
37
+ "default-passive-events": "^2.0.0",
38
+ "dotenv": "^16.3.1",
39
+ "echarts": "^5.5.0",
40
+ "enquire.js": "^2.1.6",
41
+ "file-saver": "^2.0.5",
42
+ "highlight.js": "^11.7.0",
43
+ "html2canvas": "^1.4.1",
44
+ "js-base64": "^3.7.5",
45
+ "js-cookie": "^2.2.1",
46
+ "jsencrypt": "^3.3.2",
47
+ "jspdf": "^2.5.1",
48
+ "lodash.clonedeep": "^4.5.0",
49
+ "lodash.debounce": "^4",
50
+ "lodash.get": "^4.4.2",
51
+ "marked": "^4",
52
+ "mockjs": "^1.1.0",
53
+ "nprogress": "^0.2.0",
54
+ "qs": "^6.11.2",
55
+ "regenerator-runtime": "^0.14.0",
56
+ "videojs-contrib-hls": "^5.15.0",
57
+ "viser-vue": "^2.4.8",
58
+ "vue": "^2.7.14",
59
+ "vue-codemirror": "4.0.6",
60
+ "vue-draggable-resizable": "^2",
61
+ "vue-i18n": "^8.28.2",
62
+ "vue-json-viewer": "^2.2.22",
63
+ "vue-router": "^3.6.5",
64
+ "vue-video-player": "^5.0.2",
65
+ "vue-virtual-scroller": "^1.1.2",
66
+ "vuedraggable": "^2.24.3",
67
+ "vuex": "^3.6.2",
68
+ "xlsx": "0.18.5"
69
+ },
70
+ "devDependencies": {
71
+ "@ant-design/colors": "^7.0.0",
72
+ "@babel/core": "^7.22.20",
73
+ "@babel/eslint-parser": "^7.22.15",
74
+ "@babel/preset-env": "^7.22.20",
75
+ "@vue/cli-plugin-babel": "^5.0.8",
76
+ "@vue/cli-plugin-eslint": "^5.0.8",
77
+ "@vue/cli-service": "^5.0.8",
78
+ "@vue/eslint-config-standard": "^8.0.1",
79
+ "@vue/test-utils": "^1.3.6",
80
+ "@jest/globals": "^29.7.0",
81
+ "babel-plugin-transform-remove-console": "^6.9.4",
82
+ "compression-webpack-plugin": "^10.0.0",
83
+ "css-minimizer-webpack-plugin": "^5.0.1",
84
+ "deepmerge": "^4.3.1",
85
+ "eslint": "^8.51.0",
86
+ "eslint-plugin-vue": "^9.17.0",
87
+ "fast-deep-equal": "^3.1.3",
88
+ "ignore-loader": "^0.1.2",
89
+ "jest": "^29.7.0",
90
+ "jest-environment-jsdom": "^29.7.0",
91
+ "jest-transform-stub": "^2.0.0",
92
+ "less-loader": "^6.2.0",
93
+ "script-loader": "^0.7.2",
94
+ "style-resources-loader": "^1.5.0",
95
+ "vue-cli-plugin-style-resources-loader": "^0.1.5",
96
+ "vue-jest": "^4.0.1",
97
+ "vue-template-compiler": "^2.7.14",
98
+ "webpack": "^5.88.2",
99
+ "webpack-theme-color-replacer": "^1.4.7",
100
+ "whatwg-fetch": "^3.6.19"
101
+ },
102
+ "browserslist": [
103
+ "> 1%",
104
+ "last 2 versions",
105
+ "not dead",
106
+ "not ie 11"
107
+ ]
108
+ }
@@ -134,6 +134,9 @@ export default {
134
134
  })
135
135
  })
136
136
  },
137
+ refreshXCollapse () {
138
+ this.getData(this.queryParamsName)
139
+ },
137
140
  handleChange (keys) {
138
141
  this.activeKey = keys
139
142
  },
@@ -0,0 +1,267 @@
1
+ <template>
2
+ <div class="x-input-wrapper" v-click-outside="handleClickOutside">
3
+ <!-- 输入框部分 -->
4
+ <a-input
5
+ v-model="innerValue"
6
+ v-bind="$attrs"
7
+ :placeholder="config?.placeholder"
8
+ :size="config?.size"
9
+ :maxLength="config?.maxLength"
10
+ :disabled="config?.disabled"
11
+ :allowClear="config?.allowClear"
12
+ @change="handleChange"
13
+ @pressEnter="handlePressEnter"
14
+ @focus="handleFocus"
15
+ >
16
+ <template v-if="config?.prefix" #prefix>
17
+ <a-icon :type="config.prefix" @click="handlePrefixClick" class="clickable-icon" />
18
+ </template>
19
+ <template v-if="config?.suffix" #suffix>
20
+ <a-icon :type="config.suffix" @click="handleSuffixClick" class="clickable-icon" />
21
+ </template>
22
+ </a-input>
23
+
24
+ <!-- 搜索结果列表 -->
25
+ <div v-if="isListVisible" class="search-list">
26
+ <a-list
27
+ v-if="searchList.length > 0"
28
+ size="small"
29
+ bordered
30
+ >
31
+ <a-list-item
32
+ v-for="item in searchList"
33
+ :key="item.id"
34
+ @click="handleSelect(item)"
35
+ >
36
+ <div class="item-content">
37
+ <span class="item-name">{{ item.name }}</span>
38
+ <span class="item-code">{{ item.code }}</span>
39
+ </div>
40
+ </a-list-item>
41
+ </a-list>
42
+ <div v-else class="empty-data">
43
+ <a-empty :image="simpleImage" :description="'暂无数据'" />
44
+ </div>
45
+ </div>
46
+ </div>
47
+ </template>
48
+
49
+ <script>
50
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
51
+ import debounce from 'lodash/debounce'
52
+ import { Empty } from 'ant-design-vue'
53
+
54
+ // 自定义指令:点击外部关闭
55
+ const clickOutside = {
56
+ bind (el, binding) {
57
+ el.__vueClickOutside__ = function (event) {
58
+ if (!(el === event.target || el.contains(event.target))) {
59
+ binding.value(event)
60
+ }
61
+ }
62
+ document.body.addEventListener('click', el.__vueClickOutside__)
63
+ },
64
+ unbind (el) {
65
+ document.body.removeEventListener('click', el.__vueClickOutside__)
66
+ delete el.__vueClickOutside__
67
+ }
68
+ }
69
+
70
+ export default {
71
+ name: 'XInput',
72
+ inheritAttrs: false,
73
+ directives: {
74
+ 'click-outside': clickOutside
75
+ },
76
+ props: {
77
+ value: {
78
+ type: [String, Number],
79
+ default: ''
80
+ },
81
+ queryParamsName: {
82
+ type: String,
83
+ default: 'inputTestConfig'
84
+ }
85
+ },
86
+ data () {
87
+ return {
88
+ innerValue: this.value,
89
+ config: null,
90
+ searchList: [],
91
+ isListVisible: false,
92
+ simpleImage: Empty.PRESENTED_IMAGE_SIMPLE
93
+ }
94
+ },
95
+ created () {
96
+ this.getData(this.queryParamsName)
97
+ this.debouncedSearch = debounce(this.handleSearch, 300)
98
+ },
99
+ methods: {
100
+ async getData (data) {
101
+ getConfigByName(data, 'af-his', res => {
102
+ console.warn(res)
103
+ this.config = res
104
+ if (res.defaultValue !== undefined) {
105
+ this.innerValue = res.defaultValue
106
+ // 当配置中有默认值时,向父组件同步默认值
107
+ this.$emit('input', res.defaultValue)
108
+ }
109
+ if (res.logicName) {
110
+ runLogic(res.logicName, res.parameter, 'af-his').then(result => {
111
+ if (result) {
112
+ this.handleLogicResult(result)
113
+ }
114
+ })
115
+ }
116
+ })
117
+ },
118
+ handleChange (e) {
119
+ const value = e.target.value
120
+ // 双向绑定:将输入框的值同步给父组件
121
+ this.$emit('input', value)
122
+ // 发送change事件:当输入框值变化时触发,携带原生事件对象
123
+ this.$emit('change', e)
124
+ this.debouncedSearch(value)
125
+ },
126
+ handlePressEnter (e) {
127
+ // 发送回车事件:当用户按下回车键时触发
128
+ this.$emit('pressEnter', e)
129
+ this.handleSearch(e.target.value)
130
+ },
131
+ handleFocus () {
132
+ this.isListVisible = true
133
+ // 当获取焦点时,如果输入框为空,显示所有数据
134
+ if (!this.innerValue) {
135
+ this.handleSearch('')
136
+ }
137
+ },
138
+ handleClickOutside () {
139
+ this.isListVisible = false
140
+ },
141
+ async handleSearch (value) {
142
+ if (!this.config?.searchConfig?.logicName) return
143
+
144
+ try {
145
+ // 调用后端搜索接口
146
+ const result = await runLogic(
147
+ this.config.searchConfig.logicName,
148
+ {
149
+ ...this.config.searchConfig.parameter,
150
+ searchValue: value
151
+ },
152
+ 'af-his'
153
+ )
154
+
155
+ if (result) {
156
+ // 更新搜索结果列表
157
+ this.searchList = result || []
158
+ console.warn(result)
159
+ // 发送搜索结果
160
+ this.$emit('search-result', result)
161
+ }
162
+ } catch (error) {
163
+ console.error('搜索失败:', error)
164
+ this.searchList = []
165
+ }
166
+ },
167
+ handlePrefixClick (e) {
168
+ e.stopPropagation()
169
+ // 发送前缀图标点击事件:当用户点击输入框前缀图标时触发
170
+ this.$emit('prefix-click', this.innerValue)
171
+ this.handleSearch(this.innerValue)
172
+ },
173
+ handleSuffixClick (e) {
174
+ e.stopPropagation()
175
+ // 发送后缀图标点击事件:当用户点击输入框后缀图标时触发
176
+ this.$emit('suffix-click', this.innerValue)
177
+ this.handleSearch(this.innerValue)
178
+ },
179
+ handleLogicResult (result) {
180
+ if (result.value !== undefined) {
181
+ this.innerValue = result.value
182
+ // 发送输入值:当逻辑处理返回新值时,同步给父组件
183
+ this.$emit('input', result.value)
184
+ }
185
+ },
186
+ handleSelect (item) {
187
+ this.innerValue = item.name
188
+ this.searchList = [] // 清空列表
189
+ this.isListVisible = false // 选择后关闭列表
190
+ // 发送选中项的名称:用于更新输入框的值
191
+ this.$emit('input', item.name)
192
+ // 发送选中事件:当用户从搜索结果列表中选择一项时触发,携带完整的选中项数据
193
+ this.$emit('select', item)
194
+ }
195
+ },
196
+ watch: {
197
+ value: {
198
+ handler (newValue) {
199
+ this.innerValue = newValue
200
+ },
201
+ immediate: true
202
+ },
203
+ queryParamsName: {
204
+ handler (newValue) {
205
+ this.getData(newValue)
206
+ },
207
+ deep: true
208
+ }
209
+ },
210
+ beforeDestroy () {
211
+ this.debouncedSearch.cancel()
212
+ }
213
+ }
214
+ </script>
215
+
216
+ <style scoped>
217
+ .x-input-wrapper {
218
+ position: relative;
219
+ display: inline-block;
220
+ width: 100%;
221
+ }
222
+
223
+ .search-list {
224
+ position: absolute;
225
+ top: 100%;
226
+ left: 0;
227
+ width: 100%;
228
+ max-height: 300px;
229
+ overflow-y: auto;
230
+ background: #fff;
231
+ z-index: 1000;
232
+ margin-top: 4px;
233
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
234
+ }
235
+
236
+ .item-content {
237
+ display: flex;
238
+ justify-content: space-between;
239
+ width: 100%;
240
+ padding: 8px 12px;
241
+ cursor: pointer;
242
+ }
243
+
244
+ .item-content:hover {
245
+ background-color: #f5f5f5;
246
+ }
247
+
248
+ .item-code {
249
+ color: rgba(0, 0, 0, 0.45);
250
+ font-size: 12px;
251
+ }
252
+
253
+ :deep(.clickable-icon) {
254
+ cursor: pointer;
255
+ }
256
+
257
+ :deep(.clickable-icon:hover) {
258
+ color: #1890ff;
259
+ }
260
+ .empty-data {
261
+ padding: 16px;
262
+ text-align: center;
263
+ background: #fff;
264
+ border: 1px solid #d9d9d9;
265
+ border-radius: 2px;
266
+ }
267
+ </style>
@@ -0,0 +1,3 @@
1
+ import XInput from './XInput'
2
+
3
+ export default XInput