Commit 186605a9 authored by 罗超's avatar 罗超

调整流程

parent 2ae2c1a9
......@@ -50,7 +50,7 @@ export function getMyOrderPageList(data) {
* 销售 报名统计
*
*/
export function getMyOrderStatisticsPageList(data) {
export function getMyOrderStatisticsPageList(data) {
return request({
url: '/order/GetOrderPageListStatistics',
method: 'post',
......@@ -61,7 +61,7 @@ export function getMyOrderPageList(data) {
* 销售 留学就业统计
*
*/
export function getMyStudyOrderStatisticsPageList(data) {
export function getMyStudyOrderStatisticsPageList(data) {
return request({
url: '/order/GetStudyOrderPageListStatistics',
method: 'post',
......@@ -122,7 +122,7 @@ export function getGuestEducationEnumList(data) {
export function getGuestLearningGoalsEnumList(data) {
return request({
// url: '/order/GetGuestLearningGoalsEnumList',
url:'/CustomerStudent/GetLearningGoalsList',
url: '/CustomerStudent/GetLearningGoalsList',
method: 'post',
data
})
......@@ -349,7 +349,7 @@ export function GetSelectClassOrderList(data) {
* 今日订单 修改订单的关联老师
*
*/
export function setOrderHelpEnterId(data) {
export function setOrderHelpEnterId(data) {
return request({
url: '/Order/SetOrderHelpEnterId',
method: 'post',
......@@ -390,7 +390,7 @@ export function getMyCustomerList(data) {
export function GetStuChannelList(data) {
return request({
// url: '/User/GetStuChannelList',
url:"/CustomerStudent/GetChannelList",
url: "/CustomerStudent/GetChannelList",
method: 'post',
data
});
......@@ -432,6 +432,14 @@ export function SetStudentAssist(data) {
});
}
export function SetStudentAssistBatch(data) {
return request({
url: '/CustomerStudent/SetStudentAssistBatch',
method: 'post',
data
});
}
// 删除协助数据
export function RemoveStudentAssist(data) {
return request({
......
<style>
</style>
<style></style>
<template>
<div>
<div class="row wrap">
<q-btn label="新增" color="accent q-mb-lg" size="sm" @click="isShowAdd=true" />
<q-btn label="取消" style="margin-left:20px;" v-if="isShowAdd" flat color="grey-10 q-mb-lg" size="sm"
@click="isShowAdd=false" />
<q-btn
label="新增"
color="accent q-mb-lg"
size="sm"
v-if="!saveObj.IsHaveCurseManager || userInfo.IsCourseConsultant == 1"
@click="isShowAdd = true"
/>
<span v-else class="text-grey-4">学员已推送课程顾问,只能进行查看</span>
<q-btn
label="取消"
style="margin-left:20px;"
v-if="isShowAdd"
flat
color="grey-10 q-mb-lg"
size="sm"
@click="isShowAdd = false"
/>
</div>
<template v-if="isShowAdd">
<UeEditor v-if="isShowAdd" v-model="flowMsg.Remark" class="q-pb-sm" :config="config"></UeEditor>
<UeEditor
v-if="isShowAdd"
v-model="flowMsg.Remark"
class="q-pb-sm"
:config="config"
></UeEditor>
<div class="row q-mb-lg flex justify-between items-center">
<q-select filled v-model="stuStageId" dense :options="cusStateList" option-label="Name" option-value="Id"
emit-value map-options label="客户状态" class="col-6" />
<div>
<q-btn label="保存" color="accent " size="md" @click="saveFlow()" />
</div>
<q-select
filled
v-model="stuStageId"
dense
:options="cusStateList"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户状态"
class="col-6"
/>
<div>
<q-btn label="保存" color="accent " size="md" @click="saveFlow()" />
</div>
</div>
</template>
<div style="display:flex;flex:1;flex-direction: column;overflow:hidden;">
<div class="TimeLineDiv">
<q-timeline color="primary">
<q-timeline-entry v-for="(tItem,tIndex) in dataList" :key="tIndex">
<q-timeline-entry v-for="(tItem, tIndex) in dataList" :key="tIndex">
<template v-slot:title>
<div class="visit_Cont">
<div class="Log_Content" v-html="tItem.Remark"></div>
<div @click="delFollow(tItem.Id)" style="margin-top:10px;" class="visit_delete text-negative">删除</div>
<div
@click="delFollow(tItem.Id)"
style="margin-top:10px;"
class="visit_delete text-negative"
>
删除
</div>
</div>
</template>
<template v-slot:subtitle>
......@@ -41,164 +72,174 @@
</div>
</div>
<div style="margin-bottom:20px;">
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="page_Count" input
@input="changePage" />
<q-pagination
class="full-width justify-end"
v-model="msg.pageIndex"
color="primary"
:max="page_Count"
input
@input="changePage"
/>
</div>
</div>
</template>
<script>
import UeEditor from '../../editor/UeEditor'
import {
queryStudentFollowPage, //获取到访列表
saveStudentFollow,
deleteStudentFollow,
SetStuStage
} from '../../../api/customerstudent/customerstudent';
import UeEditor from "../../editor/UeEditor";
import {
queryStudentFollowPage, //获取到访列表
saveStudentFollow,
deleteStudentFollow,
SetStuStage
} from "../../../api/customerstudent/customerstudent";
export default {
meta: {
title: ""
export default {
meta: {
title: ""
},
components: {
UeEditor
},
props: {
stateId: {
type: Number,
default: 0
},
components: {
UeEditor
stateList: {
type: Array,
default: () => []
},
props: {
stateId:{
type:Number,
default:0
saveObj: {
type: Object,
default: null
}
},
data() {
return {
isShowAdd: false,
config: {
initialFrameWidth: null,
initialFrameHeight: 90
},
stateList: {
type: Array,
default: () => []
flowMsg: {
StuId: 0,
Remark: "",
stuState: 0
},
saveObj: {
type: Object,
default: null
}
},
data() {
return {
isShowAdd: false,
config: {
initialFrameWidth: null,
initialFrameHeight: 90
},
flowMsg: {
StuId: 0,
Remark: '',
stuState: 0,
},
msg: {
pageIndex: 1,
pageSize: 12,
StuId: 0
},
dataList: [],
page_Count: 0,
stuStageId:0,
cusStateList: [],
}
},
created() {
if (this.saveObj && this.saveObj.StuId) {
this.msg.StuId = this.saveObj.StuId;
this.flowMsg.StuId = this.saveObj.StuId;
}
},
watch:{
stateId(val){
this.stuStageId=val
msg: {
pageIndex: 1,
pageSize: 12,
StuId: 0
},
dataList: [],
page_Count: 0,
stuStageId: 0,
cusStateList: [],
userInfo: {}
};
},
created() {
if (this.saveObj && this.saveObj.StuId) {
this.msg.StuId = this.saveObj.StuId;
this.flowMsg.StuId = this.saveObj.StuId;
this.userInfo = this.getLocalStorage();
}
},
watch: {
stateId(val) {
this.stuStageId = val;
}
},
mounted() {
this.stuStageId = this.stateId;
this.cusStateList = this.stateList;
this.getList();
},
methods: {
//保存跟进
saveFlow() {
if (this.flowMsg.Remark == "") {
this.$q.notify({
type: "negative",
position: "top",
timeout: 2000,
message: "请输入内容!"
});
return;
}
},
mounted() {
this.stuStageId=this.stateId
this.cusStateList = this.stateList;
this.getList();
},
methods: {
//保存跟进
saveFlow() {
if (this.flowMsg.Remark == '') {
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请输入内容!',
})
return;
}
saveStudentFollow(this.flowMsg).then(res => {
saveStudentFollow(this.flowMsg)
.then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
icon: "iconfont icon-chenggong",
color: "accent",
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
message: "数据保存成功!",
position: "top"
});
this.getList();
this.clearMsg();
}
}).catch(() => {
})
if(this.stuStageId??0>0){
this.setStuStage()
}
},
getList() {
queryStudentFollowPage(this.msg).then(res => {
.catch(() => {});
if (this.stuStageId ?? 0 > 0) {
this.setStuStage();
}
},
getList() {
queryStudentFollowPage(this.msg)
.then(res => {
if (res.Code == 1) {
this.dataList = res.Data.PageData;
this.page_Count = res.Data.PageCount;
}
}).catch(() => {
})
},
//清除
clearMsg() {
this.flowMsg.Remark = '';
this.isShowAdd = false;
},
changePage(val) {
this.msg.pageIndex = val;
this.getList();
},
//删除跟进
delFollow(Id) {
let that = this
this.$q.dialog({
title: '提示信息',
message: '是否确定删除?',
.catch(() => {});
},
//清除
clearMsg() {
this.flowMsg.Remark = "";
this.isShowAdd = false;
},
changePage(val) {
this.msg.pageIndex = val;
this.getList();
},
//删除跟进
delFollow(Id) {
let that = this;
this.$q
.dialog({
title: "提示信息",
message: "是否确定删除?",
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
cancel: "取消"
})
.onOk(() => {
deleteStudentFollow({
Id: Id
}).then((res) => {
}).then(res => {
that.$q.notify({
icon: 'iconfont icon-chenggong',
icon: "iconfont icon-chenggong",
timeout: 2000,
message: res.Message,
position: 'top'
})
that.getList()
})
}).onCancel(() => {});
},
setStuStage(){
const msg={
StuId:this.saveObj.StuId,
StuStage:this.stuStageId,
}
SetStuStage(msg).then(res=>{
this.$emit('update')
position: "top"
});
that.getList();
});
})
},
.onCancel(() => {});
},
setStuStage() {
const msg = {
StuId: this.saveObj.StuId,
StuStage: this.stuStageId
};
SetStuStage(msg).then(res => {
this.$emit("update");
});
}
}
};
</script>
<style>
</style>
<style></style>
<template>
<div>
<div class="row wrap">
<q-btn label="新增" color="accent q-mb-lg" size="sm" @click="isShowAdd=true" />
<q-btn label="取消" style="margin-left:20px;" v-if="isShowAdd" flat color="grey-10 q-mb-lg" size="sm"
@click="isShowAdd=false" />
</div>
<template v-if="isShowAdd">
<reserveclass-form :saveObj="saveObj" @close="closeReserveForm" @success="closeReserveForm"></reserveclass-form>
</template>
<!-- <div class="row wrap">
<q-btn
label="新增"
color="accent q-mb-lg"
size="sm"
@click="isShowAdd = true"
/>
<q-btn
label="取消"
style="margin-left:20px;"
v-if="isShowAdd"
flat
color="grey-10 q-mb-lg"
size="sm"
@click="isShowAdd = false"
/>
</div> -->
<reserveclass-form
:saveObj="saveObj"
@close="closeReserveForm"
@success="closeReserveForm"
v-if="!saveObj.IsHaveCurseManager || userInfo.IsCourseConsultant == 1"
></reserveclass-form>
<span v-else class="text-grey-4 q-mb-md"
>学员已推送课程顾问,只能进行查看</span
>
<div style="display:flex;flex:1;flex-direction: column;overflow:hidden;">
<div class="TimeLineDiv">
<q-timeline color="primary">
<q-timeline-entry v-for="(tItem,tIndex) in dataList" :key="tIndex">
<q-timeline-entry v-for="(tItem, tIndex) in dataList" :key="tIndex">
<template v-slot:title>
<div class="visit_Cont">
<div class="Log_Content">
<div>预约时间:{{tItem.ClassDateStr}} {{tItem.ClassTime}}-{{tItem.EndTime}}</div>
<div>
预约时间:{{ tItem.ClassDateStr }} {{ tItem.ClassTime }}-{{
tItem.EndTime
}}
</div>
<div class="StuCom_Remark">
<div style="flex-shrink:0">主讲内容:</div>
<div class="StuCom_Inner">{{tItem.ClassContent}}</div>
<div class="StuCom_Inner">{{ tItem.ClassContent }}</div>
</div>
<div>主讲老师:{{tItem.TeacherName}}</div>
<div>课程名称:{{tItem.LessonName}}</div>
<div>主讲老师:{{ tItem.TeacherName }}</div>
<div>课程名称:{{ tItem.LessonName }}</div>
<div class="StuCom_Remark">
<span class="StuCom_Left">教室</span>{{tItem.RoomName}}
<span class="StuCom_Left">教室</span>{{ tItem.RoomName }}
</div>
</div>
<div @click="DeleteVisitorReserve(tItem.Id)" style="margin-top:10px;"
class="visit_delete text-negative">删除</div>
<div
@click="DeleteVisitorReserve(tItem.Id)"
style="margin-top:10px;"
class="visit_delete text-negative"
>
删除
</div>
</div>
</template>
<template v-slot:subtitle>
......@@ -45,100 +69,110 @@
</div>
</div>
<div style="margin:20px 0;">
<q-pagination class="full-width justify-end" v-model="qMsg.pageIndex" color="primary" :max="page_Count" input
@input="changePage" />
<q-pagination
class="full-width justify-end"
v-model="qMsg.pageIndex"
color="primary"
:max="page_Count"
input
@input="changePage"
/>
</div>
</div>
</template>
<script>
import {
SetVisitorReserve,
queryVisitorReservePage,
RemoveVisitorReserve
} from "../../../api/scheduling/schedu";
import {
SetVisitorReserve,
queryVisitorReservePage,
RemoveVisitorReserve
} from "../../../api/scheduling/schedu";
import {
getTeacherDropDownList,
queryClassRoomList,
GetTrialLessonList
} from "../../../api/school/index";
import reserveclassForm from './reserveclass-form'
export default {
meta: {
title: ""
},
components: {
reserveclassForm
},
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
isShowAdd: false,
qMsg: {
pageIndex: 1,
pageSize: 12,
Visitor_Id: 0,
},
dataList: [],
page_Count: 0,
}
},
created() {
if (this.saveObj) {
this.qMsg.Visitor_Id = this.saveObj.StuId;
}
import {
getTeacherDropDownList,
queryClassRoomList,
GetTrialLessonList
} from "../../../api/school/index";
import reserveclassForm from "./reserveclass-form";
export default {
meta: {
title: ""
},
components: {
reserveclassForm
},
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
isShowAdd: false,
qMsg: {
pageIndex: 1,
pageSize: 12,
Visitor_Id: 0
},
dataList: [],
page_Count: 0,
userInfo: {}
};
},
created() {
if (this.saveObj) {
this.qMsg.Visitor_Id = this.saveObj.StuId;
this.userInfo = this.getLocalStorage();
}
},
mounted() {
this.getList();
},
methods: {
//获取试听列表
getList() {
queryVisitorReservePage(this.qMsg).then(res => {
if (res.Code == 1) {
this.dataList = res.Data.PageData;
this.page_Count = res.Data.PageCount;
}
});
},
mounted() {
changePage(val) {
this.qMsg.pageIndex = val;
this.getList();
},
methods: {
//获取试听列表
getList() {
queryVisitorReservePage(this.qMsg).then(res => {
if (res.Code == 1) {
this.dataList = res.Data.PageData;
this.page_Count = res.Data.PageCount;
}
})
},
changePage(val) {
this.qMsg.pageIndex = val;
this.getList();
},
//删除试听
DeleteVisitorReserve(Id) {
let that = this
this.$q.dialog({
title: '提示信息',
message: '是否确定此试听信息删除?',
//删除试听
DeleteVisitorReserve(Id) {
let that = this;
this.$q
.dialog({
title: "提示信息",
message: "是否确定此试听信息删除?",
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
cancel: "取消"
})
.onOk(() => {
RemoveVisitorReserve({
Id: Id
}).then((res) => {
}).then(res => {
that.$q.notify({
icon: 'iconfont icon-chenggong',
icon: "iconfont icon-chenggong",
timeout: 2000,
message: res.Message,
position: 'top'
})
that.getList()
})
}).onCancel(() => {});
},
closeReserveForm() {
this.isShowAdd = false;
this.getList();
},
position: "top"
});
that.getList();
});
})
.onCancel(() => {});
},
closeReserveForm() {
this.isShowAdd = false;
this.getList();
}
}
</script>
\ No newline at end of file
};
</script>
......@@ -40,6 +40,18 @@
icon="phone"
title="拨打电话"
></q-btn>
<q-btn
unelevated
color="positive"
v-if="
!baseObj.IsHaveCurseManager && userInfo.Id == baseObj.CreateBy
"
size="sm"
:loading="pushing"
class="q-mr-md"
@click="assistBatchHandler"
>推送课程顾问</q-btn
>
<q-btn
v-if="getJudgeTrans()"
color="primary"
......@@ -98,7 +110,7 @@
<q-tab name="2" label="操作" />
<q-tab name="3" label="订单" />
<q-tab name="4" label="合同" />
<q-tab v-if="!baseObj.noEdit" name="5" label="协同人员" />
<q-tab v-if="!baseObj.noEdit" name="5" label="服务人员" />
</q-tabs>
<div class="operate_Content" style="flex:1;">
<div class="detail_Main">
......@@ -208,6 +220,7 @@ import studentShiting from "../student/student-shiting";
import studentHetong from "../student/student-hetong";
import studentOrder from "../student/student-order";
import studentAssit from "../student/student-Assit";
import { SetStudentAssistBatch } from "../../../api/sale/sale";
export default {
meta: {
title: "学员管理"
......@@ -260,7 +273,7 @@ export default {
Id: 4
}
],
pushing: false,
msg: {},
baseObj: {},
transMsg: {
......@@ -284,6 +297,14 @@ export default {
},
mounted() {
this.baseObj = this.saveObj;
this.baseObj.IsHaveCurseManager = false;
if (this.baseObj.AssistList && this.baseObj.AssistList.length > 0) {
this.baseObj.AssistList.forEach(x => {
if (x.AssistType == 2) {
this.baseObj.IsHaveCurseManager = true;
}
});
}
this.getEmployeeList();
},
methods: {
......@@ -370,6 +391,19 @@ export default {
this.stateId = res.Data.StuStage;
}
});
},
assistBatchHandler() {
console.log(this.pushing || this.baseObj.IsHaveCurseManager);
if (this.pushing || this.baseObj.IsHaveCurseManager) return;
this.pushing = true;
let parameter = {
stuIds: this.baseObj.StuId
};
SetStudentAssistBatch(parameter).then(r => {
this.$emit("success");
this.baseObj.IsHaveCurseManager = true;
this.pushing = false;
});
}
}
};
......
This diff is collapsed.
This diff is collapsed.
<template>
<div>
<q-card flat class="q-pa-lg q-my-lg" v-loading="loading">
<div class="text-h6 text-weight-bold">分配给以下部门/成员</div>
<div class="text-subtitle1 text-weight-bold q-my-md">
<span>适用部门/成员</span>
<span class="text-negative">*</span>
</div>
<div class="q-mb-md row">
<div class="col">
<q-btn
outline
color="primary"
class="q-px-lg"
@click="outerVisible = true"
>选择部门/成员</q-btn
>
</div>
<div class="col">已选择:{{ chosenUser.length }}</div>
</div>
<div class="q-mb-xl">
<q-badge
color="primary"
class="q-mr-md"
v-for="(x, i) in chosenUser"
:key="i"
>
{{ x.DeptName }}
</q-badge>
</div>
<div class="text-h6 text-weight-bold q-mt-xl">设置分配规则</div>
<div class="text-subtitle1 text-weight-bold q-my-md row items-center">
<div>选择分配规则:</div>
<div class="col q-ml-md">
<q-radio v-model="ruleType" val="0" label="顺序分配" />
<q-radio v-model="ruleType" val="1" label="随机分配" />
</div>
</div>
<q-btn
class="q-mt-xl q-px-lg"
unelevated
color="primary"
:loading="saving"
@click="saveHandler"
>立即保存</q-btn
>
</q-card>
<choiceapproval
v-if="outerVisible"
@close="getclose()"
@success="getsuccess2"
:byval="chosenUser"
cptype="0"
></choiceapproval>
</div>
</template>
<script>
import choiceapproval from "../../components/enterprise/choiceapproval";
import { getDictValueList } from "../../api/administration/administration";
import { saveDict } from "../../api/system/notiveSysSet";
export default {
components: { choiceapproval },
data() {
return {
chosenUser: [],
outerVisible: false,
ruleType: "0",
saving: false,
loading: true,
dictObjEmp: {},
dictObjRule: {}
};
},
created() {
this.init();
},
methods: {
getclose() {
// 企业关闭
this.ismember = false;
this.outerVisible = false;
},
getsuccess2(list, type) {
console.log(list);
this.chosenUser = list;
this.outerVisible = false;
},
init() {
getDictValueList({ Key: "PUSH_STU_UNION_EMP" }).then(res => {
if (res.Code == 1) {
this.dictObjEmp = res.Data[0];
if (res.Data[0].Content != "" && res.Data[0].Content != null) {
let tempVal = res.Data[0].Content.split(",");
let tempLabel = res.Data[0].Mask.split(",");
tempVal.forEach((x, i) => {
let temp = {
DeptId: x,
DeptName: tempLabel[i]
};
this.chosenUser.push(temp);
});
}
getDictValueList({ Key: "PUSH_STU_RULETYPE" }).then(r => {
this.dictObjRule = r.Data[0];
if (r.Code == 1) {
if (r.Data[0].Content != "" && res.Data[0].Content != null) {
this.ruleType = r.Data[0].Content;
}
}
this.loading = false;
});
}
});
},
saveHandler() {
if (this.chosenUser.length > 0) {
this.saving = true;
let contentTemp = "";
let maskTemp = "";
this.chosenUser.forEach(x => {
contentTemp += "," + x.DeptId;
maskTemp += "," + x.DeptName;
});
this.dictObjEmp.Content = contentTemp.substring(1);
this.dictObjEmp.Mask = maskTemp.substring(1);
saveDict(this.dictObjEmp).then(r => {
if (r.Code == 1) {
setTimeout(() => {
this.dictObjRule.Content = this.ruleType;
saveDict(this.dictObjRule).then(res => {
if (r.Code == 1) {
this.$q.notify({
icon: "iconfont icon-chenggong",
color: "accent",
timeout: 2000,
message: "数据保存成功!",
position: "top"
});
}
this.saving = false;
});
}, 1000);
} else {
this.saving = false;
}
});
} else {
this.$q.notify({
icon: "",
color: "negative",
timeout: 2000,
message: "请选择适用的部门成员",
position: "top"
});
}
}
}
};
</script>
<style></style>
<template>
<div class=page-body>
<div class="page-body">
<q-tabs
v-model="tabCheck"
narrow-indicator
......@@ -12,27 +12,31 @@
<q-tab :ripple="false" :name="3" label="学习目的" />
<q-tab :ripple="false" :name="4" label="收客渠道" />
<q-tab :ripple="false" :name="5" label="客户需求"></q-tab>
<q-tab :ripple="false" :name="6" label="客户分配规则"></q-tab>
</q-tabs>
<stage v-if="tabCheck==1"></stage>
<cusType v-if="tabCheck==2"></cusType>
<aim v-if="tabCheck==3"></aim>
<channel v-if="tabCheck==4"></channel>
<customneed v-if="tabCheck==5"></customneed>
<stage v-if="tabCheck == 1"></stage>
<cusType v-if="tabCheck == 2"></cusType>
<aim v-if="tabCheck == 3"></aim>
<channel v-if="tabCheck == 4"></channel>
<customneed v-if="tabCheck == 5"></customneed>
<stu-distribution-rule v-if="tabCheck == 6"></stu-distribution-rule>
</div>
</template>
<script>
import stage from "./stage";
import cusType from "./customType"
import aim from './studyAim'
import channel from './stuReceiveChannel'
import customneed from './customneed'
import cusType from "./customType";
import aim from "./studyAim";
import channel from "./stuReceiveChannel";
import customneed from "./customneed";
import stuDistributionRule from "./stuDistributionRule";
export default {
components: {
stage,
cusType,
aim,
channel,
customneed
customneed,
stuDistributionRule
},
data() {
return {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment