Browse Source

场次编辑

Michael Wang 4 years ago
parent
commit
bd3645ce86

+ 43 - 0
src/api/activity.js

@@ -0,0 +1,43 @@
+import { httpApp } from "@/plugins/axiosIndex";
+import { pickBy } from "lodash-es";
+import { object2QueryString } from "@/utils/utils";
+
+export function searchActivities({
+  examId = "",
+  code = "",
+  pageNumber = 1,
+  pageSize = 10,
+}) {
+  const data = pickBy({ examId, code, pageNumber, pageSize }, (v) => v !== "");
+  return httpApp.post("/api/admin/activity/query?" + object2QueryString(data));
+}
+
+export function saveActivity({
+  id = "",
+  code = "",
+  enable = 1,
+  examId = "",
+  finishTime = "",
+  maxDurationSeconds = 0,
+  openingSeconds = 0,
+  prepareSeconds = 0,
+  startTime = "",
+}) {
+  const data = pickBy(
+    {
+      id,
+      code,
+      enable,
+      examId,
+      finishTime,
+      maxDurationSeconds,
+      openingSeconds,
+      prepareSeconds,
+      startTime,
+    },
+    (v) => v !== ""
+  );
+  return httpApp.post("/api/admin/activity/save", data);
+}
+
+export function toggleEnableActivity() {}

+ 3 - 5
src/components/MinuteInput.vue

@@ -1,9 +1,7 @@
 <template>
 <template>
-  <el-input
-    v-model.number="minute"
-    @change="watchMinute"
-    @input="watchMinute"
-  ></el-input>
+  <el-input v-model.number="minute" @change="watchMinute" @input="watchMinute">
+    <template slot="append">分钟</template>
+  </el-input>
 </template>
 </template>
 
 
 <script>
 <script>

+ 151 - 0
src/features/examwork/ActivityManagement/ActivityManagement.vue

