1、补充我的-服务订单数量角标 2、增加项目加盟和社区代理

This commit is contained in:
donqi 2023-01-07 23:00:41 +08:00
parent b830e060eb
commit 32fc8efe59
8 changed files with 817 additions and 21 deletions

View File

@ -488,6 +488,14 @@ export default {
}) })
return res[1].data; return res[1].data;
}, },
async countOrderList(params = {}) {
let res = await uni.request({
url: '/order/master/app/count',
method: 'POST',
data: params
})
return res[1].data;
},
async updateOrder(params = {}) { async updateOrder(params = {}) {
let res = await uni.request({ let res = await uni.request({
url: '/order/master/editOrderMaster', url: '/order/master/editOrderMaster',
@ -577,6 +585,14 @@ export default {
}) })
return res[1].data; return res[1].data;
}, },
async getCustomerPlaceList(params = {}) {
let res = await uni.request({
url: '/customer/place/app/list',
method: 'POST',
data: params
})
return res[1].data;
},
async qryCustomerList(params = {}) { async qryCustomerList(params = {}) {
let res = await uni.request({ let res = await uni.request({
url: '/customer/app/list', url: '/customer/app/list',
@ -605,6 +621,14 @@ export default {
}) })
return res[1].data; return res[1].data;
}, },
async countAfterList(params = {}) {
let res = await uni.request({
url: '/order/master/after/count',
method: 'POST',
data: params
})
return res[1].data;
},
async addAfterServiceRecord(params = {}) { async addAfterServiceRecord(params = {}) {
let res = await uni.request({ let res = await uni.request({
url: '/worker/record/add', url: '/worker/record/add',
@ -657,5 +681,5 @@ export default {
data: params data: params
}) })
return res[1].data; return res[1].data;
}, }
} }

View File

@ -31,12 +31,15 @@
<view class="padding-top padding-lr" v-for="(type, index1) in list[tabCur].child" :key="index1" <view class="padding-top padding-lr" v-for="(type, index1) in list[tabCur].child" :key="index1"
:id="'main-'+type.goodsCategoryId"> :id="'main-'+type.goodsCategoryId">
<view class="cu-bar bg-white bottom-border" @click="chooseNavItem(type)"> <view class="cu-bar bg-white bottom-border">
<view class="action"> <view class="action" @click="chooseNavItem(type)">
<text class="cuIcon-title text-main-color"></text>{{type.goodsCategoryName}} <text class="cuIcon-title text-main-color"></text>{{type.goodsCategoryName}}
</view> </view>
<view class="text-main-color text-xl padding-sm text-bold" @click="triggerTypeCollapse(tabCur, index1)">
<text :class="isShowParentNode[tabCur][index1] == true ? 'cuIcon-fold' : 'cuIcon-unfold'"></text>
</view>
</view> </view>
<view class="cu-list menu"> <view class="cu-list menu" :class="isShowParentNode[tabCur][index1] == true ? 'showlist' : 'hidelist'">
<view class="cu-item" :class="curNavItem.goodsCategoryId === subType.goodsCategoryId ? 'bg-main-color light' : ''" v-for="(subType,index2) in type.child" :key="index2" @click="chooseNavItem(subType)"> <view class="cu-item" :class="curNavItem.goodsCategoryId === subType.goodsCategoryId ? 'bg-main-color light' : ''" v-for="(subType,index2) in type.child" :key="index2" @click="chooseNavItem(subType)">
<view class="content"> <view class="content">
<text>{{subType.goodsCategoryName}}</text> <text>{{subType.goodsCategoryName}}</text>
@ -74,6 +77,7 @@
return { return {
tabCur: 0, tabCur: 0,
navTabCur: 0, navTabCur: 0,
isShowParentNode: [],
// mainCur: 0, // mainCur: 0,
// load: true, // load: true,
// verticalNavTop: 0, // verticalNavTop: 0,
@ -105,6 +109,17 @@
}, },
searchGoods(e) { searchGoods(e) {
uni.$emit(this.$globalFun.VERTICAL_NAV_SEARCH, e.detail.value); uni.$emit(this.$globalFun.VERTICAL_NAV_SEARCH, e.detail.value);
},
triggerTypeCollapse(index1, index2) {
if (this.isShowParentNode[index1] == null || this.isShowParentNode[index1] == undefined) {
this.isShowParentNode[index1] = [];
this.isShowParentNode[index1][index2] = true;
} else if (!this.isShowParentNode[index1][index2]) {
this.isShowParentNode[index1][index2] = true;
} else {
this.isShowParentNode[index1][index2] = false;
}
this.isShowParentNode = [].concat(this.isShowParentNode);
} }
} }
} }
@ -174,4 +189,12 @@
.bottom-border { .bottom-border {
border-bottom: 1rpx solid rgba(0, 0, 0, 0.1); border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
} }
.hidelist {
display: none;
}
.showlist {
display: block;
}
</style> </style>

