three-trees-ui 1.0.98 → 1.1.0

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.
@@ -16,23 +16,33 @@
16
16
  @click="showDialog"
17
17
  >
18
18
  <div
19
- v-if="inputWriteable"
20
- class="el-input el-input--suffix"
21
- :class="{ 'custom-selector-mobile': isMobile }"
19
+ ref="tagSpans"
20
+ style="width: calc(100% - 25px);"
21
+ :class="{
22
+ 'el-select__tags_readonly': !inputWriteable,
23
+ 'el-select__tags': inputWriteable,
24
+ }"
22
25
  >
23
- <div v-if="isMobile" class="custom-selector-mobile-box">
24
- <div
26
+ <span class="tag-wrap">
27
+ <span
25
28
  v-for="(item, index) in selectors"
26
29
  :key="index"
27
- class="common-selector-tag"
30
+ class="el-tag el-tag--info el-tag--small"
31
+ @click.stop
28
32
  >
29
- <span>{{ item.name }}</span>
30
- <i class="el-icon-error" @click.stop="handleRemove(item)"></i>
31
- </div>
32
- </div>
33
+ <span class="el-select__tags-text">{{ item.name }}</span>
34
+ <i
35
+ v-if="inputWriteable"
36
+ class="el-tag__close el-icon-close"
37
+ @click="handleRemove(item)"
38
+ ></i>
39
+ </span>
40
+ </span>
41
+ </div>
42
+ <div v-if="inputWriteable" class="el-input el-input--suffix">
33
43
  <input
34
44
  ref="inputEl"
35
- v-model="calcInputValue"
45
+ v-model="value"
36
46
  v-validate="inputValidate"
37
47
  type="text"
38
48
  readonly="readonly"
@@ -40,6 +50,10 @@
40
50
  autocomplete="off"
41
51
  class="el-input__inner"
42
52
  :placeholder="placeholder"
53
+ :style="{
54
+ height: inputSuffixHeight + 'px',
55
+ lineHeight: inputSuffixHeight + 'px',
56
+ }"
43
57
  />
44
58
  <span class="el-input__suffix">
45
59
  <span class="el-input__suffix-inner">
@@ -48,55 +62,50 @@
48
62
  </span>
49
63
  </span>
50
64
  </div>
51
- <div v-else class="el-select__tags_readonly">
52
- <span>{{ calcInputValue }}</span>
53
- </div>
54
65
  </div>
55
66
  <ht-field-tail :field-name="inputName" :input-value="value" />
56
- <template v-if="isDialogShow">
57
- <role-selector-mobile-dialog
58
- v-if="isMobile"
59
- ref="roleSelectorMobileDialog"
60
- v-model="selectors"
61
- :search-placeholder="searchPlaceholder"
62
- :single="single"
63
- :data="data"
64
- :table-columns="tableColumns"
65
- :pagination="pagination"
66
- :select-label="selectLabel"
67
- :quick-search-props="quickSearchProps"
68
- :append-to-body="appendToBody"
69
- :title="title"
70
- :primary-field="primaryField"
71
- @search="(word) => $emit('search', word)"
72
- @reset="() => $emit('reset')"
73
- @row-click="(row) => $emit('row-click', row)"
74
- @select-data="(data) => $emit('select-data', data)"
75
- @page-change="(page) => $emit('page-change', page)"
76
- />
77
- <role-selector-dialog
78
- v-else
79
- ref="roleSelectorDialog"
80
- v-model="selectors"
81
- :title="title"
82
- :append-to-body="appendToBody"
83
- :data="data"
84
- :pagination="pagination"
85
- :select-label="selectLabel"
86
- :quick-search-props="quickSearchProps"
87
- :single="single"
88
- :search-placeholder="searchPlaceholder"
89
- :primary-field="primaryField"
90
- :mode="mode"
91
- @filter-type-change="(type) => $emit('filter-type-change', type)"
92
- @search="(word) => $emit('search', word)"
93
- @reset="() => $emit('reset')"
94
- @row-click="(row) => $emit('row-click', row)"
95
- @select-data="(data) => $emit('select-data', data)"
96
- @page-change="(page) => $emit('page-change', page)"
97
- @size-change="(size) => $emit('size-change', size)"
98
- />
99
- </template>
67
+ <role-selector-mobile-dialog
68
+ v-if="isMobile"
69
+ ref="roleSelectorMobileDialog"
70
+ v-model="selectors"
71
+ :search-placeholder="searchPlaceholder"
72
+ :single="single"
73
+ :data="data"
74
+ :table-columns="tableColumns"
75
+ :pagination="pagination"
76
+ :select-label="selectLabel"
77
+ :quick-search-props="quickSearchProps"
78
+ :append-to-body="appendToBody"
79
+ :title="title"
80
+ :primary-field="primaryField"
81
+ @search="(word) => $emit('search', word)"
82
+ @reset="() => $emit('reset')"
83
+ @row-click="(row) => $emit('row-click', row)"
84
+ @select-data="(data) => $emit('select-data', data)"
85
+ @page-change="(page) => $emit('page-change', page)"
86
+ />
87
+ <role-selector-dialog
88
+ v-else
89
+ ref="roleSelectorDialog"
90
+ v-model="selectors"
91
+ :title="title"
92
+ :append-to-body="appendToBody"
93
+ :data="data"
94
+ :pagination="pagination"
95
+ :select-label="selectLabel"
96
+ :quick-search-props="quickSearchProps"
97
+ :single="single"
98
+ :search-placeholder="searchPlaceholder"
99
+ :primary-field="primaryField"
100
+ :mode="mode"
101
+ @filter-type-change="(type) => $emit('filter-type-change', type)"
102
+ @search="(word) => $emit('search', word)"
103
+ @reset="() => $emit('reset')"
104
+ @row-click="(row) => $emit('row-click', row)"
105
+ @select-data="(data) => $emit('select-data', data)"
106
+ @page-change="(page) => $emit('page-change', page)"
107
+ @size-change="(size) => $emit('size-change', size)"
108
+ />
100
109
  </div>
