update:框架&智慧操场

This commit is contained in:
ltx 2026-07-09 17:59:22 +08:00
parent e33ff68c5a
commit be84942c5a
50 changed files with 1183 additions and 848 deletions

View File

@ -1,4 +1,4 @@
# base目录
# base目录
VITE_BASE_URL=/
VITE_API_BASE=http://localhost:52356
VITE_IMAGE_BASE_URL=http://localhost:52356
VITE_API_BASE=http://localhost:9991
VITE_IMAGE_BASE_URL=http://localhost:9991

View File

@ -76,4 +76,20 @@ p {
.el-alert--success.is-light .el-alert__description {
color: #3baf02 !important;
}
/* 弹窗/抽屉遮罩全局兜底:避免被页面容器的 transform/overflow 限制在当前内容区 */
.el-overlay {
position: fixed !important;
inset: 0 !important;
width: 100vw !important;
height: 100vh !important;
z-index: 3000;
}
.el-overlay-dialog {
position: fixed !important;
inset: 0 !important;
width: 100vw !important;
height: 100vh !important;
}
</style>

View File

@ -12,6 +12,10 @@ export function getSportsHallStudentsTestPageList(params) {
return http.get('/api/SportsHall/GetSportsHallStudentsTestPageList', null, false, { params })
}
export function getSummaryOfGradesStudentsTestPageList(params) {
return http.get('/api/SportsHall/GetSummaryOfGradesStudentsTestPageList', null, false, { params })
}
// 成绩推送
export function scorePush(params) {
return http.post('/api/SportsHall/ScorePush', params)

View File

@ -6,8 +6,7 @@
:close-on-click-modal="false"
:close-on-press-escape="false"
:width="width"
:before-close="handleClose"
>
:before-close="handleClose" append-to-body>
<template #title> <i :class="icon"></i> {{ title }} </template>
<div class="dia-content" :style="{ height: contentHeight + 'px' }">
<el-scrollbar style="flex: 1">

View File

@ -1,6 +1,6 @@
<template>
<div>
<el-dialog v-model="list.dialogVisible" :width="list.width" :show-close="false" :close-on-click-modal="false">
<el-dialog v-model="list.dialogVisible" :width="list.width" :show-close="false" :close-on-click-modal="false" append-to-body>
<template #header="{ titleId, titleClass }">
<div class="my-header">
<img src="@/assets/images/allImg/dialog.png" alt="">

View File

@ -169,7 +169,7 @@
padding: 0 !important;
background: #f6f9fd !important;
color: #344054 !important;
font-size: 13px !important;
font-size: 14px!important;
font-weight: 600 !important;
}

View File

@ -117,7 +117,7 @@ function goUp(row) {
padding: 0 !important;
background: #f6f9fd !important;
color: #344054 !important;
font-size: 13px !important;
font-size: 14px!important;
font-weight: 600 !important;
}

View File

@ -1,6 +1,6 @@
<template>
<div class="upLoadStudent">
<el-dialog v-model="propsData.visable" title="批量导入学生" :width="1200" :show-close=false>
<el-dialog v-model="propsData.visable" title="批量导入学生" :width="1200" :show-close=false append-to-body>
<div class="top">
<p class="mx-1">1.上传前请先下载标准Excel模板并按照标准模板中的说明编辑文件</p>
<p class="mx-1">2.一次最多上传10000行数据,文件大小不能超过10M</p>

View File

@ -1,6 +1,6 @@
<template>
<div class="upLoadStudentFace">
<el-dialog v-model="propsData.visable" title="批量导入学生" :width="1200" :show-close=false>
<el-dialog v-model="propsData.visable" title="批量导入学生" :width="1200" :show-close=false append-to-body>
<div class="top">
<p class="mx-1">1.上传前请将每张图片命名为<h3>学籍号</h3>,如:<span style="color:#A1CCFF">Student_0001</span>
</p>

View File

@ -1,6 +1,6 @@
<template>
<div class="upLoadStudent">
<el-dialog v-model="propsData.visable" title="批量导入学生" :width="1200" :show-close=false>
<el-dialog v-model="propsData.visable" title="批量导入学生" :width="1200" :show-close=false append-to-body>
<div class="top">
<p class="mx-1">1.上传前请先下载标准Excel模板并按照标准模板中的说明编辑文件</p>
<p class="mx-1">2.一次最多上传10000行数据,文件大小不能超过10M</p>

View File

@ -1,5 +1,6 @@
<template>
<commonManage>
<div style="padding: 16px;">
<commonManage>
<div class="head">
<div class="left">
<p class="desctipt">姓名:</p>
@ -72,6 +73,7 @@
/>
</div>
</commonManage>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted } from "vue";

View File

