shuishen
2024-03-22 4f49eea20774c0ac38c4216d0d1aca198df1b940
回滚
4 files modified
1 files added
930 ■■■■ changed files
common/setting.js 72 ●●●● patch | view | raw | blame | history
manifest.json 14 ●●●● patch | view | raw | blame | history
pages.json 2 ●●● patch | view | raw | blame | history
pages/login/login-account.vue 842 ●●●● patch | view | raw | blame | history
static/icon/login-title-ys.png patch | view | raw | blame | history
common/setting.js
@@ -2,41 +2,41 @@
 * 全局变量配置
 */
module.exports = {
    // 应用名,
    name: '饶城格格通',
    // 应用logo,支持本地路径和网络路径
    logo: '/static/images/base.ico',
    // 版本号
    version: '2.0.0',
    // 开发环境接口Url
    // devUrl: 'http://z4042833u6.wicp.vip',
    // devUrl: 'https://srgdjczzxtpt.com:2080/api',
    devUrl: 'http://192.168.2.140:9528',
    // devUrl: 'https://kt39592615.goho.co',
    minioBaseUrl: "https://srgdjczzxtpt.com:2080/gminio/jczz/",
    // minioBaseUrl: "http://192.168.0.101:9528/",
    // 数据中台接口url
    dataCenterUrl: 'https://sk.hubeishuiyi.cn/services',
    //洪水预报接口url
    hsybUrl: "https://sk.hubeishuiyi.cn/hsybApi/api/fh-admin",
    // 线上环境接口Url
    prodUrl: 'https://srgdjczzxtpt.com:2080/api',
  // 应用名,
  name: "社区网格治理",
  // 应用logo,支持本地路径和网络路径
  logo: "/static/images/base.ico",
  // 版本号
  version: "2.0.0",
  // 开发环境接口Url
  // devUrl: 'http://z4042833u6.wicp.vip',
  devUrl: 'https://srgdjczzxtpt.com:2080/api',
  // devUrl: "http://192.168.2.140:9528",
  // devUrl: 'https://kt39592615.goho.co',
  minioBaseUrl: "https://srgdjczzxtpt.com:2080/gminio/jczz/",
  // minioBaseUrl: "http://192.168.0.101:9528/",
  // 数据中台接口url
  dataCenterUrl: "https://sk.hubeishuiyi.cn/services",
  //洪水预报接口url
  hsybUrl: "https://sk.hubeishuiyi.cn/hsybApi/api/fh-admin",
  // 线上环境接口Url
  prodUrl: "https://srgdjczzxtpt.com:2080/api",
    // prodUrl: 'http://192.168.2.140:9528',
  // prodUrl: 'http://192.168.2.140:9528',
    // 后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8
    contentType: 'application/json;charset=UTF-8',
    // 后端返回状态码
    codeName: 'code',
    // 操作正常code
    successCode: 200,
    // 登录失效code
    invalidCode: 401,
    // 客户端ID
    clientId: 'rider',
    // 客户端密钥
    clientSecret: 'rider_secret',
    // token过期时间(秒)
    // 30天 30*24*60*60
    tokenTime: 2592000,
}
  // 后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8
  contentType: "application/json;charset=UTF-8",
  // 后端返回状态码
  codeName: "code",
  // 操作正常code
  successCode: 200,
  // 登录失效code
  invalidCode: 401,
  // 客户端ID
  clientId: "rider",
  // 客户端密钥
  clientSecret: "rider_secret",
  // token过期时间(秒)
  // 30天 30*24*60*60
  tokenTime: 2592000,
};
manifest.json
@@ -1,6 +1,6 @@
{
    "name" : "饶城格格通",
    "appid" : "__UNI__EE88272",
    "appid" : "__UNI__A3B9E26",
    "description" : "",
    "versionName" : "1.0.10",
    "versionCode" : 104,
@@ -8,7 +8,7 @@
    /* 5+App特有相关 */
    "app-plus" : {
        "compatible" : {
            "ignoreVersion" : true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
            "ignoreVersion" : true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
        },
        "safearea" : {
            "bottom" : {
@@ -142,7 +142,7 @@
    "quickapp" : {},
    /* 小程序特有相关 */
    "mp-weixin" : {
        "appid" : "wx41aa8a5d2e565a05",
        "appid" : "wxc92dcfb4afc3e34b",
        "setting" : {
            "urlCheck" : false,
            "minified" : true,
@@ -156,13 +156,7 @@
        "uniStatistics" : {
            "enable" : false
        },
        "requiredPrivateInfos" : [
            "getLocation",
            "chooseLocation",
            "onLocationChange",
            "startLocationUpdateBackground"
        ],
        "requiredBackgroundModes" : [ "location" ], //必填
        "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ],
        "permission" : {
            "scope.userLocation" : {
                "desc" : "定位"
pages.json
@@ -1020,7 +1020,7 @@
    ],
    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "饶城智理通",
        "navigationBarTitleText": "社区网格治理",
        "navigationBarBackgroundColor": "#fff",
        "backgroundColor": "#4586FE"
    },
pages/login/login-account.vue
@@ -1,494 +1,494 @@
<template>
    <view class="container">
        <!-- <view class="logo">
    <view class="container">
        <!-- <view class="logo">
                        <image src="https://sk.hubeishuiyi.cn/business/xcxImg/wxlogo.png" lazy-load show-menu-by-longpress
                style="width: 100rpx;height: 100rpx;"></image>
            <view class="title">基层智治</view> 
        </view>-->
        <image class="bg" src="/static/img/login-bg.png" :style="{height:screenHeight}" mode="aspectFill"></image>
        <image class="bg" src="/static/img/login-bg.png" :style="{ height: screenHeight }" mode="aspectFill"></image>
        <view class="content" v-if="!loginType">
            <image class="title-img" src="/static/icon/login-title.png" mode="aspectFill"></image>
            <view class="flex f-d-c a-i-c" style="margin-bottom:60rpx;">
                <view class="f-28">登录后即可展示自己</view>
                <view class="fw" style="font-size:56rpx;margin:40rpx 0 38rpx;">185****1647</view>
                <view class="f-22">认证服务由中国移动提供</view>
            </view>
        <view class="content" v-if="!loginType">
            <image class="title-img" src="/static/icon/login-title-ys.png" mode="aspectFill"></image>
            <view class="flex f-d-c a-i-c" style="margin-bottom:60rpx;">
                <view class="f-28">登录后即可展示自己</view>
                <view class="fw" style="font-size:56rpx;margin:40rpx 0 38rpx;">185****1647</view>
                <view class="f-22">认证服务由中国移动提供</view>
            </view>
            <button class="submit-btn f-28">本机号码一键登录</button>
            <button class="btn bgc-ff f-28 mt-30" @click="accountLogin()">账号登录</button>
            <view class="agreement flex">
                <u-checkbox-group v-model="isAgreement">
                    <u-checkbox shape="circle" size="16"></u-checkbox>
                </u-checkbox-group>
            <button class="submit-btn f-28">本机号码一键登录</button>
            <button class="btn bgc-ff f-28 mt-30" @click="accountLogin()">账号登录</button>
            <view class="agreement flex">
                <u-checkbox-group v-model="isAgreement">
                    <u-checkbox shape="circle" size="16"></u-checkbox>
                </u-checkbox-group>
                <view class="f-22">我已阅读并同意<text class="c-main">用户协议</text>和<text class="c-main">隐私政策</text>以及 <text
                        class="c-main">《中国移动认证服务条款》</text>·同时登录并使用基层智治综合协同平台</view>
            </view>
        </view>
                <view class="f-22">我已阅读并同意<text class="c-main">用户协议</text>和<text class="c-main">隐私政策</text>以及 <text
                        class="c-main">《中国移动认证服务条款》</text>·同时登录并使用社区网格治理平台</view>
            </view>
        </view>
        <view class="content" v-if="loginType == 1">
        <view class="content" v-if="loginType == 1">
            <image class="title-img" src="/static/icon/login-title.png" mode="aspectFill"></image>
            <image class="title-img" src="/static/icon/login-title-ys.png" mode="aspectFill"></image>
            <view class="">
                <u-form labelPosition="top" labelWidth="60" :model="form" :rules="rules" ref="form">
                    <u-form-item :borderBottom="false" ref="phone">
                        <u-input placeholder="请输入用户名" prefixIcon="account"
                            prefixIconStyle="font-size: 28px;color: #017BFC"
                            placeholderStyle="font-size:28rpx;color:#ABABAB;"
                            customStyle="background:#fff;width:634rpx;" type="number" v-model="form.phone"></u-input>
                    </u-form-item>
                    <u-form-item prop="password" :borderBottom="false" ref="password">
                        <u-input v-if="passwordProps.passwordType == 'password'" placeholder="请输入密码" prefixIcon="lock"
                            prefixIconStyle="font-size: 28px;color: #017BFC"
                            placeholderStyle="font-size:28rpx;color:#ABABAB;"
                            customStyle="background:#fff;width:634rpx;" type="password" v-model="form.password">
                            <template slot="suffix">
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" size="24"
                                    color="#9FA5C0"></u-icon>
                            </template>
                        </u-input>
            <view class="">
                <u-form labelPosition="top" labelWidth="60" :model="form" :rules="rules" ref="form">
                    <u-form-item :borderBottom="false" ref="phone">
                        <u-input placeholder="请输入用户名" prefixIcon="account"
                            prefixIconStyle="font-size: 28px;color: #017BFC"
                            placeholderStyle="font-size:28rpx;color:#ABABAB;"
                            customStyle="background:#fff;width:634rpx;" type="number" v-model="form.phone"></u-input>
                    </u-form-item>
                    <u-form-item prop="password" :borderBottom="false" ref="password">
                        <u-input v-if="passwordProps.passwordType == 'password'" placeholder="请输入密码" prefixIcon="lock"
                            prefixIconStyle="font-size: 28px;color: #017BFC"
                            placeholderStyle="font-size:28rpx;color:#ABABAB;"
                            customStyle="background:#fff;width:634rpx;" type="password" v-model="form.password">
                            <template slot="suffix">
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" size="24"
                                    color="#9FA5C0"></u-icon>
                            </template>
                        </u-input>
                        <u-input v-if="passwordProps.passwordType == 'text'" placeholder="请输入密码" prefixIcon="lock"
                            prefixIconStyle="font-size: 28px;color: #017BFC"
                            placeholderStyle="font-size:28rpx;color:#ABABAB;"
                            customStyle="background:#fff;width:634rpx;" type="text" v-model="form.password">
                            <template slot="suffix">
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" size="24"
                                    color="#9FA5C0"></u-icon>
                            </template>
                        </u-input>
                    </u-form-item>
                </u-form>
                <button class="submit-btn f-30 mt-190" @click="submit" :disabled="disabled">登录</button>
            </view>
                        <u-input v-if="passwordProps.passwordType == 'text'" placeholder="请输入密码" prefixIcon="lock"
                            prefixIconStyle="font-size: 28px;color: #017BFC"
                            placeholderStyle="font-size:28rpx;color:#ABABAB;"
                            customStyle="background:#fff;width:634rpx;" type="text" v-model="form.password">
                            <template slot="suffix">
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" size="24"
                                    color="#9FA5C0"></u-icon>
                            </template>
                        </u-input>
                    </u-form-item>
                </u-form>
                <button class="submit-btn f-30 mt-190" @click="submit" :disabled="disabled">登录</button>
            </view>
            <view class="top" v-if="false">
                <u--form labelPosition="top" labelWidth="60" :model="form" :rules="rules" ref="form">
                    <view class="cell">
                        <u-form-item label="账号:" borderBottom ref="phone">
                            <u-input v-model="form.phone" border="none" placeholder="请输入登录账号"></u-input>
                        </u-form-item>
                    </view>
                    <view class="cell">
                        <u-form-item label="密码:" prop="password" borderBottom ref="password">
                            <view style="display: flex; width: 100%;">
                                <!-- #ifdef  MP-WEIXIN -->
                                <u-input v-if="passwordProps.passwordType == 'password'" type="password"
                                    v-model="form.password" border="none" placeholder="请输入密码">
                                </u-input>
                                <u-input v-else type="text" v-model="form.password" border="none" placeholder="请输入密码">
                                </u-input>
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" color="#000000"
                                    size="25"></u-icon>
                                <!-- #endif -->
                                <!-- #ifdef APP-PLUS-->
                                <u-input :type="passwordProps.passwordType" v-model="form.password" border="none"
                                    placeholder="请输入密码"></u-input>
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" color="#000000"
                                    size="25"></u-icon>
                                <!-- #endif -->
                                <!-- #ifdef H5-->
                                <u-input v-if="passwordProps.passwordType == 'password'" type="password"
                                    v-model="form.password" border="none" placeholder="请输入密码">
                                </u-input>
                                <u-input v-else type="text" v-model="form.password" border="none" placeholder="请输入密码">
                                </u-input>
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" color="#000000"
                                    size="25"></u-icon>
                                <!-- #endif -->
                            </view>
                        </u-form-item>
                    </view>
                </u--form>
            <view class="top" v-if="false">
                <u--form labelPosition="top" labelWidth="60" :model="form" :rules="rules" ref="form">
                    <view class="cell">
                        <u-form-item label="账号:" borderBottom ref="phone">
                            <u-input v-model="form.phone" border="none" placeholder="请输入登录账号"></u-input>
                        </u-form-item>
                    </view>
                    <view class="cell">
                        <u-form-item label="密码:" prop="password" borderBottom ref="password">
                            <view style="display: flex; width: 100%;">
                                <!-- #ifdef  MP-WEIXIN -->
                                <u-input v-if="passwordProps.passwordType == 'password'" type="password"
                                    v-model="form.password" border="none" placeholder="请输入密码">
                                </u-input>
                                <u-input v-else type="text" v-model="form.password" border="none" placeholder="请输入密码">
                                </u-input>
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" color="#000000"
                                    size="25"></u-icon>
                                <!-- #endif -->
                                <!-- #ifdef APP-PLUS-->
                                <u-input :type="passwordProps.passwordType" v-model="form.password" border="none"
                                    placeholder="请输入密码"></u-input>
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" color="#000000"
                                    size="25"></u-icon>
                                <!-- #endif -->
                                <!-- #ifdef H5-->
                                <u-input v-if="passwordProps.passwordType == 'password'" type="password"
                                    v-model="form.password" border="none" placeholder="请输入密码">
                                </u-input>
                                <u-input v-else type="text" v-model="form.password" border="none" placeholder="请输入密码">
                                </u-input>
                                <u-icon @click="showPassword" :name="passwordProps.passwordIcon" color="#000000"
                                    size="25"></u-icon>
                                <!-- #endif -->
                            </view>
                        </u-form-item>
                    </view>
                </u--form>
                <button class="submit" @click="submit" :disabled="disabled">登录</button>
                <view class="page-change">
                </view>
            </view>
        </view>
    </view>
                <button class="submit" @click="submit" :disabled="disabled">登录</button>
                <view class="page-change">
                </view>
            </view>
        </view>
    </view>
</template>
<script>
    import md5 from '@/utils/md5.js'
    import loginMixin from '@/mixin/loginMixin'
    import {
        fetchUserInfo
    } from "@/api/user.js"
    export default {
        onLoad(option) {
            const {
                redirect
            } = option
            if (redirect) this.redirect = redirect
        },
        mixins: [loginMixin],
        data() {
            return {
                tenantId: '000000',
                form: {
                    phone: "",
                    password: "",
import md5 from '@/utils/md5.js'
import loginMixin from '@/mixin/loginMixin'
import {
    fetchUserInfo
} from "@/api/user.js"
export default {
    onLoad (option) {
        const {
            redirect
        } = option
        if (redirect) this.redirect = redirect
    },
    mixins: [loginMixin],
    data () {
        return {
            tenantId: '000000',
            form: {
                phone: "",
                password: "",
                },
                rules: {
                    'phone': [{
                            type: 'string',
                            required: true,
                            message: '请填写手机号',
                            trigger: ['blur', 'change']
                        },
                        {
                            validator: (rule, value, callback) => {
                                return uni.$u.test.mobile(value);
                            },
                            message: '手机号码不正确',
                            trigger: ['change', 'blur'],
                        }
                    ],
                    'password': {
                        type: 'string',
                        required: true,
                        message: '请输入密码',
                        trigger: ['blur', 'change']
                    }
                },
                disabled: false,
                redirect: '',
                passwordProps: {
                    passwordIcon: "eye-off",
                    passwordType: "password"
                },
                screenHeight: "",
                loginType: 1, //登录类型 1账号密码   2 一键登录
                isAgreement: true
            }
        },
            },
            rules: {
                'phone': [{
                    type: 'string',
                    required: true,
                    message: '请填写手机号',
                    trigger: ['blur', 'change']
                },
                {
                    validator: (rule, value, callback) => {
                        return uni.$u.test.mobile(value)
                    },
                    message: '手机号码不正确',
                    trigger: ['change', 'blur'],
                }
                ],
                'password': {
                    type: 'string',
                    required: true,
                    message: '请输入密码',
                    trigger: ['blur', 'change']
                }
            },
            disabled: false,
            redirect: '',
            passwordProps: {
                passwordIcon: "eye-off",
                passwordType: "password"
            },
            screenHeight: "",
            loginType: 1, //登录类型 1账号密码   2 一键登录
            isAgreement: true
        }
    },
        onLoad() {
            this.screenHeight = `${uni.getSystemInfoSync().screenHeight}px`;
            this.form.phone = uni.getStorageSync("phoneNmber");
        },
    onLoad () {
        this.screenHeight = `${uni.getSystemInfoSync().screenHeight}px`
        this.form.phone = uni.getStorageSync("phoneNmber")
    },
        methods: {
    methods: {
            accountLogin() {
                // if(!this.isAgreement){
        accountLogin () {
            // if(!this.isAgreement){
                // }
                console.log(111);
                this.loginType = 1;
            },
            // }
            console.log(111)
            this.loginType = 1
        },
            submit() {
                const that = this
                this.$refs.form.validate().then(res => {
                    this.$u.api
                        .token(this.tenantId, this.form.phone, md5(this.form.password))
                        .then(data => {
                            uni.setStorageSync("phoneNmber", this.form.phone)
                            // this.getUserInfo(data);
                            this.$u.func.login(data)
                        })
                        .catch(err => {
                            this.$u.func.showToast({
                                title: err.data.error_description || "服务器错误"
                            })
                        })
                })
            },
            handleInputCheck() {
                this.disabled = false
            },
            showPassword() {
                this.passwordProps.passwordIcon == "eye-off" ? this.$set(this.passwordProps, "passwordIcon", "eye-fill") :
                    this.$set(this.passwordProps, "passwordIcon", "eye-off")
                this.passwordProps.passwordType == "password" ? this.$set(this.passwordProps, "passwordType", "text") :
                    this.$set(this.passwordProps, "passwordType", "password")
            },
        submit () {
            const that = this
            this.$refs.form.validate().then(res => {
                this.$u.api
                    .token(this.tenantId, this.form.phone, md5(this.form.password))
                    .then(data => {
                        uni.setStorageSync("phoneNmber", this.form.phone)
                        // this.getUserInfo(data);
                        this.$u.func.login(data)
                    })
                    .catch(err => {
                        this.$u.func.showToast({
                            title: err.data.error_description || "服务器错误"
                        })
                    })
            })
        },
        handleInputCheck () {
            this.disabled = false
        },
        showPassword () {
            this.passwordProps.passwordIcon == "eye-off" ? this.$set(this.passwordProps, "passwordIcon", "eye-fill") :
                this.$set(this.passwordProps, "passwordIcon", "eye-off")
            this.passwordProps.passwordType == "password" ? this.$set(this.passwordProps, "passwordType", "text") :
                this.$set(this.passwordProps, "passwordType", "password")
        },
            getUserInfo(data) {
                fetchUserInfo(data.user_id).then(res => {
                    console.log(res)
                    if (res.code == 200) {
                        this.$u.vuex('userInfo', JSON.parse(res.data))
                    }
                })
            },
        getUserInfo (data) {
            fetchUserInfo(data.user_id).then(res => {
                console.log(res)
                if (res.code == 200) {
                    this.$u.vuex('userInfo', JSON.parse(res.data))
                }
            })
        },
        }
    }
    }
}
</script>
<style lang="scss">
    .bg {
        width: 100%;
        display: block;
    }
.bg {
    width: 100%;
    display: block;
}
    .privacy-policy {
        width: 100%;
        padding: 40rpx 40rpx 0 80rpx;
        font-size: 28rpx;
    }
.privacy-policy {
    width: 100%;
    padding: 40rpx 40rpx 0 80rpx;
    font-size: 28rpx;
}
    .container {
        min-height: 100vh;
        overflow: hidden;
        // background: url("https://sk.hubeishuiyi.cn/business/xcxImg/reservoirImg/default.jpg") no-repeat;
        // background-size: 100% 100%;
        position: relative;
.container {
    min-height: 100vh;
    overflow: hidden;
    // background: url("https://sk.hubeishuiyi.cn/business/xcxImg/reservoirImg/default.jpg") no-repeat;
    // background-size: 100% 100%;
    position: relative;
        .set-icon {
            vertical-align: middle;
            width: 41rpx;
            height: auto;
            margin-right: 35rpx;
        }
    }
    .set-icon {
        vertical-align: middle;
        width: 41rpx;
        height: auto;
        margin-right: 35rpx;
    }
}
    .logo {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        padding: 200rpx 0;
.logo {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 200rpx 0;
        image {
            box-shadow: 4rpx 4rpx 20rpx #fafafa;
        }
    image {
        box-shadow: 4rpx 4rpx 20rpx #fafafa;
    }
        .title {
            margin-top: 40rpx;
            font-weight: 700;
            font-size: 32rpx;
    .title {
        margin-top: 40rpx;
        font-weight: 700;
        font-size: 32rpx;
        }
    }
    }
}
    .title-img {
        width: 650rpx;
        height: 49rpx;
        display: block;
        margin: 320rpx 0 120rpx;
    }
.title-img {
    width: 650rpx;
    height: 49rpx;
    display: block;
    margin: 320rpx 0 120rpx;
}
    .content {
        display: flex;
        flex-direction: column;
        justify-content: space-around;
        align-items: center;
        position: absolute;
        top: 0;
        left: 0;
        // height: 90vh;
        width: 100%;
.content {
    display: flex;
    flex-direction: column;
    justify-content: space-around;
    align-items: center;
    position: absolute;
    top: 0;
    left: 0;
    // height: 90vh;
    width: 100%;
        .top {
            width: 100%;
            width: 100%;
            // background: #fff;
            padding: 20px 0;
            position: fixed;
            bottom: 0px;
        }
    .top {
        width: 100%;
        width: 100%;
        // background: #fff;
        padding: 20px 0;
        position: fixed;
        bottom: 0px;
    }
        .logo {
            display: block;
            width: 281rpx;
            height: auto;
            margin: 0 auto 120rpx;
        }
    .logo {
        display: block;
        width: 281rpx;
        height: auto;
        margin: 0 auto 120rpx;
    }
        .cell {
            width: 100%;
            padding: 0 85rpx;
            box-sizing: border-box;
            margin-top: 36rpx;
    .cell {
        width: 100%;
        padding: 0 85rpx;
        box-sizing: border-box;
        margin-top: 36rpx;
            .name {
                font-size: 22rpx;
                font-family: Source Han Sans CN;
                font-weight: 400;
                color: #3e4a59;
                line-height: 30rpx;
                opacity: 0.72;
            }
        .name {
            font-size: 22rpx;
            font-family: Source Han Sans CN;
            font-weight: 400;
            color: #3e4a59;
            line-height: 30rpx;
            opacity: 0.72;
        }
            .input-box {
                padding: 30rpx 0;
                border-bottom: 2rpx solid #f6f6f6;
                display: flex;
                align-items: center;
        .input-box {
            padding: 30rpx 0;
            border-bottom: 2rpx solid #f6f6f6;
            display: flex;
            align-items: center;
                .code {
                    font-size: 22rpx;
                    font-family: Source Han Sans CN;
                    font-weight: 400;
                    color: #0d0d0d;
                    line-height: 30rpx;
            .code {
                font-size: 22rpx;
                font-family: Source Han Sans CN;
                font-weight: 400;
                color: #0d0d0d;
                line-height: 30rpx;
                    text {
                        color: #5f88ff;
                    }
                }
                text {
                    color: #5f88ff;
                }
            }
                .ipt {
                    flex: 1;
                    font-size: 24rpx;
                }
            .ipt {
                flex: 1;
                font-size: 24rpx;
            }
                .hold {
                    font-size: 26rpx;
                    font-family: Source Han Sans CN;
                    font-weight: 400;
                    color: #3e4a59;
                    line-height: 30px;
                    opacity: 0.45;
                }
            }
        }
            .hold {
                font-size: 26rpx;
                font-family: Source Han Sans CN;
                font-weight: 400;
                color: #3e4a59;
                line-height: 30px;
                opacity: 0.45;
            }
        }
    }
        .agree {
            margin: 27rpx 95rpx 0;
            font-size: 22rpx;
            font-family: Adobe Heiti Std;
            font-weight: normal;
            color: #cacaca;
            line-height: 34rpx;
    .agree {
        margin: 27rpx 95rpx 0;
        font-size: 22rpx;
        font-family: Adobe Heiti Std;
        font-weight: normal;
        color: #cacaca;
        line-height: 34rpx;
            .a {
                color: #000000;
            }
        }
        .a {
            color: #000000;
        }
    }
        .submit {
            margin: 60rpx 90rpx 0;
            border: none;
            width: 572rpx;
            height: 86rpx;
            line-height: 86rpx;
            box-sizing: border-box;
            border-radius: 15rpx;
            background-color: #5f88ff;
            color: #ffffff;
    .submit {
        margin: 60rpx 90rpx 0;
        border: none;
        width: 572rpx;
        height: 86rpx;
        line-height: 86rpx;
        box-sizing: border-box;
        border-radius: 15rpx;
        background-color: #5f88ff;
        color: #ffffff;
            &::after {
                content: none;
            }
        &::after {
            content: none;
        }
            &::before {
                content: none;
            }
        &::before {
            content: none;
        }
            &[disabled='true'] {
                background: #e4e4e4;
                font-size: 36rpx;
                font-family: Source Han Sans CN;
                font-weight: 500;
                color: #ffffff;
            }
        }
        &[disabled='true'] {
            background: #e4e4e4;
            font-size: 36rpx;
            font-family: Source Han Sans CN;
            font-weight: 500;
            color: #ffffff;
        }
    }
        .tip {
            margin-top: 30rpx;
            text-align: center;
            font-size: 22rpx;
            font-family: Adobe Heiti Std;
            font-weight: normal;
            color: #cacaca;
            line-height: 34rpx;
        }
    .tip {
        margin-top: 30rpx;
        text-align: center;
        font-size: 22rpx;
        font-family: Adobe Heiti Std;
        font-weight: normal;
        color: #cacaca;
        line-height: 34rpx;
    }
        .change {
            margin-top: 20rpx;
            text-align: center;
            font-size: 22rpx;
            font-family: Adobe Heiti Std;
            font-weight: normal;
            color: #5f88ff;
            line-height: 34rpx;
        }
    .change {
        margin-top: 20rpx;
        text-align: center;
        font-size: 22rpx;
        font-family: Adobe Heiti Std;
        font-weight: normal;
        color: #5f88ff;
        line-height: 34rpx;
    }
        .tag {
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 22rpx;
            font-family: Adobe Heiti Std;
            font-weight: normal;
            color: #9f9f9f;
            line-height: 34rpx;
    .tag {
        display: flex;
        justify-content: center;
        align-items: center;
        font-size: 22rpx;
        font-family: Adobe Heiti Std;
        font-weight: normal;
        color: #9f9f9f;
        line-height: 34rpx;
            &::before {
                content: '';
                display: block;
                width: 160rpx;
                height: 1px;
                background: #d8d8d8;
                opacity: 0.86;
            }
        &::before {
            content: '';
            display: block;
            width: 160rpx;
            height: 1px;
            background: #d8d8d8;
            opacity: 0.86;
        }
            &::after {
                content: '';
                display: block;
                width: 160rpx;
                height: 1px;
                background: #d8d8d8;
                opacity: 0.86;
            }
        }
        &::after {
            content: '';
            display: block;
            width: 160rpx;
            height: 1px;
            background: #d8d8d8;
            opacity: 0.86;
        }
    }
        .chat-arr {
            margin-top: 50rpx;
            display: flex;
            align-items: center;
            justify-content: space-between;
    .chat-arr {
        margin-top: 50rpx;
        display: flex;
        align-items: center;
        justify-content: space-between;
            .icon {
                width: 73rpx;
                height: 73rpx;
            }
        }
        .icon {
            width: 73rpx;
            height: 73rpx;
        }
    }
        .page-change {
            display: flex;
            justify-content: space-evenly;
        }
    }
    .page-change {
        display: flex;
        justify-content: space-evenly;
    }
}
    .submit-btn {
        width: 634rpx;
        height: 94rpx;
        line-height: 94rpx;
        background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
        border-radius: 8rpx 8rpx 8rpx 8rpx;
        color: #fff;
    }
.submit-btn {
    width: 634rpx;
    height: 94rpx;
    line-height: 94rpx;
    background: linear-gradient(163deg, #01BDFC 0%, #017BFC 100%);
    border-radius: 8rpx 8rpx 8rpx 8rpx;
    color: #fff;
}
    .mt-190 {
        margin-top: 190rpx;
    }
.mt-190 {
    margin-top: 190rpx;
}
    .btn {
        width: 634rpx;
        height: 94rpx;
        line-height: 94rpx;
        margin-top: 30rpx;
.btn {
    width: 634rpx;
    height: 94rpx;
    line-height: 94rpx;
    margin-top: 30rpx;
    }
}
    .agreement {
        width: 634rpx;
        margin: 37rpx auto 0;
    }
.agreement {
    width: 634rpx;
    margin: 37rpx auto 0;
}
</style>
static/icon/login-title-ys.png