lrf402788946 5 年之前
父节点
当前提交
db5ccfa87a

+ 2 - 0
src/store/index.js

@@ -5,6 +5,7 @@ import dept from './dept';
 import location from './location';
 import bedroom from './bedroom';
 import director from './director';
+import student from './student';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
@@ -14,6 +15,7 @@ export default new Vuex.Store({
     location,
     bedroom,
     director,
+    student,
   },
   state: {},
   mutations: {},

+ 38 - 0
src/store/student.js

@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  interface: `/api/student`,
+};
+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}/${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,
+};

+ 2 - 2
src/views/bedroom/detail.vue

@@ -87,10 +87,10 @@ export default {
       let msg;
       if (isNew) {
         res = this.create(data);
-        msg = '寝室添加成功';
+        msg = `${this.keyWord}添加成功`;
       } else {
         res = this.update(data);
-        msg = '寝室修改成功';
+        msg = `${this.keyWord}修改成功`;
       }
       if (this.$checkRes(res, msg)) this.$router.push({ path: '/bedroom/index' });
     },

+ 2 - 2
src/views/classes/detail.vue

@@ -74,10 +74,10 @@ export default {
       let msg;
       if (isNew) {
         res = this.create(data);
-        msg = '班级添加成功';
+        msg = `${this.keyWord}添加成功`;
       } else {
         res = this.update(data);
-        msg = '班级修改成功';
+        msg = `${this.keyWord}修改成功`;
       }
       if (this.$checkRes(res, msg)) this.$router.push({ path: '/classes/index' });
     },

+ 2 - 2
src/views/dept/detail.vue

@@ -69,10 +69,10 @@ export default {
       let msg;
       if (isNew) {
         res = this.create(data);
-        msg = '部门添加成功';
+        msg = `${this.keyWord}添加成功`;
       } else {
         res = this.update(data);
-        msg = '部门修改成功';
+        msg = `${this.keyWord}修改成功`;
       }
       if (this.$checkRes(res, msg)) this.$router.push({ path: '/dept/index' });
     },

+ 2 - 2
src/views/director/detail.vue

@@ -82,10 +82,10 @@ export default {
       if (isNew) {
         data.openid = new Date().getTime();
         res = this.create(data);
-        msg = '班级添加成功';
+        msg = `${this.keyWord}添加成功`;
       } else {
         res = this.update(data);
-        msg = '班级修改成功';
+        msg = `${this.keyWord}修改成功`;
       }
       if (this.$checkRes(res, msg)) this.$router.push({ path: '/director/index' });
     },

+ 2 - 2
src/views/location/detail.vue

@@ -67,10 +67,10 @@ export default {
       let msg;
       if (isNew) {
         res = this.create(data);
-        msg = '地点添加成功';
+        msg = `${this.keyWord}添加成功`;
       } else {
         res = this.update(data);
-        msg = '地点修改成功';
+        msg = `${this.keyWord}修改成功`;
       }
       if (this.$checkRes(res, msg)) this.$router.push({ path: '/location/index' });
     },

+ 65 - 31
src/views/student/detail.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="detail">
-    <detail-frame :title="mainTitle" returns="/bedroom/index">
+    <detail-frame :title="mainTitle" returns="/student/index">
       <data-form :data="info" :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew">
         <template #radios="{item}">
           <template v-if="item.model === 'gender'">
@@ -23,6 +23,9 @@
 <script>
 import detailFrame from '@frame/layout/admin/detail-frame';
 import dataForm from '@frame/components/form';
