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

新增待办工作功能

parent 7d947a57
...@@ -48,7 +48,7 @@ module.exports = function(ctx) { ...@@ -48,7 +48,7 @@ module.exports = function(ctx) {
env: ctx.dev ? { env: ctx.dev ? {
//API: 'http://localhost:5001/api', //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: 'https://eduapi.oytour.com/api',
API_ZC: 'http://192.168.10.2:8087/api', API_ZC: 'http://192.168.10.2:8087/api',
API_SK: 'ws:192.168.10.214:', API_SK: 'ws:192.168.10.214:',
...@@ -260,4 +260,4 @@ module.exports = function(ctx) { ...@@ -260,4 +260,4 @@ module.exports = function(ctx) {
} }
} }
} }
} }
\ No newline at end of file
...@@ -25,7 +25,7 @@ export default { ...@@ -25,7 +25,7 @@ export default {
</script> </script>
<style> <style>
@import url("//at.alicdn.com/t/font_2077629_9ty53q1g2bo.css"); @import url("//at.alicdn.com/t/font_2077629_3u1r9gsz178.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");
......
...@@ -11,7 +11,75 @@ export function getStudentAttendanceDayStatistics(data) { ...@@ -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({ return request({
url: '/DutyPlan/GetDutyTodayVisit', url: '/DutyPlan/GetDutyTodayVisit',
method: 'post', method: 'post',
...@@ -96,4 +164,4 @@ export function getCoffeeOrderList(data) { ...@@ -96,4 +164,4 @@ export function getCoffeeOrderList(data) {
method: 'post', method: 'post',
data data
}) })
} }
\ No newline at end of file
...@@ -11,3 +11,7 @@ ...@@ -11,3 +11,7 @@
.perfectFont { .perfectFont {
font-family: 'perfectFont' !important; font-family: 'perfectFont' !important;
} }
.pingfang {
font-family: 'pingfang' !important;
}
.sticky-column-table .sticky-column-table
max-width: 100% max-width: 100%
thead thead
background: rgb(245, 246, 247) background: rgb(245, 246, 247)
thead tr:first-child thead tr:first-child
height: 40px height: 40px
line-height: 14px line-height: 14px
thead tr:first-child th thead tr:first-child th
font-size: 12px font-size: 12px
font-weight: 400 font-weight: 400
...@@ -31,14 +31,14 @@ ...@@ -31,14 +31,14 @@
.sticky-tow-column-table .sticky-tow-column-table
max-width: 100% max-width: 100%
thead thead
background: rgb(245, 246, 247) background: rgb(245, 246, 247)
thead tr:first-child thead tr:first-child
height: 40px height: 40px
line-height: 14px line-height: 14px
thead tr:first-child th thead tr:first-child th
font-size: 12px font-size: 12px
font-weight: 400 font-weight: 400
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
td:nth-child(-n+2) td:nth-child(-n+2)
background-color: #fff background-color: #fff
th:nth-child(-n+2), th:nth-child(-n+2),
td:nth-child(-n+2) td:nth-child(-n+2)
position: sticky position: sticky
...@@ -57,19 +57,21 @@ ...@@ -57,19 +57,21 @@
z-index: 1 z-index: 1
box-shadow: rgba(0, 0, 0, 0.05) 2px 0px 0px box-shadow: rgba(0, 0, 0, 0.05) 2px 0px 0px
th:nth-child(-n+2)
z-index: 30 !important
td.none-shadow td.none-shadow
box-shadow: none box-shadow: none
.sticky-right-column-table .sticky-right-column-table
max-width: 100% max-width: 100%
thead thead
background: rgb(245, 246, 247) background: rgb(245, 246, 247)
thead tr:first-child thead tr:first-child
height: 40px height: 40px
line-height: 14px line-height: 14px
thead tr:first-child th thead tr:first-child th
font-size: 12px font-size: 12px
font-weight: 400 font-weight: 400
...@@ -90,8 +92,8 @@ ...@@ -90,8 +92,8 @@
.sticky-header-table .sticky-header-table
/* height or max-height is important */ /* height or max-height is important */
// .q-table__bottom,
.q-table__top, .q-table__top,
.q-table__bottom,
thead tr:first-child th thead tr:first-child th
/* bg color is important for th; just specify one */ /* bg color is important for th; just specify one */
background-color: #f5f6f7 background-color: #f5f6f7
...@@ -123,7 +125,7 @@ ...@@ -123,7 +125,7 @@
z-index: 3 z-index: 3
/* bg color is important; just specify one */ /* bg color is important; just specify one */
/* background: #fff */ /* background: #fff */
background-color:#f5f6f7 background-color: #f5f6f7
/* this will be the loading indicator */ /* this will be the loading indicator */
thead tr:last-child th thead tr:last-child th
...@@ -158,11 +160,32 @@ ...@@ -158,11 +160,32 @@
position: sticky position: sticky
z-index: 2 !important z-index: 2 !important
thead tr th:nth-child(-n+2) 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 thead tr:first-child th
top: 0 top: 0
/* this is when the loading indicator appears */ /* this is when the loading indicator appears */
&.q-table--loading thead tr:last-child th &.q-table--loading thead tr:last-child th
/* height of all previous header rows */ /* height of all previous header rows */
top: 48px top: 48px
\ No newline at end of file
...@@ -178,6 +178,7 @@ export default { ...@@ -178,6 +178,7 @@ export default {
}); });
this.getList(); this.getList();
this.clearMsg(); this.clearMsg();
this.$emit("success");
} }
}) })
.catch(() => {}); .catch(() => {});
......
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 @@ ...@@ -14,6 +14,13 @@
:class="[chosenMenu == 6 ? 'text-weight-bold' : '']" :class="[chosenMenu == 6 ? 'text-weight-bold' : '']"
label="活动日历" label="活动日历"
></q-btn> ></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 <q-btn
flat flat
@click="changeMenu(5)" @click="changeMenu(5)"
...@@ -79,6 +86,9 @@ ...@@ -79,6 +86,9 @@
label="我的上课计划" label="我的上课计划"
></q-btn> ></q-btn>
</div> </div>
<div class="bg-white col" v-if="chosenMenu == 7">
<todolist></todolist>
</div>
<div class="bg-white col" v-if="chosenMenu == 6"> <div class="bg-white col" v-if="chosenMenu == 6">
<eventsCalendar></eventsCalendar> <eventsCalendar></eventsCalendar>
</div> </div>
...@@ -124,6 +134,7 @@ import mySchedule from "./scheduling/mySchedule"; ...@@ -124,6 +134,7 @@ import mySchedule from "./scheduling/mySchedule";
import myClassmate from "./scheduling/myClassmate"; import myClassmate from "./scheduling/myClassmate";
import work from "../components/work/index"; import work from "../components/work/index";
import eventsCalendar from "../components/stuMan/eventsCalendar"; import eventsCalendar from "../components/stuMan/eventsCalendar";
import todolist from "../components/todolist/index";
export default { export default {
components: { components: {
...@@ -134,7 +145,8 @@ export default { ...@@ -134,7 +145,8 @@ export default {
mySchedule, mySchedule,
myClassmate, myClassmate,
work, work,
eventsCalendar eventsCalendar,
todolist
}, },
name: "PageIndex", name: "PageIndex",
data() { 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