doway-coms 2.4.4 → 2.4.7

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.
@@ -0,0 +1,763 @@
1
+ <template>
2
+ <div style="height:300px">
3
+ <splitpanes class="default-theme">
4
+ <pane>
5
+ <vxe-table
6
+ :size="'mini'"
7
+ :height="'100%'"
8
+ show-overflow
9
+ highlight-current-row
10
+ highlight-hover-row
11
+ ref="eisTreeView"
12
+ row-id="id"
13
+ row-key
14
+ @current-change="eisCurrentChange"
15
+ border="inner"
16
+ :show-header="false"
17
+ :data="fileGroupData"
18
+ :tree-config="{
19
+ transform: true,
20
+ line: true,
21
+ rowField: 'id',
22
+ parentField: 'parentId',
23
+ expandRowKeys:['sys_top_folder']
24
+ }"
25
+ >
26
+ <vxe-column title="菜单权限" tree-node>
27
+ <template #default="{ row }">
28
+ <span>
29
+ <a-icon type="folder-open" v-if="$refs.eisTreeView.isTreeExpandByRow(row)" />
30
+ <a-icon v-else type="folder" />
31
+ <span>{{ row.name }}</span>
32
+ <span @click="handleAddSubFolder(row)" v-if="edit===true">添加</span>
33
+ <span @click="handleEditSubFolder(row)" v-if="edit===true && row.id!=='sys_top_folder'">编辑</span>
34
+ </span>
35
+ </template>
36
+ </vxe-column>
37
+ </vxe-table>
38
+ <!-- <a-tree :tree-data="fileGroupData" :selectedKeys="currentSelectKey" :replaceFields="{title:'name',key:'id'}" show-icon default-expand-all @select="handleFileGroupSelect">
39
+ <a-icon slot="fileGroup" type="folder" />
40
+ <template #title="{ name,id }">
41
+ <div>
42
+ <span>{{ name }}</span>
43
+ <span @click="handleAddSubFolder(id)" v-if="edit===true">添加</span>
44
+ <span @click="handleEditSubFolder(id,name)" v-if="edit===true && id!=='sys_top_folder'">编辑</span>
45
+ </div>
46
+ </template>
47
+ </a-tree> -->
48
+ </pane>
49
+ <pane>
50
+ <div class="card-view-items">
51
+ <div class="card-view-item" :style="{ width: itemWidth + 'px' }" v-for="loopFileData in currentFolderData" @dblclick="panelFolderDblClick(loopFileData)" :key="loopFileData.id">
52
+ {{ loopFileData.name }}
53
+ <div @click="removeAttach(loopFileData)" v-if="edit===true">删除</div>
54
+ <div @click="downloadAttach(loopFileData)" v-if="loopFileData.attachType==='file' && allowDownload===true">下载</div>
55
+ </div>
56
+
57
+ <div class="card-view-item" :style="{ width: itemWidth + 'px' }" v-if="edit===true && currentSelectKey.length>0">
58
+ <a-upload
59
+ class="avatar-uploader"
60
+ :headers="uploadHeaders"
61
+ :action="uploadData.picAction"
62
+ :multiple="true"
63
+ :data="uploadData"
64
+ @change="handleAvatarSuccess"
65
+ :showUploadList="false"
66
+ :before-upload="beforeAvatarUpload"
67
+ >
68
+ <div
69
+ style="border: 1px solid #d9d9d9; border-radius: 6px"
70
+ :style="{ width: width, height: height, lineHeight: height }"
71
+ >
72
+ <a-icon
73
+ type="plus"
74
+ class="avatar-uploader-icon"
75
+ style="text-align: center"
76
+ :style="{ width: width, height: height, lineHeight: height }"
77
+ />
78
+ </div>
79
+ </a-upload>
80
+ </div>
81
+ <div
82
+ class="card-view-item card-view-item-ghost"
83
+ :style="{ width: itemWidth + 'px' }"
84
+ ></div>
85
+ <div
86
+ class="card-view-item card-view-item-ghost"
87
+ :style="{ width: itemWidth + 'px' }"
88
+ ></div>
89
+ <div
90
+ class="card-view-item card-view-item-ghost"
91
+ :style="{ width: itemWidth + 'px' }"
92
+ ></div>
93
+ <div
94
+ class="card-view-item card-view-item-ghost"
95
+ :style="{ width: itemWidth + 'px' }"
96
+ ></div>
97
+ <div
98
+ class="card-view-item card-view-item-ghost"
99
+ :style="{ width: itemWidth + 'px' }"
100
+ ></div>
101
+ <div
102
+ class="card-view-item card-view-item-ghost"
103
+ :style="{ width: itemWidth + 'px' }"
104
+ ></div>
105
+ </div>
106
+ </pane>
107
+ </splitpanes>
108
+ <VxeModal
109
+ v-model="showEditFolder"
110
+ transfer
111
+ :height="200"
112
+ :width="400"
113
+ destroy-on-close
114
+ :z-index="999"
115
+ show-footer
116
+ >
117
+ <template #title>
118
+ <span>文件夹修改</span>
119
+ </template>
120
+ <template #default>
121
+ <a-input v-model="currentEditFolderValue"></a-input>
122
+ </template>
123
+ <template #footer>
124
+ <vxe-button @click="showEditFolder=false">取消</vxe-button>
125
+ <vxe-button status="primary" @click="confirmEditFolder">确定</vxe-button>
126
+ </template>
127
+ </VxeModal>
128
+ </div>
129
+ </template>
130
+
131
+ <script>
132
+ import { notification, Upload,Tree,Icon,Popconfirm,Input } from "ant-design-vue";
133
+ import { Checkbox, Modal } from "vxe-table";
134
+ import { attachGetAttachUrlApi, attachSearchApi } from "../../utils/api";
135
+ import XEUtils from 'xe-utils'
136
+ import { Splitpanes, Pane } from 'splitpanes'
137
+ import 'splitpanes/dist/splitpanes.css'
138
+
139
+ export default {
140
+ name: "BaseFileGroup",
141
+ components: {
142
+ VxeCheckbox: Checkbox,
143
+ "a-upload": Upload,
144
+ VxeModal: Modal,
145
+ Splitpanes, Pane,
146
+ 'a-tree':Tree,
147
+ 'a-icon':Icon,
148
+ 'a-popconfirm':Popconfirm,
149
+ 'a-input':Input
150
+ },
151
+ data() {
152
+ return {
153
+ showEditFolder:false,
154
+ currentEditInfo:{},
155
+ currentEditFolderValue:'',
156
+ currentSelectKey:[],
157
+ fileGroupData:[],
158
+ internalRows: [],
159
+ itemWidth:200,
160
+ uploadData: {
161
+ picType: "",
162
+ picAction: "",
163
+ resId: "",
164
+ },
165
+ uploadHeaders: {
166
+ Authorization: null,
167
+ },
168
+ };
169
+ },
170
+ computed:{
171
+ currentFolderData(){
172
+ if(this.currentSelectKey.length===0){
173
+ return []
174
+ }
175
+ return this.internalRows.filter(p=>p.parentId==this.currentSelectKey[0] && p.sysRowState!=='delete')
176
+ }
177
+ },
178
+ props: {
179
+ isStyle: {
180
+ type: Boolean,
181
+ default: false,
182
+ },
183
+ showEmptyText: {
184
+ type: Boolean,
185
+ default: true,
186
+ },
187
+ picType: {
188
+ type: String,
189
+ default: "cust",
190
+ },
191
+ value: {
192
+ type: String,
193
+ },
194
+ resId: {
195
+ type: String,
196
+ },
197
+ dataName: {
198
+ type: String,
199
+ },
200
+ edit: {
201
+ // 列信息
202
+ type: Boolean,
203
+ },
204
+ allowDownload: {
205
+ // 列信息
206
+ type: Boolean,
207
+ },
208
+ limitSize: {
209
+ // 限制上传大小
210
+ type: Number,
211
+ default: 5,
212
+ },
213
+ limitType: {
214
+ // 限制上传类型
215
+ type: Array,
216
+ default: () => {
217
+ return [];
218
+ },
219
+ },
220
+ formRow: {
221
+ type: Object,
222
+ default: () => {
223
+ return {};
224
+ },
225
+ },
226
+ width: {
227
+ type: String,
228
+ default: "100px",
229
+ },
230
+ height: {
231
+ type: String,
232
+ default: "100px",
233
+ },
234
+ rows: {
235
+ // 表格数据
236
+ type: Array,
237
+ default: function () {
238
+ return [];
239
+ },
240
+ },
241
+ cols: {
242
+ // 表格列信息
243
+ type: Array,
244
+ default: function () {
245
+ return [];
246
+ },
247
+ },
248
+ formState: {
249
+ // 表格列信息
250
+ type: String,
251
+ default: "",
252
+ },
253
+ },
254
+ watch: {
255
+ rows: {
256
+ handler: function (newVal) {
257
+ //构造树型结构
258
+ this.buildTreeData(newVal)
259
+ },
260
+ deep: true,
261
+ },
262
+ resId: {
263
+ handler: function (newVal) {
264
+ this.uploadData.resId = newVal;
265
+ },
266
+ },
267
+ },
268
+ created() {
269
+ },
270
+ mounted() {
271
+ // 请求头加入token
272
+ this.uploadHeaders.Authorization = `Bearer ${this.$store.getters.token}`;
273
+
274
+ this.internalServiceUrl = attachGetAttachUrlApi();
275
+ this.uploadData.picType = this.picType;
276
+ this.uploadData.resId = this.resId;
277
+ this.uploadData.picAction = this.internalServiceUrl + "/UploadAttach";
278
+
279
+ this.buildTreeData(this.rows);
280
+ },
281
+ methods: {
282
+ buildTreeData(tempRows){
283
+ this.internalRows =JSON.parse(JSON.stringify(tempRows))
284
+ let tempTopFolder = {
285
+ sysRowState: 'view',
286
+ parentId: null,
287
+ sort:0,
288
+ attachType:'folder',
289
+ name:'文件',
290
+ id:'sys_top_folder',
291
+ }
292
+ this.internalRows.push(tempTopFolder)
293
+ XEUtils.arrayEach(this.internalRows,p=>{
294
+ if(p.parentId || p.id==='sys_top_folder'){
295
+ return
296
+ }
297
+ p.parentId = 'sys_top_folder'
298
+ })
299
+
300
+ //
301
+ this.fileGroupData = XEUtils.orderBy(XEUtils.filter(this.internalRows,p=>p.attachType==='folder'),p=>p.sort)
302
+ console.debug('davistest',this.fileGroupData)
303
+ if(this.currentSelectKey.length===0){
304
+ this.$refs.eisTreeView.setCurrentRow(tempTopFolder)
305
+ this.currentSelectKey = [tempTopFolder.id]
306
+ }
307
+ // this.fileGroupData = XEUtils.toArrayTree(tempFoldRows,{strict:true,sortKey:'sort'})
308
+
309
+ // // this.internalRows.push(tempTopFolder)
310
+ // this.fileGroupData = [tempTopFolder]
311
+ // this.fileGroupData[0].children = XEUtils.toArrayTree(tempFoldRows,{strict:true,sortKey:'sort'})
312
+ //构造顶级虚拟父节点
313
+
314
+ // this.fileData = XEUtils.filter(tempRows,p=>p.attachType==='file')
315
+ },
316
+ handleAddSubFolder(rowInfo){
317
+ //添加子项文件夹
318
+ this.currentEditInfo =XEUtils.find(this.internalRows,p=>p.id===rowInfo.id)
319
+ this.currentEditInfo['operation'] = 'add'
320
+ this.showEditFolder = true
321
+ },
322
+ handleEditSubFolder(rowInfo){
323
+ this.currentEditFolderValue = rowInfo.name
324
+ //添加子项文件夹
325
+ this.currentEditInfo =XEUtils.find(this.internalRows,p=>p.id===rowInfo.id)
326
+ this.currentEditInfo['operation'] = 'edit'
327
+ this.showEditFolder = true
328
+ },
329
+ eisCurrentChange(scope) {
330
+ this.currentSelectKey = [scope.row.id]
331
+
332
+ },
333
+ confirmEditFolder(){
334
+
335
+ let tempRowInfo = this.$refs.eisTreeView.getRowById(this.currentEditInfo.id)
336
+ if(this.currentEditInfo.operation==='add'){
337
+ //新增文件夹
338
+ let tempAddRowInfo = {
339
+ sysRowState: 'add',
340
+ parentId: this.currentEditInfo.id,
341
+ sort: tempRowInfo.children.length+1,
342
+ attachType:'folder',
343
+ children:[],
344
+ name:this.currentEditFolderValue,
345
+ id:this.$store.getters.newId() + "",
346
+ }
347
+ this.internalRows.push(tempAddRowInfo)
348
+ this.$refs.eisTreeView.insertAt(tempAddRowInfo,-1)
349
+ }else{
350
+ let tempInternalRowInfo = XEUtils.find(this.internalRows,p=>p.id===this.currentEditInfo.id)
351
+ if(tempInternalRowInfo.sysRowState!=='add'){
352
+ tempInternalRowInfo.sysRowState = 'update'
353
+ }
354
+ tempInternalRowInfo.name = this.currentEditFolderValue
355
+ //修改树节点名称
356
+ tempRowInfo.name = tempInternalRowInfo.name
357
+ }
358
+ this.showEditFolder = false
359
+ this.currentEditFolderValue =null
360
+ },
361
+ panelFolderDblClick(loopFileData){
362
+ if(loopFileData.attachType==='file'){
363
+ return
364
+ }
365
+
366
+ let tempParentRowInfo = this.$refs.eisTreeView.getRowById(loopFileData.parentId)
367
+ let tempExpandRows = []
368
+ if(tempParentRowInfo){
369
+ tempExpandRows.push(tempParentRowInfo)
370
+ }
371
+ let tempRowInfo = this.$refs.eisTreeView.getRowById(loopFileData.id)
372
+ this.$refs.eisTreeView.setCurrentRow(tempRowInfo)
373
+
374
+ tempExpandRows.push(tempRowInfo)
375
+ this.$refs.eisTreeView.setTreeExpand(tempExpandRows,true)
376
+ this.currentSelectKey = [loopFileData.id]
377
+ },
378
+ handleFileGroupSelect(selectedKeys){
379
+ if(selectedKeys.length===0){
380
+ return
381
+ }
382
+ this.currentSelectKey = selectedKeys
383
+ },
384
+ getCurrentToken() {
385
+ return this.$store.getters.token;
386
+ },
387
+ /**
388
+ * 获取附件信息
389
+ */
390
+ getAttachInfo(newRows) {
391
+ let attachIds = [];
392
+ for (let i = 0; i < newRows.length; i++) {
393
+ if (newRows[i].attach) {
394
+ continue;
395
+ }
396
+ attachIds.push(newRows[i].attachId);
397
+ newRows[i].attach = {
398
+ fileName: "",
399
+ contentType: "",
400
+ content: "",
401
+ name: "",
402
+ id: newRows[i].attachId,
403
+ };
404
+ }
405
+ if (attachIds.length == 0) {
406
+ this.internalRows = newRows;
407
+ return;
408
+ }
409
+ let postData = {
410
+ fields: "id,fileName,contentType,name,content,isDefault",
411
+ begin: 1,
412
+ size: 0,
413
+ exp: "id in (",
414
+ };
415
+ for (let i = 0; i < attachIds.length; i++) {
416
+ postData.exp = postData.exp + attachIds[i] + ",";
417
+ }
418
+ let vm = this;
419
+ postData.exp = postData.exp.substr(0, postData.exp.length - 1) + ")";
420
+ attachSearchApi(postData)
421
+ .then((responseData) => {
422
+ for (let i = 0; i < responseData.content.length; i++) {
423
+ for (let x = 0; x < newRows.length; x++) {
424
+ if (responseData.content[i].id === newRows[x].attachId) {
425
+ newRows[x].attach.fileName = responseData.content[i].fileName;
426
+ newRows[x].attach.name = responseData.content[i].name;
427
+ newRows[x].attach.content = responseData.content[i].content;
428
+ newRows[x].attach.contentType =
429
+ responseData.content[i].contentType;
430
+ // newRows[x].attach.isDefault = false
431
+ break;
432
+ }
433
+ }
434
+ }
435
+ vm.internalRows = newRows;
436
+ })
437
+ .catch(() => {});
438
+ },
439
+ attachFileClick(attachFile) {},
440
+ handleAvatarSuccess(info) {
441
+ if (info.file.status == "done") {
442
+ if(info.file.response.code!==200){
443
+ alert(info.file.response.msg)
444
+ return
445
+ }
446
+ //添加文件数据
447
+ let addRow = {
448
+ attachId: info.file.response.content.id,
449
+ sysRowState: 'add',
450
+ parentId: this.currentSelectKey[0],
451
+ fileType: info.file.response.content.fileType,
452
+ sort:this.internalRows.length+1,
453
+ attachFile:'file',
454
+ name:info.file.response.content.name,
455
+ id:this.$store.getters.newId() + "",
456
+ }
457
+ this.internalRows.push(addRow);
458
+ let tempField;
459
+ for (let i = 0; i < this.cols.length; i++) {
460
+ // 赋值关联字段数据
461
+ let tempValue = addRow;
462
+ tempField = this.cols[i].field;
463
+ if (this.cols[i].isAuto) {
464
+ tempValue[tempField] = this.$store.getters.newId() + "";
465
+ continue;
466
+ }
467
+ if (
468
+ this.cols[i].controlType === "text" &&
469
+ this.cols[i].linkValueField !== null &&
470
+ this.cols[i].linkValueField !== "" &&
471
+ this.cols[i].linkValueField !== undefined
472
+ ) {
473
+ tempValue[tempField] = this.formRow[this.cols[i].linkValueField];
474
+ }
475
+ }
476
+ //通知父组件
477
+ this.$emit(
478
+ "add",
479
+ this.dataName,
480
+ info.file.response.content
481
+ );
482
+ console.debug(this.internalRows)
483
+ }
484
+ },
485
+ beforeAvatarUpload(file) {
486
+ // const isPic = file.type === 'image/jpeg' || file.type === 'image/png'
487
+ if (file.size / 1024 / 1024 > this.limitSize) {
488
+ notification.error({
489
+ message: "错误",
490
+ description: "上传图片大小不能超过 " + this.limitSize + "MB!",
491
+ });
492
+ }
493
+ if (this.limitType.length > 0 && !this.limitType[file.type]) {
494
+ notification.error({
495
+ message: "错误",
496
+ description: "上传附件格式错误!",
497
+ });
498
+ }
499
+ return true;
500
+ },
501
+ handleRemove(file, fileList) {
502
+ // this.dialogVisible = !this.dialogVisible
503
+ // alert(this.dialogVisible)
504
+ this.internalUrls = fileList;
505
+ this.$emit("remove", this.dataName, file.response.data);
506
+ // this.$emit('remove', this.dataName, file.response.data)
507
+ },
508
+ circleAttach(attachFile, internalRow) {
509
+ let vm = this;
510
+ // if(internalRow.isDefault == true){
511
+ this.internalRows.forEach((element) => {
512
+ if (element.id !== internalRow.id) {
513
+ element.isDefault = false;
514
+ }
515
+ });
516
+ // }
517
+ },
518
+ removeAttach(attachFile) {
519
+ //检查是否存在子项文件夹或者文件需要删除
520
+ let tempChild = XEUtils.find(this.internalRows,p=>p.parentId==attachFile.id && p.sysRowState!=='delete')
521
+ if(tempChild){
522
+ notification.error({
523
+ message: "错误",
524
+ description: "存在子项文件夹或者文件,请先删除子项文件夹或者文件!",
525
+ });
526
+ return
527
+ }
528
+ // console.debug(attachFile)
529
+ for (let i = 0; i < this.internalRows.length; i++) {
530
+ if (this.internalRows[i].id === attachFile.id) {
531
+ if (this.internalRows[i].sysRowState === 'add') {
532
+ this.internalRows.splice(i, 1);
533
+ } else {
534
+ this.$set(this.internalRows[i], "sysRowState", 'delete');
535
+ }
536
+ break;
537
+ }
538
+ }
539
+ this.$emit("remove", attachFile.id);
540
+ },
541
+ downloadAttach(attachFile) {
542
+ window.open(
543
+ this.internalServiceUrl +
544
+ "/DownAttachFile/" +
545
+ attachFile.attachId +
546
+ `?accessToken=${this.$store.getters.token}`
547
+ );
548
+ },
549
+ getUpdateRows(){
550
+ //先获取删除数据,因为前台删除一个明细后又添加相同的明细后台会
551
+ //报唯一索引错误,因为后台也是先添加然后再是删除的会照成问题
552
+ //所有就要把删除的放在数组的第一个传递过去,这样后台就先删除然后再新增了
553
+ let tempRemoveRows =XEUtils.filter(this.internalRows,p=>p.sysRowState==='delete' && p.id!=='sys_top_folder')
554
+ let tempAddRows =XEUtils.filter(this.internalRows,p=>p.sysRowState==='add' && p.id!=='sys_top_folder')
555
+ let tempUpdateRows =XEUtils.filter(this.internalRows,p=>p.sysRowState==='update' && p.id!=='sys_top_folder')
556
+ let tempRows = XEUtils.union(tempRemoveRows,tempAddRows,tempUpdateRows)
557
+ XEUtils.arrayEach(tempRows,p=>{
558
+ if(p.parentId==='sys_top_folder'){
559
+ p.parentId = null
560
+ }
561
+ })
562
+ return tempRows
563
+ },
564
+ /**
565
+ * 查看附件
566
+ */
567
+ viewAttach(attachFile) {
568
+ if (attachFile.contentType === "application/pdf") {
569
+ this.dialogImageUrl = `${this.internalServiceUrl}/GetAttachFile/${attachFile.id}?accessToken=${this.$store.getters.token}`;
570
+ this.dialogViewType = attachFile.contentType;
571
+ this.dialogVisible = true;
572
+ } else if (attachFile.content === "image") {
573
+ this.dialogImageUrl = `${this.internalServiceUrl}/GetAttachFile/${attachFile.id}?accessToken=${this.$store.getters.token}`;
574
+ this.dialogViewType = attachFile.contentType;
575
+ this.dialogVisible = true;
576
+ }
577
+ this.currentFileTitle = attachFile.name
578
+ },
579
+ closePdf() {
580
+ this.isShowPdf = false;
581
+ },
582
+ },
583
+ };
584
+ </script>
585
+
586
+ <style lang="scss" scoped>
587
+ .file-card {
588
+ display: flex;
589
+ flex-flow: row wrap;
590
+ margin: 0 0 5px 5px;
591
+
592
+ .attach-wrapper {
593
+ .attach {
594
+ position: relative;
595
+ margin-right: 5px;
596
+
597
+ .attach-delete {
598
+ position: absolute;
599
+ top: -2px;
600
+ right: -4px;
601
+ opacity: 0;
602
+ font-size: 20px;
603
+ background-color: red;
604
+ }
605
+
606
+ .attach-delete:hover {
607
+ cursor: pointer;
608
+ }
609
+
610
+ .attach-download {
611
+ position: absolute;
612
+ bottom: 10px;
613
+ left: 4px;
614
+ opacity: 0;
615
+ font-size: 18px;
616
+ font-weight: bolder;
617
+ border: 1px solid #ccc;
618
+ border-radius: 50%;
619
+ border-color: transparent;
620
+ //background-color: rgb(255, 1, 1);
621
+ color: #000;
622
+ }
623
+
624
+ .attach-download:hover {
625
+ cursor: pointer;
626
+ color: rgb(189, 8, 8);
627
+ }
628
+
629
+ .attach-view {
630
+ position: absolute;
631
+ bottom: 10px;
632
+ right: 4px;
633
+ opacity: 0;
634
+ font-size: 18px;
635
+ font-weight: bolder;
636
+ border: 1px solid #ccc;
637
+ border-radius: 50%;
638
+ border-color: transparent;
639
+ //background-color: #666;
640
+ color: #000;
641
+ }
642
+
643
+ .attach-circle {
644
+ position: absolute;
645
+ // bottom: 10px;
646
+ top: 2px;
647
+ left: 4px;
648
+ opacity: 0;
649
+ }
650
+
651
+ .attach-view:hover {
652
+ cursor: pointer;
653
+ color: rgb(189, 8, 8);
654
+ }
655
+ }
656
+
657
+ .attach:hover > .attach-delete {
658
+ opacity: 0.8;
659
+ }
660
+
661
+ .attach:hover > .attach-download {
662
+ opacity: 0.7;
663
+ }
664
+
665
+ .attach:hover > .attach-view {
666
+ opacity: 0.7;
667
+ }
668
+
669
+ .attach:hover > .attach-circle {
670
+ opacity: 0.9;
671
+ }
672
+ }
673
+ }
674
+ .tree-node-icon {
675
+ width: 16px;
676
+ text-align: center;
677
+ }
678
+
679
+ .avatar-uploader .el-upload {
680
+ border: 1px solid #d9d9d9;
681
+
682
+ border-radius: 6px;
683
+ cursor: pointer;
684
+ position: relative;
685
+ overflow: hidden;
686
+ }
687
+
688
+ .avatar-uploader .el-upload:hover {
689
+ border-color: #409eff;
690
+ }
691
+
692
+ .avatar-uploader-icon {
693
+ font-size: 28px;
694
+ color: #8c939d;
695
+ // width: 178px;
696
+ // height: 178px;
697
+ line-height: 178px;
698
+ text-align: center;
699
+ }
700
+
701
+ .avatar {
702
+ // width: 178px;
703
+ // height: 178px;
704
+ display: block;
705
+ }
706
+
707
+ .el-upload-list__item is-success {
708
+ float: left;
709
+ }
710
+ .currentHeight {
711
+ display: flex;
712
+ align-items: center;
713
+ }
714
+ .card-view-items {
715
+ // margin-top: 100px;
716
+ // margin-left: 100px;
717
+ // margin-right: 100px;
718
+ display: flex;
719
+ flex-flow: row wrap;
720
+ justify-content: flex-start;
721
+ padding: 8px 8px 8px 8px;
722
+ overflow-y: auto;
723
+ .card-view-item-ghost {
724
+ visibility: hidden;
725
+ height: 0px !important;
726
+ min-height: 0px !important;
727
+ margin-top: 0px;
728
+ margin-bottom: 0px;
729
+ padding: 0px 0px 0px 0px;
730
+ }
731
+ .card-view-item {
732
+ cursor: pointer;
733
+ // height: 100px;
734
+ // margin-top: 4px;
735
+ // margin-right: 8px;
736
+ // margin-bottom: 4px;
737
+ // margin-left: 8px;
738
+ flex-grow: 1;
739
+ flex-shrink: 1;
740
+ flex-basis: auto;
741
+ border: 1px solid #9ad4dc;
742
+ margin-top: 4px;
743
+ margin-right: 8px;
744
+ margin-bottom: 4px;
745
+ margin-left: 8px;
746
+ padding: 8px 8px 8px 8px;
747
+ //border-color: #9ad4dc;
748
+ min-width: 150px;
749
+ border-radius: 6px;
750
+ .card-view-icon {
751
+ float: left;
752
+ width: 64px;
753
+ height: 64px;
754
+ }
755
+ // .card-view-desc {
756
+ // padding-left: 85px;
757
+ // }
758
+ }
759
+ .card-view-item:hover {
760
+ border: 1px solid #1269db;
761
+ }
762
+ }
763
+ </style>