Commit 1a06d676 authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

parents ac11ff46 202450cf
......@@ -11,4 +11,5 @@ VUE_APP_WEBSOCKET_API =127.0.0.1:18222/m
VUE_APP_PORTAL_URL = /portal_home
VUE_APP_PORTAL_PORT = 17300
VUE_APP_API_appName = '智慧政务绩效管理系统'
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<title>智慧政务绩效管理系统</title>
<link rel="stylesheet" href="https://unpkg.com/element-ui@2.15.5/lib/theme-chalk/index.css">
<link
rel="stylesheet"
href="https://unpkg.com/element-ui@2.15.5/lib/theme-chalk/index.css"
/>
</head>
<body>
<noscript>
<strong>We're sorry but app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
<strong
>We're sorry but app doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong
>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
......
......@@ -24,15 +24,16 @@ export default {
beforeCreate() {
Vue.prototype.$app = this;
},
created() {},
created() {
},
methods: {},
};
</script>
<style lang="less" scoped>
#app {
height:100vh;
#app {
height: 100vh;
.loading {
display: flex;
align-items: center;
......
......@@ -10,13 +10,13 @@
</i>
<router-link to="/">
<img
src="../assets/images/logo.png"
:src="sysLogo ? sysLogo : require('../assets/images/logo.png')"
style="margin-bottom: 5px; margin-left: 24px"
height="40"
alt=""
/>
<b style="color: white; font-size: 20px">
&nbsp;&nbsp;&nbsp;智慧政务绩效管理系统
&nbsp;&nbsp;&nbsp;{{ sysName ? sysName : "智慧政务绩效管理系统" }}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</b>
</router-link>
......@@ -172,6 +172,12 @@ export default {
data() {
return {
showMobileMenu: false,
sysName: localStorage.getItem("sysName")
? localStorage.getItem("sysName")
: "",
sysLogo: localStorage.getItem("sysLogo")
? localStorage.getItem("sysLogo")
: "",
};
},
created() {},
......
......@@ -5,50 +5,61 @@
</template>
<script>
import jwt_decode from "jwt-decode";
export default {
name: 'sso',
created () {
},
name: "sso",
created() {},
mounted() {
let token = this.$route.query.token
console.log("token:"+token)
console.log("解析后的token:",jwt_decode(token))
let token = this.$route.query.token;
console.log("token:" + token);
console.log("解析后的token:", jwt_decode(token));
//const decode = jwt_decode(data.normal_login_token).accountId; // 解析
if(token) {
//本地登录后跳转
this.form.loginName=jwt_decode(token).userInfo.account
this.form.password=jwt_decode(token).userInfo.password
/* this.form.loginName="admin"
if (token) {
//本地登录后跳转
this.form.loginName = jwt_decode(token).userInfo.account;
this.form.password = jwt_decode(token).userInfo.password;
this.$route.query.sysName
? localStorage.setItem("sysName", this.$route.query.sysName)
: "";
this.$route.query.sysLogo
? localStorage.setItem("sysLogo", this.$route.query.sysLogo)
: "";
this.$route.query.sysName
? (document.title = this.$route.query.sysName)
: "";
/* this.form.loginName="admin"
this.form.password="scsmile"*/
this.login()
this.login();
//window.sessionStorage.setItem("token", token);
// this.$router.push('/index') // 有token直接跳转首页
}else{
// this.$router.push('/index') // 有token直接跳转首页
} else {
this.$message({
message: '没有权限,正在跳转登录页面...',
center: true
});
setTimeout(function(){
window.location.href=process.env.VUE_APP_PORTAL_URL=='undefined'?'http://192.168.0.98:11072':process.env.VUE_APP_PORTAL_URL
//this.$router.push('/login')
},1000)
message: "没有权限,正在跳转登录页面...",
center: true,
});
setTimeout(function() {
window.location.href =
process.env.VUE_APP_PORTAL_URL == "undefined"
? "http://192.168.0.98:11072"
: process.env.VUE_APP_PORTAL_URL;
//this.$router.push('/login')
}, 1000);
}
},
methods: {
login() {
this.loading = true;
this.$post("/login/login", this.form)
.then(this.loginSuccess)
.catch(this.loginFail);
.then(this.loginSuccess)
.catch(this.loginFail);
},
loginSuccess({ data }) {
console.log("userData", data);
this.$store.commit("setUserData", data);
this.$router.push('/index') // 有token直接跳转首页
/* this.$router.replace({
this.$router.push("/index"); // 有token直接跳转首页
/* this.$router.replace({
path: this.redirect,
});*/
},
......@@ -60,15 +71,15 @@ export default {
data() {
return {
form: {
loginName: '',
password: '',
securityCode: '',
loginName: "",
password: "",
securityCode: "",
},
redirect: this.$route.query.redirect,
loading: true,
}
}
}
};
},
};
</script>
<style>
......
......@@ -24,7 +24,9 @@
>
<el-col :span="12"
>违规类型:{{
form.irregularType ? form.irregularType : "--"
form.irregularType
? util_formatter("irregularType", form.irregularType)
: "--"
}}</el-col
>
</el-row>
......
......@@ -3,20 +3,43 @@
<template>
<div class="page page-login flex flex-v">
<div class="form-wrap flex flex-1">
<el-form @submit.prevent='onSubmit' ref="form" :model="form" label-width="0px" size="small">
<h1>智慧政务绩效管理系统</h1>
<el-form
@submit.prevent="onSubmit"
ref="form"
:model="form"
label-width="0px"
size="small"
>
<h1>{{ sysName ? sysName : "智慧政务绩效管理系统" }}</h1>
<div class="des">数据驱动绩效改善,强化从指标到目标全过程管理</div>
<el-form-item label="">
<el-input v-model="form.loginName" placeholder="请输入用户名" class="input"></el-input>
<el-input
v-model="form.loginName"
placeholder="请输入用户名"
class="input"
></el-input>
</el-form-item>
<el-form-item label="">
<el-input v-model="form.password" type='password' placeholder="请输入密码" class="input"></el-input>
<el-input
v-model="form.password"
type="password"
placeholder="请输入密码"
class="input"
></el-input>
</el-form-item>
<el-form-item size="large">
<el-button type="primary" native-type='submit' :loading='loading' @click='onSubmit'>登录</el-button>
<el-button
type="primary"
native-type="submit"
:loading="loading"
@click="onSubmit"
>登录</el-button
>
</el-form-item>
<div class="tips">温馨提示:请使用谷歌或火狐等非ie内核浏览器,观看效果更佳</div>
<div class="tips">
温馨提示:请使用谷歌或火狐等非ie内核浏览器,观看效果更佳
</div>
</el-form>
</div>
......@@ -31,7 +54,15 @@ import { createSocket } from "@/assets/utils/websocket";
export default {
name: "login",
created() {},
created() {
this.$route.query.sysName
? localStorage.setItem("sysName", this.$route.query.sysName)
: "";
this.$route.query.sysName
? (document.title = this.$route.query.sysName)
: "";
localStorage.setItem("sysLogo", this.$route.query.sysLogo);
},
methods: {
login() {
this.loading = true;
......@@ -41,11 +72,11 @@ export default {
},
loginSuccess({ data }) {
console.log("userData", data);
console.log("redirect",this.redirect)
console.log("redirect", this.redirect);
this.$store.commit("setUserData", data);
this.$router.replace({
path: this.redirect,
})
});
//成功 创建websocket连接 process.env.VUE_WEBSOCKET_BASE_API +
console.log("process", process.env);
......@@ -81,10 +112,11 @@ export default {
form: {
loginName: "",
password: "",
}
}
}
}
},
sysName: localStorage.getItem("sysName"),
};
},
};
</script>
<style lang="less">
......@@ -94,14 +126,15 @@ export default {
border-top: 2px solid #e8eaec;
}
.page-login {
background-image: url('~@/assets/images/login_bg.jpg');
background-image: url("~@/assets/images/login_bg.jpg");
background-repeat: no-repeat;
background-size: cover;
margin: 0;
height: 100%;
overflow: hidden;
text-align: center;
.des,.tips{
.des,
.tips {
font-size: 14px;
white-space: nowrap;
margin-bottom: 20px;
......@@ -123,33 +156,37 @@ export default {
margin-top: 10px;
width: 240px;
}
.el-form-item{
.el-form-item {
margin-bottom: 28px;
}
.el-input-group__append {
padding: 0;
font-size: 0;
}
.el-input{
.el-input {
width: 80%;
}
.el-input__inner{
border-color: #409EFF;
.el-input__inner {
border-color: #409eff;
border-radius: 20px;
}
.el-input--small .el-input__inner{
.el-input--small .el-input__inner {
height: 52px;
line-height: 1em;
font-size: 15px;
}
.el-input__inner::placeholder{
color: #409EFF;
.el-input__inner::placeholder {
color: #409eff;
}
button{
button {
width: 80%;
border-radius: 20px;
height: 52px;
background: linear-gradient(90deg, rgba(24, 69, 198, 1) 0%, rgba(41, 153, 255, 1) 100%);
background: linear-gradient(
90deg,
rgba(24, 69, 198, 1) 0%,
rgba(41, 153, 255, 1) 100%
);
}
}
.footer {
......@@ -168,4 +205,3 @@ export default {
// border-color: #409EFF;
// }
</style>
......@@ -37,7 +37,7 @@
: item.subAddType == 2
? "扣分方式:"
: "方式:"
}}{{ util_formatters("subMethod", item.subMethod) }}</span
}}{{ util_formatter("subMethod", item.subMethod) }}</span
>
</div>
<div class="user-info">
......
......@@ -47,6 +47,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.Date;
import java.util.List;
import java.util.Map;
import static cn.hutool.core.date.DatePattern.*;
......@@ -278,9 +279,10 @@ public class DingMessageController {
leaveRecordEntity.setProcessStatus(2);
}
if(result.getResult().compareToIgnoreCase("AGREE") == 0){
if(result.getTasks().size() > 1){
if(result.getTasks().get(1).getStatus().compareToIgnoreCase("CANCELED") == 0){
if(result.getTasks().get(1).getStatus().compareToIgnoreCase("CANCELED") != 0){
leaveRecordEntity.setAuditResult(4); //撤销审批完成
}else {
leaveRecordEntity.setAuditResult(1);
......@@ -288,7 +290,8 @@ public class DingMessageController {
}
}else if(result.equals("")){ //撤销假期审批中result会为空 撤销审批通过后result为AGREE
if(result.getTasks().size() > 1){
if(result.getTasks().get(1).getStatus().compareToIgnoreCase("CANCELED") == 0){
log.info("status"+result.getTasks().get(1).getStatus());
if(result.getTasks().get(1).getStatus().compareToIgnoreCase("CANCELED") != 0){
leaveRecordEntity.setAuditResult(3); //撤销审批中
}
}
......@@ -301,7 +304,7 @@ public class DingMessageController {
log.info("钉钉返回的result:"+result.getResult()+"---auditresult:"+leaveRecordEntity.getAuditResult());
leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
leaveRecordEntity.setReason(result.getOperationRecords().get(0).getRemark());
//更新请假记录表
AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
if(ObjectUtils.isEmpty(recordEntity)){
......@@ -335,14 +338,22 @@ public class DingMessageController {
if(leaveRecordsResponseBodyResultRest.getCode() == Rest.SUCCESS){
OapiAttendanceVacationQuotaListResponse.OapiLeaveQuotaUserListVo result1 = leaveRecordsResponseBodyResultRest.getData();
double leaveBlance = 0;
//如果钉钉有假期余额就写入钉钉返回的余额 否则用数据库表数据减去当前请假的天数
if(result1.getLeaveQuotas() != null && result1.getLeaveQuotas().size() > 0){
if(leaveRecordEntity.getAuditResult() == 4) { //撤销休假 要把已经扣除的假期加回来
leaveBlance = (result1.getLeaveQuotas().get(0).getQuotaNumPerDay() + result1.getLeaveQuotas().get(0).getUsedNumPerDay())/100;
}else {
leaveBlance = (result1.getLeaveQuotas().get(0).getQuotaNumPerDay() - result1.getLeaveQuotas().get(0).getUsedNumPerDay())/100;
}
}
// //如果钉钉有假期余额就写入钉钉返回的余额 否则用数据库表数据减去当前请假的天数
// if(result1.getLeaveQuotas() != null && result1.getLeaveQuotas().size() > 0){
// if(leaveRecordEntity.getAuditResult() == 4) { //撤销休假 要把已经扣除的假期加回来
// if(!ObjectUtils.isEmpty(balanceEntity) && balanceEntity.getCompensatedLeaveDays() != null){
// leaveBlance = balanceEntity.getCompensatedLeaveDays().floatValue() + result1.getLeaveQuotas().get(0).getUsedNumPerDay()/100;
// }else {
// leaveBlance = result1.getLeaveQuotas().get(0).getUsedNumPerDay()/100; //秒转换为天
// }
// }else {
// if(!ObjectUtils.isEmpty(balanceEntity) && balanceEntity.getCompensatedLeaveDays() != null){
// leaveBlance = balanceEntity.getCompensatedLeaveDays().floatValue() - result1.getLeaveQuotas().get(0).getUsedNumPerDay()/100;
// }else {
// leaveBlance = - result1.getLeaveQuotas().get(0).getUsedNumPerDay()/100; //秒转换为天
// }
// }
// }
switch (leave_name) {
case "调休":
......
package com.mortals.xhx.module.attendance.service.impl;
import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceQuery;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.service.StaffService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException;
......@@ -15,5 +19,42 @@ import com.mortals.xhx.module.attendance.service.AttendanceVacationBalanceServic
*/
@Service("attendanceVacationBalanceService")
public class AttendanceVacationBalanceServiceImpl extends AbstractCRUDServiceImpl<AttendanceVacationBalanceDao, AttendanceVacationBalanceEntity, Long> implements AttendanceVacationBalanceService {
@Autowired
private StaffService staffService;
@Override
protected void saveBefore(AttendanceVacationBalanceEntity entity, Context context) throws AppException {
super.saveBefore(entity,context);
if(entity.getStaffId()==null){
throw new AppException("员工ID不能为空");
}
StaffEntity staff = staffService.get(entity.getStaffId());
if(staff==null){
throw new AppException("员工ID不正确");
}
entity.setStaffName(staff.getName());
entity.setDeptId(staff.getDeptId());
entity.setDeptName(staff.getDeptName());
}
@Override
public AttendanceVacationBalanceEntity save(AttendanceVacationBalanceEntity entity, Context context) throws AppException {
this.saveBefore(entity, context);
AttendanceVacationBalanceEntity temp = this.selectOne(new AttendanceVacationBalanceQuery().staffId(entity.getStaffId()));
int iRet = 0;
if(temp!=null){
entity.setId(temp.getId());
iRet = this.dao.update(entity);
}else {
iRet = this.dao.insert(entity);
}
if (iRet == 0) {
throw new AppException(-1001, "写入数据库失败!");
} else {
this.saveAfter(entity, context);
return entity;
}
}
}
\ No newline at end of file
......@@ -141,9 +141,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
*/
public com.aliyun.teaopenapi.models.Config setConfig() {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
config.protocol = "http";
config.regionId = "central";
config.endpoint = oaUrl;
// config.protocol = "http";
// config.regionId = "central";
// config.endpoint = oaUrl;
return config;
}
......@@ -153,9 +153,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(setConfig());
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders getProcessInstanceHeaders = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders();
getProcessInstanceHeaders.xAcsDingtalkAccessToken = getToken();
HashMap<String, String> map = new HashMap<>();
getProcessInstanceHeaders.setCommonHeaders(map);
getProcessInstanceHeaders.getCommonHeaders().put("host", "172.15.28.113:8919");
// HashMap<String, String> map = new HashMap<>();
// getProcessInstanceHeaders.setCommonHeaders(map);
// getProcessInstanceHeaders.getCommonHeaders().put("host", "172.15.28.113:8919");
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest getProcessInstanceRequest = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest()
.setProcessInstanceId(processInstanceId);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment