Browse Source

试卷扫描情况

luohailiang 2 years ago
parent
commit
a678cf3593

BIN
public/images/no-data.png


+ 0 - 173
src/pages/process/kcsz/index.vue

@@ -1,173 +0,0 @@
-<template>
-  <NavHeader/>
-  <bread-crumb/>
-  <div class="w-1200px m-auto">
-    <div class="relative -mt-40px flex justify-end">
-      <button type="button" class="back-btn" @click="linkTo('process')">返回</button>
-    </div>
-    <div class="mt-10px w-full min-h-860px bg-hex-FFF py-25px px-20px">
-      <div class="flex items-center justify-between">
-        <div>
-          <img src="/images/icon-room.png" class="w-54px inline-block align-middle h-54px" alt="">
-          <h3 class="ml-10px text-20px text-hex-0148E5 inline-block align-middle">考场信息</h3>
-          <h4 class="ml-99px text-14px text-hex-0148E5 inline-block align-middle">总学生数:270人</h4>
-          <h4 class="ml-10px text-14px text-hex-0148E5 inline-block align-middle">试卷状态:</h4>
-          <h5 class="icon-state unusual inline-block align-middle"></h5>
-          <h5 class="ml-3px text-14px text-hex-FF8E00 inline-block align-middle">2</h5>
-          <h5 class="ml-10px icon-state absent inline-block align-middle"></h5>
-          <h5 class="ml-3px text-14px text-hex-909090 inline-block align-middle">21</h5>
-          <h5 class="ml-10px icon-state invalid inline-block align-middle"></h5>
-          <h5 class="ml-3px text-14px text-hex-FF0000 inline-block align-middle">21</h5>
-        </div>
-        <button type="button" class="room-btn">自动生成缺考</button>
-      </div>
-      <div class="mt-25px flex">
-        <button type="button" class="room-btn">下载二维码</button>
-        <button type="button" class="ml-15px room-btn">下载条形码</button>
-        <button type="button" class="ml-15px room-btn">选择历史考生</button>
-        <button type="button" class="ml-15px room-btn">上传考生</button>
-        <button type="button" class="ml-15px room-btn">下载模板</button>
-        <button type="button" class="ml-15px room-btn">导出</button>
-      </div>
-      <div class="mt-25px flex">
-        <el-form :inline="true" :model="searchForm" size="large">
-          <el-form-item label="学校">
-            <el-select v-model="searchForm.school" placeholder="请选择学校">
-              <el-option
-                v-for="item in school_list"
-                :label="item.label"
-                :value="item.value"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="考场">
-            <el-select v-model="searchForm.school" placeholder="请选择考场">
-              <el-option
-                v-for="item in roomList"
-                :label="item.label"
-                :value="item.value"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item>
-            <el-input
-              v-model="searchForm.keyword"
-              style="width: 200px;"
-              size="large"
-              clearable
-              placeholder="请输入关键字"
-            />
-            <el-button color="#003eee" class="ml-20px" type="primary" size="large">搜索</el-button>
-          </el-form-item>
-
-
-        </el-form>
-      </div>
-    </div>
-  </div>
-  <commonFooter/>
-</template>
-<route lang="json">
-{
-"meta":{
-"title":"考场设置",
-"breadcrumb": true
-}
-}
-</route>
-<script setup>
-import { useRouter } from "vue-router";
-const router = useRouter();
-const linkTo = (name) => {
-  router.push({ name });
-};
-let searchForm = $ref({
-  school:'',
-  room:'',
-  keyword:''
-})
-let school_list = $ref([{
-  value: '1',
-  label: '蒙阴市第一小学'
-},{
-  value: '2',
-  label: '蒙阴市第二小学'
-},{
-  value: '3',
-  label: '蒙阴市第三小学'
-},{
-  value: '4',
-  label: '蒙阴市第一中学'
-},{
-  value: '5',
-  label: '蒙阴市第二中学'
-},{
-  value: '6',
-  label: '蒙阴市第三中学'
-}])
-let roomList = $ref([{
-  value: '1',
-  label: '考场001'
-},{
-  value: '2',
-  label: '考场002'
-},{
-  value: '3',
-  label: '考场003'
-},{
-  value: '4',
-  label: '考场004'
-},{
-  value: '5',
-  label: '考场005'
-},{
-  value: '6',
-  label: '考场006'
-}])
-</script>
-
-<style lang="scss" scoped>
-.icon-state{
-  width: 27px;
-  height: 24px;
-  &.invalid{
-    background: url("/images/icon-invalid.png") center no-repeat;
-    background-size: 27px 24px;
-  }
-  &.unusual{
-    background: url("/images/icon-unusual.png") center no-repeat;
-    background-size: 27px 24px;
-  }
-  &.absent{
-    background: url("/images/icon-miss.png") center no-repeat;
-    background-size: 27px 24px;
-  }
-}
-.room-btn {
-  height: 30px;
-  border: 1px solid #003eee;
-  background: #fff;
-  border-radius: 4px;
-  padding: 0 10px;
-  font-size: 14px;
-  color: #003eee;
-
-  &:disabled {
-    background: #ccc;
-    border-color: #ccc;
-    color: #fff;
-    cursor: default;
-  }
-
-  input[type=file] {
-    position: absolute;
-    left: 0;
-    top: 0;
-    z-index: 10;
-    opacity: 0;
-    width: 100%;
-    height: 100%;
-    cursor: pointer;
-  }
-}
-</style>

