create-weapp-vite 2.3.3 → 2.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/cli.js +36 -31
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/{src-RVwSi_b2.js → src-Tx4viskG.js} +20 -8
- package/package.json +1 -1
- package/templates/default/eslint.config.js +1 -1
- package/templates/default/package.json +1 -0
- package/templates/default/src/app.scss +1 -0
- package/templates/default/src/components/HelloWorld/HelloWorld.scss +10 -10
- package/templates/default/src/pages/index/index.scss +1 -0
- package/templates/lib/eslint.config.js +1 -1
- package/templates/lib/package.json +2 -1
- package/templates/lib/src/app.scss +1 -0
- package/templates/lib/src/components/HelloWorld/HelloWorld.scss +10 -10
- package/templates/lib/src/components/sfc-setup/index.vue +8 -8
- package/templates/plugin/.editorconfig +9 -0
- package/templates/plugin/README.md +35 -0
- package/templates/plugin/eslint.config.js +6 -0
- package/templates/plugin/gitignore +36 -0
- package/templates/plugin/package.json +45 -0
- package/templates/plugin/plugin/components/hello-component/index.vue +174 -0
- package/templates/plugin/plugin/components/native-meter/index.json +6 -0
- package/templates/plugin/plugin/components/native-meter/index.scss +51 -0
- package/templates/plugin/plugin/components/native-meter/index.ts +28 -0
- package/templates/plugin/plugin/components/native-meter/index.wxml +12 -0
- package/templates/plugin/plugin/index.ts +16 -0
- package/templates/plugin/plugin/pages/hello-page/index.vue +332 -0
- package/templates/plugin/plugin/pages/native-playground/index.json +7 -0
- package/templates/plugin/plugin/pages/native-playground/index.scss +81 -0
- package/templates/plugin/plugin/pages/native-playground/index.ts +20 -0
- package/templates/plugin/plugin/pages/native-playground/index.wxml +30 -0
- package/templates/plugin/plugin/plugin.json +11 -0
- package/templates/plugin/plugin/utils/showcase.ts +102 -0
- package/templates/plugin/project.config.json +48 -0
- package/templates/plugin/project.private.config.json +8 -0
- package/templates/plugin/shared/shared-data.ts +12 -0
- package/templates/plugin/src/app.json +11 -0
- package/templates/plugin/src/app.ts +5 -0
- package/templates/plugin/src/pages/index/index.json +6 -0
- package/templates/plugin/src/pages/index/index.ts +46 -0
- package/templates/plugin/src/pages/index/index.wxml +46 -0
- package/templates/plugin/src/pages/index/index.wxss +113 -0
- package/templates/plugin/src/sitemap.json +7 -0
- package/templates/plugin/stylelint.config.js +5 -0
- package/templates/plugin/tsconfig.json +17 -0
- package/templates/plugin/weapp-vite.config.ts +23 -0
- package/templates/tailwindcss/eslint.config.js +4 -1
- package/templates/tailwindcss/package.json +3 -2
- package/templates/tailwindcss/postcss.config.js +1 -2
- package/templates/tailwindcss/src/app.css +2 -0
- package/templates/tailwindcss/src/pages/index/index.scss +1 -0
- package/templates/tailwindcss/src/pages/profile/index.scss +1 -0
- package/templates/tailwindcss/tailwind.config.ts +0 -5
- package/templates/tailwindcss/weapp-vite.config.ts +2 -0
- package/templates/tdesign/eslint.config.js +4 -1
- package/templates/tdesign/package.json +3 -2
- package/templates/tdesign/postcss.config.js +1 -2
- package/templates/tdesign/src/app.css +2 -0
- package/templates/tdesign/src/pages/index/index.scss +1 -0
- package/templates/tdesign/tailwind.config.ts +0 -5
- package/templates/tdesign/weapp-vite.config.ts +2 -0
- package/templates/vant/eslint.config.js +4 -1
- package/templates/vant/package.json +3 -2
- package/templates/vant/postcss.config.js +1 -2
- package/templates/vant/src/app.css +2 -0
- package/templates/vant/src/pages/index/index.scss +1 -0
- package/templates/vant/tailwind.config.ts +0 -5
- package/templates/vant/weapp-vite.config.ts +2 -0
- package/templates/wevu/eslint.config.js +1 -1
- package/templates/wevu/package.json +1 -0
- package/templates/wevu-tdesign/eslint.config.js +13 -1
- package/templates/wevu-tdesign/package.json +3 -2
- package/templates/wevu-tdesign/postcss.config.js +1 -2
- package/templates/wevu-tdesign/src/app.css +7 -0
- package/templates/wevu-tdesign/src/app.vue +1 -10
- package/templates/wevu-tdesign/tailwind.config.ts +0 -5
- package/templates/wevu-tdesign/weapp-vite.config.ts +1 -0
- package/templates/tailwindcss/src/app.scss +0 -3
- package/templates/tdesign/src/app.scss +0 -3
- package/templates/vant/src/app.scss +0 -3
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { PluginFeatureCard } from '../../utils/showcase'
|
|
3
|
+
import { computed } from 'wevu'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
entries?: PluginFeatureCard[]
|
|
7
|
+
note?: string
|
|
8
|
+
title?: string
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
defineComponentJson({
|
|
12
|
+
component: true,
|
|
13
|
+
styleIsolation: 'apply-shared',
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const safeEntries = computed(() => props.entries ?? [])
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<view class="showcase-card">
|
|
21
|
+
<view class="showcase-card__head">
|
|
22
|
+
<view>
|
|
23
|
+
<text class="showcase-card__eyebrow">
|
|
24
|
+
plugin public component
|
|
25
|
+
</text>
|
|
26
|
+
<text class="showcase-card__title">
|
|
27
|
+
{{ props.title || '插件公开 Vue SFC 组件' }}
|
|
28
|
+
</text>
|
|
29
|
+
</view>
|
|
30
|
+
<text class="showcase-card__count">
|
|
31
|
+
{{ safeEntries.length }} items
|
|
32
|
+
</text>
|
|
33
|
+
</view>
|
|
34
|
+
|
|
35
|
+
<text v-if="props.note" class="showcase-card__note">
|
|
36
|
+
{{ props.note }}
|
|
37
|
+
</text>
|
|
38
|
+
|
|
39
|
+
<view class="showcase-card__list">
|
|
40
|
+
<view
|
|
41
|
+
v-for="entry in safeEntries"
|
|
42
|
+
:key="entry.id"
|
|
43
|
+
class="showcase-card__item"
|
|
44
|
+
>
|
|
45
|
+
<view class="showcase-card__item-head">
|
|
46
|
+
<text class="showcase-card__item-title">
|
|
47
|
+
{{ entry.title }}
|
|
48
|
+
</text>
|
|
49
|
+
<text class="showcase-card__badge">
|
|
50
|
+
{{ entry.kindLabel }}
|
|
51
|
+
</text>
|
|
52
|
+
</view>
|
|
53
|
+
<text class="showcase-card__item-summary">
|
|
54
|
+
{{ entry.summary }}
|
|
55
|
+
</text>
|
|
56
|
+
<view class="showcase-card__score-row">
|
|
57
|
+
<text class="showcase-card__score-label">
|
|
58
|
+
完成度
|
|
59
|
+
</text>
|
|
60
|
+
<text class="showcase-card__score-value">
|
|
61
|
+
{{ entry.score }}%
|
|
62
|
+
</text>
|
|
63
|
+
</view>
|
|
64
|
+
</view>
|
|
65
|
+
</view>
|
|
66
|
+
</view>
|
|
67
|
+
</template>
|
|
68
|
+
|
|
69
|
+
<style lang="scss">
|
|
70
|
+
.showcase-card {
|
|
71
|
+
padding: 28rpx;
|
|
72
|
+
margin-top: 24rpx;
|
|
73
|
+
background: linear-gradient(180deg, #fff 0%, #f6f8fc 100%);
|
|
74
|
+
border-radius: 28rpx;
|
|
75
|
+
box-shadow: 0 14rpx 30rpx rgb(63 78 107 / 10%);
|
|
76
|
+
|
|
77
|
+
&__head {
|
|
78
|
+
display: flex;
|
|
79
|
+
gap: 20rpx;
|
|
80
|
+
align-items: flex-start;
|
|
81
|
+
justify-content: space-between;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
&__eyebrow,
|
|
85
|
+
&__count,
|
|
86
|
+
&__score-label {
|
|
87
|
+
font-size: 22rpx;
|
|
88
|
+
color: #6b778d;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
&__eyebrow,
|
|
92
|
+
&__title,
|
|
93
|
+
&__note,
|
|
94
|
+
&__item-summary,
|
|
95
|
+
&__item-title,
|
|
96
|
+
&__score-row {
|
|
97
|
+
display: block;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
&__eyebrow {
|
|
101
|
+
text-transform: uppercase;
|
|
102
|
+
letter-spacing: 2rpx;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
&__title {
|
|
106
|
+
margin-top: 10rpx;
|
|
107
|
+
font-size: 32rpx;
|
|
108
|
+
font-weight: 700;
|
|
109
|
+
line-height: 1.35;
|
|
110
|
+
color: #1c2e4b;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
&__note {
|
|
114
|
+
margin-top: 16rpx;
|
|
115
|
+
font-size: 24rpx;
|
|
116
|
+
line-height: 1.7;
|
|
117
|
+
color: #52627f;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
&__list {
|
|
121
|
+
display: grid;
|
|
122
|
+
gap: 16rpx;
|
|
123
|
+
margin-top: 20rpx;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&__item {
|
|
127
|
+
padding: 22rpx;
|
|
128
|
+
background: rgb(255 255 255 / 92%);
|
|
129
|
+
border: 2rpx solid #e7edf8;
|
|
130
|
+
border-radius: 22rpx;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
&__item-head,
|
|
134
|
+
&__score-row {
|
|
135
|
+
display: flex;
|
|
136
|
+
gap: 16rpx;
|
|
137
|
+
align-items: center;
|
|
138
|
+
justify-content: space-between;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
&__item-title {
|
|
142
|
+
flex: 1;
|
|
143
|
+
font-size: 28rpx;
|
|
144
|
+
font-weight: 600;
|
|
145
|
+
line-height: 1.45;
|
|
146
|
+
color: #20324d;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
&__badge {
|
|
150
|
+
padding: 8rpx 16rpx;
|
|
151
|
+
font-size: 22rpx;
|
|
152
|
+
color: #fff;
|
|
153
|
+
background: #203d70;
|
|
154
|
+
border-radius: 999rpx;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
&__item-summary {
|
|
158
|
+
margin-top: 12rpx;
|
|
159
|
+
font-size: 24rpx;
|
|
160
|
+
line-height: 1.65;
|
|
161
|
+
color: #5c6d89;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
&__score-row {
|
|
165
|
+
margin-top: 14rpx;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
&__score-value {
|
|
169
|
+
font-size: 24rpx;
|
|
170
|
+
font-weight: 700;
|
|
171
|
+
color: #1e4f8d;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
</style>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
.native-meter {
|
|
2
|
+
padding: 20rpx;
|
|
3
|
+
margin-top: 12rpx;
|
|
4
|
+
background: linear-gradient(180deg, #fcfdff 0%, #f1f6ff 100%);
|
|
5
|
+
border: 2rpx solid #dfebff;
|
|
6
|
+
border-radius: 22rpx;
|
|
7
|
+
|
|
8
|
+
&__head {
|
|
9
|
+
display: flex;
|
|
10
|
+
gap: 12rpx;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: space-between;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&__label {
|
|
16
|
+
font-size: 24rpx;
|
|
17
|
+
font-weight: 600;
|
|
18
|
+
color: #233a5e;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&__value {
|
|
22
|
+
font-size: 23rpx;
|
|
23
|
+
color: #5f6a80;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&__track {
|
|
27
|
+
height: 16rpx;
|
|
28
|
+
margin-top: 14rpx;
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
background: #deebff;
|
|
31
|
+
border-radius: 999rpx;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
&__bar {
|
|
35
|
+
height: 100%;
|
|
36
|
+
border-radius: 999rpx;
|
|
37
|
+
transition: width 0.25s ease;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&__bar--neutral {
|
|
41
|
+
background: linear-gradient(90deg, #5f7cff, #4d63dd);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&__bar--success {
|
|
45
|
+
background: linear-gradient(90deg, #0d9488, #22c55e);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&__bar--danger {
|
|
49
|
+
background: linear-gradient(90deg, #dc2626, #f97316);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { InferNativeProps, NativeComponent, NativePropType } from 'wevu'
|
|
2
|
+
|
|
3
|
+
type NativeMeterTone = 'neutral' | 'success' | 'danger'
|
|
4
|
+
|
|
5
|
+
const nativeMeterProperties = {
|
|
6
|
+
label: {
|
|
7
|
+
type: String,
|
|
8
|
+
value: '',
|
|
9
|
+
},
|
|
10
|
+
value: {
|
|
11
|
+
type: Number,
|
|
12
|
+
value: 0,
|
|
13
|
+
},
|
|
14
|
+
tone: {
|
|
15
|
+
type: String as NativePropType<NativeMeterTone>,
|
|
16
|
+
value: 'neutral',
|
|
17
|
+
},
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type NativeMeterProps = InferNativeProps<typeof nativeMeterProperties>
|
|
21
|
+
|
|
22
|
+
Component({
|
|
23
|
+
properties: nativeMeterProperties,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
const nativeMeter = {} as NativeComponent<NativeMeterProps>
|
|
27
|
+
|
|
28
|
+
export default nativeMeter
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<view class="native-meter">
|
|
2
|
+
<view class="native-meter__head">
|
|
3
|
+
<text class="native-meter__label">{{label || '插件原生 TS + SCSS 组件'}}</text>
|
|
4
|
+
<text class="native-meter__value">{{value}}%</text>
|
|
5
|
+
</view>
|
|
6
|
+
<view class="native-meter__track">
|
|
7
|
+
<view
|
|
8
|
+
class="native-meter__bar native-meter__bar--{{tone}}"
|
|
9
|
+
style="width: {{value > 100 ? 100 : value < 0 ? 0 : value}}%;"
|
|
10
|
+
/>
|
|
11
|
+
</view>
|
|
12
|
+
</view>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getSharedLoadMessage, SHARED_ANSWER } from '@/shared/shared-data'
|
|
2
|
+
import { getPluginShowcaseSummary, getFeatureCards as getShowcaseCards } from './utils/showcase'
|
|
3
|
+
|
|
4
|
+
export function sayHello() {
|
|
5
|
+
return getSharedLoadMessage('plugin')
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const answer = SHARED_ANSWER
|
|
9
|
+
|
|
10
|
+
export function getShowcaseSummary() {
|
|
11
|
+
return getPluginShowcaseSummary()
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function getFeatureCards() {
|
|
15
|
+
return getShowcaseCards()
|
|
16
|
+
}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ref } from 'wevu'
|
|
3
|
+
import { getFeatureCardsByKind, getFeatureKindLabel, getPluginShowcaseSummary, getScoreTone } from '../../utils/showcase'
|
|
4
|
+
|
|
5
|
+
type KindFilter = 'all' | 'vue-sfc' | 'native-ts' | 'scss'
|
|
6
|
+
|
|
7
|
+
const currentKind = ref<KindFilter>('all')
|
|
8
|
+
const score = ref(94)
|
|
9
|
+
const cards = ref(getFeatureCardsByKind('all'))
|
|
10
|
+
const summary = getPluginShowcaseSummary()
|
|
11
|
+
const meterTone = ref(getScoreTone(score.value))
|
|
12
|
+
|
|
13
|
+
definePageJson({
|
|
14
|
+
navigationBarTitleText: '插件 Vue SFC 能力页',
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const filterOptions = [
|
|
18
|
+
{ id: 'all' as KindFilter, label: '全部' },
|
|
19
|
+
{ id: 'vue-sfc' as KindFilter, label: getFeatureKindLabel('vue-sfc') },
|
|
20
|
+
{ id: 'native-ts' as KindFilter, label: getFeatureKindLabel('native-ts') },
|
|
21
|
+
{ id: 'scss' as KindFilter, label: getFeatureKindLabel('scss') },
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
function selectKind(kind: KindFilter) {
|
|
25
|
+
currentKind.value = kind
|
|
26
|
+
cards.value = getFeatureCardsByKind(kind)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function pulseScore() {
|
|
30
|
+
score.value = score.value >= 96 ? 78 : score.value + 6
|
|
31
|
+
meterTone.value = getScoreTone(score.value)
|
|
32
|
+
}
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
<view class="page">
|
|
37
|
+
<view class="hero">
|
|
38
|
+
<text class="hero__eyebrow">
|
|
39
|
+
plugin vue sfc
|
|
40
|
+
</text>
|
|
41
|
+
<text class="hero__title">
|
|
42
|
+
插件页直接使用 Vue SFC
|
|
43
|
+
</text>
|
|
44
|
+
<text class="hero__desc">
|
|
45
|
+
当前页面由 `.vue` 入口产出,同时组合插件内的原生 TS 组件与公开 Vue SFC 组件。
|
|
46
|
+
</text>
|
|
47
|
+
</view>
|
|
48
|
+
|
|
49
|
+
<view class="toolbar">
|
|
50
|
+
<view
|
|
51
|
+
v-for="option in filterOptions"
|
|
52
|
+
:key="option.id"
|
|
53
|
+
class="toolbar__chip"
|
|
54
|
+
:class="currentKind === option.id ? 'toolbar__chip--active' : ''"
|
|
55
|
+
@tap="selectKind(option.id)"
|
|
56
|
+
>
|
|
57
|
+
<text>{{ option.label }}</text>
|
|
58
|
+
</view>
|
|
59
|
+
</view>
|
|
60
|
+
|
|
61
|
+
<view class="overview">
|
|
62
|
+
<text class="overview__title">
|
|
63
|
+
插件 Vue 页内的数据渲染
|
|
64
|
+
</text>
|
|
65
|
+
<text class="overview__summary">
|
|
66
|
+
{{ summary }}
|
|
67
|
+
</text>
|
|
68
|
+
|
|
69
|
+
<view
|
|
70
|
+
v-for="card in cards"
|
|
71
|
+
:key="card.id"
|
|
72
|
+
class="overview__item"
|
|
73
|
+
>
|
|
74
|
+
<view class="overview__item-head">
|
|
75
|
+
<text class="overview__item-title">
|
|
76
|
+
{{ card.title }}
|
|
77
|
+
</text>
|
|
78
|
+
<text class="overview__badge">
|
|
79
|
+
{{ card.kindLabel }}
|
|
80
|
+
</text>
|
|
81
|
+
</view>
|
|
82
|
+
<text class="overview__item-summary">
|
|
83
|
+
{{ card.summary }}
|
|
84
|
+
</text>
|
|
85
|
+
<text class="overview__item-score">
|
|
86
|
+
完成度 {{ card.score }}%
|
|
87
|
+
</text>
|
|
88
|
+
</view>
|
|
89
|
+
</view>
|
|
90
|
+
|
|
91
|
+
<view class="panel">
|
|
92
|
+
<text class="panel__title">
|
|
93
|
+
当前页内的响应式评分条
|
|
94
|
+
</text>
|
|
95
|
+
<view class="meter">
|
|
96
|
+
<view class="meter__head">
|
|
97
|
+
<text class="meter__label">
|
|
98
|
+
Vue SFC Page Score
|
|
99
|
+
</text>
|
|
100
|
+
<text class="meter__value">
|
|
101
|
+
{{ score }}%
|
|
102
|
+
</text>
|
|
103
|
+
</view>
|
|
104
|
+
<view class="meter__track">
|
|
105
|
+
<view
|
|
106
|
+
class="meter__bar"
|
|
107
|
+
:class="`meter__bar--${meterTone}`"
|
|
108
|
+
:style="`width: ${score}%`"
|
|
109
|
+
/>
|
|
110
|
+
</view>
|
|
111
|
+
</view>
|
|
112
|
+
<button class="panel__button" @tap="pulseScore">
|
|
113
|
+
切换页面内评分
|
|
114
|
+
</button>
|
|
115
|
+
</view>
|
|
116
|
+
</view>
|
|
117
|
+
</template>
|
|
118
|
+
|
|
119
|
+
<style lang="scss">
|
|
120
|
+
page {
|
|
121
|
+
min-height: 100%;
|
|
122
|
+
background:
|
|
123
|
+
radial-gradient(circle at top left, rgb(82 188 255 / 20%), transparent 28%),
|
|
124
|
+
linear-gradient(180deg, #eff5ff 0%, #f7fbff 100%);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.page {
|
|
128
|
+
padding: 28rpx 24rpx 40rpx;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.hero,
|
|
132
|
+
.panel {
|
|
133
|
+
border-radius: 28rpx;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.hero {
|
|
137
|
+
padding: 34rpx 32rpx;
|
|
138
|
+
color: #fff;
|
|
139
|
+
background: linear-gradient(135deg, #16315c 0%, #25549c 54%, #34a0a4 100%);
|
|
140
|
+
box-shadow: 0 18rpx 42rpx rgb(31 71 130 / 18%);
|
|
141
|
+
|
|
142
|
+
&__eyebrow,
|
|
143
|
+
&__title,
|
|
144
|
+
&__desc {
|
|
145
|
+
display: block;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
&__eyebrow {
|
|
149
|
+
font-size: 22rpx;
|
|
150
|
+
text-transform: uppercase;
|
|
151
|
+
letter-spacing: 4rpx;
|
|
152
|
+
opacity: 0.74;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
&__title {
|
|
156
|
+
margin-top: 12rpx;
|
|
157
|
+
font-size: 40rpx;
|
|
158
|
+
font-weight: 700;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
&__desc {
|
|
162
|
+
margin-top: 16rpx;
|
|
163
|
+
font-size: 25rpx;
|
|
164
|
+
line-height: 1.75;
|
|
165
|
+
opacity: 0.92;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.toolbar {
|
|
170
|
+
display: flex;
|
|
171
|
+
flex-wrap: wrap;
|
|
172
|
+
gap: 14rpx;
|
|
173
|
+
margin-top: 22rpx;
|
|
174
|
+
|
|
175
|
+
&__chip {
|
|
176
|
+
padding: 14rpx 20rpx;
|
|
177
|
+
font-size: 24rpx;
|
|
178
|
+
color: #35527f;
|
|
179
|
+
background: rgb(255 255 255 / 85%);
|
|
180
|
+
border-radius: 999rpx;
|
|
181
|
+
box-shadow: 0 8rpx 18rpx rgb(70 103 157 / 8%);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
&__chip--active {
|
|
185
|
+
color: #fff;
|
|
186
|
+
background: #214781;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.panel {
|
|
191
|
+
padding: 28rpx;
|
|
192
|
+
margin-top: 24rpx;
|
|
193
|
+
background: rgb(255 255 255 / 88%);
|
|
194
|
+
box-shadow: 0 14rpx 28rpx rgb(74 103 146 / 10%);
|
|
195
|
+
|
|
196
|
+
&__title {
|
|
197
|
+
display: block;
|
|
198
|
+
margin-bottom: 12rpx;
|
|
199
|
+
font-size: 30rpx;
|
|
200
|
+
font-weight: 600;
|
|
201
|
+
color: #17335a;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
&__button {
|
|
205
|
+
margin-top: 18rpx;
|
|
206
|
+
font-size: 26rpx;
|
|
207
|
+
color: #fff;
|
|
208
|
+
background: #1d4f91;
|
|
209
|
+
border-radius: 999rpx;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.overview {
|
|
214
|
+
padding: 28rpx;
|
|
215
|
+
margin-top: 24rpx;
|
|
216
|
+
background: rgb(255 255 255 / 92%);
|
|
217
|
+
border-radius: 28rpx;
|
|
218
|
+
box-shadow: 0 12rpx 28rpx rgb(69 96 137 / 10%);
|
|
219
|
+
|
|
220
|
+
&__title,
|
|
221
|
+
&__summary,
|
|
222
|
+
&__item-title,
|
|
223
|
+
&__item-summary,
|
|
224
|
+
&__item-score {
|
|
225
|
+
display: block;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
&__title {
|
|
229
|
+
font-size: 30rpx;
|
|
230
|
+
font-weight: 600;
|
|
231
|
+
color: #18355f;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
&__summary {
|
|
235
|
+
margin-top: 12rpx;
|
|
236
|
+
font-size: 24rpx;
|
|
237
|
+
line-height: 1.7;
|
|
238
|
+
color: #566883;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
&__item {
|
|
242
|
+
padding: 22rpx;
|
|
243
|
+
margin-top: 18rpx;
|
|
244
|
+
background: #fff;
|
|
245
|
+
border: 2rpx solid #e6edf9;
|
|
246
|
+
border-radius: 22rpx;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
&__item-head {
|
|
250
|
+
display: flex;
|
|
251
|
+
gap: 16rpx;
|
|
252
|
+
align-items: center;
|
|
253
|
+
justify-content: space-between;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
&__item-title {
|
|
257
|
+
flex: 1;
|
|
258
|
+
font-size: 28rpx;
|
|
259
|
+
font-weight: 600;
|
|
260
|
+
color: #1f314c;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
&__badge {
|
|
264
|
+
padding: 8rpx 16rpx;
|
|
265
|
+
font-size: 22rpx;
|
|
266
|
+
color: #fff;
|
|
267
|
+
background: #244b87;
|
|
268
|
+
border-radius: 999rpx;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
&__item-summary {
|
|
272
|
+
margin-top: 12rpx;
|
|
273
|
+
font-size: 24rpx;
|
|
274
|
+
line-height: 1.65;
|
|
275
|
+
color: #5c6d89;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
&__item-score {
|
|
279
|
+
margin-top: 12rpx;
|
|
280
|
+
font-size: 23rpx;
|
|
281
|
+
font-weight: 600;
|
|
282
|
+
color: #23508d;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.meter {
|
|
287
|
+
margin-top: 10rpx;
|
|
288
|
+
|
|
289
|
+
&__head {
|
|
290
|
+
display: flex;
|
|
291
|
+
gap: 16rpx;
|
|
292
|
+
align-items: center;
|
|
293
|
+
justify-content: space-between;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
&__label,
|
|
297
|
+
&__value {
|
|
298
|
+
font-size: 24rpx;
|
|
299
|
+
color: #21416e;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
&__value {
|
|
303
|
+
font-weight: 700;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
&__track {
|
|
307
|
+
height: 16rpx;
|
|
308
|
+
margin-top: 16rpx;
|
|
309
|
+
overflow: hidden;
|
|
310
|
+
background: #dce8fb;
|
|
311
|
+
border-radius: 999rpx;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
&__bar {
|
|
315
|
+
height: 100%;
|
|
316
|
+
border-radius: 999rpx;
|
|
317
|
+
transition: width 0.25s ease;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
&__bar--neutral {
|
|
321
|
+
background: linear-gradient(90deg, #5f7cff, #4d63dd);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
&__bar--success {
|
|
325
|
+
background: linear-gradient(90deg, #0d9488, #22c55e);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
&__bar--danger {
|
|
329
|
+
background: linear-gradient(90deg, #dc2626, #f97316);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
</style>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
page {
|
|
2
|
+
min-height: 100%;
|
|
3
|
+
background:
|
|
4
|
+
radial-gradient(circle at top right, rgb(255 189 89 / 18%), transparent 26%),
|
|
5
|
+
linear-gradient(180deg, #fff8ec 0%, #fffdf7 100%);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.page {
|
|
9
|
+
padding: 28rpx 24rpx 40rpx;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.hero,
|
|
13
|
+
.panel {
|
|
14
|
+
border-radius: 28rpx;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.hero {
|
|
18
|
+
padding: 34rpx 32rpx;
|
|
19
|
+
color: #fff;
|
|
20
|
+
background: linear-gradient(135deg, #54401f 0%, #8b5a24 55%, #d18c2e 100%);
|
|
21
|
+
|
|
22
|
+
&__eyebrow,
|
|
23
|
+
&__title,
|
|
24
|
+
&__desc {
|
|
25
|
+
display: block;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&__eyebrow {
|
|
29
|
+
font-size: 22rpx;
|
|
30
|
+
text-transform: uppercase;
|
|
31
|
+
letter-spacing: 4rpx;
|
|
32
|
+
opacity: 0.74;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&__title {
|
|
36
|
+
margin-top: 12rpx;
|
|
37
|
+
font-size: 40rpx;
|
|
38
|
+
font-weight: 700;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&__desc {
|
|
42
|
+
margin-top: 16rpx;
|
|
43
|
+
font-size: 25rpx;
|
|
44
|
+
line-height: 1.7;
|
|
45
|
+
opacity: 0.9;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.panel {
|
|
50
|
+
padding: 28rpx;
|
|
51
|
+
margin-top: 24rpx;
|
|
52
|
+
background: rgb(255 255 255 / 92%);
|
|
53
|
+
box-shadow: 0 14rpx 30rpx rgb(123 93 38 / 10%);
|
|
54
|
+
|
|
55
|
+
&__title,
|
|
56
|
+
&__line {
|
|
57
|
+
display: block;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
&__title {
|
|
61
|
+
margin-bottom: 12rpx;
|
|
62
|
+
font-size: 30rpx;
|
|
63
|
+
font-weight: 600;
|
|
64
|
+
color: #61401c;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
&__line {
|
|
68
|
+
margin-top: 8rpx;
|
|
69
|
+
font-size: 25rpx;
|
|
70
|
+
line-height: 1.7;
|
|
71
|
+
color: #6f5537;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&__button {
|
|
75
|
+
margin-top: 18rpx;
|
|
76
|
+
font-size: 26rpx;
|
|
77
|
+
color: #fff;
|
|
78
|
+
background: #8a5721;
|
|
79
|
+
border-radius: 999rpx;
|
|
80
|
+
}
|
|
81
|
+
}
|