Files
cashier_app/pageMarket/distribution/level-list.vue

367 lines
9.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="min-page u-font-28">
<view class="container first">
<view class="title">升级条件</view>
<view class="u-m-t-16">
<up-radio-group v-model="form.upgradeType" placement="row">
<up-radio
v-for="item in distributionStore.upgradeTypes"
:key="item.value"
:name="item.value"
:label="item.label"
>
<template #label>
<text>
{{ item.label }}
</text>
</template>
</up-radio>
</up-radio-group>
</view>
</view>
<view class="container" v-for="(item,index) in form.levelConfigList">
<view class="u-flex u-row-between">
<text class="font-bold color-333 u-font-32">{{index+1}}{{ item.name }}</text>
<view class="u-flex" @click="toggle(index)">
<text class="color-main u-m-r-14">展开</text>
<view class="u-flex arrow" :class="[!showDetailListSwitch[index]?'rotate' : '']">
<up-icon name="arrow-down" color="#318AFE" ></up-icon>
</view>
</view>
</view>
<template v-if="showDetailListSwitch[index]">
<view class="u-m-t-60">
<view class="title">名称</view>
<view class="u-p-t-16 u-p-b-24">
<input placeholder="请输入名称" placeholder-class="color-999 u-font-28" v-model="item.name" @input="checkName($event, index)"></input>
</view>
<up-line></up-line>
<view class="title u-m-t-24">分成比例</view>
<view class="u-m-t-16 u-p-b-24">
<view class="u-flex u-m-t-16">
<input
class="number-box"
placeholder="请输入"
placeholder-class="color-999 u-font-28"
type="digit"
@input="checkNumberCommission($event,index)"
v-model="item.levelOneCommission"
/>
<view class="unit">%</view>
</view>
</view>
<template v-if="form.upgradeType!='not_upgrade'">
<up-line></up-line>
<template v-if="form.upgradeType!='cost'">
<view class="title u-m-t-24">有效人数</view>
<view class="u-m-t-16 u-p-b-8">
<view class="u-flex u-m-t-16">
<input
:disabled="index==0?true:false"
:class="{'disabled':index==0?true:false}"
class="number-box"
placeholder="请输入"
placeholder-class="color-999 u-font-28"
type="number"
v-model="item.inviteCount"
/>
<view class="unit"></view>
</view>
</view>
<view class="color-999 u-font-24">有效人数被邀请人在店铺消费过即有一笔订单完成</view>
</template>
<template v-else>
<view class="title u-m-t-24">消费金额达</view>
<view class="u-m-t-16 u-p-b-8">
<view class="u-flex u-m-t-16">
<input
class="number-box"
:disabled="index==0?true:false"
:class="{'disabled':index==0?true:false}"
placeholder="请输入"
placeholder-class="color-999 u-font-28"
type="digit"
v-model="item.costAmount"
/>
<view class="unit"></view>
</view>
</view>
<view class="color-999 u-font-24">消费金额分销员和被邀请人在店铺订单消费总金额不包含退款</view>
</template>
</template>
<view class="u-m-t-24 u-flex u-row-right" style="gap: 40rpx;">
<view class="u-flex" v-if="index==0||index==form.levelConfigList.length-1" @click="addLevelConfig">
<up-icon name="plus-circle-fill" color="#318AFE" ></up-icon>
<text class="u-m-l-16">{{index==0? '添加':'继续添加'}}</text>
</view>
<view class="u-flex" @click="remove(index)" v-if="index!=0">
<up-icon name="minus-circle-fill" color="#EB4F4F" ></up-icon>
<text class="u-m-l-16">删除</text>
</view>
</view>
</view>
</template>
</view>
<my-bottom-btn-group @save="save" @cancel="cancel"></my-bottom-btn-group>
</view>
</template>
<script setup>
import {
onLoad,
onReady,
onShow,
onPageScroll,
onReachBottom,
onBackPress,
} from "@dcloudio/uni-app";
import { ref, onMounted, watch, reactive , computed} from "vue";
import { useDistributionStore } from "@/store/market.js";
const distributionStore = useDistributionStore();
const form = reactive({
upgradeType: "",
levelConfigList:[]
});
const showDetailListSwitch=ref([true])
function toggle(index) {
showDetailListSwitch.value[index] = !showDetailListSwitch.value[index];
}
//现在全部的分成比例总和
const allCommission=()=>{
let sum=0
for(let item of form.levelConfigList){
sum+=parseFloat(item.levelOneCommission)
}
return sum
}
let timer=null
//全部的分成比例加起来不能超过100%
function checkNumberCommission(e,index){
const value=e.detail.value
clearInterval(timer)
if(value>100){
uni.showToast({
title:'分成比例不能超过100',
icon:'none'
})
timer= setTimeout(()=>{
form.levelConfigList[index].levelOneCommission=''
},30)
return false
}
//输入最多两位小数,两位小数点后的去除掉不让输入
if(value.indexOf('.')!=-1){
const arr=value.split('.')
if(arr[1].length>2){
timer= setTimeout(()=>{
form.levelConfigList[index].levelOneCommission=arr[0]+'.'+arr[1].substring(0,2)
},30)
}
}
}
function checkName(e,index){
const value=e.detail.value
if(value.length>10){
uni.showToast({
title:'名称最多10个字符',
icon:'none'
})
timer= setTimeout(()=>{
form.levelConfigList[index].name=value.substring(0,10)
},30)
return false
}
}
function remove(index){
form.levelConfigList.splice(index,1)
showDetailListSwitch.value.splice(index,1)
}
function addLevelConfig(){
form.levelConfigList.push({
name:'',
levelOneCommission:'',
inviteCount:'',
costAmount:''
})
showDetailListSwitch.value.push(true)
}
//判断输入每一项是否为空
function checkInput(){
for(let item of form.levelConfigList){
if(!item.name){
uni.showToast({
title:'请输入名称',
icon:'none'
})
return false
}
if(!item.levelOneCommission){
uni.showToast({
title:'请输入分成比例',
icon:'none'
})
return false
}
if(form.upgradeType==='not_upgrade'){
continue
}
if(form.upgradeType==='cost'){
if(item.costAmount===''||item.costAmount===null){
uni.showToast({
title:'请输入消费金额',
icon:'none'
})
return false
}
}else{
if(item.inviteCount===''||item.inviteCount===null){
uni.showToast({
title:'请输入有效人数',
icon:'none'
})
return false
}
}
}
return true
}
async function save(){
const isPas=checkInput()
if(!isPas){
return
}
await distributionStore.editConfig(form)
uni.showToast({
title:'保存成功',
icon:'none'
})
setTimeout(() => {
uni.navigateBack({
delta:1
})
}, 1500);
}
function cancel(){
uni.navigateBack({
delta:1
})
}
onLoad(()=>{
showDetailListSwitch.value=distributionStore.config.levelConfigList.map(()=>true)
const levelConfigList=[...distributionStore.config.levelConfigList||[]]
form.levelConfigList=levelConfigList.length?levelConfigList:[
{ name:'',
levelOneCommission:'',
inviteCount:0,
costAmount:0}
]
form.upgradeType=distributionStore.config.upgradeType
})
</script>
<style lang="scss" scoped>
.min-page {
background: #f7f7f7;
padding: 56rpx 28rpx;
}
.container {
background: #fff;
padding: 32rpx 24rpx;
margin-top: 32rpx;
border-radius: 16rpx;
overflow: hidden;
}
.x-padding {
padding: 0 24rpx;
}
$height: 70rpx;
.number-box {
font-size: 28rpx;
padding: 0 26rpx;
border-radius: 6rpx 0 0 6rpx;
border-top: 2rpx solid #d9d9d9;
border-bottom: 2rpx solid #d9d9d9;
border-left: 2rpx solid #d9d9d9;
background: #fff;
box-sizing: border-box;
height: $height;
flex: 1;
line-height: $height;
&.disabled{
background-color: #f7f7fa;
color: #999999;
}
}
.unit {
display: flex;
padding: 0 38rpx;
height: $height;
line-height: $height;
align-items: center;
border-radius: 0 6rpx 6rpx 0;
border: 2rpx solid #d9d9d9;
background: #f7f7fa;
font-size: 28rpx;
color: #999999;
}
.my-btn {
font-size: 28rpx;
line-height: 36rpx;
padding: 8rpx 32rpx;
border-radius: 12rpx;
margin: 0;
}
.edit-btn {
background: #e6f0ff;
color: $my-main-color;
}
.delete-btn {
background: #ffe7e6;
color: #ff1c1c;
}
.title {
font-weight: 700;
color: #333;
font-size: 28rpx;
}
.first {
border-bottom: 2rpx solid #e5e5e5;
}
.arrow{
transition: all 0.3s ease-in-out;
&.rotate{
transform: rotate(180deg);
}
}
</style>