lrf402788946 5 jaren geleden
bovenliggende
commit
b8e40820c0
5 gewijzigde bestanden met toevoegingen van 121 en 2 verwijderingen
  1. 6 0
      src/router/index.js
  2. 2 0
      src/store/index.js
  3. 98 0
      src/views/new-plan/template.vue
  4. 13 1
      src/views/school/detail.vue
  5. 2 1
      src/views/school/index.vue

+ 6 - 0
src/router/index.js

@@ -12,6 +12,12 @@ const newPlan = [
     meta: { title: '年度计划管理' },
     component: () => import('@/views/new-plan/index.vue'),
   },
+  {
+    path: '/newPlan/template',
+    name: 'newPlan_template',
+    meta: { title: '计划模板' },
+    component: () => import('@/views/new-plan/template.vue'),
+  },
 ];
 
 const routes = [

+ 2 - 0
src/store/index.js

@@ -17,6 +17,7 @@ import school from '@frame/store/school';
 import schPlan from '@frame/store/sch-plan';
 import teaPlan from '@frame/store/tea-plan';
 import lesson from '@frame/store/lesson';
+import trainTemplate from '@frame/store/train-template';
 import leave from '@frame/store/leave';
 
 import nation from '@frame/store/nation';
@@ -54,6 +55,7 @@ export default new Vuex.Store({
     login,
     dirPlan,
     leave,
+    trainTemplate,
   },
   state: { ...ustate },
   mutations: { ...umutations },

+ 98 - 0
src/views/new-plan/template.vue

@@ -0,0 +1,98 @@
+<template>
+  <div id="templates">
+    <detail-frame :title="pageTitle">
+      <data-form :data="info" :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew" labelWidth="165px" :reset="false">
+        <template #custom="{item}">
+          <template v-if="item.model == 'color'">
+            <el-color-picker v-model="color" :predefine="info.color" @change="toChange" color-format="hex"></el-color-picker>
+            <el-button type="primary" @click="toClear" size="mini">清空</el-button>
+          </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: trainTemplate } = createNamespacedHelpers('trainTemplate');
+export default {
+  name: 'templates',
+  props: {},
+  components: { detailFrame, dataForm },
+  data: () => {
+    return {
+      info: { color: [] },
+      color: '',
+      isNew: true,
+      fields: [
+        { label: '总人数', required: true, model: 'total', type: 'number' },
+        { label: '每批所需天数', required: true, model: 'day', type: 'number' },
+        { label: '默认每期中的批次数', required: true, model: 'batchnum', type: 'number' },
+        { label: '默认每批次中的班级数', required: true, model: 'classnum', type: 'number' },
+        { label: '默认颜色', model: 'color', custom: true },
+      ],
+      rules: {
+        total: [{ required: true, message: '请输入总人数' }],
+        day: [{ required: true, message: '请输入每批所需天数' }],
+        batchnum: [{ required: true, message: '请输入默认每期中的批次数' }],
+        classnum: [{ required: true, message: '请输入默认每批次中的班级数' }],
+      },
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...trainTemplate(['query', 'create', 'update']),
+    async search() {
+      let res = await this.query();
+      if (this.$checkRes(res)) {
+        if (res.data.length > 0) {
+          this.$set(this, `info`, res.data[0]);
+          this.$set(this, `isNew`, false);
+        }
+      }
+    },
+    async handleSave({ isNew, data }) {
+      let res;
+      if (isNew) {
+        res = await this.create(data);
+      } else {
+        res = await this.update(data);
+      }
+      this.$checkRes(res, '保存成功', res.errmsg || '保存失败');
+    },
+    toChange(data) {
+      let colors = _.get(this.info, 'color');
+      if (colors && colors.length >= 8) {
+        this.$message.error('只能选择8个预存颜色');
+        return;
+      }
+      let res = this.info.color.find(f => f == data);
+      if (res) {
+        this.$message.error('已选择当前颜色');
+        return;
+      }
+      this.info.color.push(data);
+    },
+    toClear() {
+      this.info.color = [];
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 13 - 1
src/views/school/detail.vue

@@ -1,7 +1,14 @@
 <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-form :data="info" :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew">
+        <template #radios="{item}">
+          <template v-if="item.model === 'hascar'">
+            <el-radio label="0">否</el-radio>
+            <el-radio label="1">是</el-radio>
+          </template>
+        </template>
+      </data-form>
     </detail-frame>
   </div>
 </template>
@@ -23,12 +30,16 @@ export default {
         { label: '学校代码', required: true, model: 'code' },
         { label: '学校地点', required: true, model: 'place' },
         { label: '学校简称', required: true, model: 'shortname' },
+        { label: '每期人数', required: true, model: 'number', type: 'number' },
+        { label: '是否派车', required: true, model: 'hascar', type: 'radio' },
       ],
       rules: {
         name: [{ required: true, message: '请输入学校名称' }],
         code: [{ required: true, message: '请输入学校代码' }],
         place: [{ required: true, message: '请选择学校地点' }],
         shortname: [{ required: true, message: '请输入学校简称' }],
+        number: [{ required: true, message: '请输入每期人数' }],
+        hascar: [{ required: true, message: '请选择是否派车' }],
       },
     };
   },
@@ -43,6 +54,7 @@ export default {
     async handleSave({ isNew, data }) {
       let res;
       let msg;
+      if (!data.hascar) data.hascar = '0';
       if (isNew) {
         res = await this.create(data);
         msg = `${this.keyWord}添加成功`;

+ 2 - 1
src/views/school/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="index">
-    <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" @add="$router.push({ path: '/dept/detail' })">
+    <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" @add="$router.push({ path: './detail' })">
       <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete"></data-table>
     </list-frame>
   </div>
@@ -35,6 +35,7 @@ export default {
         { label: '学校代码', prop: 'code' },
         { label: '学校地点', prop: 'place' },
         { label: '学校简称', prop: 'shortname' },
+        { label: '每期人数', prop: 'number' },
       ],
       list: [],
       total: 0,