three-trees-ui 1.0.99 → 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,35 @@
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">
34
+ {{ showPath ? item.pathName : item.name }}
35
+ </span>
36
+ <i
37
+ v-if="inputWriteable"
38
+ class="el-tag__close el-icon-close"
39
+ @click="handleRemove(item)"
40
+ ></i>
41
+ </span>
42
+ </span>
43
+ </div>
44
+ <div v-if="inputWriteable" class="el-input el-input--suffix">
33
45
  <input
34
46
  ref="inputEl"
35
- v-model="calcInputValue"
47
+ v-model="value"
36
48
  v-validate="inputValidate"
37
49
  type="text"
38
50
  readonly="readonly"
@@ -40,6 +52,10 @@
40
52
  autocomplete="off"
41
53
  class="el-input__inner"
42
54
  :placeholder="placeholder"
55
+ :style="{
56
+ height: inputSuffixHeight + 'px',
57
+ lineHeight: inputSuffixHeight + 'px',
58
+ }"
43
59
  />
44
60
  <span class="el-input__suffix">
45
61
  <span class="el-input__suffix-inner">
@@ -48,56 +64,51 @@
48
64
  </span>
49
65
  </span>
50
66
  </div>
51
- <div v-else class="el-select__tags_readonly">
52
- <span>{{ calcInputValue }}</span>
53
- </div>
54
67
  </div>
55
68
  <ht-field-tail :field-name="inputName" :input-value="value" />
56
- <template v-if="isDialogShow">
57
- <org-selector-dialog
58
- v-if="!isMobile"
59
- ref="orgSelectorDialog"
60
- v-model="selectors"
61
- :title="title"
62
- :append-to-body="appendToBody"
63
- :data="data"
64
- :pagination="pagination"
65
- :select-label="selectLabel"
66
- :quick-search-props="quickSearchProps"
67
- :single="single"
68
- :search-placeholder="searchPlaceholder"
69
- :primary-field="primaryField"
70
- :mode="mode"
71
- @filter-type-change="(type) => $emit('filter-type-change', type)"
72
- @search="(word) => $emit('search', word)"
73
- @reset="() => $emit('reset')"
74
- @row-click="(row) => $emit('row-click', row)"
75
- @select-data="(data) => $emit('select-data', data)"
76
- @page-change="(page) => $emit('page-change', page)"
77
- @size-change="(size) => $emit('size-change', size)"
78
- @contact-group-change="(group) => $emit('contact-group-change', group)"
79
- @load-org="(org) => $emit('load-org', org)"
80
- @load-policy-org="(policy) => $emit('load-policy-org', policy)"
81
- />
82
- <org-selector-mobile-dialog
83
- v-else
84
- ref="orgSelectorMobileDialog"
85
- v-model="selectors"
86
- :title="title"
87
- :append-to-body="appendToBody"
88
- :data="data"
89
- :pagination="pagination"
90
- :select-label="selectLabel"
91
- :single="single"
92
- :search-placeholder="searchPlaceholder"
93
- :primary-field="primaryField"
94
- @search="(word) => $emit('search', word)"
95
- @reset="() => $emit('reset')"
96
- @row-click="(row) => $emit('row-click', row)"
97
- @select-data="(data) => $emit('select-data', data)"
98
- @page-change="(page) => $emit('page-change', page)"
99
- />
100
- </template>
69
+ <org-selector-dialog
70
+ v-if="!isMobile"
71
+ ref="orgSelectorDialog"
72
+ v-model="selectors"
73
+ :title="title"
74
+ :append-to-body="appendToBody"
75
+ :data="data"
76
+ :pagination="pagination"
77
+ :select-label="selectLabel"
78
+ :quick-search-props="quickSearchProps"
79
+ :single="single"
80
+ :search-placeholder="searchPlaceholder"
81
+ :primary-field="primaryField"
82
+ :mode="mode"
83
+ @filter-type-change="(type) => $emit('filter-type-change', type)"
84
+ @search="(word) => $emit('search', word)"
85
+ @reset="() => $emit('reset')"
86
+ @row-click="(row) => $emit('row-click', row)"
87
+ @select-data="(data) => $emit('select-data', data)"
88
+ @page-change="(page) => $emit('page-change', page)"
89
+ @size-change="(size) => $emit('size-change', size)"
90
+ @contact-group-change="(group) => $emit('contact-group-change', group)"
91
+ @load-org="(org) => $emit('load-org', org)"
92
+ @load-policy-org="(policy) => $emit('load-policy-org', policy)"
93
+ />
94
+ <org-selector-mobile-dialog
95
+ v-else
96
+ ref="orgSelectorMobileDialog"
97
+ v-model="selectors"
98
+ :title="title"
99
+ :append-to-body="appendToBody"
100
+ :data="data"
101
+ :pagination="pagination"
102
+ :select-label="selectLabel"
103
+ :single="single"
104
+ :search-placeholder="searchPlaceholder"
105
+ :primary-field="primaryField"
106
+ @search="(word) => $emit('search', word)"
107
+ @reset="() => $emit('reset')"
108
+ @row-click="(row) => $emit('row-click', row)"
109
+ @select-data="(data) => $emit('select-data', data)"
110
+ @page-change="(page) => $emit('page-change', page)"
111
+ />
101
112
  </div>
