系统修复完善

This commit is contained in:
qimingjin 2021-05-10 21:47:19 +08:00
parent 356b603e55
commit 31dd1d97e9
24 changed files with 312 additions and 79 deletions

View File

@ -129,7 +129,7 @@ V1.4 2021-03-28
V1.5 2021-05-05 V1.5 2021-05-05
- 1.0 集成开源积木报表 - 1.0 集成开源积木报表
- 可在线设计各类报表(表格类报表和图表类报表)。 - 可在线设计各类报表(表格类报表和图表类报表)
- 2.0 新增业务管理模块 - 2.0 新增业务管理模块
- 新增客户准入流程,添加客户流入客户公海,发起准入流程,准入客户进入客户私海,可业务员拜访跟进,未准入客户进入黑名单 - 新增客户准入流程,添加客户流入客户公海,发起准入流程,准入客户进入客户私海,可业务员拜访跟进,未准入客户进入黑名单
- 原数据大屏并入业务管理 - 原数据大屏并入业务管理
@ -137,6 +137,7 @@ V1.5 2021-05-05
- 4.0 在线邮件更改为站内邮件,不在调用邮件发送功能,便于系统内用户沟通,跟进业务 - 4.0 在线邮件更改为站内邮件,不在调用邮件发送功能,便于系统内用户沟通,跟进业务
- 5.0 修复流程父角色查询所属子角色异常情况 - 5.0 修复流程父角色查询所属子角色异常情况
- 6.0 修复添加用户时部门树筛选异常 - 6.0 修复添加用户时部门树筛选异常
- 7.0 新增Snow社区在线文档地址见友情链接
## 未来规划 ## 未来规划
@ -160,6 +161,7 @@ V1.5 2021-05-05
## 友情链接 ## 友情链接
- 博客http://snowblog.shop.csj361.com - 博客http://snowblog.shop.csj361.com
- 若依http://ruoyi.vip - 若依http://ruoyi.vip
- 在线文档http://47.114.7.28:9527
## 最后,特别感谢若依系统提供框架 ## 最后,特别感谢若依系统提供框架

View File

@ -28,7 +28,7 @@
<oshi.version>3.9.1</oshi.version> <oshi.version>3.9.1</oshi.version>
<commons.io.version>2.5</commons.io.version> <commons.io.version>2.5</commons.io.version>
<commons.fileupload.version>1.3.3</commons.fileupload.version> <commons.fileupload.version>1.3.3</commons.fileupload.version>
<poi.version>3.17</poi.version> <poi.version>4.1.2</poi.version>
<velocity.version>1.7</velocity.version> <velocity.version>1.7</velocity.version>
<flowable.version>6.4.1</flowable.version> <flowable.version>6.4.1</flowable.version>
<dingtalk.version>dingtalk-SNAPSHOT</dingtalk.version> <dingtalk.version>dingtalk-SNAPSHOT</dingtalk.version>

View File

@ -22,11 +22,6 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId> <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
<!--积木报表--> <!--积木报表-->
<dependency> <dependency>
<groupId>org.jeecgframework.jimureport</groupId> <groupId>org.jeecgframework.jimureport</groupId>

View File

