喻忠伟 4 months ago
commit 0ee8c8d8f7
  1. 2
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/annualcompetitionprojectregistration/controller/AnnualCompetitionProjectRegistrationController.java
  2. 6
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/awardpersion/controller/AwardPersionController.java
  3. 9
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/chooseTopicPersion/controller/ChaoseTopicPersionController.java
  4. 5
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expscore/controller/ExpScoreController.java
  5. 7
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/homepage/controller/UserHomePageController.java
  6. 36
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/homepage/service/UserHomePageServiceImpl.java
  7. 12
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/topic/controller/TopicController.java
  8. 15
      jeecgboot-vue3-master/src/api/common/api.ts
  9. 14
      jeecgboot-vue3-master/src/views/annualcompetitionprojectregistration/student/AnnualCompetitionProjectRegistration.data.ts
  10. 27
      jeecgboot-vue3-master/src/views/awardpersion/AwardPersionList.vue
  11. 18
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cakeChart.vue
  12. 71
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList.vue
  13. 12
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList2.vue
  14. 22
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList3.vue
  15. 16
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList4.vue
  16. 2
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList5.vue
  17. 16
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList6.vue
  18. 23
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList8.vue
  19. 126
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/randerChart.vue
  20. 19
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/ringChart.vue
  21. 98
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/comprehensiveReport.vue
  22. 80
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/department.vue
  23. 2
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/organizingCommittee.vue
  24. 8
      jeecgboot-vue3-master/src/views/topic/Topic.api.ts
  25. 31
      jeecgboot-vue3-master/src/views/topic/components/TopicForm.vue

