Commit 3d713c9f authored by 罗超's avatar 罗超

新增待办工作功能

parent 7d947a57
......@@ -48,7 +48,7 @@ module.exports = function(ctx) {
env: ctx.dev ? {
//API: 'http://localhost:5001/api',
API: 'http://192.168.10.2:8085/api',
API: 'http://192.168.10.46:8300/api',
// API: 'https://eduapi.oytour.com/api',
API_ZC: 'http://192.168.10.2:8087/api',
API_SK: 'ws:192.168.10.214:',
......
......@@ -25,7 +25,7 @@ export default {
</script>
<style>
@import url("//at.alicdn.com/t/font_2077629_9ty53q1g2bo.css");
@import url("//at.alicdn.com/t/font_2077629_3u1r9gsz178.css");
@font-face {
font-family: "din";
src: url("./assets/font/DIN-Bold.otf") format("opentype");
......
......@@ -11,7 +11,75 @@ export function getStudentAttendanceDayStatistics(data) {
});
}
export function getTodayVisitList(data){
export function getTodayClue(data) {
return request({
url: '/UserCenter/GetTodayClue',
method: 'post',
data
});
}
export function getTodayConnect(data) {
return request({
url: '/UserCenter/GetTodayConnect',
method: 'post',
data
});
}
export function getMyClue(data) {
return request({
url: '/UserCenter/MyClue',
method: 'post',
data
});
}
export function getMyStudent(data) {
return request({
url: '/UserCenter/MyStudent',
method: 'post',
data
});
}
export function getTodayFollow(data) {
return request({
url: '/UserCenter/TodayFollow',
method: 'post',
data
});
}
export function getGraduateStudent(data) {
return request({
url: '/UserCenter/GraduateStudent',
method: 'post',
data
});
}
export function getMyOrderNotReceiveContract(data) {
return request({
url: '/UserCenter/MyOrderNotReceiveContract',
method: 'post',
data
});
}
export function getMyOrderNotBalance(data) {
return request({
url: '/UserCenter/MyOrderNotBalance',
method: 'post',
data
});
}
export function getTodayStatic(data) {
return request({
url: '/UserCenter/GetTodayStatic',
method: 'post',
data
});
}
export function getTodayVisitList(data) {
return request({
url: '/DutyPlan/GetDutyTodayVisit',
method: 'post',
......
......@@ -11,3 +11,7 @@
.perfectFont {
font-family: 'perfectFont' !important;
}
.pingfang {
font-family: 'pingfang' !important;
}
......@@ -57,6 +57,8 @@
z-index: 1
box-shadow: rgba(0, 0, 0, 0.05) 2px 0px 0px
th:nth-child(-n+2)
z-index: 30 !important
td.none-shadow
box-shadow: none
......@@ -90,8 +92,8 @@
.sticky-header-table
/* height or max-height is important */
// .q-table__bottom,
.q-table__top,
.q-table__bottom,
thead tr:first-child th
/* bg color is important for th; just specify one */
background-color: #f5f6f7
......@@ -123,7 +125,7 @@
z-index: 3
/* bg color is important; just specify one */
/* background: #fff */
background-color:#f5f6f7
background-color: #f5f6f7
/* this will be the loading indicator */
thead tr:last-child th
......@@ -158,7 +160,28 @@
position: sticky
z-index: 2 !important
thead tr th:nth-child(-n+2)
z-index: 3 !important
z-index: 30 !important
thead tr:first-child th
top: 0
/* this is when the loading indicator appears */
&.q-table--loading thead tr:last-child th
/* height of all previous header rows */
top: 48px
.my-sticky-header-table
/* height or max-height is important */
// height: 310px
.q-table__top,
thead tr:first-child th
/* bg color is important for th; just specify one */
background-color: #f5f6f7
z-index: 2
thead tr th
position: sticky
z-index: 20
thead tr:first-child th
top: 0
......
......@@ -178,6 +178,7 @@ export default {
});
this.getList();
this.clearMsg();
this.$emit("success");
}
})
.catch(() => {});
......
......@@ -2,30 +2,59 @@
<template>
<div>
<div class="row wrap">
<q-btn label="新增" color="accent q-mb-lg" size="sm"
v-if="!saveObj.IsHaveCurseManager || userInfo.IsCourseConsultant == 1" @click="isShowAdd = true" />
<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" />
<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">
<div class="row wrap studentDate">
<!-- <q-input filled class="col-6 q-pb-lg q-pr-lg" dense v-model="yueMsg.AppointmentPoint" label="约访地点"></q-input> -->
<q-field filled class="q-pb-lg" dense>
<template v-slot:control>
<el-date-picker v-model="yueMsg.AppointmentTime" type="datetime" size="mini" style="width:228px"
placeholder="选择约访日期时间!">
<el-date-picker
v-model="yueMsg.AppointmentTime"
type="datetime"
size="mini"
style="width:228px"
placeholder="选择约访日期时间!"
>
</el-date-picker>
</template>
</q-field>
</div>
<div class="row wrap">
<q-input filled v-model="yueMsg.Remark" dense :rows="3" type="textarea" class="col-12 q-pb-lg q-pr-lg"
label="备注">
<q-input
filled
v-model="yueMsg.Remark"
dense
:rows="3"
type="textarea"
class="col-12 q-pb-lg q-pr-lg"
label="备注"
>
</q-input>
</div>
<div class="row wrap justify-end q-pr-lg" style="margin-bottom:10px;">
<q-btn label="保存" color="accent q-mb-lg" size="md" @click="savePoint()" />
<q-btn
label="保存"
color="accent q-mb-lg"
size="md"
@click="savePoint()"
/>
</div>
</template>
<div style="display:flex;flex:1;flex-direction: column;overflow:hidden;">
......@@ -49,7 +78,10 @@
</div>
</div>
<div style="display:flex;margin-top:10px;">
<div @click="delVisit(tItem.Id)" class="visit_delete text-negative">
<div
@click="delVisit(tItem.Id)"
class="visit_delete text-negative"
>
删除
</div>
<div @click="clickItem(tItem)" class="stu_ComFeed">
......@@ -60,15 +92,42 @@
}}
<q-popup-proxy>
<q-banner v-if="isShowEdit">
<div class="row wrap" style="margin-top:10px;width:300px;">
<q-input filled v-model="feedBackMsg.Feedback" :rows="3" type="textarea"
class="col-12 q-pb-sm" label="请输入反馈内容">
<div
class="row wrap"
style="margin-top:10px;width:300px;"
>
<q-input
filled
v-model="feedBackMsg.Feedback"
:rows="3"
type="textarea"
class="col-12 q-pb-sm"
label="请输入反馈内容"
>
</q-input>
<q-select filled v-model="stuStageId" dense :options="cusStateList" option-label="Name"
option-value="Id" emit-value map-options label="客户状态" class="col-12 q-pb-sm" />
<q-select
filled
v-model="stuStageId"
dense
:options="cusStateList"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户状态"
class="col-12 q-pb-sm"
/>
</div>
<div class="row wrap" style="float:right;margin-bottom:10px;">
<q-btn label="保存" color="accent" size="sm" @click="SetFeedBack()" />
<div
class="row wrap"
style="float:right;margin-bottom:10px;"
>
<q-btn
label="保存"
color="accent"
size="sm"
@click="SetFeedBack()"
/>
</div>
</q-banner>
</q-popup-proxy>
......@@ -87,21 +146,27 @@
</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 {
import {
saveStudentAppointment,
queryStudentAppointmentPage,
deleteStudentAppointment,
saveStudentAppointmentFeedBack,
SetStuStage
} from "../../../api/customerstudent/customerstudent";
} from "../../../api/customerstudent/customerstudent";
export default {
export default {
meta: {
title: ""
},
......@@ -185,6 +250,7 @@
this.feedBackMsg.Id = 0;
this.feedBackMsg.Feedback = "";
this.isShowEdit = false;
this.$emit("success");
}
});
if (this.stuStageId ?? 0 > 0) {
......@@ -290,5 +356,5 @@
});
}
}
};
};
</script>
This diff is collapsed.
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
</div>
<div class="q-my-md row">
<q-input
standout
v-model="msg.billId"
dense
type="text"
style="width:250px;"
label="业务单号"
class="q-mr-md"
/>
<q-select
clearable
dense
filled
option-value="Id"
option-label="Name"
v-model="msg.receipt"
:options="OrderTypeList"
emit-value
map-options
style="width:250px;"
label="单据类型"
class="q-mr-md"
/>
<!-- <q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/> -->
</div>
<div style="height:calc(100% - 108px);overflow-y:auto;">
<changeClassManager
:isComponents="true"
:billId="msg.billId"
:receipt="msg.receipt"
></changeClassManager>
</div>
</div>
</template>
<script>
import changeClassManager from "../../pages/teacher/changeClassManager.vue";
import { GetEducationReceiptType } from "../../api/teacher/index";
export default {
components: { changeClassManager },
props: ["node"],
data() {
return {
msg: {
billId: "",
receipt: null
},
OrderTypeList: []
};
},
mounted() {
this.getEducationType();
},
methods: {
getEducationType() {
GetEducationReceiptType()
.then(res => {
if (res.Code == 1) {
this.OrderTypeList = res.Data;
}
})
.catch(() => {});
}
}
};
</script>
<style></style>
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
<q-icon name="iconfont icon-bangzhu" class="q-ml-md">
<q-tooltip anchor="bottom middle" :offset="[10, 10]">
已创建了订单,但是还未领取合同的学员订单。
</q-tooltip>
</q-icon>
</div>
<div class="q-my-md row items-center">
<q-input
standout
v-model="msg.KeyWords"
dense
type="text"
style="width:250px;"
label="关键字(订单号/名称/微信/手机号)"
class="q-mr-md"
/>
<q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/>
<div class="col text-right text-grey-6 f12">
TIPS:语培电子合同是财务系统重要的对账凭证,请及时领取电子合同,领取后进入“市场-合同”进行管理
</div>
</div>
<div style="height:calc(100% - 158px)">
<q-table
:loading="loading"
:data="stus"
:columns="cols"
:pagination="pageMsg"
no-data-label="暂无相关数据"
flat
separator="none"
class="sticky-right-column-table sticky-column-table my-sticky-header-table"
style="height:100%;"
hide-bottom
>
<template v-slot:body-cell-OrderId="props">
<q-td :props="props">
<div
class="text-primary cursor-pointer"
@click="goOrderdetails(props.row)"
>
{{ props.value }}
</div>
</q-td>
</template>
<template v-slot:body-cell-GuestName="props">
<q-td :props="props">
<div
class="text-primary cursor-pointer"
@click="showStuDetailInfo(props.row)"
>
{{ props.value }}
</div>
</q-td>
</template>
<template v-slot:body-cell-RenewState="props">
<q-td :props="props">
<div
:class="{ 'text-negative': props.value == '2' }"
@click="showStuDetailInfo(props.row)"
>
{{ props.value == 2 ? "续费订单" : "首次报名" }}
</div>
</q-td>
</template>
<template v-slot:body-cell-options="props">
<q-td :props="props">
<q-btn
color="primary"
flat
dense
label="领取合同"
class="f12"
@click="takeContractTwo(props.row)"
/>
</q-td>
</template>
</q-table>
</div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination
v-model="msg.PageIndex"
:max="pageCount"
@input="changePage"
class="full-width justify-end"
color="primary"
:input="true"
>
</q-pagination>
</div>
<MyOrderForm
v-if="isShowmyorderForm"
:save-obj="myorderObjOption"
@close="closeMOSaveForm"
></MyOrderForm>
<studentRightForm
:isJudgeTrans="0"
v-if="isShowStuRight"
:BelongType="1"
:checkType="0"
:save-obj="stuObj"
@close="closeStuForm"
></studentRightForm>
<eduinfo-form
v-if="isShowEduForm"
:seting-obj="eduObj"
@close="closeEdudia"
@success="refreshPage"
>
</eduinfo-form>
</div>
</template>
<script>
import { getMyOrderNotReceiveContract } from "../../api/stuMan/index";
import EduinfoForm from "../sale/eduinfo-form.vue";
import MyOrderForm from "../sale/myOrder-form.vue";
import studentRightForm from "../school/student/studentRight-form";
export default {
components: { MyOrderForm, studentRightForm, EduinfoForm },
props: ["node"],
data() {
return {
stus: [],
loading: false,
isJudgeTrans: 1,
pageCount: 0,
msg: {
PageIndex: 1,
pageSize: 20,
KeyWords: ""
},
cols: [
{
name: "OrderId",
label: "订单编号",
field: "OrderId",
align: "left"
},
{
name: "ClassName",
label: "班级名称",
field: "ClassName",
align: "left"
},
{
name: "CourseName",
label: "课程名称",
field: "CourseName",
align: "left"
},
{
name: "GuestName",
label: "学员名称",
field: "GuestName",
align: "left"
},
{
name: "StuGuestStateName",
label: "学员状态",
field: "StuGuestStateName",
align: "left"
},
{
name: "OrderStateName",
label: "订单状态",
field: "OrderStateName",
align: "left"
},
{
name: "TotalHours",
label: "总课时",
field: "TotalHours",
align: "left"
},
{
name: "CompleteHours",
label: "完成课时",
field: "CompleteHours",
align: "left"
},
{
name: "RenewState",
label: "订单类型",
field: "RenewState",
align: "left"
},
{
name: "options",
label: "操作",
align: "left"
}
],
myorderObjOption: null,
isShowmyorderForm: false,
stuObj: null,
isShowStuRight: false,
pageMsg: {
rowsPerPage: 20
},
eduObj: null,
isShowEduForm: false
};
},
mounted() {
this.getStudent();
},
methods: {
getStudent() {
if (this.loading) return;
this.loading = true;
getMyOrderNotReceiveContract(this.msg)
.then(r => {
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
},
//显示订单详情
goOrderdetails(item) {
item.tab = "";
this.myorderObjOption = item;
this.isShowmyorderForm = true;
},
//关闭订单详情
closeMOSaveForm() {
this.isShowmyorderForm = false;
},
showStuDetailInfo(item) {
this.stuObj = { StuId: item.StuId };
this.isShowStuRight = true;
},
closeStuForm() {
this.isShowStuRight = false;
},
takeContractTwo(item) {
let obj = {
OrderId: item.OrderId,
GuestId: item.GuestId,
ContractId: 0
};
this.eduObj = obj;
this.isShowPop = false;
this.isShowEduForm = true;
},
closeEdudia() {
this.isShowEduForm = false;
},
refreshPage() {
this.getStudent();
}
}
};
</script>
<style></style>
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
<q-icon name="iconfont icon-bangzhu" class="q-ml-md">
<q-tooltip anchor="bottom middle" :offset="[10, 10]">
线索分配给我,但是从未跟进过的线索
</q-tooltip>
</q-icon>
</div>
<div class="q-my-md row items-center">
<q-input
standout
v-model="msg.KeyWords"
dense
type="text"
style="width:250px;"
label="关键字(名称/微信/手机号)"
class="q-mr-md"
/>
<q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/>
<div class="col text-right text-grey-6 f12">
TIPS:在线索资料-操作跟进-添加跟进信息后即可完成本项工作
</div>
</div>
<div style="height:calc(100% - 158px)">
<stulist
:dataList="stus"
@reload="getStudent"
@success="refreshPage"
:loading="loading"
ref="stuList"
:showHeader="false"
:isJudgeTrans="isJudgeTrans"
height="100%"
:noSelect="true"
></stulist>
</div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination
v-model="msg.PageIndex"
:max="pageCount"
@input="changePage"
class="full-width justify-end"
color="primary"
:input="true"
>
</q-pagination>
</div>
</div>
</template>
<script>
import stulist from "../school/student/stulist";
import { getMyClue } from "../../api/stuMan/index";
export default {
components: { stulist },
props: ["node"],
data() {
return {
stus: [],
loading: false,
isJudgeTrans: 1,
pageCount: 0,
msg: {
PageIndex: 1,
pageSize: 12,
KeyWords: ""
}
};
},
mounted() {
this.getStudent();
},
methods: {
getStudent() {
if (this.loading) return;
this.loading = true;
getMyClue(this.msg)
.then(r => {
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
refreshPage() {
this.getStudent();
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
}
}
};
</script>
<style></style>
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
<q-icon name="iconfont icon-bangzhu" class="q-ml-md">
<q-tooltip anchor="bottom middle" :offset="[10, 10]">
剩余不足20个课时的学员,将会出现在此报表中
</q-tooltip>
</q-icon>
</div>
<div class="q-my-md row items-center">
<q-input
standout
v-model="msg.KeyWords"
dense
type="text"
style="width:250px;"
label="关键字(名称/微信/手机号)"
class="q-mr-md"
/>
<q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/>
<div class="col text-right text-grey-6 f12">
TIPS:此处的信息会作为持续性提醒,暂时无法消除。
</div>
</div>
<div style="height:calc(100% - 158px)">
<stulist
:dataList="stus"
@reload="getStudent"
@success="refreshPage"
:loading="loading"
ref="stuList"
:showHeader="false"
:isJudgeTrans="isJudgeTrans"
height="100%"
:noSelect="true"
></stulist>
</div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination
v-model="msg.PageIndex"
:max="pageCount"
@input="changePage"
class="full-width justify-end"
color="primary"
:input="true"
>
</q-pagination>
</div>
</div>
</template>
<script>
import stulist from "../school/student/stulist";
import { getGraduateStudent } from "../../api/stuMan/index";
export default {
components: { stulist },
props: ["node"],
data() {
return {
stus: [],
loading: false,
isJudgeTrans: 1,
pageCount: 0,
msg: {
PageIndex: 1,
pageSize: 12,
KeyWords: ""
}
};
},
mounted() {
this.getStudent();
},
methods: {
getStudent() {
if (this.loading) return;
this.loading = true;
getGraduateStudent(this.msg)
.then(r => {
r.Data.PageData.forEach(x => {
x.StuName = x.GuestName;
x.StuId = x.Student_Id;
});
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
refreshPage() {
this.getStudent();
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
}
}
};
</script>
<style></style>
<template>
<div class="full-height q-pa-md row bg-grey-2">
<div class="todolist-left-box bg-white rounded-borders q-py-md q-mr-md">
<q-tabs
v-model="currentMenu"
vertical
no-caps
inline-label
active-color="primary"
>
<q-tab
v-for="x in menulist"
:key="x.id"
:name="x.id.toString()"
:icon="`iconfont ${x.icon}`"
:label="x.name"
></q-tab>
</q-tabs>
</div>
<div class="col bg-white rounded-borders full-height">
<q-tab-panels
v-model="currentMenu"
animated
swipeable
vertical
transition-prev="jump-up"
transition-next="jump-up"
class="full-height"
>
<q-tab-panel name="1" class="full-height">
<todoToday :node="menulist[parseInt(currentMenu) - 1]"></todoToday>
</q-tab-panel>
<q-tab-panel name="2" class="full-height">
<todoStu :node="menulist[parseInt(currentMenu) - 1]"></todoStu>
</q-tab-panel>
<q-tab-panel name="3" class="full-height">
<distribution
:node="menulist[parseInt(currentMenu) - 1]"
></distribution>
</q-tab-panel>
<q-tab-panel name="4" class="full-height">
<students :node="menulist[parseInt(currentMenu) - 1]"></students>
</q-tab-panel>
<q-tab-panel name="5" class="full-height">
<contractInfo
:node="menulist[parseInt(currentMenu) - 1]"
></contractInfo>
</q-tab-panel>
<q-tab-panel name="6" class="full-height">
<payee :node="menulist[parseInt(currentMenu) - 1]"></payee>
</q-tab-panel>
<q-tab-panel name="7" class="full-height">
<todayFollow
:node="menulist[parseInt(currentMenu) - 1]"
></todayFollow>
</q-tab-panel>
<q-tab-panel name="8" class="full-height">
<graduation :node="menulist[parseInt(currentMenu) - 1]"></graduation>
</q-tab-panel>
<q-tab-panel name="9" class="full-height">
<financialDocuments :isComponents="true"></financialDocuments>
</q-tab-panel>
<q-tab-panel name="10" class="full-height">
<business :node="menulist[parseInt(currentMenu) - 1]"></business>
</q-tab-panel>
</q-tab-panels>
</div>
</div>
</template>
<script>
import todoToday from "./todoToday.vue";
import todoStu from "./todoStu.vue";
import distribution from "./distribution.vue";
import students from "./students.vue";
import todayFollow from "./todayFollow.vue";
import graduation from "./graduation.vue";
import contractInfo from "./contract.vue";
import payee from "./payee.vue";
import business from "./business.vue";
import financialDocuments from "../../pages/financial/financalDocument/FinancialDocuments.vue";
export default {
components: {
todoToday,
todoStu,
distribution,
students,
todayFollow,
graduation,
contractInfo,
payee,
business,
financialDocuments
},
data() {
return {
currentMenu: null,
currentNode: null,
menulist: [
{
id: 1,
name: "今日需联系线索",
msg: 0,
icon: "icon-xiansuo"
},
{
id: 2,
name: "今日需联系学员",
msg: 0,
icon: "icon-xueyuan2"
},
{
id: 3,
name: "分配给我的线索",
msg: 0,
icon: "icon-fenpei"
},
{
id: 4,
name: "分配给我的学员",
msg: 0,
icon: "icon-fenpeijiaose"
},
{
id: 5,
name: "待申领合同",
msg: 0,
icon: "icon-hetong"
},
{
id: 6,
name: "待收款提醒",
msg: 0,
icon: "icon-shoukuan"
},
{
id: 7,
name: "今日被跟进学员",
msg: 0,
icon: "icon-genjin"
},
{
id: 8,
name: "即将毕业学员",
msg: 0,
icon: "icon-biyejieye"
},
{
id: 9,
name: "待审核财务单据",
msg: 0,
icon: "icon-caiwu1"
},
{
id: 10,
name: "待审核业务单据",
msg: 0,
icon: "icon-yewu"
}
]
};
},
mounted() {
this.currentMenu = this.menulist[0].id.toString();
},
methods: {}
};
</script>
<style>
.todolist-left-box {
width: 200px;
overflow-y: auto;
}
.q-tabs--vertical .justify-center,
.q-tabs--vertical .flex-center {
justify-content: unset !important;
}
</style>
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
</div>
<div class="q-my-md row">
<q-input
standout
v-model="msg.KeyWords"
dense
type="text"
style="width:250px;"
label="关键字(名称/微信/手机号)"
class="q-mr-md"
/>
<q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/>
<div class="col text-right text-grey-6 f12">
TIPS:创建订单后,请及时完成订单款项的入账动作,收款单据点击“修改-选择学员-制单”完成此项任务。
</div>
</div>
<div style="height:calc(100% - 158px);overflow-y:auto;">
<orderlist
:dataList="stus"
@success="refreshPage"
:loading="loading"
:authObj="authObj"
></orderlist>
</div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination
v-model="msg.PageIndex"
:max="pageCount"
@input="changePage"
class="full-width justify-end"
color="primary"
:input="true"
>
</q-pagination>
</div>
</div>
</template>
<script>
import orderlist from "../sale/orderlist.vue";
import { getMyOrderNotBalance } from "../../api/stuMan/index";
export default {
components: { orderlist },
props: ["node"],
data() {
return {
stus: [],
loading: false,
isJudgeTrans: 1,
pageCount: 0,
msg: {
PageIndex: 1,
pageSize: 10,
KeyWords: ""
},
//权限判断
authObj: {
isShowGuestBtn: 1, //显示新增学员名单按钮
isShowFinanceBtn: true, //显示财务单据按钮
isShowTransOrder: true, //显示转交订单按钮
isShowSaleRemark: true, //显示修改销售备注
isShowBackClass: true, //显示退课按钮
isShowRenewClass: true, //显示续课按钮
isShowTransClassOrder: true, //现在转班按钮
isShowSeparater: true //显示分拆按钮
}
};
},
mounted() {
this.getStudent();
},
methods: {
getStudent() {
if (this.loading) return;
this.loading = true;
getMyOrderNotBalance(this.msg)
.then(r => {
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
console.log(this.stus);
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
refreshPage() {
this.getStudent();
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
}
}
};
</script>
<style></style>
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
<q-icon name="iconfont icon-bangzhu" class="q-ml-md">
<q-tooltip anchor="bottom middle" :offset="[10, 10]">
分配给我的学员,但是我从未填写跟进信息的学员
</q-tooltip>
</q-icon>
</div>
<div class="q-my-md row items-center">
<q-input
standout
v-model="msg.KeyWords"
dense
type="text"
style="width:250px;"
label="关键字(名称/微信/手机号)"
class="q-mr-md"
/>
<q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/>
<div class="col text-right text-grey-6 f12">
TIPS:在线索资料-操作跟进-添加跟进信息后即可完成本项工作
</div>
</div>
<div style="height:calc(100% - 158px)">
<stulist
:dataList="stus"
@reload="getStudent"
@success="refreshPage"
:loading="loading"
ref="stuList"
:showHeader="false"
:isJudgeTrans="isJudgeTrans"
height="100%"
:noSelect="true"
></stulist>
</div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination
v-model="msg.PageIndex"
:max="pageCount"
@input="changePage"
class="full-width justify-end"
color="primary"
:input="true"
>
</q-pagination>
</div>
</div>
</template>
<script>
import stulist from "../school/student/stulist";
import { getMyStudent } from "../../api/stuMan/index";
export default {
components: { stulist },
props: ["node"],
data() {
return {
stus: [],
loading: false,
isJudgeTrans: 1,
pageCount: 0,
msg: {
PageIndex: 1,
pageSize: 12,
KeyWords: ""
}
};
},
mounted() {
this.getStudent();
},
methods: {
getStudent() {
if (this.loading) return;
this.loading = true;
getMyStudent(this.msg)
.then(r => {
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
refreshPage() {
this.getStudent();
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
}
}
};
</script>
<style></style>
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
<q-icon name="iconfont icon-bangzhu" class="q-ml-md">
<q-tooltip anchor="bottom middle" :offset="[10, 10]">
查询我参与的学员,并且今日有被跟进的信息
</q-tooltip>
</q-icon>
</div>
<div class="q-my-md row items-center">
<q-input
standout
v-model="msg.KeyWords"
dense
type="text"
style="width:250px;"
label="关键字(名称/微信/手机号)"
class="q-mr-md"
/>
<q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/>
<div class="col text-right text-grey-6 f12">
TIPS:点击学员名称,“记录”项中,即可查看今日跟进记录
</div>
</div>
<div style="height:calc(100% - 158px)">
<stulist
:dataList="stus"
@reload="getStudent"
@success="refreshPage"
:loading="loading"
ref="stuList"
:showHeader="false"
:isJudgeTrans="isJudgeTrans"
height="100%"
:noSelect="true"
></stulist>
</div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination
v-model="msg.PageIndex"
:max="pageCount"
@input="changePage"
class="full-width justify-end"
color="primary"
:input="true"
>
</q-pagination>
</div>
</div>
</template>
<script>
import stulist from "../school/student/stulist";
import { getTodayFollow } from "../../api/stuMan/index";
export default {
components: { stulist },
props: ["node"],
data() {
return {
stus: [],
loading: false,
isJudgeTrans: 1,
pageCount: 0,
msg: {
PageIndex: 1,
pageSize: 12,
KeyWords: ""
}
};
},
mounted() {
this.getStudent();
},
methods: {
getStudent() {
if (this.loading) return;
this.loading = true;
getTodayFollow(this.msg)
.then(r => {
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
refreshPage() {
this.getStudent();
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
}
}
};
</script>
<style></style>
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
<q-icon name="iconfont icon-bangzhu" class="q-ml-md">
<q-tooltip anchor="bottom middle" :offset="[10, 10]">
课程顾问或老师需要按照公司的规定,定期跟进学员的最新动态信息,本表中是你还未跟进的学员
</q-tooltip>
</q-icon>
</div>
<div class="q-my-md row items-center">
<q-input
standout
v-model="msg.KeyWords"
dense
type="text"
style="width:250px;"
label="关键字(名称/微信/手机号)"
class="q-mr-md"
/>
<q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/>
<div class="col text-right text-grey-6 f12">
TIPS:在学员资料-操作跟进-添加跟进信息后即可完成本项工作
</div>
</div>
<div style="height:calc(100% - 158px)">
<stulist
:dataList="stus"
@reload="getStudent"
@success="refreshPage"
:loading="loading"
ref="stuList"
:showHeader="false"
:isJudgeTrans="isJudgeTrans"
height="100%"
:noSelect="true"
></stulist>
</div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination
v-model="msg.PageIndex"
:max="pageCount"
@input="changePage"
class="full-width justify-end"
color="primary"
:input="true"
>
</q-pagination>
</div>
</div>
</template>
<script>
import stulist from "../school/student/stulist";
import { getTodayConnect } from "../../api/stuMan/index";
export default {
components: { stulist },
props: ["node"],
data() {
return {
stus: [],
loading: false,
isJudgeTrans: 1,
pageCount: 0,
msg: {
PageIndex: 1,
pageSize: 12,
KeyWords: ""
}
};
},
mounted() {
this.getStudent();
},
methods: {
getStudent() {
if (this.loading) return;
this.loading = true;
getTodayConnect(this.msg)
.then(r => {
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
refreshPage() {
this.getStudent();
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
}
}
};
</script>
<style></style>
<template>
<div class="full-height">
<div class="row items-center">
<q-avatar
size="40px"
font-size="20px"
color="primary"
class="q-mr-md"
text-color="white"
rounded
:icon="`iconfont ${node.icon}`"
/>
<div class="pingfang text-subtitle1">{{ node.name }}</div>
<q-icon name="iconfont icon-bangzhu" class="q-ml-md">
<q-tooltip anchor="bottom middle" :offset="[10, 10]">
在线索的约访中添加了预约记录为今日的信息
</q-tooltip>
</q-icon>
</div>
<div class="q-my-md row items-center">
<q-input
standout
v-model="msg.KeyWords"
dense
type="text"
style="width:250px;"
label="关键字(名称/微信/手机号)"
class="q-mr-md"
/>
<q-btn
color="primary"
class="q-px-md"
label="查询"
unelevated
dense
@click="searchKeyHandler"
/>
<div class="col text-right text-grey-6 f12">
TIPS:在线索资料-约访-添加反馈后即可完成本项工作
</div>
</div>
<div style="height:calc(100% - 158px)">
<stulist
:dataList="stus"
@reload="getStudent"
@success="refreshPage"
:loading="loading"
ref="stuList"
:showHeader="false"
:isJudgeTrans="isJudgeTrans"
height="100%"
:noSelect="true"
></stulist>
</div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination
v-model="msg.PageIndex"
:max="pageCount"
@input="changePage"
class="full-width justify-end"
color="primary"
:input="true"
>
</q-pagination>
</div>
</div>
</template>
<script>
import stulist from "../school/student/stulist";
import { getTodayClue } from "../../api/stuMan/index";
export default {
components: { stulist },
props: ["node"],
data() {
return {
stus: [],
loading: false,
isJudgeTrans: 1,
pageCount: 0,
msg: {
PageIndex: 1,
pageSize: 12,
KeyWords: ""
}
};
},
mounted() {
this.getStudent();
},
methods: {
getStudent() {
if (this.loading) return;
this.loading = true;
getTodayClue(this.msg)
.then(r => {
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
refreshPage() {
this.getStudent();
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
}
}
};
</script>
<style></style>
......@@ -14,6 +14,13 @@
:class="[chosenMenu == 6 ? 'text-weight-bold' : '']"
label="活动日历"
></q-btn>
<q-btn
flat
@click="changeMenu(7)"
:color="chosenMenu == 7 ? 'primary' : 'blue-grey-14'"
:class="[chosenMenu == 7 ? 'text-weight-bold' : '']"
label="待办工作"
></q-btn>
<q-btn
flat
@click="changeMenu(5)"
......@@ -79,6 +86,9 @@
label="我的上课计划"
></q-btn>
</div>
<div class="bg-white col" v-if="chosenMenu == 7">
<todolist></todolist>
</div>
<div class="bg-white col" v-if="chosenMenu == 6">
<eventsCalendar></eventsCalendar>
</div>
......@@ -124,6 +134,7 @@ import mySchedule from "./scheduling/mySchedule";
import myClassmate from "./scheduling/myClassmate";
import work from "../components/work/index";
import eventsCalendar from "../components/stuMan/eventsCalendar";
import todolist from "../components/todolist/index";
export default {
components: {
......@@ -134,7 +145,8 @@ export default {
mySchedule,
myClassmate,
work,
eventsCalendar
eventsCalendar,
todolist
},
name: "PageIndex",
data() {
......
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