11 changed files with 772 additions and 704 deletions
@ -1,147 +0,0 @@ |
|||
<script setup lang="ts"> |
|||
import { onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'; |
|||
import { ref, reactive, toRefs, nextTick, onMounted } from 'vue' |
|||
|
|||
type argument = { |
|||
customListType?: 'default' | 'custom' | 'scroll' |
|||
isPerformSearch?: boolean |
|||
isPullDownRefresh?: boolean |
|||
onFormSearch: (formData: any, onSuccess: Function) => void |
|||
onRender?: Function |
|||
options?: { [n: string]: string | number | boolean } |
|||
emptyText?: string |
|||
emptyHeight?: number |
|||
} |
|||
|
|||
const props = withDefaults(defineProps<argument>(), { |
|||
customListType: 'default', |
|||
isPerformSearch: true, |
|||
isPullDownRefresh: true, |
|||
onFormSearch: () => { |
|||
console.log('onFormSearch') |
|||
}, |
|||
onRender: () => { |
|||
console.log('onRender') |
|||
}, |
|||
options: () => { |
|||
return {} |
|||
}, |
|||
emptyText: '暂无数据~', |
|||
emptyHeight: 60 |
|||
}) |
|||
|
|||
let { options, isPerformSearch, isPullDownRefresh, onFormSearch, onRender } = toRefs(props) |
|||
|
|||
const list = ref<any[]>([]) |
|||
const status = ref('loading') |
|||
const initing = ref(true) |
|||
const loading = ref(true) |
|||
const query = reactive({ |
|||
page: 1, |
|||
limit: 10, |
|||
total: 0 |
|||
}) |
|||
|
|||
const loadData = (callback?: Function) => { |
|||
uni.showLoading({ title: '数据加载中' }) |
|||
loading.value = true |
|||
const params = { ...query, ...options.value } as { [n: string]: string | number | boolean } |
|||
delete params.total |
|||
|
|||
setTimeout(() => { |
|||
onFormSearch.value(params, ({ data }: { data: { data: any; total: number } }) => { |
|||
loading.value = false |
|||
initing.value = false |
|||
callback && callback() |
|||
query.page = params.page as number |
|||
query.limit = params.limit as number |
|||
query.total = data.total || 0 |
|||
list.value = [...list.value, ...data.data] |
|||
|
|||
status.value = query.page * query.limit >= query.total ? 'nomore' : 'loading' |
|||
|
|||
onRender.value && onRender.value(data) |
|||
|
|||
uni.hideLoading() |
|||
}) |
|||
}, 100) |
|||
} |
|||
|
|||
const refreshFn = (callback?: Function) => { |
|||
query.page = 1 |
|||
query.total = 0 |
|||
list.value = [] |
|||
initing.value = true |
|||
loadData(callback) |
|||
} |
|||
|
|||
const onScrolltolower = () => { |
|||
if (query.page * query.limit >= query.total) { |
|||
status.value = 'nomore' |
|||
} else { |
|||
if (loading.value) return |
|||
|
|||
setTimeout(() => { |
|||
status.value = 'loading' |
|||
query.page += 1 |
|||
loadData() |
|||
}, 1000) |
|||
} |
|||
} |
|||
|
|||
onMounted(() => { |
|||
if (isPerformSearch.value) { |
|||
nextTick(() => { |
|||
refreshFn() |
|||
}) |
|||
} |
|||
}) |
|||
|
|||
onPullDownRefresh(() => { |
|||
if (isPullDownRefresh.value) refreshFn(() => uni.stopPullDownRefresh()) |
|||
}) |
|||
|
|||
onReachBottom(() => { |
|||
if (props.customListType !== 'scroll') { |
|||
onScrolltolower() |
|||
} |
|||
}) |
|||
|
|||
defineExpose({ |
|||
list, |
|||
refreshFn |
|||
}) |
|||
</script> |
|||
|
|||
<template> |
|||
<view v-if="!initing"> |
|||
<block v-if="list.length > 0"> |
|||
<template v-if="customListType === 'custom'"> |
|||
<slot v-bind:data="list" /> |
|||
<u-loadmore :status="status" /> |
|||
</template> |
|||
<template v-else-if="customListType === 'scroll'"> |
|||
<scroll-view class="scroll-view" scroll-y @scrolltolower="onScrolltolower"> |
|||
<view v-for="(item, index) in list" :key="index"> |
|||
<slot v-bind:row="item" v-bind:index="index" /> |
|||
</view> |
|||
<u-loadmore :status="status" /> |
|||
</scroll-view> |
|||
</template> |
|||
<template v-else> |
|||
<view v-for="(item, index) in list" :key="index"> |
|||
<slot v-bind:row="item" v-bind:index="index" /> |
|||
</view> |
|||
<u-loadmore :status="status" /> |
|||
</template> |
|||
</block> |
|||
<ex-empty v-show="list.length <= 0 && status === 'nomore'" :height="emptyHeight" :tips="emptyText" /> |
|||
</view> |
|||
</template> |
|||
|
|||
<style lang="scss" scoped> |
|||
.scroll-view { |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,162 @@ |
|||
<script setup lang="ts"></script> |
|||
|
|||
<template> |
|||
<view class="electionList-info"> |
|||
<view class="head"> |
|||
<view class="title">2024年度业主委员会主任选举</view> |
|||
<view class="status"> |
|||
<text style="color: #4b5563; margin-right: 16rpx">已结束</text> |
|||
<text style="color: #6b7280">2024-01-15 10:00 ~ 2024-01-16 10:00</text> |
|||
</view> |
|||
</view> |
|||
<view class="countview flex-center-between"> |
|||
<view class="flex column items"> |
|||
<u-count-to :startVal="0" :endVal="20" bold fontSize="48rpx" color="#2563EB" /> |
|||
<view class="tip">参选人数</view> |
|||
</view> |
|||
<view class="flex column items"> |
|||
<u-count-to :startVal="0" :endVal="20" bold fontSize="48rpx" color="#2563EB" /> |
|||
<view class="tip">候选人数</view> |
|||
</view> |
|||
<view class="flex column items"> |
|||
<u-count-to :startVal="0" :endVal="20" bold fontSize="48rpx" color="#2563EB" /> |
|||
<view class="tip">当选人数</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="content" v-for="(v, k) of 4" :key="k"> |
|||
<view class="flex"> |
|||
<view class="headimg"></view> |
|||
<view class="name">陈志明</view> |
|||
<view class="status">当选</view> |
|||
<!-- <view class="status un">未当选</view> --> |
|||
</view> |
|||
<view class="progress"> |
|||
<view class="flex-center-between progress-text"> |
|||
<text>同意</text> |
|||
<text class="b">98 票(62.8%)</text> |
|||
</view> |
|||
<u-line-progress :percentage="62.8" height="8rpx" active-color="#2563EB" :show-text="false" /> |
|||
</view> |
|||
<view class="progress"> |
|||
<view class="flex-center-between progress-text"> |
|||
<text>反对</text> |
|||
<text class="e">35 票 (22.4%)</text> |
|||
</view> |
|||
<u-line-progress :percentage="22.4" height="8rpx" active-color="#ef4444" :show-text="false" /> |
|||
</view> |
|||
<view class="progress"> |
|||
<view class="flex-center-between progress-text"> |
|||
<text>弃权</text> |
|||
<text class="f">23 票 (14.8%)</text> |
|||
</view> |
|||
<u-line-progress :percentage="14.8" height="8rpx" active-color="#9CA3AF" :show-text="false" /> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<style scoped lang="scss"> |
|||
.electionList-info { |
|||
width: 100%; |
|||
min-height: 100vh; |
|||
padding: 32rpx; |
|||
box-sizing: border-box; |
|||
background-color: #f9fafb; |
|||
|
|||
.head { |
|||
margin-bottom: 48rpx; |
|||
|
|||
.title { |
|||
font-size: 40rpx; |
|||
font-weight: bold; |
|||
line-height: 56rpx; |
|||
color: #000000; |
|||
text-align: left; |
|||
margin-bottom: 16rpx; |
|||
} |
|||
|
|||
.status { |
|||
font-size: 28rpx; |
|||
font-weight: normal; |
|||
line-height: 40rpx; |
|||
} |
|||
} |
|||
|
|||
.countview { |
|||
padding: 32rpx 60rpx; |
|||
border-radius: 24rpx; |
|||
margin-bottom: 32rpx; |
|||
background-color: #fff; |
|||
|
|||
.tip { |
|||
color: #4b5563; |
|||
} |
|||
} |
|||
|
|||
.content { |
|||
padding: 32rpx; |
|||
border-radius: 24rpx; |
|||
margin-bottom: 32rpx; |
|||
background-color: #fff; |
|||
|
|||
.headimg { |
|||
width: 128rpx; |
|||
height: 128rpx; |
|||
border-radius: 50%; |
|||
overflow: hidden; |
|||
background-color: #4b556377; |
|||
margin-right: 22rpx; |
|||
} |
|||
|
|||
.name { |
|||
font-size: 36rpx; |
|||
font-weight: 500; |
|||
line-height: 56rpx; |
|||
color: #000000; |
|||
margin-right: auto; |
|||
} |
|||
|
|||
.status { |
|||
width: 136rpx; |
|||
text-align: center; |
|||
font-size: 36rpx; |
|||
font-weight: normal; |
|||
border-radius: 999rpx; |
|||
padding: 16rpx 0; |
|||
line-height: 40rpx; |
|||
color: #2563eb; |
|||
background: rgba(37, 99, 235, 0.1); |
|||
|
|||
&.un { |
|||
color: #f44336; |
|||
background: rgba(244, 67, 54, 0.1); |
|||
} |
|||
} |
|||
|
|||
.progress { |
|||
margin-top: 24rpx; |
|||
height: min-content; |
|||
|
|||
&-text { |
|||
color: #000; |
|||
font-size: 28rpx; |
|||
line-height: 40rpx; |
|||
margin-bottom: 8rpx; |
|||
|
|||
.b { |
|||
color: #2563eb; |
|||
} |
|||
|
|||
.f { |
|||
color: #6b7280; |
|||
} |
|||
|
|||
.e { |
|||
color: #ef4444; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -1,7 +1,200 @@ |
|||
<script setup lang="ts"> |
|||
const navto = (url: string, params = {}) => uni.$util.goToPage({ url, params }); |
|||
const doSearch = (_formData: { page: number; limit: number }, onSuccess: Function) => { |
|||
onSuccess({ |
|||
data: { |
|||
data: [{ name: "测试一" }, { name: "测试二" }], |
|||
total: 4, |
|||
}, |
|||
}); |
|||
}; |
|||
</script> |
|||
|
|||
<template> |
|||
<view>选举结果</view> |
|||
<view class="electionList"> |
|||
<ex-list ref="reListRef" custom-list-type="scroll" :on-form-search="doSearch"> |
|||
<template v-slot="{ row, index }"> |
|||
<view class="items" :uid="'items' + index"> |
|||
<view class="flex"> |
|||
<view class="flex1"> |
|||
<view class="flex-center-start"> |
|||
<text class="text-ellipsis title">{{ "2024年度学生会主席选举" }}</text> |
|||
<!-- <text class="status b">进行中</text> --> |
|||
<!-- <text class="status f">未开始</text> --> |
|||
<text class="status e">已结束</text> |
|||
</view> |
|||
<view class="time">{{ "投票时间:2024-03-01 至 2024-03-07" }}</view> |
|||
</view> |
|||
<view :class="{ arrow: true, active: row.showInfo }" @click="row.showInfo = !row.showInfo"> |
|||
<u-icon name="arrow-down" color="#9CA3AF" /> |
|||
</view> |
|||
</view> |
|||
<view class="info" v-if="row.showInfo"> |
|||
<view class="flex info-items" v-for="(v, k) of 2" :key="k"> |
|||
<view class="head"></view> |
|||
<view class="content flex1"> |
|||
<view class="name flex-center-start"> |
|||
<text>陈佳怡</text> |
|||
<!-- <text class="status">当选</text> --> |
|||
<text class="status un">未当选</text> |
|||
</view> |
|||
<view class="votes">得票数:286</view> |
|||
</view> |
|||
|
|||
<view class="progress"> |
|||
<u-line-progress :percentage="60" height="8rpx" active-color="#2563EB" :show-text="false" /> |
|||
<view class="progress-text">60%</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="info-bts" @click.stop="navto('pages/electionList/info')">查看投票详情</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
</ex-list> |
|||
</view> |
|||
</template> |
|||
|
|||
<style scoped lang="scss"> |
|||
.electionList { |
|||
width: 100%; |
|||
min-height: 100vh; |
|||
box-sizing: border-box; |
|||
padding: 32rpx; |
|||
background-color: #f9fafb; |
|||
|
|||
.items { |
|||
padding: 32rpx; |
|||
border-radius: 12px; |
|||
background: linear-gradient(0deg, rgba(0, 0, 0, 0.001), rgba(0, 0, 0, 0.001)), #ffffff; |
|||
box-sizing: border-box; |
|||
border: 1px solid #f3f4f6; |
|||
box-shadow: |
|||
0px 1px 2px -1px rgba(0, 0, 0, 0.1), |
|||
0px 1px 3px 0px rgba(0, 0, 0, 0.1); |
|||
margin-bottom: 32rpx; |
|||
|
|||
.text-ellipsis { |
|||
overflow: hidden; |
|||
white-space: noraml; |
|||
text-overflow: ellipsis; |
|||
} |
|||
|
|||
.title { |
|||
color: #000; |
|||
font-size: 32rpx; |
|||
font-weight: 500; |
|||
line-height: 48rpx; |
|||
} |
|||
|
|||
.status { |
|||
font-size: 24rpx; |
|||
border-radius: 20rpx; |
|||
padding: 0 16rpx; |
|||
margin-left: 16rpx; |
|||
white-space: nowrap; |
|||
|
|||
&.b { |
|||
color: #fff; |
|||
background-color: #2563eb; |
|||
} |
|||
|
|||
&.f { |
|||
color: #6b7280; |
|||
background-color: #e5e7eb; |
|||
} |
|||
|
|||
&.e { |
|||
color: #fff; |
|||
background-color: #ef4444; |
|||
} |
|||
} |
|||
|
|||
.time { |
|||
padding-top: 8rpx; |
|||
color: #6b7280; |
|||
line-height: 40rpx; |
|||
font-size: 28rpx; |
|||
} |
|||
|
|||
.arrow { |
|||
transition: 0.3s all ease-in; |
|||
|
|||
&.active { |
|||
transform: rotateZ(180deg); |
|||
} |
|||
} |
|||
|
|||
.info { |
|||
&-items { |
|||
margin-top: 32rpx; |
|||
|
|||
.head { |
|||
width: 96rpx; |
|||
height: 96rpx; |
|||
border-radius: 50%; |
|||
overflow: hidden; |
|||
background-color: #6b7280; |
|||
margin-right: 24rpx; |
|||
} |
|||
|
|||
.content { |
|||
height: min-content; |
|||
|
|||
.name { |
|||
font-size: 28rpx; |
|||
font-weight: 500; |
|||
line-height: 40rpx; |
|||
color: #000000; |
|||
|
|||
.status { |
|||
font-size: 20rpx; |
|||
font-weight: normal; |
|||
border-radius: 999rpx; |
|||
padding: 8rpx 24rpx; |
|||
line-height: 20rpx; |
|||
color: #2563eb; |
|||
background: rgba(37, 99, 235, 0.1); |
|||
|
|||
&.un { |
|||
color: #f44336; |
|||
background: rgba(244, 67, 54, 0.1); |
|||
} |
|||
} |
|||
} |
|||
|
|||
.votes { |
|||
font-size: 28rpx; |
|||
line-height: 40rpx; |
|||
color: #6b7280; |
|||
} |
|||
} |
|||
|
|||
.progress { |
|||
width: 192rpx; |
|||
height: min-content; |
|||
|
|||
<script lang="ts" setup></script> |
|||
&-text { |
|||
padding-top: 8rpx; |
|||
color: #6b7280; |
|||
font-size: 24rpx; |
|||
line-height: 32rpx; |
|||
} |
|||
} |
|||
} |
|||
|
|||
<style lang="scss" scoped></style> |
|||
&-bts { |
|||
padding: 16rpx; |
|||
margin: 48rpx 0 24rpx; |
|||
font-size: 28rpx; |
|||
font-weight: normal; |
|||
line-height: 42rpx; |
|||
text-align: center; |
|||
color: #ffffff; |
|||
background-color: #2563eb; |
|||
border-radius: 8rpx; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
|
|||
@ -1,112 +0,0 @@ |
|||
<script setup lang="ts"> |
|||
import useUserStore from '@/store/user' |
|||
const userStore = useUserStore() |
|||
|
|||
const phone = ref('') |
|||
const kefuRef = ref() |
|||
const list = ref< |
|||
{ |
|||
id?: number |
|||
name?: string |
|||
guide: { guide_id?: number; title?: string }[] |
|||
}[] |
|||
>([]) |
|||
|
|||
const kefuConfirm = () => { |
|||
uni.makePhoneCall({ |
|||
phoneNumber: phone.value, |
|||
success: (response) => { |
|||
console.log('success', response) |
|||
}, |
|||
fail: (err) => { |
|||
console.log('fail', err) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
const navto = (url: string, params = {}) => uni.$util.goToPage({ url, params }) |
|||
|
|||
onShow(() => { |
|||
// getKeySetting('service_telephone').then(({ data: { value } }: any) => (phone.value = value.trim())) |
|||
// listApi().then(({ data }: any) => (list.value = data || [])) |
|||
}) |
|||
</script> |
|||
<template> |
|||
<ex-header title="用户指南" /> |
|||
<view class="guide-view"> |
|||
<view class="kefu-btn flex" @click="kefuRef.show = true"> |
|||
<image src="http://cdn-pos.lingji.vip/static/icon/customer.png" mode="widthFix" style="width: 40rpx" /> |
|||
<text style="margin-left: 14rpx">联系客服</text> |
|||
</view> |
|||
|
|||
<view class="pages-view"> |
|||
<u-collapse accordion :border="true"> |
|||
<block v-for="(v, k) of list" :key="k"> |
|||
<u-collapse-item :title="v.name"> |
|||
<view |
|||
:key="ck" |
|||
v-for="(cv, ck) of v.guide" |
|||
:class="{ 'pages-view-content': true, 'text-ellipsis': true, border: ck < v.guide.length - 1 }" |
|||
@click.stop="navto('pages/setting/agreement', { type: 'guide', id: cv.guide_id })" |
|||
> |
|||
{{ cv.title }} |
|||
</view> |
|||
</u-collapse-item> |
|||
</block> |
|||
</u-collapse> |
|||
</view> |
|||
|
|||
<ex-dialog ref="kefuRef" title="联系客服" show-cancel-button confirm-text="拨号" confirm-color="#43CF7C" @confirm="kefuConfirm"> |
|||
<view class="flex column"> |
|||
<image style="width: 84rpx" :src="`http://cdn-pos.lingji.vip/static/icon/phone-${userStore.useType}.png`" mode="widthFix" /> |
|||
<view style="margin-top: 36rpx; font-size: 60rpx; font-weight: 700; color: #383838; text-align: center"> |
|||
{{ phone }} |
|||
</view> |
|||
</view> |
|||
</ex-dialog> |
|||
</view> |
|||
</template> |
|||
|
|||
<style scoped lang="scss"> |
|||
.guide-view { |
|||
padding: 26rpx 28rpx; |
|||
.kefu-btn { |
|||
color: #fff; |
|||
padding: 32rpx; |
|||
margin-bottom: 26rpx; |
|||
background: linear-gradient(90deg, #4778ff 0%, #4778ffb8 100%); |
|||
} |
|||
.pages-view { |
|||
background-color: #fff; |
|||
|
|||
&-content { |
|||
padding: 16rpx; |
|||
color: #9a9bad; |
|||
text-align: left; |
|||
font-size: 28rpx; |
|||
font-weight: 400; |
|||
letter-spacing: 0; |
|||
line-height: 48rpx; |
|||
|
|||
&.border { |
|||
border-bottom: 1rpx solid #dbdbdb; |
|||
} |
|||
} |
|||
|
|||
:deep(.u-collapse) { |
|||
.u-cell__body { |
|||
padding: 24rpx 28rpx; |
|||
} |
|||
|
|||
.u-collapse-item__content__text { |
|||
padding: 0 28rpx; |
|||
border-bottom: 4rpx solid #f5f5f5 !important; |
|||
|
|||
&.content-class { |
|||
border: none !important; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,107 @@ |
|||
<script setup lang="ts"> |
|||
// import useUserStore from "@/store/user"; |
|||
// const userStore = useUserStore(); |
|||
</script> |
|||
<template> |
|||
<view class="userview"> |
|||
<view class="userview-info box"> |
|||
<view class="flex-center-between userview-info-item"> |
|||
<view class="userview-info-item-label">姓名</view> |
|||
<view class="userview-info-item-content flex"> |
|||
<input placeholder="请输入" style="text-align: right" /> |
|||
</view> |
|||
</view> |
|||
<view class="flex-center-between userview-info-item"> |
|||
<view class="userview-info-item-label">电话</view> |
|||
<view class="userview-info-item-content flex"> |
|||
<input placeholder="请输入" style="text-align: right" /> |
|||
</view> |
|||
</view> |
|||
<view class="flex-center-between userview-info-item"> |
|||
<view class="userview-info-item-label">性别</view> |
|||
<view class="userview-info-item-content flex"> |
|||
<input placeholder="请输入" style="text-align: right" /> |
|||
</view> |
|||
</view> |
|||
<view class="flex-center-between userview-info-item"> |
|||
<view class="userview-info-item-label">民族</view> |
|||
<view class="userview-info-item-content flex"> |
|||
<input placeholder="请输入" style="text-align: right" /> |
|||
</view> |
|||
</view> |
|||
<view class="flex-center-between userview-info-item"> |
|||
<view class="userview-info-item-label">年龄</view> |
|||
<view class="userview-info-item-content flex"> |
|||
<input placeholder="请输入" style="text-align: right" /> |
|||
</view> |
|||
</view> |
|||
<view class="flex-center-between userview-info-item"> |
|||
<view class="userview-info-item-label">工作单位</view> |
|||
<view class="userview-info-item-content flex"> |
|||
<input placeholder="请输入" style="text-align: right" /> |
|||
</view> |
|||
</view> |
|||
<view class="flex-center-between userview-info-item"> |
|||
<view class="userview-info-item-label">职位</view> |
|||
<view class="userview-info-item-content flex"> |
|||
<input placeholder="请输入" style="text-align: right" /> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<view class="bts">确认信息</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<style scoped lang="scss"> |
|||
.userview { |
|||
width: 100%; |
|||
padding: 32rpx; |
|||
min-height: calc(100vh - 94px); |
|||
box-sizing: border-box; |
|||
background-color: #f9fafb; |
|||
|
|||
.box { |
|||
margin-bottom: 60rpx; |
|||
border-radius: 24rpx; |
|||
background-color: #ffffff; |
|||
box-shadow: 0 2rpx 4rpx 0 rgba(0, 0, 0, 0.05); |
|||
} |
|||
|
|||
&-info { |
|||
font-size: 28rpx; |
|||
font-weight: normal; |
|||
line-height: 40rpx; |
|||
padding: 0 32rpx 32rpx; |
|||
border: 1rpx solid #fff; |
|||
|
|||
&-item { |
|||
padding: 60rpx 0 24rpx; |
|||
border-top: 1rpx solid #e5e7eb; |
|||
|
|||
&:first-child { |
|||
border: none; |
|||
} |
|||
|
|||
&-label { |
|||
color: #4b5563; |
|||
} |
|||
|
|||
&-content { |
|||
color: #1f2937; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.bts { |
|||
color: #fff; |
|||
font-size: 28rpx; |
|||
line-height: 40rpx; |
|||
text-align: center; |
|||
border-radius: 8rpx; |
|||
padding: 24rpx 80rpx; |
|||
letter-spacing: 4rpx; |
|||
border: 1rpx solid #2563eb; |
|||
background-color: #2563eb; |
|||
} |
|||
} |
|||
</style> |
|||
Loading…
Reference in new issue