@ -73,37 +73,33 @@ public class ThirdOauthController extends BaseController {
{ {
String appId= iSysConfigService.selectConfigByKey("ding.login.appid"); String appId= iSysConfigService.selectConfigByKey("ding.login.appid");
String appSecret= iSysConfigService.selectConfigByKey("ding.login.appSecret"); String appSecret= iSysConfigService.selectConfigByKey("ding.login.appSecret");
String url="http://workflow.vaiwan.com/third/oauth/dingTalkLogin"; String redirectUri= iSysConfigService.selectConfigByKey("ding.login.redirectUri");
AuthRequest authRequest = new AuthDingTalkRequest(AuthConfig.builder() AuthRequest authRequest = new AuthDingTalkRequest(AuthConfig.builder()
.clientId(appId) .clientId(appId)
.clientSecret(appSecret) .clientSecret(appSecret)
.redirectUri(url) .redirectUri(redirectUri)
.build()); .build());
String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
ServletUtils.getResponse().sendRedirect(authorizeUrl); ServletUtils.getResponse().sendRedirect(authorizeUrl);
} }
/** /**
* 回调结果 * 钉钉回调
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@GetMapping("/dingTalkLogin") @GetMapping("/dingTalkLogin")
public Object callbackAuth(@PathVariable("source") String source, AuthCallback callback, HttpServletRequest request) public Object callbackAuth(AuthCallback callback, HttpServletRequest request)
{ {
if (StringUtils.isEmpty(source)) String source="dingtalk";
{
return new ModelAndView("error/unauth");
}
String appId= iSysConfigService.selectConfigByKey("ding.login.appid"); String appId= iSysConfigService.selectConfigByKey("ding.login.appid");
String appSecret= iSysConfigService.selectConfigByKey("ding.login.appSecret"); String appSecret= iSysConfigService.selectConfigByKey("ding.login.appSecret");
String url="http://workflow.vaiwan.com/third/oauth/dingTalkLogin"; String redirectUri= iSysConfigService.selectConfigByKey("ding.login.redirectUri");
AuthRequest authRequest = new AuthDingTalkRequest(AuthConfig.builder() AuthRequest authRequest = new AuthDingTalkRequest(AuthConfig.builder()
.clientId(appId) .clientId(appId)
.clientSecret(appSecret) .clientSecret(appSecret)
.redirectUri(url) .redirectUri(redirectUri)
.build()); .build());
AuthResponse<AuthUser> response = authRequest.login(callback); AuthResponse<AuthUser> response = authRequest.login(callback);
if (response.ok()) if (response.ok())
@ -121,7 +117,7 @@ public class ThirdOauthController extends BaseController {
authUser.setUuid(source + response.getData().getUuid()); authUser.setUuid(source + response.getData().getUuid());
authUser.setUserId(ShiroUtils.getUserId()); authUser.setUserId(ShiroUtils.getUserId());
authUser.setUserName(response.getData().getNickname()); authUser.setUserName(response.getData().getNickname());
authUser.setLoginName(response.getData().getUsername()); authUser.setLoginName(ShiroUtils.getLoginName());
authUser.setEmail(response.getData().getEmail()); authUser.setEmail(response.getData().getEmail());
authUser.setSource(source); authUser.setSource(source);
userMapper.insertAuthUser(authUser); userMapper.insertAuthUser(authUser);

View File

@ -2,6 +2,7 @@ package com.snow.web.controller.system;
import java.util.List; import java.util.List;
import com.snow.common.core.page.TableDataInfo;
import com.snow.system.domain.RegionTreeVO; import com.snow.system.domain.RegionTreeVO;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -41,7 +42,7 @@ public class SysOaRegionController extends BaseController
@GetMapping() @GetMapping()
public String region() public String region()
{ {
return prefix + "/region"; return prefix + "/area";
} }
/** /**
@ -50,10 +51,18 @@ public class SysOaRegionController extends BaseController
@RequiresPermissions("system:region:list") @RequiresPermissions("system:region:list")
@PostMapping("/list") @PostMapping("/list")
@ResponseBody @ResponseBody
public List<SysOaRegion> list(SysOaRegion sysOaRegion) public TableDataInfo list(SysOaRegion sysOaRegion)
{ {
List<SysOaRegion> list = sysOaRegionService.selectSysOaRegionList(sysOaRegion); startPage();
return list; if(StringUtils.isEmpty(sysOaRegion.getName())){
List<SysOaRegion> list = sysOaRegionService.selectSysOaRegionList(sysOaRegion);
return getDataTable(list);
}else {
SysOaRegion sysOaRegionName=new SysOaRegion();
sysOaRegionName.setName(sysOaRegion.getName());
List<SysOaRegion> list = sysOaRegionService.selectSysOaRegionList(sysOaRegionName);
return getDataTable(list);
}
} }
/** /**
@ -73,7 +82,7 @@ public class SysOaRegionController extends BaseController
/** /**
* 新增地区 * 新增地区
*/ */
@GetMapping(value = { "/add/{code}", "/add/" }) @GetMapping(value = { "/add/{code}", "/add" })
public String add(@PathVariable(value = "code", required = false) Long code, ModelMap mmap) public String add(@PathVariable(value = "code", required = false) Long code, ModelMap mmap)
{ {
if (StringUtils.isNotNull(code)) if (StringUtils.isNotNull(code))

View File

@ -1,6 +1,8 @@
package com.snow.web.controller.system; package com.snow.web.controller.system;
import com.snow.common.core.page.TableDataInfo;
import com.snow.framework.storage.StorageService; import com.snow.framework.storage.StorageService;
import com.snow.system.domain.SysAuthUser;
import com.snow.system.domain.SysFile; import com.snow.system.domain.SysFile;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -25,6 +27,8 @@ import com.snow.framework.util.ShiroUtils;
import com.snow.system.domain.SysUser; import com.snow.system.domain.SysUser;
import com.snow.system.service.ISysUserService; import com.snow.system.service.ISysUserService;
import java.util.List;
/** /**
* 个人信息 业务处理 * 个人信息 业务处理
* *
@ -55,11 +59,20 @@ public class SysProfileController extends BaseController
{ {
SysUser user = ShiroUtils.getSysUser(); SysUser user = ShiroUtils.getSysUser();
mmap.put("user", user); mmap.put("user", user);
mmap.put("auths", userService.selectAuthUserListByUserId(user.getUserId()));
mmap.put("roleGroup", userService.selectUserRoleGroup(user.getUserId())); mmap.put("roleGroup", userService.selectUserRoleGroup(user.getUserId()));
mmap.put("postGroup", userService.selectUserPostGroup(user.getUserId())); mmap.put("postGroup", userService.selectUserPostGroup(user.getUserId()));
return prefix + "/profile"; return prefix + "/profile";
} }
@PostMapping("/list")
@ResponseBody
public TableDataInfo getAuthUserList(){
SysUser user = ShiroUtils.getSysUser();
List<SysAuthUser> sysAuthUsers = userService.selectAuthUserListByUserId(user.getUserId());
return getDataTable(sysAuthUsers);
}
@GetMapping("/checkPassword") @GetMapping("/checkPassword")
@ResponseBody @ResponseBody
public boolean checkPassword(String password) public boolean checkPassword(String password)

View File

@ -67,7 +67,6 @@ public class SysSyncLogController extends BaseController
ExcelUtil<SysDingtalkSyncLog> util = new ExcelUtil<SysDingtalkSyncLog>(SysDingtalkSyncLog.class); ExcelUtil<SysDingtalkSyncLog> util = new ExcelUtil<SysDingtalkSyncLog>(SysDingtalkSyncLog.class);
return util.exportExcel(list, "log"); return util.exportExcel(list, "log");
} }
/** /**
* 新增钉钉同步日志记录 * 新增钉钉同步日志记录
*/ */

View File

@ -6,9 +6,9 @@ spring:
druid: druid:
# 主库数据源 # 主库数据源
master: master:
url: jdbc:mysql://localhost:3306/snow-dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 url: jdbc:mysql://rm-bp1j1554xv1qs04295o.mysql.rds.aliyuncs.com:3306/snow-dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root username: cloud_root
password: root password: Jin!152377
# 从库数据源 # 从库数据源
slave: slave:
# 从数据源开关/默认关闭 # 从数据源开关/默认关闭

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@ -103,7 +103,53 @@ $(function() {
}); });
}); });
} }
//时间 带时分秒的
if ($(".datetime-input").length > 0) {
layui.use('laydate', function () {
var com = layui.laydate;
$(".datetime-input").each(function (index, item) {
var time = $(item);
// 控制控件外观
var type = time.attr("data-type") || 'datetime';
// 控制回显格式
var format = time.attr("data-format") || 'yyyy-MM-dd HH:mm:ss';
// 控制日期控件按钮
var buttons = time.attr("data-btn") || 'clear|now|confirm', newBtnArr = [];
// 日期控件选择完成后回调处理
var callback = time.attr("data-callback") || {};
if (buttons) {
if (buttons.indexOf("|") > 0) {
var btnArr = buttons.split("|"), btnLen = btnArr.length;
for (var j = 0; j < btnLen; j++) {
if ("clear" === btnArr[j] || "now" === btnArr[j] || "confirm" === btnArr[j]) {
newBtnArr.push(btnArr[j]);
}
}
} else {
if ("clear" === buttons || "now" === buttons || "confirm" === buttons) {
newBtnArr.push(buttons);
}
}
} else {
newBtnArr = ['clear', 'now', 'confirm'];
}
com.render({
elem: item,
theme: 'molv',
trigger: 'click',
type: type,
format: format,
btns: newBtnArr,
done: function (value, data) {
if (typeof window[callback] != 'undefined'
&& window[callback] instanceof Function) {
window[callback](value, data);
}
}
});
});
});
}
// laydate time-input 时间控件绑定 // laydate time-input 时间控件绑定
if ($(".time-input").length > 0) { if ($(".time-input").length > 0) {
layui.use('laydate', function () { layui.use('laydate', function () {

View File

@ -32,12 +32,14 @@
<div class="col-sm-8"> <div class="col-sm-8">
<div id="element_id"> <div id="element_id">
<select class="province form-control m-b" name="customerProvinceCode"> <select class="province form-control m-b" name="customerProvinceCode">
<!--<option th:field="*{customerProvinceName}"></option>--> <option th:value="${sysOaCustomer.customerProvinceCode}" selected>[[${sysOaCustomer.customerProvinceName}]]</option>
</select> </select>
<select class="city form-control m-b" name="customerCityCode"> <select class="city form-control m-b" name="customerCityCode">
<!-- <option th:field="*{customerCityName}"></option>--> <option th:value="${sysOaCustomer.customerCityCode}" selected>[[${sysOaCustomer.customerCityName}]]</option>
</select>
<select class="area form-control m-b" name="customerAreaCode" >
<option th:value="${sysOaCustomer.customerAreaCode}" selected>[[${sysOaCustomer.customerAreaName}]]</option>
</select> </select>
<select class="area form-control m-b" name="customerAreaCode" th:value="${sysOaCustomer.customerAreaName}"></select>
</div> </div>
</div> </div>
</div> </div>

View File

@ -17,15 +17,15 @@
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">请假理由:</label> <label class="col-sm-3 control-label">请假理由:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<textarea name="reason" class="form-control"></textarea> <textarea name="reason" class="form-control" required></textarea>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">开始时间:</label> <label class="col-sm-3 control-label">开始时间:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <div class="input-group date">
<input name="startTime" class="form-control" placeholder="yyyy-MM-dd" type="text" required> <input type="text" class="datetime-input form-control" name="startTime" placeholder="开始时间" required/>
<span class="input-group-addon"><i class="fa fa-calendar"></i></span> <!-- <span class="input-group-addon"><i class="fa fa-calendar"></i></span>-->
</div> </div>
</div> </div>
</div> </div>
@ -33,8 +33,9 @@
<label class="col-sm-3 control-label">结束时间:</label> <label class="col-sm-3 control-label">结束时间:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <div class="input-group date">
<input name="endTime" class="form-control" placeholder="yyyy-MM-dd" type="text" required> <!-- <input name="endTime" class="form-control" placeholder="yyyy-MM-dd mm:hh:ss" type="text" required>-->
<span class="input-group-addon"><i class="fa fa-calendar"></i></span> <input type="text" class="datetime-input form-control" name="endTime" placeholder="结束时间" required/>
<!-- <span class="input-group-addon"><i class="fa fa-calendar"></i></span>-->
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head> <head>
<th:block th:include="include :: header('修改请假单')" /> <th:block th:include="include :: header('发起请假申请')" />
<th:block th:include="include :: datetimepicker-css" /> <th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: bootstrap-fileinput-css"/> <th:block th:include="include :: bootstrap-fileinput-css"/>
</head> </head>
@ -18,22 +18,22 @@
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">请假名称:</label> <label class="col-sm-3 control-label">请假名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="name" th:field="*{name}" class="form-control" type="text"> <input name="name" th:field="*{name}" class="form-control" type="text" required>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">请假理由:</label> <label class="col-sm-3 control-label">请假理由:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<textarea name="reason" class="form-control">[[*{reason}]]</textarea> <textarea name="reason" class="form-control" required>[[*{reason}]]</textarea>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">开始时间:</label> <label class="col-sm-3 control-label">开始时间:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <div class="input-group date">
<input name="startTime" id="startTime" th:value="${#dates.format(sysOaLeave.startTime, 'yyyy-MM-dd HH:mm:ss')}" class="form-control" placeholder="yyyy-MM-dd" type="text"> <input name="startTime" id="startTime" th:value="${#dates.format(sysOaLeave.startTime, 'yyyy-MM-dd HH:mm:ss')}" class=" datetime-input form-control" placeholder="yyyy-MM-dd" type="text" required>
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div> </div>
</div> </div>
</div> </div>
@ -41,8 +41,7 @@
<label class="col-sm-3 control-label">结束时间:</label> <label class="col-sm-3 control-label">结束时间:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <div class="input-group date">
<input name="endTime" id="endTime" th:value="${#dates.format(sysOaLeave.endTime, 'yyyy-MM-dd HH:mm:ss')}" class="form-control" placeholder="yyyy-MM-dd" type="text"> <input name="endTime" id="endTime" th:value="${#dates.format(sysOaLeave.endTime, 'yyyy-MM-dd HH:mm:ss')}" class="datetime-input form-control" placeholder="结束时间" type="text" required>
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div> </div>
</div> </div>
</div> </div>
@ -59,7 +58,7 @@
<div class="col-sm-8"> <div class="col-sm-8">
<input type="hidden" name="fileUrl" th:field="*{fileUrl}"> <input type="hidden" name="fileUrl" th:field="*{fileUrl}">
<div class="file-loading"> <div class="file-loading">
<input class="form-control file-upload" id="fileUrl" name="file" type="file"> <input class="form-control file-upload" id="fileUrl" name="file" type="file">
</div> </div>
</div> </div>
</div> </div>
@ -108,6 +107,8 @@
$(this).fileinput('_initFileActions'); $(this).fileinput('_initFileActions');
}); });
function formatBetweenTime(date1,date2) { function formatBetweenTime(date1,date2) {
var date3 = date2.getTime() - date1.getTime() //时间差的毫秒数 var date3 = date2.getTime() - date1.getTime() //时间差的毫秒数
console.log(date3) console.log(date3)
@ -131,15 +132,10 @@
<script th:inline="javascript"> <script th:inline="javascript">
$('#endTime').blur(function () { $('#endTime').blur(function () {
var startTime =$("#startTime").val(); var startTime =$("#startTime").val();
console.log(startTime)
var endTime = $("#endTime").val(); var endTime = $("#endTime").val();
console.log(endTime)
var formatBetweenTime1 = formatBetweenTime(new Date(startTime),new Date(endTime)); var formatBetweenTime1 = formatBetweenTime(new Date(startTime),new Date(endTime));
$("#leaveTime").val(formatBetweenTime1); $("#leaveTime").val(formatBetweenTime1);
}); });
</script> </script>
</body> </body>
</html> </html>

View File

@ -38,16 +38,16 @@
<li> <li>
<label>操作类别:</label> <label>操作类别:</label>
<select name="businessType" th:with="type=${@dict.getType('dingtalk_sync_type')}"> <select name="operatorType" th:with="type=${@dict.getType('dingtalk_sync_type')}">
<option value="">所有</option> <option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select> </select>
</li> </li>
<li class="select-time"> <li class="select-time">
<label>操作时间:</label> <label>操作时间:</label>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginOperTime]"/> <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>
<span>-</span> <span>-</span>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endOperTime]"/> <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>
</li> </li>
<li> <li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
@ -145,10 +145,10 @@
field: 'deptName', field: 'deptName',
title: '部门名称' title: '部门名称'
}, },
{ /* {
field: 'operIp', field: 'operIp',
title: '主机地址' title: '主机地址'
}, },*/
{ {
field: 'operLocation', field: 'operLocation',
title: '操作地点' title: '操作地点'
@ -175,10 +175,10 @@
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; var actions = [];
if(row.status==1){ /* if(row.status==1){
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.logId + '\')"><i class="fa fa-edit"></i>手工同步</a> '); actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.logId + '\')"><i class="fa fa-edit"></i>手工同步</a> ');
} }
*/
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.logId + '\')"><i class="fa fa-remove"></i>删除</a> '); actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.logId + '\')"><i class="fa fa-remove"></i>删除</a> ');

View File

@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('省市区')" />
<th:block th:include="include :: layout-latest-css" />
<th:block th:include="include :: ztree-css" />
</head>
<body class="gray-bg">
<div class="ui-layout-west">
<div class="box box-main">
<div class="box-header">
<div class="box-title">
<i class="fa icon-grid"></i> 省市区
</div>
<div class="box-tools pull-right">
<!-- <a type="button" class="btn btn-box-tool" href="#" onclick="newsNode()" title="省市区"><i class="fa fa-edit"></i></a>-->
<button type="button" class="btn btn-box-tool" id="btnExpand" title="展开" style="display:none;"><i class="fa fa-chevron-up"></i></button>
<button type="button" class="btn btn-box-tool" id="btnCollapse" title="折叠"><i class="fa fa-chevron-down"></i></button>
<button type="button" class="btn btn-box-tool" id="btnRefresh" title="刷新"><i class="fa fa-refresh"></i></button>
</div>
</div>
<div class="ui-layout-content">
<div id="tree" class="ztree"></div>
</div>
</div>
</div>
<div class="ui-layout-center">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<input type="hidden" id="code" name="code">
<input type="hidden" id="pCode" name="pCode">
<div class="select-list">
<ul>
<li>
<label>名称:</label>
<input type="text" name="name"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:region:add">
<i class="fa fa-plus"></i> 新增
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:region:remove">
<i class="fa fa-remove"></i> 删除
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: layout-latest-js" />
<th:block th:include="include :: ztree-js" />
<script th:inline="javascript">
var addFlag = [[${@permission.hasPermi('system:region:add')}]];
var editFlag = [[${@permission.hasPermi('system:region:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:region:remove')}]];
var prefix = ctx + "system/region";
$(function() {
var panehHidden = false;
if ($(this).width() < 769) {
panehHidden = true;
}
$('body').layout({ initClosed: panehHidden, west__size: 185 });
queryAreaList();
queryAreaTree();
});
function queryAreaList() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
modalName: "省市区",
columns: [{
checkbox: true
},
{
field: 'code',
title: '地区代码',
align: 'left'
},
{
field: 'pcode',
title: '上级地区代码',
align: 'left'
},
{
field: 'name',
title: '区域名称',
align: 'left'
},
{
title: '操作',
align: 'center',
align: 'left',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.code + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="javascript:void(0)" onclick="$.operate.add(\'' + row.code + '\')"><i class="fa fa-plus"></i>新增</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.code + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
}
function queryAreaTree()
{
var url = "../system/region/treeData";
var options = {
url: url,
expandLevel: 0,
onClick : zOnClick
};
$.tree.init(options);
function zOnClick(event, treeId, treeNode) {
//console.log(JSON.stringify(treeNode))
$("#code").val(treeNode.id);
$("#pCode").val(treeNode.pId);
$.table.search();
}
}
$('#btnExpand').click(function() {
$._tree.expandAll(true);
$(this).hide();
$('#btnCollapse').show();
});
$('#btnCollapse').click(function() {
$._tree.expandAll(false);
$(this).hide();
$('#btnExpand').show();
});
$('#btnRefresh').click(function() {
queryDeptTree();
});
</script>
</body>
</html>

View File

@ -148,14 +148,9 @@
<div id="git-user-binding"> <div id="git-user-binding">
<h4 class="provider-desc">你可以绑定以下第三方帐号用于DingFlow系统</h4> <h4 class="provider-desc">你可以绑定以下第三方帐号用于DingFlow系统</h4>
<div id="authlist" class="user-bind"> <div id="authlist" class="user-bind">
<a class="third-app" href="#" onclick="authUrl('gitee');" title="使用 Gitee 账号授权登录"> <a class="third-app" href="javascript:void(0)" th:onclick="authUrl('dingtalk');" title="使用 DingTalk 账号授权登录">
<div class="git-other-login-icon"><img th:src="@{/img/gitee.svg}"></div> <div class="git-other-login-icon"><img th:src="@{/img/dingding.jpg}"></div>
<span class="app-name">DingTalk</span></a> <span class="app-name">DingTalk</span></a>
<!-- <a class="third-app" href="#" onclick="authUrl('github');" title="使用 GitHub 账号授权登录">
<div class="git-other-login-icon"><img th:src="@{/img/github.svg}"></div>
<span class="app-name">Github</span></a>
-->
<a class="third-app" href="#" title="功能开发中..."> <a class="third-app" href="#" title="功能开发中...">
<div class="git-other-login-icon"><img th:src="@{/img/weixin.svg}"></div> <div class="git-other-login-icon"><img th:src="@{/img/weixin.svg}"></div>
<span class="app-name">WeiXin</span></a> <span class="app-name">WeiXin</span></a>
@ -329,9 +324,8 @@
// 第三方授权列表 // 第三方授权列表
$(function() { $(function() {
var auths = [[${auths}]]
var options = { var options = {
data: auths, url:"/system/user/profile/list",
sidePagination: "client", sidePagination: "client",
showSearch: false, showSearch: false,
showRefresh: false, showRefresh: false,
@ -374,6 +368,8 @@
}] }]
}; };
$.table.init(options); $.table.init(options);
}); });
// 解除绑定 // 解除绑定
@ -381,7 +377,7 @@
$.modal.confirm("您确定要解除" + source + "的账号绑定吗?", function() { $.modal.confirm("您确定要解除" + source + "的账号绑定吗?", function() {
$.ajax({ $.ajax({
type: "post", type: "post",
url: ctx + "/third/oauth/unlock", url: "/third/oauth/unlock",
data: { "authId": authId }, data: { "authId": authId },
success: function(r) { success: function(r) {
if (r.code == web_status.SUCCESS) { if (r.code == web_status.SUCCESS) {

View File

@ -149,6 +149,14 @@
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -7,6 +7,7 @@ package com.snow.common.enums;
* @date 2020/9/18 10:18 * @date 2020/9/18 10:18
*/ */
public enum DingTalkListenerType { public enum DingTalkListenerType {
DEPARTMENT_CREATE(1, 2,"org_dept_create"), DEPARTMENT_CREATE(1, 2,"org_dept_create"),
DEPARTMENT_UPDATE(2, 2,"org_dept_modify"), DEPARTMENT_UPDATE(2, 2,"org_dept_modify"),
@ -17,7 +18,7 @@ public enum DingTalkListenerType {
USER_DELETE(3,1,"user_leave_org"), USER_DELETE(3,1,"user_leave_org"),
CALL_BACK_CHECK_URL(1,10, "check_url"), CALL_BACK_CHECK_URL(1,10, "回调check_url"),
CALL_BACK_REGISTER(1,10, "回调注册"), CALL_BACK_REGISTER(1,10, "回调注册"),

View File

@ -145,7 +145,7 @@ public class SendMessageEventLister extends AbstractEventListener {
//根据任务ID获取任务获选人 //根据任务ID获取任务获选人
TaskEntity entity = (TaskEntity) event.getEntity(); /* TaskEntity entity = (TaskEntity) event.getEntity();
Set<SysUser> flowCandidates = getFlowCandidates(entity); Set<SysUser> flowCandidates = getFlowCandidates(entity);
if(CollectionUtils.isNotEmpty(flowCandidates)){ if(CollectionUtils.isNotEmpty(flowCandidates)){
MessageEventDTO messageEventDTO=new MessageEventDTO(MessageEventType.TASK_TODO.getCode()); MessageEventDTO messageEventDTO=new MessageEventDTO(MessageEventType.TASK_TODO.getCode());
@ -153,7 +153,7 @@ public class SendMessageEventLister extends AbstractEventListener {
messageEventDTO.setMessageEventType(MessageEventType.TASK_TODO); messageEventDTO.setMessageEventType(MessageEventType.TASK_TODO);
messageEventDTO.setMessageOutsideId(entity.getId()); messageEventDTO.setMessageOutsideId(entity.getId());
applicationContext.publishEvent(messageEventDTO); applicationContext.publishEvent(messageEventDTO);
} }*/
} }

View File

@ -33,7 +33,7 @@ public class SysDingtalkSyncLog extends BaseEntity
private String title; private String title;
/** 模块类型0其它 1用户 2部门 3角色 10回调 */ /** 模块类型0其它 1用户 2部门 3角色 10回调 */
@Excel(name = "模块类型", readConverterExp = "0=其它,1=用户,2=部门,3=角色,1=0回调") @Excel(name = "模块类型", readConverterExp = "0=其它,1=用户,2=部门,3=角色,1=回调")
private Integer moduleType; private Integer moduleType;
/** 业务类型0其它 1新增 2修改 3删除 */ /** 业务类型0其它 1新增 2修改 3删除 */

View File

@ -22,7 +22,9 @@ public class SysOaLeave extends BaseEntity
/** id */ /** id */
private Integer id; private Integer id;
/** 请假单号 */
@Excel(name = "请假单号")
private String leaveNo;
/** 请假名称 */ /** 请假名称 */
@Excel(name = "请假名称") @Excel(name = "请假名称")
private String name; private String name;
@ -32,17 +34,17 @@ public class SysOaLeave extends BaseEntity
private String reason; private String reason;
/** 开始时间 */ /** 开始时间 */
@Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime; private Date startTime;
/** 结束时间 */ /** 结束时间 */
@Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime; private Date endTime;
/** 流程状态0--待审批1-审批中2--审批通过3--已驳回) */ /** 流程状态0--待审批1-审批中2--审批通过3--已驳回) */
@Excel(name = "流程状态", readConverterExp = "0=--待审批1-审批中2--审批通过3--已驳回") @Excel(name = "流程状态", readConverterExp = "0=待审批1=审批中2=审批通过3=已驳回")
private Integer processStatus; private Integer processStatus;
/** 流程实例ID */ /** 流程实例ID */
@ -59,9 +61,7 @@ public class SysOaLeave extends BaseEntity
/** 附件 */ /** 附件 */
@Excel(name = "附件") @Excel(name = "附件")
private String fileUrl; private String fileUrl;
/** 请假单号 */
@Excel(name = "请假单号")
private String leaveNo;
/** /**
* 请假时长 * 请假时长
*/ */

View File

@ -167,7 +167,7 @@ public interface SysUserMapper
/** /**
* 根据用户编号查询授权列表 * 根据用户编号查询授权列表
* *
* @param loginName 登录账户 * @param userId 登录账户
* @return 授权列表 * @return 授权列表
*/ */
public List<SysAuthUser> selectAuthUserListByUserId(Long userId); public List<SysAuthUser> selectAuthUserListByUserId(Long userId);

View File

@ -47,7 +47,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="status != null "> and status = #{status}</if> <if test="status != null "> and status = #{status}</if>
<if test="operTime != null "> and oper_time = #{operTime}</if> <if test="operTime != null "> and oper_time = #{operTime}</if>
<if test="logType != null "> and log_type = #{logType}</if> <if test="logType != null "> and log_type = #{logType}</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(oper_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(oper_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
</if>
</where> </where>
order by oper_time desc
</select> </select>
<select id="selectSysDingtalkSyncLogById" parameterType="Long" resultMap="SysDingtalkSyncLogResult"> <select id="selectSysDingtalkSyncLogById" parameterType="Long" resultMap="SysDingtalkSyncLogResult">

View File

@ -40,7 +40,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="processInstanceId != null and processInstanceId != ''"> and process_instance_id = #{processInstanceId}</if> <if test="processInstanceId != null and processInstanceId != ''"> and process_instance_id = #{processInstanceId}</if>
<if test="applyPerson != null and applyPerson != ''"> and apply_person = #{applyPerson}</if> <if test="applyPerson != null and applyPerson != ''"> and apply_person = #{applyPerson}</if>
<if test="createTime != null"> and create_time = #{createTime}</if> <if test="createTime != null"> and create_time = #{createTime}</if>
</where> </where>
order by create_time desc
</select> </select>
<select id="selectSysOaLeaveById" parameterType="Integer" resultMap="SysOaLeaveResult"> <select id="selectSysOaLeaveById" parameterType="Integer" resultMap="SysOaLeaveResult">