ui-process-h5 0.1.33 → 0.1.40

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 (98) hide show
  1. package/build/configure/README.md +171 -0
  2. package/build/configure/package.json +27 -0
  3. package/build/scripts/postinstall.mjs +14 -0
  4. package/build/scripts/switch-cli.mjs +4 -0
  5. package/build/scripts/utils.mjs +60 -0
  6. package/index.html +12 -0
  7. package/package.json +43 -58
  8. package/src/App.vue +151 -0
  9. package/src/assets/font-icon/iconfont.scss +57 -0
  10. package/src/assets/font-icon/iconfont.ttf +0 -0
  11. package/src/assets/img/add-file.png +0 -0
  12. package/src/assets/img/arrow-right.png +0 -0
  13. package/src/assets/img/arrow.png +0 -0
  14. package/src/assets/img/check.png +0 -0
  15. package/src/assets/img/del.png +0 -0
  16. package/src/assets/img/doc.png +0 -0
  17. package/src/assets/img/file.png +0 -0
  18. package/src/assets/img/image.png +0 -0
  19. package/src/assets/img/pdf.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 +41 -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 +90 -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 +82 -0
  29. package/src/assets/js/vuePopper.js +123 -0
  30. package/src/assets/query.png +0 -0
  31. package/src/assets/status/error.png +0 -0
  32. package/src/assets/status/loading.png +0 -0
  33. package/src/assets/status/success.png +0 -0
  34. package/src/main.js +15 -0
  35. package/src/packages/attchUpload/index.js +371 -0
  36. package/src/packages/attchUpload/index.scss +136 -0
  37. package/src/packages/attchUpload/index.vue +173 -0
  38. package/src/packages/downSelect/index.js +81 -0
  39. package/src/packages/downSelect/index.scss +82 -0
  40. package/src/packages/downSelect/index.vue +54 -0
  41. package/src/packages/index.js +6 -0
  42. package/src/packages/popup/index.js +61 -0
  43. package/src/packages/popup/index.scss +174 -0
  44. package/src/packages/popup/index.vue +79 -0
  45. package/src/packages/preview/index.js +36 -0
  46. package/src/packages/preview/index.vue +15 -0
  47. package/src/packages/previewImage/index.js +158 -0
  48. package/src/packages/previewImage/index.scss +59 -0
  49. package/src/packages/previewImage/index.vue +32 -0
  50. package/src/packages/process/index.js +679 -0
  51. package/src/packages/process/index.scss +164 -0
  52. package/src/packages/process/index.vue +189 -0
  53. package/src/packages/process/operation/backNode.vue +393 -0
  54. package/src/packages/process/operation/cancel.vue +399 -0
  55. package/src/packages/process/operation/ccTask.vue +461 -0
  56. package/src/packages/process/operation/complete.vue +488 -0
  57. package/src/packages/process/operation/counterSign.vue +485 -0
  58. package/src/packages/process/operation/delegateTask.vue +480 -0
  59. package/src/packages/process/operation/index.js +9 -0
  60. package/src/packages/process/operation/restart.vue +305 -0
  61. package/src/packages/submitPopup/index.js +296 -0
  62. package/src/packages/submitPopup/index.scss +83 -0
  63. package/src/packages/submitPopup/index.vue +138 -0
  64. package/src/packages/tab/index.js +207 -0
  65. package/src/packages/tab/index.scss +176 -0
  66. package/src/packages/tab/index.vue +155 -0
  67. package/src/packages/tip/index.js +74 -0
  68. package/src/packages/tip/index.scss +82 -0
  69. package/src/packages/tip/index.vue +57 -0
  70. package/src/packages/viewAttchList/index.js +132 -0
  71. package/src/packages/viewAttchList/index.scss +76 -0
  72. package/src/packages/viewAttchList/index.vue +112 -0
  73. package/src/style.css +80 -0
  74. package/ui-process-h5/README.md +171 -0
  75. package/ui-process-h5/package.json +27 -0
  76. package/ui-process-h5/scripts/postinstall.mjs +14 -0
  77. package/ui-process-h5/scripts/switch-cli.mjs +4 -0
  78. package/ui-process-h5/scripts/utils.mjs +60 -0
  79. package/ui-process-h5/v2/style.css +1 -0
  80. package/ui-process-h5/v2/ui-process-h5.js +13467 -0
  81. package/ui-process-h5/v2/ui-process-h5.umd.cjs +67 -0
  82. package/ui-process-h5/v2.7/style.css +1 -0
  83. package/ui-process-h5/v2.7/ui-process-h5.js +12844 -0
  84. package/ui-process-h5/v2.7/ui-process-h5.umd.cjs +67 -0
  85. package/ui-process-h5/v3/style.css +1 -0
  86. package/ui-process-h5/v3/ui-process-h5.js +10336 -0
  87. package/ui-process-h5/v3/ui-process-h5.umd.cjs +55 -0
  88. package/vite.config.ts +78 -0
  89. package/packages/components/process/index.js +0 -8
  90. package/packages/components/process/src/button.vue +0 -55
  91. package/packages/components/process/src/index.vue +0 -447
  92. package/packages/components/process/src/popup.vue +0 -128
  93. package/packages/components/process/src/tab.vue +0 -467
  94. package/packages/components/utils/request/api.ts +0 -11
  95. package/packages/components/utils/request/cache.d.ts +0 -52
  96. package/packages/components/utils/request/cache.js +0 -99
  97. package/packages/components/utils/request/request.ts +0 -62
  98. package/packages/index.js +0 -4
