Merge remote-tracking branch 'origin/gst4base' into gst4base

gst4base
王家东 2 months ago
commit c99350a977
  1. 178
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/awardpersion/controller/AwardPersionController.java
  2. 2
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/awardpersion/entity/AwardPersion.java
  3. 1
      jeecgboot-vue3-master/src/assets/icons/cuowu.svg
  4. 1
      jeecgboot-vue3-master/src/assets/icons/duihao.svg
  5. 1
      jeecgboot-vue3-master/src/assets/icons/phone.svg
  6. 1
      jeecgboot-vue3-master/src/assets/icons/weiChart.svg
  7. 2
      jeecgboot-vue3-master/src/assets/loginmini/style/base.less
  8. 45
      jeecgboot-vue3-master/src/assets/loginmini/style/home.less
  9. 30
      jeecgboot-vue3-master/src/components/SimpleMenu/src/components/menu.less
  10. 2
      jeecgboot-vue3-master/src/design/color.less
  11. 2
      jeecgboot-vue3-master/src/layouts/default/sider/LayoutSider.vue
  12. 2
      jeecgboot-vue3-master/src/logics/theme/updateBackground.ts
  13. 6
      jeecgboot-vue3-master/src/settings/designSetting.ts
  14. 387
      jeecgboot-vue3-master/src/views/annualcomp/uncommitted/AnnualCompList.vue
  15. 206
      jeecgboot-vue3-master/src/views/annualcomp/uncommitted/AnnualCompList1.vue
  16. 154
      jeecgboot-vue3-master/src/views/annualcomp/uncommitted/components/cardItem.vue
  17. 4
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList.vue
  18. 4
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList2.vue
  19. 4
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList3.vue
  20. 4
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList4.vue
  21. 4
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList5.vue
  22. 4
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList6.vue
  23. 4
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList7.vue
  24. 4
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList8.vue
  25. 2
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/pillarChart.vue
  26. 6
      jeecgboot-vue3-master/src/views/depart/workbench/components/chDepartment/index.vue
  27. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/chDepartment/options.js
  28. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/chExpert/index copy.vue
  29. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/chExpert/index.vue
  30. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/chSchool/index.vue
  31. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/chSchool/options.js
  32. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/components/cardList.vue
  33. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/components/cardListFive.vue
  34. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/components/cardListFour.vue
  35. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/components/cardListThree.vue
  36. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/components/cardListtow.vue
  37. 4
      jeecgboot-vue3-master/src/views/depart/workbench/components/organizingCommittee/organizingCommittee.vue
  38. 64
      jeecgboot-vue3-master/src/views/system/loginmini/MiniLogin.vue
  39. 5
      jeecgboot-vue3-master/src/views/system/loginmini/MiniRegister.vue

