Files
qingdao-employment-service/pages/login/login.vue

1060 lines
27 KiB
Vue
Raw Normal View History

2024-11-08 11:55:23 +08:00
<template>
2025-12-16 20:24:03 +08:00
<AppLayout title="就业服务程序">
<!-- 扫码登录-->
<view class="alipay-login-container" v-if="isMachineEnv">
<view class="login-scan-area">
<view class="login-title">支付宝扫码登录</view>
<view class="qrcode-container">
<view class="qrcode-wrapper" @click="refreshQrcode">
<view class="qrcode-border">
<view class="qrcode-content">
<view class="qrcode-pattern">
<image
class="qrcode-img"
src="@/static/icon/qrcode-example.png"
mode="scaleToFill"
/>
<view class="qrcode-corner top-left"></view>
<view class="qrcode-corner top-right"></view>
<view class="qrcode-corner bottom-left"></view>
<view class="scan-line" :style="{ top: scanLineTop + 'rpx' }"></view>
</view>
<!-- 二维码过期提示 -->
<view v-if="qrcodeExpired" class="expired-overlay">
<text class="expired-text">二维码已过期</text>
<view class="refresh-btn" @click.stop="refreshQrcode">
<text class="refresh-text">点击刷新</text>
</view>
</view>
</view>
</view>
<view class="qrcode-tips">
<text class="tips-text">使用支付宝扫一扫登录</text>
<text class="tips-subtext">扫一扫后点击确认完成登录</text>
</view>
</view>
2024-11-08 11:55:23 +08:00
</view>
2025-12-16 20:24:03 +08:00
<!-- 刷新提示 -->
<view class="refresh-tips" v-if="countdown > 0">
<view class="countdown-text">
<span class="countdown-num">{{ countdown }}</span>
秒后二维码过期
</view>
2024-11-08 11:55:23 +08:00
</view>
</view>
2025-12-16 20:24:03 +08:00
<!-- 扫码成功提示 -->
<view v-if="showSuccessTip" class="success-tip">
<view class="success-content">
<view class="success-icon"></view>
<text class="success-text">登录成功</text>
</view>
</view>
</view>
2025-12-16 20:24:03 +08:00
<!-- 正常登录-->
<tabcontrolVue v-else :current="tabCurrent">
<template v-slot:tab0>
<view class="login-content">
<image class="logo" src="@/static/logo.png"></image>
<view class="logo-title">就业</view>
2024-11-08 11:55:23 +08:00
</view>
2025-12-16 20:24:03 +08:00
<view class="btns">
<button class="wxlogin" @click="loginTest">内测登录</button>
<view class="wxaddress">青岛市公共就业和人才服务中心</view>
2024-11-08 11:55:23 +08:00
</view>
2025-12-16 20:24:03 +08:00
</template>
<template v-slot:tab1>
<view class="content-one">
<view>
<view class="content-title">
<view class="title-lf">
<view class="lf-h1">请您完善求职名片</view>
<view class="lf-text">个人信息仅用于推送优质内容</view>
</view>
<view class="title-ri">
<text style="color: #256bfa">1</text>
<text>/2</text>
</view>
</view>
<view class="content-input" @click="changeExperience">
<view class="input-titile">工作经验</view>
<input
class="input-con"
v-model="state.experienceText"
disabled
placeholder="请选择您的工作经验"
/>
</view>
<view class="content-sex">
<view class="sex-titile">求职区域</view>
<view class="sext-ri">
<view
class="sext-box"
:class="{ 'sext-boxactive': fromValue.sex === 0 }"
@click="changeSex(0)"
>
</view>
<view
class="sext-box"
:class="{ 'sext-boxactive': fromValue.sex === 1 }"
@click="changeSex(1)"
>
</view>
</view>
</view>
<view class="content-input" @click="changeEducation">
<view class="input-titile">学历</view>
<input class="input-con" v-model="state.educationText" disabled placeholder="本科" />
</view>
</view>
<view class="next-btn" @tap="nextStep">下一步</view>
</view>
</template>
<template v-slot:tab2>
<view class="content-one">
<view>
<view class="content-title">
<view class="title-lf">
<view class="lf-h1">请您完善求职名片</view>
<view class="lf-text">个人信息仅用于推送优质内容</view>
</view>
<view class="title-ri">
<text style="color: #256bfa">2</text>
<text>/2</text>
</view>
</view>
<view class="content-input" @click="changeArea">
<view class="input-titile">求职区域</view>
<input
class="input-con"
v-model="state.areaText"
disabled
placeholder="请选择您的求职区域"
/>
</view>
<view class="content-input" @click="changeJobs">
<view class="input-titile">求职岗位</view>
<input
class="input-con"
disabled
v-if="!state.jobsText.length"
placeholder="请选择您的求职岗位"
/>
<view class="input-nx" @click="changeJobs" v-else>
<view class="nx-item" v-for="item in state.jobsText">{{ item }}</view>
</view>
</view>
<view class="content-input" @click="changeSalay">
<view class="input-titile">期望薪资</view>
<input
class="input-con"
v-model="state.salayText"
disabled
placeholder="请选择您的期望薪资"
/>
</view>
</view>
<view class="next-btn" @tap="complete">开启求职之旅</view>
</view>
</template>
</tabcontrolVue>
<SelectJobs ref="selectJobsModel"></SelectJobs>
<!-- 后门 -->
<view class="backdoor" @click="loginbackdoor">
<my-icons type="gift-filled" size="60"></my-icons>
2025-12-12 10:50:45 +08:00
</view>
2025-12-16 20:24:03 +08:00
</AppLayout>
2024-11-08 11:55:23 +08:00
</template>
<script setup>
import { storeToRefs } from 'pinia';
2024-11-08 11:55:23 +08:00
import tabcontrolVue from './components/tabcontrol.vue';
2025-05-13 11:10:38 +08:00
import SelectJobs from '@/components/selectJobs/selectJobs.vue';
import { reactive, inject, watch, ref, onMounted, onUnmounted } from 'vue';
2025-03-28 15:19:42 +08:00
import { onLoad, onShow } from '@dcloudio/uni-app';
import useUserStore from '@/stores/useUserStore';
import useDictStore from '@/stores/useDictStore';
2024-11-08 11:55:23 +08:00
const { $api, navTo } = inject('globalFunction');
2025-03-28 15:19:42 +08:00
const { loginSetToken, getUserResume } = useUserStore();
const { isMachineEnv } = storeToRefs(useUserStore());
2025-03-28 15:19:42 +08:00
const { getDictSelectOption, oneDictData } = useDictStore();
2025-05-13 11:10:38 +08:00
const openSelectPopup = inject('openSelectPopup');
2024-11-18 16:33:37 +08:00
// status
2025-05-13 11:10:38 +08:00
const selectJobsModel = ref();
2025-11-18 20:38:05 +08:00
const tabCurrent = ref(1);
2025-03-28 15:19:42 +08:00
const salay = [2, 5, 10, 15, 20, 25, 30, 50, 80, 100];
2024-11-08 11:55:23 +08:00
const state = reactive({
2025-12-16 20:24:03 +08:00
station: [],
stationCateLog: 1,
lfsalay: [2, 5, 10, 15, 20, 25, 30, 50],
risalay: JSON.parse(JSON.stringify(salay)),
areaText: '',
educationText: '',
experienceText: '',
salayText: '',
jobsText: [],
2024-11-18 16:33:37 +08:00
});
const fromValue = reactive({
2025-12-16 20:24:03 +08:00
sex: 1,
education: '4',
salaryMin: 2000,
salaryMax: 2000,
area: 0,
jobTitleId: '',
experience: '1',
2024-11-08 11:55:23 +08:00
});
// 扫码登录相关状态
const qrcodeExpired = ref(false);
const scanLineTop = ref(0);
const countdown = ref(0);
let scanInterval = null;
let countdownTimer = null;
// 登录成功提示
const showSuccessTip = ref(false);
2025-03-28 15:19:42 +08:00
onLoad((parmas) => {
2025-12-16 20:24:03 +08:00
getTreeselect();
if (!isMachineEnv.value) $api.msg('请完善微简历');
});
onMounted(() => {
2025-12-16 20:24:03 +08:00
startScanAnimation();
resetCountdown();
// 模拟扫码成功
setTimeout(() => {
// showSuccessTip.value=true
}, 5000);
2025-03-28 15:19:42 +08:00
});
onUnmounted(() => {
2025-12-16 20:24:03 +08:00
showSuccessTip.value = false;
stopScanAnimation();
clearInterval(countdownTimer);
});
// 刷新二维码
const refreshQrcode = () => {
2025-12-16 20:24:03 +08:00
qrcodeExpired.value = false;
resetCountdown();
startScanAnimation();
// TODO
};
// 重置倒计时
const resetCountdown = () => {
2025-12-16 20:24:03 +08:00
countdown.value = 60;
clearInterval(countdownTimer);
countdownTimer = setInterval(() => {
if (countdown.value > 0) {
countdown.value--;
} else {
qrcodeExpired.value = true;
clearInterval(countdownTimer);
stopScanAnimation();
}
}, 1000);
};
// 开始扫描动画
const startScanAnimation = () => {
2025-12-16 20:24:03 +08:00
clearInterval(scanInterval);
2025-12-16 20:24:03 +08:00
scanInterval = setInterval(() => {
scanLineTop.value = (scanLineTop.value + 2) % 300;
}, 30);
};
2025-03-28 15:19:42 +08:00
// 停止扫描动画
const stopScanAnimation = () => {
2025-12-16 20:24:03 +08:00
clearInterval(scanInterval);
};
2025-05-13 11:10:38 +08:00
2025-03-28 15:19:42 +08:00
function changeSex(sex) {
2025-12-16 20:24:03 +08:00
fromValue.sex = sex;
2025-03-28 15:19:42 +08:00
}
2025-05-13 11:10:38 +08:00
function changeExperience() {
2025-12-16 20:24:03 +08:00
openSelectPopup({
title: '工作经验',
maskClick: true,
data: [oneDictData('experience')],
success: (_, [value]) => {
fromValue.experience = value.value;
state.experienceText = value.label;
},
change(_, [value]) {
// this.setColunm(1, [123, 123]);
console.log(this);
},
});
2025-05-13 11:10:38 +08:00
}
function changeEducation() {
2025-12-16 20:24:03 +08:00
openSelectPopup({
title: '学历',
maskClick: true,
data: [oneDictData('education')],
success: (_, [value]) => {
fromValue.area = value.value;
state.educationText = value.label;
},
});
2024-11-18 16:33:37 +08:00
}
2025-05-13 11:10:38 +08:00
function changeArea() {
2025-12-16 20:24:03 +08:00
openSelectPopup({
title: '区域',
maskClick: true,
data: [oneDictData('area')],
success: (_, [value]) => {
fromValue.area = value.value;
state.areaText = '青岛市-' + value.label;
},
});
2025-03-28 15:19:42 +08:00
}
2025-05-13 11:10:38 +08:00
function changeSalay() {
2025-12-16 20:24:03 +08:00
let leftIndex = 0;
openSelectPopup({
title: '薪资',
maskClick: true,
data: [state.lfsalay, state.risalay],
unit: 'k',
success: (_, [min, max]) => {
fromValue.salaryMin = min.value * 1000;
fromValue.salaryMax = max.value * 1000;
state.salayText = `${fromValue.salaryMin}-${fromValue.salaryMax}`;
},
change(e) {
const salayData = e.detail.value;
if (leftIndex !== salayData[0]) {
const copyri = JSON.parse(JSON.stringify(salay));
const [lf, ri] = e.detail.value;
const risalay = copyri.slice(lf, copyri.length);
this.setColunm(1, risalay);
leftIndex = salayData[0];
}
},
});
2025-03-28 15:19:42 +08:00
}
2025-05-13 11:10:38 +08:00
function changeJobs() {
2025-12-16 20:24:03 +08:00
selectJobsModel.value?.open({
title: '添加岗位',
success: (ids, labels) => {
fromValue.jobTitleId = ids;
state.jobsText = labels.split(',');
},
});
2025-03-28 15:19:42 +08:00
}
2025-05-13 11:10:38 +08:00
2024-11-08 11:55:23 +08:00
function nextStep() {
2025-12-16 20:24:03 +08:00
tabCurrent.value += 1;
2024-11-08 11:55:23 +08:00
}
2025-03-28 15:19:42 +08:00
// 获取职位
function getTreeselect() {
2025-12-16 20:24:03 +08:00
const LoadCache = (resData) => {
state.station = resData.data;
};
$api.createRequestWithCache('/app/common/jobTitle/treeselect', {}, 'GET', false, LoadCache).then(LoadCache);
2025-03-28 15:19:42 +08:00
}
2025-11-20 09:17:29 +08:00
function loginbackdoor() {
2025-12-16 20:24:03 +08:00
if (isMachineEnv.value) {
useUserStore().logOutApp();
$api.msg('返回首页');
return;
}
$api.createRequest('/app/mock/login', {}, 'post').then((resData) => {
$api.msg('模拟帐号密码测试登录成功');
loginSetToken(resData.token).then((resume) => {
if (resume.data.jobTitleId) {
// 设置推荐列表,每次退出登录都需要更新
useUserStore().initSeesionId();
uni.reLaunch({
url: '/pages/index/index',
});
} else {
nextStep();
}
2025-11-20 09:17:29 +08:00
});
});
}
2025-03-28 15:19:42 +08:00
// 登录
function loginTest() {
2025-12-16 20:24:03 +08:00
// uni.share({
// provider: 'weixin',
// scene: 'WXSceneSession',
// type: 2,
// imageUrl: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni@2x.png',
// success: function (res) {
// console.log('success:' + JSON.stringify(res));
// },
// fail: function (err) {
// console.log('fail:' + JSON.stringify(err));
// },
// });
const params = {
username: 'test',
password: 'test',
};
$api.createRequest('/app/login', params, 'post').then((resData) => {
$api.msg('模拟帐号密码测试登录成功, 测试环境使用模拟定位');
loginSetToken(resData.token).then((resume) => {
if (resume.data.jobTitleId) {
// 设置推荐列表,每次退出登录都需要更新
useUserStore().initSeesionId();
uni.reLaunch({
url: '/pages/index/index',
});
} else {
nextStep();
}
2025-03-28 15:19:42 +08:00
});
});
}
function complete() {
2025-12-16 20:24:03 +08:00
$api.createRequest('/app/user/resume', fromValue, 'post').then((resData) => {
$api.msg('完成');
getUserResume();
uni.reLaunch({
url: '/pages/index/index',
});
2025-03-28 15:19:42 +08:00
});
2024-11-08 11:55:23 +08:00
}
</script>
<style lang="scss" scoped>
.alipay-login-container {
2025-12-16 20:24:03 +08:00
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
/* 扫码登录区域样式 */
.login-scan-area {
2025-12-16 20:24:03 +08:00
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
padding: 0 40rpx;
}
.login-title {
2025-12-16 20:24:03 +08:00
font-size: 36rpx;
font-weight: 600;
color: #1677ff;
margin-bottom: 40rpx;
text-align: center;
}
.qrcode-container {
2025-12-16 20:24:03 +08:00
width: 100%;
display: flex;
justify-content: center;
margin-bottom: 40rpx;
}
.qrcode-wrapper {
2025-12-16 20:24:03 +08:00
display: flex;
flex-direction: column;
align-items: center;
}
.qrcode-border {
2025-12-16 20:24:03 +08:00
width: 400rpx;
height: 400rpx;
background-color: #fff;
border-radius: 20rpx;
padding: 20rpx;
box-shadow: 0 8rpx 30rpx rgba(22, 119, 255, 0.1);
margin-bottom: 30rpx;
position: relative;
}
.qrcode-content {
2025-12-16 20:24:03 +08:00
width: 100%;
height: 100%;
background-color: #f8f8f8;
border-radius: 10rpx;
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
}
.qrcode-pattern {
2025-12-16 20:24:03 +08:00
width: 300rpx;
height: 300rpx;
background-color: #fff;
position: relative;
}
2025-12-16 20:24:03 +08:00
.qrcode-img {
width: 100%;
2025-12-16 20:24:03 +08:00
height: 100%;
}
.qrcode-corner {
2025-12-16 20:24:03 +08:00
position: absolute;
width: 60rpx;
height: 60rpx;
border: 6rpx solid #1677ff;
&.top-left {
top: 0;
left: 0;
border-right: none;
border-bottom: none;
border-radius: 10rpx 0 0 0;
}
2025-12-16 20:24:03 +08:00
&.top-right {
top: 0;
right: 0;
border-left: none;
border-bottom: none;
border-radius: 0 10rpx 0 0;
}
2025-12-16 20:24:03 +08:00
&.bottom-left {
bottom: 0;
left: 0;
border-right: none;
border-top: none;
border-radius: 0 0 0 10rpx;
}
}
.scan-line {
2025-12-16 20:24:03 +08:00
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 6rpx;
background: linear-gradient(90deg, transparent, #1677ff, transparent);
z-index: 10;
}
.expired-overlay {
2025-12-16 20:24:03 +08:00
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
border-radius: 10rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 20;
}
.expired-text {
2025-12-16 20:24:03 +08:00
font-size: 32rpx;
color: #fff;
margin-bottom: 30rpx;
}
.refresh-btn {
2025-12-16 20:24:03 +08:00
padding: 16rpx 40rpx;
background-color: #1677ff;
border-radius: 50rpx;
}
.refresh-text {
2025-12-16 20:24:03 +08:00
font-size: 28rpx;
color: #fff;
}
.qrcode-tips {
2025-12-16 20:24:03 +08:00
display: flex;
flex-direction: column;
align-items: center;
}
.tips-text {
2025-12-16 20:24:03 +08:00
font-size: 28rpx;
color: #333;
margin-bottom: 10rpx;
}
.tips-subtext {
2025-12-16 20:24:03 +08:00
font-size: 24rpx;
color: #666;
}
.refresh-tips {
2025-12-16 20:24:03 +08:00
margin-bottom: 40rpx;
}
.countdown-text {
2025-12-16 20:24:03 +08:00
font-size: 24rpx;
color: #999;
display: flex;
align-items: center;
}
2025-12-16 20:24:03 +08:00
.countdown-num {
margin-right: 5rpx;
color: #1677ff;
font-size: 30rpx;
}
.switch-method {
2025-12-16 20:24:03 +08:00
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx 0;
border-top: 1rpx solid #f0f0f0;
}
.switch-text {
2025-12-16 20:24:03 +08:00
font-size: 28rpx;
color: #666;
}
.switch-btn {
2025-12-16 20:24:03 +08:00
display: flex;
align-items: center;
}
.btn-text {
2025-12-16 20:24:03 +08:00
font-size: 28rpx;
color: #1677ff;
margin-right: 10rpx;
}
.icon-arrow {
2025-12-16 20:24:03 +08:00
font-size: 28rpx;
color: #1677ff;
}
/* 账号密码登录区域样式 */
.login-password-area {
2025-12-16 20:24:03 +08:00
width: 100%;
display: flex;
flex-direction: column;
padding: 0 40rpx;
}
.password-header {
2025-12-16 20:24:03 +08:00
display: flex;
align-items: center;
margin-bottom: 60rpx;
}
.back-btn {
2025-12-16 20:24:03 +08:00
width: 60rpx;
height: 60rpx;
display: flex;
align-items: center;
justify-content: center;
margin-right: 20rpx;
}
.icon-back {
2025-12-16 20:24:03 +08:00
font-size: 36rpx;
color: #333;
}
.login-form {
2025-12-16 20:24:03 +08:00
width: 100%;
}
.form-item {
2025-12-16 20:24:03 +08:00
margin-bottom: 40rpx;
position: relative;
}
.item-label {
2025-12-16 20:24:03 +08:00
font-size: 28rpx;
color: #333;
margin-bottom: 20rpx;
}
.item-input {
2025-12-16 20:24:03 +08:00
width: 100%;
height: 80rpx;
background-color: #f8f8f8;
border-radius: 10rpx;
padding: 0 24rpx;
font-size: 28rpx;
color: #333;
}
.input-placeholder {
2025-12-16 20:24:03 +08:00
color: #999;
font-size: 28rpx;
}
.forget-password {
2025-12-16 20:24:03 +08:00
position: absolute;
right: 0;
top: 0;
font-size: 26rpx;
color: #1677ff;
}
.login-btn {
2025-12-16 20:24:03 +08:00
width: 100%;
height: 90rpx;
background-color: #1677ff;
border-radius: 50rpx;
display: flex;
align-items: center;
justify-content: center;
margin-top: 60rpx;
&.disabled {
background-color: #a0cfff;
}
}
.login-btn-text {
2025-12-16 20:24:03 +08:00
font-size: 32rpx;
color: #fff;
font-weight: 500;
}
.agreement {
2025-12-16 20:24:03 +08:00
display: flex;
align-items: center;
justify-content: center;
margin-top: 40rpx;
flex-wrap: wrap;
}
.agreement-checkbox {
2025-12-16 20:24:03 +08:00
margin-right: 10rpx;
}
.checkbox-icon {
2025-12-16 20:24:03 +08:00
width: 32rpx;
height: 32rpx;
border-radius: 6rpx;
border: 2rpx solid #ddd;
display: flex;
align-items: center;
justify-content: center;
&.checked {
background-color: #1677ff;
border-color: #1677ff;
}
}
.checkmark {
2025-12-16 20:24:03 +08:00
font-size: 24rpx;
color: #fff;
}
.agreement-text {
2025-12-16 20:24:03 +08:00
font-size: 24rpx;
color: #666;
margin-right: 6rpx;
}
.agreement-link {
2025-12-16 20:24:03 +08:00
font-size: 24rpx;
color: #1677ff;
margin-right: 6rpx;
}
.other-login {
2025-12-16 20:24:03 +08:00
margin-top: 80rpx;
}
.other-title {
2025-12-16 20:24:03 +08:00
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 50rpx;
}
.title-line {
2025-12-16 20:24:03 +08:00
flex: 1;
height: 1rpx;
background-color: #eee;
}
.title-text {
2025-12-16 20:24:03 +08:00
font-size: 24rpx;
color: #999;
margin: 0 20rpx;
}
.login-methods {
2025-12-16 20:24:03 +08:00
display: flex;
justify-content: center;
gap: 100rpx;
}
.method-item {
2025-12-16 20:24:03 +08:00
display: flex;
flex-direction: column;
align-items: center;
}
.method-icon {
2025-12-16 20:24:03 +08:00
width: 100rpx;
height: 100rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 40rpx;
color: #fff;
margin-bottom: 20rpx;
&.scan-icon {
background-color: #1677ff;
}
2025-12-16 20:24:03 +08:00
&.sms-icon {
background-color: #52c41a;
}
}
.method-text {
2025-12-16 20:24:03 +08:00
font-size: 24rpx;
color: #666;
}
/* 登录成功提示 */
.success-tip {
2025-12-16 20:24:03 +08:00
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.success-content {
2025-12-16 20:24:03 +08:00
background-color: #fff;
border-radius: 20rpx;
padding: 60rpx 80rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.success-icon {
2025-12-16 20:24:03 +08:00
width: 120rpx;
height: 120rpx;
border-radius: 50%;
background-color: #52c41a;
display: flex;
align-items: center;
justify-content: center;
font-size: 60rpx;
color: #fff;
margin-bottom: 30rpx;
}
.success-text {
2025-12-16 20:24:03 +08:00
font-size: 32rpx;
color: #333;
}
</style>
2024-11-18 16:33:37 +08:00
<style lang="stylus" scoped>
2025-11-20 09:17:29 +08:00
.backdoor{
position: fixed;
2025-12-06 15:19:40 +08:00
left: 24rpx;
top: 10rpx;
2025-11-20 09:17:29 +08:00
}
2025-05-13 11:10:38 +08:00
.input-nx
position: relative
border-bottom: 2rpx solid #EBEBEB
padding-bottom: 30rpx
display: flex
flex-wrap: wrap
.nx-item
margin: 12rpx 12rpx 0 0;
padding: 12rpx 25rpx;
2025-05-13 11:10:38 +08:00
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #E8EAEE;
.nx-item::before
position: absolute;
right: 20rpx;
top: 60rpx;
content: '';
width: 4rpx;
height: 18rpx;
border-radius: 2rpx
background: #697279;
transform: translate(0, -50%) rotate(-45deg) ;
.nx-item::after
position: absolute;
right: 20rpx;
top: 61rpx;
content: '';
width: 4rpx;
height: 18rpx;
border-radius: 2rpx
background: #697279;
transform: rotate(45deg)
2024-11-08 11:55:23 +08:00
.container
2025-05-13 11:10:38 +08:00
// background: linear-gradient(#4778EC, #002979);
2024-11-18 16:33:37 +08:00
width: 100%;
height: calc(100vh - var(--window-top) - var(--status-bar-height) - var(--window-bottom));
2025-03-28 15:19:42 +08:00
position: fixed;
2025-11-07 11:30:07 +08:00
// background: linear-gradient( 180deg, #1677FF 0%, rgba(22,119,255,0) 54%, rgba(22,119,255,0) 100%);
// background: url('@/static/icon/background2.png') 0 0 no-repeat;
2025-05-13 11:10:38 +08:00
background-size: 100% 728rpx;
display: flex;
flex-direction: column
.container-hader
height: 88rpx;
text-align: center;
line-height: 88rpx;
color: #000000;
font-weight: bold
font-size: 32rpx
2024-11-08 11:55:23 +08:00
.login-content
position: absolute;
left: 50%;
top: 40%;
transform: translate(-50%, -50%);
display: flex;
align-items: flex-end;
flex-wrap: nowrap;
.logo
width: 266rpx;
height: 182rpx;
.logo-title
font-size: 88rpx;
2025-05-13 11:10:38 +08:00
color: #22c984;
2024-11-08 11:55:23 +08:00
width: 180rpx;
.btns
position: absolute;
top: 70%;
left: 50%;
transform: translate(-50%, 0)
.wxlogin
width: 562rpx;
height: 140rpx;
border-radius: 70rpx;
background-color: #13C57C;
color: #FFFFFF;
text-align: center;
line-height: 140rpx;
font-size: 70rpx;
.wxaddress
color: #BBBBBB;
margin-top: 70rpx;
text-align: center;
2025-05-13 11:10:38 +08:00
.content-one
padding: 60rpx 28rpx;
2024-11-08 11:55:23 +08:00
display: flex;
flex-direction: column;
2025-05-13 11:10:38 +08:00
justify-content: space-between
height: calc(100% - 120rpx)
.content-title
display: flex
justify-content: space-between;
align-items: center
margin-bottom: 70rpx
.title-lf
font-size: 44rpx;
color: #000000;
font-weight: 600;
.lf-text
font-weight: 400;
font-size: 28rpx;
color: #6C7282;
.title-ri
font-size: 36rpx;
color: #000000;
font-weight: 600;
.content-input
margin-bottom: 52rpx
.input-titile
font-weight: 400;
font-size: 28rpx;
color: #6A6A6A;
.input-con
2025-11-24 22:48:02 +08:00
pointer-events: none;
2025-05-13 11:10:38 +08:00
font-weight: 400;
font-size: 32rpx;
color: #333333;
line-height: 80rpx;
height: 80rpx;
border-bottom: 2rpx solid #EBEBEB
position: relative;
.input-con::before
position: absolute;
right: 20rpx;
top: calc(50% - 2rpx);
content: '';
width: 4rpx;
height: 18rpx;
border-radius: 2rpx
background: #697279;
transform: translate(0, -50%) rotate(-45deg) ;
.input-con::after
position: absolute;
right: 20rpx;
top: 50%;
content: '';
width: 4rpx;
height: 18rpx;
border-radius: 2rpx
background: #697279;
transform: rotate(45deg)
.content-sex
height: 110rpx;
display: flex
justify-content: space-between;
align-items: flex-start;
border-bottom: 2rpx solid #EBEBEB
margin-bottom: 52rpx
.sex-titile
line-height: 80rpx;
.sext-ri
display: flex
align-items: center;
.sext-box
height: 76rpx;
width: 152rpx;
text-align: center;
line-height: 80rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx
border: 2rpx solid #E8EAEE;
margin-left: 28rpx
font-weight: 400;
font-size: 28rpx;
.sext-boxactive
color: #256BFA
background: rgba(37,107,250,0.1);
border: 2rpx solid #256BFA;
.next-btn
2025-03-28 15:19:42 +08:00
width: 100%;
2025-05-13 11:10:38 +08:00
height: 90rpx;
background: #256BFA;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-weight: 500;
font-size: 32rpx;
2025-03-28 15:19:42 +08:00
color: #FFFFFF;
text-align: center;
2025-05-13 11:10:38 +08:00
line-height: 90rpx
2025-09-23 14:56:30 +08:00
</style>