meixioacomponent 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 (128) hide show
  1. package/README.md +19 -0
  2. package/babel.config.js +5 -0
  3. package/lib/demo.html +10 -0
  4. package/lib/meixicomponent.common.js +40065 -0
  5. package/lib/meixicomponent.common.js.map +1 -0
  6. package/lib/meixicomponent.css +1 -0
  7. package/lib/meixicomponent.umd.js +40075 -0
  8. package/lib/meixicomponent.umd.js.map +1 -0
  9. package/lib/meixicomponent.umd.min.js +20 -0
  10. package/lib/meixicomponent.umd.min.js.map +1 -0
  11. package/package.json +37 -0
  12. package/packages/components/base/baseAnchor/baseAnchor.vue +156 -0
  13. package/packages/components/base/baseAnchor/index.js +6 -0
  14. package/packages/components/base/baseAppendix/baseAppendix.vue +78 -0
  15. package/packages/components/base/baseAppendix/index.js +7 -0
  16. package/packages/components/base/baseArea/area.js +14978 -0
  17. package/packages/components/base/baseArea/areaConfig.js +6 -0
  18. package/packages/components/base/baseArea/baseArea.vue +531 -0
  19. package/packages/components/base/baseArea/index.js +7 -0
  20. package/packages/components/base/baseAvatar/baseAvatar.vue +101 -0
  21. package/packages/components/base/baseAvatar/index.js +6 -0
  22. package/packages/components/base/baseButtonHandle/baseButtonHandle.vue +64 -0
  23. package/packages/components/base/baseButtonHandle/index.js +6 -0
  24. package/packages/components/base/baseDefaultSvg/baseDefaultSvg.vue +52 -0
  25. package/packages/components/base/baseDefaultSvg/index.js +7 -0
  26. package/packages/components/base/baseDialog/index.js +7 -0
  27. package/packages/components/base/baseDialog/index.vue +146 -0
  28. package/packages/components/base/baseDialogTable/dialogTable.vue +186 -0
  29. package/packages/components/base/baseDialogTable/index.js +7 -0
  30. package/packages/components/base/baseDrawer/index.js +8 -0
  31. package/packages/components/base/baseDrawer/index.vue +196 -0
  32. package/packages/components/base/baseEdito/baseEdito.vue +202 -0
  33. package/packages/components/base/baseEdito/index.js +6 -0
  34. package/packages/components/base/baseFixedHeader/baseFixedHeader.vue +168 -0
  35. package/packages/components/base/baseFixedHeader/index.js +6 -0
  36. package/packages/components/base/baseIcon/index.js +6 -0
  37. package/packages/components/base/baseIcon/index.vue +146 -0
  38. package/packages/components/base/baseImageViewer/image-viewer.vue +348 -0
  39. package/packages/components/base/baseImageViewer/index.js +7 -0
  40. package/packages/components/base/baseImg/baseImg.vue +160 -0
  41. package/packages/components/base/baseImg/index.js +6 -0
  42. package/packages/components/base/baseInforWrap/baseInforWrap.vue +66 -0
  43. package/packages/components/base/baseInforWrap/index.js +6 -0
  44. package/packages/components/base/baseLineInfoGroup/baseLineInfoGroup.vue +93 -0
  45. package/packages/components/base/baseLineInfoGroup/index.js +6 -0
  46. package/packages/components/base/baseLineInfoItem/baseLineInfoItem.vue +173 -0
  47. package/packages/components/base/baseLineInfoItem/index.js +6 -0
  48. package/packages/components/base/basePageHeader/basePageHeader.vue +55 -0
  49. package/packages/components/base/basePageHeader/index.js +6 -0
  50. package/packages/components/base/basePagination/index.js +6 -0
  51. package/packages/components/base/basePagination/index.vue +75 -0
  52. package/packages/components/base/basePlainTable/basePlainTable.vue +90 -0
  53. package/packages/components/base/basePlainTable/index.js +6 -0
  54. package/packages/components/base/baseSection/baseSection.vue +121 -0
  55. package/packages/components/base/baseSection/index.js +6 -0
  56. package/packages/components/base/baseSkeleton/baseSkeleton.vue +147 -0
  57. package/packages/components/base/baseSkeleton/index.js +6 -0
  58. package/packages/components/base/baseSvg/index.js +7 -0
  59. package/packages/components/base/baseSvg/index.vue +66 -0
  60. package/packages/components/base/baseTimeTypeSelect/base_time_type_select.vue +293 -0
  61. package/packages/components/base/baseTimeTypeSelect/config.js +47 -0
  62. package/packages/components/base/baseTimeTypeSelect/index.js +6 -0
  63. package/packages/components/base/baseToggle/index.js +7 -0
  64. package/packages/components/base/baseToggle/toggle.vue +131 -0
  65. package/packages/components/base/baseUpload/baseUpload.js +6 -0
  66. package/packages/components/base/baseUpload/baseUpload.vue +111 -0
  67. package/packages/components/base/baseUpload/baseUploadItem.js +6 -0
  68. package/packages/components/base/baseUpload/baseUploadItem.vue +205 -0
  69. package/packages/components/base/baseUpload/mixins.js +46 -0
  70. package/packages/components/base/brieflyItem.vue +198 -0
  71. package/packages/components/base/upload/index.js +6 -0
  72. package/packages/components/base/upload/upload.vue +245 -0
  73. package/packages/components/base/upload/uploadItem.vue +157 -0
  74. package/packages/components/dynamicmount/DynamicMount.js +55 -0
  75. package/packages/components/dynamicmount/dynamicMount.vue +95 -0
  76. package/packages/components/dynamicmount/index.js +46 -0
  77. package/packages/components/index.js +114 -0
  78. package/packages/components/proForm/dialogForm/baseDialogForm.vue +163 -0
  79. package/packages/components/proForm/dialogForm/dialogFormIndex.js +6 -0
  80. package/packages/components/proForm/proForm/index.js +6 -0
  81. package/packages/components/proForm/proForm/pro_form.vue +279 -0
  82. package/packages/components/proForm/proForm/pro_form_item.vue +459 -0
  83. package/packages/components/proForm/proFormWrap/index.js +6 -0
  84. package/packages/components/proForm/proFormWrap/pro_form_wrap.vue +83 -0
  85. package/packages/components/proPageTable/index.js +6 -0
  86. package/packages/components/proPageTable/oa_pro-table-search.vue +190 -0
  87. package/packages/components/proPageTable/oa_pro_colum_config.vue +219 -0
  88. package/packages/components/proPageTable/oa_pro_footer.vue +104 -0
  89. package/packages/components/proPageTable/oa_pro_header.vue +31 -0
  90. package/packages/components/proPageTable/oa_pro_screen.vue +81 -0
  91. package/packages/components/proPageTable/oa_pro_screen_item.vue +174 -0
  92. package/packages/components/proPageTable/oa_pro_table-header.vue +150 -0
  93. package/packages/components/proPageTable/oa_pro_table.vue +804 -0
  94. package/packages/components/proPageTable/oa_pro_table_skeleton.vue +33 -0
  95. package/packages/components/searchHeader/searchHeader.vue +118 -0
  96. package/packages/config/selectStore/SelectStore.js +24 -0
  97. package/packages/config/selectStore/UseSelectStoreClass.js +27 -0
  98. package/packages/config/selectStore/testSelectStore.js +40 -0
  99. package/packages/config/uploadRequest.js +66 -0
  100. package/packages/config/use/UseImg.js +39 -0
  101. package/packages/config/use/UseSelectStore.js +2 -0
  102. package/packages/config/use/UseUpload.js +47 -0
  103. package/packages/config/use/useFixedHeader.js +36 -0
  104. package/packages/utils/upload.js +35 -0
  105. package/packages/utils/uploadRequest.js +66 -0
  106. package/packages/utils/utils.js +186 -0
  107. package/public/favicon.ico +0 -0
  108. package/public/img/icons/android-chrome-192x192.png +0 -0
  109. package/public/img/icons/android-chrome-512x512.png +0 -0
  110. package/public/img/icons/android-chrome-maskable-192x192.png +0 -0
  111. package/public/img/icons/android-chrome-maskable-512x512.png +0 -0
  112. package/public/img/icons/apple-touch-icon-120x120.png +0 -0
  113. package/public/img/icons/apple-touch-icon-152x152.png +0 -0
  114. package/public/img/icons/apple-touch-icon-180x180.png +0 -0
  115. package/public/img/icons/apple-touch-icon-60x60.png +0 -0
  116. package/public/img/icons/apple-touch-icon-76x76.png +0 -0
  117. package/public/img/icons/apple-touch-icon.png +0 -0
  118. package/public/img/icons/favicon-16x16.png +0 -0
  119. package/public/img/icons/favicon-32x32.png +0 -0
  120. package/public/img/icons/msapplication-icon-144x144.png +0 -0
  121. package/public/img/icons/mstile-150x150.png +0 -0
  122. package/public/img/icons/safari-pinned-tab.svg +3 -0
  123. package/public/index.html +17 -0
  124. package/public/robots.txt +2 -0
  125. package/src/assets/logo.png +0 -0
  126. package/src/main.js +9 -0
  127. package/src/router/index.js +29 -0
  128. package/src/store/index.js +15 -0
