leisure-core 0.1.0

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 (61) hide show
  1. package/index.js +145 -0
  2. package/le-button/index.js +7 -0
  3. package/le-button/src/main.vue +48 -0
  4. package/le-button-msg/index.js +7 -0
  5. package/le-button-msg/src/main.vue +61 -0
  6. package/le-button-select-media/index.js +7 -0
  7. package/le-button-select-media/src/main.vue +64 -0
  8. package/le-button-upload/index.js +7 -0
  9. package/le-button-upload/src/main.vue +50 -0
  10. package/le-company/index.js +7 -0
  11. package/le-company/src/main.vue +101 -0
  12. package/le-company/src/sub.vue +111 -0
  13. package/le-coupon-give/index.js +7 -0
  14. package/le-coupon-give/src/main.vue +94 -0
  15. package/le-depart/index.js +7 -0
  16. package/le-depart/src/main.vue +162 -0
  17. package/le-dialog-container/index.js +7 -0
  18. package/le-dialog-container/src/main.vue +74 -0
  19. package/le-home/index.js +7 -0
  20. package/le-home/src/main.vue +570 -0
  21. package/le-image/index.js +7 -0
  22. package/le-image/src/main.vue +145 -0
  23. package/le-integral/index.js +7 -0
  24. package/le-integral/src/main.vue +198 -0
  25. package/le-libs/mixins/main.js +37 -0
  26. package/le-login/index.js +7 -0
  27. package/le-login/src/main.vue +181 -0
  28. package/le-media/index.js +7 -0
  29. package/le-media/src/main.vue +267 -0
  30. package/le-media-list/index.js +7 -0
  31. package/le-media-list/src/main.vue +177 -0
  32. package/le-media-upload/index.js +7 -0
  33. package/le-media-upload/src/main.vue +308 -0
  34. package/le-member/index.js +7 -0
  35. package/le-member/src/main.vue +445 -0
  36. package/le-member-level/index.js +7 -0
  37. package/le-member-level/src/main.vue +93 -0
  38. package/le-member-level/src/sub.vue +86 -0
  39. package/le-menu/index.js +7 -0
  40. package/le-menu/src/main.vue +248 -0
  41. package/le-rich-text/index.js +7 -0
  42. package/le-rich-text/src/main.vue +136 -0
  43. package/le-role/index.js +7 -0
  44. package/le-role/src/main.vue +169 -0
  45. package/le-role/src/sub.vue +79 -0
  46. package/le-role-user/index.js +7 -0
  47. package/le-role-user/src/main.vue +158 -0
  48. package/le-role-user/src/sub.vue +90 -0
  49. package/le-theme/common/var.scss +17 -0
  50. package/le-theme/iconfont/iconfont.css +125 -0
  51. package/le-theme/iconfont/iconfont.ttf +0 -0
  52. package/le-theme/iconfont/iconfont.woff +0 -0
  53. package/le-theme/iconfont/iconfont.woff2 +0 -0
  54. package/le-theme/pages/index.css +15 -0
  55. package/le-user/index.js +7 -0
  56. package/le-user/src/add.vue +118 -0
  57. package/le-user/src/main.vue +423 -0
  58. package/le-user/src/sub.vue +214 -0
  59. package/le-user-type/index.js +7 -0
  60. package/le-user-type/src/main.vue +39 -0
  61. package/package.json +51 -0
