文档与数据管理系统框架修改
@ -1,54 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
|
|
||||||
//分页查询活动宣传
|
|
||||||
export function queryActivityPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/activity/queryActivityPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//新增活动宣传
|
|
||||||
export function addActivity(formData:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/activity/addActivity' ,
|
|
||||||
method: 'post',
|
|
||||||
data: formData,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'multipart/form-data'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//修改活动宣传
|
|
||||||
export function updateActivity(formData:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/activity/updateActivity' ,
|
|
||||||
method: 'post',
|
|
||||||
data: formData,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'multipart/form-data'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//删除活动宣传
|
|
||||||
export function delActivity(queryParams:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/activity/delActivity' ,
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//修改活动宣传状态
|
|
||||||
export function updateActivityStatus(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/activity/updateActivityStatus' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,91 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
|
|
||||||
//查询问答
|
|
||||||
export function queryAppQuestionAnswerPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/question-answer/queryAppQuestionAnswerPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//问答问题
|
|
||||||
export function updateAppQuestionAnswer(data:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/question-answer/updateAppQuestionAnswer' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//导出日志
|
|
||||||
export function exportUserLogData(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/app-user-logs/exportUserLogData' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//查询日志
|
|
||||||
export function queryAppUserLogsPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/app-user-logs/queryAppUserLogsPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//查询日志
|
|
||||||
export function queryAppUserHistoryLogsPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/app-user-logs/queryAppUserHistoryLogsPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//查询资讯
|
|
||||||
export function queryAppNewsPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/app-news/queryAppNewsPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//添加资讯
|
|
||||||
export function addAppNews(formData:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/app-news/addAppNews' ,
|
|
||||||
method: 'post',
|
|
||||||
data: formData,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'multipart/form-data'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//修改资讯
|
|
||||||
export function updateAppNews(formData:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/app-news/updateAppNews' ,
|
|
||||||
method: 'post',
|
|
||||||
data: formData,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'multipart/form-data'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//修改资讯状态
|
|
||||||
export function updateAppNewsStatus(data:any){
|
|
||||||
return request({
|
|
||||||
url: '/app/app-news/updateAppNewsStatus' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//删除资讯
|
|
||||||
export function delAppNews(queryParams:any){
|
|
||||||
return request({
|
|
||||||
url:'/app/app-news/delAppNews' ,
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
@ -1,164 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
import { AxiosPromise } from 'axios';
|
|
||||||
import { FileInfo } from './types';
|
|
||||||
|
|
||||||
//分页查询数据集列表
|
|
||||||
export function getModel(queryParams:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/model/getModel',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function addModel(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/model/addModel',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
export function updateModel(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/model/updateModel',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
export function delModel(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/model/delModel',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 训练列表
|
|
||||||
export function getTrainRecord(queryParams:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/trainrecord/getTrainRecord',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 训练列表-不分页
|
|
||||||
export function getTrainRecordList(queryParams:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/trainrecord/getTrainRecordList',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查看训练详情
|
|
||||||
export function getTrainRecordByName(queryParams:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/trainrecord/getTrainRecordByName',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export function addTrainRecord(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/trainrecord/addTrainRecord',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function updateTrainRecord(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/trainrecord/updateTrainRecord',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function delTrainRecord(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/trainrecord/delTrainRecord',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
export function copyTrainRecord(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/trainrecord/copyTrainRecord?id='+ data.id,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//人机交互流程图
|
|
||||||
//查询流程图列表
|
|
||||||
export function getFlowChart(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/humancomputer-interaction/getFlowChart',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// //新增流程图
|
|
||||||
// export function addFlowChart(data:any) {
|
|
||||||
// return request({
|
|
||||||
// url: '/modeltrain/humancomputer-interaction/addFlowChart',
|
|
||||||
// method: 'post',
|
|
||||||
// data: data
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增流程图
|
|
||||||
*
|
|
||||||
* @param file
|
|
||||||
*/
|
|
||||||
export function addFlowChart(data: any): AxiosPromise<FileInfo> {
|
|
||||||
const formData = new FormData();
|
|
||||||
formData.append('file', data.file);
|
|
||||||
formData.append('name', data.name);
|
|
||||||
formData.append('pointdata', "");
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/humancomputer-interaction/addFlowChart',
|
|
||||||
method: 'post',
|
|
||||||
data: formData,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'multipart/form-data'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//修改流程图-添加点位
|
|
||||||
export function updateFlowChart(data:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/humancomputer-interaction/updateFlowChart',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//删除流程图
|
|
||||||
export function delFlowChart(queryParams:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/humancomputer-interaction/delFlowChart',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 下载用户导入模板
|
|
||||||
*
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export function downloadModel(queryParams:any) {
|
|
||||||
return request({
|
|
||||||
url: '/modeltrain/trainrecord/downloadModel',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* 文件API类型声明
|
|
||||||
*/
|
|
||||||
export interface FileInfo {
|
|
||||||
name: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
@ -1,629 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
|
|
||||||
|
|
||||||
// 查询筛查项目列表-不包含子集
|
|
||||||
export function queryVisionExamineItemList(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/base/vision-examine-item/queryVisionExamineItemList' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//查询视力筛查-检查计划分页
|
|
||||||
export function queryExaminePlanPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/queryExaminePlanPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//新增视力筛查-检查计划
|
|
||||||
export function addExaminePlan(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan/addExaminePlan' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//修改视力筛查-检查计划
|
|
||||||
export function updateExaminePlan(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan/updateExaminePlan' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//删除视力筛查-检查计划
|
|
||||||
export function delExaminePlan(queryParams:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan/delExaminePlan' ,
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//获取计划学年个数
|
|
||||||
export function queryPlanNum(queryParams:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan/queryPlanNum' ,
|
|
||||||
method: 'get',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//获取计划编号
|
|
||||||
export function getPlanCode(queryParams:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan/getPlanCode' ,
|
|
||||||
method: 'get',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 视力筛查-检查计划-关联学校
|
|
||||||
export function queryExamineSchoolPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan-school/queryExamineSchoolPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//新增视力筛查-检查计划
|
|
||||||
export function addExamineSchool(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan-school/addExamineSchool' ,
|
|
||||||
method: 'post',
|
|
||||||
params: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//添加普检计划已关联学校所有未关联的学生
|
|
||||||
export function addAllExamineStudent(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan-school/addAllExamineStudent' ,
|
|
||||||
method: 'post',
|
|
||||||
params: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//抽检规则-添加检查计划-关联学校
|
|
||||||
export function addSpotCheckExamineSchool(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan-school/addSpotCheckExamineSchool' ,
|
|
||||||
method: 'post',
|
|
||||||
params: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//删除视力筛查-检查计划
|
|
||||||
export function delExamineSchool(queryParams:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-plan-school/delExamineSchool' ,
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 查询检查计划关联学校区域结构树
|
|
||||||
export function queryExamineSchoolTree(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan-school/queryExamineSchoolTree' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 现状分析-普查区域学校班级结构树
|
|
||||||
export function queryExamineSchoolGradeTree(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan-school/queryExamineSchoolGradeTree' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 查询普检关联学生列表分页
|
|
||||||
export function queryExamineResultPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryExamineResultPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 检查进度学生完成率
|
|
||||||
export function queryCompletionRate(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryCompletionRate' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 近视统计
|
|
||||||
export function queryMyopiaStatistics(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryMyopiaStatistics' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 视力不良统计
|
|
||||||
export function queryAbnormalStatistics(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryAbnormalStatistics' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 远视储备率统计
|
|
||||||
export function queryFarSightednessStatistics(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryFarSightednessStatistics' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 抽检对比分析
|
|
||||||
export function querySamplingComparison(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/querySamplingComparison' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 查询普检报告年级列表分页
|
|
||||||
export function queryPlanGradePage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryPlanGradePage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 查询普检报告年级列表分页
|
|
||||||
export function queryStudentVisdataPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryStudentVisdataPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询普检报告年级列表分页
|
|
||||||
export function queryStudentVisdataList(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryStudentVisdataList' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//学生视力数据档案列表
|
|
||||||
export function queryVisionChangeTrend(params:any){
|
|
||||||
return request({
|
|
||||||
url: 'vision_examine/examine-result/queryVisionChangeTrend' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//报告导出
|
|
||||||
export function exportVisionForm(params: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportVisionForm',
|
|
||||||
method: 'get',
|
|
||||||
params: params,
|
|
||||||
responseType: 'arraybuffer',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//批量报告导出
|
|
||||||
export function exportMultipleVisionForm(params: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportMultipleVisionForm',
|
|
||||||
method: 'get',
|
|
||||||
params: params,
|
|
||||||
responseType: 'arraybuffer',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//导出生物报告600模版
|
|
||||||
export function exportStudentSwan(params: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportStudentSwan',
|
|
||||||
method: 'get',
|
|
||||||
params: params,
|
|
||||||
responseType: 'arraybuffer',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 通过学校id查找检查计划
|
|
||||||
export function querySchoolIdExamineList(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan-school/querySchoolIdExamineList' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询抽检规则学校列表
|
|
||||||
export function queryRulesSchoolList(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan-school/queryRulesSchoolList' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 查询抽检规则学校列表
|
|
||||||
export function studentQRCode(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/studentQRCode' ,
|
|
||||||
method: 'post',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//导出预览二维码
|
|
||||||
export function downloadQRCode(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/downloadQRCode',
|
|
||||||
method: 'get',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//导出预览二维码
|
|
||||||
export function examineResultStudentQRCode(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/examineResultStudentQRCode',
|
|
||||||
method: 'get',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//选择导出预览二维码
|
|
||||||
export function downloadSelectedQRCode(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/downloadSelectedQRCode',
|
|
||||||
method: 'get',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//导出个人二维码
|
|
||||||
export function studentPersonQRCode(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/studentPersonQRCode',
|
|
||||||
method: 'get',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//导出多人二维码
|
|
||||||
export function studentMultiplePersonQRCode(data: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/studentMultiplePersonQRCode',
|
|
||||||
method: 'post',
|
|
||||||
data: data,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//导出全部二维码
|
|
||||||
export function studentAllPersonQRCode(params: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/studentAllPersonQRCode',
|
|
||||||
method: 'get',
|
|
||||||
params: params,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//导出全部检查单
|
|
||||||
export function AllSchoolPersonQRCode(params: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/AllSchoolPersonQRCode',
|
|
||||||
method: 'get',
|
|
||||||
params: params,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//导出未检学生检查单
|
|
||||||
export function exportNotInspectedQRCode(params: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/exportNotInspectedQRCode',
|
|
||||||
method: 'get',
|
|
||||||
params: params,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//查询学校列表
|
|
||||||
export function queryRegionPlan(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/queryRegionPlan' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//根据id查询普检计划
|
|
||||||
export function queryExaminePlanById(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/queryExaminePlanById' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//根据普查id学校id查询检查学生信息
|
|
||||||
export function schoolIdsPlanIdQueryStudent(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/schoolIdsPlanIdQueryStudent' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//下载检查学生信息模版
|
|
||||||
export function exportExamineResultStudent(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportExamineResultStudent',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//数据管理-查询普检关联学生列表分页
|
|
||||||
export function queryExamineResultDataPage(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/queryExamineResultDataPage' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//通过普检id导出学生检查数据
|
|
||||||
export function exportExamineStudent(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportExamineStudent',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//通过普检id导出学生体质健康网模板
|
|
||||||
export function exportStudentHealthNetwork(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportStudentHealthNetwork',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//删除视力筛查-检查计划
|
|
||||||
export function delExamineStudentResult(queryParams:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-result/delExamineStudentResult' ,
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//修改学生视力数据档案
|
|
||||||
export function updateExamineResult(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-result/updateExamineResult' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//修改复查学生视力数据档案
|
|
||||||
export function updateRecheckExamineResult(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-result/updateRecheckExamineResult' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//下载常态化-学生信息
|
|
||||||
export function exportStudentResult(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportStudentResult',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//下载常态化-学生信息
|
|
||||||
export function exportSchoolHealthNetwork(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportSchoolHealthNetwork',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//下载常态化-学生信息
|
|
||||||
export function exportStatistics(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportStatistics',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 根据学校ID获取学校视力筛查报告所需数据
|
|
||||||
export function getSchoolCheckReportData(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/getSchoolCheckReportData' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 根据区域获取学校视力筛查报告所需数据
|
|
||||||
export function getRegionCheckReportData(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/getRegionCheckReportData' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 通过检查计划Id查询未关联的学生
|
|
||||||
export function queryPlanStudentList(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan-school/queryPlanStudentList' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 通过检查计划Id查询未关联的学生
|
|
||||||
export function addExamineStudent(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan-school/addExamineStudent' ,
|
|
||||||
method: 'post',
|
|
||||||
data: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//根据普查id学校id查询检查学生信息
|
|
||||||
export function recheckStudentList(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/recheckStudentList' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//新增复查学生视力数据档案
|
|
||||||
export function addRecheckExamineResult(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-result/addRecheckExamineResult' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//根据普查id学生id查询复查学生详情
|
|
||||||
export function recheckStudentInfo(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/recheckStudentInfo' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//下载复查全部学生信息模版
|
|
||||||
export function exportRecheckTemplate(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportRecheckTemplate',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//下载复查全部学生信息模版
|
|
||||||
export function exportRecheckExamineResultStudent(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportRecheckExamineResultStudent',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//导出复查全部学生复查通知书
|
|
||||||
export function studentRecheckNotice(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/studentRecheckNotice',
|
|
||||||
method: 'post',
|
|
||||||
data: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//导出复查全部学生复查通知书-大于1000
|
|
||||||
export function exportSchoolRecheckNotice(queryParams: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportSchoolRecheckNotice',
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//生成队列
|
|
||||||
export function exportStudentQueueDataTemplate(params: any) {
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-result/exportStudentQueueDataTemplate',
|
|
||||||
method: 'post',
|
|
||||||
params: params,
|
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//删除视力筛查-检查计划
|
|
||||||
export function delExamineResult(queryParams:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-result/delExamineResult' ,
|
|
||||||
method: 'post',
|
|
||||||
params: queryParams
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//修改学生视力数据档案的年级班级
|
|
||||||
export function updateGradeClassExamineResult(data:any){
|
|
||||||
return request({
|
|
||||||
url:'/vision_examine/examine-result/updateGradeClassExamineResult' ,
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 查询筛查项目列表-不包含子集
|
|
||||||
export function uploadDataToBureau(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/eyeapi/uploadDataToBureau' ,
|
|
||||||
method: 'post',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
import request from '@/utils/request';
|
|
||||||
|
|
||||||
|
|
||||||
// 按年查询视力筛查-检查计划
|
|
||||||
export function queryExaminePlanYear(params:any){
|
|
||||||
return request({
|
|
||||||
url: '/vision_examine/examine-plan/queryExaminePlanYear' ,
|
|
||||||
method: 'get',
|
|
||||||
params: params
|
|
||||||
});
|
|
||||||
}
|
|
Before Width: | Height: | Size: 567 B |
Before Width: | Height: | Size: 629 B |
Before Width: | Height: | Size: 359 B |
Before Width: | Height: | Size: 620 B |
Before Width: | Height: | Size: 488 B |
Before Width: | Height: | Size: 328 B |
Before Width: | Height: | Size: 505 B |
Before Width: | Height: | Size: 733 B |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 601 B |
Before Width: | Height: | Size: 684 B |
Before Width: | Height: | Size: 657 B |
Before Width: | Height: | Size: 324 B |
Before Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 336 B |
Before Width: | Height: | Size: 412 B |
Before Width: | Height: | Size: 351 B |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 444 B |
Before Width: | Height: | Size: 490 B |
Before Width: | Height: | Size: 355 B |
Before Width: | Height: | Size: 622 B |
Before Width: | Height: | Size: 428 B |
Before Width: | Height: | Size: 606 B |
Before Width: | Height: | Size: 331 B |
Before Width: | Height: | Size: 342 B |
Before Width: | Height: | Size: 406 B |
Before Width: | Height: | Size: 474 B |
Before Width: | Height: | Size: 375 B |
Before Width: | Height: | Size: 548 B |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 156 B |
Before Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 538 B |
Before Width: | Height: | Size: 434 B |
Before Width: | Height: | Size: 406 B |
Before Width: | Height: | Size: 354 B |
Before Width: | Height: | Size: 193 B |
Before Width: | Height: | Size: 470 B |
Before Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 349 B |
Before Width: | Height: | Size: 369 B |
Before Width: | Height: | Size: 369 B |
Before Width: | Height: | Size: 386 B |
Before Width: | Height: | Size: 306 B |
Before Width: | Height: | Size: 304 B |
Before Width: | Height: | Size: 590 B |
Before Width: | Height: | Size: 554 B |
@ -1,543 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'activitymanage' // 活动管理
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules } from "element-plus";
|
|
||||||
|
|
||||||
import { queryActivityPage,addActivity,updateActivity,updateActivityStatus,delActivity } from "@/api/activity";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import Aactivityschool from './school.vue';
|
|
||||||
import Viewfile from "@/views/component/Viewfile.vue";
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
//搜索内容
|
|
||||||
const activityname = ref('')
|
|
||||||
const activitytype = ref('')
|
|
||||||
const typeoptions:any = ref([{value:"01",label:"调查问卷"},{value:"02",label:"训练活动"},{value:"03",label:"科普宣传"}])
|
|
||||||
const tableData:any = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const dialogFormVisible = ref(false)
|
|
||||||
const dialogtitle = ref('新增活动')
|
|
||||||
const form:any = ref({})
|
|
||||||
const planform = ref();
|
|
||||||
|
|
||||||
const rules = reactive<FormRules>({
|
|
||||||
activity_type: [{ required: true, message: "请输入活动类型", trigger: "blur" }],
|
|
||||||
activity_title: [{ required: true, message: "请输入活动名称", trigger: "blur" }]
|
|
||||||
});
|
|
||||||
function releaseClick(row:any){
|
|
||||||
ElMessageBox.confirm("确定发布此活动吗?", "提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let params = {
|
|
||||||
id: row.id,
|
|
||||||
status:'02'
|
|
||||||
};
|
|
||||||
updateActivityStatus(params).then((res:any) => {
|
|
||||||
ElMessage({
|
|
||||||
message: "发布成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
}).catch(()=>{
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function delinfoStatus(row:any){
|
|
||||||
ElMessageBox.confirm("确定删除此活动吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let params = {
|
|
||||||
id: row.id,
|
|
||||||
status:'03'
|
|
||||||
};
|
|
||||||
updateActivityStatus(params).then((res:any) => {
|
|
||||||
ElMessage({
|
|
||||||
message: "删除成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
}).catch(()=>{
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function addinfo(){
|
|
||||||
dialogtitle.value = '新增活动'
|
|
||||||
schoolNames.value =''
|
|
||||||
form.value = {}
|
|
||||||
fileList.value = []
|
|
||||||
isSwitch.value = false
|
|
||||||
dialogFormVisible.value = true
|
|
||||||
}
|
|
||||||
function editinfo(row:any){
|
|
||||||
form.value = JSON.parse(JSON.stringify(row))
|
|
||||||
if(form.value.school_ids != null && form.value.school_ids != ""){
|
|
||||||
form.value.school_ids = JSON.parse(form.value.school_ids)
|
|
||||||
let temp = []
|
|
||||||
for(let i=0;i<form.value.school_ids.length;i++){
|
|
||||||
temp.push(form.value.school_ids[i].name)
|
|
||||||
}
|
|
||||||
schoolNames.value = temp.join(",")
|
|
||||||
}else{
|
|
||||||
form.value.school_ids = []
|
|
||||||
}
|
|
||||||
|
|
||||||
isSwitch.value = false
|
|
||||||
dialogtitle.value = '修改活动'
|
|
||||||
// res.data.records[i].activityNames.push(filespath[a])
|
|
||||||
// res.data.records[i].activityFiles.push(url + '/activity/' + filespath[a])
|
|
||||||
fileList.value = []
|
|
||||||
if (row.activityNames != '' && row.activityNames != null) {
|
|
||||||
for (let i = 0; i < row.activityNames.length; i++) {
|
|
||||||
fileList.value.push({
|
|
||||||
name: row.activityNames[i],
|
|
||||||
url: row.activityFiles[i],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dialogFormVisible.value = true
|
|
||||||
|
|
||||||
}
|
|
||||||
const isSwitch = ref(false)
|
|
||||||
function infosubmit(formEl: any){
|
|
||||||
console.log(fileList.value)
|
|
||||||
formEl.validate((valid: any) => {
|
|
||||||
if (valid) {
|
|
||||||
if(isSwitch.value == true){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isSwitch.value = true
|
|
||||||
if (form.value.id) {
|
|
||||||
const formData = new FormData();
|
|
||||||
let activityFiles:any = []
|
|
||||||
fileList.value.forEach((item: any) => {
|
|
||||||
if (item.raw != null) {
|
|
||||||
formData.append('multipartFile', item.raw)
|
|
||||||
}else {
|
|
||||||
activityFiles.push(item.name)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if(activityFiles.length == 0){
|
|
||||||
form.value.activity_files = ""
|
|
||||||
}else{
|
|
||||||
form.value.activity_files = activityFiles.join(",")
|
|
||||||
}
|
|
||||||
formData.append("activityFiles", form.value.activity_files);
|
|
||||||
if(form.value.id !=null) formData.append("id", form.value.id);
|
|
||||||
if(form.value.activity_code !=null) formData.append("activityCode", form.value.activity_code);
|
|
||||||
if(form.value.activity_title !=null) formData.append("activityTitle", form.value.activity_title);
|
|
||||||
if(form.value.activity_type !=null) formData.append("activityType", form.value.activity_type);
|
|
||||||
if(form.value.activity_desc !=null) formData.append("activityDesc", form.value.activity_desc);
|
|
||||||
if(form.value.activity_date !=null) formData.append("activityDate", form.value.activity_date);
|
|
||||||
if(form.value.school_ids !=null){
|
|
||||||
formData.append("schoolIds", JSON.stringify(form.value.school_ids));
|
|
||||||
}else{
|
|
||||||
form.value.school_ids = []
|
|
||||||
formData.append("schoolIds", JSON.stringify(form.value.school_ids));
|
|
||||||
}
|
|
||||||
if(form.value.publicOrg !=null) formData.append("publicOrg", form.value.public_org);
|
|
||||||
updateActivity(formData).then((item) => {
|
|
||||||
dialogFormVisible.value = false;
|
|
||||||
ElMessage({
|
|
||||||
message: "修改成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData();
|
|
||||||
}).catch(()=>{
|
|
||||||
isSwitch.value = false
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
const formData = new FormData();
|
|
||||||
fileList.value.forEach((item: any) => {
|
|
||||||
if (item.raw != null) {
|
|
||||||
formData.append('multipartFile', item.raw)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if(form.value.activity_code !=null) formData.append("activityCode", form.value.activity_code);
|
|
||||||
if(form.value.activity_title !=null) formData.append("activityTitle", form.value.activity_title);
|
|
||||||
if(form.value.activity_type !=null) formData.append("activityType", form.value.activity_type);
|
|
||||||
if(form.value.activity_desc !=null) formData.append("activityDesc", form.value.activity_desc);
|
|
||||||
if(form.value.activity_date !=null) formData.append("activityDate", form.value.activity_date);
|
|
||||||
if(form.value.school_ids !=null){
|
|
||||||
formData.append("schoolIds", JSON.stringify(form.value.school_ids));
|
|
||||||
}else{
|
|
||||||
form.value.school_ids = []
|
|
||||||
formData.append("schoolIds", JSON.stringify(form.value.school_ids));
|
|
||||||
}
|
|
||||||
if(form.value.publicOrg !=null) formData.append("publicOrg", form.value.public_org);
|
|
||||||
addActivity(formData).then((item) => {
|
|
||||||
dialogFormVisible.value = false;
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: "新增成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
}).catch(()=>{
|
|
||||||
isSwitch.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function handlefilechange(file:any){
|
|
||||||
console.log(file)
|
|
||||||
}
|
|
||||||
|
|
||||||
function delinfo(row: any) {
|
|
||||||
ElMessageBox.confirm("确定删除此活动吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let params = {
|
|
||||||
ids: row.id,
|
|
||||||
};
|
|
||||||
delActivity(params).then((res:any) => {
|
|
||||||
ElMessage({
|
|
||||||
message: "删除成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
}).catch(()=>{
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function delinfos() {
|
|
||||||
ElMessageBox.confirm("确定删除已选择的年级吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let id = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
id.push(item.id)
|
|
||||||
})
|
|
||||||
let params = {
|
|
||||||
ids: id.join(','),
|
|
||||||
};
|
|
||||||
delActivity(params).then(() => {
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: "删除成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const loading =ref(false)
|
|
||||||
function getData(){
|
|
||||||
|
|
||||||
loading.value = true
|
|
||||||
activityname.value = activityname.value.replace(/\s+/g, "");
|
|
||||||
let params = {
|
|
||||||
activityTitle: activityname.value,
|
|
||||||
activityType: activitytype.value,
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size
|
|
||||||
};
|
|
||||||
loading.value = true
|
|
||||||
queryActivityPage(params).then((res:any) => {
|
|
||||||
for (let i = 0; i < res.data.records.length; i++) {
|
|
||||||
if (res.data.records[i].activity_files != '' && res.data.records[i].activity_files != null) {
|
|
||||||
let filespath = res.data.records[i].activity_files.split(',')
|
|
||||||
res.data.records[i].activityNames = []
|
|
||||||
res.data.records[i].activityFiles = []
|
|
||||||
for (let a = 0; a < filespath.length; a++) {
|
|
||||||
res.data.records[i].activityNames.push(filespath[a])
|
|
||||||
res.data.records[i].activityFiles.push(url + '/activity/' + filespath[a])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
function searchinfo(){
|
|
||||||
|
|
||||||
}
|
|
||||||
const handleSelectionChange = (val:any) => {
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
function handleClose(){
|
|
||||||
if (planform.value != null) planform.value.resetFields();
|
|
||||||
dialogFormVisible.value = false
|
|
||||||
}
|
|
||||||
|
|
||||||
const isViewfile = ref(false)
|
|
||||||
const ViewfileUrl = ref("")
|
|
||||||
function viewpdf(name: any) {
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/activity/viewActivityFile?fileName=' + name
|
|
||||||
setTimeout(()=>{
|
|
||||||
isViewfile.value = true
|
|
||||||
},200)
|
|
||||||
|
|
||||||
}
|
|
||||||
function CloseView() {
|
|
||||||
isViewfile.value = false
|
|
||||||
}
|
|
||||||
const isSchool = ref(false)
|
|
||||||
function schoolClick(){
|
|
||||||
isSchool.value = true
|
|
||||||
}
|
|
||||||
function returnClick(data:any){
|
|
||||||
if(data == false){
|
|
||||||
isSchool.value = false
|
|
||||||
}else{
|
|
||||||
let temp = []
|
|
||||||
let tempData = []
|
|
||||||
for(let i=0;i<data.length;i++){
|
|
||||||
temp.push(data[i].name)
|
|
||||||
tempData.push({
|
|
||||||
id:data[i].id,
|
|
||||||
name:data[i].name,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
schoolNames.value = temp.join(",")
|
|
||||||
form.value.school_ids = tempData
|
|
||||||
isSchool.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const schoolNames = ref("")
|
|
||||||
onMounted(() => {
|
|
||||||
getData();
|
|
||||||
});
|
|
||||||
const fileList:any = ref([
|
|
||||||
])
|
|
||||||
function dateFormat(row: any) { // 时间方法
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<template>
|
|
||||||
<div class="w-full">
|
|
||||||
<div class="activitymanage-box">
|
|
||||||
<div class="activitymanage-box-top">
|
|
||||||
<div class="flex">
|
|
||||||
<el-input v-model="activityname" placeholder="请输入活动名称" style="width:240px" clearable />
|
|
||||||
<el-select v-model="activitytype" class="ml-4" placeholder="请选择活动类型" style="width: 240px" clearable @change="getData">
|
|
||||||
<el-option v-for="item in typeoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" class="ml-[10px]" @click="getData">搜索</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="addinfo"><img src="@/assets/visionscreening/jscz_xz.png" alt="" style="margin-right: 4px;" >新增</el-button>
|
|
||||||
<!-- <el-button @click="delinfos" :disabled="multipleSelection.length <= 0" :type="multipleSelection.length > 0 ? 'primary' : ''">
|
|
||||||
<el-icon><Delete /></el-icon> 删除</el-button> -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="visionscreening-box-bottom">
|
|
||||||
<el-table :data="tableData" border style="width: 100%; height:calc(100vh - 280px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<el-table-column type="index" width="55" label="序号" />
|
|
||||||
<el-table-column prop="activity_code" label="活动编号" width="120" />
|
|
||||||
<el-table-column prop="activity_title" label="活动名称" min-width="140" />
|
|
||||||
<el-table-column prop="activity_type" label="活动类型" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.activity_type == '01'">调查问卷</span>
|
|
||||||
<span v-if="scope.row.activity_type == '02'">训练活动</span>
|
|
||||||
<span v-if="scope.row.activity_type == '03'">科普宣传</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="activity_date" label="活动开始日期" width="180" align="center"/>
|
|
||||||
<el-table-column prop="org_type" label="文件" width="80" align="center" >
|
|
||||||
<template #default="scope">
|
|
||||||
<div v-if="scope.row.activityFiles !== '' &&scope.row.activityFiles !== undefined" style="display:flex ;flex-wrap: wrap;">
|
|
||||||
<img v-for="(item,index) in scope.row.activityFiles" src="@/assets/visionscreening/pdficon.png" style="margin: 0 auto;cursor: pointer;" @click="viewpdf(scope.row.activityNames[index])" :title="scope.row.activityNames[index]">
|
|
||||||
</div>
|
|
||||||
<div v-else></div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="status" label="活动状态" width="180" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.status == '01'">初始创建</span>
|
|
||||||
<span v-if="scope.row.status == '02'">发布活动</span>
|
|
||||||
<span v-if="scope.row.status == '03'">活动关闭</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="public_org" label="发布单位" width="180" />
|
|
||||||
<el-table-column prop="creator" width="120" label="创建人" align="center"/>
|
|
||||||
<el-table-column prop="create_time" width="180" label="创建时间" align="center" >
|
|
||||||
<template #default="scope">
|
|
||||||
{{ dateFormat(scope.row.create_time) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="address" label="操作" width="100" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img v-if="scope.row.status =='01'" src="@/assets/MenuIcon/lbcz_xg.png" alt="" title="修改" @click="editinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
<img v-if="scope.row.status =='01'" src="@/assets/MenuIcon/release.png" alt="" title="发布" @click="releaseClick(scope.row)" style="cursor: pointer;">
|
|
||||||
|
|
||||||
<img v-if="scope.row.status =='01'" src="@/assets/MenuIcon/lbcz_sc.png" alt="" title="删除" @click="delinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
<img v-if="scope.row.status =='02'" src="@/assets/MenuIcon/lbcz_sc.png" alt="" title="删除" @click="delinfoStatus(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogFormVisible" :close-on-click-modal="false" :title="dialogtitle" :before-close="handleClose" width="43%" draggable append-to-body>
|
|
||||||
<el-form ref="planform" :model="form" :rules="rules" label-width="90px">
|
|
||||||
|
|
||||||
<div class="flex justify-between ">
|
|
||||||
<el-form-item label="活动编码" style="width: 50%">
|
|
||||||
<el-input v-model="form.activity_code" placeholder="添加成功后自动生成编码" disabled/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="活动名称" prop="activity_title" style="width: 50%">
|
|
||||||
<el-input v-model="form.activity_title" autocomplete="off" placeholder="请输入计划编号" />
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<div class="flex justify-between ">
|
|
||||||
<el-form-item label="开始时间" style="width: 50%">
|
|
||||||
<el-date-picker
|
|
||||||
style="width: 100%;"
|
|
||||||
v-model="form.activity_date"
|
|
||||||
type="date"
|
|
||||||
placeholder=""
|
|
||||||
format="YYYY-MM-DD"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="活动类型" prop="activity_type" style="width: 50%">
|
|
||||||
<el-select v-model="form.activity_type" placeholder="请选择活动类型" >
|
|
||||||
<el-option v-for="item in typeoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<el-form-item label="关联学校">
|
|
||||||
<div class="flex w-full h-[32px]">
|
|
||||||
<el-input v-model="schoolNames" autocomplete="off" style="margin-right: 5px;" size="large" disabled placeholder="请选择关联的学校" />
|
|
||||||
<el-button type="primary" class="ml-[10px]" @click="schoolClick">选择</el-button>
|
|
||||||
</div>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="发布单位">
|
|
||||||
<el-input v-model="form.public_org" placeholder="请输入发布单位"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="活动描述">
|
|
||||||
<el-input v-model="form.activity_desc" :autosize="{ minRows: 4 }" type="textarea" placeholder="请输入活动描述"/>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="活动文件">
|
|
||||||
<div style="width:100% ;">
|
|
||||||
<el-upload ref="upload" accept=".PDF,.pdf" class="upload-demo" action="" :on-change="handlefilechange" :auto-upload="false"
|
|
||||||
v-model:file-list="fileList">
|
|
||||||
<template #trigger>
|
|
||||||
<el-button type="primary">上传</el-button>
|
|
||||||
</template>
|
|
||||||
</el-upload>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<span class="dialog-footer">
|
|
||||||
<el-button @click="handleClose">取消</el-button>
|
|
||||||
<el-button type="primary" @click="infosubmit(planform)">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<Aactivityschool v-if="isSchool==true" @returnClick="returnClick" />
|
|
||||||
<Viewfile v-if="isViewfile" :showTime="true" :title="'查看活动'" :url="ViewfileUrl" :type="'pdf'" :clientHeight="600"
|
|
||||||
@update="CloseView" :onprint="'no'" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
|
|
||||||
.activitymanage-box {
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
padding: 20px;
|
|
||||||
.activitymanage-box-top{
|
|
||||||
width:100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.dialog-footer {
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
}
|
|
||||||
:deep(.el-tree-node__content){
|
|
||||||
height: 30px;
|
|
||||||
}
|
|
||||||
:deep(.el-input__inner){
|
|
||||||
height: 32px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
// :deep(.el-upload-list){
|
|
||||||
// display: none;
|
|
||||||
// }
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 150px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 15px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
background: rgba(246, 247, 250, 1);
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.leftbox{
|
|
||||||
width: 250px;
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
border: 1px solid #e1e1e1;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,158 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'activity-school' // 活动关联学校
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules } from "element-plus";
|
|
||||||
import { querySchoolPage } from "@/api/regionmodule/school";
|
|
||||||
import { queryRegion } from "@/api/regionmodule/region";
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
const emit = defineEmits([ 'returnClick']);
|
|
||||||
const isSchool = ref(true)
|
|
||||||
function schoolClose(){
|
|
||||||
emit('returnClick', false);
|
|
||||||
}
|
|
||||||
const cascaderdata: any = ref([]);
|
|
||||||
const props1 = {
|
|
||||||
checkStrictly: true,
|
|
||||||
value:'id',
|
|
||||||
label:'name'
|
|
||||||
}
|
|
||||||
//获取行政区域
|
|
||||||
function getTree() {
|
|
||||||
const params = {
|
|
||||||
name: "",
|
|
||||||
status:'01'
|
|
||||||
};
|
|
||||||
queryRegion(params).then((res: any) => {
|
|
||||||
cascaderdata.value = publicTree(res.data,"");
|
|
||||||
})
|
|
||||||
.catch((error:any)=>{
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 选中区域获取班级列表
|
|
||||||
function handleChange(value:any){
|
|
||||||
if(value != null && value.length != 0){
|
|
||||||
regionId.value = value[value.length -1]
|
|
||||||
for(let i=0;i<cascaderdata.value.length;i++){
|
|
||||||
if(regionId.value == cascaderdata.value[i].id){
|
|
||||||
regionType.value = cascaderdata.value[i].type
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
regionId.value = ""
|
|
||||||
regionType.value = ""
|
|
||||||
}
|
|
||||||
isCascader.value = false
|
|
||||||
setTimeout(()=>{
|
|
||||||
isCascader.value = true
|
|
||||||
},20)
|
|
||||||
getSchool()
|
|
||||||
}
|
|
||||||
function handleClick(data:any){
|
|
||||||
regionType.value = data.type
|
|
||||||
if(data.children == null){
|
|
||||||
isCascader.value = false
|
|
||||||
setTimeout(()=>{
|
|
||||||
isCascader.value = true
|
|
||||||
},20)
|
|
||||||
}
|
|
||||||
regionId.value = data.id
|
|
||||||
getSchool()
|
|
||||||
}
|
|
||||||
const queryInfo:any = ref({
|
|
||||||
name:""
|
|
||||||
}) // 查询条件
|
|
||||||
const regionInfo:any = ref("")
|
|
||||||
const regionId:any = ref("")
|
|
||||||
const regionType:any = ref("")
|
|
||||||
const loading= ref(false)
|
|
||||||
const schoolData:any= ref([])
|
|
||||||
//获取表格类型
|
|
||||||
function getSchool() {
|
|
||||||
queryInfo.value.name = queryInfo.value.name.replace(/\s+/g, "");
|
|
||||||
let params = {
|
|
||||||
name: queryInfo.value.name,
|
|
||||||
regionId: regionId.value,
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
type:regionType.value
|
|
||||||
};
|
|
||||||
loading.value = true
|
|
||||||
querySchoolPage(params).then((res) => {
|
|
||||||
schoolData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 关联学校
|
|
||||||
function bindingClick() {
|
|
||||||
ElMessageBox.confirm("确定关联已选择的学校吗?", "关联提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
emit('returnClick', multipleSelection.value);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const multipleSelection = ref([]);
|
|
||||||
function handleSelectionChange(val: any) {
|
|
||||||
multipleSelection.value = val;
|
|
||||||
}
|
|
||||||
getSchool()
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
getSchool()
|
|
||||||
});
|
|
||||||
const isCascader=ref(true)
|
|
||||||
</script>
|
|
||||||
<template>
|
|
||||||
<el-dialog v-model="isSchool" :before-close="schoolClose" :title="'选择关联学校'" draggable width="1000px">
|
|
||||||
<div style="padding:0 25px">
|
|
||||||
<el-row style="margin-bottom: 10px;width: calc(100%);">
|
|
||||||
<el-col :span="24" class="top-nav">
|
|
||||||
<div style="display: flex;">
|
|
||||||
<el-input v-model="queryInfo.name" placeholder="请输入学校名称" clearable style="width: 200px;margin-right: 10px;"
|
|
||||||
@keyup.enter="getSchool" />
|
|
||||||
<div style="width: 200px;height: 32px; margin: auto;">
|
|
||||||
<el-cascader v-if="isCascader" style="width: 200px; margin: auto;" placeholder="请输入行政区域" v-model="regionInfo" @change="handleChange" clearable="" :options="cascaderdata" :props="props1" :show-all-levels="false" filterable>
|
|
||||||
<template #default="{ node, data }">
|
|
||||||
<div @click.stop="handleClick(data)">{{ data.name }}</div>
|
|
||||||
</template>
|
|
||||||
</el-cascader>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<el-button type="primary" style="margin-left: 10px;" @click="getSchool">搜索</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="left-nav">
|
|
||||||
<el-button type="primary" @click="bindingClick">确定</el-button>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-table v-loading="loading" :data="schoolData" style="width: 100%; height:calc(100vh - 245px);" row-key="id" border
|
|
||||||
default-expand-all :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
|
||||||
<el-table-column type="selection" width="50" align="center" />
|
|
||||||
<el-table-column prop="code" label="学校代码" width="140" align="center"></el-table-column>
|
|
||||||
<el-table-column prop="name" label="学校名称" width="160"></el-table-column>
|
|
||||||
<el-table-column prop="address" label="学校地址" min-width="120" align="center"></el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getSchool" />
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.top-nav {
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
-webkit-justify-content: space-between;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,585 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'infomation' ,// 资讯管理
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick,watch } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules } from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { queryAppNewsPage,addAppNews,updateAppNews,delAppNews,updateAppNewsStatus } from '@/api/appmanage'
|
|
||||||
import { useDark } from '@vueuse/core'
|
|
||||||
import tinymce from 'tinymce/tinymce'
|
|
||||||
import 'tinymce/themes/silver'
|
|
||||||
import 'tinymce/models/dom/model'
|
|
||||||
import 'tinymce/icons/default/icons'
|
|
||||||
import "tinymce/themes/silver/theme.min.js";
|
|
||||||
import 'tinymce/plugins/image'// 插入上传图片插件
|
|
||||||
import 'tinymce/plugins/media'// 插入视频插件
|
|
||||||
import 'tinymce/plugins/table'// 插入表格插件
|
|
||||||
import 'tinymce/plugins/lists'// 列表插件
|
|
||||||
import 'tinymce/plugins/wordcount'// 字数统计插件
|
|
||||||
import 'tinymce/plugins/advlist'// 字数统计插件
|
|
||||||
import 'tinymce/plugins/autosave'// 字数统计插件
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const produrl = ref('')
|
|
||||||
const initlist = ref( {
|
|
||||||
selector: 'textarea',
|
|
||||||
language_url: produrl.value + '/tinymce/langs/zh_CN.js',
|
|
||||||
language: 'zh_CN',
|
|
||||||
skin_url: produrl.value +'/tinymce/skins/ui/oxide',
|
|
||||||
content_css: produrl.value +'/tinymce/skins/content/default/content.css',
|
|
||||||
height:450, // 编辑器高度
|
|
||||||
body_class: 'panel-body',
|
|
||||||
toolbar: 'fontfamily fontsize lineheight bold italic underline strikethrough forecolor | outdent indent alignleft aligncenter alignright alignjustify bullist numlist',
|
|
||||||
menubar: false,
|
|
||||||
plugins: 'advlist autosave lists table wordcount',
|
|
||||||
end_container_on_empty_block: true,
|
|
||||||
powerpaste_word_import: 'clean',
|
|
||||||
code_dialog_height: 450,
|
|
||||||
code_dialog_width: 1000,
|
|
||||||
advlist_bullet_styles: 'square',
|
|
||||||
advlist_number_styles: 'default',
|
|
||||||
imagetools_cors_hosts: ['www.tinymce.com', 'codepen.io'],
|
|
||||||
default_link_target: '_blank',
|
|
||||||
link_title: false,
|
|
||||||
font_size_formats: '12px 14px 16px 18px 20px 24px 28px 30px 36px 40px 48px',
|
|
||||||
font_family_formats: '微软雅黑=微软雅黑;宋体=宋体;黑体=黑体;',
|
|
||||||
nonbreaking_force_tab: true,
|
|
||||||
convert_urls: false,
|
|
||||||
branding: false,
|
|
||||||
// images_upload_url: url + '/api/imageserver/upload',
|
|
||||||
// images_upload_base_path: url
|
|
||||||
})
|
|
||||||
let isDark:any = useDark().value == true? '1' : '2'
|
|
||||||
watch(useDark(), () => {
|
|
||||||
isDark = useDark().value == true? '1' : '2'
|
|
||||||
if (useDark().value == true) {
|
|
||||||
initlist.value.skin_url= produrl.value +'/tinymce/skins/ui/oxide-dark'
|
|
||||||
} else {
|
|
||||||
initlist.value.skin_url= produrl.value +'/tinymce/skins/ui/oxide'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
//搜索内容
|
|
||||||
const title = ref('')
|
|
||||||
const tableData:any = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const dialogVisible = ref(false)
|
|
||||||
const dialogVisibles = ref(false)
|
|
||||||
const dialogtitle = ref('新增资讯')
|
|
||||||
const forms:any = ref({})
|
|
||||||
const form = ref();
|
|
||||||
const rules = reactive<FormRules>({
|
|
||||||
title: [{ required: true, message: "请输入资讯名称", trigger: "blur" }],
|
|
||||||
type: [{ required: true, message: "请选择资讯类型", trigger: "change" }]
|
|
||||||
});
|
|
||||||
const isSwitch = ref(false)
|
|
||||||
const typeoptions = ref([{label:'知识',value:'01'},{label:'新闻',value:'02'}])
|
|
||||||
const handleSelectionChange = (val:any) => {
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
const content = ref('')
|
|
||||||
const coverimg:any = ref({})
|
|
||||||
const fileList:any = ref([])
|
|
||||||
const loading = ref(false)
|
|
||||||
watch(dialogVisible,()=>{
|
|
||||||
if(dialogVisible.value){
|
|
||||||
nextTick(()=>{
|
|
||||||
if (isDark === '1') {
|
|
||||||
initlist.value.skin_url= produrl.value +'/tinymce/skins/ui/oxide-dark'
|
|
||||||
} else {
|
|
||||||
initlist.value.skin_url= produrl.value +'/tinymce/skins/ui/oxide'
|
|
||||||
}
|
|
||||||
tinymce.init(initlist.value)
|
|
||||||
if(forms.value.content!==''){
|
|
||||||
if(tinymce.activeEditor) {
|
|
||||||
content.value = forms.value.content
|
|
||||||
tinymce.activeEditor.setContent(forms.value.content)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}else{
|
|
||||||
tinymce.remove()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
onMounted(() => {
|
|
||||||
getData();
|
|
||||||
if(import.meta.env.VITE_USER_NODE_ENV !== 'development'){
|
|
||||||
produrl.value = '/web'
|
|
||||||
initlist.value.language_url = produrl.value + '/tinymce/langs/zh_CN.js'
|
|
||||||
initlist.value.content_css = produrl.value +'/tinymce/skins/content/default/content.css'
|
|
||||||
}else{
|
|
||||||
produrl.value = ''
|
|
||||||
initlist.value.language_url = produrl.value + '/tinymce/langs/zh_CN.js'
|
|
||||||
initlist.value.content_css = produrl.value +'/tinymce/skins/content/default/content.css'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// 搜索
|
|
||||||
function getData(){
|
|
||||||
const params = {
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
title:title.value
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
queryAppNewsPage(params).then((res:any) => {
|
|
||||||
tableData.value = res.data.records
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function delinfos() {
|
|
||||||
ElMessageBox.confirm("确定删除此资讯吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
loading.value = true
|
|
||||||
let id = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
id.push(item.id)
|
|
||||||
})
|
|
||||||
let params = {
|
|
||||||
ids: id.join(','),
|
|
||||||
};
|
|
||||||
delAppNews(params).then(() => {
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: "删除成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//修改
|
|
||||||
function editinfo(row:any){
|
|
||||||
isSwitch.value = false
|
|
||||||
dialogtitle.value = '修改资讯'
|
|
||||||
forms.value = JSON.parse(JSON.stringify(row))
|
|
||||||
if(row.news_files!==undefined && row.news_files!==''){
|
|
||||||
forms.value.coverimg = url+'/appnews/'+ row.news_files
|
|
||||||
}else{
|
|
||||||
forms.value.coverimg = ''
|
|
||||||
coverimg.value = {}
|
|
||||||
}
|
|
||||||
if(row.news_video!==undefined && row.news_video!==''){
|
|
||||||
fileList.value = [{name:row.news_video}]
|
|
||||||
}else{
|
|
||||||
fileList.value = []
|
|
||||||
}
|
|
||||||
dialogVisible.value = true
|
|
||||||
}
|
|
||||||
//发布
|
|
||||||
function releaseClick(row:any,statustype:any){
|
|
||||||
const status = statustype === '02'?'发布':'撤销'
|
|
||||||
ElMessageBox.confirm('确定'+ status +'此资讯吗?', "提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
loading.value = true
|
|
||||||
const params = {
|
|
||||||
id:row.id,
|
|
||||||
newsStatus:statustype
|
|
||||||
}
|
|
||||||
updateAppNewsStatus(params).then(() => {
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: statustype === '02'?'发布成功':'撤销成功',
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function switchchange(index:any,e:any){
|
|
||||||
loading.value = true
|
|
||||||
if(e === '1'){
|
|
||||||
let num = 0
|
|
||||||
for(let i = 0;i<tableData.value.length;i++){
|
|
||||||
if(tableData.value[i].recommend === '1'){
|
|
||||||
num = num + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (num <= 3) {
|
|
||||||
switchsubmit( tableData.value[index].id,'1')
|
|
||||||
} else {
|
|
||||||
ElMessage({
|
|
||||||
message: "推荐内容不能超过三条",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
tableData.value[index].recommend = '0'
|
|
||||||
loading.value = false
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switchsubmit( tableData.value[index].id,'0')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function switchsubmit(id:any,status:any){
|
|
||||||
const params = {
|
|
||||||
id:id,
|
|
||||||
recommend:status
|
|
||||||
}
|
|
||||||
updateAppNews(params).then((res:any) => {
|
|
||||||
getData()
|
|
||||||
// ElMessage({
|
|
||||||
// message: '推荐成功',
|
|
||||||
// type: "success",
|
|
||||||
// });
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function addinfo(){
|
|
||||||
content.value = ''
|
|
||||||
forms.value={}
|
|
||||||
fileList.value = []
|
|
||||||
isSwitch.value = false
|
|
||||||
dialogtitle.value = '新增资讯'
|
|
||||||
dialogVisible.value = true
|
|
||||||
if (form.value != null) form.value.resetFields();
|
|
||||||
}
|
|
||||||
//删除
|
|
||||||
function delinfo(row: any) {
|
|
||||||
ElMessageBox.confirm("确定删除此资讯吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
loading.value = true
|
|
||||||
let params = {
|
|
||||||
ids: row.id,
|
|
||||||
};
|
|
||||||
delAppNews(params).then(() => {
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: "删除成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function handleClose(){
|
|
||||||
if (form.value != null) form.value.resetFields();
|
|
||||||
dialogVisible.value = false
|
|
||||||
}
|
|
||||||
function infosubmit(formEl: any){
|
|
||||||
formEl.validate((valid: any) => {
|
|
||||||
if (valid) {
|
|
||||||
if(isSwitch.value == true){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
isSwitch.value = true
|
|
||||||
if(forms.value.id) {
|
|
||||||
const formData = new FormData();
|
|
||||||
if(coverimg.value !== ''&& coverimg.value.raw !== undefined){
|
|
||||||
formData.append("image",coverimg.value.raw)
|
|
||||||
}
|
|
||||||
if(fileList.value.length !== 0 && fileList.value[0].raw !== undefined){
|
|
||||||
formData.append("multipartFile",fileList.value[0].raw)
|
|
||||||
formData.append("newsVideo",'')
|
|
||||||
}
|
|
||||||
formData.append("newsVideo",forms.value.news_video)
|
|
||||||
formData.append("newsFiles",forms.value.news_files)
|
|
||||||
formData.append("id",forms.value.id)
|
|
||||||
formData.append("newsStatus",forms.value.news_status)
|
|
||||||
formData.append("title",forms.value.title)
|
|
||||||
formData.append("type",forms.value.type)
|
|
||||||
if(tinymce.activeEditor) {
|
|
||||||
content.value = tinymce.activeEditor.getContent()
|
|
||||||
}else{
|
|
||||||
formData.append("content",'')
|
|
||||||
}
|
|
||||||
if(content.value !== ''){
|
|
||||||
formData.append("content",content.value)
|
|
||||||
}else{
|
|
||||||
formData.append("content",'')
|
|
||||||
}
|
|
||||||
formData.append("recommend",forms.value.recommend)
|
|
||||||
updateAppNews(formData).then((res:any) => {
|
|
||||||
dialogVisible.value = false
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: "修改成功",
|
|
||||||
type: "success",
|
|
||||||
})
|
|
||||||
isSwitch.value = false
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
isSwitch.value = false
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
const formData = new FormData();
|
|
||||||
if(coverimg.value !== '' && coverimg.value.raw !== undefined){
|
|
||||||
formData.append("image",coverimg.value.raw)
|
|
||||||
}
|
|
||||||
if(fileList.value.length !== 0 && fileList.value[0].raw !== undefined){
|
|
||||||
formData.append("multipartFile",fileList.value[0].raw)
|
|
||||||
}
|
|
||||||
formData.append("newsStatus",'01')
|
|
||||||
formData.append("title",forms.value.title)
|
|
||||||
formData.append("type",forms.value.type)
|
|
||||||
if(tinymce.activeEditor) {
|
|
||||||
content.value = tinymce.activeEditor.getContent()
|
|
||||||
}
|
|
||||||
if(content.value !== ''){
|
|
||||||
formData.append("content",content.value)
|
|
||||||
}
|
|
||||||
formData.append("recommend",'0')
|
|
||||||
addAppNews(formData).then((res:any) => {
|
|
||||||
dialogVisible.value = false
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: "新增成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
isSwitch.value = false
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
isSwitch.value = false
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function uploadChange(file:any){
|
|
||||||
forms.value.coverimg = URL.createObjectURL(file.raw)
|
|
||||||
coverimg.value = file
|
|
||||||
}
|
|
||||||
function delcoverimg(){
|
|
||||||
coverimg.value = ''
|
|
||||||
forms.value.coverimg = ''
|
|
||||||
forms.value.news_files = ''
|
|
||||||
}
|
|
||||||
function handlefilechange(file:any){
|
|
||||||
fileList.value = []
|
|
||||||
fileList.value.push(file)
|
|
||||||
}
|
|
||||||
function handlefileremove(){
|
|
||||||
fileList.value = []
|
|
||||||
forms.value.news_video = ''
|
|
||||||
}
|
|
||||||
function lookmovie(){
|
|
||||||
dialogVisibles.value = true
|
|
||||||
}
|
|
||||||
function handleCloses(){
|
|
||||||
dialogVisibles.value = false
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) { // 时间方法
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<template>
|
|
||||||
<div class="activitymanage-box">
|
|
||||||
<div class="activitymanage-box-top">
|
|
||||||
<div class="flex">
|
|
||||||
<el-input v-model="title" placeholder="请输入资讯标题" style="width:240px" clearable />
|
|
||||||
<el-button type="primary" class="ml-[10px]" @click="getData">搜索</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="addinfo"><img src="@/assets/visionscreening/jscz_xz.png" alt="" style="margin-right: 4px;" >新增</el-button>
|
|
||||||
<el-button @click="delinfos" :disabled="multipleSelection.length <= 0" :type="multipleSelection.length > 0 ? 'primary' : ''">
|
|
||||||
<el-icon style="margin-right: 4px;" :color="multipleSelection.length <= 0?'#a8abb2':'#fff'"><Delete /></el-icon> 删除</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading" class="visionscreening-box-bottom">
|
|
||||||
<el-table :data="tableData" border style="width: 100%; height:calc(100vh - 280px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<el-table-column prop="title" label="资讯标题" />
|
|
||||||
<el-table-column prop="type" label="资讯类型" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.type === '01'">知识</span>
|
|
||||||
<span v-else-if="scope.row.type === '02'">新闻</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="状态" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.news_status === '01'" style="color: #4099ff;">初始创建</span>
|
|
||||||
<span v-else-if="scope.row.news_status === '02'" style="color: #009966;">已发布</span>
|
|
||||||
<span v-else-if="scope.row.news_status === '03'" style="color: #FF9900;">撤销</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="recommend" label="是否推荐" width="120">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-switch v-model="scope.row.recommend" active-value="1" inactive-value="0" :active-text="scope.row.recommend === '1'?'推荐':'普通'" @change="switchchange(scope.$index,$event)"/>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="create_user" label="上传人" width="200" />
|
|
||||||
<el-table-column prop="create_time" label="登录时间" width="200">
|
|
||||||
<template #default="scope">
|
|
||||||
{{ dateFormat(scope.row.create_time) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" width="100" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img v-if="scope.row.news_status =='01' || scope.row.news_status =='03'" src="@/assets/appmanage/release.png" alt="" title="发布" @click="releaseClick(scope.row,'02')" style="cursor: pointer;">
|
|
||||||
<img v-if="scope.row.news_status =='02'" src="@/assets/appmanage/return.png" alt="" title="撤销" @click="releaseClick(scope.row,'03')" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/MenuIcon/lbcz_xg.png" alt="" title="修改" @click="editinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/MenuIcon/lbcz_sc.png" alt="" title="删除" @click="delinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogVisible" :close-on-click-modal="false" :title="dialogtitle" :before-close="handleClose" width="50%" draggable append-to-body>
|
|
||||||
<el-form ref="form" :model="forms" :rules="rules" label-width="90px">
|
|
||||||
<div class="flex" >
|
|
||||||
<div style="width:calc(100% - 100px);margin-right:10px ;">
|
|
||||||
<el-form-item label="资讯名称" prop="title" style="width: 100%">
|
|
||||||
<el-input v-model="forms.title" autocomplete="off" placeholder="请输入咨询名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="上传视频" style="width: 100%;display: flex;">
|
|
||||||
<el-upload accept=".mp4" ref="upload" class="upload-demo" action="" :on-change="handlefilechange" :on-remove="handlefileremove" :auto-upload="false" :file-list="fileList" style="width: calc(100% - 70px);position:relative">
|
|
||||||
<template #trigger>
|
|
||||||
<el-button type="primary">点击上传</el-button>
|
|
||||||
</template>
|
|
||||||
</el-upload>
|
|
||||||
<div v-if="forms.news_video" class="videostyle" @click.stop="lookmovie">查看视频</div>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<div style="width:100px;">
|
|
||||||
<el-upload class="avatar-uploader" accept=".png, .jpg, .jpeg" action="" :show-file-list="false" :auto-upload="false" @change="uploadChange" >
|
|
||||||
<div style="width: 100px;height: 100px;position: relative;" v-if="forms.coverimg">
|
|
||||||
<img :src="forms.coverimg" class="avatar" />
|
|
||||||
<div style="position: absolute;top: 0px;left: 0px;z-index: 1;width: 100px;height: 100px;background: rgba(0,0,0,0.3);color: cornflowerblue;">
|
|
||||||
<el-icon style="position: absolute;top: 40px;left: 40px;z-index: 1;font-size: 20px;"
|
|
||||||
@click.stop="delcoverimg"><Delete /></el-icon>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else style="text-align: center;">
|
|
||||||
<el-icon class="newavatar-uploader-icon"><Plus /></el-icon>
|
|
||||||
<div class="newavatar-uploader-text">上传封面</div>
|
|
||||||
</div>
|
|
||||||
</el-upload>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-form-item label="资讯类型" prop="type" style="width: 100%">
|
|
||||||
<el-select v-model="forms.type" placeholder="请选择活动类型" >
|
|
||||||
<el-option v-for="item in typeoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="资讯内容">
|
|
||||||
<textarea v-model="content" :init="initlist" style="width: 100%;background: transparent;"></textarea>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<span class="dialog-footer">
|
|
||||||
<el-button @click="handleClose">取消</el-button>
|
|
||||||
<el-button type="primary" @click="infosubmit(form)">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
<el-dialog v-model="dialogVisibles" :close-on-click-modal="false" title="查看视频" :before-close="handleCloses" width="60%" draggable append-to-body>
|
|
||||||
<video ref="videoRef" :src="url + '/app/app-news/viewAppNewsFile?fileName='+ forms.news_video" style="width:100%" height="400" autoplay controls></video>
|
|
||||||
<span class="dialog-footer mt-[20px]">
|
|
||||||
<el-button type="primary" @click="handleCloses">关闭</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.activitymanage-box {
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
padding: 20px;
|
|
||||||
.activitymanage-box-top{
|
|
||||||
width:100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.dialog-footer {
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
}
|
|
||||||
:deep(.el-tree-node__content){
|
|
||||||
height: 30px;
|
|
||||||
}
|
|
||||||
:deep(.el-input__inner){
|
|
||||||
height: 32px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
// :deep(.el-upload-list){
|
|
||||||
// display: none;
|
|
||||||
// }
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 150px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 15px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
background: rgba(246, 247, 250, 1);
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.leftbox{
|
|
||||||
width: 250px;
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
border: 1px solid #e1e1e1;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{
|
|
||||||
width:100% !important;
|
|
||||||
}
|
|
||||||
.videostyle{
|
|
||||||
padding-top: 5px;
|
|
||||||
background: url('../../assets/appmanage/movie.png') no-repeat;
|
|
||||||
background-position: 0px 13px;
|
|
||||||
padding-left: 18px;
|
|
||||||
position: absolute;
|
|
||||||
right: 0px;
|
|
||||||
bottom: 6px;
|
|
||||||
}
|
|
||||||
.videostyle:hover{
|
|
||||||
color: #4099ff;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,279 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'interaction' // 互动管理
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref } from "vue";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import {queryAppQuestionAnswerPage,updateAppQuestionAnswer} from '@/api/appmanage'
|
|
||||||
import { ElMessage} from "element-plus";
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const searchval = ref('')
|
|
||||||
const dialogVisible = ref(false)
|
|
||||||
const chooseinfo:any = ref({})
|
|
||||||
const textarea = ref('')
|
|
||||||
const contentdata:any = ref([])
|
|
||||||
const contentdatas:any = ref([])
|
|
||||||
const isSwitch = ref(false)
|
|
||||||
onMounted(() => {
|
|
||||||
getData();
|
|
||||||
getunData()
|
|
||||||
});
|
|
||||||
//搜索
|
|
||||||
function getData(){
|
|
||||||
const params:any = {
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
status:'02',
|
|
||||||
name:searchval.value
|
|
||||||
}
|
|
||||||
if(userStore.institutionId !=null&&userStore.institutionId !=''){
|
|
||||||
params.institutionId = userStore.institutionId
|
|
||||||
}
|
|
||||||
queryAppQuestionAnswerPage(params).then((res:any) => {
|
|
||||||
contentdata.value = res.data.records
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function getunData(){
|
|
||||||
const params:any = {
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:9999,
|
|
||||||
status:'01',
|
|
||||||
}
|
|
||||||
if(userStore.institutionId !=null&&userStore.institutionId !=''){
|
|
||||||
params.institutionId = userStore.institutionId
|
|
||||||
}
|
|
||||||
queryAppQuestionAnswerPage(params).then((res:any) => {
|
|
||||||
contentdatas.value = res.data.records
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
})
|
|
||||||
}
|
|
||||||
//点击回答按钮
|
|
||||||
function answerclick(val:any){
|
|
||||||
isSwitch.value = false
|
|
||||||
chooseinfo.value = val
|
|
||||||
dialogVisible.value = true
|
|
||||||
}
|
|
||||||
function handleClose(){
|
|
||||||
dialogVisible.value = false
|
|
||||||
}
|
|
||||||
//确认按钮
|
|
||||||
function answersubmit(){
|
|
||||||
if(isSwitch.value == true){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isSwitch.value = true
|
|
||||||
const params = chooseinfo.value
|
|
||||||
params.answer = textarea.value
|
|
||||||
params.questionStatus = '02'
|
|
||||||
updateAppQuestionAnswer(params).then((res:any) => {
|
|
||||||
ElMessage({
|
|
||||||
message: "回答成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
getunData()
|
|
||||||
dialogVisible.value = false
|
|
||||||
isSwitch.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) { // 时间方法
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<template>
|
|
||||||
<div class="interaction-box">
|
|
||||||
<div class="interaction-box-left">
|
|
||||||
<div class="box-left-top">
|
|
||||||
<el-input v-model="searchval" placeholder="请输入关键字" style="width:240px" clearable />
|
|
||||||
<el-button type="primary" class="ml-[10px]" @click="getData">搜索</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="box-left-bottom">
|
|
||||||
<div class="problem-box" v-for="(item,index) in contentdata" :key="index">
|
|
||||||
<div class="problem-text">{{ item.question }}</div>
|
|
||||||
<div class="answer-text">{{ item.answer }}</div>
|
|
||||||
<div class="flex">
|
|
||||||
<div class="tel-text">{{ item.mobile }}</div>
|
|
||||||
<div class="time-text">{{ dateFormat(item.answer_time) }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
<div class="interaction-box-right">
|
|
||||||
<div class="box-right-top">
|
|
||||||
<div class="unproblem-title">未解决问题</div>
|
|
||||||
<div class="unproblem-line"></div>
|
|
||||||
</div>
|
|
||||||
<div class="box-right-bottom">
|
|
||||||
<div class="problem-box mt-[18px]" v-for="(items,indexs) in contentdatas" :key="indexs">
|
|
||||||
<div class="problem-text">{{ items.question }}</div>
|
|
||||||
<div class="flex mt-[5px] items-center justify-between">
|
|
||||||
<div class="flex">
|
|
||||||
<div class="tel-text">{{ items.mobile }}</div>
|
|
||||||
<div class="time-text">{{ dateFormat(items.question_time) }}</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div class="answer-button" @click="answerclick(items)">回答</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogVisible" :close-on-click-modal="false" title="回答" :before-close="handleClose" width="40%" draggable append-to-body>
|
|
||||||
<div>
|
|
||||||
<div class="dialog-title">{{chooseinfo.question}}</div>
|
|
||||||
<el-input v-model="textarea" :autosize="{ minRows: 18 }" type="textarea" class="mb-[20px]"/>
|
|
||||||
</div>
|
|
||||||
<span class="dialog-footer flex justify-end">
|
|
||||||
<el-button @click="handleClose">取消</el-button>
|
|
||||||
<el-button type="primary" @click="answersubmit">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.interaction-box{
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
.interaction-box-left{
|
|
||||||
width: 70%;
|
|
||||||
height: 100%;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 0.498039215686275);
|
|
||||||
padding: 20px;
|
|
||||||
.box-left-top{
|
|
||||||
height: 50px;
|
|
||||||
}
|
|
||||||
.box-left-bottom{
|
|
||||||
height: calc(100vh - 270px);
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.interaction-box-right{
|
|
||||||
width: 30%;
|
|
||||||
height: 100%;
|
|
||||||
margin-left: 15px;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 0.498039215686275);
|
|
||||||
padding: 20px;
|
|
||||||
.box-right-top{
|
|
||||||
border-bottom: 1px solid #ececec;
|
|
||||||
position: relative;
|
|
||||||
.unproblem-title{
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
padding-bottom: 13px;
|
|
||||||
}
|
|
||||||
.unproblem-line{
|
|
||||||
height: 3px;
|
|
||||||
width: 84px;
|
|
||||||
background: #4099ff;
|
|
||||||
position: absolute;
|
|
||||||
bottom:-2px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-right-bottom{
|
|
||||||
height: calc(100vh - 205px);
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.problem-text{
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #363636;
|
|
||||||
line-height: 24px;
|
|
||||||
padding-bottom: 10px;
|
|
||||||
background: url('../../assets/appmanage/Q.png') no-repeat;
|
|
||||||
padding-left: 30px;
|
|
||||||
background-position: 2px 4px;
|
|
||||||
min-height: 20px;
|
|
||||||
}
|
|
||||||
.answer-text{
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #363636;
|
|
||||||
line-height: 24px;
|
|
||||||
padding-bottom: 10px;
|
|
||||||
background: url('../../assets/appmanage/A.png') no-repeat;
|
|
||||||
padding-left: 30px;
|
|
||||||
background-position: 2px 2px;
|
|
||||||
min-height: 30px;
|
|
||||||
}
|
|
||||||
.tel-text{
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #949494;
|
|
||||||
background: url('../../assets/appmanage/tel.png') no-repeat;
|
|
||||||
padding-left: 25px;
|
|
||||||
background-position: 2px 3px;
|
|
||||||
}
|
|
||||||
.time-text{
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #949494;
|
|
||||||
background: url('../../assets/appmanage/time.png') no-repeat;
|
|
||||||
padding-left: 25px;
|
|
||||||
background-position: 2px 3px;
|
|
||||||
margin-left: 35px;
|
|
||||||
}
|
|
||||||
.problem-box{
|
|
||||||
padding-bottom: 15px;
|
|
||||||
border-bottom: 1px solid #ececec;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.answer-button{
|
|
||||||
width: 50px;
|
|
||||||
height: 30px;
|
|
||||||
line-height: 30px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(255, 153, 0, 1);
|
|
||||||
color: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
font-size: 12px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.dialog-title{
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 18px;
|
|
||||||
color: #363636;
|
|
||||||
line-height: 24px;
|
|
||||||
background: url('../../assets/appmanage/Q.png') no-repeat;
|
|
||||||
padding-left: 30px;
|
|
||||||
background-position: 2px 4px;
|
|
||||||
margin-bottom: 30px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,268 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'loginlog' // 登录日志
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted,ref } from "vue";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import {queryAppUserLogsPage,queryAppUserHistoryLogsPage,exportUserLogData} from '@/api/appmanage'
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
//搜索内容
|
|
||||||
const mobile = ref('')
|
|
||||||
const logintime = ref('')
|
|
||||||
const loading = ref(false)
|
|
||||||
const tableData:any = ref([])
|
|
||||||
onMounted(() => {
|
|
||||||
getData();
|
|
||||||
});
|
|
||||||
// 搜索
|
|
||||||
function getData(){
|
|
||||||
const params = {
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
mobile:mobile.value,
|
|
||||||
startVisionLeft:queryInfo.value.startVisionLeft,
|
|
||||||
endVisionLeft:queryInfo.value.endVisionLeft,
|
|
||||||
startVisionRight:queryInfo.value.startVisionRight,
|
|
||||||
endVisionRight:queryInfo.value.endVisionRight,
|
|
||||||
startDate:'',
|
|
||||||
endDate:''
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
if( logintime.value !== null && logintime.value !== ''){
|
|
||||||
params.startDate =logintime.value[0]
|
|
||||||
params.endDate = logintime.value[1]
|
|
||||||
}
|
|
||||||
queryAppUserLogsPage(params).then((res:any) => {
|
|
||||||
tableData.value = res.data.records
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 重置
|
|
||||||
function reset(){
|
|
||||||
logintime.value = ''
|
|
||||||
mobile.value = ''
|
|
||||||
const params = {
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
queryAppUserLogsPage(params).then((res:any) => {
|
|
||||||
tableData.value = res.data.records
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) { // 时间方法
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const dialogLogVisible = ref(false)
|
|
||||||
const loginInfo:any =ref({
|
|
||||||
total:0,
|
|
||||||
size:10,
|
|
||||||
current:1,
|
|
||||||
mobile:""
|
|
||||||
})
|
|
||||||
function viewLoding(row:any){
|
|
||||||
loginInfo.value = {
|
|
||||||
total:0,
|
|
||||||
size:20,
|
|
||||||
current:1,
|
|
||||||
mobile:row.mobile
|
|
||||||
}
|
|
||||||
dialogLogVisible.value = true
|
|
||||||
getLoding()
|
|
||||||
}
|
|
||||||
const historyData:any = ref([])
|
|
||||||
function getLoding(){
|
|
||||||
const params = {
|
|
||||||
current: loginInfo.value.current,
|
|
||||||
size:loginInfo.value.size,
|
|
||||||
mobile:loginInfo.value.mobile
|
|
||||||
}
|
|
||||||
queryAppUserHistoryLogsPage(params).then((res:any) => {
|
|
||||||
historyData.value = res.data.records
|
|
||||||
loginInfo.value.total = res.data.total
|
|
||||||
}).catch(()=>{
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
function handleClose(){
|
|
||||||
dialogLogVisible.value =false
|
|
||||||
}
|
|
||||||
function exportOut(){
|
|
||||||
|
|
||||||
let params = {
|
|
||||||
mobile:mobile.value,
|
|
||||||
startVisionLeft:queryInfo.value.startVisionLeft,
|
|
||||||
endVisionLeft:queryInfo.value.endVisionLeft,
|
|
||||||
startVisionRight:queryInfo.value.startVisionRight,
|
|
||||||
endVisionRight:queryInfo.value.endVisionRight,
|
|
||||||
startDate:'',
|
|
||||||
endDate:''
|
|
||||||
};
|
|
||||||
if( logintime.value !== null && logintime.value !== ''){
|
|
||||||
params.startDate =logintime.value[0]
|
|
||||||
params.endDate = logintime.value[1]
|
|
||||||
}
|
|
||||||
exportUserLogData(params).then((response: any) => {
|
|
||||||
downloadFile(response, 'APP程序-学生信息查询记录', 'xlsx')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<template>
|
|
||||||
<div class="activitymanage-box">
|
|
||||||
<div class="activitymanage-box-top">
|
|
||||||
<div class="flex">
|
|
||||||
<el-input v-model="mobile" placeholder="请输入手机号" style="width:240px" clearable />
|
|
||||||
<el-date-picker v-model="logintime" style="margin-left: 10px;height: 34px;" type="daterange" start-placeholder="开始时间" end-placeholder="结束时间" value-format="YYYY-MM-DD"/>
|
|
||||||
<div style="display:flex;align-items: center;padding-left: 10px;">
|
|
||||||
<div style="color:#909399;font-size: 14px;padding-right: 10px;">左眼裸眼视力:</div>
|
|
||||||
<el-input v-model="queryInfo.startVisionLeft" placeholder="起始值" style="width: 90px;" clearable />
|
|
||||||
<span> - </span>
|
|
||||||
<el-input v-model="queryInfo.endVisionLeft" placeholder="结束值" style="width: 90px;" clearable />
|
|
||||||
</div>
|
|
||||||
<div style="display:flex;align-items: center;padding-left: 10px;">
|
|
||||||
<div style="color:#909399;font-size: 14px;padding-right: 10px;">右眼裸眼视力:</div>
|
|
||||||
<el-input v-model="queryInfo.startVisionRight" placeholder="起始值" style="width: 90px;" clearable />
|
|
||||||
<span> - </span>
|
|
||||||
<el-input v-model="queryInfo.endVisionRight" placeholder="结束值" style="width: 90px;" clearable />
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" class="ml-[10px]" @click="getData">搜索</el-button>
|
|
||||||
<el-button @click="reset">重置</el-button>
|
|
||||||
<el-button type="primary" @click="exportOut">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading" class="visionscreening-box-bottom">
|
|
||||||
<el-table :data="tableData" border style="width: 100%; height:calc(100vh - 280px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="mobile" label="手机号" min-width="200" />
|
|
||||||
<el-table-column prop="student_name" label="学生姓名" min-width="100" />
|
|
||||||
<el-table-column prop="log_time" label="操作时间" width="200">
|
|
||||||
<template #default="scope">
|
|
||||||
{{ dateFormat(scope.row.log_time) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" width="80" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/tableicon/u886.png" alt="" title="查看" @click="viewLoding(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogLogVisible" :close-on-click-modal="false" title="查看记录" :before-close="handleClose" width="1280px" draggable append-to-body>
|
|
||||||
<el-table :data="historyData" border style="width: 100%; height:calc(100vh - 280px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="mobile" label="手机号" width="200" />
|
|
||||||
<el-table-column prop="student_name" label="学生姓名" width="100" />
|
|
||||||
<el-table-column label="裸眼视力" width="120" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>左{{scope.row.vision_left}},右{{scope.row.vision_right}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作类型" width="100" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.opttype === '01'">登录</span>
|
|
||||||
<span v-else-if="scope.row.opttype === '02'">关联学生</span>
|
|
||||||
<span v-else-if="scope.row.opttype === '03'">查询视力</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="description" label="操作描述" />
|
|
||||||
<el-table-column prop="log_time" label="操作时间" width="200">
|
|
||||||
<template #default="scope">
|
|
||||||
{{ dateFormat(scope.row.log_time) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="loginInfo.total" v-model:size="loginInfo.size" v-model:current="loginInfo.current"
|
|
||||||
@pagination="getLoding" />
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.activitymanage-box {
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
padding: 20px;
|
|
||||||
.activitymanage-box-top{
|
|
||||||
width:100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.dialog-footer {
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
}
|
|
||||||
:deep(.el-tree-node__content){
|
|
||||||
height: 30px;
|
|
||||||
}
|
|
||||||
:deep(.el-input__inner){
|
|
||||||
height: 32px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 150px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 15px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
background: rgba(246, 247, 250, 1);
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.leftbox{
|
|
||||||
width: 250px;
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
border: 1px solid #e1e1e1;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,743 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'datacontrast' // 数据对比
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref, nextTick,watch } from "vue";
|
|
||||||
import { useDark } from '@vueuse/core'
|
|
||||||
import { ElMessage, ElMessageBox, ElTree,ElTable,TabsPaneContext} from "element-plus";
|
|
||||||
import * as echarts from 'echarts'
|
|
||||||
import { queryRegionSchool } from "@/api/regionmodule/school";
|
|
||||||
import { querySchoolIdExamineList } from "@/api/planscreening";
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
const planYearData:any =ref([{name:'2023-1'},{name:'2023-2'},{name:'2024-1'},{name:'2024-2'},{name:'2025-1'},{name:'2025-2'}])
|
|
||||||
const planYear:any = ref("")
|
|
||||||
function planYearChange(e:any){
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
const istabshow = ref(true)
|
|
||||||
const loading = ref(false)
|
|
||||||
const sortstatus = ref(0)
|
|
||||||
const option = ref({
|
|
||||||
title: {
|
|
||||||
text: '朝阳区2023年第一学期第一次普检',
|
|
||||||
left: 'center',
|
|
||||||
textStyle:{
|
|
||||||
color:'#000'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'item'
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
orient: 'horizontal',
|
|
||||||
left: 'center',
|
|
||||||
bottom: '2%',
|
|
||||||
textStyle:{
|
|
||||||
fontSize :18,
|
|
||||||
color:'#787878'
|
|
||||||
},
|
|
||||||
icon: 'circle',
|
|
||||||
itemWidth: 10,
|
|
||||||
itemHeight: 10,
|
|
||||||
itemGap: 10,
|
|
||||||
padding: [0, 100]
|
|
||||||
},
|
|
||||||
color:['#6395fa','#f7c122','#63daab','#7666fa', '#8babd8','#75cbed'],
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: '',
|
|
||||||
type: 'pie',
|
|
||||||
radius: '60%',
|
|
||||||
top:'-10%',
|
|
||||||
data: [
|
|
||||||
{ value: 1048, name: '小学一年级'},
|
|
||||||
{ value: 735, name: '小学二年级' },
|
|
||||||
{ value: 580, name: '小学三年级' },
|
|
||||||
{ value: 484, name: '小学四年级' },
|
|
||||||
{ value: 300, name: '小学五年级' },
|
|
||||||
{ value: 300, name: '小学六年级' },
|
|
||||||
],
|
|
||||||
label: {
|
|
||||||
normal: {
|
|
||||||
color:'#000000',
|
|
||||||
formatter: '{c}',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
emphasis: {
|
|
||||||
itemStyle: {
|
|
||||||
shadowBlur: 10,
|
|
||||||
shadowOffsetX: 0,
|
|
||||||
shadowColor: 'rgba(0, 0, 0, 0.5)',
|
|
||||||
borderColor:'#000',
|
|
||||||
borderWidth:0.5
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
const option2 = ref({
|
|
||||||
title: {
|
|
||||||
text: '朝阳区2023年第一学期第一次普检',
|
|
||||||
left: 'center',
|
|
||||||
textStyle:{
|
|
||||||
color:'#000'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'item'
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
orient: 'horizontal',
|
|
||||||
left: 'center',
|
|
||||||
bottom: '2%',
|
|
||||||
textStyle:{
|
|
||||||
fontSize :18,
|
|
||||||
color:'#787878'
|
|
||||||
},
|
|
||||||
icon: 'circle',
|
|
||||||
itemWidth: 10,
|
|
||||||
itemHeight: 10,
|
|
||||||
itemGap: 10,
|
|
||||||
padding: [0, 100]
|
|
||||||
},
|
|
||||||
color:['#6395fa','#f7c122','#63daab','#7666fa', '#8babd8','#75cbed'],
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: '',
|
|
||||||
type: 'pie',
|
|
||||||
radius: '60%',
|
|
||||||
top:'-10%',
|
|
||||||
data: [
|
|
||||||
{ value: 1048, name: '小学一年级' },
|
|
||||||
{ value: 735, name: '小学二年级' },
|
|
||||||
{ value: 580, name: '小学三年级' },
|
|
||||||
{ value: 484, name: '小学四年级' },
|
|
||||||
{ value: 300, name: '小学五年级' },
|
|
||||||
{ value: 300, name: '小学六年级' },
|
|
||||||
],
|
|
||||||
label: {
|
|
||||||
normal: {
|
|
||||||
color:'#000000',
|
|
||||||
formatter: '{c}',
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
emphasis: {
|
|
||||||
itemStyle: {
|
|
||||||
shadowBlur: 10,
|
|
||||||
shadowOffsetX: 0,
|
|
||||||
shadowColor: 'rgba(0, 0, 0, 0.5)',
|
|
||||||
borderColor:'#000',
|
|
||||||
borderWidth:0.5
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
const option3 = ref({
|
|
||||||
title: {
|
|
||||||
text: '朝阳区2023年第一学期第一次普检',
|
|
||||||
left: 'center',
|
|
||||||
textStyle:{
|
|
||||||
color:'#000'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'item'
|
|
||||||
},
|
|
||||||
grid:{
|
|
||||||
top:'0%',
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
orient: 'horizontal',
|
|
||||||
left: 'center',
|
|
||||||
bottom: '2%',
|
|
||||||
textStyle:{
|
|
||||||
fontSize :18,
|
|
||||||
color:'#787878'
|
|
||||||
},
|
|
||||||
icon: 'circle',
|
|
||||||
itemWidth: 10,
|
|
||||||
itemHeight: 10,
|
|
||||||
itemGap: 10,
|
|
||||||
padding: [0, 100]
|
|
||||||
},
|
|
||||||
color:['#6395fa','#f7c122','#63daab','#7666fa', '#8babd8','#75cbed'],
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: '',
|
|
||||||
type: 'pie',
|
|
||||||
radius: '60%',
|
|
||||||
top:'-10%',
|
|
||||||
data: [
|
|
||||||
{ value: 1048, name: '小学一年级' },
|
|
||||||
{ value: 735, name: '小学二年级' },
|
|
||||||
{ value: 580, name: '小学三年级' },
|
|
||||||
{ value: 484, name: '小学四年级' },
|
|
||||||
{ value: 300, name: '小学五年级' },
|
|
||||||
{ value: 300, name: '小学六年级' },
|
|
||||||
],
|
|
||||||
label: {
|
|
||||||
normal: {
|
|
||||||
color:'#000000',
|
|
||||||
formatter: '{c}',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
emphasis: {
|
|
||||||
itemStyle: {
|
|
||||||
shadowBlur: 10,
|
|
||||||
shadowOffsetX: 0,
|
|
||||||
shadowColor: 'rgba(0, 0, 0, 0.5)',
|
|
||||||
borderColor:'#000',
|
|
||||||
borderWidth:0.5
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
let isDark:any = useDark().value == true? '1' : '2'
|
|
||||||
watch(useDark(), () => {
|
|
||||||
isDark = useDark().value == true? '1' : '2'
|
|
||||||
if (useDark().value == true) {
|
|
||||||
facechange('1')
|
|
||||||
} else {
|
|
||||||
facechange('2')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const showecharts1= ref(false)
|
|
||||||
const showecharts2= ref(false)
|
|
||||||
const showecharts3= ref(false)
|
|
||||||
// 左侧树
|
|
||||||
const treeData: any = ref([]);
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
let activeName = ref('近视统计')
|
|
||||||
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
});
|
|
||||||
//tab页勾选
|
|
||||||
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|
||||||
sortstatus.value = 0
|
|
||||||
istabshow.value = true
|
|
||||||
loadecharts()
|
|
||||||
}
|
|
||||||
const schoolId = ref("")
|
|
||||||
//树勾选
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
|
|
||||||
if(data.org_type == null){
|
|
||||||
nextTick(() => {
|
|
||||||
treeRef.value?.setCurrentKey(schoolId.value);
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
schoolId.value = data.id
|
|
||||||
treeRef.value?.setCurrentKey(data.id);
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
showecharts1.value = false
|
|
||||||
showecharts2.value = false
|
|
||||||
showecharts3.value = false
|
|
||||||
checkedCities.value = []
|
|
||||||
};
|
|
||||||
//勾选普检信息
|
|
||||||
let myChart1:any = ref()
|
|
||||||
let myChart2:any = ref()
|
|
||||||
let myChart3:any = ref()
|
|
||||||
const checkdata:any = ref([])
|
|
||||||
//加载统计饼图
|
|
||||||
function loadecharts(){
|
|
||||||
if (isDark === '1') {
|
|
||||||
facechange('1')
|
|
||||||
}else{
|
|
||||||
facechange('2')
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
showecharts1.value = false
|
|
||||||
showecharts2.value = false
|
|
||||||
showecharts3.value = false
|
|
||||||
let nums = 0
|
|
||||||
checkdata.value = []
|
|
||||||
if (checkedCities.value.length === 1) {
|
|
||||||
showecharts1.value = true
|
|
||||||
showecharts2.value = false
|
|
||||||
showecharts3.value = false
|
|
||||||
setTimeout(()=>{
|
|
||||||
if (myChart1.value) {
|
|
||||||
myChart1.value.dispose()
|
|
||||||
}
|
|
||||||
const chartEle: HTMLElement = document.getElementById('echarts1') as HTMLElement;
|
|
||||||
myChart1.value = echarts.init(chartEle);
|
|
||||||
option.value.title.text = checkedCities.value[0]
|
|
||||||
myChart1.value.setOption(option.value)
|
|
||||||
window.onresize = function () {
|
|
||||||
myChart1.value.resize()
|
|
||||||
}
|
|
||||||
},100)
|
|
||||||
} else if (checkedCities.value.length === 2) {
|
|
||||||
showecharts1.value = true
|
|
||||||
showecharts2.value = true
|
|
||||||
showecharts3.value = false
|
|
||||||
setTimeout(()=>{
|
|
||||||
if (myChart1.value) {
|
|
||||||
myChart1.value.dispose()
|
|
||||||
}
|
|
||||||
if (myChart2.value) {
|
|
||||||
myChart2.value.dispose()
|
|
||||||
}
|
|
||||||
const chartEle: HTMLElement = document.getElementById('echarts1') as HTMLElement;
|
|
||||||
myChart1.value = echarts.init(chartEle);
|
|
||||||
const chartEle2: HTMLElement = document.getElementById('echarts2') as HTMLElement;
|
|
||||||
myChart2.value = echarts.init(chartEle2);
|
|
||||||
option.value.title.text = checkedCities.value[0]
|
|
||||||
option2.value.title.text = checkedCities.value[1]
|
|
||||||
myChart1.value.setOption(option.value)
|
|
||||||
myChart2.value.setOption(option2.value)
|
|
||||||
window.onresize = function () {
|
|
||||||
myChart1.value.resize()
|
|
||||||
myChart2.value.resize()
|
|
||||||
}
|
|
||||||
},100)
|
|
||||||
} else if(checkedCities.value.length === 3){
|
|
||||||
showecharts1.value = true
|
|
||||||
showecharts2.value = true
|
|
||||||
showecharts3.value = true
|
|
||||||
setTimeout(()=>{
|
|
||||||
if (myChart1.value) {
|
|
||||||
myChart1.value.dispose()
|
|
||||||
}
|
|
||||||
if (myChart2.value) {
|
|
||||||
myChart2.value.dispose()
|
|
||||||
}
|
|
||||||
if (myChart3.value) {
|
|
||||||
myChart3.value.dispose()
|
|
||||||
}
|
|
||||||
const chartEle: HTMLElement = document.getElementById('echarts1') as HTMLElement;
|
|
||||||
myChart1.value = echarts.init(chartEle);
|
|
||||||
const chartEle2: HTMLElement = document.getElementById('echarts2') as HTMLElement;
|
|
||||||
myChart2.value = echarts.init(chartEle2);
|
|
||||||
const chartEle3: HTMLElement = document.getElementById('echarts3') as HTMLElement;
|
|
||||||
myChart3.value = echarts.init(chartEle3);
|
|
||||||
option.value.title.text = checkedCities.value[0]
|
|
||||||
option2.value.title.text = checkedCities.value[1]
|
|
||||||
option3.value.title.text = checkedCities.value[2]
|
|
||||||
myChart1.value.setOption(option.value)
|
|
||||||
myChart2.value.setOption(option2.value)
|
|
||||||
myChart3.value.setOption(option3.value)
|
|
||||||
window.onresize = function () {
|
|
||||||
myChart1.value.resize()
|
|
||||||
myChart2.value.resize()
|
|
||||||
myChart3.value.resize()
|
|
||||||
}
|
|
||||||
},100)
|
|
||||||
}
|
|
||||||
loading.value = false
|
|
||||||
}
|
|
||||||
function facechange(type:any){
|
|
||||||
if (type === '1') {
|
|
||||||
option.value.title.textStyle.color="#ffffff"
|
|
||||||
option.value.legend.textStyle.color = '#ffffff'
|
|
||||||
option.value.series[0].label.normal.color = '#ffffff'
|
|
||||||
option2.value.title.textStyle.color="#ffffff"
|
|
||||||
option2.value.legend.textStyle.color = '#ffffff'
|
|
||||||
option2.value.series[0].label.normal.color = '#ffffff'
|
|
||||||
option3.value.title.textStyle.color="#ffffff"
|
|
||||||
option3.value.legend.textStyle.color = '#ffffff'
|
|
||||||
option3.value.series[0].label.normal.color = '#ffffff'
|
|
||||||
}else{
|
|
||||||
option.value.title.textStyle.color="#000"
|
|
||||||
option.value.legend.textStyle.color = '#000'
|
|
||||||
option.value.series[0].label.normal.color = '#000'
|
|
||||||
option2.value.title.textStyle.color="#000"
|
|
||||||
option2.value.legend.textStyle.color = '#000'
|
|
||||||
option2.value.series[0].label.normal.color = '#000'
|
|
||||||
option3.value.title.textStyle.color="#000"
|
|
||||||
option3.value.legend.textStyle.color = '#000'
|
|
||||||
option3.value.series[0].label.normal.color = '#000'
|
|
||||||
}
|
|
||||||
if (myChart1.value) {
|
|
||||||
myChart1.value.clear()
|
|
||||||
myChart1.value.setOption(option.value);
|
|
||||||
myChart1.value.resize()
|
|
||||||
}
|
|
||||||
if (myChart2.value) {
|
|
||||||
myChart2.value.clear()
|
|
||||||
myChart2.value.setOption(option2.value);
|
|
||||||
myChart2.value.resize()
|
|
||||||
}
|
|
||||||
if (myChart3.value) {
|
|
||||||
myChart3.value.clear()
|
|
||||||
myChart3.value.setOption(option3.value);
|
|
||||||
myChart3.value.resize()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const month:any = ref("")
|
|
||||||
function monthChange(e:any){
|
|
||||||
// getTableDate()
|
|
||||||
}
|
|
||||||
|
|
||||||
// function getCurrentMonthRange(date:any) {
|
|
||||||
// let startOfMonth = new Date(date);
|
|
||||||
// startOfMonth.setDate(1); // 设置日期为当月的1号
|
|
||||||
// let endOfMonth = new Date();
|
|
||||||
// endOfMonth.setMonth(startOfMonth.getMonth() + 1); // 设置日期为下个月的1号
|
|
||||||
// endOfMonth.setDate(0); // 将日期设置为上个月的最后一天
|
|
||||||
|
|
||||||
// return {
|
|
||||||
// start: dateFormat(startOfMonth),
|
|
||||||
// end: dateFormat(endOfMonth)
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
const treeLoading = ref(false)
|
|
||||||
const tempData:any = ref([])
|
|
||||||
function getTree(){
|
|
||||||
let params = {
|
|
||||||
status:'01',
|
|
||||||
name: "",
|
|
||||||
};
|
|
||||||
treeLoading.value = true
|
|
||||||
queryRegionSchool(params).then((res) => {
|
|
||||||
for(let i=0;i<res.data.length;i++){
|
|
||||||
if(res.data[i].org_type == "5"){
|
|
||||||
schoolId.value = res.data[i].id
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tempData.value = JSON.parse(JSON.stringify(res.data))
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
if(schoolId.value != ""){
|
|
||||||
nextTick(() => {
|
|
||||||
treeRef.value?.setCurrentKey(schoolId.value);
|
|
||||||
getData();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const planData:any = ref([])
|
|
||||||
const checkedCities:any = ref([]) // 选中的计划
|
|
||||||
function getData(){
|
|
||||||
let params = {
|
|
||||||
schoolId: schoolId.value,
|
|
||||||
planYear: planYear.value
|
|
||||||
};
|
|
||||||
querySchoolIdExamineList(params).then((res) => {
|
|
||||||
planData.value = res.data;
|
|
||||||
// treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
// treeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function planChange(e:any){
|
|
||||||
loadecharts()
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="contents-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div style="width:100%;padding: 5px 15px;">
|
|
||||||
<el-select v-model="planYear" placeholder="请选择计划年度" @change="planYearChange">
|
|
||||||
<el-option v-for="item in planYearData" :key="item.name" :label="item.name" :value="item.name"/>
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData" default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 260px); overflow: auto;margin-top: 10px;">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRights">
|
|
||||||
<div class="silderRight-top">
|
|
||||||
<div style="display: flex;flex-wrap:wrap;">
|
|
||||||
<el-checkbox-group
|
|
||||||
v-model="checkedCities"
|
|
||||||
@change="planChange"
|
|
||||||
>
|
|
||||||
<el-checkbox v-for="item in planData" :key="item.id" :label="item.id">{{
|
|
||||||
item.plan_name
|
|
||||||
}}</el-checkbox>
|
|
||||||
</el-checkbox-group>
|
|
||||||
<!-- <div v-for="(item,index) in checkinfo" :key="index" style="width:300px;height: 30px;">
|
|
||||||
<el-checkbox v-model="item.checked" @change="checkchange(index,$event)">{{item.plan_name}}</el-checkbox>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick" style="height:calc(100vh - 325px);">
|
|
||||||
<el-tab-pane label="近视统计" name="近视统计">
|
|
||||||
<div v-loading="loading" class="tabcontent">
|
|
||||||
<div v-if="activeName === '近视统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts1" id="echarts1" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
<div v-if="activeName === '近视统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts2" id="echarts2" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
<div v-if="activeName === '近视统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts3" id="echarts3" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="视力不良统计" name="视力不良统计">
|
|
||||||
<div v-loading="loading" class="tabcontent">
|
|
||||||
<div v-if="activeName === '视力不良统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts1" id="echarts1" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
<div v-if="activeName === '视力不良统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts2" id="echarts2" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
<div v-if="activeName === '视力不良统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts3" id="echarts3" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="远视储备率统计" name="远视储备率统计">
|
|
||||||
<div v-loading="loading" class="tabcontent">
|
|
||||||
<div v-if="activeName === '远视储备率统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts1" id="echarts1" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
<div v-if="activeName === '远视储备率统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts2" id="echarts2" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
<div v-if="activeName === '远视储备率统计'" class="tabcontent-box">
|
|
||||||
<div v-if="showecharts3" id="echarts3" style="width: 100%; height:100%;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
</el-tabs>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.contents-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
height: calc(100vh - 145px);
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height:40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// width: 240px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRights {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
// overflow: auto;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
|
|
||||||
.el-button{
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
// .el-tree-node__content{
|
|
||||||
// height: 40px;
|
|
||||||
// padding-left: 12px !important;
|
|
||||||
// color: #505050;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
// color: #409eff;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: #ecf5ff;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: transparent;
|
|
||||||
// // #ecf5ff
|
|
||||||
// }
|
|
||||||
// .el-tree-node__expand-icon{
|
|
||||||
// color: #333333;
|
|
||||||
// }
|
|
||||||
.el-tabs__item{
|
|
||||||
margin-right: 10px;
|
|
||||||
border: 1px solid #dfe4ee;
|
|
||||||
border-bottom: none;
|
|
||||||
padding: 0px 20px !important;
|
|
||||||
width: 130px;
|
|
||||||
height: 44px;
|
|
||||||
border-radius: 10px;
|
|
||||||
border-bottom-right-radius: 0px;
|
|
||||||
border-bottom-left-radius: 0px;
|
|
||||||
background-color: #e9ecf3;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #606060;
|
|
||||||
}
|
|
||||||
.el-tabs__nav{
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
.el-tabs__active-bar{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.el-tabs__item:hover{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.el-tabs__item.is-active{
|
|
||||||
color: #fff;
|
|
||||||
border: 1px solid #409eff;
|
|
||||||
background-color: #409eff;
|
|
||||||
}
|
|
||||||
.el-tabs__nav-wrap::after{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.el-tabs__header{
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.tabcontent{
|
|
||||||
background-color: #fff;
|
|
||||||
height: calc(100vh - 384px);
|
|
||||||
border-radius: 5px;
|
|
||||||
padding: 20px;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.tabcontent-box{
|
|
||||||
width: 33%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.silderRight-top{
|
|
||||||
height: 180px;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
width:100%;
|
|
||||||
margin-bottom:15px;
|
|
||||||
padding: 15px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,394 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'importdata' // 数据管理-导入数据
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref, nextTick ,watch} from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable,ElTree} from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { schoolIdsPlanIdQueryStudent,exportExamineResultStudent,updateExamineResult } from "@/api/planscreening";
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
import { getToken } from '@/utils/auth'
|
|
||||||
import * as XLSX from 'xlsx';
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const tableRowClassName = ({
|
|
||||||
row,
|
|
||||||
rowIndex,
|
|
||||||
}: {
|
|
||||||
row: any
|
|
||||||
rowIndex: number
|
|
||||||
}) => {
|
|
||||||
if (row.is_sighted == 1) {
|
|
||||||
return 'is_sightedbg'
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const planSchoolInfo:any = ref({})
|
|
||||||
const checkList=ref([])
|
|
||||||
const tableData = ref([])
|
|
||||||
watch(
|
|
||||||
() => props.planInfo,
|
|
||||||
(newVal: any) => {
|
|
||||||
planSchoolInfo.value = newVal
|
|
||||||
checkList.value = []
|
|
||||||
tableData.value =[]
|
|
||||||
},
|
|
||||||
{ immediate: true }
|
|
||||||
);
|
|
||||||
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
schoolId:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
|
|
||||||
const loading = ref(false)
|
|
||||||
// 左侧树
|
|
||||||
onMounted(() => {
|
|
||||||
planSchoolInfo.value = props.planInfo
|
|
||||||
});
|
|
||||||
|
|
||||||
function download(){
|
|
||||||
|
|
||||||
let params = {
|
|
||||||
planId: planSchoolInfo.value.id,
|
|
||||||
schoolIds:checkList.value.join(',')
|
|
||||||
|
|
||||||
};
|
|
||||||
exportExamineResultStudent(params).then((response: any) => {
|
|
||||||
downloadFile(response,planSchoolInfo.value.plan_name+ '-学生基本信息', 'xlsx')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function checkchange(list:any){
|
|
||||||
let tempSchoolName = []
|
|
||||||
for(let i = 0;i<list.length;i++){
|
|
||||||
for(let j = 0;j<planSchoolInfo.value.schoolList.length;j++){
|
|
||||||
if(planSchoolInfo.value.schoolList[j].id == list[i]){
|
|
||||||
tempSchoolName.push(planSchoolInfo.value.schoolList[j].name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
schoolNames.value = tempSchoolName.join(",")
|
|
||||||
if(list.length != 0){
|
|
||||||
getData()
|
|
||||||
}else{
|
|
||||||
tableData.value =[]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function getData(){
|
|
||||||
let params = {
|
|
||||||
planId: planSchoolInfo.value.id,
|
|
||||||
schoolIds:checkList.value.join(','),
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
current:queryInfo.value.current
|
|
||||||
}
|
|
||||||
schoolIdsPlanIdQueryStudent(params).then((res) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) { // 时间方法
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const upload:any = ref(null)
|
|
||||||
const errorData:any = ref([])
|
|
||||||
const dialogTableVisible = ref(false)
|
|
||||||
function handlesSuccess(file: any) {
|
|
||||||
loading.value = false
|
|
||||||
if(file.code == "0"){
|
|
||||||
ElMessage({
|
|
||||||
message: "导入成功!",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
}else{
|
|
||||||
errorData.value = []
|
|
||||||
let msg = file.msg.split("!!<br>")
|
|
||||||
msg.forEach(element => {
|
|
||||||
errorData.value.push({name:element})
|
|
||||||
});
|
|
||||||
dialogTableVisible.value = true
|
|
||||||
// ElMessage({
|
|
||||||
// message: file.msg,
|
|
||||||
// type: "error",
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
|
|
||||||
upload.value.clearFiles()
|
|
||||||
}
|
|
||||||
|
|
||||||
const schoolNames:any = ref("")
|
|
||||||
function handleError(file: any){
|
|
||||||
loading.value = false
|
|
||||||
ElMessage({
|
|
||||||
message: "导入失败!",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
upload.value.clearFiles()
|
|
||||||
}
|
|
||||||
function handlePreview(){
|
|
||||||
loadingtext.value = "正在导入数据,请耐心等待!"
|
|
||||||
loading.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
const loadingtext = ref("")
|
|
||||||
|
|
||||||
function exportToExcel() {
|
|
||||||
// 获取表格的 DOM 元素
|
|
||||||
const table = document.querySelector('.importdata_table_error');
|
|
||||||
|
|
||||||
// 使用 html-to-xlsx 工具将表格转换为工作表
|
|
||||||
const ws = XLSX.utils.table_to_sheet(table);
|
|
||||||
// 设置列的宽度
|
|
||||||
const colWidths = [
|
|
||||||
{ wch: 5 },
|
|
||||||
{ wch: 70 },
|
|
||||||
];
|
|
||||||
ws['!cols'] = colWidths;
|
|
||||||
// 创建一个工作簿
|
|
||||||
const wb = XLSX.utils.book_new();
|
|
||||||
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
|
|
||||||
|
|
||||||
// 导出 Excel 文件
|
|
||||||
XLSX.writeFile(wb, '导入错误信息.xlsx');
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="importdata-box">
|
|
||||||
<div class="importdata-box-top">
|
|
||||||
<el-checkbox-group v-model="checkList" v-for="(item,index) in planSchoolInfo.schoolList" @change="checkchange">
|
|
||||||
<el-checkbox :value="item.id" :key="item.id" style="margin-right: 10px;">{{ item.name }}</el-checkbox>
|
|
||||||
</el-checkbox-group>
|
|
||||||
|
|
||||||
<!-- <div v-for="(item,index) in planSchoolInfo.schoolList" :key="index" style="margin-right: 10px;min-width: 150px;" >
|
|
||||||
<el-checkbox v-model="item.id" :label="item.name" />
|
|
||||||
</div> -->
|
|
||||||
</div>
|
|
||||||
<div class="importdata-box-bottom">
|
|
||||||
<div style="margin-bottom: 15px; display: flex;">
|
|
||||||
<el-button type="primary" @click="download" :disabled="checkList.length==0">
|
|
||||||
<img src="@/assets/tableicon/download.png" style="padding-right: 5px;" alt="">下载模板
|
|
||||||
</el-button>
|
|
||||||
<el-upload
|
|
||||||
:disabled="checkList.length==0"
|
|
||||||
ref="upload"
|
|
||||||
accept=".xlsx"
|
|
||||||
class="upload-demo"
|
|
||||||
:action=" url + '/vision_examine/examine-result/ImportExamineResultStudent/?planId=' + planSchoolInfo.id +'&schoolNames=' + schoolNames "
|
|
||||||
:headers="{ token: getToken() }"
|
|
||||||
:show-file-list="false"
|
|
||||||
:before-upload="handlePreview"
|
|
||||||
:on-success="handlesSuccess"
|
|
||||||
:on-error="handleError">
|
|
||||||
<el-button type="primary" :disabled="checkList.length==0" style="margin: 0 10px;"><img src="@/assets/MenuIcon/u455.png" alt="" style="margin-right: 5px;">导入数据</el-button>
|
|
||||||
</el-upload>
|
|
||||||
</div>
|
|
||||||
<el-table v-loading="loading" :element-loading-text="loadingtext" :data="tableData" border :row-class-name="tableRowClassName"
|
|
||||||
style="width: 100%; height:calc(100vh - 570px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column fixed type="index" width="55" label="序号" align="center" />
|
|
||||||
<el-table-column fixed prop="student_name" label="姓名" width="100" />
|
|
||||||
<el-table-column prop="gender" label="性别" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.gender == '1'">男</span>
|
|
||||||
<span v-if="scope.row.gender == '2'">女</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="age" label="年龄" width="80" />
|
|
||||||
<el-table-column prop="birth_date" label="出生日期" width="120" align="center" />
|
|
||||||
<el-table-column prop="nation" label="民族" width="80" align="center" />
|
|
||||||
<el-table-column prop="study_code" label="学籍号" width="185" align="center" />
|
|
||||||
|
|
||||||
<el-table-column prop="school_name" label="所属学校" min-width="120" />
|
|
||||||
<el-table-column prop="grade_name" label="所属年级" min-width="120" />
|
|
||||||
<el-table-column prop="class_name" label="所属班级" min-width="100" />
|
|
||||||
<el-table-column prop="exam_status" label="状态" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.exam_status == '00'">未检</span>
|
|
||||||
<span v-if="scope.row.exam_status == '01'">已检</span>
|
|
||||||
<span v-if="scope.row.exam_status == '02'">漏检</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="exam_time" label="检查时间" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
{{dateFormat(scope.row.exam_time)}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_left" label="左眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_left !=0 && scope.row.vision_left!=null"> {{scope.row.vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_right" label="右眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_right !=0 && scope.row.vision_right!=null"> {{scope.row.vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
<el-table-column prop="sph_left" label="左眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_left !=0 && scope.row.sph_left!=null">
|
|
||||||
<span v-if="scope.row.sph_left>0">+{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sph_right" label="右眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_right !=0 && scope.row.sph_right!=null">
|
|
||||||
<span v-if="scope.row.sph_right>0">+{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_left" label="左眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_left !=0 && scope.row.cytdnder_left!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_left>0">+{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_right" label="右眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_right !=0 && scope.row.cytdnder_right!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_right>0">+{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="axies_left" label="左眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="axies_right" label="右眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="se_left" label="左眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_left !=0 && scope.row.se_left!=null">
|
|
||||||
<span v-if="scope.row.se_left>0">+{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="se_right" label="右眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_right !=0 && scope.row.se_right!=null">
|
|
||||||
<span v-if="scope.row.se_right>0">+{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_left" label="左眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_left !=0 && scope.row.rectify_vision_left!=null"> {{scope.row.rectify_vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_right" label="右眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_right !=0 && scope.row.rectify_vision_right!=null"> {{scope.row.rectify_vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_sighted" label="是否近视" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_sighted == '0'">否</span>
|
|
||||||
<span v-if="scope.row.is_sighted == '1'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_hyperopia" label="远视储备是否充足" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.age >12">/</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '1'">否</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '0'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_glasses" label="是否戴镜" width="100" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_glasses == '0'||scope.row.is_glasses == ''||scope.row.is_glasses == null">未知</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '4'">不带镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '3'">角膜塑形镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '2'">隐形眼镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '1'">框架眼镜</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="id_code" label="身份证" width="180" align="center" />
|
|
||||||
<el-table-column prop="is_view" label="家长是否查看" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_view == '1'">是</span>
|
|
||||||
<span v-else>否</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogTableVisible" title="导入学生错误信息列表" width="800">
|
|
||||||
<el-button style="margin-bottom: 10px" type="primary" @click="exportToExcel">导出错误信息</el-button>
|
|
||||||
|
|
||||||
<el-table class="importdata_table_error" :data="errorData" style="height: calc(100vh - 200px);" border>
|
|
||||||
<el-table-column type="index" label="序号" width="90" />
|
|
||||||
<el-table-column prop="name" label="内容" />
|
|
||||||
</el-table>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.importdata-box{
|
|
||||||
height: calc(100vh - 285px);
|
|
||||||
width: 100%;
|
|
||||||
padding-top: 15px;
|
|
||||||
.importdata-box-top{
|
|
||||||
height: 125px;
|
|
||||||
width: 100%;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 0.498039215686275);
|
|
||||||
margin-bottom: 15px;
|
|
||||||
display: flex;
|
|
||||||
padding: 10px;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-content: flex-start;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
.importdata-box-bottom{
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 440px);
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 0.498039215686275);
|
|
||||||
padding: 15px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.dialog-footer {
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,432 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'printcode' // 数据管理
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref, nextTick ,watch} from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable,ElTree} from "element-plus";
|
|
||||||
import { queryRegionPlan,queryExaminePlanById } from "@/api/planscreening";
|
|
||||||
import { querySchoolGradeList } from "@/api/regionmodule/schoolGrade";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import Importdata from './importdata.vue';
|
|
||||||
import Exportdata from './exportdata.vue';
|
|
||||||
import Reinspection from './reinspection.vue';
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
schoolId:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const menuname:any = ref(1)
|
|
||||||
const currentinfo:any = ref({})
|
|
||||||
// 左侧树
|
|
||||||
const treeData: any = ref([]);
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
});
|
|
||||||
function planYearChange(e:any){
|
|
||||||
getTree()
|
|
||||||
}
|
|
||||||
const schoolId = ref("")
|
|
||||||
function checkId(tree:any){
|
|
||||||
for(let i=0; i<tree.length;i++){
|
|
||||||
if(tree[i].region_id==null && tree[i].children){
|
|
||||||
checkId(tree[i].children)
|
|
||||||
}else{
|
|
||||||
if(tree[i].region_id!=null){
|
|
||||||
schoolId.value = tree[i].id
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const planId =ref("")
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
// if(data.org_type == null){
|
|
||||||
// nextTick(() => {
|
|
||||||
// treeRef.value?.setCurrentKey(schoolId.value);
|
|
||||||
// });
|
|
||||||
// }else{
|
|
||||||
planId.value = data.id
|
|
||||||
schoolId.value = data.id
|
|
||||||
orgType.value = "5"
|
|
||||||
parentId.value = data.id
|
|
||||||
treeRef.value?.setCurrentKey(data.id);
|
|
||||||
queryInfo.value = {
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
getGrade()
|
|
||||||
getPlanById()
|
|
||||||
// getData()
|
|
||||||
// }
|
|
||||||
};
|
|
||||||
function getPlanById(){
|
|
||||||
let params ={
|
|
||||||
id: planId.value
|
|
||||||
}
|
|
||||||
queryExaminePlanById(params).then((res:any) => {
|
|
||||||
if(res.data !=null){
|
|
||||||
let tempData = []
|
|
||||||
if(res.data.exam_items != null &&res.data.exam_items != ""){
|
|
||||||
let exam_items = JSON.parse(res.data.exam_items)
|
|
||||||
for(let i=0;i<exam_items.length;i++ )
|
|
||||||
tempData.push(exam_items[i].name)
|
|
||||||
}
|
|
||||||
res.data.examItems = tempData.join("、")
|
|
||||||
currentinfo.value = res.data;
|
|
||||||
}else{
|
|
||||||
currentinfo.value = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const orgType:any = ref("")
|
|
||||||
const parentId:any = ref("")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const regionName = ref("")
|
|
||||||
const tempData:any = ref([])
|
|
||||||
//获取行政区域
|
|
||||||
function getTree() {
|
|
||||||
const params = {
|
|
||||||
status:'01',
|
|
||||||
planYear:planYear.value
|
|
||||||
};
|
|
||||||
treeloading.value = true
|
|
||||||
queryRegionPlan(params).then((res: any) => {
|
|
||||||
// for(let i=0;i<res.data.length;i++){
|
|
||||||
// if(res.data[i].org_type == ""){
|
|
||||||
// schoolId.value = res.data[i].id
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
tempData.value = JSON.parse(JSON.stringify(res.data))
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
// checkId(res.data)
|
|
||||||
treeloading.value = false
|
|
||||||
if(schoolId.value != ""){
|
|
||||||
nextTick(() => {
|
|
||||||
// treeRef.value?.setCurrentKey(schoolId.value);
|
|
||||||
// getGrade()
|
|
||||||
// getData();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error:any)=>{
|
|
||||||
treeloading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const gradeinData:any = ref([])
|
|
||||||
const classData:any = ref([])
|
|
||||||
|
|
||||||
function getGrade(){
|
|
||||||
let params = {
|
|
||||||
schoolId: schoolId.value
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
querySchoolGradeList(params).then((res) => {
|
|
||||||
gradeinData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function searchInit(){
|
|
||||||
treeData.value = publicTree(tempData.value,regionName.value)
|
|
||||||
}
|
|
||||||
function menuswith(type:any){
|
|
||||||
menuname.value = type
|
|
||||||
if(type == 3){
|
|
||||||
getPlanById()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
const planYearData:any =ref([{name:'2023-1'},{name:'2023-2'},{name:'2024-1'},{name:'2024-2'},{name:'2025-1'},{name:'2025-2'}])
|
|
||||||
const planYear:any = ref("")
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="printcode-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div style="width:100%;padding: 5px 15px;">
|
|
||||||
<el-select v-model="planYear" placeholder="请选择计划年度" @change="planYearChange">
|
|
||||||
<el-option v-for="item in planYearData" :key="item.name" :label="item.name" :value="item.name"/>
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData" default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 237px); overflow: auto;margin-top: 10px;">
|
|
||||||
<template #default="{ node, data }">
|
|
||||||
<span>
|
|
||||||
<span v-if="data.type== null" class="plancolor"> {{ data.name }}</span>
|
|
||||||
<span v-else > {{ data.name }}</span>
|
|
||||||
<span v-if="data.count !=0 &&data.count !=null" style="color:#409eff ;">({{data.count}})</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRight">
|
|
||||||
<div class="right-box-top">
|
|
||||||
<div class="box-top1">
|
|
||||||
<div class="box-top1-title">{{ currentinfo.plan_name }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="box-top2">
|
|
||||||
<div style="width:160px;" class="box-top2-text">年度:<span class="box-top2-texts">{{ currentinfo.plan_year }}</span></div>
|
|
||||||
<div style="min-width:220px;" class="box-top2-text">组织机构:<span class="box-top2-texts">{{ currentinfo.org_name }}</span></div>
|
|
||||||
<div style="min-width:280px;" class="box-top2-text">筛选项目:<span class="box-top2-texts">{{ currentinfo.examItems }}</span></div>
|
|
||||||
<div style="width:220px;" class="box-top2-text">开始时间:<span class="box-top2-texts">{{currentinfo.plan_start_date}}</span></div>
|
|
||||||
<div style="width:150px;" class="box-top2-text">结束时间:<span class="box-top2-texts">{{ currentinfo.plan_end_date }}</span></div>
|
|
||||||
</div>
|
|
||||||
<div class="box-top3">
|
|
||||||
<div :class="[menuname == 1?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(1)">导入数据</div>
|
|
||||||
<div :class="[menuname == 2?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(2)">导出数据</div>
|
|
||||||
<div :class="[menuname == 3?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(3)">复查管理</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Importdata v-if="menuname == 1" :planInfo="currentinfo" />
|
|
||||||
<Exportdata v-if="menuname == 2" :planInfo="currentinfo" />
|
|
||||||
<Reinspection v-if="menuname == 3" :planInfo="currentinfo" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.printcode-box{
|
|
||||||
// margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRight {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
overflow: auto;
|
|
||||||
// background-color: rgba(255, 255, 255, 1);
|
|
||||||
// border-radius: 3px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
.right-box-top{
|
|
||||||
width: 100%;
|
|
||||||
height: 140px;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 15px 20px;
|
|
||||||
position: relative;
|
|
||||||
.box-top1{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.box-top1-title{
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
color: #363636;
|
|
||||||
font-size:24px;
|
|
||||||
height: 36px;
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-button{
|
|
||||||
width: 54px;
|
|
||||||
height: 26px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
.el-button:focus, .el-button:hover{
|
|
||||||
background-color: #ecf5ff;
|
|
||||||
color:#409eff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-top2{
|
|
||||||
display: flex;
|
|
||||||
margin-top: 11px;
|
|
||||||
.box-top2-text{
|
|
||||||
font-size: 14px;
|
|
||||||
color:#949494;
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
.box-top2-texts{
|
|
||||||
font-size: 14px;
|
|
||||||
color:#363636;
|
|
||||||
padding-left: 11px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-top3{
|
|
||||||
display: flex;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0px;
|
|
||||||
// margin-top: 16px;
|
|
||||||
.box-top3-info{
|
|
||||||
// height: 50px;
|
|
||||||
font-size: 14px;
|
|
||||||
margin-right: 40px;
|
|
||||||
padding-bottom: 12px;
|
|
||||||
// border-bottom: 3px solid #409eff;
|
|
||||||
color: #505050;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.box-top3-info:hover{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.menucheckstyle{
|
|
||||||
border-bottom: 3px solid #409eff;
|
|
||||||
color: #409eff !important ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.QRbox{
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.plancolor{
|
|
||||||
color: #409eff ;
|
|
||||||
}
|
|
||||||
:deep(.el-tree-node.is-current > .el-tree-node__content){
|
|
||||||
.plancolor{
|
|
||||||
color: #fff ;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,827 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'reinspection' // 复查管理
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref, nextTick ,watch,reactive} from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable,ElTree} from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { recheckStudentList,exportRecheckTemplate,exportRecheckExamineResultStudent,addRecheckExamineResult,
|
|
||||||
recheckStudentInfo,updateRecheckExamineResult,studentRecheckNotice,exportSchoolRecheckNotice } from "@/api/planscreening";
|
|
||||||
|
|
||||||
import { queryExaminePlanById } from "@/api/planscreening";
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
import { getToken } from '@/utils/auth'
|
|
||||||
import * as XLSX from 'xlsx';
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const isSort = ref('down');
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
schoolId:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const tableRowClassName = ({
|
|
||||||
row,
|
|
||||||
rowIndex,
|
|
||||||
}: {
|
|
||||||
row: any
|
|
||||||
rowIndex: number
|
|
||||||
}) => {
|
|
||||||
if (row.is_sighted == 1) {
|
|
||||||
return 'is_sightedbg'
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
const recheckStr =ref("")
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const planSchoolInfo:any = ref({})
|
|
||||||
const tempSchoolList:any =ref([])
|
|
||||||
const shcoolId=ref("")
|
|
||||||
const tableData = ref([])
|
|
||||||
|
|
||||||
function getSort(type){
|
|
||||||
isSort.value = type
|
|
||||||
if(type == "up"){
|
|
||||||
planSchoolInfo.value.schoolList.sort((a, b) => a.recheckrate - b.recheckrate);
|
|
||||||
}else if(type == "down"){
|
|
||||||
planSchoolInfo.value.schoolList.sort((a, b) => b.recheckrate - a.recheckrate);
|
|
||||||
}else if(type == "no"){
|
|
||||||
planSchoolInfo.value.schoolList =JSON.parse(JSON.stringify(tempSchoolList.value)) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
watch(
|
|
||||||
() => props.planInfo,
|
|
||||||
(newVal: any) => {
|
|
||||||
planSchoolInfo.value = newVal
|
|
||||||
if(planSchoolInfo.value != null && planSchoolInfo.value.schoolList != null ){
|
|
||||||
planSchoolInfo.value.schoolList.forEach(element => {
|
|
||||||
if(element.total == 0){
|
|
||||||
element.recheckrate = 0
|
|
||||||
}else{
|
|
||||||
element.recheckrate = (element.recheck/element.total *100).toFixed(2)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
tempSchoolList.value = JSON.parse(JSON.stringify(planSchoolInfo.value.schoolList))
|
|
||||||
isSort.value = 'no'
|
|
||||||
}
|
|
||||||
recheckStr.value = ""
|
|
||||||
queryInfo.value = {
|
|
||||||
schoolId:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
|
|
||||||
shcoolId.value = ""
|
|
||||||
tableData.value =[]
|
|
||||||
},
|
|
||||||
{ immediate: true }
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
const loading = ref(false)
|
|
||||||
// 左侧树
|
|
||||||
onMounted(() => {
|
|
||||||
planSchoolInfo.value = props.planInfo
|
|
||||||
if(planSchoolInfo.value != null && planSchoolInfo.value.schoolList != null){
|
|
||||||
planSchoolInfo.value.schoolList.forEach(element => {
|
|
||||||
if(element.total == 0){
|
|
||||||
element.recheckrate = 0
|
|
||||||
}else{
|
|
||||||
element.recheckrate = (element.recheck/element.total *100).toFixed(2)
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
tempSchoolList.value = JSON.parse(JSON.stringify(planSchoolInfo.value.schoolList))
|
|
||||||
isSort.value = 'no'
|
|
||||||
recheckStr.value = ""
|
|
||||||
queryInfo.value = {
|
|
||||||
schoolId:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function download(){
|
|
||||||
|
|
||||||
let params = {
|
|
||||||
planId: planSchoolInfo.value.id,
|
|
||||||
schoolIds:shcoolId.value
|
|
||||||
|
|
||||||
};
|
|
||||||
exportRecheckTemplate(params).then((response: any) => {
|
|
||||||
downloadFile(response,planSchoolInfo.value.plan_name+ '-复查学生基本信息', 'xlsx')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function exportRecheck(type){
|
|
||||||
let params = {
|
|
||||||
planId: planSchoolInfo.value.id,
|
|
||||||
schoolIds:shcoolId.value,
|
|
||||||
type:type
|
|
||||||
};
|
|
||||||
exportRecheckExamineResultStudent(params).then((response: any) => {
|
|
||||||
if(type == 'no'){
|
|
||||||
downloadFile(response,planSchoolInfo.value.plan_name+ '-未复查学生基本信息', 'xlsx')
|
|
||||||
}else{
|
|
||||||
downloadFile(response,planSchoolInfo.value.plan_name+ '-已复查学生基本信息', 'xlsx')
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function exportRecheckNotice(){
|
|
||||||
let params = {
|
|
||||||
planId: planSchoolInfo.value.id,
|
|
||||||
schoolIds:shcoolId.value
|
|
||||||
};
|
|
||||||
loadingtext.value = "正在导出复查通知书,请耐心等待!"
|
|
||||||
loading.value = true
|
|
||||||
// if(queryInfo.value.total<1000){
|
|
||||||
// studentRecheckNotice(params).then((response: any) => {
|
|
||||||
// loadingtext.value = ""
|
|
||||||
// loading.value = false
|
|
||||||
// downloadFile(response,planSchoolInfo.value.plan_name+ '-复查通知书', 'docx')
|
|
||||||
// }).catch(()=>{
|
|
||||||
// loadingtext.value = ""
|
|
||||||
// loading.value = false
|
|
||||||
// });
|
|
||||||
// }else{
|
|
||||||
exportSchoolRecheckNotice(params).then((response: any) => {
|
|
||||||
loadingtext.value = ""
|
|
||||||
loading.value = false
|
|
||||||
downloadFile(response,planSchoolInfo.value.plan_name+ '-复查通知书', 'zip')
|
|
||||||
}).catch(()=>{
|
|
||||||
loadingtext.value = ""
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function checkchange(id:any){
|
|
||||||
schoolNames.value = ''
|
|
||||||
for(let j = 0;j<planSchoolInfo.value.schoolList.length;j++){
|
|
||||||
if(planSchoolInfo.value.schoolList[j].id == id){
|
|
||||||
schoolNames.value = planSchoolInfo.value.schoolList[j].name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(id != '' && id !=null){
|
|
||||||
getData()
|
|
||||||
}else{
|
|
||||||
tableData.value =[]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function searchClick(){
|
|
||||||
queryInfo.value.current = 1
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
function getData(){
|
|
||||||
let params = {
|
|
||||||
planId: planSchoolInfo.value.id,
|
|
||||||
schoolIds:shcoolId.value,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
current:queryInfo.value.current,
|
|
||||||
recheckStr:recheckStr.value
|
|
||||||
}
|
|
||||||
recheckStudentList(params).then((res) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) { // 时间方法
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const upload:any = ref(null)
|
|
||||||
const errorData:any = ref([])
|
|
||||||
const dialogTableVisible = ref(false)
|
|
||||||
function handlesSuccess(file: any) {
|
|
||||||
loading.value = false
|
|
||||||
if(file.code == "0"){
|
|
||||||
ElMessage({
|
|
||||||
message: "导入成功!",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
refreshInfo()
|
|
||||||
}else{
|
|
||||||
errorData.value = []
|
|
||||||
let msg = file.msg.split("!!<br>")
|
|
||||||
msg.forEach(element => {
|
|
||||||
errorData.value.push({name:element})
|
|
||||||
});
|
|
||||||
dialogTableVisible.value = true
|
|
||||||
// ElMessage({
|
|
||||||
// message: file.msg,
|
|
||||||
// type: "error",
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
|
|
||||||
upload.value.clearFiles()
|
|
||||||
}
|
|
||||||
|
|
||||||
const schoolNames:any = ref("")
|
|
||||||
function handleError(file: any){
|
|
||||||
loading.value = false
|
|
||||||
ElMessage({
|
|
||||||
message: "导入失败!",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
upload.value.clearFiles()
|
|
||||||
}
|
|
||||||
function handlePreview(){
|
|
||||||
loadingtext.value = "正在导入数据,请耐心等待!"
|
|
||||||
loading.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
const dialogFrom = ref(false)
|
|
||||||
const studentInfo:any = ref({})
|
|
||||||
const studentTitle = ref("")
|
|
||||||
|
|
||||||
const recheckInfo:any = ref({
|
|
||||||
vision_left:null,
|
|
||||||
vision_right:null,
|
|
||||||
rectify_vision_left:null,
|
|
||||||
rectify_vision_right:null,
|
|
||||||
sph_left:null,
|
|
||||||
sph_right:null,
|
|
||||||
cytdnder_left:null,
|
|
||||||
cytdnder_right:null,
|
|
||||||
axies_left:null,
|
|
||||||
axies_right:null,
|
|
||||||
od_left:null,
|
|
||||||
od_right:null,
|
|
||||||
})
|
|
||||||
const recheckRules = reactive<FormRules>({
|
|
||||||
vision_left: [{ required: true, message: "请输入左眼视力", trigger: "blur" }],
|
|
||||||
vision_right: [{ required: true, message: "请输入右眼视力", trigger: "blur" }],
|
|
||||||
rectify_vision_left: [{ required: true, message: "请输入左眼矫正视力", trigger: "blur" }],
|
|
||||||
rectify_vision_right: [{ required: true, message: "请输入右眼矫正视力", trigger: "blur" }],
|
|
||||||
sph_left: [{ required: true, message: "请输入左眼球镜", trigger: "blur" }],
|
|
||||||
sph_right: [{ required: true, message: "请输入右眼球镜", trigger: "blur" }],
|
|
||||||
cytdnder_left: [{ required: true, message: "请输入左眼柱镜", trigger: "blur" }],
|
|
||||||
cytdnder_right: [{ required: true, message: "请输入右眼柱镜", trigger: "blur" }],
|
|
||||||
axies_left: [{ required: true, message: "请输入左眼轴位", trigger: "blur" }],
|
|
||||||
axies_right: [{ required: true, message: "请输入右眼轴位", trigger: "blur" }],
|
|
||||||
});
|
|
||||||
function addinfo(row:any){
|
|
||||||
isNum.value = false
|
|
||||||
studentInfo.value = JSON.parse(JSON.stringify(row))
|
|
||||||
recheckInfo.value = {
|
|
||||||
vision_left:null,
|
|
||||||
vision_right:null,
|
|
||||||
rectify_vision_left:null,
|
|
||||||
rectify_vision_right:null,
|
|
||||||
sph_left:null,
|
|
||||||
sph_right:null,
|
|
||||||
cytdnder_left:null,
|
|
||||||
cytdnder_right:null,
|
|
||||||
axies_left:null,
|
|
||||||
axies_right:null,
|
|
||||||
od_left:null,
|
|
||||||
od_right:null,
|
|
||||||
}
|
|
||||||
studentTitle.value = '录入'+studentInfo.value.student_name + '的复查数据'
|
|
||||||
dialogFrom.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
function editinfo(row:any){
|
|
||||||
isNum.value = false
|
|
||||||
let params = {
|
|
||||||
planId:row.plan_id,
|
|
||||||
studentId:row.student_id
|
|
||||||
}
|
|
||||||
recheckStudentInfo(params).then((res:any) => {
|
|
||||||
recheckInfo.value = res.data
|
|
||||||
studentTitle.value ='修改'+ recheckInfo.value.student_name + '的复查数据'
|
|
||||||
dialogFrom.value = true
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function refreshInfo(){
|
|
||||||
let params ={
|
|
||||||
id: planSchoolInfo.value.id
|
|
||||||
}
|
|
||||||
queryExaminePlanById(params).then((res:any) => {
|
|
||||||
|
|
||||||
if(res.data !=null){
|
|
||||||
let schoolList = res.data.schoolList
|
|
||||||
for(let i =0;i<schoolList.length;i++){
|
|
||||||
for(let j =0;j<planSchoolInfo.value.schoolList.length;j++){
|
|
||||||
if(planSchoolInfo.value.schoolList[j].id ==schoolList[i].id){
|
|
||||||
if(schoolList[i].total == 0){
|
|
||||||
planSchoolInfo.value.schoolList[j].total = 0
|
|
||||||
}else{
|
|
||||||
planSchoolInfo.value.schoolList[j].recheckrate = (schoolList[i].recheck/schoolList[i].total *100).toFixed(2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tempSchoolList.value = JSON.parse(JSON.stringify(planSchoolInfo.value.schoolList))
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const isNum = ref(false)
|
|
||||||
|
|
||||||
function infoEditSubmit(formEl: any){
|
|
||||||
formEl.validate((valid: any) => {
|
|
||||||
if (valid) {
|
|
||||||
if(isNum.value == true){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isNum.value = true
|
|
||||||
let data = {
|
|
||||||
id:recheckInfo.value.id,
|
|
||||||
visionLeft:recheckInfo.value.vision_left,
|
|
||||||
visionRight:recheckInfo.value.vision_right,
|
|
||||||
rectifyVisionLeft:recheckInfo.value.rectify_vision_left,
|
|
||||||
rectifyVisionRight:recheckInfo.value.rectify_vision_right,
|
|
||||||
sphLeft:recheckInfo.value.sph_right,
|
|
||||||
sphRight:recheckInfo.value.sph_right,
|
|
||||||
cytdnderLeft:recheckInfo.value.cytdnder_left,
|
|
||||||
cytdnderRight:recheckInfo.value.cytdnder_right,
|
|
||||||
axiesLeft:recheckInfo.value.axies_left,
|
|
||||||
axiesRight:recheckInfo.value.axies_right,
|
|
||||||
odLeft:recheckInfo.value.od_left,
|
|
||||||
odRight:recheckInfo.value.od_right,
|
|
||||||
|
|
||||||
}
|
|
||||||
updateRecheckExamineResult(data).then((res:any) => {
|
|
||||||
if(res.code == '0'){
|
|
||||||
dialogFrom.value = false
|
|
||||||
ElMessage({
|
|
||||||
message: "修改成功!",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
}else{
|
|
||||||
ElMessage({
|
|
||||||
message: "修改失败!",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
isNum.value = false
|
|
||||||
}
|
|
||||||
}).catch(()=>{
|
|
||||||
isNum.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
function infoSubmit(formEl: any){
|
|
||||||
formEl.validate((valid: any) => {
|
|
||||||
if (valid) {
|
|
||||||
if(isNum.value == true){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isNum.value = true
|
|
||||||
let data = {
|
|
||||||
id:studentInfo.value.id,
|
|
||||||
visionLeft:recheckInfo.value.vision_left,
|
|
||||||
visionRight:recheckInfo.value.vision_right,
|
|
||||||
rectifyVisionLeft:recheckInfo.value.rectify_vision_left,
|
|
||||||
rectifyVisionRight:recheckInfo.value.rectify_vision_right,
|
|
||||||
sphLeft:recheckInfo.value.sph_right,
|
|
||||||
sphRight:recheckInfo.value.sph_right,
|
|
||||||
cytdnderLeft:recheckInfo.value.cytdnder_left,
|
|
||||||
cytdnderRight:recheckInfo.value.cytdnder_right,
|
|
||||||
axiesLeft:recheckInfo.value.axies_left,
|
|
||||||
axiesRight:recheckInfo.value.axies_right,
|
|
||||||
odLeft:recheckInfo.value.od_left,
|
|
||||||
odRight:recheckInfo.value.od_right,
|
|
||||||
|
|
||||||
}
|
|
||||||
addRecheckExamineResult(data).then((res:any) => {
|
|
||||||
if(res.code == '0'){
|
|
||||||
dialogFrom.value = false
|
|
||||||
ElMessage({
|
|
||||||
message: "录入成功!",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
refreshInfo()
|
|
||||||
}else{
|
|
||||||
ElMessage({
|
|
||||||
message: "录入失败!",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
isNum.value = false
|
|
||||||
}
|
|
||||||
}).catch(()=>{
|
|
||||||
isNum.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
const multipleSelection:any = ref([])
|
|
||||||
function handleSelectionChange(val:any){
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkExportRecheckNotice(){
|
|
||||||
|
|
||||||
let id = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
id.push(item.id)
|
|
||||||
})
|
|
||||||
let params ={
|
|
||||||
planId: planSchoolInfo.value.id,
|
|
||||||
schoolIds:shcoolId.value,
|
|
||||||
ids: id.join(',')
|
|
||||||
}
|
|
||||||
loadingtext.value = "正在导出复查通知书,请耐心等待!"
|
|
||||||
loading.value = true
|
|
||||||
studentRecheckNotice(params).then((response: any) => {
|
|
||||||
loadingtext.value = ""
|
|
||||||
loading.value = false
|
|
||||||
downloadFile(response,planSchoolInfo.value.plan_name+ '-复查通知书', 'docx')
|
|
||||||
}).catch(()=>{
|
|
||||||
loadingtext.value = ""
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
const recheckForm = ref();
|
|
||||||
function handleClose(){
|
|
||||||
if (recheckForm.value != null) recheckForm.value.resetFields();
|
|
||||||
dialogFrom.value = false
|
|
||||||
}
|
|
||||||
|
|
||||||
const loadingtext = ref("")
|
|
||||||
|
|
||||||
function exportToExcel() {
|
|
||||||
// 获取表格的 DOM 元素
|
|
||||||
const table = document.querySelector('.reinspection_table_error');
|
|
||||||
|
|
||||||
// 使用 html-to-xlsx 工具将表格转换为工作表
|
|
||||||
const ws = XLSX.utils.table_to_sheet(table);
|
|
||||||
// 设置列的宽度
|
|
||||||
const colWidths = [
|
|
||||||
{ wch: 5 },
|
|
||||||
{ wch: 70 },
|
|
||||||
];
|
|
||||||
ws['!cols'] = colWidths;
|
|
||||||
// 创建一个工作簿
|
|
||||||
const wb = XLSX.utils.book_new();
|
|
||||||
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
|
|
||||||
|
|
||||||
// 导出 Excel 文件
|
|
||||||
XLSX.writeFile(wb, '导入错误信息.xlsx');
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="importdata-box" v-loading="loading" :element-loading-text="loadingtext">
|
|
||||||
<div class="importdata-box-top">
|
|
||||||
<el-radio-group v-model="shcoolId" @change="checkchange">
|
|
||||||
<el-radio v-for="(item,index) in planSchoolInfo.schoolList" :value="item.id" :key="item.id">
|
|
||||||
{{ item.name }}
|
|
||||||
<span style="color: red;">({{ item.recheckrate }}%)</span>
|
|
||||||
</el-radio>
|
|
||||||
<el-button v-if="isSort == 'down'" type="primary" @click="getSort('no')">正常</el-button>
|
|
||||||
<el-button v-if="isSort == 'no'" type="primary" @click="getSort('up')">升序</el-button>
|
|
||||||
<el-button v-if="isSort == 'up'" type="primary" @click="getSort('down')">降序</el-button>
|
|
||||||
</el-radio-group>
|
|
||||||
</div>
|
|
||||||
<div class="importdata-box-bottom">
|
|
||||||
<div style="margin-bottom: 15px; display: flex;">
|
|
||||||
<el-button type="primary" @click="download" :disabled="shcoolId ==null || shcoolId ==''">
|
|
||||||
<img src="@/assets/tableicon/download.png" style="padding-right: 5px;" alt="">下载模板
|
|
||||||
</el-button>
|
|
||||||
<el-upload
|
|
||||||
:disabled="shcoolId ==null || shcoolId ==''"
|
|
||||||
ref="upload"
|
|
||||||
accept=".xlsx"
|
|
||||||
class="upload-demo"
|
|
||||||
:action=" url + '/vision_examine/examine-result/ImportRecheckExamineResultStudent/?planId=' + planSchoolInfo.id +'&schoolNames=' + schoolNames "
|
|
||||||
:headers="{ token: getToken() }"
|
|
||||||
:show-file-list="false"
|
|
||||||
:before-upload="handlePreview"
|
|
||||||
:on-success="handlesSuccess"
|
|
||||||
:on-error="handleError">
|
|
||||||
<el-button type="primary" :disabled="shcoolId ==null || shcoolId ==''" style="margin: 0 10px;"><img src="@/assets/MenuIcon/u455.png" alt="" style="margin-right: 5px;">导入数据</el-button>
|
|
||||||
</el-upload>
|
|
||||||
<el-button type="primary" @click="exportRecheck('yes')" :disabled="shcoolId ==null || shcoolId ==''">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出复查数据
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportRecheck('no')" :disabled="shcoolId ==null || shcoolId ==''">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出未复查数据
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportRecheckNotice" :disabled="shcoolId ==null || shcoolId ==''">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出复查通知书
|
|
||||||
</el-button>
|
|
||||||
<el-select v-model="recheckStr" :disabled="shcoolId ==null || shcoolId ==''" clearable style="width: 100px;margin: 0 10px;" placeholder="是否复查" @change="searchClick" >
|
|
||||||
<el-option :key="'1'" :label="'是'" :value="'1'" />
|
|
||||||
<el-option :key="'0'" :label="'否'" :value="'0'" />
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="checkExportRecheckNotice" :disabled="multipleSelection.length==0">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出勾选复查通知书
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<el-table v-loading="loading" :element-loading-text="loadingtext" :data="tableData" border :row-class-name="tableRowClassName"
|
|
||||||
style="width: 100%; height:calc(100vh - 570px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}"
|
|
||||||
@selection-change="handleSelectionChange">
|
|
||||||
<el-table-column fixed type="selection" width="55" />
|
|
||||||
<el-table-column fixed type="index" width="55" label="序号" align="center" />
|
|
||||||
<el-table-column fixed prop="student_name" label="姓名" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: flex;align-items: center;">
|
|
||||||
<div v-if="scope.row.count>0"></div>
|
|
||||||
<div v-else class="circularbox" ></div>
|
|
||||||
<div>{{ scope.row.student_name }}</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="gender" label="性别" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.gender == '1'">男</span>
|
|
||||||
<span v-if="scope.row.gender == '2'">女</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="age" label="年龄" width="80" />
|
|
||||||
<el-table-column prop="birth_date" label="出生日期" width="120" align="center" />
|
|
||||||
<el-table-column prop="nation" label="民族" width="80" align="center" />
|
|
||||||
<el-table-column prop="study_code" label="学籍号" width="185" align="center" />
|
|
||||||
|
|
||||||
<el-table-column prop="school_name" label="所属学校" min-width="120" />
|
|
||||||
<el-table-column prop="grade_name" label="所属年级" min-width="120" />
|
|
||||||
<el-table-column prop="class_name" label="所属班级" min-width="100" />
|
|
||||||
<el-table-column prop="exam_status" label="状态" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.exam_status == '00'">未检</span>
|
|
||||||
<span v-if="scope.row.exam_status == '01'">已检</span>
|
|
||||||
<span v-if="scope.row.exam_status == '02'">漏检</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="exam_time" label="检查时间" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
{{dateFormat(scope.row.exam_time)}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_left" label="左眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_left !=0 && scope.row.vision_left!=null"> {{scope.row.vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_right" label="右眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_right !=0 && scope.row.vision_right!=null"> {{scope.row.vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
<el-table-column prop="sph_left" label="左眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_left !=0 && scope.row.sph_left!=null">
|
|
||||||
<span v-if="scope.row.sph_left>0">+{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sph_right" label="右眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_right !=0 && scope.row.sph_right!=null">
|
|
||||||
<span v-if="scope.row.sph_right>0">+{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_left" label="左眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_left !=0 && scope.row.cytdnder_left!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_left>0">+{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_right" label="右眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_right !=0 && scope.row.cytdnder_right!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_right>0">+{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="axies_left" label="左眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="axies_right" label="右眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="se_left" label="左眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_left !=0 && scope.row.se_left!=null">
|
|
||||||
<span v-if="scope.row.se_left>0">+{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="se_right" label="右眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_right !=0 && scope.row.se_right!=null">
|
|
||||||
<span v-if="scope.row.se_right>0">+{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_left" label="左眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_left !=0 && scope.row.rectify_vision_left!=null"> {{scope.row.rectify_vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_right" label="右眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_right !=0 && scope.row.rectify_vision_right!=null"> {{scope.row.rectify_vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_sighted" label="是否近视" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_sighted == '0'">否</span>
|
|
||||||
<span v-if="scope.row.is_sighted == '1'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_hyperopia" label="远视储备是否充足" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.age >12">/</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '1'">否</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '0'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_glasses" label="是否戴镜" width="100" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_glasses == '0'||scope.row.is_glasses == ''||scope.row.is_glasses == null">未知</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '4'">不带镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '3'">角膜塑形镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '2'">隐形眼镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '1'">框架眼镜</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="id_code" label="身份证" width="180" align="center" />
|
|
||||||
<el-table-column prop="is_view" label="家长是否查看" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_view == '1'">是</span>
|
|
||||||
<span v-else>否</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="address" label="操作" width="60" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img v-if="scope.row.count == 0" src="@/assets/MenuIcon/lbcz_xg.png" alt="" title="录入复查" @click="addinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
<img v-else src="@/assets/MenuIcon/lbcz_xg.png" alt="" title="修改" @click="editinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogTableVisible" title="导入学生错误信息列表" width="800">
|
|
||||||
<el-button style="margin-bottom: 10px" type="primary" @click="exportToExcel">导出错误信息</el-button>
|
|
||||||
<el-table class="reinspection_table_error" :data="errorData" style="height: calc(100vh - 200px);" border>
|
|
||||||
<el-table-column type="index" label="序号" width="90" />
|
|
||||||
<el-table-column prop="name" label="内容" />
|
|
||||||
</el-table>
|
|
||||||
</el-dialog>
|
|
||||||
<el-dialog v-model="dialogFrom" :title="studentTitle" width="800" :before-close="handleClose">
|
|
||||||
<el-form ref="recheckForm" :rules="recheckRules" :model="recheckInfo" label-width="150px">
|
|
||||||
<div style="width: 100%;display: flex;">
|
|
||||||
<el-form-item label="左眼视力" style="width: 50%;" prop="vision_left">
|
|
||||||
<el-input v-model="recheckInfo.vision_left" style="width: 100%"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="右眼视力" style="width: 50%;" prop="vision_right">
|
|
||||||
<el-input v-model="recheckInfo.vision_right" style="width: 100%" placeholder=""></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%;display: flex;">
|
|
||||||
<el-form-item label="左眼矫正视力" style="width: 50%;" prop="rectify_vision_left">
|
|
||||||
<el-input v-model="recheckInfo.rectify_vision_left" style="width: 100%"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="右眼矫正视力" style="width: 50%;" prop="rectify_vision_right">
|
|
||||||
<el-input v-model="recheckInfo.rectify_vision_right" style="width: 100%" placeholder=""></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style="width: 100%;display: flex;">
|
|
||||||
<el-form-item label="左眼球镜" style="width: 50%;" prop="sph_left">
|
|
||||||
<el-input v-model="recheckInfo.sph_left" style="width: 100%"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="右眼球镜" style="width: 50%;" prop="sph_right">
|
|
||||||
<el-input v-model="recheckInfo.sph_right" style="width: 100%" placeholder=""></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%;display: flex;">
|
|
||||||
<el-form-item label="左眼柱镜" style="width: 50%;" prop="cytdnder_left">
|
|
||||||
<el-input v-model="recheckInfo.cytdnder_left" style="width: 100%"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="右眼柱镜" style="width: 50%;" prop="cytdnder_right">
|
|
||||||
<el-input v-model="recheckInfo.cytdnder_right" style="width: 100%" placeholder=""></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%;display: flex;">
|
|
||||||
<el-form-item label="左眼轴位" style="width: 50%;" prop="axies_left">
|
|
||||||
<el-input v-model="recheckInfo.axies_left" style="width: 100%"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="右眼轴位" style="width: 50%;" prop="axies_right">
|
|
||||||
<el-input v-model="recheckInfo.axies_right" style="width: 100%" placeholder=""></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<div style="width: 100%;display: flex;">
|
|
||||||
<el-form-item label="左眼眼轴长度" style="width: 50%;">
|
|
||||||
<el-input v-model="recheckInfo.od_left" style="width: 100%"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="右眼眼轴长度" style="width: 50%;">
|
|
||||||
<el-input v-model="recheckInfo.od_right" style="width: 100%" placeholder=""></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<span class="dialog-footer" >
|
|
||||||
<el-button v-if="recheckInfo.exam_type == '04'" type="primary" @click="infoEditSubmit(recheckForm)">确定</el-button>
|
|
||||||
<el-button v-else type="primary" @click="infoSubmit(recheckForm)">确定</el-button>
|
|
||||||
<el-button @click="handleClose">关闭</el-button>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</el-form>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.importdata-box{
|
|
||||||
height: calc(100vh - 285px);
|
|
||||||
width: 100%;
|
|
||||||
padding-top: 15px;
|
|
||||||
.importdata-box-top{
|
|
||||||
height: 125px;
|
|
||||||
width: 100%;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 0.498039215686275);
|
|
||||||
margin-bottom: 15px;
|
|
||||||
display: flex;
|
|
||||||
padding: 10px;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-content: flex-start;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
.importdata-box-bottom{
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 440px);
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 0.498039215686275);
|
|
||||||
padding: 15px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.dialog-footer {
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
}
|
|
||||||
.circularbox{
|
|
||||||
width: 10px;
|
|
||||||
height: 10px;
|
|
||||||
border-radius: 50%;
|
|
||||||
background: red;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,556 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'printcode' // 常态化筛查-打印二维码
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref, nextTick ,watch} from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable,ElTree} from "element-plus";
|
|
||||||
import { queryRegionSchool } from "@/api/regionmodule/school";
|
|
||||||
import { querySchoolGradeList } from "@/api/regionmodule/schoolGrade";
|
|
||||||
import { querySchoolClassList } from "@/api/regionmodule/schoolClass";
|
|
||||||
import { querySchoolStudentPage } from "@/api/regionmodule/schoolStudent";
|
|
||||||
import { studentQRCode,downloadQRCode,downloadSelectedQRCode,studentPersonQRCode} from "@/api/planscreening";
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
import Viewfile from "@/views/component/Viewfile.vue";
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
schoolId:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const tableData = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const dialogVisible = ref(false)
|
|
||||||
const genderoptions:any = ref([{label:'男',value:'1'},{label:'女',value:'2'}])
|
|
||||||
const loading = ref(false)
|
|
||||||
// 左侧树
|
|
||||||
const treeData: any = ref([]);
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
});
|
|
||||||
const schoolId = ref("")
|
|
||||||
function checkId(tree:any){
|
|
||||||
for(let i=0; i<tree.length;i++){
|
|
||||||
if(tree[i].region_id==null && tree[i].children){
|
|
||||||
checkId(tree[i].children)
|
|
||||||
}else{
|
|
||||||
if(tree[i].region_id!=null){
|
|
||||||
schoolId.value = tree[i].id
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
if(data.org_type == null){
|
|
||||||
nextTick(() => {
|
|
||||||
treeRef.value?.setCurrentKey(schoolId.value);
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
schoolId.value = data.id
|
|
||||||
orgType.value = "5"
|
|
||||||
parentId.value = data.id
|
|
||||||
treeRef.value?.setCurrentKey(data.id);
|
|
||||||
queryInfo.value = {
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
getGrade()
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
//表格分页
|
|
||||||
function getData(){
|
|
||||||
let params = {
|
|
||||||
name:queryInfo.value.name,
|
|
||||||
schoolId:schoolId.value,
|
|
||||||
gradeId:queryInfo.value.gradeId,
|
|
||||||
classId:queryInfo.value.classId,
|
|
||||||
gender:queryInfo.value.gender,
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size
|
|
||||||
};
|
|
||||||
loading.value = true
|
|
||||||
querySchoolStudentPage(params).then((res:any) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//打印
|
|
||||||
function printQRcode(){
|
|
||||||
title.value="打印预览"
|
|
||||||
onprint.value="no"
|
|
||||||
filetype.value="pdf"
|
|
||||||
let params = {
|
|
||||||
orgType: orgType.value,
|
|
||||||
parentId:parentId.value,
|
|
||||||
studentName:queryInfo.value.name,
|
|
||||||
gender:queryInfo.value.gender
|
|
||||||
}
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-plan/downloadQRCode?orgType=' + params.orgType +
|
|
||||||
"&parentId=" + params.parentId + "&studentName=" + params.studentName + "&gender=" + params.gender
|
|
||||||
isViewfile.value = true
|
|
||||||
}
|
|
||||||
function printSelectedQRcode(){
|
|
||||||
title.value="打印预览"
|
|
||||||
onprint.value="no"
|
|
||||||
filetype.value="pdf"
|
|
||||||
let ids = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
ids.push(item.id)
|
|
||||||
})
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-plan/downloadSelectedQRCode?parentId=' + parentId.value +
|
|
||||||
"&ids=" + ids
|
|
||||||
isViewfile.value = true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const orgType:any = ref("")
|
|
||||||
const parentId:any = ref("")
|
|
||||||
const studentName:any = ref("")
|
|
||||||
//导出
|
|
||||||
function exportclick(type:any){
|
|
||||||
let params = {
|
|
||||||
orgType: orgType.value,
|
|
||||||
parentId:parentId.value,
|
|
||||||
studentName:queryInfo.value.studentName,
|
|
||||||
gender:queryInfo.value.gender
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
downloadQRCode(params).then((response) => {
|
|
||||||
loading.value = false
|
|
||||||
downloadFile(response, parentId.value , 'pdf')
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
//导出
|
|
||||||
function exportSelectedClick(){
|
|
||||||
let ids = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
ids.push(item.id)
|
|
||||||
})
|
|
||||||
let params = {
|
|
||||||
ids: ids.join(","),
|
|
||||||
parentId:parentId.value,
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
downloadSelectedQRCode(params).then((response) => {
|
|
||||||
loading.value = false
|
|
||||||
downloadFile(response, parentId.value , 'pdf')
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function handleSelectionChange(val:any){
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
function resetdata(){
|
|
||||||
queryInfo.value = {
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
const regionName = ref("")
|
|
||||||
const tempData:any = ref([])
|
|
||||||
//获取行政区域
|
|
||||||
function getTree() {
|
|
||||||
const params = {
|
|
||||||
status:'01'
|
|
||||||
};
|
|
||||||
treeloading.value = true
|
|
||||||
queryRegionSchool(params).then((res: any) => {
|
|
||||||
for(let i=0;i<res.data.length;i++){
|
|
||||||
if(res.data[i].org_type == "5"){
|
|
||||||
schoolId.value = res.data[i].id
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tempData.value = JSON.parse(JSON.stringify(res.data))
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
checkId(res.data)
|
|
||||||
treeloading.value = false
|
|
||||||
if(schoolId.value != ""){
|
|
||||||
nextTick(() => {
|
|
||||||
treeRef.value?.setCurrentKey(schoolId.value);
|
|
||||||
getGrade()
|
|
||||||
getData();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error:any)=>{
|
|
||||||
treeloading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const gradeinData:any = ref([])
|
|
||||||
const classData:any = ref([])
|
|
||||||
|
|
||||||
function getGrade(){
|
|
||||||
let params = {
|
|
||||||
schoolId: schoolId.value
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
querySchoolGradeList(params).then((res) => {
|
|
||||||
gradeinData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getClass(id:any){
|
|
||||||
if(id == null){
|
|
||||||
queryInfo.value.gradeId = ''
|
|
||||||
}
|
|
||||||
let params = {
|
|
||||||
gradeId: id
|
|
||||||
}
|
|
||||||
if(id != "" && id != null){
|
|
||||||
orgType.value = "6"
|
|
||||||
parentId.value = id
|
|
||||||
}else{
|
|
||||||
orgType.value = "5"
|
|
||||||
parentId.value = schoolId.value
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
if(id != null && id != '' ){
|
|
||||||
querySchoolClassList(params).then((res) => {
|
|
||||||
classData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
|
|
||||||
function getQueryClass(id:any){
|
|
||||||
if(id != "" && id != null){
|
|
||||||
orgType.value = "7"
|
|
||||||
parentId.value = id
|
|
||||||
}else {
|
|
||||||
orgType.value = "6"
|
|
||||||
parentId.value = queryInfo.value.gradeId
|
|
||||||
}
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
function searchInit(){
|
|
||||||
treeData.value = publicTree(tempData.value,regionName.value)
|
|
||||||
}
|
|
||||||
const isViewfile = ref(false)
|
|
||||||
function CloseView(){
|
|
||||||
isViewfile.value = false
|
|
||||||
}
|
|
||||||
//查看
|
|
||||||
function lookinfo(row:any){
|
|
||||||
title.value="打印预览"
|
|
||||||
onprint.value=""
|
|
||||||
filetype.value="docx"
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-plan/studentPersonQRCode?id=' + row.id
|
|
||||||
isViewfile.value = true
|
|
||||||
}
|
|
||||||
function exportStudentPerson(row:any){
|
|
||||||
let params = {
|
|
||||||
id: row.id,
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
studentPersonQRCode(params).then((response:any) => {
|
|
||||||
loading.value = false
|
|
||||||
downloadFile(response, row.name + '个人筛查告知书' , 'docx')
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const ViewfileUrl = ref("")
|
|
||||||
const title= ref("")
|
|
||||||
const onprint= ref("no")
|
|
||||||
|
|
||||||
const filetype = ref("pdf")
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="printcode-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div style="width:100%;padding: 5px 15px;">
|
|
||||||
<el-input v-model="regionName" placeholder="请输入关键字" @input="searchInit" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData" default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 260px); overflow: auto;margin-top: 10px;">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRight">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<el-input v-model="queryInfo.name" placeholder="请输入学生姓名/学籍号/身份证号" style="width: 240px;" clearable />
|
|
||||||
<el-select v-model="queryInfo.gradeId" @change="getClass" class="ml-3" placeholder="请选择年级" clearable size="large" style="width: 150px;" :disabled="schoolId==''|| schoolId==null">
|
|
||||||
<el-option v-for="item in gradeinData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.classId" @change="getQueryClass" class="ml-3" placeholder="请选择班级" clearable size="large" style="width: 150px;" :disabled="queryInfo.gradeId==''|| queryInfo.gradeId==null">
|
|
||||||
<el-option v-for="item in classData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.gender" @change="getData" size="large" clearable style="width: 140px;margin-right: 10px;" class="ml-3" placeholder="请选择性别">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="getData">搜索</el-button>
|
|
||||||
<el-button @click="resetdata">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="printQRcode" :disabled="schoolId == ''">
|
|
||||||
<img src="@/assets/visionscreening/printallQR.png" style="padding-right: 5px;" alt="">打印全部
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportclick" :disabled="schoolId == ''" >
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出全部
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" :disabled="multipleSelection.length <= 0" @click="printSelectedQRcode">
|
|
||||||
<img src="@/assets/visionscreening/printallQR.png" style="padding-right: 5px;" alt="">打印
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" :disabled="multipleSelection.length <= 0" @click="exportSelectedClick">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading">
|
|
||||||
<el-table ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 295px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<el-table-column prop="code" label="学生代码" width="140" />
|
|
||||||
<el-table-column prop="name" label="学生姓名" width="100" />
|
|
||||||
<el-table-column prop="gender" label="性别" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.gender == '1'">男</span>
|
|
||||||
<span v-else-if="scope.row.gender == '2'">女</span>
|
|
||||||
<span v-else>不详</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="age" label="年龄" width="80" />
|
|
||||||
<el-table-column prop="birth_date" label="出生日期" width="110" align="center"/>
|
|
||||||
<el-table-column prop="nation" label="民族" width="80" align="center"/>
|
|
||||||
<el-table-column prop="study_code" label="学籍号" width="190" align="center"/>
|
|
||||||
<el-table-column prop="id_code" label="身份证" width="180" align="center"/>
|
|
||||||
<el-table-column prop="grade_name" label="所属年级" min-width="140"/>
|
|
||||||
<el-table-column prop="class_name" label="所属班级" min-width="140"/>
|
|
||||||
<!-- <el-table-column prop="address" label="操作" width="60" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<el-button type="primary" size="small" @click="exportStudentPerson(scope.row)">导出</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column> -->
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Viewfile v-if="isViewfile" :url="ViewfileUrl" :showTime="true" :title="title" :onprint="onprint" :type="filetype" :clientHeight="600" @update="CloseView"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.printcode-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height:40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// width: 240px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRight {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 145px);
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 20px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// :deep(){
|
|
||||||
// .el-button{
|
|
||||||
// margin-left: 10px;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content{
|
|
||||||
// height: 40px;
|
|
||||||
// padding-left: 12px !important;
|
|
||||||
// color: #505050;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
// color: #409eff;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: #ecf5ff;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: transparent;
|
|
||||||
// // #ecf5ff
|
|
||||||
// }
|
|
||||||
// .el-tree-node__expand-icon{
|
|
||||||
// color: #333333;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.QRbox{
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,549 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'archive' // 常态化筛查-历史档案
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick,watch } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules } from "element-plus";
|
|
||||||
import { queryStudentVisdataList,exportVisionForm,queryVisionChangeTrend } from "@/api/planscreening";
|
|
||||||
import { useDark } from '@vueuse/core'
|
|
||||||
import Viewfile from "@/views/component/Viewfile.vue";
|
|
||||||
import * as echarts from 'echarts';
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const emit = defineEmits([ 'returnStudent']);
|
|
||||||
const props:any = defineProps({
|
|
||||||
studentInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
let isDark:any = useDark().value == true? '1' : '2'
|
|
||||||
watch(useDark(), () => {
|
|
||||||
isDark = useDark().value == true? '1' : '2'
|
|
||||||
if (useDark().value == true) {
|
|
||||||
facechange('1')
|
|
||||||
} else {
|
|
||||||
facechange('2')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
function returnClick(){
|
|
||||||
emit('returnStudent', '1');
|
|
||||||
}
|
|
||||||
function getData(){
|
|
||||||
if(props.studentInfo.id == '' || props.studentInfo.id == null){
|
|
||||||
tableData.value = []
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let params = {
|
|
||||||
studentId: props.studentInfo.student_id,
|
|
||||||
};
|
|
||||||
loading.value = true
|
|
||||||
queryStudentVisdataList(params).then((res) => {
|
|
||||||
tableData.value = res.data;
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
queryVisionChangeTrend(params).then((res) => {
|
|
||||||
let date = []
|
|
||||||
for(let i=0;i<res.data.exam_time.length;i++){
|
|
||||||
date.push(dateFormat(res.data.exam_time[i]))
|
|
||||||
}
|
|
||||||
option.value.xAxis.data = date
|
|
||||||
option.value.series[0].data = res.data.vision_left
|
|
||||||
option.value.series[1].data = res.data.vision_right
|
|
||||||
option2.value.xAxis.data = date
|
|
||||||
option2.value.series[0].data = res.data.se_left
|
|
||||||
option2.value.series[1].data = res.data.se_right
|
|
||||||
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
let myCanvas1:any = null
|
|
||||||
let myCanvas2:any = null
|
|
||||||
onMounted(() => {
|
|
||||||
activeName.value = '1'
|
|
||||||
getData();
|
|
||||||
window.onresize = ()=>{
|
|
||||||
if(myCanvas1 != null){
|
|
||||||
myCanvas1.resize()
|
|
||||||
}
|
|
||||||
if(myCanvas2 != null){
|
|
||||||
myCanvas2.resize()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
function handleClick(tab:any, event:any){
|
|
||||||
if (isDark === '1') {
|
|
||||||
facechange('1')
|
|
||||||
}else{
|
|
||||||
facechange('2')
|
|
||||||
}
|
|
||||||
if(tab.props.name == '2'){
|
|
||||||
setTimeout(()=>{
|
|
||||||
myCanvas1 = echarts.init(document.getElementById('myEchart1'))
|
|
||||||
myCanvas1.clear()
|
|
||||||
myCanvas1.setOption(option.value)
|
|
||||||
},200)
|
|
||||||
|
|
||||||
}
|
|
||||||
if(tab.props.name == '3'){
|
|
||||||
setTimeout(()=>{
|
|
||||||
myCanvas2 = echarts.init(document.getElementById('myEchart2'))
|
|
||||||
myCanvas2.clear()
|
|
||||||
myCanvas2.setOption(option2.value)
|
|
||||||
},200)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function facechange(type:any){
|
|
||||||
if (type === '1') {
|
|
||||||
option.value.xAxis.axisLabel.color = '#ffffff'
|
|
||||||
option.value.yAxis.axisLabel.color = '#ffffff'
|
|
||||||
option.value.yAxis.splitLine.lineStyle.color = '#4c4d4f'
|
|
||||||
option.value.legend.textStyle.color = '#ffffff'
|
|
||||||
option2.value.xAxis.axisLabel.color = '#ffffff'
|
|
||||||
option2.value.yAxis.axisLabel.color = '#ffffff'
|
|
||||||
option2.value.yAxis.splitLine.lineStyle.color = '#4c4d4f'
|
|
||||||
option2.value.legend.textStyle.color = '#ffffff'
|
|
||||||
}else{
|
|
||||||
option.value.xAxis.axisLabel.color = '#787878'
|
|
||||||
option.value.yAxis.axisLabel.color = '#787878'
|
|
||||||
option.value.yAxis.splitLine.lineStyle.color = '#E0E6F1'
|
|
||||||
option.value.legend.textStyle.color = '#000000'
|
|
||||||
|
|
||||||
option2.value.xAxis.axisLabel.color = '#787878'
|
|
||||||
option2.value.yAxis.axisLabel.color = '#787878'
|
|
||||||
option2.value.yAxis.splitLine.lineStyle.color = '#E0E6F1'
|
|
||||||
option2.value.legend.textStyle.color = '#000000'
|
|
||||||
}
|
|
||||||
if (myCanvas1) {
|
|
||||||
myCanvas1.clear()
|
|
||||||
myCanvas1.setOption(option.value);
|
|
||||||
myCanvas1.resize()
|
|
||||||
}
|
|
||||||
if (myCanvas2) {
|
|
||||||
myCanvas2.clear()
|
|
||||||
myCanvas2.setOption(option2.value);
|
|
||||||
myCanvas2.resize()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const loading = ref(false)
|
|
||||||
const tableData:any = ref([])
|
|
||||||
const activeName = ref("1")
|
|
||||||
function dateFormat(row: any) {
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate()
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const option:any = ref({
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis'
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
data: ['左眼视力', '右眼视力'],
|
|
||||||
textStyle:{
|
|
||||||
color:'#000'
|
|
||||||
},
|
|
||||||
left:'left',
|
|
||||||
icon: 'rect',
|
|
||||||
itemWidth: 15,
|
|
||||||
itemHeight: 2,
|
|
||||||
itemGap: 40
|
|
||||||
},
|
|
||||||
grid: {
|
|
||||||
left: '3%',
|
|
||||||
right: '4%',
|
|
||||||
bottom: '3%',
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
boundaryGap: false,
|
|
||||||
data: [],
|
|
||||||
axisLabel:{
|
|
||||||
color:'#787878'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: 'value',
|
|
||||||
axisLabel:{
|
|
||||||
color:'#787878'
|
|
||||||
},
|
|
||||||
splitLine:{
|
|
||||||
lineStyle: {
|
|
||||||
color: '#E0E6F1'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: '左眼视力',
|
|
||||||
type: 'line',
|
|
||||||
data: []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '右眼视力',
|
|
||||||
type: 'line',
|
|
||||||
data: []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
const option2:any = ref({
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis'
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
data: ['左眼等效球镜', '右眼等效球镜'],
|
|
||||||
textStyle:{
|
|
||||||
color:'#000'
|
|
||||||
},
|
|
||||||
left:'left',
|
|
||||||
icon: 'rect',
|
|
||||||
itemWidth: 15,
|
|
||||||
itemHeight: 2,
|
|
||||||
itemGap: 40
|
|
||||||
},
|
|
||||||
grid: {
|
|
||||||
left: '3%',
|
|
||||||
right: '4%',
|
|
||||||
bottom: '3%',
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
boundaryGap: false,
|
|
||||||
data: [],
|
|
||||||
axisLabel:{
|
|
||||||
color:'#787878'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: 'value',
|
|
||||||
axisLabel:{
|
|
||||||
color:'#787878'
|
|
||||||
},
|
|
||||||
splitLine:{
|
|
||||||
lineStyle: {
|
|
||||||
color: '#E0E6F1'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: '左眼等效球镜',
|
|
||||||
type: 'line',
|
|
||||||
data: []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '右眼等效球镜',
|
|
||||||
type: 'line',
|
|
||||||
data: []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
// 文件下载
|
|
||||||
function fileDown(row:any) {
|
|
||||||
const params = {
|
|
||||||
id: row.id
|
|
||||||
}
|
|
||||||
exportVisionForm(params).then((response: any) => {
|
|
||||||
downloadFile(response, row.student_name + '筛查结果记录表', 'docx')
|
|
||||||
}).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const isViewfile = ref(false)
|
|
||||||
const ViewfileUrl = ref("")
|
|
||||||
function viewReport(row: any) {
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-result/exportVisionForm?id=' + row.id
|
|
||||||
setTimeout(()=>{
|
|
||||||
isViewfile.value = true
|
|
||||||
},200)
|
|
||||||
|
|
||||||
}
|
|
||||||
function CloseView() {
|
|
||||||
isViewfile.value = false
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<template>
|
|
||||||
<div class="schoolStudent-box">
|
|
||||||
<div class="schoolStudent-title">
|
|
||||||
<div class="class_order">学生视力档案</div>
|
|
||||||
<div class="return" @click="returnClick">
|
|
||||||
<img src="@/assets/tableicon/u549.png" alt="">
|
|
||||||
<div style="padding-left: 2px;padding-top: 2px;">返回</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="schoolStudent-line"></div>
|
|
||||||
<div style="display: flex;align-items: center;padding: 20px 0;">
|
|
||||||
<img v-if="(props.studentInfo.photo=='' || props.studentInfo.photo==null) && props.studentInfo.gender == '1'" src="@/assets/student/man.png" alt="" style="width:100px;height:100px;">
|
|
||||||
<img v-if="(props.studentInfo.photo=='' || props.studentInfo.photo==null) && props.studentInfo.gender == '2'" src="@/assets/student/woman.png" alt="" style="width:100px;height:100px;">
|
|
||||||
<img v-if="props.studentInfo.photo!='' && props.studentInfo.photo!=null" :src="props.studentInfo.photo" alt="" style="width:100px;height:100px;">
|
|
||||||
<div style="margin-left: 15px;">
|
|
||||||
<div class="basicname">
|
|
||||||
<span style="padding-right:20px">{{ props.studentInfo.name }}</span>
|
|
||||||
<span style="padding-right:20px">|</span>
|
|
||||||
<span v-if="props.studentInfo.gender == '1'">男</span>
|
|
||||||
<span v-if="props.studentInfo.gender == '2'">女</span>
|
|
||||||
<span style="padding-left:20px;padding-right:20px">|</span>
|
|
||||||
<span>{{ props.studentInfo.age }}岁</span>
|
|
||||||
</div>
|
|
||||||
<div class="basicinfo">
|
|
||||||
<span>所属学校:</span>
|
|
||||||
<span class="valuetext">{{ props.studentInfo.school_name }}</span>
|
|
||||||
<span>所属年级:</span>
|
|
||||||
<span class="valuetext">{{ props.studentInfo.grade_name }}</span>
|
|
||||||
<span>所属班级:</span>
|
|
||||||
<span class="valuetext">{{ props.studentInfo.class_name }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-tabs class="tstab" v-model="activeName" @tab-click="handleClick">
|
|
||||||
<el-tab-pane label="检查记录" name="1"></el-tab-pane>
|
|
||||||
<el-tab-pane label="视力变化趋势" name="2"></el-tab-pane>
|
|
||||||
<el-tab-pane label="屈光度变化趋势" name="3"></el-tab-pane>
|
|
||||||
</el-tabs>
|
|
||||||
<el-table v-if="activeName == '1'" v-loading="loading" :data="tableData" style="width: 100%; height:calc(100vh - 380px)" row-key="id" border
|
|
||||||
default-expand-all :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}" >
|
|
||||||
<el-table-column type="index" width="60" label="序号"></el-table-column>
|
|
||||||
<el-table-column prop="exam_time" label="检查时间" min-width="140" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
{{dateFormat(scope.row.exam_time)}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_left" label="左眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_left !=0 && scope.row.vision_left!=null"> {{scope.row.vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_right" label="右眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_right !=0 && scope.row.vision_right!=null"> {{scope.row.vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sph_left" label="左眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_left !=0 && scope.row.sph_left!=null">
|
|
||||||
<span v-if="scope.row.sph_left>0">+{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sph_right" label="右眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_right !=0 && scope.row.sph_right!=null">
|
|
||||||
<span v-if="scope.row.sph_right>0">+{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_left" label="左眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_left !=0 && scope.row.cytdnder_left!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_left>0">+{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_right" label="右眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_right !=0 && scope.row.cytdnder_right!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_right>0">+{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="axies_left" label="左眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="axies_right" label="右眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="se_left" label="左眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_left !=0 && scope.row.se_left!=null">
|
|
||||||
<span v-if="scope.row.se_left>0">+{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="se_right" label="右眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_right !=0 && scope.row.se_right!=null">
|
|
||||||
<span v-if="scope.row.se_right>0">+{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_left" label="左眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_left !=0 && scope.row.rectify_vision_left!=null"> {{scope.row.rectify_vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_right" label="右眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_right !=0 && scope.row.rectify_vision_right!=null"> {{scope.row.rectify_vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_sighted" label="是否近视" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_sighted == '0'">否</span>
|
|
||||||
<span v-if="scope.row.is_sighted == '1'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_hyperopia" label="远视储备是否充足" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="props.studentInfo.age >12">/</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '1'">否</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '0'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_glasses" label="是否戴镜" width="100" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_glasses == '4'">不带镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '3'">角膜塑形镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '2'">隐形眼镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '1'">框架眼镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '0'||scope.row.is_glasses == ''||scope.row.is_glasses == null">未知</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column fixed="right" label="操作" width="100" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span style="display: flex;display: -webkit-flex;justify-content: space-around; -webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/tableicon/u886.png" @click="viewReport(scope.row)" title="查看结果登记表" style="cursor: pointer;"
|
|
||||||
>
|
|
||||||
<img src="@/assets/tableicon/u889.png" @click="fileDown(scope.row)" title="导出" style="cursor: pointer;"
|
|
||||||
>
|
|
||||||
<!-- <img src="@/assets/tableicon/u884.png" title="打印" style="cursor: pointer;"> -->
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<div v-if="activeName == '2'" id="myEchart1" style="width: 100%;height:calc(100vh - 380px)"></div>
|
|
||||||
<div v-if="activeName == '3'" id="myEchart2" style="width: 100%;height:calc(100vh - 380px)"></div>
|
|
||||||
<Viewfile v-if="isViewfile" :showTime="true" :title="'查看学生体检报告'" :url="ViewfileUrl" :type="'docx'" :clientHeight="600"
|
|
||||||
@update="CloseView" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.schoolStudent-title{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 18px;
|
|
||||||
color: #282828;
|
|
||||||
.class_order{
|
|
||||||
padding-bottom: 5px;
|
|
||||||
border-bottom:3px solid #409eff;
|
|
||||||
}
|
|
||||||
.return{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #409EFF;
|
|
||||||
width: 50px;
|
|
||||||
height: 26px;
|
|
||||||
border: 1px solid #C6E2FF;
|
|
||||||
background: rgb(236, 245, 255);
|
|
||||||
border-radius:4px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.schoolStudent-line{
|
|
||||||
width: 100%;
|
|
||||||
height: 1px;
|
|
||||||
background: rgb(220, 223, 230);
|
|
||||||
margin-top: -1px;
|
|
||||||
}
|
|
||||||
.basicname{
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #333333;
|
|
||||||
text-align: left;
|
|
||||||
padding-bottom: 15px;
|
|
||||||
}
|
|
||||||
.basicinfo{
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #787878;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
.valuetext{
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #363636;
|
|
||||||
padding-right: 50px;
|
|
||||||
padding-left: 10px;
|
|
||||||
}
|
|
||||||
.schoolStudent-box{
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgb(255, 255, 255);
|
|
||||||
border: none;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 10px 15px 10px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
.schoolStudent-title{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 18px;
|
|
||||||
color: #282828;
|
|
||||||
.class_order{
|
|
||||||
padding-bottom: 5px;
|
|
||||||
border-bottom:3px solid #409eff;
|
|
||||||
}
|
|
||||||
.return{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #409EFF;
|
|
||||||
width: 50px;
|
|
||||||
height: 26px;
|
|
||||||
border: 1px solid #C6E2FF;
|
|
||||||
background: rgb(236, 245, 255);
|
|
||||||
border-radius:4px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.schoolStudent-line{
|
|
||||||
width: 100%;
|
|
||||||
height: 1px;
|
|
||||||
background: rgb(220, 223, 230);
|
|
||||||
margin-top: -1px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,712 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'screeningresults' // 常态化筛查-筛查结果
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref, nextTick ,watch} from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable,ElTree} from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import Viewfile from "@/views/component/Viewfile.vue";
|
|
||||||
import Archive from './archive.vue'
|
|
||||||
import { queryRegionSchool } from "@/api/regionmodule/school";
|
|
||||||
import { querySchoolGradeList } from "@/api/regionmodule/schoolGrade";
|
|
||||||
import { querySchoolClassList } from "@/api/regionmodule/schoolClass";
|
|
||||||
import { queryStudentVisdataPage,exportStudentResult,exportSchoolHealthNetwork } from "@/api/planscreening";
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
import { getToken } from '@/utils/auth'
|
|
||||||
import * as XLSX from 'xlsx';
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
idCode:"",
|
|
||||||
studyCode:"",
|
|
||||||
isSighted:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const searchlist:any = ref({})
|
|
||||||
const tableData = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const defaultcontent = ref(true)
|
|
||||||
const genderoptions:any = ref([{label:'男',value:'1'},{label:'女',value:'2'}])
|
|
||||||
|
|
||||||
const sightedData:any = ref([{label:'是',value:'1'},{label:'否',value:'0'}])
|
|
||||||
|
|
||||||
const loading = ref(false)
|
|
||||||
const isViewfile = ref(false)
|
|
||||||
const studentInfo = ref({})
|
|
||||||
// 左侧树
|
|
||||||
const treeData: any = ref([]);
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
const checktreelist:any = ref({})
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
|
||||||
|
|
||||||
const filterNode = (value: string, data: Tree) => {
|
|
||||||
if (!value) return true
|
|
||||||
return data.name.includes(value)
|
|
||||||
}
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
});
|
|
||||||
// 初始化
|
|
||||||
const schoolId = ref("")
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
if(data.org_type == null){
|
|
||||||
nextTick(() => {
|
|
||||||
treeRef.value?.setCurrentKey(schoolId.value);
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
schoolId.value = data.id
|
|
||||||
schoolName.value = data.name
|
|
||||||
treeRef.value?.setCurrentKey(data.id);
|
|
||||||
queryInfo.value = {
|
|
||||||
idCode:"",
|
|
||||||
studyCode:"",
|
|
||||||
isSighted:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
getGrade()
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
//表格分页
|
|
||||||
function getData(){
|
|
||||||
let params = {
|
|
||||||
studentName:queryInfo.value.name,
|
|
||||||
idCode:queryInfo.value.idCode,
|
|
||||||
studyCode:queryInfo.value.studyCode,
|
|
||||||
isSighted:queryInfo.value.isSighted,
|
|
||||||
schoolId:schoolId.value,
|
|
||||||
gradeId:queryInfo.value.gradeId,
|
|
||||||
classId:queryInfo.value.classId,
|
|
||||||
gender:queryInfo.value.gender,
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
type:'2'
|
|
||||||
};
|
|
||||||
console.log(queryInfo.value)
|
|
||||||
loading.value = true
|
|
||||||
queryStudentVisdataPage(params).then((res:any) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//导出
|
|
||||||
function exportclick(){
|
|
||||||
let params = {
|
|
||||||
studentName:queryInfo.value.name,
|
|
||||||
idCode:queryInfo.value.idCode,
|
|
||||||
studyCode:queryInfo.value.studyCode,
|
|
||||||
isSighted:queryInfo.value.isSighted,
|
|
||||||
schoolId:schoolId.value,
|
|
||||||
gradeId:queryInfo.value.gradeId,
|
|
||||||
classId:queryInfo.value.classId,
|
|
||||||
gender:queryInfo.value.gender
|
|
||||||
};
|
|
||||||
if(radioStr.value == "1"){
|
|
||||||
loading.value = true
|
|
||||||
exportStudentResult(params).then((response: any) => {
|
|
||||||
isExportVisible.value = false
|
|
||||||
downloadFile(response,schoolName.value+ '-学生筛查结果', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(radioStr.value == "2"){
|
|
||||||
loading.value = true
|
|
||||||
exportSchoolHealthNetwork(params).then((response: any) => {
|
|
||||||
isExportVisible.value = false
|
|
||||||
downloadFile(response,schoolName.value+ '-学生体质健康网模板', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
//查看结果记录表
|
|
||||||
function viewreportclick(row:any){
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-result/exportVisionForm?id=' + row.id
|
|
||||||
isViewfile.value = true
|
|
||||||
}
|
|
||||||
function CloseView(){
|
|
||||||
isViewfile.value = false
|
|
||||||
}
|
|
||||||
// 历史档案
|
|
||||||
function archiveclick(row:any){
|
|
||||||
studentInfo.value = row
|
|
||||||
defaultcontent.value = false
|
|
||||||
}
|
|
||||||
function handleSelectionChange(val:any){
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
function resetdata(){
|
|
||||||
queryInfo.value = {
|
|
||||||
idCode:"",
|
|
||||||
studyCode:"",
|
|
||||||
isSighted:"",
|
|
||||||
gradeId:"",
|
|
||||||
classId:"",
|
|
||||||
gender:"",
|
|
||||||
name:"",
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
function returnClick(){
|
|
||||||
defaultcontent.value = true
|
|
||||||
}
|
|
||||||
const regionName = ref("")
|
|
||||||
function searchInit(){
|
|
||||||
treeData.value = publicTree(tempData.value,regionName.value)
|
|
||||||
}
|
|
||||||
function checkId(tree:any){
|
|
||||||
for(let i=0; i<tree.length;i++){
|
|
||||||
if(tree[i].region_id==null && tree[i].children){
|
|
||||||
checkId(tree[i].children)
|
|
||||||
}else{
|
|
||||||
if(tree[i].region_id!=null){
|
|
||||||
schoolId.value = tree[i].id
|
|
||||||
schoolName.value = tree[i].name
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const tempData:any = ref([])
|
|
||||||
//获取行政区域
|
|
||||||
function getTree() {
|
|
||||||
const params = {
|
|
||||||
status:'01',
|
|
||||||
name: regionName.value,
|
|
||||||
};
|
|
||||||
treeloading.value = true
|
|
||||||
queryRegionSchool(params).then((res: any) => {
|
|
||||||
for(let i=0;i<res.data.length;i++){
|
|
||||||
if(res.data[i].org_type == "5"){
|
|
||||||
schoolId.value = res.data[i].id
|
|
||||||
schoolName.value =res.data[i].name
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tempData.value = JSON.parse(JSON.stringify(res.data))
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
|
|
||||||
checkId(res.data)
|
|
||||||
treeloading.value = false
|
|
||||||
if(schoolId.value != ""){
|
|
||||||
nextTick(() => {
|
|
||||||
treeRef.value?.setCurrentKey(schoolId.value);
|
|
||||||
getGrade()
|
|
||||||
getData();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error:any)=>{
|
|
||||||
treeloading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const gradeinData:any = ref([])
|
|
||||||
const classData:any = ref([])
|
|
||||||
|
|
||||||
function getGrade(){
|
|
||||||
let params = {
|
|
||||||
schoolId: schoolId.value
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
querySchoolGradeList(params).then((res) => {
|
|
||||||
gradeinData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getClass(id:any){
|
|
||||||
let params = {
|
|
||||||
gradeId: id
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
if(id != null && id != '' ){
|
|
||||||
querySchoolClassList(params).then((res) => {
|
|
||||||
classData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
getData()
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) {
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate()
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const ViewfileUrl = ref("")
|
|
||||||
const errorData:any = ref([])
|
|
||||||
const dialogTableVisible = ref(false)
|
|
||||||
function handlesSuccess(file: any) {
|
|
||||||
loading.value = false
|
|
||||||
if(file.code == "0"){
|
|
||||||
ElMessage({
|
|
||||||
message: "导入成功!",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData()
|
|
||||||
}else{
|
|
||||||
errorData.value = []
|
|
||||||
let msg = file.msg.split("!!<br>")
|
|
||||||
msg.forEach(element => {
|
|
||||||
errorData.value.push({name:element})
|
|
||||||
});
|
|
||||||
dialogTableVisible.value = true
|
|
||||||
// ElMessage({
|
|
||||||
// message: file.msg,
|
|
||||||
// type: "error",
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
|
|
||||||
upload.value.clearFiles()
|
|
||||||
}
|
|
||||||
const upload:any = ref(null)
|
|
||||||
const schoolName:any = ref("")
|
|
||||||
function handleError(file: any){
|
|
||||||
loading.value = false
|
|
||||||
ElMessage({
|
|
||||||
message: "导入失败!",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
upload.value.clearFiles()
|
|
||||||
}
|
|
||||||
function handlePreview(){
|
|
||||||
loading.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
const isExportVisible = ref(false)
|
|
||||||
const radioStr = ref("1")
|
|
||||||
function exportVisibleClick(){
|
|
||||||
radioStr.value = "1"
|
|
||||||
isExportVisible.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function exportToExcel() {
|
|
||||||
// 获取表格的 DOM 元素
|
|
||||||
const table = document.querySelector('.screeningresults_table_error');
|
|
||||||
|
|
||||||
// 使用 html-to-xlsx 工具将表格转换为工作表
|
|
||||||
const ws = XLSX.utils.table_to_sheet(table);
|
|
||||||
// 设置列的宽度
|
|
||||||
const colWidths = [
|
|
||||||
{ wch: 5 },
|
|
||||||
{ wch: 70 },
|
|
||||||
];
|
|
||||||
ws['!cols'] = colWidths;
|
|
||||||
// 创建一个工作簿
|
|
||||||
const wb = XLSX.utils.book_new();
|
|
||||||
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
|
|
||||||
|
|
||||||
// 导出 Excel 文件
|
|
||||||
XLSX.writeFile(wb, '导入错误信息.xlsx');
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div v-if="defaultcontent" class="printcode-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div style="width:100%;padding: 5px 15px;">
|
|
||||||
<el-input v-model="regionName" placeholder="请输入关键字" @input="searchInit" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData" default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 260px); overflow: auto;margin-top: 10px;">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRight">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<el-input v-model="queryInfo.name" placeholder="请输入学生姓名" style="width: 16%;" clearable />
|
|
||||||
|
|
||||||
<el-select v-model="queryInfo.gender" @change="getData" clearable style="width: 16%;" class="ml-3" placeholder="请选择性别">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-input v-model="queryInfo.studyCode" class="ml-3" placeholder="请输入学籍号" style="width: 24%;" clearable />
|
|
||||||
<el-input v-model="queryInfo.idCode" class="ml-3" placeholder="请输入身份证号" style="width: 24%;" clearable />
|
|
||||||
<el-select v-model="queryInfo.isSighted" class="ml-3" placeholder="是否近视" style="width: 16%" @change="getData" clearable >
|
|
||||||
<el-option v-for="item in sightedData" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
</div>
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div style="width:50%" class="flex">
|
|
||||||
<el-select v-model="queryInfo.gradeId" @change="getClass" placeholder="请选择年级" clearable style="width: 33%;" :disabled="schoolId==''|| schoolId==null">
|
|
||||||
<el-option v-for="item in gradeinData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.classId" @change="getData" class="ml-3" placeholder="请选择班级" clearable style="width: 33%;" :disabled="queryInfo.gradeId==''|| queryInfo.gradeId==null">
|
|
||||||
<el-option v-for="item in classData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<div style="width: 34%">
|
|
||||||
<el-button type="primary" @click="getData">搜索</el-button>
|
|
||||||
<el-button @click="resetdata">重置</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="width:50%;text-align: right; display: flex;justify-content: end;">
|
|
||||||
<el-button type="primary" @click="exportVisibleClick">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading">
|
|
||||||
<el-table ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 340px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" fixed />
|
|
||||||
<el-table-column fixed prop="student_name" label="姓名" width="100" />
|
|
||||||
<el-table-column prop="gender" label="性别" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.gender == '1'">男</span>
|
|
||||||
<span v-if="scope.row.gender == '2'">女</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="age" label="年龄" width="80" />
|
|
||||||
<el-table-column prop="birth_date" label="出生日期" width="120" align="center" />
|
|
||||||
<el-table-column prop="nation" label="民族" width="80" align="center" />
|
|
||||||
<el-table-column prop="study_code" label="学籍号" width="190" align="center" />
|
|
||||||
<el-table-column prop="id_code" label="身份证" width="180" align="center" />
|
|
||||||
<el-table-column prop="grade_name" label="所属年级" min-width="90" />
|
|
||||||
<el-table-column prop="class_name" label="所属班级" min-width="90" />
|
|
||||||
<el-table-column prop="exam_time" label="检查时间" width="140" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
{{dateFormat(scope.row.exam_time)}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_left" label="左眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_left !=0 && scope.row.vision_left!=null"> {{scope.row.vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_right" label="右眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_right !=0 && scope.row.vision_right!=null"> {{scope.row.vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sph_left" label="左眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_left !=0 && scope.row.sph_left!=null">
|
|
||||||
<span v-if="scope.row.sph_left>0">+{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sph_right" label="右眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_right !=0 && scope.row.sph_right!=null">
|
|
||||||
<span v-if="scope.row.sph_right>0">+{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_left" label="左眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_left !=0 && scope.row.cytdnder_left!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_left>0">+{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_right" label="右眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_right !=0 && scope.row.cytdnder_right!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_right>0">+{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="axies_left" label="左眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="axies_right" label="右眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="se_left" label="左眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_left !=0 && scope.row.se_left!=null">
|
|
||||||
<span v-if="scope.row.se_left>0">+{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="se_right" label="右眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_right !=0 && scope.row.se_right!=null">
|
|
||||||
<span v-if="scope.row.se_right>0">+{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_left" label="左眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_left !=0 && scope.row.rectify_vision_left!=null"> {{scope.row.rectify_vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_right" label="右眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_right !=0 && scope.row.rectify_vision_right!=null"> {{scope.row.rectify_vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_sighted" label="是否近视" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_sighted == '0'">否</span>
|
|
||||||
<span v-if="scope.row.is_sighted == '1'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_hyperopia" label="远视储备是否充足" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.age >12">/</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '1'">否</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '0'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_glasses" label="是否戴镜" width="100" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_glasses == '0'||scope.row.is_glasses == ''||scope.row.is_glasses == null">未知</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '4'">不带镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '3'">角膜塑形镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '2'">隐形眼镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '1'">框架眼镜</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="address" label="操作" width="80" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/visionscreening/viewreport.png" alt="" title="查看结果记录表" @click="viewreportclick(scope.row)" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/visionscreening/archive.png" alt="" title="历史档案" @click="archiveclick(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Viewfile v-if="isViewfile" :showTime="true" :title="'查看结果记录表'" :type="'docx'" :clientHeight="600" @update="CloseView"/>
|
|
||||||
<Viewfile v-if="isViewfile" :url="ViewfileUrl" :showTime="true" :title="'查看结果记录表'" :type="'docx'" :clientHeight="600" @update="CloseView"/>
|
|
||||||
</div>
|
|
||||||
<Archive v-if="!defaultcontent" :studentInfo="studentInfo" @returnStudent="returnClick" />
|
|
||||||
<el-dialog v-model="dialogTableVisible" title="导入学生错误信息列表" width="800">
|
|
||||||
<el-button style="margin-bottom: 10px" type="primary" @click="exportToExcel">导出错误信息</el-button>
|
|
||||||
<el-table class="screeningresults_table_error" :data="errorData" style="height: calc(100vh - 200px);" border>
|
|
||||||
<el-table-column type="index" width="90" />
|
|
||||||
<el-table-column prop="name" label="内容" />
|
|
||||||
</el-table>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<el-dialog v-model="isExportVisible" title="导出数据" width="350">
|
|
||||||
<div v-loading="loading">
|
|
||||||
<div>
|
|
||||||
<el-radio label="1" size="large" v-model="radioStr">系统模版数据导出</el-radio>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-radio label="2" size="large" v-model="radioStr">体质健康网模版数据(最近)导出</el-radio>
|
|
||||||
</div>
|
|
||||||
<!-- <el-radio label="3" size="large" v-model="radioStr">体质健康网模版数据(最优)导出</el-radio> -->
|
|
||||||
<div style="display: flex;justify-content: end;margin-top: 10px;">
|
|
||||||
<el-button type="primary" @click="exportclick" style="padding:5px;width: 60px;">确定</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.printcode-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
:deep(){
|
|
||||||
.el-input{
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRight {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 145px);
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 20px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-button{
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
// .el-tree-node__content{
|
|
||||||
// height: 40px;
|
|
||||||
// padding-left: 12px !important;
|
|
||||||
// color: #505050;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
// color: #409eff;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: #ecf5ff;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: transparent;
|
|
||||||
// // #ecf5ff
|
|
||||||
// }
|
|
||||||
// .el-tree-node__expand-icon{
|
|
||||||
// color: #333333;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.QRbox{
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,408 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'associztionschool' // 关联学校
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable} from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { queryPlanSchoolPage } from "@/api/regionmodule/school";
|
|
||||||
import { queryRegionById } from "@/api/regionmodule/region";
|
|
||||||
import { queryExamineSchoolPage,addExamineSchool,delExamineSchool } from "@/api/planscreening";
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
import { getDict } from '@/api/dict'
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
defineExpose({
|
|
||||||
init
|
|
||||||
})
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0,
|
|
||||||
name:''
|
|
||||||
})
|
|
||||||
const queryInfos :any = ref({
|
|
||||||
name:'',
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const searchval = ref('')
|
|
||||||
const tableData = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const dialogFormVisible = ref(false)
|
|
||||||
|
|
||||||
const multipleSelections = ref([])
|
|
||||||
const loading = ref(false)
|
|
||||||
const schoolloading = ref(false)
|
|
||||||
const loadingtext = ref('')
|
|
||||||
|
|
||||||
|
|
||||||
const examineLoading = ref(false)
|
|
||||||
onMounted(() => {
|
|
||||||
regionId.value = props.planInfo.org_id
|
|
||||||
regionType.value = props.planInfo.org_type
|
|
||||||
init()
|
|
||||||
getDict({ dictcode: 'schoolType' }).then((res) => {
|
|
||||||
schoolTypeList.value = res.data
|
|
||||||
})
|
|
||||||
})
|
|
||||||
const planId = ref("")
|
|
||||||
// 初始化
|
|
||||||
function init(){
|
|
||||||
searchval.value = searchval.value.replace(/\s+/g, "");
|
|
||||||
let params = {
|
|
||||||
name: searchval.value,
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
current: queryInfos.value.current,
|
|
||||||
size:queryInfos.value.size
|
|
||||||
};
|
|
||||||
examineLoading.value = true
|
|
||||||
queryExamineSchoolPage(params).then((res) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfos.value.total = res.data.total
|
|
||||||
examineLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
examineLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function addinfo(){
|
|
||||||
getSchool()
|
|
||||||
if(props.planInfo.org_type != "5"){
|
|
||||||
getRegionTree()
|
|
||||||
}
|
|
||||||
|
|
||||||
multipleSelections.value = []
|
|
||||||
dialogFormVisible.value = true
|
|
||||||
}
|
|
||||||
const dialogtable = ref<InstanceType<typeof ElTable>>()
|
|
||||||
function infosubmit(){
|
|
||||||
ElMessageBox.confirm("确定关联已选择的学校吗?", "关联提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let id = [] as any[];
|
|
||||||
multipleSelections.value.forEach((item: any) => {
|
|
||||||
id.push(item.id)
|
|
||||||
})
|
|
||||||
let params = {
|
|
||||||
ids: id.join(','),
|
|
||||||
planId: props.planInfo.id
|
|
||||||
};
|
|
||||||
schoolloading.value = true
|
|
||||||
loadingtext.value = '正在关联学校普检学生,请耐心等待!!'
|
|
||||||
addExamineSchool(params).then(() => {
|
|
||||||
schoolloading.value = false
|
|
||||||
loadingtext.value = ''
|
|
||||||
dialogtable.value!.clearSelection()
|
|
||||||
dialogFormVisible.value = false
|
|
||||||
init()
|
|
||||||
ElMessage({
|
|
||||||
message: "关联成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
}).catch(()=>{
|
|
||||||
loadingtext.value = ''
|
|
||||||
schoolloading.value = false
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
function delinfo(row: any) {
|
|
||||||
ElMessageBox.confirm("确定删除此学校吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let params = {
|
|
||||||
ids: row.id,
|
|
||||||
};
|
|
||||||
delExamineSchool(params).then(() => {
|
|
||||||
init();
|
|
||||||
ElMessage({
|
|
||||||
message: "解除关联学校",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function delinfos() {
|
|
||||||
ElMessageBox.confirm("确定删除此学校吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let id = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
id.push(item.id)
|
|
||||||
})
|
|
||||||
let params = {
|
|
||||||
ids: id.join(','),
|
|
||||||
};
|
|
||||||
delExamineSchool(params).then(() => {
|
|
||||||
init();
|
|
||||||
ElMessage({
|
|
||||||
message: "解除关联学校",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//表格分页
|
|
||||||
function getData(){
|
|
||||||
console.log(11)
|
|
||||||
}
|
|
||||||
//弹窗表格分页
|
|
||||||
function getDatas(){
|
|
||||||
console.log(11)
|
|
||||||
}
|
|
||||||
//搜索
|
|
||||||
function searchclick(){
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
function handleClose(){
|
|
||||||
dialogtable.value!.clearSelection()
|
|
||||||
dialogFormVisible.value = false
|
|
||||||
}
|
|
||||||
function handleSelectionChange(val:any){
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
function handleSelectionChanges(val:any){
|
|
||||||
multipleSelections.value = val
|
|
||||||
}
|
|
||||||
function resetdata(){
|
|
||||||
|
|
||||||
}
|
|
||||||
//获取行政区域
|
|
||||||
function getRegionTree() {
|
|
||||||
const params = {
|
|
||||||
regionId: props.planInfo.org_id,
|
|
||||||
regionType: props.planInfo.org_type,
|
|
||||||
};
|
|
||||||
queryRegionById(params).then((res: any) => {
|
|
||||||
regiondata.value = res.data
|
|
||||||
cascaderdata.value = publicTree(res.data,"");
|
|
||||||
})
|
|
||||||
.catch((error:any)=>{
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 方法
|
|
||||||
const props1 = {
|
|
||||||
checkStrictly: true,
|
|
||||||
value:'id',
|
|
||||||
label:'name'
|
|
||||||
}
|
|
||||||
const cascaderdata: any = ref([]);
|
|
||||||
const regiondata: any = ref([]);
|
|
||||||
const schoolData = ref([])
|
|
||||||
// 选中区域获取医生列表
|
|
||||||
const regionId = ref("")
|
|
||||||
const regionType = ref("")
|
|
||||||
function handleChange(value:any){
|
|
||||||
if(value.length != 0){
|
|
||||||
regionId.value = value[value.length -1]
|
|
||||||
for(let i=0;i<regiondata.value.length;i++){
|
|
||||||
if(regionId.value == regiondata.value[i].id){
|
|
||||||
regionType.value = regiondata.value[i].type
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
isCascader.value = false
|
|
||||||
setTimeout(()=>{
|
|
||||||
isCascader.value = true
|
|
||||||
},20)
|
|
||||||
getSchool()
|
|
||||||
}
|
|
||||||
function handleClick(data:any){
|
|
||||||
if(data.children == null){
|
|
||||||
isCascader.value = false
|
|
||||||
setTimeout(()=>{
|
|
||||||
isCascader.value = true
|
|
||||||
},20)
|
|
||||||
}
|
|
||||||
regionId.value = data.id
|
|
||||||
regionType.value = data.type
|
|
||||||
getSchool()
|
|
||||||
}
|
|
||||||
//获取表格类型
|
|
||||||
function getSchool() {
|
|
||||||
queryInfo.value.name = queryInfo.value.name.replace(/\s+/g, "");
|
|
||||||
let params = {}
|
|
||||||
if(props.planInfo.org_type != '5'){
|
|
||||||
params = {
|
|
||||||
name: queryInfo.value.name,
|
|
||||||
regionId: regionId.value,
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
type:regionType.value
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
params = {
|
|
||||||
name: queryInfo.value.name,
|
|
||||||
schoolId:props.planInfo.org_id,
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
type:props.planInfo.org_type
|
|
||||||
};
|
|
||||||
}
|
|
||||||
schoolloading.value = true
|
|
||||||
queryPlanSchoolPage(params).then((res) => {
|
|
||||||
schoolData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
schoolloading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
schoolloading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const isCascader=ref(true)
|
|
||||||
const schoolTypeList:any = ref([])
|
|
||||||
function currency(list: any, itemcode: any) {
|
|
||||||
let dictname = ''
|
|
||||||
list.forEach((element: any) => {
|
|
||||||
if (element.itemcode == itemcode) {
|
|
||||||
dictname = element.dictname
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return dictname
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="content-box">
|
|
||||||
<div class="box-search">
|
|
||||||
<div class="flex">
|
|
||||||
<el-input v-model="searchval" placeholder="请输入学校名称" clearable style="width:200px" />
|
|
||||||
<el-button type="primary" class="ml-[10px]" @click="searchclick">搜索</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="addinfo"><img src="@/assets/visionscreening/jscz_xz.png" alt="" style="margin-right: 4px;" >添加</el-button>
|
|
||||||
<el-button @click="delinfos" :disabled="multipleSelection.length <= 0" :type="multipleSelection.length > 0 ? 'primary' : ''">
|
|
||||||
<el-icon><Delete /></el-icon> 删除</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-loading="examineLoading">
|
|
||||||
<el-table ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 430px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<!-- <el-table-column prop="code" label="学校代码" width="100" /> -->
|
|
||||||
<el-table-column prop="name" label="学校名称" min-width="120" />
|
|
||||||
<!-- <el-table-column prop="education_code" label="教育机构代码" min-width="100" /> -->
|
|
||||||
|
|
||||||
<el-table-column prop="teach_type" label="办学类型" width="170">
|
|
||||||
<template #default="scope">{{ currency(schoolTypeList, scope.row.teach_type) }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="custom1" label="学校类型" width="140">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.custom1 !=null && scope.row.custom1 !=''">
|
|
||||||
{{ scope.row.custom1.split("-")[1] }}
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="region_name" label="所属区域" />
|
|
||||||
<!-- <el-table-column prop="teacher_name" label="校长姓名" width="100" /> -->
|
|
||||||
<el-table-column label="操作" width="80" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/MenuIcon/lbcz_sc.png" alt="" title="删除" @click="delinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfos.total" v-model:size="queryInfos.size" v-model:current="queryInfos.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogFormVisible" :close-on-click-modal="false" title="选择筛选学校" :before-close="handleClose" width="880px" draggable append-to-body>
|
|
||||||
<div v-loading="schoolloading"
|
|
||||||
:element-loading-text="loadingtext">
|
|
||||||
<div class="dialogsearch">
|
|
||||||
<div style="display: flex;">
|
|
||||||
<el-input v-model="queryInfo.name" placeholder="请输入学校名称" style="width: 150px;margin-right: 10px;" clearable />
|
|
||||||
<div style="width: 200px; margin-right: 10px;">
|
|
||||||
<el-cascader v-if="planInfo.org_type != '5' && isCascader == true" style="width: 200px;" placeholder="请输入行政区域" v-model="regionId" @change="handleChange"
|
|
||||||
:options="cascaderdata" :props="props1" :show-all-levels="false" filterable>
|
|
||||||
<template #default="{ node, data }">
|
|
||||||
<div @click.stop="handleClick(data)">{{ data.name }}</div>
|
|
||||||
</template>
|
|
||||||
</el-cascader>
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" @click="getSchool">搜索</el-button>
|
|
||||||
<el-button @click="resetdata">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="infosubmit">确定</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-table ref="dialogtable" :data="schoolData" border style="width: 100%; height:calc(100vh - 445px)" @selection-change="handleSelectionChanges" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<el-table-column prop="region_name" label="所属区域" width="200" />
|
|
||||||
<el-table-column prop="custom1" label="学校类型" width="140">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.custom1 !=null && scope.row.custom1 !=''">
|
|
||||||
{{ scope.row.custom1.split("-")[1] }}
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="name" label="学校名称" min-width="150" />
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getSchool" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.content-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 20px;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height:40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// width: 240px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height: 40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// margin-left: 10px;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
.dialogsearch{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,653 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'checkprogresss' // 抽检-检查进度
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable} from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import Viewfile from "@/views/component/Viewfile.vue";
|
|
||||||
import { queryExamineSchoolTree,queryExamineResultPage,queryCompletionRate,queryRulesSchoolList
|
|
||||||
,exportNotInspectedQRCode } from "@/api/planscreening";
|
|
||||||
import { exportStudentSwan,uploadDataToBureau } from "@/api/planscreening";
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
import { querySchoolGradeList } from "@/api/regionmodule/schoolGrade";
|
|
||||||
import { querySchoolClassList } from "@/api/regionmodule/schoolClass";
|
|
||||||
import { getMap } from "echarts";
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const isItutionIds = ref(false)
|
|
||||||
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0,
|
|
||||||
name:"",
|
|
||||||
|
|
||||||
})
|
|
||||||
const examStatusData = ref([{label:'未检',value:'00'},{label:'已检',value:'01'},{label:'漏检',value:'02'}])
|
|
||||||
const isSightedData = ref([{label:'否',value:'0'},{label:'是',value:'1'}])
|
|
||||||
const tableData = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const genderoptions:any = ref([{label:'男',value:'1'},{label:'女',value:'2'}])
|
|
||||||
const loading = ref(false)
|
|
||||||
// 左侧树
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const isViewfile = ref(false)
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
init()
|
|
||||||
if(window.webConfig !=null && window.webConfig.ItutionIds !=null){
|
|
||||||
isItutionIds.value = window.webConfig.ItutionIds.includes(props.planInfo.institution_id)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//搜索
|
|
||||||
function searchclick(){
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
//查看
|
|
||||||
function lookinfo(row:any){
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-result/exportVisionForm?id=' + row.id
|
|
||||||
isViewfile.value = true
|
|
||||||
}
|
|
||||||
function CloseView(){
|
|
||||||
isViewfile.value = false
|
|
||||||
}
|
|
||||||
function handleSelectionChange(val:any){
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
function resetdata(){
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0,
|
|
||||||
studentName:"",
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
|
|
||||||
const treeLoading = ref(false)
|
|
||||||
const treeData:any = ref([])
|
|
||||||
function getTree(){
|
|
||||||
if(props.planInfo.exam_type == '01'){
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
orgId: props.planInfo.org_id,
|
|
||||||
orgType: props.planInfo.org_type,
|
|
||||||
};
|
|
||||||
treeLoading.value = true
|
|
||||||
queryExamineSchoolTree(params).then((res) => {
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
//获取表格类型
|
|
||||||
let params = {
|
|
||||||
planId:props.planInfo.id
|
|
||||||
}
|
|
||||||
treeLoading.value = true
|
|
||||||
queryRulesSchoolList(params).then((res) => {
|
|
||||||
treeData.value = res.data;
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// 初始化
|
|
||||||
function init(){
|
|
||||||
let params:any = {
|
|
||||||
studentName:queryInfo.value.studentName,
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
examType: props.planInfo.exam_type,
|
|
||||||
gender: queryInfo.value.gender,
|
|
||||||
regionId: queryInfo.value.regionId,
|
|
||||||
schoolId: queryInfo.value.schoolId,
|
|
||||||
gradeId: queryInfo.value.gradeId,
|
|
||||||
classId: queryInfo.value.classId,
|
|
||||||
idCode: queryInfo.value.idCode,
|
|
||||||
studyCode: queryInfo.value.studyCode,
|
|
||||||
examStatus: queryInfo.value.examStatus,
|
|
||||||
isSighted: queryInfo.value.isSighted,
|
|
||||||
startSphLeft: queryInfo.value.startSphLeft,
|
|
||||||
endSphLeft: queryInfo.value.endSphLeft,
|
|
||||||
startSphRight: queryInfo.value.startSphRight,
|
|
||||||
endSphRight: queryInfo.value.endSphRight,
|
|
||||||
current:queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size
|
|
||||||
};
|
|
||||||
if(nodeData.value.org_type =='5'){
|
|
||||||
params.schoolId = nodeData.value.id
|
|
||||||
params.regionId = ""
|
|
||||||
}else{
|
|
||||||
params.regionId = nodeData.value.id
|
|
||||||
params.schoolId = ""
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
queryExamineResultPage(params).then((res) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
getMap(params)
|
|
||||||
}
|
|
||||||
const ViewfileUrl = ref("")
|
|
||||||
const nodeData:any = ref({})
|
|
||||||
const schoolId = ref("")
|
|
||||||
const schoolName = ref("")
|
|
||||||
const orgType = ref("")
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
nodeData.value = data
|
|
||||||
if(data.org_type == "5"){
|
|
||||||
orgType.value = "5"
|
|
||||||
schoolId.value = data.id
|
|
||||||
schoolName.value = data.name
|
|
||||||
}else{
|
|
||||||
schoolId.value = ""
|
|
||||||
schoolName.value = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.gradeId = ""
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
getGrade()
|
|
||||||
init()
|
|
||||||
};
|
|
||||||
const resultInfo:any =ref({})
|
|
||||||
|
|
||||||
function getMap(params:any){
|
|
||||||
queryCompletionRate(params).then((res) => {
|
|
||||||
resultInfo.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const gradeinData:any = ref([])
|
|
||||||
const classData:any = ref([])
|
|
||||||
|
|
||||||
function getGrade(){
|
|
||||||
let params:any = {}
|
|
||||||
|
|
||||||
if(schoolId.value == ""){
|
|
||||||
gradeinData.value = []
|
|
||||||
return
|
|
||||||
}else{
|
|
||||||
params.schoolId = schoolId.value
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
querySchoolGradeList(params).then((res) => {
|
|
||||||
gradeinData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getClass(id:any){
|
|
||||||
let params = {
|
|
||||||
gradeId: id
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
if(id != null && id != '' ){
|
|
||||||
querySchoolClassList(params).then((res) => {
|
|
||||||
classData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) { // 时间方法
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function fileSwanDown(row:any) {
|
|
||||||
const params = {
|
|
||||||
id: row.id
|
|
||||||
}
|
|
||||||
exportStudentSwan(params).then((response: any) => {
|
|
||||||
downloadFile(response, row.student_name + '生物报告600模版', 'docx')
|
|
||||||
}).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const exportText =ref("")
|
|
||||||
|
|
||||||
function uploadNetwork(){
|
|
||||||
ElMessageBox.confirm('请先检查学生视力数据中的“身份证号,左右眼戴镜视力、”数据项是否完整,数据不完整将无法上传到教育局!您确定将“'+ schoolName.value +'”的学生视力筛查数据上传到教育局吗?', '提示', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(() => {
|
|
||||||
let params = {
|
|
||||||
planid: props.planInfo.id,
|
|
||||||
schoolid:schoolId.value
|
|
||||||
}
|
|
||||||
uploadDataToBureau(params).then((response:any) => {
|
|
||||||
|
|
||||||
}).catch(()=>{
|
|
||||||
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="contents-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData"
|
|
||||||
default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 350px); overflow: auto">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRight">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<el-input v-model="queryInfo.studentName" placeholder="请输入学生姓名" style="width: 20%;" clearable />
|
|
||||||
<el-select v-model="queryInfo.gradeId" @change="getClass" class="ml-4" placeholder="请选择年级" clearable size="large" style="width: 20%" :disabled="schoolId==''|| schoolId==null">
|
|
||||||
<el-option v-for="item in gradeinData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.classId" @change="init" class="ml-4" placeholder="请选择班级" clearable size="large" style="width: 20%" :disabled="queryInfo.gradeId==''|| queryInfo.gradeId==null">
|
|
||||||
<el-option v-for="item in classData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
|
|
||||||
<el-select v-model="queryInfo.gender" class="ml-4" placeholder="请选择性别" size="large" style="width: 20%" clearable @change="init">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
|
|
||||||
<el-input v-model="queryInfo.studyCode" class="ml-4" placeholder="请输入学籍号" style="width: 20%;" clearable />
|
|
||||||
|
|
||||||
<el-input v-model="queryInfo.idCode" class="ml-4" placeholder="请输入身份证号" style="width: 20%;" clearable />
|
|
||||||
</div>
|
|
||||||
<div class="searchinfos">
|
|
||||||
<div class="flex items-center" style="width: 90%;">
|
|
||||||
<el-select v-model="queryInfo.examStatus" placeholder="请选择状态" style="width: 160px" clearable @change="init">
|
|
||||||
<el-option v-for="item in examStatusData" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.isSighted" class="ml-4" placeholder="是否近视" style="width: 160px" clearable @change="init">
|
|
||||||
<el-option v-for="item in isSightedData" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-input v-model="queryInfo.startSphLeft" class="ml-4" placeholder="左眼球镜起始值" style="width: 140px" clearable />
|
|
||||||
<div class="ml-1">-</div>
|
|
||||||
<el-input v-model="queryInfo.endSphLeft" class="ml-4" placeholder="左眼球镜结束值" style="width: 140px" clearable />
|
|
||||||
<el-input v-model="queryInfo.startSphRight" class="ml-4" placeholder="右眼球镜起始值" style="width: 140px" clearable />
|
|
||||||
<div class="ml-1">-</div>
|
|
||||||
<el-input v-model="queryInfo.endSphRight" class="ml-4" placeholder="右眼球镜结束值" style="width: 140px" clearable />
|
|
||||||
<el-button type="primary" @click="searchclick" style="margin-left: 10px;">搜索</el-button>
|
|
||||||
<el-button @click="resetdata">重置</el-button>
|
|
||||||
<el-button v-if="isItutionIds == true" :disabled="schoolId ==''|| schoolId ==null" type="primary" @click="uploadNetwork">上传教育局</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="text-[14px] flex mb-[10px]">
|
|
||||||
<div class="statistics-text">共有学生<span class="text-[#409EFF] font-bold pl-[3px]">{{ resultInfo.total }}</span>人</div>
|
|
||||||
<div class="statistics-text">已检<span class="text-[#009933] font-bold pl-[3px]">{{ resultInfo.checked }}</span>人</div>
|
|
||||||
<div class="statistics-text">未检<span class="text-[#FF9900] font-bold pl-[3px]">{{ resultInfo.unchecked }}</span>人</div>
|
|
||||||
<div class="statistics-text">漏检学生<span class="text-[#FF3300] font-bold pl-[3px]">{{ resultInfo.missing }}</span>人</div>
|
|
||||||
<div v-if="isItutionIds == true" class="statistics-text">上传教育局人数<span class="text-[#009933] font-bold pl-[3px]">{{ resultInfo.uploadnum }}</span>人</div>
|
|
||||||
|
|
||||||
<div class="statistics-text">完成率<span class="text-[#409EFF] font-bold pl-[3px]">{{ resultInfo.completionRate }}</span></div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading" :element-loading-text="exportText">
|
|
||||||
<el-table ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 515px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column fixed type="selection" width="55" />
|
|
||||||
<el-table-column fixed type="index" width="55" label="序号" align="center" />
|
|
||||||
<el-table-column fixed prop="student_name" label="姓名" width="100" />
|
|
||||||
<el-table-column prop="gender" label="性别" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.gender == '1'">男</span>
|
|
||||||
<span v-if="scope.row.gender == '2'">女</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="age" label="年龄" width="80" />
|
|
||||||
<el-table-column prop="birth_date" label="出生日期" width="120" align="center" />
|
|
||||||
<el-table-column prop="nation" label="民族" width="80" align="center" />
|
|
||||||
<el-table-column prop="study_code" label="学籍号" width="190" align="center" />
|
|
||||||
|
|
||||||
<el-table-column prop="grade_name" label="所属年级" min-width="120" />
|
|
||||||
<el-table-column prop="class_name" label="所属班级" min-width="120" />
|
|
||||||
<el-table-column prop="exam_status" label="状态" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.exam_status == '00'">未检</span>
|
|
||||||
<span v-if="scope.row.exam_status == '01'">已检</span>
|
|
||||||
<span v-if="scope.row.exam_status == '02'">漏检</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!-- <el-table-column prop="exam_time" label="检查时间" width="120" align="center"/> -->
|
|
||||||
<el-table-column prop="exam_time" label="检查时间" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
{{dateFormat(scope.row.exam_time)}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_left" label="左眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_left !=0 && scope.row.vision_left!=null"> {{scope.row.vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="vision_right" label="右眼视力" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.vision_right !=0 && scope.row.vision_right!=null"> {{scope.row.vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
<el-table-column prop="sph_left" label="左眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_left !=0 && scope.row.sph_left!=null">
|
|
||||||
<span v-if="scope.row.sph_left>0">+{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sph_right" label="右眼球镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.sph_right !=0 && scope.row.sph_right!=null">
|
|
||||||
<span v-if="scope.row.sph_right>0">+{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.sph_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_left" label="左眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_left !=0 && scope.row.cytdnder_left!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_left>0">+{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="cytdnder_right" label="右眼柱镜" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.cytdnder_right !=0 && scope.row.cytdnder_right!=null">
|
|
||||||
<span v-if="scope.row.cytdnder_right>0">+{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.cytdnder_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="axies_left" label="左眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="axies_right" label="右眼轴位" width="60" align="center"/>
|
|
||||||
<el-table-column prop="se_left" label="左眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_left !=0 && scope.row.se_left!=null">
|
|
||||||
<span v-if="scope.row.se_left>0">+{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_left.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="se_right" label="右眼等效球镜" width="120" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.se_right !=0 && scope.row.se_right!=null">
|
|
||||||
<span v-if="scope.row.se_right>0">+{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
<span v-else>{{scope.row.se_right.toFixed(2)}}D</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_left" label="左眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_left !=0 && scope.row.rectify_vision_left!=null"> {{scope.row.rectify_vision_left.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="rectify_vision_right" label="右眼矫正视力" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.rectify_vision_right !=0 && scope.row.rectify_vision_right!=null"> {{scope.row.rectify_vision_right.toFixed(1)}}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
<el-table-column prop="id_code" label="身份证" width="180" align="center" />
|
|
||||||
<el-table-column prop="is_sighted" label="是否近视" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_sighted == '0'">否</span>
|
|
||||||
<span v-if="scope.row.is_sighted == '1'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_hyperopia" label="远视储备是否充足" width="90" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.age >12">/</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '1'">否</span>
|
|
||||||
<span v-else-if="scope.row.is_hyperopia == '0'">是</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="is_glasses" label="是否戴镜" width="100" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.is_glasses == '0'||scope.row.is_glasses == ''||scope.row.is_glasses == null">未知</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '4'">不带镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '3'">角膜塑形镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '2'">隐形眼镜</span>
|
|
||||||
<span v-if="scope.row.is_glasses == '1'">框架眼镜</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="upload_uuid" label="是否已传" width="100" align="center" v-if="isItutionIds == true">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.upload_uuid !=null && scope.row.upload_uuid !=''">是</span>
|
|
||||||
<span v-else>否</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="address" label="操作" width="80" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/visionscreening/lookdetails.png" alt="" title="查看" @click="lookinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
<img v-if="scope.row.exam_result1 !='' && scope.row.exam_result1 !=null " src="@/assets/tableicon/u889.png" title="导出生物报告" @click="fileSwanDown(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Viewfile v-if="isViewfile" :url="ViewfileUrl" :showTime="true" :title="'筛查结果报告'" :type="'docx'" :clientHeight="600" @update="CloseView"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.contents-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
:deep(){
|
|
||||||
.el-input{
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRight {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 285px);
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 20px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height: 40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// margin-left: 10px;
|
|
||||||
// }
|
|
||||||
.el-tree-node__content{
|
|
||||||
height: 40px;
|
|
||||||
padding-left: 12px !important;
|
|
||||||
color: #505050;
|
|
||||||
}
|
|
||||||
.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
color: #409eff;
|
|
||||||
background-color: #ecf5ff;
|
|
||||||
}
|
|
||||||
.el-tree-node__content:hover{
|
|
||||||
color: #409eff;
|
|
||||||
background-color: transparent;
|
|
||||||
// #ecf5ff
|
|
||||||
}
|
|
||||||
.el-tree-node__expand-icon{
|
|
||||||
color: #333333;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
justify-content: space-around;
|
|
||||||
}
|
|
||||||
.searchinfos{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
justify-content:space-between
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.QRbox{
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.statistics-text{
|
|
||||||
color:#949494;
|
|
||||||
margin-right:35px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,880 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'dataanalysis' //数据分析
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref,nextTick } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTree,ElTable,TabsPaneContext} from "element-plus";
|
|
||||||
import { queryExamineSchoolGradeTree,queryMyopiaStatistics,queryAbnormalStatistics,queryFarSightednessStatistics,
|
|
||||||
querySamplingComparison,exportStatistics } from "@/api/planscreening";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
import { getDict } from '@/api/dict'
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const treeLoading = ref(false)
|
|
||||||
const treeData:any = ref([])
|
|
||||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
|
||||||
function getTree(){
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
orgId: props.planInfo.org_id,
|
|
||||||
orgType: props.planInfo.org_type,
|
|
||||||
};
|
|
||||||
treeLoading.value = true
|
|
||||||
queryExamineSchoolGradeTree(params).then((res) => {
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
if( treeData.value.length != 0){
|
|
||||||
nodeData.value = treeData.value[0]
|
|
||||||
nextTick(() => {
|
|
||||||
treeRef.value?.setCurrentKey(nodeData.value.id);
|
|
||||||
init()
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const tableData = ref([])
|
|
||||||
const tableData2 = ref([])
|
|
||||||
const tableData3 = ref([])
|
|
||||||
const tableData4 = ref([])
|
|
||||||
const genderoptions:any = ref([{label:'男',value:1},{label:'女',value:2}])
|
|
||||||
const loading = ref(false)
|
|
||||||
const sortstatus = ref(0)
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
|
|
||||||
// 左侧树
|
|
||||||
const treedata: any = ref([]);
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const activeName = ref('近视统计')
|
|
||||||
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 初始化
|
|
||||||
function init(){
|
|
||||||
let params:any = {
|
|
||||||
gender: queryInfo.value.gender,
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
range: queryInfo.value.range,
|
|
||||||
schoolType: queryInfo.value.schoolType,
|
|
||||||
examType:props.planInfo.exam_type,
|
|
||||||
orgId:nodeData.value.id,
|
|
||||||
orgType:nodeData.value.org_type,
|
|
||||||
sort: queryInfo.value.sort,
|
|
||||||
current:queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
};
|
|
||||||
loading.value = true
|
|
||||||
if(activeName.value == '近视统计'){
|
|
||||||
queryMyopiaStatistics(params).then((res) => {
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].inspect>0){
|
|
||||||
res.data.records[i].myopiaRate = ((res.data.records[i].myopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].premyopiaRate = ((res.data.records[i].premyopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].moderateRate = ((res.data.records[i].moderate / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].severeRate = ((res.data.records[i].severe / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].newRate = ((res.data.records[i].is_new_nearsighted / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].goodRate = ((res.data.records[i].is_tobe_good / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
}else{
|
|
||||||
res.data.records[i].myopiaRate = 0
|
|
||||||
res.data.records[i].premyopiaRate = 0
|
|
||||||
res.data.records[i].moderateRate = 0
|
|
||||||
res.data.records[i].severeRate =0
|
|
||||||
res.data.records[i].newRate = 0
|
|
||||||
res.data.records[i].goodRate = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '视力不良统计'){
|
|
||||||
queryAbnormalStatistics(params).then((res) => {
|
|
||||||
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].inspect>0){
|
|
||||||
res.data.records[i].myopiaRate = ((res.data.records[i].myopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].premyopiaRate = ((res.data.records[i].premyopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].moderateRate = ((res.data.records[i].moderate / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].severeRate = ((res.data.records[i].severe / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].newRate = ((res.data.records[i].new / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].goodRate = ((res.data.records[i].good / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
}else{
|
|
||||||
res.data.records[i].myopiaRate = 0
|
|
||||||
res.data.records[i].premyopiaRate = 0
|
|
||||||
res.data.records[i].moderateRate = 0
|
|
||||||
res.data.records[i].severeRate =0
|
|
||||||
res.data.records[i].newRate = 0
|
|
||||||
res.data.records[i].goodRate = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
tableData2.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '远视储备率统计'){
|
|
||||||
queryFarSightednessStatistics(params).then((res) => {
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].inspect>0){
|
|
||||||
res.data.records[i].sufficientRate = ((res.data.records[i].sufficient / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].insufficientRate = ((res.data.records[i].insufficient / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
}else{
|
|
||||||
res.data.records[i].sufficientRate = 0
|
|
||||||
res.data.records[i].insufficientRate = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
tableData3.value = res.data.records;
|
|
||||||
loading.value = false
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '抽检对比分析'){
|
|
||||||
querySamplingComparison(params).then((res) => {
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].inspect>0){
|
|
||||||
res.data.records[i].spotCheckRate = ((res.data.records[i].spotCheck / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
|
|
||||||
}else{
|
|
||||||
res.data.records[i].spotCheckRate = '0.00'
|
|
||||||
}
|
|
||||||
if(res.data.records[i].inspect ==0){
|
|
||||||
res.data.records[i].inspectMyopiaRate = '0.00'
|
|
||||||
}else{
|
|
||||||
res.data.records[i].inspectMyopiaRate = ((res.data.records[i].inspectMyopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
}
|
|
||||||
if(res.data.records[i].spotCheck ==0){
|
|
||||||
res.data.records[i].spotCheckMyopiaRate = '0.00'
|
|
||||||
}else{
|
|
||||||
res.data.records[i].spotCheckMyopiaRate = ((res.data.records[i].spotCheckMyopia / res.data.records[i].spotCheck)* 100).toFixed(2)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
tableData4.value = res.data.records;
|
|
||||||
loading.value = false
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|
||||||
queryInfo.value.current = 1
|
|
||||||
queryInfo.value.total = 0
|
|
||||||
setTimeout(()=>{
|
|
||||||
init()
|
|
||||||
},200)
|
|
||||||
|
|
||||||
}
|
|
||||||
const nodeData:any = ref({})
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
nodeData.value = data
|
|
||||||
queryInfo.value.current = 1
|
|
||||||
queryInfo.value.total = 0
|
|
||||||
queryInfo.value.gender = ""
|
|
||||||
queryInfo.value.range = ""
|
|
||||||
queryInfo.value.schoolType = ""
|
|
||||||
init()
|
|
||||||
};
|
|
||||||
//重置
|
|
||||||
function resetdata(type:any){
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
// 导出
|
|
||||||
function exportinfo(type:any){
|
|
||||||
let params:any = {
|
|
||||||
gender: queryInfo.value.gender,
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
range: queryInfo.value.range,
|
|
||||||
schoolType: queryInfo.value.schoolType,
|
|
||||||
examType:props.planInfo.exam_type,
|
|
||||||
orgId:nodeData.value.id,
|
|
||||||
orgType:nodeData.value.org_type,
|
|
||||||
sort: queryInfo.value.sort,
|
|
||||||
current:1,
|
|
||||||
size:999,
|
|
||||||
};
|
|
||||||
|
|
||||||
loading.value = true
|
|
||||||
if(activeName.value == '近视统计'){
|
|
||||||
params.type = "1"
|
|
||||||
exportStatistics(params).then((response) => {
|
|
||||||
downloadFile(response,'近视统计', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '视力不良统计'){
|
|
||||||
params.type = "2"
|
|
||||||
exportStatistics(params).then((response) => {
|
|
||||||
downloadFile(response,'视力不良统计', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '远视储备率统计'){
|
|
||||||
params.type = "3"
|
|
||||||
exportStatistics(params).then((response) => {
|
|
||||||
downloadFile(response,'远视储备率统计', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '抽检对比分析'){
|
|
||||||
params.type = "4"
|
|
||||||
exportStatistics(params).then((response) => {
|
|
||||||
downloadFile(response,'抽检对比分析', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 排序
|
|
||||||
function sortinfo(type:any){
|
|
||||||
if(sortstatus.value === 0) {
|
|
||||||
sortstatus.value = 1
|
|
||||||
queryInfo.value.sort = 'up'
|
|
||||||
} else if(sortstatus.value === 1) {
|
|
||||||
sortstatus.value = 2
|
|
||||||
queryInfo.value.sort = 'down'
|
|
||||||
} else {
|
|
||||||
sortstatus.value = 0
|
|
||||||
queryInfo.value.sort = null
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
getDict({ dictcode: 'schoolType' }).then((res) => {
|
|
||||||
schoolTypeData.value = res.data
|
|
||||||
})
|
|
||||||
});
|
|
||||||
const rangeData:any = ref([{name:'按地区统计',code:'1'},{name:'按年级统计',code:'2'}])
|
|
||||||
const schoolTypeData:any = ref([])
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="contents-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData"
|
|
||||||
default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 340px); overflow: auto">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRights">
|
|
||||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick" style="height:calc(100vh - 325px);">
|
|
||||||
<el-tab-pane label="近视统计" name="近视统计">
|
|
||||||
<div class="tabcontent">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<!-- <el-select v-model="queryInfo.range" clearable placeholder="请选择统计范围" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in rangeData" :key="item.code" :label="item.name" :value="item.code"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.schoolType" clearable class="ml-4" placeholder="请选择学校类型" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in schoolTypeData" :key="item.itemcode" :label="item.dictname" :value="item.itemcode"/>
|
|
||||||
</el-select> -->
|
|
||||||
<el-select v-model="queryInfo.gender" clearable class="ml-4" placeholder="请选择性别" size="large" style="width: 200px" @change="init">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="init">统计</el-button>
|
|
||||||
<el-button @click="resetdata('1')">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="sortinfo('1')">
|
|
||||||
<img v-if="sortstatus==0" src="@/assets/visionscreening/myopiarate.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==1" src="@/assets/visionscreening/ascsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==2" src="@/assets/visionscreening/descsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
近视率
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportinfo('1')">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-table v-loading="loading" element-loading-text="正在加载数据,请耐心等待......" ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 475px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="name" label="统计范围" />
|
|
||||||
<el-table-column prop="total" label="总人数" align="center" width="120">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.total}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="inspect" label="已检人数" align="center" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.inspect}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="myopia" label="近视人数" align="center" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.myopia}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="myopiaRate" label="近视率" align="center" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class=" text-[#4099ff] font-bold">{{scope.row.myopiaRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="近视前期" align="center">
|
|
||||||
<el-table-column prop="premyopia" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.premyopia}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="premyopiaRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.premyopiaRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="低度近视" align="center">
|
|
||||||
<el-table-column prop="moderate" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.moderate}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="moderateRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.moderateRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="高度近视" align="center">
|
|
||||||
<el-table-column prop="severe" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.severe}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="severeRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.severeRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="新发现" align="center">
|
|
||||||
<el-table-column prop="is_new_nearsighted" align="center" label="人数" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.is_new_nearsighted}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="newRate" align="center" label="比例" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.newRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="好转" align="center">
|
|
||||||
<el-table-column prop="is_tobe_good" align="center" label="人数" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.is_tobe_good}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="goodRate" align="center" label="比例" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.goodRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="视力不良统计" name="视力不良统计">
|
|
||||||
<div class="tabcontent">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<!-- <el-select v-model="queryInfo.range" clearable placeholder="请选择统计范围" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in rangeData" :key="item.code" :label="item.name" :value="item.code"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.schoolType" clearable class="ml-4" placeholder="请选择学校类型" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in schoolTypeData" :key="item.itemcode" :label="item.dictname" :value="item.itemcode"/>
|
|
||||||
</el-select> -->
|
|
||||||
<el-select v-model="queryInfo.gender" clearable class="ml-4" placeholder="请选择性别" size="large" style="width: 200px" @change="init">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="init">统计</el-button>
|
|
||||||
<el-button @click="resetdata('2')">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="sortinfo('2')">
|
|
||||||
<img v-if="sortstatus==0" src="@/assets/visionscreening/myopiarate.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==1" src="@/assets/visionscreening/ascsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==2" src="@/assets/visionscreening/descsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
视力不良占比
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportinfo('2')">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-table ref="multipleTableRef" v-loading="loading" element-loading-text="正在加载数据,请耐心等待......" :data="tableData2" border style="width: 100%; height:calc(100vh - 475px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="name" label="统计范围" />
|
|
||||||
<el-table-column prop="total" label="总人数" align="center" width="120">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.total}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="inspect" label="已检人数" align="center" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.inspect}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="myopia" label="视力不良人数" align="center" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.myopia}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="myopiaRate" label="视力不良占比" align="center" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.myopiaRate}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="轻度视力不良" align="center">
|
|
||||||
<el-table-column prop="premyopia" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.premyopia}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="premyopiaRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.premyopiaRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="中度视力不良" align="center">
|
|
||||||
<el-table-column prop="moderate" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.moderate}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="moderateRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.moderateRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="重度视力不良" align="center">
|
|
||||||
<el-table-column prop="severe" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.severe}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="severeRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.severeRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="新发现" align="center">
|
|
||||||
<el-table-column prop="new" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.new}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="newRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.newRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="好转" align="center">
|
|
||||||
<el-table-column prop="good" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.good}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="goodRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.goodRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="远视储备率统计" name="远视储备率统计">
|
|
||||||
<div class="tabcontent">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<!-- <el-select v-model="queryInfo.range" clearable placeholder="请选择统计范围" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in rangeData" :key="item.code" :label="item.name" :value="item.code"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.schoolType" clearable class="ml-4" placeholder="请选择学校类型" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in schoolTypeData" :key="item.itemcode" :label="item.dictname" :value="item.itemcode"/>
|
|
||||||
</el-select> -->
|
|
||||||
<el-select v-model="queryInfo.gender" clearable class="ml-4" placeholder="请选择性别" size="large" style="width: 200px" @change="init">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="init">统计</el-button>
|
|
||||||
<el-button @click="resetdata('3')">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="sortinfo('3')">
|
|
||||||
<img v-if="sortstatus==0" src="@/assets/visionscreening/myopiarate.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==1" src="@/assets/visionscreening/ascsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==2" src="@/assets/visionscreening/descsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
远视储备不足比例
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportinfo('3')">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-table ref="multipleTableRef" v-loading="loading" element-loading-text="正在加载数据,请耐心等待......" :data="tableData3" border style="width: 100%; height:calc(100vh - 475px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="name" label="统计范围" />
|
|
||||||
<el-table-column prop="total" label="总人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.total}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="inspect" label="已检人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.inspect}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sufficient" label="远视储备充足人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.sufficient}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sufficientRate" label="远视储备充足比例" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.sufficientRate}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="insufficient" label="远视储备不足人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.insufficient}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="insufficientRate" label="远视储备不足比例" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.insufficientRate}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="抽检对比分析" name="抽检对比分析">
|
|
||||||
<div class="tabcontent">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<!-- <el-select v-model="queryInfo.range" clearable placeholder="请选择统计范围" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in rangeData" :key="item.code" :label="item.name" :value="item.code"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.schoolType" clearable class="ml-4" placeholder="请选择学校类型" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in schoolTypeData" :key="item.itemcode" :label="item.dictname" :value="item.itemcode"/>
|
|
||||||
</el-select> -->
|
|
||||||
<el-select v-model="queryInfo.gender" clearable class="ml-4" placeholder="请选择性别" size="large" style="width: 200px" @change="init">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="init">统计</el-button>
|
|
||||||
<el-button @click="resetdata('4')">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="sortinfo('4')">
|
|
||||||
<img v-if="sortstatus==0" src="@/assets/visionscreening/myopiarate.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==1" src="@/assets/visionscreening/ascsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==2" src="@/assets/visionscreening/descsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
抽查近视率
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportinfo('4')">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-table ref="multipleTableRef" v-loading="loading" element-loading-text="正在加载数据,请耐心等待......" :data="tableData4" border style="width: 100%; height:calc(100vh - 475px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="name" label="统计范围" />
|
|
||||||
<el-table-column prop="inspect" label="普检人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.inspect}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="spotCheck" label="抽检人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.spotCheck}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="spotCheckRate" label="抽检比例" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.spotCheckRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="inspectMyopia" label="普检近视人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.inspectMyopia}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="inspectMyopiaRate" label="普检近视率" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.inspectMyopiaRate}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="spotCheckMyopia" label="抽检近视人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#FF9900] font-bold">{{scope.row.spotCheckMyopia}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="spotCheckMyopiaRate" label="抽检近视率" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#FF9900] font-bold">{{scope.row.spotCheckMyopiaRate}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
</el-tabs>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.contents-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
|
|
||||||
:deep(){
|
|
||||||
.el-input{
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRights {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
// overflow: auto;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: transparent !important;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-button{
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
// .el-tree-node__content{
|
|
||||||
// height: 40px;
|
|
||||||
// padding-left: 12px !important;
|
|
||||||
// color: #505050;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
// color: #409eff;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: #ecf5ff;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: transparent;
|
|
||||||
// // #ecf5ff
|
|
||||||
// }
|
|
||||||
// .el-tree-node__expand-icon{
|
|
||||||
// color: #333333;
|
|
||||||
// }
|
|
||||||
.el-tabs__item{
|
|
||||||
margin-right: 10px;
|
|
||||||
border: 1px solid #dfe4ee;
|
|
||||||
padding: 0px 20px !important;
|
|
||||||
width: 130px;
|
|
||||||
height: 44px;
|
|
||||||
border-radius: 10px;
|
|
||||||
border-bottom-right-radius: 0px;
|
|
||||||
border-bottom-left-radius: 0px;
|
|
||||||
background-color: #e9ecf3;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #606060;
|
|
||||||
}
|
|
||||||
.el-tabs__nav{
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
.el-tabs__active-bar{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.el-tabs__item:hover{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.el-tabs__item.is-active{
|
|
||||||
color: #fff;
|
|
||||||
border: 1px solid #409eff;
|
|
||||||
background-color: #409eff;
|
|
||||||
}
|
|
||||||
.el-tabs__nav-wrap::after{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.el-tabs__header{
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.tabcontent{
|
|
||||||
background-color: #fff;
|
|
||||||
height: calc(100vh - 329px);
|
|
||||||
border-radius: 5px;
|
|
||||||
padding: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,827 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'dataanalysiss' // 抽检-数据分析
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable,TabsPaneContext} from "element-plus";
|
|
||||||
import { queryExamineSchoolTree,queryMyopiaStatistics,queryAbnormalStatistics,queryFarSightednessStatistics,
|
|
||||||
querySamplingComparison,queryRulesSchoolList,exportStatistics } from "@/api/planscreening";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
import { getDict } from '@/api/dict'
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const treeLoading = ref(false)
|
|
||||||
const treeData:any = ref([])
|
|
||||||
function getTree(){
|
|
||||||
if(props.planInfo.exam_type == '01'){
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
orgId: props.planInfo.org_id,
|
|
||||||
orgType: props.planInfo.org_type,
|
|
||||||
};
|
|
||||||
treeLoading.value = true
|
|
||||||
queryExamineSchoolTree(params).then((res) => {
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
//获取表格类型
|
|
||||||
let params = {
|
|
||||||
planId:props.planInfo.id
|
|
||||||
}
|
|
||||||
treeLoading.value = true
|
|
||||||
queryRulesSchoolList(params).then((res) => {
|
|
||||||
treeData.value = res.data;
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
const tableData = ref([])
|
|
||||||
const tableData2 = ref([])
|
|
||||||
const tableData3 = ref([])
|
|
||||||
const tableData4 = ref([])
|
|
||||||
const genderoptions:any = ref([{label:'男',value:0},{label:'女',value:1}])
|
|
||||||
const loading = ref(false)
|
|
||||||
const sortstatus = ref(0)
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
|
|
||||||
// 左侧树
|
|
||||||
const treedata: any = ref([]);
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const activeName = ref('近视统计')
|
|
||||||
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 初始化
|
|
||||||
function init(){
|
|
||||||
// let params:any = {
|
|
||||||
// gender: queryInfo.value.gender,
|
|
||||||
// planId:props.planInfo.id,
|
|
||||||
// range: queryInfo.value.range,
|
|
||||||
// schoolType: queryInfo.value.schoolType,
|
|
||||||
// };
|
|
||||||
// if(nodeData.value.org_type =='5'){
|
|
||||||
// params.schoolId = nodeData.value.id
|
|
||||||
// params.regionId = ""
|
|
||||||
// }else{
|
|
||||||
// params.regionId = nodeData.value.id
|
|
||||||
// params.schoolId = ""
|
|
||||||
// }
|
|
||||||
let params:any = {
|
|
||||||
gender: queryInfo.value.gender,
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
range: queryInfo.value.range,
|
|
||||||
schoolType: queryInfo.value.schoolType,
|
|
||||||
examType:props.planInfo.exam_type,
|
|
||||||
orgId:nodeData.value.id,
|
|
||||||
orgType:nodeData.value.org_type,
|
|
||||||
sort: queryInfo.value.sort,
|
|
||||||
current:queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
};
|
|
||||||
loading.value = true
|
|
||||||
if(activeName.value == '近视统计'){
|
|
||||||
queryMyopiaStatistics(params).then((res) => {
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].inspect>0){
|
|
||||||
res.data.records[i].myopiaRate = ((res.data.records[i].myopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].premyopiaRate = ((res.data.records[i].premyopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].moderateRate = ((res.data.records[i].moderate / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].severeRate = ((res.data.records[i].severe / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].new = res.data.records[i].is_new_nearsighted
|
|
||||||
res.data.records[i].good = res.data.records[i].is_tobe_good
|
|
||||||
res.data.records[i].newRate = ((res.data.records[i].new / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].goodRate = ((res.data.records[i].good / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
}else{
|
|
||||||
res.data.records[i].myopiaRate = 0
|
|
||||||
res.data.records[i].premyopiaRate = 0
|
|
||||||
res.data.records[i].moderateRate = 0
|
|
||||||
res.data.records[i].severeRate =0
|
|
||||||
res.data.records[i].new = 0
|
|
||||||
res.data.records[i].good = 0
|
|
||||||
res.data.records[i].newRate = 0
|
|
||||||
res.data.records[i].goodRate = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '视力不良统计'){
|
|
||||||
queryAbnormalStatistics(params).then((res) => {
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].inspect>0){
|
|
||||||
res.data.records[i].myopiaRate = ((res.data.records[i].myopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].premyopiaRate = ((res.data.records[i].premyopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].moderateRate = ((res.data.records[i].moderate / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].severeRate = ((res.data.records[i].severe / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].newRate = ((res.data.records[i].new / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].goodRate = ((res.data.records[i].good / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
}else{
|
|
||||||
res.data.records[i].myopiaRate = 0
|
|
||||||
res.data.records[i].premyopiaRate = 0
|
|
||||||
res.data.records[i].moderateRate = 0
|
|
||||||
res.data.records[i].severeRate =0
|
|
||||||
res.data.records[i].newRate = 0
|
|
||||||
res.data.records[i].goodRate = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tableData2.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '远视储备率统计'){
|
|
||||||
queryFarSightednessStatistics(params).then((res) => {
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].inspect>0){
|
|
||||||
res.data.records[i].sufficientRate = ((res.data.records[i].sufficient / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
res.data.records[i].insufficientRate = ((res.data.records[i].insufficient / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
}else{
|
|
||||||
res.data.records[i].sufficientRate = 0
|
|
||||||
res.data.records[i].insufficientRate = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
tableData3.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '抽检对比分析'){
|
|
||||||
querySamplingComparison(params).then((res) => {
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].inspect>0){
|
|
||||||
res.data.records[i].spotCheckRate = ((res.data.records[i].spotCheck / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
|
|
||||||
}else{
|
|
||||||
res.data.records[i].spotCheckRate = '0.00'
|
|
||||||
}
|
|
||||||
if(res.data.records[i].inspect ==0){
|
|
||||||
res.data.records[i].inspectMyopiaRate = '0.00'
|
|
||||||
}else{
|
|
||||||
res.data.records[i].inspectMyopiaRate = ((res.data.records[i].inspectMyopia / res.data.records[i].inspect)* 100).toFixed(2)
|
|
||||||
}
|
|
||||||
if(res.data.records[i].spotCheck ==0){
|
|
||||||
res.data.records[i].spotCheckMyopiaRate = '0.00'
|
|
||||||
}else{
|
|
||||||
res.data.records[i].spotCheckMyopiaRate = ((res.data.records[i].spotCheckMyopia / res.data.records[i].spotCheck)* 100).toFixed(2)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
tableData4.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|
||||||
sortstatus.value = 0
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
setTimeout(()=>{
|
|
||||||
init()
|
|
||||||
},200)
|
|
||||||
|
|
||||||
}
|
|
||||||
const nodeData:any = ref({})
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
nodeData.value = data
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
};
|
|
||||||
//重置
|
|
||||||
function resetdata(type:any){
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
// 导出
|
|
||||||
function exportinfo(type:any){
|
|
||||||
let params:any = {
|
|
||||||
gender: queryInfo.value.gender,
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
range: queryInfo.value.range,
|
|
||||||
schoolType: queryInfo.value.schoolType,
|
|
||||||
examType:props.planInfo.exam_type,
|
|
||||||
orgId:nodeData.value.id,
|
|
||||||
orgType:nodeData.value.org_type,
|
|
||||||
sort: queryInfo.value.sort,
|
|
||||||
current:1,
|
|
||||||
size:999,
|
|
||||||
};
|
|
||||||
|
|
||||||
loading.value = true
|
|
||||||
if(activeName.value == '近视统计'){
|
|
||||||
params.type = "1"
|
|
||||||
exportStatistics(params).then((response) => {
|
|
||||||
downloadFile(response,'近视统计', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '视力不良统计'){
|
|
||||||
params.type = "2"
|
|
||||||
exportStatistics(params).then((response) => {
|
|
||||||
downloadFile(response,'视力不良统计', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}else if(activeName.value == '远视储备率统计'){
|
|
||||||
params.type = "3"
|
|
||||||
exportStatistics(params).then((response) => {
|
|
||||||
downloadFile(response,'远视储备率统计', 'xlsx')
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 排序
|
|
||||||
function sortinfo(type:any){
|
|
||||||
// 排序
|
|
||||||
if(sortstatus.value === 0) {
|
|
||||||
sortstatus.value = 1
|
|
||||||
queryInfo.value.sort = 'up'
|
|
||||||
} else if(sortstatus.value === 1) {
|
|
||||||
sortstatus.value = 2
|
|
||||||
queryInfo.value.sort = 'down'
|
|
||||||
} else {
|
|
||||||
sortstatus.value = 0
|
|
||||||
queryInfo.value.sort = null
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
init()
|
|
||||||
getDict({ dictcode: 'schoolType' }).then((res) => {
|
|
||||||
schoolTypeData.value = res.data
|
|
||||||
})
|
|
||||||
});
|
|
||||||
const rangeData:any = ref([{name:'按地区统计',code:'1'},{name:'按年级统计',code:'2'}])
|
|
||||||
const schoolTypeData:any = ref([])
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="contents-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData"
|
|
||||||
default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 340px); overflow: auto">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRights">
|
|
||||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick" style="height:calc(100vh - 325px);">
|
|
||||||
<el-tab-pane label="近视统计" name="近视统计">
|
|
||||||
<div class="tabcontent">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<!-- <el-select v-model="queryInfo.range" clearable placeholder="请选择统计范围" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in rangeData" :key="item.code" :label="item.name" :value="item.code"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.schoolType" clearable class="ml-4" placeholder="请选择学校类型" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in schoolTypeData" :key="item.itemcode" :label="item.dictname" :value="item.itemcode"/>
|
|
||||||
</el-select> -->
|
|
||||||
<el-select v-model="queryInfo.gender" clearable class="ml-4" placeholder="请选择性别" size="large" style="width: 200px" @change="init">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="init">统计</el-button>
|
|
||||||
<el-button @click="resetdata('1')">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="sortinfo('1')">
|
|
||||||
<img v-if="sortstatus==0" src="@/assets/visionscreening/myopiarate.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==1" src="@/assets/visionscreening/ascsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==2" src="@/assets/visionscreening/descsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
近视率
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportinfo('1')">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-table ref="multipleTableRef" v-loading="loading" element-loading-text="正在加载数据,请耐心等待......" :data="tableData" border style="width: 100%; height:calc(100vh - 475px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="name" label="统计范围" />
|
|
||||||
<el-table-column prop="total" label="总人数" align="center" width="120">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.total}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="inspect" label="已检人数" align="center" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.inspect}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="myopia" label="近视人数" align="center" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.myopia}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="myopiaRate" label="近视率" align="center" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class=" text-[#4099ff] font-bold">{{scope.row.myopiaRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="近视前期" align="center">
|
|
||||||
<el-table-column prop="premyopia" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.premyopia}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="premyopiaRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.premyopiaRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="低度近视" align="center">
|
|
||||||
<el-table-column prop="moderate" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.moderate}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="moderateRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.moderateRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="高度近视" align="center">
|
|
||||||
<el-table-column prop="severe" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.severe}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="severeRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.severeRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="新发现" align="center">
|
|
||||||
<el-table-column prop="new" align="center" label="人数" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.new}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="newRate" align="center" label="比例" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.newRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="好转" align="center">
|
|
||||||
<el-table-column prop="good" align="center" label="人数" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.good}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="goodRate" align="center" label="比例" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.goodRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="视力不良统计" name="视力不良统计">
|
|
||||||
<div class="tabcontent">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<!-- <el-select v-model="queryInfo.range" clearable placeholder="请选择统计范围" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in rangeData" :key="item.code" :label="item.name" :value="item.code"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.schoolType" clearable class="ml-4" placeholder="请选择学校类型" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in schoolTypeData" :key="item.itemcode" :label="item.dictname" :value="item.itemcode"/>
|
|
||||||
</el-select> -->
|
|
||||||
<el-select v-model="queryInfo.gender" clearable class="ml-4" placeholder="请选择性别" size="large" style="width: 200px" @change="init">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="init">统计</el-button>
|
|
||||||
<el-button @click="resetdata('2')">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="sortinfo('2')">
|
|
||||||
<img v-if="sortstatus==0" src="@/assets/visionscreening/myopiarate.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==1" src="@/assets/visionscreening/ascsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==2" src="@/assets/visionscreening/descsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
视力不良占比
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportinfo('2')">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-table ref="multipleTableRef" v-loading="loading" element-loading-text="正在加载数据,请耐心等待......" :data="tableData2" border style="width: 100%; height:calc(100vh - 475px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="name" label="统计范围" />
|
|
||||||
<el-table-column prop="total" label="总人数" align="center" width="120">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.total}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="inspect" label="已检人数" align="center" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.inspect}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="myopia" label="视力不良人数" align="center" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.myopia}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="myopiaRate" label="视力不良占比" align="center" width="80" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.myopiaRate}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="轻度视力不良" align="center">
|
|
||||||
<el-table-column prop="premyopia" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.premyopia}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="premyopiaRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.premyopiaRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="中度视力不良" align="center">
|
|
||||||
<el-table-column prop="moderate" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.moderate}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="moderateRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.moderateRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="重度视力不良" align="center">
|
|
||||||
<el-table-column prop="severe" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.severe}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="severeRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.severeRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="新发现" align="center">
|
|
||||||
<el-table-column prop="new" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.new}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="newRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.newRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="好转" align="center">
|
|
||||||
<el-table-column prop="good" align="center" label="人数" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.good}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="goodRate" align="center" label="比例" width="80">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.goodRate}}%</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane label="远视储备率统计" name="远视储备率统计">
|
|
||||||
<div class="tabcontent">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<!-- <el-select v-model="queryInfo.range" clearable placeholder="请选择统计范围" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in rangeData" :key="item.code" :label="item.name" :value="item.code"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.schoolType" clearable class="ml-4" placeholder="请选择学校类型" size="large" style="width: 200px">
|
|
||||||
<el-option v-for="item in schoolTypeData" :key="item.itemcode" :label="item.dictname" :value="item.itemcode"/>
|
|
||||||
</el-select> -->
|
|
||||||
<el-select v-model="queryInfo.gender" clearable class="ml-4" placeholder="请选择性别" size="large" style="width: 200px" @change="init">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="init">统计</el-button>
|
|
||||||
<el-button @click="resetdata('3')">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="sortinfo('3')">
|
|
||||||
<img v-if="sortstatus==0" src="@/assets/visionscreening/myopiarate.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==1" src="@/assets/visionscreening/ascsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="sortstatus==2" src="@/assets/visionscreening/descsort.png" style="padding-right: 5px;" alt="">
|
|
||||||
远视储备不足比例
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="exportinfo('3')">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" style="padding-right: 5px;" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-table ref="multipleTableRef" v-loading="loading" element-loading-text="正在加载数据,请耐心等待......" :data="tableData3" border style="width: 100%; height:calc(100vh - 475px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="name" label="统计范围" />
|
|
||||||
<el-table-column prop="total" label="总人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.total}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="inspect" label="已检人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{scope.row.inspect}}人</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sufficient" label="远视储备充足人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.sufficient}}</span>人
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="sufficientRate" label="远视储备充足比例" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.sufficientRate}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="insufficient" label="远视储备不足人数" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.insufficient}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="insufficientRate" label="远视储备不足比例" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span class="text-[#4099ff] font-bold">{{scope.row.insufficientRate}}</span>%
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
</el-tabs>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.contents-box{
|
|
||||||
:deep(.el-tree-node.is-current > .el-tree-node__content) {
|
|
||||||
background-color: #409eff !important;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
:deep(){
|
|
||||||
.el-input{
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRights {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
// overflow: auto;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-button{
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
// .el-tree-node__content{
|
|
||||||
// height: 40px;
|
|
||||||
// padding-left: 12px !important;
|
|
||||||
// color: #505050;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
// color: #409eff;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: #ecf5ff;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: transparent;
|
|
||||||
// // #ecf5ff
|
|
||||||
// }
|
|
||||||
// .el-tree-node__expand-icon{
|
|
||||||
// color: #333333;
|
|
||||||
// }
|
|
||||||
.el-tabs__item{
|
|
||||||
margin-right: 10px;
|
|
||||||
border: 1px solid #dfe4ee;
|
|
||||||
padding: 0px 20px !important;
|
|
||||||
width: 130px;
|
|
||||||
height: 44px;
|
|
||||||
border-radius: 10px;
|
|
||||||
border-bottom-right-radius: 0px;
|
|
||||||
border-bottom-left-radius: 0px;
|
|
||||||
background-color: #e9ecf3;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #606060;
|
|
||||||
}
|
|
||||||
.el-tabs__nav{
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
.el-tabs__active-bar{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.el-tabs__item:hover{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.el-tabs__item.is-active{
|
|
||||||
color: #fff;
|
|
||||||
border: 1px solid #409eff;
|
|
||||||
background-color: #409eff;
|
|
||||||
}
|
|
||||||
.el-tabs__nav-wrap::after{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.el-tabs__header{
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.tabcontent{
|
|
||||||
background-color: #fff;
|
|
||||||
height: calc(100vh - 329px);
|
|
||||||
border-radius: 5px;
|
|
||||||
padding: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,348 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'inspectreport' // 普检报告
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable} from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { queryExamineSchoolTree,queryPlanGradePage } from "@/api/planscreening";
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const tableData:any = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const dialogVisible = ref(false)
|
|
||||||
const loading = ref(false)
|
|
||||||
// 左侧树
|
|
||||||
const treeLoading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) {
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const nodeData:any = ref({})
|
|
||||||
// 初始化
|
|
||||||
function init(){
|
|
||||||
loading.value = true
|
|
||||||
let params:any = {
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
examType:'01',
|
|
||||||
current:queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
}
|
|
||||||
if(nodeData.value.org_type =='5'){
|
|
||||||
params.schoolId = nodeData.value.id
|
|
||||||
params.regionId = ""
|
|
||||||
}else{
|
|
||||||
params.regionId = nodeData.value.id
|
|
||||||
params.schoolId = ""
|
|
||||||
}
|
|
||||||
queryPlanGradePage(params).then((res) => {
|
|
||||||
tableData.value = []
|
|
||||||
if(res.data != null){
|
|
||||||
for (const key in res.data) {
|
|
||||||
let temp:any = key.split(",")
|
|
||||||
tableData.value.push({
|
|
||||||
plan_name:props.planInfo.plan_name,
|
|
||||||
grade_id:temp[1],
|
|
||||||
grade_name:temp[2],
|
|
||||||
exam_time:temp[3]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
nodeData.value = data
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
};
|
|
||||||
//导出
|
|
||||||
function exportdata(){
|
|
||||||
|
|
||||||
}
|
|
||||||
function handleClose(){
|
|
||||||
dialogVisible.value = false
|
|
||||||
}
|
|
||||||
function handleSelectionChange(val:any){
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
function viewclick(row:any){
|
|
||||||
ElMessage({
|
|
||||||
message: "查看报告功能正在开发中!",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const treeData:any = ref([])
|
|
||||||
function getTree(){
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
orgId: props.planInfo.org_id,
|
|
||||||
orgType: props.planInfo.org_type,
|
|
||||||
};
|
|
||||||
treeLoading.value = true
|
|
||||||
queryExamineSchoolTree(params).then((res) => {
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
init()
|
|
||||||
});
|
|
||||||
function exportinfo(){
|
|
||||||
ElMessage({
|
|
||||||
message: "导出报告功能正在开发中!",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="contents-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeLoading" ref="treeRef" node-key="id" :data="treeData"
|
|
||||||
default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 350px); overflow: auto">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRight">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<el-button type="primary" @click="exportinfo">
|
|
||||||
<img src="@/assets/visionscreening/exports.png" alt="">导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading">
|
|
||||||
<el-table ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 435px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<el-table-column prop="plan_name" label="检查名称" />
|
|
||||||
<el-table-column prop="grade_name" label="年级" />
|
|
||||||
<el-table-column prop="exam_time" label="生成时间" width="196">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.exam_time !='null'">{{ dateFormat(scope.row.exam_time) }}</span>
|
|
||||||
<span v-else>-</span>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
<el-table-column prop="address" label="操作" width="100" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/visionscreening/viewreport.png" alt="" title="查看结果记录表" @click="viewclick(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogVisible" :show-close="false" :before-close="handleClose" :close-on-click-modal="false" title="视力筛查报告" width="60%" draggable append-to-body>
|
|
||||||
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.contents-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
:deep(){
|
|
||||||
.el-input{
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRight {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 285px);
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 20px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-tree-node__content{
|
|
||||||
height: 40px;
|
|
||||||
padding-left: 12px !important;
|
|
||||||
color: #505050;
|
|
||||||
}
|
|
||||||
.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
color: #409eff;
|
|
||||||
background-color: #ecf5ff;
|
|
||||||
}
|
|
||||||
.el-tree-node__content:hover{
|
|
||||||
color: #409eff;
|
|
||||||
background-color: transparent;
|
|
||||||
// #ecf5ff
|
|
||||||
}
|
|
||||||
.el-tree-node__expand-icon{
|
|
||||||
color: #333333;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.QRbox{
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,571 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'personalreports' // 个人报告
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable} from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import Viewfile from "@/views/component/Viewfile.vue";
|
|
||||||
import Generalreport from "@/views/component/Generalreport.vue";
|
|
||||||
import { queryExamineSchoolTree,queryExamineResultPage,queryCompletionRate,exportVisionForm,exportMultipleVisionForm } from "@/api/planscreening";
|
|
||||||
import { querySchoolGradeList } from "@/api/regionmodule/schoolGrade";
|
|
||||||
import { querySchoolClassList } from "@/api/regionmodule/schoolClass";
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const iframeurl = userStore.webApiBaseHttp;
|
|
||||||
const reporLoading = ref(false)
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const searchval = ref('')
|
|
||||||
const tableData = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const genderoptions:any = ref([{label:'男',value:0},{label:'女',value:1}])
|
|
||||||
const loading = ref(false)
|
|
||||||
const dialogVisible = ref(false)
|
|
||||||
// 左侧树
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
const planreportlist:any = ref({})
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const reportiframe = ref<HTMLIFrameElement | null>(null);
|
|
||||||
const iframeWindow = ref<Window | null>(null);
|
|
||||||
const isViewfile = ref(false)
|
|
||||||
//校级报告
|
|
||||||
const isGeneralreport = ref(false)
|
|
||||||
const reportsrc:any = ref({})
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
init()
|
|
||||||
window.addEventListener('message', (event) => {
|
|
||||||
// console.log('Method in parent has been called');
|
|
||||||
if (event.data.action === 'parentMethodCalled') {
|
|
||||||
// 父页面的方法被iframe调用后的回调
|
|
||||||
// console.log('Method in parent has been called');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//查看
|
|
||||||
function lookinfo(row:any){
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-result/exportVisionForm?id=' + row.id
|
|
||||||
isViewfile.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// 文件下载
|
|
||||||
function fileDown(row:any) {
|
|
||||||
const params = {
|
|
||||||
id: row.id
|
|
||||||
}
|
|
||||||
exportVisionForm(params).then((response: any) => {
|
|
||||||
downloadFile(response, row.student_name + '筛查结果记录表', 'docx')
|
|
||||||
}).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function exportinfo(){
|
|
||||||
let params:any = {
|
|
||||||
};
|
|
||||||
if(multipleSelection.value.length>0){
|
|
||||||
let id = [] as any[];
|
|
||||||
let name = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
id.push(item.id)
|
|
||||||
name.push(item.id)
|
|
||||||
})
|
|
||||||
|
|
||||||
params = {
|
|
||||||
type:"0",
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
id: id.join(','),
|
|
||||||
};
|
|
||||||
}else if(queryInfo.value.classId != '' && queryInfo.value.classId != null){
|
|
||||||
params = {
|
|
||||||
type:'1',
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
id:queryInfo.value.classId
|
|
||||||
}
|
|
||||||
}else if(queryInfo.value.gradeId != '' && queryInfo.value.gradeId != null){
|
|
||||||
params = {
|
|
||||||
type:'2',
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
id:queryInfo.value.gradeId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(schoolId.value != '' && schoolId.value != null){
|
|
||||||
params = {
|
|
||||||
type:'3',
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
id:schoolId.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
reporLoading.value = true
|
|
||||||
exportMultipleVisionForm(params).then((response: any) => {
|
|
||||||
downloadFile(response, '筛查结果记录表', 'docx')
|
|
||||||
reporLoading.value = false
|
|
||||||
}).catch(() => {
|
|
||||||
reporLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function CloseView(){
|
|
||||||
isViewfile.value = false
|
|
||||||
}
|
|
||||||
function CloseViews(){
|
|
||||||
isGeneralreport.value = false
|
|
||||||
}
|
|
||||||
function handleSelectionChange(val:any){
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
function resetdata(){
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
const schoolId = ref("")
|
|
||||||
const treeLoading = ref(false)
|
|
||||||
const treeData:any = ref([])
|
|
||||||
function getTree(){
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
orgId: props.planInfo.org_id,
|
|
||||||
orgType: props.planInfo.org_type,
|
|
||||||
};
|
|
||||||
treeLoading.value = true
|
|
||||||
queryExamineSchoolTree(params).then((res) => {
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 初始化
|
|
||||||
function init(){
|
|
||||||
let params:any = {
|
|
||||||
studentName:queryInfo.value.studentName,
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
gradeId: queryInfo.value.gradeId,
|
|
||||||
classId: queryInfo.value.classId,
|
|
||||||
examType: props.planInfo.exam_type,
|
|
||||||
gender: queryInfo.value.gender,
|
|
||||||
studyCode: queryInfo.value.studyCode,
|
|
||||||
idCode: queryInfo.value.idCode,
|
|
||||||
examStatus:'01',
|
|
||||||
current:queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size
|
|
||||||
};
|
|
||||||
if(nodeData.value.org_type =='5'){
|
|
||||||
params.schoolId = nodeData.value.id
|
|
||||||
params.regionId = ""
|
|
||||||
}else{
|
|
||||||
params.regionId = nodeData.value.id
|
|
||||||
params.schoolId = ""
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
queryExamineResultPage(params).then((res) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const ViewfileUrl = ref("")
|
|
||||||
const nodeData:any = ref({})
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
nodeData.value = data
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.gradeId = ""
|
|
||||||
schoolId.value = ""
|
|
||||||
if(nodeData.value.org_type =='5'){
|
|
||||||
schoolId.value = nodeData.value.id
|
|
||||||
getGrade()
|
|
||||||
}
|
|
||||||
queryInfo.value.current = 1
|
|
||||||
queryInfo.value.size = 10
|
|
||||||
init()
|
|
||||||
};
|
|
||||||
function getGrade(){
|
|
||||||
let params = {
|
|
||||||
schoolId: schoolId.value
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
querySchoolGradeList(params).then((res) => {
|
|
||||||
gradeinData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getClass(id:any){
|
|
||||||
let params = {
|
|
||||||
gradeId: id
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
if(id != null && id != '' ){
|
|
||||||
querySchoolClassList(params).then((res) => {
|
|
||||||
classData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
const gradeinData:any = ref([])
|
|
||||||
const classData:any = ref([])
|
|
||||||
function viewreport(data:any){
|
|
||||||
console.log(data)
|
|
||||||
planreportlist.value = data
|
|
||||||
dialogVisible.value = true
|
|
||||||
const params = {
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
schoolId:'',
|
|
||||||
shcoolName:''
|
|
||||||
}
|
|
||||||
const paramss = {
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
regionCode:data.code
|
|
||||||
}
|
|
||||||
let publicparams = {}
|
|
||||||
if(planreportlist.value.org_type === '5'){
|
|
||||||
params.schoolId = planreportlist.value.id
|
|
||||||
params.shcoolName = planreportlist.value.name
|
|
||||||
reportsrc.value = iframeurl + '/#/Generalreport/?planId=' + props.planInfo.id +
|
|
||||||
'&schoolId='+ data.id + '&shcoolName=' + data.name
|
|
||||||
publicparams = params
|
|
||||||
} else {
|
|
||||||
reportsrc.value = iframeurl + '/#/Generalreports?planId='+ props.planInfo.id +
|
|
||||||
'®ionCode='+ data.code
|
|
||||||
publicparams = paramss
|
|
||||||
}
|
|
||||||
|
|
||||||
setTimeout(()=>{
|
|
||||||
// 调用子frame导出方法
|
|
||||||
if (reportiframe.value) {
|
|
||||||
iframeWindow.value = reportiframe.value.contentWindow;
|
|
||||||
}
|
|
||||||
if (iframeWindow.value) {
|
|
||||||
iframeWindow.value.postMessage(publicparams, '*');
|
|
||||||
}
|
|
||||||
},2500)
|
|
||||||
}
|
|
||||||
function handleClose(){
|
|
||||||
dialogVisible.value = false
|
|
||||||
}
|
|
||||||
|
|
||||||
function exportclick(){
|
|
||||||
// 调用子frame导出方法
|
|
||||||
if (reportiframe.value) {
|
|
||||||
iframeWindow.value = reportiframe.value.contentWindow;
|
|
||||||
}
|
|
||||||
if (iframeWindow.value) {
|
|
||||||
iframeWindow.value.postMessage({
|
|
||||||
action: 'exportpdf',
|
|
||||||
payload: '',
|
|
||||||
}, '*');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="contents-box" v-loading="reporLoading" element-loading-text="正在下载报告,文件较大,请耐心等待...">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData"
|
|
||||||
default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 350px); overflow: auto">
|
|
||||||
<template #default="{ node, data }">
|
|
||||||
<span class="custom-tree-node">
|
|
||||||
<span>{{ node.label }}</span>
|
|
||||||
<span>
|
|
||||||
<img v-if="data.id !== nodeData.id" src="@/assets/visionscreening/lookdetails.png" style="width: 14px;height:14px;" alt="" @click.stop="viewreport(data)">
|
|
||||||
<img v-else-if="data.id === nodeData.id" src="@/assets/visionscreening/lookdetailss.png" style="width: 14px;height:14px;" alt="" @click.stop="viewreport(data)">
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRight">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div class="flex items-center">
|
|
||||||
<el-input v-model="queryInfo.studentName" placeholder="请输入学生姓名" style="width: 150px;" clearable />
|
|
||||||
<el-select v-model="queryInfo.gradeId" @change="getClass" class="ml-3" placeholder="请选择年级" clearable style="width: 150px;" :disabled="schoolId==''|| schoolId==null">
|
|
||||||
<el-option v-for="item in gradeinData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.classId" @change="init" class="ml-3" placeholder="请选择班级" clearable style="width: 150px;" :disabled="queryInfo.gradeId==''|| queryInfo.gradeId==null">
|
|
||||||
<el-option v-for="item in classData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.gender" @change="init" style="width: 130px;" class="ml-3" placeholder="请选择性别">
|
|
||||||
<el-option v-for="item in genderoptions" :key="item.value" :label="item.label" :value="item.value"/>
|
|
||||||
</el-select>
|
|
||||||
<el-input v-model="queryInfo.studyCode" class="ml-3" placeholder="请输入学籍号" style="width: 150px;" clearable />
|
|
||||||
<el-input v-model="queryInfo.idCode" class="ml-3" placeholder="请输入身份证号" style="width: 150px;margin-right: 10px;" clearable />
|
|
||||||
<el-button type="primary" @click="init">搜索</el-button>
|
|
||||||
<el-button @click="resetdata">重置</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button :disabled="schoolId==''&& multipleSelection.length == 0" type="primary" @click="exportinfo"><img src="@/assets/visionscreening/exports.png" alt="" style="margin-right: 4px;" >导出</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading">
|
|
||||||
<el-table ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 425px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column fixed type="selection" width="55" />
|
|
||||||
<el-table-column fixed type="index" width="55" label="序号" align="center" />
|
|
||||||
<el-table-column fixed prop="student_name" label="姓名" width="100" />
|
|
||||||
<el-table-column prop="gender" label="性别" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.gender == '1'">男</span>
|
|
||||||
<span v-if="scope.row.gender == '2'">女</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="age" label="年龄" width="80" />
|
|
||||||
<el-table-column prop="birth_date" label="出生日期" width="120" align="center" />
|
|
||||||
<el-table-column prop="nation" label="民族" width="80" align="center" />
|
|
||||||
<el-table-column prop="study_code" label="学籍号" width="190" align="center" />
|
|
||||||
<el-table-column prop="id_code" label="身份证" width="180" align="center" />
|
|
||||||
<el-table-column prop="grade_name" label="所属年级" min-width="90" />
|
|
||||||
<el-table-column prop="class_name" label="所属班级" min-width="90" />
|
|
||||||
<el-table-column prop="address" label="操作" width="60" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/visionscreening/lookdetails.png" alt="" title="" @click="lookinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Viewfile v-if="isViewfile" :url="ViewfileUrl" :showTime="true" :title="'筛查结果报告'" :type="'docx'" :clientHeight="600" @update="CloseView"/>
|
|
||||||
</div>
|
|
||||||
<el-dialog
|
|
||||||
width="41%"
|
|
||||||
class="viewItemFileDialog"
|
|
||||||
title="普查分析报告"
|
|
||||||
v-model='dialogVisible'
|
|
||||||
:before-close="handleClose"
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
:close-on-press-escape="false"
|
|
||||||
draggable>
|
|
||||||
<iframe v-if="dialogVisible" id="reportid" ref="reportiframe" :src="reportsrc" frameborder="0" name="text" height="700px" width="100%"></iframe>
|
|
||||||
<button style="cursor: pointer;position: absolute;top: 22px;right: 50px;">
|
|
||||||
<img src="@/assets/tableicon/u884.png" title="导出pdf" @click="exportclick">
|
|
||||||
</button>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.contents-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
:deep(){
|
|
||||||
// .el-input{
|
|
||||||
// width: 240px;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRight {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 285px);
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 20px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-select--large .el-select__wrapper{
|
|
||||||
min-height: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height: 40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// margin-left: 10px;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content{
|
|
||||||
// height: 40px;
|
|
||||||
// padding-left: 12px !important;
|
|
||||||
// color: #505050;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
// color: #409eff;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: #ecf5ff;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: transparent;
|
|
||||||
// // #ecf5ff
|
|
||||||
// }
|
|
||||||
// .el-tree-node__expand-icon{
|
|
||||||
// color: #333333;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
justify-content:space-between;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.QRbox{
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.statistics-text{
|
|
||||||
color:#949494;
|
|
||||||
margin-right:35px;
|
|
||||||
}
|
|
||||||
.custom-tree-node {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
font-size: 14px;
|
|
||||||
padding-right: 8px;
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.custom-tree-node, .treedelicon, .treeediticon{
|
|
||||||
font-size: 14px !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,932 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'printcode' // 打印二维码
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, ref } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTable} from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { querySchoolGradeList } from "@/api/regionmodule/schoolGrade";
|
|
||||||
import { querySchoolClassList } from "@/api/regionmodule/schoolClass";
|
|
||||||
import { queryExamineSchoolTree,queryExamineResultPage,queryRulesSchoolList,
|
|
||||||
studentPersonQRCode,studentMultiplePersonQRCode,studentAllPersonQRCode,
|
|
||||||
AllSchoolPersonQRCode,queryPlanStudentList,addExamineStudent,exportStudentQueueDataTemplate,
|
|
||||||
delExamineResult,updateGradeClassExamineResult,addAllExamineStudent } from "@/api/planscreening";
|
|
||||||
import { downloadFile } from '@/utils/index'
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
import Viewfile from "@/views/component/Viewfile.vue";
|
|
||||||
import { useUserStore } from '@/store/modules/user';
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const url = userStore.webApiBaseUrl;
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const schoolName =ref("")
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const exportText = ref("")
|
|
||||||
const tableData = ref([])
|
|
||||||
const multipleSelection = ref([])
|
|
||||||
const genderoptions:any = ref([{label:'男',value:'1'},{label:'女',value:'2'}])
|
|
||||||
const loading = ref(false)
|
|
||||||
// 左侧树
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "name" }
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const treeLoading = ref(false)
|
|
||||||
const treeData:any = ref([])
|
|
||||||
function getTree(){
|
|
||||||
if(props.planInfo.exam_type == '01'){
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
orgId: props.planInfo.org_id,
|
|
||||||
orgType: props.planInfo.org_type,
|
|
||||||
};
|
|
||||||
treeLoading.value = true
|
|
||||||
queryExamineSchoolTree(params).then((res) => {
|
|
||||||
treeData.value = publicTree(res.data,"")
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
//获取表格类型
|
|
||||||
let params = {
|
|
||||||
planId:props.planInfo.id
|
|
||||||
}
|
|
||||||
treeLoading.value = true
|
|
||||||
queryRulesSchoolList(params).then((res) => {
|
|
||||||
treeData.value = res.data;
|
|
||||||
treeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
treeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// 初始化
|
|
||||||
function init(){
|
|
||||||
let params:any = {
|
|
||||||
studentName:queryInfo.value.studentName,
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
gradeId: queryInfo.value.gradeId,
|
|
||||||
classId: queryInfo.value.classId,
|
|
||||||
examType: props.planInfo.exam_type,
|
|
||||||
examStatus: queryInfo.value.examStatus,
|
|
||||||
current:queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size,
|
|
||||||
custom3:queryInfo.value.custom3,
|
|
||||||
};
|
|
||||||
|
|
||||||
if(nodeData.value.org_type =='5'){
|
|
||||||
params.schoolId = nodeData.value.id
|
|
||||||
params.regionId = ""
|
|
||||||
}else{
|
|
||||||
params.regionId = nodeData.value.id
|
|
||||||
params.schoolId = ""
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
queryExamineResultPage(params).then((res) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const nodeData:any = ref({})
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0,
|
|
||||||
studentName:"",
|
|
||||||
gender:"",
|
|
||||||
custom3:""
|
|
||||||
}
|
|
||||||
nodeData.value = data
|
|
||||||
if(data.org_type == "5"){
|
|
||||||
parentId.value = data.id
|
|
||||||
orgType.value = "5"
|
|
||||||
schoolId.value = data.id
|
|
||||||
schoolName.value = data.name
|
|
||||||
}else{
|
|
||||||
parentId.value = ""
|
|
||||||
schoolId.value = ""
|
|
||||||
schoolName.value = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
gradeinData.value = []
|
|
||||||
classData.value = []
|
|
||||||
getGrade()
|
|
||||||
init()
|
|
||||||
};
|
|
||||||
const ViewfileUrl = ref("")
|
|
||||||
const title= ref("")
|
|
||||||
const onprint= ref("no")
|
|
||||||
const filetype = ref("pdf")
|
|
||||||
const orgType:any = ref("")
|
|
||||||
const schoolId:any = ref("")
|
|
||||||
const parentId:any = ref("")
|
|
||||||
const isViewfile = ref(false)
|
|
||||||
function CloseView(){
|
|
||||||
isViewfile.value = false
|
|
||||||
}
|
|
||||||
// 查看个人学生二维码信息
|
|
||||||
function exportStudentPerson(row:any){
|
|
||||||
let params = {
|
|
||||||
id: row.student_id,
|
|
||||||
planId: row.plan_id,
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
studentPersonQRCode(params).then((response:any) => {
|
|
||||||
loading.value = false
|
|
||||||
downloadFile(response, row.student_name + '筛查告知书' , 'docx')
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function studentMultiplePerson(row:any){
|
|
||||||
let ids = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
ids.push(item.student_id)
|
|
||||||
})
|
|
||||||
let params = {
|
|
||||||
ids: ids.join(","),
|
|
||||||
planId:props.planInfo.id
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
studentMultiplePersonQRCode(params).then((response:any) => {
|
|
||||||
loading.value = false
|
|
||||||
downloadFile(response, schoolName.value +'-多人筛查告知书' , 'docx')
|
|
||||||
}).catch(()=>{
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function exportStudentQueueData(){
|
|
||||||
let params = {
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
schoolId:schoolId.value,
|
|
||||||
gradeId:queryInfo.value.gradeId,
|
|
||||||
classId:queryInfo.value.classId,
|
|
||||||
}
|
|
||||||
loading.value = true
|
|
||||||
exportText.value = "正在生成队列,请耐心等待"
|
|
||||||
exportStudentQueueDataTemplate(params).then((response:any) => {
|
|
||||||
loading.value = false
|
|
||||||
exportText.value = ''
|
|
||||||
downloadFile(response, schoolName.value + '-队列清单' , 'xls')
|
|
||||||
}).catch(()=>{
|
|
||||||
exportText.value = ''
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
//查看二维码
|
|
||||||
function printQRcode(){
|
|
||||||
title.value="打印预览"
|
|
||||||
onprint.value="no"
|
|
||||||
filetype.value="pdf"
|
|
||||||
let params = {
|
|
||||||
orgType: orgType.value,
|
|
||||||
parentId:parentId.value,
|
|
||||||
studentName:queryInfo.value.studentName,
|
|
||||||
examStatus:queryInfo.value.examStatus,
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
}
|
|
||||||
if(queryInfo.value.examStatus == undefined || queryInfo.value.examStatus == undefined){
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-result/examineResultStudentQRCode?orgType=' + params.orgType +
|
|
||||||
"&planId=" + params.planId + "&parentId=" + params.parentId + "&studentName=" + params.studentName
|
|
||||||
}else{
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-result/examineResultStudentQRCode?orgType=' + params.orgType +
|
|
||||||
"&planId=" + params.planId + "&parentId=" + params.parentId + "&studentName=" + params.studentName + "&examStatus=" + params.examStatus
|
|
||||||
}
|
|
||||||
|
|
||||||
isViewfile.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function exportQRcode(){
|
|
||||||
let params = {
|
|
||||||
orgType: orgType.value,
|
|
||||||
parentId:parentId.value,
|
|
||||||
studentName:queryInfo.value.studentName,
|
|
||||||
gender:queryInfo.value.gender,
|
|
||||||
planId:props.planInfo.id,
|
|
||||||
schoolid:parentId.value,
|
|
||||||
examStatus:queryInfo.value.examStatus
|
|
||||||
}
|
|
||||||
|
|
||||||
loading.value = true
|
|
||||||
exportText.value = "正在导出,由于内容较大,请耐心等待"
|
|
||||||
if(queryInfo.value.examStatus != "" &&queryInfo.value.examStatus != undefined && queryInfo.value.total<1000){ // 未检漏检
|
|
||||||
studentAllPersonQRCode(params).then((response:any) => {
|
|
||||||
loading.value = false
|
|
||||||
exportText.value = ''
|
|
||||||
downloadFile(response, schoolName.value + '-多人筛查告知书' , 'docx')
|
|
||||||
}).catch(()=>{
|
|
||||||
exportText.value = ''
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
} else if(orgType.value == "5" && queryInfo.value.studentName == "" && queryInfo.value.gender == ""){
|
|
||||||
AllSchoolPersonQRCode(params).then((response:any) => {
|
|
||||||
loading.value = false
|
|
||||||
exportText.value = ''
|
|
||||||
downloadFile(response, schoolName.value + '-多人筛查告知书' , 'zip')
|
|
||||||
}).catch(()=>{
|
|
||||||
exportText.value = ''
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
}else{
|
|
||||||
studentAllPersonQRCode(params).then((response:any) => {
|
|
||||||
loading.value = false
|
|
||||||
exportText.value = ''
|
|
||||||
downloadFile(response, schoolName.value + '-多人筛查告知书' , 'docx')
|
|
||||||
}).catch(()=>{
|
|
||||||
exportText.value = ''
|
|
||||||
loading.value = false
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ViewfileUrl.value = url + '/vision_examine/examine-result/examineResultStudentQRCode?orgType=' + params.orgType +
|
|
||||||
// "&planId=" + params.planId + "&parentId=" + params.parentId + "&studentName=" + params.studentName + "&gender=" + params.gender
|
|
||||||
// isViewfile.value = true
|
|
||||||
}
|
|
||||||
// 选中打印二维码
|
|
||||||
function printSelectedQRcode(){
|
|
||||||
title.value="打印预览"
|
|
||||||
onprint.value="no"
|
|
||||||
filetype.value="pdf"
|
|
||||||
let ids = [] as any[];
|
|
||||||
multipleSelection.value.forEach((item: any) => {
|
|
||||||
ids.push(item.student_id)
|
|
||||||
})
|
|
||||||
ViewfileUrl.value = url + '/vision_examine/examine-result/downloadSelectedQRCode?parentId=' + parentId.value +
|
|
||||||
"&planId=" + props.planInfo.id +
|
|
||||||
"&ids=" + ids
|
|
||||||
isViewfile.value = true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleSelectionChange(val:any){
|
|
||||||
multipleSelection.value = val
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function resetdata(){
|
|
||||||
queryInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0,
|
|
||||||
studentName:"",
|
|
||||||
gender:"",
|
|
||||||
custom3:""
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
getTree()
|
|
||||||
init()
|
|
||||||
});
|
|
||||||
|
|
||||||
const gradeinData:any = ref([])
|
|
||||||
const classData:any = ref([])
|
|
||||||
|
|
||||||
function getGrade(){
|
|
||||||
let params:any = {}
|
|
||||||
params.schoolId = schoolId.value
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
querySchoolGradeList(params).then((res) => {
|
|
||||||
gradeinData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getClass(id:any){
|
|
||||||
let params = {
|
|
||||||
gradeId: id
|
|
||||||
}
|
|
||||||
if(id != "" && id != null){
|
|
||||||
orgType.value = "6"
|
|
||||||
parentId.value = id
|
|
||||||
}else{
|
|
||||||
orgType.value = "5"
|
|
||||||
parentId.value = schoolId.value
|
|
||||||
}
|
|
||||||
classData.value = []
|
|
||||||
queryInfo.value.classId = ""
|
|
||||||
if(id != null && id != '' ){
|
|
||||||
querySchoolClassList(params).then((res) => {
|
|
||||||
classData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
function getQueryClass(id:any){
|
|
||||||
if(id != ""&& id != null){
|
|
||||||
orgType.value = "7"
|
|
||||||
parentId.value = id
|
|
||||||
}else {
|
|
||||||
orgType.value = "6"
|
|
||||||
parentId.value = queryInfo.value.gradeId
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}
|
|
||||||
const studentList = ref([])
|
|
||||||
const studentVisible = ref(false)
|
|
||||||
const studentload =ref(false)
|
|
||||||
|
|
||||||
const queryStudentInfo:any = ref({})
|
|
||||||
function addStudent(){
|
|
||||||
studentVisible.value = true
|
|
||||||
queryStudentInfo.value = {
|
|
||||||
current:1,
|
|
||||||
size:20,
|
|
||||||
total:0,
|
|
||||||
name:"",
|
|
||||||
gender:""
|
|
||||||
}
|
|
||||||
studentInfo()
|
|
||||||
}
|
|
||||||
function searchInit(){
|
|
||||||
queryStudentInfo.value.current = 1
|
|
||||||
studentInfo()
|
|
||||||
}
|
|
||||||
const studentText = ref('')
|
|
||||||
function studentInfo(){
|
|
||||||
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
name:queryStudentInfo.value.name,
|
|
||||||
current:queryStudentInfo.value.current,
|
|
||||||
size:queryStudentInfo.value.size,
|
|
||||||
}
|
|
||||||
studentText.value = '正在加载学生信息,请耐心等待...'
|
|
||||||
studentload.value = true
|
|
||||||
studentList.value = []
|
|
||||||
queryPlanStudentList(params).then((res) => {
|
|
||||||
studentList.value = res.data.records;
|
|
||||||
queryStudentInfo.value.total = res.data.total
|
|
||||||
studentload.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
studentload.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const studentSelection:any = ref([])
|
|
||||||
function studentSelectionChange(val:any){
|
|
||||||
studentSelection.value = val
|
|
||||||
}
|
|
||||||
|
|
||||||
function confirm(){
|
|
||||||
let ids = [] as any[];
|
|
||||||
studentSelection.value.forEach((item: any) => {
|
|
||||||
ids.push(item.id)
|
|
||||||
})
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
ids:ids.join(",")
|
|
||||||
}
|
|
||||||
studentText.value = '正在关联学生信息,请耐心等待...'
|
|
||||||
studentload.value = true
|
|
||||||
addExamineStudent(params).then((res:any) => {
|
|
||||||
if(res.code == '0'){
|
|
||||||
queryInfo.value.current= 1
|
|
||||||
init()
|
|
||||||
ElMessage({
|
|
||||||
message: "添加成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
ElMessage({
|
|
||||||
message: "添加失败",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
studentVisible.value = false
|
|
||||||
studentload.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
studentload.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function confirmAll(){
|
|
||||||
ElMessageBox.confirm('确定添加全部学生信息吗?', '提示', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(() => {
|
|
||||||
let params = {
|
|
||||||
planId: props.planInfo.id,
|
|
||||||
}
|
|
||||||
studentText.value = '正在关联学生信息,请耐心等待...'
|
|
||||||
studentload.value = true
|
|
||||||
addAllExamineStudent(params).then((res:any) => {
|
|
||||||
if(res.code == '0'){
|
|
||||||
queryInfo.value.current= 1
|
|
||||||
init()
|
|
||||||
ElMessage({
|
|
||||||
message: "添加成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
ElMessage({
|
|
||||||
message: "添加失败",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
studentVisible.value = false
|
|
||||||
studentload.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
studentload.value = false
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const studentForm:any = ref({})
|
|
||||||
|
|
||||||
function delStudent(row:any){
|
|
||||||
|
|
||||||
ElMessageBox.confirm('确定删除' +row.student_name + '的视力筛查信息吗?', '提示', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(() => {
|
|
||||||
|
|
||||||
delExamineResult({id:row.id}).then((res:any) => {
|
|
||||||
if(res.code =='0'){
|
|
||||||
ElMessage({
|
|
||||||
message: "删除成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
init()
|
|
||||||
}else{
|
|
||||||
ElMessage({
|
|
||||||
message: "删除失败",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}).catch(()=>{
|
|
||||||
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const gradeinAdjustData:any =ref([])
|
|
||||||
const classAdjustData:any =ref([])
|
|
||||||
const studentAdjustVisible:any =ref(false)
|
|
||||||
function editStudent(row:any){
|
|
||||||
|
|
||||||
studentForm.value ={
|
|
||||||
id:row.id,
|
|
||||||
studentName:row.student_name,
|
|
||||||
gradeId:'',
|
|
||||||
gradeCode:'',
|
|
||||||
gradeName:'',
|
|
||||||
classId:'',
|
|
||||||
classCode:'',
|
|
||||||
className:''
|
|
||||||
}
|
|
||||||
studentAdjustVisible.value= true
|
|
||||||
getAdjustGrade(row.school_id)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function getAdjustGrade(id){
|
|
||||||
let params:any = {
|
|
||||||
schoolId: id
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
studentForm.value.classId = ""
|
|
||||||
studentForm.value.gradeId = ""
|
|
||||||
gradeinAdjustData.value = []
|
|
||||||
classAdjustData.value = []
|
|
||||||
querySchoolGradeList(params).then((res) => {
|
|
||||||
gradeinAdjustData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getAdjustClass(id:any){
|
|
||||||
let params = {
|
|
||||||
gradeId: id
|
|
||||||
}
|
|
||||||
for(let i = 0;i<gradeinAdjustData.value.length;i++){
|
|
||||||
if(gradeinAdjustData.value[i].id == id){
|
|
||||||
studentForm.value.gradeCode = gradeinAdjustData.value[i].code
|
|
||||||
studentForm.value.gradeName = gradeinAdjustData.value[i].name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
classAdjustData.value = []
|
|
||||||
studentForm.value.classId = ""
|
|
||||||
querySchoolClassList(params).then((res) => {
|
|
||||||
classAdjustData.value = res.data;
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getAdjustClassName(id){
|
|
||||||
|
|
||||||
for(let i = 0;i<classAdjustData.value.length;i++){
|
|
||||||
if(classAdjustData.value[i].id == id){
|
|
||||||
studentForm.value.classCode = classAdjustData.value[i].code
|
|
||||||
studentForm.value.className = classAdjustData.value[i].name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
debugger
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleClose(){
|
|
||||||
studentAdjustVisible.value= false
|
|
||||||
}
|
|
||||||
function confirmClick(){
|
|
||||||
if(studentForm.value.gradeId =='' || studentForm.value.gradeId == null){
|
|
||||||
ElMessage({
|
|
||||||
message: "请选择年级",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if(studentForm.value.classId =='' || studentForm.value.classId == null){
|
|
||||||
ElMessage({
|
|
||||||
message: "请选择班级",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
return
|
|
||||||
}
|
|
||||||
updateGradeClassExamineResult(studentForm.value).then((res:any) => {
|
|
||||||
if(res.code =='0'){
|
|
||||||
studentAdjustVisible.value= false
|
|
||||||
ElMessage({
|
|
||||||
message: "调班成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
init()
|
|
||||||
}else{
|
|
||||||
ElMessage({
|
|
||||||
message: "调班失败",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}).catch(()=>{
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="printcode-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">数据列表</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData"
|
|
||||||
default-expand-all
|
|
||||||
:highlight-current="true" :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 350px); overflow: auto">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRight">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div>
|
|
||||||
<el-input v-model="queryInfo.studentName" placeholder="学生姓名" style="width: 90px;" clearable />
|
|
||||||
<el-select v-model="queryInfo.gradeId" @change="getClass" class="ml-4" placeholder="选择年级" clearable size="large" style="width: 120px"
|
|
||||||
:disabled="schoolId == ''">
|
|
||||||
<el-option v-for="item in gradeinData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.classId" @change="getQueryClass" class="ml-4" placeholder="选择班级" clearable size="large" style="width: 120px"
|
|
||||||
:disabled="queryInfo.gradeId==''|| queryInfo.gradeId==null">
|
|
||||||
<el-option v-for="item in classData" :key="item.id" :label="item.name" :value="item.id"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.examStatus" class="ml-4" placeholder="筛查状态" size="large" style="width: 120px" clearable @change="init">
|
|
||||||
<el-option :key="'00'" :label="'未检'" :value="'00'"/>
|
|
||||||
<el-option :key="'01'" :label="'已检'" :value="'01'"/>
|
|
||||||
<el-option :key="'02'" :label="'漏检'" :value="'02'"/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="queryInfo.custom3" class="ml-4" placeholder="是否新增学生" size="large" style="width: 140px" clearable @change="init">
|
|
||||||
<el-option :label="'是'" :value="'1'"/>
|
|
||||||
<el-option :label="'否'" :value="'2'"/>
|
|
||||||
</el-select>
|
|
||||||
<el-button type="primary" @click="init" style="margin-left:10px ;">搜索</el-button>
|
|
||||||
<el-button @click="resetdata">重置</el-button>
|
|
||||||
<el-button type="primary" @click="addStudent" style="margin-left:10px ;">添加学生</el-button>
|
|
||||||
<el-button type="primary" @click="exportStudentQueueData" :disabled="schoolId==''" style="margin-left:10px ;">生成队列</el-button>
|
|
||||||
<el-button type="primary" @click="printQRcode" :disabled="schoolId==''">
|
|
||||||
<img src="@/assets/visionscreening/printallQR.png" style="padding-right: 5px;" alt="">打印全部
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" :disabled="schoolId==''" @click="exportQRcode">
|
|
||||||
导出全部
|
|
||||||
</el-button>
|
|
||||||
<el-button :disabled="multipleSelection.length <= 0" :type="multipleSelection.length > 0 ? 'primary' : ''" @click="printSelectedQRcode">
|
|
||||||
<img v-if="multipleSelection.length == 0" src="@/assets/visionscreening/disabledprintQR.png" style="padding-right: 5px;" alt="">
|
|
||||||
<img v-if="multipleSelection.length != 0" src="@/assets/visionscreening/printallQR.png" style="padding-right: 5px;" alt="">
|
|
||||||
打印
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="studentMultiplePerson" :disabled="multipleSelection.length <= 0" :type="multipleSelection.length > 0 ? 'primary' : ''">
|
|
||||||
导出
|
|
||||||
</el-button>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading" :element-loading-text="exportText">
|
|
||||||
<el-table ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 445px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<!-- <el-table-column prop="student_code" label="学生代码" width="100" /> -->
|
|
||||||
<el-table-column prop="student_name" label="学生姓名" width="120" />
|
|
||||||
<el-table-column prop="gender" label="性别" width="80" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.gender == '1'">男</span>
|
|
||||||
<span v-if="scope.row.gender == '2'">女</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="age" label="年龄" width="80" />
|
|
||||||
<el-table-column prop="birth_date" label="出生日期" width="120" align="center"/>
|
|
||||||
<el-table-column prop="nation" label="民族" width="80" align="center"/>
|
|
||||||
<el-table-column prop="study_code" label="学籍号" width="190" align="center"/>
|
|
||||||
<el-table-column prop="grade_name" label="所属年级" width="120"/>
|
|
||||||
<el-table-column prop="class_name" label="所属班级" />
|
|
||||||
<el-table-column prop="id_code" label="身份证" width="180" align="center"/>
|
|
||||||
<el-table-column prop="address" label="操作" width="120" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-between;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/visionscreening/spotcheck.png" title="修改"
|
|
||||||
style="cursor: pointer;" alt="" @click="editStudent(scope.row)">
|
|
||||||
<img src="@/assets/tableicon/u186.png" title="删除"
|
|
||||||
style="cursor: pointer;" alt="" @click="delStudent(scope.row)">
|
|
||||||
<img src="@/assets/visionscreening/exportts.png" title="导出"
|
|
||||||
style="cursor: pointer;" alt="" @click="exportStudentPerson(scope.row)">
|
|
||||||
<!-- <el-button type="primary" size="small" @click="exportStudentPerson(scope.row)">导出</el-button> -->
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="init" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Viewfile v-if="isViewfile" :url="ViewfileUrl" :showTime="true" :title="title" :onprint="onprint" :type="filetype" :clientHeight="600" @update="CloseView"/>
|
|
||||||
<el-dialog v-model="studentVisible" title="普检未关联学生信息列表" draggable width="1280">
|
|
||||||
<div style="margin-bottom: 10px;display:flex ; justify-content: space-between;">
|
|
||||||
<div>
|
|
||||||
<el-input v-model="queryStudentInfo.name" placeholder="请输入学生姓名" style="width: 200px;" clearable />
|
|
||||||
<el-button type="primary" @click="searchInit" style="margin-left:10px ;">搜索</el-button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<el-button type="primary" @click="confirmAll" style="margin-left:10px ;" :disabled="studentload">关联所有未关联学生</el-button>
|
|
||||||
<el-button type="primary" @click="confirm" style="margin-left:10px ;" :disabled="studentload">确定关联</el-button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<el-table v-loading="studentload" :element-loading-text="studentText"
|
|
||||||
ref="multipleTableRefs" :data="studentList" border style="width: 100%; height:calc(100vh - 445px)"
|
|
||||||
@selection-change="studentSelectionChange"
|
|
||||||
:header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<!-- <el-table-column prop="student_code" label="学生代码" width="100" /> -->
|
|
||||||
<el-table-column prop="name" label="学生姓名" width="100" />
|
|
||||||
<el-table-column prop="gender" label="性别" width="60" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.gender == '1'">男</span>
|
|
||||||
<span v-if="scope.row.gender == '2'">女</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="age" label="年龄" width="60" />
|
|
||||||
<el-table-column prop="birth_date" label="出生日期" width="120" align="center"/>
|
|
||||||
<el-table-column prop="study_code" label="学籍号" width="190" align="center"/>
|
|
||||||
<el-table-column prop="school_name" label="所属学校" min-width="130"/>
|
|
||||||
<el-table-column prop="grade_name" label="所属年级" width="130"/>
|
|
||||||
<el-table-column prop="class_name" label="所属班级" width="120"/>
|
|
||||||
<el-table-column prop="id_code" label="身份证" width="180" align="center"/>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryStudentInfo.total" v-model:size="queryStudentInfo.size" v-model:current="queryStudentInfo.current"
|
|
||||||
@pagination="studentInfo" />
|
|
||||||
</el-dialog>
|
|
||||||
<el-dialog v-model="studentAdjustVisible" title="调整班级" draggable width="600">
|
|
||||||
<el-form ref="infoForm" :model="studentForm" label-width="100px">
|
|
||||||
<el-form-item label="学生姓名">
|
|
||||||
<span>{{ studentForm.studentName }}</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="调整年级">
|
|
||||||
<el-select v-model="studentForm.gradeId" class="!w-full" placeholder="请选择年级"
|
|
||||||
@change="getAdjustClass">
|
|
||||||
<el-option v-for="(i, index) in gradeinAdjustData" :key="i.id" :label="i.name"
|
|
||||||
:value="i.id"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="调整班级">
|
|
||||||
<el-select v-model="studentForm.classId" class="!w-full" placeholder="请选择班级" @change="getAdjustClassName">
|
|
||||||
<el-option v-for="(i, index) in classAdjustData" :key="i.id" :label="i.name"
|
|
||||||
:value="i.id"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
</el-form>
|
|
||||||
<span class="dialog-footer">
|
|
||||||
<el-button style="padding: 10px 15px" @click="handleClose">取 消</el-button>
|
|
||||||
<el-button type="primary" style="padding: 10px 15px" @click="confirmClick">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.printcode-box{
|
|
||||||
margin-top: 15px;
|
|
||||||
height: 100%;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
.box-search{
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height:40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// width: 240px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#silderLeft {
|
|
||||||
width: 242px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
.silderRight {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 285px);
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 20px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
:deep(.el-select--large .el-select__wrapper){
|
|
||||||
min-height: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height: 40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// margin-left: 10px;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content{
|
|
||||||
// height: 40px;
|
|
||||||
// padding-left: 12px !important;
|
|
||||||
// color: #505050;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
// color: #409eff;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: #ecf5ff;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: transparent;
|
|
||||||
// // #ecf5ff
|
|
||||||
// }
|
|
||||||
// .el-tree-node__expand-icon{
|
|
||||||
// color: #333333;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
.searchinfo{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.my-header{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
.icontext{
|
|
||||||
font-size: 12px;
|
|
||||||
color: #787878;
|
|
||||||
width: 25px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
img{
|
|
||||||
padding-left: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.QRbox{
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,625 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'visionScreening' // 视力普查
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules } from "element-plus";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import { queryRegion } from "@/api/regionmodule/region";
|
|
||||||
import { queryVisionExamineItemList,queryExaminePlanPage,addExaminePlan,updateExaminePlan,delExaminePlan,queryPlanNum,getPlanCode } from "@/api/planscreening";
|
|
||||||
import { querySchoolList } from "@/api/regionmodule/school";
|
|
||||||
import Planmanage from "./planmanage.vue";
|
|
||||||
import Viewreport from "./viewreport.vue";
|
|
||||||
import { publicTree } from '@/utils/validate';
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const planName = ref('')
|
|
||||||
const org_name = ref('')
|
|
||||||
const tableData = ref([])
|
|
||||||
const dialogFormVisible = ref(false)
|
|
||||||
const dialogtitle = ref('新增普查计划')
|
|
||||||
const form:any = ref({})
|
|
||||||
const planform = ref();
|
|
||||||
const moduleinfo1 = ref(true);
|
|
||||||
const moduleinfo2 = ref(false);
|
|
||||||
const moduleinfo3 = ref(false);
|
|
||||||
const moduleinfo4 = ref(false);
|
|
||||||
const rules = reactive<FormRules>({
|
|
||||||
plan_code: [{ required: true, message: "请输入计划代码", trigger: "blur" }],
|
|
||||||
plan_name: [{ required: true, message: "请输入计划名称", trigger: "blur" }]
|
|
||||||
});
|
|
||||||
const planYear:any = ref()
|
|
||||||
const planCode = ref("")
|
|
||||||
const tempName = ref("")
|
|
||||||
//获取学年
|
|
||||||
function getYear(){
|
|
||||||
var date = new Date();
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month:any = date.getMonth() + 1;
|
|
||||||
if(month >= 3 && month < 9){
|
|
||||||
planYear.value = (year - 1)+'-' + '2'
|
|
||||||
planCode.value = (year - 1) + '02'
|
|
||||||
tempName.value = (year - 1) + '年第二学期'
|
|
||||||
}else{
|
|
||||||
planYear.value = year + '-'+ '1'
|
|
||||||
planCode.value = year + '01'
|
|
||||||
tempName.value = year + '年第一学期'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 拼接
|
|
||||||
|
|
||||||
}
|
|
||||||
const org_id =ref("")
|
|
||||||
function addinfo(){
|
|
||||||
getYear()
|
|
||||||
dialogtitle.value = '新增计划'
|
|
||||||
form.value = {}
|
|
||||||
|
|
||||||
|
|
||||||
isSwitch.value = false
|
|
||||||
dialogFormVisible.value = true
|
|
||||||
}
|
|
||||||
function editinfo(row:any){
|
|
||||||
form.value = JSON.parse(JSON.stringify(row))
|
|
||||||
examItemsData.value = []
|
|
||||||
if(form.value.exam_items != ""){
|
|
||||||
let examItemsArr = JSON.parse(form.value.exam_items)
|
|
||||||
for(let j=0;j<examItemsArr.length;j++){
|
|
||||||
examItemsData.value.push(examItemsArr[j].code +',' + examItemsArr[j].name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
isSwitch.value = false
|
|
||||||
dialogtitle.value = '修改普查计划'
|
|
||||||
dialogFormVisible.value = true
|
|
||||||
}
|
|
||||||
const isSwitch = ref(false)
|
|
||||||
function infosubmit(formEl: any){
|
|
||||||
formEl.validate((valid: any) => {
|
|
||||||
if (valid) {
|
|
||||||
if(examItemsData.value.length ==0){
|
|
||||||
ElMessage({
|
|
||||||
message: "请选择筛查项目!",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if(form.value.org_name =='' || form.value.org_name ==null ){
|
|
||||||
ElMessage({
|
|
||||||
message: "请选择组织机构!",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isSwitch.value == true){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isSwitch.value = true
|
|
||||||
let tempData:any = []
|
|
||||||
for(let i=0;i<examItemsData.value.length;i++){
|
|
||||||
tempData.push({
|
|
||||||
code:examItemsData.value[i].split(',')[0],
|
|
||||||
name:examItemsData.value[i].split(',')[1]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if (form.value.id) {
|
|
||||||
const data:any = {
|
|
||||||
id:form.value.id,
|
|
||||||
orgId: form.value.org_id,
|
|
||||||
orgName: form.value.org_name,
|
|
||||||
orgType: form.value.org_type,
|
|
||||||
planCode: form.value.plan_code,
|
|
||||||
planName: form.value.plan_name,
|
|
||||||
planYear: form.value.plan_year,
|
|
||||||
examType: "01", //普查
|
|
||||||
visInstIds:"",
|
|
||||||
examItems:JSON.stringify(tempData),
|
|
||||||
planStartDate:form.value.plan_start_date,
|
|
||||||
planEndDate:form.value.plan_end_date,
|
|
||||||
};
|
|
||||||
updateExaminePlan(data).then((item) => {
|
|
||||||
dialogFormVisible.value = false;
|
|
||||||
ElMessage({
|
|
||||||
message: "修改成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getData();
|
|
||||||
}).catch(()=>{
|
|
||||||
isSwitch.value = false
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
const data:any = {
|
|
||||||
orgId: form.value.org_id,
|
|
||||||
orgName: form.value.org_name,
|
|
||||||
orgType: form.value.org_type,
|
|
||||||
planCode: form.value.plan_code,
|
|
||||||
planName: form.value.plan_name,
|
|
||||||
planYear: form.value.plan_year,
|
|
||||||
examType: "01", // 5- 学校
|
|
||||||
visInstIds:"",
|
|
||||||
examItems:JSON.stringify(tempData),
|
|
||||||
};
|
|
||||||
addExaminePlan(data).then((item) => {
|
|
||||||
dialogFormVisible.value = false;
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: "新增成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
}).catch(()=>{
|
|
||||||
isSwitch.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function delinfo(row: any) {
|
|
||||||
ElMessageBox.confirm("确定删除此普查计划吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let params = {
|
|
||||||
ids: row.id,
|
|
||||||
};
|
|
||||||
delExaminePlan(params).then((res:any) => {
|
|
||||||
|
|
||||||
if( res.code == '0'){
|
|
||||||
getData();
|
|
||||||
ElMessage({
|
|
||||||
message: "删除成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const loading =ref(false)
|
|
||||||
function getData(){
|
|
||||||
|
|
||||||
let params = {
|
|
||||||
planName: planName.value,
|
|
||||||
orgName: org_name.value,
|
|
||||||
examType:'01',
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size
|
|
||||||
};
|
|
||||||
params.planName = planName.value.replace(/\s+/g, "");
|
|
||||||
params.orgName = org_name.value.replace(/\s+/g, "");
|
|
||||||
loading.value = true
|
|
||||||
queryExaminePlanPage(params).then((res:any) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
for(let i=0;i<res.data.records.length;i++){
|
|
||||||
if(res.data.records[i].exam_items != null && res.data.records[i].exam_items != ''){
|
|
||||||
let examItemsArr = JSON.parse(res.data.records[i].exam_items)
|
|
||||||
let examItemsTemp = []
|
|
||||||
for(let j=0;j<examItemsArr.length;j++){
|
|
||||||
examItemsTemp.push(examItemsArr[j].name)
|
|
||||||
}
|
|
||||||
res.data.records[i].examItems = examItemsTemp.join("、")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function planclick(row:any){
|
|
||||||
form.value = row
|
|
||||||
moduleinfo1.value = false
|
|
||||||
moduleinfo2.value = true
|
|
||||||
moduleinfo3.value = false
|
|
||||||
}
|
|
||||||
function viewreportclick(row:any){
|
|
||||||
form.value = row
|
|
||||||
moduleinfo1.value = false
|
|
||||||
moduleinfo2.value = false
|
|
||||||
moduleinfo3.value = true
|
|
||||||
}
|
|
||||||
function handleClose(){
|
|
||||||
if (planform.value != null) planform.value.resetFields();
|
|
||||||
dialogFormVisible.value = false
|
|
||||||
}
|
|
||||||
function returnClick(){
|
|
||||||
moduleinfo1.value = true
|
|
||||||
moduleinfo2.value = false
|
|
||||||
moduleinfo3.value = false
|
|
||||||
}
|
|
||||||
function reportreturnClick(){
|
|
||||||
moduleinfo1.value = true
|
|
||||||
moduleinfo2.value = false
|
|
||||||
moduleinfo3.value = false
|
|
||||||
}
|
|
||||||
const VisionExamineItemList:any = ref([])
|
|
||||||
const examItemsData:any =ref([])
|
|
||||||
function cityChange(e:any){
|
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
queryVisionExamineItemList({}).then((res) => {
|
|
||||||
VisionExamineItemList.value = res.data;
|
|
||||||
for(let i=0;i<res.data.length;i++){
|
|
||||||
if(i<2){
|
|
||||||
examItemsData.value.push(res.data[i].item_code +',' + res.data[i].item_name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
getData();
|
|
||||||
});
|
|
||||||
|
|
||||||
const dialogVisible = ref(false)
|
|
||||||
function viewOrg(){
|
|
||||||
SchoolData.value = []
|
|
||||||
getTree()
|
|
||||||
dialogVisible.value = true
|
|
||||||
}
|
|
||||||
function regionClose(){
|
|
||||||
dialogVisible.value = false
|
|
||||||
}
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
//搜索内容
|
|
||||||
const regionName = ref("");
|
|
||||||
const orgId = ref("")
|
|
||||||
const orgName = ref("")
|
|
||||||
const orgType = ref("")
|
|
||||||
// 左侧树
|
|
||||||
const treedata: any = ref([]);
|
|
||||||
const defaultProps = { label: "name" };
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
orgId.value = data.id;
|
|
||||||
orgName.value = data.custom1
|
|
||||||
orgType.value = data.type
|
|
||||||
getSchoolData()
|
|
||||||
// getData();
|
|
||||||
};
|
|
||||||
const schoolClick = (data: Tree) => {
|
|
||||||
orgId.value = data.id;
|
|
||||||
orgName.value = data.name
|
|
||||||
orgType.value = '5'
|
|
||||||
};
|
|
||||||
|
|
||||||
function confirmsubmit(){
|
|
||||||
queryPlanNum({planYear:planYear.value,examType:"01",orgid:orgId.value}).then((res:any) => {
|
|
||||||
if(res.code == 0){
|
|
||||||
if(res.data>8){
|
|
||||||
planCode.value = planCode.value + (res.data+1)
|
|
||||||
}else{
|
|
||||||
planCode.value = planCode.value +"0" +""+ (res.data+1)
|
|
||||||
}
|
|
||||||
tempName.value = tempName.value + '第'+(res.data+1) +'次视力筛查'
|
|
||||||
form.value.plan_name = tempName.value
|
|
||||||
// form.value.plan_code = planCode.value
|
|
||||||
form.value.org_id = orgId.value
|
|
||||||
form.value.org_name = orgName.value
|
|
||||||
form.value.org_type= orgType.value
|
|
||||||
if(orgName.value != null){
|
|
||||||
form.value.plan_name = orgName.value.replace(/\s*/g,"")+'-' + tempName.value
|
|
||||||
}else{
|
|
||||||
form.value.plan_name = tempName.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
getPlanCode({planYear:planYear.value,examType:"01"}).then((res:any) => {
|
|
||||||
form.value.plan_code = res.data
|
|
||||||
})
|
|
||||||
form.value.plan_year = planYear.value
|
|
||||||
dialogVisible.value = false
|
|
||||||
}
|
|
||||||
|
|
||||||
const treeloading =ref(false)
|
|
||||||
const tempData = ref([])
|
|
||||||
//获取行政区域
|
|
||||||
function getTree() {
|
|
||||||
const params = {
|
|
||||||
name: regionName.value,
|
|
||||||
status:'01'
|
|
||||||
};
|
|
||||||
treeloading.value = true
|
|
||||||
queryRegion(params).then((res: any) => {
|
|
||||||
orgName.value = ""
|
|
||||||
orgId.value = ""
|
|
||||||
orgType.value = ""
|
|
||||||
tempData.value = JSON.parse(JSON.stringify(res.data))
|
|
||||||
treedata.value = publicTree(res.data,"")
|
|
||||||
treeloading.value = false
|
|
||||||
})
|
|
||||||
.catch((error:any)=>{
|
|
||||||
treeloading.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const SchoolData = ref([])
|
|
||||||
const schoolloading =ref(false)
|
|
||||||
//获取医生列表
|
|
||||||
function getSchoolData() {
|
|
||||||
if(orgId.value == ''){
|
|
||||||
SchoolData.value = []
|
|
||||||
return
|
|
||||||
}
|
|
||||||
schoolName.value = schoolName.value.replace(/\s+/g, "");
|
|
||||||
let params = {
|
|
||||||
name: schoolName.value,
|
|
||||||
regionId: orgId.value,
|
|
||||||
type:orgType.value
|
|
||||||
};
|
|
||||||
schoolloading.value = true
|
|
||||||
querySchoolList(params).then((res) => {
|
|
||||||
SchoolData.value = res.data;
|
|
||||||
schoolloading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
schoolloading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function searchInit(){
|
|
||||||
treedata.value = publicTree(tempData.value,regionName.value)
|
|
||||||
}
|
|
||||||
const schoolName = ref("")
|
|
||||||
function searchSchoolInit(){
|
|
||||||
getSchoolData()
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div v-show="moduleinfo1" class="w-full">
|
|
||||||
<div v-show="moduleinfo1" class="visionscreening-box">
|
|
||||||
<div class="visionscreening-box-top">
|
|
||||||
<div class="flex">
|
|
||||||
<el-input v-model="planName" style="width:200px" placeholder="请输入计划名称" clearable />
|
|
||||||
<el-input v-model="org_name" style="width:200px;margin-left:10px" placeholder="请输入组织机构名称" clearable />
|
|
||||||
<el-button type="primary" class="ml-[10px]" @click="getData">搜索</el-button>
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" @click="addinfo"><img src="@/assets/visionscreening/jscz_xz.png" alt="" style="margin-right: 4px;" >新增普检计划</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="visionscreening-box-bottom">
|
|
||||||
<el-table :data="tableData" border style="width: 100%; height:calc(100vh - 290px)" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="plan_code" label="计划编号" width="120" />
|
|
||||||
<el-table-column prop="plan_name" label="计划名称" width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<div v-if="scope.row.display ==true" style="display: flex;align-items: center;">
|
|
||||||
<div style="margin-right:10px ;">{{ scope.row.plan_name }}</div>
|
|
||||||
<img src="@/assets/tableicon/u4891.svg" alt="" >
|
|
||||||
</div>
|
|
||||||
<span v-else>{{ scope.row.plan_name }}</span>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="plan_year" label="计划学年" width="100" />
|
|
||||||
<el-table-column prop="examItems" label="筛查项目" />
|
|
||||||
<el-table-column prop="org_name" label="组织机构" width="120"/>
|
|
||||||
<el-table-column prop="org_type" label="机构类型" width="120" align="center" >
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.org_type =='2'">省/直辖市</span>
|
|
||||||
<span v-if="scope.row.org_type =='3'">市/自治州</span>
|
|
||||||
<span v-if="scope.row.org_type =='4'">区/县/县级市</span>
|
|
||||||
<span v-if="scope.row.org_type =='5'">学校</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="plan_start_date" width="120" label="开始日期" align="center"/>
|
|
||||||
<el-table-column prop="plan_end_date" width="120" label="结束日期" align="center"/>
|
|
||||||
<el-table-column prop="status" width="100" label="状态" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.status === '01'" style="color:#409EFF">初始创建</span>
|
|
||||||
<!-- <span v-else-if="scope.row.status === 1" style="color:#FF9900">筛查中</span> -->
|
|
||||||
<span v-else style="color:#009966">筛查完成</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="address" width="120" label="完成日期" />
|
|
||||||
<el-table-column prop="address" label="操作" width="140" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/MenuIcon/lbcz_xg.png" alt="" title="修改" @click="editinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/visionscreening/bg-jhgl.png" alt="" title="计划管理" @click="planclick(scope.row)" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/visionscreening/bg-ckbg.png" alt="" title="查看报告" @click="viewreportclick(scope.row)" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/MenuIcon/lbcz_sc.png" alt="" title="删除" @click="delinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getData" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<el-dialog v-model="dialogFormVisible" :close-on-click-modal="false" :title="dialogtitle" :before-close="handleClose" width="620px" draggable append-to-body>
|
|
||||||
<el-form ref="planform" :model="form" :rules="rules" label-width="90px">
|
|
||||||
<el-form-item label="组织机构">
|
|
||||||
<el-input v-if="form.id==null" v-model="form.org_name" autocomplete="off" placeholder="请输入组织机构" disabled style="width: 390px;" />
|
|
||||||
<el-button v-if="form.id==null" type="primary" class="ml-[5px]" @click="viewOrg">选择</el-button>
|
|
||||||
<el-input v-if="form.id!=null" v-model="form.org_name" autocomplete="off" placeholder="请输入组织机构" disabled style="width: 100%;" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="计划学年">
|
|
||||||
<el-input v-model="form.plan_year" autocomplete="off" placeholder="请输入计划学年" disabled/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="计划名称" prop="plan_name">
|
|
||||||
<el-input v-model="form.plan_name" autocomplete="off" placeholder="请输入计划名称" />
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="筛查项目">
|
|
||||||
<el-checkbox-group v-model="examItemsData" @change="cityChange">
|
|
||||||
<el-checkbox v-for="city in VisionExamineItemList" :label="city.item_code +',' + city.item_name" :key="city.item_code">
|
|
||||||
{{ city.item_name }}
|
|
||||||
</el-checkbox>
|
|
||||||
</el-checkbox-group>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="机构类型">
|
|
||||||
<el-radio-group v-model="form.org_type" disabled>
|
|
||||||
<el-radio :label="'2'" size="large">省/直辖市</el-radio>
|
|
||||||
<el-radio :label="'3'" size="large">市/自治州</el-radio>
|
|
||||||
<el-radio :label="'4'" size="large">区/县/县级市</el-radio>
|
|
||||||
<el-radio :label="'5'" size="large">学校</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="开始日期">
|
|
||||||
<el-date-picker v-model="form.plan_start_date" type="date" style="width:100%" placeholder="请输入开始日期"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="结束日期">
|
|
||||||
<el-date-picker v-model="form.plan_end_date" type="date" style="width:100%" placeholder="请输入结束日期"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<span class="dialog-footer">
|
|
||||||
<el-button @click="handleClose">取消</el-button>
|
|
||||||
<el-button type="primary" @click="infosubmit(planform)">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<el-dialog v-model="dialogVisible" :close-on-click-modal="false" :title="'查看组织机构'"
|
|
||||||
:before-close="regionClose" width="620px" draggable append-to-body>
|
|
||||||
<div class="tscheck" style="display: flex;justify-content: space-between;">
|
|
||||||
<div class="leftbox" style="width: 100%;">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">行政区域</div>
|
|
||||||
</div>
|
|
||||||
<el-input v-model="regionName" placeholder="请输入行政区域" clearable style="width: 500px;margin-left: 10px;margin-bottom: 10px;"
|
|
||||||
@input="searchInit" />
|
|
||||||
<el-tree v-loading="treeloading"
|
|
||||||
ref="treeRef" node-key="id" :data="treedata" :props="defaultProps"
|
|
||||||
:expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 320px); overflow: auto;margin-left: 10px;">
|
|
||||||
<template #default="{ node, data }">
|
|
||||||
<span class="custom-tree-node">
|
|
||||||
<el-radio v-model="orgId" :label="data.id">{{ node.label }}</el-radio>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<!-- <div class="leftbox" style="margin-left: 20px;width: 300px;">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">学校</div>
|
|
||||||
</div>
|
|
||||||
<el-input v-model="schoolName" placeholder="请输入学校名称" clearable style="width: 230px;margin-left: 10px;margin-bottom: 10px;"
|
|
||||||
@keyup.enter="searchSchoolInit" />
|
|
||||||
<el-tree v-loading="schoolloading" default-expand-all
|
|
||||||
node-key="id" :data="SchoolData" :props="defaultProps"
|
|
||||||
:expand-on-click-node="false"
|
|
||||||
@node-click="schoolClick" style="height: calc(100vh - 320px); overflow: auto;margin-left: 10px;">
|
|
||||||
<template #default="{ node, data }">
|
|
||||||
<span class="custom-tree-node">
|
|
||||||
<el-radio v-model="orgId" :label="data.id">{{ node.label }}</el-radio>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-tree>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
</div>
|
|
||||||
<span class="dialog-footer" style="margin-top:10px ;margin-right:10px">
|
|
||||||
<el-button @click="regionClose">取消</el-button>
|
|
||||||
<el-button type="primary" @click="confirmsubmit">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
<Planmanage v-if="moduleinfo2" :planInfo="form" @returnClick="returnClick" />
|
|
||||||
<Viewreport v-if="moduleinfo3" :planInfo="form" @reportreturnClick="reportreturnClick" />
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
|
|
||||||
.visionscreening-box {
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
padding: 20px;
|
|
||||||
.visionscreening-box-top{
|
|
||||||
width:100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height:40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// width: 240px;
|
|
||||||
// }
|
|
||||||
// .el-button{
|
|
||||||
// height:40px;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.dialog-footer {
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
}
|
|
||||||
// :deep(){
|
|
||||||
// .el-input{
|
|
||||||
// height: 40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// }
|
|
||||||
// .el-form-item--default .el-form-item__label{
|
|
||||||
// height: 40px;
|
|
||||||
// line-height: 40px;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
:deep(.el-tree-node__content){
|
|
||||||
height: 30px;
|
|
||||||
|
|
||||||
}
|
|
||||||
// :deep(.el-tree-node.is-current > .el-tree-node__content){
|
|
||||||
// background-color: transparent !important;
|
|
||||||
// }
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 150px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 15px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
background: rgba(246, 247, 250, 1);
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
.line{
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.leftbox{
|
|
||||||
width: 250px;
|
|
||||||
height: calc(100vh - 200px);
|
|
||||||
border: 1px solid #e1e1e1;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.tscheck {
|
|
||||||
:deep(){
|
|
||||||
.el-radio__input.is-checked+.el-radio__label{
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
.el-radio__input.is-checked .el-radio__inner{
|
|
||||||
border: 1px solid #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
@ -1,183 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'planmanage' // 计划管理
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick } from "vue";
|
|
||||||
import Associztionschool from './components/associationschool.vue';
|
|
||||||
import Printcode from "./components/printcode.vue";
|
|
||||||
import Checkprogress from "./components/checkprogress.vue";
|
|
||||||
import Dataanalysis from "./components/dataanalysis.vue";
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const Associztionschooldiv = ref()
|
|
||||||
const Printcodediv = ref()
|
|
||||||
const Checkprogressdiv = ref()
|
|
||||||
const Dataanalysisdiv = ref()
|
|
||||||
const examItems = ref('')
|
|
||||||
const menulist:any = ref({menuname1:true,menuname2:false,menuname3:false,menuname4:false})
|
|
||||||
onMounted(() => {
|
|
||||||
let tempData = []
|
|
||||||
if(props.planInfo.exam_items != null &&props.planInfo.exam_items != ""){
|
|
||||||
let exam_items = JSON.parse(props.planInfo.exam_items)
|
|
||||||
for(let i=0;i<exam_items.length;i++ )
|
|
||||||
tempData.push(exam_items[i].name)
|
|
||||||
}
|
|
||||||
examItems.value = tempData.join("、")
|
|
||||||
|
|
||||||
});
|
|
||||||
function init(){
|
|
||||||
|
|
||||||
}
|
|
||||||
function menuswith(type:any){
|
|
||||||
if(type === 1){
|
|
||||||
menulist.value.menuname1 = true
|
|
||||||
menulist.value.menuname2 = false
|
|
||||||
menulist.value.menuname3 = false
|
|
||||||
menulist.value.menuname4 = false
|
|
||||||
}else if(type === 2){
|
|
||||||
menulist.value.menuname1 = false
|
|
||||||
menulist.value.menuname2 = true
|
|
||||||
menulist.value.menuname3 = false
|
|
||||||
menulist.value.menuname4 = false
|
|
||||||
} else if(type === 3){
|
|
||||||
menulist.value.menuname1 = false
|
|
||||||
menulist.value.menuname2 = false
|
|
||||||
menulist.value.menuname3 = true
|
|
||||||
menulist.value.menuname4 = false
|
|
||||||
} else {
|
|
||||||
menulist.value.menuname1 = false
|
|
||||||
menulist.value.menuname2 = false
|
|
||||||
menulist.value.menuname3 = false
|
|
||||||
menulist.value.menuname4 = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//返回
|
|
||||||
const emit = defineEmits(['returnClick'])
|
|
||||||
function returnClick(){
|
|
||||||
menulist.value = {menuname1:true,menuname2:false,menuname3:false,menuname4:false}
|
|
||||||
emit('returnClick')
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="planmanage-box">
|
|
||||||
<div class="planmanage-box-top">
|
|
||||||
<div class="box-top1">
|
|
||||||
<div class="box-top1-title">{{ planInfo.plan_name }}</div>
|
|
||||||
<div class="return" @click="returnClick">
|
|
||||||
<img src="@/assets/tableicon/u549.png" alt="">
|
|
||||||
<div style="padding-left: 2px;padding-top: 2px;">返回</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="box-top2">
|
|
||||||
<div style="width:160px;" class="box-top2-text">年度:<span class="box-top2-texts">{{ planInfo.plan_year }}</span></div>
|
|
||||||
<div style="min-width:220px;" class="box-top2-text">组织机构:<span class="box-top2-texts">{{ planInfo.org_name }}</span></div>
|
|
||||||
<div style="min-width:280px;" class="box-top2-text">筛选项目:<span class="box-top2-texts">{{ examItems }}</span></div>
|
|
||||||
<div style="width:220px;" class="box-top2-text">开始时间:<span class="box-top2-texts">{{planInfo.plan_start_date}}</span></div>
|
|
||||||
<div style="width:150px;" class="box-top2-text">结束时间:<span class="box-top2-texts">{{ planInfo.plan_end_date }}</span></div>
|
|
||||||
</div>
|
|
||||||
<div class="box-top3">
|
|
||||||
<div :class="[menulist.menuname1?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(1)">关联学校</div>
|
|
||||||
<div :class="[menulist.menuname2?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(2)">打印二维码</div>
|
|
||||||
<div :class="[menulist.menuname3?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(3)">检查进度</div>
|
|
||||||
<div :class="[menulist.menuname4?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(4)">数据分析</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Associztionschool ref="Associztionschooldiv" :planInfo="planInfo" v-if="menulist.menuname1" />
|
|
||||||
<Printcode ref="Printcodediv" v-if="menulist.menuname2" :planInfo="planInfo"/>
|
|
||||||
<Checkprogress ref="Checkprogressdiv" v-if="menulist.menuname3" :planInfo="planInfo"/>
|
|
||||||
<Dataanalysis ref="Dataanalysisdiv" v-if="menulist.menuname4" :planInfo="planInfo"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.planmanage-box{
|
|
||||||
width: 100%;
|
|
||||||
.planmanage-box-top{
|
|
||||||
width: 100%;
|
|
||||||
height: 140px;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 20px;
|
|
||||||
.box-top1{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.box-top1-title{
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
color: #363636;
|
|
||||||
font-size:24px;
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-button{
|
|
||||||
width: 54px;
|
|
||||||
height: 26px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
.el-button:focus, .el-button:hover{
|
|
||||||
background-color: #ecf5ff;
|
|
||||||
color:#409eff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-top2{
|
|
||||||
display: flex;
|
|
||||||
margin-top: 11px;
|
|
||||||
.box-top2-text{
|
|
||||||
font-size: 14px;
|
|
||||||
color:#949494;
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
.box-top2-texts{
|
|
||||||
font-size: 14px;
|
|
||||||
color:#363636;
|
|
||||||
padding-left: 11px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-top3{
|
|
||||||
display: flex;
|
|
||||||
margin-top: 16px;
|
|
||||||
.box-top3-info{
|
|
||||||
// height: 50px;
|
|
||||||
font-size: 14px;
|
|
||||||
margin-right: 40px;
|
|
||||||
padding-bottom: 12px;
|
|
||||||
// border-bottom: 3px solid #409eff;
|
|
||||||
color: #505050;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.box-top3-info:hover{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.menucheckstyle{
|
|
||||||
border-bottom: 3px solid #409eff;
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.return{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #409EFF;
|
|
||||||
width: 50px;
|
|
||||||
height: 26px;
|
|
||||||
border: 1px solid #C6E2FF;
|
|
||||||
background: rgb(236, 245, 255);
|
|
||||||
border-radius:4px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,172 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'planmanages' // 抽检-计划管理
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick } from "vue";
|
|
||||||
import Printcode from "./components/printcode.vue";
|
|
||||||
import Checkprogress from "./components/checkprogress.vue";
|
|
||||||
import Dataanalysiss from "./components/dataanalysiss.vue";
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const Printcodediv = ref()
|
|
||||||
const Checkprogressdiv = ref()
|
|
||||||
const Dataanalysissdiv = ref()
|
|
||||||
|
|
||||||
const menulist:any = ref({menuname1:true,menuname2:false,menuname3:false})
|
|
||||||
const examItems = ref('')
|
|
||||||
onMounted(() => {
|
|
||||||
let tempData = []
|
|
||||||
if(props.planInfo.exam_items != null &&props.planInfo.exam_items != ""){
|
|
||||||
let exam_items = JSON.parse(props.planInfo.exam_items)
|
|
||||||
for(let i=0;i<exam_items.length;i++ )
|
|
||||||
tempData.push(exam_items[i].name)
|
|
||||||
}
|
|
||||||
examItems.value = tempData.join("、")
|
|
||||||
});
|
|
||||||
function init(){
|
|
||||||
|
|
||||||
}
|
|
||||||
function menuswith(type:any){
|
|
||||||
if(type === 1){
|
|
||||||
menulist.value.menuname1 = true
|
|
||||||
menulist.value.menuname2 = false
|
|
||||||
menulist.value.menuname3 = false
|
|
||||||
}else if(type === 2){
|
|
||||||
menulist.value.menuname1 = false
|
|
||||||
menulist.value.menuname2 = true
|
|
||||||
menulist.value.menuname3 = false
|
|
||||||
} else if(type === 3){
|
|
||||||
menulist.value.menuname1 = false
|
|
||||||
menulist.value.menuname2 = false
|
|
||||||
menulist.value.menuname3 = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//返回
|
|
||||||
const emit = defineEmits(['returnClick'])
|
|
||||||
function returnClick(){
|
|
||||||
menulist.value = {menuname1:true,menuname2:false,menuname3:false}
|
|
||||||
emit('returnClick')
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="planmanage-box">
|
|
||||||
<div class="planmanage-box-top">
|
|
||||||
<div class="box-top1">
|
|
||||||
<div class="box-top1-title">{{ planInfo.plan_name }}</div>
|
|
||||||
<div class="return" @click="returnClick">
|
|
||||||
<img src="@/assets/tableicon/u549.png" alt="">
|
|
||||||
<div style="padding-left: 2px;padding-top: 2px;">返回</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="box-top2">
|
|
||||||
<div style="width:160px;" class="box-top2-text">年度:<span class="box-top2-texts">{{ planInfo.plan_year }}</span></div>
|
|
||||||
<div style="min-width:220px;" class="box-top2-text">组织机构:<span class="box-top2-texts">{{ planInfo.org_name }}</span></div>
|
|
||||||
<div style="min-width:280px;" class="box-top2-text">筛选项目:<span class="box-top2-texts">{{ examItems }}</span></div>
|
|
||||||
<div style="width:220px;" class="box-top2-text">开始时间:<span class="box-top2-texts">{{planInfo.plan_start_date}}</span></div>
|
|
||||||
<div style="width:150px;" class="box-top2-text">结束时间:<span class="box-top2-texts">{{ planInfo.plan_end_date }}</span></div>
|
|
||||||
</div>
|
|
||||||
<div class="box-top3">
|
|
||||||
<div :class="[menulist.menuname1?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(1)">打印二维码</div>
|
|
||||||
<div :class="[menulist.menuname2?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(2)">检查进度</div>
|
|
||||||
<div :class="[menulist.menuname3?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(3)">数据分析</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Printcode ref="Printcodediv" v-if="menulist.menuname1" :planInfo="planInfo" />
|
|
||||||
<Checkprogress ref="Checkprogressdiv" v-if="menulist.menuname2" :planInfo="planInfo"/>
|
|
||||||
<Dataanalysiss ref="Dataanalysissdiv" v-if="menulist.menuname3" :planInfo="planInfo"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.planmanage-box{
|
|
||||||
width: 100%;
|
|
||||||
.planmanage-box-top{
|
|
||||||
width: 100%;
|
|
||||||
height: 140px;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 20px;
|
|
||||||
.box-top1{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.box-top1-title{
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
color: #363636;
|
|
||||||
font-size:24px;
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-button{
|
|
||||||
width: 54px;
|
|
||||||
height: 26px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
.el-button:focus, .el-button:hover{
|
|
||||||
background-color: #ecf5ff;
|
|
||||||
color:#409eff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-top2{
|
|
||||||
display: flex;
|
|
||||||
margin-top: 11px;
|
|
||||||
.box-top2-text{
|
|
||||||
font-size: 14px;
|
|
||||||
color:#949494;
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
.box-top2-texts{
|
|
||||||
font-size: 14px;
|
|
||||||
color:#363636;
|
|
||||||
padding-left: 11px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-top3{
|
|
||||||
display: flex;
|
|
||||||
margin-top: 16px;
|
|
||||||
.box-top3-info{
|
|
||||||
// height: 50px;
|
|
||||||
font-size: 14px;
|
|
||||||
margin-right: 40px;
|
|
||||||
padding-bottom: 12px;
|
|
||||||
// border-bottom: 3px solid #409eff;
|
|
||||||
color: #505050;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.box-top3-info:hover{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.menucheckstyle{
|
|
||||||
border-bottom: 3px solid #409eff;
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.return{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #409EFF;
|
|
||||||
width: 50px;
|
|
||||||
height: 26px;
|
|
||||||
border: 1px solid #C6E2FF;
|
|
||||||
background: rgb(236, 245, 255);
|
|
||||||
border-radius:4px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,160 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'viewreport' // 查看报告
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick } from "vue";
|
|
||||||
import Inspectreport from './components/inspectreport.vue';
|
|
||||||
import Personalreports from './components/personalreports.vue';
|
|
||||||
const props:any = defineProps({
|
|
||||||
planInfo: {
|
|
||||||
required: false,
|
|
||||||
type: Object,
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const Inspectreportdiv = ref()
|
|
||||||
const Personalreportsdiv = ref()
|
|
||||||
|
|
||||||
const menulist:any = ref({menuname1:true,menuname2:false})
|
|
||||||
const examItems = ref('')
|
|
||||||
onMounted(() => {
|
|
||||||
let tempData = []
|
|
||||||
if(props.planInfo.exam_items != null &&props.planInfo.exam_items != ""){
|
|
||||||
let exam_items = JSON.parse(props.planInfo.exam_items)
|
|
||||||
for(let i=0;i<exam_items.length;i++ )
|
|
||||||
tempData.push(exam_items[i].name)
|
|
||||||
}
|
|
||||||
examItems.value = tempData.join("、")
|
|
||||||
|
|
||||||
});
|
|
||||||
function menuswith(type:any){
|
|
||||||
if(type === 1){
|
|
||||||
menulist.value.menuname1 = true
|
|
||||||
menulist.value.menuname2 = false
|
|
||||||
}else{
|
|
||||||
menulist.value.menuname1 = false
|
|
||||||
menulist.value.menuname2 = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//返回
|
|
||||||
const emit = defineEmits(['reportreturnClick'])
|
|
||||||
function reportreturnClick(){
|
|
||||||
menulist.value = {menuname1:true,menuname2:false}
|
|
||||||
emit('reportreturnClick')
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="contents-box">
|
|
||||||
<div class="content-box-top">
|
|
||||||
<div class="box-top1">
|
|
||||||
<div class="box-top1-title">{{ planInfo.plan_name }}</div>
|
|
||||||
<div class="return" @click="reportreturnClick">
|
|
||||||
<img src="@/assets/tableicon/u549.png" alt="">
|
|
||||||
<div style="padding-left: 2px;padding-top: 2px;">返回</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="box-top2">
|
|
||||||
<div style="width:160px;" class="box-top2-text">年度:<span class="box-top2-texts">{{ planInfo.plan_year }}</span></div>
|
|
||||||
<div style="min-width:220px;" class="box-top2-text">组织机构:<span class="box-top2-texts">{{ planInfo.org_name }}</span></div>
|
|
||||||
<div style="min-width:280px;" class="box-top2-text">筛选项目:<span class="box-top2-texts">{{ examItems }}</span></div>
|
|
||||||
<div style="width:220px;" class="box-top2-text">开始时间:<span class="box-top2-texts">{{planInfo.plan_start_date}}</span></div>
|
|
||||||
<div style="width:150px;" class="box-top2-text">结束时间:<span class="box-top2-texts">{{ planInfo.plan_end_date }}</span></div>
|
|
||||||
</div>
|
|
||||||
<!-- <div class="box-top3">
|
|
||||||
<div :class="[menulist.menuname1?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(1)">普检报告</div>
|
|
||||||
<div :class="[menulist.menuname2?'menucheckstyle':'']" class="box-top3-info" @click="menuswith(2)">个人报告</div>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
|
||||||
<!-- <Inspectreport ref="Inspectreportdiv" v-if="menulist.menuname1" :planInfo="planInfo"/> -->
|
|
||||||
<Personalreports ref="Personalreportsdiv" :planInfo="planInfo"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.contents-box{
|
|
||||||
width: 100%;
|
|
||||||
.content-box-top{
|
|
||||||
width: 100%;
|
|
||||||
height: 140px;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0px 0px 10px rgba(219, 225, 236, 1);
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 20px;
|
|
||||||
.box-top1{
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.box-top1-title{
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
color: #363636;
|
|
||||||
font-size:24px;
|
|
||||||
}
|
|
||||||
:deep(){
|
|
||||||
.el-button{
|
|
||||||
width: 54px;
|
|
||||||
height: 26px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
.el-button:focus, .el-button:hover{
|
|
||||||
background-color: #ecf5ff;
|
|
||||||
color:#409eff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-top2{
|
|
||||||
display: flex;
|
|
||||||
margin-top: 11px;
|
|
||||||
.box-top2-text{
|
|
||||||
font-size: 14px;
|
|
||||||
color:#949494;
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
.box-top2-texts{
|
|
||||||
font-size: 14px;
|
|
||||||
color:#363636;
|
|
||||||
padding-left: 11px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.box-top3{
|
|
||||||
display: flex;
|
|
||||||
margin-top: 16px;
|
|
||||||
.box-top3-info{
|
|
||||||
// height: 50px;
|
|
||||||
font-size: 14px;
|
|
||||||
margin-right: 40px;
|
|
||||||
padding-bottom: 12px;
|
|
||||||
// border-bottom: 3px solid #409eff;
|
|
||||||
color: #505050;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.box-top3-info:hover{
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
.menucheckstyle{
|
|
||||||
border-bottom: 3px solid #409eff;
|
|
||||||
color: #409eff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.return{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #409EFF;
|
|
||||||
width: 50px;
|
|
||||||
height: 26px;
|
|
||||||
border: 1px solid #C6E2FF;
|
|
||||||
background: rgb(236, 245, 255);
|
|
||||||
border-radius:4px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,853 +0,0 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: 'visualinspection' // 视力抽检
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { onMounted, reactive, ref, nextTick,watch } from "vue";
|
|
||||||
import { ElMessage, ElMessageBox, FormRules,ElTree } from "element-plus";
|
|
||||||
import { queryExaminePlanYear } from "@/api/planscreening/visualinspection";
|
|
||||||
import { addExaminePlan,queryExaminePlanPage,updateExaminePlan,delExaminePlan,addSpotCheckExamineSchool,queryRulesSchoolList,queryPlanNum,getPlanCode} from "@/api/planscreening";
|
|
||||||
import Page from '@/components/Pagination/page.vue';
|
|
||||||
import Planmanages from "./planmanages.vue";
|
|
||||||
import { queryRegionById } from "@/api/regionmodule/region";
|
|
||||||
import { querySchoolList } from "@/api/regionmodule/school";
|
|
||||||
|
|
||||||
import { queryByIdsSchoolGradeList } from "@/api/regionmodule/schoolGrade";
|
|
||||||
import { queryByIdsSchoolClassList } from "@/api/regionmodule/schoolClass";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const queryInfo :any = ref({
|
|
||||||
current:1,
|
|
||||||
size:10,
|
|
||||||
total:0
|
|
||||||
})
|
|
||||||
const searchval = ref('')
|
|
||||||
const planname = ref('')
|
|
||||||
const tableData = ref([])
|
|
||||||
const dialogFormVisible = ref(false)
|
|
||||||
const dialogtitle = ref('新增抽检计划')
|
|
||||||
const dialogVisible = ref(false)
|
|
||||||
const form:any = ref({})
|
|
||||||
const planform = ref();
|
|
||||||
const moduleinfo1 = ref(true);
|
|
||||||
const moduleinfo2 = ref(false);
|
|
||||||
const allchecked = ref(false)
|
|
||||||
const institutiondata = ref([])
|
|
||||||
const allgradechecked = ref(false)
|
|
||||||
const allclasschecked = ref(false)
|
|
||||||
const genderradio = ref('0')
|
|
||||||
const checkratio = ref('')
|
|
||||||
const loading = ref(false)
|
|
||||||
const treedata: any = ref([]);
|
|
||||||
const treeloading = ref(false)
|
|
||||||
const defaultProps = { label: "plan_name" }
|
|
||||||
const checktreeform:any = ref({})
|
|
||||||
const filterText = ref('')
|
|
||||||
const isCreateInspect =ref(false)
|
|
||||||
//树形控件类型定义
|
|
||||||
interface Tree {
|
|
||||||
[x: string]: any;
|
|
||||||
label: string;
|
|
||||||
children?: Tree[];
|
|
||||||
}
|
|
||||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
|
||||||
watch(filterText, (val:any) => {
|
|
||||||
treeRef.value!.filter(val)
|
|
||||||
})
|
|
||||||
const filterNode = (value: string, data: Tree) => {
|
|
||||||
if (!value) return true
|
|
||||||
return data.plan_name.includes(value)
|
|
||||||
}
|
|
||||||
const vMove = {
|
|
||||||
mounted(el: any) {
|
|
||||||
el.onmousedown = function (e: any) {
|
|
||||||
var init = e.clientX;
|
|
||||||
var parent: any = document.getElementById("silderLeft");
|
|
||||||
const initWidth: any = parent.offsetWidth;
|
|
||||||
document.onmousemove = function (e) {
|
|
||||||
var end = e.clientX;
|
|
||||||
var newWidth = end - init + initWidth;
|
|
||||||
parent.style.width = newWidth + "px";
|
|
||||||
};
|
|
||||||
document.onmouseup = function () {
|
|
||||||
document.onmousemove = document.onmouseup = null;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const handleNodeClick = (data: Tree) => {
|
|
||||||
checktreeform.value = data
|
|
||||||
getTableDate()
|
|
||||||
};
|
|
||||||
const rules = reactive<FormRules>({
|
|
||||||
plan_code: [{ required: true, message: "请输入计划代码", trigger: "blur" }],
|
|
||||||
plan_name: [{ required: true, message: "请输入计划名称", trigger: "blur" }]
|
|
||||||
});
|
|
||||||
onMounted(() => {
|
|
||||||
getData()
|
|
||||||
});
|
|
||||||
const planCode = ref("")
|
|
||||||
const tempName = ref("")
|
|
||||||
function getYear(){
|
|
||||||
let year = checktreeform.value.plan_year.split("-")[0]
|
|
||||||
let date = checktreeform.value.plan_year.split("-")[1]
|
|
||||||
if(date == "1"){
|
|
||||||
planCode.value = year + '01'
|
|
||||||
tempName.value = year + '年第一学期'
|
|
||||||
}else{
|
|
||||||
planCode.value = year + '02'
|
|
||||||
tempName.value = year + '年第二学期'
|
|
||||||
}
|
|
||||||
queryPlanNum({planYear:checktreeform.value.plan_year,examType:"02",orgid:checktreeform.value.org_id}).then((res:any) => {
|
|
||||||
if(res.code == 0){
|
|
||||||
if(res.data>8){
|
|
||||||
planCode.value = planCode.value + (res.data+1)
|
|
||||||
}else{
|
|
||||||
planCode.value = planCode.value +"0" +""+ (res.data+1)
|
|
||||||
}
|
|
||||||
tempName.value = checktreeform.value.org_name + tempName.value + '第'+(res.data+1) +'次视力抽检'
|
|
||||||
form.value.plan_name = tempName.value
|
|
||||||
// form.value.plan_code = planCode.value
|
|
||||||
}
|
|
||||||
})
|
|
||||||
getPlanCode({planYear:checktreeform.value.plan_year,examType:"02",orgid:form.value.org_id}).then((res:any) => {
|
|
||||||
form.value.plan_code = res.data
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
function addinfo(){
|
|
||||||
if (checktreeform.value.id === undefined) {
|
|
||||||
ElMessage({
|
|
||||||
message: "请选择普查计划!",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
dialogtitle.value = '新增抽检计划'
|
|
||||||
const forminfo = {
|
|
||||||
plan_code:'',
|
|
||||||
plan_name:'',
|
|
||||||
exam_type:'02',
|
|
||||||
plan_start_date:'',
|
|
||||||
plan_end_date:'',
|
|
||||||
status:'01',
|
|
||||||
org_name:checktreeform.value.org_name,
|
|
||||||
org_id:checktreeform.value.org_id,
|
|
||||||
org_type:checktreeform.value.org_type,
|
|
||||||
exam_items:checktreeform.value.exam_items,
|
|
||||||
general_plan_id:checktreeform.value.id,
|
|
||||||
plan_year:checktreeform.value.plan_year,
|
|
||||||
}
|
|
||||||
form.value = forminfo
|
|
||||||
getYear()
|
|
||||||
dialogFormVisible.value = true
|
|
||||||
}
|
|
||||||
function editinfo(row:any){
|
|
||||||
form.value = JSON.parse(JSON.stringify(row))
|
|
||||||
dialogtitle.value = '修改抽检计划'
|
|
||||||
dialogFormVisible.value = true
|
|
||||||
}
|
|
||||||
function infosubmit(formEl: any){
|
|
||||||
formEl.validate((valid: any) => {
|
|
||||||
if (valid) {
|
|
||||||
console.log(form.value.id)
|
|
||||||
if(form.value.id){
|
|
||||||
const data:any = {
|
|
||||||
id:form.value.id,
|
|
||||||
orgId: form.value.org_id,
|
|
||||||
orgName: form.value.org_name,
|
|
||||||
orgType: form.value.org_type,
|
|
||||||
planCode: form.value.plan_code,
|
|
||||||
planName: form.value.plan_name,
|
|
||||||
planYear: form.value.plan_year,
|
|
||||||
examType: "02",
|
|
||||||
visInstIds:"",
|
|
||||||
examItems:form.value.exam_items,
|
|
||||||
planStartDate:form.value.plan_start_date,
|
|
||||||
planEndDate:form.value.plan_end_date,
|
|
||||||
generalPlanId:form.value.general_plan_id
|
|
||||||
};
|
|
||||||
updateExaminePlan(data).then((item) => {
|
|
||||||
dialogFormVisible.value = false;
|
|
||||||
ElMessage({
|
|
||||||
message: "修改成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
getTableDate()
|
|
||||||
}).catch(()=>{
|
|
||||||
})
|
|
||||||
}else{
|
|
||||||
const data:any = {
|
|
||||||
id:form.value.id,
|
|
||||||
orgId: form.value.org_id,
|
|
||||||
orgName: form.value.org_name,
|
|
||||||
orgType: form.value.org_type,
|
|
||||||
planCode:form.value.plan_code,
|
|
||||||
planName: form.value.plan_name,
|
|
||||||
planYear: form.value.plan_year,
|
|
||||||
examType: "02", //普查
|
|
||||||
visInstIds:"",
|
|
||||||
examItems:form.value.exam_items,
|
|
||||||
planStartDate:form.value.plan_start_date,
|
|
||||||
planEndDate:form.value.plan_end_date,
|
|
||||||
generalPlanId:form.value.general_plan_id
|
|
||||||
};
|
|
||||||
addExaminePlan(data).then((res:any) => {
|
|
||||||
ElMessage({
|
|
||||||
message: "新增成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
dialogFormVisible.value = false
|
|
||||||
getTableDate()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const isSwitch = ref(false) // 提交开关
|
|
||||||
function rulessubmit(){
|
|
||||||
|
|
||||||
let params = {
|
|
||||||
planId:form.value.id,
|
|
||||||
gender:genderradio.value,
|
|
||||||
schoolIds:schoolIds.value.join(","),
|
|
||||||
gradeIds:gradeIds.value.join(","),
|
|
||||||
classIds:classIds.value.join(","),
|
|
||||||
ratio:checkratio.value // 抽查比例
|
|
||||||
}
|
|
||||||
if(isSwitch.value == true){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isSwitch.value = true
|
|
||||||
isCreateInspect.value = true
|
|
||||||
addSpotCheckExamineSchool(params).then(() => {
|
|
||||||
isCreateInspect.value = false
|
|
||||||
dialogVisible.value = false
|
|
||||||
ElMessage({
|
|
||||||
message: "添加成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
isSwitch.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
isCreateInspect.value = false
|
|
||||||
isSwitch.value = false
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
function delinfo(row: any) {
|
|
||||||
ElMessageBox.confirm("确定删除此普查计划吗?", "删除提示", {
|
|
||||||
confirmButtonText: "确定",
|
|
||||||
cancelButtonText: "取消",
|
|
||||||
type: "warning",
|
|
||||||
}).then(() => {
|
|
||||||
let params = {
|
|
||||||
ids: row.id,
|
|
||||||
};
|
|
||||||
delExaminePlan(params).then((res:any) => {
|
|
||||||
if( res.code == '0'){
|
|
||||||
getTableDate()
|
|
||||||
ElMessage({
|
|
||||||
message: "删除成功",
|
|
||||||
type: "success",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function searchclick(){
|
|
||||||
getTableDate()
|
|
||||||
}
|
|
||||||
function getData(){
|
|
||||||
let params = {
|
|
||||||
planName: planname.value,
|
|
||||||
examType:'01'
|
|
||||||
};
|
|
||||||
treeloading.value = true
|
|
||||||
queryExaminePlanYear(params).then((res:any) => {
|
|
||||||
treeloading.value = false
|
|
||||||
treedata.value = res.data
|
|
||||||
if(res.data.length> 0){
|
|
||||||
checktreeform.value = res.data[0]
|
|
||||||
getTableDate()
|
|
||||||
nextTick(() => {
|
|
||||||
treeRef.value?.setCurrentKey(checktreeform.value.id);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function getTableDate() {
|
|
||||||
let params = {
|
|
||||||
planName:searchval.value,
|
|
||||||
generalPlanId:checktreeform.value.id,
|
|
||||||
examType:'02',
|
|
||||||
current: queryInfo.value.current,
|
|
||||||
size:queryInfo.value.size
|
|
||||||
};
|
|
||||||
loading.value = true
|
|
||||||
queryExaminePlanPage(params).then((res:any) => {
|
|
||||||
tableData.value = res.data.records;
|
|
||||||
queryInfo.value.total = res.data.total
|
|
||||||
loading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function handleSelectionChange(){
|
|
||||||
|
|
||||||
}
|
|
||||||
function rulesclick(row:any){
|
|
||||||
|
|
||||||
form.value = row
|
|
||||||
allchecked.value = false
|
|
||||||
allgradechecked.value = false
|
|
||||||
allclasschecked.value = false
|
|
||||||
genderradio.value = '0'
|
|
||||||
checkratio.value = ''
|
|
||||||
schoolIds.value = []
|
|
||||||
gradeIds.value = []
|
|
||||||
gradeData.value = []
|
|
||||||
classIds.value = []
|
|
||||||
classData.value = []
|
|
||||||
getSchool()
|
|
||||||
// if(row.org_type != '5'){
|
|
||||||
// regionId.value = row.org_id
|
|
||||||
// getRegionTree()
|
|
||||||
// getSchool()
|
|
||||||
// }else{
|
|
||||||
|
|
||||||
// getSchool()
|
|
||||||
// }
|
|
||||||
|
|
||||||
dialogVisible.value = true
|
|
||||||
}
|
|
||||||
function planclick(row:any){
|
|
||||||
form.value = row
|
|
||||||
moduleinfo1.value = false
|
|
||||||
moduleinfo2.value = true
|
|
||||||
}
|
|
||||||
const gradeData:any = ref([])
|
|
||||||
const classData:any = ref([])
|
|
||||||
|
|
||||||
function allcheckchange(e:any,type:any){
|
|
||||||
if (type === '1') {
|
|
||||||
if(e == true){
|
|
||||||
schoolIds.value = []
|
|
||||||
for(let i =0;i<schoolData.value.length;i++) {
|
|
||||||
schoolIds.value.push(schoolData.value[i].id)
|
|
||||||
}
|
|
||||||
getGradesList()
|
|
||||||
}else{
|
|
||||||
schoolIds.value = []
|
|
||||||
gradeIds.value = []
|
|
||||||
gradeData.value = []
|
|
||||||
classIds.value = []
|
|
||||||
classData.value = []
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (type === '2') {
|
|
||||||
if(e == true){
|
|
||||||
gradeIds.value = []
|
|
||||||
for(let i =0;i<gradeData.value.length;i++) {
|
|
||||||
gradeIds.value.push(gradeData.value[i].id)
|
|
||||||
}
|
|
||||||
getClassList()
|
|
||||||
}else{
|
|
||||||
gradeIds.value = []
|
|
||||||
classIds.value = []
|
|
||||||
classData.value = []
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(e == true){
|
|
||||||
classIds.value = []
|
|
||||||
for(let i =0;i<classData.value.length;i++) {
|
|
||||||
classIds.value.push(classData.value[i].id)
|
|
||||||
}
|
|
||||||
getClassList()
|
|
||||||
}else{
|
|
||||||
classIds.value = []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 选中
|
|
||||||
function schoolChange(e:any){
|
|
||||||
|
|
||||||
gradeIds.value = []
|
|
||||||
classIds.value = []
|
|
||||||
getGradesList()
|
|
||||||
|
|
||||||
}
|
|
||||||
// 选中
|
|
||||||
function gradesChange(e:any){
|
|
||||||
classIds.value = []
|
|
||||||
getClassList()
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleClose(){
|
|
||||||
if (planform.value != null) planform.value.resetFields();
|
|
||||||
dialogFormVisible.value = false
|
|
||||||
}
|
|
||||||
function handleCloses(){
|
|
||||||
allchecked.value = false
|
|
||||||
institutiondata.value = []
|
|
||||||
allgradechecked.value = false
|
|
||||||
gradeData.value = []
|
|
||||||
allclasschecked.value = false
|
|
||||||
classData.value = []
|
|
||||||
dialogVisible.value = false
|
|
||||||
}
|
|
||||||
function returnClick(){
|
|
||||||
moduleinfo1.value = true
|
|
||||||
moduleinfo2.value = false
|
|
||||||
}
|
|
||||||
function dateFormat(row: any) {
|
|
||||||
const daterc = row;
|
|
||||||
if (daterc != null) {
|
|
||||||
var date = new Date(daterc);
|
|
||||||
var year = date.getFullYear();
|
|
||||||
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
||||||
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
||||||
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
|
|
||||||
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
||||||
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
|
|
||||||
// 拼接
|
|
||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 抽检方法
|
|
||||||
*/
|
|
||||||
const cascaderdata: any = ref([]);
|
|
||||||
// 方法
|
|
||||||
const props1 = {
|
|
||||||
checkStrictly: true,
|
|
||||||
value:'id',
|
|
||||||
label:'name'
|
|
||||||
}
|
|
||||||
const regionId = ref("")
|
|
||||||
//获取行政区域
|
|
||||||
function getRegionTree() {
|
|
||||||
const params = {
|
|
||||||
regionId: form.value.org_id,
|
|
||||||
};
|
|
||||||
queryRegionById(params).then((res: any) => {
|
|
||||||
cascaderdata.value = res.data;
|
|
||||||
})
|
|
||||||
.catch((error:any)=>{
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// function handleChange(value:any){
|
|
||||||
// if(value.length != 0){
|
|
||||||
// regionId.value = value[value.length -1]
|
|
||||||
// }
|
|
||||||
// getSchool()
|
|
||||||
// }
|
|
||||||
const schoolData:any = ref([])
|
|
||||||
const schoolLoading = ref(false)
|
|
||||||
const gradeLoading = ref(false)
|
|
||||||
const classLoading = ref(false)
|
|
||||||
|
|
||||||
//获取表格类型
|
|
||||||
function getSchool() {
|
|
||||||
let params = {
|
|
||||||
planId:checktreeform.value.id
|
|
||||||
}
|
|
||||||
// if(form.value.org_type != '5'){
|
|
||||||
// params = {
|
|
||||||
// regionId: regionId.value,
|
|
||||||
// current: queryInfo.value.current,
|
|
||||||
// size:queryInfo.value.size
|
|
||||||
// };
|
|
||||||
// } else {
|
|
||||||
// params = {
|
|
||||||
// SchoolId:form.value.org_id,
|
|
||||||
// current: queryInfo.value.current,
|
|
||||||
// size:queryInfo.value.size
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
schoolLoading.value = true
|
|
||||||
queryRulesSchoolList(params).then((res) => {
|
|
||||||
schoolData.value = res.data;
|
|
||||||
schoolLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
schoolLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const schoolIds:any = ref([])
|
|
||||||
const gradeIds:any = ref([])
|
|
||||||
const classIds:any = ref([])
|
|
||||||
function getGradesList(){
|
|
||||||
let params = {
|
|
||||||
schoolIds: schoolIds.value.join(",")
|
|
||||||
}
|
|
||||||
gradeLoading.value = true
|
|
||||||
queryByIdsSchoolGradeList(params).then((res) => {
|
|
||||||
gradeData.value = res.data;
|
|
||||||
gradeLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
gradeLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getClassList(){
|
|
||||||
let params = {
|
|
||||||
gradeIds: gradeIds.value.join(",")
|
|
||||||
}
|
|
||||||
classLoading.value = true
|
|
||||||
queryByIdsSchoolClassList(params).then((res) => {
|
|
||||||
classData.value = res.data;
|
|
||||||
classLoading.value = false
|
|
||||||
}).catch(()=>{
|
|
||||||
classLoading.value = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div v-if="moduleinfo1" class="w-full">
|
|
||||||
<div v-show="moduleinfo1" class="contents-box">
|
|
||||||
<aside id="silderLeft">
|
|
||||||
<div class="lefttitle">
|
|
||||||
<div class="line"></div>
|
|
||||||
<div class="treetitle">普检计划列表</div>
|
|
||||||
</div>
|
|
||||||
<div style="width:100%;padding: 5px 15px;">
|
|
||||||
<el-input v-model="filterText" placeholder="请输入普检计划名称" clearable />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treedata" :filter-node-method="filterNode"
|
|
||||||
:highlight-current="true" default-expand-all :props="defaultProps" :expand-on-click-node="false"
|
|
||||||
@node-click="handleNodeClick" style="height: calc(100vh - 240px); overflow: auto">
|
|
||||||
</el-tree>
|
|
||||||
</div>
|
|
||||||
<div class="moveBtn" v-move>
|
|
||||||
<div class="moveBtn-line" v-move></div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="silderRight">
|
|
||||||
<div class="searchinfo">
|
|
||||||
<div class="flex">
|
|
||||||
<el-input v-model="searchval" style="width:240px;" placeholder="请输入计划名称" clearable />
|
|
||||||
<el-button type="primary" class="ml-[10px]" @click="searchclick">搜索</el-button>
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" @click="addinfo"><img src="@/assets/visionscreening/jscz_xz.png" alt="" style="margin-right: 4px;" >新增抽检计划</el-button>
|
|
||||||
</div>
|
|
||||||
<div v-loading="loading">
|
|
||||||
<el-table ref="multipleTableRef" :data="tableData" border style="width: 100%; height:calc(100vh - 280px)" @selection-change="handleSelectionChange" :header-cell-style="{background:'rgb(250 250 250)',height:'50px'}">
|
|
||||||
<el-table-column prop="plan_code" label="计划编号" width="110" />
|
|
||||||
<el-table-column prop="plan_name" label="计划名称" min-width="110"/>
|
|
||||||
<el-table-column prop="org_name" label="组织机构" />
|
|
||||||
<el-table-column prop="org_type" label="机构类型" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.org_type =='2'">省/直辖市</span>
|
|
||||||
<span v-if="scope.row.org_type == '3'">市/自治州</span>
|
|
||||||
<span v-else-if="scope.row.status == '4'">区/县/县级市</span>
|
|
||||||
<span v-else-if="scope.row.status == '5'">学校</span>
|
|
||||||
<span v-else></span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="plan_start_date" width="110" label="开始日期" />
|
|
||||||
<el-table-column prop="plan_end_date" width="110" label="结束日期" />
|
|
||||||
<el-table-column prop="status" width="100" label="状态">
|
|
||||||
<template #default="scope">
|
|
||||||
<span v-if="scope.row.status === '01'" style="color:#409EFF">初始创建</span>
|
|
||||||
<span v-else-if="scope.row.status === '02'" style="color:#009966">筛查完成</span>
|
|
||||||
<span v-else ></span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="Complete_date" width="100" label="完成日期" />
|
|
||||||
<el-table-column prop="creator" width="100" label="创建人" />
|
|
||||||
<el-table-column prop="create_time" label="创建日期" width="196">
|
|
||||||
<template #default="scope">
|
|
||||||
{{ dateFormat(scope.row.create_time) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" width="140" fixed="right" align="center">
|
|
||||||
<template #default="scope">
|
|
||||||
<div style="display: -webkit-flex;display: flex; justify-content: space-around;-webkit-justify-content: space-around; ">
|
|
||||||
<img src="@/assets/MenuIcon/lbcz_xg.png" alt="" title="修改" @click="editinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/visionscreening/spotcheck.png" alt="" title="抽检规则" @click="rulesclick(scope.row)" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/visionscreening/bg-jhgl.png" alt="" title="计划管理" @click="planclick(scope.row)" style="cursor: pointer;">
|
|
||||||
<img src="@/assets/MenuIcon/lbcz_sc.png" alt="" title="删除" @click="delinfo(scope.row)" style="cursor: pointer;">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
|
|
||||||
@pagination="getTableDate" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-dialog v-model="dialogFormVisible" :close-on-click-modal="false" :title="dialogtitle" :before-close="handleClose" width="620px" draggable append-to-body>
|
|
||||||
<el-form ref="planform" :model="form" :rules="rules" label-width="90px">
|
|
||||||
<el-form-item label="计划编号" prop="plan_code">
|
|
||||||
<el-input v-model="form.plan_code" autocomplete="off" placeholder="请输入计划编号" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="计划名称" prop="plan_name">
|
|
||||||
<el-input v-model="form.plan_name" autocomplete="off" placeholder="请输入计划名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="组织机构">
|
|
||||||
<el-input v-model="form.org_name" autocomplete="off" disabled placeholder="请输入组织机构" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="机构类型">
|
|
||||||
<el-radio-group v-model="form.org_type" disabled>
|
|
||||||
<el-radio :label="'3'">市/自治州</el-radio>
|
|
||||||
<el-radio :label="'4'">区/县/县级市</el-radio>
|
|
||||||
<el-radio :label="'5'">学校</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="开始日期">
|
|
||||||
<el-date-picker v-model="form.plan_start_date" type="date" style="width:100%" placeholder="请输入开始日期"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="结束日期">
|
|
||||||
<el-date-picker v-model="form.plan_end_date" type="date" style="width:100%" placeholder="请输入结束日期"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<span class="dialog-footer">
|
|
||||||
<el-button @click="handleClose">取消</el-button>
|
|
||||||
<el-button type="primary" @click="infosubmit(planform)">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
<el-dialog v-model="dialogVisible" :close-on-click-modal="false" title="抽检规则" :before-close="handleCloses" width="860px" draggable append-to-body>
|
|
||||||
<div v-loading="isCreateInspect" element-loading-text="正在生成抽检学生信息!">
|
|
||||||
<div class="flex">
|
|
||||||
<div class="rules-box mr-[20px]" v-loading="schoolLoading">
|
|
||||||
<div class="rules-box-top">
|
|
||||||
<el-checkbox v-model="allchecked" @change="allcheckchange($event,'1')" />
|
|
||||||
<span class="ml-[10px]">选择学校</span>
|
|
||||||
</div>
|
|
||||||
<div class="rules-box-bottom h-[345px]">
|
|
||||||
<el-checkbox-group
|
|
||||||
v-model="schoolIds"
|
|
||||||
@change="schoolChange"
|
|
||||||
>
|
|
||||||
<div v-for="(item,index) in schoolData">
|
|
||||||
<el-checkbox :key="item.id" :label="item.id">
|
|
||||||
{{ item.name }}
|
|
||||||
</el-checkbox>
|
|
||||||
</div>
|
|
||||||
</el-checkbox-group>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="rules-box mr-[20px]">
|
|
||||||
<div class="rules-box-top">
|
|
||||||
<el-checkbox v-model="allgradechecked" @change="allcheckchange($event,'2')"/>
|
|
||||||
<span class="ml-[10px]">选择年级</span>
|
|
||||||
</div>
|
|
||||||
<div class="rules-box-bottom h-[400px]">
|
|
||||||
<el-checkbox-group
|
|
||||||
v-model="gradeIds"
|
|
||||||
@change="gradesChange"
|
|
||||||
>
|
|
||||||
<div v-for="(item,index) in gradeData">
|
|
||||||
<el-checkbox :key="item.id" :label="item.id">
|
|
||||||
{{ item.name }}
|
|
||||||
</el-checkbox>
|
|
||||||
</div>
|
|
||||||
</el-checkbox-group>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="rules-box">
|
|
||||||
<div class="rules-box-top">
|
|
||||||
<el-checkbox v-model="allclasschecked" @change="allcheckchange($event,'3')" />
|
|
||||||
<span class="ml-[10px]">选择班级</span>
|
|
||||||
</div>
|
|
||||||
<div class="rules-box-bottom h-[400px]">
|
|
||||||
<el-checkbox-group
|
|
||||||
v-model="classIds"
|
|
||||||
>
|
|
||||||
<div v-for="(item,index) in classData">
|
|
||||||
<el-checkbox :key="item.id" :label="item.id">
|
|
||||||
{{ item.name }}
|
|
||||||
</el-checkbox>
|
|
||||||
</div>
|
|
||||||
</el-checkbox-group>
|
|
||||||
<!-- <div v-for="(itemss,indexss) in classData" :key="indexss">
|
|
||||||
<el-checkbox v-model="itemss.checked" :label="itemss.name" @change="checkchange($event,indexss,'3')" />
|
|
||||||
</div> -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="my-[20px] flex w-full">
|
|
||||||
<div class="flex items-center" style="width:40%;" >
|
|
||||||
<div class="mr-[20px]">性别</div>
|
|
||||||
<el-radio-group v-model="genderradio">
|
|
||||||
<el-radio :label="'0'" size="large">不限</el-radio>
|
|
||||||
<el-radio :label="'1'" size="large">男</el-radio>
|
|
||||||
<el-radio :label="'2'" size="large">女</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</div>
|
|
||||||
<div style="width:60%;">
|
|
||||||
<div class="flex items-center" >
|
|
||||||
<div class="mr-[10px] w-[70px]">抽检比例</div>
|
|
||||||
<el-input v-model.number="checkratio" oninput ="value=value.replace(/[^\d]/g,'')" placeholder="请输入抽检比例" clearable><template #suffix>%</template></el-input>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<span class="dialog-footer">
|
|
||||||
<el-button @click="handleCloses">取消</el-button>
|
|
||||||
<el-button type="primary" @click="rulessubmit">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<Planmanages v-if="moduleinfo2" @returnClick="returnClick" :planInfo="form" />
|
|
||||||
</template>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
:deep() {
|
|
||||||
.el-select--large .el-select__wrapper {
|
|
||||||
min-height: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.contents-box {
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
display: flex;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
#silderLeft {
|
|
||||||
width: 280px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 3px;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
.moveBtn {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// .el-tree-node__content{
|
|
||||||
// height: 40px;
|
|
||||||
// // padding-left: 12px !important;
|
|
||||||
// color: #505050;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
|
|
||||||
// color: #409eff;
|
|
||||||
// }
|
|
||||||
// .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: #ecf5ff;
|
|
||||||
// }
|
|
||||||
// .el-tree-node__content:hover{
|
|
||||||
// color: #409eff;
|
|
||||||
// background-color: transparent;
|
|
||||||
// // #ecf5ff
|
|
||||||
// }
|
|
||||||
// .el-tree-node__expand-icon{
|
|
||||||
// color: #333333;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 拖动条 */
|
|
||||||
.moveBtn {
|
|
||||||
height: 100%;
|
|
||||||
width: 15px;
|
|
||||||
padding: 0 6px;
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: -15px;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.moveBtn-line {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
cursor: col-resize;
|
|
||||||
user-select: none;
|
|
||||||
background-color: #60bfff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.silderRight {
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: calc(100vh - 130px);
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 20px;
|
|
||||||
padding-bottom: 0px;
|
|
||||||
margin-left: 15px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.lefttitle {
|
|
||||||
min-width: 130px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 20px;
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #1B1B1B;
|
|
||||||
border-bottom: 1px var(--el-border-color) var(--el-border-style);
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
.line {
|
|
||||||
border-width: 0px;
|
|
||||||
width: 5px;
|
|
||||||
height: 14px;
|
|
||||||
margin-right: 7px;
|
|
||||||
background: inherit;
|
|
||||||
background-color: rgba(64, 158, 255, 1);
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.dialog-footer {
|
|
||||||
display: flex;
|
|
||||||
display: -webkit-flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
-webkit-justify-content: flex-end;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep() {
|
|
||||||
.el-input-group__append {
|
|
||||||
background-color: transparent;
|
|
||||||
border: none;
|
|
||||||
padding: 0px 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.searchinfo {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rules-box {
|
|
||||||
width: 260px;
|
|
||||||
height: 450px;
|
|
||||||
border-radius: 4px;
|
|
||||||
border: 1px solid #e6e8ec;
|
|
||||||
|
|
||||||
.rules-box-top {
|
|
||||||
height: 45px;
|
|
||||||
border-bottom: 1px solid #e6e8ec;
|
|
||||||
background-color: #f6f7fa;
|
|
||||||
line-height: 45px;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #606266;
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rules-box-bottom {
|
|
||||||
padding: 5px 20px;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
}</style>
|
|