Ver Fonte

数据检查

zhangjie há 2 anos atrás
pai
commit
cba6cf5eaa

+ 35 - 0
src/assets/styles/base.scss

@@ -488,3 +488,38 @@ body {
   font-size: 12px;
   padding-right: 8px;
 }
+
+// image-list-preview
+.image-preview {
+  &-list {
+    font-size: 0;
+  }
+  &-item {
+    display: inline-block;
+    vertical-align: top;
+    width: 160px;
+    height: 160px;
+    margin: 0 10px 10px 0;
+    border: 1px solid $--color-text-gray-4;
+    position: relative;
+    overflow: hidden;
+    font-size: 14px;
+
+    &.is-active {
+      border-color: $--color-primary;
+    }
+
+    img {
+      position: absolute;
+      margin: auto;
+      max-width: 100%;
+      max-height: 100%;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      z-index: auto;
+      cursor: pointer;
+    }
+  }
+}

+ 92 - 0
src/components/ImageListPreview.vue

@@ -0,0 +1,92 @@
+<template>
+  <div class="image-list-preview">
+    <el-dialog
+      :visible.sync="modalIsShow"
+      title="图片预览"
+      top="10vh"
+      width="50%"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+      @open="visibleChange"
+    >
+      <div class="image-preview-list">
+        <div
+          v-for="(imgUrl, index) in imageList"
+          :key="imgUrl"
+          :class="[
+            'image-preview-item',
+            { 'is-active': index === curImageIndex }
+          ]"
+          title="点击查看大图"
+          @click="toPreview(index)"
+        >
+          <img :src="imgUrl" :alt="imgUrl" />
+        </div>
+      </div>
+    </el-dialog>
+
+    <!-- simple-image-preview -->
+    <simple-image-preview
+      :cur-image="curImage"
+      @on-prev="toPrevImage"
+      @on-next="toNextImage"
+      ref="SimpleImagePreview"
+    ></simple-image-preview>
+  </div>
+</template>
+
+<script>
+import SimpleImagePreview from "@/components/SimpleImagePreview";
+
+export default {
+  name: "image-list-preview",
+  components: { SimpleImagePreview },
+  props: {
+    imageList: {
+      type: Array,
+      default() {
+        return [];
+      }
+    }
+  },
+  data() {
+    return {
+      curImage: {},
+      curImageIndex: null
+    };
+  },
+  methods: {
+    visibleChange() {
+      this.curImage = {};
+      this.curImageIndex = null;
+    },
+    toPreview(index) {
+      this.curImageIndex = index;
+      this.selectImage(index);
+      this.$refs.SimpleImagePreview.open();
+    },
+    selectImage(index) {
+      this.curImage = { url: this.imageList[index] };
+    },
+    toPrevImage() {
+      if (this.curImageIndex === 0) {
+        this.curImageIndex = this.imageList.length - 1;
+      } else {
+        this.curImageIndex--;
+      }
+
+      this.selectImage(this.curImageIndex);
+    },
+    toNextImage() {
+      if (this.curImageIndex === this.imageList.length - 1) {
+        this.curImageIndex = 0;
+      } else {
+        this.curImageIndex++;
+      }
+
+      this.selectImage(this.curImageIndex);
+    }
+  }
+};
+</script>

+ 21 - 1
src/constants/menus-data.js

