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,283 +1,288 @@
1
- <template>
2
- <div style="width:100%" v-if="model !== null" class="block ct-file" :class="[model.attrs.size?'ct-checkbox-'+model.attrs.size:'']">
3
- <el-upload :class="model.lock?'ct-upload-display-none':''"
4
- :disabled="model.lock"
5
- :accept="model.fileAccept"
6
- :on-change="handleChange"
7
- list-type="picture-card"
8
- :file-list="model.fileList"
9
- :multiple="true"
10
- :auto-upload="true"
11
- :action="model.action"
12
- :data="model.uploadData"
13
- :headers="headers"
14
- :before-upload="beforeUploadProcess"
15
- :on-success="handleAvatarSuccess"
16
- :on-progress="uploadProcess">
17
- <i slot="default" class="el-icon-plus"></i>
18
- <div slot="tip" class="el-upload__tip errorMessage" v-show="!valid">{{validMessage}}</div>
19
- <div slot="file" slot-scope="{file}" :title="file.fileName">
20
- <div class="cover-list-item">
21
- <el-image fit="fill" :src="file.url"
22
- style="width: 100px; height: 100px"
23
- :preview-src-list="getPreviewSrcList(file)"
24
- :z-index="previewZIndex"
25
- @click="handlePictureCardPreview(file)">
26
- </el-image>
27
- <span class="cover-list-item-span-delete" v-if="!model.lock && file.rightDel">
28
- <i class="el-icon-delete" @click="handleRemove(file)"></i>
29
- </span>
30
- <span class="cover-list-item-span">
31
- <!--锁定-->
32
- <span v-if="model.lock || !file.rightEdit" class="el-dropdown-link">
33
- &nbsp;{{file.mediaLabelName}}
34
- </span>
35
- <!--复杂分类-->
36
- <span v-else-if="model.isComplexClassify" class="el-dropdown-link" @click="classifyFormClickHandle(file)">
37
- &nbsp;{{file.mediaLabelName}}<i class="el-icon-arrow-down el-icon--right"></i>
38
- </span>
39
- <!--简单分类-->
40
- <el-dropdown v-else class="el-upload-list__item-preview" trigger="click" placement="top" @command="classifySelectedClickHandle">
41
- <span class="el-dropdown-link" @click="classifyClickHandle">
42
- &nbsp;{{file.mediaLabelName}}<i class="el-icon-arrow-down el-icon--right"></i>
43
- </span>
44
- <el-dropdown-menu slot="dropdown" class="el-upload-list__item-preview">
45
- <el-dropdown-item v-for="(option, index) in model.optionModel.options" :key="index" :command="{option:option,file:file}">
46
- {{option[model.optionModel.optionAttrs.label]}}
47
- </el-dropdown-item>
48
- </el-dropdown-menu>
49
- </el-dropdown>
50
- </span>
51
- </div>
52
- <el-progress type="circle" v-if="file.progressFlag" :percentage="file.loadProgress"></el-progress>
53
- </div>
54
- </el-upload>
55
- </div>
56
- </template>
57
- <script>
58
- import dynamicElement from '../../mixins/dynamicElement';
59
- export default {
60
- name: 'ct-file',
61
- mixins: [dynamicElement],
62
- props: {
63
- vmodel: Object,
64
- api: String
65
- },
66
- data() {
67
- return {
68
- };
69
- },
70
- computed: {
71
- headers: function () {
72
- return this.$common.getDataDrivenOpts().handler.getRequestHeaders();
73
- },
74
- previewZIndex: function () {
75
- return this.$common.getDataDrivenOpts().zindex + 100;
76
- }
77
- },
78
- created() {
79
- var self = this;
80
- this.$nextTick(function () {
81
-
82
- if (self.vmodel) {
83
- self.load(self.vmodel);
84
- self.$emit('loaded');
85
- }
86
- else if (typeof self.source !== 'undefined') {
87
- self.loaderObj.File(self.source, (data) => {
88
- self.load(data);
89
- });
90
- }
91
- });
92
- },
93
- methods: {
94
- load(data) {
95
- this.model = data;
96
- },
97
- //删除
98
- handleRemove(file) {
99
- this.$common.confirm("确定删除该附件?", "提示", {
100
- confirmButtonText: "确定",
101
- cancelButtonText: "取消",
102
- //type: 'warning'
103
- }).then(() => {
104
- this.model.deleteFile(file, false);
105
- }).catch(() => {
106
- });
107
- },
108
- handlePictureCardPreview(file) {
109
- if (this.$common.isAssetTypeAnImage(this.getSuffix(file))) {
110
- //this.$openPreview([file.mediaUrl]);
111
- }
112
- else {
113
- if (file.rightDownload) {
114
- window.open(file.mediaUrl, "_blank");
115
- }
116
- return [];
117
- }
118
- },
119
- getPreviewSrcList(file) {
120
- if (this.$common.isAssetTypeAnImage(this.getSuffix(file))) {
121
- let arr = this.model.fileList.filter(at => this.$common.isAssetTypeAnImage(this.getSuffix(at))).map(attach => {
122
- return attach.mediaUrl;
123
- })
124
-
125
- //让看起来有序
126
- let nowIndex = arr.findIndex(photo => photo === file.mediaUrl)
127
- if (nowIndex > -1) {
128
- let start = arr.slice(0, nowIndex)
129
- let end = arr.slice(nowIndex)
130
- arr = [...end, ...start]
131
- }
132
- return arr;
133
- }
134
- else {
135
- return [];
136
- }
137
- },
138
- getSuffix(file) {
139
- if (file.fileExtension) {
140
- return file.fileExtension;
141
- }
142
- if (file.name) {
143
- let nameArr = file.name.split('.');
144
- return nameArr[nameArr.length - 1];
145
- }
146
- return '';
147
- },
148
- handleDownload(file) {
149
- console.log(file);
150
- },
151
- handleChange(file, fileList) {
152
- this.changeHandler(this.model.value);
153
- },
154
- //上传之前的钩子
155
- beforeUploadProcess(files) {
156
- if (this.model.max) {
157
- if (this.model.getfileListLength() >= this.model.max) {
158
- this.validMessage = "附件最多" + this.model.max + "个";
159
- this.valid = false;
160
- return false;
161
- }
162
- }
163
- return true;
164
- },
165
- //文件上传时的钩子
166
- uploadProcess(event, file, fileList) {
167
- file.progressFlag = true; // 显示进度条
168
- file.loadProgress = parseInt(event.percent); // 动态获取文件上传进度
169
- if (file.loadProgress >= 100) {
170
- file.loadProgress = 100
171
- setTimeout(() => {
172
- file.progressFlag = false
173
- }, 1000) // 一秒后关闭进度条
174
- }
175
- },
176
- //上传完成钩子
177
- handleAvatarSuccess(res, file, fileList) {
178
- this.model.handleAvatarSuccess(res, file, fileList);
179
- },
180
- //不能共用的数据校验
181
- selfValidExcute: function (eventName) {
182
- if (this.model.required) {
183
- if (this.model.getfileListLength() === 0) {
184
- this.validMessage = "必须上传附件";
185
- this.valid = false;
186
- return false;
187
- }
188
- }
189
-
190
- if (this.model.max) {
191
- if (this.model.getfileListLength() > this.model.max) {
192
- this.validMessage = "附件最多" + this.model.max+ "个";
193
- this.valid = false;
194
- return false;
195
- }
196
- }
197
- if (this.model.min) {
198
- if (this.model.getfileListLength() < this.model.min) {
199
- this.validMessage = "附件最少" + this.model.min + "个";
200
- this.valid = false;
201
- return false;
202
- }
203
- }
204
-
205
- this.valid = true;
206
- return this.valid;
207
- },
208
-
209
- classifyClickHandle: function () {
210
- var self = this;
211
- this.model.getOptions(() => {
212
- self.$forceUpdate();
213
- });
214
- },
215
- classifySelectedClickHandle: function (classify) {
216
- classify.file.mediaLabelName = classify.option[this.model.optionModel.optionAttrs.label];
217
- classify.file.mediaLabelID = classify.option[this.model.optionModel.optionAttrs.value];
218
- this.model.setClassify(classify);
219
- },
220
- classifyFormClickHandle: function (file) {
221
- var self = this;
222
- this.model.updateClassify(file, () => {
223
- //self.$forceUpdate();
224
- });
225
- },
226
- }
227
- }
228
- </script>
229
- <style>
230
- .ct-upload-display-none .el-upload--picture-card {
231
- display: none;
232
-
233
- }
234
- .el-upload-list__item .is-ready{
235
- width: 100px;
236
- height: 100px;
237
- } .ct-file .cover-list-item {
238
- position: sticky;
239
- }
240
-
241
- .ct-file .cover-list-item-span {
242
- position: inherit;
243
- bottom: 0px;
244
- left: 0px;
245
- display: block;
246
- background-color: #544f48;
247
- opacity: 0.8;
248
- }
249
- .ct-file .cover-list-item-span-delete {
250
- position: inherit;
251
- bottom: 160px;
252
- left: 130px;
253
- color: #000000;
254
- text-align: center;
255
- }
256
- .cover-list-item-span-delete i {
257
- cursor: pointer;
258
- }
259
- .ct-file .el-dropdown-link {
260
- cursor: pointer;
261
- color: #fff;
262
- }
263
-
264
- .ct-file .el-icon-arrow-down {
265
- font-size: 12px;
266
- }
267
- .el-collapse-item__content{
268
- padding-bottom: 18px;
269
- }
270
- .el-upload--picture-card{
271
- width: 100px;
272
- height: 100px;
273
- line-height:initial;
274
- padding: 34px;
275
- }
276
- .el-upload--picture-card i{
277
- font-size: 30px;
278
- }
279
- .el-upload-list--picture-card .el-upload-list__item{
280
- width: 100px;
281
- height: 100px;
282
- }
283
- </style>
1
+ <template>
2
+ <div style="width:100%" v-if="model !== null" class="block ct-file" :class="[model.attrs.size?'ct-checkbox-'+model.attrs.size:'']">
3
+ <el-upload :class="model.lock?'ct-upload-display-none':''"
4
+ :disabled="model.lock"
5
+ :accept="model.fileAccept"
6
+ :on-change="handleChange"
7
+ list-type="picture-card"
8
+ :file-list="model.fileList"
9
+ :multiple="true"
10
+ :auto-upload="true"
11
+ :action="model.action"
12
+ :data="model.uploadData"
13
+ :headers="headers"
14
+ :before-upload="beforeUploadProcess"
15
+ :on-success="handleAvatarSuccess"
16
+ :on-progress="uploadProcess">
17
+ <i slot="default" class="el-icon-plus"></i>
18
+ <div slot="tip" class="el-upload__tip errorMessage" v-show="!imgValid">{{validMessage}}</div>
19
+ <div slot="file" slot-scope="{file}" :title="file.fileName">
20
+ <div class="cover-list-item">
21
+ <el-image fit="fill" :src="file.url"
22
+ style="width: 100px; height: 100px"
23
+ :preview-src-list="getPreviewSrcList(file)"
24
+ :z-index="previewZIndex"
25
+ @click="handlePictureCardPreview(file)">
26
+ </el-image>
27
+ <span class="cover-list-item-span-delete" v-if="!model.lock && file.rightDel">
28
+ <i class="el-icon-delete" @click="handleRemove(file)"></i>
29
+ </span>
30
+ <span class="cover-list-item-span" v-if="model.paramName">
31
+ <!--锁定-->
32
+ <span v-if="model.lock || !file.rightEdit" class="el-dropdown-link">
33
+ &nbsp;{{file.mediaLabelName}}
34
+ </span>
35
+ <!--复杂分类-->
36
+ <span v-else-if="model.isComplexClassify" class="el-dropdown-link" @click="classifyFormClickHandle(file)">
37
+ &nbsp;{{file.mediaLabelName}}<i class="el-icon-arrow-down el-icon--right"></i>
38
+ </span>
39
+ <!--简单分类-->
40
+ <el-dropdown v-else class="el-upload-list__item-preview" trigger="click" placement="top" @command="classifySelectedClickHandle">
41
+ <span class="el-dropdown-link" @click="classifyClickHandle">
42
+ &nbsp;{{file.mediaLabelName}}<i class="el-icon-arrow-down el-icon--right"></i>
43
+ </span>
44
+ <el-dropdown-menu slot="dropdown" class="el-upload-list__item-preview">
45
+ <el-dropdown-item v-for="(option, index) in model.optionModel.options" :key="index" :command="{option:option,file:file}">
46
+ {{option[model.optionModel.optionAttrs.label]}}
47
+ </el-dropdown-item>
48
+ </el-dropdown-menu>
49
+ </el-dropdown>
50
+ </span>
51
+ </div>
52
+ <el-progress type="circle" v-if="file.progressFlag" :percentage="file.loadProgress"></el-progress>
53
+ </div>
54
+ </el-upload>
55
+ </div>
56
+ </template>
57
+ <script>
58
+ import dynamicElement from '../../mixins/dynamicElement';
59
+ export default {
60
+ name: 'ct-file',
61
+ mixins: [dynamicElement],
62
+ props: {
63
+ vmodel: Object,
64
+ api: String
65
+ },
66
+ data() {
67
+ return {
68
+ imgValid:true,
69
+ };
70
+ },
71
+ computed: {
72
+ headers: function () {
73
+ return this.$common.getDataDrivenOpts().handler.getRequestHeaders();
74
+ },
75
+ previewZIndex: function () {
76
+ return this.$common.getDataDrivenOpts().zindex + 100;
77
+ }
78
+ },
79
+ created() {
80
+ var self = this;
81
+ this.$nextTick(function () {
82
+
83
+ if (self.vmodel) {
84
+ self.load(self.vmodel);
85
+ self.$emit('loaded');
86
+ }
87
+ else if (typeof self.source !== 'undefined') {
88
+ self.loaderObj.File(self.source, (data) => {
89
+ self.load(data);
90
+ });
91
+ }
92
+ });
93
+ },
94
+ methods: {
95
+ load(data) {
96
+ this.model = data;
97
+ },
98
+ //删除
99
+ handleRemove(file) {
100
+ this.$common.confirm("确定删除该附件?", "提示", {
101
+ confirmButtonText: "确定",
102
+ cancelButtonText: "取消",
103
+ //type: 'warning'
104
+ }).then(() => {
105
+ this.model.deleteFile(file, false);
106
+ }).catch(() => {
107
+ });
108
+ },
109
+ handlePictureCardPreview(file) {
110
+ if (this.$common.isAssetTypeAnImage(this.getSuffix(file))) {
111
+ this.$openPreview([file.mediaUrl]);
112
+ }
113
+ else {
114
+ if (file.rightDownload) {
115
+ window.open(file.mediaUrl, "_blank");
116
+ }
117
+ return [];
118
+ }
119
+ },
120
+ getPreviewSrcList(file) {
121
+ if (this.$common.isAssetTypeAnImage(this.getSuffix(file))) {
122
+ let arr = this.model.fileList.filter(at => this.$common.isAssetTypeAnImage(this.getSuffix(at))).map(attach => {
123
+ return attach.mediaUrl;
124
+ })
125
+
126
+ //让看起来有序
127
+ let nowIndex = arr.findIndex(photo => photo === file.mediaUrl)
128
+ if (nowIndex > -1) {
129
+ let start = arr.slice(0, nowIndex)
130
+ let end = arr.slice(nowIndex)
131
+ arr = [...end, ...start]
132
+ }
133
+ return arr;
134
+ }
135
+ else {
136
+ return [];
137
+ }
138
+ },
139
+ getSuffix(file) {
140
+ if (file.fileExtension) {
141
+ return file.fileExtension;
142
+ }
143
+ if (file.name) {
144
+ let nameArr = file.name.split('.');
145
+ return nameArr[nameArr.length - 1];
146
+ }
147
+ return '';
148
+ },
149
+ handleDownload(file) {
150
+ console.log(file);
151
+ },
152
+ handleChange(file, fileList) {
153
+ this.changeHandler(this.model.value);
154
+ },
155
+ //上传之前的钩子
156
+ beforeUploadProcess(files) {
157
+ let that=this;
158
+ if (this.model.max) {
159
+ if (this.model.getfileListLength() >= this.model.max) {
160
+ this.validMessage = "附件最多" + this.model.max + "个";
161
+ this.imgValid = false;
162
+ setTimeout(() => {
163
+ that.imgValid = true;
164
+ }, 3000)
165
+ return false;
166
+ }
167
+ }
168
+ return true;
169
+ },
170
+ //文件上传时的钩子
171
+ uploadProcess(event, file, fileList) {
172
+ file.progressFlag = true; // 显示进度条
173
+ file.loadProgress = parseInt(event.percent); // 动态获取文件上传进度
174
+ if (file.loadProgress >= 100) {
175
+ file.loadProgress = 100
176
+ setTimeout(() => {
177
+ file.progressFlag = false
178
+ }, 1000) // 一秒后关闭进度条
179
+ }
180
+ },
181
+ //上传完成钩子
182
+ handleAvatarSuccess(res, file, fileList) {
183
+ this.model.handleAvatarSuccess(res, file, fileList);
184
+ },
185
+ //不能共用的数据校验
186
+ selfValidExcute: function (eventName) {
187
+ if (this.model.required) {
188
+ if (this.model.getfileListLength() === 0) {
189
+ this.validMessage = "必须上传附件";
190
+ this.valid = false;
191
+ return false;
192
+ }
193
+ }
194
+
195
+ if (this.model.max) {
196
+ if (this.model.getfileListLength() > this.model.max) {
197
+ this.validMessage = "附件最多" + this.model.max+ "个";
198
+ this.valid = false;
199
+ return false;
200
+ }
201
+ }
202
+ if (this.model.min) {
203
+ if (this.model.getfileListLength() < this.model.min) {
204
+ this.validMessage = "附件最少" + this.model.min + "个";
205
+ this.valid = false;
206
+ return false;
207
+ }
208
+ }
209
+
210
+ this.valid = true;
211
+ return this.valid;
212
+ },
213
+
214
+ classifyClickHandle: function () {
215
+ var self = this;
216
+ this.model.getOptions(() => {
217
+ self.$forceUpdate();
218
+ });
219
+ },
220
+ classifySelectedClickHandle: function (classify) {
221
+ classify.file.mediaLabelName = classify.option[this.model.optionModel.optionAttrs.label];
222
+ classify.file.mediaLabelID = classify.option[this.model.optionModel.optionAttrs.value];
223
+ this.model.setClassify(classify);
224
+ },
225
+ classifyFormClickHandle: function (file) {
226
+ var self = this;
227
+ this.model.updateClassify(file, () => {
228
+ //self.$forceUpdate();
229
+ });
230
+ },
231
+ }
232
+ }
233
+ </script>
234
+ <style>
235
+ .ct-upload-display-none .el-upload--picture-card {
236
+ display: none;
237
+
238
+ }
239
+ .el-upload-list__item .is-ready{
240
+ width: 100px;
241
+ height: 100px;
242
+ } .ct-file .cover-list-item {
243
+ position: sticky;
244
+ }
245
+
246
+ .ct-file .cover-list-item-span {
247
+ position: inherit;
248
+ bottom: 0px;
249
+ left: 0px;
250
+ display: block;
251
+ background-color: #544f48;
252
+ opacity: 0.8;
253
+ }
254
+ .ct-file .cover-list-item-span-delete {
255
+ position: inherit;
256
+ bottom: 160px;
257
+ left: 130px;
258
+ color: #000000;
259
+ text-align: center;
260
+ }
261
+ .cover-list-item-span-delete i {
262
+ cursor: pointer;
263
+ }
264
+ .ct-file .el-dropdown-link {
265
+ cursor: pointer;
266
+ color: #fff;
267
+ }
268
+
269
+ .ct-file .el-icon-arrow-down {
270
+ font-size: 12px;
271
+ }
272
+ .el-collapse-item__content{
273
+ padding-bottom: 18px;
274
+ }
275
+ .el-upload--picture-card{
276
+ width: 100px;
277
+ height: 100px;
278
+ line-height:initial;
279
+ padding: 34px;
280
+ }
281
+ .el-upload--picture-card i{
282
+ font-size: 30px;
283
+ }
284
+ .el-upload-list--picture-card .el-upload-list__item{
285
+ width: 100px;
286
+ height: 100px;
287
+ }
288
+ </style>
@@ -1,24 +1,24 @@
1
- import dynamicForm from './src/dynamicForm'
2
- import dynamicInput from '../dynamicInput/index'
3
- import dynamicLabel from '../dynamicLabel/index'
4
- import dynamicLs from '../dynamicLs/index'
5
- import api from '../api/index'
6
- import common from '../common/index'
7
- import validate from '../validate/index'
8
-
9
- dynamicForm.install = function (Vue) {
10
- Vue.component(dynamicForm.name, dynamicForm);
11
- Vue.component(dynamicInput.name, dynamicInput);
12
- Vue.component(dynamicLabel.name, dynamicLabel);
13
- Vue.component(dynamicLs.name, dynamicLs);
14
-
15
- Vue.use(api);
16
- Vue.use(common);
17
- Vue.use(validate);
18
- }
19
-
20
- if (typeof window !== 'undefined' && window.Vue) {
21
- window.Vue.use(dynamicForm);
22
- }
23
-
24
- export default dynamicForm;
1
+ import dynamicForm from './src/dynamicForm'
2
+ import dynamicInput from '../dynamicInput/index'
3
+ import dynamicLabel from '../dynamicLabel/index'
4
+ import dynamicLs from '../dynamicLs/index'
5
+ import api from '../api/index'
6
+ import common from '../common/index'
7
+ import validate from '../validate/index'
8
+
9
+ dynamicForm.install = function (Vue) {
10
+ Vue.component(dynamicForm.name, dynamicForm);
11
+ Vue.component(dynamicInput.name, dynamicInput);
12
+ Vue.component(dynamicLabel.name, dynamicLabel);
13
+ Vue.component(dynamicLs.name, dynamicLs);
14
+
15
+ Vue.use(api);
16
+ Vue.use(common);
17
+ Vue.use(validate);
18
+ }
19
+
20
+ if (typeof window !== 'undefined' && window.Vue) {
21
+ window.Vue.use(dynamicForm);
22
+ }
23
+
24
+ export default dynamicForm;