Commit fc732f08 by peijy

9.14 全部代码提交

parent 93f0e7e0
......@@ -10,6 +10,7 @@ declare module '@vue/runtime-core' {
My_switch: typeof import('./src/components/my_switch.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
SchoolYear: typeof import('./src/components/schoolYear.vue')['default']
Tabbar: typeof import('./src/components/tabbar.vue')['default']
VanActionSheet: typeof import('vant/es')['ActionSheet']
VanButton: typeof import('vant/es')['Button']
......
......@@ -37,3 +37,24 @@
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
.topTitle{
font-size: 16px;
color: #1989fa;
font-weight: bold;
margin: 20px 0px 10px 20px;
}
.schoolYearNew{
font-size:12px;
width: 165px;
height: 30px;
margin-top: 5px;
margin-left: 20px;
border: 1px solid silver;
border-radius: 5px
}
.van-cell.van-field.schoolYearNew{
padding: 0px!important;
height: 30px;
line-height: 30px;
}
<template>
<!--学年/学期 -->
<div>
<van-field
clearable
class="schoolYearNew"
v-model="schoolYearResult"
readonly
name="picker"
placeholder="学年/学期(默认最新)"
@click="showPicker = true"
/>
<van-popup v-model:show="showPicker" position="bottom">
<van-picker title="标题" :columns="columns" @confirm="onConfirm"
@cancel="showPicker = false"/>
</van-popup>
</div>
</template>
<script setup>
import {getNewSchoolYear,getSchoolYear} from '@/service/laboratoryManagement'
import {reactive, defineEmits, onMounted, ref} from "vue";
import {useStore} from "vuex";
import {Toast} from "vant";
const store = useStore()
// 定义事件驱动
const emits = defineEmits(['select'])
//学年学期选择器
const schoolYearResult = ref('');
console.log('schoolYearResult',schoolYearResult.value)
const showPicker = ref(false);
const onConfirm = (value) => {
console.log('schoolYearResult',schoolYearResult.value)
emits("select",value)
console.log('value',value)
schoolYearResult.value = value[0] + '-' + value[1] ;
showPicker.value = false;
};
// const columns = [
// // 第一列
// {
// values: ['周一', '周二', '周三', '周四', '周五'],
// defaultIndex: 0,
// },
// // 第二列
// {
// values: ['上学期', '下学期'],
// defaultIndex: 0,
// },
// ];
const columns = ref([]);
onMounted(async () => {
const data = {
userId:store.state.userInfo.userId
}
console.log('data',data)
let schoolYear = await getSchoolYear(data);
console.log('schoolYear',schoolYear);
if(schoolYear.code == 200){
const schoolYearColumns =schoolYear.data.map(item => {
return item.schoolYear
})
console.log('schoolYearColumns',schoolYearColumns)
columns.value = [{values:schoolYearColumns},{values: ['上学期', '下学期'],}]
}
let result = await getNewSchoolYear();
console.log('result1',result)
if(result.code == 200){
// schoolYearResult.value = [result.schoolYear,columns[1].values[result.semester-1]]
schoolYearResult.value = result.schoolYear + '-' + columns.value[1].values[result.semester-1]
const value = [result.schoolYear,result.semester]
emits("select",value)
console.log('emits',value)
}else{
Toast("获取信息失败!");
}
})
</script>
<style scoped>
.schoolYearNew{
font-size:12px;
width: 165px;
height: 30px;
margin-top: 5px;
margin-left: 20px;
border: 1px solid silver;
border-radius: 5px
}
.van-cell.van-field.schoolYearNew{
padding: 0px!important;
height: 30px;
line-height: 30px;
}
</style>
......@@ -48,6 +48,7 @@
import { ref, toRefs, onMounted } from "vue";
import { defineProps } from "vue";
import { getTotyp } from "@/utils/auth";
import { Toast } from "vant";
const props = defineProps({
selected: Number,
......
......@@ -37,12 +37,14 @@ import "amfe-flexible/index.min.js";
import "../rem.js";
import "./assets/style/common.css"
import schoolYear from './components/schoolYear';
const app = createApp(App);
app.config.globalProperties.$imgUrl = "http://43.143.63.140:8095/";
// process.env.NODE_ENV == "development"
// ? "//192.168.101.72:8848"
// : "//43.143.63.140:8095";
app
// .use(ElementPlus)
// .use(Button)
......@@ -82,4 +84,4 @@ app
.use(Calendar)
.use(VueHashCalendar)
.use(Uploader).use(DatetimePicker);
app.use(store).use(router).mount("#app");
app.use(store).use(router).component('schoolYear',schoolYear).mount("#app");
......@@ -215,6 +215,24 @@ const routes = [
name: "subjectAchievement",
component: () => import("../views/parent/studentCourseSelection/subjectAchievement"),
},
/* 学校社团 家长端 */
{
path: "/schoolClub",
name:"schoolClub",
component: () => import("../views/parent/schoolClub/index"),
},
/* 学校社团-查看社团详情 家长端 */
{
path: "/schoolClub/clubDetail",
name:"clubDetail",
component: () => import("../views/parent/schoolClub/clueDetail"),
},
/* 学校社团-查看社团详情 家长端 */
{
path: "/schoolClub/clubDetail/clubApply",
name:"clubApply",
component: () => import("../views/parent/schoolClub/clubApply"),
},
/* 学生选课 家长端 成绩查看 */
{
path: "/totalScoreView",
......@@ -613,19 +631,178 @@ const routes = [
{
path:"/laboratoryManagement/laboratoryRecord",
name:'laboratoryRecord',
component: () => import("../views/teacher/laboratoryManagement/laboratoryRecord"),
component: () => import("../views/teacher/laboratoryManagement/leader/laboratoryRecord"),
},
//领导-实验室完成情况统计
{
path:"/laboratoryManagement/laboratoryCompleteStatistics",
name: 'laboratoryCompleteStatistics',
component: () => import("../views/teacher/laboratoryManagement/laboratoryCompleteStatistics"),
component: () => import("../views/teacher/laboratoryManagement/leader/laboratoryCompleteStatistics"),
},
{
path:'/laboratoryManagement/laboratoryCompleteStatistics/checkComplete',
name:'checkComplete',
component: () => import("../views/teacher/laboratoryManagement/checkComplete"),
}
component: () => import("../views/teacher/laboratoryManagement/leader/checkComplete"),
},
// 实验室管理员 - 年级实验预约列表
{
path: '/laboratoryManagement/gradeLaboratory',
name:'gradeLaboratory',
component: () => import("../views/teacher/laboratoryManagement/manager/gradeLaboratory"),
},
// 实验室管理员 - 年级实验预约列表查看
{
path: '/laboratoryManagement/gradeLaboratory/checkGradeComplete',
name:'checkGradeComplete',
component: () => import("../views/teacher/laboratoryManagement/manager/checkGradeComplete"),
},
// 实验室管理员 - 教师实验室预约
{
path: '/laboratoryManagement/teacherLaboratory',
name:'teacherLaboratory',
component: () => import("../views/teacher/laboratoryManagement/manager/teacherLaboratory"),
},
// 实验室管理员 - 教师实验室预约查看/申请审批
{
path: '/laboratoryManagement/teacherLaboratory/teacherLaboratoryApprove',
name:'teacherLaboratoryApprove',
component: () => import("../views/teacher/laboratoryManagement/manager/teacherLaboratoryApprove"),
},
// 实验室管理员 - 个人实验审批
{
path: '/laboratoryManagement/personalLaboratoryApprove',
name:'personalLaboratoryApprove',
component: () => import("../views/teacher/laboratoryManagement/manager/personalLaboratoryApprove"),
},
//级部申请-年级实验室预约
{
path: '/laboratoryManagement/gradeLaboratoryApprove',
name:'gradeLaboratoryApprove',
component: () => import("../views/teacher/laboratoryManagement/levelPart/gradeLaboratoryApprove"),
},
//级部申请-年级实验室预约-新增/查看/修改
{
path: '/laboratoryManagement/gradeLaboratoryApprove/gradeLaboratoryDetail',
name:'gradeLaboratoryDetail',
component: () => import("../views/teacher/laboratoryManagement/levelPart/gradeLaboratoryDetail"),
},
//级部申请-班级完成情况明细
{
path: '/laboratoryManagement/gradeLaboratoryComplete',
name:'gradeLaboratoryComplete',
component: () => import("../views/teacher/laboratoryManagement/levelPart/gradeLaboratoryComplete"),
},
//级部申请-班级完成情况查看
{
path: '/laboratoryManagement/gradeLaboratoryComplete/checkGradeLaboratoryComplete',
name:'checkGradeLaboratoryComplete',
component: () => import("../views/teacher/laboratoryManagement/levelPart/checkGradeLaboratoryComplete"),
},
//级部申请-实验室完成情况明细
{
path: '/laboratoryManagement/laboratoryCompleteDetail',
name:'laboratoryCompleteDetail',
component: () => import("../views/teacher/laboratoryManagement/levelPart/laboratoryCompleteDetail"),
},
//级部申请-查看实验室完成情况
{
path: '/laboratoryManagement/laboratoryCompleteDetail/checkLaboratoryComplete',
name:'checkLaboratoryComplete',
component: () => import("../views/teacher/laboratoryManagement/levelPart/checkLaboratoryComplete"),
},
//教师申请-实验室安排
{
path: '/laboratoryManagement/laboratoryArrangement',
name:'laboratoryArrangement',
component: () => import("../views/teacher/laboratoryManagement/teacher/laboratoryArrangement"),
},
//教师申请-实验室安排查看、申请
{
path: '/laboratoryManagement/laboratoryArrangement/laboratoryArrangementDetail',
name:'laboratoryArrangementDetail',
component: () => import("../views/teacher/laboratoryManagement/teacher/laboratoryArrangementDetail"),
},
//教师申请-实验室申请记录
{
path: '/laboratoryManagement/laboratoryApplicationRecord',
name:'laboratoryApplicationRecord',
component: () => import("../views/teacher/laboratoryManagement/teacher/laboratoryApplicationRecord"),
},
//教师申请-实验室申请记录查看
{
path: '/laboratoryManagement/laboratoryApplicationRecord/checkLaboratoryApplication',
name:'checkLaboratoryApplication',
component: () => import("../views/teacher/laboratoryManagement/teacher/checkLaboratoryApplication"),
},
//教师申请-个人实验申请
{
path: '/laboratoryManagement/PersonalLaboratoryApplication',
name:'PersonalLaboratoryApplication',
component: () => import("../views/teacher/laboratoryManagement/teacher/PersonalLaboratoryApplication"),
},
//教师申请-个人实验申请新增、修改
{
path: '/laboratoryManagement/PersonalLaboratoryApplication/PersonalLaboratoryApplyDetail',
name:'PersonalLaboratoryApplyDetail',
component: () => import("../views/teacher/laboratoryManagement/teacher/PersonalLaboratoryApplyDetail"),
},
/** 实验室管理 laboratoryManagement 管理员权限 教师权限 领导权限 级部权限 **/
/** 安全管理 safetyManagement 教师端 **/
{
path:'/safetyManagement',
name:'safetyManagement',
component: () => import("../views/teacher/safetyManagement/index.vue"),
},
//个人安全管理-车辆出入登记
{
path:'/safetyManagement/carAccessRegistration',
name:'carAccessRegistration',
component: () => import("../views/teacher/safetyManagement/carAccessRegistration"),
},
//个人安全管理-监控录像调阅
{
path:'/safetyManagement/monitoringCall',
name:'monitoringCall',
component: () => import("../views/teacher/safetyManagement/monitoringCall"),
},
//信息中心监控管理-监控调阅内部
{
path:'/safetyManagement/monitoringCallInside',
name:'monitoringCallInside',
component: () => import("../views/teacher/safetyManagement/monitoringCallInside"),
},
//信息中心监控管理-监控调阅外部
{
path:'/safetyManagement/monitoringCallOutside',
name:'monitoringCallOutside',
component: () => import("../views/teacher/safetyManagement/monitoringCallOutside"),
},
//安全管理-车辆登记表
{
path:'/safetyManagement/vehicleRegistration',
name:'vehicleRegistration',
component: () => import("../views/teacher/safetyManagement/vehicleRegistration"),
},
//安全管理-车辆出入登记申请列表
{
path:'/safetyManagement/carAccessRegistrationApply',
name:'carAccessRegistrationApply',
component: () => import("../views/teacher/safetyManagement/carAccessRegistrationApply"),
},
//安全管理-监控调阅内部申请列表
{
path:'/safetyManagement/monitoringCallInsideApply',
name:'monitoringCallInsideApply',
component: () => import("../views/teacher/safetyManagement/monitoringCallInsideApply"),
},
//安全管理-监控调阅外部申请列表
{
path:'/safetyManagement/monitoringCallOutsideApply',
name:'monitoringCallOutsideApply',
component: () => import("../views/teacher/safetyManagement/monitoringCallOutsideApply"),
},
];
......
/**************实验室管理************/
import axios from "../utils/axios";
/********************** 字典 *******************/
//获取数据字典
export function getDicts(type) {
let url = `/system/dict/data/type/${type}`;
let result = axios.get(url);
return result;
}
/********************** 获取学年学期 *******************/
//获取最新学年学期
export function getNewSchoolYear(){
return axios.get('/wx/level/expriment/getSemester')
};
//获取学年
export function getSchoolYear(data){
return axios.get('/wx/level/expriment/getGrades',{
params:data
})
};
/********************** 领导 *******************/
//领导—实验室完成情况统计
export function getLabCompleteList(data){
return axios.get('/wx/administrators/getexperimentList',{
params:data
})
};
//领导—实验室完成情况统计查看
export function getLabCompleteDetail(data){
return axios.get('/wx/level/expriment/teacherExperimentList',{
params:data
})
};
//领导-教师实验统计
export function getTeacherLabList(data){
return axios.get('/wx/administrators/teachaer/List',{
params:data
})
};
/********************** 实验室管理员 *******************/
//查询实验室列表
export function getLabList(data){
return axios.get('/wx/schoolLab/list')
};
//1.年纪实验室预约
//年级实验室预约分配列表
export function getGradeAllocationList(data){
return axios.get('/wx/administrators/classYear/list',{
params:data
})
};
//年纪实验预约详情
export function getGradePlanDetail(id){
return axios.get(`/wx/administrators/classYear/${id}`)
};
//年级实验室分配
export function gradeLabAllocation(data) {
return axios.put('wx/administrators/classYear/update' ,{
...data
}
);
}
//2.教师实验室预约
//教师预约列表
export function getTeacherOrderList(data){
return axios.get('/wx/administrators/teacher/list',{
params:data
})
};
//教师预约详情
export function getTeacherOrderDetail(id){
return axios.get(`/wx/administrators/teacher/${id}`)
};
//实验室申请详情审批
export function labDetailApprove(data) {
return axios.put('/wx/administrators/teacher/update' ,{
...data
}
);
}
//3.实验计划完成统计
//实验室情况详情
export function getlaboratoryList(data){
return axios.get('/wx/level/expriment/getexperimentList',{
params:data
})
};
//实验室完成情况,班级列表
export function getlaboratoryDetail(data){
return axios.get('/wx/level/expriment/teacherExperimentList',{
params:data
})
};
//4.个人实验审批
//个人实验室申请列表
export function getPersonalApproveList(data){
return axios.get('/wx/administrators/apply/list',{
params:data
})
};
//个人实验室信息详情
export function getPersonalApproveDetail(id){
return axios.get( `/wx/administrators/apply/${id}`)
};
//个人实验室审批
export function personalLabApprove(data) {
return axios.put('/wx/administrators/apply/update' ,{
...data
}
);
}
/********************** 老师申请 *******************/
//1.实验室安排
//1.1 年级预约列表
export function getGradeAppointmentList(data){
return axios.get('/wx/teacher/expriment/classYear/list',{
params:data
})
};
//1.2 老师申请实验室
export function addTeacherLab(data) {
return axios.post('/wx/level/expriment/add' , {
...data
} )
}
//1.2 获取实验计划详细信息
export function getLabPlanDetail(id) {
return axios.get(`/wx/level/expriment/classYear/${id}`);
}
//1.实验室申请记录
//1.1实验室申请记录
export function getLabApplyList(data){
return axios.get('/wx/level/expriment/list',{
params:data
})
};
//1.2实验室申请详情
export function getLabApplyDetail(id) {
return axios.get(`/wx/teacher/expriment/${id}`);
}
//3.个人实验室申请
//3.1 个人实验室申请列表
export function getPersonalLabApplyList(data){
return axios.get('/wx/teacher/expriment/apply/list',{
params:data
})
};
//3.2 个人申请记录详情
export function getPersonalApplyDetail(id) {
return axios.get(`/wx/teacher/expriment/apply/${id}`);
}
//3.3新增个人申请
export function addPersonalApply(data) {
return axios.post('/wx/teacher/expriment/apply/add' , {
...data
} )
}
//3.4 申请上报
export function applyToReport(data) {
return axios.put('/wx/teacher/expriment/apply/report' ,{
...data
}
);
}
//3.4 修改申请
export function editApply(data) {
return axios.put('/wx/teacher/expriment/apply/update' ,{
...data
}
);
}
//3.5 删除个人申请
export function deleteApply(ids){
return axios.delete(`/wx/teacher/expriment/apply/${ids}`)
}
/********************** 级部申请 *******************/
//获取级部id
export function getGradeId(userId){
return axios.get(`/wx/level/expriment/getGrade/${userId}`)
}
//1.实验室完成情况
//实验室情况详情
export function getLabDetail(data) {
return axios.get('/wx/level/expriment/getexperimentList' , {
params:data
} )
}
//实验室完成情况,班级列表
export function getLabListl(data) {
return axios.get('/wx/level/expriment/teacherExperimentList' , {
params:data
} )
}
//2.班级完成情况
//1.班级完成详情
export function getClassCompleteDetail(data) {
return axios.get('/wx/level/expriment/getClassExperimentalDetails' , {
params:data
} )
}
//2.班级完成详情列表
export function getClassCompleteList(data) {
return axios.get('/wx/level/expriment/getClassExperimentList' , {
params:data
} )
}
//3.年级实验室预约
//3.1删除年级实验室预约
export function deleteGradeApply(ids){
return axios.delete(`/wx/level/expriment/${ids}`)
}
//3.2年级预约新增
export function addGradeApply(data) {
return axios.post('/wx/level/expriment/add' , {
...data
} )
}
//3.3 预约列表
export function getGradeApplyList(data) {
return axios.get('/wx/level/expriment/list' , {
params:data
} )
}
//3.4 年级实验计划详情
export function getGradeApplyDetail(ids){
return axios.get(`/wx/level/expriment/${ids}`)
}
//3.5 年级预约修改
export function editGradeApply(data) {
return axios.put('/wx/level/expriment/update' , {
...data
} )
}
//3.6 年级预约详情
export function getApproveDetail(id) {
return axios.get(`/wx/level/expriment/getInfo/${id}` )
}
//3.7 预约实验提交
export function submitLabAppointment(data) {
return axios.put('/wx/level/expriment/report' , {
...data
} )
}
//3.8实验计划下拉列表
export function getexperimentPlanList(data) {
return axios.get('/wx/level/expriment/pxperimentPlanList' , {
params:data
} )
}
/**
* 学校社团
* */
import axios from "../utils/axios";
//查询社团信息列表
export function getClubInfo() {
return axios.get('/wx/info/getInfo');
}
//根据id获取社团信息详细信息
export function getClubDetail(id) {
return axios.get(`/wx/info/${id}`);
}
//通过当前登录人查询当前社团的报名情况
export function getClubApply(data) {
return axios.get('/wx/info/search',{
params:data
});
}
//新增社团报名或重新报名
export function addClubApply(data) {
return axios.post('/wx/info' , {
...data
} )
}
......@@ -25,7 +25,6 @@ export function getSelectGrade(data) {
return axios.get('/wx/course/studenttypeview' ,{
params:data
}
);
}
......
......@@ -23,7 +23,7 @@ export function getCodeApi() {
//appId测试:wx765a55464b308d13 appId正式:wx977825b5a132b74d
let url =
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
"wx765a55464b308d13" +
"wx977825b5a132b74d" +
"&redirect_uri=" +
urlNow +
"&response_type=code&scope=snsapi_base&state=de992d7087bb4ac1bfca11fb7082985d&connect_redirect=1#wechat_redirect";
......
......@@ -9,10 +9,11 @@ import router from "@/router/index.js"
* */
export function scanCodeFun(appId,type){
console.log('appId',appId)
let url = location.href.split('#')[0] //获取当前域名
// let url = location.origin
let url = encodeURIComponent(location.href.split('#')[0]) //获取当前域名
console.log('location.href',location.href)
console.log('url',url)
let encode = ''
console.log('location',location)
getWxConfig(url).then(res=>{
if(res.code == 200){
const data = res.data
......@@ -30,7 +31,6 @@ export function scanCodeFun(appId,type){
signature: data.signature,
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
jsApiList: ['scanQRCode'],
});
// setTimeout(()=>{
......
......@@ -117,13 +117,13 @@
</van-form>
</div>
<!-- </div>-->
<!-- <van-image-->
<!-- style="background: #e7f4fb; position: absolute; bottom: 0; height: auto"-->
<!-- :src="require('@/assets/login/loginback.png')"-->
<!-- fit="contain"-->
<!-- width="100%"-->
<!-- height="100%"-->
<!-- ></van-image>-->
<van-image
style="background: #e7f4fb; position: absolute; bottom: 0; height: auto"
:src="require('@/assets/login/loginback.png')"
fit="contain"
width="100%"
height="100%"
></van-image>
</div>
</template>
......@@ -193,15 +193,17 @@ export default {
const router = useRouter();
const store = useStore();
const route = useRoute();
const code = ref('')
let displayStyle = ref('0')
onMounted( () => {
console.log('route',route.query.isLogout)
console.log('displayStyle',displayStyle.value)
getToken()
if (process.env.NODE_ENV != "development") {
//获取openId
let code = getUrlKey("code");
code.value = getUrlKey("code");
console.log('code',code)
if (isEmpty(code)) getCodeApi() ;
if (isEmpty(code.value)) getCodeApi() ;
else checkOpenIdOrWxCookie();
}
});
......
<template>
<van-nav-bar title="社团报名" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<van-form style="margin-top: 20px;" @submit="onSubmit">
<van-cell-group inset>
<van-field
readonly
v-model="grade"
name="grade"
label="级部"
/>
<van-field
readonly
v-model="classes"
name="classes"
label="班级"
/>
<van-field
readonly
v-model="name"
name="name"
label="姓名"
/>
<van-field
readonly
v-model="sex"
name="sex"
label="性别"
/>
<van-field
:readonly="status == '1' || status == '2' ? true:false"
v-model="hobby"
name="hobby"
label="兴趣爱好"
rows="4"
autosize
type="textarea"
/>
<van-field
:readonly="status == '1' || status == '2' ? true:false"
v-model="reason"
name="reason"
label="申请理由"
rows="4"
autosize
type="textarea"
/>
</van-cell-group>
<div style="margin: 16px;">
<van-button v-if="status == '1'" round block type="primary">
已报名等待审核
</van-button>
<van-button v-else-if="status == '2'" round block type="primary">
已同意
</van-button>
<div v-else-if="status == '3'" style="text-align: center">
<van-button type="warning" style="margin-right: 10px;border-radius: 5px;width: 90px;height: 40px">
不同意
</van-button>
<van-button type="success" style="border-radius: 5px;width: 90px;height: 40px" native-type="submit">
重新报名
</van-button>
</div>
<van-button v-else round block type="primary" native-type="submit">
报名
</van-button>
</div>
</van-form>
</template>
<script setup>
import {getClubApply, addClubApply} from '@/service/schoolClub'
import router from "../../../router";
import {onMounted, ref} from "vue";
import {useStore} from "vuex";
import {useRoute} from "vue-router";
const grade = ref('');
const classes = ref('');
const name = ref('');
const sex = ref('');
const hobby = ref('');
const reason = ref('');
const status = ref('');
const store = useStore();
const route = useRoute();
onMounted(async ()=>{
const params = {
cid:route.query.id
}
let result = await getClubApply(params)
if(result.code == 200){
grade.value = result.data.grade
classes.value = result.data.classes
name.value = result.data.name
sex.value = result.data.sex
hobby.value = result.data.hobby
reason.value = result.data.reason
reason.value = result.data.reason
status.value = result.data.status
}
console.log('result',result)
})
const goback = () => {
router.back()
}
const onSubmit = (values) => {
console.log('submit', values);
values.cid = route.query.id;
values.orgName = route.query.name
values.userId = store.state.userInfo.userId
console.log('values',values)
};
</script>
<style scoped>
</style>
<template>
<van-nav-bar title="社团风采" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<div style="margin: 10px 20px">
<div class="clubApply">
<div style="display: flex;justify-content: right;margin-bottom: 10px">
<van-button size="small" type="primary" @click="toClubApply">社团报名</van-button>
</div>
<div class="swiper">
<van-swipe class="my-swipe" :autoplay="3000" indicator-color="white" >
<van-swipe-item v-for="(item,index) in 6" :key="index">{{ index }}</van-swipe-item>
<!-- <van-swipe-item v-for="(item,index) in content" :key="index">{{ index }}</van-swipe-item>-->
</van-swipe>
</div>
<div class="clubContent">
<div>
<p class="title">社团宗旨</p>
<p class="content">{{aim}}</p>
</div>
<div>
<p class="title">社团简介</p>
<p class="content">{{ intro }}</p>
</div>
</div>
</div>
</div>
</template>
<script setup>
import {getClubDetail} from '@/service/schoolClub'
import {onMounted, ref} from "vue";
import {useStore} from "vuex";
import {useRouter,useRoute} from "vue-router";
const router = useRouter()
const route = useRoute()
const content = ref()
const aim = ref('')
const intro = ref('')
onMounted( async () => {
let result = await getClubDetail(route.query.id)
console.log('result',result)
if(result.code == 200){
aim.value = result.data.aim
intro.value = result.data.intro
content.value = result.data.imgs
}
})
//社团报名按钮
const toClubApply = () => {
router.push({
path: "/schoolClub/clubDetail/clubApply",
query:{
id:route.query.id,
name:route.query.name
}
})
};
const goback = () => {
router.back()
}
</script>
<style scoped>
.clubApply {
/*float: right;*/
}
.my-swipe .van-swipe-item {
color: #fff;
font-size: 20px;
line-height: 150px;
text-align: center;
background-color: #39a9ed;
}
.title{
font-size: 14px;
}
.content{
font-size: 12px;
}
</style>
<template>
<van-nav-bar title="社团基础信息查看" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div class="clubWrap">
<div class="clubItem" v-for="item in list" :key="item.id">
<div style="position: relative" @click="toDetail(item.id,item.name)">
<div class="image">
<van-image
fit="contain"
radius="10"
:src='item.src'
/>
</div>
<div class="clubName">{{ item.name }}</div>
<div v-if="item.isattend == '1'" class="join">已参加</div>
<div v-if="item.isattend == '2'" class="unJoin">未参加</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</template>
<script setup>
import {getClubInfo} from '@/service/schoolClub'
import {onMounted, ref} from "vue";
import {useRouter} from "vue-router";
import {Toast} from "vant";
const router = useRouter()
const list = ref([]);
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const src = ref()
const imgArr = ref([])
onMounted(async () => {
})
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
pageNum.value = 0;
refreshing.value = false;
}
let result = await getClubInfo()
console.log('result', result)
if (result.code == 200) {
loading.value = false;
list.value = result.data
imgArr.value = result.data.map(item => item.imgs)
// src.value = imgArr.value.map(item => )
finished.value = true
}else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
};
const onRefresh = () => {
// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad();
};
//点击查看详情
const toDetail = (id,name) => {
router.push({
path: '/schoolClub/clubDetail',
query:{
id:id,
name:name
}
})
}
const goback = () => {
router.back()
}
</script>
<style scoped>
.clubWrap {
margin: 20px 0px 20px 20px;
display: flex;
box-sizing: border-box;
flex-wrap: wrap;
/*position: relative;*/
}
.clubItem {
width: 50%;
margin-bottom: 20px;
}
.image {
margin-right: 20px;
border-radius: 10px;
border: 1px solid silver;
}
.van-image {
border-radius: 10px;
}
.clubName {
margin-right: 20px;
text-align: center;
font-size: 16px;
margin-top: 10px;
}
.join, .unJoin {
font-size: 12px;
position: absolute;
top: 0;
right: 21px;
color: #FFFFFF;
width: 50px;
height: 20px;
line-height: 20px;
text-align: center;
border-radius: 6px;
}
.join {
background: #e5c35d;
}
.unJoin {
background: #00c15d;
}
</style>
......@@ -165,6 +165,8 @@ const deleteteatcherll = async (item) => {
if (result.code == 200) {
Toast("删除成功");
onRefresh();
}else{
Toast("删除失败!");
}
};
const poststdleave = async (item) => {
......@@ -175,6 +177,8 @@ const poststdleave = async (item) => {
if (result.code == 200) {
Toast("提交成功");
onRefresh();
}else{
Toast("提交失败!");
}
};
const option1 = [
......
......@@ -451,10 +451,13 @@ export default {
//删除所有
//localStorage.clear();
Toast.success("退出成功");
router.push({
path: "/login",
query: {},
});
//测试服务器
console.log('window',window)
window.location.href = window.location.href.split('?')[0]
// router.push({
// path: "/login",
// query: {},
// });
})
.catch(() => {});
};
......
......@@ -319,11 +319,9 @@ export default {
//localStorage.clear();
Toast.success("退出成功");
console.log('openId',store)
// window.open('http://www.dyzmxx.com/zhxygzh')
//测试服务器
console.log('window',window)
window.location.href = window.location.origin
window.location.href = window.location.href.split('?')[0]
// router.replace({
// path: "/login",
// query: {
......
......@@ -191,6 +191,13 @@
/>
<span class="item_text">学生选课</span>
</van-grid-item>
<van-grid-item icon="photo-o" text="学校社团" url=" #/schoolClub">
<van-image
style="width: 48px"
:src="require('@/assets/index/rkls.png')"
/>
<span class="item_text">学校社团</span>
</van-grid-item>
<!-- <van-grid-item icon="photo-o" text="请假" url=" #/studentLeavetask">
<van-image
style="width: 48px"
......@@ -426,6 +433,13 @@
</van-grid-item>
<!--2023-08-24 新增实验室管理模块-->
<!--2023-09-11 新增安全管理模块-->
<van-grid-item icon="photo-o" text="安全管理" url="#/safetyManagement">
<van-image style="width: 48px" :src="require('@/assets/index/dcwj.png')"/>
<span class="item_text">安全管理</span>
</van-grid-item>
<!--2023-09-11 新增安全管理模块-->
<!-- <van-grid-item icon="photo-o" text="我的领用" url=" #/myUse">
<van-image
style="width: 24px"
......@@ -520,6 +534,8 @@ import { storetyprelationshiptyp } from "@/service/dir";
import {
getStudentInfo,//学生选课信息查询
} from "@/service/studentCourseSelection";
import {getGradeId} from '@/service/laboratoryManagement'
export default {
name: "Home",
......@@ -643,6 +659,7 @@ export default {
console.log('info',result)
if (result.code === 200) {
let userInfo = result.userInfo;
if (userInfo.type == 1) {
parentShow.value = true;
} else {
......@@ -659,7 +676,12 @@ export default {
store.commit("editTeacherId", userInfo.teacherId);
store.commit("editTeacherName", userInfo.teacherName);
store.commit("edituserInfo", userInfo);
console.log('userInfo',userInfo)
console.log('userInfo666',userInfo)
let gradeId = await getGradeId(userInfo.userId)
console.log('gradeId',gradeId)
if(gradeId.code == 200){
store.commit("editGradeId", gradeId.data);
}
onInitData();
}
};
......
<template>
<van-nav-bar title="实验室管理" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<!--领导 -->
<div class="recordBlock" @click="toPage(1)">
<van-image class="leftImg" :src="require('../../../assets/icon/record.png')"/>
<div>实验室记录</div>
</div>
<div class="statisticsBlock" @click="toPage(2)">
<van-image class="leftImg" :src="require('../../../assets/icon/statistics.png')"/>
<div>实验室完成情况统计</div>
</div>
<!-- <div v-if="leaderRole == true">-->
<div class="recordBlock" @click="toPage(1)">
<van-image class="leftImg" :src="require('../../../assets/icon/record.png')"/>
<div>教师实验室统计</div>
</div>
<div class="statisticsBlock" @click="toPage(2)">
<van-image class="leftImg" :src="require('../../../assets/icon/statistics.png')"/>
<div>实验室完成情况统计</div>
</div>
<!-- </div>-->
<!--实验室管理员 -->
<div class="orderBlock" @click="toPage(3)">
<van-image class="leftImg" :src="require('../../../assets/icon/order.png')"/>
<div>年级实验室预约</div>
</div>
<div class="techerOrderBlock" @click="toPage(4)">
<van-image class="leftImg" :src="require('../../../assets/icon/teacherOrder.png')"/>
<div>教师实验室预约</div>
</div>
<div class="planBlock" @click="toPage(5)">
<van-image class="leftImg" :src="require('../../../assets/icon/plan.png')"/>
<div>实验室计划完成统计</div>
</div>
<div class="personalBlock" @click="toPage(6)">
<van-image class="leftImg" :src="require('../../../assets/icon/personal.png')"/>
<div>个人实验审批</div>
</div>
<div class="competitionBlock" @click="toPage(7)">
<van-image class="leftImg" :src="require('../../../assets/icon/competition.png')"/>
<div>实验室竞赛</div>
</div>
<!-- <div v-if="managerRole == true">-->
<div class="orderBlock" @click="toPage(3)">
<van-image class="leftImg" :src="require('../../../assets/icon/order.png')"/>
<div>年级实验预约</div>
</div>
<div class="techerOrderBlock" @click="toPage(4)">
<van-image class="leftImg" :src="require('../../../assets/icon/teacherOrder.png')"/>
<div>教师实验室预约</div>
</div>
<div class="planBlock" @click="toPage(5)">
<van-image class="leftImg" :src="require('../../../assets/icon/plan.png')"/>
<div>实验计划完成统计</div>
</div>
<div class="personalBlock" @click="toPage(6)">
<van-image class="leftImg" :src="require('../../../assets/icon/personal.png')"/>
<div>个人实验审批</div>
</div>
<!-- </div>-->
<!-- <div class="competitionBlock" @click="toPage(7)">-->
<!-- <van-image class="leftImg" :src="require('../../../assets/icon/competition.png')"/>-->
<!-- <div>实验室竞赛</div>-->
<!-- </div>-->
<!--级部申请-->
<div class="levelOrderBlock" @click="toPage(8)">
<van-image class="leftImg" :src="require('../../../assets/icon/level.png')"/>
<div>年级实验室预约</div>
</div>
<div class="classFinishBlock" @click="toPage(9)">
<van-image class="leftImg" :src="require('../../../assets/icon/classFinish.png')"/>
<div>班级完成情况明细</div>
</div>
<div class="levelFinishBlock" @click="toPage(10)">
<van-image class="leftImg" :src="require('../../../assets/icon/levelFinish.png')"/>
<div>实验室完成情况统计</div>
</div>
<!-- <div v-if="levelPartRole == true">-->
<div class="levelOrderBlock" @click="toPage(8)">
<van-image class="leftImg" :src="require('../../../assets/icon/level.png')"/>
<div>年级实验室预约</div>
</div>
<div class="classFinishBlock" @click="toPage(9)">
<van-image class="leftImg" :src="require('../../../assets/icon/classFinish.png')"/>
<div>班级完成情况明细</div>
</div>
<div class="levelFinishBlock" @click="toPage(10)">
<van-image class="leftImg" :src="require('../../../assets/icon/levelFinish.png')"/>
<div>实验室完成情况明细</div>
</div>
<!-- </div>-->
<!--教师申请-->
<div class="laboratoryBlock" @click="toPage(11)">
<van-image class="leftImg" :src="require('../../../assets/icon/laboratoryArrangement.png')"/>
<div>实验室安排</div>
</div>
<div class="laboratoryRecordBlock" @click="toPage(12)">
<van-image class="leftImg" :src="require('../../../assets/icon/laboratoryRecord.png')"/>
<div>实验室申请记录</div>
</div>
<div class="personalApplicationBlock" @click="toPage(13)">
<van-image class="leftImg" :src="require('../../../assets/icon/personalApplication.png')"/>
<div>个人实验室申请</div>
</div>
<!-- <div v-if="teacherRole == true">-->
<div class="laboratoryBlock" @click="toPage(11)">
<van-image class="leftImg" :src="require('../../../assets/icon/laboratoryArrangement.png')"/>
<div>实验室安排</div>
</div>
<div class="laboratoryRecordBlock" @click="toPage(12)">
<van-image class="leftImg" :src="require('../../../assets/icon/laboratoryRecord.png')"/>
<div>实验室申请记录</div>
</div>
<div class="personalApplicationBlock" @click="toPage(13)">
<van-image class="leftImg" :src="require('../../../assets/icon/personalApplication.png')"/>
<div>个人实验室申请</div>
</div>
<!-- </div>-->
</template>
<script setup>
......@@ -76,25 +87,120 @@ const managerRole = ref()
const levelPartRole = ref()
//教师
const teacherRole = ref()
//查找角色
onMounted(()=>{
//查找角色
//领导-校领导
// rolesArr.find(item => {
// if(item == ''){
// if(item == 'schoolLeader'){
// return leaderRole.value = true
// }else{
// leaderRole.value = false
// }
// })
// 级部-级部主任
// rolesArr.find(item => {
// if(item == 'gradeLeader'){
// return levelPartRole.value = true
// }else{
// levelPartRole.value = false
// }
// })
//实验室管理员
// rolesArr.find(item => {
// if(item == 'phy_lab_admin' || item == 'che_lab_admin' || item == 'bio_lab_admin'){
// return managerRole.value = true
// }else{
// managerRole.value = false
// }
// })
//教师
// rolesArr.find(item => {
// if(item == 'teacher'){
// return teacherRole.value = true
// }else{
// teacherRole.value = false
// }
// })
})
const toPage = (type) => {
if(type == 1){
//领导-实验室记录
//领导-教师实验统计
router.push({
path:"/laboratoryManagement/laboratoryRecord"
})
}
if(type == 2){
//领导-实验室记录
//领导-实验室完成情况统计
router.push({
path:"/laboratoryManagement/laboratoryCompleteStatistics",
query:{
type:2
}
})
}
if(type == 3){
//实验室管理员-年级实验预约列表
router.push({
path:"/laboratoryManagement/gradeLaboratory"
})
}
if(type == 4){
//实验室管理员-教师实验室预约
router.push({
path:"/laboratoryManagement/teacherLaboratory"
})
}
if(type == 5){
//实验室管理员-实验计划完成统计
router.push({
path: '/laboratoryManagement/laboratoryCompleteStatistics',
query:{
type:5
}
})
}
if(type == 6){
//实验室管理员-个人实验审批
router.push({
path: '/laboratoryManagement/personalLaboratoryApprove',
})
}
if(type == 8){
//级部申请-年级实验室预约
router.push({
path: '/laboratoryManagement/gradeLaboratoryApprove',
})
}
if(type == 9){
//级部申请-班级完成情况明细
router.push({
path: '/laboratoryManagement/gradeLaboratoryComplete',
})
}
if(type == 10){
//级部申请-实验室完成情况明细
router.push({
path: '/laboratoryManagement/laboratoryCompleteDetail',
})
}
if(type == 11){
//教师申请-实验室安排
router.push({
path: '/laboratoryManagement/laboratoryArrangement',
})
}
if(type == 12){
//教师申请-实验室申请记录
router.push({
path: '/laboratoryManagement/laboratoryApplicationRecord',
})
}
if(type == 13){
//教师申请-个人实验申请
router.push({
path:"/laboratoryManagement/laboratoryCompleteStatistics"
path: '/laboratoryManagement/PersonalLaboratoryApplication',
})
}
}
......
<!--领导 查看班级完成情况-->
<template>
<van-nav-bar title="查看班级完成情况" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<div>
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="搜索班级、实验时间段、已上报、未上报等"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<div style="text-align: center">
<van-image v-if="route.query.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="route.query.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="route.query.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{route.query.sub == '1' ? '物理' : route.query.sub == '2' ? '化学' : '生物'}}研究</span>
</div>
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card">
<div class="leftContent">
<div style="margin: 10px 0;">
<span>班级:</span>
<span>{{ item.className }}</span>
</div>
<div style="margin-bottom: 10px">
<span>节次:</span>
<span>{{ item.section }}</span>
</div>
</div>
<div class="middleContent">
<div style="margin: 10px 0;">
<span>实验分类:</span>
<span>{{ item.experimentClassify == '1' ? '分组实验' : item.experimentClassify == '2' ? '演示实验' : '探究实验' }}</span>
</div>
<div style="margin-bottom: 10px">
<span>实验时间:</span>
<span>{{ item.experimentTime }}</span>
</div>
</div>
<div v-if="item.state == '1'" class="rightContent complete">
<div>已完成</div>
</div>
<div v-if="item.state == '0'" class="rightContent unfinished">
<div>未完成</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getLabCompleteDetail,getlaboratoryDetail} from '@/service/laboratoryManagement'
import {reactive, onMounted, toRefs, ref} from "vue";
import {useStore} from "vuex";
import {useRouter, useRoute} from "vue-router";
import {formatDate} from "@/utils/time";
import {Toast} from "vant";
const store = useStore()
const router = useRouter()
const route = useRoute()
const type = route.query.type
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchValue = ref('');
console.log('item',route.query)
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
if (type == 2) {
console.log(type)
//领导-实验室完成情况统计
const params = {
schoolYear:route.query.schoolYear,
semester:route.query.semester,
grade:route.query.grade,
experimentName:route.query.experimentName,
id:route.query.id,
labClassYearId:route.query.labClassYearId,
querText:searchValue.value
}
let leaderResult = await getLabCompleteDetail(params)
console.log('leaderResult',leaderResult)
if(leaderResult.code == 200){
loading.value = false;
list.value = leaderResult.data
finished.value = true
}else{
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
if (type == 5) {
console.log(type)
//实验室管理员-实验计划完成统计
const params = {
schoolYear:route.query.schoolYear,
semester:route.query.semester,
grade:route.query.grade,
experimentName:route.query.experimentName,
id:route.query.id,
labClassYearId:route.query.labClassYearId,
querText:searchValue.value
}
let leaderResult = await getlaboratoryDetail(params)
console.log('leaderResult',leaderResult)
if(leaderResult.code == 200){
loading.value = false;
list.value = leaderResult.data
finished.value = true
}else{
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//接口
// let result = await getBorrowList(id,equipmentName.value)
// console.log('result',result)
// if(result.code == 200){
// loading.value = false;
// list.value = result.data
// finished.value = true
// }else{
// Toast("获取信息失败!");
// finished.value = true;
// loading.value = false;
// return;
// }
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card {
background: #FFFFFF;
margin: 10px;
display: flex;
justify-content: space-around;
height: 80px;
align-items: center;
border-radius: 20px;
}
.leftContent {
display: flex;
flex-direction: column;
font-size: 14px;
}
.middleContent {
display: flex;
flex-direction: column;
font-size: 14px;
}
.rightContent {
font-size: 14px;
writing-mode: vertical-rl;
color: #FFFFFF;
border-radius: 5px;
height: 60px;
text-align: center;
width: 20px;
}
.complete {
background: rgb(155, 194, 155);
}
.unfinished {
background: rgb(106, 149, 236);
}
</style>
<!--领导-实验室完成情况统计-->
<!--实验室管理员-实验计划完成统计-->
<template>
<van-nav-bar :title="title" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="applyName"
show-action
placeholder="搜索级部、实验名称等"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toCheckComplete(item)">
<div class="topContent">
<div class="topLeft">
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物'}}研究</span>
</div>
<div class="topRight">
<div style="font-size: 14px;color: #FFFFFF">{{ item.schoolYear }}{{item.semester == '1' ? '上学期':'下学期'}}</div>
</div>
</div>
<div class="bottomContent">
<div class="experimentType">
<div>级部</div>
<div style="color:#4ea0fc;">{{ item.grade }}</div>
</div>
<div class="experimentType">
<div>总班级数</div>
<div style="color:#4ea0fc;">{{ item.count }}</div>
</div>
<div class="experimentType">
<div>已完成班级数</div>
<div style="color:#4ea0fc;">{{ item.complete }}</div>
</div>
<div class="experimentType">
<div>未完成班级数</div>
<div style="color:#4ea0fc;">{{item.incomplete}}</div>
</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getLabCompleteList, getlaboratoryList} from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore()
const router = useRouter()
const route = useRoute()
const title = ref('')
const type = route.query.type
const semester = ref('');
const year = ref('');
const applyName = ref('');
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref();
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
onMounted(()=>{
})
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
if(type == 2){
console.log(type)
//领导-实验室完成情况统计
title.value = '实验室完成情况'
if(semester.value == '上学期' ||semester.value == '1'){
semester.value = '1'
}else{
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
querText: applyName.value,
}
console.log('params',params)
let result = await getLabCompleteList(params)
console.log('result', result)
if(result.code == 200){
loading.value = false;
list.value = result.data
finished.value = true
}else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
if(type == 5){
console.log(type)
//实验室管理员-实验计划完成统计
title.value = '实验计划完成统计'
if(semester.value == '上学期' ||semester.value == '1'){
semester.value = '1'
}else{
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
querText: applyName.value
}
console.log('params',params)
let result = await getlaboratoryList(params)
console.log('result', result)
if(result.code == 200){
loading.value = false;
list.value = result.data
finished.value = true
}else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
}
//点击事件
const toCheckComplete = (item) => {
console.log('111',item)
router.push({
path:'/laboratoryManagement/laboratoryCompleteStatistics/checkComplete',
query:{
schoolYear:item.schoolYear,
semester:item.semester,
grade:item.grade,
experimentName:item.experimentName,
id:item.id,
sub:item.sub,
type:type,
labClassYearId:item.labClassYearId
}
})
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card{
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent{
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
border-bottom:1px solid #aebdc5 ;
margin-left: 10px;
margin-right: 10px;
}
.topLeft{
display: flex;
align-items: center;
justify-content: center;
}
.topRight{
margin-top: -5px;
text-align: center;
width: 85px;
height: 22px;
line-height: 22px;
border-radius: 10px;
background: #4ea0fc;
}
.bottomContent{
margin-top: 10px;
padding-bottom: 10px;
display: flex;
flex-direction: row;
justify-content: space-around;
}
.experimentType{
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
</style>
<!--领导-->
<template>
<van-nav-bar title="实验室记录" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<van-nav-bar title="教师实验统计" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="applyName"
show-action
placeholder="搜索姓名"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="请输入搜索关键词"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<van-list
v-model:loading="loading"
:finished="finished"
......@@ -22,8 +25,8 @@
<div class="card">
<div class="topContent">
<div class="topLeft">
<van-image :src="require('../../../assets/icon/laboratory.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">张三</span>
<van-image :src="require('../../../../assets/icon/laboratory.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{ item.applyName }}</span>
</div>
<div class="topRight">
<div style="font-size: 14px;color: #FFFFFF">2022</div>
......@@ -33,19 +36,19 @@
<div class="bottomContent">
<div class="experimentType">
<div>分组实验</div>
<div style="color:#4ea0fc;">6</div>
<div style="color:#4ea0fc;">{{ item.fzcount }}</div>
</div>
<div class="experimentType">
<div>演示实验</div>
<div style="color:#4ea0fc;">6</div>
<div style="color:#4ea0fc;">{{ item.sycount }}</div>
</div>
<div class="experimentType">
<div>探究实验</div>
<div style="color:#4ea0fc;">6</div>
<div style="color:#4ea0fc;">{{ item.sjcount }}</div>
</div>
<div class="experimentType">
<div>已完成实验数</div>
<div style="color:#4ea0fc;">6</div>
<div style="color:#4ea0fc;">{{ item.count }}</div>
</div>
</div>
......@@ -58,15 +61,29 @@
</template>
<script setup>
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {getTeacherLabList, getNewSchoolYear} from '@/service/laboratoryManagement'
import {reactive, onMounted, toRefs, ref} from "vue";
import {useStore} from "vuex";
import {useRouter, useRoute} from "vue-router";
import {formatDate} from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter()
const router = useRouter();
const semester = ref('');
const year = ref('');
const applyName = ref('');
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref([1,2,3]);
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
......@@ -74,45 +91,42 @@ const list = ref([1,2,3]);
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchValue = ref('');
//权限字段
const rolesArr = store.state.userInfo.roles
// 领导权限
const leaderRole = ref()
//实验室管理员
const managerRole = ref()
//级部
const levelPartRole = ref()
//教师
const teacherRole = ref()
//查找角色
// rolesArr.find(item => {
// if(item == ''){
// return leaderRole.value = true
// }else{
// leaderRole.value = false
// }
// })
onMounted(async () => {
})
//列表加载事件
const onLoad = () => {
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value',semester.value)
if(semester.value == '上学期' ||semester.value == '1' ){
semester.value = '1'
}else{
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
applyName: applyName.value
}
console.log('params', params)
//接口
// let result = await getBorrowList(id,equipmentName.value)
// console.log('result',result)
// if(result.code == 200){
// loading.value = false;
// list.value = result.data
// finished.value = true
// }else{
// Toast("获取信息失败!");
// finished.value = true;
// loading.value = false;
// return;
// }
let result = await getTeacherLabList(params)
console.log('result', result)
if (result.code == 200) {
loading.value = false;
list.value = result.data
finished.value = true
} else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//下拉刷新
......@@ -126,7 +140,7 @@ const onRefresh = () => {
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
......@@ -139,24 +153,31 @@ const goback = () => {
</script>
<style scoped>
.card{
.card {
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent{
.topContent {
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
border-bottom:1px solid #6f787d ;
border-bottom: 1px solid #aebdc5;
margin-left: 10px;
margin-right: 10px;
}
.topLeft{
.topLeft {
display: flex;
align-items: center;
justify-content: center;
}
.topRight{
.topRight {
margin-top: -5px;
text-align: center;
width: 50px;
......@@ -165,18 +186,21 @@ const goback = () => {
border-radius: 10px;
background: #4ea0fc;
}
.bottomContent{
.bottomContent {
margin-top: 10px;
padding-bottom: 10px;
display: flex;
flex-direction: row;
justify-content: space-around;
}
.experimentType{
.experimentType {
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
</style>
<template>
<van-nav-bar title="查看班级完成情况" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="搜索班级、实验时间"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<!--列表 -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card">
<div class="title">
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物'}}研究</span>
</div>
<div class="form">
<van-form>
<van-cell-group inset>
<van-field
readonly
v-model="item.sub"
label="学科"
/>
<van-field
readonly
v-model="item.section"
label="节次"
/>
<van-field
readonly
v-model="item.experimentName"
label="实验名称"
/>
<van-field
readonly
v-model="item.experimentClassify"
label="实验分类"
/>
<van-field
readonly
v-model="item.chapterContent"
label="章节内容"
/>
<van-field
readonly
v-model="item.experimentTime"
label="实验时间"
/>
</van-cell-group>
</van-form>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getClassCompleteDetail} from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const route = useRoute();
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const username = ref('')
const searchValue = ref('');
onMounted(()=>{
// onLoad()
})
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
const params = {
schoolYear:route.query.schoolYear,
semester:route.query.semester,
classId:route.query.id,
querText:searchValue.value
}
//接口
let result = await getClassCompleteDetail(params)
console.log('result',result)
if(result.code == 200){
loading.value = false;
list.value = result.data.map(item => {
return{
sub: item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物',
section:item.section,
experimentClassify:item.experimentClassify == '1' ? '分组实验' : item.experimentClassify == '2' ? '演示实验' : '探究实验' ,
chapterContent:item.chapterContent,
experimentTime:item.experimentTime,
experimentName:item.experimentName
}
})
finished.value = true
}else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card{
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.title{
padding: 10px 20px;
}
</style>
<!--级部申请-班级完成情况明细-->
<template>
<van-nav-bar title="查看实验室完成情况" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="搜索班级、实验时间"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<!--列表 -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card">
<div style="margin-left: 15px;margin-top: 20px;" class="left">
<div style="margin-bottom: 5px;" class="title">
<van-icon size="20" name="apps-o" />
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{item.schoolYear}}{{item.className}}</span>
</div>
<div style="font-size: 14px;margin-bottom: 5px">
<span>实验时间:</span>
<span>{{ item.experimentTime }}</span>
</div>
<div style="font-size: 14px;padding-bottom: 10px">
<span>节次:</span>
<span>{{ item.section }}</span>
</div>
</div>
<div class="right">
<div v-if="item.state == '1'">完成</div>
<div v-if="item.state == '0'">未完成</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getClassCompleteDetail} from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const route = useRoute()
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchValue = ref('');
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
const params = {
schoolYear:route.query.schoolYear,
semester:route.query.semester,
classId:route.query.classId,
querText:searchValue.value
}
console.log('params',params)
//接口
let result = await getClassCompleteDetail(params)
console.log('result',result)
if(result.code == 200){
loading.value = false;
list.value = result.data
finished.value = true
}else{
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card{
background: #FFFFFF;
margin: 10px;
display: flex;
justify-content: space-between;
border-radius: 20px;
}
.right{
margin-top: 10px;
margin-right: 15px;
font-size: 14px;
background: #4ea0fc;
color: #FFFFFF;
height: 25px;
line-height: 25px;
text-align: center;
width: 60px;
border-radius: 8px;
}
</style>
<!--级部申请-班级完成情况明细-->
<template>
<van-nav-bar title="班级完成情况明细" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div>
<!-- 搜索框 -->
<!-- <form action="/">-->
<!-- <van-search-->
<!-- v-model="searchValue"-->
<!-- show-action-->
<!-- placeholder="搜索班级等"-->
<!-- @search="onSearch"-->
<!-- @cancel="onCancel"-->
<!-- />-->
<!-- </form>-->
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<!--列表 -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toCheckComplete(item.classId)">
<div class="topContent">
<div class="topLeft">
<van-icon size="18" name="diamond-o" />
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{ item.schoolYear }}{{item.semester == '1' ? '上学期':'下学期'}}</span>
</div>
<div class="topRight">
<div style="font-size: 16px;font-weight: bold">{{ item.schoolYear }}{{ item.className }}</div>
</div>
</div>
<div class="bottomContent">
<div class="experimentType">
<div>计划实验数</div>
<div style="color:#4ea0fc;">{{ item.count }}</div>
</div>
<div class="experimentType">
<div>已完成实验数</div>
<div style="color:#4ea0fc;">{{ item.complete }}</div>
</div>
<div class="experimentType">
<div>完成比例</div>
<div style="color:#4ea0fc;">{{item.proportion}}%</div>
</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getClassCompleteList} from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter()
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
// const searchValue = ref('');
const semester = ref('');
const year = ref('');
const gradeId = store.state.gradeId
console.log('store123',store.state.gradeId)
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value',semester.value)
if(semester.value == '上学期' ||semester.value == '1' ){
semester.value = '1'
}else{
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
gradeId:gradeId
}
console.log('params',params)
//接口
let resultList = await getClassCompleteList(params)
console.log('resultList',resultList)
if(resultList.code == 200){
loading.value = false;
list.value = resultList.data
finished.value = true
}else{
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//点击卡片查看按钮
const toCheckComplete =(classId) => {
router.push({
path: '/laboratoryManagement/gradeLaboratoryComplete/checkGradeLaboratoryComplete',
query:{
id:classId,
schoolYear:year.value,
semester:semester.value
}
})
}
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card{
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent{
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
border-bottom:1px solid #aebdc5 ;
margin-left: 10px;
margin-right: 10px;
}
.topLeft{
display: flex;
align-items: center;
justify-content: center;
}
.topRight{
}
.bottomContent{
margin-top: 10px;
padding-bottom: 10px;
display: flex;
flex-direction: row;
justify-content: space-around;
}
.experimentType{
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
.schoolYearNew{
font-size:12px;
width: 165px;
height: 30px;
margin-top: 5px;
margin-left: 20px;
border: 1px solid silver;
border-radius: 5px
}
.van-cell.van-field.schoolYearNew{
padding: 0px!important;
height: 30px;
line-height: 30px;
}
</style>
<!--领导-->
<!--级部申请-实验室完成情况明细-->
<template>
<van-nav-bar title="实验室完成情况" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<van-nav-bar title="实验室完成情况明细" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="搜索实验等"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<!--列表 -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="请输入搜索关键词"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<van-list
v-model:loading="loading"
:finished="finished"
......@@ -19,33 +24,39 @@
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toCheckComplete(item.id)">
<div class="card" @click="toCheckComplete(item.classId)">
<div class="topContent">
<div class="topLeft">
<van-image :src="require('../../../assets/icon/laboratory.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">生物研究</span>
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物'}}研究</span>
</div>
<div class="topRight">
<div style="font-size: 14px;color: #FFFFFF">2023下学期</div>
<div style="font-size: 16px;font-weight: bold">{{ item.schoolYear }}{{item.semester == '1' ? '上学期':'下学期'}}</div>
</div>
</div>
<div class="bottomContent">
<div class="experimentType">
<div>级部</div>
<div style="color:#4ea0fc;">2022级</div>
<div style="color:#4ea0fc;">{{ item.grade }}</div>
</div>
<div class="experimentType">
<div>总班级数</div>
<div style="color:#4ea0fc;">20个</div>
<div style="color:#4ea0fc;">{{ item.count }}</div>
</div>
<div class="experimentType">
<div>已完成班级数</div>
<div style="color:#4ea0fc;">10个</div>
<div style="color:#4ea0fc;">{{ item.complete }}</div>
</div>
<div class="experimentType">
<div>未完成班级数</div>
<div style="color:#4ea0fc;">20个</div>
<div style="color:#4ea0fc;">{{ item.incomplete }}</div>
</div>
<div class="experimentType">
<div>完成比例</div>
<div style="color:#4ea0fc;">{{ item.proportion }}%</div>
</div>
</div>
......@@ -58,15 +69,27 @@
</template>
<script setup>
import {getLabDetail} from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore()
const router = useRouter()
const store = useStore();
const router = useRouter();
const semester = ref('');
const year = ref('');
const gradeId = store.state.gradeId
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref([1,2,3]);
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
......@@ -75,56 +98,42 @@ const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchValue = ref('');
//权限字段
const rolesArr = store.state.userInfo.roles
// 领导权限
const leaderRole = ref()
//实验室管理员
const managerRole = ref()
//级部
const levelPartRole = ref()
//教师
const teacherRole = ref()
//查找角色
// rolesArr.find(item => {
// if(item == ''){
// return leaderRole.value = true
// }else{
// leaderRole.value = false
// }
// })
//列表加载事件
const onLoad = () => {
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value',semester.value)
if(semester.value == '上学期' ||semester.value == '1' ){
semester.value = '1'
}else{
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
grade:searchValue.value,
experimentName:searchValue.value
}
console.log('params', params)
//接口
// let result = await getBorrowList(id,equipmentName.value)
// console.log('result',result)
// if(result.code == 200){
// loading.value = false;
// list.value = result.data
// finished.value = true
// }else{
// Toast("获取信息失败!");
// finished.value = true;
// loading.value = false;
// return;
// }
let result = await getLabDetail(params)
console.log('result',result)
if(result.code == 200){
loading.value = false;
list.value = result.data
finished.value = true
}else{
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//点击事件
const toCheckComplete = (id) => {
console.log('111')
router.push({
path:'/laboratoryManagement/laboratoryCompleteStatistics/checkComplete',
query:{
id:id
}
})
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
......@@ -142,6 +151,18 @@ const onSearch = (val) => {
const onCancel = () => {
onLoad()
};
//点击卡片查看按钮
const toCheckComplete =(classId) => {
router.push({
path: '/laboratoryManagement/laboratoryCompleteDetail/checkLaboratoryComplete',
query:{
classId:classId,
schoolYear:year.value,
semester:semester.value,
}
})
}
//返回上一页
const goback = () => {
router.back();
......@@ -152,6 +173,8 @@ const goback = () => {
.card{
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent{
display: flex;
......@@ -159,7 +182,9 @@ const goback = () => {
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
border-bottom:1px solid #6f787d ;
border-bottom:1px solid #aebdc5 ;
margin-left: 10px;
margin-right: 10px;
}
.topLeft{
display: flex;
......@@ -167,13 +192,7 @@ const goback = () => {
justify-content: center;
}
.topRight{
margin-top: -5px;
text-align: center;
width: 50px;
height: 20px;
line-height: 20px;
border-radius: 10px;
background: #4ea0fc;
}
.bottomContent{
margin-top: 10px;
......@@ -189,4 +208,19 @@ const goback = () => {
display: flex;
flex-direction: column;
}
.schoolYearNew{
font-size:12px;
width: 165px;
height: 30px;
margin-top: 5px;
margin-left: 20px;
border: 1px solid silver;
border-radius: 5px
}
.van-cell.van-field.schoolYearNew{
padding: 0px!important;
height: 30px;
line-height: 30px;
}
</style>
<template>
</template>
<script>
export default {
name: "applyTeacherApprove"
}
</script>
<style scoped>
</style>
<!-- 实验室管理员-年级实验预约列表-->
<template>
<van-nav-bar title="年级实验室预约申请列表" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div>
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<!-- <form action="/">-->
<!-- <van-search-->
<!-- v-model="searchValue"-->
<!-- show-action-->
<!-- placeholder="请输入搜索关键词"-->
<!-- @search="onSearch"-->
<!-- @cancel="onCancel"-->
<!-- />-->
<!-- </form>-->
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toDetail(item.id)">
<div class="topContent">
<div class="topLeft">
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物'}}研究</span>
</div>
<div class="topRight">
<div v-if="item.declareState == '3'" class="assigned">已分配</div>
<div v-else class="unAssigned">未分配</div>
</div>
</div>
<div class="time">
<van-image style="height: 14px;width: 14px" :src="require('../../../../assets/icon/time.png')"></van-image>
<span style="font-size: 14px;padding-left: 5px;display: inline-block">{{ item.plannedStartTime }} - {{item.plannedEndTime}}</span>
</div>
<div class="bottomContent">
<div>{{ item.grade }}</div>
<div>{{item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物'}} </div>
<div>{{ item.schoolYear }}{{item.semester == '1' ? '上学期' : '下学期'}}</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getGradeAllocationList } from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter()
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const semester = ref('');
const year = ref('');
const searchValue = ref('');
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value',semester.value)
if(semester.value == '上学期' ||semester.value == '1' ){
semester.value = '1'
}else{
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value
}
console.log('params', params)
//接口
let result = await getGradeAllocationList(params)
console.log('result',result)
if(result.code == 200){
loading.value = false;
list.value = result.data
finished.value = true
}else{
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//点击事件
const toDetail = (id) =>{
router.push({
path:'/laboratoryManagement/gradeLaboratory/checkGradeComplete',
query:{
id:id,
name:'grade'
}
})
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card{
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent{
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
}
.topLeft{
margin-left: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.topRight{
margin-top: -5px;
text-align: center;
width: 60px;
height: 20px;
line-height: 25px;
color: #FFFFFF;
font-size: 14px;
margin-right: 10px;
}
.assigned{
background:#00c15d ;
border-radius: 10px;
}
.unAssigned{
background:#4ea0fc ;
border-radius: 10px;
}
.time{
margin-left: 20px;
margin-right: 20px;
height: 20px;
line-height: 20px;
border-bottom:1px solid #aebdc5 ;
padding-bottom: 10px;
}
.bottomContent{
font-size: 14px;
margin-top: 10px;
padding-bottom: 10px;
display: flex;
flex-direction: row;
justify-content: space-around;
color: #6f787d;
}
.experimentType{
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
</style>
<!--实验室管理员-个人实验审批-->
<template>
<van-nav-bar title="审批教师演示实验" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="请输入搜索关键词"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toDetail(item.id)">
<div class="topContent">
<div class="topLeft">
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span
style="font-size: 16px;font-weight: bold;padding-left: 5px">{{ item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物' }}研究</span>
</div>
<div class="topRight">
<div v-if="item.declareState == '3'" class="assigned">已分配</div>
<div v-else class="unAssigned">未分配</div>
</div>
</div>
<div class="middleContent">
<div style="margin-right: 50px">
<span>级部:</span>
<span>{{ item.grade }}</span>
</div>
<div>
<span>学期:</span>
<span>{{ item.schoolYear }}{{item.semester == '1' ? '上学期':'下学期'}}</span>
</div>
</div>
<div class="bottomContent">
<div style="margin-right: 70px">
<span>教师:</span>
<span>{{ item.applyName }}</span>
</div>
<div>
<span>实验室:</span>
<span>{{ item.labName }}</span>
</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getPersonalApproveList} from '@/service/laboratoryManagement'
import {reactive, onMounted, toRefs, ref} from "vue";
import {useStore} from "vuex";
import {useRouter, useRoute} from "vue-router";
import {formatDate} from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const semester = ref('');
const year = ref('');
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchValue = ref('');
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value', semester.value)
if (semester.value == '上学期' || semester.value == '1') {
semester.value = '1'
} else {
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
querText: searchValue.value
}
console.log('params', params)
//接口
let result = await getPersonalApproveList(params)
console.log('result', result)
if (result.code == 200) {
loading.value = false;
list.value = result.data
finished.value = true
} else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//点击事件
const toDetail = (id) => {
router.push({
path: '/laboratoryManagement/gradeLaboratory/checkGradeComplete',
query: {
id: id,
name: 'personal'
}
})
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card {
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent {
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
}
.topLeft {
margin-left: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.topRight {
margin-top: -5px;
text-align: center;
width: 60px;
height: 20px;
line-height: 25px;
color: #FFFFFF;
font-size: 14px;
margin-right: 10px;
}
.assigned {
background: #00c15d;
border-radius: 10px;
}
.unAssigned {
background: #4ea0fc;
border-radius: 10px;
}
.time {
margin-left: 20px;
margin-right: 20px;
height: 20px;
line-height: 20px;
border-bottom: 1px solid #aebdc5;
padding-bottom: 10px;
}
.bottomContent, .middleContent {
font-size: 14px;
margin: 10px 20px;
padding-bottom: 10px;
display: flex;
flex-direction: row;
/*justify-content: space-between;*/
color: #6f787d;
}
.middleContent {
border-bottom: 1px solid silver;
}
.experimentType {
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
</style>
<!--实验室管理员-教师实验室预约-->
<template>
<van-nav-bar title="教师实验室预约列表" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<div>
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<!-- <form action="/">-->
<!-- <van-search-->
<!-- v-model="searchValue"-->
<!-- show-action-->
<!-- placeholder="请输入搜索关键词"-->
<!-- @search="onSearch"-->
<!-- @cancel="onCancel"-->
<!-- />-->
<!-- </form>-->
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toDetail(item.id,item.applyState)">
<div class="topContent">
<div class="topLeft">
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span
style="font-size: 16px;font-weight: bold;padding-left: 5px">{{ item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物' }}研究</span>
</div>
<div class="topRight">
<div v-if="item.applyState == '1'" class="assigned">已审批</div>
<div v-if="item.applyState == '0'" class="unAssigned">待审批</div>
</div>
</div>
<div class="time">
<van-image style="height: 14px;width: 14px"
:src="require('../../../../assets/icon/time.png')"></van-image>
<span style="font-size: 14px;padding-left: 5px;display: inline-block">{{ item.experimentTime }}</span>
<span style="font-size: 14px;margin-left: 50px">{{ item.section }}</span>
</div>
<div class="middleContent">
<div style="height: 20px">
<van-image style="height: 14px;width: 14px;vertical-align: middle"
:src="require('../../../../assets/icon/book.png')"></van-image>
<span style="font-size: 14px;padding-left: 5px;display: inline-block">{{ item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物' }}</span>
</div>
<div style="height: 20px">
<van-image style="height: 14px;width: 14px;vertical-align: middle"
:src="require('../../../../assets/icon/grade.png')"></van-image>
<span style="font-size: 14px;padding-left: 5px;display: inline-block">{{ item.grade }}</span>
</div>
<div style="height: 20px">
<van-image style="height: 14px;width: 14px;vertical-align: middle"
:src="require('../../../../assets/icon/calendar.png')"></van-image>
<span style="font-size: 14px;padding-left: 5px;display: inline-block">{{ item.schoolYear }}{{item.semester == '1' ? '上学期' : '下学期'}}</span>
</div>
</div>
<div class="bottomContent">
<div>
<van-image style="height: 14px;width: 14px;vertical-align: middle"
:src="require('../../../../assets/icon/person.png')"></van-image>
<span style="font-size: 14px;padding-left: 5px;display: inline-block">{{ item.className }}</span>
</div>
<div>
<van-image style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/group.png')"></van-image>
<span style="font-size: 14px;padding-left: 3px;display: inline-block">{{ item.experimentClassify == '1' ? '分组实验' : item.experimentClassify == '2' ? '演示实验' : '探究实验' }}</span>
</div>
<div>
<van-image style="height: 17px;width: 17px;vertical-align: middle"
:src="require('../../../../assets/icon/people.png')"></van-image>
<span style="font-size: 14px;padding-left: 5px;display: inline-block">{{ item.applyName }}</span>
</div>
<div>
<van-image style="height: 15px;width: 15px;vertical-align: middle"
:src="require('../../../../assets/icon/room.png')"></van-image>
<span style="font-size: 14px;padding-left: 5px;display: inline-block">{{ item.labName }}</span>
</div>
<s></s>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getTeacherOrderList} from '@/service/laboratoryManagement'
import {reactive, onMounted, toRefs, ref} from "vue";
import {useStore} from "vuex";
import {useRouter, useRoute} from "vue-router";
import {formatDate} from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const semester = ref('');
const year = ref('');
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchValue = ref('');
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value', semester.value)
if (semester.value == '上学期' || semester.value == '1') {
semester.value = '1'
} else {
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value
}
console.log('params', params)
//接口
let result = await getTeacherOrderList(params)
console.log('result', result)
if (result.code == 200) {
loading.value = false;
list.value = result.data
finished.value = true
} else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//点击事件
const toDetail = (id, applyState) => {
//已审批-查看审批
router.push({
path: '/laboratoryManagement/teacherLaboratory/teacherLaboratoryApprove',
query: {
id: id,
applyState: applyState
}
})
// 待审批-审批申请
// router.push({
// path: '/laboratoryManagement/teacherLaboratory/applyTeacherApprove',
// query:{
// id:id
// }
// })
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card {
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent {
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
}
.topLeft {
margin-left: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.topRight {
margin-top: -5px;
text-align: center;
width: 60px;
height: 20px;
line-height: 25px;
color: #FFFFFF;
font-size: 14px;
margin-right: 10px;
}
.assigned {
background: #00c15d;
border-radius: 10px;
}
.unAssigned {
background: #4ea0fc;
border-radius: 10px;
}
.time {
margin-left: 20px;
margin-right: 20px;
height: 20px;
line-height: 20px;
border-bottom: 1px solid #aebdc5;
padding-bottom: 10px;
}
.middleContent {
margin-left: 20px;
margin-right: 20px;
display: flex;
justify-content: space-between;
border-bottom: 1px solid #aebdc5;
height: 40px;
line-height: 40px;
}
.bottomContent {
margin-left: 20px;
margin-right: 20px;
font-size: 14px;
margin-top: 10px;
padding-bottom: 20px;
display: flex;
flex-direction: row;
justify-content: space-between;
color: #6f787d;
}
.experimentType {
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
</style>
<!--实验室管理员-教师实验室预约-教师实验室记录查看-->
<template>
<van-nav-bar title="教师实验室记录查看" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div class="topTitle">实验信息
</div>
<van-form>
<van-cell-group inset>
<van-field
v-model="form.sub"
readonly
label="学科"
/>
<van-field
readonly
v-model="form.grade"
label="级部"
/>
<van-field
readonly
v-model="form.semester"
label="学期"
/>
<van-field
readonly
v-model="form.className"
label="班级"
/>
<van-field
readonly
v-model="form.section"
label="节次"
/>
<van-field
readonly
v-model="form.experimentName"
label="实验名称"
/>
<van-field
readonly
v-model="form.experimentClassify"
label="实验分类"
/>
<van-field
readonly
v-model="form.labName"
label="实验室"
/>
<van-field
readonly
v-model="form.chapterContent"
label="章节内容"
/>
<van-field
readonly
v-model="form.experimentTime"
label="实验时间"
/>
<div style="margin: 10px">
<div style="font-size: 16px;margin: 8px;font-size: 14px;color: #646566">实验用品</div>
<van-field
readonly
style="border: 1px solid #ebedf0;border-radius: 10px"
name="message"
v-model="form.experimentUseGoods"
rows="3"
autosize
type="textarea"
/>
</div>
</van-cell-group>
<div v-if="applyState == '1'" style="margin: 16px;">
<van-button round block type="primary" @click="goback">
关闭
</van-button>
</div>
<div v-else style="margin: 20px;display: flex;justify-content: center">
<van-button @click="submit" style="margin-right: 50px;width: 90px;height: 30px" round type="primary" native-type="submit">
同意
</van-button>
<van-button style="width: 90px;height: 30px" round type="success" @click="goback">
取消
</van-button>
</div>
</van-form>
</template>
<script setup>
import {getTeacherOrderDetail,labDetailApprove} from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const route = useRoute();
const applyState = route.query.applyState;
const form = reactive({
sub:'',
grade:'',
semester:'',
className:'',
section:'',
experimentName:'',
experimentClassify:'',
labName:'',
chapterContent:'',
experimentTime:'',
experimentUseGoods:''
})
onMounted(async () => {
let res = await getTeacherOrderDetail(route.query.id)
console.log('res',res)
if(res.code == 200){
Object.assign(form,res.data)
form.sub = form.sub == '1' ? '物理' : form.sub == '2' ? '化学' : '生物';
form.semester = form.semester == '1' ? '上学期' : '下学期';
form.experimentClassify = form.experimentClassify == '1' ? '分组实验': form.experimentClassify == '2' ? '演示实验' : '探究实验';
}
})
const submit = async () => {
const params = {
id:route.query.id
}
let res = await labDetailApprove(params)
console.log('res',res)
if(res.code == 200){
Toast('审批成功');
router.back()
}
}
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
</style>
<!--教师申请-个人实验申请-->
<template>
<van-nav-bar title="教师演示实验申请" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="搜索学年、级部、实验名称"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<div style="display:flex;justify-content: space-between">
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<!--新增按钮 -->
<div style="margin-right: 20px;">
<van-button size="mini" round type="primary" @click="addDetail">新增申请</van-button>
</div>
</div>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toDetail(item.id)">
<div class="topContent">
<div class="topLeft">
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span
style="font-size: 16px;font-weight: bold;padding-left: 5px">{{ item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物' }}研究</span>
</div>
<div class="topRight">
<div v-if="item.declareState == '3'" class="unAssigned">已分配</div>
<div v-else class="assigned">未分配</div>
</div>
</div>
<div class="middleContent">
<div style="width: 60%">
<span>级部:</span>
<span>{{ item.grade }}</span>
</div>
<div style="width: 40%;">
<span>学期:</span>
<span>{{ item.schoolYear }}{{item.semester == '1' ? '上学期':'下学期'}}</span>
</div>
</div>
<div class="bottomContent" style="padding-bottom: 20px">
<div style="width: 60%">
<span>教师:</span>
<span>{{ item.applyName }}</span>
</div>
<div style="width: 40%;overflow: hidden; white-space: nowrap; text-overflow: ellipsis">
<span>实验室:</span>
<span>{{ item.labName }}</span>
</div>
</div>
<div class="bottomButton" v-if="item.declareState != '3'">
<van-button color="#e5c35d" size="small" class="edit" @click="toEdit(item.id)">修改</van-button>
<van-button type="danger" size="small" class="delete" @click="handleDelete(item.id)">删除</van-button>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getPersonalLabApplyList,deleteApply} from '@/service/laboratoryManagement'
import {reactive, onMounted, toRefs, ref} from "vue";
import {useStore} from "vuex";
import {useRouter, useRoute} from "vue-router";
import {formatDate} from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const semester = ref('');
const year = ref('');
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchValue = ref('');
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value', semester.value)
if (semester.value == '上学期' || semester.value == '1') {
semester.value = '1'
} else {
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
querText: searchValue.value,
}
console.log('params', params)
//接口
let result = await getPersonalLabApplyList(params)
console.log('result', result)
if (result.code == 200) {
loading.value = false;
list.value = result.data
finished.value = true
} else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//新增按钮
const addDetail = () => {
router.push({
path: '/laboratoryManagement/PersonalLaboratoryApplication/PersonalLaboratoryApplyDetail',
query: {
name: '新增'
}
})
}
//card点击事件
const toDetail = (id) => {
router.push({
path: '/laboratoryManagement/PersonalLaboratoryApplication/PersonalLaboratoryApplyDetail',
query: {
id: id,
name: '查看'
}
})
}
//修改按钮
const toEdit = (id) => {
router.push({
path: '/laboratoryManagement/PersonalLaboratoryApplication/PersonalLaboratoryApplyDetail',
query: {
id: id,
name: '修改'
}
})
}
//删除按钮
const handleDelete = async (id) => {
let result = await deleteApply(id)
console.log('result',result)
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card {
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent {
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
}
.topLeft {
margin-left: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.topRight {
margin-top: -5px;
text-align: center;
width: 60px;
height: 20px;
line-height: 25px;
color: #FFFFFF;
font-size: 14px;
margin-right: 10px;
}
.assigned {
background: #00c15d;
border-radius: 10px;
}
.unAssigned {
background: #4ea0fc;
border-radius: 10px;
}
.time {
margin-left: 20px;
margin-right: 20px;
height: 20px;
line-height: 20px;
border-bottom: 1px solid #aebdc5;
padding-bottom: 10px;
}
.bottomContent, .middleContent {
font-size: 14px;
margin: 10px 20px;
padding-bottom: 10px;
display: flex;
flex-direction: row;
/*justify-content: space-between;*/
color: #6f787d;
}
.middleContent {
border-bottom: 1px solid silver;
}
.experimentType {
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
.schoolYearNew {
font-size: 12px;
width: 165px;
height: 30px;
margin-top: 5px;
margin-left: 20px;
border: 1px solid silver;
border-radius: 5px;
}
.van-cell.van-field.schoolYearNew {
padding: 0px !important;
height: 30px;
line-height: 30px;
}
.bottomButton {
display: flex;
justify-content: right;
}
.edit, .delete {
border-radius: 10px;
width: 55px;
height: 30px;
line-height: 25px;
margin-right: 10px;
margin-bottom: 10px;
}
</style>
<template>
<van-nav-bar :title="title" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div class="topTitle">实验信息
</div>
<van-form>
<van-cell-group inset>
<van-field
v-model="formData.sub"
:readonly="name == '查看' ? true : false"
label="学科"
/>
<van-field
:readonly="name == '查看' ? true : false"
v-model="formData.grade"
label="级部"
/>
<van-field
:readonly="name == '查看' ? true : false"
v-model="formData.semester"
label="学期"
/>
<van-field
v-if="name == '查看'"
readonly
v-model="formData.experimentTime"
label="实验时间"
/>
<van-field
:readonly="name == '查看' ? true : false"
v-model="formData.experimentName"
label="实验名称"
/>
<van-field
v-model="value"
is-link
readonly
name="calendar"
label="实验时间"
placeholder="点击选择实验时间"
@click="showCalendar = true"
/>
<van-calendar v-model:show="showCalendar" type="range" @confirm="onConfirm" />
<div v-if="name == '新增' ||name =='修改'">
<van-field
is-link
readonly
v-model="formData.experimentClassify"
label="实验分类"
@click="showPickerClassify = true"
/>
<van-popup v-model:show="showPickerClassify" position="bottom">
<van-picker
:columns="columnsClassify"
@confirm="onConfirmClassify"
@cancel="showPickerClassify = false"
/>
</van-popup>
</div>
<van-field
v-if="name == '查看'"
readonly
v-model="formData.experimentClassify"
label="实验分类"
/>
<van-field
:readonly="name == '查看' ? true : false"
v-model="formData.chapterContent"
label="章节内容"
/>
<div v-if="name == '新增' ||name =='修改'">
<van-field
v-model="formData.labName"
is-link
readonly
name="picker"
label="实验室"
placeholder="选择实验室"
@click="showPickerLab = true"
/>
<van-popup v-model:show="showPickerLab" position="bottom">
<van-picker
:columns="columnsLab"
@confirm="onConfirmLab"
@cancel="showPickerLab = false"
/>
</van-popup>
</div>
<van-field
v-if="name == '查看'"
readonly
v-model="formData.labName"
label="实验室"
/>
<div v-if="name == '新增' ||name =='修改'">
<van-field
v-model="formData.section"
label="节次"
readonly
is-link
placeholder="选择节次"
@click="showPickerSection = true"
/>
<van-popup v-model:show="showPickerSection" position="bottom">
<van-picker
:columns="columnsSection"
@confirm="onConfirmSection"
@cancel="showPickerSection = false"
/>
</van-popup>
</div>
<van-field
v-if="name == '查看'"
readonly
v-model="formData.section"
label="节次"
/>
<div v-if="name == '新增' ||name =='修改'">
<van-field
v-model="formData.className"
label="班级"
is-link
readonly
placeholder="选择班级"
@click="showPickerClass = true"
/>
<van-popup v-model:show="showPickerClass" position="bottom">
<van-picker
:columns="columnsClass"
@confirm="onConfirmClass"
@cancel="showPickerClass = false"
/>
</van-popup>
</div>
<div>
<van-field
v-if="name == '查看'"
readonly
v-model="formData.className"
label="班级"
/>
</div>
<div style="margin: 10px">
<div style="font-size: 16px;margin: 8px;font-size: 14px;color: #646566">实验用品</div>
<van-field
:readonly="name == '查看' ? true : false"
style="border: 1px solid #ebedf0;border-radius: 10px"
name="message"
v-model="formData.experimentUseGoods"
rows="3"
autosize
type="textarea"
/>
</div>
</van-cell-group>
<div v-if="name == '查看'" style="margin: 16px;">
<van-button round block type="primary" @click="goback">
关闭
</van-button>
</div>
<div v-else style="margin: 20px;display: flex;justify-content: center">
<van-button style="margin-right: 50px;width: 90px;height: 30px" round type="primary" native-type="submit">
同意
</van-button>
<van-button style="width: 90px;height: 30px" round type="success" @click="goback">
取消
</van-button>
</div>
</van-form>
</template>
<script setup>
import { getPersonalApplyDetail, addPersonalApply,editApply, getLabList,getDicts } from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const route = useRoute();
const title = ref('')
const name = route.query.name
const formData = reactive({
sub:'',
grade:'',
semester:'',
experimentTime:'',
experimentName:'',
experimentClassify:'',
chapterContent:'',
laboratory:'',
labName:'',
section:'',
className:'',
message:''
})
onMounted(async () => {
if(route.query.id){
let detailResult = await getPersonalApplyDetail(route.query.id)
console.log('detailResult',detailResult)
if(detailResult.code == 200){
Object.assign(formData,detailResult.data)
formData.sub = formData.sub == '1' ? '物理' : formData.sub == '2' ? '化学' : '生物';
formData.semester = formData.semester == '1' ? '上学期' : '下学期';
formData.experimentClassify = formData.experimentClassify == '1' ? '分组实验': formData.experimentClassify == '2' ? '演示实验' : '探究实验';
}
if(name == '修改'){
title.value = '修改教师演示实验室申请'
}
if(name == '查看'){
title.value = '教师演示实验室申请明细'
}
}else{
title.value = '新增教师演示实验室申请'
//实验室下拉框
let labResult = await getLabList()
console.log('labResult',labResult)
if(labResult.code == 200){
columnsLab.value = labResult.rows.map(item => {
return{
text:item.labName,
value:item.id
}
})
console.log('columnsLab.value',columnsLab.value)
};
//节次下拉框
let sectionResult = await getDicts('course_arrange')
console.log('sectionResult',sectionResult)
//实验类型下拉框
let classifyResult = await getDicts('experiment_classify')
console.log('classifyResult',classifyResult)
}
})
//实验时间选择
const showCalendar = ref(false)
//实验分类下拉框
const showPickerClassify = ref(false);
const columnsClassify = ['杭州', '宁波', '温州', '嘉兴', '湖州'];
const onConfirmClassify = (value) => {
console.log('value',value)
formData.classify = value;
showPickerClassify.value = false;
};
//实验室分类下拉框
const experimentNameId= ref('')
const showPickerLab = ref(false);
// const columnsLab = ['杭州', '宁波', '温州', '嘉兴', '湖州'];
const onConfirmLab = (value) => {
formData.labName = value.text;
experimentNameId.value = value.value;
showPickerLab.value = false;
};
//节次分类下拉框
const showPickerSection = ref(false);
const columnsSection = ['杭州', '宁波', '温州', '嘉兴', '湖州'];
const onConfirmSection = (value) => {
formData.section = value;
showPickerSection.value = false;
};
//班级分类下拉框
const showPickerClass = ref(false);
const columnsClass = ['杭州', '宁波', '温州', '嘉兴', '湖州'];
const onConfirmClass = (value) => {
formData.class = value;
showPickerClass.value = false;
};
const checkForm = reactive({
})
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
</style>
<template>
<van-nav-bar title="教师实验室申请记录明细" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div class="topTitle">实验信息
</div>
<van-form>
<van-cell-group inset>
<van-field
v-model="formData.sub"
readonly
label="学科"
/>
<van-field
readonly
v-model="formData.grade"
label="级部"
/>
<van-field
readonly
v-model="formData.semester"
label="学期"
/>
<van-field
readonly
v-model="formData.className"
label="班级"
/>
<van-field
readonly
v-model="formData.experimentTime"
label="实验时间"
/>
<van-field
readonly
v-model="formData.section"
label="节次"
/>
<van-field
readonly
v-model="formData.experimentName"
label="实验名称"
/>
<van-field
readonly
v-model="formData.experimentClassify"
label="实验分类"
/>
<van-field
readonly
v-model="formData.labName"
label="实验室"
/>
<van-field
readonly
v-model="formData.chapterContent"
label="章节内容"
/>
<div style="margin: 10px">
<div style="font-size: 16px;margin: 8px;font-size: 14px;color: #646566">实验用品</div>
<van-field
readonly
style="border: 1px solid #ebedf0;border-radius: 10px"
name="message"
v-model="formData.experimentUseGoods"
rows="3"
autosize
type="textarea"
/>
</div>
</van-cell-group>
<div style="margin: 16px;">
<van-button size="small" round block type="primary" @click="goback">
关闭
</van-button>
</div>
</van-form>
</template>
<script setup>
import {getLabApplyDetail } from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const route = useRoute();
const title = ref('')
const name = route.query.name
const formData = reactive({
sub:'',
grade:'',
semester:'',
className:'',
experimentTime:'',
section:'',
experimentName:'',
experimentClassify:'',
labName:'',
chapterContent:'',
experimentUseGoods:''
})
onMounted(async () => {
let result = await getLabApplyDetail(route.query.id)
console.log('result',result)
if(result.code == 200){
Object.assign(formData,result.data)
form.sub = form.sub == '1' ? '物理' : form.sub == '2' ? '化学' : '生物';
form.semester = form.semester == '1' ? '上学期' : '下学期';
form.experimentClassify = form.experimentClassify == '1' ? '分组实验': form.experimentClassify == '2' ? '演示实验' : '探究实验';
}else{
Toast("获取信息失败!");
}
})
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
</style>
<!--教师-->
<template>
<van-nav-bar title="教师实验室申请记录" left-text="返回" left-arrow @click-left="goback"></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="请输入搜索关键词"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toDetail(item.id)">
<div class="topContent">
<div class="topLeft">
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle"
:src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span
style="font-size: 16px;font-weight: bold;padding-left: 5px">{{ item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物' }}研究</span>
</div>
<div class="topRight">
<div v-if="item.applyState == '0'" class="assigned">未回复</div>
<div v-if="item.applyState == '1'" class="unAssigned">已回复</div>
</div>
</div>
<div class="middleContent">
<div style="width: 60%">
<span>级部:</span>
<span>2021级</span>
</div>
<div style="width: 40%;">
<span>学期:</span>
<span>2022下学期</span>
</div>
</div>
<div class="bottomContent" style="padding-bottom: 20px">
<div style="width: 60%">
<span>实验时间:</span>
<span>2023-08-16</span>
</div>
<div style="width: 40%;overflow: hidden; white-space: nowrap; text-overflow: ellipsis">
<span>实验室:</span>
<span>101、401、102、103、104</span>
</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import {getLabApplyList} from '@/service/laboratoryManagement'
import {reactive, onMounted, toRefs, ref} from "vue";
import {useStore} from "vuex";
import {useRouter, useRoute} from "vue-router";
import {formatDate} from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const semester = ref('');
const year = ref('');
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchValue = ref('');
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value', semester.value)
if (semester.value == '上学期' || semester.value == '1') {
semester.value = '1'
} else {
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
querText: searchValue.value,
userId: store.state.userInfo.userId
}
console.log('params', params)
//接口
let result = await getLabApplyList(params)
console.log('result', result)
if (result.code == 200) {
loading.value = false;
list.value = result.data
finished.value = true
} else {
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//card点击事件
const toDetail = (id) => {
router.push({
path: '/laboratoryManagement/laboratoryApplicationRecord/checkLaboratoryApplication',
query: {
id: id
}
})
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card {
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent {
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
}
.topLeft {
margin-left: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.topRight {
margin-top: -5px;
text-align: center;
width: 60px;
height: 20px;
line-height: 25px;
color: #FFFFFF;
font-size: 14px;
margin-right: 10px;
}
.assigned {
background: #00c15d;
border-radius: 10px;
}
.unAssigned {
background: #4ea0fc;
border-radius: 10px;
}
.time {
margin-left: 20px;
margin-right: 20px;
height: 20px;
line-height: 20px;
border-bottom: 1px solid #aebdc5;
padding-bottom: 10px;
}
.bottomContent, .middleContent {
font-size: 14px;
margin: 10px 20px;
padding-bottom: 10px;
display: flex;
flex-direction: row;
/*justify-content: space-between;*/
color: #6f787d;
}
.middleContent {
border-bottom: 1px solid silver;
}
.experimentType {
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
.schoolYearNew {
font-size: 12px;
width: 165px;
height: 30px;
margin-top: 5px;
margin-left: 20px;
border: 1px solid silver;
border-radius: 5px
}
.van-cell.van-field.schoolYearNew {
padding: 0px !important;
height: 30px;
line-height: 30px;
}
</style>
<!--教师申请-实验室安排-->
<template>
<van-nav-bar title="教师实验室安排" left-text="返回" left-arrow @click-left="goback" ></van-nav-bar>
<div>
<!-- 搜索框 -->
<form action="/">
<van-search
v-model="searchValue"
show-action
placeholder="搜索级部、实验名称"
@search="onSearch"
@cancel="onCancel"
/>
</form>
<!--学年/学期 -->
<schoolYear @select="handleSelect"></schoolYear>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<div v-for="(item,index) in list" :key="index">
<div class="card" @click="toDetail(item.id)">
<div class="topContent">
<div class="topLeft">
<van-image v-if="item.sub == '1'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/physics.png')"></van-image>
<van-image v-if="item.sub == '3'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/biology.png')"></van-image>
<van-image v-if="item.sub == '2'" style="height: 20px;width: 20px;vertical-align: middle" :src="require('../../../../assets/icon/chemistry.png')"></van-image>
<span style="font-size: 16px;font-weight: bold;padding-left: 5px">{{item.sub == '1' ? '物理' : item.sub == '2' ? '化学' : '生物'}}研究</span>
</div>
<div class="topRight">
<div class="assigned" @click="toApply(item.id)">申请</div>
<!-- <div class="unAssigned">未分配</div>-->
</div>
</div>
<div class="middleContent">
<div style="width: 60%">
<span>级部:</span>
<span>{{ item.grade }}</span>
</div>
<div style="width: 40%;">
<span>学期:</span>
<span>{{ item.schoolYear }}{{item.semester == '1' ? '上学期':'下学期'}} </span>
</div>
</div>
<div class="bottomContent" style="padding-bottom: 20px">
<div style="width: 60%">
<span>实验时间:</span>
<span>{{ item.experimentTime }}</span>
</div>
<div style="width: 40%;overflow: hidden; white-space: nowrap; text-overflow: ellipsis">
<span>实验室:</span>
<span>{{ item.labName }}</span>
</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</template>
<script setup>
import { getGradeAppointmentList } from '@/service/laboratoryManagement'
import { reactive, onMounted, toRefs, ref } from "vue";
import { useStore } from "vuex";
import { useRouter, useRoute } from "vue-router";
import { formatDate } from "@/utils/time";
import {Toast} from "vant";
const store = useStore();
const router = useRouter();
const semester = ref('');
const year = ref('');
const searchValue = ref('');
//选中学年的参数
const handleSelect = (value) => {
console.log('handleSelect', value)
year.value = value[0];
semester.value = value[1];
onLoad()
}
//列表数据
const list = ref([]);
//loading 和 finished 两个变量控制加载状态
//当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。
//此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。
// 若数据已全部加载完毕,则直接将 finished 设置成 true 即可。
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
//列表加载事件
const onLoad = async () => {
if (refreshing.value) {
list.value = [];
refreshing.value = false;
}
console.log('semester.value',semester.value)
if(semester.value == '上学期' ||semester.value == '1' ){
semester.value = '1'
}else{
semester.value = '2'
}
const params = {
schoolYear: year.value,
semester: semester.value,
querText: searchValue.value
}
console.log('params', params)
//接口
let result = await getGradeAppointmentList(params)
console.log('result',result)
if(result.code == 200){
loading.value = false;
list.value = result.data
finished.value = true
}else{
Toast("获取信息失败!");
finished.value = true;
loading.value = false;
return;
}
}
//card点击事件
const toDetail = (id) =>{
router.push({
path: '/laboratoryManagement/laboratoryArrangement/laboratoryArrangementDetail',
query:{
id:id,
name:'查看'
}
})
}
//申请按钮点击事件
const toApply = (id) => {
router.push({
path: '/laboratoryManagement/laboratoryArrangement/laboratoryArrangementDetail',
query:{
id:id,
name:'申请'
}
})
}
//下拉刷新
const onRefresh = () => {
//// 清空列表数据
finished.value = false;
// 重新加载数据
// 将 loading 设置为 true,表示处于加载状态
loading.value = true;
onLoad()
};
//搜索
const onSearch = (val) => {
onLoad()
};
//取消
const onCancel = () => {
onLoad()
};
//返回上一页
const goback = () => {
router.back();
}
</script>
<style scoped>
.card{
background: #FFFFFF;
margin: 10px;
border-radius: 20px;
}
.topContent{
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
}
.topLeft{
margin-left: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.topRight{
margin-top: -5px;
text-align: center;
width: 60px;
height: 20px;
line-height: 25px;
color: #FFFFFF;
font-size: 14px;
margin-right: 10px;
}
.assigned{
background:#00c15d ;
border-radius: 10px;
}
.unAssigned{
background:#4ea0fc ;
border-radius: 10px;
}
.time{
margin-left: 20px;
margin-right: 20px;
height: 20px;
line-height: 20px;
border-bottom:1px solid #aebdc5 ;
padding-bottom: 10px;
}
.bottomContent,.middleContent{
font-size: 14px;
margin: 10px 20px;
padding-bottom: 10px;
display: flex;
flex-direction: row;
/*justify-content: space-between;*/
color: #6f787d;
}
.middleContent{
border-bottom: 1px solid silver;
}
.experimentType{
justify-content: center;
align-items: center;
font-size: 14px;
display: flex;
flex-direction: column;
}
.schoolYearNew{
font-size:12px;
width: 165px;
height: 30px;
margin-top: 5px;
margin-left: 20px;
border: 1px solid silver;
border-radius: 5px
}
.van-cell.van-field.schoolYearNew{
padding: 0px!important;
height: 30px;
line-height: 30px;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment