Pārlūkot izejas kodu

课程信息未完成,做一些

lrf402788946 5 gadi atpakaļ
vecāks
revīzija
2462c60cd3

+ 12 - 0
src/router/index.js

@@ -245,6 +245,18 @@ const routes = [
         meta: { title: '问卷', sub: '管理' },
         component: () => import('@/views/plan/question.vue'),
       },
+      {
+        path: '/lesson/index',
+        name: 'lesson_index',
+        meta: { title: '课程模板管理', sub: '' },
+        component: () => import('@/views/lesson/index.vue'),
+      },
+      {
+        path: '/lesson/detail',
+        name: 'lesson_detail',
+        meta: { title: '课程模板', sub: '' },
+        component: () => import('@/views/lesson/detail.vue'),
+      },
     ],
   },
   {

+ 155 - 0
src/views/lesson/detail.vue

@@ -0,0 +1,155 @@
+<template>
+  <div id="detail">
+    <detail-frame :title="pageTitle" returns="./index">
+      <data-form :data="info" :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew">
+        <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>
+          </template>
+        </template>
+        <template #custom="{item}">
+          <template v-if="item.model === 'lesson'">
+            <el-table :data="arrList" stripe border>
+              <el-table-column align="center" label="时间" prop="time"></el-table-column>
+              <el-table-column align="center" label="第一天" prop="day1"></el-table-column>
+              <el-table-column align="center" label="第二天" prop="day2"></el-table-column>
+              <el-table-column align="center" label="第三天" prop="day3"></el-table-column>
+              <el-table-column align="center" label="第四天" prop="day4"></el-table-column>
+              <el-table-column align="center" label="第五天" prop="day5"></el-table-column>
+              <el-table-column align="center" label="第六天" prop="day6"></el-table-column>
+              <el-table-column label="操作" align="center">
+                <template v-slot="{ row, $index }">
+                  <el-tooltip :key="$index" effect="dark" content="编辑" placement="bottom">
+                    <el-button type="text" size="mini" icon="el-icon-edit" @click="toEdit(row, $index)"></el-button>
+                  </el-tooltip>
+                </template>
+              </el-table-column>
+            </el-table>
+          </template>
+        </template>
+      </data-form>
+    </detail-frame>
+    <el-drawer :visible.sync="drawer" @close="toClose" direction="rtl" :with-header="false">
+      <el-tabs style="padding:10px;">
+        <el-tab-pane label="课程安排">
+          <data-form :styles="{ padding: 0 }" :data="form" :fields="oFields" :rules="{}" @save="handleOsave" :isNew="false">
+            <template #custom="{item, form}">
+              <template v-if="item.model === 'time'">
+                <el-time-select placeholder="起始时间" value-format="HH:mm" v-model="form.startTime" :picker-options="{ start: '08:00', end: '23:30' }">
+                </el-time-select>
+                <el-time-select
+                  placeholder="结束时间"
+                  value-format="HH:mm"
+                  v-model="form.endTime"
+                  :picker-options="{ start: '08:00', end: '23:30', minTime: form.startTime }"
+                >
+                </el-time-select>
+              </template>
+            </template>
+          </data-form>
+        </el-tab-pane>
+      </el-tabs>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import detailFrame from '@frame/layout/admin/detail-frame';
+import dataForm from '@frame/components/form';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'detail',
+  props: {},
+  components: { detailFrame, dataForm },
+  data: () => {
+    return {
+      drawer: false,
+      info: {},
+      form: {},
+      fields: [
+        { label: '模板名称', required: true, model: 'title' },
+        { label: '类型', required: true, model: 'type', type: 'radio' },
+        { label: '课程安排', required: true, model: 'lesson', custom: true },
+      ],
+      types: [
+        { label: '普通班', value: '0' },
+        { label: '特殊班', value: '1' },
+      ],
+      rules: {
+        title: [{ required: true, message: '请输入模板名称' }],
+        type: [{ required: true, message: '请选择模板类型' }],
+      },
+      oFields: [{ label: '时间', model: 'time', type: 'time', custom: true }],
+      arrList: [
+        { time: `8:30-11:30`, day1: '--', day2: '科目一', day3: '科目二', day4: '科目三', day5: '科目四', day6: '--' },
+        { time: `11:30-13:30`, day1: '--', day2: '午餐+休息', day3: '午餐+休息', day4: '午餐+休息', day5: '午餐+休息', day6: '--' },
+        { time: `13:30-16:30`, day1: '13:30报道;15:30开班仪式', day2: '科目一', day3: '科目二', day4: '科目三', day5: '科目四', day6: '--' },
+        { time: `16:30-17:30`, day1: '晚餐', day2: '晚餐', day3: '晚餐', day4: '晚餐', day5: '晚餐', day6: '--' },
+        { time: `17:30-19:45`, day1: '团队组建', day2: '拓展交流', day3: '课程作业小组展示	', day4: '课程作业', day5: '礼仪课小组面试	', day6: '结业仪式' },
+      ],
+    };
+  },
+  created() {},
+  methods: {
+    async search() {
+      const res = await this.fetch(this.id);
+      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.pageTitle}添加成功`;
+      } else {
+        res = await this.update(data);
+        msg = `${this.pageTitle}修改成功`;
+      }
+      if (this.$checkRes(res, msg)) this.$router.push({ path: './index' });
+    },
+    toEdit(data, index) {
+      data.index = index;
+      let times = data.time.split('-');
+      if (times.length === 2) {
+        data.stratTime = times[0];
+        data.endTime = times[1];
+      }
+
+      this.$set(this, `form`, data);
+      this.drawer = true;
+    },
+    handleOsave({ data }) {
+      console.log(data);
+    },
+    toClose() {
+      this.drawer = false;
+    },
+  },
+  watch: {
+    isNew: {
+      immediate: true,
+      handler(val) {
+        if (!val) this.search();
+      },
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    isNew() {
+      return this.$route.query.id ? false : true;
+    },
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 70 - 0
src/views/lesson/index.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="index">
+    <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" @add="$router.push({ path: '/lesson/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 { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'index',
+  props: {},
+  components: { listFrame, dataTable },
+  data: () => {
+    return {
+      opera: [
+        {
+          label: '编辑',
+          icon: 'el-icon-edit',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          icon: 'el-icon-delete',
+          method: 'delete',
+        },
+      ],
+      fields: [
+        { label: '模板名称', prop: 'title' },
+        { label: '模板类型', prop: 'type' },
+      ],
+      list: [],
+      total: 0,
+    };
+  },
+  created() {},
+  methods: {
+    // ...questionnaire(['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: '/lesson/detail', query: { id: data.id } });
+    },
+    async toDelete({ data }) {
+      const res = await this.delete(data.id);
+      this.$checkRes(res, '删除成功', '删除失败');
+      this.search();
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 2 - 2
src/views/location/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="index">
-    <list-frame title="地点管理" @query="search" :total="total" :needFilter="false" @add="$router.push({ path: '/location/detail' })">
+    <list-frame title="班级管理" @query="search" :total="total" :needFilter="false" @add="$router.push({ path: '/location/detail' })">
       <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete"></data-table>
     </list-frame>
   </div>
@@ -12,7 +12,7 @@ import dataTable from '@frame/components/data-table';
 import { createNamespacedHelpers } from 'vuex';
 const { mapActions } = createNamespacedHelpers('location');
 export default {
-  metaInfo: { title: '地点管理' },
+  metaInfo: { title: '班级管理' },
   name: 'index',
   props: {},
   components: {

+ 8 - 0
src/views/questionnaire/detail.vue

@@ -8,6 +8,13 @@
         <el-form-item label="标题" required prop="name">
           <el-input v-model="info.name"></el-input>
         </el-form-item>
+        <el-form-item label="问卷类型" required prop="type">
+          <el-radio-group v-model="info.type">
+            <el-radio label="0">常用问卷</el-radio>
+            <el-radio label="1">非常用问卷</el-radio>
+            <el-radio label="2">教师问卷</el-radio>
+          </el-radio-group>
+        </el-form-item>
         <el-form-item label="题目" prop="question">
           <el-row>
             <el-col :span="24" style="text-align:right;padding-bottom:10px">
@@ -93,6 +100,7 @@ export default {
     rules: {
       num: [{ required: true, message: '请输入序号' }],
       name: [{ required: true, message: '请输入标题' }],
+      type: [{ required: true, message: '请选择问卷类型' }],
       // question: [{ required: true, message: '请选择题目' }],
     },
     qList: [], //题库

+ 1 - 0
src/views/questionnaire/index.vue

@@ -35,6 +35,7 @@ export default {
     fields: [
       { label: '问卷序号', prop: 'num' },
       { label: '问卷标题', prop: 'name' },
+      { label: '问卷类型', prop: 'type' },
     ],
     filFields: [
       { label: '问卷名', model: 'name' },