@@ -0,0 +1,151 @@
+<template>
+  <div>
+    <el-form :model="form" inline>
+      <el-form-item label="场次代码">
+        <el-input v-model.trim="form.code"></el-input>
+      </el-form-item>
+      <el-button @click="searchForm">查询</el-button>
+      <el-button @click="add">新增</el-button>
+      <!-- <el-button>导入</el-button> -->
+    </el-form>
+
+    <el-table :data="tableData" stripe style="width: 100%;">
+      <el-table-column type="selection" width="40" />
+      <el-table-column width="55" label="ID">
+        <span slot-scope="scope">{{ scope.row.id }}</span>
+      </el-table-column>
+      <el-table-column width="200" label="场次代码">
+        <span slot-scope="scope">{{ scope.row.code }}</span>
+      </el-table-column>
+      <el-table-column label="候考时间">
+        <span slot-scope="scope">{{ scope.row.prepareSeconds / 60 }}</span>
+      </el-table-column>
+      <el-table-column width="120" label="状态">
+        <span slot-scope="scope">{{
+          scope.row.enable | zeroOneEnableDisableFilter
+        }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="开始时间">
+        <span slot-scope="scope">{{
+          scope.row.startTime | datetimeFilter
+        }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="结束时间">
+        <span slot-scope="scope">{{ scope.row.endTime | datetimeFilter }}</span>
+      </el-table-column>
+      <el-table-column width="120" label="更新人">
+        <span slot-scope="scope">{{ scope.row.updateName }}</span>
+      </el-table-column>
+      <el-table-column sortable width="170" label="更新时间">
+        <span slot-scope="scope">{{
+          scope.row.updateTime | datetimeFilter
+        }}</span>
+      </el-table-column>
+      <el-table-column :context="_self" label="操作" width="210">
+        <div slot-scope="scope">
+          <el-button size="mini" type="primary" plain @click="edit(scope.row)">
+            编辑
+          </el-button>
+          <el-button
+            size="mini"
+            type="primary"
+            plain
+            @click="toggleEnableActivity(scope.row)"
+          >
+            {{ scope.row.enable ? "禁用" : "启用" }}
+          </el-button>
+        </div>
+      </el-table-column>
+    </el-table>
+    <div class="page float-right">
+      <el-pagination
+        @current-change="handleCurrentChange"
+        :current-page="currentPage"
+        :page-size="pageSize"
+        :page-sizes="[10, 20, 50, 100, 200, 300]"
+        @size-change="handleSizeChange"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      />
+    </div>
+
+    <ActivityManagementDialog
+      ref="theDialog"
+      :examId="examId"
+      :activity="selectedActivity"
+      @reload="searchForm"
+    />
+  </div>
+</template>
+
+<script>
+import { searchActivities, toggleEnableActivity } from "@/api/activity";
+import ActivityManagementDialog from "./ActivityManagementDialog";
+
+export default {
+  name: "ActivityManagement",
+  components: {
+    ActivityManagementDialog,
+  },
+  computed: {
+    examId() {
+      return this.$route.params.examId;
+    },
+  },
+  data() {
+    return {
+      form: {
+        orgId: "",
+        roleCode: "",
+        loginName: "",
+        name: "",
+        enableState: null,
+      },
+      tableData: [],
+      currentPage: 1,
+      pageSize: 10,
+      total: 10,
+      selectedActivity: {},
+    };
+  },
+  async created() {},
+  methods: {
+    async searchForm() {
+      const res = await searchActivities({
+        examId: this.examId,
+        code: this.form.code,
+        pageNumber: this.currentPage,
+        pageSize: this.pageSize,
+      });
+      this.tableData = res.data.data.records.records;
+      this.total = res.data.data.records.total;
+    },
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.searchForm();
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.searchForm();
+    },
+    add() {
+      this.selectedActivity = {};
+      this.$refs.theDialog.openDialog();
+    },
+    edit(activity) {
+      this.selectedActivity = activity;
+      this.$refs.theDialog.openDialog();
+    },
+    async toggleEnableActivity(activity) {
+      await toggleEnableActivity({
+        id: activity.id,
+        enable: activity.enable === 0 ? 1 : 0,
+      });
+      this.searchForm();
+    },
+  },
+};
+</script>
+
+<style></style>

+ 132 - 0
src/features/examwork/ActivityManagement/ActivityManagementDialog.vue

@@ -0,0 +1,132 @@
+<template>
+  <el-dialog
+    ref="dialog"
+    :title="(isEdit ? '编辑' : '新增') + '场次'"
+    width="450px"
+    :visible.sync="visible"
+    @close="closeDialog"
+  >
+    <el-form
+      :model="form"
+      ref="form"
+      :rules="rules"
+      label-position="right"
+      label-width="120px"
+    >
+      <el-row>
+        <el-form-item label="考试时间" prop="startTime">
+          <el-date-picker
+            v-model="form.startTime"
+            type="datetime"
+            placeholder="选择日期时间"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="交卷时间" prop="finishTime">
+          <el-date-picker
+            v-model="form.finishTime"
+            type="datetime"
+            placeholder="选择日期时间"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="考试时长" prop="prepareSeconds">
+          <MinuteInput v-model="form.maxDurationSeconds" />
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="候考时间" prop="prepareSeconds">
+          <MinuteInput v-model="form.prepareSeconds" />
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="迟到时长" prop="prepareSeconds">
+          <MinuteInput v-model="form.openingSeconds" />
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="状态" prop="enable">
+          <el-radio-group class="pull_right_sm" v-model="form.enable">
+            <el-radio :label="1">启用</el-radio>
+            <el-radio :label="0">禁用</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-row>
+      <el-row class="d-flex justify-content-center">
+        <el-button type="primary" @click="submitForm">保 存</el-button>
+        <el-button @click="closeDialog">取 消</el-button>
+      </el-row>
+    </el-form>
+  </el-dialog>
+</template>
+
+<script>
+import MinuteInput from "@/components/MinuteInput";
+import { saveActivity } from "@/api/activity";
+export default {
+  name: "ActivityManagementDialog",
+  components: { MinuteInput },
+  props: {
+    examId: String,
+    activity: Object,
+  },
+  computed: {
+    isEdit() {
+      return this.activity.id;
+    },
+  },
+  data() {
+    return {
+      visible: false,
+      form: {
+        id: "",
+        startTime: null,
+        finishTime: null,
+        prepareSeconds: 0,
+        openingSeconds: 0,
+        maxDurationSeconds: 0,
+      },
+      rules: {},
+    };
+  },
+  watch: {
+    user(val) {
+      let tmp = { ...val };
+      if (!tmp.id) {
+        tmp = {
+          id: "",
+          startTime: null,
+          finishTime: null,
+          prepareSeconds: 0,
+          openingSeconds: 0,
+          maxDurationSeconds: 0,
+        };
+      }
+      this.form = tmp;
+    },
+  },
+  methods: {
+    openDialog() {
+      this.visible = true;
+    },
+    closeDialog() {
+      this.visible = false;
+    },
+    async submitForm() {
+      let data = this.form;
+      if (this.isEdit) {
+        data = { ...data, id: this.activity.id };
+      }
+      await saveActivity(data);
+      this.$emit("reload");
+      this.closeDialog();
+    },
+  },
+};
+</script>
+
+<style></style>

+ 14 - 0
src/features/examwork/ExamManagement/ExamManagement.vue

@@ -68,6 +68,14 @@
           <el-button size="mini" type="primary" plain @click="edit(scope.row)">
           <el-button size="mini" type="primary" plain @click="edit(scope.row)">
             编辑
             编辑
           </el-button>
           </el-button>
+          <el-button
+            size="mini"
+            type="primary"
+            plain
+            @click="editActivities(scope.row)"
+          >
+            场次设置
+          </el-button>
           <el-button size="mini" type="primary" plain>
           <el-button size="mini" type="primary" plain>
             重新算分
             重新算分
           </el-button>
           </el-button>
@@ -167,6 +175,12 @@ export default {
       });
       });
       this.searchForm();
       this.searchForm();
     },
     },
