ui-process-h5 2.0.7-beta → 2.1.0-beta

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 (91) hide show
  1. package/README.md +11 -204
  2. package/build/configure/README.md +211 -0
  3. package/build/configure/package.json +32 -0
  4. package/debug.js +9 -0
  5. package/index.html +12 -0
  6. package/package.json +56 -25
  7. package/src/App.vue +233 -0
  8. package/src/assets/font-icon/iconfont.scss +57 -0
  9. package/src/assets/font-icon/iconfont.ttf +0 -0
  10. package/src/assets/img/add-file.png +0 -0
  11. package/src/assets/img/arrow-right.png +0 -0
  12. package/src/assets/img/arrow.png +0 -0
  13. package/src/assets/img/check.png +0 -0
  14. package/src/assets/img/del.png +0 -0
  15. package/src/assets/img/doc.png +0 -0
  16. package/src/assets/img/file.png +0 -0
  17. package/src/assets/img/image.png +0 -0
  18. package/src/assets/img/pdf.png +0 -0
  19. package/src/assets/img/process.png +0 -0
  20. package/src/assets/img/xls.png +0 -0
  21. package/src/assets/img/zip.png +0 -0
  22. package/src/assets/js/auth.js +65 -0
  23. package/src/assets/js/errorCode.js +6 -0
  24. package/src/assets/js/message.js +352 -0
  25. package/src/assets/js/request.js +99 -0
  26. package/src/assets/js/toast.js +239 -0
  27. package/src/assets/js/top.js +229 -0
  28. package/src/assets/js/utils.js +83 -0
  29. package/src/assets/js/vuePopper.js +123 -0
  30. package/src/assets/query.png +0 -0
  31. package/src/assets/status/check.png +0 -0
  32. package/src/assets/status/del.png +0 -0
  33. package/src/assets/status/error.png +0 -0
  34. package/src/assets/status/loading.png +0 -0
  35. package/src/assets/status/success.png +0 -0
  36. package/src/main.js +17 -0
  37. package/src/packages/attchUpload/index.js +375 -0
  38. package/src/packages/attchUpload/index.scss +143 -0
  39. package/src/packages/attchUpload/index.vue +173 -0
  40. package/src/packages/downSelect/index.js +119 -0
  41. package/src/packages/downSelect/index.scss +88 -0
  42. package/src/packages/downSelect/index.vue +62 -0
  43. package/src/packages/index.js +6 -0
  44. package/src/packages/popup/index.js +125 -0
  45. package/src/packages/popup/index.scss +178 -0
  46. package/src/packages/popup/index.vue +80 -0
  47. package/src/packages/preview/index.js +40 -0
  48. package/src/packages/preview/index.vue +15 -0
  49. package/src/packages/previewImage/index.js +286 -0
  50. package/src/packages/previewImage/index.scss +76 -0
  51. package/src/packages/previewImage/index.vue +53 -0
  52. package/src/packages/process/index.js +1016 -0
  53. package/src/packages/process/index.scss +188 -0
  54. package/src/packages/process/index.vue +291 -0
  55. package/src/packages/process/operation/backNode.vue +396 -0
  56. package/src/packages/process/operation/cancel.vue +425 -0
  57. package/src/packages/process/operation/ccTask.vue +256 -0
  58. package/src/packages/process/operation/complete.vue +1384 -0
  59. package/src/packages/process/operation/counterSign.vue +498 -0
  60. package/src/packages/process/operation/delegateTask.vue +493 -0
  61. package/src/packages/process/operation/index.js +8 -0
  62. package/src/packages/process/operation/index.scss +212 -0
  63. package/src/packages/process/operation/msgList.vue +174 -0
  64. package/src/packages/process/operation/treeNode.vue +901 -0
  65. package/src/packages/process/operation/treePerson.vue +304 -0
  66. package/src/packages/submitPopup/index.js +708 -0
  67. package/src/packages/submitPopup/index.scss +190 -0
  68. package/src/packages/submitPopup/index.vue +125 -0
  69. package/src/packages/tab/index.js +236 -0
  70. package/src/packages/tab/index.scss +177 -0
  71. package/src/packages/tab/index.vue +155 -0
  72. package/src/packages/tip/index.js +80 -0
  73. package/src/packages/tip/index.scss +121 -0
  74. package/src/packages/tip/index.vue +57 -0
  75. package/src/packages/viewAttchList/index.js +138 -0
  76. package/src/packages/viewAttchList/index.scss +76 -0
  77. package/src/packages/viewAttchList/index.vue +121 -0
  78. package/src/style.css +80 -0
  79. package/vite.config.ts +118 -0
  80. package/v2/style.css +0 -1
  81. package/v2/ui-process-h5.js +0 -9945
  82. package/v2/ui-process-h5.umd.cjs +0 -18
  83. package/v2.7/style.css +0 -1
  84. package/v2.7/ui-process-h5.js +0 -9322
  85. package/v2.7/ui-process-h5.umd.cjs +0 -18
  86. package/v3/style.css +0 -1
  87. package/v3/ui-process-h5.js +0 -6842
  88. package/v3/ui-process-h5.umd.cjs +0 -6
  89. /package/{scripts → build/scripts}/postinstall.mjs +0 -0
  90. /package/{scripts → build/scripts}/switch-cli.mjs +0 -0
  91. /package/{scripts → build/scripts}/utils.mjs +0 -0
