centaline-data-driven 1.1.55 → 1.1.59

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