View File

@ -36,6 +36,10 @@
"path": "edit-address" "path": "edit-address"
}, { }, {
"path": "apply-operator" "path": "apply-operator"
}, {
"path": "apply-joining-project"
}, {
"path": "apply-community-operator"
}, { }, {
"path": "my-operator" "path": "my-operator"
}, { }, {

View File

@ -78,8 +78,8 @@
<view class="cu-list grid no-border col-5"> <view class="cu-list grid no-border col-5">
<view class="cu-item" @click="showMyOrders(servOrderTabList, 0, servOrderType)"> <view class="cu-item" @click="showMyOrders(servOrderTabList, 0, servOrderType)">
<view class="cuIcon-news"> <view class="cuIcon-news">
<view class="cu-tag badge" v-if="myInfo.serOrderNum.wait2Pay > 0"> <view class="cu-tag badge" v-if="waitForPayOrderCount > 0">
<block>{{myInfo.serOrderNum.wait2Pay}}</block> <block>{{waitForPayOrderCount}}</block>
</view> </view>
</view> </view>
<text>待付款</text> <text>待付款</text>
@ -110,16 +110,16 @@
</view> --> </view> -->
<view class="cu-item" @click="showMyOrders(servOrderTabList, 1, servOrderType)"> <view class="cu-item" @click="showMyOrders(servOrderTabList, 1, servOrderType)">
<view class="cuIcon-repair"> <view class="cuIcon-repair">
<view class="cu-tag badge" v-if="myInfo.serOrderNum.processing > 0"> <view class="cu-tag badge" v-if="waitForServOrderCount > 0">
<block>{{myInfo.serOrderNum.processing}}</block> <block>{{waitForServOrderCount}}</block>
</view> </view>
</view> </view>
<text>待服务</text> <text>待服务</text>
</view> </view>
<view class="cu-item" @click="showMyOrders(servOrderTabList, 2, servOrderType)"> <view class="cu-item" @click="showMyOrders(servOrderTabList, 2, servOrderType)">
<view class="cuIcon-comment"> <view class="cuIcon-comment">
<view class="cu-tag badge" v-if="myInfo.serOrderNum.afterServ > 0"> <view class="cu-tag badge" v-if="servingOrderCount > 0">
<block>{{myInfo.serOrderNum.afterServ}}</block> <block>{{servingOrderCount}}</block>
</view> </view>
</view> </view>
<text>进行中</text> <text>进行中</text>
@ -134,16 +134,16 @@
</view> --> </view> -->
<view class="cu-item" @click="showMyOrders(servOrderTabList, 3, servOrderType)"> <view class="cu-item" @click="showMyOrders(servOrderTabList, 3, servOrderType)">
<view class="cuIcon-service"> <view class="cuIcon-service">
<view class="cu-tag badge" v-if="myInfo.serOrderNum.afterServ > 0"> <view class="cu-tag badge" v-if="afterOrderCount > 0">
<block>{{myInfo.serOrderNum.afterServ}}</block> <block>{{afterOrderCount}}</block>
</view> </view>
</view> </view>
<text>售后中</text> <text>售后中</text>
</view> </view>
<view class="cu-item" @click="showMyOrders(servOrderTabList, 4, servOrderType)"> <view class="cu-item" @click="showMyOrders(servOrderTabList, 4, servOrderType)">
<view class="cuIcon-forward"> <view class="cuIcon-forward">
<view class="cu-tag badge" v-if="myInfo.serOrderNum.wait2Forward > 0"> <view class="cu-tag badge" v-if="finishedOrderCount > 0">
<block>{{myInfo.serOrderNum.wait2Forward}}</block> <block>{{finishedOrderCount}}</block>
</view> </view>
</view> </view>
<text>已完成</text> <text>已完成</text>
@ -262,6 +262,14 @@
<view class="cuIcon-wenzi text-pink"></view> <view class="cuIcon-wenzi text-pink"></view>
<text>{{curUserInfo.placeStatus == 0 ? '运营商申请' : '运营商登录'}}</text> <text>{{curUserInfo.placeStatus == 0 ? '运营商申请' : '运营商登录'}}</text>
</view> </view>
<view class="cu-item" @click="showApplyOtherCooperate('joiningProject', '/pages/my/apply-joining-project')">
<view class="cuIcon-group text-brown"></view>
<text>项目加盟</text>
</view>
<view class="cu-item" @click="showApplyOtherCooperate('communityAgents', '/pages/my/apply-community-operator')">
<view class="cuIcon-profile text-purple"></view>
<text>社区代理</text>
</view>
<!-- <view class="cu-item"> <!-- <view class="cu-item">
<view class="cuIcon-searchlist text-brown"></view> <view class="cuIcon-searchlist text-brown"></view>
<text>后台数据</text> <text>后台数据</text>
@ -361,6 +369,12 @@
}], }],
productOrderType: 1, productOrderType: 1,
waitForPayOrderCount: 0,
waitForServOrderCount: 0,
servingOrderCount: 0,
afterOrderCount: 0,
finishedOrderCount: 0,
appQrcode: '', appQrcode: '',
appShareQrcodeModal: false appShareQrcodeModal: false
} }
@ -376,6 +390,48 @@
await this.$request.refreshCurUserCache(); await this.$request.refreshCurUserCache();
this.curUserInfo = this.$request.getCurUserInfo(); this.curUserInfo = this.$request.getCurUserInfo();
this.myInfo = await this.$api.data('myInfo'); this.myInfo = await this.$api.data('myInfo');
this.myOrderCount();
},
async myOrderCount() {
let params = {
customerId: this.curUserInfo.customerId,
orderType: 0
}
//
let waitForPayOrderCountRes = await this.$request.countOrderList({
...params,
payStatusList: '0,4',
exceptOrderStatus: 6
});
this.waitForPayOrderCount = waitForPayOrderCountRes.data;
//
let waitForServOrderCountRes = await this.$request.countOrderList({
...params,
orderStatuses: '0,1,2'
});
this.waitForServOrderCount = waitForServOrderCountRes.data;
//
let servingOrderCountRes = await this.$request.countOrderList({
...params,
orderStatuses: '3,4'
});
this.servingOrderCount = servingOrderCountRes.data;
//
let afterOrderCountRes = await this.$request.countAfterList({
customerId: params.customerId
});
this.afterOrderCount = afterOrderCountRes.data;
//
let finishedOrderCountRes = await this.$request.countOrderList({
...params,
orderStatus: 5
});
this.finishedOrderCount = finishedOrderCountRes.data;
}, },
getWxUserBasicInfo() { getWxUserBasicInfo() {
uni.navigateTo({ uni.navigateTo({
@ -443,6 +499,32 @@
} }
} }
}, },
async showApplyOtherCooperate(type, pageUrl) {
let res = await this.$request.getCustomerPlaceList({
customerId: this.curUserInfo.customerId,
type: type
});
if (res && res.rows && res.rows.length) {
let applyRecord = res.rows[0];
if (applyRecord.status === 1) {
uni.showToast({
icon: 'none',
title: '申请成功'
})
return;
} else if (applyRecord.status === 0) {
uni.showToast({
icon: 'none',
title: '申请中,请等待工作人员联系',
duration: 2500
})
return;
}
}
uni.navigateTo({
url: pageUrl
})
},
async showAppInviteQrcode() { async showAppInviteQrcode() {
this.curUserInfo = this.$request.getCurUserInfo(); this.curUserInfo = this.$request.getCurUserInfo();
let res = await this.$request.getUnlimitedWxacode({ let res = await this.$request.getUnlimitedWxacode({

View File

@ -0,0 +1,330 @@
<template>
<view class="margin-bottom-lg">
<!-- 顶部操作条 -->
<cu-custom :bgColor="'bg-main-color'" :isBack="true">
<block slot="backText">返回</block>
<block slot="content">申请社区代理</block>
</cu-custom>
<view class="padding description">
上门到家服务需求时刻围绕着社区修水龙头保洁电器维修上门住家饭二手空调社区跑腿手机维护等等近千项日常生活中的需求数不胜数应有尽有目前大多数社区服务不够优质资源对接不够多价格不够实惠服务不够保障市场尚大有可为而社区服务的更加齐全更加标准更加丰富需有赖于经营者的细心服务与打造创建平台正开启有志于社区创业运营的人成为社区服务联合经营者共同打造社区服务更多选择更快捷更优质更细致的社区服务体系
</view>
<view class="padding bg-white">
<radio-group @change="changeOperatorType">
<view class="flex justify-between align-center">
<view class="flex justify-start">
<view class="cu-avatar round middle-avatar first-avatar">
<text class="cuIcon-activityfill"></text>
</view>
<view class="margin-left-sm flex-column-around">
<view>我有社区运营经验</view>
<view>申请社区经营者</view>
</view>
</view>
<radio class="main-color" value="communityWithExp" />
</view>
<view class="flex justify-between align-center margin-top-sm">
<view class="flex justify-start">
<view class="cu-avatar round middle-avatar second-avatar">
<text class="cuIcon-activityfill"></text>
</view>
<view class="margin-left-sm flex-column-around">
<view>我无社区经验但有经营意向</view>
<view>申请社区经营者</view>
</view>
</view>
<radio class="main-color" value="communityNoExp" />
</view>
<view class="flex justify-between align-center margin-top-sm">
<view class="flex justify-start">
<view class="cu-avatar round middle-avatar third-avatar">
<text class="cuIcon-activityfill"></text>
</view>
<view class="margin-left-sm flex-column-around">
<view>我有社区开拓经验</view>
<view>申请社区站点开拓经营者</view>
</view>
</view>
<radio class="main-color" value="communityDevelopment" />
</view>
<view class="flex justify-between align-center margin-top-sm">
<view class="flex justify-start">
<view class="cu-avatar round middle-avatar fourth-avatar">
<text class="cuIcon-activityfill"></text>
</view>
<view class="margin-left-sm flex-column-around">
<view>我有经营经验</view>
<view>申请城市经营</view>
</view>
</view>
<radio class="main-color" value="cityDevelopment" />
</view>
</radio-group>
</view>
<view class="padding-sm bg-white">
<view class="solid radius padding-bottom">
<view class="text-xl text-black text-center">
<text class="float-info padding-lr bg-white">申请信息</text>
</view>
<form @submit="submit">
<view class="cu-form-group">
<view class="title">您的姓名<text class="text-red">*</text></view>
<input name="name" placeholder="请输入姓名"></input>
</view>
<view class="cu-form-group">
<view class="title">注册电话<text class="text-red">*</text></view>
<input name="phone" placeholder="请输入手机号" v-model="formData.phone"></input>
</view>
<view class="cu-form-group">
<view class="title">申请城市<text class="text-red">*</text></view>
<picker :mode="'multiSelector'" @change="regionChange" @columnchange="regionColChange" :value="multiIndex" :range-key="'areaName'" :range="areaList">
<view class="picker">
{{formData.area && formData.area.length ? formData.area[0].areaName + '-' + formData.area[1].areaName : '请选择'}}
</view>
</picker>
</view>
<view class="cu-form-group">
<view class="title">验证码<text class="text-red">*</text></view>
<input class="radius-input" type="number" name="code" placeholder="请输入验证码"></input>
<view v-if="countDownNum === 0" class="cu-btn bg-blue round-btn margin-left-xs shadow-blur" @click="sendVertifyCode">发送验证码
</view>
<view v-else class="cu-btn bg-gray round-btn margin-left-sm shadow-blur">已发送({{countDownNum}})
</view>
</view>
<view class="cu-form-group">
<view class="title">关联信息</view>
<input name="remark" placeholder="请输入入驻关联信息备注"></input>
</view>
<view class="cu-form-group">
<view>
<checkbox style="transform:scale(0.7)" class="main-color" :value="formData.agreeContract" :checked="formData.agreeContract"
@click="changeAgreeContract">
</checkbox>
<text class="margin-left-xs" @click="showContract">合同同意书链接</text>
</view>
</view>
<view class="margin-lr-sm">
<button class="bg-main-color long-btn" form-type="submit">提交</button>
</view>
</form>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
curUserInfo: {},
areaList: [],
multiIndex: [0, 0],
countDownNum: 0,
formData: {
subType: '',
agreeContract: false,
area: null
},
}
},
onLoad() {
this.loadData();
},
methods: {
loadData() {
this.curUserInfo = this.$request.getCurUserInfo();
this.loadAreaList();
},
changeOperatorType(e) {
this.formData.subType = e.detail.value;
},
changeAgreeContract() {
this.formData.agreeContract = !this.formData.agreeContract;
},
showContract() {
uni.navigateTo({
url: '/pages/my/contract'
})
},
async loadAreaList() {
let areaList = await this.$request.areaListByStep();
areaList = areaList.data;
let col1Code = areaList[0].areaCode;
let subAreaList = await this.$request.areaListByStep({ parentCode: col1Code });
subAreaList = subAreaList.data;
// let col2Code = subAreaList[0].areaCode;
// let subSubAreaList = await this.$request.areaListByStep({ parentCode: col2Code });
// subSubAreaList = subSubAreaList.data;
this.areaList.push(areaList);
this.areaList.push(subAreaList);
// this.areaList.push(subSubAreaList);
},
regionChange(e) {
this.multiIndex = e.detail.value;
let chosenArea = [];
for(let i = 0; i < this.areaList.length; i++) {
chosenArea.push(this.areaList[i][this.multiIndex[i]]);
}
this.formData.area = chosenArea;
},
async regionColChange(e) {
let colObj = e.detail;
if (colObj.column == 0) {
let subSubAreaList = [];
//
let subAreaList = await this.$request.areaListByStep({parentCode: this.areaList[0][colObj.value].areaCode});
subAreaList = subAreaList.data;
this.areaList.pop();
this.areaList.push(subAreaList);
this.multiIndex = [colObj.value, 0];
}
},
startCountDownNum() {
this.countDownNum = 180;
let t = setInterval(() => {
this.countDownNum -= 1;
if (this.countDownNum === 0) {
clearInterval(t);
}
}, 1000);
},
async sendVertifyCode() {
console.log(this.formData)
if (this.$validate.validContactNum(this.formData.phone)) {
let res = await this.$request.sendVertifyCode({
to: this.formData.phone
});
if (res && res.code === 0) {
uni.showToast({
icon: 'none',
title: '验证码已发送'
})
this.startCountDownNum();
} else if (res && res.msg) {
uni.showToast({
icon: 'none',
title: res.msg
})
} else {
uni.showToast({
icon: 'none',
title: '验证码发送失败'
})
}
} else {
uni.showToast({
icon: 'none',
title: '请正确输入手机号码'
})
}
},
validateForm(confirmFormData) {
let formInfoValid = Boolean(confirmFormData.name) &&
Boolean(confirmFormData.phone) &&
Boolean(confirmFormData.area) &&
Boolean(confirmFormData.code);
if (!formInfoValid) {
uni.showToast({
title: '请填写完整信息',
icon: 'none',
mask: true
})
} else if (!confirmFormData.agreeContract) {
uni.showToast({
title: '请阅读并同意合同书',
icon: 'none',
mask: true
})
formInfoValid = false;
}
return formInfoValid;
},
async submit(e) {
let formData = {
...e.detail.value,
...this.formData,
city: this.formData.area && this.formData.area.length ? this.formData.area[this.formData.area.length - 1].areaId : null,
customerId: this.curUserInfo.customerId,
type: 'communityAgents'
}
let formValid = this.validateForm(formData);
if (formValid) {
let res = await this.$request.addCustomerPlace(formData);
if (res && res.code === 0) {
await this.$request.refreshCurUserCache();
uni.navigateBack({
delta: -1
})
uni.showToast({
title: '提交成功',
icon: 'success',
duration: 2000
})
} else if (res && res.msg) {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
} else {
uni.showToast({
title: '提交失败',
icon: 'error',
duration: 2000
})
}
}
}
}
}
</script>
<style scoped>
.description {
line-height: 200%;
color: #676666;
}
.middle-avatar {
width: 100rpx;
height: 100rpx;
}
.middle-avatar [class*="cuIcon-"] {
font-size: 53rpx !important;
}
radio-group {
display: unset;
}
.first-avatar {
background-image: linear-gradient(45deg, #Ec008c, #6739b6);
color: #ffffff;
}
.second-avatar {
background-image: linear-gradient(45deg, #9000ff, #5e00ff);
color: #ffffff;
}
.third-avatar {
background-image: linear-gradient(45deg, #0081ff, #1cbbb4);
color: #ffffff;
}
.fourth-avatar {
background-image: linear-gradient(45deg, #39b54a, #8dc63f);
color: #ffffff;
}
.float-info {
display: inline-block;
position: relative;
top: -18rpx;
z-index: 1;
}
.radius {
border-radius: 37rpx;
}
</style>

View File

@ -0,0 +1,330 @@
<template>
<view class="margin-bottom-lg">
<!-- 顶部操作条 -->
<cu-custom :bgColor="'bg-main-color'" :isBack="true">
<block slot="backText">返回</block>
<block slot="content">申请项目加盟</block>
</cu-custom>
<view class="padding description">
上门服务市场是一个规模较大的家庭常用的及商家高频使用的订单市场现服务行业内单单家政服务类目据相关行业机构统计为约400项服务类目市场规模超万亿元加上电器家具废旧品等等服务类型服务类目繁多而规模更为庞大呈逐年递增并且市场就在家的范围是一项离家最近的行业之一典型的家门口有红海生意而服务方式又进行得更多元化由以前的单师傅单技能单操作演变到现在系统性及模式化形成了让有能力的与有资源的或有技能的不同群体达成供应链式的无缝合作现平台可以解决有兴趣服务业而又还没有服务技能的人群为其提供加盟合作融入窗口同时提供对各项服务技能学习的窗口加盟与您一起创建更多城市社区类目的供应体系
</view>
<view class="padding bg-white">
<radio-group @change="changeOperatorType">
<view class="flex justify-between align-center">
<view class="flex justify-start">
<view class="cu-avatar round middle-avatar first-avatar">
<text class="cuIcon-activityfill"></text>
</view>
<view class="margin-left-sm flex-column-around">
<view>我无服务技能</view>
<view>申请加入业务拓展</view>
</view>
</view>
<radio class="main-color" value="businessDevelopment" />
</view>
<view class="flex justify-between align-center margin-top-sm">
<view class="flex justify-start">
<view class="cu-avatar round middle-avatar second-avatar">
<text class="cuIcon-activityfill"></text>
</view>
<view class="margin-left-sm flex-column-around">
<view>我无服务技能</view>
<view>申请加入副业发展</view>
</view>
</view>
<radio class="main-color" value="sideline" />
</view>
<view class="flex justify-between align-center margin-top-sm">
<view class="flex justify-start">
<view class="cu-avatar round middle-avatar third-avatar">
<text class="cuIcon-activityfill"></text>
</view>
<view class="margin-left-sm flex-column-around">
<view>我无服务技能</view>
<view>申请加入技能学习并提供技能</view>
</view>
</view>
<radio class="main-color" value="skillLearning" />
</view>
<view class="flex justify-between align-center margin-top-sm">
<view class="flex justify-start">
<view class="cu-avatar round middle-avatar fourth-avatar">
<text class="cuIcon-activityfill"></text>
</view>
<view class="margin-left-sm flex-column-around">
<view>我有社区兴趣</view>
<view>申请共同打造社区类目的供应链</view>
</view>
</view>
<radio class="main-color" value="communitySupplyChain" />
</view>
</radio-group>
</view>
<view class="padding-sm bg-white">
<view class="solid radius padding-bottom">
<view class="text-xl text-black text-center">
<text class="float-info padding-lr bg-white">申请信息</text>
</view>
<form @submit="submit">
<view class="cu-form-group">
<view class="title">您的姓名<text class="text-red">*</text></view>
<input name="name" placeholder="请输入姓名"></input>
</view>
<view class="cu-form-group">
<view class="title">注册电话<text class="text-red">*</text></view>
<input name="phone" placeholder="请输入手机号" v-model="formData.phone"></input>
</view>
<view class="cu-form-group">
<view class="title">申请城市<text class="text-red">*</text></view>
<picker :mode="'multiSelector'" @change="regionChange" @columnchange="regionColChange" :value="multiIndex" :range-key="'areaName'" :range="areaList">
<view class="picker">
{{formData.area && formData.area.length ? formData.area[0].areaName + '-' + formData.area[1].areaName : '请选择'}}
</view>
</picker>
</view>
<view class="cu-form-group">
<view class="title">验证码<text class="text-red">*</text></view>
<input class="radius-input" type="number" name="code" placeholder="请输入验证码"></input>
<view v-if="countDownNum === 0" class="cu-btn bg-blue round-btn margin-left-xs shadow-blur" @click="sendVertifyCode">发送验证码
</view>
<view v-else class="cu-btn bg-gray round-btn margin-left-sm shadow-blur">已发送({{countDownNum}})
</view>
</view>
<view class="cu-form-group">
<view class="title">关联信息</view>
<input name="remark" placeholder="请输入入驻关联信息备注"></input>
</view>
<view class="cu-form-group">
<view>
<checkbox style="transform:scale(0.7)" class="main-color" :value="formData.agreeContract" :checked="formData.agreeContract"
@click="changeAgreeContract">
</checkbox>
<text class="margin-left-xs" @click="showContract">合同同意书链接</text>
</view>
</view>
<view class="margin-lr-sm">
<button class="bg-main-color long-btn" form-type="submit">提交</button>
</view>
</form>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
curUserInfo: {},
areaList: [],
multiIndex: [0, 0],
countDownNum: 0,
formData: {
subType: '',
agreeContract: false,
area: null
},
}
},
onLoad() {
this.loadData();
},
methods: {
loadData() {
this.curUserInfo = this.$request.getCurUserInfo();
this.loadAreaList();
},
changeOperatorType(e) {
this.formData.subType = e.detail.value;
},
changeAgreeContract() {
this.formData.agreeContract = !this.formData.agreeContract;
},
showContract() {
uni.navigateTo({
url: '/pages/my/contract'
})
},
async loadAreaList() {
let areaList = await this.$request.areaListByStep();
areaList = areaList.data;
let col1Code = areaList[0].areaCode;
let subAreaList = await this.$request.areaListByStep({ parentCode: col1Code });
subAreaList = subAreaList.data;
// let col2Code = subAreaList[0].areaCode;
// let subSubAreaList = await this.$request.areaListByStep({ parentCode: col2Code });
// subSubAreaList = subSubAreaList.data;
this.areaList.push(areaList);
this.areaList.push(subAreaList);
// this.areaList.push(subSubAreaList);
},
regionChange(e) {
this.multiIndex = e.detail.value;
let chosenArea = [];
for(let i = 0; i < this.areaList.length; i++) {
chosenArea.push(this.areaList[i][this.multiIndex[i]]);
}
this.formData.area = chosenArea;
},
async regionColChange(e) {
let colObj = e.detail;
if (colObj.column == 0) {
let subSubAreaList = [];
//
let subAreaList = await this.$request.areaListByStep({parentCode: this.areaList[0][colObj.value].areaCode});
subAreaList = subAreaList.data;
this.areaList.pop();
this.areaList.push(subAreaList);
this.multiIndex = [colObj.value, 0];
}
},
startCountDownNum() {
this.countDownNum = 180;
let t = setInterval(() => {
this.countDownNum -= 1;
if (this.countDownNum === 0) {
clearInterval(t);
}
}, 1000);
},
async sendVertifyCode() {
console.log(this.formData)
if (this.$validate.validContactNum(this.formData.phone)) {
let res = await this.$request.sendVertifyCode({
to: this.formData.phone
});
if (res && res.code === 0) {
uni.showToast({
icon: 'none',
title: '验证码已发送'
})
this.startCountDownNum();
} else if (res && res.msg) {
uni.showToast({
icon: 'none',
title: res.msg
})
} else {
uni.showToast({
icon: 'none',
title: '验证码发送失败'
})
}
} else {
uni.showToast({
icon: 'none',
title: '请正确输入手机号码'
})
}
},
validateForm(confirmFormData) {
let formInfoValid = Boolean(confirmFormData.name) &&
Boolean(confirmFormData.phone) &&
Boolean(confirmFormData.area) &&
Boolean(confirmFormData.code);
if (!formInfoValid) {
uni.showToast({
title: '请填写完整信息',
icon: 'none',
mask: true
})
} else if (!confirmFormData.agreeContract) {
uni.showToast({
title: '请阅读并同意合同书',
icon: 'none',
mask: true
})
formInfoValid = false;
}
return formInfoValid;
},
async submit(e) {
let formData = {
...e.detail.value,
...this.formData,
city: this.formData.area && this.formData.area.length ? this.formData.area[this.formData.area.length - 1].areaId : null,
customerId: this.curUserInfo.customerId,
type: 'joiningProject'
}
let formValid = this.validateForm(formData);
if (formValid) {
let res = await this.$request.addCustomerPlace(formData);
if (res && res.code === 0) {
await this.$request.refreshCurUserCache();
uni.navigateBack({
delta: -1
})
uni.showToast({
title: '提交成功',
icon: 'success',
duration: 2000
})
} else if (res && res.msg) {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
} else {
uni.showToast({
title: '提交失败',
icon: 'error',
duration: 2000
})
}
}
}
}
}
</script>
<style scoped>
.description {
line-height: 200%;
color: #676666;
}
.middle-avatar {
width: 100rpx;
height: 100rpx;
}
.middle-avatar [class*="cuIcon-"] {
font-size: 53rpx !important;
}
radio-group {
display: unset;
}
.first-avatar {
background-image: linear-gradient(45deg, #Ec008c, #6739b6);
color: #ffffff;
}
.second-avatar {
background-image: linear-gradient(45deg, #9000ff, #5e00ff);
color: #ffffff;
}
.third-avatar {
background-image: linear-gradient(45deg, #0081ff, #1cbbb4);
color: #ffffff;
}
.fourth-avatar {
background-image: linear-gradient(45deg, #39b54a, #8dc63f);
color: #ffffff;
}
.float-info {
display: inline-block;
position: relative;
top: -18rpx;
z-index: 1;
}
.radius {
border-radius: 37rpx;
}
</style>

View File

@ -108,7 +108,7 @@
multiIndex: [0, 0], multiIndex: [0, 0],
countDownNum: 0, countDownNum: 0,
formData: { formData: {
operatorType: '', subType: '',
agreeContract: false, agreeContract: false,
area: null area: null
}, },
@ -123,7 +123,7 @@
this.loadAreaList(); this.loadAreaList();
}, },
changeOperatorType(e) { changeOperatorType(e) {
this.formData.operatorType = e.detail.value; this.formData.subType = e.detail.value;
}, },
changeAgreeContract() { changeAgreeContract() {
this.formData.agreeContract = !this.formData.agreeContract; this.formData.agreeContract = !this.formData.agreeContract;
@ -231,7 +231,8 @@
...e.detail.value, ...e.detail.value,
...this.formData, ...this.formData,
city: this.formData.area && this.formData.area.length ? this.formData.area[this.formData.area.length - 1].areaId : null, city: this.formData.area && this.formData.area.length ? this.formData.area[this.formData.area.length - 1].areaId : null,
customerId: this.curUserInfo.customerId customerId: this.curUserInfo.customerId,
type: 'distribution'
} }
let formValid = this.validateForm(formData); let formValid = this.validateForm(formData);
if (formValid) { if (formValid) {

View File

@ -138,11 +138,13 @@
}, },
methods: { methods: {
async loadData(params) { async loadData(params) {
let workerAreas = params.workerAreas;
// this.shopInfo = await this.$api.data('shopInfo'); // this.shopInfo = await this.$api.data('shopInfo');
let res = await this.$request.getWorkerAllDetailById({ let res = await this.$request.getWorkerAllDetailById({
workerId: params.workerId workerId: params.workerId
}) })
this.shopInfo = res.data; this.shopInfo = res.data;
this.shopInfo.workerAreas = workerAreas;
this.loadCategoryList(); this.loadCategoryList();
// //
await this.getCurAreaArr(); await this.getCurAreaArr();