Bladeren bron

更新职责说明表相关

wuhongyuq 5 jaren geleden
bovenliggende
commit
3799c6e742
5 gewijzigde bestanden met toevoegingen van 223 en 0 verwijderingen
  1. 13 0
      src/router/index.js
  2. 38 0
      src/store/duty.js
  3. 3 0
      src/store/index.js
  4. 87 0
      src/views/duty/detail.vue
  5. 82 0
      src/views/duty/index.vue

+ 13 - 0
src/router/index.js

@@ -172,6 +172,19 @@ const routes = [
         meta: { title: '部门', sub: '详情' },
         component: () => import('@/views/dept/detail.vue'),
       },
+      {
+        path: '/duty/detail',
+        name: 'duty_detail',
+        meta: { title: '职责', sub: '说明详情' },
+        component: () => import('@/views/duty/detail.vue'),
+      },
+
+      {
+        path: '/duty/index',
+        name: 'duty_index',
+        meta: { title: '职责', sub: '说明管理' },
+        component: () => import('@/views/duty/index.vue'),
+      },
       {
         path: '/location/index',
         name: 'location_index',

+ 38 - 0
src/store/duty.js

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

+ 3 - 0
src/store/index.js

@@ -12,6 +12,8 @@ import question from './question';
 import questionnaire from './questionnaire';
 import teacher from './teacher';
 import trainplan from './trainplan';
+import duty from './duty';
+
 Vue.use(Vuex);
 
 export default new Vuex.Store({
@@ -28,6 +30,7 @@ export default new Vuex.Store({
     questionnaire,
     teacher,
     trainplan,
+    duty,
   },
   state: {},
   mutations: {},

+ 87 - 0
src/views/duty/detail.vue

@@ -0,0 +1,87 @@
+<template>
+  <div id="detail">
+    <detail-frame :title="mainTitle" returns="/dept/index">
+      <data-form :data="info" :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew"> </data-form>
+    </detail-frame>
+  </div>
+</template>
+
+<script>
+import detailFrame from '@frame/layout/admin/detail-frame';
+import dataForm from '@frame/components/form';
+import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: mapClass } = createNamespacedHelpers('duty');
+
+export default {
+  metaInfo: { title: '职责详情' },
+  name: 'detail',
+  props: {},
+  components: {
+    detailFrame,
+    dataForm,
+  },
+  data: () => ({
+    info: {},
+    fields: [
+      { label: '班长职责', required: true, model: 'bzduty' },
+      { label: '学委职责', required: true, model: 'xwduty' },
+    ],
+    rules: {
+      bzduty: [{ required: true, message: '请输入班长职责' }],
+      xwduty: [{ required: true, message: '请输入学委职责' }],
+    },
+  }),
+  created() {},
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+    isNew() {
+      return this.$route.query.id ? false : true;
+    },
+    mainTitle() {
+      let meta = this.$route.meta;
+      let main = meta.title || '';
+      let sub = meta.sub || '';
+      return `${main}${sub}`;
+    },
+    keyWord() {
+      let meta = this.$route.meta;
+      let main = meta.title || '';
+      return main;
+    },
+  },
+  watch: {
+    isNew: {
+      immediate: true,
+      handler(val) {
+        if (val) this.loading = false;
+        else this.search();
+      },
+    },
+  },
+  methods: {
+    ...mapClass(['fetch', 'create', 'update']),
+    async search() {
+      const res = await this.fetch(this.id);
+      console.log(res);
+      if (this.$checkRes(res)) this.$set(this, `info`, res.data);
+      this.loading = false;
+    },
+    async handleSave({ isNew, data }) {
+      let res;
+      let msg;
+      if (isNew) {
+        res = await this.create(data);
+        msg = `${this.keyWord}添加成功`;
+      } else {
+        res = await this.update(data);
+        msg = `${this.keyWord}修改成功`;
+      }
+      if (this.$checkRes(res, msg)) this.$router.push({ path: '/duty/index' });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 82 - 0
src/views/duty/index.vue

@@ -0,0 +1,82 @@
+<template>
+  <div id="index">
+    <list-frame :title="mainTitle" @query="search" :total="total" :needFilter="false" @add="$router.push({ path: '/duty/detail' })">
+      <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete"></data-table>
+    </list-frame>
+  </div>
+</template>
+
+<script>
+import listFrame from '@frame/layout/admin/list-frame';
+import dataTable from '@frame/components/data-table';
+import { createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('duty');
+export default {
+  metaInfo: { title: '职责管理' },
+  name: 'index',
+  props: {},
+  components: {
+    listFrame,
+    dataTable,
+  },
+  data: () => ({
+    opera: [
+      {
+        label: '编辑',
+        icon: 'el-icon-edit',
+        method: 'edit',
+      },
+      {
+        label: '删除',
+        icon: 'el-icon-delete',
+        method: 'delete',
+        confirm: true,
+      },
+    ],
+    fields: [
+      { label: '班长职责', prop: 'bzduty' },
+      { label: '学委职责', prop: 'xwduty' },
+    ],
+    list: [],
+    total: 0,
+  }),
+  created() {
+    this.search();
+  },
+  computed: {
+    mainTitle() {
+      let meta = this.$route.meta;
+      let main = meta.title || '';
+      let sub = meta.sub || '';
+      return `${main}${sub}`;
+    },
+    keyWord() {
+      let meta = this.$route.meta;
+      let main = meta.title || '';
+      return main;
+    },
+  },
+  methods: {
+    ...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, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+
+    toEdit({ data }) {
+      this.$router.push({ path: '/duty/detail', query: { id: data.id } });
+    },
+
+    async toDelete({ data }) {
+      const res = await this.delete(data.id);
+      this.$checkRes(res, '删除成功', '删除失败');
+      this.search();
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>