101
110
  </template>
102
111
  <script>
@@ -173,23 +182,11 @@
173
182
  },
174
183
  data() {
175
184
  return {
176
- isDialogShow: false,
177
185
  inputSuffixHeight: 30,
178
186
  selectors: [],
179
187
  }
180
188
  },
181
189
  computed: {
182
- calcInputValue: function() {
183
- let name = ''
184
- if (this.selectors) {
185
- name = this.selectors
186
- .map((k) => {
187
- return k.name
188
- })
189
- .join(',')
190
- }
191
- return name
192
- },
193
190
  primaryField: function() {
194
191
  return this.config && this.config.hasOwnProperty('id')
195
192
  ? 'id'
@@ -248,8 +245,14 @@
248
245
  // 通过valueChange事件发布值变更消息
249
246
  this.$emit('valueChange', ary.join(','), newVal)
250
247
  setTimeout(() => {
248
+ if (newVal.length > 0) {
249
+ this.calacInputSuffixHeight()
250
+ } else {
251
+ this.inputSuffixHeight = 30
252
+ }
251
253
  if (this.$refs.inputEl) {
252
- this.$validator.validate(this.inputName)
254
+ this.$refs.inputEl.focus()
255
+ this.$refs.inputEl.blur()
253
256
  }
254
257
  }, 10)
255
258
  },
@@ -314,14 +317,10 @@
314
317
  this.selectors = tmpAry
315
318
  }
316
319
  },
317
- async showDialog() {
320
+ showDialog() {
318
321
  if (!this.inputWriteable) {
319
322
  return
320
323
  }
321
- if (this.isDialogShow === false) {
322
- this.isDialogShow = true
323
- await this.$nextTick()
324
- }
325
324
  if (this.isMobile) {
326
325
  this.$refs.roleSelectorMobileDialog.showDialog()
327
326
  } else {
@@ -338,12 +337,12 @@
338
337
  },
339
338
  // 更新当前输入框的高度来适配已选数据的高度
340
339
  calacInputSuffixHeight() {
341
- // if (!this.$refs.tagSpans) return
342
- // if (this.$refs.tagSpans.offsetHeight) {
343
- // this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
344
- // } else {
345
- // this.inputSuffixHeight = 30
346
- // }
340
+ if (!this.$refs.tagSpans) return
341
+ if (this.$refs.tagSpans.offsetHeight) {
342
+ this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
343
+ } else {
344
+ this.inputSuffixHeight = 30
345
+ }
347
346
  },
348
347
  },
349
348
  }
@@ -354,11 +353,6 @@
354
353
  margin-left: 1px;