@ -459,7 +459,183 @@ public class AwardPersionController extends JeecgController<AwardPersion, IAward
//@RequiresPermissions("awardpersion:award_persion:exportXls") //@RequiresPermissions("awardpersion:award_persion:exportXls")
@RequestMapping(value = "/exportXls") @RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, AwardPersion awardPersion) { public ModelAndView exportXls(HttpServletRequest request, AwardPersion awardPersion) {
return super.exportXls(request, awardPersion, AwardPersion.class, "获奖管理");
//逻辑变动:奖项管理针对学生(上传证书和查询),组委会(全部都可以),学院(上传和查询),学校(教务处)(全部都可以),做一下数据筛选以及操作列权限
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
List<SysRole> sysRoleList = sysUserRoleService.getUserRoleByUserId(user.getId());
if(sysRoleList.get(0).getId().equals("1724327596426760194")){
//学生(上传证书和查询)(根据学号查询筛选)
QueryWrapper<AwardPersion> queryWrapper = QueryGenerator.initQueryWrapper(awardPersion, request.getParameterMap());
queryWrapper.eq("studentcode",sysUserService.getById(user.getId()).getWorkNo());
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
queryWrapper.in("id",selectionList);
}
// Step.2 获取导出数据
List<AwardPersion> exportList = awardPersionService.list(queryWrapper);
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
//此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(NormalExcelConstants.FILE_NAME, "获奖管理");
mv.addObject(NormalExcelConstants.CLASS, AwardPersion.class);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams("获奖管理" + "报表", "导出人:" + user.getRealname(), "获奖管理");
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
//update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS,exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
return mv;
}else if(sysRoleList.get(0).getId().equals("1693451972151386114")){
//组委会(全部都可以)(根据比赛负责人查询比赛id筛选)
Comp comp = new Comp();
QueryWrapper<Comp> queryWrappercomp = QueryGenerator.initQueryWrapper(comp, request.getParameterMap());
queryWrappercomp.eq("comp_admin",user.getUsername());
if(awardPersion.getComType()!=null){
queryWrappercomp.eq("comp_type_id",awardPersion.getComType());
}
List<Comp> list = compService.list(queryWrappercomp);
if(list.size()==0){
return null;
/* if(awardPersion.getComType()==null){
return Result.error("未绑定比赛");
}else {
return Result.error("未绑定该比赛类型的比赛");
}*/
}
List<String> ids = list.stream().map(Comp::getId).collect(Collectors.toList());
QueryWrapper<AnnualComp> queryWrapperAnnual = new QueryWrapper<>();
queryWrapperAnnual.in("compid",ids);
List<AnnualComp> listAnnual = annualCompService.list(queryWrapperAnnual);
if(listAnnual.size()==0){
/*return Result.error("未创建年度比赛");*/
return null;
}
List<String> annualIds = listAnnual.stream().map(AnnualComp::getId).collect(Collectors.toList());
QueryWrapper<AwardPersion> queryWrapper = QueryGenerator.initQueryWrapper(awardPersion, request.getParameterMap());
queryWrapper.in("annal_comp",annualIds);
AnnualCompPoint annualCompPoint = new AnnualCompPoint();
QueryWrapper<AnnualCompPoint> queryWrapperacp = QueryGenerator.initQueryWrapper(annualCompPoint, request.getParameterMap());
queryWrapperacp.in("annual_comp_id",annualIds);
queryWrapperacp.eq("annual_comp_switch","Y"); // 比赛必须是开启的
if(awardPersion.getObjLevel()!=null){
queryWrapperacp.eq("obj_level",awardPersion.getObjLevel());
}
List<AnnualCompPoint> listacp = annualCompPointService.list(queryWrapperacp);
if(listacp.size()==0){
/*if(awardPersion.getObjLevel()==null){
return Result.error("未创建年度比赛项目");
}else {
return Result.error("未创建该项目层次的年度比赛项目");
}*/
return null;
}
List<String> acpIds = listacp.stream().map(AnnualCompPoint::getId).collect(Collectors.toList());
queryWrapper.in("annual_comp_p",acpIds);
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
queryWrapper.in("id",selectionList);
}
// Step.2 获取导出数据
List<AwardPersion> exportList = awardPersionService.list(queryWrapper);
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
//此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(NormalExcelConstants.FILE_NAME, "获奖管理");
mv.addObject(NormalExcelConstants.CLASS, AwardPersion.class);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams("获奖管理" + "报表", "导出人:" + user.getRealname(), "获奖管理");
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
//update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS,exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
return mv;
}else if(sysRoleList.get(0).getId().equals("1693452352310517762")){
//学院(上传和查询)(根据部门查询数据,该学院下所有学生的获奖信息)
QueryWrapper<AwardPersion> queryWrapper = QueryGenerator.initQueryWrapper(awardPersion, request.getParameterMap());
queryWrapper.eq("studentorg",sysDepartService.queryDepartsByUsername(user.getUsername()).get(0).getId());
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
queryWrapper.in("id",selectionList);
}
// Step.2 获取导出数据
List<AwardPersion> exportList = awardPersionService.list(queryWrapper);
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
//此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(NormalExcelConstants.FILE_NAME, "获奖管理");
mv.addObject(NormalExcelConstants.CLASS, AwardPersion.class);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams("获奖管理" + "报表", "导出人:" + user.getRealname(), "获奖管理");
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
//update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS,exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
return mv;
}else {
//学校和超级管理员(全部都可以)(查全部数据)
QueryWrapper<AwardPersion> queryWrapper = QueryGenerator.initQueryWrapper(awardPersion, request.getParameterMap());
if (awardPersion.getComType() != null) {
QueryWrapper<Comp> queryWrappercomp = new QueryWrapper<>();
queryWrappercomp.eq("comp_type_id", awardPersion.getComType());
List<Comp> list = compService.list(queryWrappercomp);
if (list.size() == 0) {
return null;
}
List<String> ids = list.stream().map(Comp::getId).collect(Collectors.toList());
QueryWrapper<AnnualComp> queryWrapperAnnual = new QueryWrapper<>();
queryWrapperAnnual.in("compid", ids);
List<AnnualComp> listAnnual = annualCompService.list(queryWrapperAnnual);
if (listAnnual.size() == 0) {
return null;
}
List<String> annualIds = listAnnual.stream().map(AnnualComp::getId).collect(Collectors.toList());
queryWrapper.in("annal_comp", annualIds);
}
if (awardPersion.getObjLevel() != null) {
QueryWrapper<AnnualCompPoint> queryWrapperacp = new QueryWrapper<>();
queryWrapperacp.eq("obj_level", awardPersion.getObjLevel());
List<AnnualCompPoint> listacp = annualCompPointService.list(queryWrapperacp);
if (listacp.size() == 0) {
return null;
}
List<String> acpIds = listacp.stream().map(AnnualCompPoint::getId).collect(Collectors.toList());
queryWrapper.in("annual_comp_p", acpIds);
}
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
queryWrapper.in("id", selectionList);
}
// Step.2 获取导出数据
List<AwardPersion> exportList = awardPersionService.list(queryWrapper);
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
//此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(NormalExcelConstants.FILE_NAME, "获奖管理");
mv.addObject(NormalExcelConstants.CLASS, AwardPersion.class);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
ExportParams exportParams = new ExportParams("获奖管理" + "报表", "导出人:" + user.getRealname(), "获奖管理");
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
//update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS, exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
return mv;
}
} }
/** /**

@ -118,7 +118,7 @@ public class AwardPersion implements Serializable {
private String sczs; private String sczs;
/**推荐*/ /**推荐*/
@Excel(name = "是否推荐", width = 15, dicCode = "yn") //@Excel(name = "是否推荐", width = 15, dicCode = "yn")
@Dict(dicCode = "yn") @Dict(dicCode = "yn")
@ApiModelProperty(value = "推荐") @ApiModelProperty(value = "推荐")
private String tj; private String tj;

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725955836533" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8212" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 981.333333C252.8 981.333333 42.666667 771.2 42.666667 512S252.8 42.666667 512 42.666667s469.333333 210.133333 469.333333 469.333333-210.133333 469.333333-469.333333 469.333333z m44.245333-469.333333l159.914667-159.914667a31.274667 31.274667 0 1 0-44.245333-44.245333L512 467.754667 352.085333 307.84a31.274667 31.274667 0 1 0-44.245333 44.245333L467.754667 512l-159.914667 159.914667a31.274667 31.274667 0 1 0 44.245333 44.245333L512 556.245333l159.914667 159.914667a31.274667 31.274667 0 1 0 44.245333-44.245333L556.245333 512z" fill="#F5222D" p-id="8213"></path></svg>

After

Width:  |  Height:  |  Size: 908 B

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725955851954" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12105" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M0 512C0 229.234759 229.234759 0 512 0s512 229.234759 512 512-229.234759 512-512 512S0 794.765241 0 512z m419.310345 194.630621a35.310345 35.310345 0 0 0 49.399172 1.271172l335.518897-311.931586a35.310345 35.310345 0 0 0-48.075035-51.729655l-309.124413 289.544827-145.125518-149.645241a35.310345 35.310345 0 1 0-50.688 49.169655l168.112552 173.320828z" fill="#00B42A" p-id="12106" data-spm-anchor-id="a313x.search_index.0.i7.2a503a81eMAc4W" class="selected"></path></svg>

After

