|  | @@ -0,0 +1,360 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div>
 | 
	
		
			
				|  |  | +    <!-- class="m-container" -->
 | 
	
		
			
				|  |  | +    <div class="m-core">
 | 
	
		
			
				|  |  | +      <save-form
 | 
	
		
			
				|  |  | +        :inline="true"
 | 
	
		
			
				|  |  | +        @submit="search"
 | 
	
		
			
				|  |  | +        @reset="onReSet"
 | 
	
		
			
				|  |  | +        :model="searchForm"
 | 
	
		
			
				|  |  | +        save-key="returnVisitManager-waitVisit"
 | 
	
		
			
				|  |  | +        ref="searchForm"
 | 
	
		
			
				|  |  | +      >
 | 
	
		
			
				|  |  | +        <!-- search(); -->
 | 
	
		
			
				|  |  | +        <el-form-item>
 | 
	
		
			
				|  |  | +          <el-input
 | 
	
		
			
				|  |  | +            placeholder="学员姓名/编号/手机号"
 | 
	
		
			
				|  |  | +            v-model.trim="searchForm.search"
 | 
	
		
			
				|  |  | +            @keyup.enter.native="
 | 
	
		
			
				|  |  | +              (e) => {
 | 
	
		
			
				|  |  | +                e.target.blur();
 | 
	
		
			
				|  |  | +                $refs.searchForm.save();
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            "
 | 
	
		
			
				|  |  | +          ></el-input>
 | 
	
		
			
				|  |  | +        </el-form-item>
 | 
	
		
			
				|  |  | +        <el-form-item>
 | 
	
		
			
				|  |  | +          <el-select
 | 
	
		
			
				|  |  | +            v-model.trim="searchForm.organId"
 | 
	
		
			
				|  |  | +            placeholder="请选择分部"
 | 
	
		
			
				|  |  | +            clearable
 | 
	
		
			
				|  |  | +            filterable
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  | +            <el-option
 | 
	
		
			
				|  |  | +              v-for="(item, index) in selects.branchs"
 | 
	
		
			
				|  |  | +              :key="index"
 | 
	
		
			
				|  |  | +              :value="item.id"
 | 
	
		
			
				|  |  | +              :label="item.name"
 | 
	
		
			
				|  |  | +            ></el-option>
 | 
	
		
			
				|  |  | +          </el-select>
 | 
	
		
			
				|  |  | +        </el-form-item>
 | 
	
		
			
				|  |  | +        <el-form-item>
 | 
	
		
			
				|  |  | +          <el-select
 | 
	
		
			
				|  |  | +            v-model.trim="searchForm.visiterType"
 | 
	
		
			
				|  |  | +            placeholder="回访状态"
 | 
	
		
			
				|  |  | +            clearable
 | 
	
		
			
				|  |  | +            filterable
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  | +          <el-option value="EDU_TEACHER" label="已回访"></el-option>
 | 
	
		
			
				|  |  | +            <el-option value="TEACHER" label="未回访"></el-option>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          </el-select>
 | 
	
		
			
				|  |  | +        </el-form-item>
 | 
	
		
			
				|  |  | +        <!-- @change="handleChange" -->
 | 
	
		
			
				|  |  | +        <!-- <el-form-item>
 | 
	
		
			
				|  |  | +          <el-cascader
 | 
	
		
			
				|  |  | +            expand-trigger="hover"
 | 
	
		
			
				|  |  | +            clearable
 | 
	
		
			
				|  |  | +            placeholder="请选择回访类型"
 | 
	
		
			
				|  |  | +            :options="visitChiose"
 | 
	
		
			
				|  |  | +            v-model="searchForm.typeList"
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  | +          </el-cascader>
 | 
	
		
			
				|  |  | +        </el-form-item> -->
 | 
	
		
			
				|  |  | +        <el-form-item>
 | 
	
		
			
				|  |  | +          <el-date-picker
 | 
	
		
			
				|  |  | +            v-model.trim="searchForm.timer"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            type="month"
 | 
	
		
			
				|  |  | +            placeholder="回访周期"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  | +          </el-date-picker>
 | 
	
		
			
				|  |  | +        </el-form-item>
 | 
	
		
			
				|  |  | +        <el-form-item>
 | 
	
		
			
				|  |  | +          <el-button type="danger" native-type="submit">搜索</el-button>
 | 
	
		
			
				|  |  | +          <el-button native-type="reset" type="primary">重置</el-button>
 | 
	
		
			
				|  |  | +        </el-form-item>
 | 
	
		
			
				|  |  | +      </save-form>
 | 
	
		
			
				|  |  | +      <div class="tableWrap">
 | 
	
		
			
				|  |  | +        <el-table
 | 
	
		
			
				|  |  | +          :data="tableList"
 | 
	
		
			
				|  |  | +          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +          <el-table-column align="center" prop="teacherName" label="学员信息">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <div @click="gotoStudent(scope.row.studentId)">
 | 
	
		
			
				|  |  | +                <p>
 | 
	
		
			
				|  |  | +                  <el-button type="text">{{ scope.row.studentName }}<br>  ({{ scope.row.studentId }})</el-button>
 | 
	
		
			
				|  |  | +                </p>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +          <el-table-column align="center" prop="phone" label="手机号">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <copy-text>{{ scope.row.phone }}</copy-text>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +          <el-table-column align="center" prop="organName" label="分部">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <copy-text>{{ scope.row.organName }}</copy-text>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <el-table-column align="center" prop="type" label="回访周期">
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +          <el-table-column align="center" prop="isVisit" label="回访状态">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <copy-text>{{ scope.row.isVisit?'已回访':'未回访' }}</copy-text>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <el-table-column align="center" prop="visitTime" label="回访时间">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <div>
 | 
	
		
			
				|  |  | +                {{
 | 
	
		
			
				|  |  | +                  scope.row.visitTime ? scope.row.visitTime.split(" ")[0] : "--"
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +          <el-table-column align="center" prop="masterTeacherName" label="操作">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <div>
 | 
	
		
			
				|  |  | +                <el-button type="text" @click="addVisit(scope.row)"
 | 
	
		
			
				|  |  | +                  >新增回访</el-button
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +        </el-table>
 | 
	
		
			
				|  |  | +        <pagination
 | 
	
		
			
				|  |  | +          save-key="returnVisitManager-waitVisit"
 | 
	
		
			
				|  |  | +          sync
 | 
	
		
			
				|  |  | +          :total.sync="rules.total"
 | 
	
		
			
				|  |  | +          :page.sync="rules.page"
 | 
	
		
			
				|  |  | +          :limit.sync="rules.limit"
 | 
	
		
			
				|  |  | +          :page-sizes="rules.page_size"
 | 
	
		
			
				|  |  | +          @pagination="getList"
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <el-dialog
 | 
	
		
			
				|  |  | +      title="新增回访"
 | 
	
		
			
				|  |  | +      width="760px"
 | 
	
		
			
				|  |  | +      :visible.sync="visitVisible"
 | 
	
		
			
				|  |  | +      append-to-body
 | 
	
		
			
				|  |  | +    >
 | 
	
		
			
				|  |  | +      <visit
 | 
	
		
			
				|  |  | +        v-if="visitVisible && activeRow"
 | 
	
		
			
				|  |  | +        :detail="activeRow"
 | 
	
		
			
				|  |  | +        :username="activeRow.username"
 | 
	
		
			
				|  |  | +        @close="visitVisible = false"
 | 
	
		
			
				|  |  | +        @submited="getList"
 | 
	
		
			
				|  |  | +        :isMainGo="true"
 | 
	
		
			
				|  |  | +      />
 | 
	
		
			
				|  |  | +    </el-dialog>
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import { visitChiose1 } from "@/utils/searchArray";
 | 
	
		
			
				|  |  | +import pagination from "@/components/Pagination/index";
 | 
	
		
			
				|  |  | +import { getEmployeeOrgan } from "@/api/buildTeam";
 | 
	
		
			
				|  |  | +import { getVisitList } from "../api.js";
 | 
	
		
			
				|  |  | +import cleanDeep from "clean-deep";
 | 
	
		
			
				|  |  | +import { getTimes } from "@/utils";
 | 
	
		
			
				|  |  | +import { resetQuery } from "@/utils/utils";
 | 
	
		
			
				|  |  | +import visit from "@/views/withdrawal-application/modals/visit";
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  components: { pagination, visit },
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      searchForm: {
 | 
	
		
			
				|  |  | +        search: "",
 | 
	
		
			
				|  |  | +        organId: "",
 | 
	
		
			
				|  |  | +        visiterType: "",
 | 
	
		
			
				|  |  | +        typeList: [],
 | 
	
		
			
				|  |  | +        timer: [],
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      visitChiose: visitChiose1,
 | 
	
		
			
				|  |  | +      organList: [],
 | 
	
		
			
				|  |  | +      rules: {
 | 
	
		
			
				|  |  | +        // 分页规则
 | 
	
		
			
				|  |  | +        limit: 10, // 限制显示条数
 | 
	
		
			
				|  |  | +        page: 1, // 当前页
 | 
	
		
			
				|  |  | +        total: 0, // 总条数
 | 
	
		
			
				|  |  | +        page_size: [10, 20, 40, 50], // 选择限制显示条数
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      tableList: [],
 | 
	
		
			
				|  |  | +      imageList: [],
 | 
	
		
			
				|  |  | +      detailVisible: false,
 | 
	
		
			
				|  |  | +      activeRow: null,
 | 
	
		
			
				|  |  | +      visitVisible: false,
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  mounted() {
 | 
	
		
			
				|  |  | +    // getEmployeeOrgan().then((res) => {
 | 
	
		
			
				|  |  | +    //   if (res.code == 200) {
 | 
	
		
			
				|  |  | +    //     this.organList = res.data;
 | 
	
		
			
				|  |  | +    //   }
 | 
	
		
			
				|  |  | +    // });
 | 
	
		
			
				|  |  | +    this.$store.dispatch("setBranchs");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (this.$route.query) {
 | 
	
		
			
				|  |  | +      // 兼容老功能
 | 
	
		
			
				|  |  | +      if (this.$route.query.search) {
 | 
	
		
			
				|  |  | +        this.searchForm.search = this.$route.query.teacher;
 | 
	
		
			
				|  |  | +        this.searchForm.search = this.$route.query.search;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      this.searchForm.timer = this.$route.query.timer;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (this.$route.query.typeList && this.$route.query.typeList.length > 0) {
 | 
	
		
			
				|  |  | +      this.searchForm.typeList = this.$route.query.typeList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    this.getList();
 | 
	
		
			
				|  |  | +    if (this.$route.query.search || this.$route.query.timer) {
 | 
	
		
			
				|  |  | +      // console.log( )
 | 
	
		
			
				|  |  | +      console.log("进来了");
 | 
	
		
			
				|  |  | +      resetQuery(this, { timer: undefined, search: undefined });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  // activated() {
 | 
	
		
			
				|  |  | +  //   this.getList();
 | 
	
		
			
				|  |  | +  // },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    handleChange(val) {
 | 
	
		
			
				|  |  | +      this.searchForm.type = val[0];
 | 
	
		
			
				|  |  | +      this.searchForm.purpose = val[1];
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    search() {
 | 
	
		
			
				|  |  | +      // this.$router.replace({query:{...this.$route.query,timer:undefined,teacher:undefined}})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      this.rules.page = 1;
 | 
	
		
			
				|  |  | +      this.getList();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    onReSet() {
 | 
	
		
			
				|  |  | +      this.type = [];
 | 
	
		
			
				|  |  | +      this.timer = [];
 | 
	
		
			
				|  |  | +      this.searchForm = {
 | 
	
		
			
				|  |  | +        search: "",
 | 
	
		
			
				|  |  | +        organId: "",
 | 
	
		
			
				|  |  | +        visiterType: "",
 | 
	
		
			
				|  |  | +        type: "",
 | 
	
		
			
				|  |  | +        purpose: "",
 | 
	
		
			
				|  |  | +        typeList: [],
 | 
	
		
			
				|  |  | +        timer: [],
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.search();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    getList() {
 | 
	
		
			
				|  |  | +      // cleanDeep
 | 
	
		
			
				|  |  | +      let { timer, typeList, ...rest } = this.searchForm;
 | 
	
		
			
				|  |  | +      let type,
 | 
	
		
			
				|  |  | +        purpose = null;
 | 
	
		
			
				|  |  | +      if (typeList.length > 0) {
 | 
	
		
			
				|  |  | +        type = typeList[0];
 | 
	
		
			
				|  |  | +        purpose = typeList[1];
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      let params = {
 | 
	
		
			
				|  |  | +        ...rest,
 | 
	
		
			
				|  |  | +        page: this.rules.page,
 | 
	
		
			
				|  |  | +        rows: this.rules.limit,
 | 
	
		
			
				|  |  | +        ...getTimes(timer, ["startTime", "endTime"]),
 | 
	
		
			
				|  |  | +        type,
 | 
	
		
			
				|  |  | +        purpose,
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      getVisitList(cleanDeep(params)).then((res) => {
 | 
	
		
			
				|  |  | +        if (res.code == 200) {
 | 
	
		
			
				|  |  | +          this.tableList = res.data.rows;
 | 
	
		
			
				|  |  | +          this.rules.total = res.data.total;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    addVisit(row) {
 | 
	
		
			
				|  |  | +      this.activeRow = row;
 | 
	
		
			
				|  |  | +      // this.imageList = this.activeRow.attachments.split(",");
 | 
	
		
			
				|  |  | +      this.visitVisible = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    changeTimer(val) {
 | 
	
		
			
				|  |  | +      if (val && val.length > 0) {
 | 
	
		
			
				|  |  | +        this.searchForm.startTime = this.timer[0];
 | 
	
		
			
				|  |  | +        this.searchForm.endTime = this.timer[1];
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        this.searchForm.startTime = null;
 | 
	
		
			
				|  |  | +        this.searchForm.endTime = null;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    gotoStudent(search) {
 | 
	
		
			
				|  |  | +      this.$router.push({
 | 
	
		
			
				|  |  | +        name: "studentList",
 | 
	
		
			
				|  |  | +        params: { search: search },
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  watch: {
 | 
	
		
			
				|  |  | +    detailVisible(val) {
 | 
	
		
			
				|  |  | +      if (!val) {
 | 
	
		
			
				|  |  | +        this.activeRow = null;
 | 
	
		
			
				|  |  | +        this.imageList = [];
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +<style lang="scss" scoped>
 | 
	
		
			
				|  |  | +.msg {
 | 
	
		
			
				|  |  | +  min-width: 120px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.label {
 | 
	
		
			
				|  |  | +  width: 520px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +::v-deep .description-title {
 | 
	
		
			
				|  |  | +  margin-bottom: 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.returnDialog {
 | 
	
		
			
				|  |  | +  ::v-deep .description-view {
 | 
	
		
			
				|  |  | +    .description-content {
 | 
	
		
			
				|  |  | +      white-space: normal !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.flexBox {
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  flex-direction: row;
 | 
	
		
			
				|  |  | +  align-items: center;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.img-container {
 | 
	
		
			
				|  |  | +  margin: 10px auto;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.item {
 | 
	
		
			
				|  |  | +  width: 150px;
 | 
	
		
			
				|  |  | +  margin-top: 10px;
 | 
	
		
			
				|  |  | +  margin-right: 10px;
 | 
	
		
			
				|  |  | +  display: inline-block;
 | 
	
		
			
				|  |  | +  position: relative;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.img {
 | 
	
		
			
				|  |  | +  width: 150px;
 | 
	
		
			
				|  |  | +  height: 150px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.ctrl-bar {
 | 
	
		
			
				|  |  | +  background-color: rgba(0, 0, 0, 0.45);
 | 
	
		
			
				|  |  | +  height: 30px;
 | 
	
		
			
				|  |  | +  position: absolute;
 | 
	
		
			
				|  |  | +  top: 0;
 | 
	
		
			
				|  |  | +  width: 100%;
 | 
	
		
			
				|  |  | +  z-index: 1;
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  justify-content: flex-end;
 | 
	
		
			
				|  |  | +  align-items: center;
 | 
	
		
			
				|  |  | +  padding: 0 15px;
 | 
	
		
			
				|  |  | +  i {
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +    cursor: pointer;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 |