355
354
  }
356
355
 
357
- .el-input__inner {
358
- height: 32px;
359
- line-height: 32px;
360
- }
361
-
362
356
  .el-select__tags_readonly {
363
357
  position: relative;
364
358
  top: 50%;
@@ -493,7 +493,6 @@
493
493
  let _this = this
494
494
  _this.reloadOnlineForm = true
495
495
  setTimeout(() => {
496
- let data = this.data
497
496
  eval(rep.diyJs)
498
497
  }, 10)
499
498
  },
@@ -16,23 +16,48 @@
16
16
  @click="showDialog"
17
17
  >
18
18
  <div
19
- v-if="inputWriteable"
20
- class="el-input el-input--suffix"
21
- :class="{ 'custom-selector-mobile': isMobile }"
19
+ ref="tagSpans"
20
+ class="user-selector_block"
21
+ :class="{
22
+ 'el-select__tags_readonly': !inputWriteable,
23
+ 'el-select__tags': inputWriteable,
24
+ }"
22
25
  >
23
- <div v-if="isMobile" class="custom-selector-mobile-box">
24
- <div
26
+ <span class="tag-wrap">
27
+ <span
25
28
  v-for="(item, index) in selectors"
26
29
  :key="index"
27
- class="common-selector-tag"
30
+ class="el-tag el-tag--info el-tag--small"
31
+ @click.stop
28
32
  >
29
- <span>{{ item.fullname }}</span>
30
- <i class="el-icon-error" @click.stop="handleRemove(item)"></i>
31
- </div>
32
- </div>
33
+ <span class="el-select__tags-text">{{ item.fullname }}</span>
34
+ <i
35
+ v-if="inputWriteable"
36
+ class="el-tag__close el-icon-close"
37
+ @click.stop="handleRemove(item)"
38
+ ></i>
39
+ </span>
40
+ <template v-if="!selectors.length && value">
41
+ <span
42
+ v-for="(item, index) in value.split(',')"
43
+ :key="index"
44
+ class="el-tag el-tag--info el-tag--small"
45
+ @click.stop
46
+ >
47
+ <span class="el-select__tags-text">{{ item }}</span>
48
+ <i
49
+ v-if="inputWriteable"
50
+ class="el-tag__close el-icon-close"
51
+ @click.stop="handleRemoveText(index)"
52
+ ></i>
53
+ </span>
54
+ </template>
55
+ </span>
56
+ </div>
57
+ <div v-if="inputWriteable" class="el-input el-input--suffix">
33
58
  <input
34
59
  ref="inputEl"
35
- v-model="calcInputValue"
60
+ v-model="value"
36
61
  v-validate="inputValidate"
37
62
  type="text"
38
63
  readonly="readonly"
@@ -40,71 +65,66 @@
40
65
  autocomplete="off"
41
66
  class="el-input__inner"
42
67
  :placeholder="placeholder"
68
+ :style="{
69
+ height: inputSuffixHeight + 'px',
70
+ lineHeight: inputSuffixHeight + 'px',
71
+ }"
43
72
  />
44
73
  <span class="el-input__suffix">
45
74
  <span class="el-input__suffix-inner">
46
- <i
47
- v-if="value"
48
- class="el-icon-circle-close clear-icon"
49
- @click.stop="clear"
50
- ></i>
75
+ <i class="el-icon-circle-close clear-icon" @click.stop="clear"></i>
51
76
  <ht-icon name="user" class="user-icon" />
52
77
  </span>
53
78
  </span>
54
79
  </div>
55
- <div v-else class="el-select__tags_readonly">
56
- <span>{{ calcInputValue }}</span>
57
- </div>
58
80
  </div>
59
81
  <ht-field-tail :field-name="inputName" :input-value="value" />
