guhongwei 5 jaren geleden
bovenliggende
commit
0bf1304b86
3 gewijzigde bestanden met toevoegingen van 205 en 0 verwijderingen
  1. 12 0
      src/router/index.js
  2. 79 0
      src/views/new-plan/classInfo.vue
  3. 114 0
      src/views/new-plan/studentCheck.vue

+ 12 - 0
src/router/index.js

@@ -12,6 +12,18 @@ const newPlan = [
     meta: { title: '班主任上报计划', sub: '管理' },
     component: () => import('@/views/new-plan/index.vue'),
   },
+  {
+    path: '/newPlan/classInfo',
+    name: 'newPlan_classInfo',
+    meta: { title: '确定学生信息', sub: '管理' },
+    component: () => import('@/views/new-plan/classInfo.vue'),
+  },
+  {
+    path: '/newPlan/studentCheck',
+    name: 'newPlan_studentCheck',
+    meta: { title: '确定学生信息', sub: '管理' },
+    component: () => import('@/views/new-plan/studentCheck.vue'),
+  },
 ];
 
 const routes = [

+ 79 - 0
src/views/new-plan/classInfo.vue

@@ -0,0 +1,79 @@
+<template>
+  <div id="classInfo">
+    <list-frame title="学生管理" @query="search" :total="total" :needFilter="false" :needAdd="false">
+      <data-table :fields="fields" @handleSelect="handleSelect" :select="false" :data="list" :opera="opera" @share="share"></data-table>
+    </list-frame>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+import listFrame from '@frame/layout/admin/list-frame';
+import dataForm from '@frame/components/form';
+import dataTable from '@frame/components/data-table';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('student');
+const { mapActions: classes } = createNamespacedHelpers('classes');
+
+export default {
+  metaInfo: { title: '学生管理' },
+  name: 'classInfo',
+  props: {},
+  components: {
+    listFrame,
+    dataTable,
+  },
+  data: () => ({
+    dialog: false,
+    opera: [
+      {
+        label: '审核',
+        icon: 'el-icon-view',
+        method: 'share',
+      },
+    ],
+    fields: [
+      { label: '姓名', prop: 'name' },
+      { label: '性别', prop: 'gender' },
+      { label: '民族', prop: 'nation' },
+      { label: '身份证号', prop: 'id_number' },
+      { label: '期', prop: 'termname' },
+      { label: '批次', prop: 'batchname' },
+      { label: '班级', prop: 'classname' },
+      { label: '学校', prop: 'school_name' },
+      { label: '院系', prop: 'faculty' },
+      { label: '专业', prop: 'major' },
+      { label: '手机号', prop: 'phone' },
+      { label: '邮箱', prop: 'email' },
+      { label: '学生身份', prop: 'status', format: i => (i === '0' ? '待确定' : i === '1' ? '确定' : '失败') },
+    ],
+    list: [],
+    total: 0,
+  }),
+  created() {
+    this.search();
+  },
+  computed: { ...mapState(['user', 'defaultOption']) },
+  methods: {
+    ...mapActions(['query', 'update']),
+    ...classes({ classesquery: 'query' }),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let termid = _.get(this.defaultOption, 'termid');
+      let classid = _.get(this.defaultOption, 'classid');
+      const res = await this.query({ termid: termid, classid: classid, ...info });
+      if (this.$checkRes(res)) {
+        var arr = res.data.filter(item => item.status == '0');
+        this.$set(this, `list`, arr);
+        this.$set(this, `total`, arr.length);
+      }
+    },
+    // 确定
+    share({ data }) {
+      this.$router.push({ path: '/newPlan/studentCheck', query: { id: data.id } });
+    },
+    handleSelect() {},
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 114 - 0
src/views/new-plan/studentCheck.vue

@@ -0,0 +1,114 @@
+<template>
+  <div id="detail">
+    <detail-frame :title="mainTitle" returns="/newPlan/classInfo">
+      <data-form :data="info" :fields="fields" @save="handleSave">
+        <template #radios="{item}">
+          <template v-if="item.model === 'status'">
+            <el-radio label="0">待确定</el-radio>
+            <el-radio label="1">确定</el-radio>
+            <el-radio label="2">失败</el-radio>
+          </template>
+          <template v-else-if="item.model === 'gender'">
+            <el-radio label="男">男</el-radio>
+            <el-radio label="女">女</el-radio>
+          </template>
+          <template v-else>
+            <el-radio label="1">是</el-radio>
+            <el-radio label="0">否</el-radio>
+          </template>
+          <template v-if="item.model === 'floor'">
+            <el-radio v-for="i in 5" :key="i" :label="`${i}楼`">{{ `${i}楼` }}</el-radio>
+          </template>
+        </template>
+      </data-form>
+    </detail-frame>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+import detailFrame from '@frame/layout/admin/detail-frame';
+import dataForm from '@frame/components/form';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('student');
+//缺少字典表:学校表,民族表,院系表,专业表
+export default {
+  metaInfo: { title: '学生信息' },
+  name: 'detail',
+  props: {},
+  components: {
+    detailFrame,
+    dataForm,
+  },
+  data: () => ({
+    info: {},
+    fields: [
+      { label: '姓名', required: true, model: 'name' },
+      { label: '性别', required: true, model: 'gender', type: 'radio' },
+      { 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: 'family_place' },
+      { label: '家庭是否困难', required: true, model: 'family_is_hard', type: 'radio' },
+      { label: '是否获得过助学金', required: true, model: 'have_grant', type: 'radio' },
+      { label: '职务', model: 'job' },
+      { label: '期', model: 'termid', type: 'select', filterReturn: true },
+      { label: '批次', model: 'batchid', type: 'select', filterReturn: true },
+      { label: '班级', model: 'classid', type: 'select', filterReturn: true },
+      { label: '是否优秀', model: 'is_fine', type: 'radio' },
+      { label: '学生身份', required: false, model: 'status', type: 'radio' },
+    ],
+  }),
+  created() {
+    this.search();
+  },
+  computed: {
+    ...mapState(['user', 'defaultOption']),
+    id() {
+      return this.$route.query.id;
+    },
+    mainTitle() {
+      let meta = this.$route.meta;
+      let main = meta.title || '';
+      let sub = meta.sub || '';
+      return `${main}${sub}`;
+    },
+  },
+
+  methods: {
+    ...mapActions(['fetch', 'create', 'update']),
+    async search() {
+      if (this.id) {
+        const res = await this.fetch(this.id);
+        if (this.$checkRes(res)) {
+          this.$set(this, `info`, res.data);
+        }
+      }
+    },
+    async handleSave({ data }) {
+      let res = await this.update(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '身份确定成功',
+          type: 'success',
+        });
+      } else {
+        this.$message({
+          message: '身份确定失败',
+          type: 'error',
+        });
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>