@@ -0,0 +1,173 @@
1
+ <template>
2
+ <div class="base-line-info-item">
3
+ <div class="infor-label" :style="{ width: _labelWidth + 'px' }">
4
+ <base-icon
5
+ v-if="icon"
6
+ :name="icon"
7
+ :color="`s`"
8
+ :size="`l`"
9
+ :event="event"
10
+ @iconClick="iconClick"
11
+ style="margin-right: var(--margin-5)"
12
+ ></base-icon>
13
+ <span>{{ label }}</span>
14
+ </div>
15
+ <div
16
+ class="infor-value"
17
+ :style="{ width: `calc(100% - ${_labelWidth}px)` }"
18
+ >
19
+ <el-tooltip
20
+ effect="dark"
21
+ placement="top"
22
+ v-if="!useSlot"
23
+ :content="`${value}`"
24
+ :visible-arrow="false"
25
+ >
26
+ <span
27
+ :style="{
28
+ textAlign: valueAlign,
29
+ }"
30
+ >
31
+ {{ value }}</span
32
+ >
33
+ </el-tooltip>
34
+
35
+ <div
36
+ v-else
37
+ class="line-infor-slot-wrap"
38
+ :style="{
39
+ justifyContent: slotAlignStyle,
40
+ }"
41
+ >
42
+ <slot name="lineInforSlot"></slot>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ </template>
47
+
48
+ <script>
49
+ export default {
50
+ name: "baseLineInfoItem",
51
+ data() {
52
+ return {
53
+ isChildren: false,
54
+ };
55
+ },
56
+ created() {
57
+ if (this.$parent.$options.name == "baseLineInfoGroup") {
58
+ this.isChildren = true;
59
+ }
60
+ },
61
+ props: {
62
+ event: {
63
+ type: Boolean,
64
+ default: false,
65
+ },
66
+ useSlot: {
67
+ type: Boolean,
68
+ default: false,
69
+ },
70
+ label: {
71
+ type: String,
72
+ require: true,
73
+ },
74
+ icon: {
75
+ type: [String, Boolean],
76
+ default: false,
77
+ },
78
+ value: {
79
+ require: true,
80
+ },
81
+ valueAlign: {
82
+ type: String,
83
+ default: "left",
84
+ },
85
+ labelWidth: {
86
+ type: Number,
87
+ },
88
+ },
89
+ computed: {
90
+ _labelWidth() {
91
+ let width = null;
92
+ if (this.isChildren) {
93
+ width = this.$parent.labelWidth;
94
+ } else {
95
+ width = this.$props.labelWidth;
96
+ }
97
+ return width;
98
+ },
99
+
100
+ slotAlignStyle() {
101
+ let value = "";
102
+ let align = this.$props.valueAlign;
103
+ switch (align) {
104
+ case "left":
105
+ value = `flex-start`;
106
+ break;
107
+ case "center":
108
+ value = `center`;
109
+ break;
110
+ case "right":
111
+ value = "flex-end";
112
+ break;
113
+
114
+ default:
115
+ break;
116
+ }
117
+ return value;
118
+ },
119
+ },
120
+ methods: {
121
+ iconClick() {
122
+ if (this.isChildren) {
123
+ this.$emit("infoclickicon");
124
+ } else {
125
+ this.$emit("infoclickicon", this.$props);
126
+ }
127
+ },
128
+ },
129
+ };
130
+ </script>
131
+
132
+ <style lang="less" scoped>
133
+ .base-line-info-item {
134
+ width: 100%;
135
+ height: auto;
136
+ display: flex;
137
+ align-items: center;
138
+ flex-flow: row nowrap;
139
+ justify-content: space-between;
140
+ .infor-label {
141
+ display: flex;
142
+ align-items: center;
143
+ span {
144
+ color: var(--font-color-s);
145
+ font-size: var(--font-size-base);
146
+ }
147
+ }
148
+ .infor-value {
149
+ box-sizing: border-box;
150
+ padding: var(--padding-5) calc(var(--padding-5) * 1.5);
151
+ span {
152
+ color: var(--font-color-d);
153
+ font-size: var(--font-size-base);
154
+ font-weight: var(--font-weight-g);
155
+ }
156
+ }
157
+ .infor-label,
158
+ .infor-value {
159
+ span {
160
+ width: 100%;
161
+ cursor: default;
162
+ overflow: hidden;
163
+ white-space: nowrap;
164
+ display: inline-block;
165
+ text-overflow: ellipsis;
166
+ }
167
+ .line-infor-slot-wrap {
168
+ display: flex;
169
+ flex-flow: row nowrap;
170
+ }
171
+ }
172
+ }
173
+ </style>
@@ -0,0 +1,6 @@
1
+ import baseLineInfoItem from "./baseLineInfoItem.vue";
2
+
3
+ baseLineInfoItem.install = function (Vue) {
4
+ Vue.component(baseLineInfoItem.name, baseLineInfoItem);
5
+ };
6
+ export default baseLineInfoItem;
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <div class="router-page-header-wrap">
3
+ <div class="header-wrap-left">
4
+ <span class="header-text">{{ headerText }}</span>
5
+ <slot name="prefix"></slot>
6
+ </div>
7
+ <slot class="header-wrap-right" name="header-wrap-right"> </slot>
8
+ </div>
9
+ </template>
10
+
11
+ <script>
12
+ export default {
13
+ name: "basePageHeader",
14
+ data() {
15
+ return {};
16
+ },
17
+ props: {
18
+ headerText: {
19
+ type: String,
20
+ require: true,
21
+ },
22
+ },
23
+ };
24
+ </script>
25
+
26
+ <style lang="less" scoped>
27
+ .router-page-header-wrap {
28
+ width: 100%;
29
+ height: auto;
30
+ display: flex;
31
+ align-items: center;
32
+ flex-flow: row nowrap;
33
+ justify-content: space-between;
34
+ .header-wrap-left,
35
+ .header-wrap-right {
36
+ display: flex;
37
+ align-items: center;
38
+ flex-flow: row nowrap;
39
+ }
40
+ .header-wrap-left {
41
+ max-width: 60%;
42
+ justify-content: flex-start;
43
+ .header-text {
44
+ color: var(--font-color-d);
45
+ margin-right: var(--margin-4);
46
+ font-size: var(--font-size-xl);
47
+ font-weight: var(--font-weight-kg);
48
+ }
49
+ }
50
+ .header-wrap-right {
51
+ max-width: 40%;
52
+ justify-content: flex-end;
53
+ }
54
+ }
55
+ </style>
@@ -0,0 +1,6 @@
1
+ import basePageHeader from "./basePageHeader.vue";
2
+
3
+ basePageHeader.install = function (Vue) {
4
+ Vue.component(basePageHeader.name, basePageHeader);
5
+ };
6
+ export default basePageHeader;
@@ -0,0 +1,6 @@
1
+ import basePagination from "./index.vue";
2
+
3
+ basePagination.install = function (Vue) {
4
+ Vue.component(basePagination.name, basePagination);
5
+ };
6
+ export default basePagination;
@@ -0,0 +1,75 @@
1
+ <template>
2
+ <div class="page-wrap">
3
+ <el-pagination
4
+ :small="small"
5
+ :layout="layout"
6
+ :page-sizes="pageSizes"
7
+ @size-change="handleSizeChange"
8
+ @current-change="handleCurrentChange"
9
+ :total="pageProps[`${config.total}`]"
10
+ :page-size="pageProps[`${config.size}`]"
11
+ :current-page.sync="pageProps[`${config.page}`]"
12
+ background
13
+ ref="pagination"
14
+ >
15
+ </el-pagination>
16
+ </div>
17
+ </template>
18
+
19
+ <script>
20
+ export default {
21
+ name: "basePagination",
22
+ data() {
23
+ return {};
24
+ },
25
+ props: {
26
+ pageProps: {
27
+ type: Object,
28
+ },
29
+ pageSizes: {
30
+ type: Array,
31
+ default: () => ["15", "30", "60", "100"],
32
+ },
33
+ small: {
34
+ type: Boolean,
35
+ default: false,
36
+ },
37
+ config: {
38
+ type: Object,
39
+ },
40
+ },
41
+ computed: {
42
+ layout() {
43
+ if (this.$props.small) {
44
+ return "prev, pager, next";
45
+ } else {
46
+ return "prev, pager,next, sizes,total, jumper";
47
+ }
48
+ },
49
+ },
50
+ methods: {
51
+ handleSizeChange(e) {
52
+ console.log("handleSizeChange");
53
+ this.$props.pageProps[`${this.$props.config.size}`] = e;
54
+ this.$emit("sizeChange");
55
+ },
56
+ handleCurrentChange(e) {
57
+ console.log(e);
58
+ console.log(this.$props.pageProps);
59
+ console.log("handleCurrentChange");
60
+ this.$emit("currentChange");
61
+ },
62
+ },
63
+ };
64
+ </script>
65
+
66
+ <style lang="less" scoped>
67
+ .page-wrap {
68
+ width: 100%;
69
+ height: auto;
70
+ display: flex;
71
+ align-items: center;
72
+ flex-flow: row nowrap;
73
+ justify-content: center;
74
+ }
75
+ </style>
@@ -0,0 +1,90 @@
1
+ <template>
2
+ <div class="table-wrap">
3
+ <el-table ref="elTable" :data="tableData">
4
+ <!-- 表格暂无数据 -->
5
+ <template slot="empty">
6
+ <baseDefaultSvgVue
7
+ :width="280"
8
+ :height="280"
9
+ :svgName="`no-data`"
10
+ :text="`暂无表格数据`"
11
+ v-if="tableData.length <= 0"
12
+ ></baseDefaultSvgVue>
13
+ <span></span>
14
+ </template>
15
+ <el-table-column
16
+ :key="index"
17
+ :align="`left`"
18
+ :prop="item.value"
19
+ :label="item.label"
20
+ :width="item.width"
21
+ v-for="(item, index) in tableConfig"
22
+ >
23
+ <template slot="header" slot-scope="scope">
24
+ <span class="plain-table-header-text">
25
+ {{ scope.column.label }}
26
+ </span>
27
+ </template>
28
+
29
+ <template slot-scope="scope">
30
+ <slot :name="item.value" :scope="scope.row" v-if="item.template">
31
+ </slot>
32
+
33
+ <span v-else class="cell-content-text">{{
34
+ scope.row[`${item.value}`]
35
+ }}</span>
36
+ </template>
37
+ </el-table-column>
38
+ </el-table>
39
+ </div>
40
+ </template>
41
+
42
+ <script>
43
+ import baseDefaultSvgVue from "../baseDefaultSvg/baseDefaultSvg.vue";
44
+ export default {
45
+ name: "basePlainTable",
46
+ data() {
47
+ return {};
48
+ },
49
+ components: {
50
+ baseDefaultSvgVue,
51
+ },
52
+ props: {
53
+ tableData: {
54
+ type: Array,
55
+ require: true,
56
+ default: () => [],
57
+ },
58
+ tableConfig: {
59
+ type: Array,
60
+ require: true,
61
+ },
62
+ },
63
+ };
64
+ </script>
65
+
66
+ <style lang="less" scoped>
67
+ .table-wrap {
68
+ overflow: hidden;
69
+ border-top: 0px;
70
+ border-bottom: 0px;
71
+ border-radius: calc(var(--radius) * 2);
72
+ border: 1px solid var(--color-table-border);
73
+ }
74
+ .plain-table-header-text {
75
+ color: var(--font-color-d);
76
+ font-size: var(--font-size-base);
77
+ font-weight: var(--font-weight-kg);
78
+ }
79
+ /deep/ .el-table__header-wrapper {
80
+ background: var(--color-gray-d) !important;
81
+ }
82
+ /deep/ thead {
83
+ tr {
84
+ th {
85
+ background: var(--color-gray-d) !important;
86
+ }
87
+ }
88
+ // background: var(--color-gray-d);
89
+ }
90
+ </style>
@@ -0,0 +1,6 @@
1
+ import basePlainTable from "./basePlainTable.vue";
2
+
3
+ basePlainTable.install = function (Vue) {
4
+ Vue.component(basePlainTable.name, basePlainTable);
5
+ };
6
+ export default basePlainTable;
@@ -0,0 +1,121 @@
1
+ <template>
2
+ <div class="section-wrap">
3
+ <div
4
+ class="section-header"
5
+ ref="sectionHeader"
6
+ :style="{
7
+ cursor: event && !disable ? 'pointer' : 'default',
8
+ }"
9
+ >
10
+ <div class="header-left">
11
+ <slot name="header-prefix"></slot>
12
+ <span class="header-text">{{ headerText }}</span>
13
+ </div>
14
+ <slot class="header-right" name="section-header-right"></slot>
15
+ </div>
16
+ <div class="section-content" v-show="module">
17
+ <slot name="sectionContent"></slot>
18
+ </div>
19
+ </div>
20
+ </template>
21
+
22
+ <script>
23
+ export default {
24
+ name: "baseSection",
25
+ data() {
26
+ return {};
27
+ },
28
+ mounted() {
29
+ this.$nextTick(() => {
30
+ this.init();
31
+ });
32
+ },
33
+ beforeDestroy() {
34
+ if (this.$props.event) {
35
+ this.$refs.sectionHeader.removeEventListener("click", this.handleOpen);
36
+ }
37
+ },
38
+ props: {
39
+ disable: {
40
+ type: Boolean,
41
+ default: false,
42
+ },
43
+ headerText: {
44
+ type: String,
45
+ require: true,
46
+ },
47
+ value: {
48
+ type: Boolean,
49
+ require: true,
50
+ },
51
+
52
+ event: {
53
+ type: Boolean,
54
+ default: true,
55
+ },
56
+ },
57
+
58
+ computed: {
59
+ module: {
60
+ set(val) {
61
+ this.$emit("input", val);
62
+ },
63
+ get() {
64
+ return this.$props.value;
65
+ },
66
+ },
67
+ },
68
+ methods: {
69
+ init() {
70
+ if (!this.$props.event) return;
71
+ this.$refs.sectionHeader.addEventListener("click", this.handleOpen);
72
+ },
73
+ handleOpen() {
74
+ if (this.$props.disable) return;
75
+ this.module = !this.module;
76
+ this.$emit("visibleContent", this.module);
77
+ },
78
+ },
79
+ };
80
+ </script>
81
+
82
+ <style lang="less" scoped>
83
+ .section-wrap {
84
+ width: 100%;
85
+ height: auto;
86
+
87
+ .section-header {
88
+ width: 100%;
89
+ display: flex;
90
+ height: auto;
91
+ align-items: center;
92
+ flex-flow: row nowrap;
93
+ padding: var(--padding-2) var(--padding-4);
94
+ background: var(--hover-gray);
95
+ justify-content: space-between;
96
+ border-radius: calc(var(--radius) * 2);
97
+ .header-left {
98
+ max-width: 60%;
99
+ display: flex;
100
+ align-items: center;
101
+ flex-flow: row nowrap;
102
+ justify-content: space-between;
103
+ }
104
+ .header-right {
105
+ max-width: 40%;
106
+ display: flex;
107
+ align-items: center;
108
+ flex-flow: row nowrap;
109
+ justify-content: space-between;
110
+ }
111
+ }
112
+ .header-text {
113
+ color: var(--font-color-d);
114
+ font-size: var(--font-size-base);
115
+ font-weight: var(--font-weight-kg);
116
+ }
117
+ .section-content {
118
+ padding: calc(var(--padding-4) * 2) 0px;
119
+ }
120
+ }
121
+ </style>
@@ -0,0 +1,6 @@
1
+ import baseSection from "./baseSection.vue";
2
+
3
+ baseSection.install = function (Vue) {
4
+ Vue.component(baseSection.name, baseSection);
5
+ };
6
+ export default baseSection;
@@ -0,0 +1,147 @@
1
+ <template>
2
+ <div class="base-skeleton-wrap" :class="[shape]">
3
+ <div
4
+ class="base-skeleton-item-wrap"
5
+ v-if="shape == 'square' || shape == 'cir'"
6
+ >
7
+ <div class="base-skeleton-item"></div>
8
+ </div>
9
+ <div class="base-skeleton-item-wrap" v-else-if="shape == 'rect'">
10
+ <div
11
+ :key="index"
12
+ class="base-skeleton-item"
13
+ :class="{ isSingle: isSingle }"
14
+ :style="{
15
+ width: isSingle ? `100%` : `${setItemWidth(item)}%`,
16
+ height: `100%`,
17
+ }"
18
+ v-for="(item, index) in lines"
19
+ ></div>
20
+ </div>
21
+ </div>
22
+ </template>
23
+
24
+ <script>
25
+ export default {
26
+ name: "baseSkeleton",
27
+ data() {
28
+ return {};
29
+ },
30
+ props: {
31
+ // square rect cir
32
+ shape: { type: String, default: "square" },
33
+ lines: {
34
+ type: Array,
35
+ default: () => [1],
36
+ },
37
+ },
38
+ computed: {
39
+ isSingle() {
40
+ let lines = this.$props.lines;
41
+ return lines.length == 1 && lines[0] == 1;
42
+ },
43
+ },
44
+ methods: {
45
+ setItemWidth(process) {
46
+ if (process > 10) {
47
+ process = 10;
48
+ }
49
+ return 10 * process;
50
+ },
51
+ },
52
+ };
53
+ </script>
54
+
55
+ <style lang="less" scoped>
56
+ .base-skeleton-wrap {
57
+ background: transparent;
58
+ border-radius: calc(var(--radius) * 2);
59
+
60
+ .base-skeleton-item-wrap {
61
+ width: 100%;
62
+ height: 100%;
63
+ display: flex;
64
+ border-radius: inherit;
65
+ align-items: flex-start;
66
+ flex-flow: column nowrap;
67
+ justify-content: flex-start;
68
+ align-items: flex-start;
69
+
70
+ @keyframes skeleton--gradient {
71
+ 0% {
72
+ transform: translate(-100%) skew(-15deg);
73
+ }
74
+ to {
75
+ transform: translate(100%) skew(-15deg);
76
+ }
77
+ }
78
+ }
79
+ .base-skeleton-item {
80
+ width: 100%;
81
+ overflow: hidden;
82
+ position: relative;
83
+ background: var(--color-gray-s);
84
+ &::after {
85
+ top: 0px;
86
+ left: 0px;
87
+ width: 100%;
88
+ height: 100%;
89
+ content: " ";
90
+ position: absolute;
91
+ background: linear-gradient(
92
+ 90deg,
93
+ rgba(255, 255, 255, 0),
94
+ rgba(0, 0, 0, 0.04),
95
+ rgba(255, 255, 255, 0)
96
+ );
97
+ animation: skeleton--gradient 1.5s linear 2s infinite;
98
+ }
99
+ }
100
+ }
101
+
102
+ .cir,
103
+ .square {
104
+ .base-skeleton-item {
105
+ height: 100% !important;
106
+ }
107
+ }
108
+ .cir {
109
+ overflow: hidden;
110
+ border-radius: 50% !important;
111
+ }
112
+
113
+ .square {
114
+ width: 80px;
115
+ height: 80px;
116
+ }
117
+ .rect,
118
+ .cir {
119
+ width: 100%;
120
+ height: 100%;
121
+ }
122
+
123
+ .rect {
124
+ .base-skeleton-item-wrap {
125
+ display: flex;
126
+ box-sizing: border-box;
127
+ align-items: flex-start;
128
+ flex-flow: column nowrap;
129
+ padding: var(--padding-5);
130
+ justify-content: space-between;
131
+ }
132
+ .base-skeleton-item {
133
+ max-height: 24px;
134
+ margin-bottom: 8px;
135
+ background: var(--color-gray-s);
136
+ border-radius: calc(var(--radius) * 2);
137
+
138
+ &:last-of-type {
139
+ margin-bottom: 0px;
140
+ }
141
+ }
142
+ .isSingle {
143
+ height: 100% !important;
144
+ max-height: 100% !important;
145
+ }
146
+ }
147
+ </style>
@@ -0,0 +1,6 @@
1
+ import baseSkeleton from "./baseSkeleton.vue";
2
+
3
+ baseSkeleton.install = function (Vue) {
4
+ Vue.component(baseSkeleton.name, baseSkeleton);
5
+ };
6
+ export default baseSkeleton;
@@ -0,0 +1,7 @@
1
+ import baseSvg from "./index.vue";
2
+
3
+ baseSvg.install = function (Vue) {
4
+ Vue.component(baseSvg.name, baseSvg);
5
+ };
6
+
7
+ export default baseSvg;