添加:经销商列表显示当前经销商升级到每个等级的排名

修改:购买商品赠送权重值 修改:细分为经纪人赠送,代理商赠送,省公司赠送。
添加:购买配送赠送权重值 支持设置百分比
This commit is contained in:
wuhui_zzw 2023-10-23 16:10:20 +08:00
parent 9655c2f58d
commit 24e7139815
8 changed files with 412 additions and 79 deletions

View File

@ -83,12 +83,22 @@ class TeamAgencyController extends BaseController
}
}
$level = TeamDividendLevelModel::getList()->get();
// 获取所有经销商的排名信息
$rankList = TeamDividendLevelModel::getRanking();
foreach ($list['data'] as $key => $item) {
$list['data'][$key]['total'] = count($item['has_many_member_children']);
$list['data'][$key]['rank_list'] = array_filter(array_map(function($rankInfo) use ($item){
$rankSort = (string)$rankInfo['up_log'][$item['uid']];
if($rankSort === '0' || $rankSort) {
return [
'id' => $rankInfo['id'],
'level_name' => $rankInfo['level_name'],
'ranking' => ((int)$rankInfo['up_log'][$item['uid']] + 1),
];
}
},$rankList));
}
return view('Yunshop\TeamDividend::admin.team-agency', [
'list' => $list,
'endtime' => $endtime,

View File

@ -220,7 +220,35 @@ class TeamDividendLevelModel extends BackendModel
return self::getList()->select($field)->get()->toArray();
}
public function upLog(){
return $this->hasMany(Uplog::class, 'after_level_id', 'id');
}
/**
* Common: 获取所有等级所有经销商排名信息
* Author: wu-hui
* Time: 2023/10/23 15:45
* @return array|false|null
*/
public static function getRanking(){
// 获取全部经销商 以此来获取排名信息
$upRank = TeamDividendLevelModel::uniacid()
->select(['id','level_name','level_weight'])
->with(['upLog'=>function($query){
$query->select(['id','uid','after_level_id','created_at'])
->orderBy('created_at','ASC')
->groupBy('after_level_id')
->groupBy('uid');
}])
->get();
$allTeamDividend = $upRank->map(function($upItem){
return [
'id' => $upItem->id,
'level_name' => $upItem->level_name,
'up_log' => array_flip($upItem->upLog->pluck('uid')->toArray()),
];
})->toArray();
return array_column($allTeamDividend,null,'id');
}
}

View File

@ -112,6 +112,7 @@
<th width="13.5%">成为经销商时间<br>升级时间</th>
<th width="8.5%">经销商</th>
<th width="10.5%">等级</th>
<th style="width: 100px;">排名</th>
<th width="8.5%">直属总经销商人数</th>
<th width="8.5%">经销商比例<br>累计提成</th>
<th width="8.5%">已结算提成<br>未结算提成</th>
@ -159,7 +160,11 @@
</div>
</td>
<td>
@foreach($item['rank_list'] as $rankItem)
<p>{{$rankItem['level_name']}}{{$rankItem['ranking']}}</p>
@endforeach
</td>
<td>
{{$item['total'] ?? 0}}

View File