+import { createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('student');
+//缺少字典表:学校表,民族表,院系表,专业表
 export default {
   metaInfo: { title: '学生信息' },
   name: 'detail',
@@ -36,56 +39,59 @@ export default {
     fields: [
       { label: '姓名', required: true, model: 'name' },
       { label: '性别', required: true, model: 'gender', type: 'radio' },
-      { label: '民族', required: true, model: 'mz', type: 'select' },
-      { label: '身份证号', required: true, model: 'idcard', options: { maxlength: 18 } },
-      { label: '学校', required: true, model: 'school', type: 'select' },
-      { label: '院系', required: true, model: 'yard', type: 'select' },
-      { label: '专业', required: true, model: 'pro', type: 'select' },
-      { label: '入学年份', required: true, model: 'in_time', type: 'date' },
-      { label: '毕业年份', required: true, model: 'out_time', type: 'date' },
-      { label: '在校曾担任何种职务', model: 'old_pos' },
-      { label: '手机号', required: true, model: 'tel' },
+      // { label: '民族', required: true, model: 'nation', type: 'select' },
+      { label: '身份证号', required: true, model: 'id_number', options: { maxlength: 18 } },
+      // { label: '学校', required: true, model: 'school_name', type: 'select' },
+      // { label: '院系', required: true, model: 'yard', type: 'select' },
+      // { label: '专业', required: true, model: 'major', type: 'select' },
+      { label: '入学年份', required: true, model: 'entry_year', type: 'year' },
+      { label: '毕业年份', required: true, model: 'finish_year', type: 'year' },
+      { label: '在校曾担任何种职务', model: 'school_job' },
+      { label: '手机号', required: true, model: 'phone', options: { maxlength: 11, minlength: 11 } },
       { label: 'QQ号', required: true, model: 'qq' },
       { label: '邮箱', required: true, model: 'email' },
-      { label: '家庭所在地', required: true, model: 'address' },
-      { label: '家庭是否困难', required: true, model: 'is_dif', type: 'radio' },
-      { label: '是否获得过助学金', required: true, model: 'is_getMoeny', type: 'radio' },
-      { label: '职务', model: 'pos' },
+      { label: '家庭所在地', required: true, model: 'family_place' },
+      { label: '家庭是否困难', required: true, model: 'family_is_hard', type: 'radio' },
+      { label: '是否获得过助学金', required: true, model: 'have_grant', type: 'radio' },
+      { label: '职务', model: 'job' },
       { label: '期', required: true, model: 'term' },
       { label: '批次', required: true, model: 'batch' },
-      { label: '班级', required: true, model: 'classes' },
-      { label: '是否优秀', model: 'is_good', type: 'radio' },
+      { label: '班级', required: true, model: 'class' },
+      { label: '是否优秀', model: 'is_fine', type: 'radio' },
     ],
     rules: {
       name: [{ required: true, message: '请输入姓名' }],
       gender: [{ required: true, message: '请选择性别' }],
-      mz: [{ required: true, message: '请选择民族' }],
-      idcard: [
+      // nation: [{ required: true, message: '请选择民族' }],
+      id_number: [
         { required: true, message: '请输入身份证号' },
         { min: 18, max: 18, message: '请输入18位身份证号码', trigger: 'blur' },
       ],
-      school: [{ required: true, message: '请选择学校' }],
-      yard: [{ required: true, message: '请选择院系' }],
-      pro: [{ required: true, message: '请选择专业' }],
-      in_time: [{ required: true, message: '请选择入学年份' }],
-      out_time: [{ required: true, message: '请选择毕业年份' }],
-      tel: [
+      // school_name: [{ required: true, message: '请选择学校' }],
+      // yard: [{ required: true, message: '请选择院系' }],
+      // major: [{ required: true, message: '请选择专业' }],
+      entry_year: [{ required: true, message: '请选择入学年份' }],
+      finish_year: [{ required: true, message: '请选择毕业年份' }],
+      phone: [
         { required: true, message: '请输入手机号' },
         { min: 11, max: 11, message: '请输入11位手机号码', trigger: 'blur' },
       ],
       qq: [{ required: true, message: '请输入QQ号' }],
       email: [{ required: true, message: '请输入邮箱' }],
-      address: [{ required: true, message: '请输入家庭所在地' }],
-      is_dif: [{ required: true, message: '请选择家庭是否困难' }],
-      is_getMoeny: [{ required: true, message: '请选择是否获得过助学金' }],
+      family_place: [{ required: true, message: '请输入家庭所在地' }],
+      family_is_hard: [{ required: true, message: '请选择家庭是否困难' }],
+      have_grant: [{ required: true, message: '请选择是否获得过助学金' }],
       term: [{ required: true, message: '请输入期号' }],
       batch: [{ required: true, message: '请输入批次' }],
-      classes: [{ required: true, message: '请输入班级' }],
-      is_good: [{ required: true, message: '请选择是否优秀' }],
+      class: [{ required: true, message: '请输入班级' }],
+      is_fine: [{ required: true, message: '请选择是否优秀' }],
     },
   }),
   created() {},
   computed: {
+    id() {
+      return this.$route.query.id;
+    },
     isNew() {
       return this.$route.query.id ? false : true;
     },
@@ -101,10 +107,38 @@ export default {
       return main;
     },
   },
+  watch: {
+    isNew: {
+      immediate: true,
+      handler(val) {
+        if (val) this.loading = false;
+        else this.search();
+      },
+    },
+  },
   methods: {
+    ...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) {
+        data.openid = new Date().getTime();
+        data.nation = `汉族`;
+        data.yard = `测试学院`;
+        data.major = `测试专业`;
+        data.school_name = `测试学校`;
+        res = this.create(data);
+        msg = `${this.keyWord}添加成功`;
+      } else {
+        res = this.update(data);
+        msg = `${this.keyWord}修改成功`;
+      }
+      if (this.$checkRes(res, msg)) this.$router.push({ path: '/student/index' });
     },
   },
 };

