123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528 |
- <!-- -->
- <template>
- <div class="m-container">
- <h2>
- <div class="squrt"></div>
- 服务指标明细
- </h2>
- <!-- <filter-search
- ref="filterSearch"
- @reload="reloadSearch"
- :keys="['searchType']"
- :moreKeys="['organId']"
- /> -->
- <div class="m-core">
- <save-form
- :inline="true"
- :model="searchForm"
- @submit="search"
- @reset="onReSet"
- ref="form"
- >
- <el-form-item prop="organId">
- <el-select
- class="multiple"
- v-model.trim="searchForm.organId"
- filterable
- clearable
- placeholder="请选择分部"
- >
- <el-option
- v-for="(item, index) in selects.branchs"
- :key="index"
- :label="item.name"
- :value="item.id"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="teacherId">
- <remote-search
- :commit="'setTeachers'"
- v-model="searchForm.teacherId"
- />
- </el-form-item>
- <el-form-item prop="serviceIsError">
- <el-select
- placeholder="服务是否异常"
- v-model="searchForm.serviceIsError"
- clearable
- >
- <el-option label="是" value="1"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="unDone">
- <el-select
- class="multiple"
- v-model.trim="searchForm.unDone"
- clearable
- placeholder="是否异常"
- >
- <el-option label="是" value="1"></el-option>
- <el-option label="否" value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="reminded">
- <el-select
- class="multiple"
- v-model.trim="searchForm.reminded"
- clearable
- placeholder="是否提醒"
- >
- <el-option label="是" value="1"></el-option>
- <el-option label="否" value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="operatorId">
- <remote-search
- :commit="'setEmploys'"
- v-model.trim="searchForm.operatorId"
- />
- </el-form-item>
- <el-form-item>
- <el-select
- v-model.trim="searchForm.jobNature"
- filterable
- clearable
- placeholder="工作类型"
- >
- <el-option
- v-for="item in jobNature"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item >
- <el-select
- placeholder="实际作业布置"
- v-model="searchForm.actualExercisesNumIsAchieve"
- clearable
- >
- <el-option label="符合预期" value="1"></el-option>
- <el-option label="不符合预期" value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item>
- <el-select
- placeholder="提交次数"
- v-model="searchForm.exercisesReplyNumIsAchieve"
- clearable
- >
- <el-option label="符合预期" value="1"></el-option>
- <el-option label="不符合预期" value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item >
- <el-select
- placeholder="评价次数"
- v-model="searchForm.exercisesMessageNumIsAchieve"
- clearable
- >
- <el-option label="符合预期" value="1"></el-option>
- <el-option label="不符合预期" value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item >
- <el-select
- placeholder="及时评价"
- v-model="searchForm.exercisesMessageTimelyNumIsAchieve"
- clearable
- >
- <el-option label="符合预期" value="1"></el-option>
- <el-option label="不符合预期" value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item>
- <el-date-picker
- style="width: 410px"
- v-model.trim="orderDate"
- type="daterange"
- value-format="yyyy-MM-dd"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- :clearable="false"
- @change="changeWeek"
- :picker-options="bigin()"
- >
- </el-date-picker>
- </el-form-item>
- <el-form-item>
- <el-button native-type="submit" type="primary">搜索</el-button>
- <el-button native-type="reset" type="danger">重置</el-button>
- <el-button @click="onExport" type="primary" v-permission="'export/teacherServeInfo'">导出</el-button>
- </el-form-item>
- </save-form>
- <div class="btnWraps" style="margin-bottom: 20px">
- <el-button
- type="primary"
- v-permission="'exercisesSituation/teacherServeRemindPush'"
- @click="remindTeachers"
- >批量提醒</el-button
- >
- </div>
- <div class="tableWrap">
- <el-table
- style="width: 100%"
- :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
- :data="tableList"
- @selection-change="handleSelectionChange"
- >
- <el-table-column
- type="selection"
- width="55"
- :selectable="checkSelectable"
- >
- </el-table-column>
- <el-table-column
- align="center"
- prop="organName"
- label="分部"
- ></el-table-column>
- <el-table-column
- align="center"
- prop="teacherId"
- label="老师编号"
- ></el-table-column>
- <el-table-column
- align="center"
- prop="teacherName"
- label="老师姓名"
- ></el-table-column>
- <el-table-column
- align="center"
- prop="teacherName"
- label="服务周期"
- width="180px"
- >
- <template slot-scope="scope">
- <div>
- {{scope.row.monday | dayjsFormat}}~{{scope.row.sunday | dayjsFormat}}
- </div>
- </template>
- </el-table-column>
- <el-table-column align="center" label="预期作业布置">
- <template slot-scope="scope">
- <div>{{ scope.row.expectExercisesNum + "次" }}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" width="120" prop>
- <template slot="header" slot-scope="scope">
- <p style="position: relative">
- 实际作业布置
- <el-tooltip placement="top" popper-class="mTooltip">
- <div slot="content">
- 以周为单位,每周服务指标指定的课程布置作业记一次实际作业布置
- </div>
- <!-- <img :src="imageIcon"
- class="micon el-tooltip"
- style="width:8px height:8px"
- alt /> -->
- <i
- class="el-icon-question"
- style="font-size: 18px; color: #f56c6c"
- ></i>
- </el-tooltip>
- </p>
- </template>
- <template slot-scope="scope">
- <div :style="
- scope.row.actualExercisesNum < scope.row.expectExercisesNum
- ? 'color:red'
- : ''
- ">{{ scope.row.actualExercisesNum + "次" }}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" prop label="提交次数">
- <template slot-scope="scope">
- <div>{{ scope.row.exercisesReplyNum + "次" }}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" prop label="评价次数">
- <template slot-scope="scope">
- <div :style="
- scope.row.exercisesMessageNum < scope.row.exercisesReplyNum
- ? 'color:red'
- : ''
- ">{{ scope.row.exercisesMessageNum + "次" }}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" prop label="及时评价次数">
- <template slot-scope="scope">
- <div>{{ scope.row.exercisesMessageTimelyNum + "次" }}</div>
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- prop="homeworkNum"
- label="课后作业(节)"
- ></el-table-column>
- <el-table-column
- align="center"
- prop="exerciseNum"
- label="课外作业(人)"
- ></el-table-column>
- <el-table-column align="center" prop="studentId" label="是否异常">
- <template slot-scope="scope">
- {{ scope.row.unDone ? "是" : "否" }}
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- prop="remindDate"
- label="提醒时间"
- >
- <template slot-scope="scope">
- <div>
- {{scope.row.remindDate | dateForMinFormat}}
- </div>
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- prop="operatorName"
- label="操作人"
- ></el-table-column>
- <el-table-column align="center" prop="studentId" label="操作" width="160px">
- <template slot-scope="scope">
- <div>
- <el-button type="text" @click="gotoDteail(scope.row)"
- >查看</el-button
- >
- <el-button
- type="text"
- v-if="scope.row.unDone"
- v-permission="'exercisesSituation/teacherServeRemindPush'"
- @click="remindTeacher(scope.row)"
- >提醒老师</el-button
- >
- </div>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- sync
- :total.sync="rules.total"
- :page.sync="rules.page"
- :limit.sync="rules.limit"
- :page-sizes="rules.page_size"
- @pagination="getList"
- />
- </div>
- <el-dialog
- title="查看"
- destroy-on-close
- :close-on-click-modal="false"
- :visible.sync="lookVisible"
- v-if="lookVisible"
- >
- <serverMask
- :detail="activeRow"
- @close="lookVisible = false"
- @submited="getList"
- />
- <span slot="footer" class="dialog-footer">
- <el-button type="primary" @click="lookVisible = false"
- >确 定</el-button
- >
- </span>
- </el-dialog>
- </div>
- </div>
- </template>
- <script>
- import axios from "axios";
- import { getToken } from "@/utils/auth";
- import pagination from "@/components/Pagination/index";
- import serverMask from "./conponent/serverMask";
- import load from "@/utils/loading";
- import { getTeacherServeInfo, teacherServeRemindPush } from "./api";
- import { getTimes } from "@/utils";
- import { getNowDateAndSunday, getNowDateAndMonday } from "@/utils/date";
- import { jobNature } from "@/utils/searchArray";
- import { Export } from '@/utils/downLoadFile'
- import qs from 'qs'
- export default {
- components: { pagination, serverMask },
- data() {
- return {
- searchForm: {
- organId: "",
- teacherId: "",
- operatorId: "",
- reminded: "",
- unDone: "",
- operatorId: "",
- jobNature:"",
- actualExercisesNumIsAchieve: null, // 训练次数
- exercisesMessageNumIsAchieve: null, //评价
- exercisesMessageTimelyNumIsAchieve: null, //及时评价
- exercisesReplyNumIsAchieve: null, // 提交次数
- serviceIsError:null
- },
- orderDate: [],
- tableList: [],
- organList: [],
- rules: {
- // 分页规则
- limit: 10, // 限制显示条数
- page: 1, // 当前页
- total: 0, // 总条数
- page_size: [10, 20, 40, 50], // 选择限制显示条数
- },
- lookVisible: false,
- activeRow: null,
- chioseList: [],
- jobNature: jobNature,
- };
- },
- //生命周期 - 创建完成(可以访问当前this实例)
- created() {},
- //生命周期 - 挂载完成(可以访问DOM元素)
- mounted() {
- // 获取分部
- this.init();
- },
- methods: {
- init() {
- this.$store.dispatch("setBranchs");
- this.$store.dispatch("setEmploys");
- this.getDefaultTime();
- if (this.$route.query.searchType) {
- this.searchForm.organId = this.$route.query.organId * 1 || "";
- this.searchForm.unDone = this.$route.query.unDone+'' || ""
- this.searchForm.reminded = this.$route.query.reminded+'' || ""
- const dayjs = this.$helpers.dayjs;
- let nowDate = dayjs(new Date()).subtract(7, 'day').format("YYYY-MM-DD");
- this.orderDate = [
- getNowDateAndMonday(nowDate),
- getNowDateAndSunday(nowDate),
- ];
- }
- this.getList();
- },
- async getList() {
- try {
- const {orderDate, ...rest} = this.searchForm;
- const result = await getTeacherServeInfo({
- ...rest,
- ...getTimes(this.orderDate, ["monday", "sunday"]),
- rows: this.rules.limit,
- page: this.rules.page,
- });
- this.rules.total = result.data.total;
- this.tableList = result.data.rows;
- } catch (e) {}
- },
- search() {
- this.rules.page = 1;
- this.getList();
- },
- onReSet() {
- this.$refs.form.resetFields();
- this.getDefaultTime();
- this.search();
- },
- gotoDteail(row) {
- this.activeRow = row;
- this.lookVisible = true;
- },
- reloadSearch() {
- this.getList();
- },
- getDefaultTime() {
- const dayjs = this.$helpers.dayjs;
- let nowDate = dayjs(new Date()).format("YYYY-MM-DD");
- let lastWeek = dayjs(nowDate).subtract(1, "week").format("YYYY-MM-DD");
- this.orderDate = [
- getNowDateAndMonday(lastWeek),
- getNowDateAndSunday(nowDate),
- ];
- this.searchForm.jobNature = 'FULL_TIME'
- },
- changeWeek(val) {
- if (val) {
- this.orderDate = [
- getNowDateAndMonday(val[0]),
- getNowDateAndSunday(val[1]),
- ]
- } else {
- this.getDefaultTime();
- }
- },
- remindTeacher(row) {
- this.$confirm("是否给老师发送提醒?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- }).then(async () => {
- try {
- const result = await teacherServeRemindPush([row]);
- this.getList();
- this.$message.success("提醒成功");
- } catch (e) {
- console.log(e);
- }
- });
- },
- remindTeachers() {
- if (this.chioseList.length <= 0) {
- this.$message.error("请至少选择一条信息");
- return;
- }
- this.$confirm("是否批量给老师发送提醒?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- }).then(async () => {
- try {
- const result = await teacherServeRemindPush(this.chioseList);
- this.getList();
- this.$message.success("提醒成功");
- } catch (e) {
- console.log(e);
- }
- });
- },
- checkSelectable(row) {
- return row.unDone;
- },
- handleSelectionChange(arr) {
- this.chioseList = arr;
- },
- bigin(){
- let self = this;
- return {
- firstDayOfWeek: 1,
- disabledDate(time) {
- return time.getTime() >= Date.now();
- },
- };
- },
- onExport() {
- const { orderDate, ...rest } = this.searchForm;
- Export(
- this,
- {
- url: "/api-web/export/teacherServeInfo",
- fileName: "服务指标明细.xls",
- method: "post",
- params: qs.stringify({
- ...rest,
- ...getTimes(this.orderDate, ["monday", "sunday"]),
- }),
- },
- "您确定导出服务指标明细?"
- );
- },
- },
- };
- </script>
- <style lang='scss' scoped>
- </style>
|