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

页面修改

parent 5516e5e9
<style lang="scss">
.stuList .q-table__bottom {
.stuList .q-table__bottom {
min-height: 0;
}
}
.stulistNum {
.stulistNum {
display: inline-block;
width: 25px;
height: 25px;
......@@ -13,23 +13,23 @@
border-radius: 50%;
cursor: pointer;
color: #2961fe;
}
}
.stuListTable {
.stuListTable {
width: 200px;
text-align: center;
}
}
.stuListTable tr td {
.stuListTable tr td {
height: 40px;
}
}
.stuListTable tr th {
.stuListTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
}
.stulistNumber {
.stulistNumber {
display: inline-block;
width: 25px;
height: 25px;
......@@ -39,155 +39,63 @@
border-radius: 50%;
cursor: pointer;
color: #2961fe;
}
}
.OCourseTable {
.OCourseTable {
width: 600px;
text-align: center;
}
}
.OCourseTable tr td {
.OCourseTable tr td {
height: 40px;
}
}
.OCourseTable tr th {
.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,61 +238,40 @@
</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 {
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";
} from "../../../api/sale/sale";
import {
EduDownLoad
} from "../../../api/common/common";
import {
queryEmployee
} from "../../../api/users/user";
export default {
export default {
props: {
//数据列表
dataList: {
......@@ -470,8 +319,7 @@ export default {
},
data() {
return {
columns: [
{
columns: [{
name: "StuIcon",
label: "",
field: "StuIcon",
......@@ -808,8 +656,7 @@ export default {
this.$q
.dialog({
title: str + "学员",
message:
"你正在进行" + str + "学员行为,一旦执行无法找回,是否确认执行?",
message: "你正在进行" + str + "学员行为,一旦执行无法找回,是否确认执行?",
persistent: true,
cancel: {
label: "取消",
......@@ -843,7 +690,6 @@ export default {
},
//刷新列表
refreshStuList() {
console.log("change......");
this.$emit("success");
this.selection = [];
},
......@@ -1014,5 +860,5 @@ export default {
});
}
}
};
};
</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 },
import orderlist from "../sale/orderlist.vue";
import {
getMyOrderNotBalance
} from "../../api/stuMan/index";
export default {
components: {
orderlist
},
props: ["node"],
data() {
return {
......@@ -97,7 +69,6 @@ export default {
.then(r => {
this.stus = r.Data.PageData;
this.pageCount = r.Data.PageCount;
console.log(this.stus);
setTimeout(() => {
this.loading = false;
}, 1000);
......@@ -118,7 +89,7 @@ export default {
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,24 +59,20 @@
</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 {
import {
getUseClassRoomList
} from "../../api/classroom/index";
import * as signalR from "@aspnet/signalr";
export default {
meta: {
title: "教室状态"
},
......@@ -135,7 +92,6 @@ export default {
created() {
let thisVue = this;
console.log(process.env.API_SIG);
this.connection = new signalR.HubConnectionBuilder()
.withUrl(process.env.API_SIG, {
skipNegotiation: true,
......@@ -143,9 +99,8 @@ export default {
})
.configureLogging(signalR.LogLevel.Information)
.build();
this.connection.on("RoomStatusChange", function(message) {
this.connection.on("RoomStatusChange", function (message) {
thisVue.roomStatusList = JSON.parse(message);
console.log(thisVue.roomStatusList);
thisVue.changeStatus();
});
this.connection.onclose(async () => {
......@@ -176,8 +131,7 @@ export default {
});
},
initPlayer(url) {
this.player = new Aliplayer(
{
this.player = new Aliplayer({
id: "player-con",
source: url,
width: "100%",
......@@ -190,7 +144,7 @@ export default {
controlBarVisibility: "hover",
useH5Prism: true
},
function(player) {}
function (player) {}
);
},
changeStatus() {
......@@ -225,11 +179,9 @@ export default {
this.connection
.start()
.then(() => {
console.log("linke success");
thatVue.connection.invoke("RegistErp", "IMERP");
})
.catch(e => {
console.log(e);
setTimeout(() => {
thatVue.linkHub();
}, 3000);
......@@ -263,35 +215,39 @@ export default {
});
}
}
};
};
</script>
<style>
.class-room {
.class-room {
border: 1px solid #f5f5f5;
border-radius: 10px;
position: relative;
overflow: hidden;
}
.class-room .img-box {
}
.class-room .img-box {
height: 80px;
}
.class-room .xuhua {
}
.class-room .xuhua {
position: absolute;
top: 0;
height: 80px;
left: 0;
right: 0;
backdrop-filter: blur(4px);
}
.class-room:hover .xuhua {
}
.class-room:hover .xuhua {
backdrop-filter: none;
}
.no-data {
}
.no-data {
height: 75px;
font-size: 14px;
color: #000000;
display: flex;
justify-content: center;
align-items: center;
}
}
</style>
\ No newline at end of file
......@@ -4,17 +4,23 @@
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 .text-bottom {
height: 32px;
line-height: 32px;
margin-bottom: 10px;
}
.cycleOrderList ._icon_btn i.icon-sousuo {
background-color: #47BF8C;
}
.cycleOrderList ._icon_btn i {
width: 30px;
height: 30px;
......@@ -27,28 +33,28 @@
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 />
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" >
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">
......@@ -59,8 +65,8 @@
</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">
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">
......@@ -70,81 +76,74 @@
</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 />
<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 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 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>
<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"/>
<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>
<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="业绩方式" >
<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="班级信息" >
<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><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="订单号" >
<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>
<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)">
<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;">
......@@ -154,7 +153,6 @@
</div>
<div>累计已发:{{scope.row.GiveOutMoney}}</div>
</template>
</el-table-column>
<el-table-column prop="IsFirstCommission" label="首次发放">
<template slot-scope="scope">
......@@ -168,34 +166,29 @@
<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 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>
<script>
import {
getSchoolDropdown
} from '../../../api/school/index'
......@@ -206,7 +199,7 @@
getDeptTree
} from '../../../api/system/dept.js'
import{
import {
getSellAchievementsStatistics,
getSellAchievementsPeriodsList,
getSellAchievementsChangeLog
......@@ -218,7 +211,9 @@
import {
EduDownLoad,
} from '../../../api/common/common';
import { number } from 'echarts'
import {
number
} from 'echarts'
export default {
meta: {
title: "业绩提成统计"
......@@ -232,100 +227,112 @@ import { number } from 'echarts'
loading: false,
//列表数据参数
msg: {
PageIndex:1,
PageSize:10,
School_Id:'-1',
Depart_Id:0,
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个人
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:'个人'}],
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:[],
listData: {},
tableData: [],
total: 0,
company: [],
department: [],
ClassList: [],
allClassList: [],
returnString: [], //默认岗位
see_tcdetailed:false,
schoolList:[],
see_tcdetailed: false,
schoolList: [],
DeptList: [], // 部门下拉
PersionList: [], //员工列表
AllemployeeList: [], //所有员工
PeriodsList:[],//周期列表
TotalCommission:0,
ChangeLog:'',
PeriodsList: [], //周期列表
TotalCommission: 0,
ChangeLog: '',
}
},
created() {
let userinfo = this.getLocalStorage();
userinfo.ActionMenuList.map(x=>{//判断权限
if(x.FunctionCode == "see_tcdetailed"){//判断是否可以查看其他明细
userinfo.ActionMenuList.map(x => { //判断权限
if (x.FunctionCode == "see_tcdetailed") { //判断是否可以查看其他明细
this.see_tcdetailed = true;
}
})
if(this.see_tcdetailed == false){
if (this.see_tcdetailed == false) {
this.msg.UserId = userinfo.Id
}
},
mounted() {
if(this.$route.query && this.$route.query.OrderId){
if (this.$route.query && this.$route.query.OrderId) {
this.msg.OrderId = this.$route.query.OrderId
}
// 从业绩表跳转带参
if(this.$route.query && this.$route.query.UserId){
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.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)
getList() {
if (this.msg)
this.loading = true;
getSellAchievementsStatistics(this.msg).then(res => {
if (res.Code == 1) {
this.loading = false;
if (res.Code == 1) {
this.tableData = res.Data.PageData.List
this.TotalCommission = res.Data.PageData.TotalCommission
this.total = res.Data.Count
}
})
},
unique(arr,Name){//数组去重
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;
handleCurrentChanges(val) {
this.msg.PageIndex = val;
this.getList()
},
//选择班级
......@@ -338,8 +345,8 @@ import { number } from 'echarts'
if (res.Code == 1) {
var jsonData = res.Data;
let obj = {
ClassId:0,
ClassName:'不限'
ClassId: 0,
ClassName: '不限'
}
jsonData.unshift(obj)
if (jsonData && jsonData.length > 0) {
......@@ -360,7 +367,7 @@ import { number } from 'echarts'
}
})
},
getBranchList(){//获取校区
getBranchList() { //获取校区
getSchoolDropdown({}).then(res => {
this.schoolList = res.Data;
var obj = {
......@@ -374,7 +381,7 @@ import { number } from 'echarts'
},
//获取部门下拉数据
getDepartList(id) {
if(id==-1){
if (id == -1) {
id = 0
}
let msg = {
......@@ -429,7 +436,7 @@ import { number } from 'echarts'
}
})
},
getPeriodList(){//获取周期下拉列表
getPeriodList() { //获取周期下拉列表
getSellAchievementsPeriodsList({}).then(res => {
if (res.Code == 1) {
this.PeriodsList = res.Data
......@@ -439,9 +446,9 @@ import { number } from 'echarts'
}
this.PeriodsList.unshift(obj)
// 从业绩表跳转带参
if(this.$route.query.Periods){
this.PeriodsList.forEach(item=>{
if(item.Periods==this.$route.query.Periods){
if (this.$route.query.Periods) {
this.PeriodsList.forEach(item => {
if (item.Periods == this.$route.query.Periods) {
this.msg.PeriodId = item.Id
}
})
......@@ -449,23 +456,22 @@ import { number } from 'echarts'
}
})
},
tcexport(){//导出
tcexport() { //导出
var msg = JSON.parse(JSON.stringify(this.msg));
EduDownLoad("/SellAchievements/GetSellAchievementsStatisticsToExcel", msg, "业绩提成统计.xls")
},
goUrlclass(path,Names){//班级
goUrlclass(path, Names) { //班级
let Name = encodeURI(Names)
this.OpenNewUrl(path, {
ClassName: Name,
});
},
goUrlorderList(path,row){//订单跳转
goUrlorderList(path, row) { //订单跳转
this.OpenNewUrl(path, {
OrderId: row.OrderId,
// EnterID:row.UserId
});
},
getmingxi(row){//明细
getmingxi(row) { //明细
getSellAchievementsChangeLog({
OrderId: row.OrderId,
UserId: row.UserId,
......@@ -479,10 +485,7 @@ import { number } from 'echarts'
}
},
}
</script>
<style lang="sass">
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
</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>
\ 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