br-dionysus 1.6.7 → 1.6.8

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 (105) hide show
  1. package/dist/br-dionysus.es.js +1291 -1286
  2. package/dist/br-dionysus.umd.js +7 -7
  3. package/dist/index.css +1 -1
  4. package/package.json +1 -1
  5. package/packages/MInline/src/MInline.vue +11 -10
  6. package/web-types.json +1 -1
  7. package/docs/assets/README-BIIm2ID5.css +0 -1
  8. package/docs/assets/README-BVC502ud.js +0 -1
  9. package/docs/assets/README-BaVHXTcr.js +0 -1
  10. package/docs/assets/README-BkoXPzeT.js +0 -1
  11. package/docs/assets/README-BpY9wwJ5.js +0 -1
  12. package/docs/assets/README-BxVIiLkB.css +0 -1
  13. package/docs/assets/README-C8q4oePg.css +0 -1
  14. package/docs/assets/README-C9E9QEak.js +0 -1
  15. package/docs/assets/README-CJnIKztR.css +0 -1
  16. package/docs/assets/README-CPi9K5cm.css +0 -1
  17. package/docs/assets/README-CVikrcuu.js +0 -1
  18. package/docs/assets/README-CwxKEz5n.js +0 -1
  19. package/docs/assets/README-D-sCcuuV.js +0 -1
  20. package/docs/assets/README-D1NyMPDh.css +0 -1
  21. package/docs/assets/README-D8dRnWkj.css +0 -1
  22. package/docs/assets/README-DC5fWcO7.css +0 -1
  23. package/docs/assets/README-DFookNbq.js +0 -1
  24. package/docs/assets/README-DJM0QNOa.css +0 -1
  25. package/docs/assets/README-DJsWJjpr.js +0 -2
  26. package/docs/assets/README-DZH0ZBFE.js +0 -1
  27. package/docs/assets/README-DuLXE9ma.css +0 -1
  28. package/docs/assets/README-DxdjMTiZ.js +0 -1
  29. package/docs/assets/README-DxzXrur_.js +0 -1
  30. package/docs/assets/README-ZSEyYWl3.css +0 -1
  31. package/docs/assets/empty-BHv0FmNK.png +0 -0
  32. package/docs/assets/index-B3d27dSP.js +0 -66
  33. package/docs/assets/index-BeGJML3j.css +0 -1
  34. package/docs/index.html +0 -14
  35. package/docs/packages/Hook/usePackageConfig/README.md +0 -35
  36. package/docs/packages/Hook/usePackageConfig/demo.vue +0 -28
  37. package/docs/packages/Hook/usePackageConfig/usePackageConfig.ts +0 -39
  38. package/docs/packages/Hook/useRemainingSpace/README.md +0 -26
  39. package/docs/packages/Hook/useRemainingSpace/useRemainingSpace.ts +0 -148
  40. package/docs/packages/Hook/useTableConfig/README.md +0 -50
  41. package/docs/packages/Hook/useTableConfig/demo.vue +0 -134
  42. package/docs/packages/Hook/useTableConfig/useTableConfig.ts +0 -173
  43. package/docs/packages/Hook/useZIndex/README.md +0 -6
  44. package/docs/packages/Hook/useZIndex/useGlobalZIndex.ts +0 -34
  45. package/docs/packages/MDialog/docs/README.md +0 -26
  46. package/docs/packages/MDialog/docs/demo.vue +0 -72
  47. package/docs/packages/MDialog/index.ts +0 -10
  48. package/docs/packages/MDialog/src/MDialog.vue +0 -150
  49. package/docs/packages/MInline/docs/README.md +0 -26
  50. package/docs/packages/MInline/docs/demo.vue +0 -138
  51. package/docs/packages/MInline/index.ts +0 -10
  52. package/docs/packages/MInline/src/MInline.vue +0 -284
  53. package/docs/packages/MInputNumber/docs/README.md +0 -35
  54. package/docs/packages/MInputNumber/docs/demo.vue +0 -17
  55. package/docs/packages/MInputNumber/index.ts +0 -10
  56. package/docs/packages/MInputNumber/src/MInputNumber.vue +0 -268
  57. package/docs/packages/MSelect/docs/README.md +0 -20
  58. package/docs/packages/MSelect/docs/demo.vue +0 -36
  59. package/docs/packages/MSelect/index.ts +0 -17
  60. package/docs/packages/MSelect/src/MOption.vue +0 -43
  61. package/docs/packages/MSelect/src/MSelect.vue +0 -57
  62. package/docs/packages/MSelect/src/token.ts +0 -8
  63. package/docs/packages/MSelectTable/docs/README.md +0 -88
  64. package/docs/packages/MSelectTable/docs/demo.vue +0 -196
  65. package/docs/packages/MSelectTable/index.ts +0 -10
  66. package/docs/packages/MSelectTable/src/MSelectTable.vue +0 -493
  67. package/docs/packages/MSelectTableV1/docs/README.md +0 -49
  68. package/docs/packages/MSelectTableV1/docs/demo.vue +0 -77
  69. package/docs/packages/MSelectTableV1/index.ts +0 -10
  70. package/docs/packages/MSelectTableV1/src/MSelectTableV1.vue +0 -460
  71. package/docs/packages/MSelectV2/docs/README.md +0 -31
  72. package/docs/packages/MSelectV2/docs/demo.vue +0 -36
  73. package/docs/packages/MSelectV2/index.ts +0 -10
  74. package/docs/packages/MSelectV2/src/MSelectV2.vue +0 -116
  75. package/docs/packages/MTable/docs/README.md +0 -40
  76. package/docs/packages/MTable/docs/demo.vue +0 -93
  77. package/docs/packages/MTable/index.ts +0 -10
  78. package/docs/packages/MTable/src/MTable.vue +0 -228
  79. package/docs/packages/MTable/src/token.ts +0 -9
  80. package/docs/packages/MTableColumn/docs/README.md +0 -22
  81. package/docs/packages/MTableColumn/docs/demo.vue +0 -110
  82. package/docs/packages/MTableColumn/index.ts +0 -10
  83. package/docs/packages/MTableColumn/src/MTableColumn.vue +0 -345
  84. package/docs/packages/MTableColumnSet/docs/README.md +0 -31
  85. package/docs/packages/MTableColumnSet/docs/demo.vue +0 -36
  86. package/docs/packages/MTableColumnSet/index.ts +0 -10
  87. package/docs/packages/MTableColumnSet/src/MTableColumnSet.vue +0 -310
  88. package/docs/packages/README.md +0 -10
  89. package/docs/packages/SkinConfig/docs/README.md +0 -42
  90. package/docs/packages/SkinConfig/docs/demo.vue +0 -680
  91. package/docs/packages/SkinConfig/index.ts +0 -10
  92. package/docs/packages/SkinConfig/src/SkinConfig.vue +0 -478
  93. package/docs/packages/SkinConfig/src/useSkin.ts +0 -230
  94. package/docs/packages/TabPage/docs/README.md +0 -10
  95. package/docs/packages/TabPage/docs/demo.vue +0 -96
  96. package/docs/packages/TabPage/index.ts +0 -10
  97. package/docs/packages/TabPage/src/TabPage.vue +0 -566
  98. package/docs/packages/Tool/moneyFormat/README.md +0 -15
  99. package/docs/packages/Tool/moneyFormat/moneyFormat.ts +0 -69
  100. package/docs/packages/index.ts +0 -61
  101. package/docs/packages/list.json +0 -80
  102. package/docs/packages/typings/class.ts +0 -22
  103. package/docs/packages/typings/enum.ts +0 -9
  104. package/docs/packages/typings/global.d.ts +0 -69
  105. package/docs/packages/typings/interface.ts +0 -6