@ -595,7 +595,7 @@ public class AnnualCompetitionProjectRegistrationController {
//设置报名编号
management.setEnrollCode(enrollCode);
//根据名称查用户id(如果前端传的只是姓名的话)
SysUser user = sysUserService.query().eq("realname", management.getUserId()).one();
SysUser user = sysUserService.query().eq("id", management.getUserId()).one();
management.setUserId(user.getId());
//补全用户未输入信息 -- 是否队长
if (management.getCaptain() == null)

@ -152,7 +152,7 @@ public class AwardPersionController extends JeecgController<AwardPersion, IAward
//学院(上传和查询)(根据部门查询数据,该学院下所有学生的获奖信息)
Page<AwardPersion> page = new Page<AwardPersion>(pageNo, pageSize);
QueryWrapper<AwardPersion> queryWrapper = QueryGenerator.initQueryWrapper(awardPersion, req.getParameterMap());
queryWrapper.eq("studentorg",sysDepartService.queryDepartsByUsername(user.getUsername()).get(0).getOrgCode());
queryWrapper.eq("studentorg",sysDepartService.queryDepartsByUsername(user.getUsername()).get(0).getId());
IPage<AwardPersion> pageList = awardPersionService.page(page, queryWrapper);
return Result.OK(pageList);
}else {
@ -225,7 +225,7 @@ public class AwardPersionController extends JeecgController<AwardPersion, IAward
SysUser sysUser = sysUserService.getById(listtm.get(l).getUserId());
awardPersion.setStudentname(sysUser.getRealname());
awardPersion.setStudentcode(sysUser.getUsername());
awardPersion.setStudentorg(sysDepartService.queryDepartsByUsername(sysUser.getUsername()).get(0).getOrgCode());
awardPersion.setStudentorg(sysDepartService.queryDepartsByUsername(sysUser.getUsername()).get(0).getId());
awardPersionService.save(awardPersion);
}
AnnualCompPoint annualCompPoint = annualCompPointService.getById(awardPersion.getAnnualCompP());
@ -511,7 +511,7 @@ public class AwardPersionController extends JeecgController<AwardPersion, IAward
List<TeamManagement> listtm = teamManagementService.list(queryWrappertm);
for (int l = 0 ; l < listtm.size() ; l++){
SysUser sysUser = sysUserService.getById(listtm.get(l).getUserId());
list.get(i).setStudentorg(sysDepartService.queryDepartsByUsername(sysUser.getUsername()).get(0).getOrgCode());
list.get(i).setStudentorg(sysDepartService.queryDepartsByUsername(sysUser.getUsername()).get(0).getId());
if(listaca.get(0).getFirstPrize().equals(list.get(i).getAwardname())){
list.get(i).setAwardsort(1);
list.get(i).setAwardid(listaca.get(0).getId());

@ -197,6 +197,15 @@ public class ChaoseTopicPersionController extends JeecgController<ChaoseTopicPer
@GetMapping(value = "/bmbhadd")
public Result<String> bmbhadd(@RequestParam(name="ids",required=true) String ids,@RequestParam(name="xmtmid",required=true) String xmtmid,HttpServletRequest req) {
String strs[] = ids.split(",");
for (int o = 0 ; o < strs.length ; o++){
UpfilePersion upfilePersion = upfilePersionService.getById(strs[o]);
QueryWrapper<ChaoseTopicPersion> queryWrapperctp1 = new QueryWrapper<>();
queryWrapperctp1.eq("bmcode",upfilePersion.getApplyCode());
List<ChaoseTopicPersion> listctp1 = chaoseTopicPersionService.list(queryWrapperctp1);
if(listctp1.size()==0){
return Result.error(upfilePersion.getTopicName()+"未选题,绑定失败!");
}
}
AnnComGroTop annComGroTop = new AnnComGroTop();
QueryWrapper<AnnComGroTop> queryWrapper = QueryGenerator.initQueryWrapper(annComGroTop, req.getParameterMap());
queryWrapper.eq("ann_com_p_g",xmtmid);

@ -9,8 +9,11 @@ import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.demo.anncomgrotop.entity.AnnComGroTop;
import org.jeecg.modules.demo.anncomgrotop.service.IAnnComGroTopService;
@ -155,11 +158,13 @@ public class ExpScoreController extends JeecgController<ExpScore, IExpScoreServi
}
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
QueryWrapper<ExpScore> queryWrapper = QueryGenerator.initQueryWrapper(expScore, req.getParameterMap());
queryWrapper.eq("annid",annComGroTop.getAnnid());
queryWrapper.eq("annal_comp",annualCompPointService.getById(annComGroTop.getAnnComP()).getAnnualCompId());
queryWrapper.eq("ann_com_p",annComGroTop.getAnnComP());
queryWrapper.eq("topid",annComGroTop.getTopid());
queryWrapper.eq("userid",sysUser.getId());
Page<ExpScore> page = new Page<ExpScore>(pageNo, pageSize);
IPage<ExpScore> pageList = expScoreService.page(page, queryWrapper);
for (int k = 0 ; k < pageList.getRecords().size();k++){

@ -48,4 +48,11 @@ public class UserHomePageController {
Map<String, Object> result = homePageService.report4School();
return Result.ok(result);
}
@ApiOperation(value = "河南机电-部门综合报告", notes = "河南机电-部门综合报告")
@GetMapping(value = "/report4Depart")
public Result report4Depart(String orgCode) {
Map<String, Object> result = homePageService.report4Depart(orgCode);
return Result.ok(result);
}
}

@ -392,12 +392,11 @@ public class UserHomePageServiceImpl implements UserHomePageService {
} else {
countMap.put("已完成比赛比率", 0);
}
resultMap.putAll(countMap);
List<PersonalAbilityEvaluationCollect> evaluationCollects = iPersonalAbilityEvaluationCollectService
.list(new LambdaQueryWrapper<PersonalAbilityEvaluationCollect>()
.orderByDesc(PersonalAbilityEvaluationCollect::getCreateTime)
.last(" limit 60"));
resultMap.put("前60名学生能力值", evaluationCollects);
.list(new LambdaQueryWrapper<PersonalAbilityEvaluationCollect>());
// resultMap.put("前60名学生能力值", evaluationCollects);
List<PersonalAbilityEvaluationCollect> vos = new LinkedList<>();
Map<String, List<PersonalAbilityEvaluationCollect>> capacityIdListMap = Optional.ofNullable(evaluationCollects).orElse(new LinkedList<>()).stream()
@ -416,7 +415,7 @@ public class UserHomePageServiceImpl implements UserHomePageService {
vo.setCapacityName(departAbilityEvaluationList.get(0).getCapacityName());
vos.add(vo);
});
resultMap.put("前60名学生能力平均值", vos);
resultMap.put("学生能力平均值", vos);
List<Map<String, Object>> abilityList = new LinkedList<>();
List<Integer> years = DateUtils.getLastxYear(2);
@ -635,13 +634,12 @@ public class UserHomePageServiceImpl implements UserHomePageService {
} else {
countMap.put("已完成比赛比率", 0);
}
resultMap.putAll(countMap);
List<PersonalAbilityEvaluationCollect> evaluationCollects = iPersonalAbilityEvaluationCollectService
.list(new LambdaQueryWrapper<PersonalAbilityEvaluationCollect>()
.eq(PersonalAbilityEvaluationCollect::getDepetId, departId)
.orderByDesc(PersonalAbilityEvaluationCollect::getCreateTime)
.last(" limit 60"));
resultMap.put("前60名学生能力值", evaluationCollects);
.eq(PersonalAbilityEvaluationCollect::getDepetId, departId));
// resultMap.put("学生综合能力值分析", evaluationCollects);
List<PersonalAbilityEvaluationCollect> vos = new LinkedList<>();
Map<String, List<PersonalAbilityEvaluationCollect>> capacityIdListMap = Optional.ofNullable(evaluationCollects).orElse(new LinkedList<>()).stream()
@ -660,7 +658,7 @@ public class UserHomePageServiceImpl implements UserHomePageService {
vo.setCapacityName(departAbilityEvaluationList.get(0).getCapacityName());
vos.add(vo);
});
resultMap.put("前60名学生能力平均值", vos);
resultMap.put("学生能力平均值", vos);
List<Map<String, Object>> abilityList = new LinkedList<>();
List<Integer> years = DateUtils.getLastxYear(2);
@ -852,22 +850,4 @@ public class UserHomePageServiceImpl implements UserHomePageService {
return map;
}
List<CompVo> getCompList() {
List<AnnualCompPoint> annualCompPointList = iAnnualCompPointService.list(new LambdaQueryWrapper<AnnualCompPoint>()
.eq(AnnualCompPoint::getRequireApply, "Y"));
List<CompVo> compVoList = new LinkedList<>();
Optional.ofNullable(annualCompPointList).orElse(new LinkedList<>()).stream().forEach(p -> {
CompVo compVo = new CompVo();
BeanUtils.copyProperties(p, compVo);
List<AnnualCompetitionProjectRegistration> list = iAnnualCompetitionProjectRegistrationService.list(new LambdaQueryWrapper<AnnualCompetitionProjectRegistration>()
.eq(AnnualCompetitionProjectRegistration::getAnnualCompid, p.getId()));
if (!ObjectUtils.isEmpty(list)) {
Set<String> entryFormats = list.stream().map(bo -> bo.getEnrollCode()).collect(Collectors.toSet());
Long count = iTeamManagementService.count(new LambdaQueryWrapper<TeamManagement>().in(TeamManagement::getEnrollCode, entryFormats));
compVo.setNumber(count.intValue());
}
});
return compVoList;
}
}

