xuxueyang
2024-07-17 51edf3ba7b1e5aa58220f90ee895835bbdfd922e
update 合伙人信息维护
已修改6个文件
已重命名1个文件
已添加1个文件
1431 ■■■■■ 文件已修改
manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/supplier-home.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/supplier-login.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/supplier-reg.vue 890 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/user/supplier-user.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
store/index.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/partner/partner-info/partner-info.vue 416 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json
@@ -49,7 +49,7 @@
    "quickapp" : {},
    /* 快应用特有相关 */
    "mp-weixin" : {
        "appid" : "wx3203fd935a6ffe09",
        "appid" : "wx6d0ecc4e18710458",
        "setting" : {
            "urlCheck" : false,
            "es6" : true,
pages.json
@@ -3,8 +3,7 @@
    "easycom": {
        "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
    },
    "pages": [
        {
    "pages": [{
            "path": "pages/login/supplier-login",
            "style": {
                "navigationBarTitleText": "登录",
@@ -19,17 +18,27 @@
                "navigationStyle": "custom"
            }
        },
        // #ifdef PUB_CUSTOMER
        {
            "path": "pages/home/home",
            "style": {
                "navigationBarTitleText": "首页",
                "enablePullDownRefresh": true,
                "navigationStyle": "custom"
            }
        },
        },
        // #ifdef PUB_CUSTOMER
        {
            "path": "pages/home/home",
            "style": {
                "navigationBarTitleText": "首页",
                "enablePullDownRefresh": true,
                "navigationStyle": "custom"
            }
        },
        // #endif
        // #ifndef PUB_CUSTOMER
        {
            "path": "pages/login/supplier-reg",
            "style": {
                "navigationBarTitleText": "申请入驻",
                "navigationStyle": "custom"
            }
        },
        // #endif 
        {
            "path": "pages/user/supplier-user",
@@ -122,13 +131,6 @@
                }
            },
            {
                "path": "supplier-reg/supplier-reg",
                "style": {
                    "navigationBarTitleText": "申请入驻",
                    "navigationStyle": "custom"
                }
            },
            {
                "path": "protocol",
                "style": {
                    "navigationBarTitleText": "协议",
@@ -141,6 +143,12 @@
    }, {
        "root": "sub_pages/partner",
        "pages": [{
                "path": "partner-info/partner-info",
                "style": {
                    "navigationBarTitleText": "信息维护",
                    "enablePullDownRefresh": false
                }
            }, {
                "path": "order-manage/order-manage",
                "style": {
                    "navigationBarTitleText": "订单管理",
@@ -182,17 +190,16 @@
            {
                "path": "trade/detail",
                "style": {
                    "navigationBarTitleText": "商品详情",
                    "enablePullDownRefresh": false
                    "navigationBarTitleText": "商品详情",
                    "enablePullDownRefresh": false
                }
            },
            {
                "path" : "shop/shop",
                "style" :
                {
                    "navigationBarTitleText" : "商家主页"
                }
            },
            {
                "path": "shop/shop",
                "style": {
                    "navigationBarTitleText": "商家主页"
                }
            }
        ]
pages/home/supplier-home.vue
@@ -19,9 +19,13 @@
                <image class="user-icon" v-if="currentInfo.picture" :src="currentInfo.picture" mode="aspectFit"></image>
                <view class="name">
                    <view class="t1">{{ (!!currentInfo.supplierDTO?(currentInfo.supplierDTO.name):"") || currentInfo.nickName || currentInfo.loginName || '-'}}<span
                    <view class="t1">
                        {{ (!!currentInfo.supplierDTO?(currentInfo.supplierDTO.name):"") || currentInfo.nickName || currentInfo.loginName || '-'}}<span
                            v-if="currentInfo.supplierDTO&&currentInfo.supplierDTO.status!=='P'">
                            ({{currentInfo.supplierDTO?currentInfo.supplierDTO.statusStr:''}})</span>
                        <span v-if="currentInfo.partnerDTO&&currentInfo.partnerDTO.status!=='P'">
                            ({{currentInfo.partnerDTO?currentInfo.partnerDTO.statusStr:''}})</span>
                        <span v-if="!currentInfo.partnerDTO&&currentInfo.type==='partner'">(信息待完善)</span>
                    </view>
                    <view class="t2">{{currentInfo.tel || '暂无电话'}}</view>
                </view>
@@ -44,7 +48,7 @@
                </view>
            </view>
            <view class="line"></view>
            <view class="flex tj-container" v-if="selftype==='supplier'">
                <view class="tj-each">
                    <view class="num">
@@ -251,7 +255,7 @@
        methods: {
            async toFlowManage() {
                if (!this.currentInfo.supplierDTO) {
                    await this.$message.confirm('尚未入驻店铺信息,是否前往入驻?')
                    this.goto('/sub_pages/supplier/supplier-info/supplier-info', true)
@@ -262,7 +266,7 @@
                    this.$message.showLoading()
                    await this.$store.dispatch('getCurrentInfo')
                    this.$message.hideLoading()
                    if (this.currentInfo.supplierDTO.status == 'P') {
                    } else {
pages/login/supplier-login.vue
@@ -51,7 +51,7 @@
                        <view class="topic-font" v-if="loginType=='pwd'" @click="loginType='code'">手机验证码登录</view>
                        <view class="topic-font" v-if="loginType=='code'" @click="loginType='pwd'">账号密码登录</view>
                        <!-- #ifdef PUB_SUPPLIER -->
                        <!-- #ifndef PUB_CUSTOMER -->
                        <view class="topic-font m-l-a m-r-0" @click="toReg">前往注册</view>
                        <!-- #endif -->
@@ -173,7 +173,7 @@
                //     url: '/pages/index/index'
                // })
                uni.redirectTo({
                    url: '/sub_pages/supplier/supplier-reg/supplier-reg'
                    url: '/pages/login/supplier-reg'
                })
            },
pages/login/supplier-reg.vue
文件名从 sub_pages/supplier/supplier-reg/supplier-reg.vue 修改
@@ -1,445 +1,455 @@
<template>
    <view class="main-container login-container img100 relative" style="margin-top: 0rpx;">
        <image class="component-bg"
            src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/a5/a54508de179a4942918ecb2c5a4aa9f5bg.png"
            mode="scaleToFill" />
        <view class="t-login top-bg">
            <view class="nav-title">注册</view>
            <view class="login">
                <form class="cl">
                    <view class="t-a titles-top">
                        <view class="title-1">HELLO</view>
                        <view class="title-2">欢迎入驻<span class="title-3">花满芜</span></view>
                    </view>
                    <view class="t-a form-input" v-if="loginType=='code'">
                        <u-input placeholder="请输入手机号"  :border="false"  v-model="phoneNumber">
                            <template slot="suffix">
                                <view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()">
                                    {{getCodeText}}
                                </view>
                            </template>
                        </u-input>
                        <!-- <u-input type="text" name="userName" placeholder="请输入手机号" v-model="phoneNumber"
                            style="position: relative;z-index: 1;" /> -->
                    </view>
                    <view class="t-a form-input" v-if="loginType=='code'">
                        <!--         <input type="text" name="userName" placeholder="请输入手机验证码" v-model="smsCode"
                            style="position: relative;z-index: 1;" /> -->
                        <u-input placeholder="请输入手机验证码"    :border="false"   v-model="smsCode"></u-input>
                    </view>
                    <view class="t-a form-input" v-if="loginType=='code'">
                        <!-- <input type="text" :password="true" name="password" placeholder="请输入密码" v-model="password" /> -->
                        <u-input :password="true" :border="false"     placeholder="请输入密码" v-model="password"></u-input>
                    </view>
                    <button @tap="login()" class="bottom-button">注 册</button>
                    <view class="flex">
                        <view class="topic-font m-l-a m-r-0" @click="toLogin">前往登录</view>
                    </view>
                    <view class="flex flex-wrap-normal" style="position: fixed;bottom: 40rpx;left: 40rpx;right: 40rpx;"
                        v-if="false">
                        <view :style="{'margin-top': '8rpx','margin-right': '12rpx','font-size':'24rpx'}"
                            @click="protocal=!protocal" class="component-radio" :class="[protocal?'cur':'']">
                        </view>
                        <view class="topic-gray" @click="toProtocol">请仔细阅读《花满芜合伙人供应商入口小程序隐私保护指引》如您同意该指引,请勾选开始使用本小程序
                        </view>
                    </view>
                </form>
            </view>
        </view>
    </view>
</template>
<script>
    // import util from '@/utils/util.js'
    // import gzmzApi from '@/api/gzmzApi.js'
    // import myCache from '@/utils/myCache.js'
    export default {
        data() {
            return {
                openId: '-1',
                userName: '',
                password: '',
                phoneNumber: '',
                smsCode: '',
                checked: false,
                loginType: 'code', //pwd和code,密码和验证码登录
                pcfvalue: undefined,
                getCodeText: '获取验证码',
                getCodeBtnColor: "#20613D",
                getCodeisWaiting: false,
                Timer: undefined,
                protocal: false
            };
        },
        methods: {
            toProtocol() {
                uni.navigateTo({
                    url: '/sub_pages/supplier/protocol'
                })
            },
            async getCode() {
                // await this.$message.confirm('是否同意入驻协议')
                // this.protocal = true
                console.log('getCode')
                setTimeout(() => {
                    uni.hideKeyboard() //隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。
                }, 200)
                if (this.getCodeisWaiting) {
                    return;
                }
                if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phoneNumber))) { //校验手机号码是否有误
                    uni.showToast({
                        title: '请填写正确手机号码',
                        icon: "none"
                    });
                    return false;
                }
                this.getCodeText = "发送中..." //发送验证码
                this.getCodeisWaiting = true;
                this.getCodeBtnColor = "#000" //追加样式,修改颜色
                //示例用定时器模拟请求效果
                //setTimeout(()用于在指定的毫秒数后调用函数或计算表达式
                const {
                    code
                } = await this.$http.request('post', '/api/sms/send/code', {
                    data: {
                        tel: this.phoneNumber,
                        userType: 'supplier'
                    }
                })
                if (code == 0) {
                    uni.showToast({
                        title: '验证码已发送',
                        icon: "none"
                    });
                    this.setTimer(); //调用定时器方法
                }else{
                    this.getCodeText = "获取验证码" //发送验证码
                    this.getCodeisWaiting = false;
                    this.getCodeBtnColor = "#20613D";
                }
                // setTimeout(() => {
                //     //弹出提示框
                //     //示例默认1234,生产中请删除这一句。
                //     // this.code = '1234'; //发送验证码,进行填入
                // }, 1000)
            },
            //setTimer: 需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数
            setTimer() {
                let holdTime = 60; //定义变量并赋值
                this.getCodeText = "重新获取(60)"
                //setInterval()是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。
                //setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。
                this.Timer = setInterval(() => {
                    if (holdTime <= 0) {
                        this.getCodeisWaiting = false;
                        this.getCodeBtnColor = "#20613D";
                        this.getCodeText = "获取验证码"
                        clearInterval(this.Timer); //清除该函数
                        return; //返回前面
                    }
                    this.getCodeText = "重新获取(" + holdTime + ")"
                    holdTime--;
                }, 1000)
            },
            toLogin() {
                uni.redirectTo({
                    url: '/pages/login/supplier-login'
                })
            },
            changeAll(e) {
                this.pcfvalue = e.detail.value[0]
            },
            async login() {
                uni.showLoading({
                    title: '登陆中'
                });
                var that = this;
                if (!that.phoneNumber) {
                    uni.showToast({
                        title: '请输入手机号',
                        icon: 'none'
                    });
                    return;
                }
                if (!that.smsCode) {
                    uni.showToast({
                        title: '请输入手机验证码',
                        icon: 'none'
                    });
                    return;
                }
                if (!that.password) {
                    uni.showToast({
                        title: '请输入密码',
                        icon: 'none'
                    });
                    return;
                }
                // if (this.pcfvalue == undefined) {
                //     util.showMyToast('必须勾选《用户服务协议》及《隐私政策》');
                //     return;
                // }
                let post = {
                    tel: this.phoneNumber,
                    smsCode: this.smsCode,
                    password: this.password,
                    // openId: '123456789'
                }
                // const {
                // code
                // } = await this.$http.request('get', '/api/login/admin')
                const resp = await this.$store.dispatch('regSupplier', post);
                // uni.hideLoading()
                if (resp.code == 0) {
                    // myCache.cache("userToken", res.data.accessToken)
                    // let userRes = await gzmzApi.getMemberInfo();
                    // if (userRes.status) {
                    //     myCache.cache("userInfo", JSON.stringify(userRes.data))
                    // }
                    uni.showToast({
                        title: '注册成功!',
                        icon: 'none'
                    });
                    setTimeout(() => {
                        this.toLogin()
                    }, 1000);
                } else {
                    // uni.showToast({
                    //     title: '登录失败!',
                    //     icon: 'none'
                    // });
                    return;
                }
            },
            tc1(id) {
                uni.navigateTo({
                    url: '/pages/users/xieyi?id=' + id,
                });
            }
        }
    };
</script>
<style lang="scss" scoped>
    .form-input {
        background-color: #f8f7fc;
        border-radius: 50rpx;
<template>
    <view class="main-container login-container img100 relative" style="margin-top: 0rpx;">
        <image class="component-bg"
            src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/a5/a54508de179a4942918ecb2c5a4aa9f5bg.png"
            mode="scaleToFill" />
        <view class="t-login top-bg">
            <view class="nav-title">注册</view>
            <view class="login">
                <form class="cl">
                    <view class="t-a titles-top">
                        <view class="title-1">HELLO</view>
                        <view class="title-2">欢迎入驻<span class="title-3">花满芜</span></view>
                    </view>
                    <view class="t-a form-input" v-if="loginType=='code'">
                        <u-input placeholder="请输入手机号" :border="false" v-model="phoneNumber">
                            <template slot="suffix">
                                <view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()">
                                    {{getCodeText}}
                                </view>
                            </template>
                        </u-input>
                        <!-- <u-input type="text" name="userName" placeholder="请输入手机号" v-model="phoneNumber"
                            style="position: relative;z-index: 1;" /> -->
                    </view>
                    <view class="t-a form-input" v-if="loginType=='code'">
                        <!--         <input type="text" name="userName" placeholder="请输入手机验证码" v-model="smsCode"
                            style="position: relative;z-index: 1;" /> -->
                        <u-input placeholder="请输入手机验证码" :border="false" v-model="smsCode"></u-input>
                    </view>
                    <view class="t-a form-input" v-if="loginType=='code'">
                        <!-- <input type="text" :password="true" name="password" placeholder="请输入密码" v-model="password" /> -->
                        <u-input :password="true" :border="false" placeholder="请输入密码" v-model="password"></u-input>
                    </view>
                    <button @tap="login()" class="bottom-button">注 册</button>
                    <view class="flex">
                        <view class="topic-font m-l-a m-r-0" @click="toLogin">前往登录</view>
                    </view>
                    <view class="flex flex-wrap-normal" style="position: fixed;bottom: 40rpx;left: 40rpx;right: 40rpx;"
                        v-if="false">
                        <view :style="{'margin-top': '8rpx','margin-right': '12rpx','font-size':'24rpx'}"
                            @click="protocal=!protocal" class="component-radio" :class="[protocal?'cur':'']">
                        </view>
                        <view class="topic-gray" @click="toProtocol">请仔细阅读《花满芜合伙人供应商入口小程序隐私保护指引》如您同意该指引,请勾选开始使用本小程序
                        </view>
                    </view>
                </form>
            </view>
        </view>
    </view>
</template>
<script>
    // import util from '@/utils/util.js'
    // import gzmzApi from '@/api/gzmzApi.js'
    // import myCache from '@/utils/myCache.js'
    export default {
        data() {
            return {
                openId: '-1',
                userName: '',
                password: '',
                phoneNumber: '',
                smsCode: '',
                checked: false,
                loginType: 'code', //pwd和code,密码和验证码登录
                pcfvalue: undefined,
                getCodeText: '获取验证码',
                getCodeBtnColor: "#20613D",
                getCodeisWaiting: false,
                Timer: undefined,
                protocal: false,
                // #ifdef PUB_SUPPLIER
                apitype: 'supplier',
                // #endif
                // #ifdef PUB_PARTNER
                apitype: 'partner',
                // #endif
            };
        },
        methods: {
            toProtocol() {
                uni.navigateTo({
                    url: '/sub_pages/supplier/protocol'
                })
            },
            async getCode() {
                // await this.$message.confirm('是否同意入驻协议')
                // this.protocal = true
                console.log('getCode')
                setTimeout(() => {
                    uni.hideKeyboard() //隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。
                }, 200)
                if (this.getCodeisWaiting) {
                    return;
                }
                if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phoneNumber))) { //校验手机号码是否有误
                    uni.showToast({
                        title: '请填写正确手机号码',
                        icon: "none"
                    });
                    return false;
                }
                this.getCodeText = "发送中..." //发送验证码
                this.getCodeisWaiting = true;
                this.getCodeBtnColor = "#000" //追加样式,修改颜色
                //示例用定时器模拟请求效果
                //setTimeout(()用于在指定的毫秒数后调用函数或计算表达式
                const {
                    code
                } = await this.$http.request('post', '/api/sms/send/code', {
                    data: {
                        tel: this.phoneNumber,
                        userType: this.apitype
                    }
                })
                if (code == 0) {
                    uni.showToast({
                        title: '验证码已发送',
                        icon: "none"
                    });
                    this.setTimer(); //调用定时器方法
                } else {
                    this.getCodeText = "获取验证码" //发送验证码
                    this.getCodeisWaiting = false;
                    this.getCodeBtnColor = "#20613D";
                }
                // setTimeout(() => {
                //     //弹出提示框
                //     //示例默认1234,生产中请删除这一句。
                //     // this.code = '1234'; //发送验证码,进行填入
                // }, 1000)
            },
            //setTimer: 需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数
            setTimer() {
                let holdTime = 60; //定义变量并赋值
                this.getCodeText = "重新获取(60)"
                //setInterval()是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。
                //setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。
                this.Timer = setInterval(() => {
                    if (holdTime <= 0) {
                        this.getCodeisWaiting = false;
                        this.getCodeBtnColor = "#20613D";
                        this.getCodeText = "获取验证码"
                        clearInterval(this.Timer); //清除该函数
                        return; //返回前面
                    }
                    this.getCodeText = "重新获取(" + holdTime + ")"
                    holdTime--;
                }, 1000)
            },
            toLogin() {
                uni.redirectTo({
                    url: '/pages/login/supplier-login'
                })
            },
            changeAll(e) {
                this.pcfvalue = e.detail.value[0]
            },
            async login() {
                uni.showLoading({
                    title: '登陆中'
                });
                var that = this;
                if (!that.phoneNumber) {
                    uni.showToast({
                        title: '请输入手机号',
                        icon: 'none'
                    });
                    return;
                }
                if (!that.smsCode) {
                    uni.showToast({
                        title: '请输入手机验证码',
                        icon: 'none'
                    });
                    return;
                }
                if (!that.password) {
                    uni.showToast({
                        title: '请输入密码',
                        icon: 'none'
                    });
                    return;
                }
                // if (this.pcfvalue == undefined) {
                //     util.showMyToast('必须勾选《用户服务协议》及《隐私政策》');
                //     return;
                // }
                let post = {
                    tel: this.phoneNumber,
                    smsCode: this.smsCode,
                    password: this.password,
                    type: this.apitype
                    // openId: '123456789'
                }
                // const {
                // code
                // } = await this.$http.request('get', '/api/login/admin')
                const resp = await this.$store.dispatch('regUser', post);
                // uni.hideLoading()
                if (resp.code == 0) {
                    // myCache.cache("userToken", res.data.accessToken)
                    // let userRes = await gzmzApi.getMemberInfo();
                    // if (userRes.status) {
                    //     myCache.cache("userInfo", JSON.stringify(userRes.data))
                    // }
                    uni.showToast({
                        title: '注册成功!',
                        icon: 'none'
                    });
                    setTimeout(() => {
                        this.toLogin()
                    }, 1000);
                } else {
                    // uni.showToast({
                    //     title: '登录失败!',
                    //     icon: 'none'
                    // });
                    return;
                }
            },
            tc1(id) {
                uni.navigateTo({
                    url: '/pages/users/xieyi?id=' + id,
                });
            }
        }
    };
</script>
<style lang="scss" scoped>
    .form-input {
        background-color: #f8f7fc;
        border-radius: 50rpx;
        margin-bottom: 50rpx;
        border: 1px solid #e9e9e9;
        /deep/ .u-input{
        border: 1px solid #e9e9e9;
        /deep/ .u-input {
            padding-left: 60rpx !important;
            padding-right: 40rpx !important;
        }
        /deep/ input {
            height: 70rpx;
            line-height: 70rpx;
        }
    }
</style>
<style lang="scss" scoped>
    @import '@/pages/login/login.scss';
    .main-container {
        margin: 20px 0;
    }
    .img-a {
        position: absolute;
        width: 100%;
        top: -150rpx;
        right: 0;
    }
    .img-b {
        position: absolute;
        width: 50%;
        bottom: 0;
        left: -120rpx;
    }
    .to-home {
        margin-top: 30rpx;
        font-size: 30rpx;
        color: #5af;
        display: flex;
        flex-direction: row-reverse;
    }
    .t-login {
        width: 100%;
        margin: 0 auto;
        font-size: 28rpx;
        color: #000;
    }
    .t-login .bg {
        width: 100%;
        position: relative;
    }
    .t-login .login {
        width: 650rpx;
        margin: 60rpx auto;
        margin-top: 0rpx;
        font-size: 28rpx;
        color: #000;
    }
    .t-login button {
        font-size: 28rpx;
        background: #5677fc;
        color: #fff;
        height: 90rpx;
        line-height: 90rpx;
        border-radius: 50rpx;
        box-shadow: 0 5px 7px 0 rgba(86, 119, 252, 0.2);
    }
    .t-login input {
        padding: 0 20rpx 0 60rpx;
        height: 90rpx;
        line-height: 90rpx;
        margin-bottom: 50rpx;
        background: #f8f7fc;
        border: 1px solid #e9e9e9;
        font-size: 28rpx;
        border-radius: 50rpx;
    }
    .t-login .t-a {
        position: relative;
        .get-code {
            // position: absolute;
            // right: 0rpx;
            // top: 0rpx;
            // z-index: 99;
            // padding-top: 25rpx;
            // bottom: 0;
            // padding-right: 40rpx;
            // padding-left: 20rpx;
        }
    }
    .t-login .t-a .icon {
        width: 40rpx;
        height: 40rpx;
        position: absolute;
        left: 24rpx;
        top: 14rpx;
        margin-right: 20rpx;
    }
    .t-login .t-a .line {
        width: 2rpx;
        height: 40rpx;
        background-color: #dedede;
        position: absolute;
        top: 28rpx;
        left: 98rpx;
    }
    .t-login .t-b {
        text-align: left;
        font-size: 46rpx;
        color: #000;
        padding: 300rpx 0 30rpx 0;
        font-weight: bold;
    }
    .t-login .t-b2 {
        text-align: left;
        font-size: 32rpx;
        color: #aaaaaa;
        padding: 0rpx 0 120rpx 0;
    }
    .t-login .t-c {
        position: absolute;
        right: 22rpx;
        top: 22rpx;
        background: #5677fc;
        color: #fff;
        font-size: 24rpx;
        border-radius: 50rpx;
        height: 50rpx;
        line-height: 50rpx;
        padding: 0 25rpx;
        z-index: 999;
    }
    .t-login .t-d {
        text-align: center;
        color: #999;
        margin: 80rpx 0;
    }
    .t-login .t-e {
        text-align: center;
        width: 250rpx;
        margin: 80rpx auto 0;
    }
    .t-login .t-g {
        float: left;
        width: 50%;
    }
    .t-login .t-e image {
        width: 50rpx;
        height: 50rpx;
    }
    .t-login .t-f {
        text-align: center;
        margin: 200rpx 0 0 0;
        color: #666;
    }
    .t-login .t-f text {
        margin-left: 20rpx;
        color: #aaaaaa;
        font-size: 27rpx;
    }
    .t-login .uni-input-placeholder {
        color: #000;
    }
    .cl {
        zoom: 1;
    }
    .cl:after {
        clear: both;
        display: block;
        visibility: hidden;
        height: 0;
        content: '\20';
    }
        /deep/ input {
            height: 70rpx;
            line-height: 70rpx;
        }
    }
</style>
<style lang="scss" scoped>
    @import '@/pages/login/login.scss';
    .main-container {
        margin: 20px 0;
    }
    .img-a {
        position: absolute;
        width: 100%;
        top: -150rpx;
        right: 0;
    }
    .img-b {
        position: absolute;
        width: 50%;
        bottom: 0;
        left: -120rpx;
    }
    .to-home {
        margin-top: 30rpx;
        font-size: 30rpx;
        color: #5af;
        display: flex;
        flex-direction: row-reverse;
    }
    .t-login {
        width: 100%;
        margin: 0 auto;
        font-size: 28rpx;
        color: #000;
    }
    .t-login .bg {
        width: 100%;
        position: relative;
    }
    .t-login .login {
        width: 650rpx;
        margin: 60rpx auto;
        margin-top: 0rpx;
        font-size: 28rpx;
        color: #000;
    }
    .t-login button {
        font-size: 28rpx;
        background: #5677fc;
        color: #fff;
        height: 90rpx;
        line-height: 90rpx;
        border-radius: 50rpx;
        box-shadow: 0 5px 7px 0 rgba(86, 119, 252, 0.2);
    }
    .t-login input {
        padding: 0 20rpx 0 60rpx;
        height: 90rpx;
        line-height: 90rpx;
        margin-bottom: 50rpx;
        background: #f8f7fc;
        border: 1px solid #e9e9e9;
        font-size: 28rpx;
        border-radius: 50rpx;
    }
    .t-login .t-a {
        position: relative;
        .get-code {
            // position: absolute;
            // right: 0rpx;
            // top: 0rpx;
            // z-index: 99;
            // padding-top: 25rpx;
            // bottom: 0;
            // padding-right: 40rpx;
            // padding-left: 20rpx;
        }
    }
    .t-login .t-a .icon {
        width: 40rpx;
        height: 40rpx;
        position: absolute;
        left: 24rpx;
        top: 14rpx;
        margin-right: 20rpx;
    }
    .t-login .t-a .line {
        width: 2rpx;
        height: 40rpx;
        background-color: #dedede;
        position: absolute;
        top: 28rpx;
        left: 98rpx;
    }
    .t-login .t-b {
        text-align: left;
        font-size: 46rpx;
        color: #000;
        padding: 300rpx 0 30rpx 0;
        font-weight: bold;
    }
    .t-login .t-b2 {
        text-align: left;
        font-size: 32rpx;
        color: #aaaaaa;
        padding: 0rpx 0 120rpx 0;
    }
    .t-login .t-c {
        position: absolute;
        right: 22rpx;
        top: 22rpx;
        background: #5677fc;
        color: #fff;
        font-size: 24rpx;
        border-radius: 50rpx;
        height: 50rpx;
        line-height: 50rpx;
        padding: 0 25rpx;
        z-index: 999;
    }
    .t-login .t-d {
        text-align: center;
        color: #999;
        margin: 80rpx 0;
    }
    .t-login .t-e {
        text-align: center;
        width: 250rpx;
        margin: 80rpx auto 0;
    }
    .t-login .t-g {
        float: left;
        width: 50%;
    }
    .t-login .t-e image {
        width: 50rpx;
        height: 50rpx;
    }
    .t-login .t-f {
        text-align: center;
        margin: 200rpx 0 0 0;
        color: #666;
    }
    .t-login .t-f text {
        margin-left: 20rpx;
        color: #aaaaaa;
        font-size: 27rpx;
    }
    .t-login .uni-input-placeholder {
        color: #000;
    }
    .cl {
        zoom: 1;
    }
    .cl:after {
        clear: both;
        display: block;
        visibility: hidden;
        height: 0;
        content: '\20';
    }
</style>
pages/user/supplier-user.vue
@@ -133,11 +133,18 @@
        </view>
        <!-- #endif -->
        <view class="user-utils m-20">
            <view class="user-util m-t-12 flex" @click="goto('/pages/user/user-info/user-info',true)">
            <view class="user-util m-t-12 flex"  @click="goto('/pages/user/user-info/user-info',true)">
                <view class="title">个人信息</view>
                <view class="right-icon">
                    <uni-icons type="right"></uni-icons>
                <view class="right-icon">
                    <uni-icons type="right"></uni-icons>
                </view>
            </view>
            <view class="user-util m-t-12 flex" v-if="selftype==='partner'"
                @click="goto('/sub_pages/partner/partner-info/partner-info',true)">
                <view class="title">合伙人信息</view>
                <view class="right-icon">
                    <uni-icons type="right"></uni-icons>
                </view>
            </view>
            <view class="user-util m-t-12 flex" v-if="selftype==='supplier'"
                @click="goto('/sub_pages/supplier/supplier-info/supplier-info',true)">
store/index.js
@@ -35,8 +35,8 @@
                    // remoteip:'',//服务器ip
                    sign: {
                        'enterprise': 0,
                        'info':0,
                        'flower':0,
                        'info': 0,
                        'flower': 0,
                    },
                    defaultaddress: {}
                },
@@ -247,13 +247,13 @@
                        }
                        return resp
                    },
                    regSupplier: async function({
                    regUser: async function({
                        commit,
                        dispatch,
                        state
                    }, data) {
                        {
                            const resp = await http.request('post', '/api/register/supplier', {
                            const resp = await http.request('post', '/api/register/' + data.type, {
                                data: {
                                    username: data.username,
                                    password: data.password,
@@ -282,9 +282,10 @@
                    }, data) {
                        {
                            const resp = await http.request('post', '/api/login/partner' + ((data
                                .phoneNumber||data.tel) ? '/phone' : ''), {
                                .phoneNumber || data.tel) ? '/phone' : ''), {
                                data: {
                                    username: (data.phoneNumber ||data.tel)?(data.phoneNumber || data.tel): data.username,
                                    username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                                        data.tel) : data.username,
                                    password: data.password,
                                    tel: data.phoneNumber || data.tel,
                                    smsCode: data.smsCode || ''
@@ -342,9 +343,10 @@
                    }, data) {
                        {
                            const resp = await http.request('post', '/api/login/supplier' + ((data
                                .phoneNumber ||data.tel) ? '/phone' : ''), {
                                .phoneNumber || data.tel) ? '/phone' : ''), {
                                data: {
                                    username: (data.phoneNumber ||data.tel)?(data.phoneNumber || data.tel): data.username,
                                    username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                                        data.tel) : data.username,
                                    password: data.password,
                                    tel: data.phoneNumber || data.tel,
                                    smsCode: data.smsCode || ''
@@ -395,8 +397,8 @@
                        }
                    },
                    loginCustomer:async function({
                    loginCustomer: async function({
                        commit,
                        dispatch,
                        state
@@ -405,7 +407,8 @@
                            const resp = await http.request('post', '/api/login/customer' + (data
                                .phoneNumber ? '/phone' : ''), {
                                data: {
                                    username: (data.phoneNumber ||data.tel)?(data.phoneNumber || data.tel): data.username,
                                    username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                                        data.tel) : data.username,
                                    password: data.password,
                                    tel: data.phoneNumber || data.tel,
                                    smsCode: data.smsCode || ''
@@ -430,7 +433,7 @@
                        }
                    },
                }
            })
sub_pages/partner/partner-info/partner-info.vue
对比新文件
@@ -0,0 +1,416 @@
<template>
    <view class="container-page">
        <view>
            <view class="form-item before-line">
                <view class="label required">联系人姓名</view>
                <view class="m-l-a m-r-0 flex">
                    <input v-model="dto.name" placeholder="请输入联系人姓名"
                        style="margin-top: 16px;text-align: right;"></input>
                </view>
            </view>
            <view class="form-item before-line">
                <view class="label required">联系方式</view>
                <view class="m-l-a m-r-0 flex">
                    <input v-model="dto.contactTel" placeholder="请输入联系方式"
                        style="margin-top: 16px;text-align: right;"></input>
                </view>
            </view>
            <view class="form-item before-line">
                <view class="label required">地区</view>
                <view class="m-l-a m-r-0 flex " :class="[!dto['province']?'desc-gray':'']">
                    <uni-data-picker :area="true" @change="(e)=>{PickArea(dto,e)}" placeholder=""
                        :localdata="regionDataPlus">
                        {{ dto['province'] || '请选择' }}{{ dto['city'] && ('/' + dto['city']) || '' }}{{
                                                  dto['region'] && ('/' + dto['region']) || ''
                                                }}
                    </uni-data-picker>
                    <u-icon class="m-l-a" name="arrow-right"></u-icon>
                </view>
            </view>
            <view class="form-item before-line">
                <view class="label required">地址</view>
                <view class="m-l-a m-r-0 flex">
                    <input v-model="dto.address" placeholder="请输入地址"
                        style="margin-top: 16px;text-align: right;"></input>
                </view>
            </view>
            <view class="form-item before-line m-t-20" @click="uploadIcon('idCards')">
                <view class="label required">上传身份证正反面</view>
                <view class="m-l-a m-r-0 flex">
                    <view class="component-button-upload" @click="uploadIcon('idCards')">
                    </view>
                </view>
            </view>
            <view class="flex p20" style="padding-top: 0rpx;padding-bottom: 10rpx"
                v-if="dto.idCards&&dto.idCards.length>0">
                <view class="m-t-12 m-r-10 " v-for="(tBanner,index) of dto.idCards" :key="index">
                    <image class="banner-img" :src="tBanner.url" @click.stop="previewImg(tBanner.url)">
                    </image>
                    <view class="t-red text-center" @click.stop="deleteImg('idCards',index)">删除</view>
                </view>
            </view>
            <view class="button-green-1 m-t-20 button-fixed-bottom before-line " @click="submit">
                提交审核
            </view>
        </view>
        <view style="min-height: 200rpx;">
            &nbsp;
        </view>
    </view>
</template>
<script>
    import environments from '@/environments'
    import {
        mapState
    } from 'vuex'
    export default {
        data() {
            return {
                id: '',
                refresh: false,
                api: '',
                dto: {
                    idCards: [],
                    address: '',
                    id: '',
                    userId: '',
                    name: '',
                    contactTel: '',
                    province: '',
                    city: '',
                    region: '',
                },
                requireFields: [
                    {
                        name: '联系人姓名',
                        key: 'name'
                    },
                    {
                        name: '联系方式',
                        key: 'contactTel'
                    },
                    {
                        name: '地区',
                        key: 'province'
                    },
                    {
                        name: '地址',
                        key: 'address'
                    },
                ],
                regionDataPlus: [],
            }
        },
        onLoad(options) {
            if (options.id) {
                this.id = options.id
                this.getDetail()
            } else {
                this.getCurrentInfo()
                this.init_area()
            }
        },
        methods: {
            PickArea(item, e) {
                console.log('PickArea', item, e)
                if (e.detail.value) {
                    this.dto.province = ''
                    this.dto.city = ''
                    this.dto.region = ''
                    if (e.detail.value.length <= 3) {
                        if (!!e.detail.value[0])
                            this.dto.province = e.detail.value[0].value
                        if (!!e.detail.value[1])
                            this.dto.city = e.detail.value[1].value
                        if (!!e.detail.value[2])
                            this.dto.region = e.detail.value[2].value
                    } else {
                        //说明有重复的
                        var plusnum = e.detail.value.length - 3
                        if (!!e.detail.value[plusnum + 0])
                            this.dto.province = e.detail.value[plusnum + 0].value
                        if (!!e.detail.value[plusnum + 1])
                            this.dto.city = e.detail.value[plusnum + 1].value
                        if (!!e.detail.value[plusnum + 2])
                            this.dto.region = e.detail.value[plusnum + 2].value
                    }
                    this.$forceUpdate()
                }
            },
            PickData(valueKey, nameKey, e) {
                // console.log('PickArea', item, e)
                if (e.detail.value) {
                    if (!!e.detail.value[0])
                        this.dto[valueKey] = e.detail.value[0].value || e.detail.value[0].id
                    if (nameKey) {
                        this.dto[nameKey] = e.detail.value[0].label || e.detail.value[0].name || e.detail.value[0].value
                    }
                    this.$forceUpdate()
                }
            },
            async init_area() {
                const res = await this.$http.request('get', '/api/pub/china/area/json')
                // console.log('area', JSON.parse(res.data))
                this.regionDataPlus = res.data && JSON.parse(res.data.replaceAll('code', 'value').replaceAll('name',
                    'text')) || []
            },
            async getCurrentInfo() {
                this.$message.showLoading()
                const {
                    code,
                    data
                } = await this.$http.request('get', "/api/current/partner", {})
                if (code == 0) {
                    this.dto = {
                        ...data,
                    }
                    if (!this.dto.idCards) {
                        this.dto.idCards = []
                    } else if (typeof this.dto.idCards == 'string') {
                        this.dto.idCards = JSON.parse(this.dto.idCards)
                    }
                    this.dto.userId = this.currentInfo.id
                }
                this.$message.hideLoading()
            },
            async getDetail() {
                this.$message.showLoading()
                const {
                    code,
                    data
                } = await this.$http.request('get', "/api/partner/detail/" + this.id, {})
                if (code == 0) {
                    this.dto = {
                        ...data,
                    }
                    if (!this.dto.idCards) {
                        this.dto.idCards = []
                    } else if (typeof this.dto.idCards == 'string') {
                        this.dto.idCards = JSON.parse(this.dto.idCards)
                    }
                }
                this.$message.hideLoading()
            },
            async submit() {
                for (var field of this.requireFields) {
                    if (!this.dto[field.key]) {
                        this.$message.showToast(`${field.name}信息未填写`)
                        return
                    }
                }
                if (this.dto.idCards.length == 0) {
                    this.$message.showToast(`身份证信息未填写`)
                    return
                }
                await this.$message.confirm(`是否确定提交/修改信息`)
                var dto = {
                    ...this.dto,
                }
                this.$message.showLoading()
                const re = await this.$http.request('post', '/api/partner/addOrUpdate', {
                    data: dto
                })
                this.$message.hideLoading()
                if (re.code == 2000 || re.code == 0) {
                    this.$message.showToast('操作成功')
                    //需要标记加一下
                    this.$store.dispatch('sign_add', 'info');
                    this.$store.dispatch('getCurrentInfo')
                    this.backpage()
                } else {
                    console.log('error re', re)
                    if (re.code === 30000 && Array.isArray(re.msg)) {
                        this.$message.showToast('字段未填写完整')
                    }
                }
            },
            async deleteImg(key, index) {
                await this.$message.confirm('是否确认删除此图片')
                if (Array.isArray(this.dto[key])) {
                    this.dto[key].splice(index, 1)
                } else {
                    this.dto[key] = ''
                }
                this.$forceUpdate()
            },
            uploadIcon(key) {
                const that = this
                uni.chooseImage({
                    count: 1, // 最多可以选择的图片张数,默认9
                    sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
                    sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
                    success: function({
                        errMsg,
                        tempFiles
                    }) {
                        if (errMsg === 'chooseImage:ok') {
                            // console.log(tempFiles[0])
                            if (tempFiles[0].size > 1024 * 1024 * 5) {
                                that.$message.confirm('图片最多支持5M大小,超出大小限制')
                                return
                            }
                            that.$message.showLoading()
                            that.$http.upload(tempFiles[0].path).then(async res => {
                                var pic = res.data && res.data.length > 0 && res.data[
                                    0] || {}
                                that.$message.hideLoading()
                                if (Array.isArray(that.dto[key])) {
                                    that.dto[key].push(pic || '')
                                } else {
                                    that.dto[key] = (pic || {}).url || ''
                                }
                                that.$forceUpdate()
                            }).catch(res => {
                                that.$message.hideLoading()
                            })
                        }
                    }
                })
            },
        },
        computed: {
            ...mapState(['currentInfo'])
        },
        components: {}
    }
</script>
<style lang="scss" scoped>
    .banner-img {
        width: 96rpx;
        height: 96rpx;
        border-radius: 4rpx;
        border: 2rpx dashed #CECECE;
    }
    .form-item {
        // padding: 40rpx;
        border-bottom: 2rpx solid #F3F3F3;
        display: flex;
        // height: 100px;
        .label {
            width: 300rpx;
            line-height: 60px;
        }
        .flex {
            line-height: 60px;
            .flex1 {
                flex: 1;
                text-align: center;
                color: var(--selfblue)
            }
        }
    }
    .form-item.bottom-border-no {
        border-bottom: none;
    }
    .container-page {
        padding: 40rpx;
        background-color: #FFFFFF;
        // min-height: calc(100vh - 80rpx);
        min-height: 100vh;
    }
    .style {
        width: fit-content;
        margin: 0 auto;
        line-height: 64rpx;
        border-radius: 8rpx;
        padding-left: 20rpx;
        padding-right: 20rpx;
        // padding-top: 5rpx;
        // padding-bottom: 5rpx;
        border: 2rpx solid var(--selfblue);
        background-color: var(--selfbluebg);
        min-width: 100rpx;
    }
    .style-1 {
        border: 1px solid rgb(122, 187, 255);
        border: 1px solid #409EFF;
        color: #409EFF;
        background-color: rgb(240, 247, 255);
    }
    .style-2 {
        border: 1px solid rgb(255, 184, 78);
        border: 1px solid #FE9044;
        color: #FE9044;
        background-color: rgb(255, 247, 235);
    }
    .style-3 {
        border: 1px solid #19be6b;
        color: #19be6b;
        background-color: rgb(231, 244, 238);
    }
    .style-4 {
        border: 1px solid #F56c6c;
        color: #F56c6c;
        background-color: rgb(254, 243, 243);
    }
</style>