@ -110,12 +110,12 @@
</div>
<!-- 训练记录弹窗 -->
<el-dialog v-model="showTrainingDialog" title="训练记录" width="90%" top="5vh" destroy-on-close>
<el-dialog v-model="showTrainingDialog" title="训练记录" width="90%" top="5vh" destroy-on-close append-to-body>
<TrainingRecords v-if="showTrainingDialog" />
</el-dialog>
<!-- 体测记录弹窗 -->
<el-dialog v-model="showPhysicalDialog" title="体测记录" width="90%" top="5vh" destroy-on-close>
<el-dialog v-model="showPhysicalDialog" title="体测记录" width="90%" top="5vh" destroy-on-close append-to-body>
<ExaminationRecords v-if="showPhysicalDialog" />
</el-dialog>
</div>

View File

@ -120,7 +120,7 @@
<!-- 详情弹窗 -->
<el-dialog v-model="detailDialog.visible" title="体测数据详情" width="900px" :close-on-click-modal="false"
destroy-on-close>
destroy-on-close append-to-body>
<div class="detailContent" v-loading="detailDialog.loading">
<!-- 基本信息 -->
<div class="sectionTitle">基本信息</div>

View File

@ -1328,7 +1328,7 @@ function edits(e) {
height: 100%;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 72px;
display: flex;
align-items: center;
@ -1416,7 +1416,7 @@ function edits(e) {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -453,7 +453,7 @@ function exportData() {
height: 89vh;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 72px;
display: flex;
align-items: center;

View File

@ -36,7 +36,7 @@
</commonManage>
<!-- 文章详情弹窗 -->
<el-dialog v-model="data.detailDialog.show" title="文章详情" width="50%" :close-on-click-modal="false">
<el-dialog v-model="data.detailDialog.show" title="文章详情" width="50%" :close-on-click-modal="false" append-to-body>
<div class="article-detail">
<h2 class="article-title">{{ data.detailDialog.article.title }}</h2>
<div class="article-meta">
@ -62,7 +62,7 @@
</el-dialog>
<!-- 新增文章弹窗 -->
<el-drawer v-model="data.addDialog.show" direction="rtl" size="50%" :close-on-click-modal="false" :show-close="false">
<el-drawer v-model="data.addDialog.show" direction="rtl" size="50%" :close-on-click-modal="false" :show-close="false" append-to-body>
<template #header>
<p class="title">新增文章</p>
</template>
@ -98,7 +98,7 @@
</el-drawer>
<!-- 删除确认弹窗 -->
<el-dialog v-model="data.deleteDialog.show" title="提示" width="30%" :close-on-click-modal="false">
<el-dialog v-model="data.deleteDialog.show" title="提示" width="30%" :close-on-click-modal="false" append-to-body>
<span>确定要删除该文章吗?</span>
<template #footer>
<span class="dialog-footer">

View File

@ -1,8 +1,16 @@
<template>
<div style="height: 4px;"></div>
<commonManage>
<div v-if="!props.embeddedInSummary" style="height: 4px;"></div>
<commonManage :class="{ 'summary-body-side': props.embeddedInSummary }">
<div class="head">
<div class="left">
<div class="one">
<p class="desctipt">测试类别:</p>
<!-- <el-input v-model="data.CategoryId" class="m-2" placeholder="请输入测试类别" /> -->
<el-select v-model="data.CategoryId" class="m-2" clearable>
<el-option v-for="item in data.CategoryList" :key="item.id" :label="item.categoryName"
:value="item.id" />
</el-select>
</div>
<div class="one">
<p class="desctipt">老师:</p>
<!-- <el-input v-model="data.TeacherId" class="m-2" placeholder="请输入老师名称" /> -->
@ -11,9 +19,8 @@
:value="item.id" />
</el-select>
</div>
<div class="one">
<!-- <div class="one">
<p class="desctipt">年级:</p>
<!-- <el-input v-model="data.GradeId" class="m-2" placeholder="请输入年级id" /> -->
<el-select v-model="data.GradeId" class="m-2" clearable>
<el-option v-for="item in data.GradeData" :key="item.id" :label="item.gradeName"
:value="item.id" />
@ -22,10 +29,8 @@
<div class="one">
<p class="desctipt">班级:</p>
<el-input v-model="data.ClassId" class="m-2" placeholder="请输入班级" />
<!-- <el-select v-model="data.ClassId" class="m-2">
<el-option v-for="item in data.ClassData" :key="item.id" :label="item.gradeName" :value="item.id" />
</el-select> -->
</div>
</div> -->
<div class="one">
<p class="desctipt">学生学号:</p>
<el-input v-model="data.StudentNo" class="m-2" placeholder="请输入学生学号" />
@ -36,53 +41,54 @@
<el-option v-for="item in data.sexData" :key="item.id" :label="item.label" :value="item.id" />
</el-select>
</div>
<div class="one">
<p class="desctipt">测试类别:</p>
<!-- <el-input v-model="data.CategoryId" class="m-2" placeholder="请输入测试类别" /> -->
<el-select v-model="data.CategoryId" class="m-2" clearable>
<el-option v-for="item in data.CategoryList" :key="item.id" :label="item.categoryName"
:value="item.id" />
</el-select>
</div>
</div>
<div class="right" :class="{ btn: props.embeddedInSummary }">
<p v-for="(item, index) in toolbarButtons" :key="index" :class="item.className"
@click="btnClick(item.engName)">
{{ item.chinName }}</p>
</div>
</div>
<div class="right">
<p v-for="(item, index) in handelData" :key="index" :class="item.className" @click="btnClick(item.engName)">
{{ item.chinName }}</p>
</div>
<div class="cont">
<el-table :data="data.tableNeed.tableData" style="width: calc(100% - 40px); min-height: 420px; height: calc(100vh - 430px); margin:0 20px;"
fit="true"
:header-cell-style="{ 'text-align': 'center', 'font-size': '12px', 'color': '#3F404A', padding: '3px', background: '#F8F8FA', height: '50px' }"
:cell-style="getCellStyles" :row-style="{ height: '0px' }" @select="select" @select-all="select">
<el-table-column type="selection" width="55" />
<el-table-column fixed prop="ind" label="序号" />
<el-table-column prop="teacherId" label="老师" width="120" />
<!-- <el-table-column prop="gradeId" label="年级" width="120" /> -->
<!-- <el-table-column prop="categoryId" label="测试类别" width="120" /> -->
<el-table-column prop="gradeName" label="年级名称" width="120" />
<!-- <el-table-column prop="classId" label="班级" width="120"/> -->
<el-table-column prop="className" label="班级名称" />
<el-table-column prop="studentNo" label="学生学号" width="120" />
<el-table-column prop="sex" label="性别" width="120" />
<el-table-column prop="categoryName" label="测试类别" width="120" />
<el-table-column prop="value" label="测试结果" width="120" />
<el-table-column prop="motionDuration" label="运动时长/分钟" width="120" />
<el-table-column prop="consumption" label="运动消耗" width="120" />
<el-table-column prop="strength" label="运动强度" width="120" />
<el-table-column prop="score" label="得分" width="120" />
<el-table-column prop="rank" label="等级" width="120" />
<el-table-column prop="classRank" label="班级排名" width="120" />
<el-table-column prop="remarks" label="备注" />
</el-table>
<!-- <el-pagination :page-size="data.tableNeed.pageSize" :current-page="data.tableNeed.pageIndex"
layout="total,prev, pager, next" :total="data.tableNeed.total" class="pageSize"
@current-change="changePage" /> -->
<el-pagination class="pageSize" :current-page="data.tableNeed.pageIndex"
:page-size="data.tableNeed.pageSize" :page-sizes="[10, 50, 100, 200]"
layout="total, sizes, prev, pager, next, jumper" :total="data.tableNeed.total"
@size-change="handleSizeChange" @current-change="changePage" />
<div class="cont" :class="{ 'summary-cont': props.embeddedInSummary }">
<div :class="{ 'summary-table-card': props.embeddedInSummary }">
<el-table :data="data.tableNeed.tableData"
:style="props.embeddedInSummary
? { width: '100%', minHeight: '420px', height: 'calc(100vh - 430px)', margin: '0' }
: { width: 'calc(100% - 40px)', minHeight: '420px', height: 'calc(100vh - 430px)', margin: '0 20px' }" fit="true"
:header-cell-style="{ 'text-align': 'center', 'font-size': '12px', 'color': '#3F404A', padding: '3px', background: '#F8F8FA', height: '50px' }"
:cell-style="getCellStyles" :row-style="{ height: '0px' }">
<el-table-column fixed prop="ind" label="序号" />
<el-table-column prop="teacherId" label="老师" width="120" />
<!-- <el-table-column prop="gradeId" label="年级" width="120" /> -->
<!-- <el-table-column prop="categoryId" label="测试类别" width="120" /> -->
<el-table-column prop="gradeNameAndClassName" label="年级-班级" width="160" />
<el-table-column prop="studentNo" label="学生学号" width="120" />
<el-table-column prop="sex" label="性别" width="80" />
<el-table-column prop="categoryName" label="测试类别" width="120" />
<el-table-column prop="value" label="测试结果" width="120" />
<el-table-column prop="motionDuration" label="运动时长/分钟" width="120" />
<el-table-column prop="consumption" label="运动消耗" width="120" />
<el-table-column prop="strength" label="运动强度" width="120" />
<el-table-column prop="score" label="得分" width="120" />
<el-table-column prop="rank" label="等级" width="120" />
<el-table-column prop="classRank" label="班级排名" width="120" />
<!-- <el-table-column prop="remarks" label="备注" /> -->
<el-table-column v-if="showRowOperate" label="操作" width="140" fixed="right">
<template #default="{ row }">
<div class="operate">
<p class="edit" @click="editTable(row)">编辑</p>
<p class="delete" @click="deleteOne(row)">删除</p>
</div>
</template>
</el-table-column>
</el-table>
<!-- <el-pagination :page-size="data.tableNeed.pageSize" :current-page="data.tableNeed.pageIndex"
layout="total,prev, pager, next" :total="data.tableNeed.total" class="pageSize"
@current-change="changePage" /> -->
<el-pagination class="pageSize" :current-page="data.tableNeed.pageIndex"
:page-size="data.tableNeed.pageSize" :page-sizes="[10, 50, 100, 200]"
layout="total, sizes, prev, pager, next, jumper" :total="data.tableNeed.total"
@size-change="handleSizeChange" @current-change="changePage" />
</div>
</div>
</commonManage>
<commonDialog :list="data.dialogData" @cancle="cancle" @confirm="confirm" v-if="data.dialogData.dialogVisible">
@ -127,25 +133,25 @@
</commonDialog>
</template>
<script lang="ts" setup>
import { ref, onMounted, onUnmounted } from 'vue';
import { computed, ref, onMounted, onUnmounted } from 'vue';
import commonManage from '@/components/commonManage/index.vue';
import commonTable from '@/components/commonTable/index.vue';
import commonDialog from '@/components/commonDialog/index.vue';
import { useRoute } from 'vue-router';
import { useStore } from 'vuex';
import * as _api from '@/api/grade';
import eventBus from '@/eventBus.js'; // 导入事件总线
import { ElMessage } from 'element-plus';
import axios from 'axios';
const props = withDefaults(defineProps<{
embeddedInSummary?: boolean
}>(), {
embeddedInSummary: false
})
const form = new FormData();
const formRef = ref(null)
const formRef1 = ref(null)
const formRef2 = ref(null)
const route = useRoute();
const currentRoute = route.path; //获取当前页面路由
const store = useStore();
let permissionItem = store.getters.getPermission(currentRoute) || store.getters.getPermission('/bodySideData') || { permission: [] };
let buttons = permissionItem.permission || [];
useRoute();
let contrast = {
'查询': 'Search',
'新增': 'Add',
@ -156,7 +162,8 @@ let contrast = {
} //对照表
let handelData = ref<any>([]) //接收处理后的按钮数据
buttons.map((i) => {
const defaultButtons = ['Search', 'Add', 'Export', 'Import', 'Update', 'Delete']
defaultButtons.map((i) => {
handelData.value.push({
engName: i,
chinName: '',
@ -192,6 +199,8 @@ handelData.value.sort((a, b) => {
return 0;
}
});
const toolbarButtons = computed(() => handelData.value.filter((item) => item.engName !== 'Export' && item.engName !== 'Update' && item.engName !== 'Update' && item.engName !== 'Delete'))
const showRowOperate = computed(() => true)
const ruleForm = ref({
studentNo: '',
categoryEnum: '',
@ -293,10 +302,6 @@ const data = ref({
showIcon: false,
fileList: {}
})
const select = (val) => {
console.log(val, 'vallll')
data.value.checkData = val
}
function getCellStyles({ row, column, rowIndex, columnIndex }) {
const prop = column.property;
return {
@ -346,13 +351,31 @@ const changePage = (e) => {
data.value.tableNeed.pageIndex = e
initApi(data.value)
}
const handleSizeChange= (e) => {
const handleSizeChange = (e) => {
data.value.tableNeed.pageSize = e
initApi(data.value)
}
const changeTd = (e) => {
console.log(e, 'eeeechangeTd')
}
function editTable(row) {
data.value.isImport = false
num.value = 2
data.value.dialogData.dialogVisible = true
data.value.dialogData.title = '编辑'
ruleForm.value = {
id: row.id,
studentNo: row.studentNo,
categoryEnum: row.categoryId,
value: row.value,
motionDuration: row.motionDuration,
consumption: row.consumption,
}
}
function deleteOne(row) {
num.value = 1
DeleteList(row.id)
}
//点击取消
const cancle = (val) => {
@ -403,36 +426,10 @@ function btnClick(val) {
data.value.dialogData.title = '新增体测数据'
break
case 'Update':
data.value.isImport = false
num.value = 2
if (data.value.checkData.length == 0) {
ElMessage.error('请选择需要编辑的行')
} else if (data.value.checkData.length > 1) {
ElMessage.error('只能选择一行进行编辑')
} else {
data.value.dialogData.dialogVisible = true
data.value.dialogData.title = '编辑'
ruleForm.value = {
id: data.value.checkData[0].id,
studentNo: data.value.checkData[0].studentNo,
categoryEnum: data.value.checkData[0].categoryId,
value: data.value.checkData[0].value,
motionDuration: data.value.checkData[0].motionDuration,
consumption: data.value.checkData[0].consumption,
}
}
ElMessage.warning('请在表格行内点击编辑')
break
case 'Delete':
num.value = 1
if (data.value.checkData.length == 0) {
ElMessage.error('请选择需要删除的行')
} else if (data.value.checkData.length > 1) {
ElMessage.error('只能选择一行进行删除')
} else {
DeleteList(data.value.checkData[0].id)
}
ElMessage.warning('请在表格行内点击删除')
break
case 'Export':
exportData(data.value)
@ -470,6 +467,7 @@ async function initApi(val) {
val.tableNeed.tableData = res.data.datas;
val.tableNeed.tableData.map((i, index) => {
i.ind = val.tableNeed.pageSize * (val.tableNeed.pageIndex - 1) + index + 1
i.gradeNameAndClassName = [i.gradeName, i.className].filter(Boolean).join('-')
data.value.teacherData.map((v) => {
if (v.id == i.teacherId) {
i.teacherId = v.teacherName
@ -669,10 +667,11 @@ async function AddList() {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 12px 16px;
gap: 12px 0px;
overflow: visible;
.one {
width: 250px;
width: 270px !important;
height: 36px;
display: flex;
align-items: center;
@ -734,6 +733,7 @@ async function AddList() {
user-select: none;
}
}
.operate {
display: flex;
align-items: center;
@ -844,6 +844,137 @@ async function AddList() {
margin-top: 20px;
}
:deep(.el-pagination) {
height: 56px;
margin: 0 20px !important;
padding: 0 4px;
display: flex;
align-items: center;
justify-content: flex-end;
}
:deep(.el-pagination .btn-prev),
:deep(.el-pagination .btn-next),
:deep(.el-pagination .el-pager li),
:deep(.el-pagination .el-input__wrapper) {
border-radius: 7px;
}
:deep(.el-pagination .el-pager li.is-active) {
color: #ffffff;
background: #176be7;
}
.summary-body-side {
background: transparent;
border: none;
border-radius: 0;
box-shadow: none;
overflow: visible;
.head {
width: calc(100% - 32px) !important;
min-height: 76px;
margin: 12px auto;
padding: 16px 18px 14px;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 12px 16px;
background: linear-gradient(180deg, #ffffff 0%, #f8fbff 100%);
border: 1px solid #edf1f7;
border-radius: 8px;
box-sizing: border-box;
.left {
width: auto;
flex: 1 1 auto;
height: auto;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 12px 16px;
.one {
width: 292px;
height: 36px;
margin-left: 0;
p {
width: 76px;
padding-right: 10px;
box-sizing: border-box;
text-align: right;
}
.m-2 {
width: 216px;
margin-left: 0;
}
}
}
.right.btn {
width: auto;
min-height: 36px;
margin-left: auto;
padding: 0;
justify-content: flex-end;
gap: 10px;
.Search,
.Add,
.Update,
.Delete,
.Export,
.Import {
min-width: 80px;
height: 35px;
padding: 0 16px;
border-radius: 8px;
border: 1px solid #176be7;
background: #4188FE;
box-shadow: none;
line-height: 35px;
}
}
}
.summary-cont {
width: calc(100% - 32px);
margin: 0 auto;
padding: 0 0 16px;
box-sizing: border-box;
}
.summary-table-card {
width: 100%;
overflow: hidden;
border: 1px solid #e7eef8;
border-radius: 10px;
padding: 16px;
padding-bottom: 0;
background: #ffffff;
box-shadow: 0 8px 22px rgba(29, 68, 130, 0.06);
}
:deep(.el-table) {
width: 100% !important;
margin: 0 !important;
border-radius: 0;
border: none;
box-shadow: none;
border: 1px solid #e7eef8;
border-radius: 10px;
// height: calc(100vh - 370px) !important;
}
:deep(.el-pagination) {
margin: 14px 18px 18px !important;
}
}
.uploadFileName {
width: 100%;
height: 80px;
@ -879,4 +1010,4 @@ async function AddList() {
}
}
</style>
</style>

View File

@ -238,7 +238,7 @@ export default {
margin-top: 2px;
}
.ivu-card {
box-shadow: 0 3px 13px rgba(117, 114, 114, 0.47);
box-shadow: 0 3px 14pxrgba(117, 114, 114, 0.47);
display: flex;
position: relative;
padding-top: 10px;
@ -309,7 +309,7 @@ export default {
}
.order-range .order-item {
box-shadow: 0 3px 13px rgba(117, 114, 114, 0.47);
box-shadow: 0 3px 14pxrgba(117, 114, 114, 0.47);
flex: 1;
border-radius: 6px;
font-size: 14px;

View File

@ -32,7 +32,7 @@
</div>
<!-- 导出报告弹出框 -->
<el-dialog v-model="exportDialogVisible" title="导出报告" width="520px" class="classroom-report-export"
align-center :close-on-click-modal="false">
align-center :close-on-click-modal="false" append-to-body>
<div class="export-dialog-body">
<span class="export-label">选择时间段:</span>
<el-date-picker v-model="exportTimeRange" type="datetimerange" range-separator="至"
@ -847,7 +847,7 @@ function processChartData(rawData) {
.eacharts1,
.eacharts2,
.eacharts3 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 300px;
p {
@ -879,7 +879,7 @@ function processChartData(rawData) {
height: 100%;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 72px;
display: flex;
align-items: center;
@ -984,7 +984,7 @@ function processChartData(rawData) {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -371,7 +371,7 @@ const sexList = ['男','女']
</ConfigProvider>
</div>
<el-dialog center v-model="showModal" title="学生课堂报告" width="90%" :before-close="handleOk">
<el-dialog center v-model="showModal" title="学生课堂报告" width="90%" :before-close="handleOk" append-to-body>
<div style="padding: 20px 20px 0 ;">
<div class="card-header">基本信息</div>
<div class="info">

View File

@ -364,7 +364,7 @@ function exportD() {
height: 100%;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 140px;
display: flex;
flex-wrap: wrap;
@ -451,7 +451,7 @@ function exportD() {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -161,7 +161,8 @@ const data = ref({
pageIndex: 1,
pageSize: 10,
total: 0,
height: 'calc(100vh - 210px)',
height: 'calc(100vh - 270px)',
width: 'calc(70vw - 24px)',
tdHeight: '56px',
tableLabel: [
{
@ -470,11 +471,11 @@ div {
display: flex;
.right {
width: 100%;
height: 100%;
width: calc(100% - 32px);
margin: 0 12px;
.head {
width: calc(100% - 24px);
height: 72px;
display: flex;
align-items: center;
@ -566,7 +567,7 @@ div {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -93,7 +93,7 @@
</div>
<!-- 溢出菜单已改为水平滚动,Teleport 面板保留备用 -->
<el-drawer title="选择主题" v-model="drawer_model" direction="rtl" destroy-on-close>
<el-drawer title="选择主题" v-model="drawer_model" direction="rtl" destroy-on-close append-to-body>
<div class="theme-selector">
<div @click="changeTheme(item.name)" class="item" v-for="(item, index) in theme_color" :key="index"
:style="{ background: item.color }">
@ -104,7 +104,7 @@
</div>
</el-drawer>
<el-drawer title="消息列表" v-model="messageModel" direction="rtl" destroy-on-close>
<el-drawer title="消息列表" v-model="messageModel" direction="rtl" destroy-on-close append-to-body>
<Message :list="messageList"></Message>
</el-drawer>
</div>
@ -1065,7 +1065,7 @@ function showTime() {
i,
button {
font-size: 13px !important;
font-size: 14px!important;
}
}

View File

@ -792,7 +792,7 @@ img:not([src]) {
}
.header-navigation {
// box-shadow: -7px 11px 10px -13px #678aa7;
// box-shadow: -7px 11px 10px -14px#678aa7;
border-bottom: 1px solid #eee;
height: 32px;
overflow: hidden;

View File

@ -143,8 +143,8 @@
min-width: 68px;
margin: 0;
color: #4e5969 !important;
font-size: 13px !important;
font-weight: 500 !important;
font-size: 14px !important;
font-weight: 600 !important;
line-height: 36px;
text-align: right !important;
white-space: nowrap;

View File

@ -36,8 +36,8 @@
min-width: 68px;
margin: 0;
color: #4e5969 !important;
font-size: 13px !important;
font-weight: 500 !important;
font-size: 14px !important;
font-weight: 600 !important;
line-height: 36px;
text-align: right !important;
white-space: nowrap;
@ -136,7 +136,7 @@
box-shadow: 0 7px 16px rgba(47, 141, 255, 0.2);
color: #ffffff !important;
font-size: 14px !important;
font-weight: 500 !important;
font-weight: 600 !important;
line-height: 34px !important;
}
}

View File

@ -58,14 +58,14 @@ function exportData() {
border-radius: 10px;
.table {
width: calc(100% - 24px);
width: calc(100% - 32px);
background-color: #fff;
border-radius: 8px;
margin: 0 auto;
.tableExport {
width: 100%;
height: 30px;
height: 16px;
display: flex;
align-items: center;
justify-content: right;

View File

@ -297,7 +297,7 @@ function exportData() {
height: auto;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 120px;
display: flex;
flex-wrap: wrap;
@ -384,7 +384,7 @@ function exportData() {
}
.table {
width: calc(100% - 24px);
width: calc(100% - 32px);
background-color: #fff;
border-radius: 8px;
margin: 0 auto;

View File

@ -84,7 +84,7 @@ function handleExport() {
.table {
width: calc(100% - 24px);
width: calc(100% - 32px);
background-color: #fff;
border-radius: 8px;
margin: 0 auto;

View File

@ -950,7 +950,7 @@ function exportF() {
height: 100%;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 122px;
display: flex;
align-items: center;
@ -1038,7 +1038,7 @@ function exportF() {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -52,15 +52,16 @@ function exportData() {
height: 100%;
background-color: #fff;
border-radius: 10px;
border: 1px solid #E4E6ED;
.table {
width: calc(100% - 24px);
width: calc(100% - 32px);
background-color: #fff;
border-radius: 8px;
margin: 0 auto;
.tableExport {
width: 100%;
height: 30px;
height: 16px;
display: flex;
align-items: center;
justify-content: right;

File diff suppressed because it is too large Load Diff

View File

@ -50,15 +50,17 @@ function exportData() {
height: auto;
border-radius: 10px;
background-color: #fff;
border: 1px solid #E4E6ED;
box-sizing: border-box;
.table {
width: calc(100% - 24px);
width: calc(100% - 32px);
background-color: #fff;
border-radius: 8px;
margin: 0 auto;
.tableExport {
width: 100%;
height: 30px;
height: 16px;
display: flex;
align-items: center;
justify-content: right;

View File

@ -267,7 +267,7 @@ const report = (val) => {
background: #f5f8fc !important;
border-bottom: 1px solid #e7eef8 !important;
color: #344054 !important;
font-size: 13px !important;
font-size: 14px!important;
font-weight: 600;
}

View File

@ -84,7 +84,7 @@ function handleExport() {
.table {
width: calc(100% - 24px);
width: calc(100% - 32px);
background-color: #fff;
border-radius: 8px;
margin: 0 auto;

View File

@ -252,7 +252,7 @@ function exportData() {
height: auto;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 120px;
display: flex;
flex-wrap: wrap;
@ -340,7 +340,7 @@ function exportData() {
}
.table {
width: calc(100% - 24px);
width: calc(100% - 32px);
background-color: #fff;
border-radius: 8px;
margin: 0 auto;

View File

@ -5,7 +5,7 @@
<div class="head">
<div style="display: flex;">
<div class="one">
<p>项目:</p>
<p>项目类型:</p>
<el-select v-model="data.leftOneActive" placeholder="请选择项目" @change="changeProject">
<el-option v-for="item in data.leftOneData" :key="item.id" :label="item.itemTypeName"
:value="item.id" />
@ -815,7 +815,7 @@ function exportF() {
height: 100%;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 80px;
display: flex;
align-items: center;
@ -903,7 +903,7 @@ function exportF() {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -204,7 +204,7 @@ async function GetVisionDataListApi() {
height: 100%;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 72px;
display: flex;
align-items: center;
@ -293,7 +293,7 @@ async function GetVisionDataListApi() {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -42,7 +42,7 @@
</commonManage>
<div class="addTeacherDrawer">
<el-drawer v-model="data.drawerDialog.show" direction="rtl" size="50%" :close-on-click-modal="false"
:show-close=false>
:show-close=false append-to-body>
<template #header>
<p class="title">{{ data.dialogTitle }}</p>
@ -105,7 +105,7 @@
</div>
<div class="addTeacherDrawer">
<el-drawer v-model="data.drawerDialog.show1" direction="rtl" size="50%" :close-on-click-modal="false"
:show-close=false>
:show-close=false append-to-body>
<template #header>
<p class="title">{{ data.dialogTitle }}</p>

View File

@ -114,8 +114,7 @@
<el-dialog
v-model="resourceTypeDialog.visible"
:title="resourceTypeDialog.isEdit ? '编辑资源类型' : '添加资源类型'"
width="500px"
>
width="500px" append-to-body>
<el-form :model="resourceTypeForm" label-width="100px" :rules="resourceTypeRules" ref="resourceTypeFormRef">
<!--
<el-form-item label="上级类型" v-if="!resourceTypeDialog.isEdit || resourceTypeForm.parentId !== 0">
@ -149,8 +148,7 @@
<el-dialog
v-model="resourceDialog.visible"
:title="resourceDialog.isEdit ? '编辑资源' : '上传资源'"
width="500px"
>
width="500px" append-to-body>
<el-form :model="resourceForm" label-width="100px" :rules="resourceRules" ref="resourceFormRef">
<!--
<el-form-item label="资源类型" v-if="!resourceDialog.isEdit">
@ -222,7 +220,7 @@
</el-dialog>
<!-- 预览对话框 -->
<el-dialog v-model="previewDialog.visible" title="资源预览" width="80%" fullscreen>
<el-dialog v-model="previewDialog.visible" title="资源预览" width="80%" fullscreen append-to-body>
<div class="preview-container" v-loading="previewLoading">
<!-- 图片预览 -->
<div v-if="isImage(previewDialog.resource)" class="image-preview">

View File

@ -89,7 +89,7 @@ function edit(e) {
width: 100%;
height: auto;
.table {
width: calc(100% - 24px);
width: calc(100% - 32px);
background-color: #fff;
border-radius: 8px;
margin: 0 auto;

View File

@ -638,7 +638,7 @@ async function AddPhoto(val) {
height: auto;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -141,7 +141,7 @@
<!-- 导入成绩弹窗 -->
<el-dialog v-model="importDialog.visible" title="导入成绩" width="640px" :close-on-click-modal="false"
class="import-dialog">
class="import-dialog" append-to-body>
<div class="import-content">
<!-- 说明区域 -->
<div class="import-tips">
@ -184,7 +184,7 @@
</el-dialog>
<!-- 成绩修正弹窗 -->
<el-dialog v-model="editDialog.visible" title="成绩修正" width="560px" :close-on-click-modal="false">
<el-dialog v-model="editDialog.visible" title="成绩修正" width="560px" :close-on-click-modal="false" append-to-body>
<el-form ref="editFormRef" :model="editForm" label-width="160px" size="default">
<el-form-item label="学生姓名">
<el-input :value="editForm.studentName" disabled />

View File

@ -74,7 +74,7 @@
>
<el-icon><Plus /></el-icon>
</el-upload>
<el-dialog v-model="dialogVisible">
<el-dialog v-model="dialogVisible" append-to-body>
<img w-full :src="dialogImageUrl" alt="Preview Image" />
</el-dialog>
</el-form-item>

View File

@ -360,7 +360,7 @@ function paginateTableData(pageIndex, pageSize) {
height: 100%;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 72px;
display: flex;
align-items: center;
@ -448,7 +448,7 @@ function paginateTableData(pageIndex, pageSize) {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -79,7 +79,7 @@
</commonManage>
<div class="addTeacherDrawer">
<el-drawer v-model="data.drawerDialog.show" direction="rtl" size="50%" :close-on-click-modal="false"
:show-close=false>
:show-close=false append-to-body>
<template #header>
<p class="title">{{ data.dialogTitle }}</p>
@ -151,7 +151,7 @@
</div>
<div class="addTeacherDrawer">
<el-drawer v-model="data.drawerDialog.show1" direction="rtl" size="50%" :close-on-click-modal="false"
:show-close=false>
:show-close=false append-to-body>
<template #header>
<p class="title">{{ data.dialogTitle }}</p>
@ -223,7 +223,7 @@
</div>
<!-- <div class="addTeacherDrawer">
<el-drawer v-model="data.drawerDialog.show2" direction="rtl" size="50%" :close-on-click-modal="false"
:show-close=false>
:show-close=false append-to-body>
<template #header>
<p class="title">{{ data.dialogTitle }}</p>

View File

@ -347,7 +347,7 @@ function paginateTableData(pageIndex, pageSize) {
height: 100%;
.head {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: 72px;
display: flex;
align-items: center;
@ -435,7 +435,7 @@ function paginateTableData(pageIndex, pageSize) {
}
.head1 {
width: calc(100% - 24px);
width: calc(100% - 32px);
height: auto;
display: flex;
flex-wrap: wrap;

View File

@ -32,7 +32,7 @@
</div>
</commonManage>
<div class="addTeacherDrawer">
<el-drawer v-model="data.drawerDialog.show" direction="rtl" size="50%" :close-on-click-modal="false" :show-close="false">
<el-drawer v-model="data.drawerDialog.show" direction="rtl" size="50%" :close-on-click-modal="false" :show-close="false" append-to-body>
<template #header>
<p class="title">{{ data.dialogTitle }}</p>
</template>
@ -78,7 +78,7 @@
</el-drawer>
</div>
<div class="addTeacherDrawer">
<el-drawer v-model="data.drawerDialog.show1" direction="rtl" size="50%" :close-on-click-modal="false" :show-close="false">
<el-drawer v-model="data.drawerDialog.show1" direction="rtl" size="50%" :close-on-click-modal="false" :show-close="false" append-to-body>
<template #header>
<p class="title">{{ data.dialogTitle }}</p>
</template>

View File

@ -3,8 +3,7 @@
v-model="visible"
title="打卡详情"
width="80%"
:before-close="handleClose"
>
:before-close="handleClose" append-to-body>
<div class="check-in-details">
<!-- 搜索区域 -->
<div class="head">

View File

@ -26,7 +26,8 @@ export default ({ mode }: ConfigEnv) => {
port: 9990,
proxy: {
'/dev-api': {
target: ENV.VITE_API_BASE || 'http://localhost:52356',
// target: ENV.VITE_API_BASE || 'http://localhost:52356',
target: ENV.VITE_API_BASE || 'http://localhost:9991',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/dev-api/, '')
}