three-trees-ui 1.0.53 → 1.0.55

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,6 +1,6 @@
1
1
  {
2
2
  "name": "three-trees-ui",
3
- "version": "1.0.53",
3
+ "version": "1.0.55",
4
4
  "publicPath": "/ui",
5
5
  "author": "hotent",
6
6
  "private": false,
@@ -0,0 +1,7 @@
1
+ import DataLists from './src/main.vue'
2
+
3
+ DataLists.install = function(Vue) {
4
+ Vue.component(DataLists.name, DataLists)
5
+ }
6
+
7
+ export default DataLists
@@ -0,0 +1,117 @@
1
+ <template>
2
+ <div v-if="permission != 'n'" class="ht-data-lists">
3
+ <div class="column-content">
4
+ <el-tabs
5
+ v-if="tabPaneList.length > 1"
6
+ v-model="activeName"
7
+ @tab-click="handleTabClick"
8
+ >
9
+ <el-tab-pane
10
+ v-for="item in tabPaneList"
11
+ :key="item.dataTemplateKey"
12
+ :name="item.dataTemplateKey"
13
+ >
14
+ <span slot="label">{{ item.name }}</span>
15
+ </el-tab-pane>
16
+ </el-tabs>
17
+ <div
18
+ v-if="tabPaneList && tabPaneList.length == 1"
19
+ class="ht-data-lists-title"
20
+ >
21
+ {{ tabPaneList[0].name }}
22
+ </div>
23
+ <div class="table-wrap" :class="{ 'no-tabs': tabPaneList.length <= 1 }">
24
+ <ht-query-sql-preview
25
+ :key="viewId"
26
+ :view-id="viewId"
27
+ :query-view-options="queryViewOptions"
28
+ :show-query-view-name="false"
29
+ ></ht-query-sql-preview>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </template>
34
+ <script>
35
+ import permission from '@/mixins/permission.js'
36
+ export default {
37
+ name: 'HtDataLists',
38
+ mixins: [permission],
39
+ props: {
40
+ pageSize: {
41
+ type: Number,
42
+ default: 10,
43
+ },
44
+ options: {
45
+ type: String,
46
+ },
47
+ },
48
+ data() {
49
+ return {
50
+ tabPaneList: [],
51
+ activeName: '',
52
+ viewId: '',
53
+ queryViewOptions: {},
54
+ }
55
+ },
56
+ watch: {
57
+ options: {
58
+ handler(val) {
59
+ debugger
60
+ if (val) {
61
+ this.tabPaneList = JSON.parse(val)
62
+ this.activeName = this.tabPaneList[0].dataTemplateKey
63
+ this.viewId = this.tabPaneList[0].dataTemplateId
64
+ this.queryViewOptions = this.tabPaneList[0].bindOptions
65
+ }
66
+ },
67
+ immediate: true,
68
+ deep: true,
69
+ },
70
+ },
71
+ methods: {
72
+ handleTabClick() {
73
+ let data = this.tabPaneList.filter((item) => {
74
+ return item.dataTemplateKey === this.activeName
75
+ })
76
+ this.viewId = data[0].dataTemplateId
77
+ this.queryView = data[0].bindOptions
78
+ },
79
+ },
80
+ }
81
+ </script>
82
+
83
+ <style lang="scss" scoped>
84
+ .ht-data-lists {
85
+ .el-tabs {
86
+ padding: 24px 0;
87
+ .el-tabs__content {
88
+ padding: 0;
89
+ }
90
+ }
91
+ .el-tabs__header {
92
+ margin: 0;
93
+ .el-tabs__nav-wrap::after {
94
+ height: 0px;
95
+ background: #eeeeee;
96
+ }
97
+ .el-tabs__item {
98
+ font-size: 14px;
99
+ }
100
+ }
101
+ .no-tabs {
102
+ padding: 24px 0;
103
+ }
104
+ .el-tabs__header {
105
+ margin: 0;
106
+ }
107
+ ::v-deep .is-vertical {
108
+ border: none !important;
109
+ }
110
+ .ht-data-lists-title {
111
+ font-size: 16px;
112
+ font-weight: 550;
113
+ color: #262626;
114
+ margin-top: 24px;
115
+ }
116
+ }
117
+ </style>
@@ -9,6 +9,7 @@
9
9
  :alias="alias"
10
10
  :single="single"
11
11
  :query-view="queryView"
12
+ :query-view-options="queryViewOptions"
12
13
  class="data-preview-wrap"
13
14
  />
14
15
  </template>
@@ -20,13 +21,14 @@
20
21
  <script>
21
22
  import Vue from 'vue'
22
23
  import querySqlPreview from '@/mixins/querySqlPreview.js'
23
- export default {
24
+ export default {
24
25
  name: 'HtQuerySqlPreview',
25
26
  props: {
26
27
  viewId: {
27
28
  type: String,
28
29
  default: '',
29
30
  },
31
+ queryViewOptions: Object,
30
32
  },
31
33
  data() {
32
34
  return {
@@ -77,6 +79,7 @@
77
79
  sqlAlias: String,
78
80
  alias: String,
79
81
  queryView: Object,
82
+ queryViewOptions: Object,
80
83
  },
81
84
  data() {
82
85
  return {}
@@ -160,4 +163,4 @@
160
163
  font-weight: bold;
161
164
  color: #f56c6c;
162
165
  }
163
- </style>
166
+ </style>
@@ -47,6 +47,33 @@
47
47
  }
48
48
  },
49
49
  methods: {
50
+ // 配置的数据字典 导出时翻译为汉字
51
+ changeDictionary(data) {
52
+ return new Promise(async (resolve, reject) => {
53
+ for (let i = 0; i < data.length; i++) {
54
+ for (let j = 0; j < this.columns.length; j++) {
55
+ if (
56
+ data[i][this.columns[j].name] &&
57
+ this.columns[j].ctrlType == 'dic' &&
58
+ this.columns[j].alias
59
+ ) {
60
+ let result = await this.$requestConfig.getDictionaryByKey(
61
+ this.columns[j].alias
62
+ )
63
+ if (result) {
64
+ let dictionary = result.find((item) => {
65
+ return item.key == data[i][this.columns[j].name]
66
+ })
67
+ if (dictionary) {
68
+ data[i][this.columns[j].name] = dictionary.name
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ resolve()
75
+ })
76
+ },
50
77
  changeRowKey(rows) {
51
78
  var exportData = []
52
79
  rows.forEach((row) => {
@@ -68,7 +95,10 @@
68
95
  pInst,
69
96
  this.subtablePagination
70
97
  )
71
- .then((data) => {
98
+ .then(async (data) => {
99
+ data = JSON.parse(JSON.stringify(data))
100
+ // 导出时 字典转换
101
+ await this.changeDictionary(data)
72
102
  let exportData = this.changeRowKey(data)
73
103
  const sheet = this.$XLSX.utils.json_to_sheet(exportData),
74
104
  blob = this.sheet2blob(sheet)
@@ -115,6 +115,7 @@
115
115
  { mode: 'override', desc: '覆盖导入' },
116
116
  { mode: 'merge', desc: '合并导入', disabled: true },
117
117
  ],
118
+ cacheDicData: {}, // 缓存字典数据
118
119
  }
119
120
  },
120
121
  computed: {
@@ -172,6 +173,44 @@
172
173
  SubPagination.clear(this.dataSubname)
173
174
  },
174
175
  methods: {
176
+ changeDictionary(data) {
177
+ return new Promise(async (resolve) => {
178
+ for (let i = 0; i < data.length; i++) {
179
+ for (let j = 0; j < this.columns.length; j++) {
180
+ if (
181
+ data[i][this.columns[j].name] &&
182
+ this.columns[j].ctrlType == 'dic' &&
183
+ this.columns[j].alias
184
+ ) {
185
+ // 将数据缓存,如果相同别名就不去请求字典数据
186
+ let result = null
187
+ if (this.cacheDicData[this.columns[j].alias]) {
188
+ result = this.cacheDicData[this.columns[j].alias]
189
+ } else {
190
+ result = await this.$requestConfig.getDictionaryByKey(
191
+ this.columns[j].alias
192
+ )
193
+ }
194
+ if (result) {
195
+ this.cacheDicData[this.columns[j].alias] = result
196
+ let dictionary = result.find((item) => {
197
+ return (
198
+ item.name == data[i][this.columns[j].name] ||
199
+ item.key == data[i][this.columns[j].name]
200
+ )
201
+ })
202
+ if (dictionary) {
203
+ data[i][this.columns[j].name] = dictionary.key
204
+ } else {
205
+ data[i][this.columns[j].name] = ''
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+ resolve(data)
212
+ })
213
+ },
175
214
  //子表模板导出
176
215
  exportFormSub() {
177
216
  let columns = this.columns.filter((item) => {
@@ -211,7 +250,7 @@
211
250
  })
212
251
  return importRows
213
252
  },
214
- dialogConfirm() {
253
+ async dialogConfirm() {
215
254
  if (this.importRows.length == 0) {
216
255
  this.$message.error('请选择要导入的文件')
217
256
  return
@@ -250,9 +289,10 @@
250
289
  }
251
290
  }
252
291
  }
292
+ let importRows = await this.changeDictionary(this.importRows)
253
293
  SubPagination.importData(
254
294
  this.dataSubname,
255
- this.importRows,
295
+ importRows,
256
296
  this.mode,
257
297
  this.mergeFunc
258
298
  )
package/src/index.js CHANGED
@@ -83,6 +83,7 @@ import HtChart from '../packages/Chart/index'
83
83
  import HtMap from '../packages/Map/index'
84
84
  import HtQrcode from '../packages/Qrcode/index'
85
85
  import HtDataView from '../packages/DataView/index'
86
+ import HtDataLists from '../packages/DataLists/index'
86
87
  import HtRelevantFlow from '../packages/RelevantFlow/index'
87
88
  import HtMilepost from '../packages/Milepost/index'
88
89
  import HtText from '../packages/Text/index'
@@ -199,6 +200,7 @@ const HotentUi = {
199
200
  HtMap,
200
201
  HtQrcode,
201
202
  HtDataView,
203
+ HtDataLists,
202
204
  HtTemplatePreview,
203
205
  HtTemplatePreviewFile,
204
206
  HtTemplatePreviewImage,
@@ -105,6 +105,9 @@ export default {
105
105
  if (newOne.id_) {
106
106
  delete newOne.id_
107
107
  }
108
+ if (newOne.id) {
109
+ delete newOne.id
110
+ }
108
111
  if (newOne.sub_row_readonly) {
109
112
  delete newOne.sub_row_readonly
110
113
  }
@@ -116,8 +116,76 @@ export default {
116
116
  },
117
117
  immediate: true,
118
118
  },
119
+ queryViewOptions: {
120
+ handler(newVal) {
121
+ this.handelBindFiledValua()
122
+ },
123
+ immediate: true,
124
+ deep: true,
125
+ },
119
126
  },
120
127
  methods: {
128
+ handelBindFiledValua() {
129
+ //数据视图控件
130
+ let _me = this
131
+ if (this.queryViewOptions) {
132
+ const pInst = utils.getOnlineFormInstance(
133
+ this.$parent.$parent.$parent.$parent
134
+ )
135
+ if (
136
+ pInst.data &&
137
+ !pInst.data[this.queryViewOptions.boDefAlias] &&
138
+ this.queryViewOptions.boDefAlias
139
+ ) {
140
+ this.queryViewOptions.boDefAlias = Object.keys(pInst.data)[0]
141
+ }
142
+ //关联查询字段
143
+ let selectList = this.queryViewOptions.selectList
144
+ if (selectList && selectList.length > 0) {
145
+ for (let i = 0; i < selectList.length; i++) {
146
+ if (selectList[i].selectField) {
147
+ const path =
148
+ 'data.' +
149
+ this.queryViewOptions.boDefAlias +
150
+ '.' +
151
+ selectList[i].selectField
152
+
153
+ let value = utils.getValueByPath(pInst, path)
154
+ //获取绑定的类型,判断是否和选择的类型一致,此处针对时间格式和字符串格式匹配的兼容处理
155
+ const selectFieldType = selectList[i].selectFieldType
156
+ const bindSelectdType = selectList[i].bindSelectdType
157
+ if (
158
+ selectFieldType &&
159
+ bindSelectdType &&
160
+ selectFieldType !== bindSelectdType
161
+ ) {
162
+ if (
163
+ bindSelectdType.includes('date') ||
164
+ selectFieldType.includes('date')
165
+ ) {
166
+ //如果不为日期格式,则给一个空字符串 isNaN(value) && !isNaN(Date.parse(value))
167
+ // 可以判断是个字符串是否是时间格式,取反则表示无法转换成字符串,则改一默认值
168
+ if (!(isNaN(value) && !isNaN(Date.parse(value)))) {
169
+ value = ''
170
+ }
171
+ }
172
+ }
173
+ selectList[i].selectValue = value
174
+
175
+ //添加监听
176
+ pInst.$watch(path, function(newVal, oldVal) {
177
+ _.debounce(() => {
178
+ if (newVal !== oldVal) {
179
+ _me.queryViewOptions.selectList[i].selectValue = newVal
180
+ _me.search()
181
+ }
182
+ }, 500)()
183
+ })
184
+ }
185
+ }
186
+ }
187
+ }
188
+ },
121
189
  filterOldSummaryValByType(type) {
122
190
  const keys = this.summaryTableData.map((item) => item.key)
123
191
  if (keys && keys.length && keys.includes(type)) {
@@ -276,18 +344,33 @@ export default {
276
344
  }
277
345
  },
278
346
  search(param, cb) {
279
- !param && (param = {})
347
+ !param && (param = {})
280
348
  param.pageBean = this.pagination
349
+ const dataTemplateQueryVo = {
350
+ queryFilter: param,
351
+ }
281
352
  //保存查询参数,用于作为导出的查询参数
353
+ if (this.queryViewOptions) {
354
+ //关联查询字段
355
+ if (
356
+ this.queryViewOptions.selectList &&
357
+ this.queryViewOptions.selectList.length > 0
358
+ ) {
359
+ dataTemplateQueryVo.selectList = this.queryViewOptions.selectList
360
+ }
361
+ }
282
362
  this.queryParam = { ...param }
283
363
  let obj = {
284
364
  sqlAlias: this.sqlAlias || this.queryView.sqlAlias,
285
365
  alias: this.alias || this.queryView.alias,
286
- param: param,
366
+ param: dataTemplateQueryVo,
287
367
  }
288
368
  this.getQuerySqlViewByPagination(obj, cb)
369
+
370
+
289
371
  },
290
372
  getQuerySqlViewByPagination(param, cb) {
373
+ debugger
291
374
  this.$requestConfig
292
375
  .getQueryViewDataList(param)
293
376
  .then((response) => {