xuxueyang
2024-07-17 51edf3ba7b1e5aa58220f90ee895835bbdfd922e
update 合伙人信息维护
已修改6个文件
已重命名1个文件
已添加1个文件
493 ■■■■■ 文件已修改
manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/supplier-home.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/supplier-login.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/supplier-reg.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/user/supplier-user.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
store/index.js 13 ●●●●● 补丁 | 查看 | 原始文档 | 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": "登录",
@@ -29,6 +28,16 @@
                "navigationStyle": "custom"
            }
        
        },
        // #endif
        // #ifndef PUB_CUSTOMER
        {
            "path": "pages/login/supplier-reg",
            "style": {
                "navigationBarTitleText": "申请入驻",
                "navigationStyle": "custom"
            }
        },
        // #endif 
        {
@@ -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": "订单管理",
@@ -189,8 +197,7 @@
            },
            {
                "path" : "shop/shop",
                "style" :
                {
                "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>
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 修改
@@ -84,7 +84,14 @@
                getCodeBtnColor: "#20613D",
                getCodeisWaiting: false,
                Timer: undefined,
                protocal: false
                protocal: false,
                // #ifdef PUB_SUPPLIER
                apitype: 'supplier',
                // #endif
                // #ifdef PUB_PARTNER
                apitype: 'partner',
                // #endif
            };
        },
        methods: {
@@ -121,7 +128,7 @@
                } = await this.$http.request('post', '/api/sms/send/code', {
                    data: {
                        tel: this.phoneNumber,
                        userType: 'supplier'
                        userType: this.apitype
                    }
                })
                if (code == 0) {
@@ -203,12 +210,13 @@
                    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('regSupplier', post);
                const resp = await this.$store.dispatch('regUser', post);
                // uni.hideLoading()
                if (resp.code == 0) {
@@ -249,10 +257,12 @@
        border-radius: 50rpx;
        margin-bottom: 50rpx;
        border: 1px solid #e9e9e9;
        /deep/ .u-input{
            padding-left: 60rpx !important;
            padding-right: 40rpx !important;
        }
        /deep/ input {
            height: 70rpx;
            line-height: 70rpx;
pages/user/supplier-user.vue
@@ -138,6 +138,13 @@
                <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
@@ -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,
@@ -284,7 +284,8 @@
                            const resp = await http.request('post', '/api/login/partner' + ((data
                                .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 || ''
@@ -344,7 +345,8 @@
                            const resp = await http.request('post', '/api/login/supplier' + ((data
                                .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 || ''
@@ -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 || ''
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>