@@ -1,478 +0,0 @@
1
- <!--皮肤配置-->
2
- <template>
3
- <div class="g-skin-config-box">
4
- <div
5
- class="u-btn"
6
- @click="open"
7
- >
8
- <svg
9
- t="1706517168459"
10
- class="icon"
11
- viewBox="0 0 1024 1024"
12
- version="1.1"
13
- xmlns="http://www.w3.org/2000/svg"
14
- p-id="4378"
15
- width="24"
16
- height="24"
17
- >
18
- <path
19
- d="M533.333333 853.333333c179.2 0 320-145.066667 320-320S708.266667 213.333333 533.333333 213.333333 213.333333 358.4 213.333333 533.333333c0 93.866667 34.133333 132.266667 115.2 157.866667 8.533333 4.266667 12.8 4.266667 21.333334 8.533333 4.266667 0 21.333333 4.266667 21.333333 8.533334 51.2 17.066667 76.8 25.6 98.133333 51.2 17.066667 17.066667 29.866667 38.4 42.666667 59.733333 4.266667 8.533333 8.533333 17.066667 8.533333 21.333333 8.533333 0 8.533333 8.533333 12.8 12.8z m0 42.666667c-59.733333 0-21.333333-42.666667-89.6-110.933333-64-64-273.066667-25.6-273.066666-251.733334C170.666667 332.8 332.8 170.666667 533.333333 170.666667S896 332.8 896 533.333333 733.866667 896 533.333333 896z m72.533334-106.666667c-42.666667 0-76.8-34.133333-76.8-76.8s34.133333-72.533333 76.8-72.533333 76.8 34.133333 76.8 72.533333-34.133333 76.8-76.8 76.8z m0-42.666666c17.066667 0 34.133333-12.8 34.133333-34.133334s-12.8-29.866667-34.133333-29.866666-34.133333 12.8-34.133334 29.866666 17.066667 34.133333 34.133334 34.133334zM640 384c-25.6 0-42.666667-17.066667-42.666667-42.666667s17.066667-42.666667 42.666667-42.666666 42.666667 17.066667 42.666667 42.666666-17.066667 42.666667-42.666667 42.666667z m-119.466667-34.133333c-25.6 0-42.666667-17.066667-42.666666-42.666667s17.066667-42.666667 42.666666-42.666667 42.666667 17.066667 42.666667 42.666667-17.066667 42.666667-42.666667 42.666667zM725.333333 469.333333c-25.6 0-42.666667-17.066667-42.666666-42.666666s17.066667-42.666667 42.666666-42.666667 42.666667 17.066667 42.666667 42.666667-17.066667 42.666667-42.666667 42.666666zM405.333333 384c-25.6 0-42.666667-17.066667-42.666666-42.666667s17.066667-42.666667 42.666666-42.666666 42.666667 17.066667 42.666667 42.666666-17.066667 42.666667-42.666667 42.666667z"
20
- fill="#444444"
21
- p-id="4379"
22
- ></path>
23
- </svg>
24
- </div>
25
-
26
- <el-drawer
27
- v-model="drawer"
28
- direction="rtl"
29
- :withHeader="false"
30
- size="300"
31
- >
32
- <h2 class="u-tt">主题配置</h2>
33
- <div class="u-box">
34
- <el-divider class="u-box-tt">主题模式</el-divider>
35
- <div class="u-group">
36
- <label>深色主题</label>
37
- <el-switch
38
- v-model="skinConfig.darkTheme"
39
- :size="skinConfig.size"
40
- @change="skin.apply();skin.save();emit('change', skinConfig)"
41
- />
42
- </div>
43
- <div class="u-group">
44
- <label>跟随系统</label>
45
- <el-switch
46
- v-model="skinConfig.followSystem"
47
- :size="skinConfig.size"
48
- @change="skin.apply();skin.save();emit('change', skinConfig)"
49
- />
50
- </div>
51
- <div class="u-group">
52
- <label>元素大小</label>
53
- <el-radio-group
54
- v-model="skinConfig.size"
55
- :size="skinConfig.size"
56
- @change="skin.apply();skin.save();emit('change', skinConfig)"
57
- >
58
- <el-radio-button
59
- v-for="item in filter.sizeOptions.value"
60
- :key="item.value"
61
- :label="item.value"
62
- :value="item.value"
63
- >
64
- {{ item.label }}
65
- </el-radio-button>
66
- </el-radio-group>
67
- </div>
68
- <div class="u-group">
69
- <label>滚动条宽度</label>
70
- <m-input-number
71
- class="u-it"
72
- v-model="skinConfig.scrollBarWidth"
73
- :size="skinConfig.size"
74
- @change="skin.apply();skin.save();emit('change', skinConfig)"
75
- >
76
- </m-input-number>
77
- </div>
78
- <el-divider class="u-box-tt">系统主题</el-divider>
79
- <el-tabs
80
- v-model="ruleForm.type"
81
- :size="skinConfig.size"
82
- class="u-tabs"
83
- @tabClick="tabChange"
84
- >
85
- <el-tab-pane
86
- v-for="item in filter.typeOptions.value"
87
- :key="item.value"
88
- :label="item.label"
89
- :name="item.value"
90
- >
91
- </el-tab-pane>
92
- </el-tabs>
93
- <div
94
- class="u-gulp"
95
- v-if="ruleForm.type === 'primary'"
96
- >
97
- <ul class="u-list">
98
- <li
99
- class="u-li"
100
- v-for="color in colorCard"
101
- :key="color"
102
- >
103
- <div
104
- class="u-color"
105
- :style="getColorCardStyle(color)"
106
- @click="skin.setColor('primary', color);emit('change', skinConfig)"
107
- >
108
- <el-icon v-if="skinConfig.primaryColor === color"><Check /></el-icon>
109
- </div>
110
- </li>
111
- </ul>
112
- <div class="u-pc">
113
- <el-color-picker
114
- v-model="skinConfig.primaryColor"
115
- colorFormat="hex"
116
- @change="skin.setColor('primary', skinConfig.primaryColor);emit('change', skinConfig)"
117
- />
118
- </div>
119
- </div>
120
- <div
121
- class="u-gulp"
122
- v-if="ruleForm.type === 'success'"
123
- >
124
- <ul class="u-list">
125
- <li
126
- class="u-li"
127
- v-for="color in colorCard"
128
- :key="color"
129
- >
130
- <div
131
- class="u-color"
132
- :style="getColorCardStyle(color)"
133
- @click="skin.setColor('success', color);emit('change', skinConfig)"
134
- >
135
- <el-icon v-if="skinConfig.successColor === color"><Check /></el-icon>
136
- </div>
137
- </li>
138
- </ul>
139
- <div class="u-pc">
140
- <el-color-picker
141
- v-model="skinConfig.successColor"
142
- colorFormat="hex"
143
- @change="skin.setColor('success', skinConfig.successColor);emit('change', skinConfig)"
144
- />
145
- </div>
146
- </div>
147
- <div
148
- class="u-gulp"
149
- v-if="ruleForm.type === 'warning'"
150
- >
151
- <ul class="u-list">
152
- <li
153
- class="u-li"
154
- v-for="color in colorCard"
155
- :key="color"
156
- >
157
- <div
158
- class="u-color"
159
- :style="getColorCardStyle(color)"
160
- @click="skin.setColor('warning', color);emit('change', skinConfig)"
161
- >
162
- <el-icon v-if="skinConfig.warningColor === color"><Check /></el-icon>
163
- </div>
164
- </li>
165
- </ul>
166
- <div class="u-pc">
167
- <el-color-picker
168
- v-model="skinConfig.warningColor"
169
- colorFormat="hex"
170
- @change="skin.setColor('warning', skinConfig.warningColor);emit('change', skinConfig)"
171
- />
172
- </div>
173
- </div>
174
- <div
175
- class="u-gulp"
176
- v-if="ruleForm.type === 'danger'"
177
- >
178
- <ul class="u-list">
179
- <li
180
- class="u-li"
181
- v-for="color in colorCard"
182
- :key="color"
183
- >
184
- <div
185
- class="u-color"
186
- :style="getColorCardStyle(color)"
187
- @click="skin.setColor('danger', color);emit('change', skinConfig)"
188
- >
189
- <el-icon v-if="skinConfig.dangerColor === color"><Check /></el-icon>
190
- </div>
191
- </li>
192
- </ul>
193
- <div class="u-pc">
194
- <el-color-picker
195
- v-model="skinConfig.dangerColor"
196
- colorFormat="hex"
197
- @change="skin.setColor('danger', skinConfig.dangerColor);emit('change', skinConfig)"
198
- />
199
- </div>
200
- </div>
201
- <div
202
- class="u-gulp"
203
- v-if="ruleForm.type === 'info'"
204
- >
205
- <ul class="u-list">
206
- <li
207
- class="u-li"
208
- v-for="color in colorCard"
209
- :key="color"
210
- >
211
- <div
212
- class="u-color"
213
- :style="getColorCardStyle(color)"
214
- @click="skin.setColor('info', color);emit('change', skinConfig)"
215
- >
216
- <el-icon v-if="skinConfig.infoColor === color"><Check /></el-icon>
217
- </div>
218
- </li>
219
- </ul>
220
- <div class="u-pc">
221
- <el-color-picker
222
- v-model="skinConfig.infoColor"
223
- colorFormat="hex"
224
- @change="skin.setColor('info', skinConfig.infoColor);emit('change', skinConfig)"
225
- />
226
- </div>
227
- </div>
228
- <el-button
229
- type="warning"
230
- :size="skinConfig.size"
231
- @click="skin.reset"
232
- >
233
- 重置当前配置
234
- </el-button>
235
- </div>
236
- </el-drawer>
237
- </div>
238
- </template>
239
-
240
- <script setup lang="ts">
241
- import { ref, onMounted, reactive } from 'vue'
242
- import useSkin, { SkinConfig } from './useSkin'
243
- import { Size } from 'packages/typings/enum'
244
- import { Filter } from 'packages/typings/interface'
245
- import { MInputNumber } from 'packages/MInputNumber'
246
-
247
- const drawer = ref<boolean>(false)
248
- const open = () => {
249
- drawer.value = true
250
- }
251
-
252
- const filter: Filter = {
253
- typeOptions: ref<Option[]>([{
254
- label: '主题',
255
- value: 'primary'
256
- }, {
257
- label: '成功',
258
- value: 'success'
259
- }, {
260
- label: '警告',
261
- value: 'warning'
262
- }, {
263
- label: '危险',
264
- value: 'danger'
265
- }, {
266
- label: '信息',
267
- value: 'info'
268
- }]),
269
- sizeOptions: ref<Option[]>([{
270
- label: '大',
271
- value: Size.LARGE
272
- }, {
273
- label: '中',
274
- value: Size.DEFAULT
275
- }, {
276
- label: '小',
277
- value: Size.SMALL
278
- }])
279
- }
280
- const skin = useSkin()
281
- const skinConfig = skin.skinConfig
282
-
283
- interface RuleFormType {
284
- type: string,
285
- color: string
286
- }
287
- const ruleForm: RuleFormType = reactive<RuleFormType>({
288
- type: 'primary',
289
- color: skinConfig.primaryColor
290
- })
291
- const tabChange = () => {
292
- setTimeout(() => {
293
- if (ruleForm.type === 'primary') ruleForm.color = skinConfig.primaryColor
294
- if (ruleForm.type === 'success') ruleForm.color = skinConfig.successColor
295
- if (ruleForm.type === 'warning') ruleForm.color = skinConfig.warningColor
296
- if (ruleForm.type === 'danger') ruleForm.color = skinConfig.dangerColor
297
- if (ruleForm.type === 'info') ruleForm.color = skinConfig.infoColor
298
- })
299
- }
300
-
301
- const emit = defineEmits(['change'])
302
-
303
- // 色卡24色
304
- const colorCard: string[] = [
305
- '#1690ff',
306
- '#419eff',
307
- '#007aff',
308
- '#59c8fa',
309
- '#646CFF',
310
- '#536dfe',
311
- '#646cff',
312
- '#9c28b0',
313
- '#af52de',
314
- '#0096c7',
315
- '#04c1d4',
316
- '#67c23a',
317
- '#42a047',
318
- '#7cb342',
319
- '#c0ca34',
320
- '#78dec7',
321
- '#e53834',
322
- '#d81a60',
323
- '#f4511e',
324
- '#f56c6c',
325
- '#e6a23c',
326
- '#ffb300',
327
- '#fdd835',
328
- '#909399'
329
- ]
330
- const getColorCardStyle = (color: string) => ({
331
- background: color
332
- })
333
- onMounted(() => {
334
- skin.apply()
335
- })
336
-
337
- const setSkin = (config: SkinConfig) => {
338
- skinConfig.darkTheme = config?.darkTheme === undefined ? skinConfig.darkTheme : config.darkTheme
339
- skinConfig.followSystem = config?.followSystem === undefined ? skinConfig.followSystem : config.followSystem
340
- skinConfig.size = config?.size === undefined ? skinConfig.size : config.size
341
- skinConfig.scrollBarWidth = config?.scrollBarWidth === undefined ? skinConfig.scrollBarWidth : config.scrollBarWidth
342
- skinConfig.primaryColor = config?.primaryColor === undefined ? skinConfig.primaryColor : config.primaryColor
343
- skinConfig.successColor = config?.successColor === undefined ? skinConfig.successColor : config.successColor
344
- skinConfig.warningColor = config?.warningColor === undefined ? skinConfig.warningColor : config.warningColor
345
- skinConfig.dangerColor = config?.dangerColor === undefined ? skinConfig.dangerColor : config.dangerColor
346
- skinConfig.infoColor = config?.infoColor === undefined ? skinConfig.infoColor : config.infoColor
347
- skin.apply()
348
- skin.save()
349
- }
350
-
351
- const getSkin = () => skinConfig
352
-
353
- defineExpose({
354
- setSkin,
355
- getSkin
356
- })
357
- </script>
358
-
359
- <style scoped lang="scss">
360
- .g-skin-config-box {
361
- display: flex;
362
-
363
- .u-tt {
364
- padding: 0 24px;
365
- line-height: 50px;
366
- box-shadow: 0 1px 2px rgba(0, 21, 41, 0.08);
367
- }
368
-
369
- .u-box {
370
- display: flex;
371
- padding: 20px 24px;
372
- height: calc(100% - 50px);
373
- flex-direction: column;
374
-
375
- .u-box-tt {
376
- margin: 34px 0;
377
- }
378
-
379
- .u-group {
380
- display: flex;
381
- margin-bottom: 12px;
382
- justify-content: space-between;
383
- align-items: center;
384
- color: var(--m-fc-body);
385
- }
386
-
387
- .u-gulp {
388
- display: flex;
389
- margin: 0 -10px;
390
- flex-direction: column;
391
- flex-wrap: wrap;
392
- flex: 1;
393
- }
394
-
395
- .u-list {
396
- display: flex;
397
- flex-wrap: wrap;
398
-
399
- .u-li {
400
- display: flex;
401
- margin-bottom: 10px;
402
- width: 12.5%;
403
- justify-content: center;
404
-
405
- .u-color {
406
- display: flex;
407
- width: 20px;
408
- height: 20px;
409
- color: #fff;
410
- align-items: center;
411
- justify-content: center;
412
- cursor: pointer;
413
- }
414
- }
415
- }
416
- }
417
-
418
- .u-pc {
419
- display: flex;
420
- margin-top: 10px;
421
- width: 100%;
422
- flex: 1;
423
- justify-content: center;
424
- }
425
- }
426
-
427
- .u-btn {
428
- display: flex;
429
- font-size: 18px;
430
- color: var(--el-color-primary);
431
- cursor: pointer;
432
-
433
- svg path {
434
- stroke: var(--el-color-primary);
435
- fill: var(--el-color-primary);
436
- }
437
- }
438
-
439
- .u-slt {
440
- width: 100px;
441
- }
442
-
443
- .u-it {
444
- width: 106px;
445
- }
446
- </style>
447
-
448
- <style lang="scss">
449
- .g-skin-config-box {
450
- .el-drawer__body {
451
- padding: 0;
452
- }
453
-
454
- .el-switch {
455
- height: auto;
456
- }
457
-
458
- .u-pc {
459
- display: flex;
460
- justify-content: center;
461
-
462
- .el-color-picker {
463
- width: 100%;
464
-
465
- .el-color-picker__trigger {
466
- width: 100%;
467
- height: 34px;
468
- }
469
- }
470
- }
471
-
472
- .u-tabs {
473
- .el-tabs__item {
474
- padding: 0 10px;
475
- }
476
- }
477
- }
478
- </style>
@@ -1,230 +0,0 @@
1
- import { reactive } from 'vue'
2
- import { Size } from 'packages/typings/enum'
3
- import compareStructures from '../../../tool/compareStructures'
4
- import usePackageConfig from 'packages/Hook/usePackageConfig/usePackageConfig'
5
-
6
- const packageConfig = usePackageConfig()
7
-
8
- /**
9
- * @description 颜色计算
10
- * @param {string} hex 十六进制颜色值
11
- * @param {number} percent 百分比,正值变亮,负值变暗
12
- * @returns {string} 十六进制颜色值
13
- * */
14
- const adjustColor = (hex: string, percent: number = 100): string => {
15
- hex = hex.replace('#', '').toLowerCase()
16
-
17
- if (hex.length === 3) {
18
- hex = hex.split('').map(c => c + c).join('')
19
- }
20
-
21
- let r: any = parseInt(hex.substring(0, 2), 16)
22
- let g: any = parseInt(hex.substring(2, 4), 16)
23
- let b: any = parseInt(hex.substring(4, 6), 16)
24
-
25
- // 变亮
26
- if (percent > 0) {
27
- r += Math.round((255 - r) * (percent / 100))
28
- g += Math.round((255 - g) * (percent / 100))
29
- b += Math.round((255 - b) * (percent / 100))
30
- }
31
- // 变暗
32
- if (percent <= 0) {
33
- r += Math.round(r * (percent / 100))
34
- g += Math.round(g * (percent / 100))
35
- b += Math.round(b * (percent / 100))
36
- }
37
-
38
- r = r.toString(16).padStart(2, '0')
39
- g = g.toString(16).padStart(2, '0')
40
- b = b.toString(16).padStart(2, '0')
41
-
42
- // 返回十六进制颜色值
43
- return `#${r}${g}${b}`
44
- }
45
-
46
- export interface SkinConfig {
47
- /** 深色主题 */
48
- darkTheme: boolean,
49
- /** 跟随系统 */
50
- followSystem: boolean,
51
- /** 组件大小 */
52
- size: Size,
53
- /** 滚动条宽度 */
54
- scrollBarWidth: number,
55
- /** 主题色 */
56
- primaryColor: string,
57
- /** 成功色 */
58
- successColor: string,
59
- /** 警告色 */
60
- warningColor: string,
61
- /** 危险色 */
62
- dangerColor: string,
63
- /** 信息色 */
64
- infoColor: string,
65
- }
66
-
67
- /**
68
- * @description 主题皮肤
69
- * @returns {Object} {
70
- * skinConfig,
71
- * reset,
72
- * setColor,
73
- * apply,
74
- * save,
75
- * switchDark
76
- * }
77
- */
78
- const useSkin = (): {
79
- skinConfig: SkinConfig,
80
- reset: Function,
81
- setColor: Function,
82
- apply: Function,
83
- save: Function,
84
- switchDark: Function
85
- } => {
86
- const defaultSkinConfig: SkinConfig = {
87
- darkTheme: false,
88
- followSystem: false,
89
- size: Size.DEFAULT,
90
- scrollBarWidth: 5,
91
- primaryColor: '#646CFF',
92
- successColor: '#67c23a',
93
- warningColor: '#e6a23c',
94
- dangerColor: '#f56c6c',
95
- infoColor: '#909399'
96
- }
97
-
98
- // 清洗数据
99
- const skinConfigData = packageConfig.get('skinConfig')
100
- // 数据结构不一致,既认为为不同版本需要清洗
101
- if (!compareStructures(skinConfigData, defaultSkinConfig)) {
102
- packageConfig.set('skinConfig', defaultSkinConfig)
103
- }
104
-
105
- /** 皮肤配置 */
106
- const skinConfig: SkinConfig = reactive(packageConfig.get('skinConfig'))
107
-
108
- /**
109
- * @description 设置皮肤色
110
- * @param {string} type 类型
111
- * @param {string} color 颜色
112
- */
113
- const setColor = (type: string, color: string) => {
114
- if (type === 'primary') skinConfig.primaryColor = color
115
- if (type === 'success') skinConfig.successColor = color
116
- if (type === 'warning') skinConfig.warningColor = color
117
- if (type === 'danger') skinConfig.dangerColor = color
118
- if (type === 'info') skinConfig.infoColor = color
119
- apply()
120
- save()
121
- }
122
- /**
123
- * @description 重置主题色
124
- */
125
- const reset = () => {
126
- skinConfig.darkTheme = defaultSkinConfig.darkTheme
127
- skinConfig.followSystem = defaultSkinConfig.followSystem
128
- skinConfig.size = defaultSkinConfig.size
129
- skinConfig.scrollBarWidth = defaultSkinConfig.scrollBarWidth
130
- skinConfig.primaryColor = defaultSkinConfig.primaryColor
131
- skinConfig.successColor = defaultSkinConfig.successColor
132
- skinConfig.warningColor = defaultSkinConfig.warningColor
133
- skinConfig.dangerColor = defaultSkinConfig.dangerColor
134
- skinConfig.infoColor = defaultSkinConfig.infoColor
135
- apply()
136
- save()
137
- }
138
-
139
- /**
140
- * @description 应用皮肤配置
141
- */
142
- const apply = () => {
143
- // 是否为暗夜模式
144
- const isDark: boolean = skinConfig.darkTheme || (skinConfig.followSystem && (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches))
145
- const getThisPercent = (percent: number) => isDark ? -percent : percent
146
-
147
- const rootStyle = document.documentElement.style
148
-
149
- const setColor = (type: 'primary' | 'success' | 'warning' | 'danger' | 'info') => {
150
- const key = (type + 'Color') as keyof typeof skinConfig
151
- const color = skinConfig[key] as string
152
- // 主色
153
- rootStyle.setProperty(`--el-color-${type}`, color)
154
- // 主色2
155
- rootStyle.setProperty(`--el-color-${type}-dark-2`, adjustColor(color, getThisPercent(50)))
156
- // 主色(亮)3
157
- rootStyle.setProperty(`--el-color-${type}-light-3`, adjustColor(color, getThisPercent(25)))
158
- // 主色(亮)5
159
- rootStyle.setProperty(`--el-color-${type}-light-5`, adjustColor(color, getThisPercent(40)))
160
- // 主色(亮)7
161
- rootStyle.setProperty(`--el-color-${type}-light-7`, adjustColor(color, getThisPercent(60)))
162
- // 主色(亮)8
163
- rootStyle.setProperty(`--el-color-${type}-light-8`, adjustColor(color, getThisPercent(75)))
164
- // 主色(亮)9
165
- rootStyle.setProperty(`--el-color-${type}-light-9`, adjustColor(color, getThisPercent(90)))
166
- }
167
-
168
- // 主题色
169
- setColor('primary')
170
- // 成功色
171
- setColor('success')
172
- // 警告色
173
- setColor('warning')
174
- // 危险色
175
- setColor('danger')
176
- // 信息色
177
- setColor('info')
178
-
179
- // 滚动条颜色
180
- rootStyle.setProperty('--m-scrollbar-thumb-color', adjustColor(skinConfig.primaryColor, getThisPercent(70)))
181
- // 滚动条hover颜色
182
- rootStyle.setProperty('--m-scrollbar-thumb-hover-color', adjustColor(skinConfig.primaryColor, getThisPercent(50)))
183
-
184
- if (skinConfig.size === Size.SMALL) skinConfig.scrollBarWidth = 5
185
- if (skinConfig.size === Size.DEFAULT) skinConfig.scrollBarWidth = 8
186
- if (skinConfig.size === Size.LARGE) skinConfig.scrollBarWidth = 10
187
- // 滚动条宽度
188
- rootStyle.setProperty('--m-scrollbar-thumb-width', skinConfig.scrollBarWidth + 'px')
189
-
190
- switchDark(isDark)
191
-
192
- switchSize(skinConfig.size)
193
- }
194
-
195
- /**
196
- * @description 切换暗夜模式
197
- * @param {boolean} isDark 是否为暗夜模式
198
- */
199
- const switchDark = (isDark: boolean = false) => {
200
- skinConfig.darkTheme = isDark
201
- document.documentElement.setAttribute('data-dark', String(isDark))
202
- }
203
-
204
- /**
205
- * @description 切换组件大小
206
- * @param {string} sizeMode 组件大小模式
207
- */
208
- const switchSize = (sizeMode: Size = Size.DEFAULT) => {
209
- skinConfig.size = sizeMode
210
- document.documentElement.setAttribute('data-size', sizeMode)
211
- }
212
-
213
- /**
214
- * @description 保存皮肤配置到本地
215
- */
216
- const save = () => {
217
- packageConfig.set('skinConfig', skinConfig)
218
- }
219
-
220
- return {
221
- skinConfig,
222
- reset,
223
- setColor,
224
- apply,
225
- save,
226
- switchDark
227
- }
228
- }
229
-
230
- export default useSkin