Commit 3fb561df authored by 黄奎's avatar 黄奎

页面修改

parent 5516e5e9
<style lang="scss">
.stuList .q-table__bottom {
min-height: 0;
}
.stuList .q-table__bottom {
min-height: 0;
}
.stulistNum {
display: inline-block;
width: 25px;
height: 25px;
text-align: center;
line-height: 23px;
border: 1px solid #2961fe;
border-radius: 50%;
cursor: pointer;
color: #2961fe;
}
.stulistNum {
display: inline-block;
width: 25px;
height: 25px;
text-align: center;
line-height: 23px;
border: 1px solid #2961fe;
border-radius: 50%;
cursor: pointer;
color: #2961fe;
}
.stuListTable {
width: 200px;
text-align: center;
}
.stuListTable {
width: 200px;
text-align: center;
}
.stuListTable tr td {
height: 40px;
}
.stuListTable tr td {
height: 40px;
}
.stuListTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
.stuListTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
.stulistNumber {
display: inline-block;
width: 25px;
height: 25px;
text-align: center;
line-height: 22px;
border: 1px solid #2961fe;
border-radius: 50%;
cursor: pointer;
color: #2961fe;
}
.stulistNumber {
display: inline-block;
width: 25px;
height: 25px;
text-align: center;
line-height: 22px;
border: 1px solid #2961fe;
border-radius: 50%;
cursor: pointer;
color: #2961fe;
}
.OCourseTable {
width: 600px;
text-align: center;
}
.OCourseTable {
width: 600px;
text-align: center;
}
.OCourseTable tr td {
height: 40px;
}
.OCourseTable tr td {
height: 40px;
}
.OCourseTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
.OCourseTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
</style>
<template>
<div class="stuList" :style="{ height: height }">
<q-table
:pagination="pageMsg"
:loading="loading"
no-data-label="暂无相关数据"
flat
:selection="noSelect ? 'none' : pushMode ? 'multiple' : 'single'"
:selected.sync="selection"
:style="{ height: height }"
class="sticky-right-column-table sticky-tow-column-table"
:class="{ 'my-sticky-header-table': height != 'unset' }"
separator="none"
:data="dataList"
:columns="columns"
row-key="StuId"
hide-bottom
>
<q-table :pagination="pageMsg" :loading="loading" no-data-label="暂无相关数据" flat
:selection="noSelect ? 'none' : pushMode ? 'multiple' : 'single'" :selected.sync="selection"
:style="{ height: height }" class="sticky-right-column-table sticky-tow-column-table"
:class="{ 'my-sticky-header-table': height != 'unset' }" separator="none" :data="dataList" :columns="columns"
row-key="StuId" hide-bottom>
<template v-if="showHeader" v-slot:top>
<div class="col-2 q-table__title">学员信息</div>
<q-space />
<div class="page-option" v-if="!pushMode">
<q-btn
color="accent"
v-if="IsTrasferAll()"
outline
class="q-mr-md"
size="sm"
icon="swap_horiz"
label="批量转交"
@click="pushMode = true"
/>
<q-btn
color="accent"
outline
class="q-mr-md"
size="sm"
icon="swap_horiz"
label="推送课程顾问"
v-if="userInfo.IsCourseConsultant == 0"
@click="pushMode = true"
/>
<q-btn
color="accent"
class="q-mr-md"
size="sm"
icon="swap_horiz"
label="转订单"
:disable="selection.length === 0"
@click="transferOrder"
/>
<q-btn
color="accent"
class="q-mr-md"
size="sm"
icon="swap_horiz"
label="转留学"
:disable="selection.length === 0"
@click="transferAbroad"
/>
<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="下载"
@click="downloadStudent"
/>
<q-btn color="accent" v-if="IsTrasferAll()" outline class="q-mr-md" size="sm" icon="swap_horiz" label="批量转交"
@click="pushMode = true" />
<q-btn color="accent" outline class="q-mr-md" size="sm" icon="swap_horiz" label="推送课程顾问"
v-if="userInfo.IsCourseConsultant == 0" @click="pushMode = true" />
<q-btn color="accent" class="q-mr-md" size="sm" icon="swap_horiz" label="转订单"
:disable="selection.length === 0" @click="transferOrder" />
<q-btn color="accent" class="q-mr-md" size="sm" icon="swap_horiz" label="转留学"
:disable="selection.length === 0" @click="transferAbroad" />
<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="下载" @click="downloadStudent" />
</div>
<div class="page-option" v-if="pushMode">
<q-btn
color="accent"
unelevated
class="q-mr-md"
size="sm"
icon="swap_horiz"
label="转交"
@click="isShowTrans = true"
>
<q-btn color="accent" unelevated class="q-mr-md" size="sm" icon="swap_horiz" label="转交"
@click="isShowTrans = true">
<q-popup-proxy :offset="[10, 10]">
<q-banner v-if="isShowTrans">
<q-select
style="margin-top:20px;"
filled
v-model="transMsg.CreateBy"
@filter="filterEmployee"
use-input
:options="myEmployeeList"
option-label="EmployeeName"
option-value="Id"
emit-value
map-options
/>
<q-btn
label="保存"
style="float:right;margin-top:15px"
color="accent q-mb-lg"
size="sm"
@click="saveTransForm"
/>
<q-select style="margin-top:20px;" filled v-model="transMsg.CreateBy" @filter="filterEmployee" use-input
:options="myEmployeeList" option-label="EmployeeName" option-value="Id" emit-value map-options />
<q-btn label="保存" style="float:right;margin-top:15px" color="accent q-mb-lg" size="sm"
@click="saveTransForm" />
</q-banner>
</q-popup-proxy>
</q-btn>
<q-btn
color="accent"
unelevated
class="q-mr-md"
size="sm"
icon="swap_horiz"
label="立即推送"
:loading="pushing"
@click="assistBatchHandler"
/>
<q-btn
color="accent"
outline
size="sm"
label="退出"
:disable="pushing"
@click="
<q-btn color="accent" unelevated class="q-mr-md" size="sm" icon="swap_horiz" label="立即推送" :loading="pushing"
@click="assistBatchHandler" />
<q-btn color="accent" outline size="sm" label="退出" :disable="pushing" @click="
pushMode = false;
selection = [];
"
/>
" />
</div>
</template>
<template v-slot:body-cell-StuIcon="props">
......@@ -195,32 +103,20 @@
<q-avatar size="md" v-if="props.value">
<img :src="props.value" />
</q-avatar>
<q-avatar
size="md"
color="teal-10"
text-color="white"
v-if="!props.value"
>
{{ props.row.StuName.substring(0, 1) }}</q-avatar
>
<q-avatar size="md" color="teal-10" text-color="white" v-if="!props.value">
{{ props.row.StuName.substring(0, 1) }}</q-avatar>
</q-td>
</template>
<template v-slot:body-cell-StuName="props">
<q-td :props="props">
<div
class="text-blue cursor-pointer"
@click="getStuRight(props.row, 1)"
>
<div class="text-blue cursor-pointer" @click="getStuRight(props.row, 1)">
{{ props.value }}
</div>
</q-td>
</template>
<template v-slot:body-cell-StuSex="props">
<q-td :props="props">
<q-badge
:color="props.value == 1 ? 'negative' : 'primary'"
:label="props.value == 1 ? '女' : '男'"
/>
<q-badge :color="props.value == 1 ? 'negative' : 'primary'" :label="props.value == 1 ? '女' : '男'" />
</q-td>
</template>
<template v-slot:body-cell-CreateTypeStr="props">
......@@ -236,9 +132,7 @@
<template v-slot:body-cell-StuSourceIdName="props">
<q-td :props="props">
<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 }}
</div>
<div v-else>
......@@ -268,21 +162,15 @@
{{ props.row.AdvisorList.length }}
<q-popup-proxy>
<q-banner>
<table
class="OCourseTable"
style="border-collapse:collapse;"
>
<table class="OCourseTable" style="border-collapse:collapse;">
<tr>
<th>跟进状态</th>
<th>跟进日期</th>
<th>跟进比例</th>
<th>跟进备注</th>
</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.AdvisorDate }}</td>
<td>{{ sItem.AdvisorRate }}</td>
......@@ -305,21 +193,10 @@
<q-td :props="props" v-html="getCurseManager(props.row)"></q-td>
</template>
<template v-slot:body-cell-OrderCount="props">
<q-td
:props="props"
v-if="!props.row.OrderCount || 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)"
>
已报名{{ props.row.OrderCount }}</q-td
>
<q-td :props="props" v-if="!props.row.OrderCount || 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)">
已报名{{ props.row.OrderCount }}</q-td>
</template>
<template v-slot:body-cell-TeacherManager="props">
<q-td :props="props" v-html="getTeacherManager(props.row)"></q-td>
......@@ -337,21 +214,14 @@
<q-popup-proxy>
<q-banner>
<div style="max-height:600px;overflow-y:auto;">
<table
class="stuListTable"
style="border-collapse:collapse;"
>
<table class="stuListTable" style="border-collapse:collapse;">
<tr>
<th>角色</th>
<th>协同人</th>
</tr>
<tr
v-for="(sItem, sIndex) in assistListFormat[
<tr v-for="(sItem, sIndex) in assistListFormat[
props.pageIndex
]"
style="border-bottom:1px dashed #d1d1d1;"
:key="sIndex"
>
]" style="border-bottom:1px dashed #d1d1d1;" :key="sIndex">
<td>{{ sItem.AssistTypeName }}</td>
<td>{{ sItem.AssistName }}</td>
</tr>
......@@ -368,384 +238,430 @@
</q-td>
</template>
</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>
<studentRight-form
v-if="isShowStuRight"
:isJudgeTrans="isJudgeTrans"
:BelongType="BelongType"
:checkType="checkType"
:save-obj="stuOption"
@close="closeStuForm"
@success="refreshStuList"
@reload="referDataHandler"
>
<studentRight-form v-if="isShowStuRight" :isJudgeTrans="isJudgeTrans" :BelongType="BelongType"
:checkType="checkType" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList"
@reload="referDataHandler">
</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>
<transfer-order
v-if="isShowTransfer"
:select="selection"
@close="closeStuForm"
@success="refreshStuList"
>
<transfer-order v-if="isShowTransfer" :select="selection" @close="closeStuForm" @success="refreshStuList">
</transfer-order>
<abroad-form
v-if="isShowAbroad"
:select="selection"
@close="closeStuForm"
@success="refreshStuList"
></abroad-form>
<abroad-form v-if="isShowAbroad" :select="selection" @close="closeStuForm" @success="refreshStuList"></abroad-form>
</div>
</template>
<script>
import studentForm from "./student-form";
import studentRightForm from "./studentRight-form";
import studentAddForm from "./studentAdd-form";
import transferOrder from "./transfer-order";
import abroadForm from "./abroad-form";
import { mapGetters } from "vuex";
import {
SetStudentAssistBatch,
BatchForwardStudent
} from "../../../api/sale/sale";
import { EduDownLoad } from "../../../api/common/common";
import { queryEmployee } from "../../../api/users/user";
import studentForm from "./student-form";
import studentRightForm from "./studentRight-form";
import studentAddForm from "./studentAdd-form";
import transferOrder from "./transfer-order";
import abroadForm from "./abroad-form";
import {
mapGetters
} from "vuex";
import {
SetStudentAssistBatch,
BatchForwardStudent
} from "../../../api/sale/sale";
import {
EduDownLoad
} from "../../../api/common/common";
import {
queryEmployee
} from "../../../api/users/user";
export default {
props: {
//数据列表
dataList: {
type: Array,
default: null
export default {
props: {
//数据列表
dataList: {
type: Array,
default: null
},
//是否显示转交按钮
isJudgeTrans: {
type: Number,
default: null
},
loading: {
type: Boolean,
default: false
},
//权限验证
authObj: {
type: Object,
default: null
},
//查询参数
queryMsg: {
type: Object,
default: null
},
showHeader: {
type: Boolean,
default: true
},
height: {
type: String,
default: "unset"
},
noSelect: {
type: Boolean,
default: false
}
},
//是否显示转交按钮
isJudgeTrans: {
type: Number,
default: null
components: {
studentForm,
studentRightForm,
studentAddForm,
transferOrder,
abroadForm
},
loading: {
type: Boolean,
default: false
data() {
return {
columns: [{
name: "StuIcon",
label: "",
field: "StuIcon",
align: "left"
},
{
name: "StuName",
required: true,
label: "昵称",
align: "left",
field: row => row.StuName
},
{
name: "CurseManager",
label: "课程顾问",
align: "left"
},
{
name: "TeacherManager",
label: "协助老师",
align: "left"
},
{
name: "OrderCount",
label: "是否报名",
align: "left"
},
{
name: "VisitCount",
label: "到访次数",
field: "VisitCount",
align: "left"
},
{
name: "TrialLessonCount",
label: "试听次数",
field: "TrialLessonCount",
align: "left"
},
{
name: "StuSex",
label: "性别",
field: "StuSex",
align: "left"
},
{
name: "StuTel",
label: "电话",
field: "StuTel",
align: "left"
},
{
name: "QQ",
label: "QQ",
field: "QQ",
align: "left"
},
{
name: "WeChatNo",
label: "微信",
field: "WeChatNo",
align: "left"
},
{
name: "StuTypeName",
label: "客户类型",
field: "StuTypeName",
align: "left"
},
{
name: "StuStageName",
label: "客户阶段",
field: "StuStageName",
align: "left"
},
{
name: "StuNeedsName",
label: "客户需求",
field: "StuNeedsName",
align: "left"
},
{
name: "AdvisorExpectDate",
label: "期望达成协议日期",
field: "AdvisorExpectDate",
align: "left"
},
{
name: "AdvisorStatusName",
label: "目前状态",
field: "AdvisorStatusName",
align: "left"
},
{
name: "AdvisorWinRate",
label: "胜率",
field: "AdvisorWinRate",
align: "left"
},
{
name: "AdvisorList",
label: "跟踪记录",
field: "AdvisorList",
align: "left"
},
{
name: "StuProfession",
label: "职业",
field: "StuProfession",
align: "left"
},
{
name: "StuEducationName",
label: "学历",
field: "StuEducationName",
align: "left"
},
{
name: "StuPurposeName",
label: "目的",
field: "StuPurposeName",
align: "left"
},
{
name: "AssistList",
label: "其他服务人员",
align: "left",
field: "AssistList"
},
{
name: "CreateTypeStr",
label: "客户来源",
field: "CreateTypeStr",
align: "left"
},
{
name: "StuSourceIdName",
label: "来源关联人",
field: "StuSourceIdName",
align: "left"
},
{
name: "StuChannelName",
label: "收客渠道",
field: "StuChannelName",
align: "left"
},
{
name: "CreateTimeStr",
label: "创建时间",
field: "CreateTimeStr",
align: "left"
},
{
name: "CreateByName",
label: "负责人",
align: "left",
field: "CreateByName"
}
],
pageMsg: {
rowsPerPage: 12
},
isShowStuForm: false,
resetLoading: false,
isShowStuRight: false,
stuOption: null,
isShowAdd: false,
selection: [],
isShowTransfer: false, //是否显示转订单弹窗
BelongType: 1,
pushMode: false, //是否显示推送按钮
pushing: false,
assistListFormat: [],
checkType: 1, //打开右侧弹窗类型
isShowAbroad: false, //是否显示转留学就业订单弹窗
userInfo: {}, //当前登录人员
isShowTrans: false,
transMsg: {
StuIds: "",
CreateBy: ""
},
//员工列表
employeeList: [],
myEmployeeList: []
};
},
//权限验证
authObj: {
type: Object,
default: null
watch: {
dataList: {
handler(val) {
this.selection = [];
this.formatAssistList();
},
deep: true
}
},
//查询参数
queryMsg: {
type: Object,
default: null
created() {
this.userInfo = this.getLocalStorage();
this.formatAssistList();
},
showHeader: {
type: Boolean,
default: true
mounted() {
this.getEmployeeList();
},
height: {
type: String,
default: "unset"
computed: {
...mapGetters(["logo", "name"])
},
noSelect: {
type: Boolean,
default: false
}
},
components: {
studentForm,
studentRightForm,
studentAddForm,
transferOrder,
abroadForm
},
data() {
return {
columns: [
{
name: "StuIcon",
label: "",
field: "StuIcon",
align: "left"
},
{
name: "StuName",
required: true,
label: "昵称",
align: "left",
field: row => row.StuName
},
{
name: "CurseManager",
label: "课程顾问",
align: "left"
},
{
name: "TeacherManager",
label: "协助老师",
align: "left"
},
{
name: "OrderCount",
label: "是否报名",
align: "left"
},
{
name: "VisitCount",
label: "到访次数",
field: "VisitCount",
align: "left"
},
{
name: "TrialLessonCount",
label: "试听次数",
field: "TrialLessonCount",
align: "left"
},
{
name: "StuSex",
label: "性别",
field: "StuSex",
align: "left"
},
{
name: "StuTel",
label: "电话",
field: "StuTel",
align: "left"
},
{
name: "QQ",
label: "QQ",
field: "QQ",
align: "left"
},
{
name: "WeChatNo",
label: "微信",
field: "WeChatNo",
align: "left"
},
{
name: "StuTypeName",
label: "客户类型",
field: "StuTypeName",
align: "left"
},
{
name: "StuStageName",
label: "客户阶段",
field: "StuStageName",
align: "left"
},
{
name: "StuNeedsName",
label: "客户需求",
field: "StuNeedsName",
align: "left"
},
{
name: "AdvisorExpectDate",
label: "期望达成协议日期",
field: "AdvisorExpectDate",
align: "left"
},
{
name: "AdvisorStatusName",
label: "目前状态",
field: "AdvisorStatusName",
align: "left"
},
{
name: "AdvisorWinRate",
label: "胜率",
field: "AdvisorWinRate",
align: "left"
},
{
name: "AdvisorList",
label: "跟踪记录",
field: "AdvisorList",
align: "left"
},
{
name: "StuProfession",
label: "职业",
field: "StuProfession",
align: "left"
},
{
name: "StuEducationName",
label: "学历",
field: "StuEducationName",
align: "left"
},
{
name: "StuPurposeName",
label: "目的",
field: "StuPurposeName",
align: "left"
},
{
name: "AssistList",
label: "其他服务人员",
align: "left",
field: "AssistList"
},
{
name: "CreateTypeStr",
label: "客户来源",
field: "CreateTypeStr",
align: "left"
},
{
name: "StuSourceIdName",
label: "来源关联人",
field: "StuSourceIdName",
align: "left"
},
{
name: "StuChannelName",
label: "收客渠道",
field: "StuChannelName",
align: "left"
},
{
name: "CreateTimeStr",
label: "创建时间",
field: "CreateTimeStr",
align: "left"
},
{
name: "CreateByName",
label: "负责人",
align: "left",
field: "CreateByName"
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;
}
],
pageMsg: {
rowsPerPage: 12
},
isShowStuForm: false,
resetLoading: false,
isShowStuRight: false,
stuOption: null,
isShowAdd: false,
selection: [],
isShowTransfer: false, //是否显示转订单弹窗
BelongType: 1,
pushMode: false, //是否显示推送按钮
pushing: false,
assistListFormat: [],
checkType: 1, //打开右侧弹窗类型
isShowAbroad: false, //是否显示转留学就业订单弹窗
userInfo: {}, //当前登录人员
isShowTrans: false,
transMsg: {
StuIds: "",
CreateBy: ""
//是否有批量转移权限
IsTrasferAll() {
var isHaveAuth = false;
if (
this.userInfo &&
this.userInfo.ActionMenuList &&
this.userInfo.ActionMenuList.length > 0
) {
this.userInfo.ActionMenuList.forEach(x => {
if (x.FunctionCode == "IsTranserAll") {
isHaveAuth = true;
}
});
}
return isHaveAuth;
},
//员工列表
employeeList: [],
myEmployeeList: []
};
},
watch: {
dataList: {
handler(val) {
this.selection = [];
this.formatAssistList();
//下载文件
downloadStudent() {
var msg = JSON.parse(JSON.stringify(this.queryMsg));
EduDownLoad("/User/DownLoadStudent", msg, "客户资料.xls");
},
deep: true
}
},
created() {
this.userInfo = this.getLocalStorage();
this.formatAssistList();
},
mounted() {
this.getEmployeeList();
},
computed: {
...mapGetters(["logo", "name"])
},
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;
//服务人员转化
formatAssistList() {
this.assistListFormat = [];
this.dataList.forEach(x => {
let tempArr = [];
if (x.AssistList && x.AssistList.length > 0) {
x.AssistList.forEach(y => {
if (y.AssistType != 2 && y.AssistType != 4) {
tempArr.push(y);
}
});
}
this.assistListFormat.push(tempArr);
});
}
if (item.CreateBy == this.userInfo.Id || isHaveAuth) {
return true;
} else {
return false;
}
},
//是否有批量转移权限
IsTrasferAll() {
var isHaveAuth = false;
if (
this.userInfo &&
this.userInfo.ActionMenuList &&
this.userInfo.ActionMenuList.length > 0
) {
this.userInfo.ActionMenuList.forEach(x => {
if (x.FunctionCode == "IsTranserAll") {
isHaveAuth = true;
}
},
//创建账号
createAccount(id) {
let that = this;
createStudentAccount({
StuId: id
}).then(res => {
that.$q
.dialog({
title: "创建账号",
message: res.Message,
persistent: true,
ok: {
label: "确认",
flat: true,
focus: true
}
})
.onOk(() => {
that.getStudent();
})
.onCancel(() => {
that.getStudent();
});
});
}
return isHaveAuth;
},
//下载文件
downloadStudent() {
var msg = JSON.parse(JSON.stringify(this.queryMsg));
EduDownLoad("/User/DownLoadStudent", msg, "客户资料.xls");
},
//服务人员转化
formatAssistList() {
this.assistListFormat = [];
this.dataList.forEach(x => {
let tempArr = [];
if (x.AssistList && x.AssistList.length > 0) {
x.AssistList.forEach(y => {
if (y.AssistType != 2 && y.AssistType != 4) {
tempArr.push(y);
},
resetPw(id) {
let that = this;
this.$q
.dialog({
title: "重置密码",
message: "你正在进行重置密码行为,是否确认执行",
persistent: true,
cancel: {
label: "取消",
flat: true
},
ok: {
label: "确认重置",
flat: true,
focus: true
}
})
.onOk(() => {
that.resetLoading = true;
resetPassword({
AccountType: 4,
AccountId: id
})
.then(res => {
that.resetLoading = false;
that.$q.dialog({
title: "密码重置成功",
message: res.Message,
persistent: true,
ok: {
label: "确认",
flat: true,
focus: true
}
});
})
.catch(() => {
that.resetLoading = false;
});
});
}
this.assistListFormat.push(tempArr);
});
},
//创建账号
createAccount(id) {
let that = this;
createStudentAccount({
StuId: id
}).then(res => {
that.$q
},
//删除客户资料
deleteStudentInfo(obj) {
let that = this;
var str = obj.Status == 1 ? "【禁用】" : "【启用】";
this.$q
.dialog({
title: "创建账号",
message: res.Message,
title: str + "学员",
message: "你正在进行" + str + "学员行为,一旦执行无法找回,是否确认执行?",
persistent: true,
cancel: {
label: "取消",
flat: true
},
ok: {
label: "确认",
flat: true,
......@@ -753,266 +669,196 @@ export default {
}
})
.onOk(() => {
that.getStudent();
that.resetLoading = true;
deleteStudent({
StuId: obj.StuId,
Status: obj.Status
}).then(res => {
this.$q.notify({
icon: "iconfont icon-chenggong",
color: "accent",
timeout: 2000,
message: "数据操作成功!",
position: "top"
});
this.getStudent();
});
})
.onCancel(() => {
that.getStudent();
obj.Status = obj.Status == 1 ? 0 : 1;
});
});
},
resetPw(id) {
let that = this;
this.$q
.dialog({
title: "重置密码",
message: "你正在进行重置密码行为,是否确认执行",
persistent: true,
cancel: {
label: "取消",
flat: true
},
ok: {
label: "确认重置",
flat: true,
focus: true
}
})
.onOk(() => {
that.resetLoading = true;
resetPassword({
AccountType: 4,
AccountId: id
})
.then(res => {
that.resetLoading = false;
that.$q.dialog({
title: "密码重置成功",
message: res.Message,
persistent: true,
ok: {
label: "确认",
flat: true,
focus: true
},
//刷新列表
refreshStuList() {
this.$emit("success");
this.selection = [];
},
EditStudent(obj) {
if (obj) {
this.stuOption = obj;
} else {
this.stuOption = null;
}
this.isShowAdd = true;
},
closeStuForm() {
this.isShowStuForm = false;
this.isShowStuRight = false;
this.isShowAdd = false;
this.isShowTransfer = false;
this.isShowAbroad = false;
},
//点击学生姓名弹出
getStuRight(obj, type) {
if (obj) {
this.stuOption = obj;
this.BelongType = obj.BelongType;
this.checkType = type;
} else {
this.stuOption = null;
}
this.isShowStuRight = true;
},
//转订单
transferOrder() {
const firstId = this.selection[0].CustomerId;
const flag = this.selection.every(e => {
return e.CustomerId == firstId;
});
if (!flag) {
this.$q.notify({
type: "negative",
position: "top",
message: `所属同行不一致,请重新选择`
});
return;
}
this.isShowTransfer = true;
},
//转留学
transferAbroad() {
this.isShowAbroad = true;
},
getCurseManager(row) {
let managerName = "<span class='text-grey-4'>暂未推送</span>";
if (row.AssistList && row.AssistList.length > 0) {
row.AssistList.forEach(y => {
if (y.AssistType == 2) {
managerName = `<span class='text-dark'>${y.AssistName}</span>`;
}
});
}
return managerName;
},
getTeacherManager(row) {
let managerName = "<span class='text-grey-4'>暂无</span>";
if (row.AssistList && row.AssistList.length > 0) {
row.AssistList.forEach(y => {
if (y.AssistType == 4) {
managerName = `<span class='text-dark'>${y.AssistName}</span>`;
}
});
}
return managerName;
},
assistBatchHandler() {
if (this.pushing) return;
this.pushing = true;
if (this.selection.length > 0) {
let msg = "";
let parameter = {
stuIds: ""
};
this.selection.forEach(x => {
parameter.stuIds += "," + x.StuId;
if (x.AssistList && x.AssistList.length > 0) {
x.AssistList.forEach(y => {
if (y.AssistType == 2) {
msg = `客户${x.StuName}:已存在课程顾问:${y.AssistName},无法再次推送。`;
}
});
})
.catch(() => {
that.resetLoading = false;
});
});
},
//删除客户资料
deleteStudentInfo(obj) {
let that = this;
var str = obj.Status == 1 ? "【禁用】" : "【启用】";
this.$q
.dialog({
title: str + "学员",
message:
"你正在进行" + str + "学员行为,一旦执行无法找回,是否确认执行?",
persistent: true,
cancel: {
label: "取消",
flat: true
},
ok: {
label: "确认",
flat: true,
focus: true
}
})
.onOk(() => {
that.resetLoading = true;
deleteStudent({
StuId: obj.StuId,
Status: obj.Status
}).then(res => {
this.$q.notify({
icon: "iconfont icon-chenggong",
color: "accent",
timeout: 2000,
message: "数据操作成功!",
position: "top"
});
this.getStudent();
}
});
})
.onCancel(() => {
obj.Status = obj.Status == 1 ? 0 : 1;
});
},
//刷新列表
refreshStuList() {
console.log("change......");
this.$emit("success");
this.selection = [];
},
EditStudent(obj) {
if (obj) {
this.stuOption = obj;
} else {
this.stuOption = null;
}
this.isShowAdd = true;
},
closeStuForm() {
this.isShowStuForm = false;
this.isShowStuRight = false;
this.isShowAdd = false;
this.isShowTransfer = false;
this.isShowAbroad = false;
},
//点击学生姓名弹出
getStuRight(obj, type) {
if (obj) {
this.stuOption = obj;
this.BelongType = obj.BelongType;
this.checkType = type;
} else {
this.stuOption = null;
}
this.isShowStuRight = true;
},
//转订单
transferOrder() {
const firstId = this.selection[0].CustomerId;
const flag = this.selection.every(e => {
return e.CustomerId == firstId;
});
if (!flag) {
this.$q.notify({
type: "negative",
position: "top",
message: `所属同行不一致,请重新选择`
});
return;
}
this.isShowTransfer = true;
},
//转留学
transferAbroad() {
this.isShowAbroad = true;
},
getCurseManager(row) {
let managerName = "<span class='text-grey-4'>暂未推送</span>";
if (row.AssistList && row.AssistList.length > 0) {
row.AssistList.forEach(y => {
if (y.AssistType == 2) {
managerName = `<span class='text-dark'>${y.AssistName}</span>`;
}
});
}
return managerName;
},
getTeacherManager(row) {
let managerName = "<span class='text-grey-4'>暂无</span>";
if (row.AssistList && row.AssistList.length > 0) {
row.AssistList.forEach(y => {
if (y.AssistType == 4) {
managerName = `<span class='text-dark'>${y.AssistName}</span>`;
}
});
}
return managerName;
},
assistBatchHandler() {
if (this.pushing) return;
this.pushing = true;
if (this.selection.length > 0) {
let msg = "";
let parameter = {
stuIds: ""
};
this.selection.forEach(x => {
parameter.stuIds += "," + x.StuId;
if (x.AssistList && x.AssistList.length > 0) {
x.AssistList.forEach(y => {
if (y.AssistType == 2) {
msg = `客户${x.StuName}:已存在课程顾问:${y.AssistName},无法再次推送。`;
}
if (msg == "") {
SetStudentAssistBatch(parameter).then(r => {
this.refreshStuList();
this.selection = [];
this.pushMode = false;
});
} else {
this.pushing = false;
this.errorMsg(msg);
}
});
if (msg == "") {
SetStudentAssistBatch(parameter).then(r => {
this.refreshStuList();
this.selection = [];
this.pushMode = false;
});
} else {
this.pushing = false;
this.errorMsg(msg);
this.errorMsg("请选择要推送的学员");
}
} else {
this.pushing = false;
this.errorMsg("请选择要推送的学员");
}
},
referDataHandler() {
this.$emit("reload");
},
errorMsg(msg) {
this.$q.notify({
type: "negative",
position: "top",
message: msg
});
},
//获取员工列表
getEmployeeList() {
queryEmployee({
IsLeave: 1
}).then(res => {
this.employeeList = res.Data;
this.myEmployeeList = res.Data;
});
},
//筛选员工
filterEmployee(val, update, abort) {
update(() => {
this.myEmployeeList = this.employeeList.filter(
v => v.EmployeeName.indexOf(val) > -1
);
});
},
//保存批量转交
saveTransForm() {
if (this.selection.length == 0) {
},
referDataHandler() {
this.$emit("reload");
},
errorMsg(msg) {
this.$q.notify({
type: "negative",
position: "top",
message: "请选择推送学员"
message: msg
});
return;
}
if (this.transMsg.CreateBy == "") {
this.$q.notify({
type: "negative",
position: "top",
message: "请选择接收人员!"
},
//获取员工列表
getEmployeeList() {
queryEmployee({
IsLeave: 1
}).then(res => {
this.employeeList = res.Data;
this.myEmployeeList = res.Data;
});
return;
}
let newArr = [];
this.selection.forEach(x => {
newArr.push(x.StuId);
});
this.transMsg.StuIds = newArr.toString();
BatchForwardStudent(this.transMsg).then(res => {
if (res.Code == 1) {
this.refreshStuList();
this.selection = [];
this.transMsg.StuIds = "";
this.transMsg.CreateBy = "";
this.pushMode = false;
},
//筛选员工
filterEmployee(val, update, abort) {
update(() => {
this.myEmployeeList = this.employeeList.filter(
v => v.EmployeeName.indexOf(val) > -1
);
});
},
//保存批量转交
saveTransForm() {
if (this.selection.length == 0) {
this.$q.notify({
type: "iconfont icon-chenggong",
type: "negative",
position: "top",
message: r.Message
message: "请选择推送学员"
});
return;
}
});
if (this.transMsg.CreateBy == "") {
this.$q.notify({
type: "negative",
position: "top",
message: "请选择接收人员!"
});
return;
}
let newArr = [];
this.selection.forEach(x => {
newArr.push(x.StuId);
});
this.transMsg.StuIds = newArr.toString();
BatchForwardStudent(this.transMsg).then(res => {
if (res.Code == 1) {
this.refreshStuList();
this.selection = [];
this.transMsg.StuIds = "";
this.transMsg.CreateBy = "";
this.pushMode = false;
this.$q.notify({
type: "iconfont icon-chenggong",
position: "top",
message: r.Message
});
}
});
}
}
}
};
</script>
};
</script>
\ No newline at end of file
......@@ -193,7 +193,6 @@ export default {
},
mounted() {
this.currentMenu = this.menulist[0].id.toString();
//console.log(this.todoTipList);
},
methods: {}
};
......
<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}`"
/>
<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"
/>
<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>
<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 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;
});
import orderlist from "../sale/orderlist.vue";
import {
getMyOrderNotBalance
} from "../../api/stuMan/index";
export default {
components: {
orderlist
},
refreshPage() {
this.getStudent();
this.$root.$emit("updateTodoList");
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 //显示分拆按钮
}
};
},
changePage() {
mounted() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
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;
setTimeout(() => {
this.loading = false;
}, 1000);
})
.catch(e => {
this.loading = false;
});
},
refreshPage() {
this.getStudent();
this.$root.$emit("updateTodoList");
},
changePage() {
this.getStudent();
},
searchKeyHandler() {
this.msg.PageIndex = 1;
this.getStudent();
}
}
}
};
};
</script>
<style></style>
<style>
</style>
\ No newline at end of file
......@@ -225,7 +225,6 @@ export default {
methods: {
initTodoList() {
getTodayStatic().then(r => {
console.log(r);
let d = r.Data;
this.todoList.result = d;
let tempCount = 0;
......
<template>
<div class="page-body room-list" v-loading="loading">
<div v-for="(item, i) in classdata" :key="item.Key">
<template
v-if="
<template v-if="
item.SchoolName.indexOf('武侯') == -1 &&
item.SchoolName.indexOf('眉山') == -1
"
>
">
<div class="row items-center">
<div class="text-h6 col">{{ item.SchoolName }}</div>
<div v-if="i == 0" class="f12">只看在线:</div>
<div v-if="i == 0">
<el-switch
v-model="queryStatus"
@change="changeViewStatusHandler"
></el-switch>
<el-switch v-model="queryStatus" @change="changeViewStatusHandler"></el-switch>
</div>
</div>
<div class="q-mt-md q-mb-lg row">
<template v-for="(x, xi) in item.RoomList">
<div
class="class-room"
style="width:calc(20% - 10px);margin-right:10px;margin-bottom:10px;"
v-if="queryStatus == 0 || (queryStatus == 1 && x.StatusInfo)"
:key="xi"
>
<div class="class-room" style="width:calc(20% - 10px);margin-right:10px;margin-bottom:10px;"
v-if="queryStatus == 0 || (queryStatus == 1 && x.StatusInfo)" :key="xi">
<div class="img-box">
<q-img
:src="x.RoomPicList[0]"
height="100%"
fit="fill"
spinner-color="primary"
spinner-size="30px"
v-if="x.RoomPicList && x.RoomPicList.length > 0"
/>
<q-img
src="../../assets/images/classroom/bg-img.jpg"
fit="fill"
height="100%"
spinner-color="primary"
spinner-size="30px"
v-else
/>
<q-img :src="x.RoomPicList[0]" height="100%" fit="fill" spinner-color="primary" spinner-size="30px"
v-if="x.RoomPicList && x.RoomPicList.length > 0" />
<q-img src="../../assets/images/classroom/bg-img.jpg" fit="fill" height="100%" spinner-color="primary"
spinner-size="30px" v-else />
</div>
<div class="xuhua"></div>
<div class="q-pa-md">
......@@ -58,37 +37,19 @@
</div>
<div class="q-mt-lg f12 row items-center">
<div class="text-grey-6 f12 col">
<span
class="q-px-xs text-white q-mr-md inline-block text-weight-bold"
style="border-radius:4px;font-size:15;"
:class="{
<span class="q-px-xs text-white q-mr-md inline-block text-weight-bold"
style="border-radius:4px;font-size:15;" :class="{
'bg-grey-3': !x.StatusInfo,
'bg-negative': x.StatusInfo
}"
>
}">
LIVE
</span>
<span class="text-grey-6" v-if="!x.StatusInfo"
>设备离线</span
>
<span
class="text-grey-6"
v-else-if="x.StatusInfo.UnLockUserName == 'lock'"
>设备在线,未解锁</span
>
<span class="text-grey-6" v-else
>{{ x.StatusInfo.UnLockUserName }}正在使用</span
>
<span class="text-grey-6" v-if="!x.StatusInfo">设备离线</span>
<span class="text-grey-6" v-else-if="x.StatusInfo.UnLockUserName == 'lock'">设备在线,未解锁</span>
<span class="text-grey-6" v-else>{{ x.StatusInfo.UnLockUserName }}正在使用</span>
</div>
<div v-if="x.StatusInfo">
<q-btn
color="primary"
dense
class="f12"
flat
label="链接"
@click="openVideo(x)"
/>
<q-btn color="primary" dense class="f12" flat label="链接" @click="openVideo(x)" />
</div>
</div>
</div>
......@@ -98,200 +59,195 @@
</template>
</div>
<q-dialog v-model="showVideo" @hide="clearVideo">
<q-card
class="my-card"
style="width:64vw !important;max-width:64vw !important;max-height:32vw !important;height:32vw !important;"
flat
>
<div
id="player-con"
style="width:100%;height:100%;overflow:hidden;"
></div>
<q-card class="my-card"
style="width:64vw !important;max-width:64vw !important;max-height:32vw !important;height:32vw !important;" flat>
<div id="player-con" style="width:100%;height:100%;overflow:hidden;"></div>
</q-card>
</q-dialog>
</div>
</template>
<script>
import { getUseClassRoomList } from "../../api/classroom/index";
import * as signalR from "@aspnet/signalr";
export default {
meta: {
title: "教室状态"
},
data() {
return {
classdata: [],
loading: true,
showVideo: false,
videoObj: null,
currentRoom: null,
queryStatus: 0,
player: null,
connection: "", //signalr连接
roomStatusList: [] //返回消息
};
},
created() {
let thisVue = this;
console.log(process.env.API_SIG);
this.connection = new signalR.HubConnectionBuilder()
.withUrl(process.env.API_SIG, {
skipNegotiation: true,
transport: signalR.HttpTransportType.WebSockets
})
.configureLogging(signalR.LogLevel.Information)
.build();
this.connection.on("RoomStatusChange", function(message) {
thisVue.roomStatusList = JSON.parse(message);
console.log(thisVue.roomStatusList);
thisVue.changeStatus();
});
this.connection.onclose(async () => {
setTimeout(() => {
thisVue.linkHub();
}, 3000);
});
this.linkHub();
},
mounted() {
this.getList();
//this.openVideo();
},
methods: {
changeViewStatusHandler() {},
clearVideo() {
this.player.stop();
this.player.dispose();
this.showVideo = false;
import {
getUseClassRoomList
} from "../../api/classroom/index";
import * as signalR from "@aspnet/signalr";
export default {
meta: {
title: "教室状态"
},
data() {
return {
classdata: [],
loading: true,
showVideo: false,
videoObj: null,
currentRoom: null,
queryStatus: 0,
player: null,
connection: "", //signalr连接
roomStatusList: [] //返回消息
};
},
openVideo(item) {
this.showVideo = true;
this.currentRoom = item;
let url = `http://47.96.12.235:5000/live/${item.RoomId}.m3u8`;
this.$nextTick(() => {
this.initPlayer(url);
created() {
let thisVue = this;
this.connection = new signalR.HubConnectionBuilder()
.withUrl(process.env.API_SIG, {
skipNegotiation: true,
transport: signalR.HttpTransportType.WebSockets
})
.configureLogging(signalR.LogLevel.Information)
.build();
this.connection.on("RoomStatusChange", function (message) {
thisVue.roomStatusList = JSON.parse(message);
thisVue.changeStatus();
});
this.connection.onclose(async () => {
setTimeout(() => {
thisVue.linkHub();
}, 3000);
});
this.linkHub();
},
initPlayer(url) {
this.player = new Aliplayer(
{
id: "player-con",
source: url,
width: "100%",
height: "100%",
autoplay: true,
isLive: true,
rePlay: false,
playsinline: true,
preload: true,
controlBarVisibility: "hover",
useH5Prism: true
},
function(player) {}
);
mounted() {
this.getList();
//this.openVideo();
},
changeStatus() {
this.initStatus();
if (this.roomStatusList && this.roomStatusList.length > 0) {
this.roomStatusList.forEach(x => {
this.classdata.forEach(y => {
y.RoomList.forEach(z => {
if (z.RoomId == x.RoomId) {
z.StatusInfo = x;
}
});
});
methods: {
changeViewStatusHandler() {},
clearVideo() {
this.player.stop();
this.player.dispose();
this.showVideo = false;
},
openVideo(item) {
this.showVideo = true;
this.currentRoom = item;
let url = `http://47.96.12.235:5000/live/${item.RoomId}.m3u8`;
this.$nextTick(() => {
this.initPlayer(url);
});
}
this.$forceUpdate();
},
initStatus() {
this.classdata.forEach(y => {
y.RoomList.forEach(z => {
this.classdata.forEach(y => {
y.RoomList.forEach(z => {
z.StatusInfo = null;
},
initPlayer(url) {
this.player = new Aliplayer({
id: "player-con",
source: url,
width: "100%",
height: "100%",
autoplay: true,
isLive: true,
rePlay: false,
playsinline: true,
preload: true,
controlBarVisibility: "hover",
useH5Prism: true
},
function (player) {}
);
},
changeStatus() {
this.initStatus();
if (this.roomStatusList && this.roomStatusList.length > 0) {
this.roomStatusList.forEach(x => {
this.classdata.forEach(y => {
y.RoomList.forEach(z => {
if (z.RoomId == x.RoomId) {
z.StatusInfo = x;
}
});
});
});
});
});
this.$forceUpdate();
},
linkHub() {
let thatVue = this;
this.connection
.start()
.then(() => {
console.log("linke success");
thatVue.connection.invoke("RegistErp", "IMERP");
})
.catch(e => {
console.log(e);
setTimeout(() => {
thatVue.linkHub();
}, 3000);
});
},
goUrl(x, y) {
this.$router.push({
path: "/classroom/useRecord",
query: {
key: x.Key,
roomId: y.RoomId
}
});
},
getList() {
getUseClassRoomList({})
.then(res => {
this.loading = false;
if (res.Code === 1) {
res.Data.forEach(e => {
e.RoomList.forEach(_e => {
_e.slide = 0;
this.$forceUpdate();
},
initStatus() {
this.classdata.forEach(y => {
y.RoomList.forEach(z => {
this.classdata.forEach(y => {
y.RoomList.forEach(z => {
z.StatusInfo = null;
});
});
this.classdata = res.Data;
this.changeStatus();
});
});
this.$forceUpdate();
},
linkHub() {
let thatVue = this;
this.connection
.start()
.then(() => {
thatVue.connection.invoke("RegistErp", "IMERP");
})
.catch(e => {
setTimeout(() => {
thatVue.linkHub();
}, 3000);
});
},
goUrl(x, y) {
this.$router.push({
path: "/classroom/useRecord",
query: {
key: x.Key,
roomId: y.RoomId
}
})
.catch(() => {
this.loading = false;
});
},
getList() {
getUseClassRoomList({})
.then(res => {
this.loading = false;
if (res.Code === 1) {
res.Data.forEach(e => {
e.RoomList.forEach(_e => {
_e.slide = 0;
});
});
this.classdata = res.Data;
this.changeStatus();
}
})
.catch(() => {
this.loading = false;
});
}
}
}
};
};
</script>
<style>
.class-room {
border: 1px solid #f5f5f5;
border-radius: 10px;
position: relative;
overflow: hidden;
}
.class-room .img-box {
height: 80px;
}
.class-room .xuhua {
position: absolute;
top: 0;
height: 80px;
left: 0;
right: 0;
backdrop-filter: blur(4px);
}
.class-room:hover .xuhua {
backdrop-filter: none;
}
.no-data {
height: 75px;
font-size: 14px;
color: #000000;
display: flex;
justify-content: center;
align-items: center;
}
</style>
.class-room {
border: 1px solid #f5f5f5;
border-radius: 10px;
position: relative;
overflow: hidden;
}
.class-room .img-box {
height: 80px;
}
.class-room .xuhua {
position: absolute;
top: 0;
height: 80px;
left: 0;
right: 0;
backdrop-filter: blur(4px);
}
.class-room:hover .xuhua {
backdrop-filter: none;
}
.no-data {
height: 75px;
font-size: 14px;
color: #000000;
display: flex;
justify-content: center;
align-items: center;
}
</style>
\ No newline at end of file
<style>
.baseSet_Title {
width: 120px !important;
padding: 18px 0 0 16px;
text-align: right;
}
.cycleOrderList .border-bottom {
/* border-bottom: 1px dashed #EEE; */
padding-bottom: 5px;
margin-bottom: 5px;
}
.cycleOrderList .text-bottom{
height: 32px;line-height: 32px; margin-bottom: 10px;
}
.cycleOrderList ._icon_btn i.icon-sousuo {
.baseSet_Title {
width: 120px !important;
padding: 18px 0 0 16px;
text-align: right;
}
.cycleOrderList .border-bottom {
/* border-bottom: 1px dashed #EEE; */
padding-bottom: 5px;
margin-bottom: 5px;
}
.cycleOrderList .text-bottom {
height: 32px;
line-height: 32px;
margin-bottom: 10px;
}
.cycleOrderList ._icon_btn i.icon-sousuo {
background-color: #47BF8C;
}
.cycleOrderList ._icon_btn i {
.cycleOrderList ._icon_btn i {
width: 30px;
height: 30px;
display: inline-block;
......@@ -27,462 +33,459 @@
cursor: pointer;
outline: none;
}
.cycleOrderList .el-table td,.el-table th{
.cycleOrderList .el-table td,
.el-table th {
padding: 5px 0;
}
</style>
</style>
<template>
<div class="page-body cycleOrderList">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-select filled stack-label @input="getDepartList(msg.School_Id),resetSearch()" option-value="SId"
option-label="SName" v-model="msg.School_Id" ref="School_Id" :options="schoolList" label="校区"
:dense="false" emit-value map-options />
</div>
<div class="col-3">
<selectTree :treeData='DeptList' :defaultArray="returnString" nodeKey="DeptId" :multiple="false"
labelKey="DeptName" childrenKey="ChildList" tipText="选择部门" @getChild="getChild"></selectTree>
</div>
<q-select @input="resetSearch" filled stack-label option-value="Id" option-label="EmployeeName" use-input
v-model="msg.UserId" ref="DeptTier" :options="PersionList" label="销售" :dense="false"
class="col-3 " emit-value map-options @filter="filterFn2" >
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
<div class="col-3">
<q-select filled stack-label use-input input-debounce="0" option-value="ClassId" @input="getList"
option-label="ClassName" v-model="msg.ClassId" :options="ClassList" label="班级" :dense="false"
emit-value map-options @filter="filterFn">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
</div>
</div>
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-select filled stack-label @input="resetSearch()" option-value="Id"
option-label="Name" v-model="msg.PeriodId" :options="PeriodsList" label="周期"
:dense="false" emit-value map-options />
</div>
<div class="col-3">
<q-input filled v-model="msg.OrderId" @keyup.enter.native="resetSearch()" label="订单号" />
</div>
<div class="col-3">
<q-select filled stack-label input-debounce="0" option-value="Id" @input="resetSearch()"
option-label="Name" v-model="msg.UserType" :options="UserTypeList" label="类型" :dense="false" emit-value
map-options >
</q-select>
</div>
<div class="col-3">
<q-select filled stack-label input-debounce="0" option-value="Id" @input="resetSearch()"
option-label="Name" v-model="msg.IsDept" :options="IsDeptList" label="业绩方式" :dense="false" emit-value
map-options >
</q-select>
</div>
</div>
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-select filled stack-label @input="getDepartList(msg.School_Id),resetSearch()" option-value="SId"
option-label="SName" v-model="msg.School_Id" ref="School_Id" :options="schoolList" label="校区" :dense="false"
emit-value map-options />
</div>
<div class="col-3">
<selectTree :treeData='DeptList' :defaultArray="returnString" nodeKey="DeptId" :multiple="false"
labelKey="DeptName" childrenKey="ChildList" tipText="选择部门" @getChild="getChild"></selectTree>
</div>
<q-select @input="resetSearch" filled stack-label option-value="Id" option-label="EmployeeName" use-input
v-model="msg.UserId" ref="DeptTier" :options="PersionList" label="销售" :dense="false" class="col-3 " emit-value
map-options @filter="filterFn2">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
<div class="col-3">
<q-select filled stack-label use-input input-debounce="0" option-value="ClassId" @input="getList"
option-label="ClassName" v-model="msg.ClassId" :options="ClassList" label="班级" :dense="false" emit-value
map-options @filter="filterFn">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
</div>
<div class="page-search row items-center" style="justify-content: space-between;">
<span style="font-size: 20px;font-weight: 400;">提成统计 <span style="font-size: 16px;">(提成总计:{{TotalCommission}})</span> </span>
<q-btn  color="primary" size="11px" label="导出" @click="tcexport" style="margin-left:10px"/>
</div>
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-select filled stack-label @input="resetSearch()" option-value="Id" option-label="Name"
v-model="msg.PeriodId" :options="PeriodsList" label="周期" :dense="false" emit-value map-options />
</div>
<div class="col-3">
<q-input filled v-model="msg.OrderId" @keyup.enter.native="resetSearch()" label="订单号" />
</div>
<div class="col-3">
<q-select filled stack-label input-debounce="0" option-value="Id" @input="resetSearch()" option-label="Name"
v-model="msg.UserType" :options="UserTypeList" label="类型" :dense="false" emit-value map-options>
</q-select>
</div>
<div class="col-3">
<q-select filled stack-label input-debounce="0" option-value="Id" @input="resetSearch()" option-label="Name"
v-model="msg.IsDept" :options="IsDeptList" label="业绩方式" :dense="false" emit-value map-options>
</q-select>
</div>
</div>
<template >
<el-table
ref="filterTable"
:data="tableData"
v-loading = 'loading'
:header-cell-style="{backgroundColor:'#f5f6f7', color: '#a8a8b3'}"
border
style="width: 100%">
<el-table-column prop="SchoolName" label="校区" width='150' ></el-table-column>
<el-table-column prop="DeptName" label="部门" ></el-table-column>
<el-table-column prop="UserType" label="类型" >
<template slot-scope="scope">
<span v-if="scope.row.UserType==1">市场</span>
<span v-if="scope.row.UserType==2">顾问</span>
<span v-if="scope.row.UserType==3">教师</span>
</template>
</el-table-column>
<el-table-column prop="UserName" label="人员" > </el-table-column>
<el-table-column prop="IsDept" label="业绩方式" >
<template slot-scope="scope">
<span v-if="scope.row.IsDept==1">部门</span>
<span v-if="scope.row.IsDept==2">个人</span>
</template>
</el-table-column>
<el-table-column width='170' prop="ClassName" label="班级信息" >
<template slot-scope="scope">
<div><span style="cursor: pointer;text-decoration: underline;" @click="goUrlclass('/course/classManage',scope.row.ClassName)">{{scope.row.ClassName}}</span> {{scope.row.ClassTypeName}}<span style="color: #409EFF;" v-if='scope.row.IsContinueClass==1'>(续)</span></div>
<div>学生数量:{{scope.row.StudentCount}}</div>
<div>班号:{{scope.row.ClassNo}}</div>
</template>
</el-table-column>
<el-table-column prop="OrderId" label="订单号" >
<template slot-scope="scope">
<div style="cursor: pointer;text-decoration: underline;" @click="goUrlorderList(scope.row.ClassType == -1 ?'/sale/studyOrderStatistics' : '/sale/orderStatistics',scope.row)">{{scope.row.OrderId}} </div>
</template>
</el-table-column>
<el-table-column width='130' prop="TotalCommissionMoney" label="订单发放信息">
<template slot-scope="scope">
<div style="color: rgb(255, 156, 0);cursor: pointer;text-decoration: underline;" @click="getmingxi(scope.row)">
应发:{{scope.row.TotalCommissionMoney}}
<q-popup-proxy transition-show="flip-up" transition-hide="flip-down">
<div style="padding: 10px;border-radius: 4px;background: #FFF;max-width: 500px;">
{{ChangeLog}}
</div>
</q-popup-proxy>
</div>
<div>累计已发:{{scope.row.GiveOutMoney}}</div>
</template>
</el-table-column>
<el-table-column prop="IsFirstCommission" label="首次发放">
<template slot-scope="scope">
<div>{{scope.row.IsFirstCommission==1?'是':'否'}}</div>
</template>
</el-table-column>
<el-table-column prop="TotalHours" label="课时统计" width='160'>
<template slot-scope="scope">
<div>总计课时:{{scope.row.TotalHours}}</div>
<div>学习课时:{{scope.row.TotalLearn}}</div>
<div>当期课时:{{scope.row.CurrentHours>=0 ?scope.row.CurrentHours:'-'}}</div>
</template>
</el-table-column>
<el-table-column width='160' prop="CurrentPeriodMoney" label="当期发放信息">
<template slot-scope="scope">
<div style="color: rgb(255, 156, 0);">应发:{{scope.row.CurrentPeriodMoney}}</div>
<div>抵扣:{{scope.row.DeductionMoney}}</div>
</template>
</el-table-column>
<el-table-column prop="YFMoney" label="最终发放">
<template slot-scope="scope">
<div style="color: rgb(233, 82, 82);">{{scope.row.YFMoney}}</div>
</template>
</el-table-column>
<el-table-column width='85' prop="Periods" label="期数"> </el-table-column>
<el-table-column prop="Remark" width='160' label="备注"> </el-table-column>
</div>
<div class="page-search row items-center" style="justify-content: space-between;">
<span style="font-size: 20px;font-weight: 400;">提成统计 <span
style="font-size: 16px;">(提成总计:{{TotalCommission}})</span> </span>
<q-btn  color="primary"  size="11px"  label="导出"  @click="tcexport"  style="margin-left:10px" />
</div>
<template>
<el-table ref="filterTable" :data="tableData" v-loading='loading'
:header-cell-style="{backgroundColor:'#f5f6f7', color: '#a8a8b3'}" border style="width: 100%">
<el-table-column prop="SchoolName" label="校区" width='150'></el-table-column>
<el-table-column prop="DeptName" label="部门"></el-table-column>
<el-table-column prop="UserType" label="类型">
<template slot-scope="scope">
<span v-if="scope.row.UserType==1">市场</span>
<span v-if="scope.row.UserType==2">顾问</span>
<span v-if="scope.row.UserType==3">教师</span>
</template>
</el-table-column>
<el-table-column prop="UserName" label="人员"> </el-table-column>
<el-table-column prop="IsDept" label="业绩方式">
<template slot-scope="scope">
<span v-if="scope.row.IsDept==1">部门</span>
<span v-if="scope.row.IsDept==2">个人</span>
</template>
</el-table-column>
<el-table-column width='170' prop="ClassName" label="班级信息">
<template slot-scope="scope">
<div><span style="cursor: pointer;text-decoration: underline;"
@click="goUrlclass('/course/classManage',scope.row.ClassName)">{{scope.row.ClassName}}</span>
{{scope.row.ClassTypeName}}<span style="color: #409EFF;" v-if='scope.row.IsContinueClass==1'>(续)</span>
</div>
<div>学生数量:{{scope.row.StudentCount}}</div>
<div>班号:{{scope.row.ClassNo}}</div>
</template>
</el-table-column>
<el-table-column prop="OrderId" label="订单号">
<template slot-scope="scope">
<div style="cursor: pointer;text-decoration: underline;"
@click="goUrlorderList(scope.row.ClassType == -1 ?'/sale/studyOrderStatistics' : '/sale/orderStatistics',scope.row)">
{{scope.row.OrderId}} </div>
</template>
</el-table-column>
<el-table-column width='130' prop="TotalCommissionMoney" label="订单发放信息">
<template slot-scope="scope">
<div style="color: rgb(255, 156, 0);cursor: pointer;text-decoration: underline;"
@click="getmingxi(scope.row)">
应发:{{scope.row.TotalCommissionMoney}}
<q-popup-proxy transition-show="flip-up" transition-hide="flip-down">
<div style="padding: 10px;border-radius: 4px;background: #FFF;max-width: 500px;">
{{ChangeLog}}
</div>
</q-popup-proxy>
</div>
<div>累计已发:{{scope.row.GiveOutMoney}}</div>
</template>
</el-table-column>
<el-table-column prop="IsFirstCommission" label="首次发放">
<template slot-scope="scope">
<div>{{scope.row.IsFirstCommission==1?'是':'否'}}</div>
</template>
</el-table-column>
<el-table-column prop="TotalHours" label="课时统计" width='160'>
<template slot-scope="scope">
<div>总计课时:{{scope.row.TotalHours}}</div>
<div>学习课时:{{scope.row.TotalLearn}}</div>
<div>当期课时:{{scope.row.CurrentHours>=0 ?scope.row.CurrentHours:'-'}}</div>
</template>
</el-table-column>
<el-table-column width='160' prop="CurrentPeriodMoney" label="当期发放信息">
<template slot-scope="scope">
<div style="color: rgb(255, 156, 0);">应发:{{scope.row.CurrentPeriodMoney}}</div>
<div>抵扣:{{scope.row.DeductionMoney}}</div>
</template>
</el-table-column>
<el-table-column prop="YFMoney" label="最终发放">
<template slot-scope="scope">
<div style="color: rgb(233, 82, 82);">{{scope.row.YFMoney}}</div>
</template>
</el-table-column>
<el-table-column width='85' prop="Periods" label="期数"> </el-table-column>
<el-table-column prop="Remark" width='160' label="备注"> </el-table-column>
</el-table>
<div style="margin-top: 10px;text-align: center;">
<el-pagination background @current-change="handleCurrentChanges" layout="total,prev, pager, next, jumper" :current-page.sync="msg.PageIndex"
:page-size="msg.PageSize" :total='total'>
</el-pagination>
</div>
<el-pagination background @current-change="handleCurrentChanges" layout="total,prev, pager, next, jumper"
:current-page.sync="msg.PageIndex" :page-size="msg.PageSize" :total='total'>
</el-pagination>
</div>
</template>
</div>
</template>
<script>
import {
getSchoolDropdown
} from '../../../api/school/index'
import {
queryEmployee
} from '../../../api/users/user'
import {
getDeptTree
} from '../../../api/system/dept.js'
import{
getSellAchievementsStatistics,
getSellAchievementsPeriodsList,
getSellAchievementsChangeLog
} from '../../../api/finance/index'
import {
getClassDropDownList,
} from "../../../api/school/index";
import selectTree from '../../../components/common/select-tree'
import {
EduDownLoad,
} from '../../../api/common/common';
import { number } from 'echarts'
export default {
meta: {
title: "业绩提成统计"
},
props: {},
components: {
selectTree
},
data() {
return {
loading: false,
//列表数据参数
msg: {
PageIndex:1,
PageSize:10,
School_Id:'-1',
Depart_Id:0,
PeriodId: 0,
UserId: 0,
ClassId:0,
OrderId:'',
UserType:0,//类型 1市场、2顾问、3教师
IsDept:0,//业绩方式 1部门 2个人
},
UserTypeList:[{Id:0,Name:'不限'},{Id:1,Name:'市场'},{Id:2,Name:'顾问'},{Id:3,Name:'教师'},],
IsDeptList:[{Id:0,Name:'不限'},{Id:1,Name:'部门'},{Id:2,Name:'个人'}],
pageCount: 0,
persistent: false,
listData:{},
tableData:[],
total:0,
company:[],
department:[],
ClassList:[],
allClassList:[],
returnString: [], //默认岗位
see_tcdetailed:false,
schoolList:[],
DeptList: [], // 部门下拉
PersionList: [], //员工列表
AllemployeeList: [], //所有员工
PeriodsList:[],//周期列表
TotalCommission:0,
ChangeLog:'',
<script>
import {
getSchoolDropdown
} from '../../../api/school/index'
import {
queryEmployee
} from '../../../api/users/user'
import {
getDeptTree
} from '../../../api/system/dept.js'
import {
getSellAchievementsStatistics,
getSellAchievementsPeriodsList,
getSellAchievementsChangeLog
} from '../../../api/finance/index'
import {
getClassDropDownList,
} from "../../../api/school/index";
import selectTree from '../../../components/common/select-tree'
import {
EduDownLoad,
} from '../../../api/common/common';
import {
number
} from 'echarts'
export default {
meta: {
title: "业绩提成统计"
},
props: {},
components: {
selectTree
},
data() {
return {
loading: false,
//列表数据参数
msg: {
PageIndex: 1,
PageSize: 10,
School_Id: '-1',
Depart_Id: 0,
PeriodId: 0,
UserId: 0,
ClassId: 0,
OrderId: '',
UserType: 0, //类型 1市场、2顾问、3教师
IsDept: 0, //业绩方式 1部门 2个人
},
UserTypeList: [{
Id: 0,
Name: '不限'
}, {
Id: 1,
Name: '市场'
}, {
Id: 2,
Name: '顾问'
}, {
Id: 3,
Name: '教师'
}, ],
IsDeptList: [{
Id: 0,
Name: '不限'
}, {
Id: 1,
Name: '部门'
}, {
Id: 2,
Name: '个人'
}],
pageCount: 0,
persistent: false,
listData: {},
tableData: [],
total: 0,
company: [],
department: [],
ClassList: [],
allClassList: [],
returnString: [], //默认岗位
see_tcdetailed: false,
schoolList: [],
DeptList: [], // 部门下拉
PersionList: [], //员工列表
AllemployeeList: [], //所有员工
PeriodsList: [], //周期列表
TotalCommission: 0,
ChangeLog: '',
}
},
created() {
let userinfo = this.getLocalStorage();
userinfo.ActionMenuList.map(x => { //判断权限
if (x.FunctionCode == "see_tcdetailed") { //判断是否可以查看其他明细
this.see_tcdetailed = true;
}
})
if (this.see_tcdetailed == false) {
this.msg.UserId = userinfo.Id
}
},
mounted() {
if (this.$route.query && this.$route.query.OrderId) {
this.msg.OrderId = this.$route.query.OrderId
}
// 从业绩表跳转带参
if (this.$route.query && this.$route.query.UserId) {
this.PersionList = JSON.parse(JSON.stringify(this.AllemployeeList))
this.msg.UserId = this.$route.query.UserId - 0
}
this.getList()
this.getEmployee(); //销售
this.getPeriodList() //周期
this.setClass() //班级
this.getBranchList() //校区
this.getDepartList(0);
},
methods: {
resetSearch() {
this.msg.PageIndex = 1;
this.getList()
},
created() {
let userinfo = this.getLocalStorage();
userinfo.ActionMenuList.map(x=>{//判断权限
if(x.FunctionCode == "see_tcdetailed"){//判断是否可以查看其他明细
this.see_tcdetailed = true;
getList() {
if (this.msg)
this.loading = true;
getSellAchievementsStatistics(this.msg).then(res => {
this.loading = false;
if (res.Code == 1) {
this.tableData = res.Data.PageData.List
this.TotalCommission = res.Data.PageData.TotalCommission
this.total = res.Data.Count
}
})
if(this.see_tcdetailed == false){
this.msg.UserId = userinfo.Id
}
},
mounted() {
if(this.$route.query && this.$route.query.OrderId){
this.msg.OrderId = this.$route.query.OrderId
}
// 从业绩表跳转带参
if(this.$route.query && this.$route.query.UserId){
this.PersionList = JSON.parse(JSON.stringify(this.AllemployeeList))
this.msg.UserId = this.$route.query.UserId - 0
}
unique(arr, Name) { //数组去重
const res = new Map();
return arr.filter(
(list) => !res.has(list.text) && res.set(list.text, 1)
);
},
handleCurrentChanges(val) {
this.msg.PageIndex = val;
this.getList()
this.getEmployee();//销售
this.getPeriodList()//周期
this.setClass()//班级
this.getBranchList()//校区
this.getDepartList(0);
},
methods: {
resetSearch() {
this.msg.PageIndex = 1;
this.getList()
},
getList(){
console.log(this.msg, '02222222222')
if(this.msg)
this.loading = true;
getSellAchievementsStatistics(this.msg).then(res => {
if (res.Code == 1) {
this.loading = false;
this.tableData = res.Data.PageData.List
this.TotalCommission = res.Data.PageData.TotalCommission
this.total = res.Data.Count
//选择班级
setClass(item) {
this.isShowClass = true;
getClassDropDownList({
CourseId: 0,
IsAddDefault: 1, //添加默认选项
}).then(res => {
if (res.Code == 1) {
var jsonData = res.Data;
let obj = {
ClassId: 0,
ClassName: '不限'
}
})
},
unique(arr,Name){//数组去重
const res = new Map();
return arr.filter(
(list) => !res.has(list.text) && res.set(list.text, 1)
);
},
handleCurrentChanges(val){
this.msg.PageIndex= val;
this.getList()
},
//选择班级
setClass(item) {
this.isShowClass = true;
getClassDropDownList({
CourseId: 0,
IsAddDefault: 1, //添加默认选项
}).then(res => {
if (res.Code == 1) {
var jsonData = res.Data;
let obj = {
ClassId:0,
ClassName:'不限'
}
jsonData.unshift(obj)
if (jsonData && jsonData.length > 0) {
this.ClassList = JSON.parse(JSON.stringify(jsonData));
this.allClassList = JSON.parse(JSON.stringify(jsonData));;
}
jsonData.unshift(obj)
if (jsonData && jsonData.length > 0) {
this.ClassList = JSON.parse(JSON.stringify(jsonData));
this.allClassList = JSON.parse(JSON.stringify(jsonData));;
}
});
},
//筛选员工
filterFn(val, update) {
update(() => {
if (val === '') {
this.ClassList = JSON.parse(JSON.stringify(this.allClassList))
} else {
const needle = val.toLowerCase()
this.ClassList = this.allClassList.filter(v => v.ClassName.toLowerCase().indexOf(needle) > -1)
}
})
},
getBranchList(){//获取校区
getSchoolDropdown({}).then(res => {
this.schoolList = res.Data;
var obj = {
SName: '全部',
SId: '-1'
}
this.schoolList.unshift(obj);
}).catch(() => {
}
});
},
//筛选员工
filterFn(val, update) {
update(() => {
if (val === '') {
this.ClassList = JSON.parse(JSON.stringify(this.allClassList))
} else {
const needle = val.toLowerCase()
this.ClassList = this.allClassList.filter(v => v.ClassName.toLowerCase().indexOf(needle) > -1)
}
})
},
getBranchList() { //获取校区
getSchoolDropdown({}).then(res => {
this.schoolList = res.Data;
var obj = {
SName: '全部',
SId: '-1'
}
this.schoolList.unshift(obj);
}).catch(() => {
})
},
//获取部门下拉数据
getDepartList(id) {
if(id==-1){
id = 0
}
let msg = {
School_Id: id
}
getDeptTree(msg).then(res => {
if (res.Code == 1) {
this.DeptList = res.Data;
}
})
},
getChild(deptArray) {
var tempStr = "";
if (deptArray && deptArray != '') {
tempStr = deptArray;
}
if (tempStr) {
this.msg.Depart_Id = tempStr;
} else {
this.msg.Depart_Id = 0;
})
},
//获取部门下拉数据
getDepartList(id) {
if (id == -1) {
id = 0
}
let msg = {
School_Id: id
}
getDeptTree(msg).then(res => {
if (res.Code == 1) {
this.DeptList = res.Data;
}
})
},
getChild(deptArray) {
var tempStr = "";
if (deptArray && deptArray != '') {
tempStr = deptArray;
}
if (tempStr) {
this.msg.Depart_Id = tempStr;
} else {
this.msg.Depart_Id = 0;
}
this.resetSearch();
},
//筛选员工
filterFn2(val, update) {
update(() => {
if (val === '') {
this.PersionList = JSON.parse(JSON.stringify(this.AllemployeeList))
} else {
const needle = val.toLowerCase()
this.PersionList = this.AllemployeeList.filter(v => v.EmployeeName.toLowerCase().indexOf(needle) > -1)
}
})
},
//获取员工列表
getEmployee() {
var qMsg = {
EmployeeName: ""
}
queryEmployee(qMsg).then(res => {
if (res.Code == 1) {
let obj = {
EmployeeName: '不限',
Id: 0
}
this.resetSearch();
},
//筛选员工
filterFn2(val, update) {
update(() => {
if (val === '') {
this.PersionList = JSON.parse(JSON.stringify(this.AllemployeeList))
} else {
const needle = val.toLowerCase()
this.PersionList = this.AllemployeeList.filter(v => v.EmployeeName.toLowerCase().indexOf(needle) > -1)
res.Data.unshift(obj)
var jsonData = res.Data;
if (jsonData && jsonData.length > 0) {
this.AllemployeeList = JSON.parse(JSON.stringify(jsonData));
this.PersionList = JSON.parse(JSON.stringify(jsonData));;
}
})
},
//获取员工列表
getEmployee() {
var qMsg = {
EmployeeName: ""
}
})
},
getPeriodList() { //获取周期下拉列表
getSellAchievementsPeriodsList({}).then(res => {
if (res.Code == 1) {
this.PeriodsList = res.Data
let obj = {
Name: '不限',
Id: 0
}
queryEmployee(qMsg).then(res => {
if (res.Code == 1) {
let obj = {
EmployeeName: '不限',
Id: 0
}
res.Data.unshift(obj)
var jsonData = res.Data;
if (jsonData && jsonData.length > 0) {
this.AllemployeeList = JSON.parse(JSON.stringify(jsonData));
this.PersionList = JSON.parse(JSON.stringify(jsonData));;
}
this.PeriodsList.unshift(obj)
// 从业绩表跳转带参
if (this.$route.query.Periods) {
this.PeriodsList.forEach(item => {
if (item.Periods == this.$route.query.Periods) {
this.msg.PeriodId = item.Id
}
})
},
getPeriodList(){//获取周期下拉列表
getSellAchievementsPeriodsList({}).then(res => {
if (res.Code == 1) {
this.PeriodsList = res.Data
let obj = {
Name: '不限',
Id: 0
}
this.PeriodsList.unshift(obj)
// 从业绩表跳转带参
if(this.$route.query.Periods){
this.PeriodsList.forEach(item=>{
if(item.Periods==this.$route.query.Periods){
this.msg.PeriodId = item.Id
}
})
}
}
})
},
tcexport(){//导出
var msg = JSON.parse(JSON.stringify(this.msg));
EduDownLoad("/SellAchievements/GetSellAchievementsStatisticsToExcel", msg, "业绩提成统计.xls")
},
goUrlclass(path,Names){//班级
let Name = encodeURI(Names)
this.OpenNewUrl(path, {
ClassName: Name,
});
},
goUrlorderList(path,row){//订单跳转
this.OpenNewUrl(path, {
OrderId: row.OrderId,
// EnterID:row.UserId
});
},
getmingxi(row){//明细
getSellAchievementsChangeLog({
OrderId: row.OrderId,
UserId: row.UserId,
UserType: row.UserType,
IsDept: row.IsDept,
}).then(res => {
if (res.Code == 1) {
this.ChangeLog = res.Data
})
}
});
}
}
})
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
tcexport() { //导出
var msg = JSON.parse(JSON.stringify(this.msg));
EduDownLoad("/SellAchievements/GetSellAchievementsStatisticsToExcel", msg, "业绩提成统计.xls")
},
goUrlclass(path, Names) { //班级
let Name = encodeURI(Names)
this.OpenNewUrl(path, {
ClassName: Name,
});
},
goUrlorderList(path, row) { //订单跳转
this.OpenNewUrl(path, {
OrderId: row.OrderId,
});
},
getmingxi(row) { //明细
getSellAchievementsChangeLog({
OrderId: row.OrderId,
UserId: row.UserId,
UserType: row.UserType,
IsDept: row.IsDept,
}).then(res => {
if (res.Code == 1) {
this.ChangeLog = res.Data
}
});
}
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
......@@ -34,7 +34,7 @@
<el-option :key="0" label="全部" :value="0"> </el-option>
<el-option :key="1" label="跟班课" :value="1"> </el-option>
<el-option :key="2" label="试听课" :value="2"> </el-option>
<el-option :key="2" label="预约课" :value="3"> </el-option>
<el-option :key="3" label="预约课" :value="3"> </el-option>
<div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px">
类型:
</div>
......
......@@ -2,8 +2,7 @@
<div class="page-body MainPlan xg">
<div class="col row wrap q-col-gutter-md">
<div class="col-2">
<el-select v-model="msg.TeacherId" style="width: 100%" placeholder="教师" size="small"
@change="getTypeWay()">
<el-select v-model="msg.TeacherId" style="width: 100%" placeholder="教师" size="small" @change="getTypeWay()">
<el-option v-for="item in TeacherList" :key="item.TeacherName" :label="item.TeacherName" :value="item.TId">
</el-option>
<div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px">
......@@ -36,13 +35,18 @@
<el-option :key="0" label="全部" :value="0"> </el-option>
<el-option :key="1" label="跟班课" :value="1"> </el-option>
<el-option :key="2" label="试听课" :value="2"> </el-option>
<el-option :key="2" label="预约课" :value="3"> </el-option>
<el-option :key="3" label="预约课" :value="3"> </el-option>
<div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px">
状态:
</div>
</el-select>
</div>
<div class="col-2">
<el-input v-model="msg.StuName" style="width: 100%" placeholder="学员姓名" size="small" @input="getTypeWay()" clearable>
<div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px">
学员:
</div>
</el-input>
</div>
</div>
<teachTable v-if="commonType == 2" :tableData="tableData" :PageCount="PageCount" :setMsg="tabMsg" :showCZ="true"
......@@ -54,11 +58,13 @@
import {
getTeacherDropDownList,
queryClassRoomList,
getStudentDorpDownList,
} from "../../api/school/index";
import {
GetClassPlanStatistical,
GetClassPlanStatisticalPage,
} from "../../api/teacher/index";
import classmateForm from "../../components/course/classmate-form";
import teachTable from "../teacher/components/teachTable";
import changeClassForm from "../../components/teacher/changeClassForm.vue";
......@@ -81,13 +87,15 @@
TeacherId: 0,
ClassRoomId: 0,
dataList: {},
loading:false,
loading: false,
msg: {
StartTime: "",
EndTime: "",
TeacherId: 0,
ClassRoomId: 0,
ClassType: 0,
Student_Id: "",
StuName: "",
},
commonType: 2, //1日历模式 2列表模式
typeName: "列表模式",
......@@ -101,6 +109,7 @@
ClassRoomId: 0,
ClassType: 0,
OrderBy: 1,
StuName:"",
},
tableData: [], //表格数据
PageCount: 0,
......@@ -121,6 +130,7 @@
},
},
today: "",
StuList: [], //学员列表
};
},
created() {
......@@ -148,6 +158,13 @@
this.getTableList();
},
methods: {
queryStuList() {
getStudentDorpDownList({}).then(res => {
if (res.Code == 1) {
this.StuList = res.Data;
}
});
},
refreshPage() {
this.getPlanList();
},
......@@ -212,10 +229,11 @@
this.tabMsg.EndTime = this.msg.EndTime;
this.tabMsg.ClassRoomId = this.msg.ClassRoomId;
this.tabMsg.ClassType = this.msg.ClassType;
this.tabMsg.TeacherId=this.msg.TeacherId;
this.loading=true;
this.tabMsg.TeacherId = this.msg.TeacherId;
this.tabMsg.StuName=this.msg.StuName;
this.loading = true;
GetClassPlanStatisticalPage(this.tabMsg).then((res) => {
this.loading=false;
this.loading = false;
if (res.Code == 1) {
this.tableData = res.Data.PageData;
this.PageCount = res.Data.PageCount;
......@@ -235,11 +253,9 @@
},
},
};
</script>
<style lang="scss">
.xg .el-input--prefix .el-input__inner {
padding-left: 50px;
}
</style>
</style>
\ No newline at end of file
......@@ -38,7 +38,8 @@
</q-td>
<template v-for="(subItem,subIndex) in props.row.SubtypeList[cIndex].OptionList">
<q-td :key="subIndex+200000" class="assessmentType_td">
<div style="width:150px;white-space:normal; "> {{subItem.LevelDesc}} <q-badge color="green" v-if="subItem.LevelScore>0">
<div style="width:150px;white-space:normal; "> {{subItem.LevelDesc}} <q-badge color="green"
v-if="subItem.LevelScore>0">
{{subItem.LevelScore}}
</q-badge>
</div>
......@@ -60,7 +61,8 @@
</q-td>
<template v-for="(subItem,subIndex) in props.row.SubtypeList[cIndex].OptionList">
<q-td :key="subIndex+400000" class="assessmentType_td">
<div style="width:150px;white-space:normal; "> {{subItem.LevelDesc}} <q-badge color="green" v-if="subItem.LevelScore>0">
<div style="width:150px;white-space:normal; "> {{subItem.LevelDesc}} <q-badge color="green"
v-if="subItem.LevelScore>0">
{{subItem.LevelScore}}
</q-badge>
</div>
......@@ -113,7 +115,6 @@
this.columns = [];
queryAssessmentTypeList(this.msg).then(res => {
this.loading = false;
console.log("res", res);
if (res.Code == 1) {
this.dataList = res.Data.result;
this.columns = res.Data.header;
......
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