瀏覽代碼

学校确认教师

lrf402788946 5 年之前
父節點
當前提交
c1bd63913d
共有 3 個文件被更改,包括 118 次插入31 次删除
  1. 11 1
      src/store/index.js
  2. 44 23
      src/views/teacher/detail.vue
  3. 63 7
      src/views/teacher/index.vue

+ 11 - 1
src/store/index.js

@@ -4,6 +4,7 @@ import student from '@frame/store/student';
 import teacher from '@frame/store/teacher';
 import trainplan from '@frame/store/trainplan';
 import classes from '@frame/store/classes';
+import subject from '@frame/store/subject';
 import schPlan from '@frame/store/sch-plan';
 import schimport from '@frame/store/sch-import';
 import login from '@frame/store/login';
@@ -12,7 +13,16 @@ import * as umutations from '@frame/store/user/mutations';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
-  modules: { student, teacher, trainplan, schPlan, schimport, classes, login },
+  modules: {
+    student,
+    teacher,
+    trainplan,
+    schPlan,
+    schimport,
+    classes,
+    subject,
+    login,
+  },
   state: { ...ustate },
   mutations: { ...umutations },
   actions: {},

+ 44 - 23
src/views/teacher/detail.vue

@@ -1,23 +1,26 @@
 <template>
   <div id="detail">
-    <detail-frame :title="mainTitle" returns="/teacher/list">
+    <detail-frame :title="mainTitle" returns="/teacher/index">
       <data-form :data="info" :fields="fields" :needSave="false" :isNew="false">
         <template #custom="{ item, form }">
-          <template v-if="item.model === 'gender'">{{ form[item.model] }}</template>
           <template v-if="item.model === 'is_etiquette_teacher'">{{ form[item.model] === '0' ? '否' : '是' }}</template>
-          <template v-if="item.model === 'reason'">
+          <template v-if="item.model === 'remark'">
             <el-form-item>
-              <el-input v-model="reason" placeholder="审核原因(非必填)"></el-input>
+              <el-input v-model="remark" placeholder="审核原因(非必填)"></el-input>
             </el-form-item>
           </template>
+          <template v-if="item.model === 'zynumberfile'">
+            <pic v-if="form[item.model]" :src="form[item.model]" />
+            <!-- <el-image :src="form[item.model]" style="width:150px;height:150px;" fit="scale-down"></el-image> -->
+          </template>
         </template>
-        <template #submit>
+        <template #submit v-if="info.status === '0'">
           <el-row type="flex" justify="middle" align="center">
             <el-col :span="7">
-              <el-button type="primary" size="mini" @click="setCheck('0')">确认教师</el-button>
+              <el-button type="primary" size="mini" @click="setCheck('1')">确认教师</el-button>
             </el-col>
             <el-col :span="7">
-              <el-button type="danger" size="mini" @click="setCheck('1')">退回教师</el-button>
+              <!-- <el-button type="danger" size="mini" @click="setCheck('1')">退回教师</el-button> -->
             </el-col>
           </el-row>
         </template>
@@ -29,32 +32,35 @@
 <script>
 import detailFrame from '@frame/layout/admin/detail-frame';
 import dataForm from '@frame/components/form';
