leisure-common 0.6.85 → 0.6.86

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.
package/index.js CHANGED
@@ -12,6 +12,13 @@ import LeRoleUser from "./le-role-user/index.js";
12
12
 
13
13
  import LeSelectUser from "./le-select-user/index.js";
14
14
  import LeUser from "./le-user/index.js";
15
+ import LeButtonSelectMedia from "./le-button-select-media/index.js";
16
+
17
+ // import LeMedia from "./le-media/index.js";
18
+ // import LeMediaUpload from "./le-media-upload/index.js";
19
+ // import LeMediaList from "./le-media-list/index.js";
20
+ import LeButtonUpload from "./le-button-upload/index.js";
21
+ import LeImageContainer from "./le-image-container/index.js";
15
22
 
16
23
  const components = [
17
24
  LeComEmployee,
@@ -27,7 +34,13 @@ const components = [
27
34
  LeRole,
28
35
  LeRoleUser,
29
36
  LeSelectUser,
37
+ LeButtonSelectMedia,
30
38
  LeUser,
39
+ // LeMedia,
40
+ // LeMediaUpload,
41
+ // LeMediaList,
42
+ LeButtonUpload,
43
+ LeImageContainer,
31
44
  ];
32
45
 
33
46
  const install = function (Vue) {
@@ -54,4 +67,11 @@ export default {
54
67
  LeRoleUser,
55
68
  LeSelectUser,
56
69
  LeUser,
70
+ LeButtonSelectMedia,
71
+
72
+ // LeMedia,
73
+ // LeMediaUpload,
74
+ // LeMediaList,
75
+ LeButtonUpload,
76
+ LeImageContainer,
57
77
  };
@@ -0,0 +1,7 @@
1
+ import LeButtonSelectMedia from "./src/main.vue";
2
+
3
+ LeButtonSelectMedia.install = function (Vue) {
4
+ Vue.component(LeButtonSelectMedia.name, LeButtonSelectMedia);
5
+ };
6
+
7
+ export default LeButtonSelectMedia;
@@ -0,0 +1,87 @@
1
+ <template>
2
+ <div class="le-button-select-media">
3
+ <le-button type="primary" id="btnSelectMedia" @click="onClick">{{
4
+ btnTitle
5
+ }}</le-button>
6
+ <le-dialog-container
7
+ :title="title"
8
+ :showDialog="showDialog"
9
+ :showFooter="showFooter"
10
+ :width="width"
11
+ :showCloseBtnTop="showCloseBtnTop"
12
+ @close="closeDialog"
13
+ >
14
+ <le-media-list
15
+ :multiple="multiple"
16
+ :systemMaterialListApi="systemMaterialListApi"
17
+ ref="selectMedias"
18
+ v-if="showDialog"
19
+ @selectContent="selectContent"
20
+ ></le-media-list>
21
+ </le-dialog-container>
22
+ </div>
23
+ </template>
24
+ <script>
25
+ import { systemMaterialList } from "@/api/media";
26
+ export default {
27
+ name: "le-button-select-media",
28
+ props: {
29
+ btnTitle: {
30
+ type: String,
31
+ default: "选择素材",
32
+ },
33
+ width: {
34
+ type: String,
35
+ default: "70%",
36
+ },
37
+ title: {
38
+ type: String,
39
+ default: "选择素材",
40
+ },
41
+ param: {
42
+ type: [Object, String, Number],
43
+ default: () => {},
44
+ },
45
+ multiple: {
46
+ type: Boolean,
47
+ default: true,
48
+ },
49
+ showFooter: {
50
+ type: Boolean,
51
+ default: false,
52
+ },
53
+ showCloseBtnTop: {
54
+ type: Boolean,
55
+ default: true,
56
+ },
57
+ },
58
+ data() {
59
+ return {
60
+ showDialog: false,
61
+ };
62
+ },
63
+ methods: {
64
+ systemMaterialListApi(params) {
65
+ return systemMaterialList(params);
66
+ },
67
+ onClick() {
68
+ this.showDialog = true;
69
+ },
70
+ closeDialog() {
71
+ this.showDialog = false;
72
+ },
73
+ selectContent(value) {
74
+ this.$emit("selectContent", value, this.param);
75
+ if (!this.multiple) {
76
+ this.closeDialog();
77
+ }
78
+ },
79
+ },
80
+ };
81
+ </script>
82
+ <style lang="scss" scoped>
83
+ .le-button-select-media {
84
+ margin-left: 8px;
85
+ margin-right: 8px;
86
+ }
87
+ </style>
@@ -0,0 +1,7 @@
1
+ import LeButtonUpload from "./src/main.vue";
2
+
3
+ LeButtonUpload.install = function (Vue) {
4
+ Vue.component(LeButtonUpload.name, LeButtonUpload);
5
+ };
6
+
7
+ export default LeButtonUpload;
@@ -0,0 +1,70 @@
1
+ <template>
2
+ <div>
3
+ <le-button type="primary" id="btnUpload" @click="onClick">{{
4
+ title
5
+ }}</le-button>
6
+ <le-dialog-container
7
+ :title="title"
8
+ :showDialog="showDialog"
9
+ :width="width"
10
+ :showCloseBtnTop="showCloseBtnTop"
11
+ @close="closeDialog"
12
+ >
13
+ <le-media-upload
14
+ :mediaObj="mediaObj"
15
+ :systemMaterialCreateApi="systemMaterialCreateApi"
16
+ :systemMaterialEditApi="systemMaterialEditApi"
17
+ :uploadFileApi="uploadFileApi"
18
+ v-if="showDialog"
19
+ @cancel="closeDialog"
20
+ @callMdiaUrl="callMdiaUrl"
21
+ ></le-media-upload>
22
+ </le-dialog-container>
23
+ </div>
24
+ </template>
25
+ <script>
26
+ import { uploadFile } from "@/api/upload";
27
+ import { systemMaterialCreate, systemMaterialEdit } from "@/api/media";
28
+ export default {
29
+ name: "le-button-upload",
30
+ props: {
31
+ width: {
32
+ type: String,
33
+ default: "60%",
34
+ },
35
+ title: {
36
+ type: String,
37
+ default: "上传素材",
38
+ },
39
+ showCloseBtnTop: {
40
+ type: Boolean,
41
+ default: true,
42
+ },
43
+ },
44
+ data() {
45
+ return {
46
+ showDialog: false,
47
+ };
48
+ },
49
+ methods: {
50
+ uploadFileApi(param) {
51
+ return uploadFile(param);
52
+ },
53
+ systemMaterialCreateApi(param) {
54
+ return systemMaterialCreate(param);
55
+ },
56
+ systemMaterialEditApi() {
57
+ return systemMaterialEdit(param);
58
+ },
59
+ onClick() {
60
+ this.showDialog = true;
61
+ },
62
+ closeDialog() {
63
+ this.showDialog = false;
64
+ },
65
+ callMdiaUrl(param) {
66
+ this.$emit("callMdiaUrl", param);
67
+ },
68
+ },
69
+ };
70
+ </script>
@@ -0,0 +1,7 @@
1
+ import LeImageContainer from "./src/main.vue";
2
+
3
+ LeImageContainer.install = function (Vue) {
4
+ Vue.component(LeImageContainer.name, LeImageContainer);
5
+ };
6
+
7
+ export default LeImageContainer;
@@ -0,0 +1,155 @@
1
+ <template>
2
+ <div class="le-image-container">
3
+ <div
4
+ class="list"
5
+ @mouseover="mouseOverImg"
6
+ @mouseleave="mouseLeaveImg"
7
+ v-for="(item, index) in imageList"
8
+ :key="index"
9
+ >
10
+ <le-image :src="item" class="img">
11
+ <div slot="placeholder" class="image-slot">
12
+ 加载中<span class="dot">...</span>
13
+ </div>
14
+ </le-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-container",
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: {
60
+ handler(val) {
61
+ this.imageList = val;
62
+ },
63
+ immediate: true,
64
+ deep: true,
65
+ },
66
+ },
67
+ mounted() {},
68
+ methods: {
69
+ mouseOverImg() {
70
+ this.imgDeleCss = "display:block;cursor:pointer";
71
+ },
72
+ mouseLeaveImg() {
73
+ this.imgDeleCss = "display:none";
74
+ },
75
+ delImgList(item) {
76
+ let lenp = this.imageList.indexOf(item);
77
+ this.imageList.splice(lenp, 1);
78
+ this.$emit("getImages", this.imageList);
79
+ },
80
+ selectContent(val) {
81
+ let images = this.imageList;
82
+ let num = images && images.length > 0 ? images.length : 0;
83
+ if (num < this.limit) {
84
+ if (!Array.isArray(val)) {
85
+ if (!val) return;
86
+ this.imageList.push(val);
87
+ this.$emit("getImages", this.imageList);
88
+ } else {
89
+ this.imageList.push(...val);
90
+ this.$emit("getImages", this.imageList);
91
+ }
92
+ } else {
93
+ this.$message.warning(`图片数量最多${this.limit}张!`);
94
+ }
95
+ },
96
+ },
97
+ };
98
+ </script>
99
+ <style lang="scss" scoped>
100
+ .le-image-container {
101
+ display: flex;
102
+ display: -webkit-flex;
103
+ flex-wrap: wrap;
104
+ .list {
105
+ position: relative;
106
+ width: 100px;
107
+ height: 100px;
108
+ left: 0;
109
+ top: 0;
110
+ cursor: default;
111
+ text-align: center;
112
+ color: #fff;
113
+ opacity: 100;
114
+ font-size: 20px;
115
+ /* background-color: rgba(0, 0, 0, 0.5); */
116
+ /* transition: opacity 0.3s; */
117
+ display: inline;
118
+
119
+ .img {
120
+ width: 100px;
121
+ height: 100px;
122
+ }
123
+
124
+ .delete {
125
+ position: absolute;
126
+ right: 0px;
127
+ bottom: 0;
128
+ font-size: 20px;
129
+ color: #fff;
130
+ display: block;
131
+ background-color: rgba(0, 0, 0, 0.5);
132
+ transition: opacity 0.3s;
133
+ width: 100%;
134
+ height: 100%;
135
+ text-align: center;
136
+ padding-top: 30%;
137
+ }
138
+ }
139
+ .img {
140
+ background-color: #fbfdff;
141
+ border: 1px dashed #c0ccda;
142
+ border-radius: 6px;
143
+ width: 100px;
144
+ height: 100px;
145
+ cursor: pointer;
146
+ font-size: 16px;
147
+ color: #8c939d;
148
+ display: flex;
149
+ display: -webkit-flex;
150
+ flex-direction: column;
151
+ justify-content: center;
152
+ align-items: center;
153
+ }
154
+ }
155
+ </style>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leisure-common",
3
- "version": "0.6.85",
3
+ "version": "0.6.86",
4
4
  "description": "leisure-common是京心数据在leisure-core基础上开发的一套后台管理系统基于故事的电商行业组件库,封装了大量实用的UI控件模板,方便开发者快速搭建前端应用",
5
5
  "private": false,
6
6
  "author": "北方乐逍遥(zcx7878)",
@@ -13,7 +13,7 @@
13
13
  "registry": "https://registry.npmjs.org/"
14
14
  },
15
15
  "dependencies": {
16
- "leisure-core": "^0.6.85"
16
+ "leisure-core": "^0.6.86"
17
17
  },
18
18
  "devDependencies": {}
19
19
  }