This commit is contained in:
JyuHsin
2025-05-12 17:08:56 +08:00
parent cd5a5c5537
commit b18b49f395
22 changed files with 165 additions and 91 deletions
@@ -543,8 +543,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
// 变更记录
List<NutMap> changeList = new ArrayList<>();
for (String fieldName : allowChangeFieldNames) {
if (allowChangeFieldNames.contains("retireDate") || allowChangeFieldNames.contains("welfareStopDate")
|| allowChangeFieldNames.contains("personalStatus")) {
if (List.of("retireDate", "welfareStopDate", "personalStatus").contains(fieldName)) {
continue;
}
memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
@@ -595,8 +594,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
}
List<NutMap> changeList = new ArrayList<>();
for (String fieldName : allowChangeFieldNames) {
if (allowChangeFieldNames.contains("retireDate") || allowChangeFieldNames.contains("welfareStopDate")
|| allowChangeFieldNames.contains("personalStatus")) {
if (List.of("retireDate", "welfareStopDate", "personalStatus").contains(fieldName)) {
continue;
}
memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
@@ -80,18 +80,16 @@ public class MemberApplyBranchUnionAuditController {
Sql sql = Sqls.create("""
SELECT
record.*,
state.stateName,
su.unionname AS allocationUnionName
state.stateName
FROM
member_apply_record record
LEFT JOIN audit_state state ON state.stateId = record.applyStateId
LEFT JOIN sys_union su ON su.id = record.allocationUnionId
$condition
""");
Cnd cnd = Cnd.NEW();
pageForm.buildSearch(cnd, "record.");
if (!ShiroUtil.hasAnyRoles("sysadmin, A06, SchoolUnionMemberAdmin")) {
cnd.and("record.allocationUnionId", "=", Vi.getUnionId());
cnd.and("record.unionId", "=", Vi.getUnionId());
}
if (pageForm.getAudit()) {
cnd.and("record.applyStateId", ">", 20);
@@ -4,6 +4,7 @@ import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.models.User;
import io.v.nutz.web.commons.base.Globals;
@@ -18,6 +19,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -125,7 +128,24 @@ public class MemberApplyController {
// 审核流程开始
MemberApplyToDoHandler.START_PROCESS.exec(record, null);
MemberApplyToDoHandler.CREATE_UNION_TASK.exec(record, null);
Sql sql = Sqls.create("""
SELECT
u.loginname,
u.username,
u.unionname
FROM
`sys_user_role` userRole
LEFT JOIN sys_role role ON role.id = userRole.roleId
LEFT JOIN `user` u ON u.id = userRole.userId
WHERE
role.`code` = 'BranchUnionMemberAdmin' and u.unionid = @unionId
group by u.loginname
""").setParam("unionId", Vi.getUnionId());
List<NutMap> list = commonService.listMap(sql);
List<String> unionLeaderLoginNames = list.stream().map(v -> v.getString("loginname")).toList();
MemberApplyToDoHandler.CREATE_UNION_TASK.exec(record, NutMap.NEW().addv("unionLeaderLoginNames", unionLeaderLoginNames));
return null;
}
@@ -36,6 +36,7 @@ import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.Date;
import java.util.List;
/**
@@ -138,6 +139,7 @@ public class MemberApplySchoolUnionAuditController {
Sys_user sysUser = new Sys_user();
BeanUtil.copyProperties(record, sysUser);
sysUser.setId(user.getId());
sysUser.setMemberJoinTime(new Date());
dao.updateIgnoreNull(sysUser);
// 还要设置会员角色
@@ -276,7 +276,7 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl<SourceChangeM
@Override
public void sendUnitChangeTeacher(SourceChangeMiddleTable middleTable, UserHistory history) {
// 查询出异动前的工会
Sql beforeUnionSql = Sqls.create("select un.id,un.unionname from sys_union un left join sys_unit unit on unit.unionid where unit.id = @unitId")
/*Sql beforeUnionSql = Sqls.create("select un.id,un.unionname from sys_union un left join sys_unit unit on unit.unionid where unit.id = @unitId")
.setParam("unitId", history.getUnitid());
beforeUnionSql.setCallback(Sqls.callback.map());
dao().execute(beforeUnionSql);
@@ -298,7 +298,7 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl<SourceChangeM
// 找到变更后的分工会会员管理员,发送消息提醒
String afterContent = "";
}
}*/
}
}
@@ -73,8 +73,9 @@ public class MTrainSignUpActivityController {
public Object pageData(PageForm pageForm,
@Param(value = "activityStatus", required = false) int activityStatus,
@Param(value = "year", required = false) Integer year,
@Param(value = "type", required = false) String type) {
return trainSignUpActivityService.mPageData(pageForm, year, activityStatus, type);
@Param(value = "type", required = false) String type,
@Param(value = "id", required = false) String id) {
return trainSignUpActivityService.mPageData(pageForm, year, activityStatus, type, id);
}
/**
@@ -67,7 +67,7 @@ public interface TrainSignUpActivityService extends ViService<TrainSignUpActivit
* @param activityStatus 报名状态 0全部 1进行中 2结束
* @return
*/
Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, String type);
Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, String type, String id);
/**
* 手机端报名
@@ -297,8 +297,9 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
}
@Override
public Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, String type) {
public Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, String type, String id) {
Cnd cnd = Cnd.NEW();
cnd.andEX("id", "=", id);
cnd.andEX("year", "=", year);
// cnd.andEX("isDisabled", "=", false);
// String dateTime = DateUtil.getDateTime();
@@ -122,6 +122,13 @@ public class WelfareMemberMangeController {
return null;
}
@At
@ViReturn
@RequiresPermissions("welfare.member.mange")
public Object updateRemark(String userId, String remark) {
welfareMemberService.dao().update(Sys_user.class, Chain.make("remark", remark), Cnd.where("id", "=", userId));
return null;
}
@At
@ViReturn
@@ -347,7 +354,7 @@ public class WelfareMemberMangeController {
@Ok("void")
@RequiresPermissions("welfare.member.mange")
public void exportList(HttpServletResponse response) {
Sql sql = Sqls.create("SELECT loginname,username,sex,personType,userState,unionname,unitname,CASE member WHEN 1 THEN '是' ELSE '否' END as member from welfare_member $condition");
Sql sql = Sqls.create("SELECT remark,loginname,username,sex,personType,userState,unionname,unitname,CASE member WHEN 1 THEN '是' ELSE '否' END as member from welfare_member $condition");
Cnd cnd = Cnd.NEW();
if (!ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionWelfareAdmin")) {
cnd.andEX("unionid", "=", Vi.getUnionId());
@@ -358,12 +365,19 @@ public class WelfareMemberMangeController {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
exportEntities.add(new ExcelExportEntity("性别", "sex", 10));
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 10));
exportEntities.add(new ExcelExportEntity("分工会", "unionname", 20));
exportEntities.add(new ExcelExportEntity("单位", "unitname", 50));
exportEntities.add(new ExcelExportEntity("是否会员", "member", 50));
exportEntities.add(new ExcelExportEntity("单位", "unitname", 40));
exportEntities.add(new ExcelExportEntity("是否会员", "member", 10));
exportEntities.add(new ExcelExportEntity("备注", "remark", 60));
for (NutMap nutMap : list) {
if("".equals(nutMap.getString("member"))) {
nutMap.put("unionname", null);
}
}
try {
ViTool.excelResponse(response, "福利会员台账.xls");
@@ -82,7 +82,7 @@ public class WelfareUserChooseController {
cnd.andEX("YEAR(wp.choiceTimeStart)", "in", year);
cnd.and("wp.isDisabled", "=", 0);
cnd.groupBy("wp.id");
cnd.desc("YEAR(wp.choiceTimeStart)");
cnd.desc("wp.choiceTimeStart");
sql.setCondition(cnd);
Pagination pagination = simpleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return pagination;
@@ -53,7 +53,7 @@ public class WelfareUserSelection {
@Column
@Comment("收货地址")
@ColDefine(type = ColType.VARCHAR, width = 100)
@ColDefine(type = ColType.VARCHAR, width = 1000)
private String receiveAddress;
@Column
@@ -25,8 +25,11 @@ public class WelfareExportEntityTc {
@Excel(name = "所属工会", width = 20d)
private String unionName;
// @Excel(name = "所属单位", width = 60d)
// private String unitName;
@Excel(name = "所属单位", width = 60d)
private String unitName;
@Excel(name = "备注", width = 60d)
private String remark;
@Excel(name = "已选福利", width = 80d)
private String optionName;
@@ -463,6 +463,7 @@ public class WelfareSingleServiceImpl extends ViServiceImpl<WelfareProject> impl
SELECT
u.loginname AS loginName,
u.username AS userName,
u.remark,
vwl.unionname,
vwl.unionname as unionName,
vwl.unitname,
@@ -546,7 +547,8 @@ public class WelfareSingleServiceImpl extends ViServiceImpl<WelfareProject> impl
unitname unitName,
unionname unionName,
idcard idCard,
mobile
mobile,
remark
FROM
view_welfare_list
WHERE
+2 -2
View File
@@ -112,7 +112,7 @@ layout("/mobile/platform.html"){
}
.middle_item_text {
font-size: 12px;
font-size: 14px;
margin-top: 6px;
overflow: hidden;
white-space: nowrap;
@@ -236,7 +236,7 @@ layout("/mobile/platform.html"){
</van-icon>
{{ item.name }}
</div>
<div style="margin-top: 6px; color: grey; font-size: 11px">
<div style="margin-top: 6px; color: grey; font-size: 12px">
<div>开始时间:{{ moment(item.startDate).format('MM/DD HH:mm') }}
</div>
<div>结束时间:{{ moment(item.endDate).format('MM/DD HH:mm') }}
@@ -103,45 +103,15 @@ layout("/mobile/platform.html"){
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="活动详情" left-arrow
@click-left="location.replace('/platform/mobile/trainSignUpActivity/trainList')"></van-nav-bar>
@click-left="pjaxReplace('/platform/mobile/trainSignUpActivity/trainList')"></van-nav-bar>
</van-sticky>
<!--<van-image :height="$(window).height() * 0.28" v-if="this.activity.cover && this.activity.cover.filepath" :src="'${AppFileDomain!}' + this.activity.cover.filepath"></van-image>
<van-image :height="$(window).height() * 0.28" v-else src=""></van-image>-->
<van-image height="186" src="/assets/mobile/img/3quhtakfd4heeqsk6irqhft60p.png"></van-image>
<van-image height="186" :src="CREATE_PREVIEW_URL(activity?.cover[0].id)"></van-image>
<div class="title">{{activity.activityName}}</div>
<van-tabs v-model:active="tabActive" shrink>
<van-tab title="详细信息" name="a">
<!--<div class="content_title">关于{{activity.activityName}}的通知</div>-->
<div class="pre_text" v-html="activity.introduce"></div>
<!--<div v-for="(value, key, index) in activityMap" style="margin-bottom: 30px">
<div class="van-sidebar-item van-sidebar-item&#45;&#45;select">
{{key}}<span style="color: #1867b0">(左划查看更多)</span>
</div>
<div style="width: 100%; overflow-x: auto">
<table class="custable">
<tr>
<td>序号</td>
<td>{{trainType}}名称</td>
&lt;!&ndash;<td>课次</td>&ndash;&gt;
<td>时间</td>
<td>{{trainType}}地点</td>
<td>{{trainType === '培训班' ? '讲师' : '负责人'}}</td>
</tr>
<tr v-for="(o, num) in value">
<td>{{num + 1}}</td>
<td>{{o.courseName}}</td>
&lt;!&ndash;<td>{{o.courseTimeList.length}}</td>&ndash;&gt;
<td style="line-height: 26px;">
<div v-for="t in o.timeList">{{t}}</div>
</td>
<td>{{o.courseLocation}}</td>
<td>{{o.courseInstructor}}</td>
</tr>
</table>
</div>
</div>-->
</van-tab>
</van-tabs>
@@ -157,7 +157,7 @@ layout("/mobile/platform.html"){
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar :title="trainType + '列表'" left-arrow
@click-left="pjaxReplace('/platform/mobile/trainSignUpActivity/trainList?type=' + type)"></van-nav-bar>
@click-left="window.history.go(-1)"></van-nav-bar>
<van-dropdown-menu active-color="#1867b0">
<van-dropdown-item @change="tabChange" v-model="activityStatus"
:options="activityOptions"></van-dropdown-item>
@@ -169,7 +169,7 @@ layout("/mobile/platform.html"){
pageForm: {
year: '',
activityStatus: null
activityStatus: 2
},
activityLevelList: [],
activityStatusList: [
@@ -179,7 +179,8 @@ layout("/mobile/platform.html"){
{text: '报名中', value: 2},
{text: '进行中', value: 3},
{text: '已结束', value: 4}
]
],
id: '',
}
},
methods: {
@@ -210,7 +211,7 @@ layout("/mobile/platform.html"){
})
return
}
pjaxReplace('/platform/mobile/trainSignUpActivity/trainInfo?activityId=' + o.id + '&endTime=' + o.activitySignUpEndTime)
pjaxReplace('/platform/mobile/trainSignUpActivity/activityInfo?activityId=' + o.id + '&endTime=' + o.activitySignUpEndTime)
}
},
async pageData() {
@@ -242,8 +243,9 @@ layout("/mobile/platform.html"){
this.closeLoading()
},
async init(){
this.$set(this.pageForm, "activityStatus", 1)
this.$set(this.pageForm, "activityStatus", 2)
this.$set(this.pageForm, "year", new Date().getFullYear())
this.$set(this.pageForm, "id", GetQueryString('id'))
}
},
async created() {
@@ -160,6 +160,19 @@ layout("/mobile/platform.html"){
fit="cover"></van-image>
</div>
<van-cell-group class="van-cell-group--inset">
<van-cell>
<div style="font-weight: bold;font-size: 15px;">
温馨提醒
</div>
<div>
<div>1.本次慰问品共3种套餐,教职工可任选其中1种套餐快递(1个顺丰快递),快递地址仅限江浙沪(江苏,浙江,上海)。</div>
<div>2.快递预计于5月28日前投递完成,请保持联系电话畅通并及时接听。</div>
<div>3.填写截止时间:5月12日10点。</div>
</div>
</van-cell>
</van-cell-group>
<!--基本信息-->
<van-cell-group class="van-cell-group--inset">
<van-cell>
@@ -152,27 +152,27 @@ layout("/layouts/platform.html"){
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const url = "/platform/sourcechange/manage/doBatchChange"
await this.doOperate(url, ids, false)
// let isSendMsg = false
// const isHasNewTeacher = this.checkUsers.some(v=> v.changeInfosStr === '新入职')
//
// const ids = this.checkUsers.map(item => item.id)
// if (isHasNewTeacher) {
// this.$confirm('勾选用户中有新入职教工,是否对新入职教职工发送入会邀请?', '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
// isSendMsg = true
// this.doOperate(url, ids, isSendMsg)
// }).catch(() => {
// isSendMsg = false
// this.doOperate(url, ids, isSendMsg)
// })
// } else {
// await this.doOperate(url, ids, isSendMsg)
// }
const url = "/platform/sourcechange/manage/doBatchChange"
// await this.doOperate(url, ids, false)
let isSendMsg = false
const isHasNewTeacher = this.checkUsers.some(v=> v.changeInfosStr === '新入职')
const ids = this.checkUsers.map(item => item.id)
if (isHasNewTeacher) {
this.$confirm('勾选用户中有新入职教工,是否对新入职教职工发送入会邀请?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
isSendMsg = true
this.doOperate(url, ids, isSendMsg)
}).catch(() => {
isSendMsg = false
this.doOperate(url, ids, isSendMsg)
})
} else {
await this.doOperate(url, ids, isSendMsg)
}
})
},
tableHandleSelectionChange(val){
@@ -254,7 +254,7 @@ layout("/layouts/platform.html"){
},
openCode(id) {
this.$refs.openQRCode.openCode("/platform/mobile/trainSignUpActivity/trainList")
this.$refs.openQRCode.openCode("/platform/mobile/trainSignUpActivity/activityInfo?activityId=" + id)
},
makeCode(row) {
this.clickRow = row
@@ -243,9 +243,12 @@ layout("/layouts/platform.html"){
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<!-- <el-dropdown-item :command="{type:'edit',data:row}" v-if="judgmentAuthority">-->
<!-- 编辑-->
<!-- </el-dropdown-item>-->
<!--<el-dropdown-item :command="{type:'edit',data:row}" v-if="judgmentAuthority">
编辑
</el-dropdown-item>-->
<el-dropdown-item :command="{type:'updateRemark',data:row}">
修改备注
</el-dropdown-item>
<el-dropdown-item :command="{type:'delete',data:row}">
移除
</el-dropdown-item>
@@ -494,6 +497,21 @@ layout("/layouts/platform.html"){
</span>
</el-dialog>
<el-dialog
title="修改备注"
:visible.sync="updateRemarkDialogVisible"
width="30%">
<el-form label-position="left" label-width="80px">
<el-form-item label="添加模式">
<el-input v-model="remarkRow.remark"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="updateRemarkDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="onUpdateRemark">确 定</el-button>
</div>
</el-dialog>
</div>
@@ -507,6 +525,8 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
updateRemarkDialogVisible: false,
remarkRow: {},
importCheckVisible: false,
addMemberLoading: false,
selectUserLoading: false,
@@ -540,6 +560,7 @@ layout("/layouts/platform.html"){
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'member', label: '是否会员', sortable: true},
{prop: 'remark', label: '备注', sortable: false},
// {prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
// {prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0}
],
@@ -845,9 +866,27 @@ layout("/layouts/platform.html"){
} else if (type == 'editCampus') {
this.$set(data, 'modifiedCampusId', data.campusId)
this.$set(data, 'editCampus', true)
} else if (type == 'updateRemark') {
this.updateRemark(data)
}
},
async updateRemark(row) {
this.remarkRow = row
this.updateRemarkDialogVisible = true
},
async onUpdateRemark() {
const resp = await $.post(loc() + "/updateRemark", {
userId: this.remarkRow.id,
remark: this.remarkRow.remark,
})
if (resp.code === 0) {
this.$message.success(resp.msg)
this.pageData()
this.updateRemarkDialogVisible = false
} else {
this.$message.warning(resp.msg)
}
},
async joinWelfareMember(memData) {
await $.post(welfareCommonUrl + "/joinWelfareMember", {userIds: JSON.stringify([memData.id])})
},
@@ -4,7 +4,13 @@ layout("/layouts/platform.html"){
<style>
.el-alert {
padding: 4px 16px;
margin-bottom: 6px;
}
.el-alert__title {
font-size: 16px;
}
.optionImg {
display: grid;
place-items: center;
@@ -150,6 +156,10 @@ layout("/layouts/platform.html"){
</template>
<template #edit>
<vi-title title="温馨提醒"></vi-title>
<el-alert title="1.本次慰问品共3种套餐,教职工可任选其中1种套餐快递(1个顺丰快递),快递地址仅限江浙沪(江苏,浙江,上海)。" type="warning" effect="dark"></el-alert>
<el-alert title="2.快递预计于5月28日前投递完成,请保持联系电话畅通并及时接听。" type="warning" effect="dark"></el-alert>
<el-alert title="3.填写截止时间:5月12日10点。" type="warning" effect="dark"></el-alert>
<el-card shadow="never">
<el-form :model="formData" label-width="120px" ref="addForm">
<el-form-item label="福利名称">
@@ -774,6 +784,7 @@ layout("/layouts/platform.html"){
getEnumOptions("WelfareSignMode").then(res => {
this.welfareSignMode = res
})
this.dzOptions = this.dzOptions.filter(d => ['江苏省', '浙江省', '上海市'].includes(d.label))
}
})