lrf402788946 5 éve
szülő
commit
9883c0fecc

+ 1 - 0
src/main.js

@@ -7,6 +7,7 @@ import '@/plugins/axios';
 import '@/plugins/check-res';
 import '@/plugins/element';
 import '@/plugins/setting';
+import '@frame/config/other';
 import '@/plugins/moment';
 import '@/plugins/dateM';
 import InitStomp from '@/plugins/stomp';

+ 2 - 0
src/store/index.js

@@ -27,6 +27,7 @@ import dirPlan from '@frame/store/dir-plan';
 import login from '@frame/store/login';
 import * as ustate from '@frame/store/user/state';
 import * as umutations from '@frame/store/user/mutations';
+import other from '@frame/store/other';
 
 Vue.use(Vuex);
 
@@ -56,6 +57,7 @@ export default new Vuex.Store({
     dirPlan,
     leave,
     trainTemplate,
+    other,
   },
   state: { ...ustate },
   mutations: { ...umutations },

+ 87 - 6
src/views/new-plan/index.vue

@@ -1,19 +1,33 @@
 <template>
   <div id="index">
-    <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" @add="dialog = true">
+    <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" @add="toAdd">
       <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>
+      <data-form :data="info" :fields="Ffields" :rules="rules" @save="handleSave" :isNew="!info.id" :styles="{ padding: 0 }" labelWidth="60px">
+        <template #custom="{item,form}">
+          <template v-if="item.model == 'festivals'">
+            <data-table :fields="festFields" :data="form[item.model]" :opera="opera" @edit="toFestEdit" @delete="toFestDelete"></data-table>
+          </template>
+        </template>
+      </data-form>
     </el-dialog>
+    <el-drawer :title="form.name" :visible.sync="drawer" direction="rtl" @close="handleFestClose">
+      <data-form :data="form" :fields="festFields" :rules="{}" @save="handleFestSave" :isNew="!info.id" :styles="{ padding: 0 }"> </data-form>
+    </el-drawer>
   </div>
 </template>
 
 <script>
+var moment = require('moment');
+import _ from 'lodash';
+import Vue from 'vue';
 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';
+const { mapActions: trainplan } = createNamespacedHelpers('trainplan');
+const { mapActions: other } = createNamespacedHelpers('other');
 export default {
   name: 'index',
   props: {},
@@ -21,6 +35,7 @@ export default {
   data: () => {
     return {
       dialog: false,
+      drawer: false,
       opera: [
         {
           label: '编辑',
@@ -35,17 +50,34 @@ export default {
       ],
       fields: [
         { label: '年度', prop: 'year' },
-        { label: '状态', prop: 'status', format: i => (i === '0' ? '已使用' : '已禁用') },
+        { label: '标题', prop: 'title' },
+        { label: '状态', prop: 'status', format: i => (i === '0' ? '筹备中' : i === '1' ? '已发布' : '已结束') },
+      ],
+      festFields: [
+        { label: '节假日', prop: 'name', model: 'name', options: { readonly: true } },
+        { label: '开始时间', prop: 'begindate', model: 'begindate', type: 'date' },
+        { label: '结束时间', prop: 'finishdate', model: 'finishdate', type: 'date' },
       ],
       info: {},
-      Ffields: [{ label: '年度', model: 'year' }],
+      form: {},
+      Ffields: [
+        { label: '年度', model: 'year' },
+        { label: '标题', model: 'title' },
+        { label: '假期', model: 'festivals', custom: true },
+      ],
       rules: {},
       list: [],
+      holiday: [],
       total: 0,
     };
   },
-  created() {},
+  created() {
+    this.getOtherList();
+    this.search();
+  },
   methods: {
+    ...other(['calendar']),
+    ...trainplan(['query', 'create', 'delete', 'update']),
     async search({ skip = 0, limit = 10, ...info } = {}) {
       const res = await this.query({ skip, limit, ...info });
       if (this.$checkRes(res)) {
@@ -53,6 +85,10 @@ export default {
         this.$set(this, `total`, res.total);
       }
     },
+    toAdd() {
+      this.$set(this.info, `festivals`, JSON.parse(JSON.stringify(this.holiday)));
+      this.dialog = true;
+    },
     toEdit({ data }) {
       this.$set(this, `info`, data);
       this.dialog = true;
@@ -63,17 +99,62 @@ export default {
       this.search();
     },
     async handleSave({ data, isNew }) {
-      console.log(data, isNew);
+      let res;
+      let msg;
       if (isNew) {
         //create
+        res = await this.create(data);
+        msg = '添加成功';
       } else {
         //update
+        res = await this.update(data);
+        msg = '修改成功';
+      }
+      if (this.$checkRes(res, msg, res.errmsg || '操作失败')) {
+        this.handleClose();
       }
     },
     handleClose() {
       this.dialog = false;
       this.info = {};
     },
+    handleFestClose() {
+      this.drawer = false;
+      this.form = {};
+    },
+    toFestEdit({ data, index }) {
+      let nd = JSON.parse(JSON.stringify(data));
+      nd.index = index;
+      this.$set(this, 'form', nd);
+      this.drawer = true;
+    },
+    toFestDelete({ data, index }) {
+      this.info.festivals.splice(index, 1);
+    },
+    handleFestSave({ data }) {
+      let index = data.index;
+      let obj = _.omit(data, ['index']);
+      this.$set(this.info.festivals, index, obj);
+      this.drawer = false;
+    },
+    async getOtherList() {
+      let holiday = sessionStorage.getItem('holiday');
+      if (!holiday) {
+        let year = new Date().getFullYear();
+        let key = Vue.config.jhAppKey;
+        let res = await this.calendar({ key, year });
+        if (res) {
+          let plan = res.holiday_list;
+          plan.map(i => {
+            i.begindate = moment(i.startday).format('YYYY-MM-DD');
+            delete i.startday;
+            return i;
+          });
+          this.$set(this, `holiday`, plan);
+        }
+        sessionStorage.setItem('holiday', JSON.stringify(res.holiday_list));
+      } else this.$set(this, 'holiday', JSON.parse(holiday));
+    },
   },
   computed: {
     ...mapState(['user']),

+ 6 - 2
src/views/new-plan/template.vue

@@ -4,8 +4,12 @@
       <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>
+            <el-row type="flex" align="middle">
+              <el-col :span="1">
+                <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>
+              </el-col>
+            </el-row>
           </template>
         </template>
       </data-form>

+ 5 - 5
src/views/school/detail.vue

@@ -28,7 +28,7 @@ export default {
       fields: [
         { label: '学校名称', required: true, model: 'name' },
         { label: '学校代码', required: true, model: 'code' },
-        { label: '学校地点', required: true, model: 'place' },
+        { label: '学校地点', required: true, model: 'address' },
         { label: '学校简称', required: true, model: 'shortname' },
         { label: '每期人数', required: true, model: 'number', type: 'number' },
         { label: '是否派车', required: true, model: 'hascar', type: 'radio' },
@@ -36,7 +36,7 @@ export default {
       rules: {
         name: [{ required: true, message: '请输入学校名称' }],
         code: [{ required: true, message: '请输入学校代码' }],
-        place: [{ required: true, message: '请选择学校地点' }],
+        address: [{ required: true, message: '请选择学校地点' }],
         shortname: [{ required: true, message: '请输入学校简称' }],
         number: [{ required: true, message: '请输入每期人数' }],
         hascar: [{ required: true, message: '请选择是否派车' }],
@@ -57,12 +57,12 @@ export default {
       if (!data.hascar) data.hascar = '0';
       if (isNew) {
         res = await this.create(data);
-        msg = `${this.keyWord}添加成功`;
+        msg = `添加成功`;
       } else {
         res = await this.update(data);
-        msg = `${this.keyWord}修改成功`;
+        msg = `修改成功`;
       }
-      if (this.$checkRes(res, msg)) this.$router.push({ path: '/dept/index' });
+      if (this.$checkRes(res, msg)) this.$router.push({ path: './index' });
     },
   },
   computed: {

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

@@ -33,7 +33,7 @@ export default {
       fields: [
         { label: '学校名称', prop: 'name' },
         { label: '学校代码', prop: 'code' },
-        { label: '学校地点', prop: 'place' },
+        { label: '学校地点', prop: 'address' },
         { label: '学校简称', prop: 'shortname' },
         { label: '每期人数', prop: 'number' },
       ],

+ 7 - 18
vue.config.js

@@ -43,24 +43,13 @@ module.exports = {
         changeOrigin: true,
         ws: true,
       },
-      '/admin/center': {
-        target: 'http://free.liaoningdoupo.com',
-      },
-      // '/api/train/department': {
-      //   target: 'http://free.liaoningdoupo.com',
-      // },
-
-      '/admin/director': {
-        target: 'http://free.liaoningdoupo.com',
-      },
-      '/admin/teacher': {
-        target: 'http://free.liaoningdoupo.com',
-      },
-      '/admin/student': {
-        target: 'http://free.liaoningdoupo.com',
-      },
-      '/admin/school': {
-        target: 'http://free.liaoningdoupo.com',
+      '/jh': {
+        target: 'http://v.juhe.cn',
+        changeOrigin: true,
+        ws: true,
+        pathRewrite: {
+          '^/jh': '',
+        },
       },
     },
   },