xto-fronted 0.4.72 → 0.4.74

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.
@@ -1,57 +1,252 @@
1
- <script setup lang="ts">
2
- import { useRouter } from 'vue-router'
3
- import { Button } from '@xto/base'
4
-
5
- const router = useRouter()
6
-
7
- const goBack = () => {
8
- router.push('/')
9
- }
10
- </script>
11
-
12
- <template>
13
- <div class="error-page">
14
- <div class="error-page__content">
15
- <div class="error-page__code">403</div>
16
- <div class="error-page__title">无访问权限</div>
17
- <div class="error-page__desc">抱歉,您没有权限访问此页面</div>
18
- <Button type="primary" @click="goBack">返回首页</Button>
19
- </div>
20
- </div>
21
- </template>
22
-
23
- <style lang="scss" scoped>
24
- .error-page {
25
- width: 100%;
26
- height: 100%;
27
- display: flex;
28
- align-items: center;
29
- justify-content: center;
30
- background-color: var(--bg-color-page);
31
-
32
- &__content {
33
- text-align: center;
34
- }
35
-
36
- &__code {
37
- font-size: 120px;
38
- font-weight: 600;
39
- color: var(--color-warning);
40
- line-height: 1;
41
- margin-bottom: 20px;
42
- }
43
-
44
- &__title {
45
- font-size: 24px;
46
- font-weight: 500;
47
- color: var(--color-text-primary);
48
- margin-bottom: 10px;
49
- }
50
-
51
- &__desc {
52
- font-size: 14px;
53
- color: var(--color-text-secondary);
54
- margin-bottom: 30px;
55
- }
56
- }
1
+ <script setup lang="ts">
2
+ import { useRouter } from 'vue-router'
3
+ import { Button } from '@xto/base'
4
+
5
+ const router = useRouter()
6
+
7
+ const goBack = () => {
8
+ router.push('/')
9
+ }
10
+ </script>
11
+
12
+ <template>
13
+ <div class="error-page">
14
+ <div class="error-container">
15
+ <!-- 装饰背景 -->
16
+ <div class="error-bg">
17
+ <div class="bg-circle circle-1"></div>
18
+ <div class="bg-circle circle-2"></div>
19
+ <div class="bg-circle circle-3"></div>
20
+ </div>
21
+
22
+ <!-- 内容 -->
23
+ <div class="error-content">
24
+ <div class="error-code">
25
+ <span class="code-digit">4</span>
26
+ <span class="code-zero warning">
27
+ <span class="zero-inner">0</span>
28
+ </span>
29
+ <span class="code-digit">3</span>
30
+ </div>
31
+
32
+ <div class="error-illustration">
33
+ <svg viewBox="0 0 200 120" fill="none" xmlns="http://www.w3.org/2000/svg">
34
+ <!-- 盾牌 -->
35
+ <path d="M100 15 L150 35 L150 70 C150 95 100 110 100 110 C100 110 50 95 50 70 L50 35 Z"
36
+ fill="var(--color-warning-lighter)" stroke="var(--color-warning)" stroke-width="2"/>
37
+ <!-- 锁 -->
38
+ <rect x="85" y="55" width="30" height="25" rx="4" fill="var(--color-warning)"/>
39
+ <path d="M92 55 V48 A8 8 0 0 1 108 48 V55" fill="none" stroke="var(--color-warning)" stroke-width="3"/>
40
+ <!-- 禁止符号 -->
41
+ <circle cx="100" cy="67" r="6" fill="none" stroke="#fff" stroke-width="2"/>
42
+ <line x1="96" y1="63" x2="104" y2="71" stroke="#fff" stroke-width="2"/>
43
+ </svg>
44
+ </div>
45
+
46
+ <h1 class="error-title">无访问权限</h1>
47
+ <p class="error-desc">抱歉,您没有权限访问此页面,请联系管理员获取权限</p>
48
+
49
+ <div class="error-actions">
50
+ <Button type="primary" size="large" @click="goBack">
51
+ <template #icon>
52
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
53
+ <path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"/>
54
+ <polyline points="9,22 9,12 15,12 15,22"/>
55
+ </svg>
56
+ </template>
57
+ 返回首页
58
+ </Button>
59
+ <Button size="large" @click="router.go(-1)">
60
+ <template #icon>
61
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
62
+ <path d="M19 12H5M12 19l-7-7 7-7"/>
63
+ </svg>
64
+ </template>
65
+ 返回上一页
66
+ </Button>
67
+ </div>
68
+
69
+ <!-- 提示 -->
70
+ <div class="error-tip">
71
+ <p>可能的原因:</p>
72
+ <ul>
73
+ <li>您的账号权限不足</li>
74
+ <li>该页面需要特定角色才能访问</li>
75
+ <li>您的登录状态已过期</li>
76
+ </ul>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ </div>
81
+ </template>
82
+
83
+ <style lang="scss" scoped>
84
+ .error-page {
85
+ width: 100%;
86
+ height: 100%;
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: center;
90
+ background: var(--bg-color-page);
91
+ position: relative;
92
+ overflow: hidden;
93
+ }
94
+
95
+ .error-container {
96
+ position: relative;
97
+ z-index: 2;
98
+ max-width: 600px;
99
+ padding: 40px;
100
+ }
101
+
102
+ .error-bg {
103
+ position: absolute;
104
+ inset: 0;
105
+ z-index: 1;
106
+ overflow: hidden;
107
+
108
+ .bg-circle {
109
+ position: absolute;
110
+ border-radius: 50%;
111
+ opacity: 0.1;
112
+
113
+ &.circle-1 {
114
+ width: 400px;
115
+ height: 400px;
116
+ top: -100px;
117
+ right: -100px;
118
+ background: var(--color-warning);
119
+ }
120
+
121
+ &.circle-2 {
122
+ width: 300px;
123
+ height: 300px;
124
+ bottom: -50px;
125
+ left: -50px;
126
+ background: var(--color-warning);
127
+ }
128
+
129
+ &.circle-3 {
130
+ width: 200px;
131
+ height: 200px;
132
+ top: 50%;
133
+ left: 50%;
134
+ transform: translate(-50%, -50%);
135
+ background: var(--color-warning-light);
136
+ }
137
+ }
138
+ }
139
+
140
+ .error-content {
141
+ text-align: center;
142
+ }
143
+
144
+ .error-code {
145
+ display: flex;
146
+ justify-content: center;
147
+ align-items: center;
148
+ gap: 8px;
149
+ margin-bottom: 32px;
150
+
151
+ .code-digit {
152
+ font-size: 80px;
153
+ font-weight: 700;
154
+ color: var(--color-text-primary);
155
+ line-height: 1;
156
+ }
157
+
158
+ .code-zero {
159
+ position: relative;
160
+ width: 80px;
161
+ height: 80px;
162
+ display: flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ background: linear-gradient(135deg, var(--color-warning) 0%, var(--color-warning-light) 100%);
166
+ border-radius: 50%;
167
+
168
+ .zero-inner {
169
+ font-size: 48px;
170
+ font-weight: 700;
171
+ color: #fff;
172
+ }
173
+ }
174
+ }
175
+
176
+ .error-illustration {
177
+ width: 200px;
178
+ height: 120px;
179
+ margin: 0 auto 24px;
180
+ }
181
+
182
+ .error-title {
183
+ font-size: 24px;
184
+ font-weight: 600;
185
+ color: var(--color-text-primary);
186
+ margin-bottom: 12px;
187
+ }
188
+
189
+ .error-desc {
190
+ font-size: 14px;
191
+ color: var(--color-text-secondary);
192
+ margin-bottom: 32px;
193
+ }
194
+
195
+ .error-actions {
196
+ display: flex;
197
+ justify-content: center;
198
+ gap: 16px;
199
+ margin-bottom: 32px;
200
+
201
+ :deep(.x-button) {
202
+ padding: 12px 24px;
203
+ border-radius: 8px;
204
+
205
+ svg {
206
+ width: 18px;
207
+ height: 18px;
208
+ margin-right: 8px;
209
+ }
210
+ }
211
+ }
212
+
213
+ .error-tip {
214
+ padding: 20px;
215
+ background: var(--color-warning-lighter);
216
+ border-radius: var(--border-radius-large);
217
+
218
+ p {
219
+ font-size: 14px;
220
+ font-weight: 500;
221
+ color: var(--color-text-primary);
222
+ margin-bottom: 12px;
223
+ }
224
+
225
+ ul {
226
+ list-style: none;
227
+ padding: 0;
228
+ margin: 0;
229
+
230
+ li {
231
+ font-size: 13px;
232
+ color: var(--color-text-secondary);
233
+ padding: 4px 0;
234
+ position: relative;
235
+ padding-left: 16px;
236
+
237
+ &:before {
238
+ content: '';
239
+ position: absolute;
240
+ left: 0;
241
+ top: 50%;
242
+ transform: translateY(-50%);
243
+ width: 6px;
244
+ height: 6px;
245
+ background: var(--color-warning);
246
+ border-radius: 50%;
247
+ opacity: 0.6;
248
+ }
249
+ }
250
+ }
251
+ }
57
252
  </style>
