create-weapp-vite 2.0.47 → 2.0.49
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/dist/cli.d.ts +3 -2
- package/dist/cli.js +66 -69
- package/dist/index.d.ts +12 -10
- package/dist/index.js +2 -8
- package/dist/src-CSQ3j3_f.js +366 -0
- package/package.json +18 -9
- package/templates/default/gitignore +1 -0
- package/templates/default/package.json +1 -1
- package/templates/default/tsconfig.app.json +1 -9
- package/templates/lib/gitignore +1 -0
- package/templates/lib/package.json +1 -1
- package/templates/lib/tsconfig.app.json +1 -9
- package/templates/tailwindcss/gitignore +1 -0
- package/templates/tailwindcss/package.json +1 -1
- package/templates/tailwindcss/tsconfig.app.json +1 -9
- package/templates/tdesign/gitignore +1 -0
- package/templates/tdesign/package.json +1 -1
- package/templates/tdesign/tsconfig.app.json +1 -9
- package/templates/vant/gitignore +1 -0
- package/templates/vant/package.json +1 -1
- package/templates/vant/tsconfig.app.json +1 -9
- package/templates/wevu/README.md +1 -0
- package/templates/wevu/auto-import-components.json +2 -2
- package/templates/wevu/gitignore +1 -0
- package/templates/wevu/package.json +1 -1
- package/templates/wevu/src/app.vue +49 -7
- package/templates/wevu/src/components/InfoPanel/index.vue +52 -0
- package/templates/wevu/src/components/StatusPill/index.vue +42 -0
- package/templates/wevu/{components.d.ts → src/components.d.ts} +4 -4
- package/templates/wevu/src/packageA/pages/workspace/index.vue +137 -0
- package/templates/wevu/src/packageB/pages/settings/index.vue +131 -0
- package/templates/wevu/src/pages/index/index.vue +169 -304
- package/templates/wevu/src/pages/overview/index.vue +149 -0
- package/templates/wevu/{typed-components.d.ts → src/typed-components.d.ts} +6 -9
- package/templates/wevu/src/typed-router.d.ts +67 -0
- package/templates/wevu/tsconfig.app.json +2 -14
- package/templates/wevu/vite.config.ts +7 -5
- package/templates/wevu-tdesign/gitignore +1 -0
- package/templates/wevu-tdesign/package.json +1 -1
- package/templates/wevu-tdesign/src/typed-router.d.ts +75 -0
- package/templates/wevu-tdesign/src/vite-env.d.ts +0 -2
- package/templates/wevu-tdesign/tsconfig.app.json +2 -14
- package/templates/wevu-tdesign/vite.config.ts +7 -0
- package/dist/chunk-UECMRNKY.js +0 -411
- package/templates/wevu/src/components/HelloWorld/index.vue +0 -473
- package/templates/wevu/src/components/InfoBanner/index.vue +0 -79
- /package/templates/wevu-tdesign/{components.d.ts → src/components.d.ts} +0 -0
- /package/templates/wevu-tdesign/{typed-components.d.ts → src/typed-components.d.ts} +0 -0
|
@@ -42,15 +42,7 @@
|
|
|
42
42
|
]
|
|
43
43
|
},
|
|
44
44
|
"include": [
|
|
45
|
-
"src
|
|
46
|
-
"src/**/*.tsx",
|
|
47
|
-
"src/**/*.js",
|
|
48
|
-
"src/**/*.jsx",
|
|
49
|
-
"src/**/*.mts",
|
|
50
|
-
"src/**/*.cts",
|
|
51
|
-
"src/**/*.vue",
|
|
52
|
-
"src/**/*.json",
|
|
53
|
-
"src/**/*.d.ts",
|
|
45
|
+
"src/**/*",
|
|
54
46
|
"types/**/*.d.ts",
|
|
55
47
|
"env.d.ts"
|
|
56
48
|
]
|
|
@@ -42,15 +42,7 @@
|
|
|
42
42
|
]
|
|
43
43
|
},
|
|
44
44
|
"include": [
|
|
45
|
-
"src
|
|
46
|
-
"src/**/*.tsx",
|
|
47
|
-
"src/**/*.js",
|
|
48
|
-
"src/**/*.jsx",
|
|
49
|
-
"src/**/*.mts",
|
|
50
|
-
"src/**/*.cts",
|
|
51
|
-
"src/**/*.vue",
|
|
52
|
-
"src/**/*.json",
|
|
53
|
-
"src/**/*.d.ts",
|
|
45
|
+
"src/**/*",
|
|
54
46
|
"types/**/*.d.ts",
|
|
55
47
|
"env.d.ts"
|
|
56
48
|
]
|
|
@@ -45,15 +45,7 @@
|
|
|
45
45
|
]
|
|
46
46
|
},
|
|
47
47
|
"include": [
|
|
48
|
-
"src
|
|
49
|
-
"src/**/*.tsx",
|
|
50
|
-
"src/**/*.js",
|
|
51
|
-
"src/**/*.jsx",
|
|
52
|
-
"src/**/*.mts",
|
|
53
|
-
"src/**/*.cts",
|
|
54
|
-
"src/**/*.vue",
|
|
55
|
-
"src/**/*.json",
|
|
56
|
-
"src/**/*.d.ts",
|
|
48
|
+
"src/**/*",
|
|
57
49
|
"types/**/*.d.ts",
|
|
58
50
|
"env.d.ts"
|
|
59
51
|
]
|
package/templates/vant/gitignore
CHANGED
|
@@ -45,15 +45,7 @@
|
|
|
45
45
|
]
|
|
46
46
|
},
|
|
47
47
|
"include": [
|
|
48
|
-
"src
|
|
49
|
-
"src/**/*.tsx",
|
|
50
|
-
"src/**/*.js",
|
|
51
|
-
"src/**/*.jsx",
|
|
52
|
-
"src/**/*.mts",
|
|
53
|
-
"src/**/*.cts",
|
|
54
|
-
"src/**/*.vue",
|
|
55
|
-
"src/**/*.json",
|
|
56
|
-
"src/**/*.d.ts",
|
|
48
|
+
"src/**/*",
|
|
57
49
|
"types/**/*.d.ts",
|
|
58
50
|
"env.d.ts"
|
|
59
51
|
]
|
package/templates/wevu/README.md
CHANGED
package/templates/wevu/gitignore
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
+
import autoRoutes from 'weapp-vite/auto-routes'
|
|
2
3
|
import { onHide, onLaunch, onShow } from 'wevu'
|
|
4
|
+
import { createRouter } from 'wevu/router'
|
|
3
5
|
|
|
4
6
|
defineAppJson({
|
|
5
|
-
pages:
|
|
6
|
-
|
|
7
|
-
],
|
|
7
|
+
pages: autoRoutes.pages,
|
|
8
|
+
subPackages: autoRoutes.subPackages,
|
|
8
9
|
window: {
|
|
9
|
-
navigationBarTitleText: '
|
|
10
|
-
navigationBarBackgroundColor: '#
|
|
10
|
+
navigationBarTitleText: '业务模板',
|
|
11
|
+
navigationBarBackgroundColor: '#0f172a',
|
|
11
12
|
navigationBarTextStyle: 'white',
|
|
12
13
|
},
|
|
13
14
|
style: 'v2',
|
|
@@ -15,6 +16,47 @@ defineAppJson({
|
|
|
15
16
|
sitemapLocation: 'sitemap.json',
|
|
16
17
|
})
|
|
17
18
|
|
|
19
|
+
const router = createRouter({
|
|
20
|
+
routes: autoRoutes.entries.map(path => ({
|
|
21
|
+
name: path,
|
|
22
|
+
path: `/${path}`,
|
|
23
|
+
})),
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
router.beforeEach((to, from) => {
|
|
27
|
+
console.log('[wevu-template-router] beforeEach', {
|
|
28
|
+
to: to?.fullPath,
|
|
29
|
+
from: from.fullPath,
|
|
30
|
+
})
|
|
31
|
+
return true
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
router.beforeResolve((to, from) => {
|
|
35
|
+
console.log('[wevu-template-router] beforeResolve', {
|
|
36
|
+
to: to?.fullPath,
|
|
37
|
+
from: from.fullPath,
|
|
38
|
+
})
|
|
39
|
+
return true
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
router.afterEach((to, from, failure) => {
|
|
43
|
+
console.log('[wevu-template-router] afterEach', {
|
|
44
|
+
to: to?.fullPath,
|
|
45
|
+
from: from.fullPath,
|
|
46
|
+
failureType: failure?.type,
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
router.onError((error, context) => {
|
|
51
|
+
console.log('[wevu-template-router] onError', {
|
|
52
|
+
error: error instanceof Error ? error.message : String(error),
|
|
53
|
+
mode: context.mode,
|
|
54
|
+
to: context.to?.fullPath,
|
|
55
|
+
from: context.from.fullPath,
|
|
56
|
+
failureType: context.failure.type,
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
|
|
18
60
|
onShow(() => {
|
|
19
61
|
console.log('[weapp-vite-wevu-template] app show')
|
|
20
62
|
})
|
|
@@ -30,7 +72,7 @@ onLaunch(() => {
|
|
|
30
72
|
|
|
31
73
|
<style>
|
|
32
74
|
page {
|
|
33
|
-
color: #
|
|
34
|
-
background: #
|
|
75
|
+
color: #0f172a;
|
|
76
|
+
background: #f3f6fb;
|
|
35
77
|
}
|
|
36
78
|
</style>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
withDefaults(defineProps<{
|
|
3
|
+
eyebrow?: string
|
|
4
|
+
title: string
|
|
5
|
+
description: string
|
|
6
|
+
}>(), {})
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<view class="feature">
|
|
11
|
+
<view v-if="eyebrow" class="feature__eyebrow">
|
|
12
|
+
{{ eyebrow }}
|
|
13
|
+
</view>
|
|
14
|
+
<view class="feature__title">
|
|
15
|
+
{{ title }}
|
|
16
|
+
</view>
|
|
17
|
+
<view class="feature__desc">
|
|
18
|
+
{{ description }}
|
|
19
|
+
</view>
|
|
20
|
+
</view>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<style>
|
|
24
|
+
.feature {
|
|
25
|
+
padding: 24rpx;
|
|
26
|
+
background: #fff;
|
|
27
|
+
border: 2rpx solid #e2e8f0;
|
|
28
|
+
border-radius: 24rpx;
|
|
29
|
+
box-shadow: 0 10rpx 30rpx rgb(15 23 42 / 4%);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.feature__eyebrow {
|
|
33
|
+
font-size: 20rpx;
|
|
34
|
+
font-weight: 600;
|
|
35
|
+
color: #64748b;
|
|
36
|
+
letter-spacing: 1rpx;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.feature__title {
|
|
40
|
+
margin-top: 8rpx;
|
|
41
|
+
font-size: 26rpx;
|
|
42
|
+
font-weight: 700;
|
|
43
|
+
color: #0f172a;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.feature__desc {
|
|
47
|
+
margin-top: 8rpx;
|
|
48
|
+
font-size: 24rpx;
|
|
49
|
+
line-height: 1.6;
|
|
50
|
+
color: #64748b;
|
|
51
|
+
}
|
|
52
|
+
</style>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
withDefaults(defineProps<{
|
|
3
|
+
label: string
|
|
4
|
+
tone?: 'neutral' | 'accent' | 'success'
|
|
5
|
+
}>(), {
|
|
6
|
+
tone: 'neutral',
|
|
7
|
+
})
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<view class="badge" :class="`badge--${tone}`">
|
|
12
|
+
{{ label }}
|
|
13
|
+
</view>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<style>
|
|
17
|
+
.badge {
|
|
18
|
+
display: inline-flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
min-width: 120rpx;
|
|
22
|
+
padding: 12rpx 22rpx;
|
|
23
|
+
font-size: 22rpx;
|
|
24
|
+
font-weight: 600;
|
|
25
|
+
border-radius: 999rpx;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.badge--neutral {
|
|
29
|
+
color: #475569;
|
|
30
|
+
background: #e2e8f0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.badge--accent {
|
|
34
|
+
color: #155eef;
|
|
35
|
+
background: #dbeafe;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.badge--success {
|
|
39
|
+
color: #047857;
|
|
40
|
+
background: #d1fae5;
|
|
41
|
+
}
|
|
42
|
+
</style>
|
|
@@ -13,13 +13,13 @@ type __WeappComponentImport<TModule, Fallback = {}> = 0 extends 1 & TModule ? Fa
|
|
|
13
13
|
|
|
14
14
|
declare module 'wevu' {
|
|
15
15
|
export interface GlobalComponents {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
InfoPanel: typeof import("./components/InfoPanel/index.vue")['default'];
|
|
17
|
+
StatusPill: typeof import("./components/StatusPill/index.vue")['default'];
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
// 用于 TSX 支持
|
|
22
22
|
declare global {
|
|
23
|
-
const
|
|
24
|
-
const
|
|
23
|
+
const InfoPanel: typeof import("./components/InfoPanel/index.vue")['default']
|
|
24
|
+
const StatusPill: typeof import("./components/StatusPill/index.vue")['default']
|
|
25
25
|
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'wevu'
|
|
3
|
+
import { useRoute, useRouter } from 'wevu/router'
|
|
4
|
+
|
|
5
|
+
definePageJson({
|
|
6
|
+
navigationBarTitleText: '项目工作台',
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
const HOME_PATH = '/pages/index/index'
|
|
10
|
+
const SETTINGS_PATH = '/packageB/pages/settings/index'
|
|
11
|
+
|
|
12
|
+
const route = useRoute()
|
|
13
|
+
const router = useRouter()
|
|
14
|
+
|
|
15
|
+
const routeSummary = computed(() => route.fullPath || `/${route.path}`)
|
|
16
|
+
|
|
17
|
+
const taskGroups = [
|
|
18
|
+
{
|
|
19
|
+
title: '待处理任务',
|
|
20
|
+
description: '整理本周迭代的交付清单,确保需求与开发状态同步。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
title: '风险跟踪',
|
|
24
|
+
description: '识别阻塞项和依赖项,适合继续扩展为真实项目看板。',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: '版本准备',
|
|
28
|
+
description: '预留提测、回归和上线前检查的展示区域。',
|
|
29
|
+
},
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
async function toIndependent() {
|
|
33
|
+
await router.push(SETTINGS_PATH)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function backHome() {
|
|
37
|
+
await router.push(HOME_PATH)
|
|
38
|
+
}
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<template>
|
|
42
|
+
<view class="page">
|
|
43
|
+
<view class="card">
|
|
44
|
+
<view class="card__eyebrow">
|
|
45
|
+
Workspace
|
|
46
|
+
</view>
|
|
47
|
+
<view class="card__title">
|
|
48
|
+
项目工作台
|
|
49
|
+
</view>
|
|
50
|
+
<view class="card__desc">
|
|
51
|
+
这里适合作为分包内的业务处理入口,例如待办、进度、看板或内部运营模块。
|
|
52
|
+
</view>
|
|
53
|
+
<view class="card__summary">
|
|
54
|
+
当前路由:{{ routeSummary }}
|
|
55
|
+
</view>
|
|
56
|
+
</view>
|
|
57
|
+
|
|
58
|
+
<view
|
|
59
|
+
v-for="item in taskGroups"
|
|
60
|
+
:key="item.title"
|
|
61
|
+
class="panel-wrap"
|
|
62
|
+
>
|
|
63
|
+
<InfoPanel
|
|
64
|
+
eyebrow="TASK"
|
|
65
|
+
:title="item.title"
|
|
66
|
+
:description="item.description"
|
|
67
|
+
/>
|
|
68
|
+
</view>
|
|
69
|
+
|
|
70
|
+
<button class="action-btn action-btn--secondary" @tap="toIndependent">
|
|
71
|
+
前往系统设置
|
|
72
|
+
</button>
|
|
73
|
+
<button class="action-btn action-btn--ghost" @tap="backHome">
|
|
74
|
+
返回业务门户
|
|
75
|
+
</button>
|
|
76
|
+
</view>
|
|
77
|
+
</template>
|
|
78
|
+
|
|
79
|
+
<style>
|
|
80
|
+
.page {
|
|
81
|
+
box-sizing: border-box;
|
|
82
|
+
min-height: 100vh;
|
|
83
|
+
padding: 34rpx 30rpx;
|
|
84
|
+
background:
|
|
85
|
+
radial-gradient(circle at top right, rgb(59 130 246 / 12%), transparent 30%),
|
|
86
|
+
linear-gradient(180deg, #f8fbff 0%, #edf2f9 100%);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.card {
|
|
90
|
+
padding: 30rpx 28rpx;
|
|
91
|
+
background: #fff;
|
|
92
|
+
border: 2rpx solid rgb(191 219 254 / 78%);
|
|
93
|
+
border-radius: 30rpx;
|
|
94
|
+
box-shadow: 0 16rpx 36rpx rgb(15 23 42 / 5%);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.card__eyebrow {
|
|
98
|
+
font-size: 22rpx;
|
|
99
|
+
font-weight: 600;
|
|
100
|
+
color: #2563eb;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.card__title {
|
|
104
|
+
margin-top: 10rpx;
|
|
105
|
+
font-size: 40rpx;
|
|
106
|
+
font-weight: 700;
|
|
107
|
+
color: #172554;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.card__desc,
|
|
111
|
+
.card__summary {
|
|
112
|
+
margin-top: 12rpx;
|
|
113
|
+
font-size: 24rpx;
|
|
114
|
+
line-height: 1.6;
|
|
115
|
+
color: #334155;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.panel-wrap {
|
|
119
|
+
margin-top: 18rpx;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.action-btn {
|
|
123
|
+
margin-top: 18rpx;
|
|
124
|
+
color: #fff;
|
|
125
|
+
background: #2563eb;
|
|
126
|
+
border-radius: 999rpx;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.action-btn--secondary {
|
|
130
|
+
background: #0f172a;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.action-btn--ghost {
|
|
134
|
+
color: #1d4ed8;
|
|
135
|
+
background: #dbeafe;
|
|
136
|
+
}
|
|
137
|
+
</style>
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'wevu'
|
|
3
|
+
import { useRoute, useRouter } from 'wevu/router'
|
|
4
|
+
|
|
5
|
+
definePageJson({
|
|
6
|
+
navigationBarTitleText: '系统设置',
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
const HOME_PATH = '/pages/index/index'
|
|
10
|
+
const OVERVIEW_PATH = '/pages/overview/index'
|
|
11
|
+
|
|
12
|
+
const route = useRoute()
|
|
13
|
+
const router = useRouter()
|
|
14
|
+
|
|
15
|
+
const routeSummary = computed(() => route.fullPath || `/${route.path}`)
|
|
16
|
+
|
|
17
|
+
const settingGroups = [
|
|
18
|
+
{
|
|
19
|
+
title: '通知策略',
|
|
20
|
+
description: '预留站内消息、邮件提醒和审批通知等配置位置。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
title: '角色权限',
|
|
24
|
+
description: '适合接入组织结构、角色分级与操作授权等业务能力。',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: '环境信息',
|
|
28
|
+
description: '可以继续扩展版本号、发布通道和系统参数等正式模块。',
|
|
29
|
+
},
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
async function relaunchHome() {
|
|
33
|
+
await router.nativeRouter.reLaunch({
|
|
34
|
+
url: HOME_PATH,
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<template>
|
|
40
|
+
<view class="page">
|
|
41
|
+
<view class="card">
|
|
42
|
+
<view class="card__eyebrow">
|
|
43
|
+
Settings
|
|
44
|
+
</view>
|
|
45
|
+
<view class="card__title">
|
|
46
|
+
系统设置
|
|
47
|
+
</view>
|
|
48
|
+
<view class="card__desc">
|
|
49
|
+
独立分包适合作为设置、配置或低频但相对独立的业务模块承载区。
|
|
50
|
+
</view>
|
|
51
|
+
<view class="card__summary">
|
|
52
|
+
当前路由:{{ routeSummary }}
|
|
53
|
+
</view>
|
|
54
|
+
</view>
|
|
55
|
+
|
|
56
|
+
<view
|
|
57
|
+
v-for="item in settingGroups"
|
|
58
|
+
:key="item.title"
|
|
59
|
+
class="panel-wrap"
|
|
60
|
+
>
|
|
61
|
+
<InfoPanel
|
|
62
|
+
eyebrow="SETTING"
|
|
63
|
+
:title="item.title"
|
|
64
|
+
:description="item.description"
|
|
65
|
+
/>
|
|
66
|
+
</view>
|
|
67
|
+
|
|
68
|
+
<button class="action-btn" @tap="router.push(OVERVIEW_PATH)">
|
|
69
|
+
查看运营概览
|
|
70
|
+
</button>
|
|
71
|
+
<button class="action-btn action-btn--ghost" @tap="relaunchHome">
|
|
72
|
+
reLaunch 回业务门户
|
|
73
|
+
</button>
|
|
74
|
+
</view>
|
|
75
|
+
</template>
|
|
76
|
+
|
|
77
|
+
<style>
|
|
78
|
+
.page {
|
|
79
|
+
box-sizing: border-box;
|
|
80
|
+
min-height: 100vh;
|
|
81
|
+
padding: 34rpx 30rpx;
|
|
82
|
+
background:
|
|
83
|
+
radial-gradient(circle at top left, rgb(148 163 184 / 14%), transparent 26%),
|
|
84
|
+
linear-gradient(180deg, #f8fafc 0%, #eef2f6 100%);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.card {
|
|
88
|
+
padding: 30rpx 28rpx;
|
|
89
|
+
background: #fff;
|
|
90
|
+
border: 2rpx solid #cbd5e1;
|
|
91
|
+
border-radius: 30rpx;
|
|
92
|
+
box-shadow: 0 16rpx 36rpx rgb(15 23 42 / 5%);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.card__eyebrow {
|
|
96
|
+
font-size: 22rpx;
|
|
97
|
+
font-weight: 600;
|
|
98
|
+
color: #475569;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.card__title {
|
|
102
|
+
margin-top: 10rpx;
|
|
103
|
+
font-size: 40rpx;
|
|
104
|
+
font-weight: 700;
|
|
105
|
+
color: #0f172a;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.card__desc,
|
|
109
|
+
.card__summary {
|
|
110
|
+
margin-top: 12rpx;
|
|
111
|
+
font-size: 24rpx;
|
|
112
|
+
line-height: 1.6;
|
|
113
|
+
color: #475569;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.panel-wrap {
|
|
117
|
+
margin-top: 18rpx;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.action-btn {
|
|
121
|
+
margin-top: 18rpx;
|
|
122
|
+
color: #fff;
|
|
123
|
+
background: #0f172a;
|
|
124
|
+
border-radius: 999rpx;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.action-btn--ghost {
|
|
128
|
+
color: #0f172a;
|
|
129
|
+
background: #e2e8f0;
|
|
130
|
+
}
|
|
131
|
+
</style>
|