60
- <template v-if="isDialogShow">
61
- <user-selector-dialog
62
- v-if="!isMobile"
63
- ref="userSelectorDialog"
64
- v-model="selectors"
65
- :title="title"
66
- :append-to-body="appendToBody"
67
- :data="data"
68
- :pagination="pagination"
69
- :select-label="selectLabel"
70
- :quick-search-props="quickSearchProps"
71
- :single="single"
72
- :search-placeholder="searchPlaceholder"
73
- :primary-field="primaryField"
74
- :mode="mode"
75
- @filter-type-change="(type) => $emit('filter-type-change', type)"
76
- @search="(word) => $emit('search', word)"
77
- @reset="() => $emit('reset')"
78
- @row-click="(row) => $emit('row-click', row)"
79
- @select-data="(data) => $emit('select-data', data)"
80
- @page-change="(page) => $emit('page-change', page)"
81
- @size-change="(size) => $emit('size-change', size)"
82
- @contact-group-change="(group) => $emit('contact-group-change', group)"
83
- @load-org-user="(org) => $emit('load-org-user', org)"
84
- @load-policy-user="(policy) => $emit('load-policy-user', policy)"
85
- @load-role-user="(role) => $emit('load-role-user', role)"
86
- />
87
- <user-selector-mobile-dialog
88
- v-else
89
- ref="userSelectorMobileDialog"
90
- v-model="selectors"
91
- :title="title"
92
- :append-to-body="appendToBody"
93
- :data="data"
94
- :pagination="pagination"
95
- :select-label="selectLabel"
96
- :quick-search-props="quickSearchProps"
97
- :single="single"
98
- :search-placeholder="searchPlaceholder"
99
- :primary-field="primaryField"
100
- @search="(word) => $emit('search', word)"
101
- @reset="() => $emit('reset')"
102
- @row-click="(row) => $emit('row-click', row)"
103
- @select-data="(data) => $emit('select-data', data)"
104
- @page-change="(page) => $emit('page-change', page)"
105
- @getCustomQuerys="(querys) => $emit('getCustomQuerys', querys)"
106
- />
107
- </template>
82
+ <user-selector-dialog
83
+ v-if="!isMobile"
84
+ ref="userSelectorDialog"
85
+ v-model="selectors"
86
+ :title="title"
87
+ :append-to-body="appendToBody"
88
+ :data="data"
89
+ :pagination="pagination"
90
+ :select-label="selectLabel"
91
+ :quick-search-props="quickSearchProps"
92
+ :single="single"
93
+ :search-placeholder="searchPlaceholder"
94
+ :primary-field="primaryField"
95
+ :mode="mode"
96
+ @filter-type-change="(type) => $emit('filter-type-change', type)"
97
+ @search="(word) => $emit('search', word)"
98
+ @reset="() => $emit('reset')"
99
+ @row-click="(row) => $emit('row-click', row)"
100
+ @select-data="(data) => $emit('select-data', data)"
101
+ @page-change="(page) => $emit('page-change', page)"
102
+ @size-change="(size) => $emit('size-change', size)"
103
+ @contact-group-change="(group) => $emit('contact-group-change', group)"
104
+ @load-org-user="(org) => $emit('load-org-user', org)"
105
+ @load-policy-user="(policy) => $emit('load-policy-user', policy)"
106
+ @load-role-user="(role) => $emit('load-role-user', role)"
107
+ />
108
+ <user-selector-mobile-dialog
109
+ v-else
110
+ ref="userSelectorMobileDialog"
111
+ v-model="selectors"
112
+ :title="title"
113
+ :append-to-body="appendToBody"
114
+ :data="data"
115
+ :pagination="pagination"
116
+ :select-label="selectLabel"
117
+ :quick-search-props="quickSearchProps"
118
+ :single="single"
119
+ :search-placeholder="searchPlaceholder"
120
+ :primary-field="primaryField"
121
+ @search="(word) => $emit('search', word)"
122
+ @reset="() => $emit('reset')"
123
+ @row-click="(row) => $emit('row-click', row)"
124
+ @select-data="(data) => $emit('select-data', data)"
125
+ @page-change="(page) => $emit('page-change', page)"
126
+ @getCustomQuerys="(querys) => $emit('getCustomQuerys', querys)"
127
+ />
108
128
  </div>
109
129
  </template>
110
130
  <script>
@@ -178,23 +198,11 @@
178
198
  },
179
199
  data() {
180
200
  return {
181
- isDialogShow: false,
182
201
  inputSuffixHeight: 30,
183
202
  selectors: [],
184
203
  }
185
204
  },
