This commit is contained in:
=
2026-04-16 09:14:06 +08:00
parent bce4001d4c
commit 3b372a2425
22 changed files with 591 additions and 209 deletions
@@ -198,6 +198,12 @@ public class Sys_user extends BaseModel implements Serializable {
@DataCenterColumn(name = "教职工类别码", key = "JZGLBMC") @DataCenterColumn(name = "教职工类别码", key = "JZGLBMC")
private String personType; private String personType;
@Column
@Comment("用人方式码")
@ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "用人方式码", key = "YRFSMC")
private String employmentType;
@Column @Column
@Comment("编制类别码") @Comment("编制类别码")
@ColDefine(type = ColType.VARCHAR, width = 30) @ColDefine(type = ColType.VARCHAR, width = 30)
@@ -35,7 +35,7 @@ import java.util.List;
*/ */
@IocBean @IocBean
@At("/platform/condolence/branchUnionApproval") @At("/platform/condolence/branchUnionApproval")
@Api("职工慰问分工会审核") @Api("职工慰问分工会主席审核")
@Ok("json:full") @Ok("json:full")
public class CondolenceBranchUnionApprovalController { public class CondolenceBranchUnionApprovalController {
@@ -3,6 +3,8 @@ package com.budwk.app.zhgh.staffbenefit.condolence.controller;
import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode; import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.constant.RoleConstant;
@@ -11,17 +13,23 @@ import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.base.sms.SmsService; import com.budwk.app.base.sms.SmsService;
import com.budwk.app.base.utils.PageUtil; import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.vo.ProcessTaskVO;
import com.budwk.app.sys.views.View_user; import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffbenefit.condolence.model.Condolence; import com.budwk.app.zhgh.staffbenefit.condolence.model.Condolence;
import com.budwk.app.zhgh.staffbenefit.condolence.model.CondolenceType; import com.budwk.app.zhgh.staffbenefit.condolence.model.CondolenceType;
import com.budwk.app.zhgh.staffbenefit.condolence.service.CondolenceService; import com.budwk.app.zhgh.staffbenefit.condolence.service.CondolenceService;
import com.deepoove.poi.XWPFTemplate;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup; import org.nutz.dao.util.cri.SqlExpressionGroup;
@@ -34,6 +42,20 @@ import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param; import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/** /**
* @ClassName CondolenceApplyController * @ClassName CondolenceApplyController
* @Author JyuHsin * @Author JyuHsin
@@ -45,12 +67,19 @@ import org.nutz.mvc.annotation.Param;
@At("/platform/condolence/mine") @At("/platform/condolence/mine")
@Api("职工慰问我的") @Api("职工慰问我的")
@Ok("json:full") @Ok("json:full")
@Slf4j
public class CondolenceMineController { public class CondolenceMineController {
@Inject
private SysOfficeTemplateUtil sysOfficeTemplateUtil;
@Inject @Inject
private CondolenceService condolenceService; private CondolenceService condolenceService;
@Inject @Inject
private FlowEngine flowEngine; private FlowEngine flowEngine;
@Inject
private SmsService smsService;
@Inject
private Dao dao;
@At("/") @At("/")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/mine/index.html") @Ok("beetl:/platform/zhgh/staffbenefit/condolence/mine/index.html")
@@ -106,13 +135,13 @@ public class CondolenceMineController {
cnd.andEX("year(info.createTime)", "=", year); cnd.andEX("year(info.createTime)", "=", year);
cnd.andEX("info.type", "=", type); cnd.andEX("info.type", "=", type);
cnd.and("info.createdBy", "=", SecurityUtil.getUserId()); cnd.and("info.createdBy", "=", SecurityUtil.getUserId());
cnd.groupBy("info.id");
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) { if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else { } else {
cnd.desc("info.createTime"); cnd.desc("info.createTime");
} }
sql.setCondition(cnd); sql.setCondition(cnd);
Pagination<NutMap> pagination = condolenceService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); Pagination<NutMap> pagination = condolenceService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination); return Result.success(pagination);
@@ -140,6 +169,126 @@ public class CondolenceMineController {
//smsService.send("20182040", "这是一条由智慧工会系统发出的测试消息。"); //smsService.send("20182040", "这是一条由智慧工会系统发出的测试消息。");
return Result.success(nutMap); return Result.success(nutMap);
} }
@Inject
private SmsService smsService; @At
@Ok("void")
public void doExport(String id, HttpServletResponse response) throws Exception {
Condolence condolence = condolenceService.fetch(id);
if (condolence == null) {
throw new RuntimeException("慰问记录不存在");
}
Sql sql = Sqls.create("""
SELECT
info.*,
type.name as typeName,
type.uploadFileDesc,
ins.id AS instanceId
FROM
`condolence` info
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
LEFT JOIN condolence_type type ON type.id = info.type
WHERE
ins.state = 20 AND info.id = @id
""").setParam("id", id);
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap info = (NutMap) sql.getResult();
HashMap<String, Object> docData = new HashMap<>();
docData.put("applyUserName", condolence.getApplyUserName());
docData.put("applyMobile", condolence.getApplyMobile());
docData.put("helpUserName", condolence.getHelpUserName());
docData.put("helpMobile", condolence.getHelpMobile());
docData.put("applyUnionName", condolence.getApplyUnionName());
docData.put("type", info.getString("typeName"));
docData.put("uploadFileDesc", info.getString("uploadFileDesc"));
//附件名称导出
if (condolence.getFiles() != null && !condolence.getFiles().isEmpty()) {
List<String> fileNames = condolence.getFiles().stream()
.map(file -> file.getStr("name"))
.filter(StrUtil::isNotBlank)
.collect(Collectors.toList());
docData.put("fileNames", String.join("\n", fileNames));
} else {
docData.put("fileNames", "");
}
docData.put("info", info);
docData.put("way", condolence.getWay());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime createTime = LocalDateTime.parse(condolence.getCreateTime(), formatter);
String fileName = "工会会员慰问报销审批单_" +
DateUtil.format(createTime, "yyyyMMdd") + ".docx";
List<ProcessTaskVO> doneTaskVos = new ArrayList<>();
List<ProcessTask> doneTaskList = flowEngine.processTaskService().getDoneTaskList(info.getLong("instanceId"), null);
for (ProcessTask doneTask : doneTaskList) {
ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId());
doneTaskVos.add(taskVO);
}
doneTaskVos.stream().filter(task -> "分工会主席审核".equals(task.getDisplayName()))
.max(Comparator.comparing(ProcessTaskVO::getCreatedAt))
.ifPresent(v -> {
Dict taskFormData = v.getTaskFormData();
HashMap<String, Object> approval = new HashMap<>();
approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日"));
approval.put("user", taskFormData.getStr("tf_userName"));
if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) {
approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign")));
}
approval.put("opinion", taskFormData.getStr("tf_opinion"));
docData.put("fgh", approval);
});
doneTaskVos.stream().filter(task -> "校工会会计审核".equals(task.getDisplayName()))
.max(Comparator.comparing(ProcessTaskVO::getCreatedAt))
.ifPresent(v -> {
Dict taskFormData = v.getTaskFormData();
HashMap<String, Object> approval = new HashMap<>();
approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日"));
approval.put("user", taskFormData.getStr("tf_userName"));
if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) {
approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign")));
}
approval.put("opinion", taskFormData.getStr("tf_opinion"));
docData.put("kj", approval);
});
doneTaskVos.stream().filter(task -> "工会主席审核".equals(task.getDisplayName()))
.max(Comparator.comparing(ProcessTaskVO::getCreatedAt))
.ifPresent(v -> {
Dict taskFormData = v.getTaskFormData();
HashMap<String, Object> approval = new HashMap<>();
approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日"));
approval.put("user", taskFormData.getStr("tf_userName"));
if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) {
approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign")));
}
approval.put("opinion", taskFormData.getStr("tf_opinion"));
docData.put("xgh", approval);
});
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(fileName, "UTF-8"));
try {
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("condolence"))
.render(docData)
.write(response.getOutputStream());
} catch (IOException e) {
log.error("导出慰问审批单失败,ID: {}, 错误信息: {}", id, e.getMessage());
throw e;
}
}
} }
@@ -33,7 +33,7 @@ import java.util.List;
*/ */
@IocBean @IocBean
@At("/platform/condolence/schoolPrincipalApproval") @At("/platform/condolence/schoolPrincipalApproval")
@Api("职工慰问校工会预审") @Api("职工慰问校工会会计审核")
@Ok("json:full") @Ok("json:full")
public class CondolenceSchoolPrincipalApprovalController { public class CondolenceSchoolPrincipalApprovalController {
@@ -35,7 +35,7 @@ import java.util.List;
*/ */
@IocBean @IocBean
@At("/platform/condolence/schoolUnionApproval") @At("/platform/condolence/schoolUnionApproval")
@Api("职工慰问工会审核") @Api("职工慰问工会主席审核")
@Ok("json:full") @Ok("json:full")
public class CondolenceSchoolUnionApprovalController { public class CondolenceSchoolUnionApprovalController {
@@ -65,6 +65,11 @@ public class Condolence extends BaseModel {
@ColDefine(type = ColType.VARCHAR, width = 100) @ColDefine(type = ColType.VARCHAR, width = 100)
private String applyUnitName; private String applyUnitName;
@Column
@Comment("申请人手机号")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String applyMobile;
@Column @Column
@Comment("补助人ID") @Comment("补助人ID")
@ColDefine(type = ColType.VARCHAR, width = 32) @ColDefine(type = ColType.VARCHAR, width = 32)
@@ -100,6 +105,11 @@ public class Condolence extends BaseModel {
@ColDefine(type = ColType.VARCHAR, width = 100) @ColDefine(type = ColType.VARCHAR, width = 100)
private String helpUnitName; private String helpUnitName;
@Column
@Comment("补助人手机号")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String helpMobile;
@Column @Column
@Comment("类型") @Comment("类型")
@ColDefine(type = ColType.VARCHAR, width = 20) @ColDefine(type = ColType.VARCHAR, width = 20)
@@ -99,6 +99,32 @@ public class WelfareListController {
return Result.success(welfareListService.notWelfareUserPageData(pageForm)); return Result.success(welfareListService.notWelfareUserPageData(pageForm));
} }
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("批量删除福利会员")
@SaCheckPermission("welfare.list.mange")
@SLog(tag = "福利名单管理", msg = "批量删除福利会员")
public Result batchDelete(@Param("ids") String[] ids, @Param("projectId") String projectId) {
if (ids == null || ids.length == 0) {
return Result.error("请选择要删除的数据");
}
List<WelfareList> welfareLists = welfareListService.query(Cnd.where("id", "in", ids));
List<String> userIds = welfareLists.stream()
.map(WelfareList::getUserId)
.filter(StrUtil::isNotBlank)
.collect(Collectors.toList());
welfareListService.delete(ids);
if (StrUtil.isNotBlank(projectId) && !userIds.isEmpty()) {
welfareListService.dao().clear(WelfareUserSelection.class,
Cnd.where("welfareId", "=", projectId).and("selectUserId", "in", userIds));
}
return Result.success("成功删除" + ids.length + "条数据");
}
@At @At
@SaCheckPermission("welfare.list.mange") @SaCheckPermission("welfare.list.mange")
@ApiOperation("添加用户到福利名单") @ApiOperation("添加用户到福利名单")
@@ -145,11 +145,18 @@ module.exports = {
return true return true
}, },
afterRead(files) { afterRead(files) {
const filesArray = Array.isArray(files) ? files : [files]
filesArray.forEach(file => {
if (file && file.file) {
this.fileList.map((f) => { this.fileList.map((f) => {
if (f.file && f.file.name === files.file.name) { if (f.file && f.file.name === file.file.name) {
f.status = "loading" f.status = "loading"
} }
}) })
}
})
const uploadPromises = this.fileList const uploadPromises = this.fileList
.filter((f) => f.status === "loading") .filter((f) => f.status === "loading")
.map((f) => { .map((f) => {
@@ -79,6 +79,7 @@ layout("/layouts/platform.html"){
<el-table-column prop="arrivalAtSchoolDate" label="来校时间" sortable width="120"></el-table-column> <el-table-column prop="arrivalAtSchoolDate" label="来校时间" sortable width="120"></el-table-column>
<el-table-column prop="preparedBy" label="编制类别" sortable width="120"></el-table-column> <el-table-column prop="preparedBy" label="编制类别" sortable width="120"></el-table-column>
<el-table-column prop="personType" label="教职工类别" sortable width="120"></el-table-column> <el-table-column prop="personType" label="教职工类别" sortable width="120"></el-table-column>
<el-table-column prop="employmentType" label="用人方式" sortable width="120"></el-table-column>
<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column> <el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
<el-table-column prop="position" label="干部职务" sortable width="120" show-overflow-tooltip></el-table-column> <el-table-column prop="position" label="干部职务" sortable width="120" show-overflow-tooltip></el-table-column>
<el-table-column prop="education" label="学历" show-overflow-tooltip sortable width="120"></el-table-column> <el-table-column prop="education" label="学历" show-overflow-tooltip sortable width="120"></el-table-column>
@@ -9,9 +9,16 @@ layout("/layouts/platform.html"){
class="flow-task-form"> class="flow-task-form">
<el-descriptions :column="3" border> <el-descriptions :column="3" border>
<el-descriptions-item label="申请人姓名">{{formData.applyUserName}}</el-descriptions-item> <el-descriptions-item label="申请人姓名">{{formData.applyUserName}}</el-descriptions-item>
<el-descriptions-item label="申请人电话">
<el-form-item prop="applyMobile" label="申请人电话">
<el-input maxlength="20" v-model="formData.applyMobile" placeholder="系统自动填充,也可手动修改"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="申请人工号">{{formData.applyLoginName}}</el-descriptions-item> <el-descriptions-item label="申请人工号">{{formData.applyLoginName}}</el-descriptions-item>
<el-descriptions-item label="申请人单位">{{formData.applyUnitName}}</el-descriptions-item> <el-descriptions-item label="申请人单位">{{formData.applyUnitName}}</el-descriptions-item>
<el-descriptions-item label="申请人工会">{{formData.applyUnionName}}</el-descriptions-item> <el-descriptions-item label="申请人工会">{{formData.applyUnionName}}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item label="慰问对象"> <el-descriptions-item label="慰问对象">
<el-form-item prop="helpUserId" label="慰问对象"> <el-form-item prop="helpUserId" label="慰问对象">
@@ -34,6 +41,11 @@ layout("/layouts/platform.html"){
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="慰问对象电话">
<el-form-item prop="helpMobile" label="慰问对象电话">
<el-input maxlength="20" v-model="formData.helpMobile" placeholder="选择慰问对象自动填充,也可手动输入"></el-input>
</el-form-item>
</el-descriptions-item>
<!-- <el-descriptions-item label="经办人"> <!-- <el-descriptions-item label="经办人">
<el-form-item prop="handlerUserId" label="经办人"> <el-form-item prop="handlerUserId" label="经办人">
<el-select <el-select
@@ -55,20 +67,40 @@ layout("/layouts/platform.html"){
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-descriptions-item>--> </el-descriptions-item>-->
<el-descriptions-item label="证明人"> <!-- <el-descriptions-item label="证明人">-->
<el-form-item prop="certifierUserId" label="证明人"> <!-- <el-form-item prop="certifierUserId" label="证明人">-->
<el-select <!-- <el-select-->
style="width: 100%" <!-- style="width: 100%"-->
v-model="formData.certifierUserId" <!-- v-model="formData.certifierUserId"-->
<!-- filterable-->
<!-- clearable-->
<!-- remote-->
<!-- reserve-keyword-->
<!-- placeholder="请输入姓名或工号查询"-->
<!-- :remote-method="createRemoteMethod(certifierUserOptions)"-->
<!-- @change="certifierUserChange">-->
<!-- <el-option-->
<!-- v-for="item in certifierUserOptions"-->
<!-- :key="item.id"-->
<!-- :label="item.userName+''+item.loginName+''+''+item.unitName+''"-->
<!-- :value="item.id">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-descriptions-item>-->
<el-descriptions-item label="收款人">
<el-form-item prop="payUserId" label="收款人">
<el-select style="width: 100%"
v-model="formData.payUserId"
filterable filterable
clearable clearable
remote remote
reserve-keyword reserve-keyword
placeholder="请输入姓名或工号查询" placeholder="请输入姓名或工号查询"
:remote-method="createRemoteMethod(certifierUserOptions)" :remote-method="createRemoteMethod(payUserOptions)"
@change="certifierUserChange"> @change="payUserChange">
<el-option <el-option
v-for="item in certifierUserOptions" v-for="item in payUserOptions"
:key="item.id" :key="item.id"
:label="item.userName+''+item.loginName+''+''+item.unitName+''" :label="item.userName+''+item.loginName+''+''+item.unitName+''"
:value="item.id"> :value="item.id">
@@ -112,28 +144,28 @@ layout("/layouts/platform.html"){
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="收款账户"> <!-- <el-descriptions-item label="收款账户">-->
<el-form-item prop="bankCardNumber" label="收款账户"> <!-- <el-form-item prop="bankCardNumber" label="收款账户">-->
<el-input maxlength="20" v-model="formData.bankCardNumber" placeholder="请填写收款账户" <!-- <el-input maxlength="20" v-model="formData.bankCardNumber" placeholder="请填写收款账户"-->
></el-input> <!-- ></el-input>-->
</el-form-item> <!-- </el-form-item>-->
</el-descriptions-item> <!-- </el-descriptions-item>-->
<el-descriptions-item label="户名"> <!-- <el-descriptions-item label="户名">-->
<el-form-item prop="bankUserName" label="户名"> <!-- <el-form-item prop="bankUserName" label="户名">-->
<el-input maxlength="20" v-model="formData.bankUserName" <!-- <el-input maxlength="20" v-model="formData.bankUserName"-->
placeholder="请填写户名" <!-- placeholder="请填写户名"-->
></el-input> <!-- ></el-input>-->
</el-form-item> <!-- </el-form-item>-->
</el-descriptions-item> <!-- </el-descriptions-item>-->
<el-descriptions-item label="开户行" > <!-- <el-descriptions-item label="开户行">-->
<el-form-item prop="bankOfDeposit" label="开户行"> <!-- <el-form-item prop="bankOfDeposit" label="开户行">-->
<el-input maxlength="20" v-model="formData.bankOfDeposit" <!-- <el-input maxlength="20" v-model="formData.bankOfDeposit"-->
placeholder="请填写开户行" <!-- placeholder="请填写开户行"-->
></el-input> <!-- ></el-input>-->
</el-form-item> <!-- </el-form-item>-->
</el-descriptions-item> <!-- </el-descriptions-item>-->
<template v-if="['2'].includes(formData.typeCode)"> <template v-if="['2'].includes(formData.typeCode)">
<el-descriptions-item label="入院时间"> <el-descriptions-item label="入院时间">
@@ -225,29 +257,29 @@ layout("/layouts/platform.html"){
taskId: GetQueryString("taskId"), taskId: GetQueryString("taskId"),
formData: {}, formData: {},
formRules: { formRules: {
helpUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }], helpUserId: [{required: true, message: "必填", trigger: ["change", "blur"]}],
payUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }], payUserId: [{required: true, message: "必填", trigger: ["change", "blur"]}],
type: [{ required: true, message: "必填", trigger: ["change", "blur"] }], type: [{required: true, message: "必填", trigger: ["change", "blur"]}],
way: [{ required: true, message: "必填", trigger: ["change", "blur"] }], way: [{required: true, message: "必填", trigger: ["change", "blur"]}],
money: [{ required: true, message: "必填", trigger: ["change", "blur"] }], money: [{required: true, message: "必填", trigger: ["change", "blur"]}],
occurTime: [{ required: true, message: "必填", trigger: ["change", "blur"] }], occurTime: [{required: true, message: "必填", trigger: ["change", "blur"]}],
child: [{ required: true, message: "必填", trigger: ["change", "blur"] }], child: [{required: true, message: "必填", trigger: ["change", "blur"]}],
hospital: [{ required: true, message: "必填", trigger: ["change", "blur"] }], hospital: [{required: true, message: "必填", trigger: ["change", "blur"]}],
hospitalHouseNum: [{ required: true, message: "必填", trigger: ["change", "blur"] }], hospitalHouseNum: [{required: true, message: "必填", trigger: ["change", "blur"]}],
hospitalHouseBedNum: [{ required: true, message: "必填", trigger: ["change", "blur"] }], hospitalHouseBedNum: [{required: true, message: "必填", trigger: ["change", "blur"]}],
hospitalBy: [{ required: true, message: "必填", trigger: ["change", "blur"] }], hospitalBy: [{required: true, message: "必填", trigger: ["change", "blur"]}],
deadImmediateFamily: [{ required: true, message: "必填", trigger: ["change", "blur"] }], deadImmediateFamily: [{required: true, message: "必填", trigger: ["change", "blur"]}],
remark: [{ required: true, message: "必填", trigger: ["change", "blur"] }], remark: [{required: true, message: "必填", trigger: ["change", "blur"]}],
files: [{ required: true, message: "必填", trigger: ["change", "blur"] }], files: [{required: true, message: "必填", trigger: ["change", "blur"]}],
signature: [{ required: true, message: "必填", trigger: ["change", "blur"] }], signature: [{required: true, message: "必填", trigger: ["change", "blur"]}],
handlerUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }], handlerUserId: [{required: true, message: "必填", trigger: ["change", "blur"]}],
certifierUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }], certifierUserId: [{required: true, message: "必填", trigger: ["change", "blur"]}],
bankCardNumber: [{ required: true, message: "必填", trigger: ["change", "blur"] }], bankCardNumber: [{required: true, message: "必填", trigger: ["change", "blur"]}],
bankUserName: [{ required: true, message: "必填", trigger: ["change", "blur"] }], bankUserName: [{required: true, message: "必填", trigger: ["change", "blur"]}],
bankOfDeposit: [{ required: true, message: "必填", trigger: ["change", "blur"] }], bankOfDeposit: [{required: true, message: "必填", trigger: ["change", "blur"]}],
thisYearHospitalizationNum: [{ required: true, message: "必填", trigger: ["change", "blur"] }], thisYearHospitalizationNum: [{required: true, message: "必填", trigger: ["change", "blur"]}],
leaveHospitalTime: [{ required: true, message: "必填", trigger: ["change", "blur"] }], leaveHospitalTime: [{required: true, message: "必填", trigger: ["change", "blur"]}],
hospitalizationTime: [{ required: true, message: "必填", trigger: ["change", "blur"] }], hospitalizationTime: [{required: true, message: "必填", trigger: ["change", "blur"]}],
}, },
chooseType: {}, chooseType: {},
payUserOptions: [], payUserOptions: [],
@@ -266,7 +298,7 @@ layout("/layouts/platform.html"){
}, },
selectQueryUser(keyword, options) { selectQueryUser(keyword, options) {
options.length = 0 options.length = 0
this.$axios.post("/platform/condolence/apply/listUser", { keyword: keyword }).then((res) => { this.$axios.post("/platform/condolence/apply/listUser", {keyword: keyword}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
options.push(...res.data) options.push(...res.data)
} }
@@ -275,19 +307,20 @@ layout("/layouts/platform.html"){
helpUserChange(val) { helpUserChange(val) {
const user = this.helpUserOptions.find(o => o.id === val) const user = this.helpUserOptions.find(o => o.id === val)
if (user) { if (user) {
const { userName, loginName, unitId, unitName, unionId, unionName } = user const {userName, loginName, unitId, unitName, unionId, unionName, mobile} = user
this.$set(this.formData, "helpUserName", userName) this.$set(this.formData, "helpUserName", userName)
this.$set(this.formData, "helpLoginName", loginName) this.$set(this.formData, "helpLoginName", loginName)
this.$set(this.formData, "helpUnitId", unitId) this.$set(this.formData, "helpUnitId", unitId)
this.$set(this.formData, "helpUnitName", unitName) this.$set(this.formData, "helpUnitName", unitName)
this.$set(this.formData, "helpUnionId", unionId) this.$set(this.formData, "helpUnionId", unionId)
this.$set(this.formData, "helpUnionName", unionName) this.$set(this.formData, "helpUnionName", unionName)
this.$set(this.formData, "helpMobile", mobile)
} }
}, },
handlerUserChange(val) { handlerUserChange(val) {
const user = this.handlerUserOptions.find(o => o.id === val) const user = this.handlerUserOptions.find(o => o.id === val)
if (user) { if (user) {
const { userName, loginName, unitId, unitName, unionId, unionName } = user const {userName, loginName, unitId, unitName, unionId, unionName} = user
this.$set(this.formData, "handlerUserName", userName) this.$set(this.formData, "handlerUserName", userName)
this.$set(this.formData, "handlerLoginName", loginName) this.$set(this.formData, "handlerLoginName", loginName)
this.$set(this.formData, "handlerUnitId", unitId) this.$set(this.formData, "handlerUnitId", unitId)
@@ -299,7 +332,7 @@ layout("/layouts/platform.html"){
certifierUserChange(val) { certifierUserChange(val) {
const user = this.certifierUserOptions.find(o => o.id === val) const user = this.certifierUserOptions.find(o => o.id === val)
if (user) { if (user) {
const { userName, loginName, unitId, unitName, unionId, unionName } = user const {userName, loginName, unitId, unitName, unionId, unionName} = user
this.$set(this.formData, "certifierUserName", userName) this.$set(this.formData, "certifierUserName", userName)
this.$set(this.formData, "certifierLoginName", loginName) this.$set(this.formData, "certifierLoginName", loginName)
this.$set(this.formData, "certifierUnitId", unitId) this.$set(this.formData, "certifierUnitId", unitId)
@@ -311,7 +344,7 @@ layout("/layouts/platform.html"){
payUserChange(val) { payUserChange(val) {
const user = this.payUserOptions.find(o => o.id === val) const user = this.payUserOptions.find(o => o.id === val)
if (user) { if (user) {
const { userName, loginName } = user const {userName, loginName} = user
this.$set(this.formData, "payUserName", userName) this.$set(this.formData, "payUserName", userName)
this.$set(this.formData, "payLoginName", loginName) this.$set(this.formData, "payLoginName", loginName)
} }
@@ -330,7 +363,7 @@ layout("/layouts/platform.html"){
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.$axios.post("/platform/condolence/apply/save", { data: JSON.stringify(this.formData) }).then(res => { this.$axios.post("/platform/condolence/apply/save", {data: JSON.stringify(this.formData)}).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$message.success(res.msg) this.$message.success(res.msg)
commonUtil.pjaxPush("/platform/condolence/mine") commonUtil.pjaxPush("/platform/condolence/mine")
@@ -381,17 +414,18 @@ layout("/layouts/platform.html"){
}, },
init() { init() {
if (this.bizId) { if (this.bizId) {
this.$axios.post("/platform/condolence/mine/info", { id: this.bizId }).then((res) => { this.$axios.post("/platform/condolence/mine/info", {id: this.bizId}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
this.formData = res.data this.formData = res.data
this.selectQueryUser(this.formData.helpLoginName, this.helpUserOptions) this.selectQueryUser(this.formData.helpLoginName, this.helpUserOptions)
this.selectQueryUser(this.formData.payLoginName, this.payUserOptions)
this.selectQueryUser(this.formData.certifierLoginName, this.certifierUserOptions) this.selectQueryUser(this.formData.certifierLoginName, this.certifierUserOptions)
this.selectQueryUser(this.formData.handlerLoginName, this.handlerUserOptions) this.selectQueryUser(this.formData.handlerLoginName, this.handlerUserOptions)
this.chooseType = this.typeOptions.find(o => o.id === this.formData.type) this.chooseType = this.typeOptions.find(o => o.id === this.formData.type)
} }
}) })
} else { } else {
const { username, loginname, id, unit, union, mobile } = this.$store.state.user const {username, loginname, id, unit, union, mobile} = this.$store.state.user
this.formData = { this.formData = {
applyUserName: username, applyUserName: username,
applyLoginName: loginname, applyLoginName: loginname,
@@ -399,7 +433,8 @@ layout("/layouts/platform.html"){
applyUnitId: unit?.id, applyUnitId: unit?.id,
applyUnitName: unit?.name, applyUnitName: unit?.name,
applyUnionId: union?.id, applyUnionId: union?.id,
applyUnionName: union?.name applyUnionName: union?.name,
applyMobile: mobile
} }
} }
}, },
@@ -81,6 +81,10 @@ layout("/layouts/platform.html"){
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"> :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea> <user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item> </el-form-item>
<el-form-item label="电子签名" prop="tf_sign"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.tf_sign"></pc-signature>
</el-form-item>
</el-form> </el-form>
<el-row type="flex" justify="end"> <el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button> <el-button @click="$refs.guava.index()" size="small">取消</el-button>
@@ -7,18 +7,22 @@ const condolenceInfo = {
</div> </div>
<el-descriptions :column="3" border> <el-descriptions :column="3" border>
<el-descriptions-item label="申请人姓名">{{ viewData.applyUserName }}</el-descriptions-item> <el-descriptions-item label="申请人姓名">{{ viewData.applyUserName }}</el-descriptions-item>
<el-descriptions-item label="申请人电话">{{ viewData.applyMobile }}</el-descriptions-item>
<el-descriptions-item label="申请人工号">{{ viewData.applyLoginName }}</el-descriptions-item> <el-descriptions-item label="申请人工号">{{ viewData.applyLoginName }}</el-descriptions-item>
<el-descriptions-item label="申请人单位">{{ viewData.applyUnitName }}</el-descriptions-item> <el-descriptions-item label="申请人单位">{{ viewData.applyUnitName }}</el-descriptions-item>
<el-descriptions-item label="申请人工会">{{ viewData.applyUnionName }}</el-descriptions-item> <el-descriptions-item label="申请人工会">{{ viewData.applyUnionName }}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item label="慰问对象">{{ viewData.helpUserName }}</el-descriptions-item> <el-descriptions-item label="慰问对象">{{ viewData.helpUserName }}</el-descriptions-item>
<el-descriptions-item label="慰问对象电话">{{ viewData.helpMobile }}</el-descriptions-item>
<!-- <el-descriptions-item label="经办人">{{ viewData.handlerUserName }}</el-descriptions-item>--> <!-- <el-descriptions-item label="经办人">{{ viewData.handlerUserName }}</el-descriptions-item>-->
<el-descriptions-item label="证明人">{{ viewData.certifierUserName }}</el-descriptions-item> <!-- <el-descriptions-item label="证明人">{{ viewData.certifierUserName }}</el-descriptions-item>-->
<el-descriptions-item label="收款人">{{ viewData.payUserName }}</el-descriptions-item>
<el-descriptions-item label="慰问类型">{{ viewData.typeName }}</el-descriptions-item> <el-descriptions-item label="慰问类型">{{ viewData.typeName }}</el-descriptions-item>
<el-descriptions-item label="慰问金额">{{ viewData.money }}</el-descriptions-item> <el-descriptions-item label="慰问金额">{{ viewData.money }}</el-descriptions-item>
<el-descriptions-item label="慰问时间">{{ viewData.occurTime }}</el-descriptions-item> <el-descriptions-item label="慰问时间">{{ viewData.occurTime }}</el-descriptions-item>
<el-descriptions-item label="收款账户">{{ viewData.bankCardNumber }}</el-descriptions-item> <!-- <el-descriptions-item label="收款账户">{{ viewData.bankCardNumber }}</el-descriptions-item>-->
<el-descriptions-item label="户名">{{ viewData.bankUserName }}</el-descriptions-item> <!-- <el-descriptions-item label="户名">{{ viewData.bankUserName }}</el-descriptions-item>-->
<el-descriptions-item label="开户行">{{ viewData.bankOfDeposit }}</el-descriptions-item> <!-- <el-descriptions-item label="开户行">{{ viewData.bankOfDeposit }}</el-descriptions-item>-->
<template v-if="['2'].includes(viewData.typeCode)"> <template v-if="['2'].includes(viewData.typeCode)">
<el-descriptions-item label="入院时间">{{ viewData.hospitalizationTime }}</el-descriptions-item> <el-descriptions-item label="入院时间">{{ viewData.hospitalizationTime }}</el-descriptions-item>
<el-descriptions-item label="出院时间">{{ viewData.leaveHospitalTime }}</el-descriptions-item> <el-descriptions-item label="出院时间">{{ viewData.leaveHospitalTime }}</el-descriptions-item>
@@ -68,6 +72,12 @@ const condolenceInfo = {
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{ <el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{
task.taskFormData.opinion }} task.taskFormData.opinion }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="签字" :span="3" v-if="!task.ext.isFirstTaskNode">
<el-image :src="task.taskFormData.tf_sign"
v-if="task.taskFormData.tf_sign"
class="signature-image"></el-image>
<span v-else>暂无签字</span>
</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</template> </template>
@@ -62,6 +62,7 @@ layout("/layouts/platform.html"){
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button> <el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskKey === 'startTask' || !row.instanceId" @click="onEdit(row)" size="mini" type="primary">编辑</el-button> <el-button v-if="row.taskKey === 'startTask' || !row.instanceId" @click="onEdit(row)" size="mini" type="primary">编辑</el-button>
<el-button v-if="row.canRevoke" size="mini" type="danger" @click="onRevoke(row)">撤回</el-button> <el-button v-if="row.canRevoke" size="mini" type="danger" @click="onRevoke(row)">撤回</el-button>
<el-button v-if="row.instanceState === 20" @click="doExport(row)" size="mini" type="primary">导出报销单</el-button>
<el-button v-if="row.taskKey === 'startTask' || !row.instanceId" @click="onDelete(row.id)" size="mini" type="danger"> <el-button v-if="row.taskKey === 'startTask' || !row.instanceId" @click="onDelete(row.id)" size="mini" type="danger">
删除 删除
</el-button> </el-button>
@@ -102,6 +103,9 @@ layout("/layouts/platform.html"){
} }
}, },
methods: { methods: {
doExport(row) {
window.location.href = "/platform/condolence/mine/doExport?id=" + (row.id || '')
},
onAdd() { onAdd() {
commonUtil.pjaxPush('/platform/condolence/apply') commonUtil.pjaxPush('/platform/condolence/apply')
}, },
@@ -101,6 +101,10 @@ layout("/layouts/platform.html"){
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"> :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea> <user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item> </el-form-item>
<el-form-item label="电子签名" prop="tf_sign"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.tf_sign"></pc-signature>
</el-form-item>
</el-form> </el-form>
<el-row type="flex" justify="end"> <el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button> <el-button @click="$refs.guava.index()" size="small">取消</el-button>
@@ -101,6 +101,10 @@ layout("/layouts/platform.html"){
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"> :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea> <user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item> </el-form-item>
<el-form-item label="电子签名" prop="tf_sign"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.tf_sign"></pc-signature>
</el-form-item>
</el-form> </el-form>
<el-row type="flex" justify="end"> <el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button> <el-button @click="$refs.guava.index()" size="small">取消</el-button>
@@ -115,7 +115,7 @@ layout("/layouts/platform.html"){
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item prop="provideTime" label="发放时间"> <el-form-item prop="provideTime" label="使用期限">
<el-date-picker <el-date-picker
style="width: 100%" style="width: 100%"
v-model="formData.provideTime" v-model="formData.provideTime"
@@ -130,6 +130,9 @@ layout("/layouts/platform.html"){
<el-card class="mt10" shadow="never"> <el-card class="mt10" shadow="never">
<table-tool :app="this" label="福利名单"> <table-tool :app="this" label="福利名单">
<el-button @click="batchDelete" size="small" type="primary">
批量删除
</el-button>
<el-button :disabled="!pageForm.projectId" @click="openExport" icon="el-icon-download" size="small" type="primary"> <el-button :disabled="!pageForm.projectId" @click="openExport" icon="el-icon-download" size="small" type="primary">
导出名单 导出名单
</el-button> </el-button>
@@ -151,11 +154,14 @@ layout("/layouts/platform.html"){
:data="tableData" :data="tableData"
:size="tableSize" :size="tableSize"
@sort-change="pageOrder" @sort-change="pageOrder"
@selection-change="handleSelectionChange"
ref="tableRef" ref="tableRef"
row-key="id" row-key="id"
style="width: 100%" style="width: 100%"
v-loading="tableLoading" v-loading="tableLoading"
> >
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column :index="indexMethod" label="序号" type="index" width="80px"></el-table-column> <el-table-column :index="indexMethod" label="序号" type="index" width="80px"></el-table-column>
<el-table-column <el-table-column
@@ -278,6 +284,8 @@ layout("/layouts/platform.html"){
welfareListUserDrawer: false, welfareListUserDrawer: false,
selectedRows: [],
showImportDialog: false showImportDialog: false
} }
}, },
@@ -317,6 +325,35 @@ layout("/layouts/platform.html"){
} }
}) })
}, },
batchDelete() {
if (!this.selectedRows || this.selectedRows.length === 0) {
this.$message.warning("请至少选择一条数据")
return
}
var that = this
this.$confirm("您确定要删除选中的 " + this.selectedRows.length + " 条数据吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(async () => {
const ids = this.selectedRows.map(row => row.id)
const resp = await this.$axios.post("/platform/welfare/list/mange/batchDelete",
"ids=" + ids.join("&ids=") + "&projectId=" + this.pageForm.projectId,
{ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }
)
if (resp.code === 0) {
this.$message.success(resp.msg || "删除成功")
this.$refs.tableRef.clearSelection()
this.doSearch()
} else {
this.$message.error(resp.msg)
}
})
},
handleSelectionChange(val) {
this.selectedRows = val
},
getWelfareList() { getWelfareList() {
this.$axios.post("/platform/welfare/project/mange/getWelfareList", { year: this.pageForm.year }).then((res) => { this.$axios.post("/platform/welfare/project/mange/getWelfareList", { year: this.pageForm.year }).then((res) => {
this.projectSelectOptions = res.data this.projectSelectOptions = res.data
@@ -20,6 +20,14 @@ layout("/layouts/platform_h5.html"){
<van-cell-group title="基本信息" class="form-section"> <van-cell-group title="基本信息" class="form-section">
<van-field label="申请人姓名" :rules="[{ required: true }]" v-model="formData.applyUserName" readonly <van-field label="申请人姓名" :rules="[{ required: true }]" v-model="formData.applyUserName" readonly
required name="applyUserName"></van-field> required name="applyUserName"></van-field>
<van-field
v-model="formData.applyMobile"
label="申请人电话"
maxlength="20"
clearable
name="applyMobile"
placeholder="系统自动填充,也可手动修改"
></van-field>
<van-field label="申请人工号" :rules="[{ required: true }]" v-model="formData.applyLoginName" readonly <van-field label="申请人工号" :rules="[{ required: true }]" v-model="formData.applyLoginName" readonly
required name="applyLoginName"></van-field> required name="applyLoginName"></van-field>
<van-field label="申请人单位" :rules="[{ required: true }]" v-model="formData.applyUnitName" readonly <van-field label="申请人单位" :rules="[{ required: true }]" v-model="formData.applyUnitName" readonly
@@ -62,6 +70,15 @@ layout("/layouts/platform_h5.html"){
<van-empty description="暂无数据" v-else></van-empty> <van-empty description="暂无数据" v-else></van-empty>
</van-action-sheet> </van-action-sheet>
<van-field
v-model="formData.helpMobile"
label="慰问对象电话"
maxlength="20"
clearable
name="helpMobile"
placeholder="选择慰问对象自动填充,也可手动输入"
></van-field>
<!-- <van-field <!-- <van-field
v-model="formData.handlerUserName" v-model="formData.handlerUserName"
name="handlerUserName" name="handlerUserName"
@@ -97,32 +114,67 @@ layout("/layouts/platform_h5.html"){
<van-empty description="暂无数据" v-else></van-empty> <van-empty description="暂无数据" v-else></van-empty>
</van-action-sheet>--> </van-action-sheet>-->
<!-- <van-field-->
<!-- v-model="formData.certifierUserName"-->
<!-- name="certifierUserName"-->
<!-- label="证明人"-->
<!-- required-->
<!-- readonly-->
<!-- :rules="[{ required: true }]"-->
<!-- placeholder="请点击选择证明人"-->
<!-- @click="certifierUserSelectShow = true"-->
<!-- is-link-->
<!-- ></van-field>-->
<!-- <van-action-sheet v-model="certifierUserSelectShow" title="证明人" class="height100">-->
<!-- <van-search-->
<!-- v-model="searchKeyword"-->
<!-- :show-action="false"-->
<!-- :reverse-color="false"-->
<!-- input-align="left"-->
<!-- placeholder="请输入工号或姓名选择证明人"-->
<!-- @input="(val) => {userRemoteMethod(val, 'certifier')}"-->
<!-- @clear="(val) => {userRemoteMethod(val, 'certifier')}"-->
<!-- shape="round"-->
<!-- ></van-search>-->
<!-- <div class="van-action-sheet__content mt5" v-if="userOptions && userOptions.length>0">-->
<!-- <template>-->
<!-- <template v-for="item in userOptions">-->
<!-- <van-button native-type="button" @click="certifierUserChange(item)"-->
<!-- class="van-action-sheet__item van-hairline&#45;&#45;bottom">-->
<!-- <span class="van-action-sheet__name">{{item.userName}}{{item.loginName}}</span>-->
<!-- </van-button>-->
<!-- </template>-->
<!-- </template>-->
<!-- </div>-->
<!-- <van-empty description="暂无数据" v-else></van-empty>-->
<!-- </van-action-sheet>-->
<van-field <van-field
v-model="formData.certifierUserName" v-model="formData.payUserName"
name="certifierUserName" name="payUserName"
label="证明人" label="收款人"
required required
readonly readonly
:rules="[{ required: true }]" :rules="[{ required: true }]"
placeholder="请点击选择证明人" placeholder="请点击选择收款人"
@click="certifierUserSelectShow = true" @click="payUserSelectShow = true"
is-link is-link
></van-field> ></van-field>
<van-action-sheet v-model="certifierUserSelectShow" title="证明人" class="height100"> <van-action-sheet v-model="payUserSelectShow" title="收款人" class="height100">
<van-search <van-search
v-model="searchKeyword" v-model="searchKeyword"
:show-action="false" :show-action="false"
:reverse-color="false" :reverse-color="false"
input-align="left" input-align="left"
placeholder="请输入工号或姓名选择证明人" placeholder="请输入工号或姓名选择收款人"
@input="(val) => {userRemoteMethod(val, 'certifier')}" @input="(val) => {userRemoteMethod(val, 'pay')}"
@clear="(val) => {userRemoteMethod(val, 'certifier')}" @clear="(val) => {userRemoteMethod(val, 'pay')}"
shape="round" shape="round"
></van-search> ></van-search>
<div class="van-action-sheet__content mt5" v-if="userOptions && userOptions.length>0"> <div class="van-action-sheet__content mt5" v-if="userOptions && userOptions.length>0">
<template> <template>
<template v-for="item in userOptions"> <template v-for="item in userOptions">
<van-button native-type="button" @click="certifierUserChange(item)" <van-button native-type="button" @click="payUserChange(item)"
class="van-action-sheet__item van-hairline--bottom"> class="van-action-sheet__item van-hairline--bottom">
<span class="van-action-sheet__name">{{item.userName}}{{item.loginName}}</span> <span class="van-action-sheet__name">{{item.userName}}{{item.loginName}}</span>
</van-button> </van-button>
@@ -194,38 +246,38 @@ layout("/layouts/platform_h5.html"){
></van-datetime-picker> ></van-datetime-picker>
</van-popup> </van-popup>
<van-field <!-- <van-field-->
v-model="formData.bankCardNumber" <!-- v-model="formData.bankCardNumber"-->
label="收款账户" <!-- label="收款账户"-->
maxlength="20" <!-- maxlength="20"-->
clearable <!-- clearable-->
name="bankCardNumber" <!-- name="bankCardNumber"-->
placeholder="请填写收款账户" <!-- placeholder="请填写收款账户"-->
:rules="[{ required: true }]" <!-- :rules="[{ required: true }]"-->
required <!-- required-->
></van-field> <!-- ></van-field>-->
<van-field <!-- <van-field-->
v-model="formData.bankUserName" <!-- v-model="formData.bankUserName"-->
label="户名" <!-- label="户名"-->
placeholder="请填写户名" <!-- placeholder="请填写户名"-->
:rules="[{ required: true }]" <!-- :rules="[{ required: true }]"-->
required <!-- required-->
maxlength="20" <!-- maxlength="20"-->
name="bankUserName" <!-- name="bankUserName"-->
></van-field> <!-- ></van-field>-->
<van-field <!-- <van-field-->
v-model="formData.bankOfDeposit" <!-- v-model="formData.bankOfDeposit"-->
label="开户行" <!-- label="开户行"-->
maxlength="30" <!-- maxlength="30"-->
type="textarea" <!-- type="textarea"-->
rows="4" <!-- rows="4"-->
autosize <!-- autosize-->
placeholder="请填写开户行" <!-- placeholder="请填写开户行"-->
:rules="[{ required: true }]" <!-- :rules="[{ required: true }]"-->
required <!-- required-->
name="bankOfDeposit" <!-- name="bankOfDeposit"-->
></van-field> <!-- ></van-field>-->
<template v-if="['2'].includes(formData.typeCode)"> <template v-if="['2'].includes(formData.typeCode)">
<van-field <van-field
@@ -437,6 +489,8 @@ layout("/layouts/platform_h5.html"){
this.certifierUserSelectShow = true this.certifierUserSelectShow = true
} else if (type === "handler") { } else if (type === "handler") {
this.handlerUserSelectShow = true this.handlerUserSelectShow = true
}else if (type === "pay") {
this.payUserSelectShow = true
} }
} }
}, },
@@ -445,7 +499,7 @@ layout("/layouts/platform_h5.html"){
return res.data return res.data
}, },
helpUserChange(user) { helpUserChange(user) {
const { id, userName, loginName, unitId, unitName, unionId, unionName } = user const { id, userName, loginName, unitId, unitName, unionId, unionName, mobile } = user
this.$set(this.formData, "helpUserId", id) this.$set(this.formData, "helpUserId", id)
this.$set(this.formData, "helpUserName", userName) this.$set(this.formData, "helpUserName", userName)
this.$set(this.formData, "helpLoginName", loginName) this.$set(this.formData, "helpLoginName", loginName)
@@ -453,6 +507,7 @@ layout("/layouts/platform_h5.html"){
this.$set(this.formData, "helpUnitName", unitName) this.$set(this.formData, "helpUnitName", unitName)
this.$set(this.formData, "helpUnionId", unionId) this.$set(this.formData, "helpUnionId", unionId)
this.$set(this.formData, "helpUnionName", unionName) this.$set(this.formData, "helpUnionName", unionName)
this.$set(this.formData, "helpMobile", mobile)
this.helpUserSelectShow = false this.helpUserSelectShow = false
this.searchKeyword = "" this.searchKeyword = ""
this.userOptions = [] this.userOptions = []
@@ -553,7 +608,8 @@ layout("/layouts/platform_h5.html"){
applyUnitId: unit?.id, applyUnitId: unit?.id,
applyUnitName: unit?.name, applyUnitName: unit?.name,
applyUnionId: union?.id, applyUnionId: union?.id,
applyUnionName: union?.name applyUnionName: union?.name,
applyMobile: mobile
} }
} }
}, },
@@ -7,7 +7,7 @@ layout("/layouts/platform_h5.html"){
</style> </style>
<div id="app"> <div id="app">
<van-nav-bar title="分工会审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar> <van-nav-bar title="分工会主席审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px"> <van-sticky offset-top="46px">
<van-search <van-search
@@ -70,6 +70,13 @@ layout("/layouts/platform_h5.html"){
maxlength="100" maxlength="100"
show-word-limit show-word-limit
></van-field> ></van-field>
<van-cell-group title="电子签名" class="form-section">
<van-field class="more-text" name="tf_sign" label="">
<template #input>
<h5-signature v-model="formData.tf_sign" slot="input"></h5-signature>
</template>
</van-field>
</van-cell-group>
</van-form> </van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px"> <div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button> <van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
@@ -6,20 +6,23 @@ const condolenceInfo = {
<div class="detail-container"> <div class="detail-container">
<van-cell-group title="基本信息"> <van-cell-group title="基本信息">
<van-cell title="申请人姓名">{{ viewData.applyUserName }}</van-cell> <van-cell title="申请人姓名">{{ viewData.applyUserName }}</van-cell>
<van-cell title="申请人电话">{{ viewData.applyMobile }}</van-cell>
<van-cell title="申请人工号">{{ viewData.applyLoginName }}</van-cell> <van-cell title="申请人工号">{{ viewData.applyLoginName }}</van-cell>
<van-cell title="申请人单位">{{ viewData.applyUnitName }}</van-cell> <van-cell title="申请人单位">{{ viewData.applyUnitName }}</van-cell>
<van-cell title="申请人工会">{{ viewData.applyUnionName }}</van-cell> <van-cell title="申请人工会">{{ viewData.applyUnionName }}</van-cell>
<van-cell title="慰问对象">{{ viewData.helpUserName }}</van-cell> <van-cell title="慰问对象">{{ viewData.helpUserName }}</van-cell>
<van-cell title="慰问对象电话">{{ viewData.helpMobile }}</van-cell>
<!-- <van-cell title="经办人">{{ viewData.handlerUserName }}</van-cell>--> <!-- <van-cell title="经办人">{{ viewData.handlerUserName }}</van-cell>-->
<van-cell title="证明人">{{ viewData.certifierUserName }}</van-cell> <!-- <van-cell title="证明人">{{ viewData.certifierUserName }}</van-cell>-->
<van-cell title="收款人">{{ viewData.payUserName }}</van-cell>
<van-cell title="慰问类型">{{ viewData.typeName }}</van-cell> <van-cell title="慰问类型">{{ viewData.typeName }}</van-cell>
<van-cell title="慰问金额">{{ viewData.money }}</van-cell> <van-cell title="慰问金额">{{ viewData.money }}</van-cell>
<van-cell title="慰问时间">{{ viewData.occurTime }}</van-cell> <van-cell title="慰问时间">{{ viewData.occurTime }}</van-cell>
<van-cell title="收款账户">{{ viewData.bankCardNumber }}</van-cell> <!-- <van-cell title="收款账户">{{ viewData.bankCardNumber }}</van-cell>-->
<van-cell title="户名">{{ viewData.bankUserName }}</van-cell> <!-- <van-cell title="户名">{{ viewData.bankUserName }}</van-cell>-->
<van-cell class="direction-column-cell" title="开户行"> <!-- <van-cell class="direction-column-cell" title="开户行">-->
{{ viewData.bankOfDeposit || '暂无' }} <!-- {{ viewData.bankOfDeposit || '暂无' }}-->
</van-cell> <!-- </van-cell>-->
<template v-if="['2'].includes(viewData.typeCode)"> <template v-if="['2'].includes(viewData.typeCode)">
<van-cell title="入院时间">{{ viewData.hospitalizationTime }}</van-cell> <van-cell title="入院时间">{{ viewData.hospitalizationTime }}</van-cell>
<van-cell title="出院时间">{{ viewData.leaveHospitalTime }}</van-cell> <van-cell title="出院时间">{{ viewData.leaveHospitalTime }}</van-cell>
@@ -58,6 +61,11 @@ const condolenceInfo = {
<van-cell title="办理意见" v-if="!task.ext.isFirstTaskNode" class="direction-column-cell"> <van-cell title="办理意见" v-if="!task.ext.isFirstTaskNode" class="direction-column-cell">
<div v-html="task.taskFormData.tf_opinion"></div> <div v-html="task.taskFormData.tf_opinion"></div>
</van-cell> </van-cell>
<van-cell class="direction-column-cell" title="签字"v-if="!task.ext.isFirstTaskNode">
<van-image :src="task.taskFormData.tf_sign" v-if="task.taskFormData.tf_sign"
class="signature-image"></van-image>
<span v-else>暂无签字</span>
</van-cell>
</van-cell-group> </van-cell-group>
</template> </template>
</div> </div>
@@ -7,7 +7,7 @@ layout("/layouts/platform_h5.html"){
</style> </style>
<div id="app"> <div id="app">
<van-nav-bar title="校工会预审" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar> <van-nav-bar title="校工会会计审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px"> <van-sticky offset-top="46px">
<van-search <van-search
@@ -70,6 +70,13 @@ layout("/layouts/platform_h5.html"){
maxlength="100" maxlength="100"
show-word-limit show-word-limit
></van-field> ></van-field>
<van-cell-group title="电子签名" class="form-section">
<van-field class="more-text" name="tf_sign" label="">
<template #input>
<h5-signature v-model="formData.tf_sign" slot="input"></h5-signature>
</template>
</van-field>
</van-cell-group>
</van-form> </van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px"> <div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button> <van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
@@ -7,7 +7,7 @@ layout("/layouts/platform_h5.html"){
</style> </style>
<div id="app"> <div id="app">
<van-nav-bar title="工会审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar> <van-nav-bar title="工会主席审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px"> <van-sticky offset-top="46px">
<van-search <van-search
@@ -70,6 +70,13 @@ layout("/layouts/platform_h5.html"){
maxlength="100" maxlength="100"
show-word-limit show-word-limit
></van-field> ></van-field>
<van-cell-group title="电子签名" class="form-section">
<van-field class="more-text" name="tf_sign" label="">
<template #input>
<h5-signature v-model="formData.tf_sign" slot="input"></h5-signature>
</template>
</van-field>
</van-cell-group>
</van-form> </van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px"> <div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button> <van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>