@@ -1,57 +1,254 @@
1
- <script setup lang="ts">
2
- import { useRouter } from 'vue-router'
3
- import { Button } from '@xto/base'
4
-
5
- const router = useRouter()
6
-
7
- const goBack = () => {
8
- router.push('/')
9
- }
10
- </script>
11
-
12
- <template>
13
- <div class="error-page">
14
- <div class="error-page__content">
15
- <div class="error-page__code">404</div>
16
- <div class="error-page__title">页面不存在</div>
17
- <div class="error-page__desc">抱歉,您访问的页面不存在或已被删除</div>
18
- <Button type="primary" @click="goBack">返回首页</Button>
19
- </div>
20
- </div>
21
- </template>
22
-
23
- <style lang="scss" scoped>
24
- .error-page {
25
- width: 100%;
26
- height: 100%;
27
- display: flex;
28
- align-items: center;
29
- justify-content: center;
30
- background-color: var(--bg-color-page);
31
-
32
- &__content {
33
- text-align: center;
34
- }
35
-
36
- &__code {
37
- font-size: 120px;
38
- font-weight: 600;
39
- color: var(--color-primary);
40
- line-height: 1;
41
- margin-bottom: 20px;
42
- }
43
-
44
- &__title {
45
- font-size: 24px;
46
- font-weight: 500;
47
- color: var(--color-text-primary);
48
- margin-bottom: 10px;
49
- }
50
-
51
- &__desc {
52
- font-size: 14px;
53
- color: var(--color-text-secondary);
54
- margin-bottom: 30px;
55
- }
56
- }
1
+ <script setup lang="ts">
2
+ import { useRouter } from 'vue-router'
3
+ import { Button } from '@xto/base'
4
+
5
+ const router = useRouter()
6
+
7
+ const goBack = () => {
8
+ router.push('/')
9
+ }
10
+ </script>
11
+
12
+ <template>
13
+ <div class="error-page">
14
+ <div class="error-container">
15
+ <!-- 装饰背景 -->
16
+ <div class="error-bg">
17
+ <div class="bg-circle circle-1"></div>
18
+ <div class="bg-circle circle-2"></div>
19
+ <div class="bg-circle circle-3"></div>
20
+ </div>
21
+
22
+ <!-- 内容 -->
23
+ <div class="error-content">
24
+ <div class="error-code">
25
+ <span class="code-digit">4</span>
26
+ <span class="code-zero">
27
+ <span class="zero-inner">0</span>
28
+ </span>
29
+ <span class="code-digit">4</span>
30
+ </div>
31
+
32
+ <div class="error-illustration">
33
+ <svg viewBox="0 0 200 120" fill="none" xmlns="http://www.w3.org/2000/svg">
34
+ <!-- 页面图标 -->
35
+ <rect x="40" y="20" width="120" height="80" rx="8" fill="var(--color-fill)" stroke="var(--color-border)" stroke-width="2"/>
36
+ <rect x="50" y="30" width="100" height="60" rx="4" fill="var(--bg-color)"/>
37
+ <line x1="60" y1="45" x2="140" y2="45" stroke="var(--color-border-light)" stroke-width="2"/>
38
+ <line x1="60" y1="55" x2="120" y2="55" stroke="var(--color-border-light)" stroke-width="2"/>
39
+ <line x1="60" y1="65" x2="100" y2="65" stroke="var(--color-border-light)" stroke-width="2"/>
40
+ <!-- 问号 -->
41
+ <text x="100" y="75" text-anchor="middle" fill="var(--color-primary)" font-size="24" font-weight="600">?</text>
42
+ <!-- 搜索图标 -->
43
+ <circle cx="150" cy="35" r="12" stroke="var(--color-primary)" stroke-width="2" fill="none"/>
44
+ <line x1="158" y1="43" x2="168" y2="53" stroke="var(--color-primary)" stroke-width="2" stroke-linecap="round"/>
45
+ </svg>
46
+ </div>
47
+
48
+ <h1 class="error-title">页面不存在</h1>
49
+ <p class="error-desc">抱歉,您访问的页面不存在或已被删除</p>
50
+
51
+ <div class="error-actions">
52
+ <Button type="primary" size="large" @click="goBack">
53
+ <template #icon>
54
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
55
+ <path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"/>
56
+ <polyline points="9,22 9,12 15,12 15,22"/>
57
+ </svg>
58
+ </template>
59
+ 返回首页
60
+ </Button>
61
+ <Button size="large" @click="router.go(-1)">
62
+ <template #icon>
63
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
64
+ <path d="M19 12H5M12 19l-7-7 7-7"/>
65
+ </svg>
66
+ </template>
67
+ 返回上一页
68
+ </Button>
69
+ </div>
70
+
71
+ <!-- 提示 -->
72
+ <div class="error-tip">
73
+ <p>您可以尝试:</p>
74
+ <ul>
75
+ <li>检查您输入的网址是否正确</li>
76
+ <li>返回首页重新浏览</li>
77
+ <li>联系管理员反馈问题</li>
78
+ </ul>
79
+ </div>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </template>
84
+
85
+ <style lang="scss" scoped>
86
+ .error-page {
87
+ width: 100%;
88
+ height: 100%;
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ background: var(--bg-color-page);
93
+ position: relative;
94
+ overflow: hidden;
95
+ }
96
+
97
+ .error-container {
98
+ position: relative;
99
+ z-index: 2;
100
+ max-width: 600px;
101
+ padding: 40px;
102
+ }
103
+
104
+ .error-bg {
105
+ position: absolute;
106
+ inset: 0;
107
+ z-index: 1;
108
+ overflow: hidden;
109
+
110
+ .bg-circle {
111
+ position: absolute;
112
+ border-radius: 50%;
113
+ opacity: 0.1;
114
+
115
+ &.circle-1 {
116
+ width: 400px;
117
+ height: 400px;
118
+ top: -100px;
119
+ right: -100px;
120
+ background: var(--color-primary);
121
+ }
122
+
123
+ &.circle-2 {
124
+ width: 300px;
125
+ height: 300px;
126
+ bottom: -50px;
127
+ left: -50px;
128
+ background: var(--color-info);
129
+ }
130
+
131
+ &.circle-3 {
132
+ width: 200px;
133
+ height: 200px;
134
+ top: 50%;
135
+ left: 50%;
136
+ transform: translate(-50%, -50%);
137
+ background: var(--color-primary-light-3);
138
+ }
139
+ }
140
+ }
141
+
142
+ .error-content {
143
+ text-align: center;
144
+ }
145
+
146
+ .error-code {
147
+ display: flex;
148
+ justify-content: center;
149
+ align-items: center;
150
+ gap: 8px;
151
+ margin-bottom: 32px;
152
+
153
+ .code-digit {
154
+ font-size: 80px;
155
+ font-weight: 700;
156
+ color: var(--color-text-primary);
157
+ line-height: 1;
158
+ }
159
+
160
+ .code-zero {
161
+ position: relative;
162
+ width: 80px;
163
+ height: 80px;
164
+ display: flex;
165
+ align-items: center;
166
+ justify-content: center;
167
+ background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-light-1) 100%);
168
+ border-radius: 50%;
169
+
170
+ .zero-inner {
171
+ font-size: 48px;
172
+ font-weight: 700;
173
+ color: #fff;
174
+ }
175
+ }
176
+ }
177
+
178
+ .error-illustration {
179
+ width: 200px;
180
+ height: 120px;
181
+ margin: 0 auto 24px;
182
+ }
183
+
184
+ .error-title {
185
+ font-size: 24px;
186
+ font-weight: 600;
187
+ color: var(--color-text-primary);
188
+ margin-bottom: 12px;
189
+ }
190
+
191
+ .error-desc {
192
+ font-size: 14px;
193
+ color: var(--color-text-secondary);
194
+ margin-bottom: 32px;
195
+ }
196
+
197
+ .error-actions {
198
+ display: flex;
199
+ justify-content: center;
200
+ gap: 16px;
201
+ margin-bottom: 32px;
202
+
203
+ :deep(.x-button) {
204
+ padding: 12px 24px;
205
+ border-radius: 8px;
206
+
207
+ svg {
208
+ width: 18px;
209
+ height: 18px;
210
+ margin-right: 8px;
211
+ }
212
+ }
213
+ }
214
+
215
+ .error-tip {
216
+ padding: 20px;
217
+ background: var(--color-fill-light);
218
+ border-radius: var(--border-radius-large);
219
+
220
+ p {
221
+ font-size: 14px;
222
+ font-weight: 500;
223
+ color: var(--color-text-primary);
224
+ margin-bottom: 12px;
225
+ }
226
+
227
+ ul {
228
+ list-style: none;
229
+ padding: 0;
230
+ margin: 0;
231
+
232
+ li {
233
+ font-size: 13px;
234
+ color: var(--color-text-secondary);
235
+ padding: 4px 0;
236
+ position: relative;
237
+ padding-left: 16px;
238
+
239
+ &:before {
240
+ content: '';
241
+ position: absolute;
242
+ left: 0;
243
+ top: 50%;
244
+ transform: translateY(-50%);
245
+ width: 6px;
246
+ height: 6px;
247
+ background: var(--color-primary);
248
+ border-radius: 50%;
249
+ opacity: 0.6;
250
+ }
251
+ }
252
+ }
253
+ }
57
254
  </style>