YingXingAI/pages/login/graduateCertification/graduateCertification.vue

1105 lines
29 KiB
Vue
Raw Normal View History

2025-06-30 14:43:02 +08:00
<template>
<view class="flex-col page">
<u-navbar :border-bottom="false" title="个人资料"></u-navbar>
<view v-if="step == 0" class="flex-col group_2">
<view class="flex-col items-center group_1">
<u-avatar
mode="square"
:src="headerImg"
@click="chooseAvatar"
size="260"
/>
<text class="text_4">请上传头像</text>
</view>
<view class="flex-col group_5 input-box">
<u-input
type="text"
:maxlength="8"
v-model="form.userName"
placeholder="请输入用户名称"
class="text-wrapper view"
/>
</view>
<view class="flex-col input-box" style="margin-top: 16px">
<u-input
type="text"
:maxlength="8"
v-model="form.name"
placeholder="请输入真实的姓名"
class="text-wrapper view"
/>
</view>
<view class="flex-col group_3">
<text class="text_7" style="margin-bottom: 26px">性别</text>
<u-radio-group
v-model="form.sex"
placement="row"
name="sexGroup"
width="50%"
>
<u-radio
v-for="(item, index) in sexOptions"
:key="index"
:name="item.value"
:value="item.value"
>
{{ item.label }}
</u-radio>
</u-radio-group>
</view>
<u-button
shape="circle"
class="button text-wrapper_1"
type="primary"
@click="next"
>下一步</u-button
>
</view>
<u-navbar
:custom-back="back"
v-if="step == 1"
:border-bottom="false"
:background="background"
>
</u-navbar>
<view v-if="step == 1" class="flex-col group_3 userList">
<h3 class="text_3">填写学校信息</h3>
<view class="flex-col group_4">
<view class="justify-between list-item group_5">
<text class="text_8">学历</text>
<view class="item-right">
<u-input
v-model="form.educationStr"
placeholder="请选择学历"
inputAlign="right"
@click="educationalShow = true"
/>
<u-action-sheet
:list="educationalList"
v-model="educationalShow"
@click="educationalSelect"
>
</u-action-sheet>
<image
src="/static/common/img/row_right.png"
class="right-img"
></image>
</view>
</view>
<view class="justify-between list-item">
<text class="text_8">学校</text>
<view class="item-right">
<u-input
v-model="shoolName"
placeholder="请选择学校"
inputAlign="right"
@click="shoolShow = true"
/>
<image
src="/static/common/img/row_right.png"
class="right-img"
></image>
<u-select
v-model="shoolShow"
:default-value="defaultTime"
mode="single-column"
title="学校选择"
:list="shoolList"
@confirm="shoolSelect"
>
</u-select>
</view>
</view>
<view class="justify-between list-item">
<text class="text_8">学院</text>
<view class="item-right">
<u-input
v-model="form.college"
placeholder="请选择学院"
@click="collegeShow = true"
inputAlign="right"
/>
<u-select
v-model="collegeShow"
mode="single-column"
:list="CollegeList"
@confirm="selectCpllege"
></u-select>
<image
src="/static/common/img/row_right.png"
class="right-img"
></image>
</view>
</view>
<view class="justify-between list-item">
<text class="text_8">专业</text>
<view class="item-right">
<u-input
v-model="form.major"
placeholder="请选择专业"
@click="majorShow = true"
inputAlign="right"
/>
<u-select
v-model="majorShow"
mode="single-column"
:list="MajorList"
@confirm="selectMajor"
></u-select>
<image
src="/static/common/img/row_right.png"
class="right-img"
></image>
</view>
</view>
<view class="justify-between list-item">
<text class="text_8">时间</text>
<view class="item-right">
<u-input
v-model="showTime"
placeholder="请选择时间"
inputAlign="right"
@click="timeShow = true"
/>
<u-select
v-model="timeShow"
:default-value="defaultTime"
mode="mutil-column"
title="在校时间"
:list="timeList"
@confirm="confirm"
>
</u-select>
<image
src="/static/common/img/row_right.png"
class="right-img"
></image>
</view>
</view>
</view>
<h3 class="text_3">就业信息</h3>
<view class="flex-col group_4">
<view class="justify-between list-item">
<text class="text_8">行业领域</text>
<view class="item-right">
<u-input
v-model="selectedWorkArea"
placeholder="请选择行业"
inputAlign="right"
@click="workAreaPopupShow = true"
/>
<u-select
v-model="workAreaPopupShow"
mode="single-column"
title="行业领域"
:list="WorkAreaList"
@confirm="workAreaSelect"
>
</u-select>
<image
src="/static/common/img/row_right.png"
class="right-img"
></image>
</view>
</view>
</view>
<u-button
shape="circle"
class="button text-wrapper_1"
type="primary"
@click="complete"
>完成</u-button
>
</view>
<view v-if="step == 2" class="flex-col preference-page">
<u-navbar title="推荐偏好" :border-bottom="false" />
<view class="selected-count">
已选择{{ selectedPreferences.length }}/10
<text class="desc"
>您选择的标签将影响系统推荐给你的信息类型进入系统后可以在我的-常用工具-推荐偏好中修改</text
>
</view>
<view class="selected-tags">
<view
v-for="item in selectedPreferences"
:key="item"
class="tag selected"
>
{{ item }}
<image
class="close-btn"
src="/static/common/img/handDelete.png"
@click.stop="removePreference(item)"
></image>
</view>
</view>
<view class="line"></view>
<view class="all-tags">
<view class="title">行业领域</view>
<view class="tags-list">
<view
v-for="item in industryList"
:key="item"
class="industry-tag"
:class="{ selected: selectedPreferences.includes(item) }"
@click="togglePreference(item)"
>{{ item }}</view
>
</view>
<view class="title" style="margin-top: 32rpx">行业方向</view>
<view class="tags-list">
<view
v-for="item in industryDirectionList"
:key="item"
class="industry-tag"
:class="{ selected: selectedPreferences.includes(item) }"
@click="togglePreference(item)"
>{{ item }}</view
>
</view>
</view>
<view class="line-shadow"></view>
<view class="btn-box">
<u-button shape="circle" class="button" type="primary" @click="nextStep"
>下一步</u-button
>
</view>
</view>
<view v-if="step == 3" class="flex-col preference-page">
<u-navbar title="推荐偏好" :border-bottom="false" />
<view class="selected-count">
已选择{{ selectedPreferences.length }}/10
<text class="desc"
>您选择的标签将影响系统推荐给你的信息类型进入系统后可以在我的-常用工具-推荐偏好中修改</text
>
</view>
<view class="selected-tags">
<view
v-for="item in selectedPreferences"
:key="item"
class="tag selected"
>
{{ item }}
<image
class="close-btn"
src="/static/common/img/handDelete.png"
@click.stop="removePreference(item)"
></image>
</view>
</view>
<view class="line"></view>
<view class="all-tags">
<view class="title">兴趣爱好</view>
<view class="tags-list">
<view
v-for="item in preferenceList"
:key="item"
class="tag"
:class="{ selected: selectedPreferences.includes(item) }"
@click="togglePreference(item)"
>{{ item }}</view
>
</view>
</view>
<view class="line-shadow"></view>
<view class="btn-box">
<u-button
shape="circle"
class="button"
type="primary"
@click="finishPreference"
>完成</u-button
>
</view>
</view>
<u-top-tips :z-index="999" ref="uTips" :navbar-height="0"></u-top-tips>
<u-toast ref="uToast" />
</view>
</template>
<script>
import headerImg from "@/static/common/img/headerImg.png";
export default {
data() {
return {
step: 0,
headerImg: headerImg,
shoolName: "",
showTime: "",
form: {
userId: "", //用户id
name: "", //名字
sex: "男", //性别
path: "", //头像
educationStr: "", //学历
schoolId: "", //学校
college: "", //学院
major: "", //专业
startYear: "", //开始时间
endYear: "", //结束时间,
collegeId: "", //学院id
majorId: "", //专业id
},
sexOptions: [
{ label: "男生", value: "男" },
{ label: "女生", value: "女" },
],
background: {
backgroundColor: "#f6f8fa",
},
value: "",
defaultTime: "",
show: false,
educationalShow: false,
educationalList: [
//学历选择列表
{
text: "大专",
},
{
text: "本科",
},
{
text: "硕士研究生",
},
{
text: "博士研究生",
},
],
shoolShow: false,
shoolList: [], //学校选择
CollegeList: [], //学院选择
MajorList: [], //专业选择
timeShow: false,
timeList: [], //时间选择
collegeShow: false,
majorShow: false,
workAreaPopupShow: false, //就业领域选择
selectedWorkArea: "",
WorkAreaList: [],
preferenceList: [
"跑步健身",
"足球",
"电竞游戏",
"旅行徒步",
"摄影摄像",
"剧本杀",
"编程极客",
"看书",
"唱歌",
"绘画手作",
"美食探店",
"cosplay",
"篮球",
"写作创作",
"咖啡茶艺",
"玄学星座",
"实习内推",
"脱单",
"活动组队",
"失物招领",
"副业兼职",
"二手交易",
"游戏陪玩",
"技能学习",
"情感洞",
"宠物生活",
"面试分享",
"校园热点",
"校园问答",
"公益志愿",
"跑腿互助",
"校友人脉",
"租房合租",
"留学互助",
"创业孵化",
"拼车出行",
"商业合作",
],
industryList: ["生物", "制药", "化工", "医疗"],
industryDirectionList: [
"生物学研究人员",
"医药研发",
"生物信息工程师",
"药品生产",
"药品注册",
"医药项目经理",
"细胞培养员",
"药理毒理研究院",
"药物合成",
],
selectedPreferences: [],
};
},
onLoad(e) {
this.step = 1;
this.getWorkFile();
// 监听从裁剪页发布的事件,获得裁剪结果
uni.$on("uAvatarCropper", (path) => {
this.headerImg = path;
let file = this.common.base64toFile(path, new Date().getTime());
if (file.type.indexOf("image") < 0) {
// this.$tips("请选择图片", "error");
this.$refs.uToast.show({
title: "请选择图片",
type: "error",
});
return false;
}
uni.uploadFile({
url: this.$u.http.config.baseUrl + "/app/User/File",
file: file,
fileType: "image",
header: {
Authorization: "Bearer " + this.vuex_token,
},
complete: (res) => {
this.form.path = JSON.parse(res.data).data;
},
});
});
if (this.vuex_user.id) {
this.form.userId = this.vuex_user.id;
} else {
// this.$u.route({
// url: "/pages/login/login/login",
// });
}
this.getShool();
var arr1 = [],
arr2 = [];
var isyear = new Date().getFullYear();
for (var i = 1990; i <= isyear + 10; i++) {
if (i <= isyear) {
arr1.push({
value: i,
label: i,
});
}
arr2.push({
value: i,
label: i,
});
}
this.timeList.push(arr1);
this.timeList.push(arr2);
this.defaultTime = [arr1.length - 1, arr2.length - 7];
this.echoFn();
},
methods: {
getWorkFile() {
this.$u.apiList.GetWorkFile().then((res) => {
this.WorkAreaList = res.map((item) => {
return {
label: item.workFieldName,
value: item.id,
};
});
});
},
// 回填个人信息 如果已经存在教师身份,学生身份未认证时
async echoFn() {
const res = await this.$u.apiList.SelectUserTypeApi();
console.log(res, "res---");
const jzgFlag = res.jzgFlag;
const studentFlag = res.studentFlag;
if (studentFlag === false && jzgFlag === true) {
this.form.name = this.vuex_user.userName;
this.form.sex = this.vuex_user.sex;
this.headerImg = this.$u.http.config.baseUrl + this.vuex_user.head;
this.form.path = this.vuex_user.head;
}
},
//完成信息填写
async complete() {
console.log("完成----")
var data = this.form;
if (data.educationStr == "") {
// return this.$tips("请选择学历", "error");
return this.$refs.uToast.show({
title: "请选择学历",
type: "error",
});
}
if (data.schoolId == "") {
// return this.$tips("请选择学校", "error");
return this.$refs.uToast.show({
title: "请选择学校",
type: "error",
});
}
if (data.college == "") {
// return this.$tips("请填写学院", "error");
return this.$refs.uToast.show({
title: "请填写学院",
type: "error",
});
}
if (data.major == "") {
// return this.$tips("请填写专业", "error");
return this.$refs.uToast.show({
title: "请填写专业",
type: "error",
});
}
if (data.startYear == "" && data.endYear == "") {
// return this.$tips("请选择在校时间", "error");
return this.$refs.uToast.show({
title: "请选择在校时间",
type: "error",
});
}
if (new Date(data.startYear) - new Date(data.endYear) > 0) {
// return this.$tips("请选择正确的在校时间", "error");
return this.$refs.uToast.show({
title: "请选择正确的在校时间",
type: "error",
});
}
if(data.list == "") {
return this.$refs.uToast.show({
title:'请选择行业领域',
type:'error'
})
}
// console.log(data,'data-')
// return
data.userType = 2;
data.userName = this.form.name;
console.log(data, "data--");
// return
const res = await this.$u.api.saveUserInfo(data);
console.log(res, "res--");
const req = {
userId: this.vuex_user.id,
educationId: res,
};
const result = await this.$u.apiList.SelectEducation(req);
console.log(result, "result--");
// return
this.$u.vuex("vuex_token", result.token);
this.$u.vuex("vuex_glyType", result.glyType);
this.$u.vuex("vuex_user", result.user);
// return
// this.$u.api.getUser().then(() => {
// this.vuex_user.isFill = true;
// uni.switchTab({
// url: "../../main/index/index",
// });
// });
this.step = 2;
},
// 获取学校
getShool() {
this.$u.api.GetAllSchool().then((res) => {
for (let i = 0; i < res.length; i++) {
this.shoolList.push({
label: res[i].schoolName + "",
value: res[i].id + "",
});
}
});
},
//获取学院
getColleg(id) {
const data = {
schoolid: id,
};
this.$u.apiList.GetCollegeList(data).then((res) => {
this.CollegeList = [];
for (let i = 0; i < res.length; i++) {
this.CollegeList.push({
label: res[i].name + "",
value: res[i].id + "",
});
}
});
},
//获取学院专业
getMajor(id) {
const data = {
schoolid: this.form.schoolId,
collegeid: id,
};
this.$u.apiList.GetMajorList(data).then((res) => {
this.MajorList = [];
for (let i = 0; i < res.length; i++) {
this.MajorList.push({
label: res[i].name + "",
value: res[i].id + "",
});
}
});
},
// 学历选择
educationalSelect(index) {
this.form.educationStr = this.educationalList[index].text;
},
// 时间选择
confirm(e) {
this.showTime = e[0].value + " - " + e[1].value;
this.form.startYear = e[0].value + "";
this.form.endYear = e[1].value + "";
},
// 学校选择
shoolSelect(e) {
this.form.college = "";
this.form.collegeId = "";
this.form.major = "";
this.form.majorId = "";
this.shoolName = e[0].label;
this.form.schoolId = e[0].value;
this.getColleg(this.form.schoolId);
},
//学院选择
selectCpllege(e) {
this.form.major = "";
this.form.majorId = "";
this.form.college = e[0].label;
this.form.collegeId = e[0].value;
this.getMajor(this.form.collegeId);
},
//选择专业
selectMajor(e) {
this.form.major = e[0].label;
this.form.majorId = e[0].value;
},
workAreaSelect(e) {
console.log("选择行业领域", e);
this.form.List=e[0].value
this.selectedWorkArea=e[0].label
},
// 头像裁剪
chooseAvatar() {
// 此为uView的跳转方法详见"文档-JS"部分也可以用uni的uni.navigateTo
this.$u.route({
// 关于此路径,请见下方"注意事项"
url: "/uview-ui/components/u-avatar-cropper/u-avatar-cropper",
// 内部已设置以下默认参数值,可不传这些参数
params: {
// 输出图片宽度高等于宽单位px
destWidth: 200,
// 裁剪框宽度高等于宽单位px
rectWidth: 200,
// 输出的图片类型,如果'png'类型发现裁剪的图片太大,改成"jpg"即可
fileType: "jpg",
},
});
},
back() {
this.step = 0;
},
next() {
console.log(this.form, "this.form--");
var data = this.form;
if (!data.path) {
// return this.$tips("请上传头像", "error");
return this.$refs.uToast.show({
title: "请上传头像",
type: "error",
});
}
if (!data.name) {
// return this.$tips("请填写真实姓名", "error");
return this.$refs.uToast.show({
title: "请填写真实姓名",
type: "error",
});
}
var reg = new RegExp("^[\u4e00-\u9fa5]{0,}$", "g");
if (!reg.test(data.name)) {
// this.$tips("请输入正确的真实姓名", "error");
this.$refs.uToast.show({
title: "请输入正确的真实姓名",
type: "error",
});
return;
}
if (!data.sex) {
// return this.$tips("请选择性别", "error");
return this.$refs.uToast.show({
title: "请选择性别",
type: "error",
});
}
this.step = 1;
},
togglePreference(item) {
const idx = this.selectedPreferences.indexOf(item);
if (idx > -1) {
this.selectedPreferences.splice(idx, 1);
} else {
if (this.selectedPreferences.length >= 10) {
this.$refs.uToast.show({
title: "最多选择10个",
type: "error",
});
return;
}
this.selectedPreferences.push(item);
}
},
nextStep() {
this.step = 3;
},
finishPreference() {
// 这里可以保存选择的偏好,或跳转页面
// 例如this.$u.api.savePreference(this.selectedPreferences)
// uni.switchTab({ url: "../../main/index/index" });
this.$refs.uToast.show({
title: "已保存偏好",
type: "success",
});
},
removePreference(item) {
const idx = this.selectedPreferences.indexOf(item);
if (idx > -1) {
this.selectedPreferences.splice(idx, 1);
}
},
},
};
</script>
<style scoped lang="scss">
.page {
background-color: rgb(255, 255, 255);
overflow-y: auto;
width: 100%;
overflow-x: hidden;
height: 100%;
.group_2 {
padding: 0.49rem 0.29rem 1.15rem;
overflow-y: auto;
.text_3 {
align-self: center;
color: rgb(51, 51, 51);
font-size: 0.18rem;
font-family: PingFang;
line-height: 0.17rem;
}
.group_1 {
margin-top: 0.15rem;
.text_4 {
margin-top: 0.15rem;
color: rgb(153, 153, 153);
font-size: 0.14rem;
font-family: PingFang;
line-height: 0.13rem;
}
}
.group_5 {
margin-top: 0.4rem;
.text_5 {
align-self: flex-start;
color: rgb(51, 51, 51);
font-size: 0.15rem;
font-family: PingFang;
line-height: 0.14rem;
}
.view {
// border-bottom: solid 0.005rem rgb(153, 153, 153);
}
.text-wrapper {
// margin-top: 0.16rem;
}
}
.input-box {
padding: 20rpx 40rpx;
border-radius: 100rpx;
background: #f6f8f9;
}
.group_3 {
margin-top: 32rpx;
// height: 1.35rem;
position: relative;
.image_4 {
filter: drop-shadow(0px 0.015rem 0.03rem rgba(102, 102, 102, 0.23));
width: 0.68rem;
height: 0.68rem;
}
.text_7 {
color: rgb(51, 51, 51);
font-size: 32rpx;
font-family: PingFang;
line-height: 32rpx;
font-weight: bold;
// position: absolute;
// left: 0;
// top: 0;
}
.group_4.on,
.group_6.on {
image {
border: 2px solid #5ac0ff;
border-radius: 50%;
overflow: hidden;
}
}
.group_6 {
position: absolute;
left: 0.4rem;
top: 0.4rem;
.text_8 {
margin-top: 0.15rem;
color: rgb(51, 51, 51);
font-size: 0.14rem;
font-family: PingFang;
line-height: 0.13rem;
}
}
.group_4 {
position: absolute;
right: 0.4rem;
top: 0.4rem;
.text_9 {
margin-top: 0.15rem;
color: rgb(51, 51, 51);
font-size: 0.14rem;
font-family: PingFang;
line-height: 0.13rem;
}
}
}
.text-wrapper_1 {
padding: 0.15rem 0 0.14rem;
/* background-image: linear-gradient(90deg,
rgb(135, 230, 254) 0%,
rgb(91, 192, 254) 52%,
rgb(46, 155, 255) 100%);
box-shadow: 0px 0.03rem 0.09rem rgba(38, 122, 199, 0.34); */
background: #3cb5fb;
border-radius: 0.23rem;
}
.button {
margin: 66rpx 0 0;
}
}
}
.userList {
// padding-left: 0.16rem;
// padding-top: 0.3rem;
background: #f6f8fa;
height: 100vh;
.text-wrapper_1 {
padding: 0.15rem 0 0.14rem;
/* background-image: linear-gradient(90deg,
#87e6fe 0%,
#5bc0fe 52%,
#2e9bff 100%);
box-shadow: 0px 0.03rem 0.09rem rgba(38, 122, 199, 0.34); */
background: #3cb5fb;
border-radius: 0.23rem;
}
.button {
margin: 0.6rem 0.15rem 0;
}
.text_3 {
// align-self: center;
margin-top: 40rpx;
margin-left: 50rpx;
color: rgb(51, 51, 51);
font-size: 0.18rem;
font-family: PingFang;
line-height: 0.17rem;
}
.group_4 {
margin: 40rpx auto;
background: #fff;
width: calc(100% - 80rpx);
padding: 20rpx;
border-radius: 32rpx;
.list-item {
padding: 0.05rem 0.1rem 0.05rem;
border-bottom: 2rpx solid #f6f8f9;
&:last-child {
border-bottom: none;
}
.text_8 {
color: #000;
font-size: 32rpx;
font-family: PingFang;
line-height: 0.35rem;
// margin-right: 0.15rem;
}
.item-right {
display: flex;
align-items: center;
width: calc(100% - 150rpx);
}
.right-img {
width: 12rpx;
height: 24rpx;
margin-left: 10rpx;
margin-top: 5rpx;
}
.text_26 {
color: #000;
font-size: 0.17rem;
font-family: PingFang;
line-height: 32rpx;
}
}
.group_5 {
margin-top: 0;
}
::v-deep .u-input__input {
font-size: 32rpx;
}
}
}
::v-deep .u-navbar-placeholder {
background: #f6f8fa;
// display: none;
height: 40rpx !important;
}
.preference-page {
background: #fff;
min-height: 100vh;
// padding: 0 24rpx;
.selected-count {
padding: 0 24rpx;
margin: 24rpx 0 30rpx 0;
font-weight: bold;
font-size: 32rpx;
color: rgba(0, 0, 0, 0.9);
.desc {
display: block;
font-weight: 400;
font-size: 24rpx;
color: rgba(0, 0, 0, 0.6);
margin-top: 8rpx;
}
}
.selected-tags {
padding: 0 24rpx;
display: flex;
flex-wrap: wrap;
margin-bottom: 24rpx;
gap: 24rpx 24rpx;
.tag {
display: flex;
align-items: center;
background: #3cb5fb;
color: #fff;
border-radius: 64rpx;
padding: 20rpx;
font-size: 28rpx;
position: relative;
max-width: 200rpx;
margin-right: 0;
margin-bottom: 0;
box-sizing: border-box;
justify-content: flex-start;
gap: 6rpx;
}
.close-btn {
font-size: 28rpx;
margin-right: 8rpx;
cursor: pointer;
color: #fff;
font-weight: bold;
line-height: 1;
display: inline-block;
width: 32rpx;
height: 32rpx;
text-align: center;
border-radius: 50%;
background: rgba(255, 255, 255, 0.18);
}
}
.line {
width: 100%;
height: 2rpx;
background: #f6f8f9;
}
.line-shadow {
width: 100%;
height: 2rpx;
background: #ffffff;
box-shadow: 0rpx -6rpx 12rpx 0rpx rgba(0, 0, 0, 0.05);
margin-top: 56rpx;
}
.all-tags {
padding: 0 24rpx;
margin-top: 48rpx;
.title {
font-weight: bold;
font-size: 32rpx;
color: rgba(0, 0, 0, 0.9);
margin-bottom: 16rpx;
}
.tags-list {
display: flex;
flex-wrap: wrap;
gap: 24rpx 24rpx;
.tag {
background: #f0f4f8;
color: #333;
border-radius: 200rpx;
padding: 20rpx;
font-size: 28rpx;
text-align: center;
max-width: 152rpx;
// margin-right: 24rpx;
// margin-bottom: 24rpx;
box-sizing: border-box;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
&.selected {
background: #3cb5fb;
color: #fff;
}
}
.industry-tag {
background: #f0f4f8;
color: #333;
border-radius: 200rpx;
padding: 32rpx;
font-size: 28rpx;
text-align: center;
max-width: 152rpx;
box-sizing: border-box;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
&.selected {
background: #3cb5fb;
color: #fff;
}
}
}
}
.btn-box {
padding: 0 24rpx;
}
.button {
margin: 48rpx 0 0 0;
width: 100%;
}
}
</style>