@ -273,6 +273,18 @@ public class TopicController extends JeecgController<Topic, ITopicService> {
}
return Result.OK();
}
//用于查询根据id获取的年度比赛项目
@GetMapping(value = "/getdate")
public Result<String> getdate(@RequestParam(name="annualCompid",required=true) String annualCompid) {
QueryWrapper<AnnualCompPoint> queryWrapper= new QueryWrapper<>();
queryWrapper.eq("id",annualCompid);
AnnualCompPoint annualCompPoint =annualCompPointService.getOne(queryWrapper);
return Result.OK(annualCompPoint.getObjName());
}
/**
* 添加
*

@ -188,4 +188,19 @@ export const getOrganizingCommitteeReport = () => {
return defHttp.get({
url:'/annualcompetitionprojectregistration/annualCompetitionProjectRegistration/zwhfxbg'
})
}
// /user/login/homepage/report4School
// 学校综合报告
export const getComprehensiveReport = () => {
return defHttp.get({
url:'/user/login/homepage/report4School'
})
}
// 部门
// http://localhost:18083/jeecg-boot/user/login/homepage/report4Depart
export const getdepartmentReport = (params:any) => {
return defHttp.get({
url:'/user/login/homepage/report4School',
params
})
}

@ -114,15 +114,25 @@ export const formSchema: FormSchema[] = [
export const teamManagementColumns: JVxeColumn[] = [
{
title: '用户',
key: 'userId',
key: 'realname',
type: JVxeTypes.popup,
popupCode: 'user_code',
fieldConfig: [{source: 'realname', target: 'userId'}],
fieldConfig: [
{source: 'id', target: 'userId'},
{ source: 'realname', target: 'realname' }
],
width: '200px',
placeholder: '请输入${title}',
defaultValue: '',
},
{
label: '',
field: 'userId',
component: 'Input',
show: false,
},
{
title: '是否队长',
key: 'captain',

@ -11,21 +11,40 @@
dictCode="annual,annual_name,id" />
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="年度比赛" name="annalComp">
<j-dict-select-tag placeholder="请选择年度比赛" v-model:value="queryParam.annalComp"
dictCode="annual_comp,name,id" />
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="年度比赛项目" name="annualCompP">
<j-dict-select-tag placeholder="请选择年度比赛项目" v-model:value="queryParam.annualCompP"
dictCode="annual_comp_point,obj_name,id" />
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="奖项名称" name="awardname">
<a-input placeholder="请输入奖项名称" v-model:value="queryParam.awardname"></a-input>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="报名编号" name="enrollCode">
<a-input placeholder="请输入报名编号" v-model:value="queryParam.enrollCode"></a-input>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="所属部门" name="studentorg">
<j-dict-select-tag placeholder="请选择所属部门" v-model:value="queryParam.studentorg"
dictCode="sys_depart,depart_name,id" />
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-col :lg="6">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset"
style="margin-left: 8px">重置</a-button>
<a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
{{ toggleSearchStatus ? '收起' : '展开' }}
<Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
</a>
</a-col>
</span>
</a-col>

@ -6,6 +6,9 @@
import echarts from '/@/utils/lib/echarts';
import { onMounted } from 'vue';
const props = defineProps(['data'])
console.log(props.data);
const throttle = (fn: any) => {
let timer: any;
return function () {
@ -20,6 +23,12 @@
};
};
onMounted(() => {
let arr:any = []
for (const key in props.data) {
arr.push({value:props.data[key],name:key})
}
console.log(arr,props.data);
// @ts-ignore
const myChart = echarts.init(document.getElementById('cakeChart'));
const option = {
@ -34,16 +43,11 @@
series: [
{
name: 'Access From',
name: '国家ABC类比赛占比',
type: 'pie',
radius: '60%',
center:['50%','55%'],
data: [
{ value: 1048, name: '比赛一',itemStyle: {color: '#0052d9'} },
{ value: 735, name: '比赛二',itemStyle: {color: '#699ef5'} },
{ value: 580, name: '比赛三',itemStyle: {color: '#d9e1ff'} },
// { value: 484, name: '' ,itemStyle: {color: '#0052d9'}},
],
data: arr,
labelLine: {
show: false,
},

@ -6,13 +6,13 @@
<div class="table">
<div class="t_item t_head">
<div class="name">能力名称</div>
<div class="total">能力分数</div>
<div class="operate">达标情况</div>
<div class="operate">能力分数</div>
<!-- <div class="operate">达标情况</div> -->
</div>
<div class="t_item t_con" v-for="(item,index) in props.data.splice(0,6)" :key="index">
<div class="name">{{ item.text }}</div>
<div class="total">{{ item.max }}</div>
<div class="operate">达标</div>
<div class="t_item t_con" v-for="(item,index) in data.splice(0,6)" :key="index">
<div class="name">{{ item.capacityName }}</div>
<div class="operate">{{ item.value }}</div>
<!-- <div class="operate">达标</div> -->
</div>
</div>
<div class="table">
@ -21,10 +21,10 @@
<div class="total">能力分数</div>
<div class="operate">达标情况</div>
</div>
<div class="t_item t_con" v-for="(item,index) in props.data.splice(-6)" :key="index">
<div class="name">{{ item.text }}</div>
<div class="total">{{ item.max }}</div>
<div class="operate">达标</div>
<div class="t_item t_con" v-for="(item,index) in data.splice(-6)" :key="index">
<div class="name">{{ item.capacityName }}</div>
<div class="operate">{{ item.value }}</div>
<!-- <div class="operate">达标</div> -->
</div>
</div>
</div>
@ -36,60 +36,61 @@
import { SvgIcon } from '/@/components/Icon';
const props = defineProps({
data: {
DATA: {
type: Array,
default: [
{
text: '前言探索',
max: 100,
capacityName: '前言探索',
value: 0,
},
{
text: '奠定基础',
max: 100,
capacityName: '奠定基础',
value: 0,
},
{
text: '知识分析',
max: 100,
capacityName: '知识分析',
value: 0,
},
{
text: '社会责任',
max: 100,
capacityName: '社会责任',
value: 0,
},
{
text: '独立思考',
max: 100,
capacityName: '独立思考',
value: 0,
},
{
text: '拓宽视野',
max: 100,
capacityName: '拓宽视野',
value: 0,
},
{
text: '激发兴趣',
max: 100,
capacityName: '激发兴趣',
value: 0,
},
{
text: '沟通协调',
max: 100,
capacityName: '沟通协调',
value: 0,
},
{
text: '设计开发',
max: 100,
capacityName: '设计开发',
value: 0,
},
{
text: '研判分析',
max: 100,
capacityName: '研判分析',
value: 0,
},
{
text: '创新能力',
max: 100,
capacityName: '创新能力',
value: 0,
},
{
text: '团队协作',
max: 100,
capacityName: '团队协作',
value: 0,
},
],
},
});
let data = JSON.parse(props.DATA)
let falg = false;
const unfold = () => {
const dom: any = document.querySelector('.foo_card') as Element;

@ -11,12 +11,12 @@
<div class="total">比赛层次</div>
<div class="operate">参赛人数</div>
</div>
<div class="t_item t_con" v-for="(i) in 20" :key="i">
<div class="name">国赛</div>
<div class="total">全国高级计算机大赛</div>
<div class="total">计算机算法</div>
<div class="total">高级</div>
<div class="operate">212</div>
<div class="t_item t_con" v-for="(item,index) in props.data" :key="index">
<div class="name">{{ item.typeName }}</div>
<div class="total">{{ item.compName }}</div>
<div class="total">{{item.pointName}}</div>
<div class="total">{{ item.projectLevel }}</div>
<div class="operate">{{ item.number }}</div>
</div>
</div>
</div>

@ -10,17 +10,17 @@
<div class="name">比赛名称</div>
<div class="total">项目名称</div>
<div class="total">层次</div>
<div class="total">奖项数量</div>
<div class="operate">数量</div>
<div class="operate">奖项名称</div>
<!-- <div class="operate">数量</div> -->
</div>
<div class="t_item t_con" v-for="i in 20" :key="i">
<div class="name">国赛</div>
<div class="name">全国高级计算机大赛</div>
<div class="total">计算机比赛</div>
<div class="total">高级</div>
<div class="total">100</div>
<div class="operate">76</div>
<div class="t_item t_con" v-for="(item,index) in props.data" :key="index">
<div class="name">{{ item.typeName }}</div>
<div class="name">{{ item.pointName }}</div>
<div class="total">{{ item.compName }}</div>
<div class="total">{{ item.projectLevel }}</div>
<div class="operate">{{ item.awardName }}</div>
<!-- <div class="operate">{{ item.number }}</div> -->
</div>
</div>
</div>
@ -34,6 +34,8 @@
type: Array,
},
});
console.log(props.data,'1121');
let falg = false;
const unfold = () => {
const dom: any = document.querySelector('.foo_card3') as Element;

@ -6,15 +6,15 @@
<div class="table">
<div class="t_item t_head">
<div class="name">部门名称</div>
<div class="total">参加比赛数</div>
<div class="operate">参加人数</div>
<div class="operate">队伍</div>
<div class="total">比赛总人</div>
<div class="total">个人赛人数</div>
<div class="operate">团队赛人</div>
</div>
<div class="t_item t_con" v-for="(i) in 20" :key="i">
<div class="name">机电学院</div>
<div class="total">1212</div>
<div class="total">1212</div>
<div class="operate">1212</div>
<div class="t_item t_con" v-for="(item,index) in props.data" :key="index">
<div class="name">{{ item.部门名称 }}</div>
<div class="total">{{ item.比赛总人数 }}</div>
<div class="total">{{ item.个人赛人数 }}</div>
<div class="operate">{{ item.团队赛人数 }}</div>
</div>
</div>
</div>

@ -10,7 +10,7 @@
<!-- <div class="total">比赛状态</div> -->
<div class="operate">积分</div>
</div>
<div class="t_item t_con" v-for="(i,index) in 20" :key="i">
<div class="t_item t_con" v-for="(i,index) in props.data" :key="i">
<div class="ranking">
<div class="ol" :class="{ ac: index <= 3 }">{{ index +1 }}</div>
</div>

@ -7,21 +7,21 @@
<div class="t_item t_head">
<!-- <div class="ranking">排名</div> -->
<div class="name">部门名称</div>
<div class="total">获奖人数</div>
<div class="total">一等奖</div>
<div class="operate">获奖人数</div>
<!-- <div class="total">一等奖</div>
<div class="total">二等奖</div>
<div class="operate">三等奖</div>
<div class="operate">三等奖</div> -->
<!-- <div class="operate">积分</div> -->
</div>
<div class="t_item t_con" v-for="(i,index) in 20" :key="i">
<div class="t_item t_con" v-for="(i,index) in props.data" :key="index">
<!-- <div class="ranking">
<div class="ol" :class="{ ac: index <= 3 }">{{ index +1 }}</div>
</div> -->
<div class="name">机电学院</div>
<div class="total">1212</div>
<div class="name">{{ i.部门名称 }}</div>
<!-- <div class="total">1212</div>
<div class="total">4322</div>
<div class="total">1212</div>
<div class="operate">112</div>
<div class="total">1212</div> -->
<div class="operate">{{ i.获取人数 }}</div>
</div>
</div>
</div>

@ -1,20 +1,26 @@
<template>
<div class="foo_card">
<!-- <div class="title"> 部门学生积分排名 </div> -->
<div class="title"> 部门参赛情况分析 </div>
<div class="table">
<div class="t_item t_head">
<div class="ranking">排名</div>
<div class="name">参赛院系</div>
<!-- <div class="ranking">排名</div> -->
<div class="name">部门名称</div>
<div class="name">团队赛人数</div>
<div class="name">个人赛人数</div>
<div class="operate">比赛总人数</div>
<!-- <div class="total">报名数</div> -->
<div class="operate">报名数</div>
<!-- <div class="operate">报名数</div> -->
</div>
<div class="t_item t_con" v-for="(i,index) in props.data" :key="index">
<div class="ranking">
<!-- <div class="ranking">
<div class="ol" :class="{ ac: index <= 3 }">{{ i.pm}}</div>
</div>
<div class="name">{{ i.csyxname }}</div>
<div class="operate">{{ i.bms }}</div>
</div> -->
<div class="name">{{ i.部门名称 }}</div>
<div class="name">{{ i.团队赛人数 }}</div>
<div class="name">{{ i.个人赛人数 }}</div>
<div class="operate">{{ i.比赛总人数 }}</div>
<!-- <div class="operate">{{ i.bms }}</div> -->
</div>
</div>
</div>
@ -47,6 +53,7 @@
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
position: relative;
text-align: center;
&::before {
content: '';

@ -7,7 +7,63 @@
<script lang='ts' setup>
import echarts from '/@/utils/lib/echarts';
import { onMounted } from 'vue'
import { onMounted,nextTick } from 'vue'
const props = defineProps({
data: {
type: Array,
default: [
{
text: '前言探索',
value: 0,
},
{
capacityName: '奠定基础',
value: 0,
},
{
capacityName: '知识分析',
value: 0,
},
{
capacityName: '社会责任',
value: 0,
},
{
capacityName: '独立思考',
value: 0,
},
{
capacityName: '拓宽视野',
value: 0,
},
{
capacityName: '激发兴趣',
value: 0,
},
{
capacityName: '沟通协调',
value: 0,
},
{
capacityName: '设计开发',
value: 0,
},
{
capacityName: '研判分析',
value: 0,
},
{
capacityName: '创新能力',
value: 0,
},
{
capacityName: '团队协作',
value: 0,
},
],
},
});
const throttle = (fn: any) => {
let timer: any;
return function () {
@ -21,69 +77,21 @@ const throttle = (fn: any) => {
}, 1000);
};
};
onMounted(() => {
let Data = props.data
console.log(Data, props.data);
nextTick(() => {
// @ts-ignore
const myChart = echarts.init(document.getElementById("rander-chart"));
console.log(myChart);
console.log(Data,1111);
// var legendData = ['']; //
var indicator = [
{
text: "前言探索",
max: 6000,
},
{
text: "奠定基础",
max: 5000,
},
{
text: "知识分析",
max: 5000,
},
{
text: "社会责任",
max: 5000,
},
{
text: "独立思考",
max: 5500,
},
{
text: "拓宽视野",
max: 5000,
},
{
text: "激发兴趣",
max: 5000,
},
{
text: "沟通协调",
max: 5000,
},
{
text: "设计开发",
max: 5000,
},
{
text: "研判分析",
max: 5000,
},
{
text: "创新能力",
max: 5000,
},
{
text: "团队协作",
max: 5000,
},
];
var indicator =Data.map(item => {
return {name:item.capacityName,max:100}
});
var dataArr = [
{
value: [
4000, 700, 3600, 3900, 1800, 4200, 700, 3600, 4200, 700, 3600, 4200,
700, 3600,
],
value:Data.map(item => item.value),
name: '年度维度分析',
itemStyle: {
normal: {
@ -188,6 +196,10 @@ onMounted(() => {
myChart.resize();
});
window.addEventListener("resize", resize);
})
onMounted(() => {
});
</script>

@ -8,6 +8,7 @@
<script lang="ts" setup>
import echarts from '/@/utils/lib/echarts';
import { SvgIcon } from '/@/components/Icon';
const props = defineProps(['data'])
import { onMounted } from 'vue';
const throttle = (fn: any) => {
@ -24,12 +25,19 @@
};
};
onMounted(() => {
let arr:any = []
for (const key in props.data) {
arr.push({value:props.data[key],name:key})
}
console.log(arr,props.data);
// @ts-ignore
const myChart = echarts.init(document.getElementById('ringChart'));
const option = {
title: {
subtext: '线上渠道占比',
text: '78%',
subtext: '比赛获奖占比',
text: arr.reduce((accumulator, currentValue) => {
return accumulator + currentValue.value;
}, 0),
left: 'center',
top: '47%',
padding: [24, 0],
@ -52,12 +60,7 @@
type: 'pie',
center: ['50%', '55%'],
radius: ['30%', '45%'],
data: [
{ value: 1048, name: '比赛一', itemStyle: { color: '#0052d9' } },
{ value: 735, name: '比赛二', itemStyle: { color: '#699ef5' } },
{ value: 580, name: '比赛三', itemStyle: { color: '#d9e1ff' } },
// { value: 484, name: '' ,itemStyle: {color: '#0052d9'}},
],
data: arr,
labelLine: {
show: false,
},

@ -1,17 +1,44 @@
<template>
<div class="container">
<div class="container" v-if="isLoading">
<div class="title">河南机电学院比赛综合报告<div style="margin-left: 10px;cursor: pointer;"><SvgIcon name="log" @click="log"/></div></div>
<p class="description"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国际化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
<div class="card-content">
<div class="item" v-for="item in 4" :key="item">
<div class="item">
<div class="top-title">本年度已开展比赛数</div>
<div class="sum">88</div>
<div class="sum">{{ data.本年度已开展比赛项目数 }}</div>
<div class="content">
<div>国赛12</div>
<div>国赛12</div>
<div>国赛12</div>
<div>国赛{{data.国赛}}</div>
<div>省赛{{ data.省赛 }}</div>
<div>校赛{{ data.校赛 }}</div>
</div>
</div>
<div class="item">
<div class="top-title">本年度已开展比赛数</div>
<div class="sum">{{ data.本年度已开展比赛数 }}</div>
<div class="content">
<div>国赛{{data.国赛}}</div>
<div>省赛{{ data.省赛 }}</div>
<div>校赛{{ data.校赛 }}</div>
</div>
</div>
<div class="item">
<div class="top-title">本年度参加比赛队伍数</div>
<div class="sum">{{ data.本年度参加比赛队伍数}}</div>
<div class="content">
<div>国赛{{data.国赛}}</div>
<div>省赛{{ data.省赛 }}</div>
<div>校赛{{ data.校赛 }}</div>
</div>
</div>
<div class="item">
<div class="top-title">已完成的比赛</div>
<div class="sum">{{ data.已完成的比赛 }}</div>
<div class="content">
<div>国赛{{data.国赛}}</div>
<div>省赛{{ data.省赛 }}</div>
<div>校赛{{ data.校赛 }}</div>
</div>
</div>
</div>
@ -23,10 +50,10 @@
<div class="year-content-top">
<div class="left border-000">
<div class="border-title">年度维度分析</div>
<randerChart />
<randerChart :data="data.学生能力平均值"/>
</div>
<div class="right border-000">
<cardList />
<cardList :DATA="data12"/>
</div>
</div>
@ -69,11 +96,11 @@
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<cakeChart />
<cakeChart :data="data.比赛类型占比"/>
</div>
</div>
<div class="footer-edit border-000">
<cardList2 />
<cardList2 :data="data.学生参赛情况"/>
</div>
</div>
<cardTitle title="比赛学生获奖情况分析" />
@ -87,11 +114,11 @@
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<ringChart />
<ringChart :data="data.比赛获奖占比"/>
</div>
</div>
<div class="footer-edit border-000">
<cardList3 />
<cardList3 :data="data.比赛获奖情况列表"/>
</div>
</div>
<cardTitle title="部门参赛情况分析" />
@ -100,16 +127,16 @@
>
<div class="participation-status-content">
<div class="right border-000">
<cardList4 />
<cardList4 :data="data.部门参赛情况列表"/>
</div>
<div class="left border-000" style="height: auto">
<!-- <div class="border-title">年度维度分析</div> -->
<cardList5 />
<cardList5 :data="data.比赛学生积分况分析"/>
</div>
</div>
<div class="footer border-000">
<!-- <div class="footer border-000">
<cardList6 />
</div>
</div> -->
</div>
</template>
@ -120,7 +147,7 @@
import cardList3 from './components/cardList3.vue';
import cardList4 from './components/cardList4.vue';
import cardList5 from './components/cardList5.vue';
import cardList6 from './components/cardList6.vue';
// import cardList6 from './components/cardList6.vue';
import { SvgIcon } from '/@/components/Icon';
import randerChart from './components/randerChart.vue';
@ -129,55 +156,68 @@
import pillarChart from './components/pillarChart.vue';
import { ref, onMounted, nextTick } from 'vue';
import { jsPDF } from 'jspdf';
import {getComprehensiveReport} from '/@/api/common/api';
const data = ref<any>({})
const isLoading = ref<any>(false)
const data12 = ref<any>([])
const getComprehensiveReportEvent = async () => {
const res = await getComprehensiveReport()
data.value = res
console.log(res);
data12.value = JSON.stringify(res.学生能力平均值)
isLoading.value = true
}
getComprehensiveReportEvent()
const activeKey = ref('1');
var indicator = [
{
text: '前言探索',
max: 6000,
max: 0,
},
{
text: '奠定基础',
max: 5000,
max: 0,
},
{
text: '知识分析',
max: 5000,
max: 0,
},
{
text: '社会责任',
max: 5000,
max: 0,
},
{
text: '独立思考',
max: 5500,
max: 0,
},
{
text: '拓宽视野',
max: 5000,
max: 0,
},
{
text: '激发兴趣',
max: 5000,
max: 0,
},
{
text: '沟通协调',
max: 5000,
max: 0,
},
{
text: '设计开发',
max: 5000,
max: 0,
},
{
text: '研判分析',
max: 5000,
max: 0,
},
{
text: '创新能力',
max: 5000,
max: 0,
},
{
text: '团队协作',
max: 5000,
max: 0,
},
];
const log = async () => {

@ -1,17 +1,44 @@
<template>
<div class="container">
<div class="container" v-if="isLoading">
<div class="title">河南机电学院比赛部门报告</div>
<p class="description"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国际化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
<div class="card-content">
<div class="item" v-for="item in 4" :key="item">
<div class="item">
<div class="top-title">本年度已开展比赛数</div>
<div class="sum">88</div>
<div class="sum">{{ data.本年度已开展比赛项目数 }}</div>
<div class="content">
<div>国赛12</div>
<div>国赛12</div>
<div>国赛12</div>
<div>国赛{{data.国赛}}</div>
<div>省赛{{ data.省赛 }}</div>
<div>校赛{{ data.校赛 }}</div>
</div>
</div>
<div class="item">
<div class="top-title">本年度已开展比赛数</div>
<div class="sum">{{ data.本年度已开展比赛数 }}</div>
<div class="content">
<div>国赛{{data.国赛}}</div>
<div>省赛{{ data.省赛 }}</div>
<div>校赛{{ data.校赛 }}</div>
</div>
</div>
<div class="item">
<div class="top-title">本年度参加比赛队伍数</div>
<div class="sum">{{ data.本年度参加比赛队伍数}}</div>
<div class="content">
<div>国赛{{data.国赛}}</div>
<div>省赛{{ data.省赛 }}</div>
<div>校赛{{ data.校赛 }}</div>
</div>
</div>
<div class="item">
<div class="top-title">已完成的比赛</div>
<div class="sum">{{ data.已完成的比赛 }}</div>
<div class="content">
<div>国赛{{data.国赛}}</div>
<div>省赛{{ data.省赛 }}</div>
<div>校赛{{ data.校赛 }}</div>
</div>
</div>
</div>
@ -23,10 +50,10 @@
<div class="year-content-top">
<div class="left border-000">
<div class="border-title">年度维度分析</div>
<randerChart />
<randerChart :data="data.学生能力平均值"/>
</div>
<div class="right border-000">
<cardList />
<cardList :DATA="data12"/>
</div>
</div>
@ -68,11 +95,11 @@
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<cakeChart />
<cakeChart :data="data.比赛类型占比"/>
</div>
</div>
<div class="footer-edit border-000">
<cardList2 />
<cardList2 :data="data.学生参赛情况"/>
</div>
</div>
<cardTitle title="比赛学生获奖情况分析" />
@ -86,11 +113,12 @@
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<ringChart />
<ringChart :data="data.比赛获奖占比"/>
</div>
</div>
<div class="footer-edit border-000">
<cardList3 />
<cardList3 :data="data.比赛获奖情况列表"/>
</div>
</div>
<cardTitle title="部门参赛情况分析" />
@ -99,13 +127,13 @@
>
<div class="participation-status-content">
<div class="right border-000">
<cardList7 />
<cardList7 :data="data.部门参赛情况列表"/>
</div>
</div>
<div class="footer border-000">
<cardList6 />
</div>
<!-- <div class="footer border-000">
<cardList6 :data="data.部门获奖情况列表"/>
</div> -->
</div>
</template>
@ -121,8 +149,25 @@
import cakeChart from './components/cakeChart.vue';
import ringChart from './components/ringChart.vue';
import pillarChart from './components/pillarChart.vue';
import {getdepartmentReport} from '/@/api/common/api';
import { ref } from 'vue';
import {useUserStore} from '/@/store/modules/user'
const userStore = useUserStore()
const activeKey = ref('1');
const data = ref<any>({})
const isLoading = ref<any>(false)
const data12 = ref<any>([])
const getdepartmentReportEvent = async() => {
const res = await getdepartmentReport({orgCode:userStore.userInfo.id
})
console.log(res);
data.value = res
data12.value = JSON.stringify(res.学生能力平均值)
isLoading.value = true
}
getdepartmentReportEvent()
var indicator = [
{
text: '前言探索',
@ -347,4 +392,7 @@
font-size: 14px;
padding: 0 20px;
}
.tetx-style {
font-size: 24px;
}
</style>

@ -41,7 +41,7 @@
>
<div class="participation-status-content">
<div class="right border-000">
<cardList7/>
<cardList7 :data="data.allApList"/>
</div>
</div>
<cardTitle title="部门参赛情况分析" />

@ -17,6 +17,7 @@ enum Api {
importExcel = '/topic/topic/importExcel',
exportXls = '/topic/topic/exportXls',
addScoreSta = '/scoresta/scoreSta/addScoreSta',
getdate = '/topic/topic/getdate',
}
export const addScoreSta = (params, isUpdate) => {
@ -46,6 +47,13 @@ export const list3 = (params) => defHttp.get({url: Api.list3, params});
export const list5 = (params) => defHttp.get({url: Api.list5, params});
export const Update = (params) => defHttp.post({url: Api.edit, params});
export const select = (params) => defHttp.post({url: Api.select, params});
/*export const getdate = (params) => defHttp.get({url: Api.getdate, params});*/
export const getdate = (params) =>
defHttp.get({
url: Api.getdate,
params
});
/**
*

@ -56,8 +56,14 @@ import JSwitch from '/@/components/Form/src/jeecg/components/JSwitch.vue';
import JPopup from '/@/components/Form/src/jeecg/components/JPopup.vue';
import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
import { getValueType } from '/@/utils';
import { saveOrUpdate,select } from '../Topic.api';
import { saveOrUpdate,select,getdate } from '../Topic.api';
import { Form } from 'ant-design-vue';
import {useRoute} from "vue-router";
import {demoArticleListApi} from "/@/api/demo/mainHome";
const $Route = useRoute()
//
const props = defineProps({
formDisabled: { type: Boolean, default: false },
@ -101,12 +107,32 @@ const disabled = computed(()=>{
}
return props.formDisabled;
});
function routrtodate() {
const annualCompid = $Route.query.annualCompid;
formData.annualCompid = annualCompid;
console.log( formData.annualCompid,annualCompid,'111')
};
routrtodate();
let compName = ''
function getData() {
return new Promise((resovle,rej) => {
const annualCompid = $Route.query.annualCompid;
getdate({ annualCompid:annualCompid }).then(res => {
console.log(res,'2222')
compName = res
resovle(res)
})
})
};
// getData();
/**
* 新增
*/
function add() {
async function add() {
const res = await getData()
setFieldsValue({annualCompid:formData.annualCompid,annualCompid_dictText:res})
edit({});
}
function change(record){
@ -166,6 +192,7 @@ async function submitForm() {
* popup组件值改变事件
*/
function setFieldsValue(map) {
console.log(map)
Object.keys(map).map((key) => {
formData[key] = map[key];
});

Loading…
Cancel
Save