+    editActivities(exam) {
+      this.$router.push({
+        name: "ActivityManagement",
+        params: { examId: exam.id },
+      });
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 10 - 2
src/router/index.js

@@ -79,7 +79,7 @@ const routes = [
         name: "ExamManagement",
         name: "ExamManagement",
         component: () =>
         component: () =>
           import(
           import(
-            /* webpackChunkName: "system" */ "../features/examwork/ExamManagement/ExamManagement.vue"
+            /* webpackChunkName: "exam" */ "../features/examwork/ExamManagement/ExamManagement.vue"
           ),
           ),
       },
       },
       {
       {
@@ -87,7 +87,15 @@ const routes = [
         name: "ExamEdit",
         name: "ExamEdit",
         component: () =>
         component: () =>
           import(
           import(
-            /* webpackChunkName: "system" */ "../features/examwork/ExamManagement/ExamEdit.vue"
+            /* webpackChunkName: "exam" */ "../features/examwork/ExamManagement/ExamEdit.vue"
+          ),
+      },
+      {
+        path: ":examId/activity",
+        name: "ActivityManagement",
+        component: () =>
+          import(
+            /* webpackChunkName: "exam" */ "../features/examwork/ActivityManagement/ActivityManagement.vue"
           ),
           ),
       },
       },
     ],
     ],

+ 2 - 2
src/views/Layout/components/menu.js

@@ -49,8 +49,8 @@ const businessMenuConfig = [
         name: "ExamManagement",
         name: "ExamManagement",
       },
       },
       {
       {
-        title: "考生管理",
-        name: "Base",
+        title: "场次管理",
+        name: "ActivityManagement",
       },
       },
       {
       {
         title: "调卷规则",
         title: "调卷规则",