加上售中下单逻辑,修改账号渠道,进粉统计的渠道和下单时保持一致

This commit is contained in:
xiezhijun 2021-06-01 19:24:40 +08:00
parent 783fd6fe3b
commit 77a8668b5d
23 changed files with 474 additions and 70 deletions

View File

@ -154,12 +154,12 @@ public class SysImportFanRecordController extends BaseController
*/
@PreAuthorize("@ss.hasPermi('custom:importFanRecord:add')")
@GetMapping(value = "/getWxAccountAndSale")
public AjaxResult getWxAccountAndSale(SysImportFanWxAccount sysImportFanWxAccount){
public AjaxResult getWxAccountAndSale(SysWxSaleAccount sysWxSaleAccount){
Map<String, Object> result = new HashMap<>();
List<SysWxSaleAccount> list = sysWxSaleAccountService.getWxAccountAndSale();
List<Map<String,Object>> fanNumList = sysImportFanWxAccountService.getTotalImportFanNum(sysImportFanWxAccount);
List<SysWxSaleAccount> list = sysWxSaleAccountService.getWxAccountAndSale(sysWxSaleAccount);
//List<Map<String,Object>> fanNumList = sysImportFanWxAccountService.getTotalImportFanNum(sysImportFanWxAccount);
result.put("wxSaleAccountList", list);
result.put("fanNumList", fanNumList);
//result.put("fanNumList", fanNumList);
return AjaxResult.success(result);
}

View File

@ -162,6 +162,9 @@ public class SysOrderController extends OrderBaseController {
if (user.getUserId().equals(order.getOperatorAssisId())) {
order.setOperatorAssis(user.getNickName());
}
if (user.getUserId().equals(order.getPushPreSaleId())) {
order.setPushPreSale(user.getNickName());
}
}
order.setOrderTypeName(OrderUtils.getOrderTypeName(order));
}

View File

@ -39,4 +39,7 @@ public class SysImportFanWxAccount extends BaseEntity
//导粉日期
@JsonFormat(pattern = "yyyy-MM-dd")
private Date importFanDate;
//售前
private Long preSaleId;
}

View File

@ -84,6 +84,17 @@ public class SysOrder extends BaseEntity {
@Excel(name = "售前")
private String preSale;
/**
* 售前推送人售中一开单才存在
*/
//@Excel(name = "售前推送人")
private Long pushPreSaleId;
/**
* 售前推送人售中一开单才存在
*/
private String pushPreSale;
/** 售中ID */
private Long onSaleId;

View File

@ -45,6 +45,12 @@ public class SysWxSaleAccount extends BaseEntity
private Integer useCount;
//进粉渠道
private Integer channel;
//销售ID
private Long saleId;
//销售昵称
private String saleName;
}

View File

@ -76,5 +76,5 @@ public interface SysWxSaleAccountMapper
* 获取可接粉的微信号以及分配的销售昵称
* @return
*/
List<SysWxSaleAccount> getWxAccountAndSale();
List<SysWxSaleAccount> getWxAccountAndSale(SysWxSaleAccount sysWxSaleAccount);
}

View File

@ -77,5 +77,5 @@ public interface ISysWxSaleAccountService
* 获取可接粉的微信号以及分配的销售昵称
* @return
*/
List<SysWxSaleAccount> getWxAccountAndSale();
List<SysWxSaleAccount> getWxAccountAndSale(SysWxSaleAccount sysWxSaleAccount);
}

View File

