la před 2 roky
rodič
revize
2c4fb84930

+ 4 - 0
components.d.ts

@@ -11,10 +11,13 @@ declare module '@vue/runtime-core' {
   export interface GlobalComponents {
     BreadCrumb: typeof import('./src/components/BreadCrumb/index.vue')['default']
     CommonFooter: typeof import('./src/components/commonFooter/index.vue')['default']
+    copy: typeof import('./src/components/leftSider copy/index.vue')['default']
     ElAvatar: typeof import('element-plus/es')['ElAvatar']
     ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
     ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
     ElButton: typeof import('element-plus/es')['ElButton']
+    ElCollapse: typeof import('element-plus/es')['ElCollapse']
+    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
     ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
     ElDialog: typeof import('element-plus/es')['ElDialog']
@@ -35,6 +38,7 @@ declare module '@vue/runtime-core' {
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
     LeftSider: typeof import('./src/components/leftSider/index.vue')['default']
+    LeftSiderStu: typeof import('./src/components/leftSiderStu/index.vue')['default']
     NavHeader: typeof import('./src/components/NavHeader/index.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']

binární
src/assets/ksfx/downIcon.png


binární
src/assets/ksfx/examIcon.png


binární
src/assets/ksfx/upIcon.png


+ 35 - 0
src/components/leftSiderStu/index.vue

@@ -0,0 +1,35 @@
+<template>
+  <div class="leftSideMenu">
+    <div class="singleSider" v-for="(item,index) in siderList" :key="index" :class="{'activeIn':num==index}" @click="handleClick(index)">{{ item }}</div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { useRouter } from "vue-router";
+const router = useRouter();
+
+let siderList=["试题分析","我的试卷","个人成绩单"]
+let num = ref(0);
+
+const handleClick = (item) => {
+  num.value = item;
+}
+
+</script>
+
+<style lang="scss" scoped>
+.leftSideMenu{
+  background-color: #fff;
+}
+.singleSider{
+  height: 45px;
+  line-height: 45px;
+  text-align: center;
+  cursor: pointer;
+}
+.activeIn{
+  color: #0148E5;
+  background-color:#F5F8FF;
+  border-right:3px solid #0148E5;
+}
+</style>

+ 0 - 3
src/pages/ksfx/cjfx_cjd.vue

@@ -149,8 +149,6 @@ let listTitleShow = {
   ]
 }
 
-
-
 let listShow = [
   {
     kh: "2345443211",
@@ -265,7 +263,6 @@ let listShow = [
 }
 
 .listMain_title {
-
   font-size: 16px;
   color: #fff;
   background: #003eee;

+ 1 - 1
src/pages/ksfx/cjfx_fsdtj.vue

@@ -35,7 +35,7 @@
 
         </div>
 
-        <div class="h-150 mt-20px overflow-x-auto echartData" id="echartData"></div>
+        <div class="h-150px mt-20px overflow-x-auto echartData" id="echartData"></div>
 
         <div class="w-980px h-auto tableList">
            <div class="h-50px rounded flex flex-nowrap tableList_title">

+ 233 - 0
src/pages/ksfx/stu_grcjd.vue

@@ -0,0 +1,233 @@
+<template>
+  <div class="stu_grcjd">
+    <div class="w-1200px m-auto flex flex-row justify-between">
+      <div class="w-188px h-full" style="background-color: #fff;">
+        <leftSiderStu />
+      </div>
+
+      <div class="w-1012px p-4 blueBg">
+
+        <div class="flex mt-20px items-center">
+          <el-select class="mr-10px" v-model="normal_subject" placeholder="请选择学科" size="large">
+            <el-option label="全部" value="0" />
+            <el-option v-for="item in subject_list" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </div>
+
+        <div class="flex justify-between mt-4 exportBtn">
+          <div>
+            <el-button color="#003eee" type="primary" size="large">导出</el-button>
+          </div>
+        </div>
+
+        <div class="h-auto mt-9px listMain">
+          <el-table :data="tableData" style="width: 100%" height="250">
+            <el-table-column prop="km" label="科目" />
+            <el-table-column prop="mf" label="满分" />
+            <el-table-column prop="cj" label="成绩" />
+
+            <el-table-column label="班级" fixed="right">
+              <el-table-column prop="bj_pjf" label="平均分" />
+              <el-table-column prop="bj_zgf" label="最高分"  />
+            </el-table-column>
+
+            <el-table-column label="年级" fixed="right">
+              <el-table-column prop="nj_pjf" label="平均分" />
+              <el-table-column prop="nj_zgf" label="最高分"  />
+            </el-table-column>
+
+            <el-table-column label="整体考试" fixed="right">
+              <el-table-column prop="ztks_pjf" label="平均分" />
+              <el-table-column prop="ztks_zgf" label="最高分"  />
+            </el-table-column>
+
+          </el-table>
+
+        </div>
+
+        <div class="h-450px mt-20px echartData" id="echartData"></div>
+
+      </div>
+
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import * as echarts from 'echarts';
+import { useRouter } from "vue-router";
+import { skeletonProps } from 'element-plus';
+const router = useRouter();
+
+let normal_subject = $ref("");
+
+let subject_list = [{
+  value: '1',
+  label: '语文'
+}, {
+  value: '2',
+  label: '数学'
+}]
+
+const tableData = [
+  {
+    km: '语文',
+    mf: '1',
+    cj: '选择题',
+
+    bj_pjf:120,
+    bj_zgf:120,
+    nj_pjf:120,
+    nj_zgf:120,
+    ztks_pjf:120,
+    ztks_zgf:120,
+
+   bj_pjf:120,
+    bj_zgf:120,
+    nj_pjf:120,
+    nj_zgf:120,
+    ztks_pjf:120,
+    ztks_zgf:120,
+  },
+  {
+    km: '语文',
+    mf: '1',
+    cj: '选择题',
+
+   bj_pjf:120,
+    bj_zgf:120,
+    nj_pjf:120,
+    nj_zgf:120,
+    ztks_pjf:120,
+    ztks_zgf:120,
+  },
+  {
+    km: '语文',
+    mf: '1',
+    cj: '选择题',
+
+   bj_pjf:120,
+    bj_zgf:120,
+    nj_pjf:120,
+    nj_zgf:120,
+    ztks_pjf:120,
+    ztks_zgf:120,
+  },
+  {
+    km: '语文',
+    mf: '1',
+    cj: '选择题',
+
+   bj_pjf:120,
+    bj_zgf:120,
+    nj_pjf:120,
+    nj_zgf:120,
+    ztks_pjf:120,
+    ztks_zgf:120,
+  },
+  {
+    km: '语文',
+    mf: '1',
+    cj: '选择题',
+
+   bj_pjf:120,
+    bj_zgf:120,
+    nj_pjf:120,
+    nj_zgf:120,
+    ztks_pjf:120,
+    ztks_zgf:120,
+  },
+  {
+    km: '语文',
+    mf: '1',
+    cj: '选择题',
+
+   bj_pjf:120,
+    bj_zgf:120,
+    nj_pjf:120,
+    nj_zgf:120,
+    ztks_pjf:120,
+    ztks_zgf:120,
+  },
+  {
+    km: '语文',
+    mf: '1',
+    cj: '选择题',
+
+   bj_pjf:120,
+    bj_zgf:120,
+    nj_pjf:120,
+    nj_zgf:120,
+    ztks_pjf:120,
+    ztks_zgf:120,
+  },
+]
+
+onMounted(() => {
+  initChart()
+})
+
+const initChart = () => {
+  var myChart = echarts.init(document.getElementById('echartData'));
+  myChart.setOption({
+    title: {
+      text: '得分率(%)',
+    },
+    grid: {
+      left: '3%',
+      right: '4%',
+      bottom: '3%',
+      containLabel: true
+    },
+    xAxis: {
+      data: ['语文', '语文', '语文', '语文', '语文', '语文', '语文']
+    },
+    yAxis: {
+      type: 'value',
+      axisTick: {
+        show: false
+      },
+    },
+    series: [
+      {
+        type: 'bar',
+        barWidth: '40',
+        itemStyle: {
+          normal: {
+            barBorderRadius: [20, 20, 0, 0],
+            color: '#6897FF',
+            label: {
+              show: true, //开启显示
+              position: 'top', //在上方显示
+              textStyle: { //数值样式
+                color: 'black',
+                fontSize: 16
+              }
+            }
+          }
+        },
+        data: [120,200,200,150,80,70,110,130],
+      }
+    ]
+  });
+}
+
+</script>
+
+<style scoped>
+@import '@/styles/ksfx.css';
+
+.singleT {
+  flex: 1;
+  font-size: 16px;
+  line-height: 74px;
+  width: fit-content;
+  text-align: center;
+  background: #003eee;
+}
+.secFullWidth{
+  flex: 1;
+  width: fit-content;
+}
+
+</style>

+ 231 - 0
src/pages/ksfx/stu_ksfx.vue

@@ -0,0 +1,231 @@
+<template>
+  <div class="">
+    <NavHeader />
+    <bread-crumb />
+    <div class="w-1200px m-auto h-auto mastMain">
+      <div class="searchInput"></div>
+      <div class="groupExamMian">
+
+        <div class="demo-collapse">
+          <el-collapse accordion>
+            <el-collapse-item :name="index+1" v-for="(item, index) in examArrlist" :key="index" :class="{ 'bg-cusblue': index % 2 == 0 }">
+              <template #title>
+                <div class="w-full h-60px flex flex-row justify-between examSingleT" >
+                  <div>{{ item.examN }}</div>
+                  <div>参考人数:{{ item.attendExamNum }}</div>
+                  <div>满分:{{ item.fullScore }}</div>
+                  <div>最高分:{{ item.maxScore }}</div>
+                  <div>考试分析</div>
+                </div>
+              </template>
+              <div>
+                <div class="px-90px py-10px flex flex-row justify-start flex-wrap  examList" v-if="item.examPaperList">
+            <div class="h-149px p-5px mt-10px flex flex-row justify-start examListSingle"
+              v-for="(secItem, secIndex) in item.examPaperList" :key="secIndex" @click="linkTo('stu_stfx')">
+              <div class="w-2/5 relative examListSingle_left">
+                <img :src="examIcon" class="w-full h-full" alt="">
+                <div class="w-full absolute top-0 left-0 text-right text-red-500 text-3xl font-bold pr-2 scoreNum"
+                  v-if="secItem.scoreN != 0">{{ secItem.scoreN }}</div>
+                <div class="w-full absolute top-0 left-0 text-right text-red-500 text-3xl font-bold pr-2 lockExam" v-else>
+                  缺考</div>
+                <div class="w-full absolute left-0 bottom-2 text-center text-red-500 text-2xl font-bold subjectName">{{
+                  secItem.subName }}</div>
+              </div>
+              <div class="w-3/5 py-5px px-10px examListSingle_right">
+                <p class="h-1/4">学科:{{ secItem.scoreN }}</p>
+                <p class="h-1/4">总分:{{ secItem.scoreN }}</p>
+                <p class="h-1/4">客观题:{{ secItem.ObjectiveQuestion }}</p>
+                <p class="h-1/4">主观题:{{ secItem.SubjectiveQuestions }}</p>
+              </div>
+            </div>
+          </div>
+              </div>
+            </el-collapse-item>
+
+          </el-collapse>
+        </div>
+
+
+
+
+
+
+
+        <!-- <div class="examSingle" v-for="(item, index) in examArrlist" :key="index">
+          <div class="h-60px flex flex-row justify-between examSingleT" :class="{ 'bg-cusblue': index % 2 == 0 }">
+            <div>{{ item.examN }}</div>
+            <div>参考人数:{{ item.attendExamNum }}</div>
+            <div>满分:{{ item.fullScore }}</div>
+            <div>最高分:{{ item.maxScore }}</div>
+            <div class="text-blue-500">考试分析</div>
+          </div>
+          <div class="px-90px py-10px flex flex-row justify-start flex-wrap  examList" v-if="item.examPaperList">
+            <div class="h-149px p-5px mt-10px flex flex-row justify-start examListSingle"
+              v-for="(secItem, secIndex) in item.examPaperList" :key="secIndex" @click="linkTo('stu_stfx')">
+              <div class="w-2/5 relative examListSingle_left">
+                <img :src="examIcon" class="w-full h-full" alt="">
+                <div class="w-full absolute top-0 left-0 text-right text-red-500 text-3xl font-bold pr-2 scoreNum"
+                  v-if="secItem.scoreN != 0">{{ secItem.scoreN }}</div>
+                <div class="w-full absolute top-0 left-0 text-right text-red-500 text-3xl font-bold pr-2 lockExam" v-else>
+                  缺考</div>
+                <div class="w-full absolute left-0 bottom-2 text-center text-red-500 text-2xl font-bold subjectName">{{
+                  secItem.subName }}</div>
+              </div>
+              <div class="w-3/5 py-5px px-10px examListSingle_right">
+                <p class="h-1/4">学科:{{ secItem.scoreN }}</p>
+                <p class="h-1/4">总分:{{ secItem.scoreN }}</p>
+                <p class="h-1/4">客观题:{{ secItem.ObjectiveQuestion }}</p>
+                <p class="h-1/4">主观题:{{ secItem.SubjectiveQuestions }}</p>
+              </div>
+            </div>
+          </div>
+
+        </div> -->
+
+      </div>
+    </div>
+    <commonFooter />
+  </div>
+</template>
+<route lang="json">
+{
+  "meta": {
+    "title": "考试分析",
+    "breadcrumb": true
+  }
+}
+</route>
+<script setup>
+import { InfoFilled } from '@element-plus/icons-vue'
+import examIcon from '@/assets/ksfx/examIcon.png'
+import { useRouter } from "vue-router";
+import { skeletonProps } from 'element-plus';
+const router = useRouter();
+
+
+const scoreMarkSwitch = $ref(true);
+
+let examArrlist = [
+  {
+    examN: "2022-2023年下学期九年级月考",
+    attendExamNum: 1234,
+    fullScore: 180,
+    maxScore: 164,
+    examPaperList: [
+      {
+        scoreN: 99,
+        subName: "语文",
+        ObjectiveQuestion: 66,
+        SubjectiveQuestions: 33
+      },
+      {
+        scoreN: 0,
+        subName: "数学",
+        ObjectiveQuestion: 0,
+        SubjectiveQuestions: 0
+      },
+      {
+        scoreN: 99,
+        subName: "语文",
+        ObjectiveQuestion: 66,
+        SubjectiveQuestions: 33
+      },
+      {
+        scoreN: 0,
+        subName: "数学",
+        ObjectiveQuestion: 0,
+        SubjectiveQuestions: 0
+      },
+      {
+        scoreN: 99,
+        subName: "语文",
+        ObjectiveQuestion: 66,
+        SubjectiveQuestions: 33
+      }
+    ]
+  },
+  {
+    examN: "2022-2023年下学期九年级月考",
+    attendExamNum: 1234,
+    fullScore: 180,
+    maxScore: 164,
+    examPaperList: [
+      {
+        scoreN: 99,
+        subName: "语文",
+        ObjectiveQuestion: 66,
+        SubjectiveQuestions: 33
+      },
+      {
+        scoreN: 0,
+        subName: "数学",
+        ObjectiveQuestion: 0,
+        SubjectiveQuestions: 0
+      },
+      {
+        scoreN: 99,
+        subName: "语文",
+        ObjectiveQuestion: 66,
+        SubjectiveQuestions: 33
+      },
+      {
+        scoreN: 0,
+        subName: "数学",
+        ObjectiveQuestion: 0,
+        SubjectiveQuestions: 0
+      },
+      {
+        scoreN: 99,
+        subName: "语文",
+        ObjectiveQuestion: 66,
+        SubjectiveQuestions: 33
+      }
+    ]
+  },
+
+]
+
+const linkTo = (item) => {
+  router.push({ name: item });
+}
+
+</script>
+
+<style lang="scss" scoped>
+@import '@/styles/ksfx.css';
+
+::v-deep .el-collapse-item__header{
+  height: 60px;
+  border: 1px dashed grey;
+  background-color:#F1F7FF;
+}
+.mastMain {
+  background-color: #ffffff;
+  box-sizing: border-box;
+  padding: 2px;
+}
+
+.bg-cusblue {
+  background-color: #F1F7FF;
+}
+
+.examSingleT {
+  line-height: 60px;
+  box-sizing: border-box;
+  padding: 0 30px;
+}
+
+.examListSingle {
+  width: 24%;
+  background: #ffffff;
+  border: 2px solid #0148e5;
+  border-radius: 10px;
+  margin-right: 1%;
+  cursor: pointer;
+}
+
+.examListSingle:last-child {
+  margin-right: 0 !important;
+}
+
+.examListSingle_left {}</style>

+ 174 - 0
src/pages/ksfx/stu_stfx.vue

@@ -0,0 +1,174 @@
+<template>
+  <div class="stu_stfx">
+    <div class="w-1200px h-600px m-auto flex flex-row justify-between">
+      <div class="w-188px h-full" style="background-color: #fff;">
+        <leftSiderStu />
+      </div>
+
+      <div class="w-1012px p-4 blueBg">
+
+        <div class="flex mt-20px items-center">
+          <el-select class="mr-10px" v-model="normal_subject" placeholder="请选择学科" size="large">
+            <el-option label="全部" value="0" />
+            <el-option v-for="item in subject_list" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </div>
+
+        <div class="flex justify-between mt-4 exportBtn">
+          <div>
+            <el-button color="#003eee" type="primary" size="large">导出</el-button>
+          </div>
+        </div>
+
+        <div class="h-auto mt-9px listMain">
+          <el-table :data="tableData" style="width: 100%" height="250">
+            <el-table-column prop="xk" label="学科" />
+            <el-table-column prop="tm" label="题目" />
+            <el-table-column prop="lx" label="类型" />
+            <el-table-column prop="nd" label="难度" />
+            <el-table-column prop="df" label="得分" />
+            <el-table-column prop="grdf" label="个人得分" />
+
+            <el-table-column label="得分率" fixed="right">
+              <el-table-column prop="gr" label="个人" />
+              <el-table-column prop="bj" label="班级"  />
+              <el-table-column prop="bj" label="年级"  />
+              <el-table-column prop="ztks" label="整体考试" />
+            </el-table-column>
+          </el-table>
+
+        </div>
+
+      </div>
+
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from "vue-router";
+import { skeletonProps } from 'element-plus';
+const router = useRouter();
+
+let normal_subject = $ref("");
+
+let subject_list = [{
+  value: '1',
+  label: '语文'
+}, {
+  value: '2',
+  label: '数学'
+}]
+
+const tableData = [
+  {
+   xk: '语文',
+    tm: '1',
+    lx: '选择题',
+    nd: '5',
+    df: '12',
+    grdf: '12',
+
+    gr: '23%',
+    bj: '23%',
+    nj: '23%',
+    ztks:'23%',
+  },
+  {
+   xk: '语文',
+    tm: '1',
+    lx: '选择题',
+    nd: '5',
+    df: '12',
+    grdf: '12',
+
+    gr: '23%',
+    bj: '23%',
+    nj: '23%',
+    ztks:'23%',
+  },
+  {
+   xk: '语文',
+    tm: '1',
+    lx: '选择题',
+    nd: '5',
+    df: '12',
+    grdf: '12',
+
+    gr: '23%',
+    bj: '23%',
+    nj: '23%',
+    ztks:'23%',
+  },
+  {
+   xk: '语文',
+    tm: '1',
+    lx: '选择题',
+    nd: '5',
+    df: '12',
+    grdf: '12',
+
+    gr: '23%',
+    bj: '23%',
+    nj: '23%',
+    ztks:'23%',
+  },
+  {
+   xk: '语文',
+    tm: '1',
+    lx: '选择题',
+    nd: '5',
+    df: '12',
+    grdf: '12',
+
+    gr: '23%',
+    bj: '23%',
+    nj: '23%',
+    ztks:'23%',
+  },
+  {
+   xk: '语文',
+    tm: '1',
+    lx: '选择题',
+    nd: '5',
+    df: '12',
+    grdf: '12',
+
+    gr: '23%',
+    bj: '23%',
+    nj: '23%',
+    ztks:'23%',
+  },
+  {
+   xk: '语文',
+    tm: '1',
+    lx: '选择题',
+    nd: '5',
+    df: '12',
+    grdf: '12',
+
+    gr: '23%',
+    bj: '23%',
+    nj: '23%',
+    ztks:'23%',
+  },
+]
+</script>
+
+<style scoped>
+@import '@/styles/ksfx.css';
+
+.singleT {
+  flex: 1;
+  font-size: 16px;
+  line-height: 74px;
+  width: fit-content;
+  text-align: center;
+  background: #003eee;
+}
+.secFullWidth{
+  flex: 1;
+  width: fit-content;
+}
+
+</style>

+ 12 - 0
src/styles/ksfx.css

@@ -86,6 +86,18 @@
   color: #fff;
 }
 
+.listMain {
+  max-height: 600px;
+  overflow-y: auto;
+}
+
+.listMain_title {
+  font-size: 16px;
+  color: #fff;
+  background: #003eee;
+  overflow-y: auto;
+}
+
 .singleT {
   flex: 1;
   font-size: 14px;