shop-applet/pages/store/settledApply/settledApply.vue

522 lines
15 KiB
Vue
Raw Normal View History

2024-05-14 17:25:13 +08:00
<template>
<view class="settledApply">
<form report-submit='true'>
<view class="settled-wrapper">
<view class="set-item">
<view class="title">商户名称</view>
<input class="input-box" type="text" maxlength="30" placeholder="请输入商户名称" v-model="formData.mer_name"
placeholder-class='placeholder' />
</view>
<view class="set-item">
<view class="title">真实姓名</view>
<input class="input-box" type="text" maxlength="30" placeholder="请输入真实姓名" v-model="formData.name"
placeholder-class='placeholder' />
</view>
<view class="set-item">
<view class="title">联系电话</view>
<input class="input-box" type="text" maxlength="30" placeholder="请输入联系电话" v-model="formData.phone"
placeholder-class='placeholder' />
</view>
<view class="set-item">
<view class="title">验证码</view>
<view class="input-box">
<input type="text" maxlength="30" placeholder="请输入验证码" v-model="formData.code"
placeholder-class='placeholder' />
<button class="code" :disabled="disabled" :class="disabled === true ? 'on' : ''" @click="handleVerify">
{{ text }}
</button>
</view>
</view>
<view class="set-item">
<view class="title">店铺分类</view>
<view class="input-box flex_a_c_j_sb" @click="pickerIsShow('class')">
<input type="text" maxlength="30" placeholder="请选择店铺分类" disabled v-model="mer_classification"
placeholder-class='placeholder' />
<view class="iconfont icon-xialazhankai"></view>
</view>
</view>
<view class="set-item">
<view class="title">店铺类型</view>
<view class="input-box flex_a_c_j_sb" @click="pickerIsShow('type')">
<input type="text" maxlength="30" placeholder="请选择店铺类型" disabled v-model="mer_storeType"
placeholder-class='placeholder' />
<view class="iconfont icon-xialazhankai"></view>
</view>
</view>
<view class="set-item">
<view class="title">店铺所在地</view>
<view class="input-box flex_a_c_j_sb" @click="pickerIsShow('site')">
<input type="text" maxlength="30" placeholder="请选择商圈" disabled v-model="site_name"
placeholder-class='placeholder' />
<view class="iconfont icon-xialazhankai"></view>
</view>
</view>
<view class="set-item">
<view class="title">是否农贸市场</view>
<view class="input-box no-border">
<u-switch v-model="isOpenFair" @change="switchcChange"></u-switch>
</view>
</view>
<view class="set-item">
<text class="item-title">请上传营业执照及行业相关资质证明图片</text>
<text class="item-desc">(图片最多可上传10张,图片格式支持JPGPNGJPEG)</text>
<view class="upload">
<view class='pictrue' v-for="(item,index) in pics" :key="index" :data-index="index"
@click="getPhotoClickIdx">
<image :src='item'></image>
<text class='iconfont icon-guanbi1' @click.stop='DelPic(index)'></text>
</view>
<view class='pictrue acea-row row-center-wrapper row-column' @click='uploadpic' v-if="pics.length < 10">
<text class='iconfont icon-icon25201'></text>
<view>上传图片</view>
</view>
</view>
</view>
<view class="set-item no-border flex">
<checkbox-group @change='ChangeIsAgree'>
<checkbox class="checkbox" :checked="isAgree ? true : false" />已阅读并同意
</checkbox-group>
<button class="settleAgree" @click="getConfig">入驻协议</button>
</view>
<button class='submitBtn on-submit' @click="formSubmit">提交申请</button>
</view>
</form>
<Verify @success="success" :captchaType="'blockPuzzle'" :imgSize="{ width: '330px', height: '155px' }" ref="verify">
</Verify>
<u-picker :defaultIndex="[0,0]" :show="pickerShow" @change="changeHandler" @confirm="confirm" :columns="columns"
:keyName="keyName" ref="uPicker" @cancel="pickerShow = false"></u-picker>
</view>
</template>
<script>
import {
create,
verify,
merClassifly,
getGoodsDetails,
updateGoodsRecord,
getStoreTypeApi
} from '@/api/store.js';
import { getArea, getStreet } from '@/api/article.js';
import Verify from '@/components/verify/verify.vue';
import { Toast } from '@/libs/uniApi';
export default {
components: {
Verify
},
data() {
return {
formData: {
mer_name: '',
name: '',
phone: '',
code: '',
merchant_category_id: '',
mer_type_id: '',
site: '',
images: []
},
disabled: false,
timer: "",
text: "获取验证码",
pickerShow: false,
keyName: '',
columns: [],
mer_classification: '', // 商户分类
mer_storeType: '', // 店铺类型
site_name: '', // 店铺所在地
isOpenFair: false, // 是否农贸市场
pics: [],
isAgree: false,
validate: false,
}
},
beforeDestroy() {
clearTimeout(this.timer)
},
onLoad() {},
onShow() {},
methods: {
async formSubmit() {
this.formData.images = this.pics
if (this.validateForm()) {
const res = await create(this.formData).catch(err => Toast(err))
}
},
ChangeIsAgree: function(e) {
this.isAgree = !this.isAgree;
},
switchcChange(e) {
// console.log(e);
},
// 获取商户分类
async getClassfication() {
const res = await merClassifly().catch(err => Toast(err));
this.keyName = 'category_name'
this.$refs.uPicker.setColumnValues(0, res.data);
this.pickerShow = true
},
// 获取店铺类型
async getStoreType() {
const res = await getStoreTypeApi().catch(err => Toast(err));
this.keyName = 'type_name'
this.$refs.uPicker.setColumnValues(0, res.data);
this.pickerShow = true
},
// 获取商圈
Area() {
getArea({ city_code: 510500 }).then(res => {
this.$refs.uPicker.setColumnValues(0, res.data);
this.Street(res.data[0]['code']);
});
},
Street(code) {
getStreet({ area_code: code }).then(res => {
this.keyName = 'name'
this.$refs.uPicker.setColumnValues(1, res.data);
this.pickerShow = true
});
},
pickerIsShow(type) {
switch (type) {
case 'class':
this.getClassfication()
break;
case 'type':
this.getStoreType()
break;
case 'site':
this.Area()
break;
}
},
confirm(e) {
// console.log('e', e);
switch (this.keyName) {
case 'category_name':
this.mer_classification = e.value[0].category_name
this.formData.merchant_category_id = e.value[0].merchant_category_id
break;
case 'type_name':
this.formData.mer_type_id = e.value[0].mer_type_id
this.mer_storeType = e.value[0].type_name
break;
case 'name':
this.formData.site = e.value[1].code
this.site_name = e.value[1].name
break;
}
this.pickerShow = false
},
changeHandler(e) {
const { columnIndex, value, values, index, picker = this.$refs.uPicker } = e;
if (this.keyName === 'site') {
if (columnIndex === 0) {
getStreet({ area_code: value[0]['code'] }).then(res => {
this.$refs.uPicker.setColumnValues(1, res);
});
}
}
},
async code(data) {
let that = this;
if (!that.formData.phone) return that.$util.Tips({
title: '请填写手机号码'
});
if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.formData.phone)) return that.$util.Tips({
title: '请输入正确的手机号码'
});
await verify({
phone: that.formData.phone,
// key: that.codeKey,
// code: that.codeVal,
type: 'intention',
captchaType: 'blockPuzzle',
captchaVerification: data.captchaVerification
})
.then(res => {
that.$util.Tips({
title: res.msg
});
that.sendCode();
})
.catch(res => {
that.$util.Tips({
title: res
});
if (res.status == 402) {
// that.getcaptcha();
}
});
},
sendCode() {
if (this.disabled) return;
this.disabled = true;
let n = 60;
this.text = "剩余 " + n + "s";
const run = setInterval(() => {
n = n - 1;
if (n < 0) {
clearInterval(run);
}
this.text = "剩余 " + n + "s";
if (this.text < "剩余 " + 0 + "s") {
this.disabled = false;
this.text = "重新获取";
}
}, 1000);
},
success(data) {
this.$refs.verify.hide();
this.code(data);
},
handleVerify() {
if (!this.formData.phone) return this.$util.Tips({
title: '请输入手机号'
});
if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.formData.phone)) return this.$util.Tips({
title: '请输入正确的手机号码'
});
if (!this.isAgree) return this.$util.Tips({
title: '请勾选并同意入驻协议'
});
this.$refs.verify.show();
},
// 图片预览
// 获得相册 idx
getPhotoClickIdx(e) {
let _this = this;
let idx = e.currentTarget.dataset.index;
_this.imgPreview(_this.pics, idx);
},
// 图片预览
imgPreview: function(list, idx) {
// list图片 url 数组
if (list && list.length > 0) {
uni.previewImage({
current: list[idx], // 传 Number H5端出现不兼容
urls: list
});
}
},
/**
* 上传文件
*
*/
uploadpic: function() {
let that = this;
that.$util.uploadImageOne('upload/image', function(res) {
that.pics.push(res.data.path);
that.$set(that, 'pics', that.pics);
});
},
/**
* 删除图片
*
*/
DelPic: function(index) {
let that = this,
pic = this.pics[index];
that.pics.splice(index, 1);
that.$set(that, 'pics', that.pics);
},
validateForm: function() {
let that = this,
value = that.formData;
if (!value.mer_name) return that.$util.Tips({
title: '请输入企业名称'
});
if (!value.name) return that.$util.Tips({
title: '请输入姓名'
});
if (!value.phone) return that.$util.Tips({
title: '请输入手机号'
});
if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(value.phone)) return that.$util.Tips({
title: '请输入正确的手机号码'
});
if (!value.code) return that.$util.Tips({
title: '请填写验证码'
});
if (!value.merchant_category_id) return that.$util.Tips({
title: '请选择商户分类'
});
if (!that.isAgree) return that.$util.Tips({
title: '请勾选并同意入驻协议'
});
// if (that.isShowCode && !that.codeVal) return that.$util.Tips({
// title: '请填写图片验证码'
// });
// that.validate = true;
return true;
},
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
.settled-wrapper {
width: 694.74rpx;
margin: 0 auto;
padding: 35.09rpx 28.07rpx;
background: #fff;
border-radius: 8px;
.set-item {
width: 100%;
margin-bottom: 31.58rpx;
.title {
font-size: 31.58rpx;
}
.input-box {
position: relative;
display: flex;
width: 100%;
height: 48px;
margin-top: 17.54rpx;
padding: 21.05rpx;
background: #FFFFFF;
border-radius: 8px;
border: 1px solid #CCCCCC;
box-sizing: border-box;
.code {
position: absolute;
right: 10px;
width: 93px;
line-height: 27px;
border: 1px solid $uni-theme-color;
border-radius: 15px;
color: $uni-theme-color;
text-align: center;
bottom: 8px;
font-size: 12px;
}
.on {
background-color: #bbb;
color: #fff;
border-color: #bbb;
}
}
.placeholder {
color: #ccc;
}
.no-border {
padding: 0;
border: none;
}
// 图片上传
.item-title {
color: #666666;
font-size: 28rpx;
display: block;
}
.item-desc {
color: #B2B2B2;
font-size: 22rpx;
display: block;
margin-top: 9rpx;
line-height: 36rpx;
}
.upload {
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-lines: multiple;
-moz-box-lines: multiple;
-o-box-lines: multiple;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-top: 20rpx;
}
.pictrue {
width: 130rpx;
height: 130rpx;
margin: 24rpx 22rpx 0 0;
position: relative;
font-size: 11px;
color: #bbb;
&:nth-child(4n) {
margin-right: 0;
}
&:nth-last-child(1) {
border: 0.5px solid #ddd;
box-sizing: border-box;
}
uni-image,
image {
width: 100%;
height: 100%;
border-radius: 1px;
img {
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
display: block;
position: absolute;
top: 0;
left: 0;
opacity: 0;
width: 100%;
height: 100%;
}
}
.icon-guanbi1 {
font-size: 33rpx;
position: absolute;
top: -10px;
right: -10px;
}
}
// 是否勾选
.settleAgree {
display: inline-block;
font-size: 24rpx;
color: $uni-theme-color;
position: relative;
top: 2px;
left: 8px;
}
}
.submitBtn {
width: 588rpx;
margin: 0 auto;
height: 86rpx;
border-radius: 25px;
text-align: center;
line-height: 86rpx;
font-size: 15px;
color: #fff;
background: #E3E3E3;
margin-top: 25px;
pointer-events: none;
}
.on-submit {
background: $uni-theme-bg-color;
pointer-events: all;
}
}
</style>