@@ -1019,7 +1019,16 @@ export default [
       {
         id: "511",
         name: "学期管理-新建学期",
-        url: "Add",
+        url: "done",
+        type: "BUTTON",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      },
+      {
+        id: "511",
+        name: "学期管理-新建学期",
+        url: "select",
         type: "BUTTON",
         parentId: "510",
         sequence: 1,
@@ -1065,6 +1074,17 @@ export default [
         sequence: 1,
         enable: true
       }
+    ],
+    conditions: [
+      {
+        id: "234",
+        name: "组织架构-查询条件",
+        url: "Condition",
+        type: "CONDITION",
+        parentId: "4",
+        sequence: 1,
+        enable: true
+      }
     ]
   },
   {

+ 7 - 0
src/modules/record/api.js

@@ -39,3 +39,10 @@ export const updateRecord = datas => {
 export const deleteRecord = ids => {
   return $postParam("/api/admin/sys/role/remove", { ids });
 };
+// data-check-manage
+export const dataCheckUndoListPage = datas => {
+  return $postParam("/api/admin/sys/role/list", datas);
+};
+export const dataCheckDoneListPage = datas => {
+  return $postParam("/api/admin/sys/role/list", datas);
+};

+ 6 - 0
src/modules/record/router.js

@@ -1,6 +1,7 @@
 import ScanTaskManage from "./views/ScanTaskManage";
 import RecordManage from "./views/RecordManage";
 import RecordDetail from "./views/RecordDetail";
+import DataCheckManage from "./views/DataCheckManage";
 
 export default [
   {
@@ -17,5 +18,10 @@ export default [
     path: "/record/record-detail/:recordId",
     name: "RecordDetail",
     component: RecordDetail
+  },
+  {
+    path: "/record/data-check-manage",
+    name: "DataCheckManage",
+    component: DataCheckManage
   }
 ];

+ 231 - 0
src/modules/record/views/DataCheckManage.vue

@@ -0,0 +1,231 @@
+<template>
+  <div class="data-check-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="任务:">
+            <el-select v-model="filter.taskId" placeholder="任务" filterable>
+              <el-option
+                v-for="item in taskList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </template>
+
+        <el-form-item label-width="0px">
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            @click="search"
+            >查询</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          v-if="checkPrivilege('button', 'done')"
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="todoTask"
+          >开始处理</el-button
+        >
+      </div>
+    </div>
+
+    <div class="mb-4 tab-btns">
+      <el-button
+        v-for="item in doneTypes"
+        :key="item.code"
+        size="medium"
+        :type="curDoneType === item.code ? 'primary' : 'default'"
+        @click="selectMenu(item.code)"
+      >
+        <span>{{ item.name }}</span>
+        <span v-if="item.code === 'UNDO'">({{ undoPage.total }})</span>
+        <span v-if="item.code === 'DONE'">({{ donePage.total }})</span>
+      </el-button>
+    </div>
+
+    <div v-if="curDoneType === 'UNDO'" class="part-box part-box-pad">
+      <el-table ref="TableList" :data="undoDataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="name" label="文件名称"></el-table-column>
+        <el-table-column prop="createTime" label="创建时间" width="170">
+          <span slot-scope="scope">{{
+            scope.row.createTime | timestampFilter
+          }}</span>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="undoPage.current"
+          :total="undoPage.total"
+          :page-size="size"
+          @current-change="toUndoPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <div v-else class="part-box part-box-pad">
+      <el-table ref="TableList" key="2" :data="doneDataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="taskName" label="任务(ID)"></el-table-column>
+        <el-table-column
+          prop="studentName"
+          label="姓名"
+          width="120"
+        ></el-table-column>
+        <el-table-column
+          prop="studentNumber"
+          label="学号"
+          width="140"
+        ></el-table-column>
+        <el-table-column prop="courseName" label="课程"></el-table-column>
+        <el-table-column prop="createTime" label="创建时间" width="170">
+          <span slot-scope="scope">{{
+            scope.row.createTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="已绑定图片"
+          width="120"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toDetail(scope.row)"
+            >
+              <span class="cont-link">{{ scope.row.boundImageCount }}</span>
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="donePage.current"
+          :total="donePage.total"
+          :page-size="size"
+          @current-change="toDonePage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <!-- ImageListPreview -->
+    <image-list-preview
+      ref="ImageListPreview"
+      :image-list="curImageList"
+    ></image-list-preview>
+  </div>
+</template>
+
+<script>
+import { dataCheckUndoListPage, dataCheckDoneListPage } from "../api";
+import ImageListPreview from "../../../components/ImageListPreview.vue";
+
+export default {
+  name: "data-check-manage",
+  components: { ImageListPreview },
+  data() {
+    return {
+      filter: {
+        taskId: ""
+      },
+      doneTypes: [
+        {
+          code: "UNDO",
+          name: "未处理"
+        },
+        {
+          code: "DONE",
+          name: "已处理"
+        }
+      ],
+      curDoneType: "UNDO",
+      undoDataList: [],
+      doneDataList: [],
+      size: this.GLOBAL.pageSize,
+      undoPage: {
+        current: 1,
+        total: 0
+      },
+      donePage: {
+        current: 1,
+        total: 0
+      },
+      taskList: [],
+      curImageList: []
+    };
+  },
+  methods: {
+    selectMenu(type) {
+      this.curDoneType = type;
+    },
+    toDetail(row) {
+      if (!row.imageList.length) return;
+
+      this.curImageList = row.imageList;
+      this.$refs.ImageListPreview.open();
+    },
+    search() {
+      this.toUndoPage(1);
+      this.toDonePage(1);
+    },
+    async getUndoList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.undoPage.current,
+        pageSize: this.size
+      };
+      const data = await dataCheckUndoListPage(datas);
+      this.undoDataList = data.records;
+      this.undoPage.total = data.total;
+    },
+    toUndoPage(page) {
+      this.undoPage.current = page;
+      this.getUndoList();
+    },
+    async getDoneList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.donePage.current,
+        pageSize: this.size
+      };
+      const data = await dataCheckDoneListPage(datas);
+      this.doneDataList = data.records;
+      this.donePage.total = data.total;
+    },
+    toDonePage(page) {
+      this.donePage.current = page;
+      this.getDoneList();
+    },
+    todoTask() {}
+  }
+};
+</script>