cloud-web-corejs 1.1.0-dev.6 → 1.1.0-dev.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.
Files changed (45) hide show
  1. package/package.json +1 -1
  2. package/src/components/VabUpload/view.vue +27 -26
  3. package/src/components/excelImport/index.vue +156 -156
  4. package/src/components/mobile/wf/addTaskUserdialog.vue +23 -3
  5. package/src/components/mobile/wf/content.vue +110 -67
  6. package/src/components/mobile/wf/deleteTaskUserDialog.vue +22 -3
  7. package/src/components/mobile/wf/selectUserDialog.vue +122 -0
  8. package/src/components/mobile/wf/setCandidateDialog.vue +25 -4
  9. package/src/components/mobile/wf/urgingDialog.vue +26 -3
  10. package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
  11. package/src/components/xform/form-designer/designer.js +36 -52
  12. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +185 -185
  13. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +1 -1
  14. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +2 -2
  15. package/src/components/xform/form-designer/indexMixin.js +25 -0
  16. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +833 -860
  17. package/src/components/xform/form-designer/toolbar-panel/index.vue +874 -874
  18. package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
  19. package/src/components/xform/form-designer/widget-panel/indexMixin.js +15 -2
  20. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +53 -1
  21. package/src/components/xform/form-render/container-item/list-h5-item.vue +154 -27
  22. package/src/components/xform/form-render/indexMixin.js +23 -3
  23. package/src/components/xform/styles/h5.scss +774 -588
  24. package/src/directive/append-to-body/index.js +48 -0
  25. package/src/index.js +4 -0
  26. package/src/layout/components/Sidebar/default.vue +1655 -1655
  27. package/src/router/index.js +48 -48
  28. package/src/utils/vab.js +1283 -1283
  29. package/src/views/bd/setting/form_template/edit.vue +378 -356
  30. package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
  31. package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
  32. package/src/views/bd/setting/form_template/list.vue +304 -303
  33. package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
  34. package/src/views/bd/setting/form_template/mixins/list.js +748 -721
  35. package/src/views/user/file_view_ins/list.vue +970 -970
  36. package/src/views/user/form/vform/designer.vue +823 -821
  37. package/src/views/user/home/default.vue +1117 -1117
  38. package/src/views/user/home/index.vue +103 -103
  39. package/src/views/user/notify_message/dialog.vue +139 -139
  40. package/src/views/user/outLink/form_view.vue +202 -202
  41. package/src/views/user/outLink/index.vue +110 -110
  42. package/src/views/user/wf/iframe/index.vue +51 -51
  43. package/src/views/user/wf/iframe/index2.vue +64 -64
  44. package/src/views/user/wf/wf_manage/list2.vue +871 -871
  45. package/src/views/user/wf/wf_manage/wfContentDialog.vue +134 -134