186
205
  computed: {
187
- calcInputValue: function() {
188
- let name = ''
189
- if (this.selectors) {
190
- name = this.selectors
191
- .map((k) => {
192
- return k.fullname
193
- })
194
- .join(',')
195
- }
196
- return name
197
- },
198
206
  primaryField: function() {
199
207
  return this.config && this.config.hasOwnProperty('id')
200
208
  ? 'id'
@@ -308,8 +316,14 @@
308
316
  // 通过valueChange事件发布值变更消息
309
317
  setTimeout(() => {
310
318
  this.$emit('valueChange', ary.join(','), newVal)
319
+ if (newVal.length > 0) {
320
+ this.calacInputSuffixHeight()
321
+ } else {
322
+ this.inputSuffixHeight = 30
323
+ }
311
324
  if (this.$refs.inputEl) {
312
- this.$validator.validate(this.inputName)
325
+ this.$refs.inputEl.focus()
326
+ this.$refs.inputEl.blur()
313
327
  }
314
328
  }, 10)
315
329
  },
@@ -447,14 +461,10 @@
447
461
  this.selectors = tmpAry
448
462
  }
449
463
  },
450
- async showDialog() {
464
+ showDialog() {
451
465
  if (!this.inputWriteable) {
452
466
  return
453
467
  }
454
- if (this.isDialogShow === false) {
455
- this.isDialogShow = true
456
- await this.$nextTick()
457
- }
458
468
  if (this.isMobile) {
459
469
  this.$refs.userSelectorMobileDialog.showDialog()
460
470
  } else {
@@ -470,12 +480,12 @@
470
480
  },
471
481
  // 更新当前输入框的高度来适配已选数据的高度
472
482
  calacInputSuffixHeight() {
473
- // if (!this.$refs.tagSpans) return
474
- // if (this.$refs.tagSpans.offsetHeight) {
475
- // this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
476
- // } else {
477
- // this.inputSuffixHeight = 30
478
- // }
483
+ if (!this.$refs.tagSpans) return
484
+ if (this.$refs.tagSpans.offsetHeight) {
485
+ this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
486
+ } else {
487
+ this.inputSuffixHeight = 30
488
+ }
479
489
  },
480
490
  handleRemoveText(index) {
481
491
  if (!this.value) {
@@ -489,7 +499,6 @@
489
499
  }
490
500
  </script>
491
501
  <style lang="scss" scoped>
492
- @import '~@/styles/selector.scss';
493
502
  .user-selector_block {
494
503
  width: calc(100% - 25px);
495
504
  background: #fff;
@@ -500,10 +509,6 @@
500
509
  top: 50%;
501
510
  background: unset !important;
502
511
  }
503
- .el-input__inner {
504
- height: 32px;
505
- line-height: 32px;
506
- }
507
512
 
508
513
  .el-input__inner[aria-invalid='true'] {
509
514
  border-color: #f56c6c;
@@ -32,14 +32,8 @@ const formula = {
32
32
  vnode.context.$set(vnode.context.data[pathAry[1]], pathAry[2], '')
33
33
  } else if (pathAry.length == 4) {
34
34
  let key = /^(\w+)\[(\d+)\]$/.exec(pathAry[2])
35
- // 存在dialogData则是子表编辑模式,dialogData.dialogVisible为true则是打开弹窗
36
- const name = (pathAry[2] || '').substring(4).split('[')
37
- const dialogData =
38
- vnode.context.$refs[`HtSubEditModeDialog_${name[0]}`] || {}
39
35
  vnode.context.$set(
40
- dialogData.dialogVisible
41
- ? dialogData.row
42
- : vnode.context.data[pathAry[1]][key[1]][key[2]],
36
+ vnode.context.data[pathAry[1]][key[1]][key[2]],
43
37
  pathAry[3],
44
38
  ''
45
39
  )
package/src/index.js CHANGED
@@ -42,7 +42,6 @@ import HtEditor from '../packages/Editor/index'
42
42
  import HtPicture from '../packages/picture/index'
43
43
  import HtExplain from '../packages/Explain/index'
44
44
  import HtAvatarImage from '../packages/Avatar/index'
45
- import HtSubEditModeDialog from '../packages/SubEditModeDialog/index'
46
45
  import {
47
46
  HtH1,
48
47
  HtH2,
@@ -231,7 +230,6 @@ const HotentUi = {
231
230
  HtPostDialog,
232
231
  HtJobDialog,
233
232
  HtRoleDialog,
234
- HtSubEditModeDialog,
235
233
  }
236
234
 
237
235
  HotentUi.install = (Vue, opts = {}) => {