lrf402788946 5 лет назад
Родитель
Сommit
cb2ca73edf
4 измененных файлов с 128 добавлено и 19 удалено
  1. 10 0
      src/router/index.js
  2. 20 14
      src/views/lesson/detail.vue
  3. 8 5
      src/views/lesson/index.vue
  4. 90 0
      src/views/new-plan/index.vue

+ 10 - 0
src/router/index.js

@@ -5,12 +5,22 @@ import { Notification } from 'element-ui';
 
 Vue.use(VueRouter);
 
+const newPlan = [
+  {
+    path: '/newPlan/index',
+    name: 'newPlan_index',
+    meta: { title: '年度计划管理' },
+    component: () => import('@/views/new-plan/index.vue'),
+  },
+];
+
 const routes = [
   {
     path: '/',
     name: 'frame',
     component: () => import('@/views/index.vue'),
     children: [
+      ...newPlan,
       {
         path: '/list',
         name: 'test_list',

+ 20 - 14
src/views/lesson/detail.vue

@@ -1,7 +1,7 @@
 <template>
   <div id="detail">
     <detail-frame :title="pageTitle" returns="./index">
-      <data-form :data="info" :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew">
+      <data-form :data="info" :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew" :reset="false">
         <template #radios="{item}">
           <template v-if="item.model === 'type'">
             <el-radio v-for="(i, index) in types" :key="index" :label="i.value">{{ i.label }}</el-radio>
@@ -81,10 +81,11 @@
 <script>
 import detailFrame from '@frame/layout/admin/detail-frame';
 import dataForm from '@frame/components/form';
-import { lesson } from '@frame/config/lesson-template';
+import { lesson as lessons } from '@frame/config/lesson-template';
 import _ from 'lodash';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: subject } = createNamespacedHelpers('subject');
+const { mapActions: lesson } = createNamespacedHelpers('lesson');
 export default {
   name: 'detail',
   props: {},
@@ -122,7 +123,7 @@ export default {
         { label: '第六天类型', model: 'day6type', type: 'radio' },
         { label: '第六天安排', model: 'day6', custom: true },
       ],
-      lessons: lesson,
+      lessons: lessons,
       dayType: [{ label: '活动' }, { label: '课程' }],
       actList: [
         { label: '--' },
@@ -144,24 +145,29 @@ export default {
     ...subject({
       getSubjectList: 'query',
     }),
+    ...lesson(['modelFetch', 'modelCreate', 'modelUpdate']),
     async search() {
-      const res = await this.fetch(this.id);
-      if (this.$checkRes(res)) this.$set(this, `info`, res.data);
+      const res = await this.modelFetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `info`, res.data);
+        let { lessons } = res.data;
+        lessons = JSON.parse(lessons);
+        this.$set(this, `lessons`, lessons);
+      }
       this.loading = false;
     },
     async handleSave({ isNew, data }) {
       let res;
       let msg;
       data.lessons = JSON.stringify(this.lessons);
-      console.log(data);
-      // if (isNew) {
-      //   res = await this.create(data);
-      //   msg = `${this.pageTitle}添加成功`;
-      // } else {
-      //   res = await this.update(data);
-      //   msg = `${this.pageTitle}修改成功`;
-      // }
-      // if (this.$checkRes(res, msg)) this.$router.push({ path: './index' });
+      if (isNew) {
+        res = await this.modelCreate(data);
+        msg = `${this.pageTitle}添加成功`;
+      } else {
+        res = await this.modelUpdate(data);
+        msg = `${this.pageTitle}修改成功`;
+      }
+      if (this.$checkRes(res, msg)) this.$router.push({ path: './index' });
     },
     async toEdit(data, index) {
       let newData = JSON.parse(JSON.stringify(data));

+ 8 - 5
src/views/lesson/index.vue

@@ -10,6 +10,7 @@
 import listFrame from '@frame/layout/admin/list-frame';
 import dataTable from '@frame/components/data-table';
 import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: lesson } = createNamespacedHelpers('lesson');
 export default {
   name: 'index',
   props: {},
@@ -30,17 +31,19 @@ export default {
       ],
       fields: [
         { label: '模板名称', prop: 'title' },
-        { label: '模板类型', prop: 'type' },
+        { label: '模板类型', prop: 'type', format: i => (i == 0 ? '普通班' : '特殊班') },
       ],
       list: [],
       total: 0,
     };
   },
-  created() {},
+  created() {
+    this.search();
+  },
   methods: {
-    // ...questionnaire(['query', 'delete']),
+    ...lesson(['modelQuery', 'modelDelete']),
     async search({ skip = 0, limit = 10, ...info } = {}) {
-      const res = await this.query({ skip, limit, ...info });
+      const res = await this.modelQuery({ skip, limit, ...info });
       if (this.$checkRes(res)) {
         this.$set(this, `list`, res.data);
         this.$set(this, `total`, res.total);
@@ -50,7 +53,7 @@ export default {
       this.$router.push({ path: '/lesson/detail', query: { id: data.id } });
     },
     async toDelete({ data }) {
-      const res = await this.delete(data.id);
+      const res = await this.modelDelete(data.id);
       this.$checkRes(res, '删除成功', '删除失败');
       this.search();
     },

+ 90 - 0
src/views/new-plan/index.vue

@@ -0,0 +1,90 @@
+<template>
+  <div id="index">
+    <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" @add="dialog = true">
+      <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete"></data-table>
+    </list-frame>
+    <el-dialog title="年度信息" width="30%" :visible.sync="dialog" center :destroy-on-close="true" @close="handleClose">
+      <data-form :data="info" :fields="Ffields" :rules="rules" @save="handleSave" :isNew="!info.id" :styles="{ padding: 0 }"> </data-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import listFrame from '@frame/layout/admin/list-frame';
+import dataTable from '@frame/components/data-table';
+import dataForm from '@frame/components/form';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'index',
+  props: {},
+  components: { listFrame, dataTable, dataForm },
+  data: () => {
+    return {
+      dialog: false,
+      opera: [
+        {
+          label: '编辑',
+          icon: 'el-icon-edit',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          icon: 'el-icon-delete',
+          method: 'delete',
+        },
+      ],
+      fields: [
+        { label: '年度', prop: 'year' },
+        { label: '状态', prop: 'status', format: i => (i === '0' ? '已使用' : '已禁用') },
+      ],
+      info: {},
+      Ffields: [{ label: '年度', model: 'year' }],
+      rules: {},
+      list: [],
+      total: 0,
+    };
+  },
+  created() {},
+  methods: {
+    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.$set(this, `info`, data);
+      this.dialog = true;
+    },
+    async toDelete({ data }) {
+      const res = await this.delete(data.id);
+      this.$checkRes(res, '删除成功', '删除失败');
+      this.search();
+    },
+    async handleSave({ data, isNew }) {
+      console.log(data, isNew);
+      if (isNew) {
+        //create
+      } else {
+        //update
+      }
+    },
+    handleClose() {
+      this.dialog = false;
+      this.info = {};
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>