Commit 942a5e06 authored by zhengke's avatar zhengke

1

parents 89de6cb8 18a23dab
...@@ -20,7 +20,7 @@ export default { ...@@ -20,7 +20,7 @@ export default {
</script> </script>
<style> <style>
@import url("//at.alicdn.com/t/font_2077629_bgk17xi4zj.css"); @import url("//at.alicdn.com/t/font_2077629_w1o8daso6r9.css");
@font-face{ @font-face{
font-family: 'din'; font-family: 'din';
src: url('./assets/font/DIN-Bold.otf') format('opentype'); src: url('./assets/font/DIN-Bold.otf') format('opentype');
......
...@@ -79,4 +79,12 @@ export function getEventLogPageList(data) { ...@@ -79,4 +79,12 @@ export function getEventLogPageList(data) {
method: 'post', method: 'post',
data data
}) })
}
// 设置学生跳课
export function setGuestStartChapter(data) {
return request({
url: '/Scroll/SetGuestStartChapter',
method: 'post',
data
})
} }
\ No newline at end of file
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
height: 40px; height: 40px;
background-color: rgb(238, 238, 239); background-color: rgb(238, 238, 239);
} }
.stulistNumber { .stulistNumber {
display: inline-block; display: inline-block;
width: 25px; width: 25px;
...@@ -39,6 +40,7 @@ ...@@ -39,6 +40,7 @@
cursor: pointer; cursor: pointer;
color: #2961FE; color: #2961FE;
} }
.OCourseTable { .OCourseTable {
width: 400px; width: 400px;
text-align: center; text-align: center;
...@@ -52,7 +54,6 @@ ...@@ -52,7 +54,6 @@
height: 40px; height: 40px;
background-color: rgb(238, 238, 239); background-color: rgb(238, 238, 239);
} }
</style> </style>
<template> <template>
<div class="stuList"> <div class="stuList">
...@@ -71,8 +72,8 @@ ...@@ -71,8 +72,8 @@
<q-btn color="accent" class="q-mr-md" size="sm" icon="swap_horiz" label="转留学" <q-btn color="accent" class="q-mr-md" size="sm" icon="swap_horiz" label="转留学"
:disable="selection.length === 0" @click="transferAbroad" /> :disable="selection.length === 0" @click="transferAbroad" />
<q-btn color="accent" class="q-mr-md" size="sm" icon="add" label="新增学员" @click="EditStudent(null)" /> <q-btn color="accent" class="q-mr-md" size="sm" icon="add" label="新增学员" @click="EditStudent(null)" />
<q-btn v-if="authObj&&authObj.isShowDownload" color="accent" class="q-mr-md" size="sm" icon="download" label="下载" <q-btn v-if="authObj&&authObj.isShowDownload" color="accent" class="q-mr-md" size="sm" icon="download"
@click="downloadStudent" /> label="下载" @click="downloadStudent" />
</div> </div>
<div class="page-option" v-if="pushMode"> <div class="page-option" v-if="pushMode">
<q-btn color="accent" unelevated class="q-mr-md" size="sm" icon="swap_horiz" label="立即推送" :loading="pushing" <q-btn color="accent" unelevated class="q-mr-md" size="sm" icon="swap_horiz" label="立即推送" :loading="pushing"
...@@ -106,10 +107,13 @@ ...@@ -106,10 +107,13 @@
</template> </template>
<template v-slot:body-cell-StuSourceIdName="props"> <template v-slot:body-cell-StuSourceIdName="props">
<q-td :props="props"> <q-td :props="props">
<div> <div v-if="IsShowStuSourceIdName(props.row)">
<span v-if="props.row.CreateType == 2 && props.row.EnterpriseName">{{props.row.EnterpriseName}}:</span> <span v-if="props.row.CreateType == 2 && props.row.EnterpriseName">{{props.row.EnterpriseName}}:</span>
{{ props.row.StuSourceIdName }} {{ props.row.StuSourceIdName }}
</div> </div>
<div v-else>
-
</div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-AdvisorWinRate="props"> <template v-slot:body-cell-AdvisorWinRate="props">
...@@ -131,7 +135,8 @@ ...@@ -131,7 +135,8 @@
<th>跟进比例</th> <th>跟进比例</th>
<th>跟进备注</th> <th>跟进备注</th>
</tr> </tr>
<tr v-for="(sItem,sIndex) in props.row.AdvisorList" style="border-bottom:1px dashed #d1d1d1;" :key="sIndex"> <tr v-for="(sItem,sIndex) in props.row.AdvisorList" style="border-bottom:1px dashed #d1d1d1;"
:key="sIndex">
<td>{{sItem.AdvisorStatusName}}</td> <td>{{sItem.AdvisorStatusName}}</td>
<td>{{sItem.AdvisorDate}}</td> <td>{{sItem.AdvisorDate}}</td>
<td>{{sItem.AdvisorRate}}</td> <td>{{sItem.AdvisorRate}}</td>
...@@ -154,7 +159,8 @@ ...@@ -154,7 +159,8 @@
<template v-slot:body-cell-OrderCount="props"> <template v-slot:body-cell-OrderCount="props">
<q-td :props="props" v-if="props.row.OrderCount == 0" class="text-grey-4">未报名</q-td> <q-td :props="props" v-if="props.row.OrderCount == 0" class="text-grey-4">未报名</q-td>
<q-td :props="props" v-if="props.row.OrderCount > 0" class="bg-negative text-white" style="cursor:pointer;text-decoration:underline;" @click="getStuRight(props.row,3)"> <q-td :props="props" v-if="props.row.OrderCount > 0" class="bg-negative text-white"
style="cursor:pointer;text-decoration:underline;" @click="getStuRight(props.row,3)">
已报名{{ props.row.OrderCount }}</q-td> 已报名{{ props.row.OrderCount }}</q-td>
</template> </template>
<template v-slot:body-cell-TeacherManager="props"> <template v-slot:body-cell-TeacherManager="props">
...@@ -199,8 +205,9 @@ ...@@ -199,8 +205,9 @@
</q-table> </q-table>
<student-form v-if="isShowStuForm" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList"> <student-form v-if="isShowStuForm" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList">
</student-form> </student-form>
<studentRight-form v-if="isShowStuRight" :isJudgeTrans="isJudgeTrans" :BelongType="BelongType" :checkType="checkType" :save-obj="stuOption" <studentRight-form v-if="isShowStuRight" :isJudgeTrans="isJudgeTrans" :BelongType="BelongType"
@close="closeStuForm" @success="refreshStuList" @reload="referDataHandler"> :checkType="checkType" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList"
@reload="referDataHandler">
</studentRight-form> </studentRight-form>
<studentAdd-form v-if="isShowAdd" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList"> <studentAdd-form v-if="isShowAdd" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList">
</studentAdd-form> </studentAdd-form>
...@@ -286,6 +293,18 @@ ...@@ -286,6 +293,18 @@
label: "是否报名", label: "是否报名",
align: "left" align: "left"
}, },
{
name: "VisitCount",
label: "到访次数",
field: "VisitCount",
align: "left"
},
{
name: "TrialLessonCount",
label: "试听次数",
field: "TrialLessonCount",
align: "left"
},
{ {
name: "StuSex", name: "StuSex",
label: "性别", label: "性别",
...@@ -394,18 +413,7 @@ ...@@ -394,18 +413,7 @@
field: "StuChannelName", field: "StuChannelName",
align: "left" align: "left"
}, },
{
name: "VisitCount",
label: "到访次数",
field: "VisitCount",
align: "left"
},
{
name: "TrialLessonCount",
label: "试听次数",
field: "TrialLessonCount",
align: "left"
},
{ {
name: "CreateTimeStr", name: "CreateTimeStr",
label: "创建时间", label: "创建时间",
...@@ -433,8 +441,9 @@ ...@@ -433,8 +441,9 @@
pushMode: false, pushMode: false,
pushing: false, pushing: false,
assistListFormat: [], assistListFormat: [],
checkType:1, checkType: 1,
isShowAbroad: false isShowAbroad: false,
userInfo: {}, //当前登录人员
}; };
}, },
watch: { watch: {
...@@ -447,14 +456,31 @@ ...@@ -447,14 +456,31 @@
} }
}, },
created() { created() {
this.userInfo = this.getLocalStorage();
this.formatAssistList(); this.formatAssistList();
this.initAuth(); this.initAuth();
}, },
mounted() {}, mounted() {},
computed: { computed: {
...mapGetters(["userInfo", "logo", "name"]) ...mapGetters(["logo", "name"])
}, },
methods: { methods: {
IsShowStuSourceIdName(item) {
var isHaveAuth = false;
if (this.userInfo && this.userInfo.ActionMenuList && this.userInfo.ActionMenuList.length >
0) {
this.userInfo.ActionMenuList.forEach((x) => {
if (x.FunctionCode == "Look_StuSourceId") {
isHaveAuth = true;
}
});
}
if (item.CreateBy == this.userInfo.Id || isHaveAuth) {
return true;
} else {
return false;
}
},
//下载文件 //下载文件
downloadStudent() { downloadStudent() {
var msg = JSON.parse(JSON.stringify(this.queryMsg)); var msg = JSON.parse(JSON.stringify(this.queryMsg));
...@@ -605,11 +631,11 @@ ...@@ -605,11 +631,11 @@
this.isShowAbroad = false; this.isShowAbroad = false;
}, },
//点击学生姓名弹出 //点击学生姓名弹出
getStuRight(obj,type) { getStuRight(obj, type) {
if (obj) { if (obj) {
this.stuOption = obj; this.stuOption = obj;
this.BelongType = obj.BelongType; this.BelongType = obj.BelongType;
this.checkType=type; this.checkType = type;
} else { } else {
this.stuOption = null; this.stuOption = null;
} }
...@@ -632,7 +658,7 @@ ...@@ -632,7 +658,7 @@
this.isShowTransfer = true; this.isShowTransfer = true;
}, },
//转留学 //转留学
transferAbroad(){ transferAbroad() {
this.isShowAbroad = true; this.isShowAbroad = true;
}, },
getCurseManager(row) { getCurseManager(row) {
...@@ -677,7 +703,7 @@ ...@@ -677,7 +703,7 @@
}); });
if (msg == "") { if (msg == "") {
SetStudentAssistBatch(parameter).then(r => { SetStudentAssistBatch(parameter).then(r => {
this.$emit("reload"); this.refreshStuList();
this.selection = []; this.selection = [];
this.pushMode = false; this.pushMode = false;
}); });
......
<template>
<!-- 跳课 -->
<q-dialog
v-model="show"
content-class="bg-grey-1"
persistent
transition-show="scale"
transition-hide="scale"
>
<q-card style="width: 900px; max-width: 900px">
<q-card-section class="row items-center q-pb-none">
<div class="text-h6">跳课</div>
<q-space />
<q-btn icon="close" flat round dense @click="changeDig(false)" />
</q-card-section>
<q-card-section class="q-pt-none">
<div class="row col flex q-col-gutter-md">
<q-field filled label="姓名" readonly stack-label class="col-4">
<template v-slot:control>
<div>{{ saveObj.GuestName }}</div>
</template>
</q-field>
<!-- <q-field filled label="课程" readonly stack-label class="col-4">
<template v-slot:control>
<div>{{ saveObj.CourseName }}</div>
</template>
</q-field>
<q-field filled label="班级" readonly stack-label class="col-4">
<template v-slot:control>
<div>{{ saveObj.ClassName }}</div>
</template>
</q-field> -->
<q-field filled label="已上课次数" readonly stack-label class="col-4">
<template v-slot:control>
<div>{{ saveObj.CourseChapterNo }}</div>
</template>
</q-field>
<q-field filled label="预约次数" readonly stack-label class="col-4">
<template v-slot:control>
<div>{{ saveObj.AppointNum }}</div>
</template>
</q-field>
</div>
<div class="q-my-xs">
类型:
<q-radio
v-model="type"
val="a"
label="第一次课开始"
color="teal"
@input="changeType"
/>
<q-radio
v-model="type"
val="b"
label="中途已上课"
color="teal"
@input="changeType"
/>
<q-radio
v-model="type"
val="c"
label="后续未上课"
color="teal"
@input="changeType"
/>
</div>
<div class="row col q-col-gutter-md">
<q-input
filled
v-model.number="msg.SChapterNo"
label="跳课开始章节"
type="number"
class="col-4"
stack-label
:min="0"
v-if="type == 'b'"
@change="changeStartChapter"
/>
<q-input
filled
v-model.number="endSChapterNo"
label="跳课结束章节"
type="number"
class="col-4"
stack-label
:min="0"
:max="999"
@change="changeEndChapter"
/>
</div>
<div class="q-my-xs" style="word-wrap:break-word">
<span style="white-space:nowrap">跳课章节列表:</span>{{ msg.ChapterNos }}</div>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" @click="changeDig(false)" />
<q-btn
label="保存"
color="accent q-px-md"
:loading="loading"
@click="save"
/>
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import { setGuestStartChapter } from "../../api/stuMan/index.js";
export default {
model: {
prop: "show",
event: "changeshow"
},
props: {
show: {
type: Boolean,
default: false
},
saveObj: {
type: Object
}
},
watch: {
show(){
this.loading = false
},
},
data() {
return {
type: "c",
saveLoading: false,
msg: {
StuId: 0,
GuestId: 0,
CourseId: 0,
ChapterNos: "",
SChapterNo: 0
},
endSChapterNo: 0,
loading: false
};
},
mounted() {},
methods: {
//开关弹窗
changeDig(val) {
this.$emit("changeshow", val);
},
changeType() {
this.msg.SChapterNo = 0;
this.msg.ChapterNos = "";
this.endSChapterNo = 0;
},
changeStartChapter() {
if (!this.msg.SChapterNo) {
this.msg.SChapterNo = 0;
}
this.changeEndChapter();
},
changeEndChapter() {
if (!this.endSChapterNo) {
this.endSChapterNo = 0;
}
if (this.endSChapterNo>=999) {
this.endSChapterNo = 999;
}
const end = parseInt(this.endSChapterNo);
let arr = [];
if (this.type == "a") {
for (let i = 1; i <= end; i++) {
arr.push(i);
}
} else if (this.type == "b") {
for (let i = this.msg.SChapterNo; i <= end; i++) {
arr.push(i);
}
} else if (this.type == "c") {
let start = this.saveObj.CourseChapterNo + this.saveObj.AppointNum;
for (let i = start + 1; i <= end; i++) {
arr.push(i);
}
}
this.msg.ChapterNos = arr.toString();
},
save() {
if (this.endSChapterNo == 0) {
this.$q.notify({
message: "请输入跳课的章节",
position: "top"
});
return;
}
this.msg.StuId = this.saveObj.Student_Id;
this.msg.GuestId = this.saveObj.Id;
this.msg.CourseId = this.saveObj.CourseId;
this.loading = true;
setGuestStartChapter(this.msg)
.then(res => {
this.loading = false;
if (res.Code == 1) {
this.$q.notify({
message: "操作成功",
position: "top"
});
this.changeDig(false);
this.$emit("success");
}
})
.catch(err => {
this.loading = false;
});
}
}
};
</script>
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
:key="_index" :key="_index"
:val="_item" :val="_item"
@input="courseCheck(item.TeacherId, _item)" @input="courseCheck(item.TeacherId, _item)"
v-if="_item.ClassType==3"
> >
{{ item.TeacherName }} {{ _item.CourseName }} {{ item.TeacherName }} {{ _item.CourseName }}
{{ _item.RoomName }} {{ _item.StartTime }}-{{ {{ _item.RoomName }} {{ _item.StartTime }}-{{
......
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
color="accent" color="accent"
size="xs" size="xs"
label="确认" label="确认"
v-if="saveObj.AppointState == 1&&saveObj.GuestList.length>=saveObj.ScrollMinNum" v-if="saveObj.AppointState == 1&&saveObj.GuestList.length>=saveObj.ScrollMinNum&&auth.IsEdit"
@click="confirmSub" @click="confirmSub"
class="q-ml-md" class="q-ml-md"
/> />
...@@ -110,7 +110,7 @@ ...@@ -110,7 +110,7 @@
v-if="saveObj.ClassType == 3" v-if="saveObj.ClassType == 3"
> >
<template v-slot:control> <template v-slot:control>
<div v-if="saveObj.AppointState == 1"> <div v-if="saveObj.AppointState == 1&&auth.IsEdit">
<div class="q-mt-sm flex justify-start"> <div class="q-mt-sm flex justify-start">
<q-btn <q-btn
color="accent" color="accent"
...@@ -179,6 +179,14 @@ export default { ...@@ -179,6 +179,14 @@ export default {
saveObj: { saveObj: {
type: Object, type: Object,
default: null default: null
},
auth:{
type:Object,
default:()=>{
return {
IsEdit:false
}
}
} }
}, },
data() { data() {
...@@ -202,6 +210,14 @@ export default { ...@@ -202,6 +210,14 @@ export default {
message: "操作成功", message: "操作成功",
position: "top" position: "top"
}); });
this.checkStuType2.map((e)=>{
this.saveObj.GuestList.map((_e,_i)=>{
if(e==_e.AppointmentId){
this.saveObj.GuestList.splice(_i,1)
}
})
})
this.checkStuType2=[]
this.$emit("success"); this.$emit("success");
} }
}); });
...@@ -229,7 +245,8 @@ export default { ...@@ -229,7 +245,8 @@ export default {
position: "top", position: "top",
type: "positive" type: "positive"
}); });
this.$emit("success"); // this.saveObj.AppointState = 2
this.$emit("close");
} }
}); });
}, },
...@@ -243,7 +260,7 @@ export default { ...@@ -243,7 +260,7 @@ export default {
}, },
ChangeCourseSuccessHandle(){ ChangeCourseSuccessHandle(){
this.$emit("success"); this.$emit("close");
} }
} }
}; };
......
...@@ -21,8 +21,14 @@ ...@@ -21,8 +21,14 @@
</template> </template>
</q-field> </q-field>
<!-- 详情显示内容 start--> <!-- 详情显示内容 start-->
<div class="col-12" v-if="editType==2"> <div class="col-12" v-if="editType == 2">
<Detail :dateObj="dateObj" :saveObj="saveObj" @success="detailSuccessHandle"/> <Detail
:dateObj="dateObj"
:saveObj="saveObj"
:auth="auth"
@success="detailSuccessHandle"
@close="detailCloseHandle"
/>
</div> </div>
<!-- 详情显示内容 end --> <!-- 详情显示内容 end -->
<q-select <q-select
...@@ -75,7 +81,7 @@ ...@@ -75,7 +81,7 @@
map-options map-options
label="老师" label="老师"
class="col-12" class="col-12"
@input="getCanTeacherTimeList()" @input="getCanTeacherTimeList"
/> />
<q-field <q-field
filled filled
...@@ -129,7 +135,7 @@ ...@@ -129,7 +135,7 @@
</q-field> </q-field>
<div <div
class="row col" class="row col"
v-show="(editType == 1 || saveObj.ClassType == 3) && showAddStu()" v-show="(editType == 1 || saveObj.ClassType == 3)&&auth.IsEdit"
> >
<div class="col-10"> <div class="col-10">
<q-select <q-select
...@@ -145,7 +151,6 @@ ...@@ -145,7 +151,6 @@
:dense="false" :dense="false"
class="col-6" class="col-6"
@filter="filterStu" @filter="filterStu"
@input="addStu"
> >
<template v-slot:no-option> <template v-slot:no-option>
<q-item> <q-item>
...@@ -189,14 +194,14 @@ ...@@ -189,14 +194,14 @@
import { import {
GetCanTeacherClassTimeList, GetCanTeacherClassTimeList,
GetCanAppointmentStuList, GetCanAppointmentStuList,
SetAdminScrollAppointment, SetAdminScrollAppointment
} from "../../../api/studyabroad/subscribe.js"; } from "../../../api/studyabroad/subscribe.js";
import { import {
queryCourseDropdownList, queryCourseDropdownList,
queryChapterTree queryChapterTree
} from "../../../api/course/index"; } from "../../../api/course/index";
import selectTree from "../../../components/common/select-tree"; import selectTree from "../../../components/common/select-tree";
import Detail from "./detail.vue" import Detail from "./detail.vue";
import QCalendar from "@quasar/quasar-ui-qcalendar"; import QCalendar from "@quasar/quasar-ui-qcalendar";
export default { export default {
components: { components: {
...@@ -227,22 +232,32 @@ export default { ...@@ -227,22 +232,32 @@ export default {
teacherList: { teacherList: {
type: Array, type: Array,
default: () => [] default: () => []
},
auth:{
type:Object,
default:()=>{
return {
IsEdit:false
}
}
} }
}, },
watch: { watch: {
show(val){ show(val) {
console.log(1111111)
this.addLoading = false
if (val) { if (val) {
this.stuInfo = ""; this.stuInfo = "";
this.teaClassMsg.CourseId=0 this.teaClassMsg.CourseId = 0;
this.teaClassMsg.TeacherId=0 this.teaClassMsg.TeacherId = 0;
this.chapterList=[] this.chapterList = [];
this.teacherTimeList=[] this.teacherTimeList = [];
this.courseCheckList=[] this.courseCheckList = [];
this.stuList=[] this.stuList = [];
if (this.editType == 2) { this.allStuList = [];
this.getStu(); if (this.editType == 2) {
} this.getStu();
}
} }
} }
}, },
...@@ -280,11 +295,10 @@ export default { ...@@ -280,11 +295,10 @@ export default {
stuInfo: "", stuInfo: "",
checkStuList: [], checkStuList: [],
courseCheckList: [], courseCheckList: [],
addLoading:false, addLoading: false,
chapterList: [], //章节列表, chapterList: [], //章节列表,
checkChapter: {}, //选择的章节 checkChapter: {}, //选择的章节
returnString: [], //章节默认值 returnString: [], //章节默认值
}; };
}, },
mounted() { mounted() {
...@@ -294,13 +308,17 @@ export default { ...@@ -294,13 +308,17 @@ export default {
//开关弹窗 //开关弹窗
changeDig(val) { changeDig(val) {
this.$emit("changeshow", val); this.$emit("changeshow", val);
if (!val) {
this.stuList = [];
this.allStuList = [];
}
}, },
//获取课程 //获取课程
getCourseList() { getCourseList() {
queryCourseDropdownList({ queryCourseDropdownList({
IsQPrice: 1, IsQPrice: 1,
IsQuerySalePlat: 1, IsQuerySalePlat: 1,
IsScrollClass :1 IsScrollClass: 1
}).then(res => { }).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.CourseList = res.Data; this.CourseList = res.Data;
...@@ -337,11 +355,13 @@ export default { ...@@ -337,11 +355,13 @@ export default {
//获取老师的空闲上课时段 //获取老师的空闲上课时段
getCanTeacherTimeList() { getCanTeacherTimeList() {
this.teaClassMsg.Date = this.dateObj.date; this.teaClassMsg.Date = this.dateObj.date;
this.stuInfo = "";
if (this.teaClassMsg.TeacherId == 0) return; if (this.teaClassMsg.TeacherId == 0) return;
GetCanTeacherClassTimeList(this.teaClassMsg).then(res => { GetCanTeacherClassTimeList(this.teaClassMsg).then(res => {
this.teacherTimeList = res.Data; this.teacherTimeList = res.Data;
}); });
}, },
//获取学生列表
getStu() { getStu() {
this.stuMsg.CourseId = this.teaClassMsg.CourseId || 0; this.stuMsg.CourseId = this.teaClassMsg.CourseId || 0;
this.stuMsg.CourseGradeId = this.stuMsg.CourseGradeId =
...@@ -353,7 +373,7 @@ export default { ...@@ -353,7 +373,7 @@ export default {
this.allStuList = JSON.parse(JSON.stringify(res.Data)); this.allStuList = JSON.parse(JSON.stringify(res.Data));
}); });
}, },
//筛选学 //筛选学
filterStu(val, update) { filterStu(val, update) {
update(() => { update(() => {
if (val === "") { if (val === "") {
...@@ -366,7 +386,6 @@ export default { ...@@ -366,7 +386,6 @@ export default {
} }
}); });
}, },
addStu() {},
//获取章节 //获取章节
getChapterTree() { getChapterTree() {
if (this.teaClassMsg.CourseId == 0) return; if (this.teaClassMsg.CourseId == 0) return;
...@@ -400,8 +419,8 @@ export default { ...@@ -400,8 +419,8 @@ export default {
if (this.checkChapter.CourseRate && this.checkChapter.ChapterNo) { if (this.checkChapter.CourseRate && this.checkChapter.ChapterNo) {
this.getStu(); this.getStu();
} }
this.teaClassMsg.TeacherId=0 this.teaClassMsg.TeacherId = 0;
this.teacherTimeList=[] this.teacherTimeList = [];
}, },
subscribeCourse() { subscribeCourse() {
if ( if (
...@@ -441,6 +460,7 @@ export default { ...@@ -441,6 +460,7 @@ export default {
const totalTime = this.courseCheckList.reduce((pre, cur) => { const totalTime = this.courseCheckList.reduce((pre, cur) => {
return (pre += cur.Minutes); return (pre += cur.Minutes);
}, 0); }, 0);
console.log(452, this.courseCheckList, totalTime);
if (this.checkChapter.StudyMinutes !== totalTime) { if (this.checkChapter.StudyMinutes !== totalTime) {
this.$q.notify({ this.$q.notify({
message: "课时不匹配,请重新上课时段", message: "课时不匹配,请重新上课时段",
...@@ -486,51 +506,35 @@ export default { ...@@ -486,51 +506,35 @@ export default {
this.saveMsg.CourseGradeId = this.saveObj.CourseGradeId; this.saveMsg.CourseGradeId = this.saveObj.CourseGradeId;
this.saveMsg.ShiftSort = this.saveObj.ShiftSort; this.saveMsg.ShiftSort = this.saveObj.ShiftSort;
} }
this.addLoading=true this.addLoading = true;
SetAdminScrollAppointment(this.saveMsg).then(res => { SetAdminScrollAppointment(this.saveMsg)
this.addLoading=false .then(res => {
if (res.Code == 1) { this.addLoading = false;
this.getStu(); if (res.Code == 1) {
this.stuInfo = "";
if(this.editType==1){
this.$q
.dialog({
title: "预约成功",
message: "是否继续预约?",
cancel: "否",
ok: "是",
persistent: true
})
.onOk(() => {})
.onCancel(() => {
this.changeDig(false);
});
}else if(this.editType==2){
this.changeDig(false);
this.$q.notify({ this.$q.notify({
message: "操作成功", message: "操作成功",
position: "top", position: "top"
});
if (this.editType == 2) {
this.saveObj.GuestList.push({
GuestName: this.stuInfo.StuName,
AppointmentId: res.Data
}); });
}
this.stuInfo = "";
this.getStu();
this.$emit("success");
} }
})
this.$emit("success"); .catch(() => {
} this.addLoading = false;
}).catch(()=>{ });
this.addLoading=false
});
}, },
detailSuccessHandle() {
showAddStu() { this.getStu();
if ( this.$emit("success");
new Date(this.dateObj.date).getTime() <
new Date(QCalendar.today()).getTime()
) {
return false;
} else {
return true;
}
}, },
detailSuccessHandle(){ detailCloseHandle() {
this.changeDig(false); this.changeDig(false);
this.$emit("success"); this.$emit("success");
} }
......
...@@ -229,7 +229,13 @@ ...@@ -229,7 +229,13 @@
this.msg.TeacherId = Number(this.$route.query.TeacherId); this.msg.TeacherId = Number(this.$route.query.TeacherId);
} }
if(this.$route.query.TeacherIds){ if(this.$route.query.TeacherIds){
this.msg.TeacherIds = this.$route.query.TeacherIds; let arr=this.$route.query.TeacherIds.split(',')
let idsArr=[]
arr.map(e=>{
let _arr=e.split('-')
idsArr.push(_arr[1])
})
this.msg.TeacherIds = idsArr.toString();
} }
} }
this.getList(); this.getList();
......
...@@ -206,7 +206,14 @@ ...@@ -206,7 +206,14 @@
this.msgFinance.BatchId = id; this.msgFinance.BatchId = id;
SetCommissionPeriodsFinanace(this.msgFinance).then(res => { SetCommissionPeriodsFinanace(this.msgFinance).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.getList() this.getList();
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
} }
this.loading1 = false; this.loading1 = false;
}).catch(err => { }).catch(err => {
......
...@@ -152,6 +152,11 @@ ...@@ -152,6 +152,11 @@
</template> </template>
<template v-if="item.label=='合计回单'||item.label=='合计到访'||item.label=='合计转化率'"> <template v-if="item.label=='合计回单'||item.label=='合计到访'||item.label=='合计转化率'">
<el-table-column :prop="item.prop" :label="item.label" fixed="right" sortable width="115" :key="index"> <el-table-column :prop="item.prop" :label="item.label" fixed="right" sortable width="115" :key="index">
<template slot-scope="scope">
<a @click="showDetail(scope.row)" style="color:#67C23A;cursor:pointer;text-decoration:underline;">
{{scope.row[item.prop]}}
</a>
</template>
</el-table-column> </el-table-column>
</template> </template>
<template v-if="item.SubList&&item.SubList.length>0"> <template v-if="item.SubList&&item.SubList.length>0">
...@@ -213,6 +218,7 @@ ...@@ -213,6 +218,7 @@
}; };
}, },
created() { created() {
this.getEmployeeList();
this.CurrentUserInfo = this.getLocalStorage(); this.CurrentUserInfo = this.getLocalStorage();
if (this.CurrentUserInfo && this.CurrentUserInfo.ActionMenuList && this.CurrentUserInfo.ActionMenuList.length > if (this.CurrentUserInfo && this.CurrentUserInfo.ActionMenuList && this.CurrentUserInfo.ActionMenuList.length >
0) { 0) {
...@@ -248,13 +254,33 @@ ...@@ -248,13 +254,33 @@
this.msg.endTime = year + strLink + month + strLink + day; this.msg.endTime = year + strLink + month + strLink + day;
this.dateList.push(year + strLink + month + strLink + '01'); this.dateList.push(year + strLink + month + strLink + '01');
this.dateList.push(year + strLink + month + strLink + day); this.dateList.push(year + strLink + month + strLink + day);
this.getEmployeeList();
this.getData(); this.getData();
setTimeout(() => { setTimeout(() => {
this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 60; this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 60;
}, 200) }, 200)
}, },
methods: { methods: {
//跳转到客户列表
showDetail(row) {
if (this.CurrentUserInfo && (this.CurrentUserInfo.IsMarket == 1 || this.CurrentUserInfo.IsCourseConsultant ==
1)) {
var url = "/sale/mystu";
this.OpenNewUrl(url, {
startTime: this.msg.startTime,
endTime: this.msg.endTime,
createBy: row.Id,
})
} else {
var url = '/school/student';
this.OpenNewUrl(url, {
startTime: this.msg.startTime,
endTime: this.msg.endTime,
createBy: row.Id,
})
}
},
//下载渠道总表
downloadMarketChannelStudentStatic() { downloadMarketChannelStudentStatic() {
var msg = JSON.parse(JSON.stringify(this.msg)); var msg = JSON.parse(JSON.stringify(this.msg));
this.loading = true; this.loading = true;
......
...@@ -195,10 +195,12 @@ ...@@ -195,10 +195,12 @@
customFromList: [], //客户来源 customFromList: [], //客户来源
StuChannelList: [], //收客渠道 StuChannelList: [], //收客渠道
allStuChannelList: [], //所有收客渠道 allStuChannelList: [], //所有收客渠道
consultList: [] consultList: [],
CurrentUserInfo: {},
}; };
}, },
created() { created() {
this.CurrentUserInfo = this.getLocalStorage();
this.getSchool(); this.getSchool();
this.getStuStageList(); this.getStuStageList();
this.getCustomTypeList(); this.getCustomTypeList();
...@@ -217,6 +219,12 @@ ...@@ -217,6 +219,12 @@
if (this.$route.query.ChannelId) { if (this.$route.query.ChannelId) {
this.msg.StuChannel = this.$route.query.ChannelId; this.msg.StuChannel = this.$route.query.ChannelId;
} }
if (this.$route.query.createBy) {
if (this.CurrentUserInfo.IsManager == 1 && this.CurrentUserInfo.IsMarket == 1) {
this.msg.BelongType = 4;
this.msg.CreateIds.push(Number(this.$route.query.createBy));
}
}
this.getCustomerList(); this.getCustomerList();
this.getCustomFrom(); this.getCustomFrom();
this.GetStuChannelList(); this.GetStuChannelList();
...@@ -329,7 +337,7 @@ ...@@ -329,7 +337,7 @@
this.msg.StartTime = ""; this.msg.StartTime = "";
this.msg.EndTime = ""; this.msg.EndTime = "";
} }
this.loading = true; this.loading = true;
getStudentPage(this.msg) getStudentPage(this.msg)
.then(res => { .then(res => {
......
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
<div class="page-search row items-center"> <div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md"> <div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-4 Sysuser_Date"> <div class="col-4 Sysuser_Date">
<q-field filled> <q-field filled>
 <template v-slot:control> <template v-slot:control>
<el-date-picker v-model="dateList" type="daterange" style="width:100%" :picker-options="pickerOptions0" <el-date-picker v-model="dateList" type="daterange" style="width:100%" :picker-options="pickerOptions0"
align="right" value-format="yyyy-MM-dd" @change="getData" unlink-panels range-separator="至" align="right" value-format="yyyy-MM-dd" @change="getData" unlink-panels range-separator="至"
start-placeholder="开始日期" end-placeholder="结束日期"> start-placeholder="开始日期" end-placeholder="结束日期">
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
</q-field> </q-field>
</div> </div>
<div class="col-3 Sysuser_Date"> <div class="col-3 Sysuser_Date">
<q-field filled> <q-field filled>
 <template v-slot:control> <template v-slot:control>
<el-select class="topselect" v-model="msg.empList" @change="getData" style="width:100%;" collapse-tags <el-select class="topselect" v-model="msg.empList" @change="getData" style="width:100%;" collapse-tags
multiple filterable placeholder="请选择"> multiple filterable placeholder="请选择">
<el-option v-for="item in EmployeeList" :key="item.Id" :label="item.EmployeeName" :value="item.Id"> <el-option v-for="item in EmployeeList" :key="item.Id" :label="item.EmployeeName" :value="item.Id">
...@@ -56,10 +56,25 @@ ...@@ -56,10 +56,25 @@
<el-table-column prop="ChannelName" label="渠道名"> <el-table-column prop="ChannelName" label="渠道名">
</el-table-column> </el-table-column>
<el-table-column prop="ClueCount" label="回单" sortable> <el-table-column prop="ClueCount" label="回单" sortable>
<template slot-scope="scope">
<a @click="showDetail(scope.row)" style="color:#67C23A;cursor:pointer;text-decoration:underline;">
{{scope.row.ClueCount}}
</a>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="VisitCount" label="到访" sortable> <el-table-column prop="VisitCount" label="到访" sortable>
<template slot-scope="scope">
<a @click="showDetail(scope.row)" style="color:#67C23A;cursor:pointer;text-decoration:underline;">
{{scope.row.VisitCount}}
</a>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="OrderCount" label="合同数" sortable> <el-table-column prop="OrderCount" label="合同数" sortable>
<template slot-scope="scope">
<a @click="showDetail(scope.row)" style="color:#67C23A;cursor:pointer;text-decoration:underline;">
{{scope.row.VisitCount}}
</a>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="OrderIncome" label="新业绩金额" sortable> <el-table-column prop="OrderIncome" label="新业绩金额" sortable>
</el-table-column> </el-table-column>
...@@ -112,6 +127,7 @@ ...@@ -112,6 +127,7 @@
}; };
}, },
created() { created() {
this.getEmployeeList();
this.CurrentUserInfo = this.getLocalStorage(); this.CurrentUserInfo = this.getLocalStorage();
if (this.CurrentUserInfo && this.CurrentUserInfo.ActionMenuList && this.CurrentUserInfo.ActionMenuList.length > if (this.CurrentUserInfo && this.CurrentUserInfo.ActionMenuList && this.CurrentUserInfo.ActionMenuList.length >
0) { 0) {
...@@ -138,13 +154,46 @@ ...@@ -138,13 +154,46 @@
this.msg.endTime = year + strLink + month + strLink + day; this.msg.endTime = year + strLink + month + strLink + day;
this.dateList.push(year + strLink + month + strLink + '01'); this.dateList.push(year + strLink + month + strLink + '01');
this.dateList.push(year + strLink + month + strLink + day); this.dateList.push(year + strLink + month + strLink + day);
this.getEmployeeList();
this.getData(); this.getData();
setTimeout(() => { setTimeout(() => {
this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 90; this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 90;
}, 100) }, 100)
}, },
methods: { methods: {
//跳转到列表
showDetail(row) {
var url = "/sale/mystu";
if (this.CurrentUserInfo && (this.CurrentUserInfo.IsMarket == 1 || this.CurrentUserInfo.IsCourseConsultant ==
1)) {
url = "/sale/mystu";
} else {
url = '/school/student';
}
var CreateType = 2;
//同行渠道
if (this.msg.top_Check == 1) {
CreateType = 2;
}
//内部渠道
if (this.msg.top_Check == 2) {
CreateType = 3;
}
//学校渠道
if (this.msg.top_Check == 3) {
CreateType = 2;
}
//转介绍渠道
if (this.msg.top_Check == 4) {
CreateType = 4;
}
this.OpenNewUrl(url, {
CreateType: CreateType,
StuSourceId: row.ChannelId,
startTime: this.msg.startTime,
endTime: this.msg.endTime,
})
},
//下载同行渠道
downloadMarketCreateType() { downloadMarketCreateType() {
var msg = JSON.parse(JSON.stringify(this.msg)); var msg = JSON.parse(JSON.stringify(this.msg));
var fileName = "同行渠道.xls"; var fileName = "同行渠道.xls";
......
...@@ -61,6 +61,11 @@ ...@@ -61,6 +61,11 @@
v-model="msg.AdvisorStatus" ref="AdvisorStatus" :options="consultList" clearable label="当前状态" v-model="msg.AdvisorStatus" ref="AdvisorStatus" :options="consultList" clearable label="当前状态"
class="col-6 q-pb-lg" emit-value map-options /> class="col-6 q-pb-lg" emit-value map-options />
</div> </div>
<div class="col-3">
<q-select filled stack-label option-value="Id" @input="resetSearch" dense option-label="Name"
v-model="msg.StuChannel" ref="AdvisorStatus" :options="channelList" clearable label="渠道"
class="col-6 q-pb-lg" emit-value map-options />
</div>
</div> </div>
</div> </div>
<div class="page-content"> <div class="page-content">
...@@ -94,6 +99,9 @@ ...@@ -94,6 +99,9 @@
import { import {
GetStudentAdvisorConfigList GetStudentAdvisorConfigList
} from "../../api/customerstudent/customerstudent"; } from "../../api/customerstudent/customerstudent";
import {
GetStuChannelList
} from "../../api/sale/sale";
import stulist from '../../components/school/student/stulist' import stulist from '../../components/school/student/stulist'
import { import {
mapGetters mapGetters
...@@ -126,7 +134,10 @@ ...@@ -126,7 +134,10 @@
StuType: '', StuType: '',
QStudentStatus: 1, //客户状态 1有效 2无效 QStudentStatus: 1, //客户状态 1有效 2无效
AdvisorStatus: '', //当前状态 AdvisorStatus: '', //当前状态
StuChannel:"", StuChannel: "",
CreateIds: [],
CreateType: "", //来源类型
StuSourceId: "", //来源人编号
}, },
dateArray: [], //日期数组 dateArray: [], //日期数组
pageCount: 0, pageCount: 0,
...@@ -138,7 +149,9 @@ ...@@ -138,7 +149,9 @@
AuthObj: { AuthObj: {
isShowDownload: true, isShowDownload: true,
}, },
consultList: [] consultList: [],
//渠道列表
channelList: [],
} }
}, },
computed: { computed: {
...@@ -148,6 +161,7 @@ ...@@ -148,6 +161,7 @@
this.getEmployeeList(); this.getEmployeeList();
this.getStuStageList(); this.getStuStageList();
this.getCustomTypeList(); this.getCustomTypeList();
this.queryChannelList();
}, },
mounted() { mounted() {
this.currentUrl = this.$route.path; this.currentUrl = this.$route.path;
...@@ -162,10 +176,27 @@ ...@@ -162,10 +176,27 @@
if (this.$route.query.ChannelId) { if (this.$route.query.ChannelId) {
this.msg.StuChannel = this.$route.query.ChannelId; this.msg.StuChannel = this.$route.query.ChannelId;
} }
if (this.$route.query.createBy) {
this.msg.CreateBy = Number(this.$route.query.createBy);
}
if (this.$route.query.CreateType) {
this.msg.CreateType = Number(this.$route.query.CreateType);
}
if (this.$route.query.StuSourceId) {
this.msg.StuSourceId = Number(this.$route.query.StuSourceId);
}
this.getStatusList(); this.getStatusList();
this.getStudent() this.getStudent()
}, },
methods: { methods: {
//获取渠道列表
queryChannelList() {
GetStuChannelList({}).then(res => {
if (res.Code == 1) {
this.channelList = res.Data;
}
})
},
//获取跟进状态下拉 //获取跟进状态下拉
getStatusList() { getStatusList() {
let msg = { let msg = {
......
...@@ -384,9 +384,14 @@ ...@@ -384,9 +384,14 @@
@click="transferClass(props.row, 1)" /> @click="transferClass(props.row, 1)" />
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left: 10px"> <q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left: 10px">
<q-list> <q-list>
<q-item clickable v-close-popup @click="showAddEvent(props.row)"> <q-item dense clickable v-close-popup @click="showAddEvent(props.row)">
<q-item-section> <q-item-section>
<q-item-label>添加事件</q-item-label> <q-item-label overline>添加事件</q-item-label>
</q-item-section>
</q-item>
<q-item dense clickable v-close-popup @click="showChangeCourse(props.row)">
<q-item-section>
<q-item-label overline >跳课</q-item-label>
</q-item-section> </q-item-section>
</q-item> </q-item>
</q-list> </q-list>
...@@ -422,6 +427,8 @@ ...@@ -422,6 +427,8 @@
<studentRight-form v-if="isShowStuRight" :isJudgeTrans="isJudgeTrans" :BelongType="BelongType" :save-obj="stuOption" <studentRight-form v-if="isShowStuRight" :isJudgeTrans="isJudgeTrans" :BelongType="BelongType" :save-obj="stuOption"
@close="closeStuForm" @success="refreshStuList" @reload="refreshStuList"> @close="closeStuForm" @success="refreshStuList" @reload="refreshStuList">
</studentRight-form> </studentRight-form>
<!-- 跳课 -->
<JumpCourse v-model="isShowChangeCourse" :saveObj="ChangeCourseObj" @success="refreshPage" ></JumpCourse>
</div> </div>
</template> </template>
<script> <script>
...@@ -453,6 +460,7 @@ ...@@ -453,6 +460,7 @@
import list from "../../components/stuMan/makeUpHours.vue"; //可补课课时,缺勤次数,请假次数 import list from "../../components/stuMan/makeUpHours.vue"; //可补课课时,缺勤次数,请假次数
import eventLog from "../../components/stuMan/eventRecord.vue"; //事件记录 import eventLog from "../../components/stuMan/eventRecord.vue"; //事件记录
import studentRightForm from "../../components/school/student/studentRight-form"; import studentRightForm from "../../components/school/student/studentRight-form";
import JumpCourse from "../../components/stuMan/jumpCourse"
import { import {
queryEmployee queryEmployee
} from "../../api/users/user"; } from "../../api/users/user";
...@@ -469,7 +477,8 @@ ...@@ -469,7 +477,8 @@
myOrderForm, myOrderForm,
list, list,
eventLog, eventLog,
studentRightForm studentRightForm,
JumpCourse
}, },
data() { data() {
...@@ -644,6 +653,18 @@ ...@@ -644,6 +653,18 @@
field: "MakeUpHours", field: "MakeUpHours",
align: "left" align: "left"
}, },
{
name: "CourseChapterNo",
label: "已上课次数",
field: "CourseChapterNo",
align: "left"
},
{
name: "AppointNum",
label: "预约次数",
field: "AppointNum",
align: "left"
},
{ {
name: "AbsenceNum", name: "AbsenceNum",
label: "缺勤次数", label: "缺勤次数",
...@@ -742,7 +763,9 @@ ...@@ -742,7 +763,9 @@
TransListData: [], //转介人数据 TransListData: [], //转介人数据
MyTransListData: [], MyTransListData: [],
source: 0, //1:从课程列表进入 source: 0, //1:从课程列表进入
courseName: "" courseName: "",
isShowChangeCourse:false,
ChangeCourseObj:{}
}; };
}, },
created() { created() {
...@@ -1145,6 +1168,10 @@ ...@@ -1145,6 +1168,10 @@
}, },
refreshStuList() { refreshStuList() {
this.getList(); this.getList();
},
showChangeCourse(item){
this.isShowChangeCourse=true
this.ChangeCourseObj=item
} }
} }
}; };
......
This diff is collapsed.
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