centaline-data-driven 1.1.54 → 1.1.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.
Files changed (193) hide show
  1. package/.babelrc +12 -12
  2. package/.editorconfig +9 -9
  3. package/.gitattributes +63 -63
  4. package/.postcssrc.js +10 -10
  5. package/Centaline.Front_End.DataDriven.csproj +37 -37
  6. package/Centaline.Front_End.DataDriven.sln +25 -25
  7. package/Properties/launchSettings.json +26 -26
  8. package/README.md +140 -140
  9. package/build/build.js +41 -41
  10. package/build/centaline/centaline.path.js +59 -59
  11. package/build/centaline/webpack.centaline.conf.js +106 -106
  12. package/build/check-versions.js +54 -54
  13. package/build/utils.js +102 -102
  14. package/build/vue-loader.conf.js +22 -22
  15. package/build/webpack.base.conf.js +82 -82
  16. package/build/webpack.dev.conf.js +111 -111
  17. package/build/webpack.prod.conf.js +145 -145
  18. package/config/dev.env.js +12 -12
  19. package/config/index.js +73 -73
  20. package/config/prod.env.js +4 -4
  21. package/index.html +14 -14
  22. package/package.json +75 -75
  23. package/src/App.vue +10 -10
  24. package/src/Detail.vue +26 -26
  25. package/src/Edit.vue +32 -32
  26. package/src/Form.vue +29 -29
  27. package/src/SearchList.vue +40 -40
  28. package/src/SearchTree.vue +51 -51
  29. package/src/Tabs.vue +19 -19
  30. package/src/centaline/api/index.js +249 -249
  31. package/src/centaline/comfirm/index.js +11 -11
  32. package/src/centaline/comfirm/src/comfirm.vue +44 -44
  33. package/src/centaline/common/index.js +738 -738
  34. package/src/centaline/css/common.css +748 -748
  35. package/src/centaline/css/max.css +207 -207
  36. package/src/centaline/dialogList/index.js +11 -11
  37. package/src/centaline/dialogList/src/dialog.vue +210 -210
  38. package/src/centaline/dialogList/src/dialogList.vue +65 -65
  39. package/src/centaline/dialogList/src/dialogNew.vue +78 -78
  40. package/src/centaline/dialogList/src/drag.js +77 -77
  41. package/src/centaline/directives/index.js +23 -23
  42. package/src/centaline/dynamicBtn/index.js +11 -11
  43. package/src/centaline/dynamicBtn/src/dynamicBtn.vue +100 -100
  44. package/src/centaline/dynamicCb/index.js +11 -11
  45. package/src/centaline/dynamicCb/src/dynamicCb.vue +72 -72
  46. package/src/centaline/dynamicCheckbox/index.js +11 -11
  47. package/src/centaline/dynamicCheckbox/src/dynamicCheckbox.vue +128 -128
  48. package/src/centaline/dynamicComboBoxWithTextBox/index.js +11 -11
  49. package/src/centaline/dynamicComboBoxWithTextBox/src/dynamicComboBoxWithTextBox.vue +240 -240
  50. package/src/centaline/dynamicD/index.js +11 -11
  51. package/src/centaline/dynamicD/src/dynamicD.vue +92 -92
  52. package/src/centaline/dynamicDetail/index.js +10 -10
  53. package/src/centaline/dynamicDetail/src/dynamicDetail.vue +40 -40
  54. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailOFI.vue +1280 -1280
  55. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +1293 -1293
  56. package/src/centaline/dynamicDrop/index.js +11 -11
  57. package/src/centaline/dynamicDrop/src/dynamicDrop.vue +54 -54
  58. package/src/centaline/dynamicDtd/index.js +11 -11
  59. package/src/centaline/dynamicDtd/src/dynamicDtd.vue +125 -125
  60. package/src/centaline/dynamicDtd/src/dynamicDtdOld.vue +93 -93
  61. package/src/centaline/dynamicFile/index.js +11 -11
  62. package/src/centaline/dynamicFile/src/dynamicFile.vue +288 -283
  63. package/src/centaline/dynamicForm/index.js +24 -24
  64. package/src/centaline/dynamicForm/src/dynamicForm.vue +564 -564
  65. package/src/centaline/dynamicForm/src/dynamicFormList.vue +209 -209
  66. package/src/centaline/dynamicForm/src/dynamicFormListTable.vue +376 -376
  67. package/src/centaline/dynamicGp/index.js +11 -11
  68. package/src/centaline/dynamicGp/src/dynamicGp.vue +27 -27
  69. package/src/centaline/dynamicHyperLink/index.js +11 -11
  70. package/src/centaline/dynamicHyperLink/src/dynamicHyperLink.vue +54 -54
  71. package/src/centaline/dynamicInput/index.js +35 -35
  72. package/src/centaline/dynamicInput/src/dynamicInput.vue +35 -35
  73. package/src/centaline/dynamicInputNumber/index.js +11 -11
  74. package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +157 -157
  75. package/src/centaline/dynamicIti/index.js +11 -11
  76. package/src/centaline/dynamicIti/src/dynamicIti.vue +148 -148
  77. package/src/centaline/dynamicL/index.js +11 -11
  78. package/src/centaline/dynamicL/src/dynamicL.vue +37 -37
  79. package/src/centaline/dynamicLabel/index.js +11 -11
  80. package/src/centaline/dynamicLabel/src/dynamicLabel.vue +73 -73
  81. package/src/centaline/dynamicLs/index.js +22 -22
  82. package/src/centaline/dynamicLs/src/dynamicLs.vue +233 -233
  83. package/src/centaline/dynamicMo/index.js +13 -13
  84. package/src/centaline/dynamicMo/src/dynamicMo.vue +421 -421
  85. package/src/centaline/dynamicMt/index.js +11 -11
  86. package/src/centaline/dynamicMt/src/dynamicMt.vue +44 -44
  87. package/src/centaline/dynamicPlaceHolder/index.js +11 -11
  88. package/src/centaline/dynamicPlaceHolder/src/dynamicPlaceHolder.vue +29 -29
  89. package/src/centaline/dynamicPopupSearchList/index.js +11 -11
  90. package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchList.vue +157 -157
  91. package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchListTable.vue +239 -239
  92. package/src/centaline/dynamicRichText/index.js +11 -11
  93. package/src/centaline/dynamicRichText/src/dynamicRichText.vue +33 -33
  94. package/src/centaline/dynamicSearchList/index.js +11 -11
  95. package/src/centaline/dynamicSearchList/src/dynamicSearchCategory.vue +121 -121
  96. package/src/centaline/dynamicSearchList/src/dynamicSearchList.vue +135 -135
  97. package/src/centaline/dynamicSearchList/src/dynamicSearchScreen.vue +206 -206
  98. package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +1069 -1069
  99. package/src/centaline/dynamicSearchList/src/dynamicTableStatistics.vue +41 -41
  100. package/src/centaline/dynamicSearchList/src/dynamicTableTip.vue +46 -46
  101. package/src/centaline/dynamicSearchList/src/dynamicTableToolbar.vue +61 -61
  102. package/src/centaline/dynamicSeg/index.js +11 -11
  103. package/src/centaline/dynamicSeg/src/dynamicSeg.vue +100 -100
  104. package/src/centaline/dynamicSensitiveEye/index.js +11 -11
  105. package/src/centaline/dynamicSensitiveEye/src/dynamicSensitiveEye.vue +74 -74
  106. package/src/centaline/dynamicSo/index.js +14 -14
  107. package/src/centaline/dynamicSo/src/dynamicSo.vue +328 -328
  108. package/src/centaline/dynamicSo/src/dynamicSo/345/211/257/346/234/254.vue +69 -69
  109. package/src/centaline/dynamicSos/index.js +14 -14
  110. package/src/centaline/dynamicSos/src/dynamicSos - /345/244/215/345/210/266.vue" +223 -223
  111. package/src/centaline/dynamicSos/src/dynamicSos.vue +260 -260
  112. package/src/centaline/dynamicSw/index.js +11 -11
  113. package/src/centaline/dynamicSw/src/dynamicSw.vue +74 -74
  114. package/src/centaline/dynamicT/index.js +11 -11
  115. package/src/centaline/dynamicT/src/dynamicT.vue +79 -79
  116. package/src/centaline/dynamicTab/index.js +11 -11
  117. package/src/centaline/dynamicTab/src/dynamicTab.vue +49 -49
  118. package/src/centaline/dynamicTabs/index.js +11 -11
  119. package/src/centaline/dynamicTabs/src/dynamicTabs.vue +69 -69
  120. package/src/centaline/dynamicTags/index.js +13 -13
  121. package/src/centaline/dynamicTags/src/dynamicTags - /345/244/215/345/210/266.vue" +391 -391
  122. package/src/centaline/dynamicTags/src/dynamicTags.vue +427 -427
  123. package/src/centaline/dynamicTimeSelect/index.js +11 -11
  124. package/src/centaline/dynamicTimeSelect/src/dynamicTimeSelect.vue +141 -141
  125. package/src/centaline/dynamicTree/index.js +11 -11
  126. package/src/centaline/dynamicTree/src/dynamicSearchTree.vue +66 -66
  127. package/src/centaline/dynamicTree/src/dynamicTree.vue +233 -233
  128. package/src/centaline/dynamicTree/src/dynamicTreeList.vue +74 -74
  129. package/src/centaline/formData/index.js +290 -290
  130. package/src/centaline/imgPreview/index.js +42 -42
  131. package/src/centaline/imgPreview/src/imgPreview.vue +26 -26
  132. package/src/centaline/index.js +51 -51
  133. package/src/centaline/loader/index.js +157 -157
  134. package/src/centaline/loader/src/ctl/Base.js +261 -261
  135. package/src/centaline/loader/src/ctl/Button.js +44 -44
  136. package/src/centaline/loader/src/ctl/Cb.js +27 -27
  137. package/src/centaline/loader/src/ctl/Checkbox.js +107 -107
  138. package/src/centaline/loader/src/ctl/ComboBoxWithTextBox.js +162 -162
  139. package/src/centaline/loader/src/ctl/D.js +31 -31
  140. package/src/centaline/loader/src/ctl/Detail.js +175 -175
  141. package/src/centaline/loader/src/ctl/Dtd.js +115 -115
  142. package/src/centaline/loader/src/ctl/DtdOld.js +129 -129
  143. package/src/centaline/loader/src/ctl/File.js +292 -292
  144. package/src/centaline/loader/src/ctl/Form.js +380 -380
  145. package/src/centaline/loader/src/ctl/FormList.js +428 -428
  146. package/src/centaline/loader/src/ctl/GM.js +20 -20
  147. package/src/centaline/loader/src/ctl/Gp.js +9 -9
  148. package/src/centaline/loader/src/ctl/Hd.js +13 -13
  149. package/src/centaline/loader/src/ctl/HyperLink.js +24 -24
  150. package/src/centaline/loader/src/ctl/InputNumber.js +51 -51
  151. package/src/centaline/loader/src/ctl/Iti.js +108 -108
  152. package/src/centaline/loader/src/ctl/L.js +18 -18
  153. package/src/centaline/loader/src/ctl/Mo.js +183 -183
  154. package/src/centaline/loader/src/ctl/Mt.js +20 -20
  155. package/src/centaline/loader/src/ctl/PlaceHolder.js +17 -17
  156. package/src/centaline/loader/src/ctl/Router.js +273 -273
  157. package/src/centaline/loader/src/ctl/SearchCategory.js +54 -54
  158. package/src/centaline/loader/src/ctl/SearchScreen.js +236 -236
  159. package/src/centaline/loader/src/ctl/SearchTable.js +772 -772
  160. package/src/centaline/loader/src/ctl/Seg.js +37 -37
  161. package/src/centaline/loader/src/ctl/SensitiveEye.js +65 -65
  162. package/src/centaline/loader/src/ctl/So.js +117 -117
  163. package/src/centaline/loader/src/ctl/Sos.js +128 -128
  164. package/src/centaline/loader/src/ctl/Sw.js +27 -27
  165. package/src/centaline/loader/src/ctl/T.js +65 -65
  166. package/src/centaline/loader/src/ctl/Tabs.js +57 -57
  167. package/src/centaline/loader/src/ctl/Tags.js +191 -191
  168. package/src/centaline/loader/src/ctl/TimeSelect.js +87 -87
  169. package/src/centaline/loader/src/ctl/Tree.js +151 -151
  170. package/src/centaline/loader/src/ctl/Ttts.js +78 -78
  171. package/src/centaline/loader/src/ctl/lib/Enum.js +563 -563
  172. package/src/centaline/loader/src/ctl/lib/LibFunction.js +364 -364
  173. package/src/centaline/loader/src/ctl.js +36 -36
  174. package/src/centaline/mixins/dynamicElement.js +151 -151
  175. package/src/centaline/mixins/dynamicSelect.js +84 -84
  176. package/src/centaline/mixins/emitter.js +33 -33
  177. package/src/centaline/progress/index.js +11 -11
  178. package/src/centaline/progress/src/progress.vue +70 -70
  179. package/src/centaline/quickInput/src/quickInput.vue +64 -64
  180. package/src/centaline/selectOption/src/selectOption.vue +61 -61
  181. package/src/centaline/selectOption/src/selectOptionVertical.vue +80 -80
  182. package/src/centaline/templateControls/index.js +17 -17
  183. package/src/centaline/templateControls/src/dynamicTableA.vue +20 -20
  184. package/src/centaline/templateControls/src/dynamicTableCurrency.vue +62 -62
  185. package/src/centaline/templateControls/src/dynamicTableImg.vue +25 -25
  186. package/src/centaline/templates/index.js +34 -34
  187. package/src/centaline/templates/src/ContractSearch.js +67 -67
  188. package/src/centaline/templates/src/test.js +44 -44
  189. package/src/centaline/validate/index.js +332 -332
  190. package/src/main.js +46 -46
  191. package/src/router/index.js +44 -44
  192. package/wwwroot/static/centaline/centaline-data-driven.js +1 -1
  193. package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
@@ -1,391 +1,391 @@
1
- <template>
2
- <div class="ct-tags" :class="[(focus || showDrop)?'isfocus':'',model.attrs.size?'ct-tags-'+model.attrs.size:''
3
- ]" @mouseover="mouseOverHandle" @mouseout="mouseOutHandle">
4
- <div :class="[model.showLabel?'el-input-group el-input-group--prepend':'',!valid?'inputError':'']">
5
- <div v-if="model.showLabel && model.label" class="el-input-group__prepend">
6
- {{model.label}}
7
- </div>
8
- <div>
9
- <div ref="cttags" class="el-select__tags" :style="{'max-width':tagsWidth + 'px'}" @click="clickHandle">
10
- <span>
11
- <span class="el-tag el-tag--info" :class="[model.attrs.size?'el-tag--'+model.attrs.size:'']" v-for="item in model.value">
12
- <span class="el-select__tags-text">{{getOptionText(item)}}</span>
13
- <i class="el-tag__close el-icon-close" @click="deleteOption(item,$event)"></i>
14
- </span>
15
- </span>
16
- </div>
17
- <el-popover ref="pop" placement="bottom-start" v-model="showDrop" :class="[model.showLabel?'showLabel':'']">
18
- <div>
19
- <div>
20
- <el-input ref="searchInput" :size="model.attrs.size" suffix-icon="el-icon-search" v-model="searchText" @input="searchInputHandle"></el-input>
21
- </div>
22
- <ct-select-option :model="model" :optionRowCount="optionRowCount" @click="selectOption($event)"></ct-select-option>
23
- </div>
24
- <input slot="reference" v-bind="model.attrs" :placeholder="tagsPlaceholder"
25
- ref="ct-input" class="ct-input_inner" :style="{height:inputHeight + 'px','line-height':inputLineHeight + 'px'}"
26
- @focus="focusHandle" @blur="blurHandle" @click="clickHandle" />
27
- </el-popover>
28
- <span class="el-input__suffix" @click="clickHandle" :class="[model.attrs.size?'el-input--'+model.attrs.size:'']">
29
- <span v-if="showClear === false" class="el-input__suffix-inner">
30
- <i class="el-select__caret el-input__icon el-icon-arrow-up" :class="{'is-reverse':showDrop}"></i>
31
- </span>
32
- <span v-if="showClear === true" class="el-input__suffix-inner ct-close">
33
- <i class="el-select__caret el-input__icon el-icon-circle-close is-show-close" @click="clearClickHandle($event)"></i>
34
- </span>
35
- </span>
36
- </div>
37
- </div>
38
- <transition name="el-fade-in">
39
- <span v-show="!valid" class="errorMessage">
40
- {{validMessage}}
41
- </span>
42
- </transition>
43
- </div>
44
- </template>
45
-
46
- <script>
47
- import dynamicElement from '../../mixins/dynamicElement'
48
- import selectOption from '../../selectOption/src/selectOption'
49
- export default {
50
- name: 'ct-tags',
51
- mixins: [dynamicElement],
52
- components: {
53
- 'ct-select-option': selectOption
54
- },
55
- props: {
56
- api: String,
57
- vmodel: Object,
58
- popShow: {
59
- type: Boolean,
60
- default: true
61
- }
62
- },
63
- data() {
64
- return {
65
- focus: false,
66
- showDrop: false,
67
- inputHeight: 26,
68
- tagsWidth: 175,
69
- showClear: false,
70
- searchText: "",
71
- globalOptions:[]
72
- }
73
- },
74
- created() {
75
- if (typeof this.vmodel === 'undefined') {
76
- this.model = this.loaderObj.Tags(this.source);
77
- }
78
- else {
79
- this.model = this.vmodel;
80
- }
81
- this.$watch('model.value', (n, o) => {
82
- if (typeof this.model.child !== 'undefined') {
83
- this.model.child.value = this.model.child.defaultValue || '';
84
- this.model.child.text = this.model.child.defaultText || '';
85
- }
86
- });
87
- this.inputHeight = this.inputLineHeight;
88
- },
89
- computed: {
90
- tagsPlaceholder: {
91
- get: function () {
92
- if (this.model.value.length > 0) {
93
- return '';
94
- }
95
- else {
96
- return this.model.label;
97
- }
98
- },
99
- set: function (v) {
100
-
101
- }
102
- },
103
- inputLineHeight: {
104
- get: function () {
105
- switch (this.model.attrs.size) {
106
- case 'mini':
107
- return 26;
108
- case 'small':
109
- return 32;
110
- case 'medium':
111
- return 36;
112
- default:
113
- return 40;
114
- }
115
- }
116
- },
117
- optionColSpan: function () {
118
- return parseInt(24 / this.model.optionRowCount);
119
- },
120
- optionRowCount: function () {
121
- return parseInt(this.model.options.length % this.model.optionRowCount > 0 ? (this.model.options.length / this.model.optionRowCount) + 1 : this.model.options.length / this.model.optionRowCount);
122
- }
123
- },
124
- mounted() {
125
- var self = this;
126
- this.resize();
127
- this.$nextTick(function () {
128
- var dropdown = self.$refs["pop"];
129
- self.$watch('model.options', function (newVal, oldVal) {
130
- self.$nextTick(() => {
131
- if (typeof dropdown.popperJS !== 'undefined' && dropdown.popperJS) {
132
- dropdown.popperJS.destroy();
133
- dropdown.popperJS = null;
134
- dropdown.updatePopper();
135
- }
136
- this.setToGlobalOptions();
137
- self.$refs["searchInput"].$el.querySelector("input").focus();
138
- });
139
- }, { deep: true, immediate: true });
140
- });
141
-
142
- },
143
- methods: {
144
- getOptions: function () {
145
- var self = this;
146
- this.model.getOptions(this.api, self.searchText);
147
- },
148
- tagsChange: function () {
149
- var self = this;
150
- if (typeof this.model.child !== 'undefined') {
151
- this.model.child.value = this.model.child.defaultValue || '';
152
- this.model.child.text = this.model.child.defaultText || '';
153
- }
154
- var currentOptions = this.globalOptions.filter((value) => {
155
- return self.model.value.indexOf(value[self.model.optionAttrs.value]) >= 0;
156
- });
157
- if (currentOptions) {
158
- this.model.text = currentOptions;
159
- }
160
- else {
161
- this.model.text = [];
162
- }
163
- this.$emit('change', this.model.value);
164
- this.inputHandler(self.model.value);
165
- this.changeHandler(self.model.value);
166
- },
167
- focusHandle: function () {
168
- this.$set(this, 'focus', true);
169
- },
170
- blurHandle: function () {
171
- this.$set(this, 'focus', false);
172
- },
173
- clickHandle: function () {
174
- this.$set(this, 'showDrop', !this.showDrop);
175
- if (this.showDrop) {
176
- this.getOptions();
177
- }
178
- this.focusHandle();
179
- },
180
- resetInputHeight() {
181
- var self = this;
182
- this.$nextTick(function () {
183
- for (var i = 1; i < 100; i++) {
184
- if (i * self.inputLineHeight > self.$refs['cttags'].clientHeight) {
185
- self.$set(self, 'inputHeight', i * self.inputLineHeight);
186
- break;
187
- }
188
- }
189
- });
190
- },
191
- resetTagsWidth() {
192
- var self = this;
193
- this.$nextTick(function () {
194
- self.$set(self, 'tagsWidth', self.$refs['ct-input'].clientWidth - 30);
195
- });
196
- },
197
- resize() {
198
- this.resetInputHeight();
199
- this.resetTagsWidth();
200
- },
201
- getOptionText: function (value) {
202
- var self = this;
203
- var option = this.globalOptions.find((v) => { return v[self.model.optionAttrs.value] === value });
204
- if (option) {
205
- return option[self.model.optionAttrs.label];
206
- } else {
207
- return value;
208
- }
209
- },
210
- deleteOption(value, event) {
211
- var self = this;
212
- this.model.value.splice(
213
- this.model.value.findIndex(
214
- (v) => {
215
- return v === value;
216
- }
217
- )
218
- , 1);
219
- self.resize();
220
- if (event) {
221
- event.stopPropagation();
222
- }
223
- this.tagsChange();
224
- this.$emit('input', this.model.value);
225
- },
226
- getOptionSelect(value) {
227
- if (this.model.value.find((v) => { return v === value })) {
228
- return "danger";
229
- }
230
- else {
231
- return "success";
232
- }
233
- },
234
- selectOption(value) {
235
- if (this.model.value.find((v) => { return v === value })) {
236
- this.deleteOption(value);
237
- }
238
- else {
239
- this.model.value.push(value);
240
- }
241
- this.resize();
242
- this.tagsChange();
243
- this.$emit('input', this.model.value);
244
- },
245
- mouseOverHandle: function () {
246
- if (this.model.value.length > 0 && this.model.clearable) {
247
- this.$set(this, 'showClear', true);
248
- }
249
- },
250
- mouseOutHandle: function () {
251
- this.$set(this, 'showClear', false);
252
- },
253
- clearClickHandle: function (event) {
254
- this.model.value.splice(0);
255
- this.resize();
256
- this.tagsChange();
257
- this.$emit('input', this.model.value);
258
- event.stopPropagation();
259
- },
260
- searchInputHandle: function () {
261
- var currentSeatch = this.searchText;
262
- this.searchTickControl(currentSeatch);
263
- },
264
- searchTickControl: function (search) {
265
- var self = this;
266
- setTimeout(function () {
267
- if (search === self.searchText) {
268
- self.getOptions(self.searchText);
269
- }
270
- }, self.model.searchTick);
271
- },
272
- setToGlobalOptions() {
273
- var self = this;
274
- this.model.options.forEach((v) => {
275
- var globalOption = self.globalOptions.find((v1) => {
276
- return v1[self.model.optionAttrs.value] === v[self.model.optionAttrs.value];
277
- });
278
- if (globalOption) {
279
- globalOption[self.model.optionAttrs.label] = v[self.model.optionAttrs.label];
280
- }
281
- else {
282
- self.globalOptions.push(v);
283
- }
284
- });
285
- }
286
- },
287
- watch: {
288
- popShow: function (newV, oldV) {
289
- this.resize();
290
- }
291
- }
292
- }
293
- </script>
294
- <style>
295
- .ct-tags .ct-input_inner {
296
- -webkit-appearance: none;
297
- background-color: #fff;
298
- background-image: none;
299
- border-radius: 4px;
300
- border: 1px solid #dcdfe6;
301
- -webkit-box-sizing: border-box;
302
- box-sizing: border-box;
303
- color: transparent;
304
- display: inline-block;
305
- font-size: inherit;
306
- line-height: 26px;
307
- outline: 0;
308
- padding: 0 15px;
309
- padding-right: 30px;
310
- -webkit-transition: border-color .2s cubic-bezier(.645,.045,.355,1);
311
- transition: border-color .2s cubic-bezier(.645,.045,.355,1);
312
- width: 100%;
313
- cursor: pointer;
314
- z-index: 2000;
315
- }
316
-
317
- .ct-tags .ct-input_inner::-webkit-input-placeholder {
318
- color: #c0c4cc;
319
- }
320
-
321
- .ct-tags .ct-input_inner::-moz-placeholder {
322
- color: #c0c4cc;
323
- }
324
-
325
- .ct-tags .ct-input_inner:-ms-input-placeholder {
326
- color: #c0c4cc;
327
- }
328
-
329
- .ct-tags .ct-input_inner:hover {
330
- border-color: #c0c4cc; /*border-color:#c0c4cc*/
331
- }
332
-
333
- .ct-tags.isfocus .ct-input_inner:hover {
334
- border-color: #409EFF; /*border-color:#c0c4cc*/
335
- }
336
-
337
- .ct-tags.isfocus .ct-input_inner {
338
- border-color: #409EFF;
339
- }
340
-
341
- .ct-tags .el-input__suffix {
342
- right: 10px;
343
- cursor: pointer;
344
- }
345
-
346
- .ct-tags .el-select__caret {
347
- color: #c0c4cc;
348
- font-size: inherit;
349
- -webkit-transition: -webkit-transform .3s;
350
- transition: -webkit-transform .3s;
351
- transition: transform .3s;
352
- transition: transform .3s, -webkit-transform .3s;
353
- transition: transform .3s,-webkit-transform .3s;
354
- -webkit-transform: rotateZ(180deg);
355
- transform: rotateZ(180deg);
356
- cursor: pointer;
357
- }
358
-
359
- .ct-tags .is-reverse {
360
- -webkit-transform: rotateZ(0deg);
361
- transform: rotateZ(0deg);
362
- }
363
-
364
- .ct-tags .el-tag {
365
- -webkit-box-sizing: border-box;
366
- box-sizing: border-box;
367
- border-color: transparent;
368
- margin: 2px 0 2px 6px;
369
- background-color: #f0f2f5;
370
- }
371
-
372
- .ct-tags.ct-tags-mini {
373
- font-size: 12px;
374
- }
375
-
376
- .ct-tags.ct-tags-small {
377
- font-size: 13px;
378
- }
379
-
380
- .ct-tags.ct-tags-medium {
381
- font-size: 14px;
382
- }
383
-
384
- .ct-option {
385
- margin: 5px;
386
- cursor:pointer;
387
- }
388
- .ct-tags .ct-close > .el-select__caret.is-show-close:hover {
389
- color: #909399;
390
- }
391
- </style>
1
+ <template>
2
+ <div class="ct-tags" :class="[(focus || showDrop)?'isfocus':'',model.attrs.size?'ct-tags-'+model.attrs.size:''
3
+ ]" @mouseover="mouseOverHandle" @mouseout="mouseOutHandle">
4
+ <div :class="[model.showLabel?'el-input-group el-input-group--prepend':'',!valid?'inputError':'']">
5
+ <div v-if="model.showLabel && model.label" class="el-input-group__prepend">
6
+ {{model.label}}
7
+ </div>
8
+ <div>
9
+ <div ref="cttags" class="el-select__tags" :style="{'max-width':tagsWidth + 'px'}" @click="clickHandle">
10
+ <span>
11
+ <span class="el-tag el-tag--info" :class="[model.attrs.size?'el-tag--'+model.attrs.size:'']" v-for="item in model.value">
12
+ <span class="el-select__tags-text">{{getOptionText(item)}}</span>
13
+ <i class="el-tag__close el-icon-close" @click="deleteOption(item,$event)"></i>
14
+ </span>
15
+ </span>
16
+ </div>
17
+ <el-popover ref="pop" placement="bottom-start" v-model="showDrop" :class="[model.showLabel?'showLabel':'']">
18
+ <div>
19
+ <div>
20
+ <el-input ref="searchInput" :size="model.attrs.size" suffix-icon="el-icon-search" v-model="searchText" @input="searchInputHandle"></el-input>
21
+ </div>
22
+ <ct-select-option :model="model" :optionRowCount="optionRowCount" @click="selectOption($event)"></ct-select-option>
23
+ </div>
24
+ <input slot="reference" v-bind="model.attrs" :placeholder="tagsPlaceholder"
25
+ ref="ct-input" class="ct-input_inner" :style="{height:inputHeight + 'px','line-height':inputLineHeight + 'px'}"
26
+ @focus="focusHandle" @blur="blurHandle" @click="clickHandle" />
27
+ </el-popover>
28
+ <span class="el-input__suffix" @click="clickHandle" :class="[model.attrs.size?'el-input--'+model.attrs.size:'']">
29
+ <span v-if="showClear === false" class="el-input__suffix-inner">
30
+ <i class="el-select__caret el-input__icon el-icon-arrow-up" :class="{'is-reverse':showDrop}"></i>
31
+ </span>
32
+ <span v-if="showClear === true" class="el-input__suffix-inner ct-close">
33
+ <i class="el-select__caret el-input__icon el-icon-circle-close is-show-close" @click="clearClickHandle($event)"></i>
34
+ </span>
35
+ </span>
36
+ </div>
37
+ </div>
38
+ <transition name="el-fade-in">
39
+ <span v-show="!valid" class="errorMessage">
40
+ {{validMessage}}
41
+ </span>
42
+ </transition>
43
+ </div>
44
+ </template>
45
+
46
+ <script>
47
+ import dynamicElement from '../../mixins/dynamicElement'
48
+ import selectOption from '../../selectOption/src/selectOption'
49
+ export default {
50
+ name: 'ct-tags',
51
+ mixins: [dynamicElement],
52
+ components: {
53
+ 'ct-select-option': selectOption
54
+ },
55
+ props: {
56
+ api: String,
57
+ vmodel: Object,
58
+ popShow: {
59
+ type: Boolean,
60
+ default: true
61
+ }
62
+ },
63
+ data() {
64
+ return {
65
+ focus: false,
66
+ showDrop: false,
67
+ inputHeight: 26,
68
+ tagsWidth: 175,
69
+ showClear: false,
70
+ searchText: "",
71
+ globalOptions:[]
72
+ }
73
+ },
74
+ created() {
75
+ if (typeof this.vmodel === 'undefined') {
76
+ this.model = this.loaderObj.Tags(this.source);
77
+ }
78
+ else {
79
+ this.model = this.vmodel;
80
+ }
81
+ this.$watch('model.value', (n, o) => {
82
+ if (typeof this.model.child !== 'undefined') {
83
+ this.model.child.value = this.model.child.defaultValue || '';
84
+ this.model.child.text = this.model.child.defaultText || '';
85
+ }
86
+ });
87
+ this.inputHeight = this.inputLineHeight;
88
+ },
89
+ computed: {
90
+ tagsPlaceholder: {
91
+ get: function () {
92
+ if (this.model.value.length > 0) {
93
+ return '';
94
+ }
95
+ else {
96
+ return this.model.label;
97
+ }
98
+ },
99
+ set: function (v) {
100
+
101
+ }
102
+ },
103
+ inputLineHeight: {
104
+ get: function () {
105
+ switch (this.model.attrs.size) {
106
+ case 'mini':
107
+ return 26;
108
+ case 'small':
109
+ return 32;
110
+ case 'medium':
111
+ return 36;
112
+ default:
113
+ return 40;
114
+ }
115
+ }
116
+ },
117
+ optionColSpan: function () {
118
+ return parseInt(24 / this.model.optionRowCount);
119
+ },
120
+ optionRowCount: function () {
121
+ return parseInt(this.model.options.length % this.model.optionRowCount > 0 ? (this.model.options.length / this.model.optionRowCount) + 1 : this.model.options.length / this.model.optionRowCount);
122
+ }
123
+ },
124
+ mounted() {
125
+ var self = this;
126
+ this.resize();
127
+ this.$nextTick(function () {
128
+ var dropdown = self.$refs["pop"];
129
+ self.$watch('model.options', function (newVal, oldVal) {
130
+ self.$nextTick(() => {
131
+ if (typeof dropdown.popperJS !== 'undefined' && dropdown.popperJS) {
132
+ dropdown.popperJS.destroy();
133
+ dropdown.popperJS = null;
134
+ dropdown.updatePopper();
135
+ }
136
+ this.setToGlobalOptions();
137
+ self.$refs["searchInput"].$el.querySelector("input").focus();
138
+ });
139
+ }, { deep: true, immediate: true });
140
+ });
141
+
142
+ },
143
+ methods: {
144
+ getOptions: function () {
145
+ var self = this;
146
+ this.model.getOptions(this.api, self.searchText);
147
+ },
148
+ tagsChange: function () {
149
+ var self = this;
150
+ if (typeof this.model.child !== 'undefined') {
151
+ this.model.child.value = this.model.child.defaultValue || '';
152
+ this.model.child.text = this.model.child.defaultText || '';
153
+ }
154
+ var currentOptions = this.globalOptions.filter((value) => {
155
+ return self.model.value.indexOf(value[self.model.optionAttrs.value]) >= 0;
156
+ });
157
+ if (currentOptions) {
158
+ this.model.text = currentOptions;
159
+ }
160
+ else {
161
+ this.model.text = [];
162
+ }
163
+ this.$emit('change', this.model.value);
164
+ this.inputHandler(self.model.value);
165
+ this.changeHandler(self.model.value);
166
+ },
167
+ focusHandle: function () {
168
+ this.$set(this, 'focus', true);
169
+ },
170
+ blurHandle: function () {
171
+ this.$set(this, 'focus', false);
172
+ },
173
+ clickHandle: function () {
174
+ this.$set(this, 'showDrop', !this.showDrop);
175
+ if (this.showDrop) {
176
+ this.getOptions();
177
+ }
178
+ this.focusHandle();
179
+ },
180
+ resetInputHeight() {
181
+ var self = this;
182
+ this.$nextTick(function () {
183
+ for (var i = 1; i < 100; i++) {
184
+ if (i * self.inputLineHeight > self.$refs['cttags'].clientHeight) {
185
+ self.$set(self, 'inputHeight', i * self.inputLineHeight);
186
+ break;
187
+ }
188
+ }
189
+ });
190
+ },
191
+ resetTagsWidth() {
192
+ var self = this;
193
+ this.$nextTick(function () {
194
+ self.$set(self, 'tagsWidth', self.$refs['ct-input'].clientWidth - 30);
195
+ });
196
+ },
197
+ resize() {
198
+ this.resetInputHeight();
199
+ this.resetTagsWidth();
200
+ },
201
+ getOptionText: function (value) {
202
+ var self = this;
203
+ var option = this.globalOptions.find((v) => { return v[self.model.optionAttrs.value] === value });
204
+ if (option) {
205
+ return option[self.model.optionAttrs.label];
206
+ } else {
207
+ return value;
208
+ }
209
+ },
210
+ deleteOption(value, event) {
211
+ var self = this;
212
+ this.model.value.splice(
213
+ this.model.value.findIndex(
214
+ (v) => {
215
+ return v === value;
216
+ }
217
+ )
218
+ , 1);
219
+ self.resize();
220
+ if (event) {
221
+ event.stopPropagation();
222
+ }
223
+ this.tagsChange();
224
+ this.$emit('input', this.model.value);
225
+ },
226
+ getOptionSelect(value) {
227
+ if (this.model.value.find((v) => { return v === value })) {
228
+ return "danger";
229
+ }
230
+ else {
231
+ return "success";
232
+ }
233
+ },
234
+ selectOption(value) {
235
+ if (this.model.value.find((v) => { return v === value })) {
236
+ this.deleteOption(value);
237
+ }
238
+ else {
239
+ this.model.value.push(value);
240
+ }
241
+ this.resize();
242
+ this.tagsChange();
243
+ this.$emit('input', this.model.value);
244
+ },
245
+ mouseOverHandle: function () {
246
+ if (this.model.value.length > 0 && this.model.clearable) {
247
+ this.$set(this, 'showClear', true);
248
+ }
249
+ },
250
+ mouseOutHandle: function () {
251
+ this.$set(this, 'showClear', false);
252
+ },
253
+ clearClickHandle: function (event) {
254
+ this.model.value.splice(0);
255
+ this.resize();
256
+ this.tagsChange();
257
+ this.$emit('input', this.model.value);
258
+ event.stopPropagation();
259
+ },
260
+ searchInputHandle: function () {
261
+ var currentSeatch = this.searchText;
262
+ this.searchTickControl(currentSeatch);
263
+ },
264
+ searchTickControl: function (search) {
265
+ var self = this;
266
+ setTimeout(function () {
267
+ if (search === self.searchText) {
268
+ self.getOptions(self.searchText);
269
+ }
270
+ }, self.model.searchTick);
271
+ },
272
+ setToGlobalOptions() {
273
+ var self = this;
274
+ this.model.options.forEach((v) => {
275
+ var globalOption = self.globalOptions.find((v1) => {
276
+ return v1[self.model.optionAttrs.value] === v[self.model.optionAttrs.value];
277
+ });
278
+ if (globalOption) {
279
+ globalOption[self.model.optionAttrs.label] = v[self.model.optionAttrs.label];
280
+ }
281
+ else {
282
+ self.globalOptions.push(v);
283
+ }
284
+ });
285
+ }
286
+ },
287
+ watch: {
288
+ popShow: function (newV, oldV) {
289
+ this.resize();
290
+ }
291
+ }
292
+ }
293
+ </script>
294
+ <style>
295
+ .ct-tags .ct-input_inner {
296
+ -webkit-appearance: none;
297
+ background-color: #fff;
298
+ background-image: none;
299
+ border-radius: 4px;
300
+ border: 1px solid #dcdfe6;
301
+ -webkit-box-sizing: border-box;
302
+ box-sizing: border-box;
303
+ color: transparent;
304
+ display: inline-block;
305
+ font-size: inherit;
306
+ line-height: 26px;
307
+ outline: 0;
308
+ padding: 0 15px;
309
+ padding-right: 30px;
310
+ -webkit-transition: border-color .2s cubic-bezier(.645,.045,.355,1);
311
+ transition: border-color .2s cubic-bezier(.645,.045,.355,1);
312
+ width: 100%;
313
+ cursor: pointer;
314
+ z-index: 2000;
315
+ }
316
+
317
+ .ct-tags .ct-input_inner::-webkit-input-placeholder {
318
+ color: #c0c4cc;
319
+ }
320
+
321
+ .ct-tags .ct-input_inner::-moz-placeholder {
322
+ color: #c0c4cc;
323
+ }
324
+
325
+ .ct-tags .ct-input_inner:-ms-input-placeholder {
326
+ color: #c0c4cc;
327
+ }
328
+
329
+ .ct-tags .ct-input_inner:hover {
330
+ border-color: #c0c4cc; /*border-color:#c0c4cc*/
331
+ }
332
+
333
+ .ct-tags.isfocus .ct-input_inner:hover {
334
+ border-color: #409EFF; /*border-color:#c0c4cc*/
335
+ }
336
+
337
+ .ct-tags.isfocus .ct-input_inner {
338
+ border-color: #409EFF;
339
+ }
340
+
341
+ .ct-tags .el-input__suffix {
342
+ right: 10px;
343
+ cursor: pointer;
344
+ }
345
+
346
+ .ct-tags .el-select__caret {
347
+ color: #c0c4cc;
348
+ font-size: inherit;
349
+ -webkit-transition: -webkit-transform .3s;
350
+ transition: -webkit-transform .3s;
351
+ transition: transform .3s;
352
+ transition: transform .3s, -webkit-transform .3s;
353
+ transition: transform .3s,-webkit-transform .3s;
354
+ -webkit-transform: rotateZ(180deg);
355
+ transform: rotateZ(180deg);
356
+ cursor: pointer;
357
+ }
358
+
359
+ .ct-tags .is-reverse {
360
+ -webkit-transform: rotateZ(0deg);
361
+ transform: rotateZ(0deg);
362
+ }
363
+
364
+ .ct-tags .el-tag {
365
+ -webkit-box-sizing: border-box;
366
+ box-sizing: border-box;
367
+ border-color: transparent;
368
+ margin: 2px 0 2px 6px;
369
+ background-color: #f0f2f5;
370
+ }
371
+
372
+ .ct-tags.ct-tags-mini {
373
+ font-size: 12px;
374
+ }
375
+
376
+ .ct-tags.ct-tags-small {
377
+ font-size: 13px;
378
+ }
379
+
380
+ .ct-tags.ct-tags-medium {
381
+ font-size: 14px;
382
+ }
383
+
384
+ .ct-option {
385
+ margin: 5px;
386
+ cursor:pointer;
387
+ }
388
+ .ct-tags .ct-close > .el-select__caret.is-show-close:hover {
389
+ color: #909399;
390
+ }
391
+ </style>