Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
468b7e011b | ||
|
|
4eb6b057b8 | ||
|
|
0b04270de7 | ||
|
|
9460e6d4d0 | ||
|
|
f343f63840 | ||
|
|
7c8dec3421 | ||
|
|
d0d0990f7c | ||
|
|
fed4dbcbde | ||
|
|
7c17dd6e5a | ||
|
|
357620b6bf | ||
|
|
18477eff52 | ||
|
|
c5aea0449b | ||
|
|
c08fba325b | ||
|
|
943f68e0e0 | ||
|
|
663c195da1 | ||
|
|
31ab568563 | ||
|
|
24a2887aa3 | ||
|
|
81b4cab380 | ||
|
|
ebbbfceac9 | ||
|
|
1888297a2c | ||
|
|
91fb70b2c5 | ||
|
|
fdfbafea0a | ||
|
|
fda3adf95a | ||
|
|
3b2f69d127 | ||
|
|
cf41d7cc8c | ||
|
|
1a550c5385 | ||
|
|
c87c9f6c07 | ||
|
|
60bb408ccc | ||
|
|
705f14e415 | ||
|
|
3990c4f437 | ||
|
|
eee125d2c7 | ||
|
|
8f2745ab59 | ||
|
|
f1202cae20 | ||
|
|
8daee24eba | ||
|
|
b52578283c | ||
|
|
7c3d3820c2 | ||
|
|
48772f9003 | ||
|
|
8cbb3402da | ||
|
|
1dd7a03a84 | ||
|
|
95a128372b | ||
|
|
42b1d20652 | ||
|
|
cbe373c061 | ||
|
|
85e67c4fea | ||
|
|
22ab17fb25 | ||
|
|
cd8eff5f97 | ||
|
|
e4ef6449e0 | ||
|
|
522a97f8d6 | ||
|
|
59fb213060 | ||
|
|
d4ca52ea8d | ||
|
|
17953c7645 | ||
|
|
5726479100 | ||
|
|
3946adaecb | ||
|
|
7d27b74846 | ||
|
|
058f42fb37 | ||
|
|
d25dbeffdc | ||
|
|
fb70031109 | ||
|
|
f5bda00696 | ||
|
|
60a3c4d3a1 | ||
|
|
00f729340c | ||
|
|
d076de4094 | ||
|
|
366396c9d9 | ||
|
|
44717364d2 | ||
|
|
52012d46fa | ||
|
|
e61465f75e | ||
|
|
97b15818b5 | ||
|
|
5366aeb185 | ||
|
|
9ce9f36a10 | ||
|
|
e2c0eb5292 | ||
|
|
3259ef0c9c | ||
|
|
c6c71b42d0 | ||
|
|
4c23c8b55e | ||
|
|
3fe319e033 | ||
|
|
801d346bc7 | ||
|
|
0a940763ef | ||
|
|
2c9118e847 | ||
|
|
440f8d3f07 | ||
|
|
ec5aeee854 | ||
|
|
4af458f067 | ||
|
|
34f29061f8 | ||
|
|
ab9719727c | ||
|
|
c20738ea9c | ||
|
|
e667db15db | ||
|
|
0d7317eb44 | ||
|
|
a0821be5d7 | ||
|
|
b3e5814eea | ||
|
|
9b07c0cd64 | ||
|
|
2f6f07dfed | ||
|
|
e87b72f624 | ||
|
|
3c09401955 | ||
|
|
8796f3c1cb | ||
|
|
c5fa23efbe | ||
|
|
f574c5dcf7 | ||
|
|
716eab01eb | ||
|
|
8ace4fd547 | ||
|
|
3cba38822c | ||
|
|
ae5ff8f973 | ||
|
|
34c7e41028 | ||
|
|
d572e6d933 | ||
|
|
451b42b418 | ||
|
|
5412e35059 | ||
|
|
e05ae827f3 | ||
|
|
a2fc0d3431 | ||
|
|
8156aa1ff5 | ||
|
|
824c64ae94 | ||
|
|
464c495df2 | ||
|
|
06d7479939 | ||
|
|
912d20a55c | ||
|
|
82c28e61f9 | ||
|
|
5ad061008b | ||
|
|
5dbedd24ae | ||
|
|
55503bdb66 | ||
|
|
5e1d9266e1 | ||
|
|
8eda175402 | ||
|
|
476cce6068 | ||
|
|
664114b1a5 | ||
|
|
bd430e2788 | ||
|
|
25aa911556 | ||
|
|
2f06a3ac2a | ||
|
|
9bb68311d7 | ||
|
|
2f3f374fa0 | ||
|
|
8b51977b32 | ||
|
|
5eed494401 | ||
|
|
a0c18ac7ca | ||
|
|
b97cd9478b | ||
|
|
a35a85f6df | ||
|
|
9d20a8fbe6 | ||
|
|
b55ea0f61b | ||
|
|
0440d52b17 | ||
|
|
8b9a2d0c44 | ||
|
|
4a0ffdd0f0 | ||
|
|
49cdde285a | ||
|
|
7f31f86ec3 | ||
|
|
e4dad2bb42 | ||
|
|
28a532243b | ||
|
|
1100646921 | ||
|
|
fabeb0d3a2 | ||
|
|
39b731cf2e | ||
|
|
c5f50b5686 | ||
|
|
87ad97e5cf | ||
|
|
57c9d26980 | ||
|
|
baa766f62a | ||
|
|
bd764543b4 | ||
|
|
06b62d5e8f | ||
|
|
bb7ba8cfc9 | ||
|
|
3a6c74f49a | ||
|
|
2292952d03 | ||
|
|
60147a7e1f | ||
|
|
c59cd96fe3 | ||
|
|
475ce3ab3d | ||
|
|
18c216390d | ||
|
|
be51be6715 | ||
|
|
d4e6c65247 | ||
|
|
bdae84d464 | ||
|
|
d80178c409 | ||
|
|
9f0bdf49b9 | ||
|
|
e76325475e | ||
|
|
6ed6b87fb5 | ||
|
|
871113e34f | ||
|
|
6ed480cc2f | ||
|
|
3d993bb0b4 | ||
|
|
570cdf9296 | ||
|
|
d70e2d523b | ||
|
|
952a148086 | ||
|
|
553caa5307 | ||
|
|
30bf80a3f6 | ||
|
|
1feea3d0c9 | ||
|
|
d50b8927f6 | ||
|
|
24d78701b0 | ||
|
|
e662e9a095 | ||
|
|
18242685bc | ||
|
|
de890461f8 | ||
|
|
8c8d612cfe | ||
|
|
ecc7ed30a2 | ||
|
|
fb7384056a | ||
|
|
beab7dc1d3 | ||
|
|
3941a53e34 | ||
|
|
5fccf2136b | ||
|
|
d557879395 | ||
|
|
851dff8c95 | ||
|
|
17f21b42f4 | ||
|
|
97a97d8804 | ||
|
|
5c840a6be9 | ||
|
|
76336c1111 | ||
|
|
8bf90c390c | ||
|
|
662ede640a | ||
|
|
a09d7eae95 | ||
|
|
ddab4a8dee | ||
|
|
bec65faaab | ||
|
|
e8eb5d48e6 | ||
|
|
f68e32d99b | ||
|
|
1f27a26de4 | ||
|
|
fa718299c1 | ||
|
|
20daca1fdb | ||
|
|
4f9d806a02 | ||
|
|
cea5c718be | ||
|
|
b581cf61d2 | ||
|
|
2219f59d5c | ||
|
|
eb663fcd02 | ||
|
|
9a9db5d559 | ||
|
|
f008ef429b | ||
|
|
31ddb57fbe | ||
|
|
28a82c6611 | ||
|
|
7b56acd83b | ||
|
|
580fdb46be | ||
|
|
9bba33213e | ||
|
|
f417cbfbe7 | ||
|
|
8503c24a8a | ||
|
|
51d330e514 | ||
|
|
eedeb1bc17 | ||
|
|
cfeba93180 | ||
|
|
c36c8b321f | ||
|
|
6c77443253 | ||
|
|
38723aa3bc | ||
|
|
88548360b6 | ||
|
|
1f116e79f7 | ||
|
|
c48dea7caa | ||
|
|
fe852477f0 | ||
|
|
fb10737c1c | ||
|
|
a5f75f9d72 | ||
|
|
0c701f35f3 | ||
|
|
afa1e64276 | ||
|
|
4df17f4bf3 | ||
|
|
28f835fe17 | ||
|
|
73a57bd1a4 | ||
|
|
15a069f278 | ||
|
|
7e3ee34ef3 | ||
|
|
7f7536c466 | ||
|
|
6540d74930 | ||
|
|
c8559883e5 | ||
|
|
eba36e3313 | ||
|
|
074b35652d | ||
|
|
81f766cd54 | ||
|
|
0fe76d257d | ||
|
|
c1c6ca1376 | ||
|
|
d38e405c6a | ||
|
|
c4ebcfcf9c | ||
|
|
e122ca4739 | ||
|
|
f0ddac0a94 | ||
|
|
425fed358f | ||
|
|
458abe0679 | ||
|
|
ba3e3273e4 | ||
|
|
a861646d76 | ||
|
|
3210178aa3 | ||
|
|
afe7b2e442 | ||
|
|
dde17d4d68 | ||
|
|
53cd5dab02 | ||
|
|
093a7923a1 | ||
|
|
ebf59fda22 | ||
|
|
e983de6acf | ||
|
|
5b85bdd953 | ||
|
|
e9d7970f9f | ||
|
|
5b01a1f9dc | ||
|
|
f48ebec022 | ||
|
|
10fae3fde1 | ||
|
|
7bc6fa4feb | ||
|
|
a6ed0a5455 | ||
|
|
864f996e99 | ||
|
|
c96eb69f3b | ||
|
|
15cb0a59b3 | ||
|
|
1825cea40f | ||
|
|
bbac5c7ecf | ||
|
|
80235a16fb | ||
|
|
006cf16f41 | ||
|
|
0a36ae78e5 | ||
|
|
1345010686 | ||
|
|
dc4371d55a | ||
|
|
641f502473 | ||
|
|
ba9b33b4a4 | ||
|
|
623e32ea23 | ||
|
|
1c865a0a2f | ||
|
|
683bc49c23 | ||
|
|
86a70d6632 | ||
|
|
15cfb9fb23 | ||
|
|
57ccc553fb | ||
|
|
f5e6c1a83b | ||
|
|
dc9ce837af | ||
|
|
a086dde98e | ||
|
|
4eeb6d45c8 | ||
|
|
863a362e89 | ||
|
|
d89d67e434 | ||
|
|
7f0d841130 | ||
|
|
2a3700fc54 | ||
|
|
95a1b28b5a | ||
|
|
700608460e | ||
|
|
ad03d7db53 | ||
|
|
380b9cccd8 | ||
|
|
86a6fb5173 | ||
|
|
3210b80a4d | ||
|
|
2e34d88d94 | ||
|
|
738c74d1c4 | ||
|
|
fb540ebef9 | ||
|
|
4ebba1f54e | ||
|
|
dc4f4e1d3a | ||
|
|
81d2b12515 | ||
|
|
07c8a48386 | ||
|
|
a08f6efd86 | ||
|
|
d58f359c19 | ||
|
|
0cd1a5f8b6 | ||
|
|
19b881d526 | ||
|
|
2e68444755 | ||
|
|
c59c5017a4 | ||
|
|
15ed4a6063 | ||
|
|
6420fc1d66 | ||
|
|
3b9f68828f | ||
|
|
49f0baba92 | ||
|
|
4af1e44b51 | ||
|
|
f0fc82fd7a | ||
|
|
bbd314e042 | ||
|
|
e1cff24d34 | ||
|
|
f8d69f35f0 | ||
|
|
14633772d5 | ||
|
|
be4cb14a9a | ||
|
|
b8b18a8d83 | ||
|
|
248c81c973 | ||
|
|
4a9e95827c | ||
|
|
a9a2704ae1 | ||
|
|
f1c31a2fc2 | ||
|
|
470e26ab52 | ||
|
|
cb85fe4e3b | ||
|
|
eda549025c | ||
|
|
ae393104e0 | ||
|
|
52c7d2d300 | ||
|
|
e06387be2a | ||
|
|
759319dbdc | ||
|
|
73bd98e0f4 | ||
|
|
9e3797c05c | ||
|
|
f31c69a557 | ||
|
|
648560c308 | ||
|
|
bbb747beb8 | ||
|
|
281d99fa54 | ||
|
|
7c574a3897 | ||
|
|
d8add2f6d8 | ||
|
|
ad12376037 | ||
|
|
ae07789d4f | ||
|
|
a079b0236f | ||
|
|
bb135be01a | ||
|
|
41aca36bd7 | ||
|
|
ffbd9907a2 | ||
|
|
8c9fe3b2ff | ||
|
|
66797558c7 | ||
|
|
28264a8790 | ||
|
|
d489b035d6 | ||
|
|
0e752033f2 | ||
|
|
548f1ed2f3 | ||
|
|
e7cfe9170b | ||
|
|
e670ddddd9 | ||
|
|
89ed9f6a27 | ||
|
|
72373eb793 | ||
|
|
6354902950 | ||
|
|
807e3f9402 | ||
|
|
8dd088de9d | ||
|
|
b354f7d59c | ||
|
|
4cd7386646 | ||
|
|
1fb946a678 | ||
|
|
7c40a235ce | ||
|
|
ef5cbcd32f | ||
|
|
b7de39d877 | ||
|
|
8b8b780d33 | ||
|
|
4e30569d5c | ||
|
|
436f6308b0 | ||
|
|
aa8e12c5c7 | ||
|
|
c5c66c99eb | ||
|
|
516a582845 | ||
|
|
d95d363af9 | ||
|
|
bcb9f04566 | ||
|
|
b3ada7a5d1 | ||
|
|
c3cc59ed4e | ||
|
|
05e1da7678 | ||
|
|
870f25b5c7 | ||
|
|
833c314afd | ||
|
|
97d6112582 | ||
|
|
afa46bf747 | ||
|
|
33bef7bd93 | ||
|
|
0e55453f3d | ||
|
|
b228a9540a | ||
|
|
9f38ff6e20 | ||
|
|
d0eeb0fdb3 | ||
|
|
4f489c91d4 | ||
|
|
ef5e2fe76c | ||
|
|
859ceac472 | ||
|
|
107a0b5a1b | ||
|
|
01b4da8480 | ||
|
|
5ff0aba078 | ||
|
|
f59151289f | ||
|
|
c2e1b97e5a | ||
|
|
e011ba2fd2 | ||
|
|
c0db5b97b2 | ||
|
|
8c9fbc542b | ||
|
|
136d2cf216 | ||
|
|
2ffc8fe59d | ||
|
|
31bb047dac | ||
|
|
d4f7261882 | ||
|
|
a632405423 | ||
|
|
8c5af5d8e0 | ||
|
|
b7ba455ca7 | ||
|
|
b56258e209 | ||
|
|
250c2fb7f6 | ||
|
|
394694bc4c | ||
|
|
2b205bf5bd | ||
|
|
0ba65db768 | ||
|
|
97edf77ab7 | ||
|
|
f0b1551530 | ||
|
|
a6c46ea7d4 | ||
|
|
58892d4994 | ||
|
|
fffadc5f4f | ||
|
|
58d4a56663 | ||
|
|
c74f435bc6 | ||
|
|
5a245fb819 | ||
|
|
429df53573 | ||
|
|
31b07f887d | ||
|
|
aa08ee93ab | ||
|
|
b6e47b6f6d | ||
|
|
a83a8213e1 | ||
|
|
8d43865e84 | ||
|
|
591a2fe4b8 | ||
|
|
1c842c9ac5 | ||
|
|
04ea69db9d | ||
|
|
639868dc8b | ||
|
|
1b0389c1b5 | ||
|
|
07932329a0 | ||
|
|
a2173b3137 | ||
|
|
c34a2a623e | ||
|
|
db750d9289 | ||
|
|
6feafeb2d5 | ||
|
|
49d9e5eb2d | ||
|
|
9e723d44df | ||
|
|
9583aae73b | ||
|
|
8516f9f974 | ||
|
|
894199b61e | ||
|
|
e896f301d2 | ||
|
|
fb129e83a2 | ||
|
|
c253ef6fb4 | ||
|
|
108073b6e1 | ||
|
|
2ab04b1fdf | ||
|
|
b6ed4a3f69 | ||
|
|
85d8824bb6 | ||
|
|
214d073361 | ||
|
|
9f77082a99 | ||
|
|
2745dcf447 | ||
|
|
3f4e9f1020 | ||
|
|
68a62adca6 | ||
|
|
ea80e01c50 | ||
|
|
82018a1ecb | ||
|
|
f1e34ce39a | ||
|
|
a48ae3f16a | ||
|
|
846f8e58f2 | ||
|
|
1a55efd4e5 | ||
|
|
cabd25636a | ||
|
|
ff43003921 | ||
|
|
a841910406 | ||
|
|
73152a00ef | ||
|
|
4523624cb0 | ||
|
|
a6e33aeec1 | ||
|
|
ff29d5b20a | ||
|
|
72d5dcb8c6 | ||
|
|
c4f14ec849 | ||
|
|
376ae390b2 | ||
|
|
e2aa5480cd | ||
|
|
daf4efe963 | ||
|
|
cd77d1850e | ||
|
|
67bed03411 | ||
|
|
c9f7cdc5c3 | ||
|
|
99616f3edc | ||
|
|
7339d50d94 | ||
|
|
f0a46d6ca1 | ||
|
|
6dfe35d6b7 | ||
|
|
1c5cef936e | ||
|
|
68f45dd7dc | ||
|
|
7a3ff65b05 | ||
|
|
7e5911d0e0 | ||
|
|
f19110725e | ||
|
|
6a97837cd6 | ||
|
|
68116da966 | ||
|
|
c0a13151a4 | ||
|
|
3941ebdb40 | ||
|
|
363f3e83b7 | ||
|
|
7281bc5679 | ||
|
|
63133acc77 | ||
|
|
d60a5f8674 | ||
|
|
9d2bf27936 | ||
|
|
34270f1f5c | ||
|
|
ba642ab075 | ||
|
|
9bd4a57cad | ||
|
|
f85b937234 | ||
|
|
d98cdf2b9b | ||
|
|
90746aa9d5 | ||
|
|
2da911fb50 | ||
|
|
dde3407fb0 | ||
|
|
73a40ebd74 | ||
|
|
101474dfad | ||
|
|
21477cf630 | ||
|
|
ebf0ceeb90 | ||
|
|
08bef75035 | ||
|
|
a17c531340 | ||
|
|
3e6511f0e8 | ||
|
|
ba6e35bbb3 | ||
|
|
b2abbf1ff1 | ||
|
|
f84b719e22 | ||
|
|
e1f58537d5 | ||
|
|
ad26aec066 | ||
|
|
2ab995d8c9 | ||
|
|
5e2c3079fc | ||
|
|
09476108c5 | ||
|
|
ded2606d17 | ||
|
|
18cee4fcd5 | ||
|
|
aec2ea5574 | ||
|
|
240bfed070 | ||
|
|
76a8e16958 | ||
|
|
77353ec8c6 | ||
|
|
371ba26f51 | ||
|
|
9eb5d3e6f7 | ||
|
|
1ca406c475 | ||
|
|
68ee500d67 | ||
|
|
67783fc6b7 | ||
|
|
ee78a80307 | ||
|
|
a004108702 | ||
|
|
78819f9420 | ||
|
|
4ec678f71f | ||
|
|
340436d757 | ||
|
|
715d96f823 | ||
|
|
3a196d6809 | ||
|
|
03a10f569c | ||
|
|
83d993321f | ||
|
|
4fe1a52d23 | ||
|
|
22e8192b58 | ||
|
|
bedd986d45 | ||
|
|
7308a43c5f | ||
|
|
faaf93ffc8 | ||
|
|
1ac149adae | ||
|
|
91e0c17b2f | ||
|
|
e3ae303a46 | ||
|
|
4b2ff7d52c | ||
|
|
453ed1447b | ||
|
|
9f6c7847ed | ||
|
|
820a62c0f9 | ||
|
|
1b9158f5b9 | ||
|
|
e39b90c625 | ||
|
|
5de8e48764 | ||
|
|
a1b62e52de | ||
|
|
5a505ef876 | ||
|
|
63fa2d1862 | ||
|
|
a93fc433f6 | ||
|
|
421a8e0612 | ||
|
|
80182c54c3 | ||
|
|
03b10947a6 | ||
|
|
326b7c331d | ||
|
|
0a373796fc | ||
|
|
7ca0bdb4a4 | ||
|
|
21d0b2ea63 | ||
|
|
65aa3b2594 | ||
|
|
bfc35babbc | ||
|
|
304f0aa39a | ||
|
|
4ca42b1cf1 | ||
|
|
4df4b5a8da | ||
|
|
00a01c6cb4 | ||
|
|
fced35267b | ||
|
|
25e0b1f7fc | ||
|
|
4a306a47b8 | ||
|
|
dd530fa5f8 | ||
|
|
910dcaa060 | ||
|
|
b545ea7c66 | ||
|
|
4e4e757d5f | ||
|
|
649f97292e | ||
|
|
6da5e87cd3 | ||
|
|
abcc1203e6 | ||
|
|
f0167313a7 | ||
|
|
f730295b35 | ||
|
|
e9d7f88be2 | ||
|
|
c55d690cff | ||
|
|
11c5062c21 | ||
|
|
795b8b6899 | ||
|
|
36b3c926db | ||
|
|
1a3412c001 | ||
|
|
5a2ffe8bc1 | ||
|
|
859d0be44c | ||
|
|
9c13fc8fb5 | ||
|
|
21597d27bd | ||
|
|
6f5d381a08 | ||
|
|
0f9e4edc68 | ||
|
|
e3f7bee75b | ||
|
|
115cc55502 | ||
|
|
c5c40b48b1 | ||
|
|
1d7f026fd7 | ||
|
|
379e84f1d8 | ||
|
|
314f48080b | ||
|
|
a6f4e71248 | ||
|
|
6590d27817 | ||
|
|
8f9acfcc3a | ||
|
|
b286b7ffdd | ||
|
|
0d9ebc5599 | ||
|
|
2ff29a7321 | ||
|
|
c9242796ac | ||
|
|
1af46e435a | ||
|
|
adec54848f | ||
|
|
9e3d79085f | ||
|
|
396302cf9b | ||
|
|
be7b528ee1 | ||
|
|
526f51a342 | ||
|
|
76ca25a807 | ||
|
|
ff7714640f | ||
|
|
99a63317f4 | ||
|
|
b97028a3b5 | ||
|
|
cc0bcebd14 | ||
|
|
f8533eb570 | ||
|
|
6f792ffec9 | ||
|
|
e1344e7c91 | ||
|
|
cf6fef85c0 | ||
|
|
3a05f0d84a | ||
|
|
0876b4311b | ||
|
|
19ae735d2c | ||
|
|
61f05e52d4 | ||
|
|
1b3740bbc6 | ||
|
|
33b9a11208 | ||
|
|
9cf5269c33 | ||
|
|
421e1d01bf | ||
|
|
d213a094da | ||
|
|
6d45383ac6 | ||
|
|
89e6903e2e | ||
|
|
d627fa71c9 | ||
|
|
041933b089 | ||
|
|
b4d66b4f34 | ||
|
|
a34a101c22 | ||
|
|
ffeef5d5b7 | ||
|
|
d2bb733d94 | ||
|
|
f4c0c52f35 | ||
|
|
fd31fab0fd | ||
|
|
e1ea667eb1 | ||
|
|
c93f635a9d | ||
|
|
2ffc8c18d9 | ||
|
|
3685b70c2f | ||
|
|
ffcf9922c5 | ||
|
|
c4c44297a2 | ||
|
|
ff052e6769 | ||
|
|
2d97f31538 | ||
|
|
1c70a66a17 | ||
|
|
57e97d5322 | ||
|
|
d893ca4a0d | ||
|
|
6178dd0a7f | ||
|
|
13a599628b | ||
|
|
53e0a28a1a | ||
|
|
2acc622e70 | ||
|
|
3c8e4f0248 | ||
|
|
7904ab66e8 | ||
|
|
35fd8f69ab | ||
|
|
ae29c837ff | ||
|
|
6d562c2c5f | ||
|
|
6b5d432ab3 | ||
|
|
cfd7c2aac4 | ||
|
|
3c89983ccf | ||
|
|
41c6bbf3f0 | ||
|
|
6aa2275f2e | ||
|
|
09efe7d54a | ||
|
|
47e6fdacef | ||
|
|
af9eb0cb06 | ||
|
|
4ab6d83c16 | ||
|
|
393823bad9 | ||
|
|
151e510e2c | ||
|
|
c8e2d48f3a | ||
|
|
17c6351a8c | ||
|
|
b8c35dfc88 | ||
|
|
445cdb08a6 | ||
|
|
a13d4e5a86 | ||
|
|
019fd3dc03 | ||
|
|
77baee03db | ||
|
|
e41c3d9929 | ||
|
|
d55d452744 | ||
|
|
a9573ea957 | ||
|
|
5a1d0be7b0 | ||
|
|
266f8c3038 | ||
|
|
86b49483c3 | ||
|
|
b0e3bd2fb5 | ||
|
|
8e24cb6000 | ||
|
|
20510ff9c9 | ||
|
|
387f17990f | ||
|
|
1f2e8c1c6b | ||
|
|
c195fd2bc2 | ||
|
|
1ff85c7bea | ||
|
|
69b358867a | ||
|
|
5f5f5287bd | ||
|
|
5d7461c5cc | ||
|
|
65eff15674 | ||
|
|
ac02f25e84 | ||
|
|
435322c689 | ||
|
|
9e91f4f13e | ||
|
|
63a1e7f299 | ||
|
|
33d359b3e7 | ||
|
|
6250a39be6 | ||
|
|
0d7fa150f0 | ||
|
|
5a79f120e4 | ||
|
|
7b2110fcf2 | ||
|
|
994e918f42 | ||
|
|
3f37375677 | ||
|
|
551cf8e162 | ||
|
|
36b5dd1afb | ||
|
|
e1ea02329e | ||
|
|
42c4f6c346 | ||
|
|
9049807407 | ||
|
|
93dd7a0704 | ||
|
|
a322dd4415 | ||
|
|
d45d5c4c8d | ||
|
|
f2db545457 | ||
|
|
884ffd2018 | ||
|
|
fdd3a63f84 | ||
|
|
c003834bd8 | ||
|
|
13d9908fd6 | ||
|
|
b36a765fdb | ||
|
|
95a192b138 | ||
|
|
f3ba4c82f7 | ||
|
|
c867f0009e | ||
|
|
b114d8a5c2 | ||
|
|
02867d8d95 | ||
|
|
5a68088e39 | ||
|
|
9d5fd44d4e | ||
|
|
b7aa15eac1 | ||
|
|
eff64e4e46 | ||
|
|
c8a322dbdb | ||
|
|
660232bbf5 | ||
|
|
6dee02353b | ||
|
|
b7dcdb78f8 | ||
|
|
e74be58556 | ||
|
|
48161b9e95 | ||
|
|
5cfc2d4a12 | ||
|
|
71c3518945 | ||
|
|
e2beaeab7d | ||
|
|
49d7dbb880 | ||
|
|
63d650fdcc | ||
|
|
cd9bf2880e | ||
|
|
10cd51cba7 | ||
|
|
0d4eec44c7 | ||
|
|
cbf2035e95 | ||
|
|
2288cffae4 | ||
|
|
0d34eaa5d9 | ||
|
|
3b7ab4d4f2 | ||
|
|
ec57941720 | ||
|
|
f9d6f15b5c | ||
|
|
b199e8aef4 | ||
|
|
4537e5185d | ||
|
|
2569f0d8e9 | ||
|
|
27a174b872 | ||
|
|
3ea84b4c77 | ||
|
|
cd6ed03e4d | ||
|
|
48dc29dc14 | ||
|
|
fb62c5b5da | ||
|
|
86c8b11d7a | ||
|
|
8d9366821b | ||
|
|
948ee44f79 | ||
|
|
380281343d | ||
|
|
6aefcdc8d7 | ||
|
|
7bf40583a7 | ||
|
|
06c6b23539 | ||
|
|
1a2b183737 | ||
|
|
a6b0a82a17 | ||
|
|
8212249967 | ||
|
|
6031423d0e | ||
|
|
a7f5cba449 | ||
|
|
86598c9003 | ||
|
|
ba74283b8a | ||
|
|
93bad49662 | ||
|
|
dc0326d5eb | ||
|
|
b9d4dcfe4a | ||
|
|
9dc788d324 | ||
|
|
97122d1467 | ||
|
|
a88ebdfa89 | ||
|
|
516fcba5ed | ||
|
|
5d06055af8 | ||
|
|
94d4a23fd2 | ||
|
|
767a5c4644 | ||
|
|
6e8891d546 | ||
|
|
aa921f32f9 | ||
|
|
9bec0920a3 | ||
|
|
73578c3eab | ||
|
|
4df04d2d07 | ||
|
|
e09880dc34 | ||
|
|
12c7506828 | ||
|
|
37d817af6a | ||
|
|
5a195d87e4 | ||
|
|
f48462268d | ||
|
|
4b89a4e86f | ||
|
|
2318f596dd | ||
|
|
fef4cd36fb |
@@ -1,69 +0,0 @@
|
||||
// .commitlintrc.js
|
||||
/** @type {import('cz-git').UserConfig} */
|
||||
module.exports = {
|
||||
rules: {
|
||||
// @see: https://commitlint.js.org/#/reference-rules
|
||||
},
|
||||
prompt: {
|
||||
alias: { fd: 'docs: fix typos' },
|
||||
messages: {
|
||||
type: '选择你要提交的类型 :',
|
||||
scope: '选择一个提交范围(可选):',
|
||||
customScope: '请输入自定义的提交范围 :',
|
||||
subject: '填写简短精炼的变更描述 :\n',
|
||||
body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
|
||||
breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
|
||||
footerPrefixsSelect: '选择关联issue前缀(可选):',
|
||||
customFooterPrefixs: '输入自定义issue前缀 :',
|
||||
footer: '列举关联issue (可选) 例如: #31, #I3244 :\n',
|
||||
confirmCommit: '是否提交或修改commit ?'
|
||||
},
|
||||
types: [
|
||||
{ value: 'feat', name: 'feat: ✨ 新增功能 | A new feature', emoji: ':sparkles:' },
|
||||
{ value: 'fix', name: 'fix: 🐛 修复缺陷 | A bug fix', emoji: ':bug:' },
|
||||
{ value: 'docs', name: 'docs: 📝 文档更新 | Documentation only changes', emoji: ':memo:' },
|
||||
{ value: 'style', name: 'style: 💄 代码格式 | Changes that do not affect the meaning of the code', emoji: ':lipstick:' },
|
||||
{ value: 'refactor', name: 'refactor: ♻️ 代码重构 | A code change that neither fixes a bug nor adds a feature', emoji: ':recycle:' },
|
||||
{ value: 'perf', name: 'perf: ⚡️ 性能提升 | A code change that improves performance', emoji: ':zap:' },
|
||||
{ value: 'test', name: 'test: ✅ 测试相关 | Adding missing tests or correcting existing tests', emoji: ':white_check_mark:' },
|
||||
{ value: 'build', name: 'build: 📦️ 构建相关 | Changes that affect the build system or external dependencies', emoji: ':package:' },
|
||||
{ value: 'ci', name: 'ci: 🎡 持续集成 | Changes to our CI configuration files and scripts', emoji: ':ferris_wheel:' },
|
||||
{ value: 'revert', name: 'revert: ⏪️ 回退代码 | Revert to a commit', emoji: ':rewind:' },
|
||||
{ value: 'chore', name: 'chore: 🔨 其他修改 | Other changes that do not modify src or test files', emoji: ':hammer:' },
|
||||
],
|
||||
useEmoji: false,
|
||||
emojiAlign: 'center',
|
||||
themeColorCode: '',
|
||||
scopes: [],
|
||||
allowCustomScopes: true,
|
||||
allowEmptyScopes: true,
|
||||
customScopesAlign: 'bottom',
|
||||
customScopesAlias: 'custom',
|
||||
emptyScopesAlias: 'empty',
|
||||
upperCaseSubject: false,
|
||||
markBreakingChangeMode: true,
|
||||
allowBreakingChanges: ['feat', 'fix'],
|
||||
breaklineNumber: 100,
|
||||
breaklineChar: '|',
|
||||
skipQuestions: [],
|
||||
issuePrefixs: [
|
||||
// 如果使用 gitee 作为开发管理
|
||||
{ value: 'link', name: 'link: 链接 ISSUES 进行中' },
|
||||
{ value: 'closed', name: 'closed: 标记 ISSUES 已完成' }
|
||||
],
|
||||
customIssuePrefixsAlign: 'top',
|
||||
emptyIssuePrefixsAlias: 'skip',
|
||||
customIssuePrefixsAlias: 'custom',
|
||||
allowCustomIssuePrefixs: true,
|
||||
allowEmptyIssuePrefixs: true,
|
||||
confirmColorize: true,
|
||||
maxHeaderLength: Infinity,
|
||||
maxSubjectLength: Infinity,
|
||||
minSubjectLength: 0,
|
||||
scopeOverrides: undefined,
|
||||
defaultBody: '',
|
||||
defaultIssues: '',
|
||||
defaultScope: '',
|
||||
defaultSubject: ''
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"EditorConfig.EditorConfig",
|
||||
"mikestead.dotenv",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"stylelint.vscode-stylelint",
|
||||
"Vue.volar",
|
||||
"antfu.unocss"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"eslint.useFlatConfig": true,
|
||||
"prettier.enable": false,
|
||||
"editor.formatOnSave": false,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.fixAll.stylelint": "explicit",
|
||||
"source.organizeImports": "never"
|
||||
},
|
||||
"stylelint.validate": [
|
||||
"css",
|
||||
"postcss",
|
||||
"scss",
|
||||
"vue"
|
||||
],
|
||||
"eslint.validate": [
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"typescript",
|
||||
"typescriptreact",
|
||||
"vue",
|
||||
"html",
|
||||
"markdown",
|
||||
"json",
|
||||
"jsonc",
|
||||
"yaml"
|
||||
],
|
||||
"typescript.tsdk": "node_modules/typescript/lib"
|
||||
}
|
||||
@@ -1,9 +1,15 @@
|
||||
# 应用配置面板
|
||||
VITE_APP_SETTING = true
|
||||
# 页面标题
|
||||
VITE_APP_TITLE = Fantastic-admin 基础版
|
||||
# 接口请求地址,会设置到 axios 的 baseURL 参数上
|
||||
VITE_APP_API_BASEURL = /
|
||||
# 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
|
||||
VITE_APP_DEBUG_TOOL =
|
||||
# 是否禁用开发者工具,可防止被调试
|
||||
VITE_APP_DISABLE_DEVTOOL = false
|
||||
|
||||
# 是否开启代理
|
||||
VITE_OPEN_PROXY = true
|
||||
VITE_OPEN_PROXY = false
|
||||
# 是否开启开发者工具
|
||||
VITE_OPEN_DEVTOOLS = true
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
NODE_ENV = production
|
||||
|
||||
# 应用配置面板
|
||||
VITE_APP_SETTING = true
|
||||
# 页面标题
|
||||
VITE_APP_TITLE = 页面标题
|
||||
VITE_APP_TITLE = Fantastic-admin 基础版
|
||||
# 接口请求地址,会设置到 axios 的 baseURL 参数上
|
||||
VITE_APP_API_BASEURL = /
|
||||
# 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
|
||||
VITE_APP_DEBUG_TOOL =
|
||||
# 是否禁用开发者工具,可防止被调试
|
||||
VITE_APP_DISABLE_DEVTOOL = true
|
||||
|
||||
# 是否在打包时启用 Mock
|
||||
VITE_BUILD_MOCK = false
|
||||
VITE_BUILD_MOCK = true
|
||||
# 是否在打包时生成 sourcemap
|
||||
VITE_BUILD_SOURCEMAP = false
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS = gzip,brotli
|
||||
# 是否在打包后生成存档,支持 zip 和 tar
|
||||
VITE_BUILD_ARCHIVE =
|
||||
@@ -1,15 +0,0 @@
|
||||
NODE_ENV = production
|
||||
|
||||
# 页面标题
|
||||
VITE_APP_TITLE = 页面标题(test)
|
||||
# 接口请求地址,会设置到 axios 的 baseURL 参数上
|
||||
VITE_APP_API_BASEURL = /
|
||||
# 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
|
||||
VITE_APP_DEBUG_TOOL =
|
||||
|
||||
# 是否在打包时启用 Mock
|
||||
VITE_BUILD_MOCK = true
|
||||
# 是否在打包时生成 sourcemap
|
||||
VITE_BUILD_SOURCEMAP = true
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS =
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"extends": "@antfu",
|
||||
"rules": {
|
||||
"curly": ["error", "all"]
|
||||
}
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16.x
|
||||
|
||||
- run: npx changelogithub # or changelogithub@0.12 if ensure the stable result
|
||||
env:
|
||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||
|
||||
upload-archive:
|
||||
needs: release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Get Release
|
||||
id: last_release
|
||||
uses: joutvhu/get-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
latest: true
|
||||
|
||||
- name: Create Archive
|
||||
uses: thedoctor0/zip-release@main
|
||||
with:
|
||||
type: 'zip'
|
||||
filename: fantastic-admin.${{ steps.last_release.outputs.tag_name }}.zip
|
||||
exclusions: '/.git/* /.github/*'
|
||||
|
||||
- name: Upload Archive To Release
|
||||
uses: xresloader/upload-to-github-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
release_id: ${{ steps.last_release.outputs.id }}
|
||||
draft: false
|
||||
file: fantastic-admin.${{ steps.last_release.outputs.tag_name }}.zip
|
||||
|
||||
upload-archive-example:
|
||||
needs: release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: example
|
||||
|
||||
- name: Get Release
|
||||
id: last_release
|
||||
uses: joutvhu/get-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
latest: true
|
||||
|
||||
- name: Create Archive
|
||||
uses: thedoctor0/zip-release@main
|
||||
with:
|
||||
type: 'zip'
|
||||
filename: fantastic-admin.example.${{ steps.last_release.outputs.tag_name }}.zip
|
||||
exclusions: '/.git/* /.github/*'
|
||||
|
||||
- name: Upload Archive To Release
|
||||
uses: xresloader/upload-to-github-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
release_id: ${{ steps.last_release.outputs.id }}
|
||||
draft: false
|
||||
file: fantastic-admin.example.${{ steps.last_release.outputs.tag_name }}.zip
|
||||
@@ -1,23 +0,0 @@
|
||||
name: repo-sync
|
||||
|
||||
on:
|
||||
# 每天自动同步
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
# 手动触发部署
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
sync-to-gitee:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Sync to Gitee
|
||||
uses: wearerequired/git-mirror-action@master
|
||||
env:
|
||||
# 注意在 Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY
|
||||
SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
|
||||
with:
|
||||
# 注意替换为你的 GitHub 源仓库地址
|
||||
source-repo: git@github.com:hooray/fantastic-admin.git
|
||||
# 注意替换为你的 Gitee 目标仓库地址
|
||||
destination-repo: git@gitee.com:hooray/fantastic-admin.git
|
||||
@@ -5,6 +5,3 @@ dist-ssr
|
||||
*.local
|
||||
.eslintcache
|
||||
.stylelintcache
|
||||
src/assets/sprites/*.*
|
||||
!src/assets/sprites/.gitkeep
|
||||
public/icons
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{
|
||||
"src/**/*.{js,jsx,ts,tsx}": "eslint --cache --fix",
|
||||
"src/**/*.{css,scss}": "stylelint --cache --fix --allow-empty-input",
|
||||
"src/**/*.vue": ["eslint --cache --fix", "stylelint --cache --fix --allow-empty-input"]
|
||||
"*.{ts,tsx,vue}": "eslint --cache --fix",
|
||||
"*.{css,scss,vue}": "stylelint --cache --fix"
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
22
|
||||
@@ -1,2 +1,4 @@
|
||||
shamefully-hoist=true
|
||||
strict-peer-dependencies=false
|
||||
engine-strict=true
|
||||
verify-deps-before-run=prompt
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
dist/
|
||||
node_modules/
|
||||
src/assets/sprites/
|
||||
@@ -1,20 +0,0 @@
|
||||
{
|
||||
"extends": [
|
||||
"stylelint-config-standard",
|
||||
"stylelint-config-standard-scss",
|
||||
"stylelint-config-standard-vue/scss"
|
||||
],
|
||||
"plugins": [
|
||||
"stylelint-scss"
|
||||
],
|
||||
"rules": {
|
||||
"at-rule-no-unknown": null,
|
||||
"no-descending-specificity": null,
|
||||
"property-no-unknown": null,
|
||||
"font-family-no-missing-generic-family-keyword": null,
|
||||
"selector-class-pattern": null,
|
||||
"max-line-length": null,
|
||||
"scss/double-slash-comment-empty-line-before": null,
|
||||
"scss/no-global-function-names": null
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,6 @@
|
||||
"dbaeumer.vscode-eslint",
|
||||
"stylelint.vscode-stylelint",
|
||||
"Vue.volar",
|
||||
"Vue.vscode-typescript-vue-plugin",
|
||||
"antfu.unocss"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,7 +1,30 @@
|
||||
{
|
||||
"npm.packageManager": "pnpm",
|
||||
"js/ts.tsdk.path": "node_modules/typescript/lib",
|
||||
"prettier.enable": false,
|
||||
"editor.formatOnSave": false,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": true,
|
||||
"source.fixAll.stylelint": true
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.fixAll.stylelint": "explicit",
|
||||
"source.organizeImports": "never"
|
||||
},
|
||||
"stylelint.validate": ["css", "scss", "vue"]
|
||||
"eslint.useFlatConfig": true,
|
||||
"eslint.validate": [
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"typescript",
|
||||
"typescriptreact",
|
||||
"vue",
|
||||
"html",
|
||||
"markdown",
|
||||
"json",
|
||||
"jsonc",
|
||||
"yaml"
|
||||
],
|
||||
"stylelint.validate": [
|
||||
"css",
|
||||
"postcss",
|
||||
"scss",
|
||||
"vue"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 fantastic-template
|
||||
Copyright (c) 2020 fantastic-admin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
<p align="center">
|
||||
<img src="https://hooray.gitee.io/fantastic-admin/logo.png" width="200" height="200" />
|
||||
</p>
|
||||
|
||||
<h1 align="center">Fantastic-admin</h1>
|
||||
|
||||
<p align="center">一款<b>开箱即用</b>的 Vue 中后台管理系统框架</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://hooray.gitee.io/fantastic-admin/" target="_blank">官网</a>
|
||||
( <a href="https://hooray.github.io/fantastic-admin" target="_blank">备用</a> )
|
||||
<span> | </span>
|
||||
演示
|
||||
( <a href="https://hooray.gitee.io/fantastic-admin-example" target="_blank">基础版</a>
|
||||
<a href="https://hooray.gitee.io/fantastic-admin-pro-example" target="_blank">专业版</a> )
|
||||
<span> | </span>
|
||||
<a href="https://hooray.gitee.io/fantastic-admin/support.html" target="_blank">技术支持</a>
|
||||
<span> | </span>
|
||||
<a href="https://hooray.gitee.io/fantastic-admin/buy.html" target="_blank">购买</a>
|
||||
<p>
|
||||
|
||||
## 特点
|
||||
|
||||
- 丰富的布局与主题,覆盖市面上各种中后台应用场景,兼容PC、平板和移动端
|
||||
- 提供系统配置文件,轻松实现个性化定制
|
||||
- 精心设计的动效,让每一处的动画都干净利落
|
||||
- 根据路由配置自动生成导航栏
|
||||
- 基于文件系统的路由
|
||||
- 支持全方位权限验证
|
||||
- 内置多级路由最佳缓存方案
|
||||
- 轻松实现国际化多语言适配
|
||||
- 提供接近于浏览器原生标签栏操作体验的标签页功能
|
||||
|
||||
## 分支说明
|
||||
|
||||
- `master` Vue3 版本框架源码分支,不含示例代码,可直接用于实际开发
|
||||
- `example` Vue3 版本演示源码分支,同线上演示站,包含大量示例,可用于参考学习
|
||||
- `vue2` Vue2 版本框架源码分支,不含示例代码,可直接用于实际开发(停止维护)
|
||||
- `vue2-example` Vue2 版本演示源码分支,包含大量示例,可用于参考学习(停止维护)
|
||||
|
||||
## 预览
|
||||
|
||||
> 预览截图为 Vue3 专业版
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://hooray.gitee.io/fantastic-admin/preview1.png" /></td>
|
||||
<td><img src="https://hooray.gitee.io/fantastic-admin/preview2.png" /></td>
|
||||
<td><img src="https://hooray.gitee.io/fantastic-admin/preview3.png" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://hooray.gitee.io/fantastic-admin/preview4.png" /></td>
|
||||
<td><img src="https://hooray.gitee.io/fantastic-admin/preview5.png" /></td>
|
||||
<td><img src="https://hooray.gitee.io/fantastic-admin/preview6.png" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## 支持
|
||||
|
||||
如果觉得 Fantastic-admin 这个框架不错,或者已经在使用了,希望你可以在 **Github** 或者 **Gitee(码云)** 帮我点个 ⭐ ,这将对我是极大的鼓励。
|
||||
|
||||
[](https://github.com/hooray/fantastic-admin/stargazers)
|
||||
|
||||
[](https://gitee.com/hooray/fantastic-admin/stargazers)
|
||||
|
||||
## 生态
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th colspan="3" align="center">
|
||||
<a href="https://hooray.gitee.io/fantastic-startkit/" target="_blank">Fantastic-startkit</a>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3" align="center">
|
||||
一款开箱即用的 Vue 项目启动套件
|
||||
</th>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th colspan="3" align="center">
|
||||
<a href="https://hooray.gitee.io/one-step-admin/" target="_blank">One-step-admin</a>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3" align="center">
|
||||
一款干啥都快人一步的 Vue 中后台管理系统框架
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://hooray.gitee.io/one-step-admin/preview1.png" /></td>
|
||||
<td><img src="https://hooray.gitee.io/one-step-admin/preview2.png" /></td>
|
||||
<td><img src="https://hooray.gitee.io/one-step-admin/preview3.png" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://hooray.gitee.io/one-step-admin/preview4.png" /></td>
|
||||
<td><img src="https://hooray.gitee.io/one-step-admin/preview5.png" /></td>
|
||||
<td><img src="https://hooray.gitee.io/one-step-admin/preview6.png" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://shadcn-vue.com/schema.json",
|
||||
"style": "default",
|
||||
"typescript": true,
|
||||
"tailwind": {
|
||||
"config": "tailwind.config.js",
|
||||
"css": "src/assets/index.css",
|
||||
"baseColor": "neutral",
|
||||
"cssVariables": true
|
||||
},
|
||||
"aliases": {
|
||||
"components": "@/ui/shadcn",
|
||||
"utils": "@/utils",
|
||||
"lib": "@/utils"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import antfu from '@antfu/eslint-config'
|
||||
|
||||
export default antfu(
|
||||
{
|
||||
unocss: true,
|
||||
ignores: [
|
||||
'public',
|
||||
'dist*',
|
||||
],
|
||||
},
|
||||
{
|
||||
rules: {
|
||||
'e18e/prefer-static-regex': 'off',
|
||||
'eslint-comments/no-unlimited-disable': 'off',
|
||||
'curly': ['error', 'all'],
|
||||
'ts/no-unused-expressions': ['error', {
|
||||
allowShortCircuit: true,
|
||||
allowTernary: true,
|
||||
}],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: [
|
||||
'src/**/*.vue',
|
||||
],
|
||||
rules: {
|
||||
'vue/block-order': ['error', {
|
||||
order: ['route', 'script', 'template', 'style'],
|
||||
}],
|
||||
},
|
||||
},
|
||||
)
|
||||
@@ -2,29 +2,23 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<link rel="icon" href="/favicon.svg" />
|
||||
<link rel="stylesheet" href="/browser_upgrade/index.css" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title><%= title %></title>
|
||||
<%- copyrightScript %>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, viewport-fit=cover"/>
|
||||
<meta http-equiv="Expires" content="0">
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Cache-control" content="no-cache">
|
||||
<meta http-equiv="Cache" content="no-cache">
|
||||
<title>%VITE_APP_TITLE%</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div class="fantastic-admin-home">
|
||||
<div class="loading">
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
<div class="text"><%= title %>载入中…</div>
|
||||
</div>
|
||||
<div id="browser-upgrade">
|
||||
<div class="title">为了您的体验,推荐使用以下浏览器</div>
|
||||
<div class="browsers">
|
||||
<a href="https://www.microsoft.com/edge" target="_blank" class="browser">
|
||||
<img class="browser-icon" src="/browser_upgrade/edge.png" />
|
||||
<div class="browser-name">Mircosoft Edge</div>
|
||||
<div class="browser-name">Microsoft Edge</div>
|
||||
</a>
|
||||
<a href="https://www.google.cn/chrome/" target="_blank" class="browser">
|
||||
<img class="browser-icon" src="/browser_upgrade/chrome.png" />
|
||||
@@ -33,8 +27,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%- loadingScript %>
|
||||
<script>
|
||||
if (!!window.ActiveXObject || 'ActiveXObject' in window) {
|
||||
document.getElementById('browser-upgrade').style.display = 'block'
|
||||
}
|
||||
</script>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
<%- devtoolScript %>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,204 @@
|
||||
<style>
|
||||
@keyframes rainbow {
|
||||
0% { --rainbow-color: #00a98e; }
|
||||
1.25% { --rainbow-color: #00a996; }
|
||||
2.5% { --rainbow-color: #00a99f; }
|
||||
3.75% { --rainbow-color: #00a9a7; }
|
||||
5% { --rainbow-color: #00a9b0; }
|
||||
6.25% { --rainbow-color: #00a9b8; }
|
||||
7.5% { --rainbow-color: #00a9c0; }
|
||||
8.75% { --rainbow-color: #00a8c7; }
|
||||
10% { --rainbow-color: #00a8cf; }
|
||||
11.25% { --rainbow-color: #00a7d5; }
|
||||
12.5% { --rainbow-color: #00a6dc; }
|
||||
13.75% { --rainbow-color: #00a6e2; }
|
||||
15% { --rainbow-color: #00a4e7; }
|
||||
16.25% { --rainbow-color: #00a3ec; }
|
||||
17.5% { --rainbow-color: #00a2f1; }
|
||||
18.75% { --rainbow-color: #00a0f4; }
|
||||
20% { --rainbow-color: #009ff7; }
|
||||
21.25% { --rainbow-color: #009dfa; }
|
||||
22.5% { --rainbow-color: #009bfc; }
|
||||
23.75% { --rainbow-color: #0098fd; }
|
||||
25% { --rainbow-color: #0096fd; }
|
||||
26.25% { --rainbow-color: #0093fd; }
|
||||
27.5% { --rainbow-color: #2e90fc; }
|
||||
28.75% { --rainbow-color: #4d8dfa; }
|
||||
30% { --rainbow-color: #638af8; }
|
||||
31.25% { --rainbow-color: #7587f5; }
|
||||
32.5% { --rainbow-color: #8583f1; }
|
||||
33.75% { --rainbow-color: #9280ed; }
|
||||
35% { --rainbow-color: #9f7ce9; }
|
||||
36.25% { --rainbow-color: #aa78e3; }
|
||||
37.5% { --rainbow-color: #b574dd; }
|
||||
38.75% { --rainbow-color: #be71d7; }
|
||||
40% { --rainbow-color: #c76dd1; }
|
||||
41.25% { --rainbow-color: #cf69c9; }
|
||||
42.5% { --rainbow-color: #d566c2; }
|
||||
43.75% { --rainbow-color: #dc63ba; }
|
||||
45% { --rainbow-color: #e160b3; }
|
||||
46.25% { --rainbow-color: #e65eab; }
|
||||
47.5% { --rainbow-color: #e95ca2; }
|
||||
48.75% { --rainbow-color: #ed5a9a; }
|
||||
50% { --rainbow-color: #ef5992; }
|
||||
51.25% { --rainbow-color: #f15989; }
|
||||
52.5% { --rainbow-color: #f25981; }
|
||||
53.75% { --rainbow-color: #f25a79; }
|
||||
55% { --rainbow-color: #f25c71; }
|
||||
56.25% { --rainbow-color: #f15e69; }
|
||||
57.5% { --rainbow-color: #ef6061; }
|
||||
58.75% { --rainbow-color: #ed635a; }
|
||||
60% { --rainbow-color: #eb6552; }
|
||||
61.25% { --rainbow-color: #e8694b; }
|
||||
62.5% { --rainbow-color: #e46c44; }
|
||||
63.75% { --rainbow-color: #e06f3d; }
|
||||
65% { --rainbow-color: #db7336; }
|
||||
66.25% { --rainbow-color: #d77630; }
|
||||
67.5% { --rainbow-color: #d17a2a; }
|
||||
68.75% { --rainbow-color: #cc7d24; }
|
||||
70% { --rainbow-color: #c6811e; }
|
||||
71.25% { --rainbow-color: #bf8418; }
|
||||
72.5% { --rainbow-color: #b98713; }
|
||||
73.75% { --rainbow-color: #b28a0f; }
|
||||
75% { --rainbow-color: #ab8d0c; }
|
||||
76.25% { --rainbow-color: #a3900b; }
|
||||
77.5% { --rainbow-color: #9c920d; }
|
||||
78.75% { --rainbow-color: #949510; }
|
||||
80% { --rainbow-color: #8b9715; }
|
||||
81.25% { --rainbow-color: #83991b; }
|
||||
82.5% { --rainbow-color: #7a9b21; }
|
||||
83.75% { --rainbow-color: #719d27; }
|
||||
85% { --rainbow-color: #679e2e; }
|
||||
86.25% { --rainbow-color: #5da035; }
|
||||
87.5% { --rainbow-color: #51a13c; }
|
||||
88.75% { --rainbow-color: #44a244; }
|
||||
90% { --rainbow-color: #34a44b; }
|
||||
91.25% { --rainbow-color: #1ba553; }
|
||||
92.5% { --rainbow-color: #00a65b; }
|
||||
93.75% { --rainbow-color: #00a663; }
|
||||
95% { --rainbow-color: #00a76c; }
|
||||
96.25% { --rainbow-color: #00a874; }
|
||||
97.5% { --rainbow-color: #00a87d; }
|
||||
98.75% { --rainbow-color: #00a985; }
|
||||
100% { --rainbow-color: #00a98e; }
|
||||
}
|
||||
|
||||
:root {
|
||||
--rainbow-color: #00a98e;
|
||||
animation: rainbow 20s linear infinite;
|
||||
}
|
||||
|
||||
.loading-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 10000;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: var(--rainbow-color);
|
||||
user-select: none;
|
||||
background-color: hsl(var(--background));
|
||||
}
|
||||
|
||||
.loading-container *::before,
|
||||
.loading-container *::after {
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.loading-container .loading {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.loading-container .loading .square {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.loading-container .loading .square::before {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
content: "";
|
||||
border: 3px solid var(--rainbow-color);
|
||||
border-radius: 15%;
|
||||
animation: square-to-dot-animation 2s linear infinite;
|
||||
}
|
||||
|
||||
.loading-container .loading .square:nth-child(1)::before {
|
||||
animation-delay: calc(150ms * 1);
|
||||
}
|
||||
|
||||
.loading-container .loading .square:nth-child(2)::before {
|
||||
animation-delay: calc(150ms * 2);
|
||||
}
|
||||
|
||||
.loading-container .loading .square:nth-child(3)::before {
|
||||
animation-delay: calc(150ms * 3);
|
||||
}
|
||||
|
||||
.loading-container .loading .square:nth-child(4)::before {
|
||||
animation-delay: calc(150ms * 4);
|
||||
}
|
||||
|
||||
@keyframes square-to-dot-animation {
|
||||
15%,
|
||||
25% {
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin: 5px;
|
||||
border-width: 5px;
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
||||
40% {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin: initial;
|
||||
border-width: 3px;
|
||||
border-radius: 15%;
|
||||
}
|
||||
}
|
||||
|
||||
.loading-container .name {
|
||||
position: relative;
|
||||
margin-top: 20px;
|
||||
font-size: 24px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.loading-container .tips {
|
||||
position: relative;
|
||||
margin-top: 10px;
|
||||
font-size: 16px;
|
||||
opacity: 0.5;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.loading-container .tips::after {
|
||||
position: absolute;
|
||||
padding-left: 5px;
|
||||
content: "…";
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="loading-container">
|
||||
<div class="loading">
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
<div class="square"></div>
|
||||
</div>
|
||||
<div class="name">%VITE_APP_TITLE%</div>
|
||||
<div class="tips">载入中</div>
|
||||
</div>
|
||||
@@ -1,92 +1,141 @@
|
||||
{
|
||||
"version": "2.2.0",
|
||||
"type": "module",
|
||||
"packageManager": "pnpm@10.33.0",
|
||||
"engines": {
|
||||
"node": "^20.19.0 || >=22.12.0"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build:test": "vue-tsc --noEmit && vite build --mode test",
|
||||
"build": "vue-tsc --noEmit && vite build",
|
||||
"serve:test": "http-server ./dist-test -o",
|
||||
"serve": "http-server ./dist -o",
|
||||
"build:example": "vue-tsc -b && vite build --mode example",
|
||||
"serve:example": "http-server ./dist-example -o",
|
||||
"svgo": "svgo -f src/assets/icons",
|
||||
"new": "plop",
|
||||
"generate:icons": "tsx ./scripts/generate.icons.ts",
|
||||
"lint": "npm-run-all -s lint:tsc lint:eslint lint:stylelint",
|
||||
"lint:tsc": "vue-tsc --noEmit",
|
||||
"lint:eslint": "eslint src/**/*.{ts,tsx,vue} --cache --fix",
|
||||
"lint:stylelint": "stylelint src/**/*.{css,scss,vue} --cache --fix",
|
||||
"postinstall": "simple-git-hooks && esno scripts/prepare.js",
|
||||
"lint:tsc": "vue-tsc -b",
|
||||
"lint:eslint": "eslint . --cache --fix",
|
||||
"lint:stylelint": "stylelint \"src/**/*.{css,scss,vue}\" --cache --fix",
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
"commit": "git cz",
|
||||
"release": "bumpp"
|
||||
"postinstall": "simple-git-hooks",
|
||||
"taze": "taze minor -wIr"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tinymce/tinymce-vue": "^5.0.0",
|
||||
"@vueuse/core": "^9.6.0",
|
||||
"@vueuse/integrations": "^9.6.0",
|
||||
"axios": "^1.2.0",
|
||||
"dayjs": "^1.11.6",
|
||||
"element-plus": "^2.2.25",
|
||||
"hotkeys-js": "^3.10.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mitt": "^3.0.0",
|
||||
"mockjs": "^1.1.0",
|
||||
"@antv/g2plot": "^2.4.35",
|
||||
"@bytemd/plugin-gfm": "^1.22.0",
|
||||
"@bytemd/vue-next": "^1.22.0",
|
||||
"@tinymce/tinymce-vue": "^6.3.0",
|
||||
"@vee-validate/zod": "^4.15.1",
|
||||
"@visactor/vchart": "^2.0.20",
|
||||
"@vue-office/docx": "^1.6.3",
|
||||
"@vue-office/excel": "^1.7.14",
|
||||
"@vueuse/components": "^14.2.1",
|
||||
"@vueuse/core": "^14.2.1",
|
||||
"@vueuse/integrations": "^14.2.1",
|
||||
"animate.css": "^4.1.1",
|
||||
"axios": "^1.14.0",
|
||||
"bytemd": "^1.22.0",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"cropperjs": "1.6.2",
|
||||
"dayjs": "^1.11.20",
|
||||
"defu": "^6.1.4",
|
||||
"disable-devtool": "^0.3.9",
|
||||
"echarts": "^6.0.0",
|
||||
"element-plus": "^2.13.6",
|
||||
"eruda": "^3.4.3",
|
||||
"es-toolkit": "^1.45.1",
|
||||
"filesize": "^11.0.15",
|
||||
"hotkeys-js": "^4.0.2",
|
||||
"lucide-vue-next": "^1.0.0",
|
||||
"mitt": "^3.0.1",
|
||||
"nprogress": "^0.2.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
"path-to-regexp": "^6.2.1",
|
||||
"pinia": "^2.0.26",
|
||||
"qs": "^6.11.0",
|
||||
"tinymce": "^6.3.0",
|
||||
"vue": "^3.2.45",
|
||||
"vue-router": "^4.1.6"
|
||||
"path-to-regexp": "^8.4.0",
|
||||
"pinia": "^3.0.4",
|
||||
"print-js": "^1.6.0",
|
||||
"qrcode": "^1.5.4",
|
||||
"qs": "^6.15.0",
|
||||
"reka-ui": "^2.9.2",
|
||||
"scule": "^1.3.0",
|
||||
"splitpanes": "^4.0.4",
|
||||
"swiper": "^12.1.3",
|
||||
"tailwind-merge": "^3.5.0",
|
||||
"tinymce": "7.9.2",
|
||||
"ua-parser-js": "^2.0.9",
|
||||
"vconsole": "^3.15.1",
|
||||
"vee-validate": "^4.15.1",
|
||||
"vue": "^3.5.31",
|
||||
"vue-currency-input": "^3.2.2",
|
||||
"vue-data-ui": "^3.17.2",
|
||||
"vue-esign": "^1.1.4",
|
||||
"vue-hooks-plus": "^2.4.3",
|
||||
"vue-router": "^5.0.4",
|
||||
"vue-sonner": "^2.0.9",
|
||||
"vxe-table": "^4.18.10",
|
||||
"xe-utils": "^4.0.4",
|
||||
"zod": "^4.3.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^0.31.0",
|
||||
"@iconify-json/ep": "^1.1.8",
|
||||
"@iconify/vue": "^4.0.0",
|
||||
"@types/nprogress": "^0.2.0",
|
||||
"@types/path-browserify": "^1.0.0",
|
||||
"@types/qs": "^6.9.7",
|
||||
"@vitejs/plugin-vue": "^3.2.0",
|
||||
"@vitejs/plugin-vue-jsx": "^2.1.1",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"bumpp": "^8.2.1",
|
||||
"cz-git": "^1.3.12",
|
||||
"eslint": "^8.28.0",
|
||||
"esno": "^0.16.3",
|
||||
"fs-extra": "^10.1.0",
|
||||
"@antfu/eslint-config": "^7.7.3",
|
||||
"@clack/prompts": "^1.1.0",
|
||||
"@faker-js/faker": "^10.4.0",
|
||||
"@iconify/json": "^2.2.456",
|
||||
"@iconify/vue": "^5.0.0",
|
||||
"@stylistic/stylelint-config": "^5.0.0",
|
||||
"@types/nprogress": "^0.2.3",
|
||||
"@types/path-browserify": "^1.0.3",
|
||||
"@types/qrcode": "^1.5.6",
|
||||
"@types/qs": "^6.15.0",
|
||||
"@types/splitpanes": "^2.2.6",
|
||||
"@unocss/eslint-plugin": "^66.6.7",
|
||||
"@unocss/preset-legacy-compat": "^66.6.7",
|
||||
"@unocss/reset": "^66.6.7",
|
||||
"@vitejs/plugin-legacy": "^8.0.1",
|
||||
"@vitejs/plugin-vue": "^6.0.5",
|
||||
"@vitejs/plugin-vue-jsx": "^5.1.5",
|
||||
"@vue/tsconfig": "^0.9.1",
|
||||
"autoprefixer": "^10.4.27",
|
||||
"boxen": "^8.0.1",
|
||||
"eslint": "^10.1.0",
|
||||
"fs-extra": "^11.3.4",
|
||||
"http-server": "^14.1.1",
|
||||
"lint-staged": "^13.0.4",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"plop": "^3.1.1",
|
||||
"postcss-html": "^1.5.0",
|
||||
"sass": "^1.56.1",
|
||||
"simple-git-hooks": "^2.8.1",
|
||||
"stylelint": "^14.15.0",
|
||||
"stylelint-config-standard": "^29.0.0",
|
||||
"stylelint-config-standard-scss": "^6.1.0",
|
||||
"lint-staged": "^16.4.0",
|
||||
"npm-run-all2": "^8.0.4",
|
||||
"picocolors": "^1.1.1",
|
||||
"plop": "^4.0.5",
|
||||
"postcss": "^8.5.8",
|
||||
"postcss-nested": "^7.0.2",
|
||||
"sass-embedded": "^1.98.0",
|
||||
"simple-git-hooks": "^2.13.1",
|
||||
"stylelint": "^17.6.0",
|
||||
"stylelint-config-recess-order": "^7.7.0",
|
||||
"stylelint-config-standard-scss": "^17.0.0",
|
||||
"stylelint-config-standard-vue": "^1.0.0",
|
||||
"stylelint-scss": "^4.3.0",
|
||||
"svgo": "^3.0.2",
|
||||
"typescript": "^4.9.3",
|
||||
"unplugin-auto-import": "^0.12.0",
|
||||
"unplugin-vue-components": "^0.22.11",
|
||||
"vite": "^3.2.4",
|
||||
"vite-plugin-banner": "^0.6.1",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-html": "^3.2.0",
|
||||
"vite-plugin-mock": "^2.9.6",
|
||||
"vite-plugin-pages": "^0.27.1",
|
||||
"vite-plugin-spritesmith": "^0.1.1",
|
||||
"stylelint-scss": "^7.0.0",
|
||||
"svgo": "^4.0.1",
|
||||
"taze": "^19.10.0",
|
||||
"tsx": "^4.21.0",
|
||||
"typescript": "^6.0.2",
|
||||
"unocss": "^66.6.7",
|
||||
"unocss-preset-animations": "^1.3.0",
|
||||
"unplugin-auto-import": "^21.0.0",
|
||||
"unplugin-turbo-console": "^2.3.0",
|
||||
"unplugin-vue-components": "^32.0.0",
|
||||
"vite": "^8.0.3",
|
||||
"vite-plugin-app-loading": "^0.4.0",
|
||||
"vite-plugin-archiver": "^0.2.0",
|
||||
"vite-plugin-banner": "^0.8.1",
|
||||
"vite-plugin-compression2": "^2.5.3",
|
||||
"vite-plugin-env-parse": "^1.0.15",
|
||||
"vite-plugin-fake-server": "^2.2.3",
|
||||
"vite-plugin-pages": "^0.33.3",
|
||||
"vite-plugin-svg-icons": "^2.0.1",
|
||||
"vite-plugin-vue-layouts": "^0.6.0",
|
||||
"vite-plugin-vue-setup-extend": "^0.4.0",
|
||||
"vue-tsc": "^1.0.9"
|
||||
"vite-plugin-vue-devtools": "^8.1.1",
|
||||
"vite-plugin-vue-meta-layouts": "^0.6.1",
|
||||
"vue-tsc": "^3.2.6"
|
||||
},
|
||||
"simple-git-hooks": {
|
||||
"pre-commit": "pnpm lint-staged",
|
||||
"preserveUnused": true
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "node_modules/cz-git"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
<script lang="ts" setup{{#if isGlobal}} name="{{ properCase name }}"{{/if}}>
|
||||
// 逻辑代码
|
||||
<script setup lang="ts">
|
||||
{{#if isGlobal}}
|
||||
defineOptions({
|
||||
name: '{{ properCase name }}',
|
||||
})
|
||||
{{/if}}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -8,6 +12,6 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
// 样式
|
||||
<style scoped>
|
||||
/* 样式 */
|
||||
</style>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const fs = require('fs')
|
||||
import fs from 'node:fs'
|
||||
|
||||
function getFolder(path) {
|
||||
const components = []
|
||||
@@ -13,7 +13,7 @@ function getFolder(path) {
|
||||
return components
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default {
|
||||
description: '创建组件',
|
||||
prompts: [
|
||||
{
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
import { faker } from '@faker-js/faker'
|
||||
import { defineFakeRoute } from 'vite-plugin-fake-server/client'
|
||||
|
||||
const AllList: any[] = []
|
||||
for (let i = 0; i < 50; i++) {
|
||||
AllList.push({
|
||||
id: i + 1,
|
||||
title: faker.color.human(),
|
||||
})
|
||||
}
|
||||
|
||||
export default defineFakeRoute([
|
||||
{
|
||||
url: '/mock/{{#if relativePath}}{{ relativePath }}/{{/if}}{{ moduleName }}/list',
|
||||
method: 'get',
|
||||
response: ({ query }) => {
|
||||
const { title, from, limit } = query
|
||||
const list = AllList.filter((item) => {
|
||||
return title ? item.title.includes(title) : true
|
||||
})
|
||||
const pageList = list.filter((item, index) => {
|
||||
return index >= ~~from && index < (~~from + ~~limit)
|
||||
})
|
||||
return {
|
||||
error: '',
|
||||
status: 1,
|
||||
data: {
|
||||
list: pageList,
|
||||
total: list.length,
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
url: '/mock/{{#if relativePath}}{{ relativePath }}/{{/if}}{{ moduleName }}/detail',
|
||||
method: 'get',
|
||||
response: ({ query }) => {
|
||||
const info = AllList.filter(item => item.id === query.id)
|
||||
return {
|
||||
error: '',
|
||||
status: 1,
|
||||
data: info[0],
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
url: '/mock/{{#if relativePath}}{{ relativePath }}/{{/if}}{{ moduleName }}/create',
|
||||
method: 'post',
|
||||
response: () => {
|
||||
return {
|
||||
error: '',
|
||||
status: 1,
|
||||
data: {
|
||||
isSuccess: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
url: '/mock/{{#if relativePath}}{{ relativePath }}/{{/if}}{{ moduleName }}/edit',
|
||||
method: 'post',
|
||||
response: () => {
|
||||
return {
|
||||
error: '',
|
||||
status: 1,
|
||||
data: {
|
||||
isSuccess: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
url: '/mock/{{#if relativePath}}{{ relativePath }}/{{/if}}{{ moduleName }}/delete',
|
||||
method: 'post',
|
||||
response: () => {
|
||||
return {
|
||||
error: '',
|
||||
status: 1,
|
||||
data: {
|
||||
isSuccess: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
])
|
||||
@@ -0,0 +1,43 @@
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
|
||||
function getFolder(path) {
|
||||
const components = []
|
||||
const files = fs.readdirSync(path)
|
||||
files.forEach((item) => {
|
||||
const stat = fs.lstatSync(`${path}/${item}`)
|
||||
if (stat.isDirectory() === true && item !== 'components') {
|
||||
components.push(`${path}/${item}`)
|
||||
components.push(...getFolder(`${path}/${item}`))
|
||||
}
|
||||
})
|
||||
return components
|
||||
}
|
||||
|
||||
export default {
|
||||
description: '创建标准模块 Mock',
|
||||
prompts: [
|
||||
{
|
||||
type: 'list',
|
||||
name: 'path',
|
||||
message: '请选择模块目录',
|
||||
choices: getFolder('src/views'),
|
||||
},
|
||||
],
|
||||
actions: (data) => {
|
||||
const pathArr = path.relative('src/views', data.path).split('\\')
|
||||
const moduleName = pathArr.pop()
|
||||
const relativePath = pathArr.join('/')
|
||||
const actions = []
|
||||
actions.push({
|
||||
type: 'add',
|
||||
path: pathArr.length === 0 ? 'src/mock/{{moduleName}}.ts' : `src/mock/${pathArr.join('.')}.{{moduleName}}.ts`,
|
||||
templateFile: 'plop-templates/mock/mock.hbs',
|
||||
data: {
|
||||
relativePath,
|
||||
moduleName,
|
||||
},
|
||||
})
|
||||
return actions
|
||||
},
|
||||
}
|
||||
@@ -1,5 +1,14 @@
|
||||
<script lang="ts" setup name="{{ properCase componentName }}">
|
||||
// 逻辑代码
|
||||
{{#if isFilesystem}}
|
||||
<route lang="yaml">
|
||||
meta:
|
||||
title: 页面标题
|
||||
</route>
|
||||
|
||||
{{/if}}
|
||||
<script setup lang="ts">
|
||||
defineOptions({
|
||||
name: '{{ properCase componentName }}',
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -8,6 +17,6 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
// 样式
|
||||
<style scoped>
|
||||
/* 样式 */
|
||||
</style>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
|
||||
function getFolder(path) {
|
||||
const components = []
|
||||
@@ -14,7 +14,7 @@ function getFolder(path) {
|
||||
return components
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default {
|
||||
description: '创建页面',
|
||||
prompts: [
|
||||
{
|
||||
@@ -36,6 +36,12 @@ module.exports = {
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'isFilesystem',
|
||||
message: '是否为基于文件系统的路由页面',
|
||||
default: false,
|
||||
},
|
||||
],
|
||||
actions: (data) => {
|
||||
const relativePath = path.relative('src/views', data.path)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
const use{{ properCase name }}Store = defineStore(
|
||||
export const use{{ properCase name }}Store = defineStore(
|
||||
// 唯一ID
|
||||
'{{ camelCase name }}',
|
||||
{
|
||||
state: () => ({}),
|
||||
getters: {},
|
||||
actions: {},
|
||||
() => {
|
||||
const someThing = ref(0)
|
||||
|
||||
return {
|
||||
someThing,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
export default use{{ properCase name }}Store
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
module.exports = {
|
||||
export default {
|
||||
description: '创建全局状态',
|
||||
prompts: [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
module.exports = function (plop) {
|
||||
import { promises as fs } from 'node:fs'
|
||||
|
||||
export default async function (plop) {
|
||||
plop.setWelcomeMessage('请选择需要创建的模式:')
|
||||
plop.setGenerator('page', require('./plop-templates/page/prompt'))
|
||||
plop.setGenerator('component', require('./plop-templates/component/prompt'))
|
||||
plop.setGenerator('store', require('./plop-templates/store/prompt'))
|
||||
const items = await fs.readdir('./plop-templates')
|
||||
for (const item of items) {
|
||||
const stat = await fs.lstat(`./plop-templates/${item}`)
|
||||
if (stat.isDirectory()) {
|
||||
const prompt = await import(`./plop-templates/${item}/prompt.js`)
|
||||
plop.setGenerator(item, prompt.default)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
module.exports = {
|
||||
export default {
|
||||
plugins: {
|
||||
autoprefixer: {},
|
||||
'autoprefixer': {},
|
||||
'postcss-nested': {},
|
||||
},
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
@@ -1,119 +1,49 @@
|
||||
#app {
|
||||
height: 100%;
|
||||
}
|
||||
.fantastic-admin-home {
|
||||
position: absolute;
|
||||
z-index: 10000;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
user-select: none;
|
||||
color: #736477;
|
||||
background-color: snow;
|
||||
}
|
||||
.fantastic-admin-home .loading {
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.fantastic-admin-home .square {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
.fantastic-admin-home .square::before {
|
||||
content: "";
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 15%;
|
||||
border: 3px solid #8c858f;
|
||||
}
|
||||
.fantastic-admin-home .loading.animate .square::before {
|
||||
animation: square-to-dot-animation 1.2s linear;
|
||||
}
|
||||
.fantastic-admin-home .loading.animate .square:nth-child(1)::before {
|
||||
animation-delay: calc(100ms * 1);
|
||||
}
|
||||
.fantastic-admin-home .loading.animate .square:nth-child(2)::before {
|
||||
animation-delay: calc(100ms * 2);
|
||||
}
|
||||
.fantastic-admin-home .loading.animate .square:nth-child(3)::before {
|
||||
animation-delay: calc(100ms * 3);
|
||||
}
|
||||
.fantastic-admin-home .loading.animate .square:nth-child(4)::before {
|
||||
animation-delay: calc(100ms * 4);
|
||||
}
|
||||
@keyframes square-to-dot-animation {
|
||||
15%,
|
||||
55% {
|
||||
border-radius: 100%;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin: 5px;
|
||||
border-width: 5px;
|
||||
}
|
||||
70% {
|
||||
border-radius: 15%;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin: initial;
|
||||
border-width: 3px;
|
||||
}
|
||||
}
|
||||
.fantastic-admin-home .text {
|
||||
font-size: 24px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
#browser-upgrade {
|
||||
position: absolute;
|
||||
z-index: 10001;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: none;
|
||||
user-select: none;
|
||||
color: #736477;
|
||||
background-color: snow;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 10001;
|
||||
display: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: #736477;
|
||||
user-select: none;
|
||||
background-color: snow;
|
||||
}
|
||||
|
||||
#browser-upgrade .title {
|
||||
margin: 40px 0;
|
||||
text-align: center;
|
||||
font-size: 24px;
|
||||
margin: 40px 0;
|
||||
font-size: 24px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#browser-upgrade .browsers {
|
||||
text-align: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#browser-upgrade .browsers .browser {
|
||||
display: inline-block;
|
||||
margin: 0 20px;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
margin: 0 20px;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#browser-upgrade .browsers .browser .browser-icon {
|
||||
display: block;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin: 0 auto;
|
||||
border: none;
|
||||
display: block;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin: 0 auto;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#browser-upgrade .browsers .browser .browser-name {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
padding-bottom: 2px;
|
||||
color: #736477;
|
||||
border-bottom: 1px solid transparent;
|
||||
padding-bottom: 2px;
|
||||
margin-top: 10px;
|
||||
color: #736477;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid transparent;
|
||||
}
|
||||
|
||||
#browser-upgrade .browsers .browser:hover .browser-name {
|
||||
border-bottom: 1px solid #736477;
|
||||
border-bottom: 1px solid #736477;
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,14 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -21 206 206" xml:space="preserve">
|
||||
<path d="M0,82.57C0,58.4,0,34.23,0,10.06C0,1.35,1.35,0,10.03,0C45.36,0,80.7-0.01,116.03,0.03c1.77,0,3.59,0.26,5.29,0.74
|
||||
c3.07,0.87,3.57,3.21,2.45,5.8c-4.37,10.1-8.83,20.15-13.31,30.2c-1.44,3.23-4.06,4.26-7.54,4.25c-18.5-0.09-37,0.1-55.5-0.14
|
||||
c-4.95-0.06-6.49,2.12-6.46,6.47c0.02,3,0.11,6.01-0.02,9c-0.3,6.8,0.34,9.29,9.51,9.62c5.36,0.19,10.73,0.04,16.09,0.04
|
||||
c7.57,0,15.15-0.04,22.72,0.01c5.13,0.03,6.6,2.12,4.59,6.89C90.43,81.09,86.27,89,83.4,97.35c-2.59,7.55-8.57,7.27-14.28,7.56
|
||||
c-7.48,0.38-15,0.17-22.5,0.06c-3.69-0.05-4.96,1.04-4.86,5.18c0.36,15.83,0.26,31.67,0.12,47.5c-0.04,4.2-2.26,6.53-6.94,6.42
|
||||
c-9-0.21-18-0.06-27-0.06c-6.05,0-7.91-1.8-7.92-7.94C-0.02,131.57,0,107.07,0,82.57z" fill="#42b883" />
|
||||
<path d="M132.98,94.13c-8.21,18.88-16.33,37.1-24.06,55.48c-6.02,14.31-5.81,14.4-21.31,14.4c-6.67,0-13.33,0.05-20-0.01
|
||||
c-5.91-0.05-7.71-2.44-5.46-7.61c6.86-15.8,13.86-31.55,20.82-47.31c9.41-21.32,18.81-42.63,28.24-63.94
|
||||
c5.59-12.62,11.14-25.25,16.94-37.77c0.82-1.78,2.95-4.09,4.47-4.09c1.63,0,4,2.11,4.78,3.86c13.4,29.78,26.56,59.66,39.87,89.49
|
||||
c6.48,14.53,13.16,28.97,19.72,43.46c2.57,5.68,5.11,11.38,7.61,17.1c1.61,3.68-0.13,6.75-4.12,6.77
|
||||
c-23.83,0.08-47.66,0.09-71.49-0.01c-4.03-0.02-5.46-2.47-3.98-6.17c2.26-5.63,4.77-11.16,6.95-16.82c1.74-4.54,4.92-6.06,9.6-5.98
|
||||
c9.65,0.16,9.89-0.55,5.89-9.13c-4.57-9.81-8.76-19.8-13.14-29.7C134.08,95.62,133.68,95.17,132.98,94.13z" fill="#42b883" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -1,65 +1,77 @@
|
||||
body {
|
||||
background-color: #222f3e;
|
||||
color: #fff;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
||||
line-height: 1.4;
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #4099ff;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Apply a default padding if legacy cellpadding attribute is missing */
|
||||
table:not([cellpadding]) th,
|
||||
table:not([cellpadding]) td {
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) td {
|
||||
table[border]:not([border="0"], [style*="border-width"]) th,
|
||||
table[border]:not([border="0"], [style*="border-width"]) td {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) td {
|
||||
table[border]:not([border="0"], [style*="border-style"]) th,
|
||||
table[border]:not([border="0"], [style*="border-style"]) td {
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) td {
|
||||
table[border]:not([border="0"], [style*="border-color"]) th,
|
||||
table[border]:not([border="0"], [style*="border-color"]) td {
|
||||
border-color: #6d737b;
|
||||
}
|
||||
|
||||
figure {
|
||||
display: table;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
figure figcaption {
|
||||
color: #8a8f97;
|
||||
display: block;
|
||||
margin-top: 0.25rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color: #6d737b;
|
||||
border-style: solid;
|
||||
border-width: 1px 0 0 0;
|
||||
border-width: 1px 0 0;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: #6d737b;
|
||||
border-radius: 3px;
|
||||
padding: 0.1rem 0.2rem;
|
||||
}
|
||||
.mce-content-body:not([dir=rtl]) blockquote {
|
||||
|
||||
.mce-content-body:not([dir="rtl"]) blockquote {
|
||||
border-left: 2px solid #6d737b;
|
||||
margin-left: 1.5rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
.mce-content-body[dir=rtl] blockquote {
|
||||
|
||||
.mce-content-body[dir="rtl"] blockquote {
|
||||
border-right: 2px solid #6d737b;
|
||||
margin-right: 1.5rem;
|
||||
padding-right: 1rem;
|
||||
|
||||
@@ -1 +1,21 @@
|
||||
body{background-color:#222f3e;color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
|
||||
body { background-color: #222f3e; color: #fff; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; line-height: 1.4; margin: 1rem; }
|
||||
a { color: #4099ff; }
|
||||
table { border-collapse: collapse; }
|
||||
|
||||
table:not([cellpadding]) td,
|
||||
table:not([cellpadding]) th { padding: 0.4rem; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-width"]) td,
|
||||
table[border]:not([border="0"], [style*="border-width"]) th { border-width: 1px; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-style"]) td,
|
||||
table[border]:not([border="0"], [style*="border-style"]) th { border-style: solid; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-color"]) td,
|
||||
table[border]:not([border="0"], [style*="border-color"]) th { border-color: #6d737b; }
|
||||
figure { display: table; margin: 1rem auto; }
|
||||
figure figcaption { color: #8a8f97; display: block; margin-top: 0.25rem; text-align: center; }
|
||||
hr { border-color: #6d737b; border-style: solid; border-width: 1px 0 0; }
|
||||
code { background-color: #6d737b; border-radius: 3px; padding: 0.1rem 0.2rem; }
|
||||
.mce-content-body:not([dir="rtl"]) blockquote { border-left: 2px solid #6d737b; margin-left: 1.5rem; padding-left: 1rem; }
|
||||
.mce-content-body[dir="rtl"] blockquote { border-right: 2px solid #6d737b; margin-right: 1.5rem; padding-right: 1rem; }
|
||||
|
||||
@@ -1,60 +1,71 @@
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
||||
line-height: 1.4;
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Apply a default padding if legacy cellpadding attribute is missing */
|
||||
table:not([cellpadding]) th,
|
||||
table:not([cellpadding]) td {
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) td {
|
||||
table[border]:not([border="0"], [style*="border-width"]) th,
|
||||
table[border]:not([border="0"], [style*="border-width"]) td {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) td {
|
||||
table[border]:not([border="0"], [style*="border-style"]) th,
|
||||
table[border]:not([border="0"], [style*="border-style"]) td {
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) td {
|
||||
table[border]:not([border="0"], [style*="border-color"]) th,
|
||||
table[border]:not([border="0"], [style*="border-color"]) td {
|
||||
border-color: #ccc;
|
||||
}
|
||||
|
||||
figure {
|
||||
display: table;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
figure figcaption {
|
||||
color: #999;
|
||||
display: block;
|
||||
margin-top: 0.25rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color: #ccc;
|
||||
border-style: solid;
|
||||
border-width: 1px 0 0 0;
|
||||
border-width: 1px 0 0;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: #e8e8e8;
|
||||
border-radius: 3px;
|
||||
padding: 0.1rem 0.2rem;
|
||||
}
|
||||
.mce-content-body:not([dir=rtl]) blockquote {
|
||||
|
||||
.mce-content-body:not([dir="rtl"]) blockquote {
|
||||
border-left: 2px solid #ccc;
|
||||
margin-left: 1.5rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
.mce-content-body[dir=rtl] blockquote {
|
||||
|
||||
.mce-content-body[dir="rtl"] blockquote {
|
||||
border-right: 2px solid #ccc;
|
||||
margin-right: 1.5rem;
|
||||
padding-right: 1rem;
|
||||
|
||||
@@ -1 +1,20 @@
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; line-height: 1.4; margin: 1rem; }
|
||||
table { border-collapse: collapse; }
|
||||
|
||||
table:not([cellpadding]) td,
|
||||
table:not([cellpadding]) th { padding: 0.4rem; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-width"]) td,
|
||||
table[border]:not([border="0"], [style*="border-width"]) th { border-width: 1px; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-style"]) td,
|
||||
table[border]:not([border="0"], [style*="border-style"]) th { border-style: solid; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-color"]) td,
|
||||
table[border]:not([border="0"], [style*="border-color"]) th { border-color: #ccc; }
|
||||
figure { display: table; margin: 1rem auto; }
|
||||
figure figcaption { color: #999; display: block; margin-top: 0.25rem; text-align: center; }
|
||||
hr { border-color: #ccc; border-style: solid; border-width: 1px 0 0; }
|
||||
code { background-color: #e8e8e8; border-radius: 3px; padding: 0.1rem 0.2rem; }
|
||||
.mce-content-body:not([dir="rtl"]) blockquote { border-left: 2px solid #ccc; margin-left: 1.5rem; padding-left: 1rem; }
|
||||
.mce-content-body[dir="rtl"] blockquote { border-right: 2px solid #ccc; margin-right: 1.5rem; padding-right: 1rem; }
|
||||
|
||||
@@ -4,62 +4,73 @@
|
||||
min-height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
||||
}
|
||||
|
||||
@media screen {
|
||||
body {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0 4px rgba(0, 0, 0, 0.15);
|
||||
box-shadow: 0 0 4px rgb(0 0 0 / 15%);
|
||||
box-sizing: border-box;
|
||||
margin: 1rem auto 0;
|
||||
max-width: 820px;
|
||||
min-height: calc(100vh - 1rem);
|
||||
padding: 4rem 6rem 6rem 6rem;
|
||||
padding: 4rem 6rem 6rem;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Apply a default padding if legacy cellpadding attribute is missing */
|
||||
table:not([cellpadding]) th,
|
||||
table:not([cellpadding]) td {
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) td {
|
||||
table[border]:not([border="0"], [style*="border-width"]) th,
|
||||
table[border]:not([border="0"], [style*="border-width"]) td {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) td {
|
||||
table[border]:not([border="0"], [style*="border-style"]) th,
|
||||
table[border]:not([border="0"], [style*="border-style"]) td {
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) td {
|
||||
table[border]:not([border="0"], [style*="border-color"]) th,
|
||||
table[border]:not([border="0"], [style*="border-color"]) td {
|
||||
border-color: #ccc;
|
||||
}
|
||||
|
||||
figure figcaption {
|
||||
color: #999;
|
||||
margin-top: 0.25rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color: #ccc;
|
||||
border-style: solid;
|
||||
border-width: 1px 0 0 0;
|
||||
border-width: 1px 0 0;
|
||||
}
|
||||
.mce-content-body:not([dir=rtl]) blockquote {
|
||||
|
||||
.mce-content-body:not([dir="rtl"]) blockquote {
|
||||
border-left: 2px solid #ccc;
|
||||
margin-left: 1.5rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
.mce-content-body[dir=rtl] blockquote {
|
||||
|
||||
.mce-content-body[dir="rtl"] blockquote {
|
||||
border-right: 2px solid #ccc;
|
||||
margin-right: 1.5rem;
|
||||
padding-right: 1rem;
|
||||
|
||||
@@ -1 +1,21 @@
|
||||
@media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
|
||||
@media screen { html { background: #f4f4f4; min-height: 100%; } }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; }
|
||||
|
||||
@media screen { body { background-color: #fff; box-shadow: 0 0 4px rgb(0 0 0 / 15%); box-sizing: border-box; margin: 1rem auto 0; max-width: 820px; min-height: calc(100vh - 1rem); padding: 4rem 6rem 6rem; } }
|
||||
table { border-collapse: collapse; }
|
||||
|
||||
table:not([cellpadding]) td,
|
||||
table:not([cellpadding]) th { padding: 0.4rem; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-width"]) td,
|
||||
table[border]:not([border="0"], [style*="border-width"]) th { border-width: 1px; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-style"]) td,
|
||||
table[border]:not([border="0"], [style*="border-style"]) th { border-style: solid; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-color"]) td,
|
||||
table[border]:not([border="0"], [style*="border-color"]) th { border-color: #ccc; }
|
||||
figure figcaption { color: #999; margin-top: 0.25rem; text-align: center; }
|
||||
hr { border-color: #ccc; border-style: solid; border-width: 1px 0 0; }
|
||||
.mce-content-body:not([dir="rtl"]) blockquote { border-left: 2px solid #ccc; margin-left: 1.5rem; padding-left: 1rem; }
|
||||
.mce-content-body[dir="rtl"] blockquote { border-right: 2px solid #ccc; margin-right: 1.5rem; padding-right: 1rem; }
|
||||
|
||||
@@ -1,65 +1,77 @@
|
||||
body {
|
||||
background-color: #2f3742;
|
||||
color: #dfe0e4;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
||||
line-height: 1.4;
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #4099ff;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Apply a default padding if legacy cellpadding attribute is missing */
|
||||
table:not([cellpadding]) th,
|
||||
table:not([cellpadding]) td {
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) td {
|
||||
table[border]:not([border="0"], [style*="border-width"]) th,
|
||||
table[border]:not([border="0"], [style*="border-width"]) td {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) td {
|
||||
table[border]:not([border="0"], [style*="border-style"]) th,
|
||||
table[border]:not([border="0"], [style*="border-style"]) td {
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) td {
|
||||
table[border]:not([border="0"], [style*="border-color"]) th,
|
||||
table[border]:not([border="0"], [style*="border-color"]) td {
|
||||
border-color: #6d737b;
|
||||
}
|
||||
|
||||
figure {
|
||||
display: table;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
figure figcaption {
|
||||
color: #8a8f97;
|
||||
display: block;
|
||||
margin-top: 0.25rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color: #6d737b;
|
||||
border-style: solid;
|
||||
border-width: 1px 0 0 0;
|
||||
border-width: 1px 0 0;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: #6d737b;
|
||||
border-radius: 3px;
|
||||
padding: 0.1rem 0.2rem;
|
||||
}
|
||||
.mce-content-body:not([dir=rtl]) blockquote {
|
||||
|
||||
.mce-content-body:not([dir="rtl"]) blockquote {
|
||||
border-left: 2px solid #6d737b;
|
||||
margin-left: 1.5rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
.mce-content-body[dir=rtl] blockquote {
|
||||
|
||||
.mce-content-body[dir="rtl"] blockquote {
|
||||
border-right: 2px solid #6d737b;
|
||||
margin-right: 1.5rem;
|
||||
padding-right: 1rem;
|
||||
|
||||
@@ -1 +1,21 @@
|
||||
body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
|
||||
body { background-color: #2f3742; color: #dfe0e4; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; line-height: 1.4; margin: 1rem; }
|
||||
a { color: #4099ff; }
|
||||
table { border-collapse: collapse; }
|
||||
|
||||
table:not([cellpadding]) td,
|
||||
table:not([cellpadding]) th { padding: 0.4rem; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-width"]) td,
|
||||
table[border]:not([border="0"], [style*="border-width"]) th { border-width: 1px; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-style"]) td,
|
||||
table[border]:not([border="0"], [style*="border-style"]) th { border-style: solid; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-color"]) td,
|
||||
table[border]:not([border="0"], [style*="border-color"]) th { border-color: #6d737b; }
|
||||
figure { display: table; margin: 1rem auto; }
|
||||
figure figcaption { color: #8a8f97; display: block; margin-top: 0.25rem; text-align: center; }
|
||||
hr { border-color: #6d737b; border-style: solid; border-width: 1px 0 0; }
|
||||
code { background-color: #6d737b; border-radius: 3px; padding: 0.1rem 0.2rem; }
|
||||
.mce-content-body:not([dir="rtl"]) blockquote { border-left: 2px solid #6d737b; margin-left: 1.5rem; padding-left: 1rem; }
|
||||
.mce-content-body[dir="rtl"] blockquote { border-right: 2px solid #6d737b; margin-right: 1.5rem; padding-right: 1rem; }
|
||||
|
||||
@@ -1,60 +1,71 @@
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
||||
line-height: 1.4;
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Apply a default padding if legacy cellpadding attribute is missing */
|
||||
table:not([cellpadding]) th,
|
||||
table:not([cellpadding]) td {
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) td {
|
||||
table[border]:not([border="0"], [style*="border-width"]) th,
|
||||
table[border]:not([border="0"], [style*="border-width"]) td {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) td {
|
||||
table[border]:not([border="0"], [style*="border-style"]) th,
|
||||
table[border]:not([border="0"], [style*="border-style"]) td {
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) td {
|
||||
table[border]:not([border="0"], [style*="border-color"]) th,
|
||||
table[border]:not([border="0"], [style*="border-color"]) td {
|
||||
border-color: #ccc;
|
||||
}
|
||||
|
||||
figure {
|
||||
display: table;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
figure figcaption {
|
||||
color: #999;
|
||||
display: block;
|
||||
margin-top: 0.25rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color: #ccc;
|
||||
border-style: solid;
|
||||
border-width: 1px 0 0 0;
|
||||
border-width: 1px 0 0;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: #e8e8e8;
|
||||
border-radius: 3px;
|
||||
padding: 0.1rem 0.2rem;
|
||||
}
|
||||
.mce-content-body:not([dir=rtl]) blockquote {
|
||||
|
||||
.mce-content-body:not([dir="rtl"]) blockquote {
|
||||
border-left: 2px solid #ccc;
|
||||
margin-left: 1.5rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
.mce-content-body[dir=rtl] blockquote {
|
||||
|
||||
.mce-content-body[dir="rtl"] blockquote {
|
||||
border-right: 2px solid #ccc;
|
||||
margin-right: 1.5rem;
|
||||
padding-right: 1rem;
|
||||
|
||||
@@ -1 +1,20 @@
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; line-height: 1.4; margin: 1rem; }
|
||||
table { border-collapse: collapse; }
|
||||
|
||||
table:not([cellpadding]) td,
|
||||
table:not([cellpadding]) th { padding: 0.4rem; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-width"]) td,
|
||||
table[border]:not([border="0"], [style*="border-width"]) th { border-width: 1px; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-style"]) td,
|
||||
table[border]:not([border="0"], [style*="border-style"]) th { border-style: solid; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-color"]) td,
|
||||
table[border]:not([border="0"], [style*="border-color"]) th { border-color: #ccc; }
|
||||
figure { display: table; margin: 1rem auto; }
|
||||
figure figcaption { color: #999; display: block; margin-top: 0.25rem; text-align: center; }
|
||||
hr { border-color: #ccc; border-style: solid; border-width: 1px 0 0; }
|
||||
code { background-color: #e8e8e8; border-radius: 3px; padding: 0.1rem 0.2rem; }
|
||||
.mce-content-body:not([dir="rtl"]) blockquote { border-left: 2px solid #ccc; margin-left: 1.5rem; padding-left: 1rem; }
|
||||
.mce-content-body[dir="rtl"] blockquote { border-right: 2px solid #ccc; margin-right: 1.5rem; padding-right: 1rem; }
|
||||
|
||||
@@ -1,61 +1,72 @@
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
||||
line-height: 1.4;
|
||||
margin: 1rem auto;
|
||||
max-width: 900px;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Apply a default padding if legacy cellpadding attribute is missing */
|
||||
table:not([cellpadding]) th,
|
||||
table:not([cellpadding]) td {
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-width"]) td {
|
||||
table[border]:not([border="0"], [style*="border-width"]) th,
|
||||
table[border]:not([border="0"], [style*="border-width"]) td {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-style"]) td {
|
||||
table[border]:not([border="0"], [style*="border-style"]) th,
|
||||
table[border]:not([border="0"], [style*="border-style"]) td {
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
/* Set default table styles if a table has a positive border attribute
|
||||
and no inline css */
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) th,
|
||||
table[border]:not([border="0"]):not([style*="border-color"]) td {
|
||||
table[border]:not([border="0"], [style*="border-color"]) th,
|
||||
table[border]:not([border="0"], [style*="border-color"]) td {
|
||||
border-color: #ccc;
|
||||
}
|
||||
|
||||
figure {
|
||||
display: table;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
figure figcaption {
|
||||
color: #999;
|
||||
display: block;
|
||||
margin-top: 0.25rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color: #ccc;
|
||||
border-style: solid;
|
||||
border-width: 1px 0 0 0;
|
||||
border-width: 1px 0 0;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: #e8e8e8;
|
||||
border-radius: 3px;
|
||||
padding: 0.1rem 0.2rem;
|
||||
}
|
||||
.mce-content-body:not([dir=rtl]) blockquote {
|
||||
|
||||
.mce-content-body:not([dir="rtl"]) blockquote {
|
||||
border-left: 2px solid #ccc;
|
||||
margin-left: 1.5rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
.mce-content-body[dir=rtl] blockquote {
|
||||
|
||||
.mce-content-body[dir="rtl"] blockquote {
|
||||
border-right: 2px solid #ccc;
|
||||
margin-right: 1.5rem;
|
||||
padding-right: 1rem;
|
||||
|
||||
@@ -1 +1,20 @@
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; line-height: 1.4; margin: 1rem auto; max-width: 900px; }
|
||||
table { border-collapse: collapse; }
|
||||
|
||||
table:not([cellpadding]) td,
|
||||
table:not([cellpadding]) th { padding: 0.4rem; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-width"]) td,
|
||||
table[border]:not([border="0"], [style*="border-width"]) th { border-width: 1px; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-style"]) td,
|
||||
table[border]:not([border="0"], [style*="border-style"]) th { border-style: solid; }
|
||||
|
||||
table[border]:not([border="0"], [style*="border-color"]) td,
|
||||
table[border]:not([border="0"], [style*="border-color"]) th { border-color: #ccc; }
|
||||
figure { display: table; margin: 1rem auto; }
|
||||
figure figcaption { color: #999; display: block; margin-top: 0.25rem; text-align: center; }
|
||||
hr { border-color: #ccc; border-style: solid; border-width: 1px 0 0; }
|
||||
code { background-color: #e8e8e8; border-radius: 3px; padding: 0.1rem 0.2rem; }
|
||||
.mce-content-body:not([dir="rtl"]) blockquote { border-left: 2px solid #ccc; margin-left: 1.5rem; padding-left: 1rem; }
|
||||
.mce-content-body[dir="rtl"] blockquote { border-right: 2px solid #ccc; margin-right: 1.5rem; padding-right: 1rem; }
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
body.tox-dialog__disable-scroll {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tox-fullscreen {
|
||||
border: 0;
|
||||
height: 100%;
|
||||
@@ -11,9 +12,11 @@ body.tox-dialog__disable-scroll {
|
||||
touch-action: pinch-zoom;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen,
|
||||
.tox-shadowhost.tox-fullscreen {
|
||||
left: 0;
|
||||
@@ -21,9 +24,11 @@ body.tox-dialog__disable-scroll {
|
||||
top: 0;
|
||||
z-index: 1200;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.tox-fullscreen .tox.tox-tinymce-aux,
|
||||
.tox-fullscreen ~ .tox.tox-tinymce-aux {
|
||||
z-index: 1201;
|
||||
|
||||
@@ -1 +1,10 @@
|
||||
body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
|
||||
body.tox-dialog__disable-scroll { overflow: hidden; }
|
||||
.tox-fullscreen { border: 0; height: 100%; margin: 0; overflow: hidden; overscroll-behavior: none; padding: 0; touch-action: pinch-zoom; width: 100%; }
|
||||
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { display: none; }
|
||||
|
||||
.tox-shadowhost.tox-fullscreen,
|
||||
.tox.tox-tinymce.tox-fullscreen { left: 0; position: fixed; top: 0; z-index: 1200; }
|
||||
.tox.tox-tinymce.tox-fullscreen { background-color: transparent; }
|
||||
|
||||
.tox-fullscreen .tox.tox-tinymce-aux,
|
||||
.tox-fullscreen ~ .tox.tox-tinymce-aux { z-index: 1201; }
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
body.tox-dialog__disable-scroll {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tox-fullscreen {
|
||||
border: 0;
|
||||
height: 100%;
|
||||
@@ -11,9 +12,11 @@ body.tox-dialog__disable-scroll {
|
||||
touch-action: pinch-zoom;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen,
|
||||
.tox-shadowhost.tox-fullscreen {
|
||||
left: 0;
|
||||
@@ -21,9 +24,11 @@ body.tox-dialog__disable-scroll {
|
||||
top: 0;
|
||||
z-index: 1200;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.tox-fullscreen .tox.tox-tinymce-aux,
|
||||
.tox-fullscreen ~ .tox.tox-tinymce-aux {
|
||||
z-index: 1201;
|
||||
|
||||
@@ -1 +1,10 @@
|
||||
body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
|
||||
body.tox-dialog__disable-scroll { overflow: hidden; }
|
||||
.tox-fullscreen { border: 0; height: 100%; margin: 0; overflow: hidden; overscroll-behavior: none; padding: 0; touch-action: pinch-zoom; width: 100%; }
|
||||
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { display: none; }
|
||||
|
||||
.tox-shadowhost.tox-fullscreen,
|
||||
.tox.tox-tinymce.tox-fullscreen { left: 0; position: fixed; top: 0; z-index: 1200; }
|
||||
.tox.tox-tinymce.tox-fullscreen { background-color: transparent; }
|
||||
|
||||
.tox-fullscreen .tox.tox-tinymce-aux,
|
||||
.tox-fullscreen ~ .tox.tox-tinymce-aux { z-index: 1201; }
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
body.tox-dialog__disable-scroll {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tox-fullscreen {
|
||||
border: 0;
|
||||
height: 100%;
|
||||
@@ -11,9 +12,11 @@ body.tox-dialog__disable-scroll {
|
||||
touch-action: pinch-zoom;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen,
|
||||
.tox-shadowhost.tox-fullscreen {
|
||||
left: 0;
|
||||
@@ -21,9 +24,11 @@ body.tox-dialog__disable-scroll {
|
||||
top: 0;
|
||||
z-index: 1200;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.tox-fullscreen .tox.tox-tinymce-aux,
|
||||
.tox-fullscreen ~ .tox.tox-tinymce-aux {
|
||||
z-index: 1201;
|
||||
|
||||
@@ -1 +1,10 @@
|
||||
body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
|
||||
body.tox-dialog__disable-scroll { overflow: hidden; }
|
||||
.tox-fullscreen { border: 0; height: 100%; margin: 0; overflow: hidden; overscroll-behavior: none; padding: 0; touch-action: pinch-zoom; width: 100%; }
|
||||
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { display: none; }
|
||||
|
||||
.tox-shadowhost.tox-fullscreen,
|
||||
.tox.tox-tinymce.tox-fullscreen { left: 0; position: fixed; top: 0; z-index: 1200; }
|
||||
.tox.tox-tinymce.tox-fullscreen { background-color: transparent; }
|
||||
|
||||
.tox-fullscreen .tox.tox-tinymce-aux,
|
||||
.tox-fullscreen ~ .tox.tox-tinymce-aux { z-index: 1201; }
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
body.tox-dialog__disable-scroll {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tox-fullscreen {
|
||||
border: 0;
|
||||
height: 100%;
|
||||
@@ -11,9 +12,11 @@ body.tox-dialog__disable-scroll {
|
||||
touch-action: pinch-zoom;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen,
|
||||
.tox-shadowhost.tox-fullscreen {
|
||||
left: 0;
|
||||
@@ -21,9 +24,11 @@ body.tox-dialog__disable-scroll {
|
||||
top: 0;
|
||||
z-index: 1200;
|
||||
}
|
||||
|
||||
.tox.tox-tinymce.tox-fullscreen {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.tox-fullscreen .tox.tox-tinymce-aux,
|
||||
.tox-fullscreen ~ .tox.tox-tinymce-aux {
|
||||
z-index: 1201;
|
||||
|
||||
@@ -1 +1,10 @@
|
||||
body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
|
||||
body.tox-dialog__disable-scroll { overflow: hidden; }
|
||||
.tox-fullscreen { border: 0; height: 100%; margin: 0; overflow: hidden; overscroll-behavior: none; padding: 0; touch-action: pinch-zoom; width: 100%; }
|
||||
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { display: none; }
|
||||
|
||||
.tox-shadowhost.tox-fullscreen,
|
||||
.tox.tox-tinymce.tox-fullscreen { left: 0; position: fixed; top: 0; z-index: 1200; }
|
||||
.tox.tox-tinymce.tox-fullscreen { background-color: transparent; }
|
||||
|
||||
.tox-fullscreen .tox.tox-tinymce-aux,
|
||||
.tox-fullscreen ~ .tox.tox-tinymce-aux { z-index: 1201; }
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
import { spawn } from 'node:child_process'
|
||||
import path from 'node:path'
|
||||
import process from 'node:process'
|
||||
import * as p from '@clack/prompts'
|
||||
import { lookupCollection, lookupCollections } from '@iconify/json'
|
||||
import fs from 'fs-extra'
|
||||
|
||||
// 拿到全部图标集的原始数据
|
||||
const raw = await lookupCollections()
|
||||
|
||||
let lastChoose = fs.readFileSync(path.resolve(process.cwd(), 'src/iconify/index.json'), 'utf-8')
|
||||
lastChoose = JSON.parse(lastChoose)
|
||||
|
||||
// 取出可使用的图标集数据用于选择,并按名称排序
|
||||
const collections = Object.entries(raw).map(([id, item]) => ({
|
||||
...item,
|
||||
id,
|
||||
})).sort((a, b) => a.name.localeCompare(b.name))
|
||||
|
||||
p.intro('图标集生成工具')
|
||||
|
||||
/**
|
||||
* 分别会在对应目录下生成以下文件,其中(1)(3)用于离线下载并安装图标,(2)用于图标选择器使用
|
||||
* (1) src/iconify/index.json 记录用户交互信息
|
||||
* (2) src/iconify/data.json 包含多个图标集数据,仅记录图标名
|
||||
* (3) public/icons/*-raw.json 多个图标集的原始数据,独立存放,用于离线使用
|
||||
*/
|
||||
const answers = await p.group(
|
||||
{
|
||||
collections: () =>
|
||||
p.multiselect({
|
||||
message: '请选择需要生成的图标集',
|
||||
options: collections.map(item => ({
|
||||
label: item.name,
|
||||
value: item.id,
|
||||
hint: `${item.total} 个图标`,
|
||||
})),
|
||||
initialValues: lastChoose.collections,
|
||||
}),
|
||||
isOfflineUse: () =>
|
||||
p.confirm({
|
||||
message: '是否需要离线使用',
|
||||
initialValue: false,
|
||||
}),
|
||||
},
|
||||
{
|
||||
onCancel: () => {
|
||||
p.cancel('操作已取消')
|
||||
process.exit(0)
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
const spinner = p.spinner()
|
||||
spinner.start('正在生成图标集...')
|
||||
|
||||
await fs.writeJSON(
|
||||
path.resolve(process.cwd(), 'src/iconify/index.json'),
|
||||
{
|
||||
collections: answers.collections,
|
||||
isOfflineUse: answers.isOfflineUse,
|
||||
},
|
||||
)
|
||||
|
||||
const outputDir = path.resolve(process.cwd(), 'public/icons')
|
||||
await fs.ensureDir(outputDir)
|
||||
await fs.emptyDir(outputDir)
|
||||
|
||||
const collectionsMeta: object[] = []
|
||||
for (const info of answers.collections) {
|
||||
const setData = await lookupCollection(info)
|
||||
|
||||
collectionsMeta.push({
|
||||
prefix: setData.prefix,
|
||||
info: setData.info,
|
||||
icons: Object.keys(setData.icons),
|
||||
})
|
||||
|
||||
const offlineFilePath = path.join(outputDir, `${info}-raw.json`)
|
||||
|
||||
if (answers.isOfflineUse) {
|
||||
await fs.writeJSON(offlineFilePath, setData)
|
||||
}
|
||||
}
|
||||
|
||||
await fs.writeJSON(
|
||||
path.resolve(process.cwd(), 'src/iconify/data.json'),
|
||||
collectionsMeta,
|
||||
)
|
||||
|
||||
// 使用 spawn 运行 eslint
|
||||
const eslint = spawn('eslint', ['src/iconify/data.json', 'src/iconify/index.json', '--cache', '--fix'], {
|
||||
stdio: 'inherit',
|
||||
shell: true,
|
||||
})
|
||||
|
||||
eslint.on('error', (err) => {
|
||||
p.log.error(`ESLint 执行失败: ${err.message}`)
|
||||
process.exit(1)
|
||||
})
|
||||
|
||||
eslint.on('close', (code) => {
|
||||
if (code !== 0) {
|
||||
p.log.error(`ESLint 执行失败,退出码: ${code}`)
|
||||
process.exit(code)
|
||||
}
|
||||
spinner.stop('图标集生成完成!')
|
||||
})
|
||||
@@ -1,15 +0,0 @@
|
||||
import path from 'node:path'
|
||||
import fs from 'fs-extra'
|
||||
import { icons } from '@iconify-json/ep'
|
||||
|
||||
async function prepare() {
|
||||
const outputDir = path.resolve(process.cwd(), 'public/icons')
|
||||
await fs.ensureDir(outputDir)
|
||||
await fs.emptyDir(outputDir)
|
||||
await fs.writeJSON(
|
||||
path.resolve(outputDir, 'icons.json'),
|
||||
icons,
|
||||
)
|
||||
}
|
||||
|
||||
prepare()
|
||||
@@ -1,66 +0,0 @@
|
||||
{
|
||||
// Default options
|
||||
'functions': true,
|
||||
'variableNameTransforms': ['dasherize']
|
||||
}
|
||||
|
||||
{{#block "sprites"}}
|
||||
{{#each sprites}}
|
||||
${{../spritesheet_info.strings.name}}-sprite-{{strings.name}}: ({{px.x}}, {{px.y}}, {{px.offset_x}}, {{px.offset_y}}, {{px.width}}, {{px.height}}, {{px.total_width}}, {{px.total_height}}, '{{{escaped_image}}}', '{{name}}');
|
||||
{{/each}}
|
||||
|
||||
${{spritesheet_info.strings.name}}-sprites: (
|
||||
{{#each sprites}}
|
||||
{{strings.name}}: ${{../spritesheet_info.strings.name}}-sprite-{{strings.name}},
|
||||
{{/each}}
|
||||
);
|
||||
{{/block}}
|
||||
|
||||
{{#block "sprite-functions"}}
|
||||
{{#if options.functions}}
|
||||
@mixin {{spritesheet_info.strings.name}}-sprite-width($sprite) {
|
||||
width: nth($sprite, 5);
|
||||
}
|
||||
|
||||
@mixin {{spritesheet_info.strings.name}}-sprite-height($sprite) {
|
||||
height: nth($sprite, 6);
|
||||
}
|
||||
|
||||
@mixin {{spritesheet_info.strings.name}}-sprite-position($sprite) {
|
||||
$sprite-offset-x: nth($sprite, 3);
|
||||
$sprite-offset-y: nth($sprite, 4);
|
||||
background-position: $sprite-offset-x $sprite-offset-y;
|
||||
}
|
||||
|
||||
@mixin {{spritesheet_info.strings.name}}-sprite-size($sprite) {
|
||||
background-size: nth($sprite, 7) nth($sprite, 8);
|
||||
}
|
||||
|
||||
@mixin {{spritesheet_info.strings.name}}-sprite-image($sprite) {
|
||||
$sprite-image: nth($sprite, 9);
|
||||
background-image: url(#{$sprite-image});
|
||||
}
|
||||
|
||||
@mixin {{spritesheet_info.strings.name}}-sprite($name) {
|
||||
@include {{spritesheet_info.strings.name}}-sprite-image(map-get(${{spritesheet_info.strings.name}}-sprites, #{$name}));
|
||||
@include {{spritesheet_info.strings.name}}-sprite-position(map-get(${{spritesheet_info.strings.name}}-sprites, #{$name}));
|
||||
@include {{spritesheet_info.strings.name}}-sprite-size(map-get(${{spritesheet_info.strings.name}}-sprites, #{$name}));
|
||||
@include {{spritesheet_info.strings.name}}-sprite-width(map-get(${{spritesheet_info.strings.name}}-sprites, #{$name}));
|
||||
@include {{spritesheet_info.strings.name}}-sprite-height(map-get(${{spritesheet_info.strings.name}}-sprites, #{$name}));
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
{{/if}}
|
||||
{{/block}}
|
||||
|
||||
{{#block "spritesheet-functions"}}
|
||||
{{#if options.functions}}
|
||||
@mixin all-{{spritesheet_info.strings.name}}-sprites() {
|
||||
@each $key, $val in ${{spritesheet_info.strings.name}}-sprites {
|
||||
$sprite-name: nth($val, 10);
|
||||
.{{spritesheet_info.strings.name}}-#{$sprite-name}-sprites {
|
||||
@include {{spritesheet_info.strings.name}}-sprite($key);
|
||||
}
|
||||
}
|
||||
}
|
||||
{{/if}}
|
||||
{{/block}}
|
||||
@@ -1,73 +1,27 @@
|
||||
<script lang="ts" setup>
|
||||
import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
||||
import hotkeys from 'hotkeys-js'
|
||||
import eventBus from './utils/eventBus'
|
||||
import useSettingsStore from '@/store/modules/settings'
|
||||
import useMenuStore from '@/store/modules/menu'
|
||||
<script setup lang="ts">
|
||||
import { ua } from '@/utils/ua'
|
||||
import Provider from './ui/provider/index.vue'
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
const settingsStore = useSettingsStore()
|
||||
const { auth } = useAuth()
|
||||
|
||||
const buttonConfig = ref({
|
||||
autoInsertSpace: true,
|
||||
})
|
||||
document.body.setAttribute('data-os', ua.getOS().name || '')
|
||||
|
||||
// 侧边栏主导航当前实际宽度
|
||||
const mainSidebarActualWidth = computed(() => {
|
||||
let actualWidth = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-main-sidebar-width'))
|
||||
if (['head', 'single'].includes(settingsStore.menu.menuMode)) {
|
||||
actualWidth = 0
|
||||
}
|
||||
return `${actualWidth}px`
|
||||
})
|
||||
|
||||
// 侧边栏次导航当前实际宽度
|
||||
const subSidebarActualWidth = computed(() => {
|
||||
let actualWidth = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-width'))
|
||||
if (settingsStore.menu.subMenuCollapse) {
|
||||
actualWidth = 64
|
||||
}
|
||||
return `${actualWidth}px`
|
||||
})
|
||||
|
||||
watch(() => settingsStore.app.colorScheme, () => {
|
||||
if (settingsStore.app.colorScheme === 'dark') {
|
||||
document.documentElement.classList.add('dark')
|
||||
}
|
||||
else {
|
||||
document.documentElement.classList.remove('dark')
|
||||
}
|
||||
}, {
|
||||
immediate: true,
|
||||
})
|
||||
|
||||
watch(() => settingsStore.mode, () => {
|
||||
if (settingsStore.mode === 'pc') {
|
||||
settingsStore.$patch((state) => {
|
||||
state.menu.subMenuCollapse = settingsStore.subMenuCollapseLastStatus
|
||||
})
|
||||
}
|
||||
else if (settingsStore.mode === 'mobile') {
|
||||
settingsStore.$patch((state) => {
|
||||
state.menu.subMenuCollapse = true
|
||||
})
|
||||
}
|
||||
document.body.setAttribute('data-mode', settingsStore.mode)
|
||||
}, {
|
||||
immediate: true,
|
||||
})
|
||||
|
||||
watch(() => settingsStore.menu.menuMode, () => {
|
||||
document.body.setAttribute('data-menu-mode', settingsStore.menu.menuMode)
|
||||
}, {
|
||||
immediate: true,
|
||||
const isAuth = computed(() => {
|
||||
return route.matched.every((item) => {
|
||||
return auth(item.meta.auth ?? '')
|
||||
})
|
||||
})
|
||||
|
||||
// 设置网页 title
|
||||
watch([
|
||||
() => settingsStore.app.enableDynamicTitle,
|
||||
() => settingsStore.settings.app.enableDynamicTitle,
|
||||
() => settingsStore.title,
|
||||
], () => {
|
||||
if (settingsStore.app.enableDynamicTitle && settingsStore.title) {
|
||||
const title = settingsStore.title
|
||||
if (settingsStore.settings.app.enableDynamicTitle && settingsStore.title) {
|
||||
const title = typeof settingsStore.title === 'function' ? settingsStore.title() : settingsStore.title
|
||||
document.title = `${title} - ${import.meta.env.VITE_APP_TITLE}`
|
||||
}
|
||||
else {
|
||||
@@ -75,27 +29,26 @@ watch([
|
||||
}
|
||||
}, {
|
||||
immediate: true,
|
||||
deep: true,
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
settingsStore.setMode(document.documentElement.clientWidth)
|
||||
window.onresize = () => {
|
||||
window.addEventListener('resize', () => {
|
||||
settingsStore.setMode(document.documentElement.clientWidth)
|
||||
}
|
||||
hotkeys('alt+i', () => {
|
||||
eventBus.emit('global-system-info-toggle')
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-config-provider :locale="zhCn" :size="settingsStore.app.elementSize" :button="buttonConfig">
|
||||
<RouterView
|
||||
:style="{
|
||||
'--g-main-sidebar-actual-width': mainSidebarActualWidth,
|
||||
'--g-sub-sidebar-actual-width': subSidebarActualWidth,
|
||||
}"
|
||||
/>
|
||||
<system-info />
|
||||
</el-config-provider>
|
||||
<Provider>
|
||||
<RouterView v-slot="{ Component }">
|
||||
<component :is="Component" v-if="isAuth" />
|
||||
<FaNotAllowed v-else />
|
||||
</RouterView>
|
||||
<FaBackToTop />
|
||||
<FaToast />
|
||||
<FaNotification />
|
||||
<FaSystemInfo />
|
||||
</Provider>
|
||||
</template>
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
import axios from 'axios'
|
||||
// import qs from 'qs'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import router from '@/router/index'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { toast } from 'vue-sonner'
|
||||
|
||||
const toLogin = () => {
|
||||
useUserStore().logout()
|
||||
router.push({
|
||||
path: '/login',
|
||||
query: {
|
||||
redirect: router.currentRoute.value.path !== '/login' ? router.currentRoute.value.fullPath : undefined,
|
||||
},
|
||||
})
|
||||
// 请求重试配置
|
||||
const MAX_RETRY_COUNT = 3 // 最大重试次数
|
||||
const RETRY_DELAY = 1000 // 重试延迟时间(毫秒)
|
||||
|
||||
// 扩展 AxiosRequestConfig 类型
|
||||
declare module 'axios' {
|
||||
export interface AxiosRequestConfig {
|
||||
retry?: boolean
|
||||
retryCount?: number
|
||||
}
|
||||
}
|
||||
|
||||
const api = axios.create({
|
||||
baseURL: import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY === 'true' ? '/proxy/' : import.meta.env.VITE_APP_API_BASEURL,
|
||||
baseURL: (import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY) ? '/proxy/' : import.meta.env.VITE_APP_API_BASEURL,
|
||||
timeout: 1000 * 60,
|
||||
responseType: 'json',
|
||||
})
|
||||
|
||||
api.interceptors.request.use(
|
||||
(request) => {
|
||||
// 全局拦截请求发送前提交的参数
|
||||
const userStore = useUserStore()
|
||||
/**
|
||||
* 全局拦截请求发送前提交的参数
|
||||
* 以下代码为示例,在请求头里带上 token 信息
|
||||
*/
|
||||
if (userStore.isLogin && request.headers) {
|
||||
request.headers.Token = userStore.token
|
||||
// 设置请求头
|
||||
if (request.headers) {
|
||||
if (userStore.isLogin) {
|
||||
request.headers.Token = userStore.token
|
||||
}
|
||||
}
|
||||
// 是否将 POST 请求参数进行字符串化处理
|
||||
if (request.method === 'post') {
|
||||
@@ -40,27 +40,12 @@ api.interceptors.request.use(
|
||||
},
|
||||
)
|
||||
|
||||
api.interceptors.response.use(
|
||||
(response) => {
|
||||
/**
|
||||
* 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示
|
||||
* 假设返回数据格式为:{ status: 1, error: '', data: '' }
|
||||
* 规则是当 status 为 1 时表示请求成功,为 0 时表示接口需要登录或者登录状态失效,需要重新登录
|
||||
* 请求出错时 error 会返回错误信息
|
||||
*/
|
||||
if (response.data.status === 1) {
|
||||
if (response.data.error !== '') {
|
||||
// 这里做错误提示,如果使用了 element plus 则可以使用 Message 进行提示
|
||||
// ElMessage.error(options)
|
||||
return Promise.reject(response.data)
|
||||
}
|
||||
}
|
||||
else {
|
||||
toLogin()
|
||||
}
|
||||
return Promise.resolve(response.data)
|
||||
},
|
||||
(error) => {
|
||||
// 处理错误信息的函数
|
||||
function handleError(error: any) {
|
||||
if (error.status === 401) {
|
||||
useUserStore().requestLogout()
|
||||
}
|
||||
else {
|
||||
let message = error.message
|
||||
if (message === 'Network Error') {
|
||||
message = '后端网络故障'
|
||||
@@ -71,11 +56,58 @@ api.interceptors.response.use(
|
||||
else if (message.includes('Request failed with status code')) {
|
||||
message = `接口${message.substr(message.length - 3)}异常`
|
||||
}
|
||||
ElMessage({
|
||||
message,
|
||||
type: 'error',
|
||||
toast.error('Error', {
|
||||
description: message,
|
||||
})
|
||||
return Promise.reject(error)
|
||||
}
|
||||
return Promise.reject(error)
|
||||
}
|
||||
|
||||
api.interceptors.response.use(
|
||||
(response) => {
|
||||
/**
|
||||
* 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示
|
||||
* 假设返回数据格式为:{ status: 1, error: '', data: {} }
|
||||
* 规则是当 status 为 1 时表示请求成功,为 0 时表示接口需要登录或者登录状态失效,需要重新登录
|
||||
* 请求出错时 error 会返回错误信息
|
||||
*/
|
||||
if (typeof response.data === 'object') {
|
||||
if (response.data.status === 1) {
|
||||
if (response.data.error !== '') {
|
||||
toast.warning('Warning', {
|
||||
description: response.data.error,
|
||||
})
|
||||
return Promise.reject(response.data)
|
||||
}
|
||||
}
|
||||
else {
|
||||
useUserStore().requestLogout()
|
||||
}
|
||||
return Promise.resolve(response.data)
|
||||
}
|
||||
else {
|
||||
return Promise.reject(response.data)
|
||||
}
|
||||
},
|
||||
async (error) => {
|
||||
// 获取请求配置
|
||||
const config = error.config
|
||||
// 如果配置不存在或未启用重试,则直接处理错误
|
||||
if (!config || !config.retry) {
|
||||
return handleError(error)
|
||||
}
|
||||
// 设置重试次数
|
||||
config.retryCount = config.retryCount || 0
|
||||
// 判断是否超过重试次数
|
||||
if (config.retryCount >= MAX_RETRY_COUNT) {
|
||||
return handleError(error)
|
||||
}
|
||||
// 重试次数自增
|
||||
config.retryCount += 1
|
||||
// 延迟重试
|
||||
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY))
|
||||
// 重新发起请求
|
||||
return api(config)
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import api from '../index'
|
||||
|
||||
export default {
|
||||
// 后端获取路由数据
|
||||
routeList: () => api.get('app/route/list', {
|
||||
baseURL: '/mock/',
|
||||
}),
|
||||
|
||||
// 基于文件系统路由模式下,后端获取导航菜单数据
|
||||
menuList: () => api.get('app/menu/list', {
|
||||
baseURL: '/mock/',
|
||||
}),
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import api from '../index'
|
||||
|
||||
export default {
|
||||
// 登录
|
||||
login: (data: {
|
||||
account: string
|
||||
password: string
|
||||
}) => api.post('user/login', data, {
|
||||
baseURL: '/mock/',
|
||||
}),
|
||||
|
||||
// 获取权限
|
||||
permission: () => api.get('user/permission', {
|
||||
baseURL: '/mock/',
|
||||
}),
|
||||
|
||||
// 修改密码
|
||||
passwordEdit: (data: {
|
||||
password: string
|
||||
newPassword: string
|
||||
}) => api.post('user/password/edit', data, {
|
||||
baseURL: '/mock/',
|
||||
}),
|
||||
}
|
||||
|
After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.4 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" class="icon" viewBox="0 0 1024 1024"><path fill="#dca54f" d="m136.533 273.067 669.048 422.058c10.65 6.725 15.838 20.48 12.697 33.588-3.106 13.073-13.824 22.186-26.077 22.22H238.42c-27.306 0-50.346-22.425-53.726-52.326l-48.162-425.54z"/><path fill="#dca54f" d="M834.219 698.607c-3.345 29.9-26.385 52.326-53.692 52.326H245.794c-12.288 0-41.984-9.113-45.124-22.186-3.175-13.073 2.048-26.863 12.697-33.588l668.98-422.092-48.128 425.506z"/><path fill="#e7b15c" d="m512 170.667 298.428 490.598a61.44 61.44 0 0 1 2.184 59.324c-9.489 18.705-27.818 30.344-47.718 30.344H512z"/><path fill="#f2d59c" d="M512 170.667 196.062 666.01a61.44 61.44 0 0 0-2.185 59.323c9.49 18.705 27.341 25.6 47.24 25.6H512z"/><path fill="#e7b15c" d="M459.776 153.327c0 18.193 9.967 34.987 26.112 44.1a53.35 53.35 0 0 0 52.224 0c16.145-9.113 26.112-25.941 26.112-44.1 0-28.126-23.381-50.927-52.224-50.927s-52.224 22.801-52.224 50.927M851.319 255.18c-.41 18.432 9.455 35.67 25.771 45.022 16.316 9.318 36.523 9.318 52.873 0 16.315-9.353 26.18-26.59 25.77-45.056-.614-27.648-23.825-49.8-52.224-49.8-28.364 0-51.541 22.152-52.19 49.834m-783.018 0c-.444 18.432 9.42 35.67 25.736 45.022 16.316 9.318 36.523 9.318 52.873 0 16.316-9.353 26.18-26.59 25.77-45.056-.614-27.648-23.825-49.8-52.223-49.8-28.365 0-51.542 22.152-52.19 49.834z"/><path fill="#dca54f" d="M238.933 819.2h546.134q34.133 0 34.133 34.133t-34.133 34.134H238.933q-34.133 0-34.133-34.134t34.133-34.133"/></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" class="icon" viewBox="0 0 1024 1024"><path d="M512 85.333c235.648 0 426.667 191.019 426.667 426.667S747.648 938.667 512 938.667 85.333 747.648 85.333 512 276.352 85.333 512 85.333m0 85.334a341.333 341.333 0 1 0 0 682.666 341.333 341.333 0 0 0 0-682.666m0 298.666c85.333 0 156.459 14.208 213.333 42.667a213.333 213.333 0 0 1-426.666 0c56.874-28.459 128-42.667 213.333-42.667M362.667 298.667A106.67 106.67 0 0 1 467.2 384H258.133a106.67 106.67 0 0 1 104.534-85.333m298.666 0A106.67 106.67 0 0 1 765.867 384H556.8a106.67 106.67 0 0 1 104.533-85.333"/></svg>
|
||||
|
After Width: | Height: | Size: 619 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" class="icon" viewBox="0 0 1024 1024"><path d="M512 938.667C276.352 938.667 85.333 747.648 85.333 512S276.352 85.333 512 85.333 938.667 276.352 938.667 512 747.648 938.667 512 938.667m0-85.334a341.333 341.333 0 1 0 0-682.666 341.333 341.333 0 0 0 0 682.666M341.333 554.667h341.334a170.667 170.667 0 1 1-341.334 0m0-85.334a64 64 0 1 1 0-128 64 64 0 0 1 0 128m341.334 0a64 64 0 1 1 0-128 64 64 0 0 1 0 128"/></svg>
|
||||
|
After Width: | Height: | Size: 476 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" class="icon" viewBox="0 0 1024 1024"><path d="M512 938.667C276.352 938.667 85.333 747.648 85.333 512S276.352 85.333 512 85.333 938.667 276.352 938.667 512 747.648 938.667 512 938.667m0-85.334a341.333 341.333 0 1 0 0-682.666 341.333 341.333 0 0 0 0 682.666m-213.333-128a213.333 213.333 0 0 1 426.666 0H640a128 128 0 0 0-256 0zm42.666-256a64 64 0 1 1 0-128 64 64 0 0 1 0 128m341.334 0a64 64 0 1 1 0-128 64 64 0 0 1 0 128"/></svg>
|
||||
|
After Width: | Height: | Size: 492 B |