+ 232 - 0
src/pages/process/paper-scan/[id].vue

@@ -0,0 +1,232 @@
+<template>
+  <NavHeader/>
+  <bread-crumb/>
+  <div class="w-1200px m-auto">
+    <div class="relative -mt-40px flex justify-end">
+      <button type="button" class="back-btn" @click="linkTo('process')">返回</button>
+    </div>
+    <div class="mt-10px w-full bg-hex-fff py-20px px-15px">
+      <div class="flex items-center">
+        <el-select v-model="sm_id" placeholder="全部学校" size="large" @change="filterData">
+          <el-option label="全部" value=""
+          />
+          <el-option
+            v-for="item in school_list"
+            :key="item.sm_id"
+            :label="item.sm_name"
+            :value="item.sm_id"
+          />
+        </el-select>
+        <el-select class="ml-20px" v-model="ykg_id" placeholder="全部考场" size="large" @change="filterData">
+          <el-option label="全部" value=""
+          />
+          <el-option
+            v-for="item in room_list"
+            :key="item.ykg_id"
+            :label="item.ykg_name"
+            :value="item.ykg_id"
+          />
+        </el-select>
+        <el-select class="ml-20px" v-model="cm_id" placeholder="全部班级" size="large" @change="filterData">
+          <el-option label="全部" value=""
+          />
+          <el-option
+            v-for="item in classes_list"
+            :key="item.cm_id"
+            :label="item.cm_name"
+            :value="item.cm_id"
+          />
+        </el-select>
+        <el-input
+          v-model="keyword"
+          class="ml-20px"
+          style="width: 200px;"
+          size="large"
+          @keyup.enter="filterData"
+          @clear="filterData"
+          clearable
+          placeholder="请输入关键字"
+        />
+        <el-button color="#003eee" class="ml-20px" type="primary" size="large" @click="filterData">搜索</el-button>
+      </div>
+      <div v-if="tableData.length > 0">
+        <table class="mt-20px data-table" cellpadding="0" cellspacing="0">
+          <tr>
+            <th>学校</th>
+            <th>考场</th>
+            <th>姓名</th>
+            <th>班级</th>
+            <th>扫描情况</th>
+          </tr>
+          <tr v-for="item in tableData">
+            <td>{{ item.sm_name }}</td>
+            <td>{{ item.ykg_name }}</td>
+            <td>{{ item.user_realname }}</td>
+            <td>{{ item.cm_name }}</td>
+            <td>
+              <span :class="item.statue === '0'?'text-hex-ff0000':''">{{ item.statue_title }}</span>
+            </td>
+          </tr>
+        </table>
+        <div class="mt-20px page-new flex justify-end">
+          <el-pagination v-model:current-page="cur_page" v-model:page-size="limit" layout="total,prev, pager, next"
+                         :total="total" :background="true" @current-change="handleSelectionChange"></el-pagination>
+        </div>
+      </div>
+      <div v-else class="no-data">
+        <div>
+          <h3 class="no-data-img"></h3>
+          <h4 class="mt-25px text-18px text-hex-0048e5 text-center">暂无数据</h4>
+        </div>
+      </div>
+    </div>
+  </div>
+  <commonFooter/>
+</template>
+<route lang="json">
+{
+"meta":{
+"title":"试卷扫描情况",
+"breadcrumb":true
+}
+}
+</route>
+<script setup>
+import {scan_list, school, ykg, cm} from "~/pages/process/paper-scan/api";
+import {useRouter} from "vue-router";
+
+const router = useRouter();
+const route = useRoute();
+const linkTo = () => {
+  window.location.href = window.GLOBAL_CONFIG.web_pc + '/webapps/page/marking-answer-sheet-liankao.html?ze_id=1018'
+};
+let sm_id = $ref('');
+let ykg_id = $ref('');
+let cm_id = $ref('');
+let school_list = $ref([]);
+let room_list = $ref([]);
+let classes_list = $ref([]);
+let keyword = $ref('');
+let tableData = $ref([]);
+let limit = $ref(10);
+let total = $ref(0);
+let cur_page = $ref(1);
+let ze_id = $ref('')
+
+function getSchool() {
+  let data = {
+    ze_id: ze_id
+  };
+  school(data).then(res => {
+    if (res.code === '1') {
+      school_list = res.data.list;
+    }
+  })
+}
+
+function getYkg() {
+  let data = {
+    ze_id: ze_id
+  };
+  ykg(data).then(res => {
+    if (res.code === '1') {
+      room_list = res.data.list;
+    }
+  })
+}
+
+function getCm() {
+  let data = {
+    ze_id: ze_id
+  };
+  cm(data).then(res => {
+    if (res.code === '1') {
+      classes_list = res.data.list;
+    }
+  })
+}
+
+function getListData() {
+  let data = {
+    ze_id: ze_id,
+    ykg_id: ykg_id,
+    sm_id: sm_id,
+    cm_id: cm_id,
+    keyword: keyword,
+    page: cur_page,
+    limit: limit,
+  };
+  scan_list(data).then(res => {
+    if (res.code === '1') {
+      tableData = res.data.page_data;
+      total = Number(res.data.total_rows);
+      cur_page = Number(res.data.page_now);
+    }
+  })
+}
+
+if (route.params.id) {
+  ze_id = route.params.id;
+  getListData();
+  getSchool();
+  getYkg();
+  getCm();
+}
+const handleSelectionChange = (val) => {
+  cur_page = val;
+  getListData();
+};
+
+function filterData() {
+  cur_page = 1;
+  getListData();
+}
+</script>
+
+<style lang="scss" scoped>
+$color: #0048e5;
+::v-deep .el-pagination.is-background .btn-next.is-active,
+::v-deep .el-pagination.is-background .btn-prev.is-active,
+::v-deep .el-pagination.is-background .el-pager li.is-active {
+  background-color: $color;
+}
+
+.data-table {
+  width: 100%;
+  table-layout: fixed;
+
+  tr:nth-child(even) {
+    background: #F1F7FF;
+  }
+
+  th {
+    height: 74px;
+    background: $color;
+    font-weight: normal;
+    text-align: center;
+    font-size: 16px;
+    color: #fff;
+  }
+
+  td {
+    padding: 15px 0;
+    font-size: 16px;
+    color: #474747;
+    text-align: center;
+  }
+}
+
+.no-data {
+  width: 100%;
+  height: 450px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  .no-data-img {
+    width: 233px;
+    height: 199px;
+    background: url("/images/no-data.png") center no-repeat;
+  }
+}
+</style>

+ 27 - 0
src/pages/process/paper-scan/api.js

@@ -0,0 +1,27 @@
+import request from "~/utils/request";
+
+export const scan_list = (data = {}) => {
+  return request({
+    url: '/yzy/xsjjdtk/smqk',
+    data,
+  })
+}
+export const school = (data = {}) => {
+  return request({
+    url: '/yzy/kcgl/get_kc_school',
+    data,
+  })
+}
+export const ykg = (data = {}) => {
+  return request({
+    url: '/yzy/kcgl/get_kc',
+    data,
+  })
+}
+export const cm = (data = {}) => {
+  return request({
+    url: '/yzy/kcgl/get_kc_class',
+    data,
+  })
+}
+