@@ -0,0 +1,375 @@
1
+ import { defineComponent } from "vue-demi";
2
+ import TopTips from "../tip/index.vue";
3
+ import PreviewImage from "../previewImage/index.vue";
4
+ import PreView from "../preview/index.vue";
5
+ import TopPopup from "../popup/index.vue";
6
+
7
+ import addFile from "@/assets/img/add-file.png";
8
+ import del from "@/assets/img/del.png";
9
+ import doc from "@/assets/img/doc.png";
10
+ import file from "@/assets/img/file.png";
11
+ import image from "@/assets/img/image.png";
12
+ import pdf from "@/assets/img/pdf.png";
13
+ import xls from "@/assets/img/xls.png";
14
+ import zip from "@/assets/img/zip.png";
15
+
16
+ export default defineComponent({
17
+ name: "attchViews",
18
+ components: {
19
+ TopTips,
20
+ PreviewImage,
21
+ PreView,
22
+ TopPopup,
23
+ },
24
+ props: {
25
+ // axios接口信息
26
+ request: {
27
+ type: Function,
28
+ defalut: () => {},
29
+ },
30
+ // 最大上传数
31
+ limit: {
32
+ type: Number | String,
33
+ default: 4,
34
+ },
35
+ //返回上传数据url
36
+ changeFn: {
37
+ type: Function,
38
+ default: null,
39
+ },
40
+ // 是否必填
41
+ requires: {
42
+ default: false,
43
+ },
44
+ // 已上传数据列表 (用于表单修改或者列表展示)
45
+ inComing: {
46
+ type: Array,
47
+ defalut: () => [],
48
+ },
49
+ // 组件本身提供静态删除功能,动态删除需传入相应方法
50
+ deletFn: {
51
+ type: Function,
52
+ },
53
+ // 列表模式开启(开启后关闭上传,删除功能)
54
+ onlyShow: {
55
+ type: Boolean,
56
+ default: false,
57
+ },
58
+ linkUrl: {
59
+ type: Function,
60
+ defalut: null,
61
+ },
62
+ },
63
+
64
+ data() {
65
+ return {
66
+ // 列表展示 已选择文件列表
67
+ lists: [],
68
+ filesArr: [],
69
+ imgIcon: ["jpg", "jpeg", "png", "gif"],
70
+ docIcon: ["doc", "docx"],
71
+ xlsIcon: ["xls", "xlsx"],
72
+ zipIcon: ["zip", "rar", "7z"],
73
+ extension: [
74
+ "bmp",
75
+ "gif",
76
+ "jpg",
77
+ "jpeg",
78
+ "png",
79
+ "doc",
80
+ "docx",
81
+ "xls",
82
+ "xlsx",
83
+ "ppt",
84
+ "pptx",
85
+ "html",
86
+ "htm",
87
+ "txt",
88
+ "wps",
89
+ "rar",
90
+ "zip",
91
+ "gz",
92
+ "bz2",
93
+ "mp4",
94
+ "avi",
95
+ "rmvb",
96
+ "pdf",
97
+ ],
98
+ // ----
99
+ current: "",
100
+
101
+ buttonLoading: false,
102
+ handleCloseType: true,
103
+ uploadState: true,
104
+
105
+ textTips: "",
106
+ statusTips: false,
107
+ typeTips: "success",
108
+
109
+ visible: false,
110
+ indexd: 0,
111
+
112
+ visibleS: false,
113
+ fileUrl: "",
114
+ };
115
+ },
116
+
117
+ watch: {
118
+ inComing: {
119
+ handler(val, preval) {
120
+ if (val) {
121
+ // 传入附件列表前预处理 name fileSize , name与 size 无法渲染
122
+ this.filesArr = [].concat(val);
123
+ this.emitView();
124
+ }
125
+ },
126
+
127
+ //如果加了这个参数,值为true的话,就消除了惰性,watch会在创建后立即执行一次
128
+ //那么首次执行,val为默认值,preVal为undefined
129
+ immediate: true,
130
+ //这个参数代表监听对象时,可以监听深度嵌套的对象属性
131
+ deep: true,
132
+ },
133
+ },
134
+
135
+ computed: {
136
+ haveCount() {
137
+ if (this.limit == -1) return 100;
138
+ return this.limit - this.filesArr.length;
139
+ },
140
+ addFile() {
141
+ return addFile;
142
+ },
143
+ del() {
144
+ return del;
145
+ },
146
+ doc() {
147
+ return doc;
148
+ },
149
+ file() {
150
+ return file;
151
+ },
152
+ image() {
153
+ return image;
154
+ },
155
+ pdf() {
156
+ return pdf;
157
+ },
158
+ xls() {
159
+ return xls;
160
+ },
161
+ zip() {
162
+ return zip;
163
+ },
164
+ },
165
+
166
+ mounted() {
167
+ // 兼容uni(uni编译会修改input属性,渲染完成后创建dom) upload-header-upload--item 兼容ios低版本,外部点击触发input事件
168
+
169
+ this.$nextTick(() => {
170
+ let input = document.createElement("input");
171
+ input.type = "file";
172
+ input.className = "upload-input";
173
+ input.style =
174
+ "opacity: 0;position: absolute;width:100%;height:100%;visibility: hidden;";
175
+ input.multiple = true;
176
+ input.id = "fileUp";
177
+ input.addEventListener("change", this.handleSelect);
178
+ document.getElementById("inputfile").appendChild(input);
179
+ });
180
+ },
181
+
182
+ methods: {
183
+ // 拦截
184
+ handleClick() {
185
+ // console.log("拦截", this.haveCount, this.limit);
186
+ if (
187
+ "undefined" != typeof nativeMethod &&
188
+ nativeMethod.vueSelectFile
189
+ ) {
190
+ nativeMethod.vueSelectFile(2, "*", this.limit || 1);
191
+ }
192
+ if (this.haveCount <= 0) {
193
+ this.handleTips(
194
+ `最多上传${this.limit}个文件`,
195
+ false,
196
+ "success"
197
+ );
198
+ return;
199
+ }
200
+
201
+ document.getElementById("fileUp").click();
202
+ /* console.log("click:::",document.getElementById("fileUp")) */
203
+ },
204
+ // 上传选择
205
+ async handleSelect(value, items) {
206
+ this.handleTips("上传中", true, "loading");
207
+ // console.log("formData", value.target.files);
208
+ const files = Array.from(value.target.files);
209
+ document.getElementById("fileUp").value = "";
210
+ let num = 0;
211
+ let numLength =
212
+ this.haveCount > files.length ? files.length : this.haveCount;
213
+ try {
214
+ for (let i = 0; i < numLength; i++) {
215
+ if (
216
+ this.extension.includes(
217
+ files[i].name.substring(
218
+ files[i].name.lastIndexOf(".") + 1
219
+ )
220
+ )
221
+ ) {
222
+ const formData = new FormData();
223
+ formData.append("file", files[i]);
224
+ const res = await this.request.post(
225
+ "/file/upload",
226
+ formData,
227
+ {
228
+ headers: {
229
+ "Content-Type": "multipart/form-data",
230
+ },
231
+ }
232
+ );
233
+ if (res.code === 200) {
234
+ if (this.filesArr.length > 0) {
235
+ for (
236
+ let indexs = 0;
237
+ indexs < this.filesArr.length;
238
+ indexs++
239
+ ) {
240
+ // 导入文件是否重名
241
+ if (
242
+ res.name ==
243
+ this.filesArr[indexs].name
244
+ ) {
245
+ num++;
246
+ }
247
+
248
+ // 导入文件已存在重名
249
+ if (
250
+ this.filesArr[
251
+ indexs
252
+ ].name.includes(`(${num})`)
253
+ ) {
254
+ num++;
255
+ }
256
+
257
+ if (num > 0) {
258
+ let nameIndex = res.name.lastIndexOf(
259
+ "."
260
+ );
261
+ res.name = `${res.name.substring(
262
+ 0,
263
+ nameIndex
264
+ )} (${num}) .${res.name.substring(
265
+ res.name.lastIndexOf(
266
+ "."
267
+ ) + 1
268
+ )}`;
269
+ }
270
+ }
271
+ }
272
+ this.filesArr.push(res.data);
273
+ } else {
274
+ this.handleTips("上传失败", true, "error");
275
+ this.viewImage();
276
+ return;
277
+ }
278
+ } else {
279
+ this.handleTips(
280
+ `文件${files[i].name}格式错误,请重新上传`,
281
+ true,
282
+ "error"
283
+ );
284
+ return;
285
+ }
286
+ }
287
+ this.handleTips("上传成功", true, "success");
288
+ this.viewImage();
289
+ // console.log("当前已上传", this.filesArr);
290
+ this.emitView();
291
+ } catch (err) {
292
+ this.handleTips("上传失败", true, "error");
293
+ this.emitView();
294
+ }
295
+ },
296
+ // 删除节点
297
+ handleDel(index, items) {
298
+ let delet;
299
+ if (this.deletFn) {
300
+ let delet = this.deletFn(items);
301
+ if (delet === false) {
302
+ this.handleTips("删除失败", true, "error");
303
+ return;
304
+ }
305
+ this.filesArr.splice(index, 1);
306
+ this.emitView();
307
+ } else {
308
+ this.filesArr.splice(index, 1);
309
+ this.emitView();
310
+ }
311
+ },
312
+ // 预览
313
+ viewFile(data, index) {
314
+ // console.log("data", data);
315
+ if (
316
+ this.imgIcon.includes(
317
+ data.name
318
+ .substring(data.name.lastIndexOf(".") + 1)
319
+ .toLowerCase()
320
+ )
321
+ ) {
322
+ this.indexd = this.lists.indexOf(data.url);
323
+ this.visible = true;
324
+ } else {
325
+ if (data.url) {
326
+ this.fileUrl = data.url;
327
+ this.visibleS = true;
328
+ }
329
+ }
330
+ },
331
+ // 预览图片 数组生成
332
+ viewImage() {
333
+ this.lists = [];
334
+ let arr = [];
335
+ this.filesArr.map((v, i) => {
336
+ if (
337
+ this.imgIcon.includes(
338
+ v.name.substring(v.name.lastIndexOf(".") + 1).toLowerCase()
339
+ )
340
+ ) {
341
+ }
342
+ });
343
+ arr = this.filesArr.filter((value) => {
344
+ return this.imgIcon.includes(
345
+ value.name.substring(value.name.lastIndexOf(".") + 1).toLowerCase()
346
+ );
347
+ });
348
+ arr.forEach((v, i) => {
349
+ this.lists.push(v.url);
350
+ });
351
+ },
352
+ // 发送数据
353
+ emitView() {
354
+ this.$emit("getValue", this.filesArr);
355
+ },
356
+ // clear node
357
+ clearData() {
358
+ this.filesArr = [];
359
+ // console.log("clear!!!!!");
360
+ },
361
+
362
+ // tips
363
+ handleTips(text, status, type) {
364
+ this.textTips = text;
365
+ this.statusTips = status;
366
+ this.typeTips = type;
367
+ this.$refs.topTips.handleOpen();
368
+ },
369
+ },
370
+ });
371
+
372
+ /* defineEmits */
373
+ // const emit = defineEmits(["getValue"]);
374
+
375
+ // defineExpose({ clearData });
@@ -0,0 +1,143 @@
1
+ .attch-upload-mask {
2
+ width: 100vw;
3
+ height: 100vh;
4
+ position: fixed;
5
+ top: 0;
6
+ left: 0;
7
+ background-color: #999;
8
+ opacity: 0.5;
9
+ overflow-x: hidden;
10
+ }
11
+ .attch-upload-body {
12
+ width: 100%;
13
+ }
14
+ .upload-close {
15
+ box-sizing: border-box;
16
+ width: 100%;
17
+ height: 20px;
18
+ padding: 5px;
19
+ text-align: right;
20
+ }
21
+ .upload-close-img {
22
+ width: 18px;
23
+ height: 18px;
24
+ }
25
+ .upload-header {
26
+ width: 100%;
27
+ /* position: fixed;
28
+ top: 0; */
29
+ height: 44px;
30
+ font-size: 14px;
31
+ display: flex;
32
+ justify-content: space-between;
33
+ box-sizing: border-box;
34
+ align-items: center;
35
+ overflow-x: hidden;
36
+ }
37
+
38
+ .upload-header-title--re {
39
+ color: #ee0000;
40
+ }
41
+
42
+ .upload-header-title {
43
+ height: 100%;
44
+ display: flex;
45
+ align-items: center;
46
+ }
47
+
48
+ .upload-header-close {
49
+ width: 18px;
50
+ height: 18px;
51
+ }
52
+
53
+ .upload-header-upload {
54
+ height: 100%;
55
+
56
+ font-size: 14px;
57
+ color: #1389ff;
58
+ }
59
+
60
+ .upload-input {
61
+ opacity: 0;
62
+ position: absolute;
63
+ }
64
+ .upload-header-upload--item {
65
+ display: flex;
66
+ align-items: center;
67
+ height: 100%;
68
+ position: relative;
69
+ }
70
+
71
+ .upload-header-upload--item img {
72
+ width: 18px;
73
+ height: 18px;
74
+ margin-right: 4px;
75
+ }
76
+
77
+ .upload-list {
78
+ padding-bottom: 20px;
79
+ }
80
+ .list-items {
81
+ display: flex;
82
+ margin-top: 18px;
83
+ }
84
+
85
+ .list-items-icon {
86
+ width: 36px;
87
+ height: 40px;
88
+ margin-right: 10px;
89
+ line-height: 44px;
90
+ }
91
+ .icon-img {
92
+ width: 100%;
93
+ height: 100%;
94
+ }
95
+
96
+ .list-items-info {
97
+ width: 225px;
98
+ }
99
+
100
+ .info-name {
101
+ width: 100%;
102
+ font-size: 15px;
103
+ color: #333;
104
+ word-wrap: break-word;
105
+ word-break: break-all;
106
+ }
107
+ .info-attribute {
108
+ color: #999;
109
+ font-size: 13px;
110
+ }
111
+ .info-attribute-time {
112
+ margin-right: 10px;
113
+ }
114
+ .info-attribute-views {
115
+ color: #1389ff;
116
+ }
117
+
118
+ .list-items-operation {
119
+ flex: 1;
120
+ }
121
+ .list-items-operation-img {
122
+ width: 18px;
123
+ height: 18px;
124
+ margin-left: auto;
125
+ line-height: 44px;
126
+ }
127
+ .list-items-operation-img img {
128
+ width: 100%;
129
+ height: 100%;
130
+ }
131
+
132
+ .upload-footer {
133
+ width: 100%;
134
+ position: fixed;
135
+ bottom: 0;
136
+ }
137
+
138
+ .attchlist-wrap {
139
+ width: 100%;
140
+ height: 100dvh;
141
+ display: flex;
142
+ flex-direction: column;
143
+ }
@@ -0,0 +1,173 @@
1
+ <template>
2
+ <div class="attch-upload">
3
+ <div class="attch-upload-mask" v-if="buttonLoading"></div>
4
+ <div class="attch-upload-body">
5
+ <div class="upload-header">
6
+ <div class="upload-header-title">
7
+ 附件
8
+ <span v-if="requires" class="upload-header-title--re"
9
+ >*</span
10
+ >
11
+ </div>
12
+ <div class="upload-header-upload">
13
+ <div
14
+ v-if="!onlyShow"
15
+ class="upload-header-upload--item"
16
+ id="inputfile"
17
+ @click="handleClick"
18
+ >
19
+ <!-- <input
20
+ v-if="haveCount > 0 && !VueVersion"
21
+ class="upload-input"
22
+ type="file"
23
+ multiple
24
+ @change="handleSelect($event, item)"
25
+ /> -->
26
+ <img :src="addFile" />上传附件
27
+ </div>
28
+ </div>
29
+ </div>
30
+
31
+ <div class="upload-body">
32
+ <div class="upload-list" v-if="filesArr.length > 0">
33
+ <div
34
+ class="list-items"
35
+ v-for="(v, i) of filesArr"
36
+ :key="v.uuid"
37
+ >
38
+ <div class="list-items-icon">
39
+ <img
40
+ v-if="
41
+ xlsIcon.includes(
42
+ v.name.substring(
43
+ v.name.lastIndexOf('.') + 1
44
+ ).toLowerCase()
45
+ )
46
+ "
47
+ class="icon-img"
48
+ :src="xls"
49
+ />
50
+ <img
51
+ v-else-if="
52
+ imgIcon.includes(
53
+ v.name.substring(
54
+ v.name.lastIndexOf('.') + 1
55
+ ).toLowerCase()
56
+ )
57
+ "
58
+ class="icon-img"
59
+ :src="image"
60
+ />
61
+ <img
62
+ v-else-if="
63
+ v.name.substring(
64
+ v.name.lastIndexOf('.') + 1
65
+ ).toLowerCase() == 'pdf'
66
+ "
67
+ class="icon-img"
68
+ :src="pdf"
69
+ />
70
+ <img
71
+ v-else-if="
72
+ docIcon.includes(
73
+ v.name.substring(
74
+ v.name.lastIndexOf('.') + 1
75
+ ).toLowerCase()
76
+ )
77
+ "
78
+ class="icon-img"
79
+ :src="doc"
80
+ />
81
+ <img
82
+ v-else-if="
83
+ zipIcon.includes(
84
+ v.name.substring(
85
+ v.name.lastIndexOf('.') + 1
86
+ ).toLowerCase()
87
+ )
88
+ "
89
+ class="icon-img"
90
+ :src="zip"
91
+ />
92
+ <img v-else class="icon-img" :src="file" />
93
+ </div>
94
+ <div class="list-items-info">
95
+ <div class="info-name">
96
+ {{ v.name }}
97
+ </div>
98
+ <div class="info-attribute">
99
+ <span class="info-attribute-size"
100
+ >{{
101
+ v.fileSize < 1024
102
+ ? v.fileSize
103
+ : v.fileSize / 1024 > 1024
104
+ ? parseFloat(
105
+ (
106
+ v.fileSize /
107
+ 1024 /
108
+ 1024
109
+ ).toFixed(2)
110
+ )
111
+ : parseFloat(
112
+ (v.fileSize / 1024).toFixed(2)
113
+ )
114
+ }}{{
115
+ v.fileSize < 1024
116
+ ? "b"
117
+ : parseFloat(
118
+ (v.fileSize / 1024).toFixed(2)
119
+ ) < 1024
120
+ ? "kb"
121
+ : "M"
122
+ }}
123
+ </span>
124
+ <span
125
+ class="info-attribute-views"
126
+ @click="viewFile(v, i)"
127
+ >
128
+ 预览
129
+ </span>
130
+ </div>
131
+ </div>
132
+ <div class="list-items-operation" v-if="!onlyShow">
133
+ <div
134
+ @click="handleDel(i, v)"
135
+ class="list-items-operation-img"
136
+ >
137
+ <img :src="del" />
138
+ </div>
139
+ </div>
140
+ </div>
141
+ </div>
142
+ </div>
143
+ </div>
144
+ <TopTips
145
+ ref="topTips"
146
+ :text="textTips"
147
+ :statusTips="statusTips"
148
+ :type="typeTips"
149
+ />
150
+ <!-- :visible.sync="visible" -->
151
+ <PreviewImage
152
+ :images="lists"
153
+ v-bind:visible="visible"
154
+ v-on:update:visible="(val) => (visible = val)"
155
+ :indexd="indexd"
156
+ />
157
+
158
+ <TopPopup
159
+ v-bind:visible="visibleS"
160
+ v-on:update:visible="(val) => (visibleS = val)"
161
+ ref="TopPopup"
162
+ titleText="附件预览"
163
+ isDrawer
164
+ :isIndex="99"
165
+ >
166
+ <PreView v-if="visibleS" :file="fileUrl" />
167
+ </TopPopup>
168
+ </div>
169
+ </template>
170
+ <script src="./index.js"></script>
171
+ <style lang="scss" scoped>
172
+ @import "./index.scss";
173
+ </style>