la před 2 roky
rodič
revize
1ff3c5a39e

+ 3 - 0
components.d.ts

@@ -29,6 +29,9 @@ declare module '@vue/runtime-core' {
     ElPagination: typeof import('element-plus/es')['ElPagination']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
+    ElTable: typeof import('element-plus/es')['ElTable']
+    ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
+    LeftSider: typeof import('./src/components/leftSider/index.vue')['default']
     NavHeader: typeof import('./src/components/NavHeader/index.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']

+ 53 - 0
src/components/leftSider/index.vue

@@ -0,0 +1,53 @@
+<template>
+  <div class="leftSideMenu">
+    <el-menu default-active="2" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose">
+          <el-sub-menu index="1">
+            <template #title>
+              <el-icon>
+                <location />
+              </el-icon>
+              <span>成绩分析</span>
+            </template>
+            <el-menu-item-group title="">
+              <el-menu-item index="1-1">成绩单</el-menu-item>
+              <el-menu-item index="1-2">三率一分</el-menu-item>
+              <el-menu-item index="1-3">分数段统计</el-menu-item>
+              <el-menu-item index="1-4">平均分离差分析</el-menu-item>
+              <el-menu-item index="1-5">教师统计</el-menu-item>
+            </el-menu-item-group>
+          </el-sub-menu>
+          <el-sub-menu index="2">
+            <template #title>
+              <el-icon>
+                <document />
+              </el-icon>
+              <span>试卷分析</span>
+            </template>
+            <el-menu-item-group title="">
+              <el-menu-item index="2-1">总体分析</el-menu-item>
+              <el-menu-item index="2-1">客观题分析</el-menu-item>
+            </el-menu-item-group>
+          </el-sub-menu>
+
+        </el-menu>
+  </div>
+</template>
+
+<script lang="ts" setup>
+
+import { useRouter } from "vue-router";
+const router = useRouter();
+import { Document, Location, Setting} from '@element-plus/icons-vue';
+
+const handleOpen = (key: string, keyPath: string[]) => {
+  console.log(key, keyPath)
+}
+const handleClose = (key: string, keyPath: string[]) => {
+  console.log(key, keyPath)
+}
+
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 279 - 45
src/pages/cjfx/cjfx_cjd.vue

@@ -1,69 +1,303 @@
 <template>
-  <div>
+  <div class="cjfxCjd">
     <NavHeader />
     <bread-crumb />
 
     <div class="w-1200px m-auto flex flex-row justify-between">
       <div class="w-188">
-        <el-menu default-active="2" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose">
-          <el-sub-menu index="1">
-            <template #title>
-              <el-icon>
-                <location />
-              </el-icon>
-              <span>成绩分析</span>
-            </template>
-            <el-menu-item-group title="">
-              <el-menu-item index="1-1">成绩单</el-menu-item>
-              <el-menu-item index="1-2">三率一分</el-menu-item>
-              <el-menu-item index="1-3">分数段统计</el-menu-item>
-              <el-menu-item index="1-4">平均分离差分析</el-menu-item>
-              <el-menu-item index="1-5">教师统计</el-menu-item>
-            </el-menu-item-group>
-          </el-sub-menu>
-          <el-sub-menu index="2">
-            <template #title>
-              <el-icon>
-                <document />
-              </el-icon>
-              <span>试卷分析</span>
-            </template>
-            <el-menu-item-group title="">
-              <el-menu-item index="2-1">总体分析</el-menu-item>
-              <el-menu-item index="2-1">客观题分析</el-menu-item>
-            </el-menu-item-group>
-          </el-sub-menu>
-
-        </el-menu>
+        <leftSider />
       </div>
 
-      <div class="w-942">
-        <router-view />
+      <div class="w-942 p-4 blueBg">
+
+        <div class="flex 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>
+
+          <el-select class="mr-10px" v-model="normal_classroom" placeholder="请选择班级" size="large">
+            <el-option label="全部" value="0" />
+            <el-option v-for="item in classroom_list" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+
+          <el-select class="mr-10px" v-model="normal_school" placeholder="请选择学校" size="large">
+            <el-option label="全部" value="0" />
+            <el-option v-for="item in school_list" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+
+        </div>
+        <div class="mt-4 exportBtn">
+          <el-button color="#003eee" type="primary" size="large">导出</el-button>
+        </div>
+
+        <div class="h-218px mt-5px  bg-gray-500 py-4 pl-150px pr-100px perfectShow">
+          <div class="h-full  flex justify-between">
+            <div class="h-full bg-opacity-20 rounded singlepart" v-for="(item, index) in 5" :key="index">
+              <div class="h-1/3 text-center py-4  RankLabel">1</div>
+              <div class="text-sm p-5px RankBaseInfo">
+                <p class="h-1/4">考号:033055697</p>
+                <p class="h-1/4">成绩:13.0分</p>
+                <p class="h-1/4">名次:第一名</p>
+                <p class="h-1/4">学校:博智实验学校</p>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <div class="h-auto mt-9px listMain">
+          <div class="h-74px flex flex-wrap flex-grow justify-between rounded px-4 listMain_title">
+            <div class="singleT" :class="{ 'h-full singleD': !!([1, 2, 3].indexOf(index) + 1) }">{{ listTitleShow.kh }}</div>
+            <div class="singleT" :class="{ 'h-full singleD': !!([1, 2, 3].indexOf(index) + 1) }">{{ listTitleShow.xm }}</div>
+            <div class="singleT" :class="{ 'h-full singleD': !!([1, 2, 3].indexOf(index) + 1) }">{{ listTitleShow.bj }}</div>
+
+            <div class="h-full singleD" v-for="(secItem, secIndex) in listTitleShow.subInfo" :key="secIndex">
+              <div class="h-1/2 text-center">{{ secItem.subTitle }}</div>
+              <div class="h-1/2 flex flex-wrap flex-grow justify-between">
+                <div class="secFullWidth">{{ secItem.fs }}</div>
+                <div class="secFullWidth">{{ secItem.bp }}</div>
+                <div class="secFullWidth">{{ secItem.np }}</div>
+              </div>
+            </div>
+
+          </div>
+
+          <div class="h-60px flex flex-wrap flex-grow justify-between px-4" :class="{ 'whiteBG': (index + 1) % 2 != 1 }"
+            v-for="(item, index) in listShow" :key="index">
+
+            <div class="singleTSec" :class="{ 'h-full singleDSec': !!([1, 2, 3].indexOf(index) + 1) }">{{ item.kh }}</div>
+            <div class="singleTSec" :class="{ 'h-full singleDSec': !!([1, 2, 3].indexOf(index) + 1) }">{{ item.xm }}</div>
+            <div class="singleTSec" :class="{ 'h-full singleDSec': !!([1, 2, 3].indexOf(index) + 1) }">{{ item.bj }}</div>
+            <div class="h-full singleDSec" v-for="(secItem, secIndex) in item.subInfo" :key="secIndex">
+              <div class="h-full flex flex-wrap flex-grow justify-between">
+                <div class="secFullWidth">{{ secItem.fs }}</div>
+                <div class="secFullWidth">{{ secItem.bp }}</div>
+                <div class="secFullWidth">{{ secItem.np }}</div>
+              </div>
+            </div>
+
+          </div>
+
+        </div>
+
       </div>
     </div>
+
+    <commonFooter />
   </div>
 </template>
 <route lang="json">
-  {
-  "meta":{
-  "title":"成绩分析",
-  "breadcrumb": true
-  }
+{
+  "meta": {
+    "title": "成绩分析",
+    "breadcrumb": true
   }
-  </route>
+}
+</route>
 <script lang="ts" setup>
 import { useRouter } from "vue-router";
 const router = useRouter();
-import { Document, Location, Setting} from '@element-plus/icons-vue';
 
-const handleOpen = (key: string, keyPath: string[]) => {
-  console.log(key, keyPath)
+let normal_subject = $ref("");
+let normal_classroom = $ref("");
+let normal_school = $ref("");
+
+
+let subject_list = [{
+  value: '1',
+  label: '语文'
+}, {
+  value: '2',
+  label: '数学'
+}]
+let classroom_list = [{
+  value: '1',
+  label: '英语'
+}, {
+  value: '2',
+  label: '体育'
+}, {
+  value: '3',
+  label: '音乐'
 }
-const handleClose = (key: string, keyPath: string[]) => {
-  console.log(key, keyPath)
+];
+let school_list = [{
+  value: '1',
+  label: '学校1'
+}, {
+  value: '2',
+  label: '学校2'
+}]
+
+let listTitleShow = {
+  kh: "考号",
+  xm: "姓名",
+  bj: "班级",
+  subInfo: [
+    {
+      subTitle: "语文",
+      fs: "分数",
+      bp: "班排",
+      np: "年排",
+    },
+    {
+      subTitle: "数学",
+      fs: "分数",
+      bp: "班排",
+      np: "年排",
+    }
+  ]
 }
 
+
+
+let listShow = [
+  {
+    kh: "2345443211",
+    xm: "迪丽热巴",
+    bj: "初一(2)班",
+    subInfo: [
+      {
+        subTitle: "语文",
+        fs: "87.45",
+        bp: "1",
+        np: "1",
+      },
+      {
+        subTitle: "数学",
+        fs: "87.45",
+        bp: "1",
+        np: "1",
+      },
+
+    ]
+  },
+  {
+    kh: "2345447634",
+    xm: "李爱国",
+    bj: "初一(2)班",
+    subInfo: [
+      {
+        subTitle: "语文",
+        fs: "87.45",
+        bp: "1",
+        np: "1",
+      },
+      {
+        subTitle: "数学",
+        fs: "87.45",
+        bp: "1",
+        np: "1",
+      },
+
+    ]
+  },
+  {
+    kh: "2345443211",
+    xm: "迪丽热巴",
+    bj: "初一(2)班",
+    subInfo: [
+      {
+        subTitle: "语文",
+        fs: "87.45",
+        bp: "1",
+        np: "1",
+      },
+      {
+        subTitle: "数学",
+        fs: "87.45",
+        bp: "1",
+        np: "1",
+      },
+
+    ]
+  },
+  {
+    kh: "2345447634",
+    xm: "李爱国",
+    bj: "初一(2)班",
+    subInfo: [
+      {
+        subTitle: "语文",
+        fs: "87.45",
+        bp: "1",
+        np: "1",
+      },
+      {
+        subTitle: "数学",
+        fs: "87.45",
+        bp: "1",
+        np: "1",
+      },
+
+    ]
+  },
+
+]
+
+
+
 </script>
 
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+::v-deep .el-sub-menu__title {
+  background: #003eee;
+  color: #fff;
+}
+
+.blueBg {
+  background: #F1F7FF;
+}
+
+.whiteBG {
+  background: #fff;
+}
+
+.singlepart {
+  background-color: rgba($color: #ffffff, $alpha: 0.2);
+  color: #fff;
+}
+
+.listMain {
+  max-height: 600px;
+  overflow-y: auto;
+}
+
+.listMain_title {
+
+  font-size: 16px;
+  color: #fff;
+  background: #003eee;
+  overflow-y: auto;
+}
+
+.singleT {
+  flex: 1;
+  line-height: 74px;
+  width: fit-content;
+  text-align: center;
+}
+
+.singleD {
+  flex: 1;
+}
+
+.singleTSec {
+  width: fit-content;
+  flex: 1;
+  line-height: 60px;
+  text-align: center;
+}
+
+.singleDSec {
+  flex: 1;
+  line-height: 60px;
+}
+
+.secFullWidth {
+  width: fit-content;
+  flex: 1;
+  text-align: center;
+}
+</style>

+ 350 - 0
src/pages/cjfx/cjfx_slyf.vue

@@ -0,0 +1,350 @@
+<template>
+  <div class="cjfxCjd">
+    <NavHeader />
+    <bread-crumb />
+
+    <div class="w-1200px m-auto flex flex-row justify-between">
+      <div class="w-188px">
+        <leftSider />
+      </div>
+
+      <div class="w-1012px p-4 overflow-visible blueBg">
+
+        <div class="flex 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>
+
+          <el-select class="mr-10px" v-model="normal_classroom" placeholder="请选择班级" size="large">
+            <el-option label="全部" value="0" />
+            <el-option v-for="item in classroom_list" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+
+          <el-select class="mr-10px" v-model="normal_school" placeholder="请选择学校" size="large">
+            <el-option label="全部" value="0" />
+            <el-option v-for="item in school_list" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+
+          <el-select class="mr-10px" v-model="normal_teacher" placeholder="请选择任课老师" size="large">
+            <el-option label="全部" value="0" />
+            <el-option v-for="item in school_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>
+            <el-button color="#003eee" type="primary" size="large">导出</el-button>
+          </div>
+          <div>
+            <el-button color="#003eee" type="primary" size="large" @click="openDialog">校三率一分</el-button>
+          </div>
+        </div>
+
+        <div class="h-auto mt-9px overflow-x-auto listMain">
+          <!-- <div class="h-50px flex flex-wrap flex-grow justify-between rounded px-4 listMain_title">
+            <div class="singleT" v-for="(item,index) in listTitleShow" :key="index">{{item}}</div>
+          </div>
+
+          <div class="h-60px flex flex-wrap flex-grow justify-between px-4" v-for="(item,index) in listShow" :key="index">
+            <div class="singleTSec" >{{ item.xx }}</div>
+            <div class="singleTSec">{{ item.bj }}</div>
+            <div class="singleTSec">{{ item.pm }}</div>
+
+            <div class="singleTSec" >{{ item.pjf }}</div>
+            <div class="singleTSec">{{ item.ykrs }}</div>
+            <div class="singleTSec">{{ item.skrs }}</div>
+            <div class="singleTSec" >{{ item.zgf }}</div>
+            <div class="singleTSec">{{ item.yxrs }}</div>
+            <div class="singleTSec">{{ item.yxl}}</div>
+            <div class="singleTSec" >{{ item.jgrs }}</div>
+            <div class="singleTSec">{{ item.dfrs }}</div>
+            <div class="singleTSec">{{ item.dfl }}</div>
+            <div class="singleTSec" >{{ item.nd }}</div>
+            <div class="singleTSec">{{ item.qfd }}</div>
+            <div class="singleTSec">{{ item.bzc }}</div>
+
+          </div> -->
+
+          <el-table :data="tableData" style="width: 100%">
+            <el-table-column prop="xx" label="学校" show-overflow-tooltip width="200" />
+            <el-table-column prop="bj" label="班级" width="120" />
+            <el-table-column prop="pm" label="排名" />
+            <el-table-column prop="pjf" label="平均分" />
+            <el-table-column prop="ykrs" label="应考人数" />
+            <el-table-column prop="skrs" label="实考人数" />
+            <el-table-column prop="zgf" label="最高分" />
+            <el-table-column prop="yxrs" label="优秀人数" />
+            <el-table-column prop="yxl" label="优秀率" />
+            <el-table-column prop="jgrs" label="及格人数" />
+            <el-table-column prop="jgl" label="及格率" />
+            <el-table-column prop="dfrs" label="低分人数" />
+            <el-table-column prop="dfl" label="低分率" />
+            <el-table-column prop="nd" label="难度" />
+            <el-table-column prop="qfd" label="区分度" />
+            <el-table-column prop="bzc" label="标椎差" />
+          </el-table>
+
+          <div class="mt-4" >
+            <el-pagination background layout="prev, pager, next " :total="1000" style="justify-content: right;" />
+            </div>
+
+        </div>
+
+      </div>
+
+      <!-- dialog  -->
+      <el-dialog v-model="dialogTableVisible" title="校三率一分" style="width: 90%;">
+        <el-table :data="tableData" style="width: 100%;">
+            <el-table-column prop="xx" label="学校" show-overflow-tooltip width="200" />
+            <el-table-column prop="bj" label="班级" width="120" />
+            <el-table-column prop="pm" label="排名" />
+            <el-table-column prop="pjf" label="平均分" />
+            <el-table-column prop="ykrs" label="应考人数" />
+            <el-table-column prop="skrs" label="实考人数" />
+            <el-table-column prop="zgf" label="最高分" />
+            <el-table-column prop="yxrs" label="优秀人数" />
+            <el-table-column prop="yxl" label="优秀率" />
+            <el-table-column prop="jgrs" label="及格人数" />
+            <el-table-column prop="jgl" label="及格率" />
+            <el-table-column prop="dfrs" label="低分人数" />
+            <el-table-column prop="dfl" label="低分率" />
+            <el-table-column prop="nd" label="难度" />
+            <el-table-column prop="qfd" label="区分度" />
+            <el-table-column prop="bzc" label="标椎差" />
+        </el-table>
+        <template #footer>
+          <span class="dialog-footer">
+            <el-button type="primary" color="#003eee" @click="dialogTableVisible = false">关闭</el-button>
+          </span>
+        </template>
+      </el-dialog>
+
+
+    </div>
+
+    <commonFooter />
+  </div>
+</template>
+<route lang="json">
+{
+  "meta": {
+    "title": "成绩分析",
+    "breadcrumb": true
+  }
+}
+</route>
+<script lang="ts" setup>
+import { useRouter } from "vue-router";
+const router = useRouter();
+
+let normal_subject = $ref("");
+let normal_classroom = $ref("");
+let normal_school = $ref("");
+let normal_teacher = $ref("");
+
+
+let subject_list = [{
+  value: '1',
+  label: '语文'
+}, {
+  value: '2',
+  label: '数学'
+}]
+
+let classroom_list = [{
+  value: '1',
+  label: '英语'
+}, {
+  value: '2',
+  label: '体育'
+}, {
+  value: '3',
+  label: '音乐'
+}
+];
+
+let school_list = [{
+  value: '1',
+  label: '学校1'
+}, {
+  value: '2',
+  label: '学校2'
+}]
+
+
+let listTitleShow = {
+  xx: "学校",
+  bj: "班级",
+  pm: "排名",
+  pjf: "平均分",
+  ykrs: "应考人数",
+  skrs: "实考人数",
+  zgf: "最高分",
+  yxrs: "优秀人数",
+  yxl: "优秀率",
+  jgrs:"及格人数",
+  jgl:"及格率",
+  dfrs:"低分人数",
+  dfl:"低分率",
+  nd:"难度",
+  qfd:"区分度",
+  bzc:"标椎差",
+}
+let listShow = [
+  {
+  xx: "总体",
+  bj: "初一(2)班",
+  pm: "1",
+  pjf: "87.45",
+  ykrs: "123",
+  skrs: "123",
+  zgf: "123",
+  yxrs: "98",
+  yxl: "89%",
+  jgrs:"98",
+  jgl:"89%",
+  dfrs:"23",
+  dfl:"90%",
+  nd:"0.92",
+  qfd:"0.92",
+  bzc:"87.45",
+
+  },
+  {
+  xx: "临沂市蒙阴县乡镇小学",
+  bj: "初一(2)班名",
+  pm: "1",
+  pjf: "87.45",
+  ykrs: "123",
+  skrs: "123",
+  zgf: "123",
+  yxrs: "98",
+  yxl: "89%",
+  jgrs:"98",
+  jgl:"89%",
+  dfrs:"23",
+  dfl:"90%",
+  nd:"0.92",
+  qfd:"0.92",
+  bzc:"87.45",
+  },
+
+]
+
+
+
+const tableData = [
+  {
+  xx: "总体",
+  bj: "初一(2)班",
+  pm: "1",
+  pjf: "87.45",
+  ykrs: "123",
+  skrs: "123",
+  zgf: "123",
+  yxrs: "98",
+  yxl: "89%",
+  jgrs:"98",
+  jgl:"89%",
+  dfrs:"23",
+  dfl:"90%",
+  nd:"0.92",
+  qfd:"0.92",
+  bzc:"87.45",
+  },
+  {
+  xx: "临沂市蒙阴县乡镇小学",
+  bj: "初一(2)班",
+  pm: "1",
+  pjf: "87.45",
+  ykrs: "123",
+  skrs: "123",
+  zgf: "123",
+  yxrs: "98",
+  yxl: "89%",
+  jgrs:"98",
+  jgl:"89%",
+  dfrs:"23",
+  dfl:"90%",
+  nd:"0.92",
+  qfd:"0.92",
+  bzc:"87.45",
+  },
+]
+
+const dialogTableVisible = ref(false)
+const openDialog = () => {
+  dialogTableVisible.value = true;
+}
+
+</script>
+
+
+<style lang="scss" scoped>
+::v-deep .el-sub-menu__title {
+  background: #003eee;
+  color: #fff;
+}
+::v-deep .el-table__header thead tr th{
+  background: #003eee!important;
+  color: #fff;
+  height: 50px;
+  line-height: 50px;
+  font-weight: normal;
+}
+::v-deep .el-table__header thead tr th:first-child{
+  border-top-left-radius: 9px;
+}
+::v-deep .el-table__body tbody .el-table__row td{
+  background-color: transparent;
+}
+::v-deep .el-dialog__footer{
+  text-align: center;
+}
+.blueBg {
+  background: #F1F7FF;
+}
+
+.whiteBG {
+  background: #fff;
+}
+
+.singlepart {
+  background-color: rgba($color: #ffffff, $alpha: 0.2);
+  color: #fff;
+}
+
+.listMain {
+  min-height: 200px;
+  max-height: 600px;
+  overflow-y: auto;
+}
+
+.listMain_title {
+  font-size: 14px;
+  color: #fff;
+  background: #003eee;
+  overflow-y: auto;
+}
+
+.singleT {
+  flex: 1;
+  line-height: 50px;
+  width: fit-content;
+  text-align: center;
+}
+
+.singleD {
+  flex: 1;
+}
+
+.singleTSec {
+  width: fit-content;
+  flex: 1;
+  line-height: 60px;
+  text-align: center;
+}
+
+</style>