فهرست منبع

Merge branch 'master' of http://git.cc-lotus.info/new_train/train-center

lrf402788946 5 سال پیش
والد
کامیت
386c5d202a
6فایلهای تغییر یافته به همراه217 افزوده شده و 136 حذف شده
  1. 1 0
      src/router/index.js
  2. 2 0
      src/store/index.js
  3. 42 0
      src/store/teacher.js
  4. 61 32
      src/views/teacher/detail.vue
  5. 37 64
      src/views/teacher/index.vue
  6. 74 40
      src/views/teacher/verify.vue

+ 1 - 0
src/router/index.js

@@ -64,6 +64,7 @@ const routes = [
       {
         path: '/teacher/verify',
         name: 'teacher_index',
+        meta: { title: '教师', sub: '审核页' },
         component: () => import('@/views/teacher/verify.vue'),
       },
       {

+ 2 - 0
src/store/index.js

@@ -10,6 +10,7 @@ import task from './task';
 import subject from './subject';
 import question from './question';
 import questionnaire from './questionnaire';
+import teacher from './teacher';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
@@ -24,6 +25,7 @@ export default new Vuex.Store({
     subject,
     question,
     questionnaire,
+    teacher,
   },
   state: {},
   mutations: {},

+ 42 - 0
src/store/teacher.js

@@ -0,0 +1,42 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  interface: `/api/teacher`,
+  interfaceEdit: id => `/api/teacher/update/${id}`,
+  // interfaceSelect: id => `/api/teacher/show/${id}`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.interface}`, { skip, limit, ...info });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.interface}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.interface}/show/${payload}`);
+    return res;
+  },
+
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.interface}/update/${id}`, data);
+
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.interface}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 61 - 32
src/views/teacher/detail.vue

@@ -1,15 +1,11 @@
 <template>
   <div id="detail">
     <detail-frame :title="mainTitle" returns="./index">
-      <data-form :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew">
+      <data-form :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew" :data="info">
+        <template #custom="{ item, form, fieldChange }">
+          {{ status }}
+        </template>
         <template #options="{item}">
-          <template v-if="item.model === 'state'">
-            <el-option label="注册" value="0"></el-option>
-            <el-option label="确认身份" value="1"></el-option>
-            <el-option label="资料评分" value="2"></el-option>
-            <el-option label="面试评分" value="3"></el-option>
-            <el-option label="确认入库" value="4"></el-option>
-          </template>
           <template v-if="item.model === 'tltype'">
             <el-option label="ppt" value="0"></el-option>
             <el-option label="视频" value="1"></el-option>
@@ -17,18 +13,15 @@
           </template>
         </template>
         <template #radios="{item}">
-          <template v-if="item.model === 'sex'">
+          <template v-if="item.model === 'gender'">
             <el-radio label="0">男</el-radio>
             <el-radio label="1">女</el-radio>
           </template>
-          <template v-if="item.model === 'tea'">
+          <template v-if="item.model === 'is_etiquette_teacher'">
             <el-radio label="1">是</el-radio>
             <el-radio label="0">否</el-radio>
           </template>
         </template>
-        <template #custom="{ item, form, fieldChange }">
-          <upload type="wenjian" :data="item.wenjian" :limit="1" :url="'/files/corp/identity/upload'" @upload="uploadSuccess"></upload>
-        </template>
       </data-form>
     </detail-frame>
   </div>
@@ -38,6 +31,9 @@
 import detailFrame from '@frame/layout/admin/detail-frame';
 import dataForm from '@frame/components/form';
 import upload from '@frame/components/upload';
+import { createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('teacher');
+
 export default {
   metaInfo: { title: '题库详情页' },
   name: 'detail',
@@ -45,23 +41,23 @@ export default {
   components: {
     detailFrame,
     dataForm,
-    upload,
   },
   data: () => ({
+    info: { status: '1' },
     fields: [
       { label: '教师姓名', required: true, model: 'name' },
-      { label: '状态', required: true, model: 'state', type: `select`, options: { disabled: true } },
-      { label: '性别', model: 'sex', type: `radio` },
-      { label: '手机号', required: true, model: 'tel' },
-      { label: '身份证号', required: true, model: 'card' },
-      { label: '教师资格证号', required: true, model: 'teacard' },
-      { label: '学校名称', required: true, model: 'schoolname' },
+      { label: '状态', required: true, model: 'status', custom: true },
+      { label: '性别', model: 'gender', type: `radio` },
+      { label: '手机号', required: true, model: 'phone' },
+      { label: '身份证号', required: true, model: 'id_number' },
+      { label: '教师资格证号', required: true, model: 'profession_number' },
+      { label: '学校名称', required: true, model: 'school_name' },
       { label: '邮箱', required: true, model: 'email' },
       { label: '年龄', required: true, model: 'age' },
       { label: '出生日期', required: true, model: 'birthday' },
-      { label: '职务', required: true, model: 'zhiwu' },
-      { label: '专业', required: true, model: 'zhuanye' },
-      { label: '是/否是礼仪老师', model: 'tea', type: `radio` },
+      { label: '职务', required: true, model: 'job' },
+      { label: '专业', required: true, model: 'major' },
+      { label: '是/否是礼仪老师', model: 'is_etiquette_teacher', type: `radio` },
       // { label: '资料评分', required: true, model: 'zlgrade' },
       // { label: '面试评分', required: true, model: 'msgrade' },
       // { label: '学生评分', required: true, model: 'student' },
@@ -69,11 +65,10 @@ export default {
       // { label: '资料名称', required: true, model: 'zlname' },
       // { label: '资料类别', required: true, model: 'tltype', type: `select` },
       // { label: '密码', required: true, model: 'password' },
-      { label: '上传', required: true, model: 'wenjian', type: 'wenjian', custom: true },
     ],
     rules: {
       name: [{ required: true, message: '请输入教师姓名' }],
-      state: [{ required: true, message: '请选择状态' }],
+      // state: [{ required: true, message: '请选择状态' }],
       sex: [{ required: true, message: '请选择性别' }],
       birthday: [{ required: true, message: '请输入出生日期' }],
       zhiwu: [{ required: true, message: '请输入职务' }],
@@ -85,18 +80,18 @@ export default {
       // zlname: [{ required: true, message: '请输入资料名称' }],
       openid: [{ required: true, message: '请输入openid' }],
       password: [{ required: true, message: '请输入职业资格证文件' }],
-      card: [
+      id_number: [
         { required: true, message: '请输入身份证号' },
         { min: 18, max: 18, message: '请输入18位身份证号 ', trigger: 'blur' },
       ],
-      schoolname: [{ required: true, message: '请输入学校名称' }],
+      school_name: [{ required: true, message: '请输入学校名称' }],
       email: [{ required: true, message: '请输入教师邮箱' }],
       age: [{ required: true, message: '请输入年龄' }],
-      tel: [
+      phone: [
         { required: true, message: '请输入电话' },
         { min: 11, max: 11, message: '请输入11位电话号码', trigger: 'blur' },
       ],
-      teacard: [
+      profession_number_file: [
         { required: true, message: '请输入教师资格证号' },
         { min: 17, max: 17, message: '请输入17位教师资格证号', trigger: 'blur' },
       ],
@@ -104,6 +99,12 @@ export default {
   }),
   created() {},
   computed: {
+    status() {
+      return this.info.status == '0' ? '面试' : this.info.status == '1' ? '注册' : '其他';
+    },
+    id() {
+      return this.$route.query.id;
+    },
     isNew() {
       return this.$route.query.id ? false : true;
     },
@@ -119,12 +120,40 @@ export default {
       return main;
     },
   },
+
+  watch: {
+    isNew: {
+      immediate: true,
+      handler(val) {
+        if (val) this.loading = false;
+        else this.search();
+      },
+    },
+  },
   methods: {
-    uploadSuccess() {},
+    ...mapActions(['fetch', 'create', 'update']),
+    async search() {
+      const res = await this.fetch(this.id);
+      if (this.$checkRes(res)) this.$set(this, `info`, res.data);
+      this.loading = false;
+    },
     async handleSave({ isNew, data }) {
-      console.log(isNew);
-      console.log(data);
+      let res;
+      let msg;
+      if (isNew) {
+        res = this.create(data);
+        msg = `${this.keyWord}添加成功`;
+      } else {
+        res = this.update(data);
+        msg = `${this.keyWord}修改成功`;
+      }
+      if (this.$checkRes(res, msg)) this.$router.push({ path: '/teacher/index' });
     },
+
+    // async handleSave({ isNew, data }) {
+    //   console.log(isNew);
+    //   console.log(data);
+    // },
   },
 };
 </script>

+ 37 - 64
src/views/teacher/index.vue

@@ -2,14 +2,15 @@
   <div id="index">
     <list-frame title="教师列表页" @query="search" :total="total" :filter="filFields" :needAdd="false">
       <template #options="{item}">
-        <template v-if="item.model == 'sex'">
+        <template v-if="item.model == 'gender'">
           <el-option v-for="(item, index) in list" :key="index" :value="item.label"></el-option>
         </template>
-        <template v-if="item.model == 'state'">
+        <template v-if="item.model == 'status'">
           <el-option v-for="(item, index) in lists" :key="index" :value="item.label"></el-option>
         </template>
       </template>
-      <data-table :fields="fields" :data="index" :opera="opera" @edit="toEdit" @select="toSelect"></data-table>
+      <!-- <data-table :fields="fields" :data="index" :opera="opera" @edit="toEdit" @select="toSelect"></data-table> -->
+      <data-table :fields="fields" :data="index" :opera="opera" @edit="toEdit" @delete="toDelete" @select="toSelect"></data-table>
     </list-frame>
   </div>
 </template>
@@ -17,6 +18,8 @@
 <script>
 import listFrame from '@frame/layout/admin/list-frame';
 import dataTable from '@frame/components/data-table';
+import { createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('teacher');
 export default {
   name: 'index',
   props: {},
@@ -47,7 +50,7 @@ export default {
         icon: 'el-icon-s-order',
         method: 'select',
         display: item => {
-          return item.state === '2' || item.state === '3';
+          return item.status === '2' || item.status === '3';
         },
       },
     ],
@@ -55,111 +58,81 @@ export default {
       { label: '姓名', prop: 'name' },
       {
         label: '性别',
-        prop: 'sex',
+        prop: 'gender',
         format: item => {
           return item === '0' ? '男' : item === '1' ? '女' : '其他';
         },
       },
-      { label: '手机号', prop: 'tel' },
+      { label: '手机号', prop: 'phone' },
 
-      { label: '学校名称', prop: 'schoolname' },
+      { label: '学校名称', prop: 'school_name' },
       { label: '邮箱', prop: 'email' },
       { label: '年龄', prop: 'age' },
 
-      { label: '专业', prop: 'specialty' },
+      { label: '专业', prop: 'major' },
       {
         label: '是/否是礼仪老师',
-        prop: 'tea',
+        prop: 'is_etiquette_teacher',
         format: item => {
           return item === '0' ? '否' : item === '1' ? '是' : '其他';
         },
       },
-      { label: '资料评分', prop: 'zlgrade' },
-      { label: '面试评分', prop: 'msgrade' },
+      { label: '资料评分', prop: 'file_score' },
+      { label: '面试评分', prop: 'interview_score' },
 
       {
         label: '状态',
-        prop: 'state',
+        prop: 'status',
         format: item => {
           return item === '0' ? '注册' : item === '1' ? '确定身份' : item === '2' ? '资料评分' : item === '3' ? '面试评分' : item === '4' ? '确认入库' : '其他';
         },
       },
     ],
-    index: [
-      {
-        id: 1,
-        name: '教师1号',
-        sex: '1',
-        tel: '12345678901',
-        schoolname: '吉林大学',
-        email: '1014892386@qq.com',
-        age: '18',
-        specialty: '拓展',
-        tea: '0',
-        zlgrade: '99',
-        msgrade: '100',
-        state: '4',
-      },
-      {
-        id: 2,
-        name: '教师2号',
-        sex: '0',
-        tel: '12345678901',
-        schoolname: '吉林大学',
-        email: '345677@qq.com',
-        age: '18',
-        specialty: '拓展',
-        tea: '1',
-        zlgrade: '11',
-        msgrade: '100',
-        state: '2',
-      },
-      {
-        id: 3,
-        name: '教师3号',
-        sex: '1',
-        tel: '12345678901',
-        schoolname: '吉林大学',
-        email: '345677@qq.com',
-        age: '18',
-        specialty: '拓展',
-        tea: '1',
-        zlgrade: '11',
-        msgrade: '100',
-        state: '3',
-      },
-    ],
+    index: [],
     filFields: [
       { label: '教师名称', model: 'name' },
       { label: '年龄', model: 'age' },
       {
         label: '状态',
-        model: 'state',
+        model: 'status',
         type: 'select',
       },
       {
         label: '性别',
-        model: 'sex',
+        model: 'gender',
         type: 'select',
       },
     ],
     total: 0,
   }),
-  created() {},
+  created() {
+    this.search();
+  },
   computed: {},
   methods: {
-    search({ skip = 0, limit = 10, ...info } = {}) {
-      console.log(`in search`);
+    ...mapActions(['query', 'delete']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `index`, res.data);
+        this.$set(this, `total`, res.total);
+      }
     },
     toEdit({ data }) {
       console.log(`in toEdit`);
       console.log(data);
       this.$router.push({ path: '/teacher/detail', query: { id: data.id } });
     },
-    toSelect(data) {
-      console.log(`in toEdit`);
+
+    toSelect({ data }) {
+      console.log(`in Select`);
       console.log(data);
-      this.$router.push({ path: '/teacher/verify', query: { state: data.state } });
+      this.$router.push({ path: '/teacher/verify', query: { id: data.id, status: data.status } });
+    },
+    async toDelete(data) {
+      const res = await this.delete(data.id);
+      this.$checkRes(res, '删除成功', '删除失败');
+      this.search();
     },
   },
 };

+ 74 - 40
src/views/teacher/verify.vue

@@ -1,26 +1,17 @@
 <template>
-  <div id="verify">
+  <div id="detail">
     <detail-frame :title="mainTitle" returns="./index">
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px" class="form" size="small" @submit.native.prevent>
-        <el-form-item label="活动区域">
-          <el-select v-model="form.state" placeholder="请选择状态">
-            <el-option label="注册" value="0"></el-option>
-            <el-option label="确认身份" value="1"></el-option>
-            <el-option label="资料评分" value="2"></el-option>
-            <el-option label="面试评分" value="3"></el-option>
-            <el-option label="确认入库" value="4"></el-option>
-          </el-select>
-        </el-form-item>
+      <!-- <data-form :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew" :data="info">
+        <template #custom="{ item, form, fieldChange }">
+          {{ status }}
 
-        <el-form-item :label="this.$route.query.state == 2 ? '资料评分' : '面试评分'" prop="title" required :isNew="isNew">
-          <el-input v-model="form.title"></el-input>
-        </el-form-item>
+          <el-col :span="24"></el-col>
+        </template>
+      </data-form> -->
+      <el-form label-width="80px">
+        <el-col :span="24" class="state"> 状态{{ status }}</el-col>
         <el-form-item>
-          <el-row type="flex" align="middle" justify="space-around">
-            <el-col :span="6">
-              <el-button type="primary" @click="toSave">保存</el-button>
-            </el-col>
-          </el-row>
+          <el-col class="anniu"><el-button type="mini" @click="handleSave">审核通过</el-button></el-col>
         </el-form-item>
       </el-form>
     </detail-frame>
@@ -31,33 +22,42 @@
 import detailFrame from '@frame/layout/admin/detail-frame';
 import dataForm from '@frame/components/form';
 import upload from '@frame/components/upload';
+import { createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('teacher');
+
 export default {
-  metaInfo: { title: '审核详情页' },
-  name: 'verify',
+  metaInfo: { title: '题库详情页' },
+  name: 'detail',
+  form: {
+    name: '',
+    region: '',
+    date1: '',
+    date2: '',
+    delivery: false,
+    type: [],
+    resource: '',
+    desc: '',
+  },
   props: {},
   components: {
     detailFrame,
+    // dataForm,
   },
   data: () => ({
-    state: '',
-    title: '',
-    form: {
-      state: '',
-    },
-
-    rules: {
-      state: [{ required: true, message: '请选择状态' }],
-    },
+    info: {},
+    fields: [{ label: '状态', required: true, model: 'status', custom: true }],
+    rules: {},
   }),
   created() {},
   computed: {
+    status() {
+      return this.info.status == '2' ? '资料评分' : this.info.status == '3' ? '面试评分' : '其他';
+    },
+    id() {
+      return this.$route.query.id;
+    },
     isNew() {
-      console.log(this.$route.query.state);
-      if (this.$route.query.state == 2) {
-        return '资料评分';
-      } else {
-        return '面试评分';
-      }
+      return this.$route.query.id ? false : true;
     },
     mainTitle() {
       let meta = this.$route.meta;
@@ -71,14 +71,48 @@ export default {
       return main;
     },
   },
+
+  watch: {
+    isNew: {
+      immediate: true,
+      handler(val) {
+        if (val) this.loading = false;
+        else this.search();
+      },
+    },
+  },
   methods: {
-    uploadSuccess() {},
+    ...mapActions(['fetch', 'create', 'update']),
+    async search() {
+      const res = await this.fetch(this.id);
+      if (this.$checkRes(res)) this.$set(this, `info`, res.data);
+      this.loading = false;
+    },
     async handleSave({ isNew, data }) {
-      console.log(isNew);
-      console.log(data);
+      let res = +this.info.status + 1;
+
+      let msg;
+      if (isNew) {
+        res = await this.create(data);
+        msg = `${this.keyWord}添加成功`;
+      } else {
+        console.log({ status: res, id: this.$route.query.id });
+        res = await this.update({ status: res, id: this.$route.query.id });
+        console.log(res);
+        msg = `${this.keyWord}审核成功`;
+      }
+      if (this.$checkRes(res, msg)) this.$router.push({ path: '/teacher/index' });
     },
   },
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.state {
+  padding: 0px 0 20px 410px;
+}
+
+.anniu {
+  padding: 0 0 0 324px;
+}
+</style>