102
113
  </template>
103
114
  <script>
@@ -175,23 +186,11 @@
175
186
  },
176
187
  data() {
177
188
  return {
178
- isDialogShow: false,
179
189
  inputSuffixHeight: 30,
180
190
  selectors: [],
181
191
  }
182
192
  },
183
193
  computed: {
184
- calcInputValue: function() {
185
- let name = ''
186
- if (this.selectors) {
187
- name = this.selectors
188
- .map((k) => {
189
- return this.showPath ? k.pathName : k.name
190
- })
191
- .join(',')
192
- }
193
- return name
194
- },
195
194
  primaryField: function() {
196
195
  return this.config && this.config.hasOwnProperty('id')
197
196
  ? 'id'
@@ -263,8 +262,14 @@
263
262
  // 通过valueChange事件发布值变更消息
264
263
  this.$emit('valueChange', ary.join(','), newVal)
265
264
  setTimeout(() => {
265
+ if (newVal.length > 0) {
266
+ this.calacInputSuffixHeight()
267
+ } else {
268
+ this.inputSuffixHeight = 30
269
+ }
266
270
  if (this.$refs.inputEl) {
267
- this.$validator.validate(this.inputName)
271
+ this.$refs.inputEl.focus()
272
+ this.$refs.inputEl.blur()
268
273
  }
269
274
  }, 10)
270
275
  },
@@ -345,14 +350,10 @@
345
350
  this.selectors = tmpAry
346
351
  }
347
352
  },
348
- async showDialog() {
353
+ showDialog() {
349
354
  if (!this.inputWriteable) {
350
355
  return
351
356
  }
352
- if (this.isDialogShow === false) {
353
- this.isDialogShow = true
354
- await this.$nextTick()
355
- }
356
357
  if (this.isMobile) {
357
358
  this.$refs.orgSelectorMobileDialog.showDialog()
358
359
  } else {
@@ -368,12 +369,12 @@
368
369
  },
369
370
  // 更新当前输入框的高度来适配已选数据的高度
370
371
  calacInputSuffixHeight() {
371
- // if (!this.$refs.tagSpans) return
372
- // if (this.$refs.tagSpans.offsetHeight) {
373
- // this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
374
- // } else {
375
- // this.inputSuffixHeight = 30
376
- // }
372
+ if (!this.$refs.tagSpans) return
373
+ if (this.$refs.tagSpans.offsetHeight) {
374
+ this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
375
+ } else {
376
+ this.inputSuffixHeight = 30
377
+ }
377
378
  },
378
379
  },
379
380
  }
@@ -390,10 +391,7 @@
390
391
  position: relative;
391
392
  top: 50%;
392
393
  }
393
- .el-input__inner {
394
- height: 32px;
395
- line-height: 32px;
396
- }
394
+
397
395
  .el-input__inner[aria-invalid='true'] {
398
396
  border-color: #f56c6c;
399
397
  }