+ 45 - 36
src/views/student/index.vue

@@ -9,6 +9,8 @@
 <script>
 import listFrame from '@frame/layout/admin/list-frame';
 import dataTable from '@frame/components/data-table';
+import { createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('student');
 export default {
   metaInfo: { title: '学生管理' },
   name: 'index',
@@ -28,6 +30,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
     ],
     fields: [
@@ -39,39 +42,39 @@ export default {
           return item === '1' ? '男' : '女';
         },
       },
-      { label: '民族', prop: 'mz' },
-      { label: '身份证号', prop: 'idcard' },
-      { label: '学校', prop: 'school' },
+      { label: '民族', prop: 'nation' },
+      { label: '身份证号', prop: 'id_number' },
+      { label: '学校', prop: 'school_name' },
       { label: '院系', prop: 'yard' },
-      { label: '专业', prop: 'pro' },
-      { label: '入学年份', prop: 'in_time' },
-      { label: '毕业年份', prop: 'out_time' },
-      { label: '在校曾担任何种职务', prop: 'old_pos' },
-      { label: '手机号', prop: 'tel' },
+      { label: '专业', prop: 'major' },
+      { label: '入学年份', prop: 'entry_year' },
+      { label: '毕业年份', prop: 'finish_year' },
+      { label: '在校曾担任何种职务', prop: 'school_job' },
+      { label: '手机号', prop: 'phone' },
       { label: 'QQ号', prop: 'qq' },
       { label: '邮箱', prop: 'email' },
-      { label: '家庭所在地', prop: 'address' },
+      { label: '家庭所在地', prop: 'family_place' },
       {
         label: '家庭是否困难',
-        prop: 'is_dif',
+        prop: 'family_is_hard',
         format: item => {
           return item === '1' ? '是' : '否';
         },
       },
       {
         label: '是否获得过助学金',
-        prop: 'is_getMoeny',
+        prop: 'have_grant',
         format: item => {
           return item === '1' ? '是' : '否';
         },
       },
-      { label: '职务', prop: 'pos' },
+      { label: '职务', prop: 'job' },
       { label: '期', prop: 'term' },
       { label: '批次', prop: 'batch' },
-      { label: '班级', prop: 'classes' },
+      { label: '班级', prop: 'class' },
       {
         label: '是否优秀',
-        prop: 'is_good',
+        prop: 'is_fine',
         format: item => {
           return item === '1' ? '是' : '否';
         },
@@ -82,43 +85,49 @@ export default {
         id: 1,
         name: '学生1',
         gender: '1',
-        mz: '汉族',
-        idcard: 220103199911111922,
+        nation: '汉族',
+        id_number: 220103199911111922,
         school: '测试学校',
         yard: '测试学院',
-        pro: '测试专业',
-        in_time: '2019-01-01',
-        out_time: '2020-01-01',
-        old_pos: '无',
-        tel: '13000000000',
+        major: '测试专业',
+        entry_year: '2019-01-01',
+        finish_year: '2020-01-01',
+        school_job: '无',
+        phone: '13000000000',
         qq: '2938260457',
         email: '2938260457@qq.com',
-        address: '测试地址',
-        is_dif: '1',
-        is_getMoeny: '0',
-        pos: '组长',
+        family_place: '测试地址',
+        family_is_hard: '1',
+        have_grant: '0',
+        job: '组长',
         term: '233',
         batch: '3',
-        classes: '3',
-        is_good: '0',
+        class: '3',
+        is_fine: '0',
       },
     ],
     total: 0,
   }),
-  created() {},
+  created() {
+    this.search();
+  },
   computed: {},
   methods: {
-    search({ skip = 0, limit = 15, ...info } = {}) {
-      console.log(`in search`);
+    ...mapActions(['query', 'delete']),
+    async search({ skip = 0, limit = 15, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
     },
     toEdit(data) {
-      console.log(`in toEdit`);
-      console.log(data);
-      this.$router.push({ path: '/place/detail', query: { id: data.id } });
+      this.$router.push({ path: '/student/detail', query: { id: data.id } });
     },
-    toDelete(data) {
-      console.log(`in toDelete`);
-      console.log(data);
+    async toDelete(data) {
+      const res = await this.delete(data.id);
+      this.$checkRes(res, '删除成功', '删除失败');
+      this.search();
     },
   },
 };