Width:  |  Height:  |  Size: 805 B

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725864796017" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10222" data-spm-anchor-id="a313x.search_index.0.i20.3c553a81eQtw9b" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512.1 512.4m-448 0a448 448 0 1 0 896 0 448 448 0 1 0-896 0Z" fill="#1890ff" p-id="10223" data-spm-anchor-id="a313x.search_index.0.i16.3c553a81eQtw9b" class=""></path><path d="M619.9 796.8H404.2c-23.8 0-43.3-19.5-43.3-43.3V271.2c0-23.8 19.5-43.3 43.3-43.3h215.7c23.8 0 43.3 19.5 43.3 43.3v482.3c0 23.9-19.5 43.3-43.3 43.3z" fill="#FFFFFF" p-id="10224"></path><path d="M623.2 734H401c-7.7 0-13.9-6.2-13.9-13.9V304.7c0-7.7 6.2-13.9 13.9-13.9h222.2c7.7 0 13.9 6.2 13.9 13.9v415.4c0 7.7-6.2 13.9-13.9 13.9z" fill="#515151" p-id="10225" data-spm-anchor-id="a313x.search_index.0.i17.3c553a81eQtw9b" class=""></path><path d="M512.1 765.8m-15.8 0a15.8 15.8 0 1 0 31.6 0 15.8 15.8 0 1 0-31.6 0Z" fill="#515151" p-id="10226" data-spm-anchor-id="a313x.search_index.0.i21.3c553a81eQtw9b" class="selected"></path><path d="M550.2 474.4c1-0.5 1.4-1.7 0.9-2.7-1.4-3.3-5.7-9.5-17.3-9.5-15.8 0-21.6 5.7-21.6 5.7s-4.1-5.7-21.6-5.7-25.1 23.5-21.3 42.3c4.1 20.2 17.5 39.6 25.9 39.6s10.9-4.6 18-4.6 12.3 4.6 18.3 4.6 13.1-5.2 18-13.4c3.4-5.7 5.3-11.5 6.1-14.6 0.3-1.1-0.3-2.2-1.4-2.6-4.1-1.3-13.1-5.6-13.1-19.2 0.1-13.1 6.2-18.2 9.1-19.9zM532.4 435.2c1.6-0.3 3.1 1 3 2.6-0.3 3.8-1.4 10.3-5.6 15.1-4.2 4.8-10.5 6.8-14.2 7.6-1.6 0.3-3.1-1-3-2.6 0.3-3.8 1.4-10.3 5.6-15.1 4.2-4.9 10.5-6.8 14.2-7.6z" fill="#515151" p-id="10227" data-spm-anchor-id="a313x.search_index.0.i18.3c553a81eQtw9b" class=""></path><path d="M522.8 263.5H473c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5h49.8c2.5 0 4.5 2 4.5 4.5s-2 4.5-4.5 4.5z" fill="#BF67E8" p-id="10228"></path><path d="M548.1 259.5m-5 0a5 5 0 1 0 10 0 5 5 0 1 0-10 0Z" fill="#BF67E8" p-id="10229"></path></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725864895169" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11798" data-spm-anchor-id="a313x.search_index.0.i31.3c553a81eQtw9b" xmlns:xlink="http://www.w3.org/1999/xlink" width="200.1953125" height="200"><path d="M570.934673 511.510499c-10.21403 0-20.43106 9.482028-20.43106 21.166062 0 9.484028 10.21403 18.967056 20.43106 18.967056 15.332045 0 26.277077-9.484028 26.277077-18.967056C597.21075 520.997526 586.266718 511.510499 570.934673 511.510499L570.934673 511.510499 570.934673 511.510499 570.934673 511.510499zM503.799476 412.98521c16.057047 0 26.271077-10.21403 26.271077-25.546075 0-16.053047-10.21403-25.541075-26.271077-25.541075-15.328045 0-29.925088 9.488028-29.925088 25.541075C473.874388 402.77518 488.471431 412.98521 503.799476 412.98521L503.799476 412.98521 503.799476 412.98521 503.799476 412.98521zM511.826499 63.943187c-247.385725 0-447.935312 200.545588-447.935312 447.930312 0 247.388725 200.549588 447.934312 447.935312 447.934312 247.384725 0 447.929312-200.545588 447.929312-447.934312C959.755812 264.487775 759.215224 63.943187 511.826499 63.943187L511.826499 63.943187 511.826499 63.943187 511.826499 63.943187zM427.167251 625.362832c-27.003079 0-46.708137-4.379013-72.254212-11.684034l-73.710216 37.225109 21.171062-62.765184c-51.817152-36.481107-82.471242-82.463242-82.471242-138.663406 0-99.251291 93.416274-175.148513 207.265607-175.148513 100.711295 0 190.484558 59.840175 207.998609 144.507423-7.301021-1.470004-13.871041-2.196006-19.706058-2.196006-99.256291 0-175.879515 74.440218-175.879515 164.204481 0 15.328045 2.187006 29.193086 5.835017 43.795128C439.580288 625.362832 433.006269 625.362832 427.167251 625.362832L427.167251 625.362832 427.167251 625.362832 427.167251 625.362832zM731.500143 696.881042l14.592043 52.548154-55.464162-31.380092c-21.163062 4.374013-41.600122 10.945032-62.762184 10.945032-97.795287 0-175.153513-67.141197-175.153513-150.33844 0-83.198244 77.358227-150.33844 175.153513-150.33844 92.686272 0 175.883515 67.141197 175.883515 150.33844C803.749355 625.362832 772.368263 666.957954 731.500143 696.881042L731.500143 696.881042 731.500143 696.881042 731.500143 696.881042zM359.296053 361.89806c-15.328045 0-31.380092 9.488028-31.380092 25.541075 0 15.332045 16.053047 25.551075 31.380092 25.551075 14.597043 0 26.271077-10.21903 26.271077-25.551075C385.56713 371.386088 373.893095 361.89806 359.296053 361.89806L359.296053 361.89806 359.296053 361.89806 359.296053 361.89806zM685.518008 511.510499c-10.945032 0-20.43306 9.482028-20.43306 21.166062 0 9.484028 9.488028 18.967056 20.43306 18.967056 14.596043 0 25.545075-9.484028 25.545075-18.967056C711.063083 520.997526 700.114051 511.510499 685.518008 511.510499L685.518008 511.510499 685.518008 511.510499 685.518008 511.510499zM685.518008 511.510499" fill="#28c445" p-id="11799" data-spm-anchor-id="a313x.search_index.0.i27.3c553a81eQtw9b" class=""></path></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -360,7 +360,7 @@ a {
.login-background-img { .login-background-img {
//background-image: url(../icon/jeecg_bg.png); //background-image: url(../icon/jeecg_bg.png);
//background-image: url(../icon/comp/comp_bg.png); //background-image: url(../icon/comp/comp_bg.png);
background-image: url(../../../../public/resource/img/comp/comp_bg.png); background-image: url(../../../../public/resource/img/comp/jingsaibjc.png);
background-size: cover; background-size: cover;

@ -4,29 +4,34 @@
} }
.aui-container { .aui-container {
max-width: 1000px; width: 640px;
height: 820px;
border-radius: 15px;
margin: 0 auto; margin: 0 auto;
box-shadow: 0 4px 8px 1px rgba(0, 0, 0, 0.2); box-shadow: 0 4px 8px 1px rgba(0, 0, 0, 0.2);
position: fixed; position: fixed;
top: 50%; top: 50%;
left: 50%; left: 50%;
width: 92%;
height: auto;
-webkit-transform: translateX(-50%) translateY(-50%); -webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%); -moz-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%); -ms-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%); transform: translateX(-50%) translateY(-50%);
-webkit-transform: translateX(-50%) translateY(-50%); -webkit-transform: translateX(-50%) translateY(-50%);
background-color: #ffffff1a !important;
padding: 70px 60px;
backdrop-filter: blur(10px)
}
.login-title{
font-size: 32px;
font-weight: 700;
}
.ant-input{
background-color: #fff;
} }
.aui-form { .aui-form {
width: 100%; width: 100%;
background: #eee; padding: 40px 30px;
display: -webkit-box; background-color: transparent !important;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
} }
.aui-image { .aui-image {
@ -62,9 +67,7 @@
flex-basis: 40%; flex-basis: 40%;
-webkit-flex-basis: 40%; -webkit-flex-basis: 40%;
box-sizing: border-box; box-sizing: border-box;
padding: 30px 20px; // background: #fff;
background: #fff;
box-shadow: 2px 9px 49px -17px rgba(0, 0, 0, 0.1);
} }
.aui-logo { .aui-logo {
@ -339,10 +342,9 @@
.aui-inputClear { .aui-inputClear {
width: 100%; width: 100%;
border-bottom: 1px solid #cccccc;
position: relative; position: relative;
padding-left: 20px; padding-left: 20px;
background: #fff; // background: #fff;
margin-bottom: 8px; margin-bottom: 8px;
margin-top: 20px; margin-top: 20px;
} }
@ -360,6 +362,7 @@
color: #333333; color: #333333;
font-size: 14px; font-size: 14px;
background: none; background: none;
background-color: #fff;
} }
.aui-code { .aui-code {
@ -382,13 +385,9 @@
background-image: url(../icon/icon-code.png); background-image: url(../icon/icon-code.png);
} }
.aui-inputClear:focus {
border-bottom: 1px solid #1b90ff;
}
.aui-inputClear:hover {
border-bottom: 1px solid #1b90ff;
}
.aui-choice { .aui-choice {
position: relative; position: relative;
@ -410,7 +409,7 @@
} }
.aui-forget a { .aui-forget a {
color: #1b90ff; color: #666;
font-size: 12px; font-size: 12px;
} }
@ -531,8 +530,8 @@
.aui-container { .aui-container {
width: 100%; width: 100%;
max-width: 550px;
margin-top: 10px; margin-top: 10px;
} }
.aui-content { .aui-content {

@ -160,9 +160,9 @@
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
color: @primary-color; color: #01DBAF !important;
} }
.@{menu-prefix-cls}-tooltip { .@{menu-prefix-cls}-tooltip {
@ -218,13 +218,15 @@
&-light&-vertical &-item { &-light&-vertical &-item {
&-active:not(.@{menu-prefix-cls}-submenu) { &-active:not(.@{menu-prefix-cls}-submenu) {
z-index: 2; z-index: 2;
color: @primary-color; color: #01DBAF !important;
background-color: fade(@primary-color, 10); background-color: fade(@primary-color, 10);
.light-border(); .light-border();
} }
&-active.@{menu-prefix-cls}-submenu { &-active.@{menu-prefix-cls}-submenu {
color: @primary-color; color: #01DBAF !important;
} }
} }
@ -232,7 +234,7 @@
> li.@{menu-prefix-cls}-item-active, > li.@{menu-prefix-cls}-item-active,
.@{menu-prefix-cls}-submenu-active { .@{menu-prefix-cls}-submenu-active {
position: relative; position: relative;
background-color: fade(@primary-color, 5); background-color: rgba(1, 219, 175, .1) !important;
&::after { &::after {
display: none; display: none;
@ -244,7 +246,7 @@
left: 0; left: 0;
width: 3px; width: 3px;
height: 100%; height: 100%;
background-color: @primary-color; background-color: #01DBAF !important;
content: ''; content: '';
} }
} }
@ -254,12 +256,12 @@
&-dark&-vertical &-submenu-title { &-dark&-vertical &-submenu-title {
color: @menu-dark-subsidiary-color; color: @menu-dark-subsidiary-color;
&-active:not(.@{menu-prefix-cls}-submenu) { &-active:not(.@{menu-prefix-cls}-submenu) {
color: #fff !important; color: #01DBAF !important;
background-color: @primary-color !important;
} }
&:hover { &:hover {
color: #fff; color: #01DBAF !important;
} }
} }
@ -267,8 +269,9 @@
> li.@{menu-prefix-cls}-item-active, > li.@{menu-prefix-cls}-item-active,
.@{menu-prefix-cls}-submenu-active { .@{menu-prefix-cls}-submenu-active {
position: relative; position: relative;
color: #fff !important; color: #01DBAF !important;
background-color: @sider-dark-darken-bg-color !important;
// background-color: pink !important;
&::before { &::before {
position: absolute; position: absolute;
@ -276,7 +279,7 @@
left: 0; left: 0;
width: 3px; width: 3px;
height: 100%; height: 100%;
background-color: @primary-color; background-color: #01DBAF !important;
content: ''; content: '';
} }
@ -289,7 +292,8 @@
&-dark&-vertical &-submenu &-item { &-dark&-vertical &-submenu &-item {
&-active, &-active,
&-active:hover { &-active:hover {
color: #fff; color: #01DBAF !important;
border-right: none; border-right: none;
} }
} }

@ -5,7 +5,7 @@ html {
--header-active-menu-bg-color: #273352; --header-active-menu-bg-color: #273352;
// sider // sider
--sider-dark-bg-color: #273352; --sider-dark-bg-color: #ffffff; // 侧边栏背景色
--sider-dark-darken-bg-color: #273352; --sider-dark-darken-bg-color: #273352;
--sider-dark-lighten-bg-color: #273352; --sider-dark-lighten-bg-color: #273352;
} }

@ -138,6 +138,8 @@
&.ant-layout-sider-dark { &.ant-layout-sider-dark {
background-color: @sider-dark-bg-color; background-color: @sider-dark-bg-color;
// background-color:#fff;
.ant-layout-sider-trigger { .ant-layout-sider-trigger {
color: darken(@white, 25%); color: darken(@white, 25%);

@ -56,7 +56,7 @@ export function updateSidebarBgColor(color?: string) {
if (darkMode) { if (darkMode) {
color = '#212121'; color = '#212121';
} else { } else {
color = appStore.getMenuSetting.bgColor; color = '#fff';
} }
} }
setCssVar(SIDER_DARK_BG_COLOR, color); setCssVar(SIDER_DARK_BG_COLOR, color);

@ -5,7 +5,7 @@ export const prefixCls = 'jeecg';
export const darkMode = ThemeEnum.LIGHT; export const darkMode = ThemeEnum.LIGHT;
// app theme preset color // app theme preset color
export const APP_PRESET_COLOR_LIST: string[] = ['#0960bd', '#1890ff', '#009688', '#536dfe', '#ff5c93', '#ee4f12', '#0096c7', '#9c27b0', '#ff9800']; export const APP_PRESET_COLOR_LIST: string[] = ['#0bd7c6', '#1890ff', '#009688', '#536dfe', '#ff5c93', '#ee4f12', '#0096c7', '#9c27b0', '#ff9800'];
// header preset color // header preset color
export const HEADER_PRESET_BG_COLOR_LIST: string[] = [ export const HEADER_PRESET_BG_COLOR_LIST: string[] = [
@ -18,13 +18,13 @@ export const HEADER_PRESET_BG_COLOR_LIST: string[] = [
'#e74c3c', '#e74c3c',
'#24292e', '#24292e',
'#394664', '#394664',
'#001529', '#ffffff',
'#383f45', '#383f45',
]; ];
// sider preset color // sider preset color
export const SIDE_BAR_BG_COLOR_LIST: string[] = [ export const SIDE_BAR_BG_COLOR_LIST: string[] = [
'#001529', '#ffffff',
'#212121', '#212121',
'#273352', '#273352',
'#ffffff', '#ffffff',

@ -1,206 +1,245 @@
<template> <template>
<div> <div class="main-box">
<!--引用表格--> <a-card title="年度比赛管理" :bordered="false" style="height: 100%">
<BasicTable @register="registerTable" :rowSelection="rowSelection"> <div class="filter-search">
<!--插槽:table标题--> <div class="left">
<template #tableTitle> <ul>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button> <li :class="index === activeIndex ? 'active' : ''" v-for="(item, index) in filterYearList" :key="index" @click="activeIndex = index">{{
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button> item
<!-- <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>--> }}</li>
<!-- <a-dropdown v-if="selectedRowKeys.length > 0"> </ul>
<template #overlay> </div>
<a-menu> <div class="right"> <a-input-search v-model:value="searchValue" placeholder="请输入年份" style="width: 320px" @search="onSearch" /></div>
<a-menu-item key="1" @click="batchHandleDelete"> </div>
<Icon icon="ant-design:delete-outlined" /> <div class="filter-search">
删除 <div class="left">
</a-menu-item> {{ filterYearList[activeIndex] }}
</a-menu> </div>
</template> <div class="right">
<a-button <a-radio-group v-model:value="radioValue" name="radioGroup">
>批量操作 <a-radio value="1">全部</a-radio>
<Icon icon="mdi:chevron-down" /> <a-radio value="2">已审核</a-radio>
</a-button> <a-radio value="3">待审核</a-radio>
</a-dropdown>--> <a-radio value="4">已驳回</a-radio>
</template> </a-radio-group>
<!--操作栏--> </div>
<template #action="{ record }"> </div>
<TableAction :actions="getTableAction(record)" /> <div class="race-box">
</template> <div class="add-race item" @click="addRace">
<!--字段回显插槽--> <PlusOutlined style="font-size: 22px" />
<template #htmlSlot="{ text }"> <div>点击添加比赛</div>
<div v-html="text"></div> </div>
</template> <cardItem v-for="item in raceList" @click="handleDetail(item)" :key="item.id" :data="item" @editChange="handleEdit" @delChange="handleDelete"/>
<!--省市区字段回显插槽--> </div>
<template #pcaSlot="{ text }"> <div class="pagination">
{{ getAreaTextByCode(text) }} <Pagination v-model:current="current" :total="50" show-less-items style="width: 300px; height: 30px" />
</template>
<template #fileSlot="{ text }">
<span v-if="!text" style="font-size: 12px; font-style: italic">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<AnnualCompModal @register="registerModal" @success="handleSuccess" />
</div> </div>
</a-card>
</div>
<AnnualCompModal @register="registerModal" @success="handleSuccess" />
</template> </template>
<script lang="ts" name="annualcomp-annualComp" setup> <script lang="ts" setup>
import { ref, computed, unref } from 'vue'; import { PlusOutlined } from '@ant-design/icons-vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table'; import { Pagination } from 'ant-design-vue';
import { ref } from 'vue';
import cardItem from './components/cardItem.vue';
import { list,deleteOne } from './AnnualComp.api';
import { useModal } from '/@/components/Modal'; import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import AnnualCompModal from './components/AnnualCompModal.vue';
import { columns, searchFormSchema } from './AnnualComp.data';
import { list, submit, enable, deactivate, deleteOne, batchDelete, getImportUrl, getExportUrl } from './AnnualComp.api';
import { downloadFile } from '/@/utils/common/renderUtils';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, { openModal }] = useModal(); const [registerModal, { openModal }] = useModal();
//table import AnnualCompModal from './components/AnnualCompModal.vue';
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '年度比赛管理',
api: list,
columns,
canResize: false,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: true,
fieldMapToNumber: [],
fieldMapToTime: [],
},
actionColumn: {
width: 120,
fixed: 'right',
},
},
exportConfig: {
name: '年度比赛管理',
url: getExportUrl,
},
importConfig: {
url: getImportUrl,
success: handleSuccess,
},
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext; const filterYearList = ref(['全部比赛', '2024年', '2023年', '其他年份']);
const activeIndex = ref(0);
const current = ref(2);
//
const searchValue = ref('');
const onSearch = () => {
console.log(searchValue.value);
};
/** //
* 新增事件 const radioValue = ref('1');
*/
function handleAdd() { //
const raceList = ref<any>([]);
const total = ref(0);
const getList = async () => {
const res = await list({ pageSize: 7 });
console.log(res);
raceList.value = res.records;
total.value = res.total;
};
getList();
//
const addRace = () => {
openModal(true, { openModal(true, {
isUpdate: false, isUpdate: false,
showFooter: true, showFooter: true,
}); });
} };
/** //
* 编辑事件 const handleSuccess = () => {
*/ console.log('操作成功');
function handleEdit(record: Recordable) { getList();
};
//
const handleEdit = (record: any) => {
openModal(true, { openModal(true, {
record, record,
isUpdate: true, isUpdate: true,
showFooter: true, showFooter: true,
}); });
} };
/** //
* 详情 const handleDetail = (record: any) => {
*/
function handleDetail(record: Recordable) {
openModal(true, { openModal(true, {
record, record,
isUpdate: true, isUpdate: true,
showFooter: false, showFooter: false,
}); });
} }
async function handleSubmit(record) {
await submit({ id: record.id }, handleSuccess);
}
async function handleEnable(record) {
await enable({ id: record.id }, handleSuccess);
}
async function handleDeactivate(record) {
await deactivate({ id: record.id }, handleSuccess);
}
/** /**
* 删除事件 * 删除事件
*/ */
async function handleDelete(record) { async function handleDelete(record) {
await deleteOne({ id: record.id }, handleSuccess); console.log(record,'record');
await deleteOne({ id: record.value.id }, handleSuccess);
} }
/** </script>
* 批量删除事件
*/ <style lang="less" scoped>
async function batchHandleDelete() { .main-box {
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess); width: 100%;
height: calc(100vh - 100px);
padding: 20px;
.filter-search {
height: 50px;
display: flex;
align-items: center;
justify-content: space-between;
.left {
ul {
padding: 0;
margin: 0;
display: flex;
align-items: center;
li {
width: 105px;
height: 43px;
line-height: 43px;
text-align: center;
background-color: #fff;
border-radius: 20px;
color: #4e5969;
margin: 10px;
font-weight: 600;
cursor: pointer;
} }
/** .active {
* 成功回调 background-color: #f2f3f5;
*/ color: #01dbaf;
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
} }
/**
* 操作栏
*/
function getTableAction(record) {
if (record.state_dictText == '待提交' || record.state_dictText == '已驳回') {
return [
{
label: '提交',
onClick: handleSubmit.bind(null, record),
},
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
{
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
},
},
];
}
if (record.state_dictText == '已提交') {
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
} else if (record.state_dictText == '已审核' && record.isopen == '0') {
return [
{
label: '启用',
onClick: handleEnable.bind(null, record),
},
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
} else
return [
{
label: '停用',
onClick: handleDeactivate.bind(null, record),
},
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
} }
</script> }
.right {
}
}
.race-box {
display: grid;
grid-template-columns: repeat(4, 1fr); /* 创建四个等宽的列 */
grid-template-rows: repeat(2, 1fr);
gap: 32px; /* 项目之间的间距 */
.add-race {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center !important;
cursor: pointer;
div {
margin-top: 20px;
}
}
.item {
width: 356px;
height: 232px;
border: 1px solid #e5e6eb;
padding: 20px;
display: flex;
flex-direction: column;
justify-content: space-between;
.title {
font-size: 22px;
font-weight: 700;
}
.time {
font-size: 16px;
color: #86909c;
}
.center {
ul {
display: flex;
flex-wrap: wrap;
<style scoped></style> li {
display: flex;
width: 50%;
.label {
color: #86909c;
}
}
li:nth-child(3) {
width: 100%;
}
}
}
.footer {
display: flex;
justify-content: space-between;
.left {
width: 90px;
height: 43px;
background-color: #e8ffea;
text-align: center;
line-height: 43px;
color: #00b42a;
display: flex;
align-items: center;
justify-content: center;
div {
margin-left: 5px;
}
}
.right {
display: flex;
div {
width: 80px;
height: 43px;
text-align: center;
line-height: 43px;
font-size: 16px;
}
.del {
background-color: #f2f3f5;
color: #4e5969;
}
.edit {
background-color: #00c7be;
color: #fff;
margin-left: 10px;
}
}
}
}
}
.pagination {
display: flex;
align-items: center;
justify-content: center;
margin-top: 30px;
}
}
</style>