@@ -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
- <post-selector-dialog
58
- v-if="!isMobile"
59
- ref="postSelectorDialog"
60
- v-model="selectors"
61
- :title="title"
62
- :append-to-body="appendToBody"
63
- :data="data"
64
- :pagination="pagination"
65
- :select-label="selectLabel"
66
- :quick-search-props="quickSearchProps"
67
- :single="single"
68
- :search-placeholder="searchPlaceholder"
69
- :primary-field="primaryField"
70
- :mode="mode"
71
- @filter-type-change="(type) => $emit('filter-type-change', type)"
72
- @search="(word) => $emit('search', word)"
73
- @reset="() => $emit('reset')"
74
- @row-click="(row) => $emit('row-click', row)"
75
- @select-data="(data) => $emit('select-data', data)"
76
- @page-change="(page) => $emit('page-change', page)"
77
- @size-change="(size) => $emit('size-change', size)"
78
- @load-org-post="(org) => $emit('load-org-post', org)"
79
- @load-policy-post="(policy) => $emit('load-policy-post', policy)"
80
- />
81
- <post-selector-mobile-dialog
82
- v-else
83
- ref="postSelectorMobileDialog"
84
- v-model="selectors"
85
- :title="title"
86
- :append-to-body="appendToBody"
87
- :data="data"
88
- :pagination="pagination"
89
- :select-label="selectLabel"
90
- :single="single"
91
- :search-placeholder="searchPlaceholder"
92
- :primary-field="primaryField"
93
- @search="(word) => $emit('search', word)"
94
- @reset="() => $emit('reset')"
95
- @row-click="(row) => $emit('row-click', row)"
96
- @select-data="(data) => $emit('select-data', data)"
97
- @page-change="(page) => $emit('page-change', page)"
98
- />
99
- </template>
67
+ <post-selector-dialog
68
+ v-if="!isMobile"
69
+ ref="postSelectorDialog"
70
+ v-model="selectors"
71
+ :title="title"
72
+ :append-to-body="appendToBody"
73
+ :data="data"
74
+ :pagination="pagination"
75
+ :select-label="selectLabel"
76
+ :quick-search-props="quickSearchProps"
77
+ :single="single"
78
+ :search-placeholder="searchPlaceholder"
79
+ :primary-field="primaryField"
80
+ :mode="mode"
81
+ @filter-type-change="(type) => $emit('filter-type-change', type)"
82
+ @search="(word) => $emit('search', word)"
83
+ @reset="() => $emit('reset')"
84
+ @row-click="(row) => $emit('row-click', row)"
85
+ @select-data="(data) => $emit('select-data', data)"
86
+ @page-change="(page) => $emit('page-change', page)"
87
+ @size-change="(size) => $emit('size-change', size)"
88
+ @load-org-post="(org) => $emit('load-org-post', org)"
89
+ @load-policy-post="(policy) => $emit('load-policy-post', policy)"
90
+ />
91
+ <post-selector-mobile-dialog
92
+ v-else
93
+ ref="postSelectorMobileDialog"
94
+ v-model="selectors"
95
+ :title="title"
96
+ :append-to-body="appendToBody"
97
+ :data="data"
98
+ :pagination="pagination"
99
+ :select-label="selectLabel"
100
+ :single="single"
101
+ :search-placeholder="searchPlaceholder"
102
+ :primary-field="primaryField"
103
+ @search="(word) => $emit('search', word)"
104
+ @reset="() => $emit('reset')"
105
+ @row-click="(row) => $emit('row-click', row)"
106
+ @select-data="(data) => $emit('select-data', data)"
107
+ @page-change="(page) => $emit('page-change', page)"
108
+ />
100
109
  </div>
101
110
  </template>
102
111
  <script>
@@ -176,23 +185,11 @@
176
185
  },
177
186
  data() {
178
187
  return {
179
- isDialogShow: false,
180
188
  inputSuffixHeight: 30,
181
189
  selectors: [],
182
190
  }
183
191
  },
184
192
  computed: {
185
- calcInputValue: function() {
186
- let name = ''
187
- if (this.selectors) {
188
- name = this.selectors
189
- .map((k) => {
190
- return k.name
191
- })
192
- .join(',')
193
- }
194
- return name
195
- },
196
193
  primaryField: function() {
197
194
  return this.config && this.config.hasOwnProperty('id')
198
195
  ? 'id'
@@ -251,8 +248,14 @@
251
248
  // 通过valueChange事件发布值变更消息
252
249
  this.$emit('valueChange', ary.join(','), newVal)
253
250
  setTimeout(() => {
251
+ if (newVal.length > 0) {
252
+ this.calacInputSuffixHeight()
253
+ } else {
254
+ this.inputSuffixHeight = 30
255
+ }
254
256
  if (this.$refs.inputEl) {
255
- this.$validator.validate(this.inputName)
257
+ this.$refs.inputEl.focus()
258
+ this.$refs.inputEl.blur()
256
259
  }
257
260
  }, 10)
258
261
  },
@@ -318,14 +321,10 @@
318
321
  this.selectors = tmpAry
319
322
  }
320
323
  },
321
- async showDialog() {
324
+ showDialog() {
322
325
  if (!this.inputWriteable) {
323
326
  return
324
327
  }
325
- if (this.isDialogShow === false) {
326
- this.isDialogShow = true
327
- await this.$nextTick()
328
- }
329
328
  if (this.isMobile) {
330
329
  this.$refs.postSelectorMobileDialog.showDialog()
331
330
  } else {
@@ -341,12 +340,12 @@
341
340
  },
342
341
  // 更新当前输入框的高度来适配已选数据的高度
343
342
  calacInputSuffixHeight() {
344
- // if (!this.$refs.tagSpans) return
345
- // if (this.$refs.tagSpans.offsetHeight) {
346
- // this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
347
- // } else {
348
- // this.inputSuffixHeight = 30
349
- // }
343
+ if (!this.$refs.tagSpans) return
344
+ if (this.$refs.tagSpans.offsetHeight) {
345
+ this.inputSuffixHeight = this.$refs.tagSpans.offsetHeight + 5
346
+ } else {
347
+ this.inputSuffixHeight = 30
348
+ }
350
349
  },
351
350
  },
352
351
  }
@@ -357,10 +356,6 @@
357
356
  margin-left: 1px;
358
357
  }
359
358
 
360
- .el-input__inner {
361
- height: 32px;
362
- line-height: 32px;
363
- }
364
359
  .el-select__tags_readonly {
365
360
  position: relative;
366
361
  top: 50%;