You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

270 lines
6.5 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

<!-- 申请分销商 -->
<template>
<view class="apply-commission-wrap">
<!-- 标题栏 -->
<view class="head-box" :style="{ backgroundImage: ' url(' + formHeadImg + ')' }">
<shopro-navbar back-icon-color="#fff" :background="{}"></shopro-navbar>
</view>
<!-- 表单 -->
<view class="apply-form">
<u-form :model="model" :rules="rules" ref="uForm" :errorType="errorType">
<block v-for="(form, index) in formList" :key="index">
<u-form-item v-if="form.type === 'input'" :labelStyle="labelStyle"   label-width="150" label-position="left" :label="form.name" :prop="`value${index}`">
<u-input
:disabled="!hasPostBtn"
:placeholder="`请输入${form.name}`"
:placeholderStyle="placeholderStyle"
v-model="model['value' + index]"
type="text"
></u-input>
</u-form-item>
<u-form-item v-if="form.type === 'number'" :labelStyle="labelStyle" label-position="left" :label="form.name" :prop="`value${index}`" label-width="150">
<u-input
:disabled="!hasPostBtn"
:placeholder="`请输入${form.name}`"
:placeholderStyle="placeholderStyle"
v-model="model['value' + index]"
type="number"
></u-input>
</u-form-item>
<u-form-item
v-if="form.type === 'image'"
:labelStyle="labelStyle"
:prop="`value${index}`"
:label="form.name"
label-position="top"
label-width="150"
:borderBottom="true"
>
<u-upload
:deletable="hasPostBtn"
:placeholderStyle="placeholderStyle"
:showProgress="false"
@on-uploaded="uploadSuccess($event, `value${index}`)"
@on-remove="uploadRemove($event, `value${index}`)"
:file-list="model[`valueList${index}`]"
:action="`${$BASE_URL}/api/common/upload`"
:header="{token: token}"
width="148"
height="148"
maxCount="1"
></u-upload>
</u-form-item>
</block>
<view class="agreement u-flex" v-if="protocol && hasPostBtn">
<u-checkbox v-model="model.agreement" activeColor="#b095ff" shape="circle" @change="onAgreement"></u-checkbox>
<view class="agreement-text" @tap="$Router.push({ path: '/pages/public/richtext', query: { id: protocol.richtext_id } })">
我已阅读并遵守
<text class="text-underline">{{ protocol.name }}</text>
</view>
</view>
<button class="u-reset-button save-btn" v-if="hasPostBtn" @tap="onSubmit" :disabled="isFormEnd"></button>
</u-form>
</view>
</view>
</template>
<script>
export default {
components: {},
data() {
return {
formList: [], //返回的表单
formHeadImg: '', //表单头部背景
protocol: null, //协议
isFormEnd: false, //提交成功
hasPostBtn: false, //是否显示提交按钮
errorType: ['message'],
labelStyle: {
'font-size': '28rpx',
'font-weight': '500',
color: '#333'
},
placeholderStyle: 'font-size: 28rpx;color:#c4c4c4;',
model: {},
inputNumber: [
{
required: true,
message: '内容不能为空!',
trigger: ['change', 'blur']
}
],
inputImage: [
{
required: true,
message: '请上传图片',
trigger: ['change', 'blur']
}
],
rules: {},
token: uni.getStorageSync('token')
};
},
computed: {},
onLoad() {
this.getFrom();
},
methods: {
// 上传图片成功-单图
uploadSuccess(e, value) {
this.model[value] = e[0].response.data.url;
},
// 移除图片
uploadRemove(index, value) {
this.model[value] = '';
},
// 勾选同意
onAgreement(e) {
this.model.agreement = e.value;
},
// 获取申请分销商表单
getFrom() {
let that = this;
that.$http('commission.form').then(res => {
if (res.code === 1) {
that.protocol = res.data.apply_protocol; //表单协议同
that.formList = res.data.apply_info; //表单
that.hasPostBtn = res.data.apply_status; //是否显示提交按钮
that.formHeadImg = res.data.background_image ? res.data.background_image : this.$IMG_URL + '/imgs/commission/apply_bg.png'; //头部背景
that.initRules(); //规则
that.$refs.uForm.setRules(that.rules);
}
});
},
// 构建验证规则
initRules() {
let that = this;
that.formList.forEach((item, index) => {
that.model = {
...that.model,
...{
[`value${index}`]: item.value ? item.value : null
}
}; //构造model数据
that.model.agreement = false;
if (item.type === 'input' || item.type === 'number') {
//构造表单验证规则
that.rules = {
...that.rules,
...{
[`value${index}`]: that.inputNumber
}
};
}
if (item.type === 'image') {
if (item.value) {
let arr = [];
arr.push({ url: item.value });
that.model = {
...that.model,
...{
[`valueList${index}`]: arr
}
};
}
that.rules = {
...that.rules,
...{
[`value${index}`]: that.inputImage
}
};
}
});
},
//申请分销商
applyCommission(data) {
let that = this;
that.isFormEnd = true;
that.$http(
'commission.apply',
{
data: data
},
'申请中...'
).then(res => {
that.isFormEnd = false;
if (res.code === 1) {
uni.showToast({
title: res.msg,
success: () => {
that.$Router.back();
}
});
}
});
},
// 提交
onSubmit() {
let that = this;
this.$refs.uForm.validate(valid => {
if (valid) {
if (!this.model.agreement && this.protocol) return this.$u.toast('请勾选协议');
let formData = this.formList;
formData.map((item, index) => {
item.value = that.model[`value${index}`];
});
this.applyCommission(formData);
} else {
this.$u.toast('请完善表单');
}
});
}
}
};
</script>
<style lang="scss">
.apply-commission-wrap {
height: 100%;
background-color: #fff;
.head-box {
width: 100%;
height: 400rpx;
background-size: 100% auto;
background-repeat: no-repeat;
}
}
// 表单
.apply-form {
width: 750rpx;
background: #ffffff;
border-radius: 20rpx;
padding: 30rpx;
.agreement {
margin-top: 20rpx;
.agreement-text {
font-size: 24rpx;
font-weight: 500;
color: #b095ff;
.text-underline {
text-decoration: underline;
}
}
}
.save-btn {
width: 690rpx;
line-height: 86rpx;
background: linear-gradient(-90deg, #a36fff, #5336ff);
box-shadow: 0px 7rpx 11rpx 2rpx rgba(124, 103, 214, 0.34);
border-radius: 43rpx;
font-weight: 500;
color: #ffffff;
margin: 30rpx auto;
}
}
</style>