开发后台首页
parent
eb26185e00
commit
423dd47d53
|
@ -116,6 +116,16 @@ public class SysUser extends BaseEntity
|
||||||
|
|
||||||
private Long workType;
|
private Long workType;
|
||||||
|
|
||||||
|
public String getVendorsCode() {
|
||||||
|
return vendorsCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVendorsCode(String vendorsCode) {
|
||||||
|
this.vendorsCode = vendorsCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String vendorsCode;
|
||||||
|
|
||||||
public Long getWorkType() {
|
public Long getWorkType() {
|
||||||
return workType;
|
return workType;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@ import com.yanzhu.common.security.annotation.InnerAuth;
|
||||||
import com.yanzhu.common.security.annotation.RequiresPermissions;
|
import com.yanzhu.common.security.annotation.RequiresPermissions;
|
||||||
import com.yanzhu.common.security.service.TokenService;
|
import com.yanzhu.common.security.service.TokenService;
|
||||||
import com.yanzhu.common.security.utils.SecurityUtils;
|
import com.yanzhu.common.security.utils.SecurityUtils;
|
||||||
|
import com.yanzhu.manage.domain.AttendanceCfg;
|
||||||
|
import com.yanzhu.manage.mapper.AttendanceCfgMapper;
|
||||||
import com.yanzhu.system.api.domain.SysDept;
|
import com.yanzhu.system.api.domain.SysDept;
|
||||||
import com.yanzhu.system.api.domain.SysRole;
|
import com.yanzhu.system.api.domain.SysRole;
|
||||||
import com.yanzhu.system.api.domain.SysUser;
|
import com.yanzhu.system.api.domain.SysUser;
|
||||||
|
@ -72,6 +74,9 @@ public class SysUserController extends BaseController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private TokenService tokenService;
|
private TokenService tokenService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AttendanceCfgMapper attendanceCfgMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户列表
|
* 获取用户列表
|
||||||
*/
|
*/
|
||||||
|
@ -129,6 +134,7 @@ public class SysUserController extends BaseController {
|
||||||
if (StringUtils.isNull(sysUser)) {
|
if (StringUtils.isNull(sysUser)) {
|
||||||
throw new ServiceException("用户名或密码错误");
|
throw new ServiceException("用户名或密码错误");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**if (StringUtils.isEmpty(sysUser.getRoles())) {
|
/**if (StringUtils.isEmpty(sysUser.getRoles())) {
|
||||||
throw new ServiceException("用户未查询到分配角色,请联系管理员!!!");
|
throw new ServiceException("用户未查询到分配角色,请联系管理员!!!");
|
||||||
}*/
|
}*/
|
||||||
|
@ -290,6 +296,13 @@ public class SysUserController extends BaseController {
|
||||||
user.setComId(dept.getComId());
|
user.setComId(dept.getComId());
|
||||||
user.setActiveComId(dept.getComId());
|
user.setActiveComId(dept.getComId());
|
||||||
user.setDept(dept);
|
user.setDept(dept);
|
||||||
|
AttendanceCfg cfgWhere=new AttendanceCfg();
|
||||||
|
cfgWhere.setProjectId(dept.getDeptId());
|
||||||
|
List<AttendanceCfg> cfgList=attendanceCfgMapper.selectAttendanceCfgList(cfgWhere);
|
||||||
|
if(cfgList.size()>0){
|
||||||
|
user.setVendorsCode(cfgList.get(0).getVendorsCode());
|
||||||
|
}
|
||||||
|
|
||||||
AjaxResult ajax = AjaxResult.success();
|
AjaxResult ajax = AjaxResult.success();
|
||||||
ajax.put("user", user);
|
ajax.put("user", user);
|
||||||
if(Objects.nonNull(user.getRoles()) && user.getRoles().size()>0){
|
if(Objects.nonNull(user.getRoles()) && user.getRoles().size()>0){
|
||||||
|
|
|
@ -17,8 +17,9 @@
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=6zAD8CIavtzWnkGg0a7roush5maGMIPn"
|
src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=6zAD8CIavtzWnkGg0a7roush5maGMIPn"
|
||||||
></script>
|
></script>
|
||||||
<script src="./static/BIMGISEngine.js"></script>
|
<script src="/cdn/echarts/echarts.min.js"></script>
|
||||||
<script src="./config.js"></script>
|
<script src="/cdn/bim/sapi/BIMGISEngine.js"></script>
|
||||||
|
<script src="/cdn/bim/sapi/config.js?v=20240415"></script>
|
||||||
<!--[if lt IE 11
|
<!--[if lt IE 11
|
||||||
]><script>
|
]><script>
|
||||||
window.location.href = "/html/ie.html";
|
window.location.href = "/html/ie.html";
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
//劳务人员工种占比
|
||||||
|
export function getWorkerCountGroupByType (type, prjId) {
|
||||||
|
return request({
|
||||||
|
url: `/manage/bgscreen/labor/getWorkerCountGroupByType/${type}/${prjId}`,
|
||||||
|
method: "get",
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//劳务人员七天出勤趋势
|
||||||
|
export function groupAttendanceLastWeek (type, prjId){
|
||||||
|
return request({
|
||||||
|
url: `/manage/bgscreen/labor/groupAttendanceLastWeek/${type}/${prjId}`,
|
||||||
|
method: "get",
|
||||||
|
});
|
||||||
|
};
|
|
@ -0,0 +1 @@
|
||||||
|
<svg class="icon" style="width: 1.1416015625em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1169 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15155"><path d="M72.227662 0h996.553234c17.168557 1.082587 33.980498 7.794627 46.780497 19.359204 16.162388 14.239204 25.7401 35.547065 25.6 57.084179 0.012736 167.915622 0.025473 335.831244 0 503.734129-25.803781-31.751642-58.192239-58.141294-94.605373-76.812736-37.686766-19.435622-79.627463-30.47801-121.988458-32.261094-49.620697-2.228856-99.776318 8.227662-144.238806 30.401592-37.393831 18.531343-70.737512 45.11204-97.216318 77.360398-29.497313 35.827264-50.384876 78.697711-60.255523 124.039005-14.277413 64.751443-6.075224 134.240796 23.294727 193.719403-189.911244 0.025473-379.809751 0.012736-569.708259 0.012736-21.549851 0.127363-42.883184-9.450348-57.096915-25.625473C7.8201 858.249552 1.146269 841.501294 0 824.409154V72.40597C1.120796 54.345871 8.54607 36.680597 21.167761 23.638607 34.38806 9.628657 53.046766 1.235423 72.227662 0m240.487164 132.190249c-28.64398 3.362388-56.07801 16.162388-77.054726 35.954627-22.530547 20.96398-37.623085 49.735323-41.927961 80.213333-4.444975 30.274229 1.630249 61.974925 17.104876 88.39005 16.862886 29.153433 44.857313 51.671244 77.029254 61.707462 31.369552 9.99801 66.330746 8.138507 96.41393-5.22189 30.121393-13.169353 55.071841-37.635821 68.890746-67.451542 14.442985-30.681791 16.71005-66.827463 6.393632-99.126767-9.488557-30.363383-30.108657-56.995025-56.918607-74.061691-26.415124-16.926567-58.790846-24.275423-89.931144-20.403582m333.475025 31.471443c-6.457313 2.088756-11.984876 6.852139-14.965174 12.940099-3.960995 7.845572-3.413333 17.741692 1.426467 25.077811 4.63602 7.374328 13.271244 11.895721 21.97015 11.679204 109.978109 0.025473 219.968955 0.025473 329.947064 0.012736 8.698905 0.216517 17.346866-4.304876 22.021095-11.666467 5.196418-7.883781 5.412935-18.684179 0.522189-26.771742-4.534129-7.832836-13.475025-12.774527-22.517811-12.507064-107.851144 0.012736-215.689552 0-323.52796 0-4.9799 0.038209-10.0999-0.38209-14.87602 1.235423m0.063681 110.793233c-6.775721 2.152438-12.545274 7.29791-15.436418 13.80617-3.642587 7.947463-2.763781 17.754428 2.279801 24.899502 4.725174 6.966766 13.080199 11.195224 21.498906 11.004179 110.436617 0 220.873234 0.076418 331.309851-0.038209 14.035423 0.012736 26.134925-13.334925 24.670248-27.319403-0.598607-9.832438-7.501692-18.837015-16.773731-22.084776-5.005373-1.897711-10.443781-1.464677-15.678408-1.490149H661.027662c-4.941692 0.038209-10.010746-0.38209-14.77413 1.222686M214.199403 476.605771c-30.516219 23.460299-53.925572 55.976119-66.636418 92.3001-12.507065 35.648955-14.557612 74.851343-6.024279 111.63383 130.101493 0.025473 260.190249-0.025473 390.291742 0.025473 9.552239-40.794428 5.896915-84.581891-10.418309-123.172935-16.95204-40.450547-47.646567-74.940498-85.804577-96.515821-32.286567-18.505871-69.858706-27.53592-107.010547-25.931144-41.252935 1.464677-81.843582 16.315224-114.397612 41.660497zM882.028259 511.694328c50.066468-5.84597 101.788657 3.247761 146.658706 26.300498 39.75005 20.3399 74.061692 51.2 98.413533 88.619303 21.231443 32.464876 34.922985 69.795025 39.60995 108.296916 5.514826 44.296915-0.611343 90.045771-17.970946 131.196816-21.129552 50.512239-58.943682 93.85393-106.144477 121.63184-32.65592 19.410149-69.74408 31.433234-107.609154 34.668259-44.742687 4.126567-90.542488-3.782687-131.273234-22.772537-37.228259-17.346866-70.202587-43.711045-95.254926-76.277811-27.29393-35.317811-45.137512-77.882587-50.983482-122.141294-6.355423-47.022488 0.458507-95.789851 19.906866-139.093333 18.505871-41.58408 48.359801-77.971741 85.384278-104.399602 35.012139-25.090547 76.456119-41.125572 119.262886-46.029055m144.633632 157.051543c-5.056318 1.69393-8.877214 5.553035-12.481592 9.297512-41.813333 41.813333-83.61393 83.626667-125.44 125.414527-26.020299-25.994826-52.027861-52.015124-78.035423-78.022686-3.222289-3.209552-6.317214-6.724776-10.469254-8.737115-7.705473-3.973731-17.512438-3.324179-24.606567 1.642986-5.553035 4.024677-10.341891 9.666866-11.704677 16.557213-1.872239 8.100299 0.904279 16.977512 6.915821 22.708856 33.52199 33.509254 67.018507 67.056716 100.578706 100.540498 6.406368 6.457313 16.56995 8.660697 25.103284 5.553035 6.266269-2.037811 10.405572-7.412537 15.385473-11.386269 47.009751-46.882388 93.904876-93.904876 140.889154-140.812736 3.515224-3.375124 6.32995-7.578109 7.463483-12.366966 5.234627-18.467662-15.652935-37.686766-33.598408-30.388855z" p-id="15156"></path></svg>
|
After Width: | Height: | Size: 4.4 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9306"><path d="M575.457882 507.512471c59.226353-23.476706 101.285647-81.212235 101.285647-148.690824 0-88.229647-71.785412-160-160.015058-160s-160 71.770353-160 160c0 67.478588 42.044235 125.214118 101.270588 148.690824-131.689412 27.226353-231.002353 144.097882-231.002353 283.738353 0 33.957647 23.823059 45.206588 42.962823 54.241882l1.099295 0.451765c77.176471 27.241412 188.792471 34.499765 242.582588 34.499764 58.654118 0 173.477647-9.517176 249.735529-35.855059 28.581647-10.962824 43.083294-28.912941 43.083294-53.338352 0-139.655529-99.312941-256.527059-231.002353-283.738353zM382.780235 494.034824c-37.903059-35.343059-61.741176-85.564235-61.741176-141.477648 0-68.472471 35.644235-128.512 89.283765-162.93647v-0.015059c-0.331294-0.466824-0.813176-0.737882-1.189648-1.129412-0.391529-0.421647-0.632471-0.948706-1.099294-1.325176a160.301176 160.301176 0 0 0-100.141176-35.312941c-88.229647 0-160.015059 71.770353-160.015059 160 0 67.478588 42.059294 125.214118 101.285647 148.690823C117.458824 487.755294 18.160941 604.626824 18.160941 744.267294c0 24.440471 14.501647 42.375529 43.459765 53.488941 42.887529 14.817882 96.105412 23.356235 134.128941 27.994353a322.409412 322.409412 0 0 1-2.409412-38.731294c0-130.439529 77.778824-242.642824 189.44-292.98447zM786.808471 460.544c59.226353-23.476706 101.285647-81.212235 101.285647-148.690824 0-88.229647-71.785412-160-160.015059-160-36.939294 0-73.005176 12.905412-101.51153 36.321883l-4.246588 3.478588a193.400471 193.400471 0 0 1 85.940706 160.903529c0 55.913412-23.838118 106.134588-61.741176 141.477648 111.661176 50.341647 189.44 162.544941 189.44 292.98447 0 13.402353-0.918588 26.578824-2.499765 39.544471l0.798118-0.090353c39.137882-4.547765 95.216941-13.206588 140.483764-28.852706 28.581647-10.962824 43.083294-28.912941 43.083294-53.338353 0-139.655529-99.312941-256.527059-231.017411-283.738353z" p-id="9307"></path></svg>
|
After Width: | Height: | Size: 2.0 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg class="icon" style="width: 1.1845703125em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1213 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14780"><path d="M836.957869 730.931102a533.337705 533.337705 0 0 1 62.582277 78.366681 113.758775 113.758775 0 1 0-62.582277-78.302604zM611.64031 644.61882a343.497676 343.497676 0 0 0 3.95144 136.143154l94.172445 59.805589 4.656292 111.345193a341.746227 341.746227 0 0 0 95.176324 63.223052 151.414938 151.414938 0 0 1-51.261934 8.864042H151.692606a151.649888 151.649888 0 0 1-151.649888-151.649888v-46.199818a533.017318 533.017318 0 0 1 246.356312-214.723426 341.618072 341.618072 0 0 0 365.24128 33.192102zM455.077819 0a265.451382 265.451382 0 0 1 265.4941 265.472741v75.846303a265.462061 265.462061 0 0 1-530.924122 0v-75.846303A265.451382 265.451382 0 0 1 455.077819 0z m407.062475 957.551569a265.195072 265.195072 0 0 1-88.704505-51.261935L769.420271 809.511375l-81.869581-51.924067a266.797007 266.797007 0 0 1 0-102.523869l81.869581-51.924067 4.015518-96.77826a265.195072 265.195072 0 0 1 88.747223-51.261934l85.885099 44.854193 85.927817-44.854193a264.703812 264.703812 0 0 1 88.704505 51.261934l4.015518 96.77826 81.86958 51.945427a266.797007 266.797007 0 0 1 0 102.523868L1126.73731 809.511375l-4.015518 96.735541a265.195072 265.195072 0 0 1-88.747224 51.261934l-85.885098-44.982347-85.927817 44.982347z" p-id="14781"></path></svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9814"><path d="M746.666667 512a234.666667 234.666667 0 1 1 0 469.333333 234.666667 234.666667 0 0 1 0-469.333333zM512 85.333333a234.496 234.496 0 0 1 208.213333 342.485334 319.914667 319.914667 0 0 0-230.442666 509.696c-33.194667 0.256-73.088 1.024-114.688 1.152h-22.186667l-10.794667-0.085334-21.717333-0.213333C201.130667 936.490667 85.333333 925.653333 85.333333 880.554667c0-128.469333 129.28-237.269333 306.304-271.829334 15.189333-7.594667 22.784-20.778667 22.784-39.509333 0-18.944-10.538667-36.949333-31.658666-53.973333A233.941333 233.941333 0 0 1 277.333333 319.658667 234.496 234.496 0 0 1 512 85.333333z m305.664 565.930667l-3.712 3.84-101.888 116.906667-30.336-32.085334-3.84-3.754666a42.666667 42.666667 0 0 0-62.592 57.045333l3.370667 4.181333 63.146666 68.053334 3.882667 3.797333a42.666667 42.666667 0 0 0 56.448-1.066667l3.797333-3.925333 133.205334-154.026667 3.2-4.352a42.666667 42.666667 0 0 0-64.682667-54.613333z" p-id="9815"></path></svg>
|
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6291"><path d="M69.5 913.4c0 25.8 20.9 46.6 46.6 46.6h791.8c25.7 0 46.6-20.8 46.6-46.6V507.2h-885v406.2z m377.8-357c0-11.5 12.9-20.7 28.8-20.7h71.8c15.8 0 28.8 9.3 28.8 20.7v51.8c0 11.5-12.8 20.7-28.8 20.7h-71.8c-15.8 0-28.8-9.3-28.8-20.7v-51.8zM908 256.3H723.7C718.2 149.1 630 64 521.4 64h-18.7C394.3 64 306 149.1 300.4 256.3H116.1c-25.7 0-46.6 20.8-46.6 46.5v189h885v-189c0.1-25.8-20.8-46.5-46.5-46.5z m-561 0c5.6-81.3 73-145.5 155.7-145.7h18.7c82.7 0.1 150.1 64.3 155.7 145.7H347z" p-id="6292"></path></svg>
|
After Width: | Height: | Size: 698 B |
|
@ -0,0 +1,61 @@
|
||||||
|
<template>
|
||||||
|
<div :id="id" :class="className" :style="{ height, width }" class="my-chart"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
id: {
|
||||||
|
type: String,
|
||||||
|
default: "barChart1",
|
||||||
|
},
|
||||||
|
className: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
width: {
|
||||||
|
type: String,
|
||||||
|
default: "400px",
|
||||||
|
},
|
||||||
|
height: {
|
||||||
|
type: String,
|
||||||
|
default: "400px",
|
||||||
|
},
|
||||||
|
render: {
|
||||||
|
type: Function,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chart: null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.chart = window.echarts.init(document.getElementById(this.id));
|
||||||
|
setTimeout(() => {
|
||||||
|
this.setOption({});
|
||||||
|
}, 400);
|
||||||
|
// 大小自适应
|
||||||
|
window.addEventListener("resize", () => {
|
||||||
|
this.chart.resize();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
reLoad() {
|
||||||
|
let opt = {};
|
||||||
|
if (this.render) {
|
||||||
|
opt = this.render(opt);
|
||||||
|
}
|
||||||
|
this.chart.setOption(opt, true);
|
||||||
|
},
|
||||||
|
setOption(opt) {
|
||||||
|
if (this.render) {
|
||||||
|
opt = this.render(opt, this.chart);
|
||||||
|
}
|
||||||
|
this.chart.setOption(opt);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style></style>
|
|
@ -18,6 +18,8 @@ const useUserStore = defineStore("user", {
|
||||||
currentPrjId: null,
|
currentPrjId: null,
|
||||||
currentProName: null,
|
currentProName: null,
|
||||||
isAdmin: false,
|
isAdmin: false,
|
||||||
|
vendorsCode:'',
|
||||||
|
user:null,
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
// 登录
|
// 登录
|
||||||
|
@ -55,6 +57,7 @@ const useUserStore = defineStore("user", {
|
||||||
} else {
|
} else {
|
||||||
this.roles = ["ROLE_DEFAULT"];
|
this.roles = ["ROLE_DEFAULT"];
|
||||||
}
|
}
|
||||||
|
this.user=user;
|
||||||
this.uid = user.userId;
|
this.uid = user.userId;
|
||||||
this.name = user.userName;
|
this.name = user.userName;
|
||||||
this.nickName = user.nickName;
|
this.nickName = user.nickName;
|
||||||
|
@ -64,6 +67,7 @@ const useUserStore = defineStore("user", {
|
||||||
this.currentComName = user.activeComName;
|
this.currentComName = user.activeComName;
|
||||||
this.currentPrjId = user.activeProjectId;
|
this.currentPrjId = user.activeProjectId;
|
||||||
this.currentProName = user.activeProjectName;
|
this.currentProName = user.activeProjectName;
|
||||||
|
this.vendorsCode=user.vendorsCode
|
||||||
this.isAdmin = user.roles.some(
|
this.isAdmin = user.roles.some(
|
||||||
(item) =>
|
(item) =>
|
||||||
item.roleKey.includes("admin") ||
|
item.roleKey.includes("admin") ||
|
||||||
|
|
|
@ -180,12 +180,12 @@ export default {
|
||||||
let mapOptions = {
|
let mapOptions = {
|
||||||
imgs: {
|
imgs: {
|
||||||
// 六面图片
|
// 六面图片
|
||||||
top: "./img/top.png",
|
top: "/cdn/bim/sapi/img/top.png",
|
||||||
bottom: "./img/under.png",
|
bottom: "/cdn/bim/sapi/img/under.png",
|
||||||
east: "./img/east.png",
|
east: "/cdn/bim/sapi/img/east.png",
|
||||||
south: "./img/south.png",
|
south: "/cdn/bim/sapi/img/south.png",
|
||||||
west: "./img/west.png",
|
west: "/cdn/bim/sapi/img/west.png",
|
||||||
north: "./img/north.png",
|
north: "/cdn/bim/sapi/img/north.png",
|
||||||
},
|
},
|
||||||
offset: {
|
offset: {
|
||||||
// 屏幕坐标偏移
|
// 屏幕坐标偏移
|
||||||
|
|
|
@ -318,12 +318,12 @@ export default {
|
||||||
let mapOptions = {
|
let mapOptions = {
|
||||||
imgs: {
|
imgs: {
|
||||||
// 六面图片
|
// 六面图片
|
||||||
top: "./img/top.png",
|
top: "/cdn/bim/sapi/img/top.png",
|
||||||
bottom: "./img/under.png",
|
bottom: "/cdn/bim/sapi/img/under.png",
|
||||||
east: "./img/east.png",
|
east: "/cdn/bim/sapi/img/east.png",
|
||||||
south: "./img/south.png",
|
south: "/cdn/bim/sapi/img/south.png",
|
||||||
west: "./img/west.png",
|
west: "/cdn/bim/sapi/img/west.png",
|
||||||
north: "./img/north.png",
|
north: "/cdn/bim/sapi/img/north.png",
|
||||||
},
|
},
|
||||||
offset: {
|
offset: {
|
||||||
// 屏幕坐标偏移
|
// 屏幕坐标偏移
|
||||||
|
|
|
@ -1,82 +1,135 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container home"></div>
|
<div class="app-container home">
|
||||||
|
<el-card class="nav-top">
|
||||||
|
<nav-top-unit />
|
||||||
|
<nav-top-att-worker-count />
|
||||||
|
<nav-top-att-online-count />
|
||||||
|
<nav-top-att-mgr-count />
|
||||||
|
<nav-top-att-real-count />
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-card class="nav-body" style="margin-top: 20px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<nav-attendance-rate />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<nav-att-laborer-rate />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<nav-att-manager-rate />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<nav-att-laborer-trend />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<nav-att-woker-prop />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<nav-att-job-type-group />
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Index">
|
<script>
|
||||||
import request from '@/utils/request'
|
import navTopAttMgrCount from "./indexCompents/navTopAttMgrCount.vue";
|
||||||
|
import navTopAttWokerProp from "./indexCompents/navAttWokerProp.vue";
|
||||||
|
import navTopAttRealCount from "./indexCompents/navTopAttRealCount.vue";
|
||||||
|
import navTopAttWorkerCount from "./indexCompents/navTopAttWorkerCount.vue";
|
||||||
|
import navTopUnit from "./indexCompents/navTopUnit.vue";
|
||||||
|
|
||||||
const version = ref('3.6.3')
|
import navAttendanceRate from "./indexCompents/navAttendanceRate.vue";
|
||||||
|
import navAttLaborerRate from "./indexCompents/navAttLaborerRate.vue";
|
||||||
|
import navAttManagerRate from "./indexCompents/navAttManagerRate.vue";
|
||||||
|
|
||||||
function goTarget(url) {
|
import navAttLaborerTrend from "./indexCompents/navAttLaborerTrend.vue";
|
||||||
window.open(url, '__blank')
|
import navAttWokerProp from "./indexCompents/navAttWokerProp.vue";
|
||||||
}
|
import navAttJobTypeGroup from "./indexCompents/navAttJobTypeGroup.vue";
|
||||||
request.get('/manage/api/menu/list').then((d) => {
|
import NavTopAttOnlineCount from "./indexCompents/navTopAttOnlineCount.vue";
|
||||||
console.log('服务就绪')
|
|
||||||
})
|
export default {
|
||||||
|
components: {
|
||||||
|
navTopAttMgrCount,
|
||||||
|
navTopAttWokerProp,
|
||||||
|
navTopAttRealCount,
|
||||||
|
navTopAttWorkerCount,
|
||||||
|
navTopUnit,
|
||||||
|
navAttendanceRate,
|
||||||
|
navAttLaborerRate,
|
||||||
|
navAttManagerRate,
|
||||||
|
navAttLaborerTrend,
|
||||||
|
navAttWokerProp,
|
||||||
|
navAttJobTypeGroup,
|
||||||
|
NavTopAttOnlineCount,
|
||||||
|
},
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style lang="scss">
|
||||||
.home {
|
.home {
|
||||||
blockquote {
|
.el-card__body {
|
||||||
padding: 10px 20px;
|
padding: 10px !important;
|
||||||
margin: 0 0 20px;
|
}
|
||||||
font-size: 17.5px;
|
.nav-top {
|
||||||
border-left: 5px solid #eee;
|
.index-nav-top {
|
||||||
}
|
display: inline-flex;
|
||||||
|
width: calc(20% - 20px);
|
||||||
hr {
|
margin: 10px;
|
||||||
margin-top: 20px;
|
height: 100px;
|
||||||
margin-bottom: 20px;
|
background-color: #f0f3f8;
|
||||||
border: 0;
|
align-items: center;
|
||||||
border-top: 1px solid #eee;
|
border-radius: 5px;
|
||||||
}
|
max-width: 300px;
|
||||||
|
min-width: 220px;
|
||||||
.col-item {
|
.top-icon {
|
||||||
margin-bottom: 20px;
|
margin-left: 30px;
|
||||||
}
|
.svg-icon {
|
||||||
|
width: 40px;
|
||||||
ul {
|
height: 40px;
|
||||||
padding: 0;
|
fill: #6bc1da;
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
font-family: 'open sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
||||||
font-size: 13px;
|
|
||||||
color: #676a6c;
|
|
||||||
overflow-x: hidden;
|
|
||||||
|
|
||||||
ul {
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4 {
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin-top: 10px;
|
|
||||||
font-size: 26px;
|
|
||||||
font-weight: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 10px;
|
|
||||||
|
|
||||||
b {
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.top-data {
|
||||||
.update-log {
|
margin-left: 10px;
|
||||||
ol {
|
width: calc(100% - 60px);
|
||||||
display: block;
|
.data-title {
|
||||||
list-style-type: decimal;
|
text-align: center;
|
||||||
margin-block-start: 1em;
|
color: #999;
|
||||||
margin-block-end: 1em;
|
|
||||||
margin-inline-start: 0;
|
|
||||||
margin-inline-end: 0;
|
|
||||||
padding-inline-start: 40px;
|
|
||||||
}
|
}
|
||||||
|
.data-number {
|
||||||
|
line-height: 40px;
|
||||||
|
height: 40px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
.nav-body {
|
||||||
|
.index-nav-body {
|
||||||
|
height: 400px;
|
||||||
|
background-color: #f0f3f8;
|
||||||
|
margin: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
.index-nav-body-title {
|
||||||
|
line-height: 30px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 6px 0px 0px 10px;
|
||||||
|
}
|
||||||
|
.chart-content {
|
||||||
|
height: calc(100% - 50px);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
.my-chart {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-body">
|
||||||
|
<div class="index-nav-body-title">劳务人员工种分布</div>
|
||||||
|
<div class="chart-content">
|
||||||
|
<my-chart :key="elKey" ref="chart" id="navAttJobTypeGroupChart" width="100%" height="100%" :render="renderChart" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import MyChart from "@/components/Chart/MyChart";
|
||||||
|
import useUserStore from "@/store/modules/user";
|
||||||
|
import { getWorkerCountGroupByType } from "@/api/manage/labor.js";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
MyChart,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
elKey:0,
|
||||||
|
chartData: [],
|
||||||
|
currentPrjId: null,
|
||||||
|
currentComId: null,
|
||||||
|
vendorsCode: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.userStore = useUserStore();
|
||||||
|
this.currentPrjId = this.userStore.currentPrjId;
|
||||||
|
this.currentComId = this.userStore.currentComId;
|
||||||
|
this.vendorsCode = this.userStore.vendorsCode;
|
||||||
|
console.log(this.userStore);
|
||||||
|
this.init();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
renderChart(opt) {
|
||||||
|
let pieOption = {
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{b} <br/> {c} 人 ({d}%)",
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
icon: "rect",
|
||||||
|
orient: "vertical",
|
||||||
|
itemWidth: "50%",
|
||||||
|
|
||||||
|
right: "10%",
|
||||||
|
itemWidth: 20,
|
||||||
|
itemGap: 20,
|
||||||
|
itemHeight: 20,
|
||||||
|
type: "scroll",
|
||||||
|
pageTextStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
scroll: {
|
||||||
|
y: 300,
|
||||||
|
bar: {
|
||||||
|
show: true,
|
||||||
|
width: 5,
|
||||||
|
height: 10,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
textStyle: {
|
||||||
|
padding: [0, 0, 0, 0],
|
||||||
|
fontSize: 12,
|
||||||
|
|
||||||
|
align: "center",
|
||||||
|
rich: {
|
||||||
|
name: {
|
||||||
|
fontSize: 12,
|
||||||
|
|
||||||
|
padding: [5, 2, 5, 2],
|
||||||
|
},
|
||||||
|
percent: {
|
||||||
|
fontSize:12,
|
||||||
|
|
||||||
|
padding: [0, 2, 0, 2],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
type: "pie",
|
||||||
|
radius: "70%", // 设置为圆环图
|
||||||
|
center: ["50%", "50%"],
|
||||||
|
avoidLabelOverlap: false,
|
||||||
|
data: this.chartData,
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
itemStyle: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
return pieOption;
|
||||||
|
},
|
||||||
|
init() {
|
||||||
|
getWorkerCountGroupByType(this.vendorsCode, this.currentPrjId).then((d) => {
|
||||||
|
this.chartData = (d.data || []).map((item) => {
|
||||||
|
return {
|
||||||
|
name: item.workTypeName || item.craftPostName,
|
||||||
|
value: item.id ? item.id : 0,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
this.elKey++;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -0,0 +1,96 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-body">
|
||||||
|
<div class="index-nav-body-title">
|
||||||
|
劳务人员出勤率
|
||||||
|
</div>
|
||||||
|
<div class="chart-content">
|
||||||
|
<my-chart ref="chart" id="navAttLaborerRateChart" width="100%" height="100%" :render="renderChart" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import MyChart from "@/components/Chart/MyChart";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
MyChart,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chartData:[]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.init();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
renderChart(opt) {
|
||||||
|
let pieOption = {
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{b} <br/> {c} 人 ({d}%)",
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: "horizontal",
|
||||||
|
left: "center",
|
||||||
|
top: "10",
|
||||||
|
data:this.chartData.map(d=>d.name),
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
type: "pie",
|
||||||
|
radius: ["30%", "60%"], // 设置为圆环图
|
||||||
|
center: ["50%", "50%"],
|
||||||
|
avoidLabelOverlap: false,
|
||||||
|
data: this.chartData,
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
itemStyle: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
return pieOption;
|
||||||
|
},
|
||||||
|
init() {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.chartData=[{
|
||||||
|
name:"出勤人数",
|
||||||
|
value:33
|
||||||
|
},{
|
||||||
|
name:"未出勤人数",
|
||||||
|
value:22
|
||||||
|
}]
|
||||||
|
this.$refs.chart.reLoad();
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style></style>
|
|
@ -0,0 +1,112 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-body">
|
||||||
|
<div class="index-nav-body-title">劳务人员出勤趋势图</div>
|
||||||
|
<div class="chart-content">
|
||||||
|
<my-chart ref="chart" id="navAttLaborerTrendChart" width="100%" height="100%" :render="renderChart" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import MyChart from "@/components/Chart/MyChart";
|
||||||
|
import { groupAttendanceLastWeek } from "@/api/manage/labor.js";
|
||||||
|
import useUserStore from "@/store/modules/user";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
MyChart,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
weekData: [],
|
||||||
|
elKey: 0,
|
||||||
|
currentPrjId: null,
|
||||||
|
currentComId: null,
|
||||||
|
vendorsCode: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.userStore = useUserStore();
|
||||||
|
this.currentPrjId = this.userStore.currentPrjId;
|
||||||
|
this.currentComId = this.userStore.currentComId;
|
||||||
|
this.vendorsCode = this.userStore.vendorsCode;
|
||||||
|
this.init();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
renderChart(opt) {
|
||||||
|
const areaOption = {
|
||||||
|
grid: {
|
||||||
|
left: "5%",
|
||||||
|
right: "5%",
|
||||||
|
bottom: "0%",
|
||||||
|
top: "15%",
|
||||||
|
containLabel: true,
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "axis",
|
||||||
|
axisPointer: {
|
||||||
|
type: "shadow",
|
||||||
|
label: {
|
||||||
|
backgroundColor: "#6a7985",
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: "category",
|
||||||
|
data: this.weekData.map((item) => item.name),
|
||||||
|
axisLabel: {
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: "value",
|
||||||
|
minInterval: 1,
|
||||||
|
axisLabel: {
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: "出勤人数",
|
||||||
|
type: "bar",
|
||||||
|
areaStyle: {
|
||||||
|
color: "rgba(13, 204, 242,0.5)", // 设置面积背景颜色为红色
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
show: true,
|
||||||
|
position: "top", // 值标签显示在折线点上方
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: this.weekData.map((item) => item.value),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "line",
|
||||||
|
data: this.weekData.map((item) => item.value),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
return areaOption;
|
||||||
|
},
|
||||||
|
init() {
|
||||||
|
groupAttendanceLastWeek(this.vendorsCode, this.currentPrjId).then((d) => {
|
||||||
|
this.weekData = (d.data || []).map((it) => {
|
||||||
|
return {
|
||||||
|
name: it.dt.substring(5).replace("-", "."),
|
||||||
|
value: it.cnt,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
this.elKey++;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style></style>
|
|
@ -0,0 +1,95 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-body">
|
||||||
|
<div class="index-nav-body-title">
|
||||||
|
管理人员出勤率
|
||||||
|
</div>
|
||||||
|
<div class="chart-content">
|
||||||
|
<my-chart ref="chart" id="navAttManagerRateChart" width="100%" height="100%" :render="renderChart" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import MyChart from "@/components/Chart/MyChart";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
MyChart,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chartData:[]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.init();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
renderChart(opt) {
|
||||||
|
let pieOption = {
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{b} <br/> {c} 人 ({d}%)",
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: "horizontal",
|
||||||
|
left: "center",
|
||||||
|
top: "10",
|
||||||
|
data:this.chartData.map(d=>d.name),
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
type: "pie",
|
||||||
|
radius: ["30%", "60%"], // 设置为圆环图
|
||||||
|
center: ["50%", "50%"],
|
||||||
|
roseType: 'radius',
|
||||||
|
data: this.chartData,
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
itemStyle: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
return pieOption;
|
||||||
|
},
|
||||||
|
init() {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.chartData=[{
|
||||||
|
name:"出勤人数",
|
||||||
|
value:33
|
||||||
|
},{
|
||||||
|
name:"未出勤人数",
|
||||||
|
value:22
|
||||||
|
}]
|
||||||
|
this.$refs.chart.reLoad();
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style></style>
|
|
@ -0,0 +1,97 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-body">
|
||||||
|
<div class="index-nav-body-title">劳务人员参与教育人员比例</div>
|
||||||
|
<div class="chart-content">
|
||||||
|
<my-chart ref="chart" id="navAttWokerPropChart" width="100%" height="100%" :render="renderChart" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import MyChart from "@/components/Chart/MyChart";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
MyChart,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chartData: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.init();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
renderChart(opt) {
|
||||||
|
let pieOption = {
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{b} <br/> {c} 人 ({d}%)",
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: "horizontal",
|
||||||
|
left: "center",
|
||||||
|
top: "10",
|
||||||
|
data: this.chartData.map((d) => d.name),
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
type: "pie",
|
||||||
|
radius: "60%", // 设置为圆环图
|
||||||
|
center: ["50%", "50%"],
|
||||||
|
avoidLabelOverlap: false,
|
||||||
|
data: this.chartData,
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
itemStyle: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
return pieOption;
|
||||||
|
},
|
||||||
|
init() {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.chartData = [
|
||||||
|
{
|
||||||
|
name: "参与人数",
|
||||||
|
value: 33,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "未参与人数",
|
||||||
|
value: 22,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
this.$refs.chart.reLoad();
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style></style>
|
|
@ -0,0 +1,93 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-body">
|
||||||
|
<div class="index-nav-body-title">今日出勤率</div>
|
||||||
|
<div class="chart-content">
|
||||||
|
<my-chart ref="chart" id="navAttendanceRateChart" width="100%" height="100%" :render="renderChart" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import MyChart from "@/components/Chart/MyChart";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
MyChart,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chartData:[]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.init();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
renderChart(opt) {
|
||||||
|
let pieOption = {
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{b} <br/> {c} 人 ({d}%)",
|
||||||
|
textStyle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: "horizontal",
|
||||||
|
left: "center",
|
||||||
|
top: "10",
|
||||||
|
data:this.chartData.map(d=>d.name),
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
type: "pie",
|
||||||
|
radius: "60%",
|
||||||
|
center: ["50%", "50%"],
|
||||||
|
data: this.chartData,
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
formatter: "{b}\n{c}",
|
||||||
|
textStyle: {
|
||||||
|
color: "#444",
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
itemStyle: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
return pieOption;
|
||||||
|
},
|
||||||
|
init() {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.chartData=[{
|
||||||
|
name:"出勤人数",
|
||||||
|
value:33
|
||||||
|
},{
|
||||||
|
name:"未出勤人数",
|
||||||
|
value:22
|
||||||
|
}]
|
||||||
|
this.$refs.chart.reLoad();
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style></style>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-top">
|
||||||
|
<div class="top-icon">
|
||||||
|
<svg-icon icon-class="mgrworker" />
|
||||||
|
</div>
|
||||||
|
<div class="top-data">
|
||||||
|
<div class="data-title">在职管理人员数</div>
|
||||||
|
<div class="data-number">100</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
//考勤人员在职管理人员数
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-top">
|
||||||
|
<div class="top-icon">
|
||||||
|
<svg-icon icon-class="onlineworker" />
|
||||||
|
</div>
|
||||||
|
<div class="top-data">
|
||||||
|
<div class="data-title">在职工人数</div>
|
||||||
|
<div class="data-number">100</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
//考勤人员数在职工人数
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-top">
|
||||||
|
<div class="top-icon">
|
||||||
|
<svg-icon icon-class="certification" />
|
||||||
|
</div>
|
||||||
|
<div class="top-data">
|
||||||
|
<div class="data-title">实名认证人数</div>
|
||||||
|
<div class="data-number">100</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
//考勤人员实名认证人数
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style></style>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-top">
|
||||||
|
<div class="top-icon">
|
||||||
|
<svg-icon icon-class="group" />
|
||||||
|
</div>
|
||||||
|
<div class="top-data">
|
||||||
|
<div class="data-title">总人数</div>
|
||||||
|
<div class="data-number">100</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
//考勤人员数
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<template>
|
||||||
|
<div class="index-nav-top">
|
||||||
|
<div class="top-icon">
|
||||||
|
<svg-icon icon-class="tool2" />
|
||||||
|
</div>
|
||||||
|
<div class="top-data">
|
||||||
|
<div class="data-title">参建单位总数</div>
|
||||||
|
<div class="data-number">100</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
//参建单位总数
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -298,12 +298,12 @@ export default {
|
||||||
let mapOptions = {
|
let mapOptions = {
|
||||||
imgs: {
|
imgs: {
|
||||||
// 六面图片
|
// 六面图片
|
||||||
top: "./img/top.png",
|
top: "/cdn/bim/sapi/img/top.png",
|
||||||
bottom: "./img/under.png",
|
bottom: "/cdn/bim/sapi/img/under.png",
|
||||||
east: "./img/east.png",
|
east: "/cdn/bim/sapi/img/east.png",
|
||||||
south: "./img/south.png",
|
south: "/cdn/bim/sapi/img/south.png",
|
||||||
west: "./img/west.png",
|
west: "/cdn/bim/sapi/img/west.png",
|
||||||
north: "./img/north.png",
|
north: "/cdn/bim/sapi/img/north.png",
|
||||||
},
|
},
|
||||||
offset: {
|
offset: {
|
||||||
// 屏幕坐标偏移
|
// 屏幕坐标偏移
|
||||||
|
|
|
@ -10,7 +10,7 @@ export default defineConfig(({ mode, command }) => {
|
||||||
// 部署生产环境和开发环境下的URL。
|
// 部署生产环境和开发环境下的URL。
|
||||||
// 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
|
// 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
|
||||||
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
|
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
|
||||||
base: VITE_APP_ENV === "production" ? "/xd/" : "/xd/",
|
base: VITE_APP_ENV === "production" ? "./xd/" : "./xd/",
|
||||||
plugins: createVitePlugins(env, command === "build"),
|
plugins: createVitePlugins(env, command === "build"),
|
||||||
resolve: {
|
resolve: {
|
||||||
// https://cn.vitejs.dev/config/#resolve-alias
|
// https://cn.vitejs.dev/config/#resolve-alias
|
||||||
|
|
Loading…
Reference in New Issue