@ -105,7 +105,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
row = sysOrderMapper.insertSysOrder(sysOrder);
//需要自动创建售后二开提成单
if(row > 0 && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
autoCreateSecondAfterSaleOrder(sysOrder);
row = autoCreateSecondAfterSaleOrder(sysOrder);
}
}else{
row = sysOrderMapper.insertSysOrder(sysOrder);
@ -143,7 +143,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
//二开是否需要自动创建售后二开提成单
if(row > 0 && "1".equals(sysOrder.getOrderCountType()) && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
sysOrder.setAmount(amount);
autoCreateSecondAfterSaleOrder(sysOrder);
row = autoCreateSecondAfterSaleOrder(sysOrder);
}
}
//体验单
@ -155,6 +155,64 @@ public class SysOrderServiceImpl implements ISysOrderService {
sysOrder.setNutriAssisId(null);
row = sysOrderMapper.insertSysOrder(sysOrder);
}
//售中单
else if("3".equals(sysOrder.getOrderType())){
sysOrder.setPreSaleId(null);
//一开二开
if("0".equals(sysOrder.getOrderCountType()) || "1".equals(sysOrder.getOrderCountType())){
sysOrder.setNutritionistId((sysOrder.getNutritionistIdList() != null && sysOrder.getNutritionistIdList().length > 0) ? sysOrder.getNutritionistIdList()[0] : null);
sysOrder.setMainOrderId(0L);
sysOrder.setAfterSaleCommissOrder(0);
if("0".equals(sysOrder.getOrderCountType())){
row = sysOrderMapper.insertSysOrder(sysOrder);
}else{
//二开单不存在售前推荐人
sysOrder.setPushPreSaleId(null);
row = sysOrderMapper.insertSysOrder(sysOrder);
//需要自动创建售后二开提成单
if(row > 0 && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
row = autoCreateSecondAfterSaleOrder(sysOrder);
}
}
}else{
sysOrder.setAfterSaleCommissOrder(0);
String rate = sysOrder.getNutritionistRate();
if(StringUtils.isEmpty(rate) || rate.indexOf(",") == -1 || "0,10".equals(rate) || sysOrder.getNutritionistIdList().length != 2){
return 0;
}
String[] rateArray = rate.split(",");
if(Integer.parseInt(rateArray[0]) + Integer.parseInt(rateArray[1]) != 10){
return 0;
}
BigDecimal amount = sysOrder.getAmount();
//获取主单的数组下标
int mainIndex = 0;
if(Integer.parseInt(rateArray[1]) > Integer.parseInt(rateArray[0])){
mainIndex = 1;
}
//添加主单
sysOrder.setNutritionistId(sysOrder.getNutritionistIdList()[mainIndex]);
sysOrder.setAmount(BigDecimal.valueOf(amount.doubleValue()*Integer.parseInt(rateArray[mainIndex])/10));
sysOrder.setMainOrderId(0L);
//拆分二开单
if("3".equals(sysOrder.getOrderCountType())){
//二开单不存在售前推荐人
sysOrder.setPushPreSaleId(null);
}
row = sysOrderMapper.insertSysOrder(sysOrder);
//添加副单
sysOrder.setMainOrderId(sysOrder.getOrderId());
sysOrder.setOrderId(sysOrder.getOrderId()+1);
sysOrder.setNutritionistId(sysOrder.getNutritionistIdList()[1-mainIndex]);
sysOrder.setAmount(BigDecimal.valueOf(amount.doubleValue()*Integer.parseInt(rateArray[1-mainIndex])/10));
row = sysOrderMapper.insertSysOrder(sysOrder);
//拆分二开单
if(row > 0 && "3".equals(sysOrder.getOrderCountType()) && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
sysOrder.setAmount(amount);
row = autoCreateSecondAfterSaleOrder(sysOrder);
}
}
}
return row;
}
@ -166,6 +224,8 @@ public class SysOrderServiceImpl implements ISysOrderService {
private int autoCreateSecondAfterSaleOrder(SysOrder sysOrder){
if(sysOrder != null){
sysOrder.setPreSaleId(sysOrder.getAfterSaleId());
sysOrder.setOnSaleId(null);
sysOrder.setPushPreSaleId(null);
sysOrder.setAfterSaleId(null);
sysOrder.setNutritionistId(null);
sysOrder.setNutriAssisId(null);
@ -173,6 +233,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
sysOrder.setPlannerAssisId(null);
sysOrder.setOperatorId(null);
sysOrder.setOperatorAssisId(null);
sysOrder.setMainOrderId(0L);
sysOrder.setAfterSaleCommissOrder(1);
sysOrder.setOrderId(sysOrder.getOrderId()+1);
return sysOrderMapper.insertSysOrder(sysOrder);
@ -208,6 +269,9 @@ public class SysOrderServiceImpl implements ISysOrderService {
sysOrder.setOperatorId(null);
sysOrder.setOperatorAssisId(null);
}
if("3".equals(sysOrder.getOrderType())){
sysOrder.setPreSaleId(null);
}
if(oldSysOrder.getStartTime() == null){//确保提成计算时间不为空
sysOrder.setCommissStartTime(sysOrder.getOrderTime());
}
@ -313,7 +377,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
for (SysOrder sysOrder : orderList) {
LocalDate newStartTime = null;
//判断是否提成单拆分单中的副单体验单,定金单
if(sysOrder.getStartTime() == null || sysOrder.getAfterSaleCommissOrder().intValue() == 1 || ("1".equals(sysOrder.getOrderType()) && sysOrder.getMainOrderId().intValue() != 0) ||
if(sysOrder.getStartTime() == null || sysOrder.getAfterSaleCommissOrder().intValue() == 1 || sysOrder.getMainOrderId().intValue() != 0 ||
"2".equals(sysOrder.getOrderType()) || "1".equals(sysOrder.getOrderMoneyType())){
continue;
}

View File

@ -170,7 +170,7 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
continue;
}
//判断是否提成单拆分单中的副单体验单,定金单
if (sysOrder.getAfterSaleCommissOrder().intValue() == 1 || ("1".equals(sysOrder.getOrderType()) && sysOrder.getMainOrderId().intValue() != 0) ||
if (sysOrder.getAfterSaleCommissOrder().intValue() == 1 || sysOrder.getMainOrderId().intValue() != 0 ||
// "2".equals(sysOrder.getOrderType()) || // 体验单也需要生成计划 2021.05.29
"1".equals(sysOrder.getOrderMoneyType()) || sysOrder.getCounted() == 1) {
System.out.println("---------------------" + sysOrder.getOrderId() + "不生成食谱------------------------");

View File

@ -136,7 +136,7 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService {
* @param sysWxSaleAccount
* @return
*/
public List<SysWxSaleAccount> getWxAccountAndSale(){
return sysWxSaleAccountMapper.getWxAccountAndSale();
public List<SysWxSaleAccount> getWxAccountAndSale(SysWxSaleAccount sysWxSaleAccount){
return sysWxSaleAccountMapper.getWxAccountAndSale(sysWxSaleAccount);
}
}

View File

@ -4,9 +4,9 @@ import com.stdiet.custom.domain.SysOrder;
public class OrderUtils {
private static final String[] orderTypeArray = {"普通单","比例拆分单","体验单"};
private static final String[] orderTypeArray = {"普通单","比例拆分单","体验单","售中单"};
private static final String[] orderCountTypeArray = {"一开单","二开单"};
private static final String[] orderCountTypeArray = {"一开单","二开单","一开单(拆分)","二开单(拆分)"};
private static final String[] orderMoneyTypeArray = {"全款单","定金单","尾款单"};
@ -27,7 +27,7 @@ public class OrderUtils {
orderTypeName += "/"+orderCountTypeArray[Integer.parseInt(sysOrder.getOrderCountType())];
orderTypeName += "/"+orderMoneyTypeArray[Integer.parseInt(sysOrder.getOrderMoneyType())];
//判断是不是二开提成单
if("1".equals(sysOrder.getOrderCountType()) && sysOrder.getAfterSaleCommissOrder().intValue() == 1){
if(sysOrder.getAfterSaleCommissOrder() != null && sysOrder.getAfterSaleCommissOrder().intValue() == 1){
orderTypeName += "/提成单";
}
return orderTypeName;

View File

@ -41,6 +41,7 @@
<result property="serverEndTime" column="server_end_time"/>
<result property="becomeFanTime" column="become_fan_time"/>
<result property="pushPreSaleId" column="push_pre_sale_id" />
<result property="onSaleId" column="on_sale_id"/>
<result property="orderType" column="order_type"/>
<result property="orderCountType" column="order_count_type"/>
@ -63,7 +64,7 @@
o.serve_time_id, o.pay_type_id, pay.dict_label as pay_type, o.pre_sale_id, o.create_by, o.create_time, o.after_sale_id, o.update_by, o.update_time,
o.nutritionist_id, o.remark, o.nutri_assis_id, o.account_id, acc.dict_label as account, o.planner_id, o.planner_assis_id, o.operator_id, o.operator_assis_id,
o.recommender, o.order_time,o.give_serve_day,o.conditioning_project_id,cp.dict_label as conditioning_project,o.server_end_time,
o.on_sale_id,o.order_type,o.order_count_type,o.order_money_type,o.main_order_id,o.after_sale_commiss_order,o.commiss_start_time, o.counted
o.on_sale_id,o.order_type,o.order_count_type,o.order_money_type,o.main_order_id,o.after_sale_commiss_order,o.commiss_start_time, o.counted,o.push_pre_sale_id
from sys_order o
LEFT JOIN sys_customer sc ON sc.id = o.cus_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_pay_type') AS pay ON pay.dict_value = o.pay_type_id
@ -227,6 +228,7 @@
<if test="operatorId != null">operator_id,</if>
<if test="serveTimeId != null">serve_time_id,</if>
<if test="recommender != null">recommender,</if>
<if test="pushPreSaleId != null">push_pre_sale_id,</if>
<if test="amount != null">amount,</if>
<if test="orderTime != null">order_time,</if>
<if test="createBy != null">create_by,</if>
@ -270,6 +272,7 @@
<if test="operatorId != null">#{operatorId},</if>
<if test="serveTimeId != null">#{serveTimeId},</if>
<if test="recommender != null">#{recommender},</if>
<if test="pushPreSaleId != null">#{pushPreSaleId},</if>
<if test="amount != null">#{amount},</if>
<if test="orderTime != null">#{orderTime},</if>
<if test="createBy != null">#{createBy},</if>
@ -316,6 +319,7 @@
<if test="operatorId != null">operator_id = #{operatorId},</if>
<if test="serveTimeId != null">serve_time_id = #{serveTimeId},</if>
<if test="recommender != null">recommender = #{recommender},</if>
<if test="pushPreSaleId != null">push_pre_sale_id = #{pushPreSaleId},</if>
<if test="amount != null">amount = #{amount},</if>
<if test="orderTime != null">order_time = #{orderTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
@ -387,6 +391,7 @@
<result property="serverEndTime" column="server_end_time"/>
<result property="becomeFanTime" column="become_fan_time"/>
<result property="pushPreSaleId" column="push_pre_sale_id" />
<result property="onSaleId" column="on_sale_id"/>
<result property="orderType" column="order_type"/>
<result property="orderCountType" column="order_count_type"/>

View File

@ -35,7 +35,7 @@
FROM sys_wx_distribution AS swd
lEFT JOIN sys_wx_sale_account swsa ON swsa.id = swd.wechat_account and swsa.del_flag = 0
LEFT JOIN sys_user su ON su.user_id = swd.user_id AND su.del_flag = 0
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'fan_channel') AS acc ON acc.dict_value = swd.account_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_account') AS acc ON acc.dict_value = swd.account_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'sale_group') AS asg ON asg.dict_value = swd.sale_group_id
where swd.del_flag = 0
</sql>

View File

@ -37,7 +37,7 @@
left join sys_wx_sale_account swsa on swsa.id = swfs.wx_id and swsa.del_flag = 0
left join sys_wx_distribution swd on swd.wechat_account = swfs.wx_id and swd.del_flag = 0
left join sys_user su on su.user_id = swd.user_id and su.del_flag = 0
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'fan_channel') AS acc ON acc.dict_value = swd.account_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_account') AS acc ON acc.dict_value = swd.account_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'sale_group') AS asg ON asg.dict_value = swd.sale_group_id
</sql>

View File

@ -145,6 +145,15 @@
left join sys_wx_distribution swd on wa.id = swd.wechat_account and swd.del_flag = 0
LEFT JOIN sys_user su ON su.user_id = swd.user_id AND su.del_flag = 0
where wa.del_flag = 0 and wa.status = 0
<if test="saleId != null">
and swd.user_id = #{saleId}
</if>
<if test="wxAccount != null and wxAccount != ''">
and wa.wx_account like concat('%',#{wxAccount},'%')
</if>
<if test="channel != null">
and swd.account_id = #{channel}
</if>
order by su.user_id asc
</select>

View File

@ -1,15 +1,56 @@
<template>
<!-- -->
<!-- 添加或修改导粉管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1000px" :close-on-click-modal="false" append-to-body @closed="cancel">
<div style="margin-bottom: 20px;color:red">1添加导粉记录时会根据进粉渠道当前时间来自动确定所属直播间当前时间段没有直播则取上一次直播若账号从未直播过则为空</div>
<el-dialog :title="title" :visible.sync="open" width="1050px" :close-on-click-modal="false" append-to-body @closed="cancel">
<!--<div style="margin-bottom: 20px;color:red">1添加导粉记录时会根据进粉渠道当前时间来自动确定所属直播间当前时间段没有直播则取上一次直播若账号从未直播过则为空</div>-->
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
<!--<el-form-item label="账号渠道" prop="channel">
<el-select
v-model="queryParams.channel"
placeholder="请选择账号渠道"
clearable
filterable
size="small"
>
<el-option
v-for="dict in fanChanneloptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="parseInt(dict.dictValue)"
/>
</el-select>
</el-form-item>-->
<el-form-item label="销售" prop="saleId" label-width="50px">
<el-select
v-model="queryParams.saleId"
placeholder="请选择销售"
clearable
filterable
size="small"
>
<el-option
v-for="dict in preSaleIdOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="parseInt(dict.dictValue)"
/>
</el-select>
</el-form-item>
<el-form-item label="微信账号" prop="wxAccount">
<el-input v-model.trim="queryParams.wxAccount" placeholder="请输入微信号" />
</el-form-item>
<el-form-item>
<el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<div style="height: 500px; overflow: auto">
<el-table v-loading="loading" :data="wxAccountList">
<!--<el-table-column label="微信昵称" align="center" prop="wxNickName" />-->
<el-table-column label="微信号" align="center" prop="wxAccount" width="160"/>
<el-table-column label="销售" align="center" prop="saleName" width="120"/>
<el-table-column label="已导粉数量" align="center" prop="importFanNum" width="120"/>
<el-table-column label="进粉渠道" align="center" prop="importFanChannel" >
<!--<el-table-column label="已导粉数量" align="center" prop="importFanNum" width="120"/>-->
<el-table-column label="账号渠道" align="center" prop="importFanChannel" width="180">
<template slot-scope="scope">
<el-select
v-model="scope.row.importFanChannel"
@ -46,7 +87,23 @@
</el-select>
</template>
</el-table-column>-->
<el-table-column label="导粉数量" align="center" prop="fanNum" width="200">
<el-table-column label="导粉时间" align="center" prop="fanTime" width="240">
<template slot-scope="scope">
<el-date-picker
v-model="scope.row.fanTime"
type="datetime"
placeholder="选择导粉时间"
format="yyyy-MM-dd HH:mm"
value-format="yyyy-MM-dd HH:mm"
:picker-options="fanPickerOptions"
@change="autoSelectLive(scope.row)"
>
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="导粉数量" align="center" prop="fanNum" width="180">
<template slot-scope="scope">
<el-input-number v-model="scope.row.fanNum" :min="1" :max="10000" label="导粉数量" style="width:160px"></el-input-number>
</template>
@ -76,6 +133,7 @@
<script>
import { addImportFanRecord,getWxAccountAndSale } from "@/api/custom/importFanRecord";
import { getAllLiveSchedulByDate,getLiveSchedulByTime } from "@/api/custom/liveSchedul";
import { mapGetters } from "vuex";
import dayjs from "dayjs";
const nowTime = dayjs().format("YYYY-MM-DD HH:mm");
export default {
@ -107,12 +165,28 @@ export default {
//
fanNumList:[],
//
importFanFlag: false
importFanFlag: false,
queryParams:{
channel: null,
saleId: null,
wxAccount: null
},
fanPickerOptions: {
disabledDate(time) {
return time.getTime() > Date.now() || time.getTime() < Date.now();
},
},
};
},
created(){
},
computed: {
...mapGetters([
//
"preSaleIdOptions"
]),
},
methods: {
showDialog(data, callback, fanChanneloptions) {
@ -149,18 +223,29 @@ export default {
//
getListWxAccount() {
this.loading = true;
getWxAccountAndSale({'importFanDate': this.data.importFanDate}).then((response) => {
getWxAccountAndSale(this.queryParams).then((response) => {
response.data.wxSaleAccountList.forEach((item,index) => {
item.fanNum = 1;
item.importFanNum = this.getTotalFanNum(response.data.fanNumList, item.id);
//item.importFanNum = this.getTotalFanNum(response.data.fanNumList, item.id);
item.importFanChannel = null;
item.importFanLive = null;
item.fanTime = null;
});
this.wxAccountList = response.data.wxSaleAccountList;
this.fanNumList = response.data.fanNumList;
//this.fanNumList = response.data.fanNumList;
this.loading = false;
});
},
handleQuery(){
this.getListWxAccount();
},
resetQuery(){
this.queryParams = {
channel: null,
saleId: null,
wxAccount: null
};
},
getAllLiveSchedulByDate(){
getAllLiveSchedulByDate({'liveSchedulDate':this.data.importFanDate}).then((response) => {
response.data.forEach((item,index) => {
@ -186,7 +271,15 @@ export default {
if(row.importFanChannel == undefined || row.importFanChannel == null || row.importFanChannel == ""){
this.$message({
type: 'warning',
message: '进粉渠道不能为空',
message: '账号渠道不能为空',
center: true
});
return;
}
if(row.fanTime == undefined || row.fanTime == null || row.fanTime == ""){
this.$message({
type: 'warning',
message: '导粉时间不能为空',
center: true
});
return;
@ -273,7 +366,7 @@ export default {
row.importFanLive = null;
return;
}
getLiveSchedulByTime({'fanChannel':row.importFanChannel,'liveStartTimeString':encodeURIComponent(dayjs().format("YYYY-MM-DD HH:mm"))}).then((response) => {
getLiveSchedulByTime({'fanChannel':row.importFanChannel,'liveStartTimeString':encodeURIComponent(row.fanTime)}).then((response) => {
if (response.code === 200) {
let live = response.data;
if(live != undefined && live != null){

View File

@ -111,8 +111,8 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="售前" prop="preSaleId">
<el-col :span="8" v-show="preSaleShow">
<el-form-item label="售前" prop="preSaleId" >
<el-select v-model="form.preSaleId" placeholder="请选择" filterable
clearable>
<el-option
@ -124,7 +124,20 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" v-show="!afterNutiShow">
<el-col :span="8" v-show="pushPreSaleShow">
<el-form-item label="售前推送" prop="preSaleId" title="售前推送人就是该客户体验单的销售,只有售中一开单需要选择">
<el-select v-model="form.pushPreSaleId" placeholder="请选择" filterable
clearable>
<el-option
v-for="dict in preSaleIdOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="parseInt(dict.dictValue)"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" v-show="onSaleShow">
<el-form-item label="售中" prop="onSaleId">
<el-select v-model="form.onSaleId" placeholder="请选择">
<el-option
@ -243,11 +256,11 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<!--<el-col :span="8">
<el-form-item label="推荐人" prop="recommender">
<el-input v-model="form.recommender" placeholder="请输入推荐人" />
</el-form-item>
</el-col>
</el-col>-->
<el-col :span="10">
<el-form-item label="成交时间" prop="orderTime">
<el-date-picker
@ -263,7 +276,7 @@
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="服务开始时间" prop="startTime" label-width="120">
<el-form-item label="服务开始时间" prop="startTime" label-width="180">
<el-date-picker
style="width: 182.5px"
v-model="form.startTime"
@ -347,11 +360,15 @@ export default {
visible: false,
//
rules: {
customer: [
/*customer: [
{ required: true, message: "客户姓名不能为空", trigger: "blur" },
],
],*/
amount: [{ required: true, message: "金额不能为空", trigger: "blur" }],
phone: [
/*payTypeId: [{ required: true, message: "", trigger: "blur" }],
accountId: [{ required: true, message: "渠道不能为空", trigger: "blur" }],
serveTime: [{ required: true, message: "服务时间不能为空", trigger: "blur" }],
conditioningProjectId: [{ required: true, message: "服务项目不能为空", trigger: "blur" }],*/
/*phone: [
{ required: true, message: "手机号不能为空", trigger: "blur" },
{
required: true,
@ -359,7 +376,7 @@ export default {
pattern: /^[0-9]{5,11}$/,
message: "手机号格式不正确",
},
],
],*/
orderTime: [
{ required: true, message: "成交时间不能为空", trigger: "blur" },
{ required: true, trigger: "blur", validator: checkOrderTime },
@ -425,6 +442,7 @@ export default {
return time.getTime() < Date.now();
},
},
data: null,
//
payTypeIdOptions: [],
//
@ -444,7 +462,14 @@ export default {
secondAfterSaleFlagShow: false,
//
orderRateOptions: orderTypeData["orderRateArray"],
//
orderRateOptionsShow: false,
//
preSaleShow: true,
//
onSaleShow: false,
//()
pushPreSaleShow: false,
//
afterNutiShow: true,
};
@ -518,7 +543,7 @@ export default {
// this.data = data;
this.callback = callback;
this.reset(data);
this.data = data;
this.title = `${data.orderId ? "修改" : "创建"}${
data.customer
}客户订单`;
@ -527,15 +552,15 @@ export default {
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (valid && this.validateAddOrder()) {
if (this.form.orderId != null) {
updateOrder(this.form).then((response) => {
/*updateOrder(this.form).then((response) => {
if (response.code === 200) {
this.msgSuccess("修改成功");
this.visible = false;
this.callback && this.callback();
}
});
});*/
} else {
addOrder(this.form).then((response) => {
if (response.code === 200) {
@ -548,6 +573,88 @@ export default {
}
});
},
//
validateAddOrder(){
//
if(this.form.orderTypeList[0] == 0 || this.form.orderTypeList[0] == 1){
//
if(this.form.preSaleId == null || this.form.preSaleId <= 0 || this.form.afterSaleId == null || this.form.afterSaleId <= 0
|| this.form.nutriAssisId == null || this.form.nutriAssisId <= 0){
this.$message({
type: 'warning',
message: '售前、售后、营养师助理不能为空',
center: true
});
return false;
}
//
if(this.form.orderTypeList[0] == 0){
if(this.form.nutritionistIdList == null || this.form.nutritionistIdList.length != 1 || this.form.nutritionistIdList[0] <= 0){
this.$message({
type: 'warning',
message: '营养师不能为空,普通单只能选择一个营养师',
center: true
});
return false;
}
}else{
if(this.form.nutritionistIdList == null || this.form.nutritionistIdList.length != 2 || this.form.nutritionistIdList[0] <= 0 || this.form.nutritionistIdList[1] <= 0){
this.$message({
type: 'warning',
message: '营养师不能为空,拆分单需要选择两个营养师',
center: true
});
return false;
}
}
}
//
else if(this.form.orderTypeList[0] == 2){
//
if(this.form.preSaleId == null || this.form.preSaleId <= 0 || this.form.onSaleId == null || this.form.onSaleId <= 0){
this.$message({
type: 'warning',
message: '售前、售中不能为空',
center: true
});
return false;
}
}
//
else if(this.form.orderTypeList[0] == 3){
//
if(this.form.onSaleId == null || this.form.onSaleId <= 0 || this.form.afterSaleId == null || this.form.afterSaleId <= 0
|| this.form.nutriAssisId == null || this.form.nutriAssisId <= 0){
this.$message({
type: 'warning',
message: '售中、售后、营养师助理不能为空',
center: true
});
return false;
}
//
if(this.form.orderTypeList[1] == 0 || this.form.orderTypeList[1] == 1){
if(this.form.nutritionistIdList == null || this.form.nutritionistIdList.length != 1 || this.form.nutritionistIdList[0] <= 0){
this.$message({
type: 'warning',
message: '营养师不能为空,普通单只能选择一个营养师',
center: true
});
return false;
}
}else{
if(this.form.nutritionistIdList == null || this.form.nutritionistIdList.length != 2 || this.form.nutritionistIdList[0] <= 0 || this.form.nutritionistIdList[1] <= 0){
this.$message({
type: 'warning',
message: '营养师不能为空,拆分单需要选择两个营养师',
center: true
});
return false;
}
}
}
return true;
},
reset(obj = {}) {
const defaultPayType = this.payTypeIdOptions.find(
(opt) => opt.remark === "default"
@ -614,6 +721,7 @@ export default {
pauseTime: null,
payTypeId: defaultPayType ? parseInt(defaultPayType.dictValue) : null,
preSaleId: defaultPresale ? parseInt(defaultPresale.dictValue) : null,
pushPreSaleId: null,
createBy: null,
createTime: null,
onSaleId: null,
@ -696,7 +804,7 @@ export default {
// },
"form.orderTypeList": function (newVal, oldVal) {
//
if (newVal[1] == 1) {
if (newVal[1] == 1 || newVal[1] == 3) {
this.form.secondAfterSaleFlag = 1;
this.secondAfterSaleFlagShow = true;
} else {
@ -704,7 +812,7 @@ export default {
this.secondAfterSaleFlagShow = false;
}
//
if (newVal[0] == 1) {
if (newVal[0] == 1 || newVal[1] == 2 || newVal[1] == 3) {
this.orderRateOptionsShow = true;
this.form.nutritionistRate = "2,8";
} else {
@ -713,15 +821,40 @@ export default {
}
//
if (newVal[0] == 2) {
this.afterNutiShow = false;
this.form.onSaleId = parseInt(this.onSaleIdOptions[1].dictValue);
this.form.serveTimeId = 7;
this.form.conditioningProjectId = 12;
this.onSaleShow = true;
this.afterNutiShow = false;
} else {
this.form.onSaleId = null;
this.form.serveTimeId = 90;
this.afterNutiShow = true;
this.form.conditioningProjectId = 0;
this.onSaleShow = false;
this.afterNutiShow = true;
}
//
if(newVal[0] == 3){
//,
this.form.preSaleId = null;
this.onSaleShow = true;
this.preSaleShow = false;
//
if(newVal[1] == 0 || newVal[1] == 2){
this.form.pushPreSaleId = (this.data && this.data.preSaleId != null) ? this.data.preSaleId : null;
this.pushPreSaleShow = true;
}else{
this.pushPreSaleShow = false;
this.form.pushPreSaleId = null;
}
}else{
this.form.pushPreSaleId = null;
this.pushPreSaleShow = false;
this.preSaleShow = true;
//
if (newVal[0] != 2) {
this.form.onSaleId = null;
this.onSaleShow = false;
}
}
},
},

View File

@ -66,16 +66,18 @@ export default {
return {
orderDetailList: [],
visible: false,
preSaleTitle: "售前",
preSaleValue: "preSale",
//
orderTitleData: [
["订单类型","审核状态", "成交时间"],
["调理项目","姓名", "手机号"],
["金额","收款方式", "收款账号"],
["服务时长","赠送时长", "售前"],
["售中","售后","营养师"],
["助理营养师","策划","策划助理"],
["运营","运营助理","开始时间"],
["结束时间","备注",""]
["售前推送","售中","售后"],
["营养师","助理营养师","策划"],
["策划助理","运营","运营助理"],
["开始时间","结束时间","备注"]
],
//
orderValueData: [
@ -83,10 +85,10 @@ export default {
["conditioningProject","customer", "phone"],
["amount","payType", "account"],
["serveTime","giveServeDay", "preSale"],
["onSale","afterSale","nutritionist"],
["nutriAssis","planner","plannerAssis"],
["operator","operatorAssis","startTime"],
["serverEndTime","remark",""]
["pushPreSale","onSale","afterSale"],
["nutritionist","nutriAssis","planner"],
["plannerAssis","operator","operatorAssis"],
["startTime","serverEndTime","remark"]
],
};
},

View File

@ -90,7 +90,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-show="preSaleShow">
<el-form-item label="售前" prop="preSaleId">
<el-select v-model="form.preSaleId" placeholder="请选择">
<el-option
@ -102,6 +102,19 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" v-show="pushPreSaleShow">
<el-form-item label="售前推送" prop="preSaleId">
<el-select v-model="form.pushPreSaleId" placeholder="请选择">
<el-option
v-for="dict in preSaleIdOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="parseInt(dict.dictValue)"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" v-show="onSaleShow">
<el-form-item label="售中" prop="onSaleId">
<el-select v-model="form.onSaleId" placeholder="请选择">
@ -198,11 +211,11 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<!--<el-col :span="8">
<el-form-item label="推荐人" prop="recommender">
<el-input v-model="form.recommender" placeholder="请输入推荐人" />
</el-form-item>
</el-col>
</el-col>-->
<el-col :span="10">
<el-form-item label="成交时间" prop="orderTime">
<el-date-picker
@ -218,7 +231,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="服务开始时间" prop="startTime" label-width="120">
<el-form-item label="服务开始时间" prop="startTime" label-width="160">
<el-date-picker
style="width: 182.5px"
v-model="form.startTime"
@ -392,8 +405,12 @@ export default {
reviewStatusOptions: [],
//()
orderDropdownCorrespondingOptions: [],
//
//
preSaleShow: true,
//
onSaleShow: false,
//()
pushPreSaleShow: false,
//
afterSaleNutriAssShow: true,
//
@ -545,6 +562,7 @@ export default {
pauseTime: null,
payTypeId: defaultPayType ? parseInt(defaultPayType.dictValue) : null,
preSaleId: defaultPresale ? parseInt(defaultPresale.dictValue) : null,
pushPreSaleId: null,
onSaleId: null,
createBy: null,
createTime: null,
@ -575,13 +593,42 @@ export default {
accountId,
...obj,
};
// console.log(this.form);
this.resetForm("form");
// console.log("--"+obj.orderType);
this.onSaleShow = this.form.orderType == "2";
this.afterSaleNutriAssShow =
this.form.orderType != "2" && this.form.afterSaleCommissOrder == 0;
this.planOperatorShow = this.form.afterSaleCommissOrder == 0;
//
this.preSaleShow = true;
//
this.onSaleShow = false;
//()
this.pushPreSaleShow= false;
//
this.afterSaleNutriAssShow= true;
//
this.planOperatorShow = true;
if(this.form.orderType == "3"){
//
if(this.form.afterSaleCommissOrder == null || this.form.afterSaleCommissOrder == 0){
this.preSaleShow = false;
}
if(this.form.orderCountType == 0 || this.form.orderCountType == 2){
this.pushPreSaleShow = true;
}
}
if(this.form.orderType == "2" || (this.form.orderType == "3" && (this.form.afterSaleCommissOrder == null || this.form.afterSaleCommissOrder == 0))){
this.onSaleShow = true;
}
if((this.form.afterSaleCommissOrder != null && this.form.afterSaleCommissOrder != 0) || this.form.orderType == "2"){
this.afterSaleNutriAssShow = false;
}
if(this.form.afterSaleCommissOrder != null && this.form.afterSaleCommissOrder != 0){
this.planOperatorShow = false;
}
//console.log(this.preSaleShow + " | " + this.pushPreSaleShow + " | " + this.onSaleShow + " | " + this.afterSaleNutriAssShow + "|" + this.planOperatorShow);
},
handleOnClosed() {
this.reset();

View File

@ -25,6 +25,29 @@ export const orderCountTypeArray = [
}
]
//订单次数加拆分类型
export const orderCountExtendedTypeArray = [
{
value: 0,
label: "一开单",
children: orderMoneyTypeArray
},{
value: 1,
label: "二开单",
children: orderMoneyTypeArray
},
{
value: 2,
label: "一开单(拆分)",
children: orderMoneyTypeArray
},
{
value: 3,
label: "二开单(拆分)",
children: orderMoneyTypeArray
}
]
//订单类型(订单新增)
export const orderTypeArray = [
{
@ -47,6 +70,11 @@ export const orderTypeArray = [
label: "全款单"
}]
}]
},
{
value: 3,
label: "售中单",
children: orderCountExtendedTypeArray
}
]

View File

@ -27,7 +27,7 @@
</el-select>
</el-form-item> -->
<el-form-item label="进粉渠道" prop="channelId">
<el-select v-model="queryParams.channelId" placeholder="请选择">
<el-select v-model="queryParams.channelId" filterable clearable placeholder="请选择">
<el-option
v-for="dict in accountIdOptions"
:key="dict.dictValue"

View File

@ -356,7 +356,7 @@ export default {
},
created() {
this.getList();
this.getDicts("fan_channel").then((response) => {
this.getDicts("cus_account").then((response) => {
this.accountIdOptions = response.data;
});
},

View File

@ -327,7 +327,7 @@ export default {
},
created() {
this.getList();
this.getDicts("fan_channel").then((response) => {
this.getDicts("cus_account").then((response) => {
this.accountIdOptions = response.data;
});
this.getDicts("sale_group").then((response) => {