Commit 801bdf89 by 朱莹

Merge remote-tracking branch 'origin/master'

parents 31923c82 604e1338
No preview for this file type
...@@ -85,7 +85,7 @@ spring: ...@@ -85,7 +85,7 @@ spring:
devtools: devtools:
restart: restart:
# 热部署开关 # 热部署开关
enabled: true enabled: false
# redis 配置 # redis 配置
redis: redis:
# 地址 # 地址
...@@ -201,17 +201,36 @@ wx: ...@@ -201,17 +201,36 @@ wx:
# redirect-uri: y32025c600.goho.co:10087 # redirect-uri: y32025c600.goho.co:10087
dd: dd:
# 本地配置
appKey: dingclpf8qoxvinhksyh appKey: dingclpf8qoxvinhksyh
appSecret: CrlRmzkaFMH00cbipSf3g0nc_xpFGCitTAPA_cphUXg1e-DSX1hFcyVpqgos29r9 appSecret: CrlRmzkaFMH00cbipSf3g0nc_xpFGCitTAPA_cphUXg1e-DSX1hFcyVpqgos29r9
# 钉钉接口 获取钉钉access_token 的uri # 钉钉接口 获取钉钉access_token 的uri
access-token-uri: https://oapi.dingtalk.com/gettoken?appkey=${dd.appKey}&appsecret=${dd.appSecret} access-token-uri: https://oapi.dingtalk.com/gettoken?appkey=${dd.appKey}&appsecret=${dd.appSecret}
#企业id #企业id
corpId: dingaa3937ff8b7dd267f2c783f7214b6d69 corpId: dingaa3937ff8b7dd267f2c783f7214b6d69
#应用id #应用id
agentId: 2730043705 agentId: 2730043705
# 测试服务器配置
# appKey: ding5cbf7qhd55zun5jg
# appSecret: -er7LnIslFEJ2n8cJY9MdTCKiRDjoCZwQuA2XvU2Hr7fHw-cp_B2ZAhynVifqlL8
# # 钉钉接口 获取钉钉access_token 的uri
# access-token-uri: https://oapi.dingtalk.com/gettoken?appkey=${dd.appKey}&appsecret=${dd.appSecret}
# #企业id
# corpId: dingaa3937ff8b7dd267f2c783f7214b6d69
# #应用id
# agentId: 2760774127
# 正式配置
# appKey: dingggqchzyvxm9e6e7v
# appSecret: ts5hRNjO_o3QNMfEu4pM2dn71YJzw7yalnuh5LztHuCGWqUNjM2lMB1eNCSOlxNN
# # 钉钉接口 获取钉钉access_token 的uri
# access-token-uri: https://oapi.dingtalk.com/gettoken?appkey=${dd.appKey}&appsecret=${dd.appSecret}
# #企业id
# corpId: dingccea40788226c988f2c783f7214b6d69
# #应用id
# agentId: 2765311628
#重定向地址 #重定向地址
redirect-uri: www.dyzmxx.com redirect-uri: www.dyzmxx.com
......
...@@ -12,7 +12,7 @@ import com.ruoyi.common.core.domain.BaseEntity; ...@@ -12,7 +12,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
/** /**
* 部门表 sys_dept * 部门表 sys_dept
* *
* @author ruoyi * @author ruoyi
*/ */
public class SysDept extends BaseEntity public class SysDept extends BaseEntity
...@@ -32,7 +32,7 @@ public class SysDept extends BaseEntity ...@@ -32,7 +32,7 @@ public class SysDept extends BaseEntity
private String deptName; private String deptName;
/** 显示顺序 */ /** 显示顺序 */
private Integer orderNum; private Long orderNum;
/** 负责人 */ /** 负责人 */
private String leader; private String leader;
...@@ -51,7 +51,7 @@ public class SysDept extends BaseEntity ...@@ -51,7 +51,7 @@ public class SysDept extends BaseEntity
/** 父部门名称 */ /** 父部门名称 */
private String parentName; private String parentName;
/** 子部门 */ /** 子部门 */
private List<SysDept> children = new ArrayList<SysDept>(); private List<SysDept> children = new ArrayList<SysDept>();
...@@ -98,12 +98,12 @@ public class SysDept extends BaseEntity ...@@ -98,12 +98,12 @@ public class SysDept extends BaseEntity
} }
@NotNull(message = "显示顺序不能为空") @NotNull(message = "显示顺序不能为空")
public Integer getOrderNum() public Long getOrderNum()
{ {
return orderNum; return orderNum;
} }
public void setOrderNum(Integer orderNum) public void setOrderNum(Long orderNum)
{ {
this.orderNum = orderNum; this.orderNum = orderNum;
} }
......
...@@ -112,10 +112,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter ...@@ -112,10 +112,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.antMatchers( "/ws/webSocket/**").anonymous() .antMatchers( "/ws/webSocket/**").anonymous()
.antMatchers( "/webSocket/**").anonymous() .antMatchers( "/webSocket/**").anonymous()
.antMatchers("/login", "/register", "/captchaImage").anonymous() .antMatchers("/login", "/register", "/captchaImage").anonymous()
.antMatchers("/wx/user/login").permitAll() .antMatchers("/wx/user/login","/wx/user/getRoleType/**").permitAll()
.antMatchers("/dd/user/login").permitAll() .antMatchers("/dd/user/login").permitAll()
.antMatchers( "/common/**").permitAll() .antMatchers( "/common/**").permitAll()
.antMatchers( "/dd/school/**").permitAll() .antMatchers( "/dd/school/**").permitAll()
//打印下载接口放行
.antMatchers("/school/student/queryOne/**","/school/studentStatus/proofStatus/**").permitAll()
//网页注册登录接口放行 //网页注册登录接口放行
.antMatchers( "/web/artStudent/register","/web/artStudent/login").permitAll() .antMatchers( "/web/artStudent/register","/web/artStudent/login").permitAll()
// 静态资源,可匿名访问 // 静态资源,可匿名访问
...@@ -132,6 +134,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter ...@@ -132,6 +134,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.antMatchers("/wx/user/getToken").permitAll() .antMatchers("/wx/user/getToken").permitAll()
//钉钉免登录接口 //钉钉免登录接口
.antMatchers("/dd/App/user/**").permitAll() .antMatchers("/dd/App/user/**").permitAll()
.antMatchers("/dd/djtx/**").permitAll()
//开发一个接口字典 //开发一个接口字典
.antMatchers("/system/dict/data/type/**").permitAll() .antMatchers("/system/dict/data/type/**").permitAll()
// .antMatchers("/**").permitAll() // .antMatchers("/**").permitAll()
......
...@@ -27,6 +27,7 @@ public interface ISysRoleService ...@@ -27,6 +27,7 @@ public interface ISysRoleService
* @return 角色列表 * @return 角色列表
*/ */
public List<SysRole> selectRolesByUserId(Long userId); public List<SysRole> selectRolesByUserId(Long userId);
public List<SysRole> selectRolesByUserIdDdApp(Long userId);
/** /**
* 根据用户ID查询角色权限 * 根据用户ID查询角色权限
......
...@@ -83,6 +83,25 @@ public class SysRoleServiceImpl implements ISysRoleService ...@@ -83,6 +83,25 @@ public class SysRoleServiceImpl implements ISysRoleService
return roles; return roles;
} }
public List<SysRole> selectRolesByUserIdDdApp(Long userId)
{
List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId);
List<SysRole> roles = roleMapper.selectRoleList(new SysRole());
for (SysRole role : roles)
{
for (SysRole userRole : userRoles)
{
if (role.getRoleId().longValue() == userRole.getRoleId().longValue())
{
role.setFlag(true);
break;
}
}
}
return roles;
}
/** /**
* 根据用户ID查询权限 * 根据用户ID查询权限
* *
......
...@@ -32,6 +32,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -32,6 +32,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="employeeType" column="employee_type" /> <result property="employeeType" column="employee_type" />
<result property="studentId" column="student_id" /> <result property="studentId" column="student_id" />
<result property="sign" column="sign" /> <result property="sign" column="sign" />
<result property="ddUserId" column="dd_user_id" />
<result property="unionId" column="union_id" />
<association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult" /> <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult" />
<collection property="roles" javaType="java.util.List" resultMap="RoleResult" /> <collection property="roles" javaType="java.util.List" resultMap="RoleResult" />
</resultMap> </resultMap>
...@@ -56,7 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -56,7 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectUserVo"> <sql id="selectUserVo">
select u.user_id, u.dept_id, u.user_name, u.login_name,u.user_type, u.user_login_type,u.email, u.avatar, u.phonenumber, u.password, u.salt,u.sex, u.status, u.del_flag, u.login_ip, u.login_date,u.pwd_update_date, u.create_by, u.create_time, u.remark,u.sign,u.employee_type,u.student_id, select u.user_id, u.dept_id, u.user_name, u.login_name,u.user_type,u.union_id,u.dd_user_id, u.user_login_type,u.email, u.avatar, u.phonenumber, u.password, u.salt,u.sex, u.status, u.del_flag, u.login_ip, u.login_date,u.pwd_update_date, u.create_by, u.create_time, u.remark,u.sign,u.employee_type,u.student_id,
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
from sys_user u from sys_user u
...@@ -66,7 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -66,7 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql> </sql>
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult"> <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u select u.user_id, u.dept_id, u.login_name, u.user_name,u.union_id,u.dd_user_id,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0' and user_login_type = '0' where u.del_flag = '0' and user_login_type = '0'
<if test="userId != null and userId != 0"> <if test="userId != null and userId != 0">
...@@ -96,7 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -96,7 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectUserListTypeLogin" parameterType="SysUser" resultMap="SysUserResult"> <select id="selectUserListTypeLogin" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt,u.student_id, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u select u.user_id, u.dept_id, u.login_name, u.union_id,u.dd_user_id,u.user_name,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt,u.student_id, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0' where u.del_flag = '0'
<if test="userLoginType != null and userLoginType != 0"> <if test="userLoginType != null and userLoginType != 0">
...@@ -143,7 +145,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -143,7 +145,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult"> <select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.login_name,u.user_type, u.email, u.phonenumber, u.status, u.create_time select distinct u.user_id, u.dept_id, u.user_name,u.union_id,u.dd_user_id, u.login_name,u.user_type, u.email, u.phonenumber, u.status, u.create_time
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id left join sys_user_role ur on u.user_id = ur.user_id
...@@ -203,6 +205,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -203,6 +205,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="sign != null and sign != ''">sign,</if> <if test="sign != null and sign != ''">sign,</if>
<if test="studentId != null and studentId != 0">student_id,</if> <if test="studentId != null and studentId != 0">student_id,</if>
<if test="employeeType != null and employeeType != ''">employee_type,</if> <if test="employeeType != null and employeeType != ''">employee_type,</if>
<if test="unionId != null and employeeType != ''">union_id,</if>
<if test="ddUserId != null and employeeType != ''">dd_user_id,</if>
create_time create_time
)values( )values(
<if test="userId != null and userId != ''">#{userId},</if> <if test="userId != null and userId != ''">#{userId},</if>
...@@ -224,6 +228,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -224,6 +228,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="sign != null and sign != ''">#{sign},</if> <if test="sign != null and sign != ''">#{sign},</if>
<if test="studentId != null and studentId != ''">#{studentId},</if> <if test="studentId != null and studentId != ''">#{studentId},</if>
<if test="employeeType != null and employeeType != ''">#{employeeType},</if> <if test="employeeType != null and employeeType != ''">#{employeeType},</if>
<if test="employeeType != null and employeeType != ''">#{employeeType},</if>
<if test="unionId != null and unionId != ''">#{unionId},</if>
<if test="ddUserId != null and ddUserId != ''">#{ddUserId},</if>
sysdate() sysdate()
) )
</insert> </insert>
......
...@@ -7,7 +7,7 @@ git clone https://gitee.com/y_project/RuoYi-Vue ...@@ -7,7 +7,7 @@ git clone https://gitee.com/y_project/RuoYi-Vue
# 进入项目目录 # 进入项目目录
cd ruoyi-ui cd ruoyi-ui
__
# 安装依赖 # 安装依赖
npm install npm install
...@@ -33,4 +33,7 @@ npm run build:prod ...@@ -33,4 +33,7 @@ npm run build:prod
在index页面,打开created中 this.csToken() 在index页面,打开created中 this.csToken()
#生产环境 #生产环境
在index页面,打开created中 this.getCode() 在index页面,打开created中 this.getCode()
Navbar.vue中的退出登录注销。
<!-- <el-dropdown-item divided @click.native="logout">
<span>退出登录</span>
</el-dropdown-item> -->
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
"url": "https://gitee.com/y_project/RuoYi-Vue.git" "url": "https://gitee.com/y_project/RuoYi-Vue.git"
}, },
"dependencies": { "dependencies": {
"@alicloud/dingtalk": "^2.0.49",
"@riophae/vue-treeselect": "0.4.0", "@riophae/vue-treeselect": "0.4.0",
"awe-dnd": "^0.3.4", "awe-dnd": "^0.3.4",
"axios": "0.24.0", "axios": "0.24.0",
......
...@@ -14,9 +14,8 @@ export function getsigninInfo(query) { ...@@ -14,9 +14,8 @@ export function getsigninInfo(query) {
// 获取社团报名审核详细信息 // 获取社团报名审核详细信息
export function listsigninInfo(id) { export function listsigninInfo(id) {
return request({ return request({
url: '/signin/'+ id, url: `/signin/${id}`,
method: 'get', method: 'get',
}) })
} }
......
import request from '@/utils/request'
// 通知列表
export function listTeacherNotice(query) {
return request({
url: '/teacherFiles/notice/list',
method: 'get',
params: query
})
}
// 添加通知
export function addTeacherNotice(data) {
return request({
url: '/teacherFiles/notice',
method: 'post',
data: data
})
}
// 信息发布
export function infoTeacherNotice(id) {
return request({
url: `/teacherFiles/notice/release/${id}`,
method: 'put'
})
}
// 通知下档案查看|数据维护
export function getteacherNotice(query) {
return request({
url: '/teacherFiles/files/list',
method: 'get',
params: query
})
}
//老师查看档案详情
export function getNoticeInfo(query) {
return request({
url: '/teacherFiles/files/list',
method: 'get',
params: query
})
}
//级部查看档案详情
export function getDepInfo(query) {
return request({
url: '/teacherFiles/files/list',
method: 'get',
params: query
})
}
//查看档案详情
export function getFileTnfo(id) {
return request({
url: '/teacherFiles/files/'+id,
method: 'get',
})
}
// 同步档案
export function syncNotice(id) {
return request({
url: '/teacherFiles/files/synchronous/' + id,
method: 'put'
})
}
...@@ -8,7 +8,17 @@ import { isRelogin } from "@/utils/request"; ...@@ -8,7 +8,17 @@ import { isRelogin } from "@/utils/request";
NProgress.configure({ showSpinner: false }); NProgress.configure({ showSpinner: false });
const whiteList = ["/login", "/auth-redirect", "/bind", "/register", "/index"]; const whiteList = [
"/login",
"/auth-redirect",
"/bind",
"/register",
"/index",
"/dd",
"/studentRegistra",
"/printBarcodes",
"/printLesson",
];
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
NProgress.start(); NProgress.start();
......
...@@ -62,6 +62,40 @@ export const constantRoutes = [ ...@@ -62,6 +62,40 @@ export const constantRoutes = [
hidden: true, hidden: true,
}, },
{ {
path: "/studentRegistra",
component: () =>
import(
"@/views/smartSchool/teachAffairAdministration/affairStudentManage/studentRegistra"
),
hidden: true,
},
//设备台账
{
path: "/printBarcodes",
component: () =>
import(
"@/views/smartSchool/schoolProperty/equipmenTledger/printBarcodes"
),
hidden: true,
},
//课程表
{
path: "/printLesson",
component: () =>
import(
"@/views/smartSchool/teachAffairAdministration/lessonManage/printLesson"
),
hidden: true,
},
{
path: "/studentRegistra",
component: () =>
import(
"@/views/smartSchool/teachAffairAdministration/affairStudentManage/studentRegistra"
),
hidden: true,
},
{
path: "/register", path: "/register",
component: () => import("@/views/register"), component: () => import("@/views/register"),
hidden: true, hidden: true,
......
import axios from 'axios' import axios from "axios";
import {Notification, MessageBox, Message, Loading} from 'element-ui' import { Notification, MessageBox, Message, Loading } from "element-ui";
import store from '@/store' import store from "@/store";
import {getToken} from '@/utils/auth' import { getToken } from "@/utils/auth";
import errorCode from '@/utils/errorCode' import errorCode from "@/utils/errorCode";
import {tansParams, blobValidate} from "@/utils/ruoyi"; import { tansParams, blobValidate } from "@/utils/ruoyi";
import cache from '@/plugins/cache' import cache from "@/plugins/cache";
import {saveAs} from 'file-saver' import { saveAs } from "file-saver";
import {timeout} from '@/enums/request' import { timeout } from "@/enums/request";
let downloadLoadingInstance; let downloadLoadingInstance;
// 是否显示重新登录 // 是否显示重新登录
export let isRelogin = {show: false}; export let isRelogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 创建axios实例 // 创建axios实例
const service = axios.create({ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分 // axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API, baseURL: process.env.VUE_APP_BASE_API,
// 超时 // 超时
timeout: timeout timeout: timeout,
}) });
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(
// 是否需要设置 token (config) => {
const isToken = (config.headers || {}).isToken === false // 是否需要设置 token
// 是否需要防止数据重复提交 const isToken = (config.headers || {}).isToken === false;
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false // 是否需要防止数据重复提交
if (getToken() && !isToken) { const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
}
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?' + tansParams(config.params);
url = url.slice(0, -1);
config.params = {};
config.url = url;
}
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
const requestObj = {
url: config.url,
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
time: new Date().getTime()
} }
const sessionObj = cache.session.getJSON('sessionObj') // get请求映射params参数
if (sessionObj === undefined || sessionObj === null || sessionObj === '') { if (config.method === "get" && config.params) {
cache.session.setJSON('sessionObj', requestObj) let url = config.url + "?" + tansParams(config.params);
} else { url = url.slice(0, -1);
const s_url = sessionObj.url; // 请求地址 config.params = {};
const s_data = sessionObj.data; // 请求数据 config.url = url;
const s_time = sessionObj.time; // 请求时间 }
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 if (
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { !isRepeatSubmit &&
const message = '数据正在处理,请勿重复提交'; (config.method === "post" || config.method === "put")
console.warn(`[${s_url}]: ` + message) ) {
return Promise.reject(new Error(message)) const requestObj = {
url: config.url,
data:
typeof config.data === "object"
? JSON.stringify(config.data)
: config.data,
time: new Date().getTime(),
};
const sessionObj = cache.session.getJSON("sessionObj");
if (
sessionObj === undefined ||
sessionObj === null ||
sessionObj === ""
) {
cache.session.setJSON("sessionObj", requestObj);
} else { } else {
cache.session.setJSON('sessionObj', requestObj) const s_url = sessionObj.url; // 请求地址
const s_data = sessionObj.data; // 请求数据
const s_time = sessionObj.time; // 请求时间
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
if (
s_data === requestObj.data &&
requestObj.time - s_time < interval &&
s_url === requestObj.url
) {
const message = "数据正在处理,请勿重复提交";
console.warn(`[${s_url}]: ` + message);
return Promise.reject(new Error(message));
} else {
cache.session.setJSON("sessionObj", requestObj);
}
} }
} }
return config;
},
(error) => {
console.log(error);
Promise.reject(error);
} }
return config );
}, error => {
console.log(error)
Promise.reject(error)
})
// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(
(res) => {
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// 获取错误信息 // 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default'] const msg = errorCode[code] || res.data.msg || errorCode["default"];
// 二进制数据则直接返回 // 二进制数据则直接返回
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { if (
return res.data res.request.responseType === "blob" ||
res.request.responseType === "arraybuffer"
) {
return res.data;
} }
if (code === 401) { if (code === 401) {
if (!isRelogin.show) { if (!isRelogin.show) {
isRelogin.show = true; isRelogin.show = true;
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { MessageBox.confirm(
confirmButtonText: '重新登录', "登录状态已过期,您可以继续留在该页面,或者重新登录",
cancelButtonText: '取消', "系统提示",
type: 'warning' {
confirmButtonText: "重新登录",
cancelButtonText: "取消",
type: "warning",
} }
).then(() => { )
isRelogin.show = false; .then(() => {
store.dispatch('LogOut').then(() => { isRelogin.show = false;
location.href = '/index'; store.dispatch("LogOut").then(() => {
location.href = "/login";
});
}) })
}).catch(() => { .catch(() => {
isRelogin.show = false; isRelogin.show = false;
}); });
} }
return Promise.reject('无效的会话,或者会话已过期,请重新登录。') return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
} else if (code === 500) { } else if (code === 500) {
Message({ Message({
dangerouslyUseHTMLString: true,//重点代码 dangerouslyUseHTMLString: true, //重点代码
message: msg, message: msg,
type: 'error' type: "error",
}) });
return Promise.reject(new Error(msg)) return Promise.reject(new Error(msg));
} else if (code !== 200) { } else if (code !== 200) {
Notification.error({ Notification.error({
title: msg title: msg,
}) });
return Promise.reject('error') return Promise.reject("error");
} else { } else {
return res.data return res.data;
} }
}, },
error => { (error) => {
console.log('err' + error) console.log("err" + error);
let {message} = error; let { message } = error;
if (message == "Network Error") { if (message == "Network Error") {
message = "后端接口连接异常"; message = "后端接口连接异常";
} else if (message.includes("timeout")) { } else if (message.includes("timeout")) {
...@@ -123,12 +148,12 @@ service.interceptors.response.use(res => { ...@@ -123,12 +148,12 @@ service.interceptors.response.use(res => {
} }
Message({ Message({
message: message, message: message,
type: 'error', type: "error",
duration: 5 * 1000 duration: 5 * 1000,
}) });
return Promise.reject(error) return Promise.reject(error);
} }
) );
// 通用下载方法 // 通用下载方法
export function download(url, params, filename, config) { export function download(url, params, filename, config) {
...@@ -136,31 +161,37 @@ export function download(url, params, filename, config) { ...@@ -136,31 +161,37 @@ export function download(url, params, filename, config) {
text: "正在下载数据,请稍候", text: "正在下载数据,请稍候",
spinner: "el-icon-loading", spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)", background: "rgba(0, 0, 0, 0.7)",
}) });
return service.post(url, params, { return service
transformRequest: [(params) => { .post(url, params, {
return tansParams(params) transformRequest: [
}], (params) => {
headers: {'Content-Type': 'application/x-www-form-urlencoded'}, return tansParams(params);
responseType: 'blob', },
...config ],
}).then(async (data) => { headers: { "Content-Type": "application/x-www-form-urlencoded" },
const isLogin = await blobValidate(data); responseType: "blob",
if (isLogin) { ...config,
const blob = new Blob([data]) })
saveAs(blob, filename) .then(async (data) => {
} else { const isLogin = await blobValidate(data);
const resText = await data.text(); if (isLogin) {
const rspObj = JSON.parse(resText); const blob = new Blob([data]);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] saveAs(blob, filename);
Message.error(errMsg); } else {
} const resText = await data.text();
downloadLoadingInstance.close(); const rspObj = JSON.parse(resText);
}).catch((r) => { const errMsg =
console.error(r) errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
Message.error('下载文件出现错误,请联系管理员!') Message.error(errMsg);
downloadLoadingInstance.close(); }
}) downloadLoadingInstance.close();
})
.catch((r) => {
console.error(r);
Message.error("下载文件出现错误,请联系管理员!");
downloadLoadingInstance.close();
});
} }
export default service export default service;
...@@ -130,8 +130,8 @@ ...@@ -130,8 +130,8 @@
<script> <script>
import { listDefinition, delDefinition, suspendOrActiveDefinition, convert2Model } from "@/api/activiti/definition.js" import { listDefinition, delDefinition, suspendOrActiveDefinition, convert2Model } from "@/api/activiti/definition.js"
import { format } from "@/utils/activiti/myUtil.js" import { format } from "@/utils/activiti/myUtil.js"
export default { export default {
name: "Definition", name: "Definition",
data() { data() {
......
...@@ -501,10 +501,7 @@ export default { ...@@ -501,10 +501,7 @@ export default {
} }
}, },
created() { created() {
// 钉钉code码,正式时打开 this.init()
// this.getCode()
// token,测试用
this.csToken()
}, },
mounted() { mounted() {
...@@ -529,59 +526,7 @@ export default { ...@@ -529,59 +526,7 @@ export default {
}, },
methods: { methods: {
// 获取code
getCode() {
dd.getAuthCode({
corpId: 'dingaa3937ff8b7dd267f2c783f7214b6d69',
success: (res) => {
console.log('获取新的免登码成功', res);
const code = res.code
// this.code = code;
// this.authCodeTimestamp = currentTime;
// console.log('this.authCodeTimestamp', this.authCodeTimestamp);
console.log('code', code);
this.getToken(code)
// console.log('loginResponse', loginResponse);
},
fail: (res) => {
console.log('获取免登码失败', res);
},
complete: () => { },
});
},
// 获取token
getToken(code) {
getCode(code).then(res => {
console.log('res', res.token);
if (res.token) {
setToken(res.token)
this.$store.commit('SET_TOKEN', res.token)
// this.$router.push({ path: '/index' });
// 判断当前用户是否已拉取完user_info信息
this.$store.dispatch('GetInfo').then((res) => {
this.$store.dispatch('GenerateRoutes').then(accessRoutes => {
// 根据roles权限生成可访问的路由表
router.addRoutes(accessRoutes) // 动态添加可访问路由表
this.init()
})
})
} else {
this.$message.error(res.message)
}
})
},
// 测试token
csToken() {
if (getToken()) {
console.log('getToken', getToken());
this.init()
} else {
this.$router.push({ path: '/login' });
}
},
//从后端获取任务数量 //从后端获取任务数量
taskNum() { taskNum() {
......
...@@ -41,7 +41,6 @@ ...@@ -41,7 +41,6 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 弹窗 --> <!-- 弹窗 -->
<el-dialog :title="title" :visible.sync="dialogTableVisible" width="30%" show-close> <el-dialog :title="title" :visible.sync="dialogTableVisible" width="30%" show-close>
<el-form :model="form" ref="form" size="small" :rules="rules" label-width="108px"> <el-form :model="form" ref="form" size="small" :rules="rules" label-width="108px">
...@@ -75,7 +74,6 @@ ...@@ -75,7 +74,6 @@
<el-radio label='1'></el-radio> <el-radio label='1'></el-radio>
<el-radio label='0'></el-radio> <el-radio label='0'></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -87,13 +85,11 @@ ...@@ -87,13 +85,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div slot="footer"> <div slot="footer">
<el-button type="primary" @click="submitparentForm">确定</el-button> <el-button type="primary" @click="submitparentForm">确定</el-button>
<el-button @click="cancel">取 消</el-button> <el-button @click="cancel">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 分页 --> <!-- 分页 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryForm.pageNum" :limit.sync="queryForm.pageSize" <pagination v-show="total > 0" :total="total" :page.sync="queryForm.pageNum" :limit.sync="queryForm.pageSize"
@pagination="getList" /> @pagination="getList" />
...@@ -123,9 +119,7 @@ export default { ...@@ -123,9 +119,7 @@ export default {
}, },
selectedRows: [], // 用于存储选择的行数据 selectedRows: [], // 用于存储选择的行数据
//表格数据 //表格数据
tableData: [ tableData: [ ],
],
nowType: 0, // 0新增、1编辑、2查看 nowType: 0, // 0新增、1编辑、2查看
title: '', title: '',
// 弹窗 // 弹窗
...@@ -176,7 +170,7 @@ export default { ...@@ -176,7 +170,7 @@ export default {
this.loading = false; this.loading = false;
}) })
}, },
normalizer(node) { normalizer(node) {
if (node.children && !node.children.length) { if (node.children && !node.children.length) {
delete node.children; delete node.children;
...@@ -216,6 +210,7 @@ export default { ...@@ -216,6 +210,7 @@ export default {
Object.keys(this.form).forEach(key => { Object.keys(this.form).forEach(key => {
if (res.data[key]) { if (res.data[key]) {
this.$set(this.form, key, res.data[key]); this.$set(this.form, key, res.data[key]);
} }
}); });
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
</el-form-item> </el-form-item>
<el-form-item label="仪器分类"> <el-form-item label="仪器分类">
<treeselect v-model="queryForm.instrumentTypeId" :options="equiList" :normalizer="normalizer" <treeselect v-model="queryForm.instrumentTypeId" :options="equiList" :normalizer="normalizer"
placeholder="选择分类编码" clearable style="width: 192px" /> placeholder="选择分类编码" clearable style="width: 192px" noOptionsText="暂无数据" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="getList">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="getList">搜索</el-button>
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
<el-col :span="20"> <el-col :span="20">
<el-form-item label="仪器分类" prop="instrumentTypeName"> <el-form-item label="仪器分类" prop="instrumentTypeName">
<treeselect v-model="form.instrumentTypeName" :options="equiList" :normalizer="normalizer" <treeselect v-model="form.instrumentTypeName" :options="equiList" :normalizer="normalizer"
placeholder="选择" clearable style="width: 100%" /> placeholder="选择" clearable style="width: 100%" noOptionsText="暂无数据"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -300,7 +300,7 @@ export default { ...@@ -300,7 +300,7 @@ export default {
id: '', id: '',
instrumentName: "", instrumentName: "",
instrumentTypeId: "", instrumentTypeId: "",
instrumentTypeName: "", instrumentTypeName: null,
instrumentModel: "", instrumentModel: "",
instrumentNum: "", instrumentNum: "",
remark: "", remark: "",
......
...@@ -361,8 +361,6 @@ export default { ...@@ -361,8 +361,6 @@ export default {
} else { } else {
this.postForm.accessoryUrl = ''; this.postForm.accessoryUrl = '';
this.postForm.accessoryName = ''; this.postForm.accessoryName = '';
} }
}, },
......
...@@ -339,7 +339,6 @@ export default { ...@@ -339,7 +339,6 @@ export default {
console.log('response', response); console.log('response', response);
this.loading = false; this.loading = false;
this.getClasslist(); this.getClasslist();
this.dialogTableVisible = true; this.dialogTableVisible = true;
}); });
}, },
......
...@@ -406,18 +406,17 @@ export default { ...@@ -406,18 +406,17 @@ export default {
methods: { methods: {
getList() { getList() {
getApplylist(this.queryForm) getApplylist(this.queryForm).then(response => {
.then(response => { this.tableData = response.rows;
this.tableData = response.rows; this.tableData = response.rows.map(item => {
this.tableData = response.rows.map(item => { item.accessoryList = item.schoolAccessoryList; // 将附件信息赋值给accessoryList属性
item.accessoryList = item.schoolAccessoryList; // 将附件信息赋值给accessoryList属性 return item;
return item; });
}); console.log('response', response);
console.log('response', response); console.log(response.rows.a);
console.log(response.rows.a); this.total = response.total;
this.total = response.total; this.loading = false;
this.loading = false; })
})
.catch(error => { .catch(error => {
this.loading = false; this.loading = false;
console.log(error); console.log(error);
...@@ -519,6 +518,7 @@ export default { ...@@ -519,6 +518,7 @@ export default {
}, },
//上传按钮 //上传按钮
getFileList(data) { getFileList(data) {
console.log('data', data); console.log('data', data);
...@@ -527,6 +527,8 @@ export default { ...@@ -527,6 +527,8 @@ export default {
if (this.fileList.length != 0) { if (this.fileList.length != 0) {
this.postForm.accessoryUrl = data[0].fjlj; this.postForm.accessoryUrl = data[0].fjlj;
this.postForm.accessoryName = data[0].fjmc; this.postForm.accessoryName = data[0].fjmc;
console.log(this.postForm.accessoryName);
console.log(this.postForm.accessoryUrl);
console.log('this.postForm', this.postForm); console.log('this.postForm', this.postForm);
} else { } else {
this.postForm.accessoryUrl = ''; this.postForm.accessoryUrl = '';
...@@ -724,6 +726,4 @@ export default { ...@@ -724,6 +726,4 @@ export default {
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
\ No newline at end of file
</style>
\ No newline at end of file
...@@ -202,21 +202,33 @@ export default { ...@@ -202,21 +202,33 @@ export default {
resetQuery() { resetQuery() {
this.queryForm = { this.queryForm = {
pageNum: 1, pageNum: 1,
pageSize: 10,
curriculaId: "",
studentName: "",
classId: "",
selectedCourse: "",
pageNum: 1,
pageSize: 10 pageSize: 10
}; };
this.resetForm("queryForm"); this.resetForm("queryForm");
this.getList(); this.getList();
}, },
// 重置 // 重置
reset() { reset() {
this.postForm = { this.form = {
curriculaId: '', curriculaId: "",
course: "",
courseName: "",
coursePeopleNumber: "",
classesNumber: "",
peopleNumber: "",
divisionClassesRule: "",
divisionClassesFrequency: '1',
} }
this.resetForm('postForm'); this.resetForm('form');
}, },
// 取消按钮 // 取消按钮
cancel() { cancel() {
this.open = false; this.open = false;
...@@ -232,45 +244,32 @@ export default { ...@@ -232,45 +244,32 @@ export default {
}, },
// 分班按钮 // 分班按钮
submitForm() { submitForm() {
// 检查是否已经分班
const alreadyDivided = this.selectedCourse.every(course => course.divisionClassesRule !== "");
console.log('this.selectedCourse', this.selectedCourse);
if (alreadyDivided) {
this.$message.warning("已经分班,无法重复操作");
return;
}
this.$confirm('确定要分班吗?', '提示', { this.$confirm('确定要分班吗?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
// let that = this; const formData = this.selectedCourse.map((course) => {
// for (let i = 0; i < this.selectedCourse.length; i++) { console.log(course);
// that.selectedCourse[i].divisionClassesRule = that.form.divisionClassesRule; return {
// const course = this.selectedCourse[i]; curriculaId: this.queryForm.curriculaId,
// console.log('course.divisionClassesRule:', course.divisionClassesRule); course: course.course,
// console.log('course.classesNumber:', course.classesNumber); classesNumber: course.classesNumber,
// console.log('course.peopleNumber:', course.peopleNumber); peopleNumber: course.peopleNumber,
// if (course.divisionClassesRule === '' || course.classesNumber === '' || course.peopleNumber === '') { coursePeopleNumber: course.peopleNumber,
// this.$message.error("分班规则、班级数量和每班人数不能为空"); divisionClassesRule: this.form.divisionClassesRule,
// return; divisionClassesFrequency: course.divisionClassesFrequency
// } };
// let totalPeopleNumber = course.classesNumber * course.peopleNumber; });
// if (totalPeopleNumber > this.selectedCourse.length) { addDivisionec(formData).then((response) => {
// this.$message.error("班级数量和每班人数相乘不能超过总人数"); console.log(response);
// return; this.$modal.msgSuccess('分班成功');
// }
// }
// console.log('this.selectedCourse', this.selectedCourse);
addDivisionec(this.selectedCourse).then((response) => {
console.log('this.selectedCourse', this.selectedCourse);
this.$modal.msgSuccess("分班成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}).catch(error => { }).catch(error => {
console.error(error);
});
})
}) })
......
...@@ -49,8 +49,8 @@ ...@@ -49,8 +49,8 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="分班规则" prop="divisionClassesRule"> <el-form-item label="分班规则" prop="divisionClassesRule">
<el-radio-group v-model="form.divisionClassesRule"> <el-radio-group v-model="form.divisionClassesRule">
<el-radio label='1'>平行分班</el-radio> <el-radio label="1">平行分班</el-radio>
<el-radio label='2'>分层分班</el-radio> <el-radio label="2">分层分班</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -63,9 +63,9 @@ ...@@ -63,9 +63,9 @@
<el-input v-model="course.peopleNumber" placeholder="每班人数"></el-input> <el-input v-model="course.peopleNumber" placeholder="每班人数"></el-input>
</div> </div>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
<div style="text-align: center"> <div style="text-align: center">
<el-button type="primary" @click="submitForm">确 定</el-button> <el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button> <el-button @click="cancel">取 消</el-button>
...@@ -88,15 +88,15 @@ export default { ...@@ -88,15 +88,15 @@ export default {
dicts: ['section_type'], dicts: ['section_type'],
data() { data() {
return { return {
divisionClassesRule: '',
selectedCourse: [], selectedCourse: [],
classList: [], classList: [],
// 查询表单 // 查询表单
queryForm: { queryForm: {
divisionClassesRule: '', curriculaId: "",
curriculaId: '', studentName: "",
studentsName: '', classId: "",
classId: '', selectedCourse: "",
selectedCourse: '',
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
}, },
...@@ -188,12 +188,12 @@ export default { ...@@ -188,12 +188,12 @@ export default {
coursePeopleNumber: item.peopleNumber, coursePeopleNumber: item.peopleNumber,
classesNumber: '', classesNumber: '',
peopleNumber: '', peopleNumber: '',
divisionClassesRule: '', divisionClassesRule: "",
divisionClassesFrequency: '1' divisionClassesFrequency: '1'
} }
}); });
// console.log('this.selectedCourse', this.selectedCourse); console.log('this.selectedCourse', this.selectedCourse);
} }
}) })
}, },
...@@ -202,7 +202,14 @@ export default { ...@@ -202,7 +202,14 @@ export default {
resetQuery() { resetQuery() {
this.queryForm = { this.queryForm = {
pageNum: 1, pageNum: 1,
pageSize: 10,
curriculaId: "",
studentName: "",
classId: "",
selectedCourse: "",
pageNum: 1,
pageSize: 10 pageSize: 10
}; };
this.resetForm("queryForm"); this.resetForm("queryForm");
this.getList(); this.getList();
...@@ -210,10 +217,17 @@ export default { ...@@ -210,10 +217,17 @@ export default {
// 重置 // 重置
reset() { reset() {
this.postForm = { this.form = {
curriculaId: '', curriculaId: "",
course: "",
courseName: "",
coursePeopleNumber: "",
classesNumber: "",
peopleNumber: "",
divisionClassesRule: "",
divisionClassesFrequency: '1',
} }
this.resetForm('postForm'); this.resetForm('form');
}, },
// 取消按钮 // 取消按钮
...@@ -230,47 +244,33 @@ export default { ...@@ -230,47 +244,33 @@ export default {
}, },
// 分班按钮 // 分班按钮
submitForm() { submitForm() {
// 检查是否已经分班
const alreadyDivided = this.selectedCourse.every(course => course.divisionClassesRule !== "");
console.log('this.selectedCourse', this.selectedCourse);
if (alreadyDivided) {
this.$message.warning("已经分班,无法重复操作");
return;
}
this.$confirm('确定要分班吗?', '提示', { this.$confirm('确定要分班吗?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
// let that = this; const formData = this.selectedCourse.map((course) => {
// for (let i = 0; i < this.selectedCourse.length; i++) {
// that.selectedCourse[i].divisionClassesRule = that.form.divisionClassesRule; return {
// const course = this.selectedCourse[i]; curriculaId: this.queryForm.curriculaId,
// console.log('course.divisionClassesRule:', course.divisionClassesRule); course: course.course,
// console.log('course.classesNumber:', course.classesNumber); classesNumber: course.classesNumber,
// console.log('course.peopleNumber:', course.peopleNumber); peopleNumber: course.peopleNumber,
// if (course.divisionClassesRule === '' || course.classesNumber === '' || course.peopleNumber === '') { coursePeopleNumber: course.peopleNumber,
// this.$message.error("分班规则、班级数量和每班人数不能为空"); divisionClassesRule: this.form.divisionClassesRule,
// return; divisionClassesFrequency: course.divisionClassesFrequency
// } };
// let totalPeopleNumber = course.classesNumber * course.peopleNumber; });
// console.log('totalPeopleNumber', totalPeopleNumber);
// if (totalPeopleNumber > this.coursePeopleNumber) { addDivision(formData).then((response) => {
// console.log('this.coursePeopleNumber', this.coursePeopleNumber); console.log(response);
// this.$message.error("班级数量和每班人数相乘不能超过总人数"); this.$modal.msgSuccess('分班成功');
// return;
// }
// }
// console.log('this.selectedCourse', this.selectedCourse);
addDivision(this.selectedCourse).then((response) => {
console.log('this.selectedCourse', this.selectedCourse);
this.$modal.msgSuccess("分班成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}).catch(error => { }).catch(error => {
console.error(error);
});
})
}) })
...@@ -285,6 +285,8 @@ export default { ...@@ -285,6 +285,8 @@ export default {
} }
} }
</script> </script>
......
...@@ -72,8 +72,8 @@ ...@@ -72,8 +72,8 @@
<el-col :span="16"> <el-col :span="16">
<el-form-item label="发布时间"> <el-form-item label="发布时间">
<el-date-picker v-model="dateRange" type="daterange" range-separator="至" <el-date-picker v-model="dateRange" type="daterange" range-separator="至"
start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd HH:mm:ss" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd"
value-format="yyyy-MM-dd HH:mm:ss" :style="{ width: '100%' }"> value-format="yyyy-MM-dd" :style="{ width: '100%' }">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
......
...@@ -86,8 +86,6 @@ ...@@ -86,8 +86,6 @@
<el-option v-for="item in tableList" :key="item.id" :value="item.experimentName" <el-option v-for="item in tableList" :key="item.id" :value="item.experimentName"
:label="item.experimentName"></el-option> :label="item.experimentName"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
...@@ -267,7 +265,6 @@ export default { ...@@ -267,7 +265,6 @@ export default {
}, },
methods: { methods: {
//表单查询 //表单查询
getList() { getList() {
getLabplanlist(this.queryForm).then(response => { getLabplanlist(this.queryForm).then(response => {
...@@ -289,10 +286,8 @@ export default { ...@@ -289,10 +286,8 @@ export default {
//选择实验名称自动带出信息 //选择实验名称自动带出信息
getName() { getName() {
const selectedExperiment = this.tableList.find(experiment => experiment.experimentName === this.form.experimentName); const selectedExperiment = this.tableList.find(experiment => experiment.experimentName === this.form.experimentName);
if (selectedExperiment) { if (selectedExperiment) {
this.selectedExperiment = selectedExperiment; // 确保将选中的实验赋值给 selectedExperiment this.selectedExperiment = selectedExperiment; // 确保将选中的实验赋值给 selectedExperiment
// 将实验的字段赋值给表单字段 // 将实验的字段赋值给表单字段
this.form.experimentPlanId = selectedExperiment.chapterContent?.id || ""; this.form.experimentPlanId = selectedExperiment.chapterContent?.id || "";
this.form.chapterContent = selectedExperiment.chapterContent || ""; this.form.chapterContent = selectedExperiment.chapterContent || "";
...@@ -368,17 +363,20 @@ export default { ...@@ -368,17 +363,20 @@ export default {
this.nowType = type; this.nowType = type;
this.getSchholyear(); this.getSchholyear();
if (type != 0) { if (type != 0) {
const id = row.id if (row && row.id) {
getLabplanxq(id).then(response => { const id = row.id;
if (response.code == 200) { getLabplanxq(id).then(response => {
console.log(response); if (response.code == 200) {
Object.keys(this.form).forEach(key => { console.log(response);
if (response.data[key]) { Object.keys(this.form).forEach(key => {
this.$set(this.form, key, response.data[key]); if (response.data[key]) {
} this.$set(this.form, key, response.data[key]);
}) }
} });
}) }
});
}
} }
this.dialogTableVisible = true; this.dialogTableVisible = true;
}, },
...@@ -418,7 +416,7 @@ export default { ...@@ -418,7 +416,7 @@ export default {
declareState: '0', declareState: '0',
}; };
console.log(params);
addLabplan(params).then(response => { addLabplan(params).then(response => {
this.$modal.msgSuccess('保存成功'); this.$modal.msgSuccess('保存成功');
this.dialogTableVisible = false; this.dialogTableVisible = false;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="老师姓名" prop="teacherName"> <el-form-item label="老师姓名" prop="teacherName">
<el-input readonly :value="infoForm.teacherName"/> <el-input readonly :value="infoForm.teacherName" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<el-form-item label="请假类型"> <el-form-item label="请假类型">
<el-select readonly :value="infoForm.type" style="width: 100%" placeholder=""> <el-select readonly :value="infoForm.type" style="width: 100%" placeholder="">
<el-option v-for="dict in dict.type.biz_leave_type" :key="dict.value" :value="dict.value" <el-option v-for="dict in dict.type.biz_leave_type" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option> :label="dict.label"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -32,14 +32,14 @@ ...@@ -32,14 +32,14 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="请假开始时间" prop="startTime"> <el-form-item label="请假开始时间" prop="startTime">
<el-date-picker readonly style="width: 100%" v-model="infoForm.startTime" type="datetime" <el-date-picker readonly style="width: 100%" v-model="infoForm.startTime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择开始时间"></el-date-picker> value-format="yyyy/MM/dd HH:mm:ss" placeholder="选择开始时间"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="请假结束时间" prop="endTime"> <el-form-item label="请假结束时间" prop="endTime">
<el-date-picker readonly style="width: 100%" v-model="infoForm.endTime" type="datetime" <el-date-picker readonly style="width: 100%" v-model="infoForm.endTime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择结束时间"></el-date-picker> value-format="yyyy/MM/dd HH:mm:ss" placeholder="选择结束时间"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -48,25 +48,25 @@ ...@@ -48,25 +48,25 @@
<el-col :span="7"> <el-col :span="7">
<el-form-item label="请假开始时间" prop="startTime"> <el-form-item label="请假开始时间" prop="startTime">
<el-date-picker readonly v-model="infoForm.startTime" type="date" style="width: 100%" <el-date-picker readonly v-model="infoForm.startTime" type="date" style="width: 100%"
value-format="yyyy-MM-dd" placeholder="选择日期"></el-date-picker> value-format="yyyy-MM-dd" placeholder="选择日期"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-select :value="infoForm.startSort" style="width: 100%" placeholder="请选择课程节次"> <el-select :value="infoForm.startSort" style="width: 100%" placeholder="请选择课程节次">
<el-option v-for="dict in dict.type.course_arrange" :key="dict.value" :label="dict.label" <el-option v-for="dict in dict.type.course_arrange" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option> :value="dict.value"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :offset="2" :span="7"> <el-col :offset="2" :span="7">
<el-form-item label="请假结束时间" prop="endTime"> <el-form-item label="请假结束时间" prop="endTime">
<el-date-picker readonly type="date" v-model="infoForm.endTime" value-format="yyyy-MM-dd" <el-date-picker readonly type="date" v-model="infoForm.endTime" value-format="yyyy-MM-dd"
style="width: 100%" placeholder="选择日期"></el-date-picker> style="width: 100%" placeholder="选择日期"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-select :value="infoForm.endSort" style="width: 100%" placeholder="请选择课程节次"> <el-select :value="infoForm.endSort" style="width: 100%" placeholder="请选择课程节次">
<el-option v-for="dict in dict.type.course_arrange" :key="dict.value" :label="dict.label" <el-option v-for="dict in dict.type.course_arrange" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option> :value="dict.value"></el-option>
</el-select> </el-select>
</el-col> </el-col>
</el-row> </el-row>
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
<el-col> <el-col>
<el-form-item label="请假原因"> <el-form-item label="请假原因">
<el-input readonly :value="infoForm.reasonForLeave" type="textarea" placeholder="" <el-input readonly :value="infoForm.reasonForLeave" type="textarea" placeholder=""
:autosize="{ minRows: 3 }"/> :autosize="{ minRows: 3 }" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -82,15 +82,13 @@ ...@@ -82,15 +82,13 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="实际开始时间" prop="realityStartTime"> <el-form-item label="实际开始时间" prop="realityStartTime">
<el-date-picker style="width: 100%" v-model="infoForm.realityStartTime" type="datetime" <el-date-picker style="width: 100%" v-model="infoForm.realityStartTime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="" value-format="yyyy-MM-dd HH:mm:ss" placeholder="" :picker-options="limitStartTime"></el-date-picker>
:picker-options="limitStartTime"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="实际结束时间" prop="realityEndTime"> <el-form-item label="实际结束时间" prop="realityEndTime">
<el-date-picker style="width: 100%" v-model="infoForm.realityEndTime" type="datetime" <el-date-picker style="width: 100%" v-model="infoForm.realityEndTime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="" value-format="yyyy-MM-dd HH:mm:ss" placeholder="" :picker-options="limitEndTime"></el-date-picker>
:picker-options="limitEndTime"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -100,7 +98,7 @@ ...@@ -100,7 +98,7 @@
</el-form> </el-form>
</el-card> </el-card>
<TaskResolve v-if="!$attrs.readOnly" :taskId="this.$attrs.taskId" :instanceId="instanceId" :id="id" <TaskResolve v-if="!$attrs.readOnly" :taskId="this.$attrs.taskId" :instanceId="instanceId" :id="id"
v-on="this.$listeners"></TaskResolve> v-on="this.$listeners"></TaskResolve>
</div> </div>
</template> </template>
...@@ -156,8 +154,8 @@ export default { ...@@ -156,8 +154,8 @@ export default {
limitStartTime, limitStartTime,
infoForm: {}, infoForm: {},
rules: { rules: {
realityStartTime: [{required: true, message: '实际开始时间不能为空', trigger: 'change'}], realityStartTime: [{ required: true, message: '实际开始时间不能为空', trigger: 'change' }],
realityEndTime: [{required: true, message: '实际结束时间不能为空', trigger: 'change'}] realityEndTime: [{ required: true, message: '实际结束时间不能为空', trigger: 'change' }]
} }
} }
}, },
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
:modal="false" :modal="false"
fullscreen fullscreen
:modal-append-to-body="false" :modal-append-to-body="false"
> >
<!-- <template slot="title">--> <!-- <template slot="title">-->
<!-- <div class="custom-dialog__header">--> <!-- <div class="custom-dialog__header">-->
...@@ -15,7 +14,6 @@ ...@@ -15,7 +14,6 @@
<!-- </div>--> <!-- </div>-->
<!-- </div>--> <!-- </div>-->
<!-- </template>--> <!-- </template>-->
<div class="resolve-dialog-bady" > <div class="resolve-dialog-bady" >
<div class="left-menu"> <div class="left-menu">
<el-tabs tab-position="left" v-model="asyncComponent" @tab-click="selectMenu" style="height: 800px"> <el-tabs tab-position="left" v-model="asyncComponent" @tab-click="selectMenu" style="height: 800px">
...@@ -40,8 +38,6 @@ ...@@ -40,8 +38,6 @@
</keep-alive> </keep-alive>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
......
...@@ -170,7 +170,7 @@ ...@@ -170,7 +170,7 @@
<el-row :gutter="30"> <el-row :gutter="30">
<el-col :span="10"> <el-col :span="10">
<el-form-item label="申请老师"> <el-form-item label="申请老师">
<el-input v-model="postForm.applyName" placeholder="请输入" clearable :disabled="isEdit"/> <el-input v-model="postForm.applyName" placeholder="请输入" clearable :disabled="isEdit" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
...@@ -187,12 +187,13 @@ ...@@ -187,12 +187,13 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="10"> <el-col :span="10">
<el-form-item label="实验名称"> <el-form-item label="实验名称">
<el-input v-model="postForm.experimentName" placeholder="请输入" clearable :disabled="isEdit"/> <el-input v-model="postForm.experimentName" placeholder="请输入" clearable :disabled="isEdit" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="学科"> <el-form-item label="学科">
<el-select v-model="postForm.sub" placeholder="请选择" clearable style="width: 100%;" :disabled="isEdit"> <el-select v-model="postForm.sub" placeholder="请选择" clearable style="width: 100%;"
:disabled="isEdit">
<el-option v-for="dict in dict.type.lab_sub" :key="dict.value" :label="dict.label" <el-option v-for="dict in dict.type.lab_sub" :key="dict.value" :label="dict.label"
:value="dict.value" /> :value="dict.value" />
</el-select> </el-select>
...@@ -204,7 +205,8 @@ ...@@ -204,7 +205,8 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="20"> <el-col :span="20">
<el-form-item label="章节内容"> <el-form-item label="章节内容">
<el-input v-model="postForm.chapterContent" placeholder="请输入" clearable :disabled="isEdit"></el-input> <el-input v-model="postForm.chapterContent" placeholder="请输入" clearable
:disabled="isEdit"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -213,12 +215,12 @@ ...@@ -213,12 +215,12 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="10"> <el-col :span="10">
<el-form-item label="级部"> <el-form-item label="级部">
<el-input v-model="postForm.grade" placeholder="请输入" clearable :disabled="isEdit"/> <el-input v-model="postForm.grade" placeholder="请输入" clearable :disabled="isEdit" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="学年"> <el-form-item label="学年">
<el-input v-model="postForm.schoolYear" placeholder="请输入" clearable :disabled="isEdit"/> <el-input v-model="postForm.schoolYear" placeholder="请输入" clearable :disabled="isEdit" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleOption(0)">新增</el-button> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleOption(0)">新增</el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-table border v-loading="loading" :data="competitionData" stripe> <el-table border v-loading="loading" :data="competitionData" stripe>
<el-table-column fixed="left" label="序号" type="index" width="55" align="center" /> <el-table-column fixed="left" label="序号" type="index" width="55" align="center" />
...@@ -39,8 +38,12 @@ ...@@ -39,8 +38,12 @@
</el-table-column> </el-table-column>
<el-table-column label="证书照片" align="center" prop="schoolAccessoryList"> <el-table-column label="证书照片" align="center" prop="schoolAccessoryList">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image style="width: 100px; height: 100px" :src="scope.row.pictureUrl" <el-carousel :interval="4000" height="100px">
:preview-src-list="scope.row.previewUrls"></el-image> <el-carousel-item v-for="(item, index) in scope.row.schoolAccessoryList" :key="index">
<el-image style="width: 100px; height: 100px" :src="item.accessoryUrl"
:preview-src-list="[item.accessoryUrl]"></el-image>
</el-carousel-item>
</el-carousel>
</template> </template>
</el-table-column> </el-table-column>
...@@ -57,19 +60,18 @@ ...@@ -57,19 +60,18 @@
</el-table> </el-table>
<pagination ref="pageBlock" v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" <pagination ref="pageBlock" v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList" /> :limit.sync="queryParams.pageSize" @pagination="getList" />
<!-- 新增、编辑、查看弹窗 --> <!-- 新增、编辑、查看弹窗 -->
<el-dialog title="详细信息" :visible.sync="dialogVisible" width="50%"> <el-dialog title="详细信息" :visible.sync="dialogVisible" width="50%">
<el-form :model="form" ref="form" size="small" label-width="108px" :disabled="isEdit"> <el-form :model="form" ref="form" size="small" label-width="108px" :disabled="isEdit" :rules="rules">
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="学年"> <el-form-item label="学年" prop="schoolYear">
<el-input v-model="form.schoolYear" placeholder="请输入" clearable <el-input v-model="form.schoolYear" placeholder="请输入" clearable
:disabled="nowType == 2 ? true : false"></el-input> :disabled="nowType == 2 ? true : false"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="参赛老师"> <el-form-item label="参赛老师" prop="teacherName">
<el-select v-model="form.teacherName" placeholder="请选择级部" clearable style="width: 100%;" <el-select v-model="form.teacherName" placeholder="请选择级部" clearable style="width: 100%;"
:disabled="nowType == 2 ? true : false"> :disabled="nowType == 2 ? true : false">
<el-option v-for="(item, index) in teacherList" :key="index" :label="item.userName" <el-option v-for="(item, index) in teacherList" :key="index" :label="item.userName"
...@@ -103,7 +105,7 @@ ...@@ -103,7 +105,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="比赛级别"> <el-form-item label="比赛级别" prop="competitionLevel">
<el-select v-model="form.competitionLevel" placeholder="请选择" clearable style="width: 100%;" <el-select v-model="form.competitionLevel" placeholder="请选择" clearable style="width: 100%;"
:disabled="nowType == 2 ? true : false"> :disabled="nowType == 2 ? true : false">
<el-option v-for="dict in dict.type.competition_level" :key="dict.value" :label="dict.label" <el-option v-for="dict in dict.type.competition_level" :key="dict.value" :label="dict.label"
...@@ -115,14 +117,18 @@ ...@@ -115,14 +117,18 @@
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item prop="schoolAccessoryList" label="证书照片"> <el-form-item prop="schoolAccessoryList" label="证书照片">
<el-upload v-loading="uploadLoading" class="avatar-uploader" action="#" accept="image/*" <el-upload v-loading="uploadLoading" class="avatar-uploader" action="#" accept="image/*"
:show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"
:http-request="uploadImage"> :http-request="uploadImage">
<img v-if="form.schoolAccessoryList && form.schoolAccessoryList.length > 0" <div v-if="form.schoolAccessoryList && form.schoolAccessoryList.length > 0">
:src="form.schoolAccessoryList[0].accessoryUrl" class="avatar" /> <el-image v-for="(photo, index) in form.schoolAccessoryList" :key="index"
<i v-else class="el-icon-plus avatar-uploader-icon"></i> style="width: 100px; height: 100px; margin-right: 10px" :src="photo.accessoryUrl"
</el-upload> :preview-src-list="[photo.accessoryUrl]"></el-image>
</el-form-item> </div>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="备注1"> <el-form-item label="备注1">
...@@ -151,14 +157,12 @@ ...@@ -151,14 +157,12 @@
<el-button @click="cancel">取 消</el-button> <el-button @click="cancel">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog ref="previewDialog" title="预览图片" :visible.sync="previewDialogVisible"> <el-dialog ref="previewDialog" title="预览图片" :visible.sync="previewDialogVisible">
<el-image style="width: 100%; max-height: 80vh; object-fit: contain" :src="previewImageUrl" <el-image style="width: 100%; max-height: 80vh; object-fit: contain" :src="previewImageUrl"
fit="contain"></el-image> fit="contain"></el-image>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { import {
addCompetition, addCompetition,
...@@ -185,6 +189,8 @@ export default { ...@@ -185,6 +189,8 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
competitionType: "",
competitionName: "",
}, },
previewImageUrl: '', previewImageUrl: '',
//获取子组件传来的信息 //获取子组件传来的信息
...@@ -216,9 +222,32 @@ export default { ...@@ -216,9 +222,32 @@ export default {
schoolAccessoryList: [], schoolAccessoryList: [],
}, },
rules: {
schoolYear: [
{ required: true, message: "学年不能为空", trigger: "change" }
],
teacherName: [
{ required: true, message: "教师名称不能为空", trigger: "change" }
],
entrySubject: [
{ required: true, message: "参赛课题不能为空", trigger: "change" }
],
competitionType: [
{ required: true, message: "比赛类型不能为空", trigger: "change" }
],
competitionLevel: [
{ required: true, message: "比赛级别不能为空", trigger: "change" }
],
schoolAccessoryList: [
{ required: true, message: "证书照片不能为空", trigger: "change" }
],
competitionName: [
{ required: true, message: "比赛项目名称不能为空", trigger: "change" }
],
},
previewDialogVisible: false, previewDialogVisible: false,
teacherList: [], teacherList: [],
rules: {},
nowType: 0, // 0新增、1编辑、2查看 nowType: 0, // 0新增、1编辑、2查看
} }
}, },
...@@ -242,19 +271,19 @@ export default { ...@@ -242,19 +271,19 @@ export default {
}, },
//获取列表数据 //获取列表数据
getList() { getList() {
getCompetition(this.queryForm).then(response => { getCompetition(this.queryParams).then(response => {
this.competitionData = response.rows; this.competitionData = response.rows.map(item => {
item.previewUrls = item.schoolAccessoryList.map(accessory => accessory.accessoryUrl);
item.pictureUrl = item.schoolAccessoryList[0]?.accessoryUrl || ''; // 取第一个照片的URL或者为空字符串
return item;
});
console.log('response', response); console.log('response', response);
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
this.competitionData.forEach(item => {
item.previewUrls = [item.schoolAccessoryList.map(accessory => accessory.accessoryUrl)];
item.pictureUrl = item.schoolAccessoryList.map(accessory => accessory.accessoryUrl);
});
}); });
}, },
//获取图片信息 //获取图片信息
getSchoolInfoPic(val) { getSchoolInfoPic(val) {
this.pic = val this.pic = val
...@@ -283,30 +312,39 @@ export default { ...@@ -283,30 +312,39 @@ export default {
// 上传图片 // 上传图片
uploadImage(file) { uploadImage(file) {
const fileData = file.file const fileData = file.file;
const formData = new FormData() const formData = new FormData();
formData.append('file', fileData) formData.append('file', fileData);
this.uploadLoading = true this.uploadLoading = true;
// Upload the file and add the uploaded file to the schoolAccessoryList
commonUpload(formData) commonUpload(formData)
.then(response => { .then(response => {
this.uploadLoading = false this.uploadLoading = false;
this.$modal.msgSuccess('上传成功') this.$modal.msgSuccess('上传成功');
this.imageUrl = process.env.VUE_APP_BASE_API + response.url
// 添加以下代码将文件信息添加到 uploadedFiles 数组中 // Add the uploaded file to the schoolAccessoryList
this.uploadedFiles.push({ this.form.schoolAccessoryList.push({
accessoryUrl: process.env.VUE_APP_BASE_API + response.url, accessoryUrl: process.env.VUE_APP_BASE_API + response.url,
accessoryName: fileData.name accessoryName: fileData.name
}) });
}) })
.catch(error => { .catch(error => {
this.uploadLoading = false this.uploadLoading = false;
}) });
}, },
//重置 //重置
resetQuery() { resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
competitionType: "",
competitionName: "",
},
this.getList();
}, },
...@@ -330,6 +368,7 @@ export default { ...@@ -330,6 +368,7 @@ export default {
//编辑 0新增 1编辑 2查看 //编辑 0新增 1编辑 2查看
handleOption(type, row) { handleOption(type, row) {
this.imageUrl = ''; this.imageUrl = '';
this.form.schoolAccessoryList = [];
this.form = { this.form = {
id: '', id: '',
schoolYear: '', schoolYear: '',
...@@ -346,25 +385,26 @@ export default { ...@@ -346,25 +385,26 @@ export default {
} }
this.nowType = type; this.nowType = type;
if (type != 0) { if (type != 0) {
const id = row.id const id = row.id;
getCompetitionxq(id).then(response => { getCompetitionxq(id).then(response => {
if (response.code == 200) { if (response.code == 200) {
Object.keys(this.form).forEach(key => { Object.keys(this.form).forEach(key => {
if (response.data[key]) { if (response.data[key]) {
this.$set(this.form, key, response.data[key]); this.$set(this.form, key, response.data[key]);
}
if (response.data.schoolAccessoryList && response.data.schoolAccessoryList.length > 0) {
this.imageUrl = response.data.schoolAccessoryList[0].accessoryUrl; // 将图片地址赋值给 imageUrl
} }
});
}) // Populate the schoolAccessoryList with multiple images
if (response.data.schoolAccessoryList && response.data.schoolAccessoryList.length > 0) {
this.form.schoolAccessoryList = response.data.schoolAccessoryList;
}
} }
}) });
} }
this.dialogVisible = true; this.dialogVisible = true;
}, },
//查询老师 //查询老师
getTeacher() { getTeacher() {
getTeacher().then(response => { getTeacher().then(response => {
...@@ -387,7 +427,6 @@ export default { ...@@ -387,7 +427,6 @@ export default {
accessoryName: file.accessoryName accessoryName: file.accessoryName
}); });
} }
updateCompetition(this.form).then(({ code }) => { updateCompetition(this.form).then(({ code }) => {
if (code == 200) { if (code == 200) {
this.$modal.msgSuccess('修改成功') this.$modal.msgSuccess('修改成功')
......
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form <el-form :model="queryForm" ref="queryForm" size="small" :inline="true" label-width="80px">
:model="queryForm"
ref="queryForm"
size="small"
:inline="true"
label-width="80px"
>
<el-form-item prop="name" label="社团名称"> <el-form-item prop="name" label="社团名称">
<el-input v-model="queryForm.name" placeholder="社团名称"></el-input> <el-input v-model="queryForm.name" placeholder="社团名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="teachers" label="指导教师"> <el-form-item prop="teachers" label="指导教师">
<el-input <el-input v-model="queryForm.teachers" placeholder="指导教师"></el-input>
v-model="queryForm.teachers"
placeholder="指导教师"
></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
type="primary" <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd()">新增</el-button>
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd()"
>新增</el-button
>
</el-col> </el-col>
</el-row> </el-row>
<!-- 列表 --> <!-- 列表 -->
<div class="listBlock"> <div class="listBlock">
<div class="itemBlock" v-for="(task, index) in tasks" :key="index"> <div class="itemBlock" v-for="(task, index) in tasks" :key="index">
<div <div style="
style="
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
" ">
>
<div style="width: 50%"> <div style="width: 50%">
<!-- 任务详细信息 --> <!-- 任务详细信息 -->
<div class="task-info"> <div class="task-info">
...@@ -77,49 +52,17 @@ ...@@ -77,49 +52,17 @@
<!-- 按钮 --> <!-- 按钮 -->
<div class="task-buttons"> <div class="task-buttons">
<el-button <el-button style="margin-left: 10px" size="mini" type="danger" round @click="handleDelete(task)">删除
style="margin-left: 10px"
size="mini"
type="danger"
round
@click="handleDelete(task)"
>删除
</el-button> </el-button>
<el-button <el-button type="success" size="small" round
type="success" @click="clubRegistrationReview(task.id, task.teachers)">社团报名审核</el-button>
size="small" <el-button type="info" size="small" round @click="clubActivityRecord(task.id)">社团活动记录</el-button>
round <el-button type="warning" size="small" round @click="memberManagement(task.id)">成员管理
@click="clubRegistrationReview(task.id, task.teachers)"
>社团报名审核</el-button
>
<el-button
type="info"
size="small"
round
@click="clubActivityRecord(task.id)"
>社团活动记录</el-button
>
<el-button
type="warning"
size="small"
round
@click="memberManagement(task.id)"
>成员管理
</el-button> </el-button>
<el-button <el-button class="purpleBtn" size="small" round type="primary"
class="purpleBtn" @click="communityStyle(task.id, task.teachers)">社团风采
size="small"
round
type="primary"
@click="communityStyle(task.id, task.teachers)"
>社团风采
</el-button> </el-button>
<el-button <el-button type="primary" size="small" round @click="basicInformation(task.id, task.teachers)">基础信息管理
type="primary"
size="small"
round
@click="basicInformation(task.id, task.teachers)"
>基础信息管理
</el-button> </el-button>
</div> </div>
</div> </div>
...@@ -129,45 +72,22 @@ ...@@ -129,45 +72,22 @@
<el-form ref="form" :model="form" :rules="rules" label-width="110px"> <el-form ref="form" :model="form" :rules="rules" label-width="110px">
<div> <div>
<el-form-item label="社团名称" prop="name"> <el-form-item label="社团名称" prop="name">
<el-input <el-input v-model="form.name" placeholder="请输入社团名称"></el-input>
v-model="form.name"
placeholder="请输入社团名称"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="指导教师" prop="teachers"> <el-form-item label="指导教师" prop="teachers">
<el-select <el-select style="width: 100%" multiple v-model="form.teachers" filterable placeholder="请选择指导教师"
style="width: 100%" @change="changeTeacher">
multiple <el-option v-for="item in teacherInfo" :key="item.teacherCode" :label="item.teacherName"
v-model="form.teachers" :value="item.teacherCode">
filterable
placeholder="请选择指导教师"
@change="changeTeacher"
>
<el-option
v-for="item in teacherInfo"
:key="item.teacherCode"
:label="item.teacherName"
:value="item.teacherCode"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="社团宗旨" prop="aim"> <el-form-item label="社团宗旨" prop="aim">
<el-input <el-input type="textarea" :rows="4" v-model="form.aim" placeholder="请输入社团宗旨"></el-input>
type="textarea"
:rows="4"
v-model="form.aim"
placeholder="请输入社团宗旨"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="社团简介" prop="intro"> <el-form-item label="社团简介" prop="intro">
<el-input <el-input type="textarea" :rows="4" v-model="form.intro" placeholder="请输入社团简介"></el-input>
type="textarea"
:rows="4"
v-model="form.intro"
placeholder="请输入社团简介"
></el-input>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
...@@ -368,7 +288,7 @@ export default { ...@@ -368,7 +288,7 @@ export default {
this.$message.success("修改成功"); this.$message.success("修改成功");
this.open = false; this.open = false;
}) })
.catch((err) => {}); .catch((err) => { });
} else { } else {
// 新增 // 新增
const params = { const params = {
...@@ -385,7 +305,7 @@ export default { ...@@ -385,7 +305,7 @@ export default {
this.$message.success("新增成功"); this.$message.success("新增成功");
this.open = false; this.open = false;
}) })
.catch((err) => {}); .catch((err) => { });
} }
} }
}); });
...@@ -403,7 +323,7 @@ export default { ...@@ -403,7 +323,7 @@ export default {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}) })
.catch(() => {}); .catch(() => { });
}, },
// 重置表单 // 重置表单
reset() { reset() {
...@@ -466,7 +386,7 @@ export default { ...@@ -466,7 +386,7 @@ export default {
text-align: left; text-align: left;
} }
.task-level > span { .task-level>span {
margin-right: 25px; margin-right: 25px;
} }
...@@ -490,13 +410,13 @@ export default { ...@@ -490,13 +410,13 @@ export default {
padding-left: 60%; padding-left: 60%;
} }
.task-count > .count { .task-count>.count {
font-weight: bold; font-weight: bold;
color: #307def; color: #307def;
font-size: 45px; font-size: 45px;
} }
.task-count > .sun { .task-count>.sun {
color: rgba(16, 16, 16, 1); color: rgba(16, 16, 16, 1);
font-size: 18px; font-size: 18px;
text-align: center; text-align: center;
......
...@@ -67,7 +67,13 @@ ...@@ -67,7 +67,13 @@
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="附件" align="center" prop="file"> <el-table-column label="附件" align="center" prop="file">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image style="width: 100px; height: 100px" :src="scope.row.file"> <el-image
v-for="(item, index) in scope.row.file.split(',')"
:key="index"
style="width: 100px; height: 100px"
:src="item"
:preview-src-list="[item]"
>
</el-image> </el-image>
</template> </template>
</el-table-column> </el-table-column>
...@@ -214,16 +220,24 @@ ...@@ -214,16 +220,24 @@
" "
> >
<el-upload <el-upload
multiple
v-loading="uploadLoading" v-loading="uploadLoading"
class="avatar-uploader" class="avatar-uploader"
action="#" :action="uploadFileUrl"
accept="image/*" accept="image/*"
:show-file-list="false" :show-file-list="false"
:on-success="handleAvatarSuccess" :on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload" :before-upload="beforeAvatarUpload"
:http-request="uploadImage"
> >
<img v-if="form.file" :src="form.file" class="avatar" /> <img v-if="form.file" :src="form.file" class="avatar" />
<div v-if="form.file">
<img
v-for="(item, index) in form.file"
:key="index"
:src="item"
class="avatar"
/>
</div>
<i v-else class="el-icon-plus avatar-uploader-icon"></i> <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
...@@ -257,6 +271,10 @@ export default { ...@@ -257,6 +271,10 @@ export default {
components: { picAvatar }, components: { picAvatar },
data() { data() {
return { return {
//图片上传列表
uploadList: [],
uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
pev: process.env.VUE_APP_BASE_API, pev: process.env.VUE_APP_BASE_API,
// 输入框字数限制 // 输入框字数限制
TEXT_SIZE, TEXT_SIZE,
...@@ -334,17 +352,6 @@ export default { ...@@ -334,17 +352,6 @@ export default {
}, },
], ],
}, },
//设置table列隐藏与显示
columns: [
{ key: 0, label: `园区照片`, visible: true },
{ key: 1, label: `相片名称`, visible: true },
// {key: 2, label: `相片路径`, visible: true},
{ key: 2, label: `排序`, visible: true },
{ key: 3, label: `备注`, visible: true },
{ key: 4, label: `创建者`, visible: true },
{ key: 5, label: `创建时间`, visible: true },
{ key: 6, label: `操作`, visible: true },
],
// 作为临时图片展示 // 作为临时图片展示
tempImage: "", tempImage: "",
// 导出选项 // 导出选项
...@@ -439,7 +446,8 @@ export default { ...@@ -439,7 +446,8 @@ export default {
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.check = false; this.uploadList = [];
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "新增社团活动记录"; this.title = "新增社团活动记录";
...@@ -448,8 +456,14 @@ export default { ...@@ -448,8 +456,14 @@ export default {
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.uploadList = [];
this.form.file = [];
listClubInfo(ids).then((response) => { listClubInfo(ids).then((response) => {
this.form = response.data; this.form = response.data;
this.form.file = response.data.file.split(",");
console.log("this.form.file", this.form.file);
this.imageUrl = this.pev + this.form.picUrl; this.imageUrl = this.pev + this.form.picUrl;
console.log(this.imageUrl, "this.imageUrl"); console.log(this.imageUrl, "this.imageUrl");
this.open = true; this.open = true;
...@@ -460,10 +474,16 @@ export default { ...@@ -460,10 +474,16 @@ export default {
handleCheck(row) { handleCheck(row) {
this.check = true; this.check = true;
this.open = true; this.open = true;
this.uploadList = [];
this.form.file = [];
const ids = row.id || this.ids; const ids = row.id || this.ids;
listClubInfo(ids).then((response) => { listClubInfo(ids).then((response) => {
this.form = response.data; this.form = response.data;
this.form.file = response.data.file; // this.form.file = response.data.file;
console.log("this.form.file", this.form.file);
this.form.file = response.data.file.split(",");
// console.log(this.form.file); // console.log(this.form.file);
this.open = true; this.open = true;
}); });
...@@ -471,9 +491,21 @@ export default { ...@@ -471,9 +491,21 @@ export default {
}, },
// 上传成功回调 // 上传成功回调
handleAvatarSuccess(res, file) { handleAvatarSuccess(res, file) {
this.imageUrl = res.data.url; // this.imageUrl = res.data.url;
console.log(file); // console.log(file);
this.commonUpload(file); // this.commonUpload(file);
console.log("Success res", res);
console.log("Success file", file);
if (res.code == 200) {
this.uploadList.push(this.pev + res.fileName);
this.form.file = this.uploadList;
console.log("this.uploadList", this.uploadList);
console.log("this.form.file", this.form.file);
}
// this.imageUrl = res.data.url;
// console.log(file);
// this.commonUpload(file);
}, },
// 上传前格式和图片大小限制 // 上传前格式和图片大小限制
beforeAvatarUpload(file) { beforeAvatarUpload(file) {
...@@ -524,7 +556,8 @@ export default { ...@@ -524,7 +556,8 @@ export default {
const params = { const params = {
id: this.form.id, id: this.form.id,
theme: this.form.theme, theme: this.form.theme,
file: this.form.file, // file: this.form.file,
file: this.uploadList.toString(),
}; };
console.log(params, "params"); console.log(params, "params");
editClubInfo(params) editClubInfo(params)
...@@ -543,7 +576,9 @@ export default { ...@@ -543,7 +576,9 @@ export default {
endTime: this.form.endTime, endTime: this.form.endTime,
fzr: this.form.fzr, fzr: this.form.fzr,
orgName: this.form.orgName, orgName: this.form.orgName,
file: this.form.file, // file: this.form.file,
file: this.uploadList.toString(),
remark: this.form.remark, remark: this.form.remark,
}; };
console.log(params, "params"); console.log(params, "params");
......
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
>不同意</el-button >不同意</el-button
> >
</div> </div>
<el-button @click="handleDelete(scope.row)" type="text" size="small" <el-button @click="handQuery(scope.row)" type="text" size="small"
>查看</el-button >查看</el-button
> >
</template> </template>
...@@ -221,14 +221,18 @@ export default { ...@@ -221,14 +221,18 @@ export default {
this.resetForm("form"); this.resetForm("form");
}, },
// 查看 // 查看
handleDelete(row) { handQuery(row) {
console.log(row, "查看row");
this.reset(); this.reset();
const ids = row.id || this.ids; const ids = row.id;
this.title = "社团报名审核";
this.dialogTableVisible = true;
// this.form = row;
listsigninInfo(ids).then((response) => { listsigninInfo(ids).then((response) => {
// console.log("response", response); console.log(ids, "id");
this.form = response.data; if (response.data && response.data.name) {
this.dialogTableVisible = true; this.form = response.data;
this.title = "社团报名审核"; }
}); });
}, },
// 同意 // 同意
......
<!--社团风采-->
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="标题" prop="theme"> <el-form-item label="标题" prop="theme">
<el-input <el-input v-model="queryParams.theme" placeholder="请输入标题" clearable />
v-model="queryParams.theme"
placeholder="请输入标题"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
type="primary" <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">新增
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="danger" icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除
</el-button> </el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-table <el-table v-loading="loading" ref="table" :data="picList" @selection-change="handleSelectionChange">
v-loading="loading"
ref="table"
:data="picList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" type="index" width="80" /> <el-table-column label="序号" align="center" type="index" width="80" />
<el-table-column label="风采主题" align="center" prop="theme" /> <el-table-column label="风采主题" align="center" prop="theme" />
<el-table-column label="附件" align="center" prop="file"> <el-table-column label="附件" align="center" prop="file">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image style="width: 100px; height: 100px" :src="scope.row.file"> <el-image v-for="(item,index) in scope.row.file.split(',')" :key="index" style="width: 100px; height: 100px" :src="item" :preview-src-list="[item]">
</el-image> </el-image>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否发布" align="center" prop="isfb"> <el-table-column label="是否发布" align="center" prop="isfb">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch v-model="scope.row.isShow" active-value="1" inactive-value="0"
v-model="scope.row.isShow" @change="handleIsShow(scope.row)"></el-switch>
active-value="1"
inactive-value="0"
@change="handleIsShow(scope.row)"
></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 未发布可以修改删除 --> <!-- 未发布可以修改删除 -->
<div> <div>
<el-button <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改
</el-button> </el-button>
<el-button <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除
</el-button> </el-button>
</div> </div>
<el-button <el-button size="mini" type="text" icon="el-icon-edit" @click="handleCheck(scope.row)">查看
size="mini"
type="text"
icon="el-icon-edit"
@click="handleCheck(scope.row)"
>查看
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
v-show="total > 0" @pagination="getList" />
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改社团主题对话框 --> <!-- 添加或修改社团主题对话框 -->
<el-dialog :title="title" :visible.sync="open" width="900px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="900px" append-to-body>
<el-form <el-form ref="form" :model="form" :rules="rules" label-width="90px" style="width: 80%; margin: auto">
ref="form" <el-form-item prop="file" style="
:model="form"
:rules="rules"
label-width="90px"
style="width: 80%; margin: auto"
>
<el-form-item
prop="file"
style="
display: flex; display: flex;
text-align: center; text-align: center;
justify-content: center; justify-content: center;
...@@ -137,29 +67,29 @@ ...@@ -137,29 +67,29 @@
" "
> >
<el-upload <el-upload
multiple
v-loading="uploadLoading" v-loading="uploadLoading"
class="avatar-uploader" class="avatar-uploader"
action="#" :action="uploadFileUrl"
accept="image/*" accept="image/*"
:show-file-list="false" :show-file-list="false"
:on-success="handleAvatarSuccess" :on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload" :before-upload="beforeAvatarUpload"
:http-request="uploadImage"
> >
<img v-if="form.file" :src="form.file" class="avatar" /> <!-- <img v-for="(item,index) in form.file" :key="index" v-if="form.file" :src="item" class="avatar" />-->
<div v-if="form.file">
<img v-for="(item,index) in form.file" :key="index" :src="item" class="avatar" />
</div>
<i v-else class="el-icon-plus avatar-uploader-icon"></i> <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="风采主题:" prop="theme"> <el-form-item label="风采主题:" prop="theme">
<el-input <el-input :readonly="check == true ? true : false" v-model="form.theme" placeholder="请输入风采主题"
:readonly="check == true ? true : false" style="width: 100%" />
v-model="form.theme"
placeholder="请输入风采主题"
style="width: 100%"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -191,6 +121,9 @@ export default { ...@@ -191,6 +121,9 @@ export default {
components: { picAvatar }, components: { picAvatar },
data() { data() {
return { return {
//图片上传列表
uploadList: [],
uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
pev: process.env.VUE_APP_BASE_API, pev: process.env.VUE_APP_BASE_API,
// 输入框字数限制 // 输入框字数限制
TEXT_SIZE, TEXT_SIZE,
...@@ -313,10 +246,9 @@ export default { ...@@ -313,10 +246,9 @@ export default {
}; };
// console.log(params); // console.log(params);
getCommunityInfo(params).then((response) => { getCommunityInfo(params).then((response) => {
// console.log("response", response); console.log("response", response);
this.picList = response.rows; this.picList = response.rows;
this.picList.file = response.rows.file; // this.picList.file = response.rows.file.split(',');
// console.log(this.picList.file);
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
}); });
...@@ -369,8 +301,10 @@ export default { ...@@ -369,8 +301,10 @@ export default {
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.uploadList = []
this.check = false; this.check = false;
this.reset(); this.reset();
console.log('form.file',this.form.file)
this.open = true; this.open = true;
this.title = "新增社团风采"; this.title = "新增社团风采";
}, },
...@@ -378,22 +312,31 @@ export default { ...@@ -378,22 +312,31 @@ export default {
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.uploadList = []
this.form.file = []
listCommunityInfo(ids).then((response) => { listCommunityInfo(ids).then((response) => {
console.log('修改',response)
this.form = response.data; this.form = response.data;
this.form.file = response.data.file.split(',')
console.log("this.form.file", this.form.file);
this.imageUrl = this.pev + this.form.picUrl; this.imageUrl = this.pev + this.form.picUrl;
console.log(this.imageUrl, "this.imageUrl");
this.open = true; this.open = true;
this.title = "修改园区照片"; this.title = "修改园区照片";
}); });
}, },
/** 查看按钮操作 */ /** 查看按钮操作 */
handleCheck(row) { handleCheck(row) {
this.uploadList = []
this.form.file = []
this.check = true; this.check = true;
this.open = true; this.open = true;
const ids = row.id || this.ids; const ids = row.id || this.ids;
listCommunityInfo(ids).then((response) => { listCommunityInfo(ids).then((response) => {
console.log('查看',response)
this.form = response.data; this.form = response.data;
this.form.file = response.data.file; console.log('this.form.file',this.form.file)
this.form.file = response.data.file.split(',');
console.log(this.form.file); console.log(this.form.file);
this.open = true; this.open = true;
}); });
...@@ -401,9 +344,19 @@ export default { ...@@ -401,9 +344,19 @@ export default {
}, },
// 上传成功回调 // 上传成功回调
handleAvatarSuccess(res, file) { handleAvatarSuccess(res, file) {
this.imageUrl = res.data.url;
console.log(file); console.log('Success res',res)
this.commonUpload(file); console.log('Success file',file)
if(res.code == 200){
this.uploadList.push( this.pev + res.fileName );
this.form.file = this.uploadList
console.log('this.uploadList',this.uploadList)
console.log('this.form.file',this.form.file)
}
// this.imageUrl = res.data.url;
// console.log(file);
// this.commonUpload(file);
}, },
// 上传前格式和图片大小限制 // 上传前格式和图片大小限制
beforeAvatarUpload(file) { beforeAvatarUpload(file) {
...@@ -427,6 +380,7 @@ export default { ...@@ -427,6 +380,7 @@ export default {
}, },
// 上传图片 // 上传图片
uploadImage(file) { uploadImage(file) {
console.log('file',file)
const fileData = file.file; const fileData = file.file;
const formData = new FormData(); const formData = new FormData();
formData.append("file", fileData); formData.append("file", fileData);
...@@ -454,7 +408,8 @@ export default { ...@@ -454,7 +408,8 @@ export default {
const params = { const params = {
id: this.form.id, id: this.form.id,
theme: this.form.theme, theme: this.form.theme,
file: this.form.file, // file: this.form.file,
file:this.uploadList.toString()
}; };
console.log(params, "params"); console.log(params, "params");
editCommunityInfo(params) editCommunityInfo(params)
...@@ -463,13 +418,13 @@ export default { ...@@ -463,13 +418,13 @@ export default {
this.$message.success("修改成功"); this.$message.success("修改成功");
this.open = false; this.open = false;
}) })
.catch((err) => {}); .catch((err) => { });
} else { } else {
// 新增 // 新增
const params = { const params = {
cid: this.$route.query.id, cid: this.$route.query.id,
theme: this.form.theme, theme: this.form.theme,
file: this.form.file, file:this.uploadList.toString()
}; };
console.log(params, "params"); console.log(params, "params");
addCommunityInfo(params) addCommunityInfo(params)
...@@ -478,7 +433,7 @@ export default { ...@@ -478,7 +433,7 @@ export default {
this.$message.success("新增成功"); this.$message.success("新增成功");
this.open = false; this.open = false;
}) })
.catch((err) => {}); .catch((err) => { });
} }
} }
}); });
...@@ -489,8 +444,7 @@ export default { ...@@ -489,8 +444,7 @@ export default {
if (ids) { if (ids) {
this.$modal this.$modal
.confirm( .confirm(
`是否确认删除选中的${ `是否确认删除选中的${Object.hasOwnProperty.call(ids, "length") ? ids.length : 1
Object.hasOwnProperty.call(ids, "length") ? ids.length : 1
}条数据?` }条数据?`
) )
.then(() => { .then(() => {
...@@ -522,7 +476,7 @@ export default { ...@@ -522,7 +476,7 @@ export default {
isCommunityFb(data) isCommunityFb(data)
.then((response) => { .then((response) => {
this.$modal.closeLoading(); this.$modal.closeLoading();
this.$modal.msgSuccess("修改成功"); this.$message.success("修改成功");
}) })
.catch((error) => { .catch((error) => {
this.$modal.closeLoading(); this.$modal.closeLoading();
...@@ -532,6 +486,7 @@ export default { ...@@ -532,6 +486,7 @@ export default {
// 取消操作时的逻辑 // 取消操作时的逻辑
}); });
}, },
}, },
}; };
</script> </script>
......
...@@ -502,8 +502,11 @@ export default { ...@@ -502,8 +502,11 @@ export default {
} }
} }
}); });
}) })();
}, },
// 反馈结果按钮 // 反馈结果按钮
submitFormfk() { submitFormfk() {
this.$refs.formfk.validate((valid) => { this.$refs.formfk.validate((valid) => {
......
...@@ -144,12 +144,18 @@ export default { ...@@ -144,12 +144,18 @@ export default {
}; };
this.fetchStudioUseData(); // 重新发一次请求 this.fetchStudioUseData(); // 重新发一次请求
}, },
// changeStudio(value) {
// console.log('value', value);
// console.log('this.queryParams.startTime', this.queryParams.startTime);
// this.queryParams.studioId = value;
// this.fetchStudioUseData();
// },
changeStudio(value) { changeStudio(value) {
console.log('value', value); this.selectedTimeSlots = []; // 在切换录播室时清空已选时间段
console.log('this.queryParams.startTime', this.queryParams.startTime);
this.queryParams.studioId = value; this.queryParams.studioId = value;
this.fetchStudioUseData(); this.fetchStudioUseData();
}, },
changeDate() { changeDate() {
this.endTime = moment(this.queryParams.startTime).add(9, 'days') this.endTime = moment(this.queryParams.startTime).add(9, 'days')
// this.fetchData(); // this.fetchData();
...@@ -224,7 +230,7 @@ export default { ...@@ -224,7 +230,7 @@ export default {
if (selectObj != undefined) { if (selectObj != undefined) {
this.remark = true this.remark = true
this.selectedTimeSlots = this.selectedTimeSlots.filter(item => item.index != index) this.selectedTimeSlots = this.selectedTimeSlots.filter(item => item.index != index)
this.selectedTimeSlots.length == 0 ? this.remark = false : this.selectedTimeSlots this.selectedTimeSlots.length === 0 ? this.remark = false : this.selectedTimeSlots
} else { } else {
this.selectedTimeSlots.push({ day, index }) this.selectedTimeSlots.push({ day, index })
} }
......
...@@ -31,10 +31,10 @@ ...@@ -31,10 +31,10 @@
<!-- >新增--> <!-- >新增-->
<!-- </el-button>--> <!-- </el-button>-->
<!--</el-col>--> <!--</el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">
<el-button type="danger" plain size="mini" icon="el-icon-delete" :disabled="!isMultiple" @click="handleDelete">删除 <el-button type="danger" plain size="mini" icon="el-icon-delete" :disabled="!isMultiple" @click="handleDelete">删除
</el-button> </el-button>
</el-col> </el-col> -->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain size="mini" icon="el-icon-close" @click="handleClose">关闭 <el-button type="info" plain size="mini" icon="el-icon-close" @click="handleClose">关闭
</el-button> </el-button>
...@@ -138,7 +138,7 @@ export default { ...@@ -138,7 +138,7 @@ export default {
this.getList(); this.getList();
}, },
//根据组id查询组成员 //根据组id查询组成员
getList() { getList() {
this.loading = true; this.loading = true;
this.notificationId = this.$route.query.id; this.notificationId = this.$route.query.id;
console.log('this..notificationId', this.notificationId); console.log('this..notificationId', this.notificationId);
...@@ -188,7 +188,7 @@ export default { ...@@ -188,7 +188,7 @@ export default {
/** 关闭 */ /** 关闭 */
handleClose() { handleClose() {
this.$tab.closeOpenPage({ this.$tab.closeOpenPage({
path: '/schoolManage/schoolInfoPush' path: '/schoolManage/schoolNotice/school'
}); });
}, },
......
<template>
<div class="app-container">
<el-tabs v-model="activeName" @tab-click="handleTabChange">
<el-tab-pane label="正常" :name="State.NORMAL"></el-tab-pane>
<el-tab-pane label="停用" :name="State.STOP"></el-tab-pane>
</el-tabs>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="标题" prop="title">
<el-input size="small" v-model="queryParams.title" placeholder="请输入标题" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="接收人" prop="groupId">
<el-select v-model="queryParams.groupId" size="small" clearable @keyup.enter.native="handleQuery"
placeholder="请选择接收人">
<el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:push:add']">新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-search" size="mini" :disabled="single" @click="viewDetailButton"
v-hasPermi="['system:push:export']">详情
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:push:edit']">修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:push:remove']">删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:push:export']">导出
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table ref="table" v-loading="loading" :data="pushList" @selection-change="handleSelectionChange"
@row-click="rowClick">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="标题" align="center" v-if="columns[0].visible" prop="title" show-overflow-tooltip />
<el-table-column label="类型" align="center" prop="messageType">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_notice_type" :value="scope.row.messageType"></dict-tag>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" v-if="columns[1].visible" prop="createTime" width="200"
show-overflow-tooltip />
<el-table-column label="创建人" align="center" v-if="columns[2].visible" prop="createBy" width="200"
show-overflow-tooltip />
<el-table-column label="接收人" align="center" v-if="columns[3].visible" prop="groupName" width="200"
show-overflow-tooltip>
<!-- <template slot-scope="scope">
<span>{{ resolveRole(scope.row.receivePacket) }}</span>
</template> -->
</el-table-column>
<el-table-column label="状态" align="center" v-if="columns[4].visible" prop="state" width="200">
<template slot-scope="scope">
<el-switch v-model="scope.row.state" active-value="0" inactive-value="1"
@change="handleChangeState(scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center" v-if="columns[5].visible" width="200"
class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-user" @click="getReceiveList(scope.row)"
v-hasPermi="['system:push:edit']">接收人列表
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:push:edit']">修改
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:push:remove']">删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改学校消息推送对话框 -->
<el-dialog :title="title" :visible.sync="open" width="960px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="标题" prop="title">
<el-input size="small" v-model="form.title" placeholder="请输入标题" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="接收人" prop="groupName">
<el-select size="small" v-model="form.groupName" placeholder="请选择角色" style="width: 100%;">
<el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="类型" prop="messageType">
<el-select v-model="form.messageType" style="width: 100%;">
<el-option v-for="dict in dict.type.sys_notice_type" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="内容" prop="content">
<editor v-model="form.content" :min-height="192" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 查看详细内容学校消息推送对话框 -->
<el-dialog title="详细内容查看" :visible.sync="viewDetail" width="960px" append-to-body>
<el-card type="always">
<div style="text-align: center">
<h1 style="display: inline-block">{{ form.title }}</h1>
</div>
<span class="info-container" :disabled="true" v-html="form.content"></span>
<br /><br />
<div style="float: right;">
<el-descriptions column="3">
<!-- <el-descriptions-item label="标题">{{ form.title }}</el-descriptions-item>-->
<el-descriptions-item label="接收人">{{ resolveRole(form.receivePacket) }}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ form.createTime }}</el-descriptions-item>
<el-descriptions-item label="创建人">{{ form.createBy }}</el-descriptions-item>
</el-descriptions>
</div>
<br>
</el-card>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="viewDetail = false">关闭</el-button>
</div>
</el-dialog>
<!-- 导出对话框 -->
<ExportTable :open-export.sync="exportOptions.open" :title="exportOptions.title" @export="exportFile"></ExportTable>
</div>
</template>
<script>
import {
getList,
getInfoOne,
addInfo,
editInfo,
deleteInfo,
changeState
} from "@/api/smartSchool/informationPush/school";
import { State } from "@/enums/infoPush";
// import { getUser } from "@/api/system/user";
import { ExportType } from "@/enums/common";
import {
getUserList,//获取分组集合
} from "@/api/smartSchool/informationPush/personnelGrouping";
export default {
name: "SchoolMessage",
dicts: ['status', 'inform_push_state', 'receive_packet', 'sys_notice_type'],
data() {
return {
selection: [],
pageState: '0',
// 状态
State,
viewDetail: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 学校消息推送表格数据
pushList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
title: null,
groupId: null,
state: State.NORMAL,
// content: null,
// messageType: null,
},
// 导出选项
exportOptions: {
title: '选择导出类别',
open: false
},
//分组
idList: [],
// 表单参数
form: {},
// 列信息
columns: [
{ key: 0, label: `标题`, visible: true },
{ key: 1, label: `创建时间`, visible: true },
{ key: 2, label: `创建人`, visible: true },
{ key: 3, label: `接收人`, visible: true },
{ key: 4, label: `状态`, visible: true },
{ key: 5, label: `操作`, visible: true },
],
// 表单校验
rules: {
title: [
{ required: true, message: "请输入标题", trigger: "blur" }
],
receivePacket: [
{ required: true, message: "接收人不能为空", trigger: "blur" }
],
messageType: [
{ required: true, message: "类型不能为空", trigger: "blur" }
],
content: [
{ required: true, message: "内容不能为空", trigger: "blur" }
],
},
// 当前状态
activeName: State.NORMAL,
// 角色列表
roleList: []
};
},
computed: {
resolveRole() {
return value => {
const result = this.roleList.find(item => item.roleId === value);
return result ? result.roleName : '';
}
}
},
created() {
this.getList();
// this.getRoleList();
this.groupList();
},
methods: {
//接收人分组
groupList() {
getUserList().then(response => {
this.roleList = response.rows;
console.log('this.roleList', this.roleList);
this.total = response.total;
this.loading = false;
});
},
/** 查询学校消息推送列表 */
getList() {
this.loading = true;
getList(this.queryParams).then(response => {
this.pushList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
title: null,
content: null,
receivePacket: null,
messageType: '1',
state: State.STOP,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.throttle(() => {
this.queryParams.pageNum = 1;
this.getList();
})
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.selection = selection
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加学校消息推送";
},
getReceiveList(row) {
this.$router.push({
path: '/schoolManage/infoPush/receiveList',
query: {
id: row.id,
// title: row.title,
// type: row.messageType,
}
})
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids[0];
this.open = true;
this.title = "修改学校消息推送";
getInfoOne(id).then(response => {
this.form = response.data;
console.log('this.form', this.form);
});
},
/** 提交按钮 */
submitForm() {
const groupId = this.form.groupId
this.form.groupName = groupId == '' ? '' : this.roleList.find(item => item.id == groupId).name
this.throttle(() => {
this.$refs["form"].validate(valid => {
if (valid) {
console.log(valid);
this.$modal.loading('正在上传数据,请稍等...');
if (this.form.id != null) {
editInfo(this.form).then(response => {
this.$modal.closeLoading();
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch(error => {
this.$modal.closeLoading();
})
} else {
addInfo(this.form).then(response => {
console.log(this.form);
this.$modal.closeLoading();
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).catch(error => {
this.$modal.closeLoading();
})
}
}
});
})
},
/** 删除按钮操作 */
handleDelete(row) {
this.throttle(() => {
const ids = row.id || this.ids;
if (ids) {
this.$modal.confirm(`是否确认删除选中的${Object.hasOwnProperty.call(ids, 'length') ? ids.length : 1}条数据?`).then(function () {
return deleteInfo(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
}
})
},
/** 导出按钮操作 */
handleExport() {
this.exportOptions.open = true;
// this.$confirm(`是否确认导出${ !!this.ids.length ? this.ids.length + '条' : '所有' }数据?`, '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
// if (this.ids.length) {
// console.log("this.ids", this.ids)
// this.download('/schoolMessagePush/export/' + this.ids, {
// ...this.queryParams
// }, `学校信息推送.xlsx`)
// } else {
// this.download('/schoolMessagePush/export/', {
// ...this.queryParams
// }, `学校信息推送.xlsx`)
// }
// this.$message({
// type: 'success',
// message: '导出成功!'
// });
// }).catch(() => {
// this.$message({
// type: 'info',
// message: '已取消'
// });
// });
},
viewDetailButton() {
this.viewDetail = true;
this.reset();
const id = this.ids[0];
getInfoOne(id).then(response => {
this.form = response.data;
});
},
/** 停用/推送消息 */
handleChangeState(row) {
let text = row.state === "0" ? "推送" : "停用";
this.$modal.confirm('确认要' + text + '当前通知(公告)?').then(function () {
return changeState(row.id, row.state);
return Promise.reject();
}).then(() => {
this.$modal.msgSuccess(text + "成功");
this.getList();
}).catch(function () {
row.state = row.state === "0" ? "1" : "0";
});
},
// 切换状态
handleTabChange({ name }) {
if (name == State.NORMAL) {
this.pageState = 0
} else {
this.pageState = 1
}
this.queryParams.state = name;
this.handleQuery();
},
// 获取角色信息
// getRoleList() {
// getUser().then(response => {
// this.roleList = response.roles;
// }).catch(error => {
// })
// },
/** 导出 */
exportFile(callback) {
const ids = this.ids;
const options = [
{ type: ExportType.TOTAL, path: '/schoolMessagePush/exportAll', params: { state: this.pageState } },
{ type: ExportType.SELECT, path: '/schoolMessagePush/export/' + ids, params: {} },
{
type: ExportType.QUERY, path: '/schoolMessagePush/exportAll', params: {
state: this.pageState,
...this.queryParams
}
},
]
callback(options, `学校信息推送${new Date().getTime()}.xlsx`);
},
rowClick(row) {
if (this.selection.includes(row)) {
this.$refs.table.toggleRowSelection(row, false)
} else {
this.$refs.table.toggleRowSelection(row, true)
}
}
}
};
</script>
<style lang="scss" scoped>
.info-container {
max-height: 500px;
overflow-y: auto;
}
</style>
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
<el-tab-pane label="停用" :name="State.STOP"></el-tab-pane> <el-tab-pane label="停用" :name="State.STOP"></el-tab-pane>
</el-tabs> </el-tabs>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
<el-input size="small" v-model="queryParams.title" placeholder="请输入标题" clearable <el-input size="small" v-model="queryParams.title" placeholder="请输入标题" clearable
...@@ -364,7 +363,7 @@ export default { ...@@ -364,7 +363,7 @@ export default {
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
const groupId = this.form.groupId const groupId = this.form.groupId
this.form.group = groupId == '' ? '' : this.roleList.find(item => item.id == groupId).name this.form.groupName = groupId == '' ? '' : this.roleList.find(item => item.id == groupId).name
console.log(this.form.borrowBy); console.log(this.form.borrowBy);
this.throttle(() => { this.throttle(() => {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
......
...@@ -78,8 +78,6 @@ ...@@ -78,8 +78,6 @@
</el-table> </el-table>
<pagination v-show="totalcy > 0" :total="total" :page.sync="queryParam.pageNum" :limit.sync="queryParam.pageSize" <pagination v-show="totalcy > 0" :total="total" :page.sync="queryParam.pageNum" :limit.sync="queryParam.pageSize"
@pagination="getListcy" /> @pagination="getListcy" />
</el-row> </el-row>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSelectUser">确 定</el-button> <el-button type="primary" @click="handleSelectUser">确 定</el-button>
...@@ -167,7 +165,7 @@ export default { ...@@ -167,7 +165,7 @@ export default {
this.notificationId = this.$route.query.id; this.notificationId = this.$route.query.id;
console.log('this..notificationId', this.notificationId); console.log('this..notificationId', this.notificationId);
getUser(this.notificationId).then(response => { getUser(this.notificationId).then(response => {
this.userList = response.rows; this.userList = response.data;
console.log('this.userList', this.userList); console.log('this.userList', this.userList);
this.loading = false; this.loading = false;
}); });
...@@ -244,7 +242,7 @@ export default { ...@@ -244,7 +242,7 @@ export default {
// 返回按钮 // 返回按钮
handleClose() { handleClose() {
const obj = { path: "/system/role" }; const obj = { path: "/schoolManage/schoolNotice/personnelGrouping" };
this.$tab.closeOpenPage(obj); this.$tab.closeOpenPage(obj);
}, },
......
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" inline>
<el-row>
<el-col :span="5">
<el-form-item label="设备名称">
<el-input style="width: 100%" v-model="queryParams.equipmentName" clearable placeholder="请输入设备名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="分类编码">
<treeselect v-model="queryParams.classificationCode" :options="classificationOptions" :normalizer="normalizer"
placeholder="请选择分类编码" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="设备状态">
<el-select v-model="queryParams.equipmentState" clearable placeholder="请选择设备状态">
<el-option v-for="dict in dict.type.equipment_state" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="归属类型">
<el-select v-model="queryParams.affiliationType" clearable placeholder="请选择归属类型">
<el-option v-for="dict in dict.type.affiliation_type" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-button class="ml20" type="primary" icon="el-icon-search" size="mini" @click="getList">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-col>
</el-row>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="showDetail(0)">入库</el-button>
<el-button type="danger" plain icon="el-icon-minus" size="mini" @click="handleDelete(0)"
:disabled="isDisabledBtn">批量出库</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" icon="el-icon-download" size="mini" @click="upload.open = true">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-upload2" size="mini" @click="handleExportClass">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-printer" size="mini" @click="printBarcodes"
:disabled="isDisabledBtn">批量打印条码</el-button>
</el-col>
</el-row>
<!-- 表单数据 -->
<el-table v-loading="loading" stripe :data="deviceData" @selection-change="handleSelectionChange" width="100%">
<el-table-column type="selection" width="55" align="center" />
<el-table-column align="center" type="index" label="序号" width="55" fixed="left" />
<el-table-column align="center" prop="encode" label="自编码" width="140" fixed="left"></el-table-column>
<el-table-column align="center" prop="equipmentName" label="设备名称" fixed="left"></el-table-column>
<el-table-column align="center" prop="model" label="型号" fixed="left"></el-table-column>
<el-table-column align="center" prop="specification" label="规格" fixed="left"></el-table-column>
<el-table-column align="center" prop="classificationCode" label="分类编码"></el-table-column>
<el-table-column align="center" prop="unit" label="单位"></el-table-column>
<el-table-column align="center" prop="affiliationType" label="归属类型">
<template slot-scope="{ row }">
<div>{{ selectDictLabel(dict.type.affiliation_type, row.affiliationType) }}</div>
</template>
</el-table-column>
<el-table-column align="center" prop="equipmentState" label="设备状态">
<template slot-scope="{ row }">
<div>{{ selectDictLabel(dict.type.equipment_state, row.equipmentState) }}</div>
</template>
</el-table-column>
<el-table-column align="center" prop="isAllowLend" label="是否允许借出" width="120">
<template slot-scope="{ row }">
<div>{{ selectDictLabel(dict.type.is_lend, row.isAllowLend) }}</div>
</template>
</el-table-column>
<el-table-column align="center" prop="isLend" label="是否借出">
<template slot-scope="{ row }">
<div>{{ selectDictLabel(dict.type.is_lend, row.isLend) }}</div>
</template>
</el-table-column>
<el-table-column align="center" prop="dateOfProduction" label="投产日期" width="120"></el-table-column>
<el-table-column align="center" prop="price" label="价格(元)" width="100"></el-table-column>
<el-table-column align="center" prop="lifeOfUtility" label="效用年限(年)" width="120"></el-table-column>
<el-table-column align="center" prop="place" label="地点"></el-table-column>
<el-table-column align="center" prop="useName" label="使用人"></el-table-column>
<el-table-column align="center" prop="remark" label="备注"></el-table-column>
<el-table-column label="操作" align="center" min-width="220px" fixed="right">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="showDetail(1, scope.row.id)">编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="showDetail(2, scope.row.id)">查看</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(1, scope.row)">出库</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改对话框 -->
<el-dialog title="详细信息" :visible.sync="dialogVisible" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item v-if="nowOptionType != 0" label="自编码:" prop="encode">
<el-input v-model="form.encode" placeholder="请输入自编码" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="分类编码:" prop="classificationCode">
<treeselect v-model="form.classificationCode" :options="classificationOptions" :normalizer="normalizer"
@select="selectNode" placeholder="请选择分类编码" :disabled="nowOptionType == 2 ? true : false" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备名称:" prop="equipmentName">
<el-input v-model="form.equipmentName" placeholder="请输入设备名称" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="型号:" prop="model">
<el-input v-model="form.model" placeholder="请输入型号" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格:" prop="specification">
<el-input v-model="form.specification" placeholder="请输入规格" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="单位:" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="归属类型:" prop="affiliationType">
<el-select v-model="form.affiliationType" clearable placeholder="请选择归属类型"
:disabled="nowOptionType == 2 ? true : false" class="selectWidth">
<el-option v-for="dict in dict.type.affiliation_type" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="设备状态:" prop="equipmentState">
<el-select v-model="form.equipmentState" clearable placeholder="请选择设备状态"
:disabled="nowOptionType == 2 ? true : false" class="selectWidth">
<el-option v-for="dict in dict.type.equipment_state" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否允许借出:" prop="isAllowLend">
<el-select v-model="form.isAllowLend" clearable placeholder="请选择是否允许借出"
:disabled="nowOptionType == 2 ? true : false" class="selectWidth">
<el-option v-for="dict in dict.type.is_lend" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否借出:" prop="isLend">
<el-select v-model="form.isLend" clearable placeholder="请选择是否借出"
:disabled="nowOptionType == 2 ? true : false" class="selectWidth">
<el-option v-for="dict in dict.type.is_lend" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="投产日期:" prop="dateOfProduction">
<el-date-picker v-model="form.dateOfProduction" type="date" placeholder="选择日期" class="selectWidth"
value-format="yyyy-MM-dd" :disabled="nowOptionType == 2 ? true : false" clearable>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="价格:" prop="price">
<el-input v-model="form.price" placeholder="请输入价格" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="效用年限:" prop="lifeOfUtility">
<el-input v-model="form.lifeOfUtility" placeholder="请输入效用年限(年)"
:disabled="nowOptionType == 2 ? true : false" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="地点:" prop="place">
<el-input v-model="form.place" placeholder="请输入地点" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="使用人:" prop="useName">
<el-select v-model="form.useId" filterable placeholder="请选择使用人"
:disabled="nowOptionType == 2 ? true : false" clearable>
<el-option v-for="(item, index) in userList" :key="index" :label="item.userName" :value="item.userId">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="备注:" prop="remark">
<el-input type="textarea" v-model="form.remark" placeholder="请输入备注"
:disabled="nowOptionType == 2 ? true : false" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button v-if="nowOptionType != 2" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="dialogVisible = false">取 消</el-button>
</div>
</el-dialog>
<!-- 导入对话框-->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url"
:disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess"
:auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板
</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
<!-- 打印二维码 弹框部分 -->
<el-dialog title="打印条码预览" :visible.sync="printDialog" width="30%">
<div class="qrCodeList">
<div v-for="(item, index) in chooseList" :key="index">
<div class="titlShow">东营市二中</div>
<div class="flexBlock qrCode">
<div class="qrCodeLeft">
<div :id="'qrcode' + index"></div>
<div>{{ item.encode }}</div>
</div>
<div class="qrCodeRight">
<div>{{ item.equipmentName }}:{{ item.model }}</div>
<div>地点:{{ item.place }}</div>
</div>
</div>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="printCode">打 印</el-button>
</div>
</el-dialog>
<!-- 打印二维码 弹框部分 -->
<!-- 隐藏二维码页面样式 -->
<div id="printBlock">
<div v-for="(item, index) in printList" :key="index" class="printBody">
<div class="titlePrint">东营市二中</div>
<div class="flexBlock printQrCode">
<div class="printLeft">
<div :id="'print' + index" class="printImg"></div>
<div>{{ item.encode }}</div>
</div>
<div class="printRight">
<div>{{ item.equipmentName }}:{{ item.model }}</div>
<div>地点:{{ item.place }}</div>
</div>
</div>
<div style="page-break-after:always"></div>
</div>
</div>
<!-- 隐藏二维码页面样式 -->
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import {
addEquipmentLedger, deleteEquipmentLedger, editEquipmentLedger,
getEquipmentLedger,
getEquipmentLedgerDetailByID, getModelByID, getUserList
} from "../../../../api/smartSchool/schoolProperty/equipmenTledger";
import { getProduct } from "../../../../api/smartSchool/schoolProperty/classiFication";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import QRCode from "qrcodejs2"; // 生成二维码插件
import printJS from "print-js"; // 打印插件
import * as dd from 'dingtalk-jsapi';
export default {
name: "index",
dicts: ['equipment_state', 'affiliation_type', 'is_lend'],
components: { Treeselect },
data() {
return {
loading: true, // 遮罩层
total: 0, // 总条数
deviceData: [], // 设备台账表格数据
title: "", // 弹出层标题
dialogVisible: false, // 添加或修改
queryParams: { // 查询参数
pageNum: 1,
pageSize: 10,
equipmentName: '',
classificationCode: undefined,
equipmentState: '',
affiliationType: '',
},
classificationOptions: [], // 分类编码树状结构
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + "/equipmentLedger/importData"
},
form: {
id: '',
encode: '',
equipmentName: '',
model: '',
specification: '',
classificationCode: undefined,
unit: '',
affiliationType: '',
equipmentState: '',
isAllowLend: '',
isLend: '',
dateOfProduction: '',
price: '',
lifeOfUtility: '',
place: '',
useId: '',
useName: '',
remark: '',
},
rules: { // 表单校验
equipmentName: [
{ required: true, message: '请输入设备名称', trigger: 'blur' },
],
classificationCode: [
{ required: true, message: '请选择分类编码', trigger: 'change' }
],
equipmentState: [
{ required: true, message: '请选择设备状态', trigger: 'change' }
],
affiliationType: [
{ required: true, message: '请选择归属类型', trigger: 'change' }
],
isAllowLend: [
{ required: true, message: '请选择是否允许借出', trigger: 'change' }
]
},
nowOptionType: '', // 0 入库 1 编辑 2 查看
electItem: [], // 选中的数据
isDisabledBtn: true,
chooseList: [], //用户选择的table数据
printDialog: false, // 打印二维码预览
printList: [],
userList: [] //使用人列表
};
},
created() {
this.getClassificationCodeTree()
this.getList()
},
methods: {
//获取分类编码树形下拉框
getClassificationCodeTree() {
getProduct().then(res => {
if (res.code == 200) {
this.classificationOptions = this.handleTree(res.rows, "id")
}
})
},
/** 查询列表 */
getList() {
this.loading = true
getEquipmentLedger({ ...this.queryParams }).then(res => {
if (res.code == 200) {
this.total = res.total
this.deviceData = res.rows
this.loading = false
}
})
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
equipmentName: '',
classificationCode: undefined,
equipmentState: '',
affiliationType: '',
}
this.getList()
},
/** 转换分类编码数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.classificationCode,
label: node.equipmentType,
children: node.children
};
},
//弹出层分类编码选择事件 获取当前分类编码的型号
selectNode(node) {
const id = node.classificationCode
getModelByID(id).then(res => {
if (res.code == 200) {
this.form.model = res.data.model
}
})
},
//0 入库 1 编辑 2 查看
showDetail(type, id) {
this.form = {
id: '',
encode: '',
equipmentName: '',
model: '',
specification: '',
classificationCode: undefined,
unit: '',
affiliationType: '',
equipmentState: '',
isAllowLend: '',
isLend: '',
dateOfProduction: '',
price: '',
lifeOfUtility: '',
place: '',
useName: '',
useId: '',
remark: '',
}
this.nowOptionType = type
this.getSelectUser()
if (type != 0) {
getEquipmentLedgerDetailByID(id).then(res => {
if (res.code == 200) {
Object.keys(this.form).forEach(key => {
res.data[key] && (this.form[key] = res.data[key])
})
}
})
}
this.dialogVisible = true
},
//使用人列表数据
getSelectUser() {
getUserList().then(res => {
if (res.code == 200) {
this.userList = res.rows
}
})
},
//表单提交
submitForm() {
const useId = this.form.useId
this.form.useName = useId == '' ? '' : this.userList.find(item => item.userId == useId).userName
this.$refs['form'].validate((valid) => {
if (valid) {
if (this.nowOptionType == 0) {
//0 入库 1 编辑 2 查看
const data = {
equipmentName: this.form.equipmentName,
model: this.form.model,
specification: this.form.specification,
classificationCode: this.form.classificationCode,
unit: this.form.unit,
affiliationType: this.form.affiliationType,
equipmentState: this.form.equipmentState,
isAllowLend: this.form.isAllowLend,
isLend: this.form.isLend,
dateOfProduction: this.form.dateOfProduction,
price: this.form.price,
lifeOfUtility: this.form.lifeOfUtility,
place: this.form.place,
useName: this.form.useName,
useId,
remark: this.form.remark,
}
addEquipmentLedger(data).then(res => {
if (res.code == 200) {
this.$message.success("设备台账入库成功!")
this.dialogVisible = false
this.getList()
}
})
} else if (this.nowOptionType == 1) {
//1 编辑
editEquipmentLedger({ ...this.form }).then(res => {
if (res.code == 200) {
this.$message.success("设备台账编辑成功!")
this.dialogVisible = false
this.getList()
}
})
}
}
})
},
//出库
handleDelete(type, item) {
let idString = type == 0 ? this.electItem.toString() : item.id
let message = type == 0 ? '是否确认批量出库选中设备?' : `是否确认出库${item.model}设备?`
this.$confirm(message, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteEquipmentLedger(idString).then(res => {
if (res.code == 200) {
this.$message({
type: 'success',
message: '出库成功!'
});
this.getList();
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消出库!'
});
});
},
//模版下载
importTemplate() {
this.download(
"/equipmentLedger/importTemplate",
{},
`设备台账_template_${new Date().getTime()}.xlsx`
);
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
//导出
handleExportClass() {
const data = {
equipmentName: this.queryParams.equipmentName,
classificationCode: this.queryParams.classificationCode,
equipmentState: this.queryParams.equipmentState,
affiliationType: this.queryParams.affiliationType,
}
this.download('/equipmentLedger/export', {
...data,
}, `设备台账_${Date.now()}.xlsx`)
},
//生成批量打印条码
printBarcodes() {
const url = `http://192.168.1.109:1024`;
dd.biz.util.openLink({
url: url,
onSuccess: () => {
console.log(newURL, 'newURL');
console.log('跳转成功,准备打印');
// 打印条码
this.printCode();
},
onFail: (error) => {
console.error('跳转失败', error);
}
});
},
// 打印条码
printCode() {
this.printList = this.chooseList;
this.$nextTick(() => {
this.chooseList.map((item, index) => {
const dom = document.getElementById(`qrcode${index}`).lastElementChild;
if (dom == null) {
new QRCode(`qrcode${index}`, {
width: 150,
height: 150,
text: item.encode,
});
}
});
this.printList.map((item, index) => {
const domPrint = document.getElementById(`print${index}`).lastElementChild;
if (domPrint == null) {
new QRCode(`print${index}`, {
width: 60,
height: 60,
text: item.encode,
});
}
});
printJS({
printable: 'printBlock', // 标签元素id
type: 'html',
targetStyles: ['*'],
font_size: '10px',
style: `
@media print{
@page{
size:auto;
margin:4mm 0mm 0mm 0mm
}
@page :first {
margin-top:2mm
}
#printBlock{
display:block!important
}
}`
});
});
},
// 多选框选中数据
handleSelectionChange(selection) {
this.chooseList = selection
this.electItem = selection.map(item => {
return item.id
})
this.isDisabledBtn = selection.length != 0 ? false : true
},
},
};
</script>
<style scoped>
::v-deep .el-form-item,
::v-deep .el-select {
width: 100%;
}
::v-deep .el-form-item--small .el-form-item__content {
width: 75%;
}
.qrCodeList {
max-height: 500px;
overflow-y: scroll;
}
.qrCode {
width: 300px;
font-size: 14px;
line-height: 30px;
align-items: flex-start;
margin: 0 auto 20px auto;
}
.qrCodeLeft {
text-align: center;
}
.qrCodeRight {
padding: 20px 0 20px 15px;
}
.titlShow {
font-weight: bold;
text-align: center;
padding-bottom: 10px;
font-size: 16px;
}
#printBlock {
display: none;
margin: 0px !important;
}
.printLeft {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.printBody {
width: 250px;
}
.printQrCode {
font-size: 6px;
line-height: 20px;
align-items: center;
padding: 8px;
}
.printRight {
width: 60%;
padding: 0 5px;
}
.titlePrint {
font-size: 8px;
font-weight: bold;
text-align: center;
}
.printImg {
display: block;
}
</style>
...@@ -316,6 +316,7 @@ import Treeselect from "@riophae/vue-treeselect"; ...@@ -316,6 +316,7 @@ import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import QRCode from "qrcodejs2"; // 生成二维码插件 import QRCode from "qrcodejs2"; // 生成二维码插件
import printJS from "print-js"; // 打印插件 import printJS from "print-js"; // 打印插件
import * as dd from 'dingtalk-jsapi';
export default { export default {
...@@ -621,58 +622,57 @@ export default { ...@@ -621,58 +622,57 @@ export default {
}, `设备台账_${Date.now()}.xlsx`) }, `设备台账_${Date.now()}.xlsx`)
}, },
//生成批量打印条码 //点击批量打印跳转
printBarcodes() { printBarcodes() {
this.printDialog = true const baseUrl = window.location.origin +'/printBarcodes';
this.printList = this.chooseList console.log(baseUrl, 'baseUrl');
this.$nextTick(() => { this.printList = this.chooseList;
this.chooseList.map((item, index) => { console.log(11, this.printList);
const dom = document.getElementById(`qrcode${index}`).lastElementChild // const url = `${baseUrl}/printBarcodes`;
if (dom == null) { console.log(baseUrl, 'baseUrl');
new QRCode(`qrcode${index}`, { const ids = this.electItem.join(',');
width: 150, console.log(ids, 'ids');
height: 150, const encodes = this.chooseList.map(item => item.encode).join(',');
text: item.encode, console.log(encodes, 'encodes');
}); const printListParam = encodeURIComponent(JSON.stringify(this.printList));
} dd.biz.util.openLink({
}) url: `${baseUrl}?ids=${ids}&encodes=${encodes}&printList=${printListParam}`,
onSuccess: () => {
console.log('跳转成功,准备打印');
// 打印条码
// this.printCode();
},
onFail: (error) => {
console.error('跳转失败', error);
}
});
},
this.printList.map((item, index) => {
const domPrint = document.getElementById(`print${index}`).lastElementChild
if (domPrint == null) {
new QRCode(`print${index}`, {
width: 60,
height: 60,
text: item.encode,
});
}
})
})
},
//打印条码 //打印条码
printCode() { // printCode() {
printJS({ // printJS({
printable: 'printBlock', // 标签元素id // printable: 'printBlock', // 标签元素id
type: 'html', // type: 'html',
targetStyles: ['*'], // targetStyles: ['*'],
font_size: '10px', // font_size: '10px',
style: ` // style: `
@media print{ // @media print{
@page{ // @page{
size:auto; // size:auto;
margin:4mm 0mm 0mm 0mm // margin:4mm 0mm 0mm 0mm
} // }
@page :first { // @page :first {
margin-top:2mm // margin-top:2mm
} // }
#printBlock{ // #printBlock{
display:block!important // display:block!important
} // }
}` // }`
}) // })
}, // },
// 多选框选中数据 // 多选框选中数据
handleSelectionChange(selection) { handleSelectionChange(selection) {
......
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" inline>
<el-row>
<el-col :span="5">
<el-form-item label="设备名称">
<el-input style="width: 100%" v-model="queryParams.equipmentName" clearable
placeholder="请输入设备名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="分类编码">
<treeselect v-model="queryParams.classificationCode" :options="classificationOptions"
:normalizer="normalizer" placeholder="请选择分类编码" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="设备状态">
<el-select v-model="queryParams.equipmentState" clearable placeholder="请选择设备状态">
<el-option v-for="dict in dict.type.equipment_state" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="归属类型">
<el-select v-model="queryParams.affiliationType" clearable placeholder="请选择归属类型">
<el-option v-for="dict in dict.type.affiliation_type" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-button class="ml20" type="primary" icon="el-icon-search" size="mini" @click="getList">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-col>
</el-row>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="showDetail(0)">入库</el-button>
<el-button type="danger" plain icon="el-icon-minus" size="mini" @click="handleDelete(0)"
:disabled="isDisabledBtn">批量出库</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" icon="el-icon-download" size="mini" @click="upload.open = true">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-upload2" size="mini" @click="handleExportClass">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-printer" size="mini" @click="printBarcodes"
:disabled="isDisabledBtn">批量打印条码</el-button>
</el-col>
</el-row>
<!-- 表单数据 -->
<el-table v-loading="loading" stripe :data="deviceData" @selection-change="handleSelectionChange" width="100%">
<el-table-column type="selection" width="55" align="center" />
<el-table-column align="center" type="index" label="序号" width="55" fixed="left" />
<el-table-column align="center" prop="encode" label="自编码" width="140" fixed="left"></el-table-column>
<el-table-column align="center" prop="equipmentName" label="设备名称" fixed="left"></el-table-column>
<el-table-column align="center" prop="model" label="型号" fixed="left"></el-table-column>
<el-table-column align="center" prop="specification" label="规格" fixed="left"></el-table-column>
<el-table-column align="center" prop="classificationCode" label="分类编码"></el-table-column>
<el-table-column align="center" prop="unit" label="单位"></el-table-column>
<el-table-column align="center" prop="affiliationType" label="归属类型">
<template slot-scope="{ row }">
<div>{{ selectDictLabel(dict.type.affiliation_type, row.affiliationType) }}</div>
</template>
</el-table-column>
<el-table-column align="center" prop="equipmentState" label="设备状态">
<template slot-scope="{ row }">
<div>{{ selectDictLabel(dict.type.equipment_state, row.equipmentState) }}</div>
</template>
</el-table-column>
<el-table-column align="center" prop="isAllowLend" label="是否允许借出" width="120">
<template slot-scope="{ row }">
<div>{{ selectDictLabel(dict.type.is_lend, row.isAllowLend) }}</div>
</template>
</el-table-column>
<el-table-column align="center" prop="isLend" label="是否借出">
<template slot-scope="{ row }">
<div>{{ selectDictLabel(dict.type.is_lend, row.isLend) }}</div>
</template>
</el-table-column>
<el-table-column align="center" prop="dateOfProduction" label="投产日期" width="120"></el-table-column>
<el-table-column align="center" prop="price" label="价格(元)" width="100"></el-table-column>
<el-table-column align="center" prop="lifeOfUtility" label="效用年限(年)" width="120"></el-table-column>
<el-table-column align="center" prop="place" label="地点"></el-table-column>
<el-table-column align="center" prop="useName" label="使用人"></el-table-column>
<el-table-column align="center" prop="remark" label="备注"></el-table-column>
<el-table-column label="操作" align="center" min-width="220px" fixed="right">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit"
@click="showDetail(1, scope.row.id)">编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-view"
@click="showDetail(2, scope.row.id)">查看</el-button>
<el-button size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(1, scope.row)">出库</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改对话框 -->
<el-dialog title="详细信息" :visible.sync="dialogVisible" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item v-if="nowOptionType != 0" label="自编码:" prop="encode">
<el-input v-model="form.encode" placeholder="请输入自编码" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="分类编码:" prop="classificationCode">
<treeselect v-model="form.classificationCode" :options="classificationOptions"
:normalizer="normalizer" @select="selectNode" placeholder="请选择分类编码"
:disabled="nowOptionType == 2 ? true : false" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备名称:" prop="equipmentName">
<el-input v-model="form.equipmentName" placeholder="请输入设备名称"
:disabled="nowOptionType == 2 ? true : false" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="型号:" prop="model">
<el-input v-model="form.model" placeholder="请输入型号" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格:" prop="specification">
<el-input v-model="form.specification" placeholder="请输入规格"
:disabled="nowOptionType == 2 ? true : false" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="单位:" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="归属类型:" prop="affiliationType">
<el-select v-model="form.affiliationType" clearable placeholder="请选择归属类型"
:disabled="nowOptionType == 2 ? true : false" class="selectWidth">
<el-option v-for="dict in dict.type.affiliation_type" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="设备状态:" prop="equipmentState">
<el-select v-model="form.equipmentState" clearable placeholder="请选择设备状态"
:disabled="nowOptionType == 2 ? true : false" class="selectWidth">
<el-option v-for="dict in dict.type.equipment_state" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否允许借出:" prop="isAllowLend">
<el-select v-model="form.isAllowLend" clearable placeholder="请选择是否允许借出"
:disabled="nowOptionType == 2 ? true : false" class="selectWidth">
<el-option v-for="dict in dict.type.is_lend" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否借出:" prop="isLend">
<el-select v-model="form.isLend" clearable placeholder="请选择是否借出"
:disabled="nowOptionType == 2 ? true : false" class="selectWidth">
<el-option v-for="dict in dict.type.is_lend" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="投产日期:" prop="dateOfProduction">
<el-date-picker v-model="form.dateOfProduction" type="date" placeholder="选择日期"
class="selectWidth" value-format="yyyy-MM-dd" :disabled="nowOptionType == 2 ? true : false"
clearable>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="价格:" prop="price">
<el-input v-model="form.price" placeholder="请输入价格" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="效用年限:" prop="lifeOfUtility">
<el-input v-model="form.lifeOfUtility" placeholder="请输入效用年限(年)"
:disabled="nowOptionType == 2 ? true : false" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="地点:" prop="place">
<el-input v-model="form.place" placeholder="请输入地点" :disabled="nowOptionType == 2 ? true : false"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="使用人:" prop="useName">
<el-select v-model="form.useId" filterable placeholder="请选择使用人"
:disabled="nowOptionType == 2 ? true : false" clearable>
<el-option v-for="(item, index) in userList" :key="index" :label="item.userName"
:value="item.userId">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="备注:" prop="remark">
<el-input type="textarea" v-model="form.remark" placeholder="请输入备注"
:disabled="nowOptionType == 2 ? true : false" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button v-if="nowOptionType != 2" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="dialogVisible = false">取 消</el-button>
</div>
</el-dialog>
<!-- 导入对话框-->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url"
:disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess"
:auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板
</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
<!-- 打印二维码 弹框部分 -->
<el-dialog title="打印条码预览" :visible.sync="printDialog" width="30%">
<div class="qrCodeList">
<div v-for="(item, index) in chooseList" :key="index">
<div class="titlShow">东营市二中</div>
<div class="flexBlock qrCode">
<div class="qrCodeLeft">
<div :id="'qrcode' + index"></div>
<div>{{ item.encode }}</div>
</div>
<div class="qrCodeRight">
<div>{{ item.equipmentName }}:{{ item.model }}</div>
<div>地点:{{ item.place }}</div>
</div>
</div>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="printCode">打 印</el-button>
</div>
</el-dialog>
<!-- 打印二维码 弹框部分 -->
<!-- 隐藏二维码页面样式 -->
<div id="printBlock">
<div v-for="(item, index) in printList" :key="index" class="printBody">
<div class="titlePrint">东营市二中</div>
<div class="flexBlock printQrCode">
<div class="printLeft">
<div :id="'print' + index" class="printImg"></div>
<div>{{ item.encode }}</div>
</div>
<div class="printRight">
<div>{{ item.equipmentName }}:{{ item.model }}</div>
<div>地点:{{ item.place }}</div>
</div>
</div>
<div style="page-break-after:always"></div>
</div>
</div>
<!-- 隐藏二维码页面样式 -->
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import {
addEquipmentLedger, deleteEquipmentLedger, editEquipmentLedger,
getEquipmentLedger,
getEquipmentLedgerDetailByID, getModelByID, getUserList
} from "../../../../api/smartSchool/schoolProperty/equipmenTledger";
import { getProduct } from "../../../../api/smartSchool/schoolProperty/classiFication";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import QRCode from "qrcodejs2"; // 生成二维码插件
import printJS from "print-js"; // 打印插件
export default {
name: "index",
dicts: ['equipment_state', 'affiliation_type', 'is_lend'],
components: { Treeselect },
data() {
return {
loading: true, // 遮罩层
total: 0, // 总条数
deviceData: [], // 设备台账表格数据
title: "", // 弹出层标题
dialogVisible: false, // 添加或修改
queryParams: { // 查询参数
pageNum: 1,
pageSize: 10,
equipmentName: '',
classificationCode: undefined,
equipmentState: '',
affiliationType: '',
},
classificationOptions: [], // 分类编码树状结构
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + "/equipmentLedger/importData"
},
form: {
id: '',
encode: '',
equipmentName: '',
model: '',
specification: '',
classificationCode: undefined,
unit: '',
affiliationType: '',
equipmentState: '',
isAllowLend: '',
isLend: '',
dateOfProduction: '',
price: '',
lifeOfUtility: '',
place: '',
useId: '',
useName: '',
remark: '',
},
rules: { // 表单校验
equipmentName: [
{ required: true, message: '请输入设备名称', trigger: 'blur' },
],
classificationCode: [
{ required: true, message: '请选择分类编码', trigger: 'change' }
],
equipmentState: [
{ required: true, message: '请选择设备状态', trigger: 'change' }
],
affiliationType: [
{ required: true, message: '请选择归属类型', trigger: 'change' }
],
isAllowLend: [
{ required: true, message: '请选择是否允许借出', trigger: 'change' }
]
},
nowOptionType: '', // 0 入库 1 编辑 2 查看
electItem: [], // 选中的数据
isDisabledBtn: true,
chooseList: [], //用户选择的table数据
printDialog: false, // 打印二维码预览
printList: [],
userList: [] //使用人列表
};
},
created() {
this.getClassificationCodeTree()
this.getList()
},
methods: {
//获取分类编码树形下拉框
getClassificationCodeTree() {
getProduct().then(res => {
if (res.code == 200) {
this.classificationOptions = this.handleTree(res.rows, "id")
}
})
},
/** 查询列表 */
getList() {
this.loading = true
getEquipmentLedger({ ...this.queryParams }).then(res => {
if (res.code == 200) {
this.total = res.total
this.deviceData = res.rows
this.loading = false
}
})
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
equipmentName: '',
classificationCode: undefined,
equipmentState: '',
affiliationType: '',
}
this.getList()
},
/** 转换分类编码数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.classificationCode,
label: node.equipmentType,
children: node.children
};
},
//弹出层分类编码选择事件 获取当前分类编码的型号
selectNode(node) {
const id = node.classificationCode
getModelByID(id).then(res => {
if (res.code == 200) {
this.form.model = res.data.model
}
})
},
//0 入库 1 编辑 2 查看
showDetail(type, id) {
this.form = {
id: '',
encode: '',
equipmentName: '',
model: '',
specification: '',
classificationCode: undefined,
unit: '',
affiliationType: '',
equipmentState: '',
isAllowLend: '',
isLend: '',
dateOfProduction: '',
price: '',
lifeOfUtility: '',
place: '',
useName: '',
useId: '',
remark: '',
}
this.nowOptionType = type
this.getSelectUser()
if (type != 0) {
getEquipmentLedgerDetailByID(id).then(res => {
if (res.code == 200) {
Object.keys(this.form).forEach(key => {
res.data[key] && (this.form[key] = res.data[key])
})
}
})
}
this.dialogVisible = true
},
//使用人列表数据
getSelectUser() {
getUserList().then(res => {
if (res.code == 200) {
this.userList = res.rows
}
})
},
//表单提交
submitForm() {
const useId = this.form.useId
this.form.useName = useId == '' ? '' : this.userList.find(item => item.userId == useId).userName
this.$refs['form'].validate((valid) => {
if (valid) {
if (this.nowOptionType == 0) {
//0 入库 1 编辑 2 查看
const data = {
equipmentName: this.form.equipmentName,
model: this.form.model,
specification: this.form.specification,
classificationCode: this.form.classificationCode,
unit: this.form.unit,
affiliationType: this.form.affiliationType,
equipmentState: this.form.equipmentState,
isAllowLend: this.form.isAllowLend,
isLend: this.form.isLend,
dateOfProduction: this.form.dateOfProduction,
price: this.form.price,
lifeOfUtility: this.form.lifeOfUtility,
place: this.form.place,
useName: this.form.useName,
useId,
remark: this.form.remark,
}
addEquipmentLedger(data).then(res => {
if (res.code == 200) {
this.$message.success("设备台账入库成功!")
this.dialogVisible = false
this.getList()
}
})
} else if (this.nowOptionType == 1) {
//1 编辑
editEquipmentLedger({ ...this.form }).then(res => {
if (res.code == 200) {
this.$message.success("设备台账编辑成功!")
this.dialogVisible = false
this.getList()
}
})
}
}
})
},
//出库
handleDelete(type, item) {
let idString = type == 0 ? this.electItem.toString() : item.id
let message = type == 0 ? '是否确认批量出库选中设备?' : `是否确认出库${item.model}设备?`
this.$confirm(message, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteEquipmentLedger(idString).then(res => {
if (res.code == 200) {
this.$message({
type: 'success',
message: '出库成功!'
});
this.getList();
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消出库!'
});
});
},
//模版下载
importTemplate() {
this.download(
"/equipmentLedger/importTemplate",
{},
`设备台账_template_${new Date().getTime()}.xlsx`
);
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
//导出
handleExportClass() {
const data = {
equipmentName: this.queryParams.equipmentName,
classificationCode: this.queryParams.classificationCode,
equipmentState: this.queryParams.equipmentState,
affiliationType: this.queryParams.affiliationType,
}
this.download('/equipmentLedger/export', {
...data,
}, `设备台账_${Date.now()}.xlsx`)
},
//生成批量打印条码
printBarcodes() {
this.printDialog = true
this.printList = this.chooseList
this.$nextTick(() => {
this.chooseList.map((item, index) => {
const dom = document.getElementById(`qrcode${index}`).lastElementChild
if (dom == null) {
new QRCode(`qrcode${index}`, {
width: 150,
height: 150,
text: item.encode,
});
}
})
this.printList.map((item, index) => {
const domPrint = document.getElementById(`print${index}`).lastElementChild
if (domPrint == null) {
new QRCode(`print${index}`, {
width: 60,
height: 60,
text: item.encode,
});
}
})
})
},
//打印条码
printCode() {
printJS({
printable: 'printBlock', // 标签元素id
type: 'html',
targetStyles: ['*'],
font_size: '10px',
style: `
@media print{
@page{
size:auto;
margin:4mm 0mm 0mm 0mm
}
@page :first {
margin-top:2mm
}
#printBlock{
display:block!important
}
}`
})
},
// 多选框选中数据
handleSelectionChange(selection) {
this.chooseList = selection
this.electItem = selection.map(item => {
return item.id
})
this.isDisabledBtn = selection.length != 0 ? false : true
},
},
};
</script>
<style scoped>
::v-deep .el-form-item,
::v-deep .el-select {
width: 100%;
}
::v-deep .el-form-item--small .el-form-item__content {
width: 75%;
}
.qrCodeList {
max-height: 500px;
overflow-y: scroll;
}
.qrCode {
width: 300px;
font-size: 14px;
line-height: 30px;
align-items: flex-start;
margin: 0 auto 20px auto;
}
.qrCodeLeft {
text-align: center;
}
.qrCodeRight {
padding: 20px 0 20px 15px;
}
.titlShow {
font-weight: bold;
text-align: center;
padding-bottom: 10px;
font-size: 16px;
}
#printBlock {
display: none;
margin: 0px !important;
}
.printLeft {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.printBody {
width: 250px;
}
.printQrCode {
font-size: 6px;
line-height: 20px;
align-items: center;
padding: 8px;
}
.printRight {
width: 60%;
padding: 0 5px;
}
.titlePrint {
font-size: 8px;
font-weight: bold;
text-align: center;
}
.printImg {
display: block;
}</style>
<template>
<div>
<!-- 打印二维码 弹框部分 -->
<el-dialog title="打印条码预览" :visible.sync="printDialog" width="30%">
<div class="qrCodeList">
<div v-for="(item, index) in chooseList" :key="index">
<div class="titlShow">东营市二中</div>
<div class="flexBlock qrCode">
<div class="qrCodeLeft">
<div :id="'qrcode' + index"></div>
<div>{{ item.encode }}</div>
</div>
<div class="qrCodeRight">
<div>{{ item.equipmentName }}{{ item.model }}</div>
<div>地点:{{ item.place }}</div>
</div>
</div>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="printCode">打 印</el-button>
</div>
</el-dialog>
<!-- 打印二维码 弹框部分 -->
<!-- 隐藏二维码页面样式 -->
<div id="printBlock">
<div v-for="(item, index) in printList" :key="index" class="printBody">
<div class="titlePrint">东营市二中</div>
<div class="flexBlock printQrCode">
<div class="printLeft">
<div :id="'print' + index" class="printImg"></div>
<div>{{ item.encode }}</div>
</div>
<div class="printRight">
<div>{{ item.equipmentName }}{{ item.model }}</div>
<div>地点:{{ item.place }}</div>
</div>
</div>
<div style="page-break-after:always"></div>
</div>
</div>
<!-- 隐藏二维码页面样式 -->
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import QRCode from "qrcodejs2"; // 生成二维码插件
import printJS from "print-js"; // 打印插件
export default {
name: "index",
data() {
return {
loading: true, // 遮罩层
total: 0, // 总条数
deviceData: [], // 设备台账表格数据
title: "", // 弹出层标题
dialogVisible: false, // 添加或修改
queryParams: { // 查询参数
pageNum: 1,
pageSize: 10,
equipmentName: '',
classificationCode: undefined,
equipmentState: '',
affiliationType: '',
},
classificationOptions: [], // 分类编码树状结构
formModel: {},
nowOptionType: '', // 0 入库 1 编辑 2 查看
electItem: [], // 选中的数据
isDisabledBtn: true,
chooseList: [], //用户选择的table数据
printDialog: false, // 打印二维码预览
printList: [],
userList: [] //使用人列表
};
},
created() {
const ids = this.$route.query.ids;
const encodes = this.$route.query.encodes;
const printList = JSON.parse(decodeURIComponent(this.$route.query.printList));
this.printBarcodes(ids, encodes, printList);
},
methods: {
//生成批量打印条码
printBarcodes(ids, encodes, printList) {
this.printDialog = true;
console.log(ids, encodes);
this.printList = [...printList];
this.chooseList = [...this.printList];
console.log(this.chooseList, '122');
this.$nextTick(() => {
this.printList.map((item, index) => {
const domPrint = document.getElementById(`print${index}`).lastElementChild;
if (domPrint == null) {
new QRCode(`print${index}`, {
width: 60,
height: 60,
text: item.encode,
});
}
});
this.chooseList.map((item, index) => {
const dom = document.getElementById(`qrcode${index}`).lastElementChild;
if (dom == null) {
new QRCode(`qrcode${index}`, {
width: 150,
height: 150,
text: item.encode,
});
}
});
});
},
//打印条码
printCode() {
printJS({
printable: printBlock,
type: 'html',
targetStyles: ['*'],
font_size: '10px',
style: `
@media print{
@page{
size:auto;
margin:4mm 0mm 0mm 0mm
}
@page :first{
margin-top:2mm
}
#printBlock{
display:block!important
}
#tabnav, #pagenum {
display: none !important;
}
}`
});
}
},
}
</script>
<style scoped>
::v-deep .el-form-item,
::v-deep .el-select {
width: 100%;
}
::v-deep .el-form-item--small .el-form-item__content {
width: 75%;
}
.qrCodeList {
max-height: 500px;
overflow-y: scroll;
}
.qrCode {
width: 300px;
font-size: 14px;
line-height: 30px;
align-items: flex-start;
margin: 0 auto 20px auto;
}
.qrCodeLeft {
text-align: center;
}
.qrCodeRight {
padding: 20px 0 20px 15px;
}
.titlShow {
font-weight: bold;
text-align: center;
padding-bottom: 10px;
font-size: 16px;
}
#printBlock {
display: none;
margin: 0px !important;
}
.printLeft {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.printBody {
width: 250px;
}
.printQrCode {
font-size: 6px;
line-height: 20px;
align-items: center;
padding: 8px;
}
.printRight {
width: 60%;
padding: 0 5px;
}
.titlePrint {
font-size: 8px;
font-weight: bold;
text-align: center;
}
.printImg {
display: block;
}
</style>
...@@ -100,8 +100,8 @@ ...@@ -100,8 +100,8 @@
<el-row :gutter="30"> <el-row :gutter="30">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="借用期限(天)" prop="deadline"> <el-form-item label="借用期限(天)" prop="deadline">
<el-input v-model="lendReturnForm.deadline" placeholder="请输入借用期限" <el-input v-model="lendReturnForm.deadline" placeholder="请输入借用期限" :disabled="nowType == 2 ? true : false"
:disabled="nowType == 2 ? true : false"></el-input> type="number"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
......
...@@ -473,7 +473,7 @@ export default { ...@@ -473,7 +473,7 @@ export default {
classValue: [{required: true, message: '班级不能为空', trigger: 'change'}], classValue: [{required: true, message: '班级不能为空', trigger: 'change'}],
teacherName: [{required: true, message: '班主任姓名不能为空', trigger: 'change'}], teacherName: [{required: true, message: '班主任姓名不能为空', trigger: 'change'}],
teacherTel: [{required: true, message: '班主任手机号不能为空', trigger: 'change'}], teacherTel: [{required: true, message: '班主任手机号不能为空', trigger: 'change'}],
houseName: [{required: true, message: '所在教学楼不能为空', trigger: 'change'}], // houseName: [{required: true, message: '所在教学楼不能为空', trigger: 'change'}],
classNum1: [{required: true, message: '高一班级数量不能为空', trigger: 'blur'}], classNum1: [{required: true, message: '高一班级数量不能为空', trigger: 'blur'}],
classNum2: [{required: true, message: '高二班级数量不能为空', trigger: 'blur'}], classNum2: [{required: true, message: '高二班级数量不能为空', trigger: 'blur'}],
classNum3: [{required: true, message: '高三班级数量不能为空', trigger: 'blur'}], classNum3: [{required: true, message: '高三班级数量不能为空', trigger: 'blur'}],
......
...@@ -619,7 +619,8 @@ import { uploadImage as commonUpload } from '@/api/common' ...@@ -619,7 +619,8 @@ import { uploadImage as commonUpload } from '@/api/common'
import { ExportType, Gender, Nations, Area } from '@/enums/common' import { ExportType, Gender, Nations, Area } from '@/enums/common'
import { getYearList } from '@/utils/utilLibrary/getYearList' import { getYearList } from '@/utils/utilLibrary/getYearList'
import { getNewYear } from "@/api/smartSchool/teachAffairAdministration/affairClassView"; import { getNewYear } from "@/api/smartSchool/teachAffairAdministration/affairClassView";
import * as dd from 'dingtalk-jsapi';
import { im_1_0 } from '@alicloud/dingtalk'
export default { export default {
name: 'AffairStudentManage', name: 'AffairStudentManage',
components: { ClassSelect, PicAvatar }, components: { ClassSelect, PicAvatar },
...@@ -921,17 +922,41 @@ export default { ...@@ -921,17 +922,41 @@ export default {
}) })
}, },
// 学籍证明 // 学籍证明
// studentProve(row) {
// this.$router.push({
// path: '/teachAffairAdministration/studentProve',
// query: {
// id: row.id,
// name: row.studentName,
// idCard: row.idCard,
// schoolNo: row.schoolNo
// }
// })
// },
studentProve(row) { studentProve(row) {
this.$router.push({ console.log('准备跳转');
path: '/teachAffairAdministration/studentProve', const baseUrl = window.location.origin; // 获取当前页面的协议、主机作为前缀URL
query: { // const baseUrl = window.location.protocol + '//' + window.location.host; // 获取当前页面的协议、主机作为前缀URL
id: row.id, console.log('im_1_0', baseUrl);
name: row.studentName, // const url = `http://localhost:1024/studentRegistra?id=${row.id}&name=${row.studentName}&idCard=${row.idCard}&schoolNo=${row.schoolNo}`;
idCard: row.idCard, const newURL = `${baseUrl}/studentRegistra?id=${encodeURIComponent(row.id)}&name=${encodeURIComponent(row.studentName)}&idCard=${encodeURIComponent(row.idCard)}&schoolNo=${encodeURIComponent(row.schoolNo)}`;
schoolNo: row.schoolNo dd.biz.util.openLink({
url: newURL,
// url: url,
onSuccess: () => {
console.log(newURL, 'newURL');
console.log('跳转成功,准备打印');
},
onFail: (err) => {
console.log('跳转失败', err);
} }
}) });
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function () { submitForm: function () {
this.$refs['form'].validate(valid => { this.$refs['form'].validate(valid => {
......
<template>
<div class="app-container">
<div style="width: 100%; display: flex; justify-content: center; flex-wrap: nowrap;">
<!-- <el-button type="primary" plain size="mini" @click="closeCurrentTab">关闭
</el-button> -->
<el-button type="primary" plain size="mini" @click="downloadProve">下载
</el-button>
<el-button type="primary" plain size="mini" @click="printTable">打印
</el-button>
</div>
<el-card :style="{ width: '850px', height: clientHeight, margin: '0 auto' }">
<div id="postFormContainer">
<br /><br />
<div style="display: block; font-weight: 600; font-size: 35px; text-align: center">学籍证明</div>
<br />
<span style="display: block; font-size: 25px; text-indent:50px; line-height: 40px">
{{ studentInfo.studentName }}同学,身份证号{{ studentInfo.idCard }} ,性别{{
studentInfo.sex
}}{{ studentInfo.birthday }}生,
省学籍辅号{{ studentInfo.schoolNo }},全国学籍号{{
studentInfo.nationalNumber
}},系东营市第二中学{{ studentInfo.enrollmentYear }}{{ studentInfo.classValue }}班学生,特此证明。
</span>
<br /><br /><br />
<div style="width: 100%; display:flex; justify-content: center; font-size:20px;">
<div>
<el-image style="width: 160px; height: 200px" :src="url"></el-image>
<br />
<div style="text-align: center">山东学籍管理</div>
</div>
</div>
<br /><br /><br />
<div style="position: relative; background: #1ab394">
<div style="position: absolute; right: 30px; font-size: 20px ">
<span>东营市第二中学</span>
<br /><br />
<span> {{ time }}</span>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script>
import printJS from "print-js";
import { closeCurrentTab } from "@/utils/utilLibrary/routerBatch/routerBatch.js";
import { getStudent } from '@/api/smartSchool/teachAffairAdministration/affairStudentManage'
export default {
name: 'StudentProve',
data() {
return {
clientHeight: document.body.scrollHeight + 'px',
baseUrl: process.env.VUE_APP_BASE_API,
studentInfo: {},
url: '',
time: " ",
}
},
components: {},
methods: {
closeCurrentTab,
getImage() {
const studentId = this.$route.query.id;
getStudent(studentId).then((res) => {
this.studentInfo = res.data
if (res.data.sex == 0) {
this.studentInfo.sex = "男"
} else {
this.studentInfo.sex = "女"
}
if (res.data.birthday.charAt(5) == 0) {
if (res.data.birthday.charAt(8) == 0) {
this.studentInfo.birthday = res.data.birthday.slice(0, 4) + "年" + res.data.birthday.slice(6, 7) + "月" + res.data.birthday.slice(9, 10) + "日"
} else {
this.studentInfo.birthday = res.data.birthday.slice(0, 4) + "年" + res.data.birthday.slice(6, 7) + "月" + res.data.birthday.slice(8, 10) + "日"
}
} else {
if (res.data.birthday.charAt(8) == 0) {
this.studentInfo.birthday = res.data.birthday.slice(0, 4) + "年" + res.data.birthday.slice(5, 7) + "月" + res.data.birthday.slice(9, 10) + "日"
} else {
this.studentInfo.birthday = res.data.birthday.slice(0, 4) + "年" + res.data.birthday.slice(5, 7) + "月" + res.data.birthday.slice(8, 10) + "日"
}
}
this.url = this.baseUrl + this.studentInfo.avatar
console.log(this.url, 107)
});
},
// 打印
printTable() {
// 重置表单
printJS({
printable: 'postFormContainer',
targetStyles: ['*'],
type: "html",
})
},
/**
* 获取当前时间
*/
currentTime() {
var date = new Date();
var year = date.getFullYear(); //月份从0~11,所以加一
let month = date.getMonth();
console.log("month", month);
var dateArr = [
date.getMonth() + 1,
date.getDate(),
];
var strDate =
year + "年" + dateArr[0] + "月" + dateArr[1] + "日"
console.log("strDate", strDate);
return strDate
},
downloadProve() {
this.download(`/school/studentStatus/proofStatus/${this.$route.query.id}`, {}, `${this.studentInfo.studentName}.docx`)
},
},
created() {
this.getImage()
this.time = this.currentTime()
},
activated() {
this.getImage()
this.time = this.currentTime()
}
}
</script>
<style scoped></style>
<!--数据维护 --> <!--数据维护 -->
<template> <template>
<div> <div>
<el-form style="margin-top: 20px;margin-left: 20px;" :inline="true" :model="queryForm" class="demo-form-inline"> <el-form
style="margin-top: 20px; margin-left: 20px"
:inline="true"
:model="queryForm"
class="demo-form-inline"
>
<el-form-item label="级部:"> <el-form-item label="级部:">
<el-input v-model="queryForm.level" placeholder="请输入级部"></el-input> <el-input
v-model="queryForm.gradeName"
placeholder="请输入级部"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="姓名:"> <el-form-item label="姓名:">
<el-input v-model="queryForm.name" placeholder="请输入姓名"></el-input> <el-input
v-model="queryForm.teacherName"
placeholder="请输入姓名"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任教学科:"> <el-form-item label="任教学科:">
<el-input v-model="queryForm.name" placeholder="请输入任教学科"></el-input> <el-input
v-model="queryForm.courseName"
placeholder="请输入任教学科"
></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="mini" icon="el-icon-search" type="primary" @click="handleQuery">搜索</el-button> <el-button
<el-button size="mini" icon="el-icon-refresh" @click="resetQuery">重置</el-button> size="mini"
icon="el-icon-search"
type="primary"
@click="handleQuery"
>搜索</el-button
>
<el-button size="mini" icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table style="margin-top: 20px;" border :data="tableData"> <el-table style="margin-top: 20px" border :data="tableData">
<el-table-column type="index" label="序号" width="55" align="center"/> <el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="学年学期" align="center" prop="schoolYear" min-width="200"/> <el-table-column
<el-table-column label="级部" align="center" prop="level" min-width="150"/> label="学年学期"
<el-table-column label="姓名" align="center" min-width="150" prop="name"/> align="center"
<el-table-column label="身份证号" align="center" min-width="200" prop="IDNum"/> prop="filesSemester"
<el-table-column label="进度" align="center" min-width="150" prop="schedule"/> min-width="200"
<el-table-column fixed="right" label="操作" align="center" min-width="200"> />
<el-table-column
label="级部"
align="center"
prop="gradeName"
min-width="150"
/>
<el-table-column
label="姓名"
align="center"
min-width="150"
prop="teacherName"
/>
<el-table-column
label="任教学科"
align="center"
min-width="200"
prop="courseName"
/>
<el-table-column
label="进度"
align="center"
min-width="150"
prop="state"
/>
<el-table-column
fixed="right"
label="操作"
align="center"
min-width="200"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button size="mini" type="text" @click="handleCheck(scope.row)"
size="mini" >查看
type="text"
@click="handleCheck(scope.row)">查看
</el-button> </el-button>
<el-button <el-button
:disabled="status == '已结束' ? true:false" :disabled="status == '已结束' ? true : false"
size="mini" size="mini"
type="text" type="text"
@click="handleEdit(scope.row)">修改 @click="handleEdit(scope.row)"
>修改
</el-button> </el-button>
<el-button <el-button
:disabled="status == '已结束' ? true:false" :disabled="status == '已结束' ? true : false"
size="mini" size="mini"
type="text" type="text"
@click="handleDelete(scope.row)">删除 @click="handleDelete(scope.row)"
>删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="total>0" v-show="total > 0"
:total="total" :total="total"
:page.sync="queryForm.pageNum" :page.sync="queryForm.pageNum"
:limit.sync="queryForm.pageSize" :limit.sync="queryForm.pageSize"
@pagination="getList" @pagination="getList"
/> />
<!--弹窗--> <!--弹窗-->
<el-dialog <el-dialog :title="title" :visible.sync="dialogVisible" width="100%">
:title=title <div style="display: flex">
:visible.sync="dialogVisible"
width="100%">
<div style="display:flex;">
<div class="leftContent"> <div class="leftContent">
<div style="margin-bottom: 10px"> <div style="margin-bottom: 10px">
<span class="line"></span> <span class="line"></span>
<span class="title">基本信息</span> <span class="title">基本信息</span>
</div> </div>
<el-form size="mini" ref="form" label-position="left" :model="dialogForm" label-width="120px"> <el-form
size="mini"
ref="form"
label-position="left"
:model="form"
label-width="120px"
>
<el-form-item label="学年学期:" style="padding-right: 10px"> <el-form-item label="学年学期:" style="padding-right: 10px">
<el-input readonly v-model="dialogForm.name"></el-input> <el-input v-model="form.filesSemester"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="级部:" style="padding-right: 10px"> <el-form-item label="级部:" style="padding-right: 10px">
<el-input readonly v-model="dialogForm.name"></el-input> <el-input v-model="form.gradeName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="姓名:" style="padding-right: 10px"> <el-form-item label="姓名:" style="padding-right: 10px">
<el-input readonly v-model="dialogForm.name"></el-input> <el-input v-model="form.teacherName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="性别:" style="padding-right: 10px"> <el-form-item label="性别:" style="padding-right: 10px">
<el-input readonly v-model="dialogForm.name"></el-input> <el-input v-model="form.sex"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="年龄:" style="padding-right: 10px"> <el-form-item label="年龄:" style="padding-right: 10px">
<el-input readonly v-model="dialogForm.name"></el-input> <el-input v-model="form.age"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="职称:" style="padding-right: 10px"> <el-form-item label="职称:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.title"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="学历:" style="padding-right: 10px"> <el-form-item label="学历:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.education"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="政治面貌:" style="padding-right: 10px"> <el-form-item label="政治面貌:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.appearance"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任教学科:" style="padding-right: 10px"> <el-form-item label="任教学科:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.courseName"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任教班级:" style="padding-right: 10px"> <el-form-item label="任教班级:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.className"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任正班主任班级:" style="padding-right: 10px"> <el-form-item label="任正班主任班级:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.bzrClassName"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任副班主任班级:" style="padding-right: 10px"> <el-form-item label="任副班主任班级:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.fbzrClassName"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="是否教学组长:" style="padding-right: 10px"> <el-form-item label="是否教学组长:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.isTeachingGroupleader"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="是否教研组长:" style="padding-right: 10px"> <el-form-item label="是否教研组长:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.isResearchGroupLeader"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="设计课时量:" style="padding-right: 10px"> <el-form-item label="设计课时量:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.classHour"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="班主任情况:" style="padding-right: 10px"> <el-form-item label="班主任情况:" style="padding-right: 10px">
<el-input :readonly="check == true ? true:false" v-model="dialogForm.name"></el-input> <el-input
:="check == true ? true : false"
v-model="form.classTeacherDetails"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="display: flex;justify-content: center" slot="footer" class="dialog-footer"> <span
style="display: flex; justify-content: center"
slot="footer"
class="dialog-footer"
>
<div v-if="check == false"> <div v-if="check == false">
<el-button size="small" type="primary" @click="confirmDialog">保 存</el-button> <el-button size="small" type="primary" @click="confirmDialog"
<el-button size="small" @click="dialogVisible = false">取 消</el-button> >保 存</el-button
>
<el-button size="small" @click="dialogVisible = false"
>取 消</el-button
>
</div> </div>
<el-button v-else type="primary" size="small" @click="dialogVisible = false">关 闭</el-button> <el-button
v-else
</span> type="primary"
size="small"
@click="dialogVisible = false"
>关 闭</el-button
>
</span>
</div> </div>
<div class="rightContent"> <div class="rightContent">
<div style="margin-bottom: 10px"> <div style="margin-bottom: 10px">
<span class="line"></span> <span class="line"></span>
<span class="title">教育科研</span> <span class="title">教育科研</span>
<el-button type="success" size="mini" style="float: right;margin-right: 50px;margin-top: 10px;">提 取 <el-button
type="success"
size="mini"
style="float: right; margin-right: 50px; margin-top: 10px"
@click="handleExtract"
>提 取
</el-button> </el-button>
</div> </div>
<div class="tableList"> <div class="tableList">
...@@ -135,110 +241,96 @@ ...@@ -135,110 +241,96 @@
<i class="el-icon-collection"></i> <i class="el-icon-collection"></i>
<span style="margin-left: 5px">发表成就奖论文情况</span> <span style="margin-left: 5px">发表成就奖论文情况</span>
</div> </div>
<el-table <el-table :data="tableFirstData" border>
:data="tableFirstData" <el-table-column align="center" fixed type="index" label="序号">
border>
<el-table-column
align="center"
fixed
type="index"
label="序号">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="name" prop="thesisList.thesisName"
label="论文名称"> label="论文名称"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="province" prop="thesisList.level"
label="级别"> label="级别"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="city" prop="thesisList.grade"
label="等级"> label="等级"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="address" prop="thesisList.publishTime"
label="发表时间"> label="发表时间"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" label="附件">
align="center" <!-- <template slot-scope="scope">
label="附件">
<template slot-scope="scope">
<el-link type="success" href=""></el-link> <el-link type="success" href=""></el-link>
</template> </template> -->
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="tableSecond"> <div class="tableSecond">
<div class="tableTitle"> <div class="tableTitle">
<i class="el-icon-edit-outline"></i> <i class="el-icon-edit-outline"></i>
<span style="margin-left: 5px">课题、结题、专著、校本教材编写情况</span> <span style="margin-left: 5px"
>课题、结题、专著、校本教材编写情况</span
>
</div> </div>
<el-table <el-table :data="tableSecondData" border>
:data="tableSecondData" <el-table-column align="center" fixed type="index" label="序号">
border>
<el-table-column
align="center"
fixed
type="index"
label="序号">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="name" prop="materialList.name"
label="名称"> label="名称"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="address" prop="materialList.publishTime"
label="发表时间"> label="发表时间"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" label="附件">
align="center"
label="附件">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link type="success" href=""></el-link> <el-link type="success" href=""></el-link>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="tableThird"> <div class="tableThird">
<div class="tableTitle"> <div class="tableTitle">
<i class="el-icon-data-analysis"></i> <i class="el-icon-data-analysis"></i>
<span style="margin-left: 5px">发表成就奖论文情况</span> <span style="margin-left: 5px">发表成就奖论文情况</span>
</div> </div>
<el-table <el-table :data="tableThirdData" border>
:data="tableThirdData" <el-table-column align="center" fixed type="index" label="序号">
border>
<el-table-column
align="center"
fixed
type="index"
label="序号">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="name" prop="trainingList.trainingTime"
label="培训时间"> label="培训时间"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="address" prop="trainingList.trainingName"
label="培训名称"> label="培训名称"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="address" prop="trainingList.isQualified"
label="是否合格"> label="是否合格"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" label="附件">
align="center"
label="附件">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link type="success" href=""></el-link> <el-link type="success" href=""></el-link>
</template> </template>
...@@ -249,57 +341,57 @@ ...@@ -249,57 +341,57 @@
<div class="tableTitle"> <div class="tableTitle">
<i class="el-icon-trophy"></i> <i class="el-icon-trophy"></i>
<span style="margin-left: 5px">发表成就奖论文情况</span> <span style="margin-left: 5px">发表成就奖论文情况</span>
</div> </div>
<el-table <el-table :data="tableForthData" border>
:data="tableForthData" <el-table-column align="center" fixed type="index" label="序号">
border>
<el-table-column
align="center"
fixed
type="index"
label="序号">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="name" prop="awardList.awardName"
label="获奖名称"> label="获奖名称"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="address" prop="awardList.awardTime"
label="获奖时间"> label="获奖时间"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="address" prop="awardList.gradeOfAward"
label="获奖等级"> label="获奖等级"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="address" prop="awardList.licenselssuingAuthority"
label="发证机关"> label="发证机关"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" label="附件">
align="center"
label="附件">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link type="success" href=""></el-link> <!-- <el-link type="success" href=""></el-link> -->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import {
getteacherNotice, // 通知下档案查看|数据维护
getNoticeInfo, //查看档案详情
getFileTnfo, //查看档案详情
getDepInfo, //级部查询列表
syncNotice, // 同步档案
} from "@/api/smartSchool/teacherFiles/teacherElectronicFile";
export default { export default {
name: "dataReceiver", name: "dataReceiver",
data() { data() {
...@@ -309,116 +401,140 @@ export default { ...@@ -309,116 +401,140 @@ export default {
// 总条数 // 总条数
total: 0, total: 0,
queryForm: { queryForm: {
level: '', pageNum: 1,
name: '', pageSize: 10,
region: '' courseName: "",
filesSemester: "",
gradeName: "",
teacherName: "",
}, },
tableData: [{ tableData: [],
schoolYear: '2022学年上学期',
level: '2022级部',
name: '张三',
IDNum: '121212121212121212',
schedule: '未填写'
}],
dialogVisible: false, dialogVisible: false,
form: {}, form: {},
status: this.$route.query.status, status: this.$route.query.noticeState,
dialogTableData: [{
level: '2022',
name: '李四',
ID: '12121212121212'
}],
check: false, check: false,
//弹窗表单 //弹窗表单
dialogForm: {}, form: {
filesSemester: "",
gradeName: "",
teacherName: "",
sex: "",
age: "",
title: "",
education: "",
appearance: "",
courseName: "",
className: "",
bzrClassName: "",
isTeachingGroupleader: "",
isResearchGroupLeader: "",
classHour: "",
classTeacherDetails: "",
},
//弹窗标题 //弹窗标题
title: '', title: "",
//弹窗表格1 //发表成就奖论文情况
tableFirstData: [], tableFirstData: [],
//弹窗表格2 //课题、结题、专著、校本教材编写情况
tableSecondData: [], tableSecondData: [],
//弹窗表格3
tableThirdData: [], tableThirdData: [],
//弹窗表格4 tableForthData: [],
tableForthData: [] };
}
}, },
mounted() { mounted() {
console.log('id', this.$route.query.id) // console.log("id", this.$route.query.noticeId);
console.log('status', this.status) // console.log("status", this.$route.query.noticeState);
this.getList();
}, },
methods: { methods: {
/** 查询信息列表 */ /** 查询信息列表 */
getList() { getList() {
this.loading = true; const params = {
//接口 pageNum: this.queryForm.pageNum,
// listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => { pageSize: this.queryForm.pageSize,
// this.userList = response.rows; noticeId: this.$route.query.noticeId,
// this.total = response.total; };
// this.loading = false; getteacherNotice(params).then((res) => {
// } this.tableData = res.rows;
this.total = res.total;
});
}, },
// 搜索按钮 // 搜索按钮
handleQuery() { handleQuery() {
this.queryParams.pageNum = 1; this.queryForm.pageNum = 1;
this.getList() this.queryForm.pageSize = 10;
this.getList();
}, },
// 重置按钮 // 重置按钮
resetQuery() { resetQuery() {
this.queryForm = { this.queryForm = {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
level: '', level: "",
name: '', name: "",
region: '' region: "",
} };
this.handleQuery() this.handleQuery();
}, },
//查看按钮 //查看按钮
handleCheck(row) { handleCheck(row) {
this.check = true this.dialogVisible = true;
this.title = '基本信息查看' const id = row.id;
this.dialogVisible = true getFileTnfo(id).then((res) => {
this.form = res.data;
this.title = "基本信息查看";
});
},
// 提取
handleExtract(row) {
console.log(row, "row提取");
this.dialogVisible = true;
const id = row.detail;
syncNotice(id).then((res) => {
console.log(res, "提取");
});
}, },
//修改按钮 //修改按钮
handleEdit(row) { handleEdit(row) {
this.check = false this.check = false;
this.title = '基本信息修改' this.title = "基本信息修改";
this.dialogVisible = true this.dialogVisible = true;
}, },
//弹窗确定按钮 //弹窗确定按钮
confirmDialog() { confirmDialog() {
this.dialogVisible = false this.dialogVisible = false;
}, },
//多选按钮 //多选按钮
handleSelectionChange(select) { handleSelectionChange(select) {
console.log('select', select) console.log("select", select);
}, },
// 删除按钮 // 删除按钮
handleDelete(row) { handleDelete(row) {
//判断,如果进度是未填写可以直接删除不需要提醒 //判断,如果进度是未填写可以直接删除不需要提醒
//如果是其他状态需要提示相应的状态 //如果是其他状态需要提示相应的状态
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', { this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
confirmButtonText: '确定', confirmButtonText: "确定",
cancelButtonText: '取消', cancelButtonText: "取消",
type: 'warning' type: "warning",
}).then(() => { })
this.$message({ .then(() => {
type: 'success', this.$message({
message: '删除成功!' type: "success",
}); message: "删除成功!",
}).catch(() => { });
this.$message({ })
type: 'info', .catch(() => {
message: '已取消删除' this.$message({
type: "info",
message: "已取消删除",
});
}); });
}); },
} },
} };
}
</script> </script>
<style scoped> <style scoped>
...@@ -453,7 +569,5 @@ export default { ...@@ -453,7 +569,5 @@ export default {
padding-left: 10px; padding-left: 10px;
font-size: 16px; font-size: 16px;
vertical-align: middle; vertical-align: middle;
} }
</style> </style>
<template> <template>
<div style="margin-top: 20px;margin-left: 20px"> <div style="margin-top: 20px; margin-left: 20px">
<el-form ref="queryForm" :inline="true" :model="queryForm" class="demo-form-inline"> <el-form
ref="queryForm"
:inline="true"
:model="queryForm"
class="demo-form-inline"
>
<el-form-item label="任务名称:"> <el-form-item label="任务名称:">
<el-input v-model="queryForm.user" placeholder="请输入任务名称"></el-input> <el-input
v-model="queryForm.noticeName"
placeholder="请输入任务名称"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任务状态:"> <el-form-item label="任务状态:">
<el-select v-model="queryForm.region" placeholder="请选择任务状态"> <el-select v-model="queryForm.noticeState" placeholder="请选择任务状态">
<el-option label="区域一" value="shanghai"></el-option> <el-option label="未发布" value="1"></el-option>
<el-option label="区域二" value="beijing"></el-option> <el-option label="已发布" value="2"></el-option>
<el-option label="已结束" value="3"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> icon="el-icon-search"
<el-button icon="el-icon-plus" size="mini" type="success" @click="handleAdd">新增</el-button> size="mini"
type="primary"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
<el-button
icon="el-icon-plus"
size="mini"
type="success"
@click="handleAdd"
>新增</el-button
>
<!-- <el-button size="small" type="warning">修改</el-button>--> <!-- <el-button size="small" type="warning">修改</el-button>-->
<!-- <el-button size="small" type="primary">查看</el-button>--> <!-- <el-button size="small" type="primary">查看</el-button>-->
<el-button icon="el-icon-delete" size="mini" type="danger" @click="handleDeleteMuti">删除</el-button> <el-button
icon="el-icon-delete"
size="mini"
type="danger"
@click="handleDeleteMuti"
>删除</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div> <div></div>
</div> <el-table
<el-table style="margin-top: 20px;" border :data="tableData" @selection-change="handleSelectionChange"> style="margin-top: 20px"
<el-table-column type="selection" width="55" align="center"/> border
<el-table-column type="index" label="序号" width="55" align="center"/> :data="tableData"
<el-table-column label="范围" align="center" prop="range" min-width="100"/> @selection-change="handleSelectionChange"
<el-table-column label="任务名称" align="center" prop="name" min-width="220"/> >
<el-table-column label="开始时间" align="center" min-width="100" prop="statrtTime"/> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="结束时间" align="center" min-width="100" prop="endTime"/> <el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="教师人数" align="center" min-width="100" prop="teacherNum"/> <el-table-column
<el-table-column label="填写人数" align="center" min-width="100" prop="fillNum"/> label="范围"
<el-table-column label="级部确认" align="center" min-width="100" prop="levelConfirm"/> align="center"
<el-table-column label="状态" align="center" min-width="100" prop="status"/> prop="noticeRange"
min-width="100"
<el-table-column fixed="right" label="操作" align="center" min-width="280"> />
<el-table-column
label="任务名称"
align="center"
prop="noticeName"
min-width="220"
/>
<el-table-column
label="开始时间"
align="center"
min-width="100"
prop="startTime"
/>
<el-table-column
label="结束时间"
align="center"
min-width="100"
prop="endTime"
/>
<el-table-column
label="教师人数"
align="center"
min-width="100"
prop="total"
/>
<el-table-column
label="填写人数"
align="center"
min-width="100"
prop="txtotal"
/>
<el-table-column
label="级部确认"
align="center"
min-width="100"
prop="tgtotal"
/>
<el-table-column
label="状态"
align="center"
min-width="100"
prop="noticeState"
>
<template slot-scope="{ row }">
{{
row.noticeState == 1 ? "未发布" : 2 ? "已发布" : 3 ? "已结束" : ""
}}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
align="center"
min-width="280"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div> <div>
<el-button <el-button
v-if="scope.row.noticeState == '1'"
type="text" type="text"
size="mini" size="mini"
@click="handleEdit(scope.row)">修改 @click="handleEdit(scope.row)"
>修改
</el-button> </el-button>
<el-button <el-button
v-if="scope.row.noticeState == '1'"
size="mini" size="mini"
type="text" type="text"
@click="handleDelete(scope.row)">删除 @click="handleDelete(scope.row)"
>删除
</el-button> </el-button>
<el-button <el-button
v-if="scope.row.noticeState == '1'"
size="mini" size="mini"
type="text" type="text"
@click="handlePublish(scope.row)">发布 @click="handlePublish(scope.row)"
>发布
</el-button> </el-button>
</div> </div>
<div> <div>
<el-button <!-- v-if="scope.row.noticeState == '2'" -->
size="mini" <el-button size="mini" type="text" @click="dataReceiver(scope.row)"
type="text" >数据接收人员
@click="dataReceiver(scope.row)">数据接收人员
</el-button> </el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@click="dataMaintenance(scope.row)">数据维护 @click="dataMaintenance(scope.row)"
>数据维护
<!-- v-if="scope.row.noticeState == '2'" -->
</el-button> </el-button>
<el-button <el-button
v-if="scope.row.noticeState == '2'"
size="mini" size="mini"
type="text" type="text"
@click="handleExport(scope.row)">导出 @click="handleExport(scope.row)"
>导出
</el-button> </el-button>
<el-button <el-button
v-if="scope.row.noticeState == '2'"
size="mini" size="mini"
type="text" type="text"
@click="handleRevocation(scope.row)">撤回 @click="handleRevocation(scope.row)"
>撤回
</el-button> </el-button>
<el-button <el-button
v-if="scope.row.noticeState == '2'"
size="mini" size="mini"
type="text" type="text"
@click="handleFinish(scope.row)">结束 @click="handleFinish(scope.row)"
>结束
</el-button> </el-button>
</div> </div>
<div> <div>
<el-button <el-button
v-if="scope.row.noticeState == '3'"
size="mini" size="mini"
type="text" type="text"
@click="dataReceiver(scope.row)">数据接收人员 @click="dataReceiver(scope.row)"
>数据接收人员
</el-button> </el-button>
<el-button <el-button
v-if="scope.row.noticeState == '3'"
size="mini" size="mini"
type="text" type="text"
@click="dataMaintenance(scope.row)">数据维护 @click="dataMaintenance(scope.row)"
>数据查看
</el-button> </el-button>
<el-button <el-button
v-if="scope.row.noticeState == '3'"
size="mini" size="mini"
type="text" type="text"
@click="handleExport(scope.row)">导出 @click="handleExport(scope.row)"
>导出
</el-button> </el-button>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="total>0" v-show="total > 0"
:total="total" :total="total"
:page.sync="queryForm.pageNum" :page.sync="queryForm.pageNum"
:limit.sync="queryForm.pageSize" :limit.sync="queryForm.pageSize"
...@@ -109,40 +210,77 @@ ...@@ -109,40 +210,77 @@
/> />
<!--弹窗--> <!--弹窗-->
<el-dialog <el-dialog
:title=title :title="title"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
width="30%"> width="650px
"
>
<el-form ref="form" :model="form" label-width="120px"> <el-form ref="form" :model="form" label-width="120px">
<el-form-item label="任务名称:"> <el-form-item label="任务名称">
<el-input style="width: 220px;" v-model="form.name"></el-input> <el-date-picker
v-model="form.noticeYear"
type="year"
value-format="yyyy"
placeholder="选择年"
>
</el-date-picker>
<el-select v-model="form.noticeSemester" placeholder="请选择学期">
<el-option label="上学期" value="上学期"></el-option>
<el-option label="下学期" value="下学期"></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="范围:"> <el-form-item label="范围:">
<el-input style="width: 220px;" readonly v-model="form.range"></el-input> <el-input
style="width: 440px"
v-model="form.noticeRange"
readonly
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="开始时间:"> <el-form-item label="开始时间:">
<el-date-picker <el-date-picker
style="width: 440px"
v-model="form.startTime" v-model="form.startTime"
type="date" type="date"
placeholder="选择日期"> value-format="yyyy-MM-dd"
placeholder="选择日期"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="结束时间:"> <el-form-item label="结束时间:">
<el-date-picker <el-date-picker
style="width: 440px"
v-model="form.endTime" v-model="form.endTime"
type="date" type="date"
placeholder="选择日期"> placeholder="选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="display: flex;justify-content: center" slot="footer" class="dialog-footer"> <span
<el-button @click="dialogVisible = false">取 消</el-button> style="display: flex; justify-content: center"
slot="footer"
class="dialog-footer"
>
<el-button type="primary" @click="confirmDialog">确 定</el-button> <el-button type="primary" @click="confirmDialog">确 定</el-button>
</span> <el-button @click="dialogVisible = false">取 消</el-button>
</span>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import {
listTeacherNotice, // 通知列表
addTeacherNotice, // 添加通知
infoTeacherNotice, // 信息发布
getteacherNotice, // 通知下档案查看|数据维护
getNoticeInfo, //查看档案详情//查看档案详情
syncNotice, // 同步档案
getDepInfo, //级部查询列表
} from "@/api/smartSchool/teacherFiles/teacherElectronicFile";
import { format } from "@/utils/activiti/myUtil.js";
export default { export default {
name: "teacherElectronicRecord", name: "teacherElectronicRecord",
data() { data() {
...@@ -154,20 +292,12 @@ export default { ...@@ -154,20 +292,12 @@ export default {
queryForm: { queryForm: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
user: '', startTime: "",
region: '' endTime: "",
noticeYear: "",
noticeSemester: "",
}, },
tableData: [{ tableData: [],
id: 1,
range: '全体教师',
name: '2022学年上学期教师档案填写',
statrtTime: '2023/08/30',
endTime: '2023/08/30',
teacherNum: '124',
fillNum: '50',
levelConfirm: '40',
status: '未发布',
}],
// 选中数组 // 选中数组
ids: [], ids: [],
// 非单个禁用 // 非单个禁用
...@@ -177,124 +307,148 @@ export default { ...@@ -177,124 +307,148 @@ export default {
// 弹窗 // 弹窗
dialogVisible: false, dialogVisible: false,
// 弹窗标题 // 弹窗标题
title: '', title: "",
form: {}, form: {
} noticeSemester: "",
noticeRange: "全体教师",
startTime: "",
endTime: "",
},
};
}, },
created() { created() {
this.getList() this.getList();
}, },
methods: { methods: {
/** 查询信息列表 */ /** 查询信息列表 */
getList() { getList() {
this.loading = true; listTeacherNotice(this.queryForm).then((res) => {
//接口 console.log("res", res);
// listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => { this.tableData = res.rows;
// this.userList = response.rows; // this.tableData.forEach((row) => {
// this.total = response.total; // row.startTime = format(row.startTime, "yyyy-MM-dd HH:mm:ss");
// this.loading = false; // row.endTime = format(row.endTime, "yyyy-MM-dd HH:mm:ss");
// } // });
this.total = res.total;
});
}, },
//搜索按钮 //搜索按钮
handleQuery() { handleQuery() {
this.queryParams.pageNum = 1; this.queryForm.pageNum = 1;
this.getList() this.getList();
}, },
// 表单重置 // 表单重置
reset() { reset() {
this.form = { this.queryForm = {
name: '', noticeYear: "",
range: '全体教师', noticeSemester: "",
startTime: '', noticeRange: "",
endTime: '' noticeState: "",
noticeName: "",
startTime: "",
endTime: "",
}; };
this.resetForm("form"); this.resetForm("queryForm");
}, },
//重置按钮 //重置按钮
resetQuery() { resetQuery() {
this.queryForm.user = '', this.reset();
this.queryForm.region = '', this.handleQuery();
this.handleQuery();
}, },
// 多选框选中数据 // 多选框选中数据
handleSelectionChange(selection) { handleSelectionChange(selection) {
console.log('selection', selection) console.log("selection", selection);
this.ids = selection.map(item => item.id) this.ids = selection.map((item) => item.id);
console.log('this.ids', this.ids) console.log("this.ids", this.ids);
this.single = selection.length !== 1 this.single = selection.length !== 1;
this.multiple = !selection.length this.multiple = !selection.length;
}, },
//新增按钮 //新增按钮
handleAdd() { handleAdd() {
this.reset() this.reset();
this.form.name = '2023' this.form.name = "2023";
this.title = '新增任务' this.title = "新增任务";
this.dialogVisible = true this.dialogVisible = true;
}, },
//弹窗确定按钮 //弹窗确定按钮
confirmDialog() { confirmDialog() {
this.dialogVisible = false addTeacherNotice(this.form).then((res) => {
console.log(res, "弹窗确定");
this.dialogVisible = false;
this.getList();
});
}, },
//多选删除按钮 //多选删除按钮
handleDeleteMuti() { handleDeleteMuti() {
console.log('delete ids', this.ids) console.log("delete ids", this.ids);
// 接口 // 接口
}, },
//修改按钮 //修改按钮
handleEdit(row) { handleEdit(row) {
this.title = '修改任务' this.title = "修改任务";
this.dialogVisible = true
this.dialogVisible = true;
}, },
// 删除按钮 // 删除按钮
handleDelete(row) { handleDelete(row) {},
},
// 发布按钮 // 发布按钮
handlePublish(row) { handlePublish(row) {
this.$modal
.confirm("是否确认发布此信息?")
.then(() => {
return infoTeacherNotice(row.id);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("发布成功");
})
.catch((exception) => {
throw new Error(exception);
});
}, },
// 数据接收人员按钮 // 数据接收人员按钮
dataReceiver(row) { dataReceiver(row) {
//传值状态,如果是已结束跳过去只能查看,已发布可以新增或者删除 //传值状态,如果是已结束跳过去只能查看,已发布可以新增或者删除
console.log('row', row) console.log("row", row);
this.$router.push({ this.$router.push({
path: '/teachAffairAdministration/smartSchool/teachAffairAdministration/electronicRecord/dataReceiver', path: "/teachAffairAdministration/smartSchool/teachAffairAdministration/electronicRecord/dataReceiver",
query: { query: {
id: row.id, id: row.id,
status:row.status status: row.status,
} },
}) });
}, },
// 数据维护按钮 // 数据维护按钮
dataMaintenance(row) { dataMaintenance(row) {
console.log('数据维护按钮row', row) const noticeId = row.id;
const pageNum = this.queryForm.pageNum;
const pageSize = this.queryForm.pageSize;
// const status
//传值状态,如果是已结束跳过去只能查看,已发布可以新增或者删除 //传值状态,如果是已结束跳过去只能查看,已发布可以新增或者删除
this.$router.push({ this.$router.push({
path: '/teachAffairAdministration/smartSchool/teachAffairAdministration/electronicRecord/dataMaintenance', path: "/teachAffairAdministration/smartSchool/teachAffairAdministration/electronicRecord/dataMaintenance",
query: { query: {
id: row.id, noticeId,
status:row.status pageNum,
} pageSize,
}) status: row.noticeState,
},
});
console.log(noticeId, "数据维护按钮id");
console.log(pageNum, "数据维护按钮num");
console.log(pageSize, "数据维护按钮size");
}, },
// 导出按钮 // 导出按钮
handleExport(row) { handleExport(row) {},
},
// 撤回按钮 // 撤回按钮
handleRevocation(row) { handleRevocation(row) {},
},
// 结束按钮 // 结束按钮
handleFinish(row) { handleFinish(row) {},
} },
} };
}
</script> </script>
<style scoped> <style scoped></style>
</style>
<template>
<div class="app-container">
<el-row>
<el-col :span="4">
<el-card style="height: 950px">
<el-form :model="queryParams" style="border-bottom: 1px solid #dfe6ec; padding: 10px 0 0 5px">
<el-form-item label="班级信息" prop="schoolYear">
<el-select v-model="queryParams.schoolYear" @change="getTreeData" style="width: 100%" size="mini">
<el-option v-for="item in yearList" :key="item.value" :value="item.value" :label="item.label">
</el-option>
</el-select>
</el-form-item>
<el-form-item></el-form-item>
</el-form>
<el-tree ref="tree" node-key="id" :data="treeData" :expand-on-click-node="false" highlight-current
default-expand-all @node-click="handleNodeClick"></el-tree>
<!-- </div>-->
</el-card>
</el-col>
<el-col :span="20">
<el-card style="height: 950px" class="mt50">
<el-row>
<el-col :span="8">
<el-form :inline="true" :model="formData" style="padding: 12px 0 0 0">
<!-- <el-form-item>-->
<!-- <el-button type="primary" plain size="mini"-->
<!-- @click="printTable">打印-->
<!-- </el-button>-->
<!-- </el-form-item>-->
<el-form-item label="学期" prop="termId">
<el-select v-model="formData.termId" @change="courseInfo" placeholder="请选择学期">
<el-option label="上学期" value="0"></el-option>
<el-option label="下学期" value="1"></el-option>
</el-select>
</el-form-item>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-upload" size="mini" @click="handleImport">导入
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出
</el-button>
</el-col>
</el-row>
</el-form>
</el-col>
<el-col :span="8">
<div class="trash" id="trashId" draggable @dragenter="trashDragenter" @dragover="trashDragover"
@dragleave="trashDragLeave" @drop="trashDrop">
<i style="font-size: 40px; pointer-events: none" class="el-icon-delete"></i>
</div>
</el-col>
<el-col :span="5" :offset="3">
<div style="
width: 100%;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
">
<el-button type="primary" plain @click="printTable">打 印
</el-button>
<br />
<el-button type="primary" class="affirmCourse" size="medium" @click="getTableValue">确认课表信息
</el-button>
</div>
</el-col>
</el-row>
<br />
<el-row>
<el-col :span="21">
<div class="course">
<el-table id="postFormContainer" v-loading="loading" border :key="Math.random()"
:row-style="{ height: '35px' }" :cell-style="{ padding: '0', margin: '0' }" :data="courseList" :row-key="(row) => {
return row.id;
}
" height="710px">
<el-table-column label="节次" min-width="90" align="center">
<template slot-scope="scope">
{{ scope.row.sortName }}
</template>
</el-table-column>
<el-table-column label="时间" align="center" min-width="90">
<template slot-scope="scope">
<span style="font-size: 8px">
{{ scope.row.startTime }}--{{ scope.row.endTime }}</span>
</template>
</el-table-column>
<el-table-column prop="monday.courseName" label="周一" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'monday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'monday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.monday && scope.row.monday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column prop="tuesday.courseName" droppable label="周二" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'tuesday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'tuesday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.tuesday && scope.row.tuesday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column label="周三" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'wednesday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'wednesday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.wednesday && scope.row.wednesday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周四" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'thursday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'thursday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.thursday && scope.row.thursday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周五" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'friday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'friday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.friday && scope.row.friday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column label="周六" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'saturday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'saturday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.saturday && scope.row.saturday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周日" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'sunday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'sunday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.sunday && scope.row.sunday.courseName }}
</div>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col :span="2" :offset="1">
<div class="courseBox">
<div v-for="(item, index) in courseTypeList" :key="item.courseName" draggable @dragstart="(res) => {
dragCloneStart(res, index);
}
" class="courseClone">
{{ item.courseName }}
</div>
</div>
</el-col>
</el-row>
</el-card>
</el-col>
</el-row>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="url"
:disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess"
:auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<!--<div class="el-upload__tip" slot="tip">-->
<!-- <el-checkbox v-model="upload.updateSupport"/>-->
<!-- 是否更新已经存在的用户数据-->
<!--</div>-->
<span>仅允许导入xls、xlsx格式文件。</span>
<!-- <el-link
type="primary"
:underline="false"
style="font-size: 12px; vertical-align: baseline"
@click="importTemplate"
>下载模板
</el-link> -->
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import draggable from "vuedraggable";
import printJS from "print-js";
import {
getNewYear,
getClassType,
getCourseInfo,
getClassTree,
saveClassTable,
} from "@/api/smartSchool/teachAffairAdministration/lessonManage";
import { getYearList } from "@/utils/utilLibrary/getYearList";
import {
getFirstLeafNode,
handleTreeData,
} from "@/utils/utilLibrary/getTreeClass";
import { getToken } from "@/utils/auth";
import { commonUpload } from "@/api/common";
import * as dd from 'dingtalk-jsapi';
export default {
name: "index",
components: {
draggable,
},
dicts: [
"Grade",
"Class",
"grade_type",
"sys_user_sex",
"education",
"student_type",
"child_state",
],
created() {
this.handleYearList(); // 获取年份选择框数组
this.getSession(); //判断当前时间节点处在上学期还是下学期
this.classType(); //获取课程种类
this.newYear(); //获取数据中的最近年份
// this.getTreeData() //获取班级下拉树数据
},
computed: {
// 上传的地址
url: function () {
console.log('')
return `${process.env.VUE_APP_BASE_API}/schoolTimeTable/importTable/${this.formData.classId}/${this.formData.termId}`;
},
},
data() {
return {
currentTreeDatas: {},
loading: false,
//是克隆还是拖动
state: "",
//目标元素的DOM
listText: "",
//被拖动方的信息
dragIndex: "",
dragWeekNum: "",
//目标方的信息
dragAimIndex: "",
dragAimWeekNum: "",
courseTypeList: [], //课程列表
courseList: [], //课程表信息
trashZone: undefined,
minHeight: window.innerHeight - 224,
trashOptions: {
group: {
name: "trash",
draggable: ".dropitem",
put: () => true,
pull: false,
},
},
listDate: [],
activeName: "0",
weeks: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
tableDate: [[], [], [], [], [], [], []],
weekIndex: "",
courseIndex: "",
treeData: [],
queryParams: {
schoolYear: "",
},
formData: {
classId: "",
termId: "",
},
yearList: [],
// 课程表导入参数
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
// updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
},
};
},
methods: {
newYear() {
getNewYear().then((res) => {
// this.$set(queryParams, "schoolYear", Number(res.schoolYear))
this.queryParams.schoolYear = res.schoolYear;
this.getTreeData(); //关键性的一句
});
},
/** 获取班级下拉树数据 */
getTreeData() {
getClassTree(this.queryParams)
.then((response) => {
this.$nextTick(() => {
try {
this.treeData = handleTreeData(
response.data,
this.dict.type.grade_type,
this.dict.type.Grade
);
} catch (exception) {
this.treeData = [];
}
const searchItem = getFirstLeafNode(this.treeData[0]);
this.handleNodeClick.apply(undefined, [searchItem]);
});
})
.catch((error) => {
});
},
// 节点点击事件
handleNodeClick(data) {
this.currentTreeDatas = data
this.formData.classId = data.id;
this.$nextTick(() => {
this.$refs.tree.setCurrentKey(data.id);
});
this.courseInfo();
},
/* ------------------安全线--------------------- */
//获取课程种类列表
classType() {
getClassType().then((res) => {
// this.courseTypeList = res.rows
this.courseTypeList = res.rows.map((item) => {
return {
id: item.id,
courseName: item.courseName,
};
});
});
},
//上传课程表信息给后端保存
getTableValue() {
console.log(306);
this.loading = true;
console.log(this.courseList, 307);
this.courseList.map((item) => {
this.courseTypeList.map((items) => {
if (item.monday["courseName"] == items["courseName"]) {
item.monday["id"] = items.id;
}
if (item.tuesday["courseName"] == items["courseName"]) {
item.tuesday["id"] = items.id;
}
if (item.wednesday["courseName"] == items["courseName"]) {
item.wednesday["id"] = items.id;
}
if (item.thursday["courseName"] == items["courseName"]) {
item.thursday["id"] = items.id;
}
if (item.friday["courseName"] == items["courseName"]) {
item.friday["id"] = items.id;
}
if (item.saturday["courseName"] == items["courseName"]) {
item.saturday["id"] = items.id;
}
if (item.sunday["courseName"] == items["courseName"]) {
item.sunday["id"] = items.id;
}
// return items
});
return item;
});
saveClassTable(
this.formData.classId,
this.formData.termId,
this.courseList
)
.then((res) => {
if (res.code == 200) {
this.loading = false;
this.$modal.msgSuccess("录入成功");
}
})
.catch((err) => {
this.loading = false;
this.$modal.msgError("录入失败");
});
},
//获取课表信息
courseInfo() {
this.loading = true;
getCourseInfo(this.formData)
.then((res) => {
//课表
this.courseList = [];
this.courseList = res.rows;
this.loading = false;
})
.catch((err) => {
});
},
//判断当前时间节点处在上学期还是下学期
getSession() {
let d = new Date();
let n = d.getMonth() + 1;
if (n >= 2 && n < 8) {
//下学期
this.formData.termId = "1";
} else {
//上学期
this.formData.termId = "0";
}
},
handleYearList() {
// 获取年份选择框数组
this.yearList = getYearList();
let a = {};
a.value = new Date().getFullYear() + 1;
a.label = a.value + "年";
this.yearList.unshift(a);
},
//拖动模块
dragstart(event, index, weekNum) {
// 作用于:被拖拽的元素
this.dragIndex = index;
this.dragWeekNum = weekNum;
this.state = "drag";
event.dataTransfer.setData("drag_text", event.target.innerHTML); //1.设置拖拽元素的DOM
},
//右侧课程盒子触发事件
dragCloneStart(event, index) {
// 作用于:被拖拽的元素
console.log(390);
this.dragIndex = index;
this.state = "clone";
// let item = event.target.cloneNode(true);
// event.target.parentElement.insertBefore(item, event.target.parentElement.children[index + 1]);
event.dataTransfer.setData("drag_text", event.target.innerHTML); //1.设置拖拽元素的DOM
},
dragover(event) {
// 作用于:目标元素,每100ms刷新一次
event.preventDefault(); // *********必须声明的事件***********
},
drop(event, index, weekNum) {
event.preventDefault();
//作用于:目标元素
this.dragAimIndex = index;
this.dragAimWeekNum = weekNum;
this.listText = event.target.innerHTML; //3.获取到目标元素的DOM
const drag_text = event.dataTransfer.getData("drag_text"); //2.获取到拖拽元素的DOM
event.target.innerHTML = drag_text; //4.将目标元素更改为拖拽元素
if (this.state == "clone") {
console.log(this.dragAimIndex, this.dragAimWeekNum, 415);
this.courseList[this.dragAimIndex][this.dragAimWeekNum]["courseName"] =
this.courseTypeList[this.dragIndex]["courseName"];
}
},
trashDragenter(event) {
// 作用于:被拖拽的元素
event.preventDefault();
document.getElementById("trashId").style.background = "#fc0101";
},
trashDragover(event) {
// 作用于:目标元素
event.preventDefault(); // *********必须声明的事件***********
},
trashDragLeave(event) {
// 作用于:被拖拽的元素
event.preventDefault();
document.getElementById("trashId").style.background = "white";
},
trashDrop(event) {
//作用于:目标元素
event.preventDefault();
document.getElementById("trashId").style.background = "white";
this.courseList[this.dragIndex][this.dragWeekNum]["courseName"] = null;
this.courseList[this.dragIndex][this.dragWeekNum]["id"] = null;
},
dragend() {
// 作用于:被拖拽的元素
event.preventDefault();
event.target.innerHTML = this.listText;
if (this.state == "drag") {
let temp =
this.courseList[this.dragIndex][this.dragWeekNum]["courseName"];
this.courseList[this.dragIndex][this.dragWeekNum]["courseName"] =
this.courseList[this.dragAimIndex][this.dragAimWeekNum]["courseName"];
this.courseList[this.dragAimIndex][this.dragAimWeekNum]["courseName"] =
temp;
}
},
// 打印
printTable() {
const baseUrl = window.location.protocol + '//' + window.location.host + '/printLesson';
const urlWithParams = `${baseUrl}?courseList=${encodeURIComponent(JSON.stringify(this.courseList))}`;
dd.biz.util.openLink({
url: urlWithParams,
onSuccess: () => {
console.log('跳转成功,准备打印');
// 打印条码
// this.printCode();
},
onFail: (error) => {
console.error('跳转失败', error);
}
});
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "课程表导入";
this.upload.open = true;
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.handleNodeClick(this.currentTreeDatas)
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
},
// 上传成功回调
handleAvatarSuccess(res, file) {
this.imageUrl = res.data.url;
this.commonUpload(file);
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit()
},
// 导出
handleExport() {
this.download(
`/schoolTimeTable/exportTable/${this.formData.classId}/${this.formData.termId}`,
{
...this.queryParams,
},
`课程表_${new Date().getTime()}.xlsx`
);
},
},
};
</script>
<style lang="less">
.course {
height: 700px;
//overflow-y: auto;
//overflow-x: auto;
}
</style>
<style scoped>
.trash {
text-align: center;
width: 350px;
height: 80px;
border: solid 1px black;
border-radius: 5px;
float: left;
line-height: 80px;
}
/*.trash:hover {*/
/* background: red;*/
/* color: #690202;*/
/*}*/
.courseBox {
width: 100%;
/*width: 200px;*/
/*height: 400px;*/
/*margin-top: 110px;*/
/*background: #7a6df0;*/
/*margin-left: 50px*/
}
.courseClone {
/*background: #1ab394;*/
border: 1px solid black;
font-size: 18px;
width: 100px;
height: 50px;
line-height: 40px;
text-align: center;
}
.courseClone:hover {
cursor: pointer;
background: rgba(98, 200, 234, 0.85);
}
.dragBox {
font-size: 20px;
width: 100%;
height: 50px;
line-height: 50px;
text-align: center;
}
.dragBox:hover {
cursor: pointer;
background: rgba(98, 200, 234, 0.85);
}
/deep/ .el-table .cell {
padding-left: 0px;
padding-right: 0px;
}
/*.dragBox[data-v-86c11aba] {*/
/* font-size: 20px;*/
/* width: 100%;*/
/* height: 50px;*/
/* line-height: 50px;*/
/* text-align: center;*/
/*}*/
</style>
<template>
<div class="app-container">
<el-row :gutter="10" class="mb8">
<el-button type="primary" plain @click="printTable">打 印
</el-button>
</el-row>
<el-col :span="21">
<div class="course">
<el-table id="postFormContainer" v-loading="loading" border :key="Math.random()"
:row-style="{ height: '35px' }" :cell-style="{ padding: '0', margin: '0' }" :data="courseList" :row-key="(row) => {
return row.id;
}
" height="710px">
<el-table-column label="节次" min-width="90" align="center">
<template slot-scope="scope">
{{ scope.row.sortName }}
</template>
</el-table-column>
<el-table-column label="时间" align="center" min-width="90">
<template slot-scope="scope">
<span style="font-size: 8px">
{{ scope.row.startTime }}--{{ scope.row.endTime }}</span>
</template>
</el-table-column>
<el-table-column prop="monday.courseName" label="周一" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'monday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'monday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.monday && scope.row.monday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column prop="tuesday.courseName" droppable label="周二" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'tuesday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'tuesday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.tuesday && scope.row.tuesday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column label="周三" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'wednesday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'wednesday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.wednesday && scope.row.wednesday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周四" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'thursday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'thursday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.thursday && scope.row.thursday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周五" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'friday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'friday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.friday && scope.row.friday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column label="周六" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'saturday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'saturday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.saturday && scope.row.saturday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周日" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'sunday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'sunday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.sunday && scope.row.sunday.courseName }}
</div>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col :span="2" :offset="1">
<div class="courseBox">
<div v-for="(item, index) in courseTypeList" :key="item.courseName" draggable @dragstart="(res) => {
dragCloneStart(res, index);
}
" class="courseClone">
{{ item.courseName }}
</div>
</div>
</el-col>
</div>
</template>
<script>
import draggable from "vuedraggable";
import printJS from "print-js";
// import {
// getNewYear,
// getClassType,
// getCourseInfo,
// getClassTree,
// saveClassTable,
// } from "@/api/smartSchool/teachAffairAdministration/lessonManage";
// import { getYearList } from "@/utils/utilLibrary/getYearList";
// import {
// getFirstLeafNode,
// handleTreeData,
// } from "@/utils/utilLibrary/getTreeClass";
// import { getToken } from "@/utils/auth";
// import { commonUpload } from "@/api/common";
export default {
name: "index",
components: {
draggable,
},
dicts: [
"Grade",
"Class",
"grade_type",
"sys_user_sex",
"education",
"student_type",
"child_state",
],
created() {
// 获取 URL 参数
const urlParams = new URLSearchParams(window.location.search);
// 获取 courseList 参数的值
const courseListParam = urlParams.get('courseList');
// 将 courseList 参数的值反序列化为 JavaScript 对象
const courseList = JSON.parse(decodeURIComponent(courseListParam));
console.log(courseList, 'courseList');
},
computed: {
// 上传的地址
url: function () {
console.log('')
return `${process.env.VUE_APP_BASE_API}/schoolTimeTable/importTable/${this.formData.classId}/${this.formData.termId}`;
},
},
data() {
return {
currentTreeDatas: {},
loading: false,
//是克隆还是拖动
state: "",
//目标元素的DOM
listText: "",
//被拖动方的信息
dragIndex: "",
dragWeekNum: "",
//目标方的信息
dragAimIndex: "",
dragAimWeekNum: "",
courseTypeList: [], //课程列表
courseList: [], //课程表信息
trashZone: undefined,
minHeight: window.innerHeight - 224,
trashOptions: {
group: {
name: "trash",
draggable: ".dropitem",
put: () => true,
pull: false,
},
},
listDate: [],
activeName: "0",
weeks: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
tableDate: [[], [], [], [], [], [], []],
weekIndex: "",
courseIndex: "",
treeData: [],
queryParams: {
schoolYear: "",
},
formData: {
classId: "",
termId: "",
},
yearList: [],
// 课程表导入参数
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
// updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
},
};
},
methods: {
//拖动模块
dragstart(event, index, weekNum) {
// 作用于:被拖拽的元素
this.dragIndex = index;
this.dragWeekNum = weekNum;
this.state = "drag";
event.dataTransfer.setData("drag_text", event.target.innerHTML); //1.设置拖拽元素的DOM
},
//右侧课程盒子触发事件
dragCloneStart(event, index) {
// 作用于:被拖拽的元素
console.log(390);
this.dragIndex = index;
this.state = "clone";
// let item = event.target.cloneNode(true);
// event.target.parentElement.insertBefore(item, event.target.parentElement.children[index + 1]);
event.dataTransfer.setData("drag_text", event.target.innerHTML); //1.设置拖拽元素的DOM
},
dragover(event) {
// 作用于:目标元素,每100ms刷新一次
event.preventDefault(); // *********必须声明的事件***********
},
trashDragenter(event) {
// 作用于:被拖拽的元素
event.preventDefault();
document.getElementById("trashId").style.background = "#fc0101";
},
trashDragover(event) {
// 作用于:目标元素
event.preventDefault(); // *********必须声明的事件***********
},
trashDragLeave(event) {
// 作用于:被拖拽的元素
event.preventDefault();
document.getElementById("trashId").style.background = "white";
},
// 打印
printTable() {
// 重置表单
printJS({
printable: "postFormContainer",
maxWidth: 10000,
header: "",
ignoreElements: ["no-print", "back-no-print", "front-no-print"],
targetStyles: ["*"],
gridHeaderStyle: "border: 1px solid black",
type: "html",
gridStyle: `text-align: center; border: 1px solid black`,
});
},
},
};
</script>
<style lang="less">
.course {
height: 700px;
//overflow-y: auto;
//overflow-x: auto;
}
</style>
<style scoped>
.trash {
text-align: center;
width: 350px;
height: 80px;
border: solid 1px black;
border-radius: 5px;
float: left;
line-height: 80px;
}
/*.trash:hover {*/
/* background: red;*/
/* color: #690202;*/
/*}*/
.courseBox {
width: 100%;
/*width: 200px;*/
/*height: 400px;*/
/*margin-top: 110px;*/
/*background: #7a6df0;*/
/*margin-left: 50px*/
}
.courseClone {
/*background: #1ab394;*/
border: 1px solid black;
font-size: 18px;
width: 100px;
height: 50px;
line-height: 40px;
text-align: center;
}
.courseClone:hover {
cursor: pointer;
background: rgba(98, 200, 234, 0.85);
}
.dragBox {
font-size: 20px;
width: 100%;
height: 50px;
line-height: 50px;
text-align: center;
}
.dragBox:hover {
cursor: pointer;
background: rgba(98, 200, 234, 0.85);
}
/deep/ .el-table .cell {
padding-left: 0px;
padding-right: 0px;
}
/*.dragBox[data-v-86c11aba] {*/
/* font-size: 20px;*/
/* width: 100%;*/
/* height: 50px;*/
/* line-height: 50px;*/
/* text-align: center;*/
/*}*/
</style>
<template>
<div class="app-container">
<el-row :gutter="10" class="mb8">
<el-button type="primary" plain @click="printTable">打 印
</el-button>
</el-row>
<el-col :span="21">
<div class="course">
<el-table id="postFormContainer" v-loading="loading" border :key="Math.random()"
:row-style="{ height: '35px' }" :cell-style="{ padding: '0', margin: '0' }" :data="courseList" :row-key="(row) => {
return row.id;
}
" height="710px">
<el-table-column label="节次" min-width="90" align="center">
<template slot-scope="scope">
{{ scope.row.sortName }}
</template>
</el-table-column>
<el-table-column label="时间" align="center" min-width="90">
<template slot-scope="scope">
<span style="font-size: 8px">
{{ scope.row.startTime }}--{{ scope.row.endTime }}</span>
</template>
</el-table-column>
<el-table-column prop="monday.courseName" label="周一" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'monday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'monday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.monday && scope.row.monday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column prop="tuesday.courseName" droppable label="周二" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'tuesday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'tuesday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.tuesday && scope.row.tuesday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column label="周三" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'wednesday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'wednesday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.wednesday && scope.row.wednesday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周四" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'thursday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'thursday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.thursday && scope.row.thursday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周五" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'friday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'friday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.friday && scope.row.friday.courseName }}
</div>
</template>
</el-table-column>
<el-table-column label="周六" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'saturday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'saturday');
}
" @dragend="dragend" class="dragBox">
{{
scope.row.saturday && scope.row.saturday.courseName
}}
</div>
</template>
</el-table-column>
<el-table-column label="周日" min-width="100" align="center">
<template slot-scope="scope">
<div draggable @dragstart="(res) => {
dragstart(res, scope.$index, 'sunday');
}
" @dragover="dragover" @drop="(res) => {
drop(res, scope.$index, 'sunday');
}
" @dragend="dragend" class="dragBox">
{{ scope.row.sunday && scope.row.sunday.courseName }}
</div>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col :span="2" :offset="1">
<div class="courseBox">
<div v-for="(item, index) in courseTypeList" :key="item.courseName" draggable @dragstart="(res) => {
dragCloneStart(res, index);
}
" class="courseClone">
{{ item.courseName }}
</div>
</div>
</el-col>
</div>
</template>
<script>
import draggable from "vuedraggable";
import printJS from "print-js";
// import {
// getNewYear,
// getClassType,
// getCourseInfo,
// getClassTree,
// saveClassTable,
// } from "@/api/smartSchool/teachAffairAdministration/lessonManage";
// import { getYearList } from "@/utils/utilLibrary/getYearList";
// import {
// getFirstLeafNode,
// handleTreeData,
// } from "@/utils/utilLibrary/getTreeClass";
// import { getToken } from "@/utils/auth";
// import { commonUpload } from "@/api/common";
export default {
name: "index",
components: {
draggable,
},
dicts: [
"Grade",
"Class",
"grade_type",
"sys_user_sex",
"education",
"student_type",
"child_state",
],
created() {
// 获取 URL 参数
const urlParams = new URLSearchParams(window.location.search);
// 获取 courseList 参数的值
const courseListParam = urlParams.get('courseList');
// 将 courseList 参数的值反序列化为 JavaScript 对象
const courseList = JSON.parse(decodeURIComponent(courseListParam));
console.log(courseList, 'courseList');
},
computed: {
// 上传的地址
url: function () {
console.log('')
return `${process.env.VUE_APP_BASE_API}/schoolTimeTable/importTable/${this.formData.classId}/${this.formData.termId}`;
},
},
data() {
return {
currentTreeDatas: {},
loading: false,
//是克隆还是拖动
state: "",
//目标元素的DOM
listText: "",
//被拖动方的信息
dragIndex: "",
dragWeekNum: "",
//目标方的信息
dragAimIndex: "",
dragAimWeekNum: "",
courseTypeList: [], //课程列表
courseList: [], //课程表信息
trashZone: undefined,
minHeight: window.innerHeight - 224,
trashOptions: {
group: {
name: "trash",
draggable: ".dropitem",
put: () => true,
pull: false,
},
},
listDate: [],
activeName: "0",
weeks: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
tableDate: [[], [], [], [], [], [], []],
weekIndex: "",
courseIndex: "",
treeData: [],
queryParams: {
schoolYear: "",
},
formData: {
classId: "",
termId: "",
},
yearList: [],
// 课程表导入参数
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
// updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
},
};
},
methods: {
//拖动模块
dragstart(event, index, weekNum) {
// 作用于:被拖拽的元素
this.dragIndex = index;
this.dragWeekNum = weekNum;
this.state = "drag";
event.dataTransfer.setData("drag_text", event.target.innerHTML); //1.设置拖拽元素的DOM
},
//右侧课程盒子触发事件
dragCloneStart(event, index) {
// 作用于:被拖拽的元素
console.log(390);
this.dragIndex = index;
this.state = "clone";
// let item = event.target.cloneNode(true);
// event.target.parentElement.insertBefore(item, event.target.parentElement.children[index + 1]);
event.dataTransfer.setData("drag_text", event.target.innerHTML); //1.设置拖拽元素的DOM
},
dragover(event) {
// 作用于:目标元素,每100ms刷新一次
event.preventDefault(); // *********必须声明的事件***********
},
trashDragenter(event) {
// 作用于:被拖拽的元素
event.preventDefault();
document.getElementById("trashId").style.background = "#fc0101";
},
trashDragover(event) {
// 作用于:目标元素
event.preventDefault(); // *********必须声明的事件***********
},
trashDragLeave(event) {
// 作用于:被拖拽的元素
event.preventDefault();
document.getElementById("trashId").style.background = "white";
},
// 打印
printTable() {
// 重置表单
printJS({
printable: "postFormContainer",
maxWidth: 10000,
header: "",
ignoreElements: ["no-print", "back-no-print", "front-no-print"],
targetStyles: ["*"],
gridHeaderStyle: "border: 1px solid black",
type: "html",
gridStyle: `text-align: center; border: 1px solid black`,
});
},
},
};
</script>
<style lang="less">
.course {
height: 700px;
//overflow-y: auto;
//overflow-x: auto;
}
</style>
<style scoped>
.trash {
text-align: center;
width: 350px;
height: 80px;
border: solid 1px black;
border-radius: 5px;
float: left;
line-height: 80px;
}
/*.trash:hover {*/
/* background: red;*/
/* color: #690202;*/
/*}*/
.courseBox {
width: 100%;
/*width: 200px;*/
/*height: 400px;*/
/*margin-top: 110px;*/
/*background: #7a6df0;*/
/*margin-left: 50px*/
}
.courseClone {
/*background: #1ab394;*/
border: 1px solid black;
font-size: 18px;
width: 100px;
height: 50px;
line-height: 40px;
text-align: center;
}
.courseClone:hover {
cursor: pointer;
background: rgba(98, 200, 234, 0.85);
}
.dragBox {
font-size: 20px;
width: 100%;
height: 50px;
line-height: 50px;
text-align: center;
}
.dragBox:hover {
cursor: pointer;
background: rgba(98, 200, 234, 0.85);
}
/deep/ .el-table .cell {
padding-left: 0px;
padding-right: 0px;
}
/*.dragBox[data-v-86c11aba] {*/
/* font-size: 20px;*/
/* width: 100%;*/
/* height: 50px;*/
/* line-height: 50px;*/
/* text-align: center;*/
/*}*/
</style>
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<el-form :model="queryForm" ref="queryForm" size="small" :inline="true" label-width="70px"> <el-form :model="queryForm" ref="queryForm" size="small" :inline="true" label-width="70px">
<el-form-item label="学年" prop="classYear"> <el-form-item label="学年" prop="classYear">
<el-date-picker v-model="queryForm.classYear" type="year" @change="getList" format="yyyy" value-format="yyyy" <el-date-picker v-model="queryForm.classYear" type="year" @change="getList" format="yyyy" value-format="yyyy"
placeholder="选择年度"></el-date-picker> placeholder="选择年度" :clearable="false"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button> <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
...@@ -155,7 +155,7 @@ export default { ...@@ -155,7 +155,7 @@ export default {
newYear() { newYear() {
getNewYear().then((res) => { getNewYear().then((res) => {
//数值类型转换成字符串 //数值类型转换成字符串
this.queryForm.classYear = res.schoolYear + '' ; this.queryForm.classYear = res.schoolYear + '';
console.log('this.queryForm.classYear', typeof this.queryForm.classYear); console.log('this.queryForm.classYear', typeof this.queryForm.classYear);
this.getList(); this.getList();
}); });
...@@ -172,7 +172,7 @@ export default { ...@@ -172,7 +172,7 @@ export default {
this.total = response.total; this.total = response.total;
}) })
.catch(error => { .catch(error => {
}); });
}, },
......
...@@ -247,7 +247,7 @@ export default { ...@@ -247,7 +247,7 @@ export default {
// 关闭页面 // 关闭页面
closePage() { closePage() {
this.$tab.closeOpenPage({ this.$tab.closeOpenPage({
path: '/teacherManage/teacherInforManage' path: '/schoolManage/teacherManage/teacherInforManage'
}) })
}, },
}, },
......
<template> <template>
<div class="app-container"> <div class="app-container">
<span>老师信息</span> <span>老师信息</span>
<hr/> <hr />
<br/> <br />
<el-form :model="techerInfoForm" ref="reftecherInfoForm" size="small" :inline="true" label-width="100px"> <el-form :model="techerInfoForm" ref="reftecherInfoForm" size="small" :inline="true" label-width="100px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="教师名称" clearable prop="teacherName"> <el-form-item label="教师名称" clearable prop="teacherName">
<el-input v-model="techerInfoForm.teacherName" disabled clearable @keyup.enter.native="handleQuery"/> <el-input v-model="techerInfoForm.teacherName" disabled clearable @keyup.enter.native="handleQuery" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="性别" prop="sex"> <el-form-item label="性别" prop="sex">
<el-select disabled v-model="techerInfoForm.sex" style="width: 100%" placeholder="请选择性别"> <el-select disabled v-model="techerInfoForm.sex" style="width: 100%" placeholder="请选择性别">
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" <el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option> :value="dict.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -22,19 +22,19 @@ ...@@ -22,19 +22,19 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="教师电话" clearable prop="teacherTel"> <el-form-item label="教师电话" clearable prop="teacherTel">
<el-input disabled v-model="techerInfoForm.teacherTel" clearable @keyup.enter.native="handleQuery"/> <el-input disabled v-model="techerInfoForm.teacherTel" clearable @keyup.enter.native="handleQuery" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="工作编号" clearable prop="teacherCode"> <el-form-item label="工作编号" clearable prop="teacherCode">
<el-input disabled v-model="techerInfoForm.teacherCode" clearable @keyup.enter.native="handleQuery"/> <el-input disabled v-model="techerInfoForm.teacherCode" clearable @keyup.enter.native="handleQuery" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<span>履历信息</span> <span>履历信息</span>
<hr/> <hr />
<br/> <br />
<el-row> <el-row>
<el-button type="primary" icon="el-icon-plus" size="mini" @click="resumeAdd">增加</el-button> <el-button type="primary" icon="el-icon-plus" size="mini" @click="resumeAdd">增加</el-button>
<el-button type="success" icon="el-icon-edit" size="mini" :disabled="single" @click="resumeEdit">修改</el-button> <el-button type="success" icon="el-icon-edit" size="mini" :disabled="single" @click="resumeEdit">修改</el-button>
...@@ -42,38 +42,35 @@ ...@@ -42,38 +42,35 @@
</el-button> </el-button>
<el-button type="info" size="mini" plain icon="el-icon-close" @click="closePage">关闭</el-button> <el-button type="info" size="mini" plain icon="el-icon-close" @click="closePage">关闭</el-button>
</el-row> </el-row>
<br/> <br />
<el-table stripe v-loading="loading" style="width: 100%" :data="resumeList" <el-table stripe v-loading="loading" style="width: 100%" :data="resumeList" @selection-change="handleSelectionChange">
@selection-change="handleSelectionChange"> <el-table-column type="selection" align="center" width="55" />
<el-table-column type="selection" align="center" width="55"/> <el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column label="序号" type="index" align="center" width="55"/> <el-table-column label="学校/工作单位" width="width" align="center" prop="learnSchool" />
<el-table-column label="学校/工作单位" width="width" align="center" prop="learnSchool"/> <el-table-column label="履历开始时间" width="width" align="center" prop="learnStart"></el-table-column>
<el-table-column label="履历开始时间" :formatter="dateFormat" width="width" align="center" <el-table-column label="履历结束时间" width="width" align="center" prop="learnEnd"></el-table-column>
prop="learnStart"></el-table-column> <el-table-column label="备注" width="width" align="center" prop="remark" />
<el-table-column label="履历结束时间" :formatter="dateFormat" width="width" align="center"
prop="learnEnd"></el-table-column>
<el-table-column label="备注" width="width" align="center" prop="remark"/>
</el-table> </el-table>
<ExPagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" <ExPagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList"/> @pagination="getList" />
<!-- 履历编辑修改,新增弹窗--> <!-- 履历编辑修改,新增弹窗-->
<el-dialog :title="title" :visible.sync="openTeacherResume" width="800px"> <el-dialog :title="title" :visible.sync="openTeacherResume" width="800px">
<el-form :model="resumeForm" :rules="resumeRules" ref="refresumeForm" size="small" <el-form :model="resumeForm" :rules="resumeRules" ref="refresumeForm" size="small" style="width: 90%; margin: auto"
style="width: 90%; margin: auto" label-width="110px"> label-width="110px">
<el-form-item label="学校/工作单位" prop="learnSchool"> <el-form-item label="学校/工作单位" prop="learnSchool">
<el-input v-model="resumeForm.learnSchool" clearable style="width: 100%"/> <el-input v-model="resumeForm.learnSchool" clearable style="width: 100%" />
</el-form-item> </el-form-item>
<el-form-item label="履历开始时间" prop="learnStart"> <el-form-item label="履历开始时间" prop="learnStart">
<el-date-picker v-model="resumeForm.learnStart" type="date" style="width: 100%" <el-date-picker v-model="resumeForm.learnStart" type="date" style="width: 100%" placeholder="履历开始时间"
placeholder="履历开始时间"></el-date-picker> value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="履历结束时间" clearable prop="learnEnd"> <el-form-item label="履历结束时间" clearable prop="learnEnd">
<el-date-picker v-model="resumeForm.learnEnd" type="date" style="width: 100%" <el-date-picker v-model="resumeForm.learnEnd" type="date" style="width: 100%" placeholder="履历结束时间"
placeholder="履历结束时间"></el-date-picker> value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="备注" clearable prop="remark"> <el-form-item label="备注" clearable prop="remark">
<el-input type="textarea" :rows="3" style="width: 100%" v-model="resumeForm.remark" clearable/> <el-input type="textarea" :rows="3" style="width: 100%" v-model="resumeForm.remark" clearable />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<div style="width: 300px; margin: auto"> <div style="width: 300px; margin: auto">
...@@ -87,8 +84,8 @@ ...@@ -87,8 +84,8 @@
</template> </template>
<script> <script>
import {getInform} from '@/api/smartSchool/teacherManage/teacherInformation' import { getInform } from '@/api/smartSchool/teacherManage/teacherInformation'
import {listResume, getOneResume, addResume, editResume, deleteResume} from '@/api/smartSchool/teacherManage/resume' import { listResume, getOneResume, addResume, editResume, deleteResume } from '@/api/smartSchool/teacherManage/resume'
// import message from "@/views/home/message/message"; // import message from "@/views/home/message/message";
export default { export default {
...@@ -126,9 +123,9 @@ export default { ...@@ -126,9 +123,9 @@ export default {
resumeForm: {}, resumeForm: {},
// 履历校验规则 // 履历校验规则
resumeRules: { resumeRules: {
learnSchool: [{required: true, message: '学校/工作单位不能为空', trigger: 'blur'}], learnSchool: [{ required: true, message: '学校/工作单位不能为空', trigger: 'blur' }],
learnStart: [{required: true, message: '履历开始时间不能为空', trigger: 'blur'}], learnStart: [{ required: true, message: '履历开始时间不能为空', trigger: 'blur' }],
learnEnd: [{required: true, message: '履历结束时间不能为空', trigger: 'blur'}] learnEnd: [{ required: true, message: '履历结束时间不能为空', trigger: 'blur' }]
} }
} }
}, },
...@@ -280,7 +277,7 @@ export default { ...@@ -280,7 +277,7 @@ export default {
// 关闭页面 // 关闭页面
closePage() { closePage() {
this.$tab.closeOpenPage({ this.$tab.closeOpenPage({
path: '/teacherManage/teacherInforManage' path: '/schoolManage/teacherManage/teacherInforManage'
}) })
} }
}, },
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
</el-form-item> </el-form-item>
<el-form-item label="职工类型" prop="employeeType"> <el-form-item label="职工类型" prop="employeeType">
<el-select v-model="queryParams.employeeType" placeholder="请选择职工类型"> <el-select v-model="queryParams.employeeType" placeholder="请选择职工类型" clearable>
<el-option v-for="dict in dict.type.employee_type" :key="dict.value" :label="dict.label" <el-option v-for="dict in dict.type.employee_type" :key="dict.value" :label="dict.label"
:value="dict.value"> :value="dict.value">
</el-option> </el-option>
...@@ -195,8 +195,6 @@ ...@@ -195,8 +195,6 @@
<img v-if="imageUrl" :src="imageUrl" class="avatar" /> <img v-if="imageUrl" :src="imageUrl" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i> <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload> </el-upload>
</template> </template>
</el-form-item> </el-form-item>
<div style="width:50px; height: 20px; margin:auto;"><b>照片</b></div> <div style="width:50px; height: 20px; margin:auto;"><b>照片</b></div>
...@@ -232,12 +230,19 @@ ...@@ -232,12 +230,19 @@
<el-date-picker clearable v-model="form.birthday" type="date" style="width: 100%" value-format="yyyy-MM-dd" <el-date-picker clearable v-model="form.birthday" type="date" style="width: 100%" value-format="yyyy-MM-dd"
placeholder="请选择生日"></el-date-picker> placeholder="请选择生日"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="岗位" prop="postId"> <el-form-item label="岗位" prop="postId">
<el-select v-model="form.postIds" multiple placeholder="请选择岗位" style="width: 100%"> <el-select v-model="form.postIds" multiple placeholder="请选择岗位" style="width: 100%">
<el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" <el-option v-for="item in postOptions" :key="item.postId" :label="item.postName"
:value="item.postId"></el-option> :value="item.postId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="任职部门" prop="deptIds">
<treeselect :disabled="isDisabled" v-model="form.deptIds" :options="deptOptions" :show-count="true"
:defaultExpandLevel="2" placeholder="请选择主部门" @change="handleSelectionChange" multiple :max="8" />
<!-- 添加 multiple 和 max 属性 -->
</el-form-item>
</el-col> </el-col>
...@@ -254,9 +259,9 @@ ...@@ -254,9 +259,9 @@
</el-form-item> </el-form-item>
<div style="width:50px; height: 20px;margin:auto;"><b>签名</b></div> <div style="width:50px; height: 20px;margin:auto;"><b>签名</b></div>
<br /> <br />
<el-form-item label="归属部门" prop="deptId"> <el-form-item label="部门" prop="deptId">
<treeselect :disabled="isDisabled" v-model="form.deptId" :options="deptOptions" :show-count="true" <treeselect :disabled="isDisabled" v-model="form.deptId" :options="deptOptions" :show-count="true"
:defaultExpandLevel="2" placeholder="请选择归属部门" /> :defaultExpandLevel="2" placeholder="请选择部门" />
</el-form-item> </el-form-item>
<!-- :placeholder="isDisabled ? '' : '请选择归属部门'"--> <!-- :placeholder="isDisabled ? '' : '请选择归属部门'"-->
<el-form-item label="密码" v-if="!form.id" prop="password"> <el-form-item label="密码" v-if="!form.id" prop="password">
...@@ -384,10 +389,15 @@ export default { ...@@ -384,10 +389,15 @@ export default {
}, },
data() { data() {
return { return {
peV: process.env.VUE_APP_BASE_API, peV: process.env.VUE_APP_BASE_API,
// 民族 // 民族
Nations, Nations,
honorQueryAdd: {}, honorQueryAdd: {},
isDisabled: false, // 根据需要设置是否禁用
deptOptions: [
// 选项数据
],
honorTitle: undefined, honorTitle: undefined,
honorQuery: {}, honorQuery: {},
resumeTitle: undefined, resumeTitle: undefined,
...@@ -456,9 +466,12 @@ export default { ...@@ -456,9 +466,12 @@ export default {
education: null, education: null,
status: null, status: null,
deptId: null, deptId: null,
employeeType: null,
}, },
// 表单参数 // 表单参数
form: {}, form: {
deptIds: [],
},
// 列信息 // 列信息
columns: [ columns: [
{ key: 0, label: `头像`, visible: true }, { key: 0, label: `头像`, visible: true },
...@@ -487,14 +500,14 @@ export default { ...@@ -487,14 +500,14 @@ export default {
}, },
], ],
password: [{ required: true, message: "登录密码不能为空", trigger: "blur" },], password: [{ required: true, message: "登录密码不能为空", trigger: "blur" },],
teacherCode: [{ required: true, message: "工作编号不能为空", trigger: "blur" }, // teacherCode: [{ required: true, message: "工作编号不能为空", trigger: "blur" },
{ message: "工作编号格式不正确", trigger: "blur", pattern: /[0-9]\d*/ }, // { message: "工作编号格式不正确", trigger: "blur", pattern: /[0-9]\d*/ },
], // ],
idCard: [{ required: true, validator: checkIdcard, trigger: "blur" }], // idCard: [{ required: true, validator: checkIdcard, trigger: "blur" }],
deptId: [{ required: true, message: "归属部门不能为空", trigger: "change" }], deptId: [{ required: true, message: "归属部门不能为空", trigger: "change" }],
employeeType: [{ required: true, message: "职工类型不能为空", trigger: "change" }], // employeeType: [{ required: true, message: "职工类型不能为空", trigger: "change" }],
deviceNum: [{ required: true, message: "设备工号不能为空", trigger: "change" }], // deviceNum: [{ required: true, message: "设备工号不能为空", trigger: "change" }],
sex: [{ required: true, message: "性别不能为空", trigger: "change" }], // sex: [{ required: true, message: "性别不能为空", trigger: "change" }],
}, },
// 自定义列表单元格样式 // 自定义列表单元格样式
...@@ -544,515 +557,527 @@ export default { ...@@ -544,515 +557,527 @@ export default {
deptName(val) { deptName(val) {
this.$refs.tree.filter(val); this.$refs.tree.filter(val);
}, },
}, 'form.deptIds'(newVal) {
created() { if (newVal.length > 8) {
this.getList(); // If the selection exceeds the limit, remove the last item
this.getDeptTree(); this.form.deptIds.pop();
// this.getConfigKey('sys.user.initPassword').then(response => { }
// this.initPassword = response.msg
// })
},
methods: {
// 筛选节点
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
// 节点单击事件
handleNodeClick(data) {
this.queryParams.deptId = data.id;
this.handleQuery();
},
/** 查询学校老师列表 */
getList() {
this.loading = true;
listInform(this.queryParams).then((response) => {
this.informList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
teacherName: null,
// userName: null,
teacherTel: null,
// phonenumber: null,
teacherCode: null,
idCard: null,
homeAddress: null,
nation: null,
picUrl: null,
birthday: null,
education: null,
sex: null,
postIds: null,
roleIds: null,
deptId: null,
password: null,
};
this.imageUrl = "";
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.throttle(() => {
this.queryParams.pageNum = 1;
this.getList();
});
}, },
getResumelist() { },
this.resumeListLoading = true; created() {
listResume({ teacherId: this.teacherId }).then((res) => { this.getList();
if (res.code == 200) { this.getDeptTree();
this.resumeList = res.rows; // this.getConfigKey('sys.user.initPassword').then(response => {
this.resumeListLoading = false; // this.initPassword = response.msg
} else { // })
this.$message.error("数据请求失败");
this.resumeListLoading = false;
}
});
}, },
getHonorlist() { methods: {
this.honorListLoading = true; handleSelectionChange(selectedItems) {
listTeacherAward({ teacherId: this.teacherId }).then((res) => { if (selectedItems.length > 8) {
if (res.code == 200) { // 用户选择的项数超过了最大限制,您可以在此处进行处理,例如取消选择最后一个项
this.honorList = res.rows; this.form.deptIds.pop();
this.honorListLoading = false;
} else {
this.$message.error("数据请求失败");
this.honorListLoading = false;
} }
}); },
}, // 筛选节点
handleResume(row) { filterNode(value, data) {
this.$router.push({ if (!value) return true;
path: "/teacherManage/resume", return data.label.indexOf(value) !== -1;
query: { },
teacherId: row.id, // 节点单击事件
}, handleNodeClick(data) {
}); this.queryParams.deptId = data.id;
}, this.handleQuery();
handleHonor(row) { },
// 进入下一个页面
this.$router.push({
path: "/teacherManage/awardDetails",
query: {
teacherId: row.id,
},
});
},
handleClassView(row) {
this.$router.push({
path: "/teachManage/classView",
query: {
teacherId: row.id,
},
});
},
/** 重置密码按钮操作 */ /** 查询学校老师列表 */
handleResetPwd(row) { getList() {
this.$prompt('请输入"' + row.teacherName + '"的新密码', "提示", { this.loading = true;
confirmButtonText: "确定", listInform(this.queryParams).then((response) => {
cancelButtonText: "取消", this.informList = response.rows;
closeOnClickModal: false,
inputPattern: /^.{5,20}$/,
inputErrorMessage: "用户密码长度必须介于 5 和 20 之间"
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value);
});
}).catch(() => {
});
},
/** 分配角色操作 */
handleAuthRole: function (row) {
// const userId = row.userId;
this.$router.push({
path: "/teacherInforManage/authRole",
query: {
userId: row.userId
}
});
},
//确认分配角色 this.total = response.total;
submitAssignRoles() { this.loading = false;
console.log(this.authRole);
let query = {};
query.id = this.userId;
query.authRole = this.authRole;
submitRoles(query).then((res) => {
this.assignRolesopen = false;
this.$message({
type: "success",
message: `分配角色成功`,
}); });
}); },
}, // 取消按钮
// 关闭对话框 cancel() {
close() { this.open = false;
this.assignRolesopen = false; this.reset();
this.resetPasswordopen = false; },
}, // 表单重置
//确认重置密码 reset() {
submitReset() { this.form = {
let query = {}; id: null,
query.userId = this.userId; teacherName: null,
query.password = this.password; // userName: null,
sendResetPassword(query).then((res) => { teacherTel: null,
this.resetPasswordopen = false; // phonenumber: null,
this.$message({ teacherCode: null,
type: "info", idCard: null,
message: `重置密码成功`, homeAddress: null,
nation: null,
picUrl: null,
birthday: null,
education: null,
sex: null,
postIds: null,
roleIds: null,
deptId: null,
password: null,
};
this.imageUrl = "";
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.throttle(() => {
this.queryParams.pageNum = 1;
this.getList();
}); });
}); },
}, getResumelist() {
/** 重置按钮操作 */ this.resumeListLoading = true;
resetQuery() { listResume({ teacherId: this.teacherId }).then((res) => {
this.resetForm("queryForm"); if (res.code == 200) {
this.handleQuery(); this.resumeList = res.rows;
}, this.resumeListLoading = false;
// 多选框选中数据 } else {
handleSelectionChange(selection) { this.$message.error("数据请求失败");
this.ids = selection.map((item) => item.id); this.resumeListLoading = false;
this.single = selection.length !== 1; }
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.isDisabled = false;
this.reset();
this.signUrl = "",
this.imageUrl = "",
this.open = true;
this.title = "添加教职工信息";
this.getPostAndRoleList();
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.getPostAndRoleList();
const id = row.id || this.ids;
this.$modal.loading("正在加载数据,请稍等...");
getInform(id)
.then((response) => {
this.$modal.closeLoading();
this.form = response.data;
this.imageUrl = this.peV + this.form.picUrl;
this.signUrl = this.peV + this.form.sign;
this.open = true;
this.isDisabled = false;
this.title = "修改教职工信息";
})
.catch((error) => {
this.$modal.closeLoading();
}); });
}, },
/** 查看详情 */ getHonorlist() {
handleDetail(row) { this.honorListLoading = true;
this.reset(); listTeacherAward({ teacherId: this.teacherId }).then((res) => {
this.getPostAndRoleList(); if (res.code == 200) {
const id = row.id || this.ids; this.honorList = res.rows;
this.$modal.loading("正在加载数据,请稍等..."); this.honorListLoading = false;
getInform(id) } else {
.then((response) => { this.$message.error("数据请求失败");
this.$modal.closeLoading(); this.honorListLoading = false;
this.form = response.data; }
this.imageUrl = this.form.picUrl;
this.open = true;
this.isDisabled = true;
this.title = "查看教职工信息";
})
.catch((error) => {
this.$modal.closeLoading();
}); });
}, },
// 上传成功回调 handleResume(row) {
handleAvatarSuccess(res, file) { this.$router.push({
this.imageUrl = res.data.url; path: "/teacherManage/resume",
this.commonUpload(file); query: {
}, teacherId: row.id,
// 上传前格式和图片大小限制 },
beforeAvatarUpload(file) { });
const type = },
file.type === "image/jpeg" || handleHonor(row) {
"image/jpg" || // 进入下一个页面
"image/webp" || this.$router.push({
"image/png"; path: "/teacherManage/awardDetails",
const isLt2M = file.size / 1024 / 1024 < 2; query: {
if (!type) { teacherId: row.id,
this.$message.error("图片格式不正确!(只能包含jpg,png,webp,JPEG)"); },
} });
if (!isLt2M) { },
this.$message.error("上传图片大小不能超过 2MB!"); handleClassView(row) {
} this.$router.push({
return type && isLt2M; path: "/teachManage/classView",
}, query: {
teacherId: row.id,
},
});
},
// 上传图片 /** 重置密码按钮操作 */
uploadImage(file, type) { handleResetPwd(row) {
const fileData = file.file; this.$prompt('请输入"' + row.teacherName + '"的新密码', "提示", {
const formData = new FormData(); confirmButtonText: "确定",
formData.append("file", fileData); cancelButtonText: "取消",
if (type == 'photo') { closeOnClickModal: false,
this.photoUploadLoading = true; inputPattern: /^.{5,20}$/,
commonUpload(formData).then((response) => { inputErrorMessage: "用户密码长度必须介于 5 和 20 之间"
console.log(response, 1147) }).then(({ value }) => {
this.photoUploadLoading = false; resetUserPwd(row.userId, value).then(response => {
this.$modal.msgSuccess("上传成功"); this.$modal.msgSuccess("修改成功,新密码是:" + value);
this.imageUrl = process.env.VUE_APP_BASE_API + response.url; });
this.form.avatar = response.url; }).catch(() => {
}).catch((error) => {
this.photoUploadLoading = false;
}); });
} else { },
this.signUploadLoading = true; /** 分配角色操作 */
signUpload(formData).then((response) => { handleAuthRole: function (row) {
this.signUploadLoading = false; // const userId = row.userId;
this.$modal.msgSuccess("上传成功"); this.$router.push({
this.signUrl = process.env.VUE_APP_BASE_API + response.url; path: "/teacherInforManage/authRole",
this.form.sign = response.url; query: {
}).catch((error) => { userId: row.userId
this.signUploadLoading = false; }
}); });
} },
}, //确认分配角色
submitAssignRoles() {
console.log(this.authRole);
let query = {};
query.id = this.userId;
query.authRole = this.authRole;
submitRoles(query).then((res) => {
this.assignRolesopen = false;
this.$message({
type: "success",
message: `分配角色成功`,
});
});
},
// 关闭对话框
close() {
this.assignRolesopen = false;
this.resetPasswordopen = false;
},
//确认重置密码
submitReset() {
let query = {};
query.userId = this.userId;
query.password = this.password;
sendResetPassword(query).then((res) => {
this.resetPasswordopen = false;
this.$message({
type: "info",
message: `重置密码成功`,
});
});
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.isDisabled = false;
this.reset();
this.signUrl = "",
this.imageUrl = "",
this.open = true;
this.title = "添加教职工信息";
this.getPostAndRoleList();
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.getPostAndRoleList();
const id = row.id || this.ids;
this.$modal.loading("正在加载数据,请稍等...");
getInform(id)
.then((response) => {
this.$modal.closeLoading();
this.form = response.data;
this.imageUrl = this.peV + this.form.picUrl;
this.signUrl = this.peV + this.form.sign;
this.open = true;
this.isDisabled = false;
this.title = "修改教职工信息";
})
.catch((error) => {
this.$modal.closeLoading();
});
},
/** 查看详情 */
handleDetail(row) {
this.reset();
this.getPostAndRoleList();
const id = row.id || this.ids;
this.$modal.loading("正在加载数据,请稍等...");
getInform(id)
.then((response) => {
this.$modal.closeLoading();
this.form = response.data;
this.imageUrl = this.form.picUrl;
this.open = true;
this.isDisabled = true;
this.title = "查看教职工信息";
})
.catch((error) => {
this.$modal.closeLoading();
});
},
// 上传成功回调
handleAvatarSuccess(res, file) {
this.imageUrl = res.data.url;
this.commonUpload(file);
},
// 上传前格式和图片大小限制
beforeAvatarUpload(file) {
const type =
file.type === "image/jpeg" ||
"image/jpg" ||
"image/webp" ||
"image/png";
const isLt2M = file.size / 1024 / 1024 < 2;
if (!type) {
this.$message.error("图片格式不正确!(只能包含jpg,png,webp,JPEG)");
}
if (!isLt2M) {
this.$message.error("上传图片大小不能超过 2MB!");
}
return type && isLt2M;
},
/** 提交按钮 */ // 上传图片
submitForm() { uploadImage(file, type) {
if (!this.form.picUrl) { const fileData = file.file;
if (this.form.sex === Gender.FEMALE) { const formData = new FormData();
this.form.picUrl = formData.append("file", fileData);
"https://eos-wuxi-1.cmecloud.cn/dy-pro/image/2022/08/09/b076ed42bfca4a8cae062dfffd5f3618.jpg"; if (type == 'photo') {
this.photoUploadLoading = true;
commonUpload(formData).then((response) => {
console.log(response, 1147)
this.photoUploadLoading = false;
this.$modal.msgSuccess("上传成功");
this.imageUrl = process.env.VUE_APP_BASE_API + response.url;
this.form.avatar = response.url;
}).catch((error) => {
this.photoUploadLoading = false;
});
} else { } else {
this.form.picUrl = this.signUploadLoading = true;
"https://eos-wuxi-1.cmecloud.cn/dy-pro/image/2022/08/09/8a6c1334494d418d8a53cc7bf5abd668.jpg"; signUpload(formData).then((response) => {
this.signUploadLoading = false;
this.$modal.msgSuccess("上传成功");
this.signUrl = process.env.VUE_APP_BASE_API + response.url;
this.form.sign = response.url;
}).catch((error) => {
this.signUploadLoading = false;
});
} }
}
this.$refs["form"].validate((valid) => { },
if (valid) {
if (this.form.id != null) { /** 提交按钮 */
updateInform(this.form).then((response) => { submitForm() {
this.$modal.msgSuccess("修改成功"); if (!this.form.picUrl) {
this.open = false; if (this.form.sex === Gender.FEMALE) {
this.getList(); this.form.picUrl =
}); "https://eos-wuxi-1.cmecloud.cn/dy-pro/image/2022/08/09/b076ed42bfca4a8cae062dfffd5f3618.jpg";
} else { } else {
addInform(this.form).then((response) => { this.form.picUrl =
this.$modal.msgSuccess("新增成功"); "https://eos-wuxi-1.cmecloud.cn/dy-pro/image/2022/08/09/8a6c1334494d418d8a53cc7bf5abd668.jpg";
this.open = false;
this.getList();
});
} }
} }
}); this.$refs["form"].validate((valid) => {
}, if (valid) {
/** 删除按钮操作 */ if (this.form.id != null) {
handleDelete(row) { updateInform(this.form).then((response) => {
const ids = row.id || this.ids; this.$modal.msgSuccess("修改成功");
this.$modal this.open = false;
.confirm( this.getList();
`是否确认删除选中的${Object.hasOwnProperty.call(ids, "length") ? ids.length : 1 });
}条数据?` } else {
) addInform(this.form).then((response) => {
.then(() => { this.$modal.msgSuccess("新增成功");
this.$modal.loading("正在删除数据,请稍等..."); this.open = false;
return delInform(ids); this.getList();
}) });
.then(() => { }
this.$modal.closeLoading(); }
this.$modal.msgSuccess("删除成功");
this.getList();
})
.catch(() => {
this.$modal.closeLoading();
}); });
}, },
/** 导出按钮操作 */ /** 删除按钮操作 */
handleExport() { handleDelete(row) {
// 导出选中,导出全部,根据查询条件导出 const ids = row.id || this.ids;
this.exportOptions.open = true; this.$modal
// this.$confirm(`是否确认导出${ !!this.ids.length ? this.ids.length + '条' : '所有' }数据?`, '提示', { .confirm(
// confirmButtonText: '确定', `是否确认删除选中的${Object.hasOwnProperty.call(ids, "length") ? ids.length : 1
// cancelButtonText: '取消', }条数据?`
// type: 'warning' )
// }).then(() => { .then(() => {
// if (this.ids.length) { this.$modal.loading("正在删除数据,请稍等...");
// this.download('/school/teacher/export/' + this.ids, { return delInform(ids);
// ...this.queryParams })
// }, `教师信息.xlsx`) .then(() => {
// } else { this.$modal.closeLoading();
// this.download('/school/teacher/export', { this.$modal.msgSuccess("删除成功");
// ...this.queryParams this.getList();
// }, `教师信息.xlsx`) })
// } .catch(() => {
// this.$modal.closeLoading();
// }).catch(() => { });
// },
// }); /** 导出按钮操作 */
}, handleExport() {
// 导出选中,导出全部,根据查询条件导出
this.exportOptions.open = true;
// this.$confirm(`是否确认导出${ !!this.ids.length ? this.ids.length + '条' : '所有' }数据?`, '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
// if (this.ids.length) {
// this.download('/school/teacher/export/' + this.ids, {
// ...this.queryParams
// }, `教师信息.xlsx`)
// } else {
// this.download('/school/teacher/export', {
// ...this.queryParams
// }, `教师信息.xlsx`)
// }
//
// }).catch(() => {
//
// });
},
/** 导入按钮 */ /** 导入按钮 */
handleImport() { handleImport() {
this.upload.title = "用户导入"; this.upload.title = "用户导入";
this.upload.open = true; this.upload.open = true;
}, },
dateFormat(row, column, cellValue, index) { dateFormat(row, column, cellValue, index) {
const daterc = row[column.property]; const daterc = row[column.property];
if (daterc) { if (daterc) {
if (daterc.indexOf("T") === -1) return daterc; if (daterc.indexOf("T") === -1) return daterc;
const arr = daterc.split("T"); const arr = daterc.split("T");
const d = arr[0]; const d = arr[0];
const darr = d.split("-"); const darr = d.split("-");
const t = arr[1]; const t = arr[1];
const tarr = t.split(".000"); const tarr = t.split(".000");
const marr = tarr[0].split(":"); const marr = tarr[0].split(":");
const dd = darr[0] + "-" + darr[1] + "-" + darr[2]; const dd = darr[0] + "-" + darr[1] + "-" + darr[2];
return dd; return dd;
} }
}, },
/** 更多下拉菜单 */ /** 更多下拉菜单 */
// handleCommand(command, row) { // handleCommand(command, row) {
// this[command].apply(undefined, [row]); // this[command].apply(undefined, [row]);
// }, // },
// 更多操作触发 // 更多操作触发
handleCommand(command, row) { handleCommand(command, row) {
switch (command) { switch (command) {
case "handleHonor": case "handleHonor":
this.handleHonor(row) this.handleHonor(row)
break; break;
case "handleResume": case "handleResume":
this.handleResume(row) this.handleResume(row)
break; break;
case "handleResetPwd": case "handleResetPwd":
this.handleResetPwd(row); this.handleResetPwd(row);
break; break;
case "handleAuthRole": case "handleAuthRole":
this.handleAuthRole(row); this.handleAuthRole(row);
break; break;
default: default:
break; break;
} }
}, },
/** 查询部门下拉树结构 */ /** 查询部门下拉树结构 */
getDeptTree() { getDeptTree() {
this.$store this.$store
.dispatch("getDeptTree") .dispatch("getDeptTree")
.then((response) => { .then((response) => {
this.deptOptions = response; this.deptOptions = response;
}) })
.catch((error) => { .catch((error) => {
this.deptOptions = []; this.deptOptions = [];
}); });
}, },
/** 查询岗位列表,角色列表 */ /** 查询岗位列表,角色列表 */
getPostAndRoleList() { getPostAndRoleList() {
this.$store this.$store
.dispatch("getPostList") .dispatch("getPostList")
.then((response) => { .then((response) => {
this.postOptions = response.posts; this.postOptions = response.posts;
console.log(this.postOptions, 1304); console.log(this.postOptions, 1304);
this.roleOptions = response.roles; this.roleOptions = response.roles;
}) })
.catch((error) => { .catch((error) => {
this.postOptions = []; this.postOptions = [];
this.roleOptions = []; this.roleOptions = [];
}); });
}, },
/** 下载模板操作 */ /** 下载模板操作 */
importTemplate() { importTemplate() {
this.download( this.download(
"school/teacher/importTemplate", "school/teacher/importTemplate",
{}, {},
`老师信息模板_${new Date().getTime()}.xlsx` `老师信息模板_${new Date().getTime()}.xlsx`
); );
}, },
// 文件上传中处理 // 文件上传中处理
handleFileUploadProgress(event, file, fileList) { handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true; this.upload.isUploading = true;
}, },
// 文件上传成功处理 // 文件上传成功处理
handleFileSuccess(response, file, fileList) { handleFileSuccess(response, file, fileList) {
this.upload.open = false; this.upload.open = false;
this.upload.isUploading = false; this.upload.isUploading = false;
this.$refs.upload.clearFiles(); this.$refs.upload.clearFiles();
this.$alert( this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg + response.msg +
"</div>", "</div>",
"导入结果", "导入结果",
{ dangerouslyUseHTMLString: true } { dangerouslyUseHTMLString: true }
); );
this.getList(); this.getList();
}, },
// 提交上传文件 // 提交上传文件
submitFileForm() { submitFileForm() {
this.$refs.upload.submit(); this.$refs.upload.submit();
}, },
/** 导出 */ /** 导出 */
exportFile(callback) { exportFile(callback) {
const ids = this.ids; const ids = this.ids;
const options = [ const options = [
{ type: ExportType.TOTAL, path: "/school/teacher/export", params: {} }, { type: ExportType.TOTAL, path: "/school/teacher/export", params: {} },
{ {
type: ExportType.SELECT, type: ExportType.SELECT,
path: "/school/teacher/export/" + ids, path: "/school/teacher/export/" + ids,
params: {}, params: {},
}, },
{ {
type: ExportType.QUERY, type: ExportType.QUERY,
path: "/school/teacher/export", path: "/school/teacher/export",
params: this.queryParams, params: this.queryParams,
}, },
]; ];
callback(options, `老师信息${new Date().getTime()}.xlsx`); callback(options, `老师信息${new Date().getTime()}.xlsx`);
}, },
/** 是否可以被勾选 */ /** 是否可以被勾选 */
isSelected(row, index) { isSelected(row, index) {
if (row.id == 1) { if (row.id == 1) {
return false; return false;
} }
return true; return true;
}, },
switchChange(row, status) { switchChange(row, status) {
this.$modal this.$modal
.confirm(status === '1' ? '是否确认停用此用户状态?' : '是否确认启用此用户状态?') .confirm(status === '1' ? '是否确认停用此用户状态?' : '是否确认启用此用户状态?')
.then(() => { .then(() => {
this.$modal.loading('正在修改状态,请稍等...') this.$modal.loading('正在修改状态,请稍等...')
statusChange(status, row.id) statusChange(status, row.id)
.then(response => { .then(response => {
this.$modal.closeLoading() this.$modal.closeLoading()
this.$modal.msgSuccess('修改成功') this.$modal.msgSuccess('修改成功')
}) })
}) })
.catch(() => { .catch(() => {
this.$modal.closeLoading() this.$modal.closeLoading()
}) })
// console.log(row, status, 56565656) // console.log(row, status, 56565656)
// statusChange(status, row.id).then(() => { // statusChange(status, row.id).then(() => {
// }) // })
} }
}, },
}; };
</script> </script>
<style scoped> <style scoped>
.avatar-uploader { .avatar-uploader {
......
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
<!-- </el-col>--> <!-- </el-col>-->
<el-col :span="8" :offset="2"> <el-col :span="8" :offset="2">
<el-form-item label="登录账号" prop="phonenumber"> <el-form-item label="登录账号" prop="phonenumber">
<el-input v-model="form.phonenumber" disabled/> <el-input v-model="form.phonenumber" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" :offset="2"> <el-col :span="8" :offset="2">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="用户名称" prop="userName">
<el-input v-model="form.userName" disabled/> <el-input v-model="form.userName" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -23,24 +23,24 @@ ...@@ -23,24 +23,24 @@
<h4 class="form-header h4">角色信息</h4> <h4 class="form-header h4">角色信息</h4>
<el-table v-loading="loading" :row-key="getRowKey" @row-click="clickRow" ref="table" <el-table v-loading="loading" :row-key="getRowKey" @row-click="clickRow" ref="table"
@selection-change="handleSelectionChange" :data="roles.slice((pageNum-1)*pageSize,pageNum*pageSize)"> @selection-change="handleSelectionChange" :data="roles.slice((pageNum - 1) * pageSize, pageNum * pageSize)">
<el-table-column type="selection" :reserve-selection="true" width="85"></el-table-column> <el-table-column type="selection" :reserve-selection="true" width="85"></el-table-column>
<el-table-column label="序号" type="index" align="center"> <el-table-column label="序号" type="index" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span> <span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="角色编号" align="center" prop="roleId"/> <el-table-column label="角色编号" align="center" prop="roleId" />
<el-table-column label="角色名称" align="center" prop="roleName"/> <el-table-column label="角色名称" align="center" prop="roleName" />
<el-table-column label="权限字符" align="center" prop="roleKey"/> <el-table-column label="权限字符" align="center" prop="roleKey" />
<!-- <el-table-column label="创建时间" align="center" prop="createTime" width="180">--> <!-- <el-table-column label="创建时间" align="center" prop="createTime" width="180">-->
<!-- <template slot-scope="scope">--> <!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.createTime) }}</span>--> <!-- <span>{{ parseTime(scope.row.createTime) }}</span>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" :page.sync="pageNum" :limit.sync="pageSize"/> <pagination v-show="total > 0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" />
<el-form label-width="100px"> <el-form label-width="100px">
<el-form-item style="text-align: center;margin-left:-120px;margin-top:30px;"> <el-form-item style="text-align: center;margin-left:-120px;margin-top:30px;">
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
</template> </template>
<script> <script>
import {getAuthRole, updateAuthRole} from "@/api/system/user"; import { getAuthRole, updateAuthRole } from "@/api/system/user";
export default { export default {
name: "AuthRole", name: "AuthRole",
...@@ -109,14 +109,14 @@ export default { ...@@ -109,14 +109,14 @@ export default {
submitForm() { submitForm() {
const userId = this.form.userId; const userId = this.form.userId;
const roleIds = this.roleIds.join(","); const roleIds = this.roleIds.join(",");
updateAuthRole({userId: userId, roleIds: roleIds}).then((response) => { updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
this.$modal.msgSuccess("授权成功"); this.$modal.msgSuccess("授权成功");
this.close(); this.close();
}); });
}, },
/** 关闭按钮 */ /** 关闭按钮 */
close() { close() {
const obj = {path: "/teacherManage/teacherInforManage"}; const obj = { path: "/schoolManage/teacherManage/teacherInforManage" };
this.$tab.closeOpenPage(obj); this.$tab.closeOpenPage(obj);
}, },
}, },
......
<template> <template>
<div> <div>
<button @click="csToken">获取钉钉授权码</button> <!-- <button @click="csToken">获取钉钉授权码</button> -->
</div> </div>
</template> </template>
...@@ -21,9 +21,9 @@ export default { ...@@ -21,9 +21,9 @@ export default {
}, },
created() { created() {
// 钉钉code码,正式时打开 // 钉钉code码,正式时打开
// this.getCode() this.getCode()
// token,测试用 // token,测试用
this.csToken() // this.csToken()
}, },
methods: { methods: {
// 获取code // 获取code
...@@ -53,7 +53,7 @@ export default { ...@@ -53,7 +53,7 @@ export default {
if (res.token) { if (res.token) {
setToken(res.token) setToken(res.token)
this.$store.commit('SET_TOKEN', res.token) this.$store.commit('SET_TOKEN', res.token)
// this.$router.push({ path: '/index' }); this.$router.push({ path: '/index' });
// 判断当前用户是否已拉取完user_info信息 // 判断当前用户是否已拉取完user_info信息
this.$store.dispatch('GetInfo').then((res) => { this.$store.dispatch('GetInfo').then((res) => {
this.$store.dispatch('GenerateRoutes').then(accessRoutes => { this.$store.dispatch('GenerateRoutes').then(accessRoutes => {
......
...@@ -35,7 +35,7 @@ module.exports = { ...@@ -35,7 +35,7 @@ module.exports = {
host: "", host: "",
port: 1024, port: 1024,
hot: true, hot: true,
open: true, open: "chrome",
proxy: { proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
......
...@@ -84,8 +84,7 @@ public class SchoolNotificationGroupController extends BaseController { ...@@ -84,8 +84,7 @@ public class SchoolNotificationGroupController extends BaseController {
* 根据分组id查询人员信息 * 根据分组id查询人员信息
*/ */
@GetMapping("/getUserList/{notificationId}") @GetMapping("/getUserList/{notificationId}")
public TableDataInfo selectOne(@PathVariable("notificationId") Long notificationId) { public AjaxResult selectOne(@PathVariable("notificationId") Long notificationId) {
startPage();
LambdaQueryWrapper<SchoolNotificationUser> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SchoolNotificationUser> lqw = new LambdaQueryWrapper<>();
lqw.eq(SchoolNotificationUser::getNotificationId, notificationId); lqw.eq(SchoolNotificationUser::getNotificationId, notificationId);
List<SchoolNotificationUser> list = this.schoolNotificationUserService.list(lqw); List<SchoolNotificationUser> list = this.schoolNotificationUserService.list(lqw);
...@@ -94,7 +93,7 @@ public class SchoolNotificationGroupController extends BaseController { ...@@ -94,7 +93,7 @@ public class SchoolNotificationGroupController extends BaseController {
SysUser sysUser = sysUserService.selectUserById(data.getUserId()); SysUser sysUser = sysUserService.selectUserById(data.getUserId());
userList.add(sysUser); userList.add(sysUser);
}); });
return getDataTable(userList); return AjaxResult.success(userList);
} }
/** /**
...@@ -129,6 +128,10 @@ public class SchoolNotificationGroupController extends BaseController { ...@@ -129,6 +128,10 @@ public class SchoolNotificationGroupController extends BaseController {
SchoolNotificationUser date = new SchoolNotificationUser(); SchoolNotificationUser date = new SchoolNotificationUser();
date.setNotificationId(schoolNotificationUser.getNotificationId()); date.setNotificationId(schoolNotificationUser.getNotificationId());
date.setUserId(id); date.setUserId(id);
SchoolNotificationUser oneNotificationUser = schoolNotificationUserService.getOneNotificationUser(date);
if (null != oneNotificationUser){
throw new RuntimeException("当前用户存在分组中");
}
boolean save = this.schoolNotificationUserService.save(date); boolean save = this.schoolNotificationUserService.save(date);
} }
return AjaxResult.success(); return AjaxResult.success();
......
...@@ -31,6 +31,12 @@ public class SchoolMessagePush extends OurBaseEntity { ...@@ -31,6 +31,12 @@ public class SchoolMessagePush extends OurBaseEntity {
*/ */
private Long groupId; private Long groupId;
/**
* 接收人分组名称
*/
private String groupName;
/** 消息类型 */ /** 消息类型 */
@Excel(name = "消息类型",readConverterExp = "1=通知,2=公告") @Excel(name = "消息类型",readConverterExp = "1=通知,2=公告")
private String messageType; private String messageType;
......
...@@ -16,7 +16,9 @@ import com.ruoyi.common.annotation.Excel; ...@@ -16,7 +16,9 @@ import com.ruoyi.common.annotation.Excel;
public class SchoolOrganizationSignin extends OurBaseEntity public class SchoolOrganizationSignin extends OurBaseEntity
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** id */
@Excel(name = "id")
private Long id;
/** 姓名 */ /** 姓名 */
@Excel(name = "姓名") @Excel(name = "姓名")
private String name; private String name;
......
...@@ -100,4 +100,5 @@ public class SchoolClass extends OurBaseEntity { ...@@ -100,4 +100,5 @@ public class SchoolClass extends OurBaseEntity {
"7=物理+地理+化学,8=物理+地理+生物,9=物理+化学+生物,10=物理+历史+地理,11=化学+政治+地理,12=化学+政治+历史" + "7=物理+地理+化学,8=物理+地理+生物,9=物理+化学+生物,10=物理+历史+地理,11=化学+政治+地理,12=化学+政治+历史" +
"13=化学+政治+生物,14=化学+历史+地理,15=化学+历史+生物,16=化学+地理+生物,17=生物+政治+地理,18=生物+历史+地理,19=生物+政治+历史,20=政治+历史+地理",width = 25) "13=化学+政治+生物,14=化学+历史+地理,15=化学+历史+生物,16=化学+地理+生物,17=生物+政治+地理,18=生物+历史+地理,19=生物+政治+历史,20=政治+历史+地理",width = 25)
private String chooseCourse; private String chooseCourse;
private String ddClassId;
} }
...@@ -36,4 +36,7 @@ public class SchoolGrade extends OurBaseEntity { ...@@ -36,4 +36,7 @@ public class SchoolGrade extends OurBaseEntity {
/** 级部名称 */ /** 级部名称 */
@Excel(name = "级部名称") @Excel(name = "级部名称")
private String gradeName; private String gradeName;
private String ddClassId;
} }
...@@ -147,6 +147,8 @@ public class SchoolStudent extends OurBaseEntity { ...@@ -147,6 +147,8 @@ public class SchoolStudent extends OurBaseEntity {
private String support; private String support;
//独生子女(0否 1是) //独生子女(0否 1是)
private String onlyChild; private String onlyChild;
//钉钉userId
private String ddUserId;
/* /*
* 校园一卡通 * 校园一卡通
......
...@@ -43,6 +43,9 @@ public interface SchoolClassMapper extends BaseMapper<SchoolClass> { ...@@ -43,6 +43,9 @@ public interface SchoolClassMapper extends BaseMapper<SchoolClass> {
* @return * @return
*/ */
List<SchoolClassVo> getUserClassByTeacher(Long teacherId); List<SchoolClassVo> getUserClassByTeacher(Long teacherId);
List<SchoolClassVo> selectSchoolClassSchoolYear(String schoolYear);
List<SchoolClassVo> getTeacherClass(@Param("teacherId") Long teacherId, List<SchoolClassVo> getTeacherClass(@Param("teacherId") Long teacherId,
@Param("schoolYear") int schoolYear); @Param("schoolYear") int schoolYear);
...@@ -63,4 +66,6 @@ public interface SchoolClassMapper extends BaseMapper<SchoolClass> { ...@@ -63,4 +66,6 @@ public interface SchoolClassMapper extends BaseMapper<SchoolClass> {
* 获取本级部下的班级 * 获取本级部下的班级
* */ * */
List<Long> getClassesIdByGradeId(Long gradeId); List<Long> getClassesIdByGradeId(Long gradeId);
public Long selectDdClassId(String ddClssId);
} }
...@@ -31,4 +31,8 @@ public interface SchoolGradeMapper extends BaseMapper<SchoolGrade> { ...@@ -31,4 +31,8 @@ public interface SchoolGradeMapper extends BaseMapper<SchoolGrade> {
public List<String> getYearList(); public List<String> getYearList();
List<SchoolGrade> selectNowSchoolGrade(); List<SchoolGrade> selectNowSchoolGrade();
public Long selectDdClassId(String ddClssId);
String selectUpToYear();
} }
...@@ -42,6 +42,8 @@ public interface SchoolStudentMapper extends BaseMapper<SchoolStudent> { ...@@ -42,6 +42,8 @@ public interface SchoolStudentMapper extends BaseMapper<SchoolStudent> {
*/ */
List<SchoolStudent> getMemberByTeacher(Long teacherId); List<SchoolStudent> getMemberByTeacher(Long teacherId);
Long getDdUserId(String foUserId);
/** /**
* 家长查看班级其他同学 * 家长查看班级其他同学
* @param studentId * @param studentId
......
...@@ -10,18 +10,22 @@ import yangtz.cs.liu.wechat.vo.userInfo.UserInfoVo; ...@@ -10,18 +10,22 @@ import yangtz.cs.liu.wechat.vo.userInfo.UserInfoVo;
import java.util.List; import java.util.List;
import java.util.Map;
@Mapper @Mapper
public interface SchoolStudentParentMapper extends BaseMapper<SchoolStudentParent> { public interface SchoolStudentParentMapper extends BaseMapper<SchoolStudentParent> {
List<SchoolStudentParent> queryList(SchoolStudentParent schoolStudentParent); List<SchoolStudentParent> queryList(SchoolStudentParent schoolStudentParent);
List<Map<String,Object>> getRoleTypeByPhoneNumber(String phonenumber);
/** /**
* 微信公众号登录查询(电话) * 微信公众号登录查询(电话)
* @param parentTelephone * @param parentTelephone
* @return * @return
*/ */
SchoolStudentParent selectUserByParentTel(@Param("parentTelephone") String parentTelephone, @Param("studentIdCard") String studentIdCard); SchoolStudentParent selectUserByParentTel(@Param("parentTelephone") String parentTelephone);
/** /**
* 公众号,获取用户信息 * 公众号,获取用户信息
......
...@@ -151,6 +151,12 @@ public class SchoolClassImpl extends ServiceImpl<SchoolClassMapper, SchoolClass> ...@@ -151,6 +151,12 @@ public class SchoolClassImpl extends ServiceImpl<SchoolClassMapper, SchoolClass>
return schoolClassMapper.getTeacherClass(teacherId,schoolYear); return schoolClassMapper.getTeacherClass(teacherId,schoolYear);
} }
@Override
public List<SchoolClassVo> selectSchoolClassSchoolYear(String schoolYear) {
return schoolClassMapper.selectSchoolClassSchoolYear(schoolYear);
}
@Override @Override
public void checkImport(List<SchoolClassDrVo> list) { public void checkImport(List<SchoolClassDrVo> list) {
//是否为空 //是否为空
...@@ -2427,4 +2433,8 @@ public class SchoolClassImpl extends ServiceImpl<SchoolClassMapper, SchoolClass> ...@@ -2427,4 +2433,8 @@ public class SchoolClassImpl extends ServiceImpl<SchoolClassMapper, SchoolClass>
} }
@Override
public Long selectDdClassId(String ddId) {
return schoolClassMapper.selectDdClassId(ddId);
}
} }
...@@ -8,15 +8,19 @@ import com.ruoyi.common.utils.DateUtils; ...@@ -8,15 +8,19 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.mapper.SysUserMapper;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import yangtz.cs.liu.campus.domain.schoolEquipment.SchoolCirculation; import yangtz.cs.liu.campus.domain.schoolEquipment.SchoolCirculation;
import yangtz.cs.liu.campus.domain.schoolEquipment.SchoolEquipmentLedger;
import yangtz.cs.liu.campus.mapper.schoolEquipment.CirculationMapper; import yangtz.cs.liu.campus.mapper.schoolEquipment.CirculationMapper;
import yangtz.cs.liu.campus.mapper.schoolEquipment.EquipmentLedgerMapper;
import yangtz.cs.liu.campus.service.schoolEquipment.ICirculationService; import yangtz.cs.liu.campus.service.schoolEquipment.ICirculationService;
import yangtz.cs.liu.campus.vo.schoolEquipment.SchoolCirculationVo; import yangtz.cs.liu.campus.vo.schoolEquipment.SchoolCirculationVo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import yangtz.cs.liu.campus.vo.schoolEquipment.SchoolReceiveQuery; import yangtz.cs.liu.campus.vo.schoolEquipment.SchoolReceiveQuery;
...@@ -28,6 +32,8 @@ public class CirculationServiceImpl extends ServiceImpl<CirculationMapper, Schoo ...@@ -28,6 +32,8 @@ public class CirculationServiceImpl extends ServiceImpl<CirculationMapper, Schoo
private CirculationMapper circulationMapper; private CirculationMapper circulationMapper;
@Autowired @Autowired
private SysUserMapper sysUserMapper; private SysUserMapper sysUserMapper;
@Autowired
private EquipmentLedgerMapper equipmentLedgerMapper;
@Override @Override
public List<SchoolCirculationVo> getReturningEquipmentByadminId(SchoolReceiveQuery schoolReceiveQuery) { public List<SchoolCirculationVo> getReturningEquipmentByadminId(SchoolReceiveQuery schoolReceiveQuery) {
...@@ -100,6 +106,15 @@ public class CirculationServiceImpl extends ServiceImpl<CirculationMapper, Schoo ...@@ -100,6 +106,15 @@ public class CirculationServiceImpl extends ServiceImpl<CirculationMapper, Schoo
String userName = sysUserMapper.selectUserById(schoolCirculation.getReceivedById()).getUserName(); String userName = sysUserMapper.selectUserById(schoolCirculation.getReceivedById()).getUserName();
schoolCirculation.setReceivedBy(userName); schoolCirculation.setReceivedBy(userName);
} }
if (StringUtils.isNotNull(schoolCirculation.getReturnTime())){
if (schoolCirculation.getReturnTime().before(DateUtils.getNowDate()) || schoolCirculation.getReturnTime().equals(DateUtils.getNowDate())){
schoolCirculation.setReturnState("1");
SchoolEquipmentLedger schoolEquipmentLedger = new SchoolEquipmentLedger();
schoolEquipmentLedger.setId(schoolCirculation.getEquipmentId());
schoolEquipmentLedger.setIsLend("0");
equipmentLedgerMapper.updateById(schoolEquipmentLedger);
}
}
schoolCirculation.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserName()); schoolCirculation.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserName());
schoolCirculation.setCreateTime(DateUtils.getNowDate()); schoolCirculation.setCreateTime(DateUtils.getNowDate());
return circulationMapper.insert(schoolCirculation); return circulationMapper.insert(schoolCirculation);
...@@ -121,6 +136,15 @@ public class CirculationServiceImpl extends ServiceImpl<CirculationMapper, Schoo ...@@ -121,6 +136,15 @@ public class CirculationServiceImpl extends ServiceImpl<CirculationMapper, Schoo
String userName = sysUserMapper.selectUserById(schoolCirculation.getReceivedById()).getUserName(); String userName = sysUserMapper.selectUserById(schoolCirculation.getReceivedById()).getUserName();
schoolCirculation.setReceivedBy(userName); schoolCirculation.setReceivedBy(userName);
} }
if (StringUtils.isNotNull(schoolCirculation.getReturnTime())){
if (schoolCirculation.getReturnTime().before(DateUtils.getNowDate()) || schoolCirculation.getReturnTime().equals(DateUtils.getNowDate())){
schoolCirculation.setReturnState("1");
SchoolEquipmentLedger schoolEquipmentLedger = new SchoolEquipmentLedger();
schoolEquipmentLedger.setId(schoolCirculation.getEquipmentId());
schoolEquipmentLedger.setIsLend("0");
equipmentLedgerMapper.updateById(schoolEquipmentLedger);
}
}
schoolCirculation.setUpdateBy(SecurityUtils.getLoginUser().getUser().getUserName()); schoolCirculation.setUpdateBy(SecurityUtils.getLoginUser().getUser().getUserName());
schoolCirculation.setUpdateTime(DateUtils.getNowDate()); schoolCirculation.setUpdateTime(DateUtils.getNowDate());
return circulationMapper.updateById(schoolCirculation); return circulationMapper.updateById(schoolCirculation);
......
...@@ -20,6 +20,7 @@ import yangtz.cs.liu.campus.mapper.schoolLab.SchoolTeacherExperimentApplyMapper; ...@@ -20,6 +20,7 @@ import yangtz.cs.liu.campus.mapper.schoolLab.SchoolTeacherExperimentApplyMapper;
import yangtz.cs.liu.campus.domain.schoolLab.SchoolTeacherExperimentApply; import yangtz.cs.liu.campus.domain.schoolLab.SchoolTeacherExperimentApply;
import yangtz.cs.liu.campus.mapper.schoolLab.SchoollTeacherExperimentApplyLabsMapper; import yangtz.cs.liu.campus.mapper.schoolLab.SchoollTeacherExperimentApplyLabsMapper;
import yangtz.cs.liu.campus.service.schoolLab.ISchoolTeacherExperimentApplyService; import yangtz.cs.liu.campus.service.schoolLab.ISchoolTeacherExperimentApplyService;
import yangtz.cs.liu.campus.service.schoolLab.ISchoollTeacherExperimentApplyLabsService;
import yangtz.cs.liu.campus.vo.schoolLab.SchoolTeacherExperimentApplyVo; import yangtz.cs.liu.campus.vo.schoolLab.SchoolTeacherExperimentApplyVo;
/** /**
...@@ -33,7 +34,8 @@ public class SchoolTeacherExperimentApplyServiceImpl extends ServiceImpl<SchoolT ...@@ -33,7 +34,8 @@ public class SchoolTeacherExperimentApplyServiceImpl extends ServiceImpl<SchoolT
{ {
@Autowired @Autowired
private SchoolTeacherExperimentApplyMapper schoolTeacherExperimentApplyMapper; private SchoolTeacherExperimentApplyMapper schoolTeacherExperimentApplyMapper;
@Autowired
private ISchoollTeacherExperimentApplyLabsService schoollTeacherExperimentApplyLabsService;
/** /**
* 查询教师个人实验申请 * 查询教师个人实验申请
* *
...@@ -43,7 +45,12 @@ public class SchoolTeacherExperimentApplyServiceImpl extends ServiceImpl<SchoolT ...@@ -43,7 +45,12 @@ public class SchoolTeacherExperimentApplyServiceImpl extends ServiceImpl<SchoolT
@Override @Override
public SchoolTeacherExperimentApplyVo selectSchoolTeacherExperimentApplyById(Long id) public SchoolTeacherExperimentApplyVo selectSchoolTeacherExperimentApplyById(Long id)
{ {
return schoolTeacherExperimentApplyMapper.selectSchoolTeacherExperimentApplyById(id); SchoolTeacherExperimentApplyVo schoolTeacherExperimentApplyVo = schoolTeacherExperimentApplyMapper.selectSchoolTeacherExperimentApplyById(id);
LambdaQueryWrapper<SchoolTeacherExperimentApplyLabs> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SchoolTeacherExperimentApplyLabs::getTeacherExperimentApplyId,schoolTeacherExperimentApplyVo.getId());
List<SchoolTeacherExperimentApplyLabs> schoolTeacherExperimentApplyLabs = schoollTeacherExperimentApplyLabsService.list(wrapper);
schoolTeacherExperimentApplyVo.setSchoolTeacherExperimentApplyLabsList(schoolTeacherExperimentApplyLabs);
return schoolTeacherExperimentApplyVo;
} }
/** /**
...@@ -55,7 +62,14 @@ public class SchoolTeacherExperimentApplyServiceImpl extends ServiceImpl<SchoolT ...@@ -55,7 +62,14 @@ public class SchoolTeacherExperimentApplyServiceImpl extends ServiceImpl<SchoolT
@Override @Override
public List<SchoolTeacherExperimentApplyVo> selectSchoolTeacherExperimentApplyList(SchoolTeacherExperimentApplyVo schoolTeacherExperimentApplyVo) public List<SchoolTeacherExperimentApplyVo> selectSchoolTeacherExperimentApplyList(SchoolTeacherExperimentApplyVo schoolTeacherExperimentApplyVo)
{ {
return schoolTeacherExperimentApplyMapper.selectSchoolTeacherExperimentApplyList(schoolTeacherExperimentApplyVo); List<SchoolTeacherExperimentApplyVo> schoolTeacherExperimentApplyVos = schoolTeacherExperimentApplyMapper.selectSchoolTeacherExperimentApplyList(schoolTeacherExperimentApplyVo);
for ( SchoolTeacherExperimentApplyVo date : schoolTeacherExperimentApplyVos){
LambdaQueryWrapper<SchoolTeacherExperimentApplyLabs> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SchoolTeacherExperimentApplyLabs::getTeacherExperimentApplyId,date.getId());
List<SchoolTeacherExperimentApplyLabs> schoolTeacherExperimentApplyLabs = schoollTeacherExperimentApplyLabsService.list(wrapper);
date.setSchoolTeacherExperimentApplyLabsList(schoolTeacherExperimentApplyLabs);
}
return schoolTeacherExperimentApplyVos;
} }
@Override @Override
......
...@@ -238,4 +238,14 @@ public class ISchoolGradeImpl extends ServiceImpl<SchoolGradeMapper, SchoolGrade ...@@ -238,4 +238,14 @@ public class ISchoolGradeImpl extends ServiceImpl<SchoolGradeMapper, SchoolGrade
public int isNewSchoolYear() { public int isNewSchoolYear() {
return schoolGradeMapper.isNewSchoolYear(); return schoolGradeMapper.isNewSchoolYear();
} }
@Override
public Long selectDdClassId(String ddId) {
return schoolGradeMapper.selectDdClassId(ddId);
}
@Override
public String selectUpToYear() {
return schoolGradeMapper.selectUpToYear();
}
} }
...@@ -26,6 +26,7 @@ import yangtz.cs.liu.wechat.vo.userInfo.UserInfoVo; ...@@ -26,6 +26,7 @@ import yangtz.cs.liu.wechat.vo.userInfo.UserInfoVo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import static com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotNull; import static com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotNull;
import static com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNull; import static com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNull;
...@@ -67,6 +68,14 @@ public class SchoolStudentParentServiceImpl extends ServiceImpl<SchoolStudentPar ...@@ -67,6 +68,14 @@ public class SchoolStudentParentServiceImpl extends ServiceImpl<SchoolStudentPar
return schoolStudentParentMapper.selectList(lqw); return schoolStudentParentMapper.selectList(lqw);
} }
public List<Map<String,Object>> getRoleTypeByPhoneNumber(String phonenumber){
return schoolStudentParentMapper.getRoleTypeByPhoneNumber(phonenumber);
}
/** /**
* 公众号,获取用户信息 * 公众号,获取用户信息
* *
......
...@@ -419,6 +419,10 @@ public class SchoolStudentServiceImpl extends ServiceImpl<SchoolStudentMapper, S ...@@ -419,6 +419,10 @@ public class SchoolStudentServiceImpl extends ServiceImpl<SchoolStudentMapper, S
return schoolStudentMapper.getMemberByTeacher(teacherId); return schoolStudentMapper.getMemberByTeacher(teacherId);
} }
public Long getDdUserId(String foUserId ){
return schoolStudentMapper.getDdUserId(foUserId);
}
/** /**
* 家长查看班级其他同学 * 家长查看班级其他同学
* *
......
...@@ -39,6 +39,9 @@ public interface ISchoolClassService extends IService<SchoolClass> { ...@@ -39,6 +39,9 @@ public interface ISchoolClassService extends IService<SchoolClass> {
List<SchoolClassVo> getTeacherClass(Long teacherId); List<SchoolClassVo> getTeacherClass(Long teacherId);
List<SchoolClassVo> selectSchoolClassSchoolYear(String schoolYear);
// /** // /**
// * 校验 // * 校验
// * @param list // * @param list
...@@ -88,4 +91,8 @@ public interface ISchoolClassService extends IService<SchoolClass> { ...@@ -88,4 +91,8 @@ public interface ISchoolClassService extends IService<SchoolClass> {
/**批量新增班级*/ /**批量新增班级*/
int batchAdd(ClassBatchVo vo); int batchAdd(ClassBatchVo vo);
Long selectDdClassId(String ddId);
} }
...@@ -25,5 +25,7 @@ public interface ISchoolGradeService extends IService<SchoolGrade> { ...@@ -25,5 +25,7 @@ public interface ISchoolGradeService extends IService<SchoolGrade> {
//获取最新学年 //获取最新学年
int isNewSchoolYear(); int isNewSchoolYear();
Long selectDdClassId(String ddId);
String selectUpToYear();
} }
...@@ -57,6 +57,13 @@ public interface ISchoolStudentService extends IService<SchoolStudent> { ...@@ -57,6 +57,13 @@ public interface ISchoolStudentService extends IService<SchoolStudent> {
* @param teacherId * @param teacherId
* @return * @return
*/ */
Long getDdUserId(String foUserId);
/**
* 根据dduserId查找id
* @param teacherId
* @return
*/
List<SchoolStudent> getMemberByTeacher(Long teacherId); List<SchoolStudent> getMemberByTeacher(Long teacherId);
/** /**
......
...@@ -301,4 +301,5 @@ public class SchoolStudentVO { ...@@ -301,4 +301,5 @@ public class SchoolStudentVO {
//教务-学生管理-学籍表-所在年级 //教务-学生管理-学籍表-所在年级
private String currentGrade; private String currentGrade;
private String ddUserId;
} }
...@@ -5,10 +5,17 @@ package yangtz.cs.liu.dingding.config; ...@@ -5,10 +5,17 @@ package yangtz.cs.liu.dingding.config;
*/ */
public class Constant { public class Constant {
//测试 事件回调配置
public static final String AES_TOKEN="jGt2S7Kqh475czbgxtr7j1cQsXHWYia"; public static final String AES_TOKEN="jGt2S7Kqh475czbgxtr7j1cQsXHWYia";
public static final String AES_KEY="hz6q2qTgLGD5SHWLvVddOm9HfvrKgKBcDCCf145egyi"; public static final String AES_KEY="hz6q2qTgLGD5SHWLvVddOm9HfvrKgKBcDCCf145egyi";
public static final String OWNER_KEY = "dingclpf8qoxvinhksyh"; public static final String OWNER_KEY = "dingclpf8qoxvinhksyh";
//正式 事件回调配置
// public static final String AES_TOKEN="awLoV2xJlrg6xUK3wQIF88HhVuSVS7Tmpb5MKFI1j7DaLKcn";
//
// public static final String AES_KEY="xGO08pQerwFgBOcabx2eUxLUrAOwa5Q2FJtdylY7ksf";
//
// public static final String OWNER_KEY = "dingggqchzyvxm9e6e7v";
} }
...@@ -78,7 +78,6 @@ public class DdAppLoginController { ...@@ -78,7 +78,6 @@ public class DdAppLoginController {
OapiUserGetuserinfoResponse response; OapiUserGetuserinfoResponse response;
try { try {
response = client.execute(request, access_token); response = client.execute(request, access_token);
System.out.println("-------------"+request);
} catch (ApiException e) { } catch (ApiException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
......
...@@ -6,8 +6,10 @@ import com.dingtalk.api.DefaultDingTalkClient; ...@@ -6,8 +6,10 @@ import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiUserGetuserinfoRequest; import com.dingtalk.api.request.OapiUserGetuserinfoRequest;
import com.dingtalk.api.request.OapiV2UserGetRequest; import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiUserGetuserinfoResponse; import com.dingtalk.api.response.OapiUserGetuserinfoResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse; import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SchoolTeacher; import com.ruoyi.common.core.domain.entity.SchoolTeacher;
...@@ -55,40 +57,40 @@ public class DdLoginController { ...@@ -55,40 +57,40 @@ public class DdLoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET) @RequestMapping(value = "/login", method = RequestMethod.GET)
public AjaxResult login (@RequestParam("code") String code) { public AjaxResult login (@RequestParam("code") String code) {
AjaxResult ajaxResult = new AjaxResult(); AjaxResult ajaxResult = new AjaxResult();
// // 获取access_token,注意正式代码要有异常流处理 // 获取access_token,注意正式代码要有异常流处理
// String access_token= accessTokenUtils.getToken(); String access_token= accessTokenUtils.getToken();
// // 获取用户信息 // 获取用户信息
// DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo"); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo");
// OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest(); OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
// request.setCode(code); request.setCode(code);
// request.setHttpMethod("GET"); request.setHttpMethod("GET");
// OapiUserGetuserinfoResponse response; OapiUserGetuserinfoResponse response;
// try { try {
// response = client.execute(request, access_token); response = client.execute(request, access_token);
// } catch (ApiException e) { } catch (ApiException e) {
// // TODO Auto-generated catch block // TODO Auto-generated catch block
// e.printStackTrace(); e.printStackTrace();
// return null; return null;
// } }
// // 查询得到当前用户的userId // 查询得到当前用户的userId
// // 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验 // 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验
// String userId = response.getUserid(); String userId = response.getUserid();
// if (StringUtils.isEmpty(userId)){ if (StringUtils.isEmpty(userId)){
// throw new ServiceException("免登码已失效,请重新获取"); throw new ServiceException("免登码已失效,请重新获取");
// } }
// //获取用户详细信息 //获取用户详细信息
// Map<String, Object> userInfo = getUserInfo(userId, access_token); Map<String, Object> userInfo = getUserInfo(userId, access_token);
// String phone = (String) userInfo.get("phone"); String phone = (String) userInfo.get("phone");
// String unionId = (String) userInfo.get("unionId"); String unionId = (String) userInfo.get("unionId");
SchoolTeacher schoolTeacher = schoolTeacherService.selectTeacherByPhone("15888888888"); SchoolTeacher schoolTeacher = schoolTeacherService.selectTeacherByPhone(phone);
if (StringUtils.isNull(schoolTeacher)){ if (StringUtils.isNull(schoolTeacher)){
throw new ServiceException("未查询到该用户信息"); throw new ServiceException("未查询到该用户信息");
} }
Long userId = schoolTeacher.getId(); Long userId1 = schoolTeacher.getId();
SysUser sysUser = sysUserService.selectUserById(userId); SysUser sysUser = sysUserService.selectUserById(userId1);
//更新钉钉用户iid和unionId //更新钉钉用户iid和unionId
// sysUser.setUnionId(unionId); sysUser.setUnionId(unionId);
// schoolTeacherService.updateDdUserId(sysUser, userId); schoolTeacherService.updateDdUserId(sysUser, userId);
String token = loginService.loginNew(sysUser); String token = loginService.loginNew(sysUser);
ajaxResult.put(Constants.TOKEN, token); ajaxResult.put(Constants.TOKEN, token);
return ajaxResult; return ajaxResult;
......
package yangtz.cs.liu.dingding.controller;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/dd/school/dept")
public class DdSchoolDeptController {
@GetMapping("/getDeptList")
public TableDataInfo getDeptList(){
return null;
}
}
...@@ -2,19 +2,45 @@ package yangtz.cs.liu.dingding.controller; ...@@ -2,19 +2,45 @@ package yangtz.cs.liu.dingding.controller;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
//import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.domain.entity.SchoolTeacher;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import yangtz.cs.liu.campus.domain.schoolClass.SchoolClass;
import yangtz.cs.liu.campus.domain.schoolClass.SchoolClassHeadmaster;
import yangtz.cs.liu.campus.domain.schoolClass.SchoolClassMentor;
import yangtz.cs.liu.campus.domain.schoolgrade.SchoolGrade;
import yangtz.cs.liu.campus.domain.schoolgrade.SchoolGradeMentor;
import yangtz.cs.liu.campus.domain.student.SchoolStudent;
import yangtz.cs.liu.campus.domain.student.SchoolStudentClassRelation;
import yangtz.cs.liu.campus.domain.student.SchoolStudentClasses;
import yangtz.cs.liu.campus.domain.student.SchoolStudentParent;
import yangtz.cs.liu.campus.service.schoolClass.ISchoolClassHeadmasterService;
import yangtz.cs.liu.campus.service.schoolClass.ISchoolClassMentorService;
import yangtz.cs.liu.campus.service.schoolClass.ISchoolClassService;
import yangtz.cs.liu.campus.service.schoolgrade.ISchoolGradeMentorService;
import yangtz.cs.liu.campus.service.schoolgrade.ISchoolGradeService;
import yangtz.cs.liu.campus.service.student.ISchoolStudentClassRelationService;
import yangtz.cs.liu.campus.service.student.ISchoolStudentClassesService;
import yangtz.cs.liu.campus.service.student.ISchoolStudentParentService;
import yangtz.cs.liu.campus.service.student.ISchoolStudentService;
import yangtz.cs.liu.campus.service.teacher.ISchoolTeacherService;
import yangtz.cs.liu.campus.vo.student.SchoolStudentVO;
import yangtz.cs.liu.campus.vo.teacher.SchoolTeacherVO;
import yangtz.cs.liu.dingding.utils.AccessTokenUtils; import yangtz.cs.liu.dingding.utils.AccessTokenUtils;
import yangtz.cs.liu.dingding.vo.DingJiaXiaoVo; import yangtz.cs.liu.dingding.vo.DingJiaXiaoVo;
import java.util.ArrayList; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
/** /**
* 家校通讯录 * 家校通讯录
...@@ -23,6 +49,9 @@ import java.util.List; ...@@ -23,6 +49,9 @@ import java.util.List;
@RequestMapping("/dd/djtx") @RequestMapping("/dd/djtx")
public class DingJiaXiaoController { public class DingJiaXiaoController {
private static final Logger log = LoggerFactory.getLogger(DingJiaXiaoController.class);
@Autowired @Autowired
private AccessTokenUtils accessTokenUtils; private AccessTokenUtils accessTokenUtils;
...@@ -30,6 +59,42 @@ public class DingJiaXiaoController { ...@@ -30,6 +59,42 @@ public class DingJiaXiaoController {
final String userUrl ="https://oapi.dingtalk.com/topapi/edu/user/list?access_token="; final String userUrl ="https://oapi.dingtalk.com/topapi/edu/user/list?access_token=";
//年级表
@Autowired
ISchoolGradeService schoolGradeService;
//职工与年级关系 ----------------
@Autowired
ISchoolGradeMentorService schoolGradeMentorService;
//学校班级
@Autowired
ISchoolClassService iSchoolClassService;
//班主任和班级关系 ------------------
@Autowired
ISchoolClassHeadmasterService iSchoolClassHeadmasterService;
//任课老师和班级关系 ----------------
@Autowired
ISchoolClassMentorService schoolClassMentorService;
//学生表 ---------------------
@Autowired
ISchoolStudentService schoolStudentService;
//学生与班级关系 --------------------
@Autowired
ISchoolStudentClassRelationService iSchoolStudentClassRelationService;
//学生历史班级表 -----------------
@Autowired
ISchoolStudentClassesService schoolStudentClassesService;
//家长信息表 ---------------------
@Autowired
ISchoolStudentParentService iSchoolStudentParentService;
//老师表
@Autowired
ISchoolTeacherService schoolTeacherService;
//用户表 ----------------
@Autowired
ISysUserService sysUserService;
public List<String> userTypes = new ArrayList<String>(){ public List<String> userTypes = new ArrayList<String>(){
{ {
this.add("teacher"); this.add("teacher");
...@@ -38,12 +103,15 @@ public class DingJiaXiaoController { ...@@ -38,12 +103,15 @@ public class DingJiaXiaoController {
} }
}; };
@GetMapping("/getList")
private List<DingJiaXiaoVo> getList(){
//更新年级与班级
@GetMapping("/updateLabClassYear")
private String updateLabClassYear(){
String token = accessTokenUtils.getToken();
//年级 //年级
List<DingJiaXiaoVo> njInfoList = new ArrayList<>(); List<SchoolGrade> schoolGradeCopies = new ArrayList<>();
// 0 获取校园信息 // 0 获取校园信息
String token = accessTokenUtils.getToken();
JSONObject jsonObjectParme = new JSONObject(); JSONObject jsonObjectParme = new JSONObject();
jsonObjectParme.put("page_no",1); jsonObjectParme.put("page_no",1);
jsonObjectParme.put("page_size",30); jsonObjectParme.put("page_size",30);
...@@ -52,7 +120,7 @@ public class DingJiaXiaoController { ...@@ -52,7 +120,7 @@ public class DingJiaXiaoController {
if ((Integer) jsonObject.get("errcode") != 0){ if ((Integer) jsonObject.get("errcode") != 0){
throw new RuntimeException("获取校园列表失败"); throw new RuntimeException("获取校园列表失败");
} }
Integer deptId = null; Integer deptId = null;
JSONObject result = (JSONObject)jsonObject.get("result"); JSONObject result = (JSONObject)jsonObject.get("result");
JSONArray detailsArray = JSONArray.of(result.get("details")); JSONArray detailsArray = JSONArray.of(result.get("details"));
for (int i = 0 ; i < detailsArray.size(); i ++){ for (int i = 0 ; i < detailsArray.size(); i ++){
...@@ -65,7 +133,6 @@ public class DingJiaXiaoController { ...@@ -65,7 +133,6 @@ public class DingJiaXiaoController {
xyParme.put("page_size",30); xyParme.put("page_size",30);
xyParme.put("super_id",deptId); xyParme.put("super_id",deptId);
String xyPost = HttpUtil.post(listUrl+token, xyParme); String xyPost = HttpUtil.post(listUrl+token, xyParme);
JSONObject xyObject = JSONObject.parseObject(xyPost); JSONObject xyObject = JSONObject.parseObject(xyPost);
if ((Integer) xyObject.get("errcode") != 0){ if ((Integer) xyObject.get("errcode") != 0){
throw new RuntimeException("获取年纪列表失败"); throw new RuntimeException("获取年纪列表失败");
...@@ -73,10 +140,10 @@ public class DingJiaXiaoController { ...@@ -73,10 +140,10 @@ public class DingJiaXiaoController {
JSONObject xyResult = (JSONObject)xyObject.get("result"); JSONObject xyResult = (JSONObject)xyObject.get("result");
JSONArray xyDetailsArray = JSONArray.of(xyResult.get("details")); JSONArray xyDetailsArray = JSONArray.of(xyResult.get("details"));
for (int i = 0 ; i < xyDetailsArray.size(); i ++){ for (int i = 0 ; i < xyDetailsArray.size(); i ++){
JSONObject da = xyDetailsArray.getJSONArray(i).getJSONObject(i); JSONObject da = xyDetailsArray.getJSONArray(i).getJSONObject(i);
deptId = (Integer) da.get("dept_id"); deptId = (Integer) da.get("dept_id");
} }
//2.获取校园年级 //2.获取校园年级
JSONObject njParme = new JSONObject(); JSONObject njParme = new JSONObject();
njParme.put("page_no",1); njParme.put("page_no",1);
njParme.put("page_size",30); njParme.put("page_size",30);
...@@ -88,88 +155,286 @@ public class DingJiaXiaoController { ...@@ -88,88 +155,286 @@ public class DingJiaXiaoController {
} }
JSONObject njResult = (JSONObject)njObject.get("result"); JSONObject njResult = (JSONObject)njObject.get("result");
JSONArray njDetailsArray = JSONArray.of(njResult.get("details")); JSONArray njDetailsArray = JSONArray.of(njResult.get("details"));
for (int i = 0 ; i < njDetailsArray.size(); i ++){ for (int i = 0 ; i < njDetailsArray.size(); i ++) {
for (int q = 0; q < njDetailsArray.getJSONArray(i).size(); q++) {
for (int q = 0 ; q < njDetailsArray.getJSONArray(i).size(); q++){ JSONObject da = njDetailsArray.getJSONArray(i).getJSONObject(q);
String grName = (String) da.get("name");
//截取级部 2022级
String gradeJi = grName.substring(grName.length() - 5);
String grade = gradeJi.substring(0,gradeJi.length()-1);
//获取年级 一年级
String gradeName = grName.substring(0, grName.length() - 5);
//级部id
Integer suId = (Integer) da.get("dept_id");
SchoolGrade schoolGrade = new SchoolGrade();
schoolGrade.setGradeValue(Integer.valueOf(this.gradeSubt(gradeName)));
schoolGrade.setGradeYear(grade);
schoolGrade.setGradeName(gradeJi+"部");
schoolGrade.setRemark(gradeName);
schoolGrade.setDdClassId(String.valueOf(suId));
schoolGrade.setCreateTime(new Date());
schoolGrade.setCreateBy("admin");
schoolGrade.setDelFlag("0");
schoolGrade.setUpdateBy("admin");
schoolGrade.setUpdateTime(new Date());
schoolGradeCopies.add(schoolGrade);
}
}
JSONObject da = njDetailsArray.getJSONArray(i).getJSONObject(q); //对年级进行排序 找出最新年级 设则最新学年状态 并且找出班级 进行保存
Integer supId = (Integer) da.get("dept_id"); List<SchoolGrade> collect = schoolGradeCopies.stream().sorted(Comparator.comparing(SchoolGrade::getGradeYear, Comparator.reverseOrder())).collect(Collectors.toList());
DingJiaXiaoVo dingJiaXiaoVo = new DingJiaXiaoVo(); //最新学年
dingJiaXiaoVo.setGradeId((Integer) da.get("dept_id")); String schoolYear = collect.get(0).getGradeYear();
dingJiaXiaoVo.setGradeName((String) da.get("name")); for (int i = 0; i < collect.size();i++) {
//3.查询年纪下的班级 collect.get(i).setSchoolYear(schoolYear);
JSONObject bjParme = new JSONObject(); if (i >= 3){
bjParme.put("page_no",1); //当前第四个以上不是新学年 更新数据库新学年状态
bjParme.put("page_size",30); List<SchoolGrade> schoolGradeCopies1 = schoolGradeService.queryList(collect.get(i));
bjParme.put("super_id",supId); if (schoolGradeCopies1.isEmpty()){
String bjPost = HttpUtil.post(listUrl+token, bjParme); collect.get(i).setSfzxxn("1");
JSONObject bjObject = JSONObject.parseObject(bjPost); schoolGradeService.save(collect.get(i));
if ((Integer) bjObject.get("errcode") != 0){ }else {
throw new RuntimeException("获取班级列表失败"); for (SchoolGrade date : schoolGradeCopies1){
date.setSfzxxn("1");
schoolGradeService.updateById(date);
}
}
continue;
}
//追加学年
List<SchoolGrade> schoolGradeCopies1 = schoolGradeService.queryList(collect.get(i));
if (schoolGradeCopies1.isEmpty()){
//追加
collect.get(i).setSfzxxn("0");
schoolGradeService.save(collect.get(i));
} }
}
//追加班级
for ( SchoolGrade date: collect){
if (date.getId()==null){
Long l = schoolGradeService.selectDdClassId(date.getDdClassId());
date.setId(l);
}
//查找班级
//保存班级
JSONArray ddHttp = this.getDdHttp(date.getDdClassId(), token);
JSONArray jsonArrays = ddHttp.getJSONArray(0);
for (int i = 0 ; i < jsonArrays.size() ; i++){
//查询当前班级是否存在
String classDdId = jsonArrays.getJSONObject(i).get("dept_id").toString();
Long classId = iSchoolClassService.selectDdClassId(classDdId);
if (null != classId){
SchoolClass schoolClass = new SchoolClass();
schoolClass.setSchoolYear(Integer.valueOf(date.getSchoolYear()));
schoolClass.setClassType("4");
schoolClass.setGradeValue(date.getGradeValue());
schoolClass.setGradeName(date.getGradeName());
schoolClass.setClassValue(Integer.valueOf(jsonArrays.getJSONObject(i).getJSONObject("feature").get("class_level").toString()));
String className = jsonArrays.getJSONObject(i).get("name").toString();
schoolClass.setClassName(className.substring(className.length()-2));
schoolClass.setClassAlias(jsonArrays.getJSONObject(i).get("name").toString());
schoolClass.setUpdateBy("admin");
schoolClass.setUpdateTime(new Date());
schoolClass.setGradeId(date.getId());
schoolClass.setDdClassId(classDdId);
schoolClass.setId(classId);
iSchoolClassService.updateById(schoolClass);
}else {
SchoolClass schoolClass = new SchoolClass();
schoolClass.setSchoolYear(Integer.valueOf(date.getSchoolYear()));
schoolClass.setClassType("4");
schoolClass.setGradeValue(date.getGradeValue());
schoolClass.setGradeName(date.getGradeName());
schoolClass.setClassValue(Integer.valueOf(jsonArrays.getJSONObject(i).getJSONObject("feature").get("class_level").toString()));
String className = jsonArrays.getJSONObject(i).get("name").toString();
schoolClass.setClassName(className.substring(className.length()-2));
schoolClass.setClassAlias(jsonArrays.getJSONObject(i).get("name").toString());
schoolClass.setCreateBy("admin");
schoolClass.setCreateTime(new Date());
schoolClass.setUpdateBy("admin");
schoolClass.setUpdateTime(new Date());
schoolClass.setGradeId(date.getId());
schoolClass.setDdClassId(classDdId);
iSchoolClassService.save(schoolClass);
}
}
}
JSONObject bjResult = (JSONObject)bjObject.get("result"); return "1";
JSONArray bjDetailsArray = JSONArray.of(bjResult.get("details")); }
//班级
List<DingJiaXiaoVo.ClassInfo> classInfoList = new ArrayList<>();
//查询班级班级 //更新追加人员信息
for (int j = 0 ; j < bjDetailsArray.size(); j ++) { @GetMapping("/updateLabUser")
private String updateLabUser(){
for (int n = 0; n < bjDetailsArray.getJSONArray(j).size(); n++) { //查找当前学年 所有的班级
JSONObject classDate = bjDetailsArray.getJSONArray(j).getJSONObject(n); String nowSchoolYear = schoolGradeService.selectUpToYear();
Integer classId = (Integer) classDate.get("dept_id"); SchoolClass schoolClass = new SchoolClass();
//创建班级 schoolClass.setSchoolYear(Integer.valueOf(nowSchoolYear));
DingJiaXiaoVo.ClassInfo classInfo = new DingJiaXiaoVo().new ClassInfo(); List<SchoolClass> schoolClassCopies = iSchoolClassService.selectSchoolClassList(schoolClass);
classInfo.setClassId((Integer) classDate.get("dept_id")); String token = accessTokenUtils.getToken();
classInfo.setClassName((String) classDate.get("name")); for (SchoolClass date : schoolClassCopies){
/** //查询班级下边的人员 包含三种人员查询
* 学生信息 //学生信息
*/
List<DingJiaXiaoVo.StudentUserInfo> studentUserInfos = new ArrayList<>(); List<DingJiaXiaoVo.StudentUserInfo> studentUserInfos = new ArrayList<>();
/** //老师信息
* 老师信息
*/
List<DingJiaXiaoVo.StudentUserInfo> teacherUserInfos = new ArrayList<>(); List<DingJiaXiaoVo.StudentUserInfo> teacherUserInfos = new ArrayList<>();
/** //监护人信息*
* 监护人信息
*/
List<DingJiaXiaoVo.StudentUserInfo> guardianUserInfos = new ArrayList<>(); List<DingJiaXiaoVo.StudentUserInfo> guardianUserInfos = new ArrayList<>();
SchoolTeacherVO schoolTeacher = new SchoolTeacherVO();
//分页查询,每次查询数据最大只有30条,分5次查询 一个班判断最大150人 //分页查询,每次查询数据最大只有30条,分5次查询 一个班判断最大150人
for (String type : userTypes) { for (String type : userTypes) {
if (type.equals("teacher")) { if (type.equals("teacher")) {
//老师 //同步家校通讯老师
teacherUserInfos = this.addUserList(token, type, classId); teacherUserInfos = this.addUserList(token, type, date.getDdClassId());
for (DingJiaXiaoVo.StudentUserInfo teachDate : teacherUserInfos){
// 关联老师跟班级信息
schoolTeacher.setTeacherName(teachDate.getName());
List<SchoolTeacher> schoolTeacherCopies = schoolTeacherService.selectSchoolTeacherList(schoolTeacher);
if (schoolTeacherCopies.isEmpty()){
log.error("钉钉老师未在系统中找到:"+teachDate.getName());
continue;
}
SchoolTeacher classHeadTeacher = schoolTeacherCopies.get(0);
//职工跟年级关系
SchoolGradeMentor schoolGradeMentor = new SchoolGradeMentor();
schoolGradeMentor.setTeacherId(classHeadTeacher.getId());
schoolGradeMentor.setGradeId(date.getGradeId());
schoolGradeMentorService.save(schoolGradeMentor);
if ("1".equals(teachDate.getIsAdviser())){
//当前老师是班主任 记录班主任跟班级关系
SchoolClassHeadmaster schoolClassHeadmaster = new SchoolClassHeadmaster();
schoolClassHeadmaster.setTeacherId(classHeadTeacher.getId());
schoolClassHeadmaster.setClassId(date.getId());
iSchoolClassHeadmasterService.save(schoolClassHeadmaster);
//设置班级 班主任信息
SchoolClass schoolClassss = new SchoolClass();
schoolClassss.setId(date.getId());
schoolClassss.setTeacherId(classHeadTeacher.getId());
schoolClassss.setTeacherName(classHeadTeacher.getTeacherName());
schoolClassss.setTeacherTel(classHeadTeacher.getTeacherTel());
iSchoolClassService.updateById(schoolClassss);
}else {
//任课老师 跟班级关系
SchoolClassMentor schoolClassMentor = new SchoolClassMentor();
schoolClassMentor.setTeacherId(classHeadTeacher.getId());
schoolClassMentor.setClassId(date.getId());
//查找部门 课程没有编写
schoolClassMentorService.save(schoolClassMentor);
}
}
} else if (type.equals("student")) {
//学生
studentUserInfos = this.addUserList(token, type, date.getDdClassId());
for (DingJiaXiaoVo.StudentUserInfo studentDte : studentUserInfos) {
//学生信息
SchoolStudent schoolStudent = new SchoolStudent();
schoolStudent.setStudentName(studentDte.getName());
schoolStudent.setClassId(date.getId());
schoolStudent.setStudentStatus("1");
schoolStudent.setDdUserId(studentDte.getUserId());
schoolStudentService.save(schoolStudent);
//学生班级信息
SchoolStudentClassRelation schoolStudentClassRelation = new SchoolStudentClassRelation();
schoolStudentClassRelation.setStudentId(schoolStudent.getId());
schoolStudentClassRelation.setClassId(date.getId());
iSchoolStudentClassRelationService.save(schoolStudentClassRelation);
//学生与班级历史关系
SchoolClass school= iSchoolClassService.selectSchoolClassById(date.getId());
SchoolStudentClasses schoolStudentClasses = new SchoolStudentClasses();
schoolStudentClasses.setStudentId(schoolStudent.getId());
schoolStudentClasses.setGrade(school.getGradeName());
schoolStudentClasses.setClasses(school.getClassName());
schoolStudentClasses.setTeacherName(school.getTeacherName());
schoolStudentClassesService.save(schoolStudentClasses);
}
} else if (type.equals("guardian")) { } else if (type.equals("guardian")) {
//监护人 //监护人
guardianUserInfos = this.addUserList(token, type, classId); guardianUserInfos = this.addUserList(token, type, date.getDdClassId());
} else if (type.equals("student")) { for (DingJiaXiaoVo.StudentUserInfo guarDate : guardianUserInfos){
//学生 //找寻学生
studentUserInfos = this.addUserList(token, type, classId); String toUserId = this.getToUserId(token, guarDate.getUserId(), date.getDdClassId());
SchoolStudentVO schoolStudentVO = new SchoolStudentVO();
schoolStudentVO.setDdUserId(toUserId);
List<SchoolStudentVO> schoolStudentVOS = schoolStudentService.queryList(schoolStudentVO);
Long studenId =null;
if (!schoolStudentVOS.isEmpty()){
studenId = schoolStudentVOS.get(0).getId();
}
//创建用户user表
SysUser jUser = new SysUser();
jUser.setLoginName(guarDate.getName());
jUser.setUserName(guarDate.getName());
jUser.setUserType("01");
jUser.setUserLoginType("1");
jUser.setPhonenumber(guarDate.getMobile());
jUser.setPassword(SecurityUtils.encryptPassword("123#@!"));
jUser.setStatus("0");
jUser.setDelFlag("0");
jUser.setUnionId(guarDate.getUnionid());
jUser.setRoleIds(new Long[]{111L});
jUser.setStudentId(studenId);
sysUserService.insertUser(jUser);
//家长表
SchoolStudentParent schoolStudentParent = new SchoolStudentParent() ;
schoolStudentParent.setStudentId(studenId);
schoolStudentParent.setUserId(jUser.getUserId());
schoolStudentParent.setParentName(guarDate.getName());
schoolStudentParent.setTelephone(guarDate.getMobile());
Integer patriarch = this.getPatriarch(guarDate.getName().substring(guarDate.getName().length() - 2));
schoolStudentParent.setRelationship(String.valueOf(patriarch));
iSchoolStudentParentService.save(schoolStudentParent);
}
} }
} }
//将人员存入班级中 }
classInfo.setStudentUserInfos(studentUserInfos);
classInfo.setTeacherUserInfos(teacherUserInfos);
classInfo.setGuardianUserInfos(guardianUserInfos);
classInfoList.add(classInfo);
}
}
dingJiaXiaoVo.setClassInfoList(classInfoList);
njInfoList.add(dingJiaXiaoVo);
}
return "";
}
//获取监护人详情 获取学生userid
private String getToUserId(String token,String fromUserId,String classId){
String toUserId = null;
JSONObject bjParme = new JSONObject();
bjParme.put("from_userid",fromUserId);
bjParme.put("class_id",classId);
String bjPost = HttpUtil.post("https://oapi.dingtalk.com/topapi/edu/user/relation/get?access_token="+token, bjParme);
JSONObject bjObject = JSONObject.parseObject(bjPost);
if ((Integer) bjObject.get("errcode") != 0){
throw new RuntimeException("获取班级列表失败");
}
JSONArray jsonArray = bjObject.getJSONObject("result").getJSONArray("relations");
for (int i= 0; i< jsonArray.size();i++){
toUserId = jsonArray.getJSONObject(0).get("to_userid").toString();
} }
return njInfoList; return toUserId;
} }
private JSONArray getDdHttp (String supId,String token ){
JSONObject bjParme = new JSONObject();
bjParme.put("page_no",1);
bjParme.put("page_size",30);
bjParme.put("super_id",supId);
String bjPost = HttpUtil.post(listUrl+token, bjParme);
JSONObject bjObject = JSONObject.parseObject(bjPost);
if ((Integer) bjObject.get("errcode") != 0){
throw new RuntimeException("获取班级列表失败");
}
JSONObject bjResult = (JSONObject)bjObject.get("result");
JSONArray bjDetailsArray = JSONArray.of(bjResult.get("details"));
return bjDetailsArray;
}
private List<DingJiaXiaoVo.StudentUserInfo> addUserList(String token,String type,Integer classId){ private List<DingJiaXiaoVo.StudentUserInfo> addUserList(String token,String type,String classId){
List<DingJiaXiaoVo.StudentUserInfo> userList = new ArrayList<>(); List<DingJiaXiaoVo.StudentUserInfo> userList = new ArrayList<>();
//分页查询,每次查询数据最大只有30条,分5次查询 一个班判断最大150人 //分页查询,每次查询数据最大只有30条,分5次查询 一个班判断最大150人
for (int k = 1;k <= 5; k++ ){ for (int k = 1;k <= 4; k++ ){
//查询班级下边的人员 //查询班级下边的人员
JSONObject ryParme = new JSONObject(); JSONObject ryParme = new JSONObject();
ryParme.put("page_no",k); ryParme.put("page_no",k);
...@@ -179,12 +444,11 @@ public class DingJiaXiaoController { ...@@ -179,12 +444,11 @@ public class DingJiaXiaoController {
String ryPost = HttpUtil.post(userUrl+token, ryParme); String ryPost = HttpUtil.post(userUrl+token, ryParme);
JSONObject ryObject = JSONObject.parseObject(ryPost); JSONObject ryObject = JSONObject.parseObject(ryPost);
if ((Integer) ryObject.get("errcode") != 0){ if ((Integer) ryObject.get("errcode") != 0){
throw new RuntimeException("获取班级人员列表失败"); throw new RuntimeException("获取班级人员列表失败"+ryObject.toString());
} }
JSONObject ryResult = (JSONObject)ryObject.get("result"); JSONObject ryResult = (JSONObject)ryObject.get("result");
JSONArray xyDetailsArray = JSONArray.of(ryResult.get("details")); JSONArray xyDetailsArray = JSONArray.of(ryResult.get("details"));
for (int o = 0; o < xyDetailsArray.size(); o++){ for (int o = 0; o < xyDetailsArray.size(); o++){
for (int i = 0 ; i < xyDetailsArray.getJSONArray(o).size(); i++){ for (int i = 0 ; i < xyDetailsArray.getJSONArray(o).size(); i++){
JSONObject userInfo = xyDetailsArray.getJSONArray(o).getJSONObject(i); JSONObject userInfo = xyDetailsArray.getJSONArray(o).getJSONObject(i);
DingJiaXiaoVo.StudentUserInfo studentUserInfo = new DingJiaXiaoVo().new StudentUserInfo(); DingJiaXiaoVo.StudentUserInfo studentUserInfo = new DingJiaXiaoVo().new StudentUserInfo();
...@@ -194,7 +458,12 @@ public class DingJiaXiaoController { ...@@ -194,7 +458,12 @@ public class DingJiaXiaoController {
studentUserInfo.setUnionid(userInfo.get("unionid")==null?null:userInfo.get("unionid").toString()); studentUserInfo.setUnionid(userInfo.get("unionid")==null?null:userInfo.get("unionid").toString());
studentUserInfo.setName(userInfo.get("name").toString()); studentUserInfo.setName(userInfo.get("name").toString());
studentUserInfo.setIsAdviser(userInfo.getJSONObject("feature").get("is_adviser") ==null ? null:userInfo.getJSONObject("feature").get("is_adviser").toString()); studentUserInfo.setIsAdviser(userInfo.getJSONObject("feature").get("is_adviser") ==null ? null:userInfo.getJSONObject("feature").get("is_adviser").toString());
studentUserInfo.setStudentNo(userInfo.get("student_no")==null?null:userInfo.get("student_no").toString()); studentUserInfo.setStudentNo(userInfo.getJSONObject("feature").get("student_no") ==null ? null:userInfo.getJSONObject("feature").get("student_no").toString());
//学生没有手机号 不需要查询手机号
if (!type.equals("student")){
String tel = this.getTel(studentUserInfo.getUserId(), token);
studentUserInfo.setMobile(tel);
}
userList.add(studentUserInfo); userList.add(studentUserInfo);
} }
} }
...@@ -203,4 +472,260 @@ public class DingJiaXiaoController { ...@@ -203,4 +472,260 @@ public class DingJiaXiaoController {
} }
/**
* 钉钉数据同步到数据,
* //班级、级部 、学生、家长、老师、班级关系、
// */
// @GetMapping("/updateJiaXiaoTX")
// public void updateJiaXiaoTX(){
//
// //获取钉钉数据
// List<DingJiaXiaoVo> list = null;
// //循环更新
// for (DingJiaXiaoVo njDate : list){
// //更新年级
// String gradeName = njDate.getGradeName();
// Integer gradeId = njDate.getGradeId();
// SchoolGrade schoolGrade = new SchoolGrade();
// schoolGrade.setGradeName(gradeName.substring(gradeName.length()- 5)+"部");
// schoolGrade.setGradeValue(Integer.valueOf(this.gradeSubt(gradeName.substring(3))));
// schoolGrade.setGradeYear(gradeName.substring(gradeName.length()- 5,4));
// schoolGrade.setSchoolYear(gradeName.substring(gradeName.length()- 5,4));
// schoolGrade.setRemark(gradeName);
// schoolGrade.setId(Long.valueOf(gradeId));
// schoolGradeService.save(schoolGrade);
// //获取班级
// List<DingJiaXiaoVo.ClassInfo> classInfoList = njDate.getClassInfoList();
// //遍历班级
// for (DingJiaXiaoVo.ClassInfo classDate : classInfoList){
//
//
// String teacherName =null;
//
// Integer classId = classDate.getClassId();
// String className = classDate.getClassName();
// Map<String,String> fromUserId = this.getFromUserId(Long.valueOf(classId), accessTokenUtils.getToken());
// SchoolClass schoolClass = new SchoolClass();
// schoolClass.setSchoolYear(Integer.valueOf(schoolGrade.getSchoolYear()));
// schoolClass.setClassType("4");
// schoolClass.setGradeValue(Integer.valueOf(schoolGrade.getGradeYear()));
// schoolClass.setGradeName(schoolGrade.getGradeName());
// schoolClass.setId(Long.valueOf(classId));
// schoolClass.setClassName(className);
// schoolClass.setClassValue(Integer.valueOf(className.substring(className.length()-2,1)));
// schoolClass.setClassAlias(className);
// schoolClass.setGradeId(schoolGrade.getId());
// schoolClass.setGradeId(schoolGrade.getId());
//
// //班级
// iSchoolClassService.save(schoolClass);
//
// //老师
// List<DingJiaXiaoVo.StudentUserInfo> teacherUserInfos = classDate.getTeacherUserInfos();
// for (DingJiaXiaoVo.StudentUserInfo date : teacherUserInfos){
// SysUser sysUser = new SysUser();
// sysUser.setUserId(Long.valueOf(date.getUserId()));
//// sysUser.setDept(); 部门没有
// sysUser.setLoginName(date.getName());
// sysUser.setUserName(date.getName());
// sysUser.setUserType("01");
// sysUser.setUserLoginType("0");
// sysUser.setPhonenumber(date.getMobile());
// sysUser.setPassword(SecurityUtils.encryptPassword("123456"));
// sysUser.setStatus("0");
// sysUser.setDelFlag("0");
// sysUser.setUnionId(date.getUnionid());
// sysUser.setRoleIds(new Long[]{111L});
// //用户表
// sysUserService.insertUser(sysUser);
//
// SchoolTeacher schoolTeacher = new SchoolTeacher();
// schoolTeacher.setTeacherName(date.getName());
// // schoolTeacher.setSex(); 性别没有
// schoolTeacher.setNation("汉族");
//// schoolTeacher.setTeacherCode(); 工作编号
// schoolTeacher.setUserId(sysUser.getUserId());
// schoolTeacher.setTeacherTel(date.getMobile());
// schoolTeacher.setUnionId(date.getUnionid());
// // schoolTeacher.setDeptId(); schoolTeacher.setDeptName(); 部门没有
// //老师表
// schoolTeacherService.save(schoolTeacher);
// //老师与班级关系表 缺少课程信息
//// SchoolClassMentor schoolClassMentor = new SchoolClassMentor();
//// schoolClassMentor.setTeacherId(schoolTeacher.getId());
//// schoolClassMentorService.save(schoolClassMentor);
// if (date.getIsAdviser().equals("1")){
// schoolClass.setTeacherId(schoolTeacher.getId());
// schoolClass.setTeacherName(date.getName());
// schoolClass.setTeacherTel(date.getMobile());
// teacherName = date.getName();
// SchoolClassHeadmaster schoolClassHeadmaster = new SchoolClassHeadmaster();
// schoolClassHeadmaster.setTeacherId(schoolTeacher.getId());
// schoolClassHeadmaster.setClassId(Long.valueOf(classId));
// //班主任和班级关系
// iSchoolClassHeadmasterService.save(schoolClassHeadmaster);
// }
// }
//
// //学生
// List<DingJiaXiaoVo.StudentUserInfo> studentUserInfos = classDate.getStudentUserInfos();
// for (DingJiaXiaoVo.StudentUserInfo date : studentUserInfos){
// //学生表
// SchoolStudent schoolStudent = new SchoolStudent();
// schoolStudent.setStudentName(date.getName());
//// schoolStudent.setSex();
// schoolStudent.setClassId(Long.valueOf(classId));
//// schoolStudent.setIdCard(); 身份证号
// schoolStudent.setNation("汉族");
// schoolStudent.setNationalNumber(date.getStudentNo());
// schoolStudent.setEnrollmentYear(gradeName.substring(gradeName.length()- 5,4));
// schoolStudent.setStudentStatus("1");
// schoolStudent.setId(Long.valueOf(date.getUserId()));
// schoolStudentService.save(schoolStudent);
// //学生与班级关系
// SchoolStudentClassRelation schoolStudentClassRelation = new SchoolStudentClassRelation();
// schoolStudentClassRelation.setClassId(Long.valueOf(classId));
// schoolStudentClassRelation.setStudentId(schoolStudent.getId());
// iSchoolStudentClassRelationService.save(schoolStudentClassRelation);
// //学生历史班级表
// SchoolStudentClasses schoolStudentClasses = new SchoolStudentClasses();
// schoolStudentClasses.setTeacherName(teacherName);
// schoolStudentClasses.setStudentId(schoolStudent.getId());
// schoolStudentClasses.setGrade(gradeName.substring(gradeName.length()- 5,4));
// schoolStudentClasses.setClasses(className);
// schoolStudentClassesService.save(schoolStudentClasses);
// }
// //监护人
// List<DingJiaXiaoVo.StudentUserInfo> guardianUserInfos = classDate.getGuardianUserInfos();
// for (DingJiaXiaoVo.StudentUserInfo date : guardianUserInfos){
// String studentId = fromUserId.get(date.getUserId());
//
// //创建家长用户
// SysUser jUser = new SysUser();
// jUser.setUserId(Long.valueOf(date.getUserId()));
//// sysUser.setDept(); 部门没有
// jUser.setLoginName(date.getName());
// jUser.setUserName(date.getName());
// jUser.setUserType("01");
// jUser.setUserLoginType("1");
// jUser.setPhonenumber(date.getMobile());
// jUser.setPassword(SecurityUtils.encryptPassword("123456"));
// jUser.setStatus("0");
// jUser.setDelFlag("0");
// jUser.setUnionId(date.getUnionid());
// jUser.setRoleIds(new Long[]{111L});
// jUser.setStudentId(Long.valueOf(studentId));
// sysUserService.insertUser(jUser);
// //维护家长表
// SchoolStudentParent schoolStudentParent = new SchoolStudentParent();
// schoolStudentParent.setStudentId(Long.valueOf(studentId));
// schoolStudentParent.setUserId(jUser.getUserId());
// schoolStudentParent.setParentName(date.getName());
// schoolStudentParent.setTelephone(date.getMobile());
// Integer patriarch = this.getPatriarch(date.getName().substring(date.getName().length() - 2));
// schoolStudentParent.setRelationship(patriarch.toString());
// iSchoolStudentParentService.save(schoolStudentParent);
//
// }
//
//
// iSchoolClassService.updateById(schoolClass);
//
//
// }
// }
// }
private String gradeSubt(String grade){
String gId = null;
switch (grade){
case "一年级": return gId = "1";
case "二年级": return gId = "2";
case "三年级": return gId = "3";
case "四年级": return gId = "4";
case "五年级": return gId = "5";
case "六年级": return gId = "6";
case "七年级": return gId = "7";
case "八年级": return gId = "8";
case "九年级": return gId = "9";
case "十年级": return gId = "10";
case "十一年级": return gId = "11";
case "十二年级": return gId = "12";
case "十三年级": return gId = "13";
case "十四年级": return gId = "14";
case "十五年级": return gId = "15";
case "十六年级": return gId = "16";
case "十七年级": return gId = "17";
case "十八年级": return gId = "18";
case "十九年级": return gId = "19";
case "二十年级": return gId = "20";
case "二十一年级": return gId = "21";
case "二十二级": return gId = "22";
case "二十三年级": return gId = "23";
case "二十四年级": return gId = "24";
case "二十五年级": return gId = "25";
case "二十六年级": return gId = "26";
case "二十七年级": return gId = "27";
case "二十八年级": return gId = "28";
case "二十九年级": return gId = "29";
case "三十年级": return gId = "30";
}
return gId;
}
private Integer getPatriarch(String patriarch){
Integer gId = null;
switch (patriarch){
case "爸爸": return gId = 0;
case "妈妈": return gId = 1;
case "爷爷": return gId = 2;
case "奶奶": return gId = 3;
case "叔叔": return gId = 4;
case "姑姑": return gId = 5;
case "外婆": return gId = 6;
case "外公": return gId = 7;
case "哥哥": return gId = 8;
case "姐姐": return gId = 9;
case "阿姨": return gId = 10;
case "家长": return gId = 11;
}
return gId;
}
/**
* 调用钉钉公共接口,获取用户手机号
*/
public String getTel(String userId ,String assToKen){
JSONObject userParme = new JSONObject();
userParme.put("userid",userId);
String userPost = HttpUtil.post("https://oapi.dingtalk.com/topapi/v2/user/get?access_token="+assToKen, userParme);
JSONObject jsonObject = JSONObject.parseObject(userPost);
if (jsonObject.getJSONObject("result").get("mobile")==null){
return null;
}else {
return jsonObject.getJSONObject("result").get("mobile").toString();
}
}
/**
* 获取班级 家 学关系
*/
public Map<String,String> getFromUserId(Long classId ,String assToKen){
Map<String,String> map = new HashMap();
JSONObject userParme = new JSONObject();
userParme.put("class_id",classId);
String userPost = HttpUtil.post("https://oapi.dingtalk.com/topapi/edu/user/relation/list?access_token="+assToKen, userParme);
JSONObject jsonObject = JSONObject.parseObject(userPost);
JSONArray jsonArray = jsonObject.getJSONObject("result").getJSONArray("relations");
for (int i =0 ; i< jsonArray.size(); i++ ){
JSONObject jsonDate= jsonArray.getJSONObject(i);
String fromUserid = jsonDate.get("from_userid").toString();
String toUserid = jsonDate.get("to_userid").toString();
map.put(fromUserid,toUserid);
}
return map;
}
} }
package yangtz.cs.liu.dingding.controller.dingDept;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import yangtz.cs.liu.dingding.service.impl.dingDept.DdDeptServcieImpl;
@RestController
@RequestMapping("/dd/school/dept")
public class DdDeptController extends BaseController {
@Autowired
private DdDeptServcieImpl ddDeptServcie;
/**
* 获取钉钉全部部门列表
*/
@GetMapping("/getDeptList")
public TableDataInfo getDeptList(){
return getDataTable(ddDeptServcie.getDeptList());
}
/**
* 下拉钉钉部门列表到系统
*/
@PostMapping("/addDdDept")
public AjaxResult addDdDept(){
return toAjax(ddDeptServcie.addDdDept());
}
/**
* 同步钉钉部门列表
*/
@GetMapping("/syncDdDept")
public AjaxResult syncDdDept(){
return AjaxResult.success(ddDeptServcie.syncDdDept());
}
}
...@@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSON; ...@@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import yangtz.cs.liu.dingding.config.Constant; import yangtz.cs.liu.dingding.config.Constant;
import yangtz.cs.liu.dingding.utils.AccessTokenUtils; import yangtz.cs.liu.dingding.service.impl.dingDept.DdDeptServcieImpl;
import yangtz.cs.liu.dingding.service.impl.dingUser.DdUserServiceImpl;
import yangtz.cs.liu.dingding.utils.DingCallbackCrypto; import yangtz.cs.liu.dingding.utils.DingCallbackCrypto;
import java.util.Map; import java.util.Map;
...@@ -20,6 +22,11 @@ public class DingEventController { ...@@ -20,6 +22,11 @@ public class DingEventController {
private static Logger log = LoggerFactory.getLogger(DingEventController.class); private static Logger log = LoggerFactory.getLogger(DingEventController.class);
@Autowired
private DdDeptServcieImpl ddDeptServcie;
@Autowired
private DdUserServiceImpl ddUserService;
@PostMapping("/callBack") @PostMapping("/callBack")
public Map<String, String> callBack( public Map<String, String> callBack(
@RequestParam(value = "msg_signature", required = false) String msg_signature, @RequestParam(value = "msg_signature", required = false) String msg_signature,
...@@ -47,12 +54,26 @@ public class DingEventController { ...@@ -47,12 +54,26 @@ public class DingEventController {
// 测试回调url的正确性 // 测试回调url的正确性
log.info("测试回调url的正确性"); log.info("测试回调url的正确性");
} else if ("user_add_org".equals(eventType)) { } else if ("user_add_org".equals(eventType)) {
// 处理通讯录用户增加事件 // 处理通讯录用户增加
log.info("发生了:" + eventType + "事件"); ddUserService.addUser(eventJson);
} else if ("user_modify_org".equals(eventType)) {
// 处理通讯录用户修改
ddUserService.updateUser(eventJson);
} else if ("user_leave_org".equals(eventType)) {
// 处理通讯录用户离职
ddUserService.leaveUser(eventJson);
} else if ("org_dept_create".equals(eventType)){
// 处理通讯录企业部门创建
ddDeptServcie.ddDeptCreate(eventJson);
} else if ("org_dept_modify".equals(eventType)){
// 处理通讯录企业部门修改
ddDeptServcie.ddDeptUpdate(eventJson);
} else if ("org_dept_remove".equals(eventType)){
// 处理通讯录企业部门删除
ddDeptServcie.ddDeptDelete(eventJson);
} else if ("bpms_instance_change".equals(eventType)){ } else if ("bpms_instance_change".equals(eventType)){
// 处理审批实例事件 // 处理审批实例事件
processInstance(eventJson); log.info("发生了:" + eventType + "事件");
} else if ("bpms_task_change".equals(eventType)){ } else if ("bpms_task_change".equals(eventType)){
// 处理审批任务事件 // 处理审批任务事件
eventJson.get(""); eventJson.get("");
...@@ -70,16 +91,4 @@ public class DingEventController { ...@@ -70,16 +91,4 @@ public class DingEventController {
} }
return null; return null;
} }
/**
* 处理审批实例事件
*/
public void processInstance(JSONObject eventJson){
//获取审批类型
String type = eventJson.getString("type");
//判断审批实例是否正常结束
if ("finish".equals(type)){
}
}
} }
...@@ -4,10 +4,8 @@ import com.ruoyi.common.core.controller.BaseController; ...@@ -4,10 +4,8 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping; import yangtz.cs.liu.dingding.service.impl.dingUser.DdUserServiceImpl;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import yangtz.cs.liu.dingding.utils.DingUserUtils; import yangtz.cs.liu.dingding.utils.DingUserUtils;
/** /**
...@@ -18,42 +16,38 @@ import yangtz.cs.liu.dingding.utils.DingUserUtils; ...@@ -18,42 +16,38 @@ import yangtz.cs.liu.dingding.utils.DingUserUtils;
public class DingUserController extends BaseController { public class DingUserController extends BaseController {
@Autowired @Autowired
private DingUserUtils dingUserUtils; private DdUserServiceImpl ddUserService;
/** /**
* 获取部门用户基础信息 * 获取钉钉所有用户id
*/ */
@GetMapping("/getUserByDeptId") @GetMapping("/getDdUserListAll")
public TableDataInfo getUserByDeptId(@RequestParam("deptId") Long deptId, public TableDataInfo getDdUserListAll(){
@RequestParam("cursor") Long cursor, return getDataTable(ddUserService.getDdUserListAll());
@RequestParam("size") Long size,
@RequestParam("orderField") String orderField,
@RequestParam("containAccessLimit") String containAccessLimit,
@RequestParam("language") String language)
{
return getDataTable(dingUserUtils.getUserByDeptId(deptId, cursor, size, orderField, containAccessLimit, language));
} }
/** /**
* 获取部门用户完整信息 * 下拉钉钉用户到系统
*/ */
@GetMapping("/getUserInfoByDeptId") @PostMapping("/addDdUser")
public TableDataInfo getUserInfoByDeptId(@RequestParam("deptId") Long deptId, public AjaxResult addDdUser(){
@RequestParam("cursor") Long cursor, return toAjax(ddUserService.addDdUser());
@RequestParam("size") Long size,
@RequestParam("orderField") String orderField,
@RequestParam("containAccessLimit") String containAccessLimit,
@RequestParam("language") String language)
{
return getDataTable(dingUserUtils.getUserInfoByDeptId(deptId, cursor, size, orderField, containAccessLimit, language));
} }
/** /**
* 获取用户详情 * 用户表数据同步到教师表
* @return
*/ */
@GetMapping("/getUser") @PostMapping("/addDdTeacher")
public AjaxResult getUser(@RequestParam("userId") String userId){ public AjaxResult addDdTeacher(){
return AjaxResult.success(dingUserUtils.getUser(userId)); return toAjax(ddUserService.addDdTeacher());
} }
/**
* 同步钉钉用户列表
*/
@GetMapping("/syncDdUser")
public AjaxResult syncDdUser(){
return AjaxResult.success(ddUserService.syncDdUser());
}
} }
package yangtz.cs.liu.dingding.domain.dingDept;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;
public class SysDdDept extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 部门ID */
private Long deptId;
/** 父部门ID */
private Long parentId;
/** 祖级列表 */
private String ancestors;
/** 部门名称 */
private String deptName;
/** 显示顺序 */
private Long orderNum;
/** 负责人 */
private String leader;
/** 联系电话 */
private String phone;
/** 邮箱 */
private String email;
/** 部门状态:0正常,1停用 */
private String status;
/** 钉钉部门id */
private Long ddDeptId;
/** 钉钉父部门id */
private Long ddParentId;
/** 删除标志(0代表存在 2代表删除) */
private String delFlag;
/** 父部门名称 */
private String parentName;
/** 子部门 */
private List<SysDdDept> children = new ArrayList<SysDdDept>();
public Long getDdDeptId() {
return ddDeptId;
}
public void setDdDeptId(Long ddDeptId) {
this.ddDeptId = ddDeptId;
}
public Long getDdParentId() {
return ddParentId;
}
public void setDdParentId(Long ddParentId) {
this.ddParentId = ddParentId;
}
public Long getDeptId()
{
return deptId;
}
public void setDeptId(Long deptId)
{
this.deptId = deptId;
}
public Long getParentId()
{
return parentId;
}
public void setParentId(Long parentId)
{
this.parentId = parentId;
}
public String getAncestors()
{
return ancestors;
}
public void setAncestors(String ancestors)
{
this.ancestors = ancestors;
}
@NotBlank(message = "部门名称不能为空")
@Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
public String getDeptName()
{
return deptName;
}
public void setDeptName(String deptName)
{
this.deptName = deptName;
}
@NotNull(message = "显示顺序不能为空")
public Long getOrderNum() {
return orderNum;
}
public void setOrderNum(Long orderNum) {
this.orderNum = orderNum;
}
public String getLeader()
{
return leader;
}
public void setLeader(String leader)
{
this.leader = leader;
}
@Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
public String getPhone()
{
return phone;
}
public void setPhone(String phone)
{
this.phone = phone;
}
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getParentName()
{
return parentName;
}
public void setParentName(String parentName)
{
this.parentName = parentName;
}
public List<SysDdDept> getChildren() {
return children;
}
public void setChildren(List<SysDdDept> children) {
this.children = children;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("deptId", getDeptId())
.append("parentId", getParentId())
.append("ancestors", getAncestors())
.append("deptName", getDeptName())
.append("orderNum", getOrderNum())
.append("leader", getLeader())
.append("phone", getPhone())
.append("email", getEmail())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}
package yangtz.cs.liu.dingding.domain.dingGrade;
import com.core.domain.OurBaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class SchoolGradeMentorCopy extends OurBaseEntity {
/** 老师主键 */
@NotNull(message = "级部教师不能为空")
private Long teacherId;
/** 年级级部主键 */
private Long gradeId;
/** 教师任职开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime;
/** 教师任职结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endTime;
/** 类型(1年级部,2学科组长) */
private String type;
/** 职务 */
private String teacherPost;
/** 学科组(1物理学科组,2化学学科组,3生物学科组) */
private String subGroup;
}
package yangtz.cs.liu.dingding.domain.dingUser;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excels;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.xss.Xss;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
public class SysDdUser extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 用户ID */
@Excel(name = "用户序号", cellType = Excel.ColumnType.NUMERIC, prompt = "用户编号")
private Long userId;
/** 部门ID */
@Excel(name = "部门编号", type = Excel.Type.IMPORT)
private Long deptId;
/** 用户账号 */
@Excel(name = "登录名称")
private String userName;
// /** 用户昵称 */
// @Excel(name = "用户名称")
// private String nickName;
/** 登录名称 */
@Excel(name = "登录名称")
private String loginName;
/** 用户类型 */
private String userType;
/** 用户类型 */
private String userLoginType;
/** 用户邮箱 */
@Excel(name = "用户邮箱")
private String email;
/** 手机号码 */
@Excel(name = "手机号码")
private String phonenumber;
/** 用户性别 */
@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
private String sex;
/** 用户头像 */
private String avatar;
/** 密码 */
private String password;
/** 盐加密 */
private String salt;
/** 帐号状态(0正常 1停用) */
@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
private String status;
/** 删除标志(0代表存在 2代表删除) */
private String delFlag;
/** 最后登录IP */
@Excel(name = "最后登录IP", type = Excel.Type.EXPORT)
private String loginIp;
/** 最后登录时间 */
@Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)
private Date loginDate;
/** 密码最后更新时间 */
private Date pwdUpdateDate;
/** 微信openId */
private String openId;
/** 钉钉用户unionId */
private String unionId;
/** 钉钉用户id */
private String ddUserId;
/** 部门对象 */
@Excels({
@Excel(name = "部门名称", targetAttr = "deptName", type = Excel.Type.EXPORT),
@Excel(name = "部门负责人", targetAttr = "leader", type = Excel.Type.EXPORT)
})
private SysDept dept;
/** 用户所在部门列表 */
private List<Long> ddUserDepts;
/** 角色对象 */
private List<SysRole> roles;
/** 角色组 */
private Long[] roleIds;
/** 岗位组 */
private Long[] postIds;
/** 岗位组名称 */
private String postName;
/** 角色ID */
private Long roleId;
/** 职工类型(0带班,1不带班) */
private String employeeType;
/** 学生id */
private Long studentId;
/** 签名路径 */
private String sign;
public SysDdUser()
{
}
public List<Long> getDdUserDepts() {
return ddUserDepts;
}
public void setDdUserDepts(List<Long> ddUserDepts) {
this.ddUserDepts = ddUserDepts;
}
public String getUnionId() {
return unionId;
}
public void setUnionId(String unionId) {
this.unionId = unionId;
}
public String getDdUserId() {
return ddUserId;
}
public void setDdUserId(String ddUserId) {
this.ddUserId = ddUserId;
}
public SysDdUser(Long userId)
{
this.userId = userId;
}
public Long getUserId()
{
return userId;
}
public void setUserId(Long userId)
{
this.userId = userId;
}
public boolean isAdmin()
{
return isAdmin(this.userId);
}
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
public Long getDeptId()
{
return deptId;
}
public void setDeptId(Long deptId)
{
this.deptId = deptId;
}
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
public String getPhonenumber()
{
return phonenumber;
}
public void setPhonenumber(String phonenumber)
{
this.phonenumber = phonenumber;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String getAvatar()
{
return avatar;
}
public void setAvatar(String avatar)
{
this.avatar = avatar;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getLoginIp()
{
return loginIp;
}
public void setLoginIp(String loginIp)
{
this.loginIp = loginIp;
}
public Date getLoginDate()
{
return loginDate;
}
public void setLoginDate(Date loginDate)
{
this.loginDate = loginDate;
}
public SysDept getDept()
{
return dept;
}
public void setDept(SysDept dept)
{
this.dept = dept;
}
public List<SysRole> getRoles()
{
return roles;
}
public void setRoles(List<SysRole> roles)
{
this.roles = roles;
}
public Long[] getRoleIds()
{
return roleIds;
}
public void setRoleIds(Long[] roleIds)
{
this.roleIds = roleIds;
}
public Long[] getPostIds()
{
return postIds;
}
public void setPostIds(Long[] postIds)
{
this.postIds = postIds;
}
public Long getRoleId()
{
return roleId;
}
public void setRoleId(Long roleId)
{
this.roleId = roleId;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
public Date getPwdUpdateDate() {
return pwdUpdateDate;
}
public void setPwdUpdateDate(Date pwdUpdateDate) {
this.pwdUpdateDate = pwdUpdateDate;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("deptId", getDeptId())
.append("loginName", getLoginName())
.append("userName", getUserName())
.append("userType", getUserType())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())
.append("avatar", getAvatar())
.append("password", getPassword())
.append("salt", getSalt())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("loginIp", getLoginIp())
.append("loginDate", getLoginDate())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("dept", getDept())
.append("roles", getRoles())
.toString();
}
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
public String getUserLoginType() {
return userLoginType;
}
public void setUserLoginType(String userLoginType) {
this.userLoginType = userLoginType;
}
public String getEmployeeType() {
return employeeType;
}
public void setEmployeeType(String employeeType) {
this.employeeType = employeeType;
}
public Long getStudentId() {
return studentId;
}
public void setStudentId(Long studentId) {
this.studentId = studentId;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getPostName() {
return postName;
}
public void setPostName(String postName) {
this.postName = postName;
}
}
package yangtz.cs.liu.dingding.domain.dingUser;
import lombok.Data;
@Data
public class SysDdUserDept {
private Long userId;
private Long deptId;
}
package yangtz.cs.liu.dingding.domain.schoolTeacher;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Date;
@Data
public class SysDdTeacher extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long id;
/**
* 照片路径
*/
@Excel(name = "照片", cellType = Excel.ColumnType.IMAGE, height = 55, type = Excel.Type.EXPORT)
private String picUrl;
/**
* 老师名称
*/
@Excel(name = "老师名称")
@NotBlank(message = "老师名字不能为空")
private String teacherName;
/**
* 性别
*/
@Excel(name = "性别", readConverterExp = "0=男,1=女")
@NotBlank(message = "性别不能为空")
private String sex;
/**
* 民族
*/
@Excel(name = "民族")
private String nation;
/**
* 工作编号
*/
@Excel(name = "工作编号")
private String teacherCode;
/*
* 系统表 用户id
* */
@TableField(exist = false)
private Long userId;
/**
* 生日
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "生日", width = 25, dateFormat = "yyyy-MM-dd")
private Date birthday;
/**
* 学历
*/
@Excel(name = "学历", readConverterExp = "0=高中,1=专科,2=本科,3=研究生,4=硕士,5=博士",combo = {"高中","专科","本科","研究生","硕士","博士"})
private String education;
/**
* 老师电话
*/
@Excel(name = "老师电话")
@NotBlank(message = "老师电话不能为空")
private String teacherTel;
/**
* 身份证号
*/
@Excel(name = "身份证号", width = 30)
@NotBlank(message = "身份证号不能为空")
private String idCard;
/**
* 家庭住址
*/
@Excel(name = "家庭住址", width = 35)
private String homeAddress;
/*
* 微信openid
* */
private String openId;
/*
* 钉钉用户unionId
* */
private String unionId;
/*
* 钉钉用户id
* */
private String ddUserId;
//设备工号
private String deviceNum;
/**部门id**/
@TableField(exist = false)
private Long deptId;
/**部门名称**/
@TableField(exist = false)
private String deptName;
/** 密码 */
@TableField(exist = false)
private String password;
/** 帐号状态(0正常 1停用) */
//@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
@TableField(exist = false)
private String status;
/**签名路径*/
@TableField(exist = false)
private String sign;
/**头像**/
@TableField(exist = false)
private String avatar;
/*职工类型**/
@TableField(exist = false)
private String employeeType;
@TableField(exist = false)
private String email;
/** 父部门ID */
@TableField(exist = false)
private Long parentId;
/** 父部门名称 */
@TableField(exist = false)
private String parentName;
}
package yangtz.cs.liu.dingding.mapper.dingDept;
import yangtz.cs.liu.dingding.domain.dingDept.SysDdDept;
import java.util.List;
import java.util.Map;
public interface DdDeptMapper {
/**
* 查询系统部门列表
* @param sysDdDept
* @return
*/
List<SysDdDept> selectDdDeptList(SysDdDept sysDdDept);
/**
* 根据钉钉部门id查询系统部门信息
*/
SysDdDept selectDeptByDdDeptId(Long ddDeptId);
/**
* 根据部门id查询系统部门信息
*/
SysDdDept selectDeptByDeptId(Long deptId);
/**
* 查询级部信息
*/
List<Map<String,Object>> selectGradeList();
/**
* 新增钉钉部门
* @return
*/
int insertDdDept(SysDdDept sysDdDept);
/**
* 更新钉钉部门
* @param sysDdDept
* @return
*/
int updateDdDeptByDdDeptId(SysDdDept sysDdDept);
/**
* 删除部门
* @param deptId
* @return
*/
int deleteDdDeptById(Long deptId);
/**
* 根据钉钉部门id删除部门
* @param ddDeptId
* @return
*/
int deleteDdDeptByDdDeptId(Long ddDeptId);
}
package yangtz.cs.liu.dingding.mapper.dingUser;
import org.apache.ibatis.annotations.Param;
import yangtz.cs.liu.dingding.domain.dingGrade.SchoolGradeMentorCopy;
import yangtz.cs.liu.dingding.domain.dingUser.SysDdUser;
import yangtz.cs.liu.dingding.domain.dingUser.SysDdUserDept;
import java.util.List;
public interface DdUserMapper {
/**
* 批量新增钉钉用户
*/
int batchInsertDdUser(@Param("list") List<SysDdUser> list);
/**
* 新增用户
*/
int insertDdUser(SysDdUser sysDdUser);
/**
* 更新用户
*/
int updateDdUser(SysDdUser sysDdUser);
/**
* 查询全部用户
*/
List<SysDdUser> selectDdUserList(SysDdUser sysDdUser);
/**
* 新增用户部门关系
*/
int insertDdUserDept(SysDdUserDept sysDdUserDept);
/**
* 删除用户
*/
int deleteDdUser(Long userId);
/**
* 删除用户和部门关系
*/
int deleteDdUserDept(Long userId);
/**
* 删除教师
*/
int deleteDdTeacher(Long userId);
/**
* 根据用户id查询用户部门id列表
*/
List<Long> selectDeptIdByUserId(Long userId);
/**
* 根据钉钉用户id查询用户信息
* @param ddUserId
* @return
*/
SysDdUser selectDdUserByDdUserId(String ddUserId);
/**
* 新增级部成员
* @param schoolGradeMentorCopy
* @return
*/
int insertGradeMentor(SchoolGradeMentorCopy schoolGradeMentorCopy);
/**
* 删除级部成员
* @param userId
* @return
*/
int deleteGradeMentor(Long userId);
}
package yangtz.cs.liu.dingding.mapper.schoolTeacher;
import org.apache.ibatis.annotations.Param;
import yangtz.cs.liu.dingding.domain.schoolTeacher.SysDdTeacher;
import java.util.List;
public interface DdTeacherMapper {
/**
* 批量新增教师
*/
int batchInsertTeacher(@Param("list") List<SysDdTeacher> list);
/**
* 新增教师
*/
int addTeacherList(SysDdTeacher sysDdTeacher);
/**
* 更新教师信息
*/
int updateDdTeacher(SysDdTeacher sysDdTeacher);
}
package yangtz.cs.liu.dingding.service.dingDept;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.response.OapiV2DepartmentListsubResponse;
import java.util.List;
public interface IDdDeptService {
/**
* 获取钉钉全部部门列表
* @return
*/
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> getDeptList();
/**
* 下拉钉钉部门列表到系统
* @return
*/
int addDdDept();
/**
* 同步钉钉部门列表
* @return
*/
String syncDdDept();
/**
* 钉钉部门创建
*/
int ddDeptCreate(JSONObject eventJson);
/**
* 钉钉部门修改
*/
int ddDeptUpdate(JSONObject eventJson);
/**
* 钉钉部门删除
*/
int ddDeptDelete(JSONObject eventJson);
}
package yangtz.cs.liu.dingding.service.dingUser;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
public interface IDdUserService {
/**
* 获取钉钉全部用户id
*/
List<String> getDdUserListAll();
/**
* 下拉钉钉用户到系统
*/
int addDdUser();
/**
* 用户表数据同步到教师表
* @return
*/
int addDdTeacher();
/**
* 同步钉钉用户
*/
String syncDdUser();
/**
* 处理通讯录用户增加
*/
int addUser(JSONObject eventJson);
/**
* 处理通讯录用户修改
*/
int updateUser(JSONObject eventJson);
/**
* 处理通讯录用户离职
*/
int leaveUser(JSONObject eventJson);
}
package yangtz.cs.liu.dingding.service.impl.dingDept;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.response.OapiV2DepartmentGetResponse;
import com.dingtalk.api.response.OapiV2DepartmentListsubResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import yangtz.cs.liu.dingding.domain.dingDept.SysDdDept;
import yangtz.cs.liu.dingding.mapper.dingDept.DdDeptMapper;
import yangtz.cs.liu.dingding.service.dingDept.IDdDeptService;
import yangtz.cs.liu.dingding.utils.DingDeptUtils;
import java.util.ArrayList;
import java.util.List;
@Service
public class DdDeptServcieImpl implements IDdDeptService {
@Autowired
private DingDeptUtils dingDeptUtils;
@Autowired
private DdDeptMapper ddDeptMapper;
/**
* 获取钉钉全部部门列表
* @return
*/
@Override
public List<OapiV2DepartmentListsubResponse.DeptBaseResponse> getDeptList() {
Long deptId = 1L;
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptListAll = new ArrayList<>();
//一级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList = dingDeptUtils.getDeptList(deptId, "");
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response : deptList) {
if (response.getDeptId() != -7){
deptListAll.add(response);
//二级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList1 = dingDeptUtils.getDeptList(response.getDeptId(), "");
if (deptList1.size() > 0) {
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response1 : deptList1) {
deptListAll.add(response1);
//三级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList2 = dingDeptUtils.getDeptList(response1.getDeptId(), "");
if (deptList2.size() > 0){
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response2 : deptList2) {
deptListAll.add(response2);
//四级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList3 = dingDeptUtils.getDeptList(response2.getDeptId(), "");
if (deptList3.size() > 0){
deptListAll.addAll(deptList3);
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response3 : deptList3) {
//五级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList4 = dingDeptUtils.getDeptList(response3.getDeptId(), "");
if (deptList4.size() > 0){
deptListAll.addAll(deptList4);
}
}
}
}
}
}
}
}
}
return deptListAll;
}
/**
* 下拉钉钉部门列表到系统
* @return
*/
@Override
@Transactional
public int addDdDept() {
Long deptId = 1L;
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept = dingDeptUtils.getDept(deptId, "");
//新增顶级目录
SysDdDept sysDdDept = new SysDdDept();
sysDdDept.setDeptId(100L);
sysDdDept.setParentId(0L);
sysDdDept.setAncestors("0");
sysDdDept.setDeptName(dept.getName());
sysDdDept.setOrderNum(0L);
sysDdDept.setDdDeptId(dept.getDeptId());
sysDdDept.setDdParentId(0L);
sysDdDept.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept);
//全部部门列表
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptListAll = new ArrayList<>();
//一级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList = dingDeptUtils.getDeptList(deptId, "");
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response : deptList) {
if (response.getDeptId() != -7){
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept1 = dingDeptUtils.getDept(response.getDeptId(), "");
//新增一级目录
SysDdDept sysDdDept1 = new SysDdDept();
sysDdDept1.setParentId(sysDdDept.getDeptId());
sysDdDept1.setAncestors("0," + sysDdDept.getDeptId());
sysDdDept1.setDeptName(response.getName());
sysDdDept1.setOrderNum(dept1.getOrder());
sysDdDept1.setDdDeptId(response.getDeptId());
sysDdDept1.setDdParentId(response.getParentId());
sysDdDept1.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept1);
deptListAll.add(response);
//二级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList1 = dingDeptUtils.getDeptList(response.getDeptId(), "");
if (deptList1.size() > 0) {
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response1 : deptList1) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept2 = dingDeptUtils.getDept(response1.getDeptId(), "");
//新增二级目录
SysDdDept sysDdDept2 = new SysDdDept();
sysDdDept2.setParentId(sysDdDept1.getDeptId());
sysDdDept2.setAncestors(sysDdDept1.getAncestors() + "," + sysDdDept1.getDeptId());
sysDdDept2.setDeptName(response1.getName());
sysDdDept2.setOrderNum(dept2.getOrder());
sysDdDept2.setDdDeptId(response1.getDeptId());
sysDdDept2.setDdParentId(response1.getParentId());
sysDdDept2.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept2);
deptListAll.add(response1);
//三级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList2 = dingDeptUtils.getDeptList(response1.getDeptId(), "");
if (deptList2.size() > 0){
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response2 : deptList2) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept3 = dingDeptUtils.getDept(response2.getDeptId(), "");
//新增三级目录
SysDdDept sysDdDept3 = new SysDdDept();
sysDdDept3.setParentId(sysDdDept2.getDeptId());
sysDdDept3.setAncestors(sysDdDept2.getAncestors() + "," + sysDdDept2.getDeptId());
sysDdDept3.setDeptName(response2.getName());
sysDdDept3.setOrderNum(dept3.getOrder());
sysDdDept3.setDdDeptId(response2.getDeptId());
sysDdDept3.setDdParentId(response2.getParentId());
sysDdDept3.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept3);
deptListAll.add(response2);
//四级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList3 = dingDeptUtils.getDeptList(response2.getDeptId(), "");
if (deptList3.size() > 0){
deptListAll.addAll(deptList3);
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response3 : deptList3) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept4 = dingDeptUtils.getDept(response3.getDeptId(), "");
//新增四级目录
SysDdDept sysDdDept4 = new SysDdDept();
sysDdDept4.setParentId(sysDdDept3.getDeptId());
sysDdDept4.setAncestors(sysDdDept3.getAncestors() + "," + sysDdDept3.getDeptId());
sysDdDept4.setDeptName(response3.getName());
sysDdDept4.setOrderNum(dept4.getOrder());
sysDdDept4.setDdDeptId(response3.getDeptId());
sysDdDept4.setDdParentId(response3.getParentId());
sysDdDept4.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept4);
//五级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList4 = dingDeptUtils.getDeptList(response3.getDeptId(), "");
if (deptList4.size() > 0){
deptListAll.addAll(deptList4);
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response4 : deptList4) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept5 = dingDeptUtils.getDept(response4.getDeptId(), "");
//新增五级目录
SysDdDept sysDdDept5 = new SysDdDept();
sysDdDept5.setParentId(sysDdDept4.getDeptId());
sysDdDept5.setAncestors(sysDdDept4.getAncestors() + "," + sysDdDept4.getDeptId());
sysDdDept5.setDeptName(response4.getName());
sysDdDept5.setOrderNum(dept5.getOrder());
sysDdDept5.setDdDeptId(response4.getDeptId());
sysDdDept5.setDdParentId(response4.getParentId());
sysDdDept5.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept5);
}
}
}
}
}
}
}
}
}
}
return 1;
}
/**
* 同步钉钉部门列表
* @return
*/
@Override
@Transactional
public String syncDdDept() {
//获取钉钉所有部门列表
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> ddDeptList = getDeptList();
//存放钉钉部门不存在系统库集合
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> ddDeptList1 = new ArrayList<>();
ddDeptList1.addAll(ddDeptList);
//获取系统所有部门列表
List<SysDdDept> deptList = ddDeptMapper.selectDdDeptList(new SysDdDept());
//存放钉钉删除了的部门集合
List<SysDdDept> deptList1 = new ArrayList<>();
deptList1.addAll(deptList);
//判断钉钉部门列表是否都在系统部门列表中
for (OapiV2DepartmentListsubResponse.DeptBaseResponse ddDept : ddDeptList) {
for (SysDdDept dept : deptList) {
if (ddDept.getDeptId().equals(dept.getDdDeptId())){
//存在,从集合中去除
ddDeptList1.remove(ddDept);
}
}
}
//新增不存在系统库的部门
if(ddDeptList1.size() > 0){
for (OapiV2DepartmentListsubResponse.DeptBaseResponse ddDept : ddDeptList1) {
//钉钉父部门id
Long ddParentId = ddDept.getParentId();
//查询父部门信息
SysDdDept ddDept1 = ddDeptMapper.selectDeptByDdDeptId(ddParentId);
//新增
SysDdDept sysDdDept = new SysDdDept();
sysDdDept.setParentId(ddDept1.getDeptId());
sysDdDept.setAncestors(ddDept1.getAncestors() + ddDept1.getDeptId());
sysDdDept.setDeptName(ddDept.getName());
sysDdDept.setOrderNum(ddDept.getDeptId());
sysDdDept.setDdDeptId(ddDept.getDeptId());
sysDdDept.setDdParentId(ddParentId);
sysDdDept.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept);
}
}
//判断钉钉中删除的部门是否还存在系统部门中
for (SysDdDept dept : deptList) {
for (OapiV2DepartmentListsubResponse.DeptBaseResponse ddDept : ddDeptList) {
if (dept.getDdDeptId().equals(ddDept.getDeptId())){
deptList1.remove(dept);
}
}
}
//删除系统部门中存在的钉钉已删除的部门
if (deptList1.size() > 0){
for (SysDdDept dept : deptList1) {
if (dept.getDeptId() != 100){
ddDeptMapper.deleteDdDeptById(dept.getDeptId());
}
}
}
//更新系统部门信息
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse djDept = dingDeptUtils.getDept(1L, "");
//修改顶级目录
SysDdDept dept = new SysDdDept();
dept.setDdDeptId(djDept.getDeptId());
dept.setDeptName(djDept.getName());
dept.setUpdateBy("钉钉管理员");
ddDeptMapper.updateDdDeptByDdDeptId(dept);
for (OapiV2DepartmentListsubResponse.DeptBaseResponse ddDept : ddDeptList) {
for (SysDdDept sysDdDept : deptList) {
if (ddDept.getDeptId().equals(sysDdDept.getDdDeptId())){
//判断父部门是否发生改变
if (!(ddDept.getParentId().equals(sysDdDept.getDdParentId()))){
//钉钉父部门id
Long ddParentId = ddDept.getParentId();
//查询父部门信息
SysDdDept ddParentDept = ddDeptMapper.selectDeptByDdDeptId(ddParentId);
sysDdDept.setParentId(ddParentDept.getDeptId());
sysDdDept.setAncestors(ddParentDept.getAncestors() + "," + ddParentDept.getDeptId());
sysDdDept.setDdParentId(ddDept.getParentId());
sysDdDept.setUpdateBy("钉钉管理员");
ddDeptMapper.updateDdDeptByDdDeptId(sysDdDept);
}
//判断部门基本信息是否发生改变
if(!(ddDept.getName().equals(sysDdDept.getDeptName()))){
sysDdDept.setDeptName(ddDept.getName());
sysDdDept.setUpdateBy("钉钉管理员");
ddDeptMapper.updateDdDeptByDdDeptId(sysDdDept);
}
}
}
}
return "同步成功";
}
/**
* 钉钉部门创建
* @param eventJson
* @return
*/
@Override
@Transactional
public int ddDeptCreate(JSONObject eventJson) {
int i= 0;
String ddDeptId = eventJson.getString("DeptId");
String replace = ddDeptId.replace("[", "");
String deptIds = replace.replace("]", "");
String[] split = deptIds.split(",");
for (String deptId : split) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept = dingDeptUtils.getDept(Long.valueOf(deptId), "");
//获取父部门信息
Long ddParentId = dept.getParentId();
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDdDeptId(ddParentId);
//新增部门
SysDdDept ddDept = new SysDdDept();
ddDept.setParentId(sysDdDept.getDeptId());
ddDept.setAncestors(sysDdDept.getAncestors() + "," + sysDdDept.getDeptId());
ddDept.setDeptName(dept.getName());
ddDept.setOrderNum(dept.getOrder());
ddDept.setDdDeptId(dept.getDeptId());
ddDept.setDdParentId(dept.getParentId());
ddDept.setCreateBy("钉钉管理员");
i += ddDeptMapper.insertDdDept(ddDept);
}
return i;
}
/**
* 钉钉部门修改
* @param eventJson
* @return
*/
@Override
public int ddDeptUpdate(JSONObject eventJson) {
int i = 0;
String ddDeptId = eventJson.getString("DeptId");
String replace = ddDeptId.replace("[", "");
String deptIds = replace.replace("]", "");
String[] split = deptIds.split(",");
for (String deptId : split) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept = dingDeptUtils.getDept(Long.valueOf(deptId), "");
//获取父部门信息
Long ddParentId = dept.getParentId();
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDdDeptId(ddParentId);
//修改部门
SysDdDept ddDept = new SysDdDept();
ddDept.setParentId(sysDdDept.getDeptId());
ddDept.setAncestors(sysDdDept.getAncestors() + "," + sysDdDept.getDeptId());
ddDept.setDeptName(dept.getName());
ddDept.setOrderNum(dept.getOrder());
ddDept.setDdDeptId(dept.getDeptId());
ddDept.setDdParentId(dept.getParentId());
ddDept.setCreateBy("钉钉管理员");
i += ddDeptMapper.updateDdDeptByDdDeptId(ddDept);
}
return i;
}
/**
* 钉钉部门删除
* @param eventJson
* @return
*/
@Override
public int ddDeptDelete(JSONObject eventJson) {
int i = 0;
String ddDeptId = eventJson.getString("DeptId");
String replace = ddDeptId.replace("[", "");
String deptIds = replace.replace("]", "");
String[] split = deptIds.split(",");
for (String deptId : split) {
//删除钉钉部门
i += ddDeptMapper.deleteDdDeptByDdDeptId(Long.valueOf(deptId));
}
return i;
}
}
package yangtz.cs.liu.dingding.service.impl.dingUser;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.response.OapiUserListidResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import yangtz.cs.liu.dingding.domain.dingDept.SysDdDept;
import yangtz.cs.liu.dingding.domain.dingGrade.SchoolGradeMentorCopy;
import yangtz.cs.liu.dingding.domain.dingUser.SysDdUser;
import yangtz.cs.liu.dingding.domain.dingUser.SysDdUserDept;
import yangtz.cs.liu.dingding.domain.schoolTeacher.SysDdTeacher;
import yangtz.cs.liu.dingding.mapper.dingDept.DdDeptMapper;
import yangtz.cs.liu.dingding.mapper.dingUser.DdUserMapper;
import yangtz.cs.liu.dingding.mapper.schoolTeacher.DdTeacherMapper;
import yangtz.cs.liu.dingding.service.dingUser.IDdUserService;
import yangtz.cs.liu.dingding.utils.DingUserUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class DdUserServiceImpl implements IDdUserService {
@Autowired
private DingUserUtils dingUserUtils;
@Autowired
private DdDeptMapper ddDeptMapper;
@Autowired
private DdUserMapper ddUserMapper;
@Autowired
private DdTeacherMapper ddTeacherMapper;
/**
* 获取钉钉全部用户id
* @return
*/
@Override
public List<String> getDdUserListAll() {
//存放钉钉用户id的集合
List<String> ddUserIds = new ArrayList<>();
//获取系统所有部门列表
List<SysDdDept> ddDeptListAll = ddDeptMapper.selectDdDeptList(new SysDdDept());
for (SysDdDept ddDept : ddDeptListAll) {
//循环查找每个部门的用户id列表
OapiUserListidResponse.ListUserByDeptResponse ddUserIdList = dingUserUtils.getuserIdByDept(ddDept.getDdDeptId());
List<String> useridList = ddUserIdList.getUseridList();
if (useridList.size() > 0) {
for (String ddUserId : useridList) {
if (!ddUserIds.contains(ddUserId)){
ddUserIds.add(ddUserId);
}
}
}
}
return ddUserIds;
}
/**
* 下拉钉钉用户到系统
* @return
*/
@Override
@Transactional
public int addDdUser() {
int i = 1;
//查询所有级部
List<Map<String, Object>> gradeList = ddDeptMapper.selectGradeList();
//新增的用户的集合
//用户表
List<SysDdUser> userList = new ArrayList<>();
//教师表
List<SysDdTeacher> teacherList = new ArrayList<>();
//获取钉钉全部用户id
List<String> ddUserIdList = getDdUserListAll();
for (String ddUserId : ddUserIdList) {
//循环获取钉钉用户详情
OapiV2UserGetResponse.UserGetResponse ddUser = dingUserUtils.getUser(ddUserId);
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//拿取钉钉用户部门id列表的第一个存在的部门id存到用户表中
//部门列表
List<Long> deptIdList = ddUser.getDeptIdList();
//用户部门列表
List<Long> ddUserDepts = new ArrayList<>();
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
ddUserDepts.add(dept1.getDeptId());
}
}
//用户表数据
SysDdUser sysDdUser = new SysDdUser();
sysDdUser.setDdUserDepts(ddUserDepts);
//根据钉钉部门id查询部门信息
for (Long ddDeptId : deptIdList) {
SysDdDept dept = ddDeptMapper.selectDeptByDdDeptId(ddDeptId);
if (StringUtils.isNotNull(dept)){
sysDdUser.setDeptId(dept.getDeptId());
break;
}
}
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPassword(SecurityUtils.encryptPassword("Ez2023@345"));
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setUserType("00");
sysDdUser.setUserLoginType("0");
sysDdUser.setPhonenumber(ddUser.getMobile());
sysDdUser.setCreateBy("钉钉管理员");
sysDdUser.setUnionId(ddUser.getUnionid());
sysDdUser.setDdUserId(ddUser.getUserid());
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
ddUserMapper.insertDdUser(sysDdUser);
userList.add(sysDdUser);
//新增教师数据
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUnionId(sysDdUser.getUnionId());
sysDdTeacher.setDdUserId(sysDdUser.getDdUserId());
sysDdTeacher.setCreateBy("钉钉管理员");
sysDdTeacher.setCreateTime(DateUtils.getNowDate());
ddTeacherMapper.addTeacherList(sysDdTeacher);
//判断用户是否为级部成员
for (Long deptId : ddUserDepts) {
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(deptId);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
}
//新增用户和部门关系
for (SysDdUser ddUser : userList) {
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(ddUser.getUserId());
for (Long ddUserDept : ddUser.getDdUserDepts()) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
}
}
return i;
}
/**
* 用户表数据新增到教师表
*/
@Override
public int addDdTeacher() {
//查询所有用户
List<SysDdUser> userList = ddUserMapper.selectDdUserList(new SysDdUser());
for (SysDdUser ddUser : userList) {
}
return 1;
}
/**
* 同步钉钉用户列表
* @return
*/
@Override
@Transactional
public String syncDdUser() {
//查询所有级部
List<Map<String, Object>> gradeList = ddDeptMapper.selectGradeList();
//获取钉钉全部用户id
List<String> ddUserIdList = getDdUserListAll();
//获取钉钉全部用户详情
List<OapiV2UserGetResponse.UserGetResponse> ddUserAll = new ArrayList<>();
//存放钉钉用户不存在系统库的用户id
List<String> ddUserIdList1 = new ArrayList<>();
ddUserIdList1.addAll(ddUserIdList);
//循环获取所有用户详情
for (String ddUserId : ddUserIdList) {
OapiV2UserGetResponse.UserGetResponse ddUser = dingUserUtils.getUser(ddUserId);
ddUserAll.add(ddUser);
}
//获取系统全部用户
List<SysDdUser> userList = ddUserMapper.selectDdUserList(new SysDdUser());
//存放钉钉已删除的用户集合
List<SysDdUser> userList1 = new ArrayList<>();
userList1.addAll(userList);
//获取所有部门
List<SysDdDept> deptList = ddDeptMapper.selectDdDeptList(new SysDdDept());
//判断系统用户列表是否存在钉钉用户id
for (String ddUserId : ddUserIdList) {
for (SysDdUser ddUser : userList) {
if (ddUserId.equals(ddUser.getDdUserId())){
//存在,从集合中剔除
ddUserIdList1.remove(ddUserId);
}
}
}
//新增系统不存在的钉钉用户
if(ddUserIdList1.size() > 0){
for (String ddUserId : ddUserIdList1) {
for (OapiV2UserGetResponse.UserGetResponse ddUser : ddUserAll) {
if (ddUserId.equals(ddUser.getUserid())){
//拿取钉钉用户部门id列表的第一个存在的部门id存到用户表中
//部门列表
List<Long> deptIdList = ddUser.getDeptIdList();
//用户部门列表
List<Long> ddUserDepts = new ArrayList<>();
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
ddUserDepts.add(dept1.getDeptId());
}
}
//根据钉钉部门id查询部门信息
//新增用户到用户表
SysDdUser sysDdUser = new SysDdUser();
sysDdUser.setDdUserDepts(ddUserDepts);
//根据钉钉部门id查询部门信息
for (Long ddDeptId : deptIdList) {
SysDdDept dept = ddDeptMapper.selectDeptByDdDeptId(ddDeptId);
if (StringUtils.isNotNull(dept)){
sysDdUser.setDeptId(dept.getDeptId());
break;
}
}
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPassword(SecurityUtils.encryptPassword("Ez2023@345"));
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setUserType("00");
sysDdUser.setUserLoginType("0");
sysDdUser.setPhonenumber(ddUser.getMobile());
sysDdUser.setCreateBy("钉钉管理员");
sysDdUser.setUnionId(ddUser.getUnionid());
sysDdUser.setDdUserId(ddUser.getUserid());
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
ddUserMapper.insertDdUser(sysDdUser);
//新增用户和部门关系
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(sysDdUser.getUserId());
for (Long ddUserDept : sysDdUser.getDdUserDepts()) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
}
//新增用户到教师表
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUnionId(sysDdUser.getUnionId());
sysDdTeacher.setDdUserId(sysDdUser.getDdUserId());
sysDdTeacher.setCreateBy("钉钉管理员");
sysDdTeacher.setCreateTime(DateUtils.getNowDate());
ddTeacherMapper.addTeacherList(sysDdTeacher);
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//判断用户是否是级部成员,如果是,新增到级部成员
for (Long deptId : ddUserDepts) {
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(deptId);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
}
}
}
}
//判断钉钉已删除的用户
for (SysDdUser ddUser : userList) {
for (String ddUserId : ddUserIdList) {
if (ddUser.getDdUserId().equals(ddUserId)){
//存在从集合中剔除
userList1.remove(ddUser);
}
}
}
//删除钉钉中已删除的用户
if (userList1.size() > 0){
for (SysDdUser ddUser : userList1) {
//删除用户
ddUserMapper.deleteDdUser(ddUser.getUserId());
//删除用户和部门关系
ddUserMapper.deleteDdUserDept(ddUser.getUserId());
//删除教师
ddUserMapper.deleteDdTeacher(ddUser.getUserId());
//删除级部成员信息
ddUserMapper.deleteGradeMentor(ddUser.getUserId());
}
}
//更新系统用户信息
for (OapiV2UserGetResponse.UserGetResponse ddUser : ddUserAll) {
for (SysDdUser sysDdUser : userList) {
if (ddUser.getUserid().equals(sysDdUser.getDdUserId())){
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//系统用户部门列表
List<Long> ddUserDepts = ddUserMapper.selectDeptIdByUserId(sysDdUser.getUserId());
//存放钉钉部门id列表
List<Long> ddDeptIds = new ArrayList<>();
for (Long ddUserDept : ddUserDepts) {
for (SysDdDept dept : deptList) {
if (ddUserDept.equals(dept.getDeptId())){
ddDeptIds.add(dept.getDdDeptId());
}
}
}
//钉钉用户部门id列表
List<Long> deptIdList = ddUser.getDeptIdList();
//钉钉用户部门id列表(不包含钉钉已删除的部门)
List<Long> deptIdList1 = new ArrayList<>();
deptIdList1.addAll(deptIdList);
//去除掉钉钉已删除的部门id
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNull(dept1)){
deptIdList1.remove(ddUserDeptId);
}
}
//更新的部门id列表
List<Long> deptIds = new ArrayList<>();
//判断系统用户和钉钉用户部门是否发生改变
boolean isEqual = ddDeptIds.containsAll(deptIdList1) && deptIdList1.containsAll(ddDeptIds);
if (!isEqual) {
//发生改变更新用户信息
for (Long ddUserDeptId : deptIdList1) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
deptIds.add(dept1.getDeptId());
}
}
//删除原用户与部门关系
ddUserMapper.deleteDdUserDept(sysDdUser.getUserId());
//删除级部成员信息
ddUserMapper.deleteGradeMentor(sysDdUser.getUserId());
//新增用户和部门关系
sysDdUser.setDeptId(deptIds.get(0));
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(sysDdUser.getUserId());
for (Long ddUserDept : deptIds) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(ddUserDept);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
sysDdUser.setUpdateBy("钉钉管理员");
ddUserMapper.updateDdUser(sysDdUser);
}
//更新系统用户信息
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPhonenumber(ddUser.getMobile());
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
sysDdUser.setUpdateBy("钉钉管理员");
ddUserMapper.updateDdUser(sysDdUser);
//更新系统教师信息
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUpdateBy("钉钉管理员");
sysDdTeacher.setUpdateTime(DateUtils.getNowDate());
ddTeacherMapper.updateDdTeacher(sysDdTeacher);
}
}
}
return "同步成功";
}
/**
* 处理通讯录用户增加
* @param eventJson
* @return
*/
@Override
@Transactional
public int addUser(JSONObject eventJson) {
int i = 0;
String ddUserId = eventJson.getString("UserId");
String replace = ddUserId.replace("[\"", "");
String userIds = replace.replace("\"]", "");
String[] split = userIds.split(",");
//查询所有级部
List<Map<String, Object>> gradeList = ddDeptMapper.selectGradeList();
for (String userId : split) {
//查询钉钉用户详情
OapiV2UserGetResponse.UserGetResponse ddUser = dingUserUtils.getUser(userId);
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//钉钉用户的钉钉部门id列表
List<Long> deptIdList = ddUser.getDeptIdList();
//用户系统部门id列表
List<Long> ddUserDepts = new ArrayList<>();
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
ddUserDepts.add(dept1.getDeptId());
}
}
//用户表数据
SysDdUser sysDdUser = new SysDdUser();
sysDdUser.setDdUserDepts(ddUserDepts);
//根据钉钉部门id查询部门信息
for (Long ddDeptId : deptIdList) {
SysDdDept dept = ddDeptMapper.selectDeptByDdDeptId(ddDeptId);
if (StringUtils.isNotNull(dept)){
sysDdUser.setDeptId(dept.getDeptId());
break;
}
}
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPassword(SecurityUtils.encryptPassword("Ez2023@345"));
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setUserType("00");
sysDdUser.setUserLoginType("0");
sysDdUser.setPhonenumber(ddUser.getMobile());
sysDdUser.setCreateBy("钉钉管理员");
sysDdUser.setUnionId(ddUser.getUnionid());
sysDdUser.setDdUserId(ddUser.getUserid());
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
i += ddUserMapper.insertDdUser(sysDdUser);
//新增用户和部门关系
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(sysDdUser.getUserId());
for (Long ddUserDept : sysDdUser.getDdUserDepts()) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
}
//新增教师表信息
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUnionId(sysDdUser.getUnionId());
sysDdTeacher.setDdUserId(sysDdUser.getDdUserId());
sysDdTeacher.setCreateBy("钉钉管理员");
sysDdTeacher.setCreateTime(DateUtils.getNowDate());
ddTeacherMapper.addTeacherList(sysDdTeacher);
//判断用户是否是级部成员,如果是,新增到级部成员
for (Long deptId : ddUserDepts) {
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(deptId);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
}
return i;
}
/**
* 处理通讯录用户修改
* @param eventJson
* @return
*/
@Override
public int updateUser(JSONObject eventJson) {
int i = 0;
String ddUserId = eventJson.getString("UserId");
String replace = ddUserId.replace("[\"", "");
String userIds = replace.replace("\"]", "");
String[] split = userIds.split(",");
//查询所有级部
List<Map<String, Object>> gradeList = ddDeptMapper.selectGradeList();
for (String userId : split) {
//查询钉钉用户详情
OapiV2UserGetResponse.UserGetResponse ddUser = dingUserUtils.getUser(userId);
//查询系统用户详情
SysDdUser sysDdUser = ddUserMapper.selectDdUserByDdUserId(userId);
//钉钉用户的钉钉部门id列表
List<Long> deptIdList = ddUser.getDeptIdList();
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//用户系统部门id列表
List<Long> ddUserDepts = new ArrayList<>();
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
ddUserDepts.add(dept1.getDeptId());
}
}
//删除原用户与部门关系
ddUserMapper.deleteDdUserDept(sysDdUser.getUserId());
//删除级部成员信息
ddUserMapper.deleteGradeMentor(sysDdUser.getUserId());
//新增新用户与部门关系
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(sysDdUser.getUserId());
for (Long ddUserDept : ddUserDepts) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(ddUserDept);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
//更新系统用户信息
sysDdUser.setDeptId(ddUserDepts.get(0));
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPhonenumber(ddUser.getMobile());
sysDdUser.setUpdateBy("钉钉管理员");
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
i += ddUserMapper.updateDdUser(sysDdUser);
//更新系统教师信息
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUpdateBy("钉钉管理员");
sysDdTeacher.setUpdateTime(DateUtils.getNowDate());
ddTeacherMapper.updateDdTeacher(sysDdTeacher);
}
return i;
}
/**
* 处理通讯录用户离职
* @param eventJson
* @return
*/
@Override
public int leaveUser(JSONObject eventJson) {
int i = 0;
String ddUserId = eventJson.getString("UserId");
String replace = ddUserId.replace("[\"", "");
String userIds = replace.replace("\"]", "");
String[] split = userIds.split(",");
for (String userId : split) {
//查询系统用户详情
SysDdUser sysDdUser = ddUserMapper.selectDdUserByDdUserId(userId);
//在用户表中删除用户
i += ddUserMapper.deleteDdUser(sysDdUser.getUserId());
//删除用户和部门关系
i += ddUserMapper.deleteDdUserDept(sysDdUser.getUserId());
//在教师表中删除用户
i += ddUserMapper.deleteDdTeacher(sysDdUser.getUserId());
//在级部成员表中删除用户
i += ddUserMapper.deleteGradeMentor(sysDdUser.getUserId());
}
return i;
}
}
...@@ -97,6 +97,11 @@ public class DingJiaXiaoVo { ...@@ -97,6 +97,11 @@ public class DingJiaXiaoVo {
*/ */
String studentNo; String studentNo;
/**
* 手机号
*/
String mobile;
} }
......
...@@ -19,6 +19,9 @@ import com.ruoyi.framework.manager.factory.AsyncFactory; ...@@ -19,6 +19,9 @@ import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.framework.web.service.MpTokenService; import com.ruoyi.framework.web.service.MpTokenService;
import com.ruoyi.framework.web.service.SysPermissionService; import com.ruoyi.framework.web.service.SysPermissionService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -30,6 +33,7 @@ import org.springframework.security.core.context.SecurityContextHolder; ...@@ -30,6 +33,7 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import yangtz.cs.liu.campus.domain.student.SchoolStudent; import yangtz.cs.liu.campus.domain.student.SchoolStudent;
import yangtz.cs.liu.campus.service.impl.student.SchoolStudentParentServiceImpl;
import yangtz.cs.liu.campus.service.student.ISchoolStudentService; import yangtz.cs.liu.campus.service.student.ISchoolStudentService;
import yangtz.cs.liu.wechat.domain.WxLoginBody; import yangtz.cs.liu.wechat.domain.WxLoginBody;
import yangtz.cs.liu.wechat.service.api.IWxLoginService; import yangtz.cs.liu.wechat.service.api.IWxLoginService;
...@@ -75,6 +79,8 @@ public class WxLoginController extends BaseController { ...@@ -75,6 +79,8 @@ public class WxLoginController extends BaseController {
@Autowired @Autowired
private SysPermissionService permissionService; private SysPermissionService permissionService;
@Autowired
private SchoolStudentParentServiceImpl schoolStudentParentService;
private Logger log = LoggerFactory.getLogger(WxLoginController.class); private Logger log = LoggerFactory.getLogger(WxLoginController.class);
/** /**
...@@ -97,6 +103,12 @@ public class WxLoginController extends BaseController { ...@@ -97,6 +103,12 @@ public class WxLoginController extends BaseController {
String token = mpTokenService.createToken(user); String token = mpTokenService.createToken(user);
return AjaxResult.success().put(Constants.TOKEN, token); return AjaxResult.success().put(Constants.TOKEN, token);
} }
@GetMapping("/getRoleType/{phonenumber}")
public AjaxResult getRoleType(@PathVariable("phonenumber") String phonenumber){
// 根据手机号查询家长手机号
List<Map<String,Object>> list = schoolStudentParentService.getRoleTypeByPhoneNumber(phonenumber);
return AjaxResult.success(list);
}
/** /**
* @author lyric * @author lyric
......
...@@ -113,7 +113,7 @@ public class ExperimentLevelController extends BaseController { ...@@ -113,7 +113,7 @@ public class ExperimentLevelController extends BaseController {
public AjaxResult getGrade(SchoolLabClassYearVo schoolLabClassYearVo) public AjaxResult getGrade(SchoolLabClassYearVo schoolLabClassYearVo)
{ //获取最新学年 { //获取最新学年
int schoolYear = gradeService.isNewSchoolYear(); int schoolYear = gradeService.isNewSchoolYear();
return AjaxResult.success(schoolExperimentPlanService.getGrade(schoolYear,schoolLabClassYearVo.getUserId())); return AjaxResult.success(schoolExperimentPlanService.getGrade(schoolYear,schoolLabClassYearVo.getUserId()));
} }
/** /**
......
...@@ -3,14 +3,19 @@ package yangtz.cs.liu.wechat.controller.experiment; ...@@ -3,14 +3,19 @@ package yangtz.cs.liu.wechat.controller.experiment;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.MpLoginUser;
import com.ruoyi.framework.util.UserInfoUtil; import com.ruoyi.framework.util.UserInfoUtil;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import yangtz.cs.liu.campus.domain.schoolLab.SchoolLabClassYear; import yangtz.cs.liu.campus.domain.schoolLab.SchoolLabClassYear;
import yangtz.cs.liu.campus.domain.schoolLab.SchoolTeacherExperimentApply; import yangtz.cs.liu.campus.domain.schoolLab.SchoolTeacherExperimentApply;
import yangtz.cs.liu.campus.domain.schoolLab.SchoolTeacherLabApply; import yangtz.cs.liu.campus.domain.schoolLab.SchoolTeacherLabApply;
import yangtz.cs.liu.campus.service.schoolClass.ISchoolClassService;
import yangtz.cs.liu.campus.service.schoolLab.ISchoolLabClassYearService; import yangtz.cs.liu.campus.service.schoolLab.ISchoolLabClassYearService;
import yangtz.cs.liu.campus.service.schoolLab.ISchoolTeacherExperimentApplyService; import yangtz.cs.liu.campus.service.schoolLab.ISchoolTeacherExperimentApplyService;
import yangtz.cs.liu.campus.service.schoolLab.ISchoolTeacherLabApplyService; import yangtz.cs.liu.campus.service.schoolLab.ISchoolTeacherLabApplyService;
...@@ -38,6 +43,10 @@ public class TeacherExperimentController extends BaseController { ...@@ -38,6 +43,10 @@ public class TeacherExperimentController extends BaseController {
@Autowired @Autowired
ISchoolLabClassYearService schoolLabClassYearService; ISchoolLabClassYearService schoolLabClassYearService;
//学校班级
@Autowired
ISchoolClassService iSchoolClassService;
/** /**
* 个人申请记录 * 个人申请记录
*/ */
...@@ -89,6 +98,11 @@ public class TeacherExperimentController extends BaseController { ...@@ -89,6 +98,11 @@ public class TeacherExperimentController extends BaseController {
@Autowired @Autowired
ISysUserService userService; ISysUserService userService;
@Autowired
ISysRoleService roleService;
@Autowired
ISysDictDataService dictDataService;
/** /**
* 获取班级 * 获取班级
*/ */
...@@ -139,6 +153,28 @@ public class TeacherExperimentController extends BaseController { ...@@ -139,6 +153,28 @@ public class TeacherExperimentController extends BaseController {
} }
/** /**
* 获取当前登录角色学科
*/
@GetMapping("/getSubject")
public AjaxResult getSubject(){
Long userId = userInfoUtil.getMpLoginUser().getUserId();
List<SysRole> sysRoles = roleService.selectRolesByUserIdDdApp(userId);
for (SysRole role : sysRoles) {
if (role.getRoleKey().equals("phy_lab_admin")){
return AjaxResult.success(dictDataService.selectDictLabel("lab_sub","1"));
}else if (role.getRoleKey().equals("che_lab_admin")){
return AjaxResult.success(dictDataService.selectDictLabel("lab_sub","2"));
}else if (role.getRoleKey().equals("bio_lab_admin")){
return AjaxResult.success(dictDataService.selectDictLabel("lab_sub","3"));
}
}
return AjaxResult.success("当前用户未分配学科角色");
}
/**
*新增申请 *新增申请
*/ */
@PostMapping("/apply/add") @PostMapping("/apply/add")
...@@ -170,7 +206,7 @@ public class TeacherExperimentController extends BaseController { ...@@ -170,7 +206,7 @@ public class TeacherExperimentController extends BaseController {
/** /**
* 删除教师个人实验申请 * 删除教师个人实验申请
*/ */
@PostMapping("/apply/{ids}") @DeleteMapping("/apply/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) public AjaxResult remove(@PathVariable Long[] ids)
{ {
return toAjax(schoolTeacherExperimentApplyService.deleteSchoolTeacherExperimentApplyByIds(ids)); return toAjax(schoolTeacherExperimentApplyService.deleteSchoolTeacherExperimentApplyByIds(ids));
......
...@@ -195,6 +195,14 @@ public class WxSchoolOrganizationController extends BaseController { ...@@ -195,6 +195,14 @@ public class WxSchoolOrganizationController extends BaseController {
@PostMapping @PostMapping
public AjaxResult add(@RequestBody SchoolOrganizationSignin schoolOrganizationSignin) public AjaxResult add(@RequestBody SchoolOrganizationSignin schoolOrganizationSignin)
{ {
//判断cid和userid是否存在 如果存在则先删除 再添加
LambdaQueryWrapper<SchoolOrganizationSignin> wrapper = Wrappers.lambdaQuery();
wrapper.eq(SchoolOrganizationSignin::getCid,schoolOrganizationSignin.getCid());
wrapper.eq(SchoolOrganizationSignin::getUserId,schoolOrganizationSignin.getUserId());
SchoolOrganizationSignin one = schoolOrganizationSigninService.getOne(wrapper);
if (one!=null){
schoolOrganizationSigninService.removeById(one.getId());
}
schoolOrganizationSignin.setStatus("1"); //适配重新报名的情况 schoolOrganizationSignin.setStatus("1"); //适配重新报名的情况
return toAjax(schoolOrganizationSigninService.save(schoolOrganizationSignin)); return toAjax(schoolOrganizationSigninService.save(schoolOrganizationSignin));
} }
......
...@@ -57,11 +57,15 @@ public class WxLoginServiceImpl implements IWxLoginService { ...@@ -57,11 +57,15 @@ public class WxLoginServiceImpl implements IWxLoginService {
// 教职工登录 // 教职工登录
mpLoginUser = loadUserB(wxLoginBody, user); mpLoginUser = loadUserB(wxLoginBody, user);
} else if (PARENT_LOGIN.equals(wxLoginBody.getType())) { } else if (PARENT_LOGIN.equals(wxLoginBody.getType())) {
SchoolStudentParent schoolStudentParent = schoolStudentParentMapper.selectUserByParentTel(wxLoginBody.getParentTelephone(), wxLoginBody.getStudentIdCard()); SchoolStudentParent schoolStudentParent = schoolStudentParentMapper.selectUserByParentTel(wxLoginBody.getParentTelephone());
if(StringUtils.isNull(schoolStudentParent)){ if(StringUtils.isNull(schoolStudentParent)){
throw new ServiceException("学生身份证号或家长手机号输入有误,请检查后重试"); throw new ServiceException("家长手机号输入有误,请检查后重试");
} }
mpLoginUser = loadUserByParent(wxLoginBody, schoolStudentParent); SysUser sysUser = new SysUser();
sysUser.setUserLoginType(PARENT_LOGIN);
sysUser.setPhonenumber(wxLoginBody.getPhonenumber());
SysUser user = userMapper.getUser(sysUser);
mpLoginUser = loadUserByParent(wxLoginBody, schoolStudentParent,user);
} }
return mpLoginUser; return mpLoginUser;
} }
...@@ -112,11 +116,16 @@ public class WxLoginServiceImpl implements IWxLoginService { ...@@ -112,11 +116,16 @@ public class WxLoginServiceImpl implements IWxLoginService {
// 教职工登录 // 教职工登录
mpLoginUser = loadUserByTeacher(wxLoginBody, user); mpLoginUser = loadUserByTeacher(wxLoginBody, user);
} else if (PARENT_LOGIN.equals(wxLoginBody.getType())) { } else if (PARENT_LOGIN.equals(wxLoginBody.getType())) {
SchoolStudentParent schoolStudentParent = schoolStudentParentMapper.selectUserByParentTel(wxLoginBody.getParentTelephone(), wxLoginBody.getStudentIdCard()); //当前家长登录用手机号密码登录
SchoolStudentParent schoolStudentParent = schoolStudentParentMapper.selectUserByParentTel(wxLoginBody.getParentTelephone());
if(StringUtils.isNull(schoolStudentParent)){ if(StringUtils.isNull(schoolStudentParent)){
throw new ServiceException("学生身份证号或家长手机号输入有误,请检查后重试"); throw new ServiceException("家长信息不存在,请检查后重试");
} }
mpLoginUser = loadUserByParent(wxLoginBody, schoolStudentParent); SysUser sysUser = new SysUser();
sysUser.setUserLoginType(PARENT_LOGIN);
sysUser.setPhonenumber(wxLoginBody.getParentTelephone());
SysUser user = userMapper.getUser(sysUser);
mpLoginUser = loadUserByParent(wxLoginBody, schoolStudentParent,user);
} }
return mpLoginUser; return mpLoginUser;
} }
...@@ -188,17 +197,13 @@ public class WxLoginServiceImpl implements IWxLoginService { ...@@ -188,17 +197,13 @@ public class WxLoginServiceImpl implements IWxLoginService {
// } // }
// } // }
public MpLoginUser loadUserByParent(WxLoginBody loginBody, SchoolStudentParent schoolStudentParent) { public MpLoginUser loadUserByParent(WxLoginBody loginBody, SchoolStudentParent schoolStudentParent, SysUser users) {
String parentName = loginBody.getParentName(); String parentName = loginBody.getParentName();
String studentIdCard = loginBody.getStudentIdCard(); SchoolStudent schoolStudent = schoolStudentMapper.selectById(schoolStudentParent.getStudentId());
SchoolStudent schoolStudent = schoolStudentMapper.selectByIdCard(studentIdCard); if (!SecurityUtils.matchesPassword(loginBody.getPassword(), users.getPassword())) {
SysUser sysUser = userMapper.selectUserById(schoolStudentParent.getUserId()); throw new ServiceException("密码错误");
}
if (StringUtils.isNull(schoolStudent)) { if (UserStatus.DISABLE.getCode().equals(schoolStudent.getDelFlag())) {
throw new ServiceException("学生身份证:" + studentIdCard + "输入错误");
} else if (!loginBody.getStudentName().equals(schoolStudent.getStudentName())) {
throw new ServiceException("学生姓名:" + loginBody.getStudentName() + "输入错误");
} else if (UserStatus.DISABLE.getCode().equals(schoolStudent.getDelFlag())) {
throw new ServiceException("对不起,您的账号:" + parentName + " 已停用"); throw new ServiceException("对不起,您的账号:" + parentName + " 已停用");
}else if(GRADUATION.equals(schoolStudent.getStudentStatus())){ }else if(GRADUATION.equals(schoolStudent.getStudentStatus())){
throw new ServiceException("学生姓名:" + loginBody.getStudentName() + " 已毕业,无法登陆"); throw new ServiceException("学生姓名:" + loginBody.getStudentName() + " 已毕业,无法登陆");
...@@ -221,22 +226,18 @@ public class WxLoginServiceImpl implements IWxLoginService { ...@@ -221,22 +226,18 @@ public class WxLoginServiceImpl implements IWxLoginService {
user.setStudentId(schoolStudent.getId()); user.setStudentId(schoolStudent.getId());
user.setParentName(schoolStudentParent.getParentName()); user.setParentName(schoolStudentParent.getParentName());
user.setStudentName(schoolStudent.getStudentName()); user.setStudentName(schoolStudent.getStudentName());
user.setStudentIdCard(schoolStudent.getIdCard());
user.setAvatar(schoolStudent.getAvatar()); user.setAvatar(schoolStudent.getAvatar());
//更新家长openId //更新家长openId
SchoolStudentParent parent = new SchoolStudentParent(); // SchoolStudentParent parent = new SchoolStudentParent();
parent.setId(schoolStudentParent.getId()); // parent.setId(schoolStudentParent.getId());
parent.setOpenId(loginBody.getOpenId()); // parent.setOpenId(loginBody.getOpenId());
schoolStudentParentMapper.updateById(parent); // schoolStudentParentMapper.updateById(parent);
//
/** 更新用户表openId */ // /** 更新用户表openId */
SysUser u = new SysUser(); // SysUser u = new SysUser();
u.setUserId(schoolStudentParent.getUserId()); // u.setUserId(schoolStudentParent.getUserId());
u.setOpenId(loginBody.getOpenId()); // u.setOpenId(loginBody.getOpenId());
userMapper.updateUser(u); // userMapper.updateUser(u);
return user; return user;
} else { } else {
return null; return null;
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="yangtz.cs.liu.dingding.mapper.dingDept.DdDeptMapper">
<resultMap type="SysDdDept" id="SysDdDeptResult">
<id property="deptId" column="dept_id" />
<result property="parentId" column="parent_id" />
<result property="ancestors" column="ancestors" />
<result property="deptName" column="dept_name" />
<result property="orderNum" column="order_num" />
<result property="leader" column="leader" />
<result property="phone" column="phone" />
<result property="email" column="email" />
<result property="status" column="status" />
<result property="ddDeptId" column="dd_dept_id" />
<result property="ddParentId" column="dd_parent_id" />
<result property="delFlag" column="del_flag" />
<result property="parentName" column="parent_name" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectDdDeptVo">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.dd_dept_id, d.dd_parent_id, d.del_flag, d.create_by, d.create_time
from sys_dd_dept d
</sql>
<select id="selectDdDeptList" parameterType="SysDdDept" resultMap="SysDdDeptResult">
<include refid="selectDdDeptVo"/>
where d.del_flag = '0'
<if test="deptId != null and deptId != 0">
AND dept_id = #{deptId}
</if>
<if test="parentId != null and parentId != 0">
AND parent_id = #{parentId}
</if>
<if test="deptName != null and deptName != ''">
AND dept_name like concat('%', #{deptName}, '%')
</if>
<if test="status != null and status != ''">
AND status = #{status}
</if>
order by d.parent_id, d.order_num
</select>
<select id="selectDeptByDdDeptId" parameterType="Long" resultMap="SysDdDeptResult">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.dd_dept_id, d.dd_parent_id, d.del_flag, d.create_by, d.create_time
from sys_dd_dept d
where d.dd_dept_id = #{ddDeptId}
</select>
<select id="selectDeptByDeptId" parameterType="Long" resultMap="SysDdDeptResult">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.dd_dept_id, d.dd_parent_id, d.del_flag, d.create_by, d.create_time
from sys_dd_dept d
where d.dept_id = #{deptId}
</select>
<select id="selectGradeList" resultType="Map">
select id as gradeId, grade_year as gradeYear from school_grade_copy where del_flag = "0" order by grade_value ASC
</select>
<insert id="insertDdDept" parameterType="SysDdDept" useGeneratedKeys="true" keyProperty="deptId">
insert into sys_dd_dept(
<if test="deptId != null and deptId != 0">dept_id,</if>
<if test="parentId != null ">parent_id,</if>
<if test="deptName != null and deptName != ''">dept_name,</if>
<if test="ancestors != null and ancestors != ''">ancestors,</if>
<if test="orderNum != null">order_num,</if>
<if test="leader != null and leader != ''">leader,</if>
<if test="phone != null and phone != ''">phone,</if>
<if test="email != null and email != ''">email,</if>
<if test="status != null">status,</if>
<if test="ddDeptId != null">dd_dept_id,</if>
<if test="ddParentId != null">dd_parent_id,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
create_time
)values(
<if test="deptId != null and deptId != 0">#{deptId},</if>
<if test="parentId != null">#{parentId},</if>
<if test="deptName != null and deptName != ''">#{deptName},</if>
<if test="ancestors != null and ancestors != ''">#{ancestors},</if>
<if test="orderNum != null">#{orderNum},</if>
<if test="leader != null and leader != ''">#{leader},</if>
<if test="phone != null and phone != ''">#{phone},</if>
<if test="email != null and email != ''">#{email},</if>
<if test="status != null">#{status},</if>
<if test="ddDeptId != null">#{ddDeptId},</if>
<if test="ddParentId != null">#{ddParentId},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
sysdate()
)
</insert>
<update id="updateDdDept" parameterType="SysDdDept">
update sys_dd_dept
<set>
<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
<if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
<if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if>
<if test="orderNum != null">order_num = #{orderNum},</if>
<if test="leader != null">leader = #{leader},</if>
<if test="phone != null">phone = #{phone},</if>
<if test="email != null">email = #{email},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="ddDeptId != null ">dd_dept_id = #{ddDeptId},</if>
<if test="ddParentId != null">dd_parent_id = #{ddParentId},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
update_time = sysdate()
</set>
where dept_id = #{deptId}
</update>
<update id="updateDdDeptByDdDeptId" parameterType="SysDdDept">
update sys_dd_dept
<set>
<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
<if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
<if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if>
<if test="orderNum != null">order_num = #{orderNum},</if>
<if test="leader != null">leader = #{leader},</if>
<if test="phone != null">phone = #{phone},</if>
<if test="email != null">email = #{email},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="ddParentId != null">dd_parent_id = #{ddParentId},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
update_time = sysdate()
</set>
where dd_dept_id = #{ddDeptId}
</update>
<delete id="deleteDdDeptById" parameterType="Long">
update sys_dd_dept set del_flag = '2' where dept_id = #{deptId} and dept_id != 100
</delete>
<delete id="deleteDdDeptByDdDeptId" parameterType="Long">
update sys_dd_dept set del_flag = '2' where dd_dept_id = #{ddDeptId}
</delete>
</mapper>
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="yangtz.cs.liu.dingding.mapper.schoolTeacher.DdTeacherMapper">
<resultMap type="SysDdTeacher" id="SysDdTeacherResult">
<result property="id" column="id"/>
<result property="teacherName" column="teacher_name"/>
<result property="teacherTel" column="teacher_tel"/>
<result property="teacherCode" column="teacher_code"/>
<result property="idCard" column="id_card"/>
<result property="deviceNum" column="device_num"/>
<result property="homeAddress" column="home_address"/>
<result property="nation" column="nation"/>
<result property="picUrl" column="pic_url"/>
<result property="birthday" column="birthday"/>
<result property="education" column="education"/>
<result property="sex" column="sex"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="openId" column="open_id"/>
<result property="ddUserId" column="dd_user_id"/>
<result property="unionId" column="union_id"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
<insert id="addTeacherList" parameterType="SysDdTeacher" useGeneratedKeys="true" keyProperty="id">
insert into sys_dd_teacher
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="teacherName != null">teacher_name,</if>
<if test="teacherTel != null">teacher_tel,</if>
<if test="teacherCode != null">teacher_code,</if>
<if test="idCard != null">id_card,</if>
<if test="homeAddress != null">home_address,</if>
<if test="nation != null">nation,</if>
<if test="picUrl != null">pic_url,</if>
<if test="birthday != null">birthday,</if>
<if test="education != null">education,</if>
<if test="sex != null">sex,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="openId != null">open_id,</if>
<if test="ddUserId != null">dd_user_id,</if>
<if test="unionId != null">union_id,</if>
<if test="delFlag != null and delFlag != ''">del_flag,</if>
<if test="deviceNum != null">device_num,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="teacherName != null">#{teacherName},</if>
<if test="teacherTel != null">#{teacherTel},</if>
<if test="teacherCode != null">#{teacherCode},</if>
<if test="idCard != null">#{idCard},</if>
<if test="homeAddress != null">#{homeAddress},</if>
<if test="nation != null">#{nation},</if>
<if test="picUrl != null">#{picUrl},</if>
<if test="birthday != null">#{birthday},</if>
<if test="education != null">#{education},</if>
<if test="sex != null">#{sex},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="openId != null">#{openId},</if>
<if test="ddUserId != null">#{ddUserId},</if>
<if test="unionId != null">#{unionId},</if>
<if test="delFlag != null and delFlag != ''">#{delFlag},</if>
<if test="deviceNum != null">#{deviceNum},</if>
</trim>
</insert>
<update id="updateDdTeacher" parameterType="SysDdTeacher">
update sys_dd_teacher
<trim prefix="SET" suffixOverrides=",">
<if test="teacherName != null">teacher_name = #{teacherName},</if>
<if test="teacherTel != null">teacher_tel = #{teacherTel},</if>
<if test="teacherCode != null">teacher_code = #{teacherCode},</if>
<if test="idCard != null">id_card = #{idCard},</if>
<if test="homeAddress != null">home_address = #{homeAddress},</if>
<if test="nation != null">nation = #{nation},</if>
<if test="picUrl != null">pic_url = #{picUrl},</if>
<if test="birthday != null">birthday = #{birthday},</if>
<if test="education != null">education = #{education},</if>
<if test="sex != null">sex = #{sex},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="openId != null">open_id = #{openId}</if>
<if test="ddUserId != null">dd_user_id = #{ddUserId}</if>
<if test="unionId != null">union_id = #{unionId}</if>
</trim>
where id = #{id}
</update>
<!--批量新增教师-->
<insert id="batchInsertTeacher" parameterType="SysDdTeacher" useGeneratedKeys="true" keyProperty="id">
<foreach collection="list" item="data" separator=";">
insert into sys_dd_teacher
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="data.id != null">id,</if>
<if test="data.teacherName != null">teacher_name,</if>
<if test="data.teacherTel != null">teacher_tel,</if>
<if test="data.teacherCode != null">teacher_code,</if>
<if test="data.idCard != null">id_card,</if>
<if test="data.homeAddress != null">home_address,</if>
<if test="data.nation != null">nation,</if>
<if test="data.picUrl != null">pic_url,</if>
<if test="data.birthday != null">birthday,</if>
<if test="data.education != null">education,</if>
<if test="data.sex != null">sex,</if>
<if test="data.createBy != null">create_by,</if>
<if test="data.createTime != null">create_time,</if>
<if test="data.updateBy != null">update_by,</if>
<if test="data.updateTime != null">update_time,</if>
<if test="data.openId != null">open_id,</if>
<if test="data.ddUserId != null">dd_user_id,</if>
<if test="data.unionId != null">union_id,</if>
<if test="data.delFlag != null and data.delFlag != ''">del_flag,</if>
<if test="data.deviceNum != null">device_num,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="data.id != null">#{data.id},</if>
<if test="data.teacherName != null">#{data.teacherName},</if>
<if test="data.teacherTel != null">#{data.teacherTel},</if>
<if test="data.teacherCode != null">#{data.teacherCode},</if>
<if test="data.idCard != null">#{data.idCard},</if>
<if test="data.homeAddress != null">#{data.homeAddress},</if>
<if test="data.nation != null">#{data.nation},</if>
<if test="data.picUrl != null">#{data.picUrl},</if>
<if test="data.birthday != null">#{data.birthday},</if>
<if test="data.education != null">#{data.education},</if>
<if test="data.sex != null">#{data.sex},</if>
<if test="data.createBy != null">#{data.createBy},</if>
<if test="data.createTime != null">#{data.createTime},</if>
<if test="data.updateBy != null">#{data.updateBy},</if>
<if test="data.updateTime != null">#{data.updateTime},</if>
<if test="data.openId != null">#{data.openId},</if>
<if test="data.ddUserId != null">#{data.ddUserId},</if>
<if test="data.unionId != null">#{data.unionId},</if>
<if test="data.delFlag != null and data.delFlag != ''">#{data.delFlag},</if>
<if test="data.deviceNum != null">#{data.deviceNum},</if>
</trim>
</foreach>
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="yangtz.cs.liu.dingding.mapper.dingUser.DdUserMapper">
<resultMap type="SysDdUser" id="SysDdUserResult">
<id property="userId" column="user_id" />
<result property="deptId" column="dept_id" />
<result property="userName" column="user_name" />
<result property="loginName" column="login_name" />
<result property="userLoginType" column="user_login_type" />
<result property="email" column="email" />
<result property="phonenumber" column="phonenumber" />
<result property="sex" column="sex" />
<result property="avatar" column="avatar" />
<result property="password" column="password" />
<result property="salt" column="salt" />
<result property="status" column="status" />
<result property="delFlag" column="del_flag" />
<result property="loginIp" column="login_ip" />
<result property="loginDate" column="login_date" />
<result property="pwdUpdateDate" column="pwd_update_date" />
<result property="openId" column="open_id" />
<result property="unionId" column="union_id" />
<result property="ddUserId" column="dd_user_id" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="employeeType" column="employee_type" />
<result property="studentId" column="student_id" />
<result property="sign" column="sign" />
</resultMap>
<sql id="selectDdUserVo">
select u.user_id, u.dept_id, u.user_name, u.login_name,u.user_type, u.user_login_type,u.email, u.avatar, u.phonenumber, u.password, u.salt,u.sex, u.status, u.del_flag, u.login_ip, u.login_date,u.pwd_update_date, u.create_by, u.create_time, u.remark,u.sign,u.employee_type,u.student_id,
from sys_dd_user u
</sql>
<select id="selectDdUserList" parameterType="SysDdUser" resultMap="SysDdUserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.union_id, u.dd_user_id, u.create_by, u.create_time, u.remark from sys_dd_user u
where u.del_flag = '0' and user_login_type = '0'
<if test="userId != null and userId != 0">
AND u.user_id = #{userId}
</if>
<if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if test="status != null and status != ''">
AND u.status = #{status}
</if>
<if test="phonenumber != null and phonenumber != ''">
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
</if>
<if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectDdUserByDdUserId" parameterType="String" resultMap="SysDdUserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.union_id, u.dd_user_id, u.create_by, u.create_time, u.remark from sys_dd_user u
where u.del_flag = '0' and user_login_type = '0' and dd_user_id = #{ddUserId}
</select>
<insert id="insertDdUser" parameterType="SysDdUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_dd_user(
<if test="userId != null and userId != 0">user_id,</if>
<if test="deptId != null and deptId != 0">dept_id,</if>
<if test="userName != null and userName != ''">user_name,</if>
<if test="loginName != null and loginName != ''">login_name,</if>
<if test="userType != null and userType != ''">user_type,</if>
<if test="userLoginType != null and userLoginType != ''">user_login_type,</if>
<if test="email != null and email != ''">email,</if>
<if test="avatar != null and avatar != ''">avatar,</if>
<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
<if test="sex != null and sex != ''">sex,</if>
<if test="password != null and password != ''">password,</if>
<if test="salt != null and salt != ''">salt,</if>
<if test="status != null and status != ''">status,</if>
<if test="pwdUpdateDate != null">pwd_update_date,</if>
<if test="unionId != null">union_id,</if>
<if test="ddUserId != null">dd_user_id,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="sign != null and sign != ''">sign,</if>
<if test="studentId != null and studentId != 0">student_id,</if>
<if test="employeeType != null and employeeType != ''">employee_type,</if>
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
<if test="deptId != null and deptId != ''">#{deptId},</if>
<if test="userName != null and userName != ''">#{userName},</if>
<if test="loginName != null and loginName != ''">#{loginName},</if>
<if test="userType != null and userType != ''">#{userType},</if>
<if test="userLoginType != null and userLoginType != ''">#{userLoginType},</if>
<if test="email != null and email != ''">#{email},</if>
<if test="avatar != null and avatar != ''">#{avatar},</if>
<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
<if test="sex != null and sex != ''">#{sex},</if>
<if test="password != null and password != ''">#{password},</if>
<if test="salt != null and salt != ''">#{salt},</if>
<if test="status != null and status != ''">#{status},</if>
<if test="pwdUpdateDate != null">#{pwdUpdateDate},</if>
<if test="unionId != null">#{unionId},</if>
<if test="ddUserId != null">#{ddUserId},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="sign != null and sign != ''">#{sign},</if>
<if test="studentId != null and studentId != ''">#{studentId},</if>
<if test="employeeType != null and employeeType != ''">#{employeeType},</if>
sysdate()
)
</insert>
<update id="updateDdUser" parameterType="SysDdUser">
update sys_dd_user
<set>
<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
<if test="userName != null and userName != ''">user_name = #{userName},</if>
<if test="loginName != null and loginName != ''">login_name = #{loginName},</if>
<if test="userType != null and userType != ''">user_type = #{userType},</if>
<if test="email != null ">email = #{email},</if>
<if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
<if test="sex != null and sex != ''">sex = #{sex},</if>
<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
<if test="password != null and password != ''">password = #{password},</if>
<if test="salt != null and salt != ''">salt = #{salt},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
<if test="loginDate != null">login_date = #{loginDate},</if>
<if test="pwdUpdateDate != null">pwd_update_date = #{pwdUpdateDate},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="employeeType != null and employeeType != ''">employee_type = #{employeeType},</if>
<if test="studentId != null and studentId != 0">student_id = #{studentId},</if>
<if test="sign != null and sign != ''">sign = #{sign},</if>
<if test="openId != null and openId != ''">open_id = #{openId},</if>
<if test="ddUserId != null and ddUserId != ''">dd_user_id = #{ddUserId},</if>
<if test="unionId != null and unionId != ''">union_id = #{unionId},</if>
update_time = sysdate()
</set>
where user_id = #{userId}
</update>
<update id="updateUserList" parameterType="SysDdUser">
<foreach collection="list" item="data" separator=";">
update sys_dd_user
<trim prefix="SET" suffixOverrides=",">
<if test="data.userName != null and data.userName != ''">
user_name = #{data.userName},
</if>
</trim>
where user_id = #{data.userId}
</foreach>
</update>
<insert id="addUserList" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
<foreach collection="list" item="data" separator=";">
insert into sys_dd_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="data.userLoginType != null and data.userLoginType != ''">
user_login_type,
</if>
<if test="data.userName != null and data.userName != ''">
user_name,
</if>
<if test="data.phonenumber != null and data.phonenumber != ''">
phonenumber,
</if>
<if test="data.studentId != null">
student_id,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="data.userLoginType != null and data.userLoginType != ''">
#{data.userLoginType},
</if>
<if test="data.userName != null and data.userName != ''">
#{data.userName},
</if>
<if test="data.phonenumber != null and data.phonenumber != ''">
#{data.phonenumber},
</if>
<if test="data.studentId != null">
#{data.studentId},
</if>
</trim>
</foreach>
</insert>
<insert id="addDdUserList" parameterType="SysDdUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_dd_user(
<if test="userId != null and userId != 0">user_id,</if>
<if test="deptId != null and deptId != 0">dept_id,</if>
<if test="userName != null and userName != ''">user_name,</if>
<if test="loginName != null and loginName != ''">login_name,</if>
<if test="userType != null and userType != ''">user_type,</if>
<if test="userLoginType != null and userLoginType != ''">user_login_type,</if>
<if test="email != null and email != ''">email,</if>
<if test="avatar != null and avatar != ''">avatar,</if>
<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
<if test="sex != null and sex != ''">sex,</if>
<if test="password != null and password != ''">password,</if>
<if test="salt != null and salt != ''">salt,</if>
<if test="status != null and status != ''">status,</if>
<if test="pwdUpdateDate != null">pwd_update_date,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="sign != null and sign != ''">sign,</if>
<if test="studentId != null and studentId != 0">student_id,</if>
<if test="employeeType != null and employeeType != ''">employee_type,</if>
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
<if test="deptId != null and deptId != ''">#{deptId},</if>
<if test="userName != null and userName != ''">#{userName},</if>
<if test="loginName != null and loginName != ''">#{loginName},</if>
<if test="userType != null and userType != ''">#{userType},</if>
<if test="userLoginType != null and userLoginType != ''">#{userLoginType},</if>
<if test="email != null and email != ''">#{email},</if>
<if test="avatar != null and avatar != ''">#{avatar},</if>
<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
<if test="sex != null and sex != ''">#{sex},</if>
<if test="password != null and password != ''">#{password},</if>
<if test="salt != null and salt != ''">#{salt},</if>
<if test="status != null and status != ''">#{status},</if>
<if test="pwdUpdateDate != null">#{pwdUpdateDate},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="sign != null and sign != ''">#{sign},</if>
<if test="studentId != null and studentId != ''">#{studentId},</if>
<if test="employeeType != null and employeeType != ''">#{employeeType},</if>
sysdate()
)
</insert>
<!--批量新增钉钉用户-->
<insert id="batchInsertDdUser" parameterType="SysDdUser" useGeneratedKeys="true" keyProperty="userId">
<foreach collection="list" item="data" separator=";">
insert into sys_dd_user(
<if test="data.userId != null and data.userId != 0">user_id,</if>
<if test="data.deptId != null and data.deptId != 0">dept_id,</if>
<if test="data.userName != null and data.userName != ''">user_name,</if>
<if test="data.loginName != null and data.loginName != ''">login_name,</if>
<if test="data.userType != null and data.userType != ''">user_type,</if>
<if test="data.userLoginType != null and data.userLoginType != ''">user_login_type,</if>
<if test="data.email != null and data.email != ''">email,</if>
<if test="data.avatar != null and data.avatar != ''">avatar,</if>
<if test="data.phonenumber != null and data.phonenumber != ''">phonenumber,</if>
<if test="data.sex != null and data.sex != ''">sex,</if>
<if test="data.password != null and data.password != ''">password,</if>
<if test="data.salt != null and data.salt != ''">salt,</if>
<if test="data.status != null and data.status != ''">status,</if>
<if test="data.pwdUpdateDate != null">pwd_update_date,</if>
<if test="data.unionId != null">union_id,</if>
<if test="data.ddUserId != null">dd_user_id,</if>
<if test="data.createBy != null and data.createBy != ''">create_by,</if>
<if test="data.remark != null and data.remark != ''">remark,</if>
<if test="data.sign != null and data.sign != ''">sign,</if>
<if test="data.studentId != null and data.studentId != 0">student_id,</if>
<if test="data.employeeType != null and data.employeeType != ''">employee_type,</if>
create_time
)values(
<if test="data.userId != null and data.userId != ''">#{data.userId},</if>
<if test="data.deptId != null and data.deptId != ''">#{data.deptId},</if>
<if test="data.userName != null and data.userName != ''">#{data.userName},</if>
<if test="data.loginName != null and data.loginName != ''">#{data.loginName},</if>
<if test="data.userType != null and data.userType != ''">#{data.userType},</if>
<if test="data.userLoginType != null and data.userLoginType != ''">#{data.userLoginType},</if>
<if test="data.email != null and data.email != ''">#{data.email},</if>
<if test="data.avatar != null and data.avatar != ''">#{data.avatar},</if>
<if test="data.phonenumber != null and data.phonenumber != ''">#{data.phonenumber},</if>
<if test="data.sex != null and data.sex != ''">#{data.sex},</if>
<if test="data.password != null and data.password != ''">#{data.password},</if>
<if test="data.salt != null and data.salt != ''">#{data.salt},</if>
<if test="data.status != null and data.status != ''">#{data.status},</if>
<if test="data.pwdUpdateDate != null">#{data.pwdUpdateDate},</if>
<if test="data.unionId != null">#{data.unionId},</if>
<if test="data.ddUserId != null">#{data.ddUserId},</if>
<if test="data.createBy != null and data.createBy != ''">#{data.createBy},</if>
<if test="data.remark != null and data.remark != ''">#{data.remark},</if>
<if test="data.sign != null and data.sign != ''">#{data.sign},</if>
<if test="data.studentId != null and data.studentId != ''">#{data.studentId},</if>
<if test="data.employeeType != null and data.employeeType != ''">#{data.employeeType},</if>
sysdate()
)
</foreach>
</insert>
<insert id="insertDdUserDept" parameterType="SysDdUserDept">
insert into sys_dd_user_dept(user_id, dept_id) values (#{userId},#{deptId})
</insert>
<update id="deleteDdUser" parameterType="Long">
update sys_dd_user set del_flag = "2" where user_id = #{userId}
</update>
<delete id="deleteDdUserDept">
delete from sys_dd_user_dept where user_id = #{userId}
</delete>
<update id="deleteDdTeacher" parameterType="Long">
update sys_dd_teacher set del_flag = "2" where id = #{userId}
</update>
<select id="selectDeptIdByUserId" parameterType="Long" resultType="Long">
select dept_id from sys_dd_user_dept where user_id = #{userId}
</select>
<!--新增级部成员-->
<insert id="insertGradeMentor" parameterType="SchoolGradeMentorCopy">
insert into school_grade_mentor_copy
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="teacherId != null">teacher_id,</if>
<if test="gradeId != null">grade_id,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="type != null and type != ''">type,</if>
<if test="teacherPost != null and teacherPost != ''">teacher_post,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="teacherId != null">#{teacherId},</if>
<if test="gradeId != null">#{gradeId},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="type != null and type != ''">#{type},</if>
<if test="teacherPost != null and teacherPost != ''">#{teacherPost},</if>
</trim>
</insert>
<!--删除级部成员-->
<update id="deleteGradeMentor" parameterType="Long">
update school_grade_mentor_copy set del_flag = "1" where teacher_id = #{userId}
</update>
</mapper>
...@@ -4,13 +4,13 @@ ...@@ -4,13 +4,13 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="yangtz.cs.liu.campus.mapper.message.SchoolMessagePushMapper"> <mapper namespace="yangtz.cs.liu.campus.mapper.message.SchoolMessagePushMapper">
<select id="getInfo" resultType="yangtz.cs.liu.campus.vo.message.SchoolMessagePushExportVO"> <select id="getInfo" resultType="yangtz.cs.liu.campus.vo.message.SchoolMessagePushExportVO">
select smp.id, smp.title, smp.content, smp.receive_packet,sr.role_name as receivePacketName, smp.message_type, smp.state from school_message_push smp select smp.id, smp.title, smp.content, smp.receive_packet, smp.group_name,sr.role_name as receivePacketName, smp.message_type, smp.state from school_message_push smp
left join sys_role sr on sr.role_id = smp.receive_packet left join sys_role sr on sr.role_id = smp.receive_packet
where smp.id = #{id} and smp.del_flag = '0' and sr.del_flag = '0' where smp.id = #{id} and smp.del_flag = '0' and sr.del_flag = '0'
</select> </select>
<select id="getList" resultType="yangtz.cs.liu.wechat.vo.message.MessagePushVO"> <select id="getList" resultType="yangtz.cs.liu.wechat.vo.message.MessagePushVO">
select mp.id,mp.title,mp.receive_packet,mp.message_type,mp.state,mp.content,mp.create_by,mp.create_time,pd.status from school_message_push mp select mp.id,mp.title,mp.receive_packet,mp.message_type,mp.state,mp.group_name,mp.content,mp.create_by,mp.create_time,pd.status from school_message_push mp
left join school_message_push_details pd on pd.push_id = mp.id left join school_message_push_details pd on pd.push_id = mp.id
where pd.user_id = #{userId} and pd.del_flag = '0' and mp.del_flag = '0' and mp.state = '0' where pd.user_id = #{userId} and pd.del_flag = '0' and mp.del_flag = '0' and mp.state = '0'
order by pd.status asc, mp.create_time desc order by pd.status asc, mp.create_time desc
......
...@@ -38,6 +38,16 @@ ...@@ -38,6 +38,16 @@
order by g.grade_value, g.class_value order by g.grade_value, g.class_value
</select> </select>
<select id="selectSchoolClassSchoolYear" resultMap="SchoolClassResult">
select g.grade_value, g.grade_name, g.class_value, g.class_name, g.school_year, g.id
from school_class g
where g.del_flag = '0'
and g.school_year = #{schoolYear}
order by g.grade_value, g.class_value
</select>
<select id="getUserClassByParent" resultType="SchoolClass"> <select id="getUserClassByParent" resultType="SchoolClass">
SELECT sg.pic_url, SELECT sg.pic_url,
sg.class_value, sg.class_value,
...@@ -149,4 +159,9 @@ ...@@ -149,4 +159,9 @@
where del_flag = '0' and grade_id = #{gradeId} where del_flag = '0' and grade_id = #{gradeId}
</select> </select>
<select id="selectDdClassId" resultType="java.lang.Long">
select sg.id from school_class_copy sg
where sg.del_flag = '0' and sg.dd_class_id=#{ddClssId}
</select>
</mapper> </mapper>
...@@ -70,6 +70,9 @@ ...@@ -70,6 +70,9 @@
<if test="applyName != null and applyName != ''"> and tla.apply_name like concat('%', #{applyName}, '%')</if> <if test="applyName != null and applyName != ''"> and tla.apply_name like concat('%', #{applyName}, '%')</if>
<if test="applyTime != null "> and tla.apply_time = #{applyTime}</if> <if test="applyTime != null "> and tla.apply_time = #{applyTime}</if>
<if test="state != null "> and tla.state = #{state}</if> <if test="state != null "> and tla.state = #{state}</if>
<if test="querText != null ">
and concat(tla.experiment_name,tla.grade) like concat('%', #{querText}, '%')
</if>
<if test="subs != null "> <if test="subs != null ">
and tla.sub in and tla.sub in
<foreach item="sub" collection="subs" open="(" separator="," close=")"> <foreach item="sub" collection="subs" open="(" separator="," close=")">
......
...@@ -54,5 +54,12 @@ ...@@ -54,5 +54,12 @@
<include refid="selectSchoolGradeVo"/> <include refid="selectSchoolGradeVo"/>
where school_year = (select max(school_year) from school_grade ) where school_year = (select max(school_year) from school_grade )
</select> </select>
<select id="selectDdClassId" resultType="java.lang.Long">
select sg.id from school_grade_copy sg
where sg.del_flag = '0' and sg.dd_class_id=#{ddClssId}
</select>
<select id="selectUpToYear" resultType="java.lang.String">
select max(school_year) nowYear from school_grade_copy where del_flag = '0'
</select>
</mapper> </mapper>
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
<result property="appearance" column="appearance"/> <result property="appearance" column="appearance"/>
<result property="registeredAddress" column="registered_address"/> <result property="registeredAddress" column="registered_address"/>
<result property="registeredType" column="registered_type"/> <result property="registeredType" column="registered_type"/>
<result property="ddUserId" column="dd_user_id"/>
</resultMap> </resultMap>
<sql id="selectSchoolStudentVo"> <sql id="selectSchoolStudentVo">
...@@ -42,6 +43,7 @@ ...@@ -42,6 +43,7 @@
native_place, native_place,
avatar, avatar,
id_card, id_card,
dd_user_id,
school_no, school_no,
student_status, student_status,
student_type, student_type,
...@@ -72,6 +74,7 @@ ...@@ -72,6 +74,7 @@
<if test="studentStatus != null">student_status,</if> <if test="studentStatus != null">student_status,</if>
<if test="studentType != null">student_type,</if> <if test="studentType != null">student_type,</if>
<if test="oneCard != null and oneCard != ''">one_card,</if> <if test="oneCard != null and oneCard != ''">one_card,</if>
<if test="ddUserId != null and oneCard != ''">dd_user_id,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="classId != null">#{classId},</if> <if test="classId != null">#{classId},</if>
...@@ -90,6 +93,7 @@ ...@@ -90,6 +93,7 @@
<if test="studentStatus != null">#{studentStatus},</if> <if test="studentStatus != null">#{studentStatus},</if>
<if test="studentType != null">#{studentType},</if> <if test="studentType != null">#{studentType},</if>
<if test="oneCard != null and oneCard != ''">#{oneCard},</if> <if test="oneCard != null and oneCard != ''">#{oneCard},</if>
<if test="ddUserId != null and ddUserId != ''">#{ddUserId},</if>
</trim> </trim>
</insert> </insert>
...@@ -100,7 +104,7 @@ ...@@ -100,7 +104,7 @@
<select id="queryList" parameterType="SchoolStudentVO" resultType="yangtz.cs.liu.campus.vo.student.SchoolStudentVO"> <select id="queryList" parameterType="SchoolStudentVO" resultType="yangtz.cs.liu.campus.vo.student.SchoolStudentVO">
select ss.id,ss.class_id,ss.student_name,ss.sex,ss.birthday,ss.nation,ss.stu_telephone,ss.postal_code, select ss.id,ss.class_id,ss.student_name,ss.sex,ss.birthday,ss.nation,ss.stu_telephone,ss.postal_code,
ss.nature,ss.provincial_number,ss.national_number,ss.enrollment_year,ss.home_address, ss.nature,ss.provincial_number,ss.national_number,ss.enrollment_year,ss.home_address,
ss.native_place, ss.avatar, ss.id_card,ss.school_no, ss.student_status, ss.platform, ss.native_place, ss.avatar,ss.dd_user_id, ss.id_card,ss.school_no, ss.student_status, ss.platform,
ss.birth_address,ss.postal_address,ss.junior_school,ss.region,ss.foreign_languages, ss.birth_address,ss.postal_address,ss.junior_school,ss.region,ss.foreign_languages,
ss.blood_type,ss.health,ss.other_regions,ss.floating_population,ss.support,ss.only_child, ss.blood_type,ss.health,ss.other_regions,ss.floating_population,ss.support,ss.only_child,
ss.student_type, ss.one_card, ss.enrollment_time, ss.appearance, ss.registered_address, ss.registered_type, ss.student_type, ss.one_card, ss.enrollment_time, ss.appearance, ss.registered_address, ss.registered_type,
...@@ -123,6 +127,7 @@ ...@@ -123,6 +127,7 @@
<if test="schoolNo != null and schoolNo != ''">and ss.school_no like concat('%', #{schoolNo}, '%')</if> <if test="schoolNo != null and schoolNo != ''">and ss.school_no like concat('%', #{schoolNo}, '%')</if>
<if test="studentStatus != null and studentStatus !=''">and ss.student_status = #{studentStatus}</if> <if test="studentStatus != null and studentStatus !=''">and ss.student_status = #{studentStatus}</if>
<if test="studentType != null and studentType !=''">and ss.student_type = #{studentType}</if> <if test="studentType != null and studentType !=''">and ss.student_type = #{studentType}</if>
<if test="ddUserId != null and ddUserId !=''">and ss.dd_user_id = #{ddUserId}</if>
</where> </where>
order by ss.class_id asc order by ss.class_id asc
</select> </select>
...@@ -146,6 +151,7 @@ ...@@ -146,6 +151,7 @@
<if test="studentStatus != null and studentStatus !=''">and student_status = #{studentStatus}</if> <if test="studentStatus != null and studentStatus !=''">and student_status = #{studentStatus}</if>
<if test="studentType != null and studentType !=''">and student_type = #{studentType}</if> <if test="studentType != null and studentType !=''">and student_type = #{studentType}</if>
<if test="oneCard != null and oneCard !=''">and one_card = #{oneCard}</if> <if test="oneCard != null and oneCard !=''">and one_card = #{oneCard}</if>
<if test="ddUserId != null and ddUserId !=''">and dd_user_id = #{ddUserId}</if>
and del_flag = '0' and del_flag = '0'
</where> </where>
order by create_time desc order by create_time desc
...@@ -179,6 +185,7 @@ ...@@ -179,6 +185,7 @@
ss.student_type, ss.student_type,
ss.one_card, ss.one_card,
sg.class_alias sg.class_alias
sg.dd_user_id
FROM school_student ss FROM school_student ss
LEFT JOIN school_class sg ON sg.id = ss.class_id LEFT JOIN school_class sg ON sg.id = ss.class_id
LEFT JOIN school_teacher st ON st.id = sg.teacher_id LEFT JOIN school_teacher st ON st.id = sg.teacher_id
...@@ -213,6 +220,7 @@ ...@@ -213,6 +220,7 @@
ssp.parent_name, ssp.parent_name,
ssp.relationship, ssp.relationship,
ssp.telephone ssp.telephone
ssp.dd_user_id
FROM school_student s FROM school_student s
LEFT JOIN school_class sg on sg.id = s.class_id LEFT JOIN school_class sg on sg.id = s.class_id
LEFT JOIN school_student_parent ssp on ssp.student_id = s.id LEFT JOIN school_student_parent ssp on ssp.student_id = s.id
...@@ -244,7 +252,7 @@ ...@@ -244,7 +252,7 @@
<select id="getInfo" resultType="yangtz.cs.liu.campus.vo.student.SchoolStudentVO"> <select id="getInfo" resultType="yangtz.cs.liu.campus.vo.student.SchoolStudentVO">
select ss.id,ss.class_id,ss.student_name,ss.sex,ss.birthday,ss.nation,ss.stu_telephone,ss.postal_code, select ss.id,ss.class_id,ss.student_name,ss.sex,ss.birthday,ss.nation,ss.stu_telephone,ss.postal_code,
ss.nature,ss.provincial_number,ss.national_number,ss.enrollment_year,ss.home_address, ss.nature,ss.provincial_number,ss.national_number,ss.enrollment_year,ss.home_address,
ss.native_place, ss.avatar, ss.id_card,ss.school_no, ss.student_status, ss.platform, ss.native_place, ss.avatar,ss.dd_user_id, ss.id_card,ss.school_no, ss.student_status, ss.platform,
ss.birth_address,ss.postal_address,ss.junior_school,ss.region,ss.foreign_languages, ss.birth_address,ss.postal_address,ss.junior_school,ss.region,ss.foreign_languages,
ss.blood_type,ss.health,ss.other_regions,ss.floating_population,ss.support,ss.only_child, ss.blood_type,ss.health,ss.other_regions,ss.floating_population,ss.support,ss.only_child,
ss.student_type, ss.one_card, ss.enrollment_time, ss.appearance, ss.registered_address, ss.registered_type, ss.student_type, ss.one_card, ss.enrollment_time, ss.appearance, ss.registered_address, ss.registered_type,
...@@ -281,10 +289,17 @@ ...@@ -281,10 +289,17 @@
order by sc.grade_value,sc.class_value order by sc.grade_value,sc.class_value
</select> </select>
<select id="getDdUserId" resultType="Long">
select id FROM school_student where dd_user_id = #{foUserId}
</select>
<select id="getInfoByidCard" resultType="yangtz.cs.liu.campus.vo.student.SchoolStudentVO"> <select id="getInfoByidCard" resultType="yangtz.cs.liu.campus.vo.student.SchoolStudentVO">
select ss.id,ss.class_id,ss.student_name,ss.sex,ss.birthday,ss.nation,ss.stu_telephone,ss.postal_code, select ss.id,ss.class_id,ss.student_name,ss.sex,ss.birthday,ss.nation,ss.stu_telephone,ss.postal_code,
ss.nature,ss.provincial_number,ss.national_number,ss.enrollment_year,ss.home_address, ss.nature,ss.provincial_number,ss.national_number,ss.enrollment_year,ss.home_address,
ss.native_place,sc.school_year, ss.avatar, ss.id_card,ss.school_no, ss.student_status,ss.platform, ss.native_place,sc.school_year, ss.dd_user_id,ss.avatar, ss.id_card,ss.school_no, ss.student_status,ss.platform,
ss.birth_address,ss.postal_address,ss.junior_school,ss.region,ss.foreign_languages, ss.birth_address,ss.postal_address,ss.junior_school,ss.region,ss.foreign_languages,
ss.blood_type,ss.health,ss.other_regions,ss.floating_population,ss.support,ss.only_child, ss.blood_type,ss.health,ss.other_regions,ss.floating_population,ss.support,ss.only_child,
ss.student_type, ss.one_card, ss.enrollment_time, ss.appearance, ss.registered_address, ss.registered_type, ss.student_type, ss.one_card, ss.enrollment_time, ss.appearance, ss.registered_address, ss.registered_type,
...@@ -314,6 +329,7 @@ ...@@ -314,6 +329,7 @@
<if test="data.studentStatus != null and data.studentStatus != ''">student_status,</if> <if test="data.studentStatus != null and data.studentStatus != ''">student_status,</if>
<if test="data.studentType != null and data.studentType != ''">student_type,</if> <if test="data.studentType != null and data.studentType != ''">student_type,</if>
<if test="data.oneCard != null and data.oneCard != ''">one_card,</if> <if test="data.oneCard != null and data.oneCard != ''">one_card,</if>
<if test="data.ddUserId != null and data.ddUserId != ''">dd_user_id,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="data.classId != null">#{data.classId},</if> <if test="data.classId != null">#{data.classId},</if>
...@@ -330,6 +346,7 @@ ...@@ -330,6 +346,7 @@
<if test="data.studentStatus != null and data.studentStatus != ''">#{data.studentStatus},</if> <if test="data.studentStatus != null and data.studentStatus != ''">#{data.studentStatus},</if>
<if test="data.studentType != null and data.studentType != ''">#{data.studentType},</if> <if test="data.studentType != null and data.studentType != ''">#{data.studentType},</if>
<if test="data.oneCard != null and data.oneCard != ''">#{data.oneCard},</if> <if test="data.oneCard != null and data.oneCard != ''">#{data.oneCard},</if>
<if test="data.ddUserId != null and data.ddUserId != ''">#{data.ddUserId},</if>
</trim> </trim>
</foreach> </foreach>
</insert> </insert>
......
...@@ -36,6 +36,13 @@ ...@@ -36,6 +36,13 @@
</select> </select>
<select id="getRoleTypeByPhoneNumber" parameterType="String" resultType="Map">
SELECT u.login_name,u.user_login_type FROM sys_user u WHERE u. phonenumber = #{phonenumber}
</select>
<select id="selectUserByParentTel" resultType="SchoolStudentParent"> <select id="selectUserByParentTel" resultType="SchoolStudentParent">
select ssp.id, select ssp.id,
ssp.student_id, ssp.student_id,
...@@ -46,8 +53,7 @@ ...@@ -46,8 +53,7 @@
ssp.user_id ssp.user_id
from school_student_parent ssp from school_student_parent ssp
left join school_student s on s.id = ssp.student_id left join school_student s on s.id = ssp.student_id
where ssp.telephone = #{parentTelephone} and s.id_card = #{studentIdCard} and s.del_flag = '0' and ssp.del_flag = '0' where ssp.telephone = #{parentTelephone} and s.del_flag = '0' and ssp.del_flag = '0'
</select> </select>
......
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