@ -0,0 +1,206 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<!-- <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>-->
<!-- <a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined" />
删除
</a-menu-item>
</a-menu>
</template>
<a-button
>批量操作
<Icon icon="mdi:chevron-down" />
</a-button>
</a-dropdown>-->
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
<!--字段回显插槽-->
<template #htmlSlot="{ text }">
<div v-html="text"></div>
</template>
<!--省市区字段回显插槽-->
<template #pcaSlot="{ text }">
{{ getAreaTextByCode(text) }}
</template>
<template #fileSlot="{ text }">
<span v-if="!text" style="font-size: 12px; font-style: italic">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<AnnualCompModal @register="registerModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" name="annualcomp-annualComp" setup>
import { ref, computed, unref } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import AnnualCompModal from './components/AnnualCompModal.vue';
import { columns, searchFormSchema } from './AnnualComp.data';
import { list, submit, enable, deactivate, deleteOne, batchDelete, getImportUrl, getExportUrl } from './AnnualComp.api';
import { downloadFile } from '/@/utils/common/renderUtils';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, { openModal }] = useModal();
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '年度比赛管理',
api: list,
columns,
canResize: false,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: true,
fieldMapToNumber: [],
fieldMapToTime: [],
},
actionColumn: {
width: 120,
fixed: 'right',
},
},
exportConfig: {
name: '年度比赛管理',
url: getExportUrl,
},
importConfig: {
url: getImportUrl,
success: handleSuccess,
},
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
async function handleSubmit(record) {
await submit({ id: record.id }, handleSuccess);
}
async function handleEnable(record) {
await enable({ id: record.id }, handleSuccess);
}
async function handleDeactivate(record) {
await deactivate({ id: record.id }, handleSuccess);
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({ id: record.id }, handleSuccess);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 操作栏
*/
function getTableAction(record) {
if (record.state_dictText == '待提交' || record.state_dictText == '已驳回') {
return [
{
label: '提交',
onClick: handleSubmit.bind(null, record),
},
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
{
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
},
},
];
}
if (record.state_dictText == '已提交') {
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
} else if (record.state_dictText == '已审核' && record.isopen == '0') {
return [
{
label: '启用',
onClick: handleEnable.bind(null, record),
},
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
} else
return [
{
label: '停用',
onClick: handleDeactivate.bind(null, record),
},
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
];
}
</script>
<style scoped></style>

@ -0,0 +1,154 @@
<template>
<div>
<div class="item">
<div class="top">
<div class="title">{{ data.compname }}</div>
<div class="time">报名时间{{ data.starttime }}~{{ data.endtime }}</div>
</div>
<div class="center">
<ul>
<li><div class="label">比赛权重</div> <div class="content">4</div></li>
<li><div class="label">负责人</div> <div class="content">无糖</div></li>
<li><div class="label">负责部门</div> <div class="content">国际教育学院</div></li>
</ul>
</div>
<div class="footer">
<div
class="left"
:class="data.state == 0 ? ' status-color-1' : data.state == 1 ? ' status-color-1' : data.state == 2 ? ' status-color-2' : data.state == 3 ? ' status-color-3' : ''"
>
<SvgIcon :name="data.state == 0 ? 'duihao' : data.state == 1 ? 'duihao' : data.state == 2 ? 'duihao' : data.state == 3 ? 'cuowu' : ''" /> <div>{{ data.state_dictText }}</div>
</div>
<div class="right">
<div class="del" @click.stop="del"> 删除</div>
<div class="edit" @click.stop="edit">修改</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { watch, ref } from 'vue';
import SvgIcon from '/@/components/Icon/src/SvgIcon.vue';
const props = defineProps({
data: {
type: Object,
required: true,
},
});
const emits = defineEmits(['editChange', 'delChange']);
const data = ref(props.data);
console.log(props, 'props');
//
const edit = () => {
emits('editChange', data);
};
const del = () => {
emits('delChange', data);
};
watch(
() => props.data,
(newVal) => {
data.value = newVal;
}
);
</script>
<style lang="less" scoped>
.item {
width: 356px;
height: 232px;
border: 1px solid #e5e6eb;
padding: 20px;
display: flex;
flex-direction: column;
justify-content: space-between;
cursor: pointer;
transition: all 0.3s;
.title {
font-size: 22px;
font-weight: 700;
}
.time {
font-size: 16px;
color: #86909c;
}
.center {
ul {
display: flex;
flex-wrap: wrap;
li {
display: flex;
width: 50%;
.label {
color: #86909c;
}
}
li:nth-child(3) {
width: 100%;
}
}
}
.footer {
display: flex;
justify-content: space-between;
.left {
width: 90px;
height: 43px;
text-align: center;
line-height: 43px;
display: flex;
align-items: center;
justify-content: center;
div {
margin-left: 5px;
}
}
.status-color-1 {
color: #165dff;
background-color: #e8f3ff;
}
.status-color-2 {
color: #00b42a;
background-color: #e8ffea;
}
.status-color-3 {
color: #f53f3f;
background-color: #ffece8;
}
.right {
display: flex;
div {
width: 80px;
height: 43px;
text-align: center;
line-height: 43px;
font-size: 16px;
cursor: pointer;
}
.del {
background-color: #f2f3f5;
color: #4e5969;
}
.del:hover {
border: 1px solid #ccc;
}
.edit {
background-color: #00c7be;
color: #fff;
margin-left: 10px;
}
.edit:hover {
border: 1px solid #348d89;
}
}
}
}
.item:hover {
transform: translateY(-5px);
}
</style>

@ -191,7 +191,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -209,7 +209,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -126,7 +126,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -144,7 +144,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -131,7 +131,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -149,7 +149,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -124,7 +124,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -142,7 +142,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -126,7 +126,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -144,7 +144,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -131,7 +131,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -149,7 +149,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -127,7 +127,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -145,7 +145,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -113,7 +113,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -131,7 +131,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -56,7 +56,7 @@
data: [33, 44, 58, 85, 47, 38, 45], data: [33, 44, 58, 85, 47, 38, 45],
barWidth: '20px', barWidth: '20px',
itemStyle: { itemStyle: {
color: '#0052D9', color: '#0ad8c7',
} }
}, },
{ {

@ -251,7 +251,7 @@ onMounted(() => {
transform: translateY(-50%); transform: translateY(-50%);
width: 8px; width: 8px;
height: 8px; height: 8px;
background: #0052D9; background: #0ad8c7;
border-radius: 50%; border-radius: 50%;
} }
} }
@ -623,7 +623,7 @@ onMounted(() => {
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052D9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -641,7 +641,7 @@ onMounted(() => {
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052D9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -1,7 +1,7 @@
// 部门比赛情况分布 圆环 // 部门比赛情况分布 圆环
export const optionRing = { export const optionRing = {
color: [ color: [
'#0052D9', '#0ad8c7',
'#699EF5', '#699EF5',
'#B5C7FF', '#B5C7FF',
], ],
@ -89,7 +89,7 @@ export const optionBar = {
data: [33, 44, 58, 85, 47, 38, 45], data: [33, 44, 58, 85, 47, 38, 45],
barWidth: '20px', barWidth: '20px',
itemStyle: { itemStyle: {
color: '#0052D9', color: '#0ad8c7',
} }
}, },
{ {

@ -314,7 +314,7 @@ getZjsybsjs().then(res => {
} }
&:nth-of-type(-n + 4) .ranking .ol { &:nth-of-type(-n + 4) .ranking .ol {
background: #0052D9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
@ -330,7 +330,7 @@ getZjsybsjs().then(res => {
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052D9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -324,7 +324,7 @@ function reset() {
} }
&:nth-of-type(-n + 4) .ranking .ol { &:nth-of-type(-n + 4) .ranking .ol {
background: #0052D9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
@ -340,7 +340,7 @@ function reset() {
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052D9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -477,7 +477,7 @@ onMounted(() => {
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052D9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -495,7 +495,7 @@ onMounted(() => {
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052D9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -1,7 +1,7 @@
// 部门比赛情况分布 圆环 // 部门比赛情况分布 圆环
export const optionRing = { export const optionRing = {
color: [ color: [
'#0052D9', '#0ad8c7',
'#699EF5', '#699EF5',
'#B5C7FF', '#B5C7FF',
], ],
@ -89,7 +89,7 @@ export const optionBar = {
data: [33, 44, 58, 85, 47, 38, 45], data: [33, 44, 58, 85, 47, 38, 45],
barWidth: '20px', barWidth: '20px',
itemStyle: { itemStyle: {
color: '#0052D9', color: '#0ad8c7',
} }
}, },
{ {

@ -114,7 +114,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -132,7 +132,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -108,7 +108,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -126,7 +126,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -115,7 +115,7 @@ const router = useRouter()
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -133,7 +133,7 @@ const router = useRouter()
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -109,7 +109,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -127,7 +127,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -106,7 +106,7 @@
border-radius: 50%; border-radius: 50%;
&.ac { &.ac {
background: #0052d9; background: #0ad8c7;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
} }
@ -124,7 +124,7 @@
.operate { .operate {
font-size: 14px; font-size: 14px;
color: #0052d9; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -377,7 +377,7 @@
.card1 { .card1 {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: #018ffb; background-color: #0ad8c7;
padding: 20px; padding: 20px;
.title { .title {
display: flex; display: flex;
@ -531,7 +531,7 @@
position: absolute; position: absolute;
right: 20px; right: 20px;
top: 20px; top: 20px;
color: #018ffb; color: #0ad8c7;
cursor: pointer; cursor: pointer;
} }
} }

@ -1,18 +1,7 @@
<template> <template>
<div :class="prefixCls" class="login-background-img"> <div :class="prefixCls" class="login-background-img">
<div class="fixed">
<!-- <div style="width: 100px;height: 100px;cursor: pointer;">
<img style="width: 100%;height: 100%;" src="../../../assets/images/mainHome/div(1).png" alt="">
</div>-->
<!-- <div class="bas"></div>-->
<div class="card bot">
<!--<div class="img-box" onclick="window.location.href='http://10.20.15.171:3200/main-home'"><img src="../../../assets/images/mainHome/Frame.png" alt=""></div>-->
<div class="img-box" onclick="window.location.href='http://127.0.0.1:3200/main-home'"><img src="../../../assets/images/mainHome/Frame.png" alt=""></div>
<div class="text">新闻首页</div>
</div>
</div>
<AppLocalePicker class="absolute top-4 right-4 enter-x xl:text-gray-600" :showText="false"/> <AppLocalePicker class="absolute top-4 right-4 enter-x xl:text-gray-600" :showText="false"/>
<AppDarkModeToggle class="absolute top-3 right-7 enter-x" /> <AppDarkModeToggle class="absolute top-3 right-7 enter-x" />
@ -30,39 +19,32 @@
<div class="aui-content"> <div class="aui-content">
<div class="aui-container"> <div class="aui-container">
<div class="aui-form"> <div class="aui-form">
<div :class=" type === 'login'?'aui-image' : 'aui-image1'">
<div class="aui-image-text">
<!-- <img :src="adTextImg" />-->
</div>
</div>
<div class="aui-formBox"> <div class="aui-formBox">
<div class="aui-formWell"> <div class="aui-formWell">
<div class="aui-flex aui-form-nav investment_title"> <div class="login-title">{{ t('sys.login.signInFormTitle') }}</div>
<div class="aui-flex-box" :class="activeIndex === 'accountLogin' ? 'activeNav on' : ''" @click="loginClick('accountLogin')"
>{{ t('sys.login.signInFormTitle') }} <div class="aui-form-box">
</div>
<!-- <div class="aui-flex-box" :class="activeIndex === 'phoneLogin' ? 'activeNav on' : ''" @click="loginClick('phoneLogin')"
>{{ t('sys.login.mobileSignInFormTitle') }}
</div> -->
</div>
<div class="aui-form-box" style="height: 180px">
<a-form ref="loginRef" :model="formData" v-if="activeIndex === 'accountLogin'" @keyup.enter.native="loginHandleClick"> <a-form ref="loginRef" :model="formData" v-if="activeIndex === 'accountLogin'" @keyup.enter.native="loginHandleClick">
<div class="aui-account"> <div class="aui-account">
<div class="aui-inputClear"> <div class="aui-inputClear">
<i class="icon icon-code"></i>
<a-form-item> <a-form-item>
<div>账号</div>
<a-input class="fix-auto-fill" :placeholder="t('sys.login.userName')" v-model:value="formData.username" /> <a-input class="fix-auto-fill" :placeholder="t('sys.login.userName')" v-model:value="formData.username" />
</a-form-item> </a-form-item>
</div> </div>
<div class="aui-inputClear"> <div class="aui-inputClear">
<i class="icon icon-password"></i>
<a-form-item> <a-form-item>
<div>密码</div>
<a-input class="fix-auto-fill" type="password" :placeholder="t('sys.login.password')" v-model:value="formData.password" /> <a-input class="fix-auto-fill" type="password" :placeholder="t('sys.login.password')" v-model:value="formData.password" />
</a-form-item> </a-form-item>
</div> </div>
<div class="aui-inputClear"> <div class="aui-inputClear">
<i class="icon icon-code"></i>
<a-form-item> <a-form-item>
<div>验证码</div>
<a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.inputCode')" v-model:value="formData.inputCode" /> <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.inputCode')" v-model:value="formData.inputCode" />
</a-form-item> </a-form-item>
<div class="aui-code"> <div class="aui-code">
@ -71,12 +53,12 @@
</div> </div>
</div> </div>
<div class="aui-flex"> <div class="aui-flex">
<div class="aui-flex-box"> <!-- <div class="aui-flex-box">
<div class="aui-choice"> <div class="aui-choice">
<a-input class="fix-auto-fill" type="checkbox" v-model:value="rememberMe" /> <a-input class="fix-auto-fill" type="checkbox" v-model:value="rememberMe" />
<span style="margin-left: 5px">{{ t('sys.login.rememberMe') }}</span> <span style="margin-left: 5px">{{ t('sys.login.rememberMe') }}</span>
</div> </div>
</div> </div> -->
<div class="aui-forget"> <div class="aui-forget">
<a @click="forgetHandelClick"> {{ t('sys.login.forgetPassword') }}</a> <a @click="forgetHandelClick"> {{ t('sys.login.forgetPassword') }}</a>
</div> </div>
@ -108,9 +90,9 @@
<!-- <div class="aui-flex"> <!-- <div class="aui-flex">
<a class="aui-linek-code aui-flex-box" @click="codeHandleClick">{{ t('sys.login.qrSignInFormTitle') }}</a> <a class="aui-linek-code aui-flex-box" @click="codeHandleClick">{{ t('sys.login.qrSignInFormTitle') }}</a>
</div>--> </div>-->
<div class="aui-flex"> <!-- <div class="aui-flex">
<a class="aui-linek-code aui-flex-box" @click="registerHandleClick">{{ t('sys.login.registerButton') }}</a> <a class="aui-linek-code aui-flex-box" @click="registerHandleClick">{{ t('sys.login.registerButton') }}</a>
</div> </div> -->
</div> </div>
</div> </div>
<a-form @keyup.enter.native="loginHandleClick"> <a-form @keyup.enter.native="loginHandleClick">
@ -135,12 +117,20 @@
<a title="钉钉" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a> <a title="钉钉" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a>
</div> </div>
</div>--> </div>-->
<div class="aui-flex-box"> <div class="aui-flex-box" style="display: flex; align-items: center;justify-content: center;">
<div class="aui-third-login"> <div class="aui-third-login" style="margin: 0;margin-right: 40px;">
<a title="微信" @click="onThirdLogin('wechat_open')"><WechatFilled /></a> <!-- <a title="微信" @click="onThirdLogin('wechat_open')"><WechatFilled /></a> -->
<SvgIcon name="phone" :size="28"/>
</div> </div>
<div class="aui-third-login" style="margin: 0;margin-left: 40px;">
<SvgIcon name="weiChart" :size="28" />
<!-- <a title="微信" @click="onThirdLogin('wechat_open')"><WechatFilled /></a> -->
</div> </div>
</div> </div>
</div>
<div style="display: flex;justify-content: center;margin-top: 20px;">
还没账号?&nbsp;&nbsp;<span style="color: #02DDDD;cursor: pointer;" @click="registerHandleClick">点击注册</span>
</div>
</a-form> </a-form>
</div> </div>
</div> </div>
@ -175,7 +165,7 @@
import MiniCodelogin from './MiniCodelogin.vue'; import MiniCodelogin from './MiniCodelogin.vue';
// import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png'; // import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
import logoImg from '/public/resource/img/comp/comp_logo.png'; import logoImg from '/public/resource/img/comp/comp_logo.png';
import SvgIcon from '/@/components/Icon/src/SvgIcon.vue';
// import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png'; // import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application'; import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
import { useLocaleStore } from '/@/store/modules/locale'; import { useLocaleStore } from '/@/store/modules/locale';
@ -531,6 +521,8 @@
border-radius: 8px; border-radius: 8px;
margin-top: 15px; margin-top: 15px;
margin-bottom: 8px; margin-bottom: 8px;
background: linear-gradient(90deg, rgba(102,249,205,1) 0%, rgba(2,221,221,1) 100%);
border: none;
} }
.aui-phone-logo{ .aui-phone-logo{
position: absolute; position: absolute;

@ -2,11 +2,6 @@
<div class="aui-content"> <div class="aui-content">
<div class="aui-container"> <div class="aui-container">
<div class="aui-form"> <div class="aui-form">
<div class="aui-image1">
<!-- <div class="aui-image-text">
<img :src="jeecgAdTextImg" alt="" />
</div> -->
</div>
<div class="aui-formBox"> <div class="aui-formBox">
<div class="aui-formWell"> <div class="aui-formWell">
<a-form ref="formRef" :model="formData"> <a-form ref="formRef" :model="formData">

Loading…
Cancel
Save