@ruixinkeji/prism-ui 1.0.0 → 1.0.2
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 +1 -1
- package/components/PrismAIAssist/PrismAIAssist.vue +98 -98
- package/components/PrismAddressInput/PrismAddressInput.vue +597 -597
- package/components/PrismCityCascadeSelect/PrismCityCascadeSelect.vue +793 -793
- package/components/PrismCityPicker/PrismCityPicker.vue +1008 -1008
- package/components/PrismCitySelect/PrismCitySelect.vue +435 -435
- package/components/PrismCode/PrismCode.vue +749 -749
- package/components/PrismCodeInput/PrismCodeInput.vue +156 -156
- package/components/PrismDateTimePicker/PrismDateTimePicker.vue +953 -953
- package/components/PrismDropdown/PrismDropdown.vue +77 -77
- package/components/PrismGroupSticky/PrismGroupSticky.vue +352 -352
- package/components/PrismIdCardInput/PrismIdCardInput.vue +253 -253
- package/components/PrismImagePicker/PrismImagePicker.vue +457 -457
- package/components/PrismIndexBar/PrismIndexBar.vue +243 -243
- package/components/PrismLicensePlateInput/PrismLicensePlateInput.vue +1100 -1100
- package/components/PrismMusicPlayer/PrismMusicPlayer.vue +530 -530
- package/components/PrismNavBar/PrismNavBar.vue +199 -199
- package/components/PrismSecureInput/PrismSecureInput.vue +360 -360
- package/components/PrismSticky/PrismSticky.vue +173 -173
- package/components/PrismSwiper/PrismSwiper.vue +338 -338
- package/components/PrismSwitch/PrismSwitch.vue +202 -202
- package/components/PrismTabBar/PrismTabBar.vue +147 -147
- package/components/PrismTabs/PrismTabs.vue +49 -49
- package/components/PrismVoiceInput/PrismVoiceInput.vue +529 -529
- package/fonts/fa-brands-400.woff2 +0 -0
- package/fonts/fa-regular-400.woff2 +0 -0
- package/fonts/fa-solid-900.woff2 +0 -0
- package/fonts/fa-v4compatibility.woff2 +0 -0
- package/fonts/font-awesome.css +913 -0
- package/fonts/iconfont.woff2 +0 -0
- package/package.json +7 -1
- package/store/app.d.ts +21 -0
- package/store/app.js +68 -0
- package/styles/base.scss +2 -2
|
@@ -1,253 +1,253 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<view class="prism-id-card-input" :class="{ 'dark-mode': appStore.isDarkMode }">
|
|
3
|
-
<!-- 身份证号输入框 -->
|
|
4
|
-
<view class="id-card-input-wrapper">
|
|
5
|
-
<input
|
|
6
|
-
class="id-card-input"
|
|
7
|
-
type="idcard"
|
|
8
|
-
:value="displayValue"
|
|
9
|
-
:placeholder="placeholder"
|
|
10
|
-
placeholder-class="id-placeholder"
|
|
11
|
-
:maxlength="21"
|
|
12
|
-
@input="handleInput"
|
|
13
|
-
@focus="onFocus"
|
|
14
|
-
@blur="onBlur"
|
|
15
|
-
/>
|
|
16
|
-
</view>
|
|
17
|
-
|
|
18
|
-
<!-- 身份证信息解析 -->
|
|
19
|
-
<view class="id-info" v-if="showInfo && parsedInfo.valid">
|
|
20
|
-
<view class="info-item">
|
|
21
|
-
<text class="info-label">地区:</text>
|
|
22
|
-
<text class="info-value">{{ parsedInfo.region }}</text>
|
|
23
|
-
</view>
|
|
24
|
-
<view class="info-item">
|
|
25
|
-
<text class="info-label">出生日期:</text>
|
|
26
|
-
<text class="info-value">{{ parsedInfo.birthday }}</text>
|
|
27
|
-
</view>
|
|
28
|
-
<view class="info-item">
|
|
29
|
-
<text class="info-label">性别:</text>
|
|
30
|
-
<text class="info-value">{{ parsedInfo.gender }}</text>
|
|
31
|
-
</view>
|
|
32
|
-
</view>
|
|
33
|
-
</view>
|
|
34
|
-
</template>
|
|
35
|
-
|
|
36
|
-
<script setup>
|
|
37
|
-
import { ref, computed, watch } from 'vue';
|
|
38
|
-
import { useAppStore } from '@/store/app';
|
|
39
|
-
|
|
40
|
-
const props = defineProps({
|
|
41
|
-
modelValue: {
|
|
42
|
-
type: String,
|
|
43
|
-
default: ''
|
|
44
|
-
},
|
|
45
|
-
showInfo: {
|
|
46
|
-
type: Boolean,
|
|
47
|
-
default: true
|
|
48
|
-
},
|
|
49
|
-
placeholder: {
|
|
50
|
-
type: String,
|
|
51
|
-
default: '请输入身份证号'
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
const emit = defineEmits(['update:modelValue', 'complete', 'valid']);
|
|
56
|
-
|
|
57
|
-
const appStore = useAppStore();
|
|
58
|
-
const idValue = ref(props.modelValue);
|
|
59
|
-
const lastDisplayLength = ref(0);
|
|
60
|
-
|
|
61
|
-
// 格式化显示值(6-8-4 格式,用空格分隔)
|
|
62
|
-
const displayValue = computed(() => {
|
|
63
|
-
const val = idValue.value;
|
|
64
|
-
if (!val) return '';
|
|
65
|
-
|
|
66
|
-
let result = '';
|
|
67
|
-
for (let i = 0; i < val.length; i++) {
|
|
68
|
-
if (i === 6 || i === 14) {
|
|
69
|
-
result += ' ';
|
|
70
|
-
}
|
|
71
|
-
result += val[i];
|
|
72
|
-
}
|
|
73
|
-
return result;
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
// 解析身份证信息
|
|
77
|
-
const parsedInfo = computed(() => {
|
|
78
|
-
const id = idValue.value;
|
|
79
|
-
if (id.length !== 18) {
|
|
80
|
-
return { valid: false };
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// 验证校验码
|
|
84
|
-
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
|
85
|
-
const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
|
|
86
|
-
let sum = 0;
|
|
87
|
-
for (let i = 0; i < 17; i++) {
|
|
88
|
-
sum += parseInt(id[i]) * weights[i];
|
|
89
|
-
}
|
|
90
|
-
const checkCode = checkCodes[sum % 11];
|
|
91
|
-
if (id[17].toUpperCase() !== checkCode) {
|
|
92
|
-
return { valid: false };
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// 解析出生日期
|
|
96
|
-
const year = id.substring(6, 10);
|
|
97
|
-
const month = id.substring(10, 12);
|
|
98
|
-
const day = id.substring(12, 14);
|
|
99
|
-
const birthday = `${year}年${month}月${day}日`;
|
|
100
|
-
|
|
101
|
-
// 解析性别
|
|
102
|
-
const genderCode = parseInt(id[16]);
|
|
103
|
-
const gender = genderCode % 2 === 1 ? '男' : '女';
|
|
104
|
-
|
|
105
|
-
return {
|
|
106
|
-
valid: true,
|
|
107
|
-
region: '—',
|
|
108
|
-
birthday,
|
|
109
|
-
gender
|
|
110
|
-
};
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
function onFocus() {
|
|
114
|
-
// 焦点事件
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function onBlur() {
|
|
118
|
-
// 失焦事件
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function handleInput(e) {
|
|
122
|
-
const inputValue = e.detail.value;
|
|
123
|
-
const oldLength = lastDisplayLength.value;
|
|
124
|
-
const newLength = inputValue.length;
|
|
125
|
-
|
|
126
|
-
// 去掉空格,只允许数字和X
|
|
127
|
-
let value = inputValue.replace(/\s/g, '').toUpperCase().replace(/[^0-9X]/g, '');
|
|
128
|
-
|
|
129
|
-
// 判断是否是删除操作,并且删除到了空格位置
|
|
130
|
-
// 空格位置在显示值的第7位(索引6)和第16位(索引15)
|
|
131
|
-
if (newLength < oldLength) {
|
|
132
|
-
// 删除操作
|
|
133
|
-
const deletedPos = oldLength - 1;
|
|
134
|
-
// 如果删除的是空格后的第一个字符,需要额外删除一个字符
|
|
135
|
-
if (deletedPos === 7 || deletedPos === 16) {
|
|
136
|
-
// 删除到空格位置了,再删一个
|
|
137
|
-
const actualPos = deletedPos === 7 ? 6 : 14;
|
|
138
|
-
value = value.slice(0, actualPos - 1) + value.slice(actualPos);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// X只能在最后一位
|
|
143
|
-
if (value.length < 18) {
|
|
144
|
-
value = value.replace(/X/g, '');
|
|
145
|
-
} else if (value.length === 18 && value[17] === 'X') {
|
|
146
|
-
value = value.slice(0, 17).replace(/X/g, '') + 'X';
|
|
147
|
-
} else {
|
|
148
|
-
value = value.replace(/X/g, '');
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
value = value.slice(0, 18);
|
|
152
|
-
idValue.value = value;
|
|
153
|
-
emit('update:modelValue', value);
|
|
154
|
-
|
|
155
|
-
// 更新上次显示长度
|
|
156
|
-
lastDisplayLength.value = displayValue.value.length;
|
|
157
|
-
|
|
158
|
-
if (value.length === 18) {
|
|
159
|
-
emit('complete', value);
|
|
160
|
-
if (parsedInfo.value.valid) {
|
|
161
|
-
emit('valid', parsedInfo.value);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
watch(() => props.modelValue, (val) => {
|
|
167
|
-
idValue.value = val;
|
|
168
|
-
});
|
|
169
|
-
</script>
|
|
170
|
-
|
|
171
|
-
<style lang="scss">
|
|
172
|
-
.prism-id-card-input {
|
|
173
|
-
.id-card-input-wrapper {
|
|
174
|
-
background: var(--prism-input-bg, #EBEEF2);
|
|
175
|
-
border-radius: 12rpx;
|
|
176
|
-
padding: 0 24rpx;
|
|
177
|
-
height: 88rpx;
|
|
178
|
-
display: flex;
|
|
179
|
-
align-items: center;
|
|
180
|
-
transition: all 0.3s ease;
|
|
181
|
-
|
|
182
|
-
&:focus-within {
|
|
183
|
-
background: var(--prism-primary-light, #E3EEFF);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
.id-card-input {
|
|
188
|
-
flex: 1;
|
|
189
|
-
font-size: 32rpx;
|
|
190
|
-
font-weight: 500;
|
|
191
|
-
color: var(--prism-text-primary, #1D2129);
|
|
192
|
-
letter-spacing: 2rpx;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
.id-placeholder {
|
|
196
|
-
color: var(--prism-text-placeholder, #86909C);
|
|
197
|
-
font-weight: 400;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
.id-info {
|
|
201
|
-
margin-top: 24rpx;
|
|
202
|
-
padding: 20rpx;
|
|
203
|
-
background: rgba(52, 120, 246, 0.08);
|
|
204
|
-
border-radius: 12rpx;
|
|
205
|
-
display: flex;
|
|
206
|
-
flex-wrap: wrap;
|
|
207
|
-
gap: 16rpx;
|
|
208
|
-
|
|
209
|
-
.info-item {
|
|
210
|
-
display: flex;
|
|
211
|
-
align-items: center;
|
|
212
|
-
|
|
213
|
-
.info-label {
|
|
214
|
-
font-size: 24rpx;
|
|
215
|
-
color: var(--prism-text-secondary, #86909C);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
.info-value {
|
|
219
|
-
font-size: 24rpx;
|
|
220
|
-
color: var(--prism-text-primary, #1D2129);
|
|
221
|
-
font-weight: 500;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
.dark-mode .prism-id-card-input {
|
|
228
|
-
.id-card-input-wrapper {
|
|
229
|
-
background: var(--prism-input-bg, #2A2A2A);
|
|
230
|
-
|
|
231
|
-
&:focus-within {
|
|
232
|
-
background: rgba(52, 120, 246, 0.12);
|
|
233
|
-
box-shadow: 0 0 0 2rpx rgba(52, 120, 246, 0.4), 0 4rpx 16rpx rgba(52, 120, 246, 0.15);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
.id-card-input {
|
|
238
|
-
color: var(--prism-text-primary, #E5E6EB);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
.id-placeholder {
|
|
242
|
-
color: var(--prism-text-placeholder, #6B7785);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
.id-info {
|
|
246
|
-
background: rgba(52, 120, 246, 0.15);
|
|
247
|
-
|
|
248
|
-
.info-value {
|
|
249
|
-
color: var(--prism-text-primary, #E5E6EB);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<view class="prism-id-card-input" :class="{ 'dark-mode': appStore.isDarkMode }">
|
|
3
|
+
<!-- 身份证号输入框 -->
|
|
4
|
+
<view class="id-card-input-wrapper">
|
|
5
|
+
<input
|
|
6
|
+
class="id-card-input"
|
|
7
|
+
type="idcard"
|
|
8
|
+
:value="displayValue"
|
|
9
|
+
:placeholder="placeholder"
|
|
10
|
+
placeholder-class="id-placeholder"
|
|
11
|
+
:maxlength="21"
|
|
12
|
+
@input="handleInput"
|
|
13
|
+
@focus="onFocus"
|
|
14
|
+
@blur="onBlur"
|
|
15
|
+
/>
|
|
16
|
+
</view>
|
|
17
|
+
|
|
18
|
+
<!-- 身份证信息解析 -->
|
|
19
|
+
<view class="id-info" v-if="showInfo && parsedInfo.valid">
|
|
20
|
+
<view class="info-item">
|
|
21
|
+
<text class="info-label">地区:</text>
|
|
22
|
+
<text class="info-value">{{ parsedInfo.region }}</text>
|
|
23
|
+
</view>
|
|
24
|
+
<view class="info-item">
|
|
25
|
+
<text class="info-label">出生日期:</text>
|
|
26
|
+
<text class="info-value">{{ parsedInfo.birthday }}</text>
|
|
27
|
+
</view>
|
|
28
|
+
<view class="info-item">
|
|
29
|
+
<text class="info-label">性别:</text>
|
|
30
|
+
<text class="info-value">{{ parsedInfo.gender }}</text>
|
|
31
|
+
</view>
|
|
32
|
+
</view>
|
|
33
|
+
</view>
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<script setup>
|
|
37
|
+
import { ref, computed, watch } from 'vue';
|
|
38
|
+
import { useAppStore } from '@/store/app';
|
|
39
|
+
|
|
40
|
+
const props = defineProps({
|
|
41
|
+
modelValue: {
|
|
42
|
+
type: String,
|
|
43
|
+
default: ''
|
|
44
|
+
},
|
|
45
|
+
showInfo: {
|
|
46
|
+
type: Boolean,
|
|
47
|
+
default: true
|
|
48
|
+
},
|
|
49
|
+
placeholder: {
|
|
50
|
+
type: String,
|
|
51
|
+
default: '请输入身份证号'
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const emit = defineEmits(['update:modelValue', 'complete', 'valid']);
|
|
56
|
+
|
|
57
|
+
const appStore = useAppStore();
|
|
58
|
+
const idValue = ref(props.modelValue);
|
|
59
|
+
const lastDisplayLength = ref(0);
|
|
60
|
+
|
|
61
|
+
// 格式化显示值(6-8-4 格式,用空格分隔)
|
|
62
|
+
const displayValue = computed(() => {
|
|
63
|
+
const val = idValue.value;
|
|
64
|
+
if (!val) return '';
|
|
65
|
+
|
|
66
|
+
let result = '';
|
|
67
|
+
for (let i = 0; i < val.length; i++) {
|
|
68
|
+
if (i === 6 || i === 14) {
|
|
69
|
+
result += ' ';
|
|
70
|
+
}
|
|
71
|
+
result += val[i];
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// 解析身份证信息
|
|
77
|
+
const parsedInfo = computed(() => {
|
|
78
|
+
const id = idValue.value;
|
|
79
|
+
if (id.length !== 18) {
|
|
80
|
+
return { valid: false };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// 验证校验码
|
|
84
|
+
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
|
85
|
+
const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
|
|
86
|
+
let sum = 0;
|
|
87
|
+
for (let i = 0; i < 17; i++) {
|
|
88
|
+
sum += parseInt(id[i]) * weights[i];
|
|
89
|
+
}
|
|
90
|
+
const checkCode = checkCodes[sum % 11];
|
|
91
|
+
if (id[17].toUpperCase() !== checkCode) {
|
|
92
|
+
return { valid: false };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// 解析出生日期
|
|
96
|
+
const year = id.substring(6, 10);
|
|
97
|
+
const month = id.substring(10, 12);
|
|
98
|
+
const day = id.substring(12, 14);
|
|
99
|
+
const birthday = `${year}年${month}月${day}日`;
|
|
100
|
+
|
|
101
|
+
// 解析性别
|
|
102
|
+
const genderCode = parseInt(id[16]);
|
|
103
|
+
const gender = genderCode % 2 === 1 ? '男' : '女';
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
valid: true,
|
|
107
|
+
region: '—',
|
|
108
|
+
birthday,
|
|
109
|
+
gender
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
function onFocus() {
|
|
114
|
+
// 焦点事件
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function onBlur() {
|
|
118
|
+
// 失焦事件
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function handleInput(e) {
|
|
122
|
+
const inputValue = e.detail.value;
|
|
123
|
+
const oldLength = lastDisplayLength.value;
|
|
124
|
+
const newLength = inputValue.length;
|
|
125
|
+
|
|
126
|
+
// 去掉空格,只允许数字和X
|
|
127
|
+
let value = inputValue.replace(/\s/g, '').toUpperCase().replace(/[^0-9X]/g, '');
|
|
128
|
+
|
|
129
|
+
// 判断是否是删除操作,并且删除到了空格位置
|
|
130
|
+
// 空格位置在显示值的第7位(索引6)和第16位(索引15)
|
|
131
|
+
if (newLength < oldLength) {
|
|
132
|
+
// 删除操作
|
|
133
|
+
const deletedPos = oldLength - 1;
|
|
134
|
+
// 如果删除的是空格后的第一个字符,需要额外删除一个字符
|
|
135
|
+
if (deletedPos === 7 || deletedPos === 16) {
|
|
136
|
+
// 删除到空格位置了,再删一个
|
|
137
|
+
const actualPos = deletedPos === 7 ? 6 : 14;
|
|
138
|
+
value = value.slice(0, actualPos - 1) + value.slice(actualPos);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// X只能在最后一位
|
|
143
|
+
if (value.length < 18) {
|
|
144
|
+
value = value.replace(/X/g, '');
|
|
145
|
+
} else if (value.length === 18 && value[17] === 'X') {
|
|
146
|
+
value = value.slice(0, 17).replace(/X/g, '') + 'X';
|
|
147
|
+
} else {
|
|
148
|
+
value = value.replace(/X/g, '');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
value = value.slice(0, 18);
|
|
152
|
+
idValue.value = value;
|
|
153
|
+
emit('update:modelValue', value);
|
|
154
|
+
|
|
155
|
+
// 更新上次显示长度
|
|
156
|
+
lastDisplayLength.value = displayValue.value.length;
|
|
157
|
+
|
|
158
|
+
if (value.length === 18) {
|
|
159
|
+
emit('complete', value);
|
|
160
|
+
if (parsedInfo.value.valid) {
|
|
161
|
+
emit('valid', parsedInfo.value);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
watch(() => props.modelValue, (val) => {
|
|
167
|
+
idValue.value = val;
|
|
168
|
+
});
|
|
169
|
+
</script>
|
|
170
|
+
|
|
171
|
+
<style lang="scss">
|
|
172
|
+
.prism-id-card-input {
|
|
173
|
+
.id-card-input-wrapper {
|
|
174
|
+
background: var(--prism-input-bg, #EBEEF2);
|
|
175
|
+
border-radius: 12rpx;
|
|
176
|
+
padding: 0 24rpx;
|
|
177
|
+
height: 88rpx;
|
|
178
|
+
display: flex;
|
|
179
|
+
align-items: center;
|
|
180
|
+
transition: all 0.3s ease;
|
|
181
|
+
|
|
182
|
+
&:focus-within {
|
|
183
|
+
background: var(--prism-primary-light, #E3EEFF);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.id-card-input {
|
|
188
|
+
flex: 1;
|
|
189
|
+
font-size: 32rpx;
|
|
190
|
+
font-weight: 500;
|
|
191
|
+
color: var(--prism-text-primary, #1D2129);
|
|
192
|
+
letter-spacing: 2rpx;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.id-placeholder {
|
|
196
|
+
color: var(--prism-text-placeholder, #86909C);
|
|
197
|
+
font-weight: 400;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.id-info {
|
|
201
|
+
margin-top: 24rpx;
|
|
202
|
+
padding: 20rpx;
|
|
203
|
+
background: rgba(52, 120, 246, 0.08);
|
|
204
|
+
border-radius: 12rpx;
|
|
205
|
+
display: flex;
|
|
206
|
+
flex-wrap: wrap;
|
|
207
|
+
gap: 16rpx;
|
|
208
|
+
|
|
209
|
+
.info-item {
|
|
210
|
+
display: flex;
|
|
211
|
+
align-items: center;
|
|
212
|
+
|
|
213
|
+
.info-label {
|
|
214
|
+
font-size: 24rpx;
|
|
215
|
+
color: var(--prism-text-secondary, #86909C);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.info-value {
|
|
219
|
+
font-size: 24rpx;
|
|
220
|
+
color: var(--prism-text-primary, #1D2129);
|
|
221
|
+
font-weight: 500;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.dark-mode .prism-id-card-input {
|
|
228
|
+
.id-card-input-wrapper {
|
|
229
|
+
background: var(--prism-input-bg, #2A2A2A);
|
|
230
|
+
|
|
231
|
+
&:focus-within {
|
|
232
|
+
background: rgba(52, 120, 246, 0.12);
|
|
233
|
+
box-shadow: 0 0 0 2rpx rgba(52, 120, 246, 0.4), 0 4rpx 16rpx rgba(52, 120, 246, 0.15);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.id-card-input {
|
|
238
|
+
color: var(--prism-text-primary, #E5E6EB);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.id-placeholder {
|
|
242
|
+
color: var(--prism-text-placeholder, #6B7785);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.id-info {
|
|
246
|
+
background: rgba(52, 120, 246, 0.15);
|
|
247
|
+
|
|
248
|
+
.info-value {
|
|
249
|
+
color: var(--prism-text-primary, #E5E6EB);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
</style>
|