xvying vor 1 Jahr
Ursprung
Commit
ab1ef9f7fb

+ 1 - 0
package.json

@@ -30,6 +30,7 @@
     "path-to-regexp": "2.4.0",
     "vue": "2.6.10",
     "vue-count-to": "^1.0.13",
+    "vue-quill-editor": "^3.0.6",
     "vue-router": "3.0.6",
     "vue-super-flow": "^1.3.6",
     "vuex": "3.1.0",

+ 20 - 3
src/router/index.js

@@ -256,7 +256,7 @@ export const asyncRoutes = [
     children: [
       {
         path: "index",
-        name: "kaohe",
+        name: "kaoheindex",
         component: () => import("@/views/kaohe/index"),
         meta: {
           title: "党员考核",
@@ -410,7 +410,7 @@ export const asyncRoutes = [
     children: [
       {
         path: "index",
-        name: "index",
+        name: "courserindex",
         component: () => import("@/views/xuexi/index"),
         meta: {
           title: "课程学习",
@@ -434,7 +434,24 @@ export const asyncRoutes = [
         meta: { title: "管理员管理", icon: "admin", roles: ["Super admin"] },
       },
     ],
-    // Super admin
+  },
+  {
+    path: "/setting",
+    component: Layout,
+    redirect: "/setting",
+    index: "",
+    children: [
+      {
+        path: "index",
+        name: "settingIndex",
+        component: () => import("@/views/setting/index"),
+        meta: {
+          title: "配置管理",
+          icon: "setting",
+          roles: ["Super admin", "Admin"],
+        },
+      },
+    ],
   },
   // {
   //   path: '/administrator',

+ 10 - 1
src/views/kaohe/api/index.js

@@ -3,7 +3,7 @@
  * @Author: 旭颖
  * @Date: 2023-03-22 13:49:36
  * @LastEditors: Please set LastEditors
- * @LastEditTime: 2023-03-24 19:19:37
+ * @LastEditTime: 2023-03-25 16:16:00
  */
 
 import request from "@/utils/request";
@@ -90,4 +90,13 @@ export function deleteFile(data) {
     method: "post",
     data,
   });
+}
+//获取配置项
+
+export function getSettings(data) {
+  return request({
+    url: "/setting/keys",
+    method: "post",
+    data,
+  });
 }

+ 25 - 4
src/views/kaohe/index.vue

@@ -3,7 +3,7 @@
  * @Author: 旭颖
  * @Date: 2023-03-22 10:15:16
  * @LastEditors: Please set LastEditors
- * @LastEditTime: 2023-03-25 14:11:00
+ * @LastEditTime: 2023-03-25 16:28:22
 -->
 <template>
   <div class="index-home" v-loading.fullscreen.lock="loadingFull">
@@ -73,7 +73,11 @@
         align="center"
       >
         <template #default="{ row }">
-          <el-button type="success" size="mini" @click="uploadFileStu(row)"
+          <el-button
+            v-if="is_open"
+            type="success"
+            size="mini"
+            @click="uploadFileStu(row)"
             >上传文件</el-button
           >
           <!-- <el-button type="primary" plain size="mini" @click="uploadList(row)"
@@ -94,7 +98,7 @@
             >查看</el-button
           >
           <el-button
-            v-if="row.is_one == 1 && row.examine && is_student"
+            v-if="row.is_one == 1 && row.examine && is_student && is_open"
             type="danger"
             size="mini"
             @click="handleDelete(row)"
@@ -112,7 +116,7 @@
 import uploadFile from "./components/uploadFile";
 import Detail from "./components/detail";
 
-import { geteExamines, deleteFile } from "./api/index";
+import { geteExamines, deleteFile, getSettings } from "./api/index";
 export default {
   components: {
     uploadFile,
@@ -123,6 +127,7 @@ export default {
       loadingFull: true,
       list: [],
       is_student: false,
+      is_open: false, //是否开始文件上传
     };
   },
   created() {
@@ -131,8 +136,24 @@ export default {
       this.is_student = true;
     }
     this.geteExamines();
+    this.getSettings();
   },
   methods: {
+    async getSettings() {
+      const { data } = await getSettings({
+        keys: ["EMAMINE_START_TIME", "EMAMINE_END_TIME"],
+      });
+      let now_time = new Date().valueOf();
+      let start_time = data.EMAMINE_END_TIME;
+      start_time = new Date(start_time).valueOf();
+      let end_time = data.EMAMINE_START_TIME;
+      end_time = new Date(end_time).valueOf();
+      if (now_time >= start_time && now_time <= end_time) {
+        this.is_open = true;
+      } else {
+        this.is_open = false;
+      }
+    },
     //学生上传文件
     uploadFileStu(row) {
       this.$refs["upload-file"].showEdit(row);

+ 25 - 3
src/views/kaohe/rewardList.vue

@@ -3,7 +3,7 @@
  * @Author: 旭颖
  * @Date: 2023-03-22 10:15:16
  * @LastEditors: Please set LastEditors
- * @LastEditTime: 2023-03-25 14:12:29
+ * @LastEditTime: 2023-03-25 16:28:49
 -->
 <template>
   <div class="index-home" v-loading.fullscreen.lock="loadingFull">
@@ -68,7 +68,7 @@
             >查看</el-button
           >
           <el-button
-            v-if="is_student == true"
+            v-if="is_student == true && is_open"
             type="danger"
             size="mini"
             @click="handleDelete(row)"
@@ -84,7 +84,12 @@
   </div>
 </template>
 <script>
-import { examineDetail, fileDetailStu, deleteFile } from "./api/index";
+import {
+  examineDetail,
+  fileDetailStu,
+  deleteFile,
+  getSettings,
+} from "./api/index";
 import checkOut from "./components/checkOut";
 import detail from "./components/detail";
 export default {
@@ -104,6 +109,7 @@ export default {
       tableData: [],
       examine_question_id: "",
       is_student: false,
+      is_open: false, //当前时间是否在上传文件时间段内
     };
   },
   created() {
@@ -120,6 +126,22 @@ export default {
     }
   },
   methods: {
+    //获取配置项
+    async getSettings() {
+      const { data } = await getSettings({
+        keys: ["EMAMINE_START_TIME", "EMAMINE_END_TIME"],
+      });
+      let now_time = new Date().valueOf();
+      let start_time = data.EMAMINE_END_TIME;
+      start_time = new Date(start_time).valueOf();
+      let end_time = data.EMAMINE_START_TIME;
+      end_time = new Date(end_time).valueOf();
+      if (now_time >= start_time && now_time <= end_time) {
+        this.is_open = true;
+      } else {
+        this.is_open = false;
+      }
+    },
     //审核
     checkOutStu() {
       this.$refs["check-out"].showEdit({

+ 27 - 0
src/views/setting/api/index.js

@@ -0,0 +1,27 @@
+import request from "@/utils/request";
+
+//获取人员列表
+
+export function getList(params) {
+  return request({
+    url: "/settings",
+    method: "get",
+    params,
+  });
+}
+
+export function doAdd(data) {
+  return request({
+    url: '/setting',
+    method: 'post',
+    data,
+  })
+}
+
+export function doEdit(data) {
+  return request({
+    url: '/setting/' + data.id,
+    method: 'put',
+    data,
+  })
+}

+ 306 - 0
src/views/setting/components/ConfigureManage.vue

@@ -0,0 +1,306 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="dialogFormVisible"
+    width="50%"
+    @close="close"
+  >
+    <el-form ref="form" label-width="100px" :model="form" :rules="rules">
+      <!-- <el-form-item label="父级" prop="parent_id">
+        <el-select
+          ref="selectblur"
+          v-model="form.parent_id"
+          placeholder="请选择上级"
+          style="width: 100%"
+          @change="$forceUpdate()"
+        >
+          <el-option
+            :label="form.parent_name"
+            style="height: auto; padding: 0"
+            :value="form.parent_id"
+          >
+            <el-tree
+              ref="tree"
+              :data="treeData"
+              default-expand-all
+              :props="defaultProps"
+              @node-click="handleNodeClick"
+            />
+          </el-option>
+        </el-select>
+      </el-form-item> -->
+      <el-form-item label="标题:" prop="name">
+        <el-input v-model="form.name" />
+      </el-form-item>
+      <el-form-item label="key:" prop="key">
+        <el-input v-model="form.key" />
+      </el-form-item>
+      <el-form-item label="类型:" prop="type">
+        <el-select
+          v-model="form.type"
+          default-first-option
+          placeholder="请选择点击类型"
+          style="width: 100%"
+        >
+          <el-option
+            v-for="item in type_list"
+            :key="item.type"
+            :label="item.name"
+            :value="item.type"
+          />
+        </el-select>
+      </el-form-item>
+      <div class="star">
+        <span class="xing">*</span>
+        <el-form-item v-if="form.type == 2" label="配置内容:" prop="value">
+          <tinymce v-model="form.value" :height="400" :width="95%" />
+        </el-form-item>
+        <el-form-item v-if="form.type == 0" label="配置内容:" prop="value">
+          <el-input v-model="form.value" />
+        </el-form-item>
+        <el-form-item v-if="form.type == 1" label="配置内容:" prop="value">
+          <el-upload
+            :action="base_url + '/upload'"
+            class="upload-demo"
+            :data="uploadData"
+            :file-list="fileList"
+            :limit="limit"
+            list-type="picture"
+            multiple
+            :on-error="uploadErr"
+            :on-success="uploadSuccess"
+          >
+            <el-button size="small" type="primary" @click="clearFile">
+              {{ title == "添加" ? "上传照片" : "重新上传" }}
+            </el-button>
+            <div slot="tip" class="el-upload__tip">
+              只能上传jpg/png文件,且不超过500kb
+            </div>
+          </el-upload>
+        </el-form-item>
+      </div>
+      <el-form-item
+        v-if="title == '编辑' && imageUrl && form.type == 1"
+        label=""
+        prop="cover"
+      >
+        <div class="ref-image">
+          <img :src="imageUrl" />
+        </div>
+      </el-form-item>
+      <el-form-item label="排序:" prop="sort">
+        <el-input v-model="form.sort" type="number" />
+      </el-form-item>
+      <el-form-item label="状态:" prop="status">
+        <el-radio-group v-model="form.status">
+          <el-radio :label="1">正常</el-radio>
+          <el-radio :label="0">禁用</el-radio>
+        </el-radio-group>
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="close">取 消</el-button>
+      <el-button v-if="title == '编辑'" type="primary" @click="save">
+        确 定
+      </el-button>
+      <el-button v-if="title == '添加'" type="primary" @click="add">
+        添 加
+      </el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+import { doEdit, doAdd, getList } from "../api/index";
+import Tinymce from "@/components/Tinymce";
+export default {
+  name: "MenuManagementEdit",
+  components: { Tinymce },
+  data() {
+    return {
+      form: {
+        status: 1,
+        sort: 0,
+        type: 2,
+        parent_id: 0,
+      },
+      type_list: [
+        {
+          type: 0,
+          name: "字符串",
+        },
+        {
+          type: 1,
+          name: "图片",
+        },
+        {
+          type: 2,
+          name: "文本",
+        },
+      ],
+      treeData: [],
+      defaultProps: {
+        children: "children",
+        label: function (data) {
+          return data.name;
+        },
+        leaf: true,
+      },
+      action: "", //图片上传地址
+      uploadShow: true,
+      uploadData: { file_type: "img", type: "cms_setting" },
+      fileList: [],
+      limit: 1,
+      imageUrl: "",
+      rules: {
+        parent_id: [
+          { required: true, trigger: "change", message: "请选择父级" },
+        ],
+        name: [{ required: true, trigger: "blur", message: "请填写参数名称" }],
+        key: [{ required: true, trigger: "blur", message: "请填写key" }],
+        type: [{ required: true, trigger: "blur", message: "请选择类型" }],
+        sort: [{ required: true, trigger: "blur", message: "请填写排序" }],
+        status: [{ required: true, trigger: "change", message: "请选择状态" }],
+      },
+      title: "",
+      dialogFormVisible: false,
+    };
+  },
+  created() {
+    // this.action = baseURL + "/base/common/upload";
+    this.fileList = [];
+  },
+  methods: {
+    // translateTitle,
+    //编辑
+    showEdit(row) {
+      this.fetchData();
+      console.log(row, "8888888888");
+      if (!row) {
+        this.title = "添加";
+      } else {
+        this.title = "编辑";
+        this.form = Object.assign({}, row);
+        this.form.parent_id = this.form.parent_id
+          ? this.form.parent_name
+          : "--";
+        console.log(this.form, "cms/setting/delete");
+        if (this.form.type == 1) {
+          this.imageUrl = this.form.value.url;
+        }
+      }
+      this.dialogFormVisible = true;
+    },
+    //上传图片
+    //上传成功
+    uploadSuccess(response) {
+      console.log(response, "图片上传成功");
+      this.form.value = response.data.id;
+      // this.form.value = response.data.url
+      this.$refs.form.validateField("cover");
+    },
+
+    //上传失败
+    uploadErr() {
+      this.$message.error("上传失败,请重新上传");
+    },
+    clearFile() {
+      console.log("上传之前");
+      this.imageUrl = "";
+    },
+    close() {
+      this.$refs["form"].resetFields();
+      this.form = this.$options.data().form;
+      this.dialogFormVisible = false;
+    },
+    //编辑保存
+    save() {
+      console.log(this.form.value, "value");
+      if (this.form.parent_id == "--") this.form.parent_id = 0;
+      if (!this.form.value) {
+        this.$message.error("请填写配置内容");
+        return;
+      }
+      this.$refs["form"].validate(async (valid) => {
+        if (valid) {
+          const { message } = await doEdit(this.form);
+          this.$baseMessage(
+            message,
+            "success",
+            false,
+            "vab-hey-message-success"
+          );
+          this.$emit("fetch-data");
+          this.close();
+        }
+      });
+    },
+    async fetchData() {
+      this.treeData = [];
+      let arr = [
+        {
+          id: 0,
+          name: "顶级",
+        },
+      ];
+      const { data } = await getList();
+      console.log(data, "编辑hhhhhhhh");
+      this.treeData = arr.concat(data);
+      console.log(arr, "arr");
+
+      console.log(this.treeData, "this.treeData");
+    },
+    handleNodeClick(node) {
+      console.log(node, "99999");
+      this.$refs.selectblur.blur();
+
+      this.form.parent_name = node.name;
+      this.form.parent_id = node.id;
+      this.$forceUpdate();
+      console.log(this.form, "form");
+    },
+    //添加保存
+    //添加
+    add() {
+      if (!this.form.value) {
+        this.$message.error("请填写配置内容");
+        return;
+      }
+      this.$refs["form"].validate(async (valid) => {
+        if (valid) {
+          const { message } = await doAdd(this.form);
+          this.$baseMessage(
+            message,
+            "success",
+            false,
+            "vab-hey-message-success"
+          );
+          this.$emit("fetch-data");
+          this.close();
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.ref-image {
+  height: 150px;
+  overflow: hidden;
+  border: solid 1px #eee;
+  border-radius: 8px;
+}
+.ref-image img {
+  width: auto;
+  height: 150px;
+}
+.star {
+  position: relative;
+}
+.xing {
+  position: absolute;
+  top: 10px;
+  left: 20px;
+  color: red;
+}
+</style>

+ 248 - 0
src/views/setting/index.vue

@@ -0,0 +1,248 @@
+<template>
+  <div class="department-management-container">
+    <div>
+      <el-form :inline="true" :model="queryForm" @submit.native.prevent>
+        <el-form-item>
+          <el-button
+            icon="el-icon-plus"
+            size="medium"
+            type="primary"
+            @click="handleEdit"
+            >添加</el-button
+          >
+        </el-form-item>
+        <el-form-item>
+          <el-input
+            size="medium"
+            v-model.trim="queryForm.name"
+            clearable
+            placeholder="请输入参数名"
+            @keyup.enter.native="queryData"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            icon="el-icon-search"
+            size="medium"
+            type="primary"
+            @click="queryData"
+          >
+            查询
+          </el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+
+    <el-table v-loading="listLoading" border :data="list" default-expand-all>
+      <!-- row-key="id"
+      :tree-props="{ children: 'children' }" -->
+      <el-table-column
+        align="center"
+        label="参数名"
+        min-width="120"
+        prop="name"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        align="center"
+        label="key"
+        min-width="120"
+        prop="key"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        align="center"
+        label="状态"
+        min-width="80"
+        prop="status"
+        show-overflow-tooltip
+      >
+        <template #default="{ row }">
+          <el-tag v-if="row.status == 1">正常</el-tag>
+          <el-tag v-if="row.status == 0" type="danger">禁用</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="排序"
+        min-width="120"
+        prop="sort"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        align="center"
+        label="创建时间"
+        min-width="120"
+        prop="created_at"
+        show-overflow-tooltip
+      />
+      <el-table-column align="center" label="操作" width="150">
+        <template #default="{ row }">
+          <el-button type="text" @click="handleEdit(row)">编辑</el-button>
+          <!-- <el-button
+            :disabled="row.children ? true : false"
+            type="text"
+            @click="handleDelete(row)"
+          >
+            删除
+          </el-button> -->
+        </template>
+      </el-table-column>
+      <template #empty>
+        <el-image class="vab-data-empty" />
+      </template>
+    </el-table>
+    <el-pagination
+      background
+      :current-page="queryForm.page"
+      :layout="layout"
+      :page-size="queryForm.per_page"
+      :page-sizes="[15, 20, 30, 40, 50, 100]"
+      :total="total"
+      @current-change="handleCurrentChange"
+      @size-change="handleSizeChange"
+    />
+    <edit ref="edit" @fetch-data="fetchData" />
+  </div>
+</template>
+
+<script>
+import { doEdit, getList } from "./api/index";
+import Edit from "./components/ConfigureManage";
+
+export default {
+  name: "ConfigureManage",
+  components: { Edit },
+  data() {
+    return {
+      list: [], //轮播图列表
+      listLoading: true,
+      layout: "total, sizes, prev, pager, next, jumper",
+      total: 0,
+      selectRows: "",
+      queryForm: {
+        page: 1,
+        per_page: 15,
+      },
+      //修改排序
+      editForm: {},
+      oldSort: 0,
+      editStatus: 0, //排序编辑状态 0为正常 1显示输入框
+      flag: false, //是否自动聚焦
+    };
+  },
+  watch: {
+    $route: {
+      handler() {
+        this.queryForm = {
+          page: 1,
+          per_page: 15,
+        };
+        this.fetchData();
+      },
+    },
+  },
+  created() {
+    this.fetchData();
+  },
+  methods: {
+    //搜索
+    queryData() {
+      this.queryForm.page = 1;
+      this.fetchData();
+    },
+    //获取列表
+    async fetchData() {
+      this.listLoading = true;
+      const { data } = await getList(this.queryForm);
+      this.list = data.data;
+      this.total = data.meta.pagination.total;
+      this.listLoading = false;
+    },
+    handleEdit(row) {
+      if (row.id) {
+        this.$refs["edit"].showEdit(row);
+      } else {
+        this.$refs["edit"].showEdit();
+      }
+    },
+    handleDelete(row) {
+      console.log(row);
+      // if (row.id) {
+      // this.$baseConfirm('你确定要删除当前项吗', null, async () => {
+      //   const { message } = await doDelete({ ids: [row.id] })
+      //   this.$baseMessage(
+      //     message,
+      //     'success',
+      //     false,
+      //     'vab-hey-message-success'
+      //   )
+      //   await this.getList()
+      // })
+      // } else {
+      //   if (this.selectRows.length > 0) {
+      //     let ids = this.selectRows.map((item) => item.id)
+      //     this.$baseConfirm('你确定要删除选中项吗', null, async () => {
+      //       const { message } = await doDelete({ ids })
+      //       this.$baseMessage(
+      //         message,
+      //         'success',
+      //         false,
+      //         'vab-hey-message-success'
+      //       )
+      //       await this.getList()
+      //     })
+      //   } else {
+      //     this.$baseMessage(
+      //       '未选中任何行',
+      //       'error',
+      //       false,
+      //       'vab-hey-message-error'
+      //     )
+      //   }
+      // }
+    },
+
+    // 分页方法
+    handleSizeChange(val) {
+      this.queryForm.per_page = val;
+      this.fetchData();
+    },
+    handleCurrentChange(val) {
+      this.queryForm.page = val;
+      this.fetchData();
+    },
+  },
+};
+</script>
+<style scoped>
+/* 修改排序样式 */
+.el-table {
+  margin-top: 0px;
+}
+.edit {
+  display: inline-block;
+  width: 110px;
+}
+.input-sort {
+  display: inline-block;
+  width: 80px;
+  margin-right: 10px;
+  margin-left: 10px;
+  border: none;
+}
+.sort-num {
+  display: inline-block;
+  margin-right: 10px;
+}
+.el-icon-edit,
+.el-icon-circle-check,
+.el-icon-circle-close {
+  color: #1890ff;
+  cursor: pointer;
+}
+.banner {
+  width: 200px;
+  height: 80px;
+}
+</style>