@@ -0,0 +1,570 @@
1
+ <template>
2
+ <el-container class="le-home-cp-container">
3
+ <el-header class="header">
4
+ <el-row>
5
+ <el-col :span="18" class="leftsection">
6
+ <div class="grid-content bg-purple">
7
+ <span class="userinfo-inner">{{ companyInfo.name }}</span>
8
+ </div>
9
+ </el-col>
10
+ <el-col :span="6" class="rightsection">
11
+ <div class="grid-content bg-purple-light">
12
+ <el-dropdown size="medium" trigger="click" @command="handleCommand">
13
+ <span class="el-dropdown-link userinfo-inner-t">
14
+ {{ username }}
15
+ <i class="el-icon-arrow-down el-icon--right"></i>
16
+ </span>
17
+ <el-dropdown-menu slot="dropdown">
18
+ <el-dropdown-item command="1">修改密码</el-dropdown-item>
19
+ <el-dropdown-item command="2">退出</el-dropdown-item>
20
+ </el-dropdown-menu>
21
+ </el-dropdown>
22
+ </div>
23
+ </el-col>
24
+ </el-row>
25
+ </el-header>
26
+ <el-container>
27
+ <el-aside class="aside" :class="{ aside_hide: isHideMenu }">
28
+ <el-menu
29
+ :unique-opened="true"
30
+ class="menu"
31
+ background-color=" #3A3A3A"
32
+ text-color="#fff"
33
+ active-text-color="#ffd04b"
34
+ >
35
+ <el-submenu
36
+ :index="item1.name"
37
+ v-for="item1 in menuData"
38
+ :key="item1.id"
39
+ >
40
+ <template slot="title">
41
+ <div @click="clickTitle">
42
+ <i :class="item1.icon"></i>&nbsp;
43
+ <span>{{ item1.title }}</span>
44
+ </div>
45
+ </template>
46
+ <el-menu-item
47
+ class="menuItem"
48
+ v-for="item2 in item1.children"
49
+ :key="item2.id"
50
+ :index="item2.name"
51
+ @click="clickMenuItem(item2)"
52
+ >
53
+ &nbsp;&nbsp;
54
+ <span>{{ item2.title }}</span>
55
+ </el-menu-item>
56
+ </el-submenu>
57
+ </el-menu>
58
+ </el-aside>
59
+ <el-main class="main" style="padding: 10px 20px">
60
+ <div class="aside_open_close" @click="asidechange">
61
+ <i class="el-icon-arrow-left" v-if="aside_open_close"></i>
62
+ <i class="el-icon-arrow-right" v-else></i>
63
+ </div>
64
+ <div>
65
+ <el-tabs
66
+ class="el-tabs_"
67
+ v-model="tabNameCurrent"
68
+ closable
69
+ @tab-click="handleTabClick"
70
+ @tab-remove="removeTab"
71
+ >
72
+ <el-tab-pane
73
+ v-for="item in tabsAll"
74
+ :key="item.name"
75
+ :label="item.title"
76
+ :name="item.name"
77
+ >
78
+ </el-tab-pane>
79
+ </el-tabs>
80
+ <router-view :key="$route.fullPath"></router-view>
81
+ </div>
82
+ </el-main>
83
+ </el-container>
84
+ <el-dialog
85
+ title="修改密码"
86
+ ref="elDialog"
87
+ :visible.sync="showChangePwd"
88
+ width="30%"
89
+ :close-on-click-modal="false"
90
+ @close="cancelChangePwd"
91
+ center
92
+ >
93
+ <el-form
94
+ :model="ruleForm"
95
+ status-icon
96
+ :rules="rules"
97
+ ref="ruleForm"
98
+ label-width="100px"
99
+ class="demo-ruleForm"
100
+ >
101
+ <el-form-item label="密码" prop="pwd">
102
+ <el-input
103
+ type="password"
104
+ v-model="ruleForm.pwd"
105
+ autocomplete="off"
106
+ ></el-input>
107
+ </el-form-item>
108
+ <el-form-item label="确认密码" prop="confirmPwd">
109
+ <el-input
110
+ type="password"
111
+ v-model="ruleForm.confirmPwd"
112
+ autocomplete="off"
113
+ ></el-input>
114
+ </el-form-item>
115
+ </el-form>
116
+ <div slot="footer">
117
+ <el-button type="info" @click="cancelChangePwd('ruleForm')"
118
+ >取 消</el-button
119
+ >
120
+ <el-button type="primary" @click="saveChangePwd('ruleForm')"
121
+ >确认修改</el-button
122
+ >
123
+ </div>
124
+ </el-dialog>
125
+ <div v-show="contextMenuVisible">
126
+ <ul
127
+ :style="{ left: menuLeft + 'px', top: menuTop + 'px' }"
128
+ class="contextmenu"
129
+ >
130
+ <li>
131
+ <el-button
132
+ type="text"
133
+ size="mini"
134
+ icon="el-icon-refresh"
135
+ @click="closeOtherTab"
136
+ >关闭其它</el-button
137
+ >
138
+ </li>
139
+ <li>
140
+ <el-button
141
+ type="text"
142
+ size="mini"
143
+ icon="el-icon-error"
144
+ @click="closeAllTabs"
145
+ >关闭所有</el-button
146
+ >
147
+ </li>
148
+ </ul>
149
+ </div>
150
+ </el-container>
151
+ </template>
152
+ <script>
153
+ export default {
154
+ name: "le-home",
155
+ props: {
156
+ companyInfo: {
157
+ type: Object,
158
+ default: () => ({}),
159
+ },
160
+ },
161
+
162
+ data() {
163
+ var validatePass = (rule, value, callback) => {
164
+ if (value === "") {
165
+ callback(new Error("请输入密码"));
166
+ } else {
167
+ if (value.length < 6) {
168
+ callback(new Error("密码至少6位"));
169
+ } else {
170
+ if (this.ruleForm.confirmPwd !== "") {
171
+ this.$refs.ruleForm.validateField("confirmPwd ");
172
+ }
173
+ callback();
174
+ }
175
+ }
176
+ };
177
+ var validatePass2 = (rule, value, callback) => {
178
+ if (value === "") {
179
+ callback(new Error("请再次输入密码"));
180
+ } else if (value !== this.ruleForm.pwd) {
181
+ callback(new Error("两次输入密码不一致!"));
182
+ } else {
183
+ callback();
184
+ }
185
+ };
186
+ return {
187
+ style: {
188
+ display: "block",
189
+ },
190
+
191
+ isHideMenu: false,
192
+ aside_open_close: true,
193
+ menuData: [],
194
+ title: "",
195
+ cacheView: [],
196
+ showChangePwd: false,
197
+ username: "",
198
+ changeUid: "",
199
+ tabNameCurrent: "",
200
+ tabsAll: [],
201
+ ruleForm: {
202
+ pwd: "",
203
+ confirmPwd: "",
204
+ },
205
+ rules: {
206
+ pwd: [{ validator: validatePass, trigger: "blur" }],
207
+ confirmPwd: [{ validator: validatePass2, trigger: "blur" }],
208
+ },
209
+ //右键菜单
210
+ contextMenuVisible: false,
211
+ menuLeft: 0,
212
+ menuTop: 0,
213
+ };
214
+ },
215
+ mounted() {
216
+ this.username =
217
+ this.$store.getters.userinfo.nick || this.$store.getters.userinfo.account;
218
+ let tab_top_dom = document.getElementsByClassName("el-tabs_");
219
+ tab_top_dom[0].oncontextmenu = this.openContextMenu;
220
+ this.$store.commit("setCname", this.companyInfo.name);
221
+ let dict = [
222
+ {
223
+ title: "是",
224
+ value: 1,
225
+ },
226
+ {
227
+ title: "否",
228
+ value: 0,
229
+ },
230
+ ];
231
+
232
+ this.$store.commit("setDict", dict);
233
+
234
+ this.menuData = this.$store.getters.menu;
235
+ this.menuData = this.$store.getters.menu.filter(function (item) {
236
+ if (item.children) {
237
+ item.children = item.children.filter(function (item1) {
238
+ return item1.isHide === 0;
239
+ });
240
+ }
241
+ return item;
242
+ });
243
+ },
244
+ watch: {
245
+ contextMenuVisible() {
246
+ if (this.contextMenuVisible) {
247
+ document.body.addEventListener("click", this.closeMenu);
248
+ } else {
249
+ document.body.removeEventListener("click", this.closeMenu);
250
+ }
251
+ },
252
+ },
253
+ methods: {
254
+ openContextMenu(e) {
255
+ e.preventDefault(); //防止默认菜单弹出
256
+ this.contextMenuVisible = true;
257
+
258
+ this.menuLeft = e.clientX;
259
+ this.menuTop = e.clientY + 20;
260
+ },
261
+ closeMenu() {
262
+ this.contextMenuVisible = false;
263
+ },
264
+ closeOtherTab() {
265
+ this.tabsAll = this.tabsAll.filter(
266
+ (item) => item.name == this.tabNameCurrent
267
+ );
268
+ },
269
+ closeAllTabs() {
270
+ this.contextMenuVisible = false;
271
+ this.tabNameCurrent = "";
272
+ this.tabsAll = [];
273
+ this.$router.push({ path: "/home" });
274
+ },
275
+ //解决空白标签页右键
276
+ openContextMenu1(e) {
277
+ if (e.srcElement.id != "") {
278
+ this.contextMenuVisible = true;
279
+ //这个参数是获取右键标签页的id属性,应该和你的key有关,你要截取-后面部分的
280
+ this.closeindex = e.srcElement.id.split("-")[1]; //
281
+ } else {
282
+ this.contextMenuVisible = false;
283
+ }
284
+ },
285
+ handleCommand(command) {
286
+ if (command == 1) {
287
+ this.changPwd();
288
+ }
289
+ if (command == 2) {
290
+ this.signout();
291
+ }
292
+ },
293
+ changPwd() {
294
+ this.changeUid = this.$store.getters.userinfo.id;
295
+ this.ruleForm.pwd = "";
296
+ this.ruleForm.confirmPwd = "";
297
+ this.showChangePwd = true;
298
+ },
299
+ cancelChangePwd() {
300
+ this.showChangePwd = false;
301
+ this.changeUid = "";
302
+ this.ruleForm.pwd = "";
303
+ this.ruleForm.confirmPwd = "";
304
+ },
305
+ saveChangePwd(formName) {
306
+ this.$refs[formName].validate((valid) => {
307
+ if (valid) {
308
+ let params = {
309
+ pwd: this.ruleForm.pwd,
310
+ confirmPwd: this.ruleForm.confirmPwd,
311
+ uid: this.changeUid,
312
+ };
313
+ this.$emit("userChangePwd", params, this.changePwdAfter);
314
+ } else {
315
+ console.log("error submit!!");
316
+ return false;
317
+ }
318
+ });
319
+ },
320
+ changePwdAfter(res) {
321
+ if (res.data.code == "10000") {
322
+ this.$message.success("修改密码成功");
323
+ localStorage.clear();
324
+ this.$store.commit("setUserInfo", null);
325
+ this.$router.replace({ path: "/" });
326
+ } else {
327
+ this.$message.error(res.data.info);
328
+ }
329
+ },
330
+ signout() {
331
+ this.$confirm("退出登录, 是否继续?", "提示", {
332
+ confirmButtonText: "确定",
333
+ cancelButtonText: "取消",
334
+ type: "warning",
335
+ }).then(() => {
336
+ this.$router.push({ path: "/" });
337
+ localStorage.clear();
338
+ });
339
+ },
340
+ clickMenuItem(item) {
341
+ this.style.display = "none";
342
+ if (item.name == this.tabNameCurrent) return;
343
+ if (this.tabsAll && this.tabsAll.length > 0) {
344
+ let routeE = this.tabsAll.filter((x) => {
345
+ return x.name == item.name;
346
+ });
347
+ if (routeE && routeE.length > 0) {
348
+ let currentTab = routeE[0];
349
+ this.tabNameCurrent = currentTab.name;
350
+ this.$router.push(currentTab); //
351
+ } else {
352
+ this._navi2Page(item);
353
+ }
354
+ } else {
355
+ this._navi2Page(item);
356
+ }
357
+ },
358
+ _navi2Page(item) {
359
+ let value;
360
+ if (item.param) {
361
+ value = {
362
+ name: item.name,
363
+ title: item.title,
364
+ params: {
365
+ status: item.param,
366
+ btns: item.btns,
367
+ },
368
+ };
369
+ } else {
370
+ if (item.component && item.component != "") {
371
+ value = {
372
+ name: item.name,
373
+ title: item.title,
374
+ params: {
375
+ btns: item.btns,
376
+ },
377
+ };
378
+ }
379
+ }
380
+ this.tabNameCurrent = value.name;
381
+ if (this.tabsAll && this.tabsAll.length >= 8) {
382
+ let elen = this.tabsAll.length;
383
+ this.tabsAll[elen - 1] = value;
384
+ } else this.tabsAll.push(value);
385
+ this.$router.push(value);
386
+ },
387
+ handleTabClick(clickTab, event) {
388
+ // if (clickTab.name == this.tabNameCurrent) return;
389
+ let tabs = this.tabsAll;
390
+ let currentTab;
391
+ tabs.forEach((tab, index) => {
392
+ if (tab.name === clickTab.name) {
393
+ currentTab = tab;
394
+ }
395
+ });
396
+ this.$router.push(currentTab);
397
+ },
398
+ removeTab(targetName) {
399
+ let tabs = this.tabsAll;
400
+ let nextTab;
401
+ tabs.forEach((tab, index) => {
402
+ if (tab.name == targetName) {
403
+ nextTab = tabs[index + 1] || tabs[index - 1];
404
+ if (nextTab) {
405
+ this.tabNameCurrent = nextTab.name;
406
+ }
407
+ }
408
+ });
409
+ this.tabsAll = tabs.filter((tab) => tab.name !== targetName);
410
+ if (nextTab) {
411
+ this.$router.push(nextTab);
412
+ } else {
413
+ this.tabNameCurrent = "";
414
+ this.$router.push("/Home");
415
+ }
416
+ },
417
+ clickTitle() {
418
+ this.style.display = "block";
419
+ },
420
+
421
+ asidechange() {
422
+ this.isHideMenu = !this.isHideMenu;
423
+ if (this.isHideMenu) {
424
+ this.aside_open_close = false;
425
+ } else {
426
+ this.aside_open_close = true;
427
+ }
428
+ },
429
+ },
430
+ };
431
+ </script>
432
+ <style lang="scss" scoped>
433
+ .le-home-cp-container {
434
+ height: 100vh;
435
+ font-size: 15px;
436
+
437
+ .header {
438
+ background: #212121;
439
+ color: #fff;
440
+ height: 60px;
441
+ }
442
+
443
+ .aside {
444
+ background: #3a3a3a;
445
+ color: #fff;
446
+ width: 200px !important;
447
+ transform: width 0.5s;
448
+ }
449
+
450
+ .aside_hide {
451
+ width: 0px !important;
452
+ }
453
+
454
+ .el-aside {
455
+ height: calc(100vh - 60px);
456
+ }
457
+
458
+ .el-main {
459
+ /* padding: 0 !important; */
460
+ height: calc(100vh - 60px);
461
+ overflow: hidden !important;
462
+ }
463
+
464
+ .menu {
465
+ background: none;
466
+ color: #fff;
467
+ }
468
+
469
+ .main {
470
+ /* height: 100%; */
471
+ position: relative;
472
+ color: #212121;
473
+ }
474
+
475
+ .headerlogo {
476
+ line-height: 60px;
477
+ margin-top: 10px;
478
+ }
479
+
480
+ .rightsection {
481
+ line-height: 60px;
482
+ text-align: right;
483
+ }
484
+
485
+ .leftsection {
486
+ line-height: 60px;
487
+ text-align: start;
488
+ font-size: 22px;
489
+ }
490
+
491
+ .userinfo-inner {
492
+ margin-left: 20px;
493
+ }
494
+
495
+ .userinfo-inner-t {
496
+ color: #fff !important;
497
+ font-size: 20px;
498
+ }
499
+
500
+ .el-icon-arrow-down {
501
+ font-size: 16px;
502
+ }
503
+ .el-dropdown-menu__item {
504
+ font-size: 15px !important;
505
+ }
506
+
507
+ .logofont {
508
+ font-size: 25px;
509
+ /* margin-bottom: 30px; */
510
+ padding-bottom: 10px;
511
+ line-height: 60px;
512
+ }
513
+
514
+ .cursor {
515
+ cursor: pointer;
516
+ }
517
+ .aside_open_close {
518
+ position: absolute;
519
+ left: 0;
520
+ top: 25%;
521
+ width: 16px;
522
+ height: 60px;
523
+ line-height: 60px;
524
+ color: #fff;
525
+ background-color: #2a333a;
526
+ border-radius: 0 6px 6px 0;
527
+ font-size: 20px;
528
+ z-index: 1000;
529
+ cursor: pointer;
530
+ }
531
+ .aside_open_close:hover {
532
+ background-color: #ff8e2b;
533
+ color: #fff;
534
+ }
535
+
536
+ .contextmenu {
537
+ width: 100px;
538
+ margin: 0;
539
+ border: 1px solid #ccc;
540
+ background: #fff;
541
+ z-index: 3000;
542
+ position: absolute;
543
+ list-style-type: none;
544
+ padding: 5px 0;
545
+ border-radius: 4px;
546
+ font-size: 14px;
547
+ color: #333;
548
+ box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.2);
549
+
550
+ .li {
551
+ margin: 0;
552
+ padding: 0px 2px;
553
+
554
+ :hover {
555
+ background: #f2f2f2;
556
+ cursor: pointer;
557
+ }
558
+ .button {
559
+ color: #2c3e50;
560
+ }
561
+ }
562
+ }
563
+ }
564
+
565
+ ::-webkit-scrollbar {
566
+ width: 0;
567
+ height: 0;
568
+ background-color: transparent;
569
+ }
570
+ </style>
@@ -0,0 +1,7 @@
1
+ import LeImage from "./src/main.vue";
2
+
3
+ LeImage.install = function (Vue) {
4
+ Vue.component(LeImage.name, LeImage);
5
+ };
6
+
7
+ export default LeImage;
@@ -0,0 +1,145 @@
1
+ <template>
2
+ <div class="le-image">
3
+ <div
4
+ class="list"
5
+ @mouseover="mouseOverImg"
6
+ @mouseleave="mouseLeaveImg"
7
+ v-for="(item, index) in imageList"
8
+ :key="index"
9
+ >
10
+ <el-image :src="item" class="img">
11
+ <div slot="placeholder" class="image-slot">
12
+ 加载中<span class="dot">...</span>
13
+ </div>
14
+ </el-image>
15
+ <span
16
+ class="delete"
17
+ @click="delImgList(item)"
18
+ :id="index"
19
+ :style="imgDeleCss"
20
+ >
21
+ <i class="el-icon-delete"></i>
22
+ </span>
23
+ </div>
24
+ <div style="display: flex">
25
+ <div class="img">
26
+ <le-button-upload
27
+ title="上传素材"
28
+ @callMdiaUrl="selectContent"
29
+ ></le-button-upload>
30
+ <le-button-select-media
31
+ title="选择素材"
32
+ :multiple="false"
33
+ @selectContent="selectContent"
34
+ ></le-button-select-media>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </template>
39
+ <script>
40
+ export default {
41
+ name: "le-image",
42
+ props: {
43
+ images: {
44
+ type: Array,
45
+ default: () => [],
46
+ },
47
+ limit: {
48
+ type: Number,
49
+ default: 99999,
50
+ },
51
+ },
52
+ data() {
53
+ return {
54
+ imgDeleCss: "display:none",
55
+ imageList: [],
56
+ };
57
+ },
58
+ watch: {
59
+ images(val) {
60
+ this.imageList = val;
61
+ },
62
+ },
63
+ mounted() {},
64
+ methods: {
65
+ mouseOverImg() {
66
+ this.imgDeleCss = "display:block;cursor:pointer";
67
+ },
68
+ mouseLeaveImg() {
69
+ this.imgDeleCss = "display:none";
70
+ },
71
+ delImgList(item) {
72
+ let lenp = this.imageList.indexOf(item);
73
+ this.imageList.splice(lenp, 1);
74
+ this.$emit("getImages", this.imageList);
75
+ },
76
+ selectContent(val) {
77
+ let images = this.imageList;
78
+ let num = images && images.length > 0 ? images.length : 0;
79
+ if (num < this.limit) {
80
+ this.imageList.push(val);
81
+ this.$emit("getImages", this.imageList);
82
+ } else {
83
+ this.$message.warning(`图片数量最多${this.limit}张!`);
84
+ }
85
+ },
86
+ },
87
+ };
88
+ </script>
89
+ <style lang="scss" scoped>
90
+ .le-image {
91
+ display: flex;
92
+ display: -webkit-flex;
93
+ flex-wrap: wrap;
94
+ .list {
95
+ position: relative;
96
+ width: 100px;
97
+ height: 100px;
98
+ left: 0;
99
+ top: 0;
100
+ cursor: default;
101
+ text-align: center;
102
+ color: #fff;
103
+ opacity: 100;
104
+ font-size: 20px;
105
+ /* background-color: rgba(0, 0, 0, 0.5); */
106
+ /* transition: opacity 0.3s; */
107
+ display: inline;
108
+
109
+ .img {
110
+ width: 100px;
111
+ height: 100px;
112
+ }
113
+
114
+ .delete {
115
+ position: absolute;
116
+ right: 0px;
117
+ bottom: 0;
118
+ font-size: 20px;
119
+ color: #fff;
120
+ display: block;
121
+ background-color: rgba(0, 0, 0, 0.5);
122
+ transition: opacity 0.3s;
123
+ width: 100%;
124
+ height: 100%;
125
+ text-align: center;
126
+ padding-top: 30%;
127
+ }
128
+ }
129
+ .img {
130
+ background-color: #fbfdff;
131
+ border: 1px dashed #c0ccda;
132
+ border-radius: 6px;
133
+ width: 100px;
134
+ height: 100px;
135
+ cursor: pointer;
136
+ font-size: 16px;
137
+ color: #8c939d;
138
+ display: flex;
139
+ display: -webkit-flex;
140
+ flex-direction: column;
141
+ justify-content: center;
142
+ align-items: center;
143
+ }
144
+ }
145
+ </style>