@@ -1,970 +1,970 @@
1
- <template>
2
- <div id="containt">
3
- <div v-show="title!='' && title!=null">
4
- <div class="tree-box tree-annex fl">
5
- <div class="tit"><b>{{ title }}</b></div>
6
- <div class="tree-form">
7
- <el-input :placeholder="$t1('请输入查询区名称')" v-model="filterText" class="txt">
8
- <el-button slot="append" icon="el-icon-search"></el-button>
9
- </el-input>
10
- </div>
11
- <el-tree
12
- v-if="treeFlag"
13
- :props="defaultProps"
14
- :load="loadNode"
15
- node-key="id"
16
- ref="tree"
17
- lazy
18
- :filter-node-method="filterNode"
19
- :expand-on-click-node="false"
20
- @node-click="handleNodeClick"
21
- class="tree-list"
22
- icon-class="el-icon-arrow-down"
23
- >
24
- <span class="el-tree-node__label" slot-scope="{ node, data }" v-if="!node.data.moreBtn">
25
- <i class="ico-wenjian"></i>
26
- <span>{{ node.label }}</span>
27
- </span>
28
- <span v-else class="el-tree-node__label">
29
- <el-button type="primary" plain class="button-sty">{{ node.label }}</el-button>
30
- </span>
31
- </el-tree>
32
- </div>
33
- <label id="labBtn">
34
- <div class="icon">
35
- <i class="el-icon-more"></i>
36
- <i class="el-icon-more"></i>
37
- </div>
38
- </label>
39
- <div class="main-right file-library fr" style="overflow: hidden;">
40
- <div class="annex-screen">
41
- <el-button type="primary" class="button-sty" icon="el-icon-download" @click.native="mulDownload2">
42
- {{ $t1('下载') }}
43
- </el-button>
44
- </div>
45
- <div class="line"></div>
46
- <div class="annex-crumbs">
47
- <span class="tit"><i class="iconfont icon-wenjianjia"></i>{{ $t1('文件区') }}</span>
48
- <el-breadcrumb separator-class="el-icon-arrow-right">
49
- <el-breadcrumb-item v-for="(treeNode,index) in treeNodeArr" :key="index" @click.native="doNav(treeNode)">{{
50
- treeNode.label
51
- }}
52
- </el-breadcrumb-item>
53
- </el-breadcrumb>
54
- </div>
55
- <div class="grid-height viewBox">
56
- <div class="annex-searchBox">
57
- <div class="fl">
58
- <div class="oper">
59
- <el-checkbox v-model="checkAll" @change="changeCheckAll" :disabled="checkAllDisabled"
60
- :indeterminate="checkAllIndeterminate">{{ $t1('已选中') }} {{
61
- checkList.length
62
- }} {{ $t1('项') }}
63
- </el-checkbox>
64
- </div>
65
- <div class="search-box">
66
- <el-input :placeholder="$t1('请输入文件名')" v-model="formData.name" clearable>
67
- <el-button slot="append" icon="el-icon-search" @click="searchEvent"></el-button>
68
- </el-input>
69
- </div>
70
- </div>
71
- <div class="fr">
72
-
73
- <el-button type="primary" icon="iconfont icon-icmenu2" @click="changeShowType()"
74
- class="button-sty icon-btn"
75
- v-show="showType==1">{{ $t1('列表') }}
76
- </el-button>
77
- <el-button type="primary" style="margin-left:0;" icon="el-icon-menu" @click="changeShowType()"
78
- class="button-sty icon-btn"
79
- v-show="showType==2">{{ $t1('图示') }}
80
- </el-button>
81
- </div>
82
-
83
- </div>
84
- <div class="containter1" ref="containter1" v-show="showType==1" style="overflow: auto;">
85
- <div class="annex-piclist">
86
- <div class="clearfix">
87
- <el-checkbox-group v-model="checkList" @change="checkChange" class="f-group">
88
- <template v-for="(attachment) in page.records">
89
- <li :key="attachment.id" class="item" :class="checkList.includes(attachment.id) ? 'on':''">
90
- <el-checkbox :label="attachment.id"><span></span></el-checkbox>
91
- <div class="oper">
92
- <el-tooltip effect="dark" :content="$t1('详情')" placement="top"><i
93
- class="el-tooltip iconfont icon-shuxing ico"
94
- @click="openPropertiesDialog(attachment)"></i>
95
- </el-tooltip>
96
- <a href="javascript:void(0);" class="a-link ico" v-if="attachment.billUrl">
97
- <el-tooltip effect="dark" :content="$t1('查看单据')" placement="top"><i
98
- class="el-icon-files"
99
- @click="openWfDialog(attachment)"></i>
100
- </el-tooltip>
101
- </a>
102
- <a
103
- href="javascript:void(0);"
104
- class="a-link ico"
105
- v-if="!attachment.dirs"
106
- @click="$commonFileUtil.downloadFile(attachment.domain + attachment.url, attachment.name)"
107
- >
108
- <el-tooltip effect="dark" :content="$t1('下载')" placement="top"
109
- popper-class="tooltip-skin">
110
- <i class="el-icon-download"/>
111
- </el-tooltip>
112
- </a>
113
- </div>
114
- <div class="img" @click="openPreview(attachment)" v-if="!attachment.dirs">
115
- <div class="show-video" v-if="hasPreview(attachment)"><i class="icon-chakan"></i></div>
116
- <div class="show-video" v-if="false"><i class="el-icon-video-play"></i></div>
117
- <p><img :src="getShowUrl(attachment)"/></p>
118
- </div>
119
- <div class="img" @click="changeCategory(attachment)" v-if="attachment.dirs">
120
- <svg-icon icon-class="ico-wenjianjia"/>
121
- </div>
122
- <el-tooltip :enterable="false" effect="dark" :content="attachment.name" placement="top">
123
- <div class="txt-box">
124
- <div class="tb-left"></div>
125
- <div class="tb-mid">
126
- <div class="txt">
127
- <span class="name">{{ getFileName(attachment) }}</span><span
128
- v-if="attachment.extension">.{{ attachment.extension }}</span>
129
- </div>
130
- </div>
131
- <div class="format">... .{{ attachment.extension }}</div>
132
- </div>
133
-
134
- </el-tooltip>
135
- </li>
136
- </template>
137
- </el-checkbox-group>
138
- </div>
139
- <div class="vxe-grid">
140
- <div class="vxe-grid&#45;&#45;pager-wrapper">
141
- <vxe-pager
142
- class="pages-box"
143
- :current-page.sync="page.current"
144
- :page-size.sync="page.size"
145
- :total="page.total"
146
- :layouts="['PrevPage', 'Number', 'NextPage']"
147
- @page-change="changePageNew"
148
- >
149
- <template #right>
150
- <span>
151
- <span>{{ $t1('当前记录') }}</span>
152
- <span class="f-red"> {{ page.records.length }} </span>
153
- <span>/</span>
154
- <span class="f-red"> {{ page.total }}</span>
155
- </span>
156
- </template>
157
- </vxe-pager>
158
- </div>
159
- </div>
160
- </div>
161
- </div>
162
- <div class="annex-grid-height">
163
- <vxe-grid v-show="showType==2" ref="table-m1" v-bind="vxeOption" :data="page.records"
164
- @resizable-change="$vxeTableUtil.onColumnWitchChange" @custom="$vxeTableUtil.customHandle"
165
- @checkbox-change="tableCheckChange"
166
- @checkbox-all="tableCheckAll">
167
- <template #pager>
168
- <vxe-pager
169
- class="pages-box"
170
- :current-page.sync="page.current"
171
- :page-size.sync="page.size"
172
- :total="page.total"
173
- :layouts="['PrevPage', 'Number', 'NextPage']"
174
- @page-change="changePageNew"
175
- >
176
- <template #right>
177
- <span>
178
- <span>{{ $t1('当前记录') }}</span>
179
- <span class="f-red"> {{ page.records.length }} </span>
180
- <span>/</span>
181
- <span class="f-red"> {{ page.total }}</span>
182
- </span>
183
- </template>
184
- </vxe-pager>
185
- </template>
186
- </vxe-grid>
187
- </div>
188
- </div>
189
- </div>
190
- <el-image-viewer v-if="showViewer" :on-close="() => {showViewer = false;}" :initial-index.sync="chooseIndex"
191
- :url-list="imageDTOs"/>
192
- <propertiesDialog v-if="showPropertiesDialog" :visiable.sync="showPropertiesDialog"
193
- :editAttachment.sync="editAttachment" :isEdit="isEdit"
194
- :treeNodeArr.sync="treeNodeArr"></propertiesDialog>
195
- <el-dialog
196
- :title="$t1('查看单据')"
197
- :append-to-body="true"
198
- :modal-append-to-body="true"
199
- :close-on-click-modal="false"
200
- v-if="showWfDialog"
201
- :visible.sync="showWfDialog"
202
- :modal="false"
203
- custom-class="dialog-style designer-dialog indexUse"
204
- width="100%"
205
- height="100%"
206
- top="0px"
207
- bottom="0px"
208
- :destroy-on-close="true"
209
- v-el-drag-dialog
210
- >
211
- <div id="containt">
212
- <component
213
- v-if="showWfContent && wfContent"
214
- :is="wfContent"
215
- visible-key="showWfContent"
216
- :_dataId.sync="wfDataId"
217
- :parent-target="_self"
218
- :defaultShowWfContent="true"
219
- :_viewType="1"
220
- @reload="$reloadHandle"
221
- ></component>
222
- <micro-view-host
223
- v-else-if="showWfContent && remoteView"
224
- :owner="remoteView.owner"
225
- :target-path="remoteView.targetPath"
226
- :biz-params="remoteView.bizParams"
227
- :view-meta="remoteView.viewMeta"
228
- @reload="$reloadHandle"
229
- @close="showWfContent = false"
230
- ></micro-view-host>
231
- </div>
232
- </el-dialog>
233
- </div>
234
- </div>
235
- </template>
236
-
237
- <script>
238
-
239
- import ElImageViewer from "@base/components/VabUpload/image-viewer";
240
- import {treeScollx} from "@base/utils/global";
241
- import propertiesDialog from './propertiesDialog';
242
- import { loadViewComponentAsync } from "@base/utils/resolveViewComponent";
243
-
244
- export default {
245
- name: 'file_view_ins:list',
246
- props: {
247
- option: {
248
- type: Object
249
- }
250
- },
251
- components: {
252
- ElImageViewer,
253
- propertiesDialog
254
- },
255
- provide() {
256
- return {
257
- current_prefix: this.current_prefix,
258
- viewAreaCode: this.viewAreaCode,
259
- dataId: this.dataId
260
- }
261
- },
262
- created() {
263
-
264
- },
265
- mounted() {
266
- this.initTitle();
267
- this.initTableList();
268
- },
269
- watch: {
270
- filterText(val) {
271
- this.$refs.tree.filter(val);
272
- }
273
- },
274
- data() {
275
- let pageSize = 1000;
276
- let categoryPageSize = 1000;
277
- return {
278
- showBillDialog: false,
279
- billDialogContent: null,
280
- checkBillDatas: [],
281
- title: '',
282
- folderStatus: false,
283
- filterText: '',
284
- defaultProps: {
285
- children: 'children',
286
- label: 'itemName',
287
- isLeaf: 'leaf'
288
- },
289
- resolveFunc: function () {
290
- },
291
- fileAttachmentCategorys: [],
292
- currentFileCategoryCode: null,
293
- chooseIndex: -1,
294
- imageDTOs: [],
295
- showViewer: false,
296
- showPropertiesDialog: false,
297
- editAttachment: null,
298
- vxeOption: {},
299
- showType: 1,
300
- formData: {},
301
- showAdvancedSearch: false,
302
- advancedFormData: {},
303
- pageSize: pageSize,
304
- page: {
305
- current: 1,
306
- size: pageSize,
307
- total: 0,
308
- records: []
309
- },
310
- categoryPageSize: categoryPageSize,
311
- categoryPage: {
312
- current: 1,
313
- size: categoryPageSize,
314
- total: 0,
315
- records: []
316
- },
317
- showEditCategoryDialog: false,
318
- editCategory: {},
319
- currentFileCategory: null,
320
- rootCategory: false,
321
- currentNode: null,
322
- treeNodeArr: [],
323
- checkRows: [],
324
- showCategoryMoveDialog: false,
325
- checkList: [],
326
- handleType: 1,//1移动,2复制
327
- showFileHistoryDialog: false,
328
- operateFileHistory: null,
329
- showShareDialog: false,
330
- shareAttachment: null,
331
- checkAll: false,
332
- fileArr: [],
333
- checkList2: [],
334
- showRecycleBinDialog: false,
335
-
336
- showVideoDialog: false,
337
- videoOption: null,
338
-
339
- //个人文档
340
- userInfo: {
341
- nickName: null
342
- },
343
- treeFlag: false,
344
- currentUser: {},
345
- showUserDialog: false,
346
- isDocAdmin: false,
347
-
348
- viewAreaCode: "file_view_area",
349
-
350
- showWfDialog: false,
351
- showWfContent: true,
352
- wfContent: null,
353
- remoteView: null,
354
- wfDataId: '',
355
- };
356
- },
357
- computed: {
358
- current_prefix() {
359
- return this.currentFileCategory && this.currentFileCategory.serviceId ? '/' + this.currentFileCategory.serviceId : '';
360
- },
361
- pictureDtoList() {
362
- return this.page.records.filter(row => {
363
- return row.url && this.$commonFileUtil.isPictureFile(row.url)
364
- });
365
- },
366
- checkAllDisabled() {
367
- return this.page.records.length == 0
368
- },
369
- checkAllIndeterminate() {
370
- return this.checkList.length > 0 && (this.checkList.length < this.page.records.length)
371
- },
372
- },
373
- methods: {
374
- getFileName(row) {
375
- if (row.extension) {
376
- let index = row.name.lastIndexOf('.' + row.extension)
377
- return row.name.substring(0, index);
378
- } else {
379
- return row.name;
380
- }
381
- },
382
- getCheckRows() {
383
- let checkRows = [];
384
- if (this.showType == 1) {
385
- let checkList = this.checkList;
386
- checkRows = this.page.records.filter(row => checkList.includes(row.id));
387
- } else {
388
- checkRows = this.$refs['table-m1'].getCheckboxRecords(true);
389
- }
390
- return checkRows;
391
- },
392
- getRows() {
393
- let rows = [];
394
- if (this.showType == 1) {
395
- rows = this.page.records;
396
- } else {
397
- rows = this.$refs['table-m1'].getTableData().fullData;
398
- }
399
- return rows;
400
- },
401
- changeShowType() {
402
- this.showType = this.showType == 1 ? 2 : 1;
403
- this.searchEvent();
404
- },
405
- changeCategory(row, node) {
406
- if (!node) {
407
- node = this.$refs.tree.getNode(row.id + '');
408
- this.$refs.tree.setCurrentKey(row)
409
- }
410
- this.handleNodeData(node);
411
- this.searchEvent();
412
- },
413
- searchEvent() {
414
- this.doSearch()
415
- },
416
- resetEvent() {
417
- this.formData = {};
418
- this.doSearch();
419
- },
420
- doSearch() {
421
- this.checkList = [];
422
- this.checkAll = false;
423
- this.initAttchInfo();
424
- },
425
- openPropertiesDialog(attachment) {
426
- this.editAttachment = attachment;
427
- this.showPropertiesDialog = true;
428
- },
429
- getShowUrl(attachment, field) {
430
- if (!field) field = 'medium';
431
- return this.$commonFileUtil.getShowUrl(attachment.domain + (attachment[field] ? attachment[field] : attachment.url));
432
- },
433
- hasPreview(attachment) {
434
- let fileSuffix = this.$commonFileUtil.getFileSuffix(attachment.url);
435
- return this.$commonFileUtil.isPictureFile(attachment.url) || this.$commonFileUtil.isPreviewFile(attachment.url);
436
- },
437
- openPreview(attachment) {
438
- if (this.$commonFileUtil.isPictureFile(attachment.url)) {
439
- this.imageDTOs = this.pictureDtoList;
440
- this.chooseIndex = this.pictureDtoList.findIndex(row => row.id == attachment.id);
441
- this.showViewer = true;
442
- } else if (this.$commonFileUtil.isPreviewFile(attachment.url)) {
443
- this.$openFilePreview(attachment)
444
- }
445
- },
446
- filterNode(value, data) {
447
- if (!value) return true;
448
- return data.itemName.indexOf(value) !== -1;
449
- },
450
- initAttchInfo(page) {
451
- if (!this.current_prefix) {
452
- return;
453
- }
454
- let defaultPage = {
455
- current: 1,
456
- size: this.pageSize,
457
- total: 0,
458
- records: []
459
- }
460
- page = page || {
461
- current: 1,
462
- size: this.pageSize
463
- };
464
-
465
- let parent = this.currentFileCategory && this.currentFileCategory.id ? this.currentFileCategory.id : 0;
466
- this.$http({
467
- method: 'post',
468
- url: this.current_prefix + '/file_view_ins/viewFiles',
469
- data: {
470
- itemCode: this.currentFileCategory ? this.currentFileCategory.itemCode : null,
471
- viewAreaCode: this.viewAreaCode,
472
- condition: {
473
- ...this.formData,
474
- ...this.advancedFormData,
475
- ...page
476
- }
477
- },
478
- isLoading: true,
479
- success: res => {
480
- this.page = res.objx && res.objx.data ? res.objx.data : defaultPage;
481
- }
482
- });
483
- },
484
- initTableList() {
485
- let that = this;
486
- let tableOption = {
487
- vue: this,
488
- tableRef: 'table-m1',
489
- tableName: 'pcp_product_file_list-m1',
490
- config: {
491
- height: 'auto',
492
- pagerConfig: {
493
- autoHidden: false,
494
- enabled: true
495
- }
496
- },
497
- columns: [
498
- {type: 'checkbox', width: 48, resizable: false, fixed: 'left'},
499
- {
500
- title: this.$t1('文件名称'),
501
- field: 'name',
502
- width: 250,
503
- fixed: 'left',
504
- slots: {
505
- default: ({row, rowIndex}) => {
506
- let h = this.$createElement;
507
- if (!row.dirs) {
508
- let showUrl = that.getShowUrl(row, 'thumbnail');
509
- return [
510
- h('a', {
511
- staticClass: "a-link img",
512
- on: {
513
- click: (event) => {
514
- event.stopPropagation();
515
- that.openPreview(row)
516
- }
517
- }
518
- }, [
519
- h('el-tooltip', {
520
- props: {
521
- enterable: false,
522
- effect: "dark",
523
- content: this.$t1('展示图'),
524
- placement: "top",
525
- "popper-class": "tooltip-skin"
526
- }
527
- }, [
528
- h('el-image', {
529
- props: {
530
- src: showUrl
531
- }
532
- })
533
- ])
534
- ]),
535
- h('span', row.name)
536
- ];
537
- } else {
538
- return [
539
- h('a', {
540
- staticClass: "a-link img",
541
- on: {
542
- click: (event) => {
543
- event.stopPropagation();
544
- that.changeCategory(row);
545
- }
546
- }
547
- }, [
548
- h('div', {
549
- staticClass: "img"
550
- }, [
551
- h('svg-icon', {
552
- props: {"icon-class": "ico-wenjianjia"}
553
- }),
554
- h('span', row.name)
555
- ])
556
- ])
557
- ]
558
- }
559
- }
560
- }
561
- },
562
- {
563
- title: this.$t1('文件大小'),
564
- field: 'fileSize',
565
- width: 150,
566
- slots: {
567
- default: ({row, rowIndex}) => {
568
- if (!row.dirs) {
569
- return this.formatFileSize(row.fileSize);
570
- }
571
- }
572
- }
573
- },
574
- {title: this.$t1('文件说明'), field: 'note', width: 250},
575
- {title: this.$t1('单号'), field: 'billSn', width: 250},
576
- {title: this.$t1('单据说明'), field: 'billInfo', width: 250},
577
- {title: this.$t1('创建人'), field: 'createBy', width: 150},
578
- {
579
- field: 'createDate',
580
- title: this.$t1('创建时间'),
581
- width: 150
582
- },
583
- {
584
- width: 150,
585
- fixed: 'right',
586
- title: '',
587
- sortable: false,
588
- slots: {
589
- default: ({row, rowIndex}) => {
590
- return [
591
- this.getBtnVnode({
592
- class: "iconfont icon-shuxing",
593
- title: this.$t1('详情'),
594
- click: (event) => {
595
- this.openPropertiesDialog(row);
596
- }
597
- }),
598
- this.getBtnVnode({
599
- class: "el-icon-files",
600
- title: this.$t1('查看单据'),
601
- show: row.billUrl != null,
602
- click: (event) => {
603
- this.openWfDialog(row)
604
- }
605
- }),
606
- this.getBtnVnode({
607
- class: "el-icon-download",
608
- title: this.$t1('下载'),
609
- click: (event) => {
610
- this.$commonFileUtil.downloadFile(row.domain + row.url, row.name);
611
- }
612
- })
613
- ];
614
- }
615
- }
616
- }
617
- ],
618
- callback(a, b) {
619
-
620
- }
621
- };
622
- this.$vxeTableUtil.initVxeTable(tableOption).then(opts => {
623
- this.vxeOption = opts;
624
- });
625
- },
626
- getBtnVnode(opt) {
627
- let h = this.$createElement;
628
- let show = opt.show === false ? false : true;
629
- if (show) {
630
- return h('a', {
631
- staticClass: "a-link",
632
- on: {
633
- click: (event) => {
634
- opt.click && opt.click(event)
635
- }
636
- }
637
- }, [
638
- h('el-tooltip', {
639
- props: {
640
- enterable: false,
641
- effect: "dark",
642
- content: opt.title,
643
- placement: "top",
644
- "popper-class": "tooltip-skin"
645
- }
646
- }, [
647
- h('i', {
648
- staticClass: opt.class
649
- })
650
- ])
651
- ]);
652
- }
653
- },
654
- changePageNew({type, currentPage, pageSize, $event}) {
655
- this.checkList = [];
656
- this.checkAll = false;
657
- this.initAttchInfo({
658
- current: currentPage,
659
- size: pageSize,
660
- })
661
- },
662
- handleNodeClick(data, node, v) {
663
- this.changeCategory(data, node);
664
- },
665
- doNav(t) {
666
- let node = this.$refs.tree.getNode(t.data.id + '');
667
- this.$refs.tree.setCurrentKey(node.data)
668
- this.handleNodeClick(node.data, node, this);
669
- },
670
- // 异步树叶子节点懒加载逻辑
671
- loadNode(node, resolve, callback) {
672
- let url, param;
673
- url = USER_PREFIX + '/file_view_item/listPage';
674
- param = {
675
- viewAreaCode: this.viewAreaCode,
676
- size: this.categoryPageSize,
677
- };
678
- this.$http({
679
- url: url,
680
- method: 'post',
681
- data: param,
682
- success: res => {
683
- let page = res.objx;
684
- let rows = page && page.records ? page.records : [];
685
-
686
- // moreBtn
687
- rows.forEach(value => {
688
- value.leaf = true;
689
- value.hasChild = false;
690
- });
691
-
692
- if (node.level === 0) {
693
- setTimeout(() => {
694
- if (node.childNodes.length) {
695
- this.$refs.tree.setCurrentKey(node.childNodes[0].data)
696
- this.handleNodeData(node.childNodes[0]);
697
- this.searchEvent();
698
- }
699
- }, 200);
700
- this.$nextTick(() => {
701
- callback && callback();
702
- })
703
-
704
- } else {
705
- this.$nextTick(() => {
706
- callback && callback();
707
- })
708
- }
709
- resolve(rows);
710
- }
711
- });
712
- },
713
- handleNodeData(node) {
714
- let treeNodeArr = [];
715
- let tree = this.$refs.tree;
716
- if (node) {
717
- treeNodeArr.push(node);
718
- let end = false;
719
- let pNode = node;
720
- while (!end) {
721
- pNode = pNode.parent;
722
- if (pNode && pNode.data) {
723
- let pData = pNode.data;
724
- treeNodeArr.push(pNode);
725
- end = pNode.level <= 1;
726
- } else {
727
- end = true;
728
- }
729
- }
730
- treeNodeArr = treeNodeArr.reverse();
731
- }
732
- this.currentFileCategory = node ? node.data : null;
733
- this.currentNode = node;
734
- this.$set(this, 'treeNodeArr', treeNodeArr);
735
- },
736
- mulDownload() {
737
- let checkRows = this.getCheckRows();
738
- if (!checkRows.length) {
739
- this.$message({
740
- message: this.$t1('请选择需要下载的文件'),
741
- type: 'error',
742
- showClose: true,
743
- duration: 3000,
744
- });
745
- return;
746
- }
747
- checkRows.forEach(row => {
748
- this.$commonFileUtil.downloadFile(row.domain + row.url, row.name);
749
- })
750
- },
751
- mulDownload2() {
752
- let checkRows = this.getCheckRows();
753
- if (!checkRows.length) {
754
- this.$message({
755
- message: this.$t1('请选择需要下载的文件'),
756
- type: 'error',
757
- showClose: true,
758
- duration: 3000,
759
- });
760
- return;
761
- }
762
-
763
- this.getDownloadDomian(domain => {
764
- this.getFileWhole(checkRows, (fileWhole) => {
765
- this.$http({
766
- method: 'post',
767
- url: domain + '/docfile/download',
768
- data: fileWhole,
769
- isLoading: true,
770
- success: res => {
771
- window.open(res.objx.url);
772
- }
773
- });
774
- })
775
- })
776
- },
777
- getDownloadDomian(callback) {
778
- this.$http({
779
- method: 'post',
780
- url: USER_PREFIX + '/common/fileDownloadUrl',
781
- data: {},
782
- isLoading: true,
783
- success: res => {
784
- callback(res.objx)
785
- }
786
- });
787
- },
788
- getFileWhole(rows, callback) {
789
- let ids = rows.map(row => row.id);
790
- this.$http({
791
- method: 'post',
792
- url: this.current_prefix + '/file_view_ins/getFileWhole',
793
- data: ids,
794
- isLoading: true,
795
- success: res => {
796
- callback(res.objx)
797
- }
798
- });
799
- },
800
- checkChange() {
801
- let rows = this.getRows();
802
- let checkRows = this.getCheckRows();
803
- this.checkAll = rows.length && rows.length == checkRows.length
804
- },
805
- changeCheckAll(val) {
806
- let rows = this.getRows();
807
- this.checkList = val ? rows.map(row => row.id) : [];
808
- if (this.showType == 2) {
809
- this.$refs['table-m1'].setAllCheckboxRow(val);
810
- }
811
- },
812
- tableCheckChange() {
813
- let checkRows = this.getCheckRows();
814
- this.checkList = checkRows.map(row => row.id);
815
- this.checkChange();
816
- },
817
- tableCheckAll(val) {
818
- let checkRows = this.getCheckRows();
819
- this.checkList = checkRows.map(row => row.id);
820
- this.checkChange();
821
- },
822
- initTitle() {
823
- this.$http({
824
- method: 'post',
825
- url: USER_PREFIX + '/file_view_area/getByCode',
826
- data: {
827
- stringOne: this.viewAreaCode,
828
- },
829
- isLoading: true,
830
- success: res => {
831
- let fileStoreArea = res.objx;
832
- if (fileStoreArea) {
833
- this.title = fileStoreArea.viewAreaName;
834
- this.$nextTick(() => {
835
- treeScollx({target: this, type: 'default'});
836
- this.treeFlag = true;
837
- });
838
- } else {
839
- this.$baseAlert(this.$t1('凭证查询区未维护'));
840
- }
841
- }
842
- });
843
- },
844
- formatFileSize(fileSize) {
845
- fileSize = fileSize || 0;
846
- if (fileSize < 1024) {
847
- return fileSize + 'B';
848
- } else if (fileSize < (1024 * 1024)) {
849
- var temp = fileSize / 1024;
850
- temp = temp.toFixed(2);
851
- return temp + 'KB';
852
- } else if (fileSize < (1024 * 1024 * 1024)) {
853
- var temp = fileSize / (1024 * 1024);
854
- temp = temp.toFixed(2);
855
- return temp + 'MB';
856
- } else {
857
- var temp = fileSize / (1024 * 1024 * 1024);
858
- temp = temp.toFixed(2);
859
- return temp + 'GB';
860
- }
861
- },
862
- reflushTree() {
863
- this.treeFlag = false;
864
- setTimeout(() => {
865
- this.treeFlag = true;
866
- }, 200)
867
- },
868
- async openWfDialog(row) {
869
- let url = row.billUrl + '.vue';
870
- let id = row.billId;
871
- this.wfDataId = !id || typeof id == 'object' ? 0 : id;
872
- this.showWfDialog = true;
873
- this.showWfContent = true;
874
- const res = await loadViewComponentAsync(url);
875
- this.remoteView =
876
- res.kind === "remote"
877
- ? {
878
- owner: res.owner,
879
- targetPath: res.targetPath,
880
- bizParams: { _dataId: this.wfDataId },
881
- viewMeta: { visibleKey: "showWfContent", defaultShowWfContent: true, viewType: 1 },
882
- }
883
- : null;
884
- this.wfContent = res.component;
885
- },
886
- }
887
- };
888
- </script>
889
- <style lang="scss" scoped>
890
- #labBtn {
891
- height: calc(100vh - 35px);
892
- }
893
-
894
- #containt {
895
- overflow: hidden;
896
-
897
- .main-right {
898
- margin-left: -1%;
899
- padding-left: 18px !important;
900
- padding-top: 8px;
901
- padding-right: 8px;
902
- overflow: hidden;
903
- }
904
- }
905
-
906
- .upload-list .upload-box {
907
- display: inline-block;
908
- }
909
-
910
-
911
- .vxe-grid .vxe-gird-block {
912
- height: calc(100vh - 161px);
913
- }
914
-
915
- .grid-height.viewBox {
916
- height: calc(100vh - 84px);
917
-
918
- .containter1 {
919
- .annex-piclist > .clearfix {
920
- height: calc(100vh - 159px);
921
- }
922
- }
923
-
924
- .annex-grid-height {
925
- height: calc(100vh - 126px);
926
- }
927
- }
928
-
929
- .annex-screen + .line + .annex-crumbs + .grid-height.viewBox {
930
- height: calc(100vh - 133px);
931
-
932
- .containter1 {
933
- .annex-piclist > .clearfix {
934
- height: calc(100vh - 208px);
935
- }
936
- }
937
-
938
- .annex-grid-height {
939
- height: calc(100vh - 175px);
940
- }
941
- }
942
-
943
- .annex-filter + .annex-crumbs + .grid-height.viewBox {
944
- height: calc(100vh - 133px);
945
-
946
- .containter1 {
947
- .annex-piclist > .clearfix {
948
- height: calc(100vh - 208px);
949
- }
950
- }
951
-
952
- .annex-grid-height {
953
- height: calc(100vh - 175px);
954
- }
955
- }
956
-
957
- .annex-filter + .annex-screen + .line + .annex-crumbs + .grid-height.viewBox {
958
- height: calc(100vh - 181px);
959
-
960
- .containter1 {
961
- .annex-piclist > .clearfix {
962
- height: calc(100vh - 256px);
963
- }
964
- }
965
-
966
- .annex-grid-height {
967
- height: calc(100vh - 223px);
968
- }
969
- }
970
- </style>
1
+ <template>
2
+ <div id="containt">
3
+ <div v-show="title!='' && title!=null">
4
+ <div class="tree-box tree-annex fl">
5
+ <div class="tit"><b>{{ title }}</b></div>
6
+ <div class="tree-form">
7
+ <el-input :placeholder="$t1('请输入查询区名称')" v-model="filterText" class="txt">
8
+ <el-button slot="append" icon="el-icon-search"></el-button>
9
+ </el-input>
10
+ </div>
11
+ <el-tree
12
+ v-if="treeFlag"
13
+ :props="defaultProps"
14
+ :load="loadNode"
15
+ node-key="id"
16
+ ref="tree"
17
+ lazy
18
+ :filter-node-method="filterNode"
19
+ :expand-on-click-node="false"
20
+ @node-click="handleNodeClick"
21
+ class="tree-list"
22
+ icon-class="el-icon-arrow-down"
23
+ >
24
+ <span class="el-tree-node__label" slot-scope="{ node, data }" v-if="!node.data.moreBtn">
25
+ <i class="ico-wenjian"></i>
26
+ <span>{{ node.label }}</span>
27
+ </span>
28
+ <span v-else class="el-tree-node__label">
29
+ <el-button type="primary" plain class="button-sty">{{ node.label }}</el-button>
30
+ </span>
31
+ </el-tree>
32
+ </div>
33
+ <label id="labBtn">
34
+ <div class="icon">
35
+ <i class="el-icon-more"></i>
36
+ <i class="el-icon-more"></i>
37
+ </div>
38
+ </label>
39
+ <div class="main-right file-library fr" style="overflow: hidden;">
40
+ <div class="annex-screen">
41
+ <el-button type="primary" class="button-sty" icon="el-icon-download" @click.native="mulDownload2">
42
+ {{ $t1('下载') }}
43
+ </el-button>
44
+ </div>
45
+ <div class="line"></div>
46
+ <div class="annex-crumbs">
47
+ <span class="tit"><i class="iconfont icon-wenjianjia"></i>{{ $t1('文件区') }}</span>
48
+ <el-breadcrumb separator-class="el-icon-arrow-right">
49
+ <el-breadcrumb-item v-for="(treeNode,index) in treeNodeArr" :key="index" @click.native="doNav(treeNode)">{{
50
+ treeNode.label
51
+ }}
52
+ </el-breadcrumb-item>
53
+ </el-breadcrumb>
54
+ </div>
55
+ <div class="grid-height viewBox">
56
+ <div class="annex-searchBox">
57
+ <div class="fl">
58
+ <div class="oper">
59
+ <el-checkbox v-model="checkAll" @change="changeCheckAll" :disabled="checkAllDisabled"
60
+ :indeterminate="checkAllIndeterminate">{{ $t1('已选中') }} {{
61
+ checkList.length
62
+ }} {{ $t1('项') }}
63
+ </el-checkbox>
64
+ </div>
65
+ <div class="search-box">
66
+ <el-input :placeholder="$t1('请输入文件名')" v-model="formData.name" clearable>
67
+ <el-button slot="append" icon="el-icon-search" @click="searchEvent"></el-button>
68
+ </el-input>
69
+ </div>
70
+ </div>
71
+ <div class="fr">
72
+
73
+ <el-button type="primary" icon="iconfont icon-icmenu2" @click="changeShowType()"
74
+ class="button-sty icon-btn"
75
+ v-show="showType==1">{{ $t1('列表') }}
76
+ </el-button>
77
+ <el-button type="primary" style="margin-left:0;" icon="el-icon-menu" @click="changeShowType()"
78
+ class="button-sty icon-btn"
79
+ v-show="showType==2">{{ $t1('图示') }}
80
+ </el-button>
81
+ </div>
82
+
83
+ </div>
84
+ <div class="containter1" ref="containter1" v-show="showType==1" style="overflow: auto;">
85
+ <div class="annex-piclist">
86
+ <div class="clearfix">
87
+ <el-checkbox-group v-model="checkList" @change="checkChange" class="f-group">
88
+ <template v-for="(attachment) in page.records">
89
+ <li :key="attachment.id" class="item" :class="checkList.includes(attachment.id) ? 'on':''">
90
+ <el-checkbox :label="attachment.id"><span></span></el-checkbox>
91
+ <div class="oper">
92
+ <el-tooltip effect="dark" :content="$t1('详情')" placement="top"><i
93
+ class="el-tooltip iconfont icon-shuxing ico"
94
+ @click="openPropertiesDialog(attachment)"></i>
95
+ </el-tooltip>
96
+ <a href="javascript:void(0);" class="a-link ico" v-if="attachment.billUrl">
97
+ <el-tooltip effect="dark" :content="$t1('查看单据')" placement="top"><i
98
+ class="el-icon-files"
99
+ @click="openWfDialog(attachment)"></i>
100
+ </el-tooltip>
101
+ </a>
102
+ <a
103
+ href="javascript:void(0);"
104
+ class="a-link ico"
105
+ v-if="!attachment.dirs"
106
+ @click="$commonFileUtil.downloadFile(attachment.domain + attachment.url, attachment.name)"
107
+ >
108
+ <el-tooltip effect="dark" :content="$t1('下载')" placement="top"
109
+ popper-class="tooltip-skin">
110
+ <i class="el-icon-download"/>
111
+ </el-tooltip>
112
+ </a>
113
+ </div>
114
+ <div class="img" @click="openPreview(attachment)" v-if="!attachment.dirs">
115
+ <div class="show-video" v-if="hasPreview(attachment)"><i class="icon-chakan"></i></div>
116
+ <div class="show-video" v-if="false"><i class="el-icon-video-play"></i></div>
117
+ <p><img :src="getShowUrl(attachment)"/></p>
118
+ </div>
119
+ <div class="img" @click="changeCategory(attachment)" v-if="attachment.dirs">
120
+ <svg-icon icon-class="ico-wenjianjia"/>
121
+ </div>
122
+ <el-tooltip :enterable="false" effect="dark" :content="attachment.name" placement="top">
123
+ <div class="txt-box">
124
+ <div class="tb-left"></div>
125
+ <div class="tb-mid">
126
+ <div class="txt">
127
+ <span class="name">{{ getFileName(attachment) }}</span><span
128
+ v-if="attachment.extension">.{{ attachment.extension }}</span>
129
+ </div>
130
+ </div>
131
+ <div class="format">... .{{ attachment.extension }}</div>
132
+ </div>
133
+
134
+ </el-tooltip>
135
+ </li>
136
+ </template>
137
+ </el-checkbox-group>
138
+ </div>
139
+ <div class="vxe-grid">
140
+ <div class="vxe-grid&#45;&#45;pager-wrapper">
141
+ <vxe-pager
142
+ class="pages-box"
143
+ :current-page.sync="page.current"
144
+ :page-size.sync="page.size"
145
+ :total="page.total"
146
+ :layouts="['PrevPage', 'Number', 'NextPage']"
147
+ @page-change="changePageNew"
148
+ >
149
+ <template #right>
150
+ <span>
151
+ <span>{{ $t1('当前记录') }}</span>
152
+ <span class="f-red"> {{ page.records.length }} </span>
153
+ <span>/</span>
154
+ <span class="f-red"> {{ page.total }}</span>
155
+ </span>
156
+ </template>
157
+ </vxe-pager>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ <div class="annex-grid-height">
163
+ <vxe-grid v-show="showType==2" ref="table-m1" v-bind="vxeOption" :data="page.records"
164
+ @resizable-change="$vxeTableUtil.onColumnWitchChange" @custom="$vxeTableUtil.customHandle"
165
+ @checkbox-change="tableCheckChange"
166
+ @checkbox-all="tableCheckAll">
167
+ <template #pager>
168
+ <vxe-pager
169
+ class="pages-box"
170
+ :current-page.sync="page.current"
171
+ :page-size.sync="page.size"
172
+ :total="page.total"
173
+ :layouts="['PrevPage', 'Number', 'NextPage']"
174
+ @page-change="changePageNew"
175
+ >
176
+ <template #right>
177
+ <span>
178
+ <span>{{ $t1('当前记录') }}</span>
179
+ <span class="f-red"> {{ page.records.length }} </span>
180
+ <span>/</span>
181
+ <span class="f-red"> {{ page.total }}</span>
182
+ </span>
183
+ </template>
184
+ </vxe-pager>
185
+ </template>
186
+ </vxe-grid>
187
+ </div>
188
+ </div>
189
+ </div>
190
+ <el-image-viewer v-if="showViewer" :on-close="() => {showViewer = false;}" :initial-index.sync="chooseIndex"
191
+ :url-list="imageDTOs"/>
192
+ <propertiesDialog v-if="showPropertiesDialog" :visiable.sync="showPropertiesDialog"
193
+ :editAttachment.sync="editAttachment" :isEdit="isEdit"
194
+ :treeNodeArr.sync="treeNodeArr"></propertiesDialog>
195
+ <el-dialog
196
+ :title="$t1('查看单据')"
197
+ :append-to-body="true"
198
+ :modal-append-to-body="true"
199
+ :close-on-click-modal="false"
200
+ v-if="showWfDialog"
201
+ :visible.sync="showWfDialog"
202
+ :modal="false"
203
+ custom-class="dialog-style designer-dialog indexUse"
204
+ width="100%"
205
+ height="100%"
206
+ top="0px"
207
+ bottom="0px"
208
+ :destroy-on-close="true"
209
+ v-el-drag-dialog
210
+ >
211
+ <div id="containt">
212
+ <component
213
+ v-if="showWfContent && wfContent"
214
+ :is="wfContent"
215
+ visible-key="showWfContent"
216
+ :_dataId.sync="wfDataId"
217
+ :parent-target="_self"
218
+ :defaultShowWfContent="true"
219
+ :_viewType="1"
220
+ @reload="$reloadHandle"
221
+ ></component>
222
+ <micro-view-host
223
+ v-else-if="showWfContent && remoteView"
224
+ :owner="remoteView.owner"
225
+ :target-path="remoteView.targetPath"
226
+ :biz-params="remoteView.bizParams"
227
+ :view-meta="remoteView.viewMeta"
228
+ @reload="$reloadHandle"
229
+ @close="showWfContent = false"
230
+ ></micro-view-host>
231
+ </div>
232
+ </el-dialog>
233
+ </div>
234
+ </div>
235
+ </template>
236
+
237
+ <script>
238
+
239
+ import ElImageViewer from "@base/components/VabUpload/image-viewer";
240
+ import {treeScollx} from "@base/utils/global";
241
+ import propertiesDialog from './propertiesDialog';
242
+ import { loadViewComponentAsync } from "@base/utils/resolveViewComponent";
243
+
244
+ export default {
245
+ name: 'file_view_ins:list',
246
+ props: {
247
+ option: {
248
+ type: Object
249
+ }
250
+ },
251
+ components: {
252
+ ElImageViewer,
253
+ propertiesDialog
254
+ },
255
+ provide() {
256
+ return {
257
+ current_prefix: this.current_prefix,
258
+ viewAreaCode: this.viewAreaCode,
259
+ dataId: this.dataId
260
+ }
261
+ },
262
+ created() {
263
+
264
+ },
265
+ mounted() {
266
+ this.initTitle();
267
+ this.initTableList();
268
+ },
269
+ watch: {
270
+ filterText(val) {
271
+ this.$refs.tree.filter(val);
272
+ }
273
+ },
274
+ data() {
275
+ let pageSize = 1000;
276
+ let categoryPageSize = 1000;
277
+ return {
278
+ showBillDialog: false,
279
+ billDialogContent: null,
280
+ checkBillDatas: [],
281
+ title: '',
282
+ folderStatus: false,
283
+ filterText: '',
284
+ defaultProps: {
285
+ children: 'children',
286
+ label: 'itemName',
287
+ isLeaf: 'leaf'
288
+ },
289
+ resolveFunc: function () {
290
+ },
291
+ fileAttachmentCategorys: [],
292
+ currentFileCategoryCode: null,
293
+ chooseIndex: -1,
294
+ imageDTOs: [],
295
+ showViewer: false,
296
+ showPropertiesDialog: false,
297
+ editAttachment: null,
298
+ vxeOption: {},
299
+ showType: 1,
300
+ formData: {},
301
+ showAdvancedSearch: false,
302
+ advancedFormData: {},
303
+ pageSize: pageSize,
304
+ page: {
305
+ current: 1,
306
+ size: pageSize,
307
+ total: 0,
308
+ records: []
309
+ },
310
+ categoryPageSize: categoryPageSize,
311
+ categoryPage: {
312
+ current: 1,
313
+ size: categoryPageSize,
314
+ total: 0,
315
+ records: []
316
+ },
317
+ showEditCategoryDialog: false,
318
+ editCategory: {},
319
+ currentFileCategory: null,
320
+ rootCategory: false,
321
+ currentNode: null,
322
+ treeNodeArr: [],
323
+ checkRows: [],
324
+ showCategoryMoveDialog: false,
325
+ checkList: [],
326
+ handleType: 1,//1移动,2复制
327
+ showFileHistoryDialog: false,
328
+ operateFileHistory: null,
329
+ showShareDialog: false,
330
+ shareAttachment: null,
331
+ checkAll: false,
332
+ fileArr: [],
333
+ checkList2: [],
334
+ showRecycleBinDialog: false,
335
+
336
+ showVideoDialog: false,
337
+ videoOption: null,
338
+
339
+ //个人文档
340
+ userInfo: {
341
+ nickName: null
342
+ },
343
+ treeFlag: false,
344
+ currentUser: {},
345
+ showUserDialog: false,
346
+ isDocAdmin: false,
347
+
348
+ viewAreaCode: "file_view_area",
349
+
350
+ showWfDialog: false,
351
+ showWfContent: true,
352
+ wfContent: null,
353
+ remoteView: null,
354
+ wfDataId: '',
355
+ };
356
+ },
357
+ computed: {
358
+ current_prefix() {
359
+ return this.currentFileCategory && this.currentFileCategory.serviceId ? '/' + this.currentFileCategory.serviceId : '';
360
+ },
361
+ pictureDtoList() {
362
+ return this.page.records.filter(row => {
363
+ return row.url && this.$commonFileUtil.isPictureFile(row.url)
364
+ });
365
+ },
366
+ checkAllDisabled() {
367
+ return this.page.records.length == 0
368
+ },
369
+ checkAllIndeterminate() {
370
+ return this.checkList.length > 0 && (this.checkList.length < this.page.records.length)
371
+ },
372
+ },
373
+ methods: {
374
+ getFileName(row) {
375
+ if (row.extension) {
376
+ let index = row.name.lastIndexOf('.' + row.extension)
377
+ return row.name.substring(0, index);
378
+ } else {
379
+ return row.name;
380
+ }
381
+ },
382
+ getCheckRows() {
383
+ let checkRows = [];
384
+ if (this.showType == 1) {
385
+ let checkList = this.checkList;
386
+ checkRows = this.page.records.filter(row => checkList.includes(row.id));
387
+ } else {
388
+ checkRows = this.$refs['table-m1'].getCheckboxRecords(true);
389
+ }
390
+ return checkRows;
391
+ },
392
+ getRows() {
393
+ let rows = [];
394
+ if (this.showType == 1) {
395
+ rows = this.page.records;
396
+ } else {
397
+ rows = this.$refs['table-m1'].getTableData().fullData;
398
+ }
399
+ return rows;
400
+ },
401
+ changeShowType() {
402
+ this.showType = this.showType == 1 ? 2 : 1;
403
+ this.searchEvent();
404
+ },
405
+ changeCategory(row, node) {
406
+ if (!node) {
407
+ node = this.$refs.tree.getNode(row.id + '');
408
+ this.$refs.tree.setCurrentKey(row)
409
+ }
410
+ this.handleNodeData(node);
411
+ this.searchEvent();
412
+ },
413
+ searchEvent() {
414
+ this.doSearch()
415
+ },
416
+ resetEvent() {
417
+ this.formData = {};
418
+ this.doSearch();
419
+ },
420
+ doSearch() {
421
+ this.checkList = [];
422
+ this.checkAll = false;
423
+ this.initAttchInfo();
424
+ },
425
+ openPropertiesDialog(attachment) {
426
+ this.editAttachment = attachment;
427
+ this.showPropertiesDialog = true;
428
+ },
429
+ getShowUrl(attachment, field) {
430
+ if (!field) field = 'medium';
431
+ return this.$commonFileUtil.getShowUrl(attachment.domain + (attachment[field] ? attachment[field] : attachment.url));
432
+ },
433
+ hasPreview(attachment) {
434
+ let fileSuffix = this.$commonFileUtil.getFileSuffix(attachment.url);
435
+ return this.$commonFileUtil.isPictureFile(attachment.url) || this.$commonFileUtil.isPreviewFile(attachment.url);
436
+ },
437
+ openPreview(attachment) {
438
+ if (this.$commonFileUtil.isPictureFile(attachment.url)) {
439
+ this.imageDTOs = this.pictureDtoList;
440
+ this.chooseIndex = this.pictureDtoList.findIndex(row => row.id == attachment.id);
441
+ this.showViewer = true;
442
+ } else if (this.$commonFileUtil.isPreviewFile(attachment.url)) {
443
+ this.$openFilePreview(attachment)
444
+ }
445
+ },
446
+ filterNode(value, data) {
447
+ if (!value) return true;
448
+ return data.itemName.indexOf(value) !== -1;
449
+ },
450
+ initAttchInfo(page) {
451
+ if (!this.current_prefix) {
452
+ return;
453
+ }
454
+ let defaultPage = {
455
+ current: 1,
456
+ size: this.pageSize,
457
+ total: 0,
458
+ records: []
459
+ }
460
+ page = page || {
461
+ current: 1,
462
+ size: this.pageSize
463
+ };
464
+
465
+ let parent = this.currentFileCategory && this.currentFileCategory.id ? this.currentFileCategory.id : 0;
466
+ this.$http({
467
+ method: 'post',
468
+ url: this.current_prefix + '/file_view_ins/viewFiles',
469
+ data: {
470
+ itemCode: this.currentFileCategory ? this.currentFileCategory.itemCode : null,
471
+ viewAreaCode: this.viewAreaCode,
472
+ condition: {
473
+ ...this.formData,
474
+ ...this.advancedFormData,
475
+ ...page
476
+ }
477
+ },
478
+ isLoading: true,
479
+ success: res => {
480
+ this.page = res.objx && res.objx.data ? res.objx.data : defaultPage;
481
+ }
482
+ });
483
+ },
484
+ initTableList() {
485
+ let that = this;
486
+ let tableOption = {
487
+ vue: this,
488
+ tableRef: 'table-m1',
489
+ tableName: 'pcp_product_file_list-m1',
490
+ config: {
491
+ height: 'auto',
492
+ pagerConfig: {
493
+ autoHidden: false,
494
+ enabled: true
495
+ }
496
+ },
497
+ columns: [
498
+ {type: 'checkbox', width: 48, resizable: false, fixed: 'left'},
499
+ {
500
+ title: this.$t1('文件名称'),
501
+ field: 'name',
502
+ width: 250,
503
+ fixed: 'left',
504
+ slots: {
505
+ default: ({row, rowIndex}) => {
506
+ let h = this.$createElement;
507
+ if (!row.dirs) {
508
+ let showUrl = that.getShowUrl(row, 'thumbnail');
509
+ return [
510
+ h('a', {
511
+ staticClass: "a-link img",
512
+ on: {
513
+ click: (event) => {
514
+ event.stopPropagation();
515
+ that.openPreview(row)
516
+ }
517
+ }
518
+ }, [
519
+ h('el-tooltip', {
520
+ props: {
521
+ enterable: false,
522
+ effect: "dark",
523
+ content: this.$t1('展示图'),
524
+ placement: "top",
525
+ "popper-class": "tooltip-skin"
526
+ }
527
+ }, [
528
+ h('el-image', {
529
+ props: {
530
+ src: showUrl
531
+ }
532
+ })
533
+ ])
534
+ ]),
535
+ h('span', row.name)
536
+ ];
537
+ } else {
538
+ return [
539
+ h('a', {
540
+ staticClass: "a-link img",
541
+ on: {
542
+ click: (event) => {
543
+ event.stopPropagation();
544
+ that.changeCategory(row);
545
+ }
546
+ }
547
+ }, [
548
+ h('div', {
549
+ staticClass: "img"
550
+ }, [
551
+ h('svg-icon', {
552
+ props: {"icon-class": "ico-wenjianjia"}
553
+ }),
554
+ h('span', row.name)
555
+ ])
556
+ ])
557
+ ]
558
+ }
559
+ }
560
+ }
561
+ },
562
+ {
563
+ title: this.$t1('文件大小'),
564
+ field: 'fileSize',
565
+ width: 150,
566
+ slots: {
567
+ default: ({row, rowIndex}) => {
568
+ if (!row.dirs) {
569
+ return this.formatFileSize(row.fileSize);
570
+ }
571
+ }
572
+ }
573
+ },
574
+ {title: this.$t1('文件说明'), field: 'note', width: 250},
575
+ {title: this.$t1('单号'), field: 'billSn', width: 250},
576
+ {title: this.$t1('单据说明'), field: 'billInfo', width: 250},
577
+ {title: this.$t1('创建人'), field: 'createBy', width: 150},
578
+ {
579
+ field: 'createDate',
580
+ title: this.$t1('创建时间'),
581
+ width: 150
582
+ },
583
+ {
584
+ width: 150,
585
+ fixed: 'right',
586
+ title: '',
587
+ sortable: false,
588
+ slots: {
589
+ default: ({row, rowIndex}) => {
590
+ return [
591
+ this.getBtnVnode({
592
+ class: "iconfont icon-shuxing",
593
+ title: this.$t1('详情'),
594
+ click: (event) => {
595
+ this.openPropertiesDialog(row);
596
+ }
597
+ }),
598
+ this.getBtnVnode({
599
+ class: "el-icon-files",
600
+ title: this.$t1('查看单据'),
601
+ show: row.billUrl != null,
602
+ click: (event) => {
603
+ this.openWfDialog(row)
604
+ }
605
+ }),
606
+ this.getBtnVnode({
607
+ class: "el-icon-download",
608
+ title: this.$t1('下载'),
609
+ click: (event) => {
610
+ this.$commonFileUtil.downloadFile(row.domain + row.url, row.name);
611
+ }
612
+ })
613
+ ];
614
+ }
615
+ }
616
+ }
617
+ ],
618
+ callback(a, b) {
619
+
620
+ }
621
+ };
622
+ this.$vxeTableUtil.initVxeTable(tableOption).then(opts => {
623
+ this.vxeOption = opts;
624
+ });
625
+ },
626
+ getBtnVnode(opt) {
627
+ let h = this.$createElement;
628
+ let show = opt.show === false ? false : true;
629
+ if (show) {
630
+ return h('a', {
631
+ staticClass: "a-link",
632
+ on: {
633
+ click: (event) => {
634
+ opt.click && opt.click(event)
635
+ }
636
+ }
637
+ }, [
638
+ h('el-tooltip', {
639
+ props: {
640
+ enterable: false,
641
+ effect: "dark",
642
+ content: opt.title,
643
+ placement: "top",
644
+ "popper-class": "tooltip-skin"
645
+ }
646
+ }, [
647
+ h('i', {
648
+ staticClass: opt.class
649
+ })
650
+ ])
651
+ ]);
652
+ }
653
+ },
654
+ changePageNew({type, currentPage, pageSize, $event}) {
655
+ this.checkList = [];
656
+ this.checkAll = false;
657
+ this.initAttchInfo({
658
+ current: currentPage,
659
+ size: pageSize,
660
+ })
661
+ },
662
+ handleNodeClick(data, node, v) {
663
+ this.changeCategory(data, node);
664
+ },
665
+ doNav(t) {
666
+ let node = this.$refs.tree.getNode(t.data.id + '');
667
+ this.$refs.tree.setCurrentKey(node.data)
668
+ this.handleNodeClick(node.data, node, this);
669
+ },
670
+ // 异步树叶子节点懒加载逻辑
671
+ loadNode(node, resolve, callback) {
672
+ let url, param;
673
+ url = USER_PREFIX + '/file_view_item/listPage';
674
+ param = {
675
+ viewAreaCode: this.viewAreaCode,
676
+ size: this.categoryPageSize,
677
+ };
678
+ this.$http({
679
+ url: url,
680
+ method: 'post',
681
+ data: param,
682
+ success: res => {
683
+ let page = res.objx;
684
+ let rows = page && page.records ? page.records : [];
685
+
686
+ // moreBtn
687
+ rows.forEach(value => {
688
+ value.leaf = true;
689
+ value.hasChild = false;
690
+ });
691
+
692
+ if (node.level === 0) {
693
+ setTimeout(() => {
694
+ if (node.childNodes.length) {
695
+ this.$refs.tree.setCurrentKey(node.childNodes[0].data)
696
+ this.handleNodeData(node.childNodes[0]);
697
+ this.searchEvent();
698
+ }
699
+ }, 200);
700
+ this.$nextTick(() => {
701
+ callback && callback();
702
+ })
703
+
704
+ } else {
705
+ this.$nextTick(() => {
706
+ callback && callback();
707
+ })
708
+ }
709
+ resolve(rows);
710
+ }
711
+ });
712
+ },
713
+ handleNodeData(node) {
714
+ let treeNodeArr = [];
715
+ let tree = this.$refs.tree;
716
+ if (node) {
717
+ treeNodeArr.push(node);
718
+ let end = false;
719
+ let pNode = node;
720
+ while (!end) {
721
+ pNode = pNode.parent;
722
+ if (pNode && pNode.data) {
723
+ let pData = pNode.data;
724
+ treeNodeArr.push(pNode);
725
+ end = pNode.level <= 1;
726
+ } else {
727
+ end = true;
728
+ }
729
+ }
730
+ treeNodeArr = treeNodeArr.reverse();
731
+ }
732
+ this.currentFileCategory = node ? node.data : null;
733
+ this.currentNode = node;
734
+ this.$set(this, 'treeNodeArr', treeNodeArr);
735
+ },
736
+ mulDownload() {
737
+ let checkRows = this.getCheckRows();
738
+ if (!checkRows.length) {
739
+ this.$message({
740
+ message: this.$t1('请选择需要下载的文件'),
741
+ type: 'error',
742
+ showClose: true,
743
+ duration: 3000,
744
+ });
745
+ return;
746
+ }
747
+ checkRows.forEach(row => {
748
+ this.$commonFileUtil.downloadFile(row.domain + row.url, row.name);
749
+ })
750
+ },
751
+ mulDownload2() {
752
+ let checkRows = this.getCheckRows();
753
+ if (!checkRows.length) {
754
+ this.$message({
755
+ message: this.$t1('请选择需要下载的文件'),
756
+ type: 'error',
757
+ showClose: true,
758
+ duration: 3000,
759
+ });
760
+ return;
761
+ }
762
+
763
+ this.getDownloadDomian(domain => {
764
+ this.getFileWhole(checkRows, (fileWhole) => {
765
+ this.$http({
766
+ method: 'post',
767
+ url: domain + '/docfile/download',
768
+ data: fileWhole,
769
+ isLoading: true,
770
+ success: res => {
771
+ window.open(res.objx.url);
772
+ }
773
+ });
774
+ })
775
+ })
776
+ },
777
+ getDownloadDomian(callback) {
778
+ this.$http({
779
+ method: 'post',
780
+ url: USER_PREFIX + '/common/fileDownloadUrl',
781
+ data: {},
782
+ isLoading: true,
783
+ success: res => {
784
+ callback(res.objx)
785
+ }
786
+ });
787
+ },
788
+ getFileWhole(rows, callback) {
789
+ let ids = rows.map(row => row.id);
790
+ this.$http({
791
+ method: 'post',
792
+ url: this.current_prefix + '/file_view_ins/getFileWhole',
793
+ data: ids,
794
+ isLoading: true,
795
+ success: res => {
796
+ callback(res.objx)
797
+ }
798
+ });
799
+ },
800
+ checkChange() {
801
+ let rows = this.getRows();
802
+ let checkRows = this.getCheckRows();
803
+ this.checkAll = rows.length && rows.length == checkRows.length
804
+ },
805
+ changeCheckAll(val) {
806
+ let rows = this.getRows();
807
+ this.checkList = val ? rows.map(row => row.id) : [];
808
+ if (this.showType == 2) {
809
+ this.$refs['table-m1'].setAllCheckboxRow(val);
810
+ }
811
+ },
812
+ tableCheckChange() {
813
+ let checkRows = this.getCheckRows();
814
+ this.checkList = checkRows.map(row => row.id);
815
+ this.checkChange();
816
+ },
817
+ tableCheckAll(val) {
818
+ let checkRows = this.getCheckRows();
819
+ this.checkList = checkRows.map(row => row.id);
820
+ this.checkChange();
821
+ },
822
+ initTitle() {
823
+ this.$http({
824
+ method: 'post',
825
+ url: USER_PREFIX + '/file_view_area/getByCode',
826
+ data: {
827
+ stringOne: this.viewAreaCode,
828
+ },
829
+ isLoading: true,
830
+ success: res => {
831
+ let fileStoreArea = res.objx;
832
+ if (fileStoreArea) {
833
+ this.title = fileStoreArea.viewAreaName;
834
+ this.$nextTick(() => {
835
+ treeScollx({target: this, type: 'default'});
836
+ this.treeFlag = true;
837
+ });
838
+ } else {
839
+ this.$baseAlert(this.$t1('凭证查询区未维护'));
840
+ }
841
+ }
842
+ });
843
+ },
844
+ formatFileSize(fileSize) {
845
+ fileSize = fileSize || 0;
846
+ if (fileSize < 1024) {
847
+ return fileSize + 'B';
848
+ } else if (fileSize < (1024 * 1024)) {
849
+ var temp = fileSize / 1024;
850
+ temp = temp.toFixed(2);
851
+ return temp + 'KB';
852
+ } else if (fileSize < (1024 * 1024 * 1024)) {
853
+ var temp = fileSize / (1024 * 1024);
854
+ temp = temp.toFixed(2);
855
+ return temp + 'MB';
856
+ } else {
857
+ var temp = fileSize / (1024 * 1024 * 1024);
858
+ temp = temp.toFixed(2);
859
+ return temp + 'GB';
860
+ }
861
+ },
862
+ reflushTree() {
863
+ this.treeFlag = false;
864
+ setTimeout(() => {
865
+ this.treeFlag = true;
866
+ }, 200)
867
+ },
868
+ async openWfDialog(row) {
869
+ let url = row.billUrl + '.vue';
870
+ let id = row.billId;
871
+ this.wfDataId = !id || typeof id == 'object' ? 0 : id;
872
+ this.showWfDialog = true;
873
+ this.showWfContent = true;
874
+ const res = await loadViewComponentAsync(url);
875
+ this.remoteView =
876
+ res.kind === "remote"
877
+ ? {
878
+ owner: res.owner,
879
+ targetPath: res.targetPath,
880
+ bizParams: { _dataId: this.wfDataId },
881
+ viewMeta: { visibleKey: "showWfContent", defaultShowWfContent: true, viewType: 1 },
882
+ }
883
+ : null;
884
+ this.wfContent = res.component;
885
+ },
886
+ }
887
+ };
888
+ </script>
889
+ <style lang="scss" scoped>
890
+ #labBtn {
891
+ height: calc(100vh - 35px);
892
+ }
893
+
894
+ #containt {
895
+ overflow: hidden;
896
+
897
+ .main-right {
898
+ margin-left: -1%;
899
+ padding-left: 18px !important;
900
+ padding-top: 8px;
901
+ padding-right: 8px;
902
+ overflow: hidden;
903
+ }
904
+ }
905
+
906
+ .upload-list .upload-box {
907
+ display: inline-block;
908
+ }
909
+
910
+
911
+ .vxe-grid .vxe-gird-block {
912
+ height: calc(100vh - 161px);
913
+ }
914
+
915
+ .grid-height.viewBox {
916
+ height: calc(100vh - 84px);
917
+
918
+ .containter1 {
919
+ .annex-piclist > .clearfix {
920
+ height: calc(100vh - 159px);
921
+ }
922
+ }
923
+
924
+ .annex-grid-height {
925
+ height: calc(100vh - 126px);
926
+ }
927
+ }
928
+
929
+ .annex-screen + .line + .annex-crumbs + .grid-height.viewBox {
930
+ height: calc(100vh - 133px);
931
+
932
+ .containter1 {
933
+ .annex-piclist > .clearfix {
934
+ height: calc(100vh - 208px);
935
+ }
936
+ }
937
+
938
+ .annex-grid-height {
939
+ height: calc(100vh - 175px);
940
+ }
941
+ }
942
+
943
+ .annex-filter + .annex-crumbs + .grid-height.viewBox {
944
+ height: calc(100vh - 133px);
945
+
946
+ .containter1 {
947
+ .annex-piclist > .clearfix {
948
+ height: calc(100vh - 208px);
949
+ }
950
+ }
951
+
952
+ .annex-grid-height {
953
+ height: calc(100vh - 175px);
954
+ }
955
+ }
956
+
957
+ .annex-filter + .annex-screen + .line + .annex-crumbs + .grid-height.viewBox {
958
+ height: calc(100vh - 181px);
959
+
960
+ .containter1 {
961
+ .annex-piclist > .clearfix {
962
+ height: calc(100vh - 256px);
963
+ }
964
+ }
965
+
966
+ .annex-grid-height {
967
+ height: calc(100vh - 223px);
968
+ }
969
+ }
970
+ </style>