-import { createNamespacedHelpers } from 'vuex';
-const { mapActions } = createNamespacedHelpers('teacher');
+import pic from '@frame/components/pic';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: teacher } = createNamespacedHelpers('teacher');
+const { mapActions: subject } = createNamespacedHelpers('subject');
 export default {
   metaInfo: { title: '教师信息' },
   name: 'detail',
   props: {},
-  components: { detailFrame, dataForm },
+  components: { detailFrame, dataForm, pic },
   data: () => ({
     info: {},
-    reason: '', //审核原因
+    remark: '', //审核原因
     fields: [
       { label: '教师姓名', model: 'name', type: 'text' },
-      { label: '性别', model: 'gender', custom: true },
+      { label: '性别', model: 'gender', type: 'text' },
       { label: '手机号', model: 'phone', type: 'text' },
-      { label: '身份证号', model: 'id_number', type: 'text' },
-      { label: '教师资格证号', model: 'profession_number', type: 'text' },
-      { label: '学校名称', model: 'school_name', type: 'text' },
+      { label: '身份证号', model: 'idnumber', type: 'text' },
+      { label: '教师资格证号', model: 'zynumber', type: 'text' },
+      { label: '教师资格证', model: 'zynumberfile', custom: true },
+      { label: '学校', model: 'schname', type: 'text' },
+      { label: '科目', model: 'subname', type: 'text' },
       { label: '邮箱', model: 'email', type: 'text' },
       { label: '年龄', model: 'age', type: 'text' },
       { label: '出生日期', model: 'birthday', type: 'text' },
       { label: '职务', model: 'job', type: 'text' },
       { label: '专业', model: 'major', type: 'text' },
       { label: '是/否是礼仪老师', model: 'is_etiquette_teacher', custom: true },
-      { label: '审核原因', model: 'reason', custom: true },
     ],
-    loading: true,
+    subjectList: [],
   }),
   created() {},
   computed: {
@@ -77,16 +83,31 @@ export default {
     id: {
       immediate: true,
       handler(val) {
-        if (val) this.loading = false;
-        else this.search();
+        if (val) this.search();
       },
     },
   },
   methods: {
-    ...mapActions(['fetch']),
-    async search() {},
-    setCheck(status) {
-      //this.reason 是审核原因,需要带上
+    ...teacher(['fetch', 'status']),
+    ...subject({ getSubjectList: 'query' }),
+    async search() {
+      let subject = await this.getSubjectList();
+      if (this.$checkRes(subject)) this.$set(this, `subjectList`, subject.data);
+      let res = await this.fetch(this.id);
+      if (res.data.status === '0') {
+        this.fields.push({ label: '审核原因', model: 'remark', custom: true });
+      }
+      let sub = this.subjectList.find(f => res.data.subid === f._id);
+      if (sub) res.data.subname = sub.name;
+      if (this.$checkRes(res)) this.$set(this, `info`, res.data);
+    },
+    async setCheck(status) {
+      //this.remark 是审核原因,需要带上
+      let teachersid = [];
+      teachersid.push(this.id);
+      let object = { teachersid, status: '1', remark: this.remark };
+      let res = await this.status(object);
+      if (this.$checkRes(res, `确认成功`, res.errmsg)) this.$router.push('/teacher/index');
     },
   },
 };

+ 63 - 7
src/views/teacher/index.vue

@@ -1,7 +1,24 @@
 <template>
   <div id="index">
     <list-frame :title="mainTitle" @query="search" :total="total" :needFilter="false" :needAdd="false">
-      <data-table :fields="fields" :data="list" :opera="opera" @check="toCheck"></data-table>
+      <el-row type="flex" justify="end" style="padding:10px;">
+        <el-col :span="4">
+          <el-popover title="确认教师" placement="bottom" v-model="disForm" @show="toShow">
+            <!-- <template #reference> -->
+            <el-button slot="reference" type="primary" size="mini">确认已选择教师{{ teachersid.length > 0 ? `(${teachersid.length}人)` : '' }}</el-button>
+            <!-- </template> -->
+            <el-form>
+              <el-form-item label="备注" label-width="50px">
+                <el-input v-model="remark" placeholder="非必填" size="mini"></el-input>
+              </el-form-item>
+              <el-form-item label-width="100px">
+                <el-button type="primary" plan size="mini" @click="toSubmit">确认</el-button>
+              </el-form-item>
+            </el-form>
+          </el-popover>
+        </el-col>
+      </el-row>
+      <data-table :select="true" :selected="teachersid" :fields="fields" :data="list" :opera="opera" @check="toCheck" @handleSelect="toSelect"></data-table>
     </list-frame>
   </div>
 </template>
@@ -9,8 +26,9 @@
 <script>
 import listFrame from '@frame/layout/admin/list-frame';
 import dataTable from '@frame/components/data-table';
-import { createNamespacedHelpers } from 'vuex';
-const { mapActions } = createNamespacedHelpers('dept');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: teacher } = createNamespacedHelpers('teacher');
+const { mapActions: subject } = createNamespacedHelpers('subject');
 export default {
   metaInfo: { title: '教师管理' },
   name: 'index',
@@ -30,11 +48,20 @@ export default {
       { label: '年龄', prop: 'age' },
       { label: '科目', prop: 'subject' },
     ],
-    list: [{ name: '测试教师1', gender: '0', age: '32', subject: '拓展训练' }],
+    list: [],
+    subjectList: [],
+    teachersid: [],
+    disForm: false,
+    remark: '',
+    total: 0,
   }),
 
-  created() {},
+  async created() {
+    await this.otherList();
+    this.search();
+  },
   computed: {
+    ...mapState(['user']),
     mainTitle() {
       let meta = this.$route.meta;
       let main = meta.title || '';
@@ -48,17 +75,46 @@ export default {
     },
   },
   methods: {
-    ...mapActions(['query']),
+    ...teacher(['query', 'status']),
+    ...subject({ getSubjectList: 'query' }),
     async search({ skip = 0, limit = 10, ...info } = {}) {
-      const res = await this.query({ skip, limit, ...info });
+      const res = await this.query({ skip, limit, ...info, schid: this.user.code, status: '0' });
       if (this.$checkRes(res)) {
+        res.data.map(i => {
+          let subject = this.subjectList.find(f => f._id === i.subid || f.code === i.subid);
+          if (subject) i.subject = subject.name;
+          return i;
+        });
         this.$set(this, `list`, res.data);
         this.$set(this, `total`, res.total);
       }
     },
+    async otherList() {
+      const res = await this.getSubjectList();
+      if (this.$checkRes(res)) this.$set(this, `subjectList`, res.data);
+    },
     toCheck({ data }) {
       this.$router.push({ path: '/teacher/detail', query: { id: data.id } });
     },
+    toSelect(select) {
+      this.$set(this, `teachersid`, select);
+    },
+    toShow() {
+      if (!this.teachersid.length > 0) {
+        this.$message.warning('您没有选择任何教师');
+        this.disForm = false;
+      }
+    },
+    async toSubmit() {
+      let object = { remark: this.remark, teachersid: this.teachersid, status: '1' };
+      let res = await this.status(object);
+      if (this.$checkRes(res, `确认成功`, res.errmsg)) {
+        this.search();
+        this.disForm = false;
+        this.remark = '';
+        this.teachersid = [];
+      }
+    },
   },
 };
 </script>