@@ -1,128 +0,0 @@
1
- <template>
2
- <div
3
- class="top-popup"
4
- :style="
5
- show ? 'transform: translateY(0)' : 'transform: translateY(100%)'
6
- "
7
- >
8
- <div class="top-popup-header">
9
- <div class="header-cancel" @click="handleCancel">
10
- {{ cancelText }}
11
- </div>
12
- <div class="header-title">{{ titleText }}</div>
13
- <div class="header-comfig" @click="handleComfig">
14
- {{ comfigText }}
15
- </div>
16
- </div>
17
- <div class="top-popup-body">
18
- <slot name="default"></slot>
19
- </div>
20
- </div>
21
- <div
22
- class="top-popup-mask"
23
- v-if="show && isMask"
24
- @click="isMaskClose && handleClose()"
25
- ></div>
26
- </template>
27
- <script>
28
- import { defineComponent, ref, watch, computed, onMounted } from "vue-demi";
29
-
30
- export default defineComponent({
31
- name: "TopPopup",
32
- props: {
33
- titleText: { default: "top-popup", type: String },
34
- cancelText: { default: "取消", type: String },
35
- comfigText: { default: "确定", type: String },
36
- comfig: { default: null, type: Function },
37
- cancel: { default: null, type: Function },
38
- isMask: { default: true, type: Boolean },
39
- isMaskClose: { default: true, type: Boolean },
40
- },
41
- setup(props) {
42
- const show = ref(false);
43
-
44
- const handleOpen = () => {
45
- show.value = true;
46
- };
47
-
48
- const handleCancel = () => {
49
- typeof props.cancel === "function" && props.cancel();
50
- handleClose();
51
- };
52
-
53
- const handleComfig = () => {
54
- typeof props.comfig === "function" && props.comfig();
55
- };
56
-
57
- const handleClose = () => {
58
- show.value = false;
59
- };
60
-
61
- onMounted(() => {
62
- const body = document.querySelector("body");
63
- });
64
-
65
- return {
66
- handleOpen,
67
- handleCancel,
68
- handleComfig,
69
- handleClose,
70
- show,
71
- };
72
- },
73
- });
74
- </script>
75
- <style scoped>
76
- .top-popup {
77
- width: 100%;
78
- height: 80vh;
79
- position: fixed;
80
- left: 0;
81
- background-color: #fff;
82
- z-index: 199;
83
- border-radius: 20px 20px 0 0;
84
- padding: 0 10px;
85
- box-sizing: border-box;
86
- transition: all 0.5s ease;
87
- bottom: 0;
88
- }
89
- .top-popup-mask {
90
- position: fixed;
91
- width: 100vw;
92
- height: 100vh;
93
- background-color: #000;
94
- opacity: 0.7;
95
- top: 0;
96
- left: 0;
97
- z-index: 99;
98
- }
99
- .top-popup-header {
100
- display: flex;
101
- justify-content: space-between;
102
- align-items: center;
103
- padding: 10px 0;
104
- }
105
-
106
- .top-popup-header .header-cancel {
107
- color: #1389ff;
108
- }
109
- .top-popup-header .header-comfig {
110
- color: #1389ff;
111
- }
112
-
113
- .fade-enter-active,
114
- .fade-leave-active {
115
- transition: all 0.5s ease;
116
- }
117
-
118
- .fade-enter,
119
- .fade-leave-to {
120
- /* transform: translateY(100%); */
121
- bottom: -100%;
122
- }
123
- .fade-enter-to,
124
- .fade-leave {
125
- /* transform: translateY(0%); */
126
- bottom: 0d;
127
- }
128
- </style>
@@ -1,467 +0,0 @@
1
- <template>
2
- <div class="tops-tab">
3
- <div class="tops-tab-header">
4
- <template v-for="(item, i) of isTapList">
5
- <div
6
- class="tops-tab-header-items"
7
- :class="[item.key === active ? 'active' : '']"
8
- @click="handleActive(item.key, i)"
9
- ref="label"
10
- >
11
- {{ item.label }}
12
- </div>
13
- </template>
14
- <div class="bottom-line" v-if="isTapList.length"></div>
15
- </div>
16
- <div class="tops-tab-body">
17
- <div
18
- v-for="item in isTapList"
19
- :key="item.key"
20
- v-show="active === item.key"
21
- style="height: calc(100% - 45px);"
22
- >
23
- <!-- :taskNode="getTaskNode()" -->
24
- <slot
25
- v-if="item.key === 'a' && item.type === 'default'"
26
- name="default"
27
- ></slot>
28
- <slot
29
- v-if="item.key === 'b' && item.type === 'default'"
30
- :name="item.slot"
31
- >
32
- <iframe
33
- v-if="trackUrl"
34
- :src="trackUrl"
35
- style="width: 100%; min-height: 500px; border: none;"
36
- scrolling="no"
37
- frameborder="0"
38
- ></iframe>
39
- <div v-else class="textnone">
40
- 暂无流程图
41
- </div>
42
- </slot>
43
- <slot
44
- v-if="item.key === 'c' && item.type === 'default'"
45
- :name="item.slot"
46
- >
47
- <div
48
- v-if="taskCommentList?.length > 0"
49
- v-for="(item, index) in taskCommentList"
50
- :key="item.id"
51
- class="seal-list__item"
52
- >
53
- <!-- <div v-for="item in list" :key="item.id" class="seal-list__item"> -->
54
- <div>
55
- <div class="seal-list__item--option">
56
- <span>节点名称</span>
57
- <span>{{ item.activityName }}</span>
58
- </div>
59
- <div class="seal-list__item--option">
60
- <span>审批人</span>
61
- <span>{{ item.createUserName }}</span>
62
- </div>
63
- <div class="seal-list__item--option">
64
- <span>审批操作</span>
65
- <span>{{ item.actionName }}</span>
66
- </div>
67
- <div class="seal-list__item--option">
68
- <span>审批意见</span>
69
- <span v-html="item.msg"></span>
70
- </div>
71
- <div class="seal-list__item--option">
72
- <span>审批时间</span>
73
- <span>{{ item.createDate }}</span>
74
- </div>
75
- <div
76
- v-if="
77
- item.metaAnnexList &&
78
- item.metaAnnexList.length
79
- "
80
- class="seal-list__item--attch"
81
- >
82
- <!-- @click="linkUrl(item.metaAnnexList, index)" -->
83
- <span>查看附件</span>
84
- </div>
85
- </div>
86
- </div>
87
- <div v-else class="textnone">暂无数据</div>
88
- </slot>
89
- <slot v-if="item.type == 'slot'" :name="item.slot"></slot>
90
- </div>
91
- </div>
92
- </div>
93
- </template>
94
-
95
- <script >
96
- import { defineComponent, ref, watch, onMounted, computed } from "vue-demi";
97
- // import { getProcessStatus } from "../../utils/request/api";
98
-
99
- export default defineComponent({
100
- name: "TopTab",
101
- props: {
102
- /**
103
- * 根据参数插入自定义tab
104
- * label:选项卡title
105
- * key:选项卡ID 请勿重复defaultTabList内已拥有的默认key
106
- * type:插槽类型 "slot" "default"
107
- * sort:排序参数,无参数默认插入末尾
108
- * slot:插槽name
109
- */
110
- tapList: {
111
- type: Array,
112
- default: () => [],
113
- },
114
- // 自定义tab (传入后 默认tab,tapList,失效)
115
- selfTapList: {
116
- type: Array,
117
- default: () => [],
118
- },
119
- },
120
- setup(props) {
121
- // 流程图
122
- const trackUrl = ref(
123
- "http://59.53.91.231:8088/portal/r/w?sid=6f714ec1-7570-4525-ac51-b092402d8295&cmd=CLIENT_BPM_FORM_TRACK_OPEN&processInstId=1f6e7196-e1ea-428e-b295-aa23a54a2402&supportCanvas=true&formInfo="
124
- );
125
-
126
- // 审批信息
127
- const taskCommentList = ref([
128
- {
129
- actionName: "提交",
130
- activityName: "部门负责人",
131
- createDate: "2023-04-20 14:47:35",
132
- createUser: "18ccbf63229f0c79f39940ae284c111e",
133
- createUserName: "朱鸿飞",
134
- customUniqueId: "",
135
- departmentName: "测试部",
136
- id: "88df38c8-9756-4b4a-a9b0-dcb0ec1b57d5",
137
- metaAnnexList: null,
138
- msg: "同意",
139
- positionName: "测试部119147",
140
- processInstId: "1f6e7196-e1ea-428e-b295-aa23a54a2402",
141
- taskInstId: "38bbef1c-efbb-456d-bd79-08ed9d96b4b3",
142
- },
143
- ]);
144
-
145
- // 选中
146
- const active = ref("");
147
-
148
- // tab 渲染
149
- const defaultTabList = ref([
150
- {
151
- label: "基本信息",
152
- key: "a",
153
- type: "default",
154
- slot: "default",
155
- },
156
- {
157
- label: "流程图",
158
- key: "b",
159
- type: "default",
160
- slot: "tab2",
161
- },
162
- {
163
- label: "审批记录",
164
- key: "c",
165
- type: "default",
166
- slot: "tab3",
167
- },
168
- ]);
169
-
170
- const isTapList = ref([
171
- {
172
- label: "基本信息",
173
- key: "a",
174
- type: "default",
175
- slot: "default",
176
- },
177
- {
178
- label: "流程图",
179
- key: "b",
180
- type: "default",
181
- slot: "tab2",
182
- },
183
- {
184
- label: "审批记录",
185
- key: "c",
186
- type: "default",
187
- slot: "tab3",
188
- },
189
- ]);
190
-
191
- const label = ref();
192
-
193
- // taskNode taskObj
194
-
195
- /* method */
196
- // 选中方法
197
- const handleActive = (e, i) => {
198
- if (e === active.value) {
199
- return;
200
- }
201
-
202
- active.value = e;
203
- tabAnimation(i);
204
- };
205
-
206
- const tabAnimation = (i) => {
207
- if (label.value.length) {
208
- let doc = (
209
- document.getElementsByClassName("bottom-line")[0]
210
- );
211
- let left;
212
- if (doc.offsetWidth < label.value[i].offsetWidth - 10) {
213
- let num =
214
- (label.value[i].offsetWidth - doc.offsetWidth - 10) / 2;
215
- left = `${label.value[i].offsetLeft + num}px`;
216
- } else if (doc.offsetWidth > label.value[i].offsetWidth - 10) {
217
- let num =
218
- (doc.offsetWidth - label.value[i].offsetWidth + 10) / 2;
219
- left = `${label.value[i].offsetLeft - num}px`;
220
- } else {
221
- left = `${label.value[i].offsetLeft}px`;
222
- }
223
- doc.style.transition = ".3s";
224
- doc.style.transform = `translateX(${left})`;
225
- }
226
- };
227
-
228
- /* watch */
229
- watch(
230
- () => props.selfTapList,
231
- (val, preVal) => {
232
- if (val.length) {
233
- isTapList.value = [].concat(val);
234
- active.value = isTapList.value[0].key;
235
- }
236
- },
237
- {
238
- //如果加了这个参数,值为true的话,就消除了惰性,watch会在创建后立即执行一次
239
- //那么首次执行,val为默认值,preVal为undefined
240
- immediate: true,
241
- //这个参数代表监听对象时,可以监听深度嵌套的对象属性
242
- deep: true,
243
- }
244
- );
245
-
246
- watch(
247
- () => props.tapList,
248
- (val, preVal) => {
249
- if (!props.selfTapList.length) {
250
- isTapList.value = [].concat(defaultTabList.value);
251
- if (val.length > 0) {
252
- /* return [] */
253
- val.forEach((v, i) => {
254
- if (v.sort && v.sort > 1) {
255
- isTapList.value.splice(v.sort - 1, 0, v);
256
- } else if (v.sort == 1) {
257
- isTapList.value.unshift(v);
258
- } else {
259
- isTapList.value.push(v);
260
- }
261
- });
262
- }
263
- active.value = isTapList.value[0].key;
264
- }
265
- },
266
- {
267
- //如果加了这个参数,值为true的话,就消除了惰性,watch会在创建后立即执行一次
268
- //那么首次执行,val为默认值,preVal为undefined
269
- immediate: true,
270
- //这个参数代表监听对象时,可以监听深度嵌套的对象属性
271
- deep: true,
272
- }
273
- );
274
-
275
- /* mounted */
276
- onMounted(() => {
277
- // 渲染后初始化为第一个位置
278
- tabAnimation(0);
279
- });
280
-
281
- return {
282
- isTapList,
283
- active,
284
- handleActive,
285
- label,
286
- taskCommentList,
287
- trackUrl,
288
- };
289
- },
290
- });
291
- </script>
292
-
293
- <style scoped>
294
- .tops-tab {
295
- height: 100%;
296
- }
297
- .tops-tab-header {
298
- display: flex;
299
- width: 100%;
300
- height: 45px;
301
- font-size: 14px;
302
- color: #333;
303
- padding: 10px 17px;
304
- font-weight: 500;
305
- box-sizing: border-box;
306
- overflow-x: auto;
307
- white-space: nowrap;
308
- flex-wrap: nowrap;
309
- flex-shrink: 0;
310
- -ms-overflow-style: none;
311
- position: relative;
312
- background-color: #fff;
313
- }
314
-
315
- .tops-tab-header::after {
316
- content: "";
317
- position: absolute;
318
- width: 100%;
319
- height: 1px;
320
- background-color: #f2f2f2;
321
- left: 0;
322
- bottom: 0;
323
- z-index: 10;
324
- }
325
-
326
- .tops-tab-header::-webkit-scrollbar {
327
- display: none;
328
- }
329
-
330
- .tops-tab-header-items {
331
- white-space: nowrap;
332
- padding-right: 10px;
333
- box-sizing: border-box;
334
- display: inline-block;
335
- height: 100%;
336
- text-align: center;
337
- margin-right: 32px;
338
- font-weight: 400;
339
- font-size: 15px;
340
- text-align: left;
341
- color: #333;
342
- display: flex;
343
- align-items: center;
344
- }
345
-
346
- .tops-tab-header-items:last-child {
347
- padding-right: 0;
348
- margin-right: 0;
349
- }
350
-
351
- .tops-tab-header .active {
352
- position: relative;
353
- color: #1389ff;
354
- font-family: "PingFang SC Bold";
355
- font-weight: 700;
356
- font-size: 15px;
357
- text-align: left;
358
- }
359
-
360
- .tops-tab-header .bottom-line {
361
- width: 30px;
362
- height: 3px;
363
- border-radius: 1.5px;
364
- background-color: #1389ff;
365
- position: absolute;
366
- bottom: 1px;
367
- left: 0;
368
- z-index: 12;
369
- }
370
- .tops-tab-body {
371
- height: 100%;
372
- }
373
-
374
- .seal-list__item {
375
- padding: 6px 10px;
376
- margin: 10px;
377
- margin-bottom: 0px;
378
- padding-bottom: 0px;
379
- background-color: #ffffff;
380
- border-radius: 10px;
381
- box-sizing: border-box;
382
- }
383
-
384
- .seal-list__item:last-child {
385
- margin-bottom: 70px;
386
- }
387
-
388
- .seal-list__item .seal-list__item--header {
389
- margin-bottom: 6px;
390
- display: flex;
391
- align-items: center;
392
- }
393
-
394
- .seal-list__item .seal-list__item--header span:first-of-type {
395
- font-size: 15px;
396
- margin-right: 6px;
397
- font-weight: bold;
398
- }
399
-
400
- .seal-list__item .seal-list__item--option {
401
- display: flex;
402
- justify-content: space-between;
403
- align-items: center;
404
- font-size: 14px;
405
- padding: 10px 0;
406
- color: #333;
407
- }
408
-
409
- .seal-list__item .seal-list__item--option {
410
- }
411
-
412
- .seal-list__item .seal-list__item--option span:last-child {
413
- max-width: 144px;
414
- overflow: hidden;
415
- white-space: nowrap;
416
- text-overflow: ellipsis;
417
- color: #888;
418
- }
419
-
420
- .seal-list__item .seal-list__item--option :last-child {
421
- /* padding-bottom: 14px; */
422
- }
423
- .seal-list__item .seal-list__item--attch {
424
- font-size: 14px;
425
- padding: 10px 0;
426
- color: #333;
427
- text-align: right;
428
- color: #1389ff;
429
- }
430
-
431
- .seal-list__item .seal-list__item--actions {
432
- margin-top: 12px;
433
- position: relative;
434
- display: flex;
435
- justify-content: space-around;
436
- align-items: center;
437
- }
438
-
439
- .seal-list__item .seal-list__item--actions ::before {
440
- content: "";
441
- top: 0;
442
- width: 100%;
443
- transform: scaleY(0.5);
444
- transform-origin: top;
445
- border-top: 1px #e8e8e8 solid;
446
- position: absolute;
447
- }
448
-
449
- .seal-list__item .seal-list__item--actions .van-button {
450
- width: 50%;
451
- }
452
-
453
- .seal-list__item .seal-list__item--actions .van-button ::after {
454
- content: "";
455
- height: 60%;
456
- border-left: 1px #e8e8e8 solid;
457
- position: absolute;
458
- left: 100%;
459
- top: 50%;
460
- transform: translate(-50%, -50%) scaleX(0.5);
461
- transform-origin: left;
462
- }
463
-
464
- .seal-list__item .seal-list__item--actions .van-button:last-child ::after {
465
- content: none;
466
- }
467
- </style>
@@ -1,11 +0,0 @@
1
- import request from "./request";
2
-
3
- const proxyStr = "/prod-api/aws";
4
-
5
- export function getProcessStatus(query: any) {
6
- return request({
7
- url: proxyStr + "/pis/getProcessStatus",
8
- method: "get",
9
- params: query,
10
- });
11
- }
@@ -1,52 +0,0 @@
1
-
2
- export const ACCESS_TOKEN :string
3
- export const SUBJECTID :string
4
- export const TASK_JSON :string
5
-
6
- /**
7
- * 设置cookie
8
- * @param key
9
- * @param value
10
- * @param options
11
- * @returns {*}
12
- */
13
- export function saveCookie(key: string, value: string, options: any): void
14
-
15
- /**
16
- * 获取cookie
17
- * @param key cookie的key
18
- * @param defaultValue
19
- * @returns {*}
20
- */
21
- export function loadCookie(key: string, defaultValue: string): string
22
-
23
-
24
- /**
25
- * 删除cookie
26
- * @param key
27
- * @returns {string}
28
- */
29
- export function removeCookie (key: string): string
30
-
31
-
32
- /**
33
- * 设置本地存储
34
- * @param key
35
- * @param value
36
- * @returns {*}
37
- */
38
- export function saveStorage (key: string, value: string) : string
39
-
40
- /**
41
- * 获取本地存储
42
- * @param key
43
- * @param defaultValue
44
- * @returns {*}
45
- */
46
- export function loadStorage (key: string, defaultValue: string) : string
47
- /**
48
- * 删除本地存储
49
- * @param key
50
- * @returns {string}
51
- */
52
- export function removeStorage (key: string) : string