@ -3,6 +3,7 @@ namespace Yunshop\WeightValue\admin;
use app\common\components\BaseController;
use app\common\helpers\PaginationHelper;
use app\common\models\Order;
use Yunshop\TeamDividend\models\TeamDividendLevelModel;
use Yunshop\WeightValue\models\WeightValue;
use Yunshop\WeightValue\models\WeightValueLog;
@ -106,9 +107,7 @@ class IndexController extends BaseController{
public function test(){
// (new WeightValue())->upgradeGiveInit(1,1);
// (new WeightValue())->giveInit(Order::find(128));
}

View File

@ -17,7 +17,6 @@ class WeightValueWidget extends BaseGoodsWidget{
public function getData(){
return GoodsWeightValue::uniacid()
->select(['is_open','gift_type','lv_type','quantity','ladder'])
->where('goods_id', $this->goods->id)
->first();
}

View File

@ -13,21 +13,40 @@ class GoodsWeightValue extends BaseModel{
public static function relationSave($goodsId, $data, $operate,$isTeamDividend = false){
if (!$goodsId) return false;
if (!$data) return false;
$info = self::getModel($goodsId, $operate, $isTeamDividend);
// 判断deleted
if ($operate == 'deleted') return $info->delete();
// 其他
// 公共
$info->uniacid = \YunShop::app()->uniacid;
$info->goods_id = $isTeamDividend ? 0 : $goodsId;// 经销商设置true goods_id = 0否则为goodsId
$info->team_dividend_level_id = $isTeamDividend ? $goodsId : 0;// 经销商设置true team_dividend_level_id = goodsId否则为0
$info->is_open = $data['is_open'] ?? 0;// 是否开启购买商品赠送权重值0=未开启1=开启
// 经纪人
$info->gift_type = $data['gift_type'] ?? 0;// 赠送方式0=赠送固定值1=阶梯值赠送
$info->lv_type = $data['lv_type'] ?? 0;// 赠送方式0=二级1=三级
$info->calculation_type = $data['calculation_type'] ?? 0;// 计算类型0=固定值1=支付比例
$info->quantity = $data['quantity'] ?? 0;// 固定值赠送数量
foreach($data['ladder'] as $ladderIndex => $ladderItem){
if((float)$ladderItem['where'] <= 0 || (float)$ladderItem['num'] <= 0) unset($data['ladder'][$ladderIndex]);
}
$info->ladder = json_encode($data['ladder'] ?? []);// 阶梯赠送信息
// 代理商
$info->agent_gift_type = $data['agent_gift_type'] ?? 0;// 赠送方式0=赠送固定值1=阶梯值赠送
$info->agent_calculation_type = $data['agent_calculation_type'] ?? 0;// 计算类型0=固定值1=支付比例
$info->agent_quantity = $data['agent_quantity'] ?? 0;// 固定值赠送数量
foreach($data['agent_ladder'] as $ladderIndex => $ladderItem){
if((float)$ladderItem['where'] <= 0 || (float)$ladderItem['num'] <= 0) unset($data['agent_ladder'][$ladderIndex]);
}
$info->agent_ladder = json_encode($data['agent_ladder'] ?? []);// 阶梯赠送信息
// 省公司
$info->province_gift_type = $data['province_gift_type'] ?? 0;// 赠送方式0=赠送固定值1=阶梯值赠送
$info->province_calculation_type = $data['province_calculation_type'] ?? 0;// 计算类型0=固定值1=支付比例
$info->province_quantity = $data['province_quantity'] ?? 0;// 固定值赠送数量
foreach($data['province_ladder'] as $ladderIndex => $ladderItem){
if((float)$ladderItem['where'] <= 0 || (float)$ladderItem['num'] <= 0) unset($data['province_ladder'][$ladderIndex]);
}
$info->province_ladder = json_encode($data['province_ladder'] ?? []);// 阶梯赠送信息
return $info->save();
}

View File

@ -13,6 +13,7 @@ use Yunshop\ShareholderDividend\models\ShareholderDividendModel;
use Yunshop\TeamDividend\models\TeamDividendAgencyModel;
use Yunshop\TeamDividend\models\TeamDividendLevelModel;
use Yunshop\TeamDividend\models\TeamDividendModel;
use Yunshop\TeamDividend\models\Uplog;
class WeightValue extends BaseModel{
@ -39,17 +40,19 @@ class WeightValue extends BaseModel{
// 循环处理每个商品
$changeRecord = [];// 变更记录
foreach($goodsList as $goodsInfo){
// 由于涉及到删除 使用的经销商列表重新赋值给新的变量 方便操作
$useAgentList = $agents;
// 判断:赠送等级为二级时,删除第三个用户 赠送等级0=二级1=三级
if($goodsInfo['lv_type'] == 1 && count($useAgentList) >= 3) unset($useAgentList[2]);
$useAgentList = [];
$mergeAgentList = array_merge($agents['parents'],$agents['agents']);// 默认上级信息
// 判断:是否开启自购
if((int)$goodsInfo['is_self_purchase'] == 1) $mergeAgentList = array_merge($agents['current_user'],$agents['parents'],$agents['agents']);
foreach($mergeAgentList as $useAgentItem){
$useAgentList[$useAgentItem['uid']] = $useAgentItem;
}
// 循环上级信息 处理每一个用户、每一个商品的赠送情况
foreach($useAgentList as $agentKey => $agentInfo){
// 用户当前的权重值
$currentAgentHasWeightValue = (float)$agents[$agentKey]['weight_value']['quantity'] ?? 0;
// 符合条件 获取当前用户应得的权重值
$weightValue = $this->getWeightValue($goodsInfo,$agentInfo);// 应得权重值
$totalWeightValue = (float)sprintf("%.2f",$goodsInfo['total'] * $weightValue);// 总数量 * 应得权重值 = 总应得权重值
$totalWeightValue = $this->getWeightValue($goodsInfo,$agentInfo);// 应得权重值
// 应得权重值大于0 记录改变信息并且修改持有权重值
if((float)$totalWeightValue > 0){
$changeAfter = sprintf("%.2f",($currentAgentHasWeightValue + $totalWeightValue));
@ -80,6 +83,7 @@ class WeightValue extends BaseModel{
DB::commit();
}catch(\Exception $e){
\Log::debug('------购买商品赠送权重值 - 错误抛出------',$e->getMessage());
DB::rollBack();
}
@ -103,11 +107,22 @@ class WeightValue extends BaseModel{
'yz_order_goods.goods_id',
'yz_order_goods.total',
'yz_order_goods.title',
'yz_order_goods.payment_amount',
'yz_goods_weight_value.is_open',
'yz_goods_weight_value.is_self_purchase',
'yz_goods_weight_value.gift_type',
'yz_goods_weight_value.lv_type',
'yz_goods_weight_value.calculation_type',
'yz_goods_weight_value.quantity',
'yz_goods_weight_value.ladder'
'yz_goods_weight_value.ladder',
'yz_goods_weight_value.agent_gift_type',
'yz_goods_weight_value.agent_calculation_type',
'yz_goods_weight_value.agent_quantity',
'yz_goods_weight_value.agent_ladder',
'yz_goods_weight_value.province_gift_type',
'yz_goods_weight_value.province_calculation_type',
'yz_goods_weight_value.province_quantity',
'yz_goods_weight_value.province_ladder',
])
->get()
->makeHidden(['order','after_sales','buttons']);
@ -115,10 +130,10 @@ class WeightValue extends BaseModel{
return $list ? $list->toArray() : [];
}
/**
* Common: 购买商品赠送权重值 - 获取上级信息
* Common: 赠送权重值 - 获取上级信息
* Author: wu-hui
* Time: 2023/10/12 11:06
* @param $uid
* Time: 2023/10/23 14:51
* @param $uid
* @return array
*/
private function getParent($uid){
@ -127,7 +142,6 @@ class WeightValue extends BaseModel{
->where('member_id', $uid)
->select(['parent_id','level'])
->orderBy('level', 'asc')
->limit(2)// 由于最多只分三层,这里只获取直推上级及其上级
->get()
->toArray();
// 包含购买人
@ -135,7 +149,13 @@ class WeightValue extends BaseModel{
$uidS = array_column($parents,'parent_id');
// 获取经销商信息
$teamDividend = TeamDividendAgencyModel::uniacid()
->select(['uid','level','is_black'])
->join('yz_team_dividend_level', 'yz_team_dividend_level.id', '=', 'yz_team_dividend_agency.level')
->select([
'yz_team_dividend_agency.uid',
'yz_team_dividend_agency.level',
'yz_team_dividend_agency.is_black',
'yz_team_dividend_level.identity_type',
])
->whereIn('uid',$uidS)
->get();
$teamDividend = $teamDividend ? $teamDividend->keyBy('uid')->toArray() : [];
@ -150,63 +170,108 @@ class WeightValue extends BaseModel{
$weightValueGroup[$weightValueItem['member_id']][$weightValueItem['team_dividend_agency_level_id']] = $weightValueItem;
}
// 获取全部经销商 以此来获取排名信息
$allTeamDividend = TeamDividendAgencyModel::uniacid()->pluck('uid')->toArray();
$allTeamDividend = array_flip($allTeamDividend);
$allTeamDividend = TeamDividendLevelModel::getRanking();
$agents = [];
foreach($parents as $memberInfo){
$teamDividendInfo = $teamDividend[$memberInfo['parent_id']] ?? [];
// 判断:仅经销商 且 不是黑名单的用户才会赠送
$isBlack = (int)$teamDividendInfo['is_black'] ?? 0;// 是否为黑名单
if($teamDividendInfo && $isBlack != 1) {
$teamDividendInfo['ranking'] = ((int)$allTeamDividend[$memberInfo['parent_id']] + 1);
if($teamDividendInfo) {
$currentRank = $allTeamDividend[(int)$teamDividendInfo['level']]['up_log'] ?? [];
$teamDividendInfo['ranking'] = ($currentRank[$memberInfo['parent_id']] + 1);
$weightValue = $weightValueGroup[$memberInfo['parent_id']][(int)$teamDividendInfo['level']] ?? [
'uniacid' => \YunShop::app()->uniacid,
'member_id' => $memberInfo['parent_id'],
'team_dividend_agency_level_id' => (int)$teamDividendInfo['level'],
'quantity' => 0,
];
$agents[] = [
$agents[$memberInfo['parent_id']] = [
'uid' => $memberInfo['parent_id'],
'level' => $memberInfo['level'],
'is_black' => (int)$teamDividendInfo['is_black'] ?? 0,// 是否为黑名单
'team_dividend_agency_level_id' => (int)$teamDividendInfo['level'],
'identity_type' => (int)$teamDividendInfo['identity_type'],
'weight_value' => $weightValue,
'teamDividend' => $teamDividendInfo
];
}
}
// 处理上级列表 取前二
$parentList = $agents;
// unset($parentList[$uid]);
$sort = array_column($parentList,'level');
array_multisort($parentList,SORT_ASC,$sort);
array_column($parentList,null,'uid');
$parentList = array_splice($parentList,0,2);
// 获取代理商信息 这里只取第一个代理商
$agentInfo = collect($agents)
->where('identity_type',2)
->where('uid','!=',$uid)
->first();
return $agents;
return [
// 当前用户
'current_user' => [$uid => $agents[$uid]],
// 上级列表
'parents' => array_column($parentList,null,'uid'),
// 代理商
'agents' => [$agentInfo['uid'] => $agentInfo],
];
}
/**
* Common: 购买商品赠送权重值 - 获取应得权重值
* Author: wu-hui
* Time: 2023/10/12 14:03
* Time: 2023/10/23 15:28
* @param $currentSale
* @param $agentInfo
* @return float|int
* @return float
*/
private function getWeightValue($currentSale,$agentInfo){
if((int)$currentSale['gift_type'] == 0){
// 赠送固定值
return $currentSale['quantity'];
}else if($agentInfo['teamDividend']){
// 阶梯赠送 阶梯判断条件必须按照从大到小排序
$ladderList = json_decode($currentSale['ladder'],true);
array_multisort(array_column($ladderList,'where'),SORT_ASC, $ladderList);
$ranking = (int)$agentInfo['teamDividend']['ranking'];
$weightValueNum = 0;
foreach($ladderList as $ladder){
if($ranking <= $ladder['where'] && $ranking > 0){
$weightValueNum = (float)$ladder['num'];
break;
}
}
return $weightValueNum;
}else {
return (float)0;
$deservedValue = 0;// 应得权重值(固定值||比例)
$calculationType = 0;// 计算类型0=固定值1=支付比例
// 获取应得值 特殊身份0=无特殊身份1=经纪人2=代理商3=省级代理
switch($agentInfo['identity_type']){
// 经纪人处理
case 1:
$calculationType = (int)$currentSale['calculation_type'];
if((int)$currentSale['gift_type'] == 0) $deservedValue = $currentSale['quantity'];// 赠送固定值
else if($agentInfo['teamDividend']) $deservedValue = $this->getRankGive($currentSale['ladder'],(int)$agentInfo['teamDividend']['ranking']);// 阶梯赠送
else $deservedValue = (float)0;
break;
// 代理商处理
case 2:
$calculationType = (int)$currentSale['agent_calculation_type'];
if((int)$currentSale['agent_gift_type'] == 0) $deservedValue = $currentSale['agent_quantity'];
else if($agentInfo['teamDividend']) $deservedValue = $this->getRankGive($currentSale['agent_ladder'],(int)$agentInfo['teamDividend']['ranking']);
else $deservedValue = (float)0;
break;
}
// 判断:是固定值还是比例,固定金额需要乘以商品购买数量,比例根据商品实际支付价格的比例
if((int)$calculationType == 1) return (float)sprintf("%.2f",$currentSale['payment_amount'] * $deservedValue / 100);// 实际支付金额的比例
else return (float)sprintf("%.2f",$currentSale['total'] * $deservedValue);// 总数量 * 应得权重值 = 总应得权重值
}
/**
* Common: 获取排名奖
* Author: wu-hui
* Time: 2023/10/23 15:18
* @param $ladder
* @param $ranking
* @return float
*/
private function getRankGive($ladder,$ranking){
$ladderList = json_decode($ladder,true);
array_multisort(array_column($ladderList,'where'),SORT_ASC, $ladderList);
$weightValueNum = 0;
foreach($ladderList as $ladder){
if($ranking <= $ladder['where'] && $ranking > 0){
$weightValueNum = (float)$ladder['num'];
break;
}
}
return (float)$weightValueNum;
}
/**
* Common: 经销商升级赠送权重值 - 开始处理
* Author: wu-hui
@ -216,8 +281,11 @@ class WeightValue extends BaseModel{
*/
public function upgradeGiveInit($uid,$levelId){
\Log::debug('------经销商升级赠送权重值 - 开始处理------',['uid'=>$uid,'level_id'=>$levelId]);
$parents = $this->getParent($uid);// 获取当前用户及上级信息
$levelWvSet = $this->getLevelWeightValue($levelId);// 等级赠送设置信息
// 获取当前用户及上级信息
$agents = $this->getParent($uid);
$parents = array_merge($agents['current_user'],$agents['parents']);
// 等级赠送设置信息
$levelWvSet = $this->getLevelWeightValue($levelId);
if(!$levelWvSet){
\Log::debug('------经销商升级赠送权重值 - 错误 - 当前等级不存在设置信息------',$levelId);
return;
@ -243,7 +311,7 @@ class WeightValue extends BaseModel{
// 用户当前持有的权重值
$currentAgentHasWeightValue = (float)$parents[$agentKey]['weight_value']['quantity'] ?? 0;
// 获取当前用户应得的权重值
$weightValue = (float)sprintf("%.2f",$this->getWeightValue($levelWvSet,$agentInfo));
$weightValue = (float)sprintf("%.2f",$this->getGiveWeightValue($levelWvSet,$agentInfo));
// 应得权重值大于0 记录改变信息并且修改持有权重值
if((float)$weightValue > 0){
$changeAfter = sprintf("%.2f",($currentAgentHasWeightValue + $weightValue));
@ -286,6 +354,30 @@ class WeightValue extends BaseModel{
return $first ? $first->toArray() : [];
}
/**
* Common: 经销商升级赠送权重值 - 获取应得权重值
* Author: wu-hui
* Time: 2023/10/23 15:10
* @param $currentSale
* @param $agentInfo
* @return float|int
*/
private function getGiveWeightValue($currentSale,$agentInfo){
if((int)$currentSale['gift_type'] == 0){
// 赠送固定值
return (float)$currentSale['quantity'];
}else if($agentInfo['teamDividend']){
// 阶梯赠送 阶梯判断条件必须按照从大到小排序
return (float)$this->getRankGive($currentSale['ladder'],(int)$agentInfo['teamDividend']['ranking']);
}else {
return (float)0;
}
}
/**

View File

@ -3,17 +3,25 @@ define({
template:`
<div class="weight_value">
<el-form>
<div class="vue-main-title">
<div class="vue-main-title-left"></div>
<div class="vue-main-title-content">权重值设置</div>
</div>
<div style="margin:0 auto;width:80%;">
<el-form-item label="是否开启" label-width="155px">
<el-radio v-model="json.is_open" :label="0">关闭</el-radio>
<el-radio v-model="json.is_open" :label="1">开启</el-radio>
<div class="form-item_tips">仅存在经销商身份的用户可以获得权重值</div>
<div class="form-item_tips">代理商仅距离最近的第一个代理商有奖励</div>
</el-form-item>
<template v-if="json.is_open == 1">
</div>
<template v-if="json.is_open == 1">
<el-form-item label="是否开启自购" label-width="155px">
<el-radio v-model="json.is_self_purchase" :label="0">不开启</el-radio>
<el-radio v-model="json.is_self_purchase" :label="1">开启</el-radio>
<div class="form-item_tips">开启当前用户购买后根据当前用户的经销商等级进行赠送</div>
</el-form-item>
<div class="vue-main-title">
<div class="vue-main-title-left"></div>
<div class="vue-main-title-content">经纪人权重值设置</div>
</div>
<div style="margin:0 auto;width:80%;">
<el-form-item label="赠送方式" label-width="155px">
<el-radio v-model="json.gift_type" :label="0">普通赠送</el-radio>
<el-radio v-model="json.gift_type" :label="1">阶梯赠送</el-radio>
@ -23,36 +31,125 @@ define({
<el-form-item label="赠送级别" label-width="155px">
<el-radio v-model="json.lv_type" :label="0">二级</el-radio>
<el-radio v-model="json.lv_type" :label="1">三级</el-radio>
<div class="form-item_tips">二级赠送购买人购买人上级</div>
<div class="form-item_tips">三级赠送购买人购买人上级购买人上级的上级</div>
<div class="form-item_tips">二级赠送购买人上级</div>
<div class="form-item_tips">三级赠送购买人上级购买人上级的上级</div>
</el-form-item>
<el-form-item label="计算类型" label-width="155px">
<el-radio v-model="json.calculation_type" :label="0">固定值</el-radio>
<el-radio v-model="json.calculation_type" :label="1">支付比例</el-radio>
<div class="form-item_tips">固定值指定数量支付比例当前商品实际支付的比例</div>
</el-form-item>
<el-form-item label="赠送数量" v-if="json.gift_type != 1" label-width="155px" prop="quantity">
<el-input v-model.trim="json.quantity" maxlength="300" type="number">
<template slot="append">权重值</template>
<el-input v-model.trim="json.quantity" maxlength="300" type="number" style="width: 300px;">
<template slot="append">{{ json.calculation_type == 0 ? '权重值' : '%' }}</template>
</el-input>
<div class="form-item_tips">如果设置为空或者0则不赠送权重值</div>
</el-form-item>
<el-form-item label="阶梯赠送" v-else label-width="155px">
<div class="ladder-content">
<div class="ladder-row" v-for="(item,index) in json.ladder" :key="index">
<el-form-item>
<el-input class="ladder-input" v-model="json.ladder[index]['where']" placeholder="名次" type="number">
<template slot="prepend">小于等于</template>
<template slot="append"></template>
</el-input>
<el-input class="ladder-input" v-model="json.ladder[index]['num']" placeholder="权重值" type="number">
<template slot="prepend">赠送</template>
<template slot="append">{{ json.calculation_type == 0 ? '权重值' : '%' }}</template>
</el-input>
<el-button type="danger" size="medium" @click="delLadder(index)">删除</el-button>
</el-form-item>
</div>
<el-button type="primary" @click="addLadder">增加阶梯</el-button>
<div class="form-item_tips">例如设置小于等于10赠送100权重值小于等于32赠送120权重值则第1~10位经销商赠送100权重值第11~32位经销商赠送120权重值第33位及之后所有经销商均不赠送权重值</div>
</div>
</el-form-item>
</div>
<div class="vue-main-title">
<div class="vue-main-title-left"></div>
<div class="vue-main-title-content">代理商权重值设置</div>
</div>
<div style="margin:0 auto;width:80%;">
<el-form-item label="赠送方式" label-width="155px">
<el-radio v-model="json.agent_gift_type" :label="0">普通赠送</el-radio>
<el-radio v-model="json.agent_gift_type" :label="1">阶梯赠送</el-radio>
<div class="form-item_tips">普通赠送赠送指定的权重值</div>
<div class="form-item_tips">阶梯赠送根据用户成为经销商的时间顺序排序获取对应的权重值超过最大名次则不赠送权重值</div>
</el-form-item>
<el-form-item label="计算类型" label-width="155px">
<el-radio v-model="json.agent_calculation_type" :label="0">固定值</el-radio>
<el-radio v-model="json.agent_calculation_type" :label="1">支付比例</el-radio>
<div class="form-item_tips">固定值指定数量支付比例当前商品实际支付的比例</div>
</el-form-item>
<el-form-item label="赠送数量" v-if="json.agent_gift_type != 1" label-width="155px" prop="quantity">
<el-input v-model.trim="json.agent_quantity" maxlength="300" type="number" style="width: 300px;">
<template slot="append">{{ json.agent_calculation_type == 0 ? '权重值' : '%' }}</template>
</el-input>
<div class="form-item_tips">如果设置为空或者0则不赠送权重值</div>
</el-form-item>
<el-form-item label="阶梯赠送" v-else label-width="155px">
<div class="ladder-content">
<div class="ladder-row" v-for="(item,index) in json.agent_ladder" :key="index">
<el-form-item>
<el-input class="ladder-input" v-model="json.agent_ladder[index]['where']" placeholder="名次" type="number">
<template slot="prepend">小于等于</template>
<template slot="append"></template>
</el-input>
<el-input class="ladder-input" v-model="json.agent_ladder[index]['num']" placeholder="权重值" type="number">
<template slot="prepend">赠送</template>
<template slot="append">{{ json.agent_calculation_type == 0 ? '权重值' : '%' }}</template>
</el-input>
<el-button type="danger" size="medium" @click="delLadder(index,'agent')">删除</el-button>
</el-form-item>
</div>
<el-button type="primary" @click="addLadder('agent')">增加阶梯</el-button>
<div class="form-item_tips">例如设置小于等于10赠送100权重值小于等于32赠送120权重值则第1~10位经销商赠送100权重值第11~32位经销商赠送120权重值第33位及之后所有经销商均不赠送权重值</div>
</div>
</el-form-item>
</div>
<div class="vue-main-title">
<div class="vue-main-title-left"></div>
<div class="vue-main-title-content">省公司权重值设置</div>
</div>
<div style="margin:0 auto;width:80%;">
<el-form-item label="赠送方式" label-width="155px">
<el-radio v-model="json.province_gift_type" :label="0">普通赠送</el-radio>
<el-radio v-model="json.province_gift_type" :label="1">阶梯赠送</el-radio>
<div class="form-item_tips">普通赠送赠送指定的权重值</div>
<div class="form-item_tips">阶梯赠送根据用户成为经销商的时间顺序排序获取对应的权重值超过最大名次则不赠送权重值</div>
</el-form-item>
<el-form-item label="计算类型" label-width="155px">
<el-radio v-model="json.province_calculation_type" :label="0">固定值</el-radio>
<el-radio v-model="json.province_calculation_type" :label="1">支付比例</el-radio>
<div class="form-item_tips">固定值指定数量支付比例当前商品实际支付的比例</div>
</el-form-item>
<el-form-item label="赠送数量" v-if="json.province_gift_type != 1" label-width="155px" prop="quantity">
<el-input v-model.trim="json.province_quantity" maxlength="300" type="number" style="width: 300px;">
<template slot="append">{{ json.province_calculation_type == 0 ? '权重值' : '%' }}</template>
</el-input>
<div class="form-item_tips">如果设置为空或者0则不赠送权重值</div>
</el-form-item>
<el-form-item label="阶梯赠送" v-else label-width="155px">
<div class="ladder-content">
<div class="ladder-row" v-for="(item,index) in json.ladder" :key="index">
<div class="ladder-row" v-for="(item,index) in json.province_ladder" :key="index">
<el-form-item>
<el-input class="ladder-input" v-model="json.ladder[index]['where']" placeholder="名次" type="number">
<el-input class="ladder-input" v-model="json.province_ladder[index]['where']" placeholder="名次" type="number">
<template slot="prepend">小于等于</template>
<template slot="append"></template>
</el-input>
<el-input class="ladder-input" v-model="json.ladder[index]['num']" placeholder="权重值" type="number">
<el-input class="ladder-input" v-model="json.province_ladder[index]['num']" placeholder="权重值" type="number">
<template slot="prepend">赠送</template>
<template slot="append">权重值</template>
<template slot="append">{{ json.province_calculation_type == 0 ? '权重值' : '%' }}</template>
</el-input>
<el-button type="danger" size="medium" @click="delLadder(index)">删除</el-button>
<el-button type="danger" size="medium" @click="delLadder(index,'province')">删除</el-button>
</el-form-item>
</div>
<el-button type="primary" @click="addLadder">增加阶梯</el-button>
<el-button type="primary" @click="addLadder('province')">增加阶梯</el-button>
<div class="form-item_tips">例如设置小于等于10赠送100权重值小于等于32赠送120权重值则第1~10位经销商赠送100权重值第11~32位经销商赠送120权重值第33位及之后所有经销商均不赠送权重值</div>
</div>
</el-form-item>
</template>
</div>
</div>
</template>
</el-form>
</div>
`,
@ -78,39 +175,123 @@ define({
return {
json: {
is_open: 0,// 是否开启购买商品赠送权重值0=未开启1=开启
is_self_purchase: 0,// 是否开启自购0=不开启1=开启
gift_type: 0,// 赠送方式0=赠送固定值1=阶梯值赠送
lv_type: 0,// 赠送方式0=二级1=三级
calculation_type: 0,// 计算类型0=固定值1=支付比例
quantity: 0,// 赠送数量
ladder: {},// 阶梯赠送信息
agent_gift_type: 0,// 赠送方式0=赠送固定值1=阶梯值赠送
agent_calculation_type: 0,// 计算类型0=固定值1=支付比例
agent_quantity: 0,// 赠送数量
agent_ladder: {},// 阶梯赠送信息
province_gift_type: 0,// 赠送方式0=赠送固定值1=阶梯值赠送
province_calculation_type: 0,// 计算类型0=固定值1=支付比例
province_quantity: 0,// 赠送数量
province_ladder: {},// 阶梯赠送信息
}
}
},
watch: { },
mounted() {
console.log(this.form);
if (this.form) {
let weight_value = this.form || {};
console.log('商品权重值设置信息');
console.log(weight_value);
this.json.is_open = weight_value.is_open ? weight_value.is_open : 0;
this.json.is_self_purchase = weight_value.is_self_purchase ? weight_value.is_self_purchase : 0;
this.json.gift_type = weight_value.gift_type ? weight_value.gift_type : 0;
this.json.lv_type = weight_value.lv_type ? weight_value.lv_type : 0;
this.json.calculation_type = weight_value.calculation_type ? weight_value.calculation_type : 0;
this.json.quantity = weight_value.quantity ? weight_value.quantity : 0;
this.json.ladder = weight_value.ladder ? JSON.parse(weight_value.ladder) : {};
}
console.log(this.json);
this.json.agent_gift_type = weight_value.agent_gift_type ? weight_value.agent_gift_type : 0;
this.json.agent_calculation_type = weight_value.agent_calculation_type ? weight_value.agent_calculation_type : 0;
this.json.agent_quantity = weight_value.agent_quantity ? weight_value.agent_quantity : 0;
this.json.agent_ladder = weight_value.agent_ladder ? JSON.parse(weight_value.agent_ladder) : {};
this.json.province_gift_type = weight_value.province_gift_type ? weight_value.province_gift_type : 0;
this.json.province_calculation_type = weight_value.province_calculation_type ? weight_value.province_calculation_type : 0;
this.json.province_quantity = weight_value.province_quantity ? weight_value.province_quantity : 0;
this.json.province_ladder = weight_value.province_ladder ? JSON.parse(weight_value.province_ladder) : {};
}
},
methods:{
addLadder(){
this.json.ladder = Object.values(this.json.ladder).concat({where: '', num: ''});
addLadder(type = ''){
if(type === 'agent') this.json.agent_ladder = Object.values(this.json.agent_ladder).concat({where: '', num: ''});
else if(type === 'province') this.json.province_ladder = Object.values(this.json.province_ladder).concat({where: '', num: ''});
else this.json.ladder = Object.values(this.json.ladder).concat({where: '', num: ''});
},
delLadder(index){
let ladder = Object.assign({},this.json.ladder);
delLadder(index,type = ''){
let ladder = {};
if(type === 'agent') ladder = Object.assign({},this.json.agent_ladder);
else if(type === 'province') ladder = Object.assign({},this.json.province_ladder);
else ladder = Object.assign({},this.json.ladder);
delete ladder[index];
this.json.ladder = Object.values(ladder);
if(type === 'agent') this.json.agent_ladder = Object.values(ladder);
else if(type === 'province') this.json.province_ladder = Object.values(ladder);
else this.json.ladder = Object.values(ladder);
},
validate(){
let json = this.json;
// console.log("权重值信息处理 - validate");
// console.log(json);
if(parseInt(json.calculation_type) === 1){
if(json.gift_type == 1){
let isPass = false;
Object.values(json.ladder).forEach((item,index)=>{
if(item.num <= 0 || item.num > 100) isPass = true;
});
if(isPass) {
this.$message.error('经纪人设置-赠送数量比例不能小于等于0或者大于100')
return false
}
}else{
if(json.quantity <= 0 || json.quantity > 100){
this.$message.error('经纪人设置-赠送数量比例不能小于等于0或者大于100')
return false
}
}
}
if(parseInt(json.agent_calculation_type) === 1){
if(json.agent_gift_type == 1){
let isPass = false;
Object.values(json.agent_ladder).forEach((item,index)=>{
if(item.num <= 0 || item.num > 100) isPass = true;
});
if(isPass) {
this.$message.error('代理商设置-赠送数量比例不能小于等于0或者大于100')
return false
}
}else{
if(json.agent_quantity <= 0 || json.agent_quantity > 100){
this.$message.error('代理商设置-赠送数量比例不能小于等于0或者大于100')
return false
}
}
}
if(parseInt(json.province_calculation_type) === 1){
if(json.province_gift_type == 1){
let isPass = false;
Object.values(json.province_ladder).forEach((item,index)=>{
if(item.num <= 0 || item.num > 100) isPass = true;
});
if(isPass) {
this.$message.error('省公司设置-赠送数量比例不能小于等于0或者大于100')
return false
}
}else{
if(json.province_quantity <= 0 || json.province_quantity > 100){
this.$message.error('省公司设置-赠送数量比例不能小于等于0或者大于100')
return false
}
}
}
return this.json;
}
}