This commit is contained in:
2025-11-08 15:08:45 +08:00
parent 59b6f22177
commit 572539f834
11 changed files with 1091 additions and 440 deletions
@@ -12,8 +12,6 @@ import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.sys.models.Sys_dict;
import com.budwk.app.zhgh.dayofficework.unionReimburse.vo.UnionReimburseCollectExcelVO;
import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService;
import com.budwk.app.zhgh.staffbenefit.maternityLeave.vo.MaternityLeaveCollectExcelVO;
import io.swagger.annotations.Api;
@@ -0,0 +1,174 @@
package com.budwk.app.zhgh.staffbenefit.maternityLeave.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
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 com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.sys.models.Sys_home_activity;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
import com.budwk.app.zhgh.staffbenefit.maternityLeave.models.MaternityLeave;
import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
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;
/**
* @author zhf
* @date 2025/11/8 10:21
* @description 计生办审批
*/
@IocBean
@At("/platform/maternityLeave/familyPlanningOffice")
@Api("计生办审批")
@Ok("json:full")
@Slf4j
public class MaternityLeaveFamilyPlanningOfficeAuditController {
@Inject
private MaternityLeaveService maternityLeaveService;
@Inject
private FlowCommonService flowCommonService;
@At("/index")
@Ok("beetl:/platform/zhgh/staffbenefit/maternityLeave/familyPlanningOffice/index.html")
@SaCheckPermission("maternityLeave.familyPlanningOffice")
public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffbenefit/maternityLeave/familyPlanningOffice/index.html")
@SaCheckPermission("h5.maternityLeave.familyPlanningOffice")
public void h5Index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission(value = {"maternityLeave.familyPlanningOffice", "h5.maternityLeave.familyPlanningOffice"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
boolean approval,
Integer year,
String unionId,
String unitId,
String searchKeyword,
String sex) {
Sql sql = Sqls.create("""
SELECT
info.*,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
FROM
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN maternity_leave info ON info.id = ins.businessNo
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "d3b59e32-2f30-499b-b015-c485b330ddcb");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
// 年度查询条件
cnd.andEX("year(info.applyTime)", "=", year);
// 工会、单位名称查询条件
cnd.andEX("info.unionId", "=", unionId);
cnd.andEX("info.unitId", "=", unitId);
// 性别查询条件
cnd.andEX("info.sex", "=", sex);
// 姓名和工号查询条件
if (StrUtil.isNotBlank(searchKeyword)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("info.userName", "%" + searchKeyword + "%");
seg.orLike("info.loginName", "%" + searchKeyword + "%");
cnd.and(seg);
}
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("info.applyTime");
} else {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
cnd.groupBy("t.id");
cnd.desc("t.createdAt");
sql.setCondition(cnd);
Pagination<NutMap> pagination = maternityLeaveService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@SLog(tag = "生育休假", msg = "计生办审核了一条记录")
@ApiOperation("计生办测算天数")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission(value = {"maternityLeave.familyPlanningOffice", "h5.maternityLeave.familyPlanningOffice"}, mode = SaMode.OR)
public Result doReview(@Param("data") String param, String id) {
Dict args = Json.fromJson(Dict.class, param);
MaternityLeave maternityLeave = maternityLeaveService.dao().fetch(MaternityLeave.class, id);
maternityLeave.setStartTime(DateUtil.parse(args.getStr("startTime")));
maternityLeave.setEndTime(DateUtil.parse(args.getStr("endTime")));
maternityLeave.setWithLeave(args.getStr("withLeave"));
maternityLeave.setWinterLeave(args.getStr("winterLeave"));
maternityLeave.setSummerLeave(args.getStr("summerLeave"));
maternityLeave.setParentalLeave(args.getStr("parentalLeave"));
maternityLeave.setMaternityLeave(args.getStr("maternityLeave"));
maternityLeave.setExtendLeave(args.getStr("extendLeave"));
maternityLeave.setBirthsLeave(args.getStr("birthsLeave"));
maternityLeave.setDifficultLeave(args.getStr("difficultLeave"));
maternityLeave.setLeaveDays(args.getStr("leaveDays"));
maternityLeaveService.update(maternityLeave);
flowCommonService.executeTask(args);
return Result.success();
}
}
@@ -5,7 +5,6 @@ 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.json.JSONUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
@@ -17,11 +16,8 @@ import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.vo.ProcessTaskVO;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityBudgetVO;
import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -45,8 +41,6 @@ import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import static cn.dev33.satoken.SaManager.config;
/**
* @author : hongqiwei
* @description :
@@ -1,6 +1,5 @@
package com.budwk.app.zhgh.staffbenefit.maternityLeave.models;
import com.aspose.slides.internal.og.all;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -174,6 +173,21 @@ public class MaternityLeave extends BaseModel implements Serializable {
@Comment("填写时间")
private Date applyTime;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否难产")
private Boolean isDystocia;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否三胎")
private Boolean isThreeChildren;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否多胞胎")
private Boolean isMultipleBirths;
}
@@ -12,9 +12,10 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="职工姓名">{{formData.userName}}</el-descriptions-item>
<el-descriptions-item label="性别">{{formData.sex}}</el-descriptions-item>
<el-descriptions-item label="民族">{{formData.nation}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{formatDate(formData.birthday)}}</el-descriptions-item>
<el-descriptions-item label="工作单位" >{{formData.unitName}}</el-descriptions-item>
<el-descriptions-item label="电话" >{{formData.mobile}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{$moment(formData.birthday).format('YYYY-MM-DD')}}
</el-descriptions-item>
<el-descriptions-item label="工作单位">{{formData.unitName}}</el-descriptions-item>
<el-descriptions-item label="电话">{{formData.mobile}}</el-descriptions-item>
<el-descriptions-item label="爱人姓名">
<el-form-item label="爱人姓名" prop="loverName">
@@ -23,7 +24,7 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="性别">
<el-form-item label="性别" prop="loverSex">
<el-select v-model="formData.loverSex" placeholder="请选择">
<el-select v-model="formData.loverSex" placeholder="请选择" disabled>
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
@@ -31,12 +32,13 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="民族">
<el-form-item label="民族" prop="loverNation">
<dict-select v-model="formData.loverNation" code="USER_NATION" style="width: 100%" placeholder="请选择民族">
<dict-select v-model="formData.loverNation" code="USER_NATION" style="width: 100%"
placeholder="请选择民族">
</dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="出生年月" >
<el-form-item prop="loverBirthday">
<el-descriptions-item label="出生年月">
<el-form-item prop="loverBirthday">
<el-date-picker
v-model="formData.loverBirthday"
type="date"
@@ -46,108 +48,133 @@ layout("/layouts/platform.html"){
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="工作单位" span="2">
<el-descriptions-item label="工作单位">
<el-form-item label="工作单位" prop="loverUnitName">
<el-input type="text" v-model="formData.loverUnitName"
placeholder="请输入工作单位"></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
<table-tool label="假期类别"></table-tool>
<el-descriptions :column="2" border>
<el-descriptions-item label="陪产假" v-if="isMale">
<el-form-item label="陪产假" prop="withLeave">
<el-input v-model="formData.withLeave" placeholder="请输入陪产天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="育儿假" v-if="isMale">
<el-form-item label="育儿假" prop="parentalLeave">
<el-input v-model="formData.parentalLeave" placeholder="请输入育儿假天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="产假" v-if="isFemale">
<el-form-item label="产假" prop="maternityLeave">
<el-input v-model="formData.maternityLeave" placeholder="请输入产假天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="延长假" v-if="isFemale">
<el-form-item label="延长假" prop="extendLeave">
<el-input v-model="formData.extendLeave" placeholder="请输入延长假天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="多胞胎" v-if="isFemale">
<el-form-item label="多胞胎" prop="birthsLeave">
<el-select v-model="formData.birthsLeave" placeholder="请选择多胞胎天数"
clearable style="width: 100%">
<el-option label="15" :value="15"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="难产假" v-if="isFemale">
<el-form-item label="难产假" prop="difficultLeave">
<el-select v-model="formData.difficultLeave" placeholder="请选择难产假天数"
clearable style="width: 100%">
<el-option label="15" :value="15"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="寒假">
<el-form-item label="寒假" prop="winterLeave">
<el-input v-model="formData.winterLeave" placeholder="请输入寒假天数"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="暑假">
<el-form-item label="暑假" prop="summerLeave">
<el-input v-model="formData.summerLeave" placeholder="请输入暑假天数"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="合计天数" span="2">{{formData.leaveDays}}
</el-descriptions-item>
<el-descriptions-item label="休假时间起">
<el-form-item label="休假时间起" prop="startTime">
<el-date-picker type="date"
v-model="formData.startTime"
placeholder="请选择"
clearable
style="width: 100%"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="休假时间止">
<el-form-item label="休假时间止" prop="endTime">
<el-date-picker type="date"
v-model="formData.endTime"
placeholder="请选择"
clearable
style="width: 100%"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="子女出生日">
<el-form-item label="子女出生日" prop="childrenBirthday">
<el-descriptions-item label="子女出生日期">
<el-form-item label="子女出生日期" prop="childrenBirthday">
<el-date-picker type="date"
v-model="formData.childrenBirthday"
placeholder="请选择子女出生日"
placeholder="请选择子女出生日"
clearable
style="width: 100%"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="是否难产">
<el-form-item label="是否难产" prop="isDystocia">
<el-radio-group v-model="formData.isDystocia" size="medium">
<el-radio-button :label="true"></el-radio-button>
<el-radio-button :label="false"></el-radio-button>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="是否三胎">
<el-form-item label="是否三胎" prop="isThreeChildren">
<el-radio-group v-model="formData.isThreeChildren" size="medium">
<el-radio-button :label="true"></el-radio-button>
<el-radio-button :label="false"></el-radio-button>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="是否多胞胎">
<el-form-item label="是否多胞胎" prop="isMultipleBirths">
<el-radio-group v-model="formData.isMultipleBirths" size="medium">
<el-radio-button :label="true"></el-radio-button>
<el-radio-button :label="false"></el-radio-button>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
</el-descriptions>
<!-- <table-tool label="假期类别"></table-tool>
<el-descriptions :column="2" border>
<el-descriptions-item label="陪产假" v-if="isMale">
<el-form-item label="陪产假" prop="withLeave">
<el-input v-model="formData.withLeave" placeholder="请输入陪产天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="育儿假" v-if="isMale">
<el-form-item label="育儿假" prop="parentalLeave">
<el-input v-model="formData.parentalLeave" placeholder="请输入育儿假天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="产假" v-if="isFemale">
<el-form-item label="产假" prop="maternityLeave">
<el-input v-model="formData.maternityLeave" placeholder="请输入产假天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="延长假" v-if="isFemale">
<el-form-item label="延长假" prop="extendLeave">
<el-input v-model="formData.extendLeave" placeholder="请输入延长假天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="多胞胎" v-if="isFemale">
<el-form-item label="多胞胎" prop="birthsLeave">
<el-select v-model="formData.birthsLeave" placeholder="请选择多胞胎天数"
clearable style="width: 100%">
<el-option label="15" :value="15"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="难产假" v-if="isFemale">
<el-form-item label="难产假" prop="difficultLeave">
<el-select v-model="formData.difficultLeave" placeholder="请选择难产假天数"
clearable style="width: 100%">
<el-option label="15" :value="15"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="寒假">
<el-form-item label="寒假" prop="winterLeave">
<el-input v-model="formData.winterLeave" placeholder="请输入寒假天数"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="暑假">
<el-form-item label="暑假" prop="summerLeave">
<el-input v-model="formData.summerLeave" placeholder="请输入暑假天数"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="合计天数" span="2">{{formData.leaveDays}}
</el-descriptions-item>
<el-descriptions-item label="休假时间起">
<el-form-item label="休假时间起" prop="startTime">
<el-date-picker type="date"
v-model="formData.startTime"
placeholder="请选择"
clearable
style="width: 100%"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="休假时间止">
<el-form-item label="休假时间止" prop="endTime">
<el-date-picker type="date"
v-model="formData.endTime"
placeholder="请选择"
clearable
style="width: 100%"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</el-descriptions-item>
</el-descriptions>-->
</el-form>
<el-row type="flex" justify="end" class="mt20">
<el-button type="primary" plain @click="onSave">保存</el-button>
@@ -168,137 +195,27 @@ layout("/layouts/platform.html"){
taskId: GetQueryString("taskId"),
formData: {},
formRules: {
loverName: [{ required: true, message: '请输入爱人姓名', trigger: 'blur' }],
loverSex: [{ required: true, message: '请选择爱人性别', trigger: 'change' }],
loverNation: [{ required: true, message: '请选择爱人民族', trigger: 'change' }],
loverBirthday: [{ required: true, message: '请选择爱人出生年月', trigger: 'change' }],
loverUnitName: [{ required: true, message: '请输入爱人工作单位', trigger: 'blur' }],
startTime: [{ required: true, message: '请选择休假开始时间', trigger: 'change' }],
endTime: [{ required: true, message: '请选择休假结束时间', trigger: 'change' },
{validator: (rule, value, callback) => {
if (this.formData.startTime && value) {
const startDate = new Date(this.formData.startTime);
const endDate = new Date(value);
if (endDate < startDate) {
callback(new Error('休假结束时间不能早于开始时间'));
} else {
callback();
}
} else {
callback();
}
},
trigger: 'change'
}
],
childrenBirthday: [{ required: true, message: '请选择子女出生日期', trigger: 'change' }]
}
,
loverName: [{required: true, message: '请输入爱人姓名', trigger: 'blur'}],
loverSex: [{required: true, message: '请选择爱人性别', trigger: 'change'}],
loverNation: [{required: true, message: '请选择爱人民族', trigger: 'change'}],
loverBirthday: [{required: true, message: '请选择爱人出生年月', trigger: 'change'}],
loverUnitName: [{required: true, message: '请输入爱人工作单位', trigger: 'blur'}],
childrenBirthday: [{required: true, message: '请选择子女出生日期', trigger: 'change'}],
isDystocia: [{required: true, message: '请选择是否难产', trigger: 'change'}],
isThreeChildren: [{required: true, message: '请选择是否三胎', trigger: 'change'}],
isMultipleBirths: [{required: true, message: '请选择是否多胞胎', trigger: 'change'}],
},
}
},
computed: {
// 计算合计天数
totalLeaveDays() {
const fields = [
'withLeave', 'parentalLeave', 'maternityLeave',
'extendLeave', 'birthsLeave', 'difficultLeave',
'winterLeave', 'summerLeave'
];
let total = 0;
fields.forEach(field => {
const value = this.formData[field];
if (value && !isNaN(value)) {
total += parseFloat(value);
}
});
return total;
},
// 是否为男性
isMale() {
return this.formData.sex === '男性' || this.formData.sex === '男';
},
// 是否为女性
isFemale() {
return this.formData.sex === '女性' || this.formData.sex === '女';
},
},
watch: {
totalLeaveDays(newVal) {
this.$set(this.formData, 'leaveDays', newVal);
// 当合计天数或开始时间变化时,自动计算结束时间
this.calculateEndTime();
},
'formData.startTime'() {
// 当开始时间变化时,自动计算结束时间
this.calculateEndTime();
},
// 监听性别变化,设置默认值
isMale(newVal) {
if (newVal) {
// 男性默认设置
this.$set(this.formData, 'loverSex', '女');
this.$set(this.formData, 'withLeave', 15);
this.$set(this.formData, 'parentalLeave', 10);
}
},
isFemale(newVal) {
if (newVal) {
// 女性默认设置
this.$set(this.formData, 'loverSex', '男');
this.$set(this.formData, 'maternityLeave', 98);
this.$set(this.formData, 'extendLeave', 60);
}
}
},
methods: {
// 添加日期格式化方法
formatDate(date) {
if (!date) return '';
// 如果已经是 yyyy-MM-dd 格式,直接返回
if (typeof date === 'string' && /^\d{4}-\d{2}-\d{2}/.test(date)) {
// 如果包含时间,只取日期部分
if (date.length > 10) {
return date.substring(0, 10);
}
return date;
}
// 否则转换为 yyyy-MM-dd 格式
try {
const d = new Date(date);
if (isNaN(d.getTime())) {
return date;
}
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
return year + '-' + month + '-' + day;
} catch (e) {
return date;
}
},
// 计算休假时间止
calculateEndTime() {
// 如果是男性,则不自动计算结束时间
if (this.isMale) {
return;
}
if (this.formData.startTime && this.formData.leaveDays) {
const startDate = new Date(this.formData.startTime);
if (!isNaN(startDate.getTime())) {
// 创建新的日期对象,避免修改原始日期
const endDate = new Date(startDate);
// 添加天数(leaveDays - 1,因为包含开始日期)
endDate.setDate(endDate.getDate() + this.formData.leaveDays - 1);
// 格式化为 yyyy-MM-dd
const year = endDate.getFullYear();
const month = String(endDate.getMonth() + 1).padStart(2, '0');
const day = String(endDate.getDate()).padStart(2, '0');
this.$set(this.formData, 'endTime', year + '-' + month + '-' + day);
}
}
},
// 保存
onSave() {
console.log(this.formData);
@@ -381,7 +298,7 @@ layout("/layouts/platform.html"){
this.formData = data
})
} else {
const {id, username, loginname, union, unit, sex, nation, birthday,mobile} = this.$store.state.user
const {id, username, loginname, union, unit, sex, nation, birthday, mobile} = this.$store.state.user
this.formData = {
userId: id,
userName: username,
@@ -393,10 +310,10 @@ layout("/layouts/platform.html"){
sex: sex,
nation: nation,
birthday: birthday,
mobile:mobile
mobile: mobile
}
// 根据性别设置默认值
if (this.isMale) {
/*if (this.isMale) {
// 男性默认设置
this.$set(this.formData, 'loverSex', '女');
this.$set(this.formData, 'withLeave', 15);
@@ -412,7 +329,7 @@ layout("/layouts/platform.html"){
// 女性默认陪产假和育儿假为0
this.$set(this.formData, 'withLeave', 0);
this.$set(this.formData, 'parentalLeave', 0);
}
}*/
}
}
},
@@ -423,7 +340,6 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
@@ -5,46 +5,33 @@ const maternityLeaveInfo = {
申请信息
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
</div>
<table-tool label="人员信息"></table-tool>
<el-descriptions :column="2" border class="flow-task-form">
<el-descriptions :column="3" border class="flow-task-form">
<el-descriptions-item label="职工姓名">{{viewData.userName}}</el-descriptions-item>
<el-descriptions-item label="性别">{{viewData.sex}}</el-descriptions-item>
<el-descriptions-item label="民族">{{viewData.nation}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{formatDate(viewData.birthday)}}</el-descriptions-item> <el-descriptions-item label="单位">{{viewData.unitName}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{$moment(viewData.birthday).format('YYYY-MM-DD')}}
</el-descriptions-item>
<el-descriptions-item label="单位">{{viewData.unitName}}</el-descriptions-item>
<el-descriptions-item label="电话">{{viewData.mobile}}</el-descriptions-item>
<el-descriptions-item label="爱人姓名">{{viewData.loverName}}</el-descriptions-item>
<el-descriptions-item label="性别">{{viewData.loverSex}}</el-descriptions-item>
<el-descriptions-item label="民族">{{viewData.loverNation}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{formatDate(viewData.loverBirthday)}}</el-descriptions-item> <el-descriptions-item label="单位" span="2">{{viewData.loverUnitName}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{$moment(viewData.loverBirthday).format('YYYY-MM-DD')}}
</el-descriptions-item>
<el-descriptions-item label="单位">{{viewData.loverUnitName}}</el-descriptions-item>
<el-descriptions-item label="子女出生日期">{{$moment(viewData.childrenBirthday).format('YYYY-MM-DD')}}
</el-descriptions-item>
<el-descriptions-item label="是否难产">{{viewData.isDystocia?'是':'否'}}
</el-descriptions-item>
<el-descriptions-item label="是否三胎">{{viewData.isThreeChildren?'是':'否'}}
</el-descriptions-item>
<el-descriptions-item label="是否多胞胎">{{viewData.isMultipleBirths?'是':'否'}}
</el-descriptions-item>
</el-descriptions>
<table-tool label="假期类型"></table-tool>
<table-tool label="假期时间"></table-tool>
<el-descriptions :column="2" border class="flow-task-form">
<el-descriptions-item label="陪产假" v-if="viewData.sex === '男性' || viewData.sex === '男'">
{{viewData.withLeave}}
</el-descriptions-item>
<el-descriptions-item label="育儿假" v-if="viewData.sex === '男性' || viewData.sex === '男'">
{{viewData.parentalLeave}}
</el-descriptions-item>
<el-descriptions-item label="产假" v-if="viewData.sex === '女性' || viewData.sex === '女'">
{{viewData.maternityLeave}}
</el-descriptions-item>
<el-descriptions-item label="延长假" v-if="viewData.sex === '女性' || viewData.sex === '女'">
{{viewData.extendLeave}}
</el-descriptions-item>
<el-descriptions-item label="多胞胎" v-if="viewData.sex === '女性' || viewData.sex === '女'">
{{viewData.birthsLeave}}
</el-descriptions-item>
<el-descriptions-item label="难产假" v-if="viewData.sex === '女性' || viewData.sex === '女'">
{{viewData.difficultLeave}}
</el-descriptions-item>
<el-descriptions-item label="寒假">{{viewData.winterLeave}}</el-descriptions-item>
<el-descriptions-item label="暑假">{{viewData.summerLeave}}</el-descriptions-item>
<el-descriptions-item label="合计" :span="2">{{viewData.leaveDays}}</el-descriptions-item>
<el-descriptions-item label="休假时间起">{{formatDate(viewData.startTime)}}</el-descriptions-item>
<el-descriptions-item label="休假时间止">{{formatDate(viewData.endTime)}}</el-descriptions-item>
<el-descriptions-item label="子女出生日">{{formatDate(viewData.childrenBirthday)}}</el-descriptions-item>
</el-descriptions>
<template v-for="task in doneTasks">
@@ -74,6 +61,40 @@ const maternityLeaveInfo = {
<el-descriptions-item label="办理意见" :span="3" v-if="!task.ext.isFirstTaskNode">{{
task.taskFormData.opinion }}
</el-descriptions-item>
<template
v-if="viewData.leaveDays&&task.taskName==='d3b59e32-2f30-499b-b015-c485b330ddcb'&&task.taskState===20">
<el-descriptions-item label="陪产假">
{{viewData.withLeave?viewData.withLeave:0}}
</el-descriptions-item>
<el-descriptions-item label="育儿假">
{{viewData.parentalLeave?viewData.parentalLeave:0}}
</el-descriptions-item>
<el-descriptions-item label="产假">
{{viewData.maternityLeaveInfo?viewData.maternityLeave:0}}
</el-descriptions-item>
<el-descriptions-item label="延长假">
{{viewData.extendLeave?viewData.extendLeave:0}}
</el-descriptions-item>
<el-descriptions-item label="多胞胎">
{{viewData.birthsLeave?viewData.birthsLeave:0}}
</el-descriptions-item>
<el-descriptions-item label="难产假">
{{viewData.difficultLeave?viewData.difficultLeave:0}}
</el-descriptions-item>
<el-descriptions-item label="寒假">{{viewData.winterLeave?viewData.winterLeave:0}}
</el-descriptions-item>
<el-descriptions-item label="暑假">{{viewData.summerLeave?viewData.summerLeave:0}}
</el-descriptions-item>
<el-descriptions-item label="合计">{{viewData.leaveDays?viewData.leaveDays:0}}
</el-descriptions-item>
<el-descriptions-item label="休假时间起">
{{$moment(viewData.startTime).format('YYYY-MM-DD')}}
</el-descriptions-item>
<el-descriptions-item label="休假时间止">{{$moment(viewData.endTime).format('YYYY-MM-DD')}}
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
</template>
<el-descriptions-item label="签字" :span="3" v-if="!task.ext.isFirstTaskNode">
<el-image :src="task.ext.tf_userSign"
v-if="task.ext.tf_userSign"
@@ -107,32 +128,6 @@ const maternityLeaveInfo = {
this.getDoneTasks()
},
// 添加日期格式化方法
formatDate(date) {
if (!date) return '';
// 如果已经是 yyyy-MM-dd 格式,直接返回
if (typeof date === 'string' && /^\d{4}-\d{2}-\d{2}/.test(date)) {
// 如果包含时间,只取日期部分
if (date.length > 10) {
return date.substring(0, 10);
}
return date;
}
// 否则转换为 yyyy-MM-dd 格式
try {
const d = new Date(date);
if (isNaN(d.getTime())) {
return date;
}
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
return year + '-' + month + '-' + day;
} catch (e) {
return date;
}
},
// 获取申请信息
getInfo() {
this.$axios.post('/platform/maternityLeave/apply/findOne', {id: this.row.id}).then((res) => {
@@ -0,0 +1,388 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker v-model="pageForm.year" type="year" value-format="yyyy" placeholder="请选择年度"
style="width: 100%"></el-date-picker>
</search-item>
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="性别">
<el-select v-model="pageForm.sex" placeholder="请选择性别" clearable style="width: 100%">
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
</search-item>
<search-item label="所属工会">
<el-select v-model="pageForm.unionId" @change="doSearch" style="width: 100%"
placeholder="请选择所属工会" clearable>
<el-option v-for="item in unionOptions"
:value="item.id"
:key="item.id"
:label="item.name"
></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<el-select v-model="pageForm.unitId" @change="doSearch" style="width: 100%"
placeholder="请选择所属单位" clearable>
<el-option v-for="item in unitOptions"
:value="item.id"
:key="item.id"
:label="item.name"
></el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
<el-table-column prop="loginName" label="工号"></el-table-column>
<el-table-column prop="userName" label="职工姓名"></el-table-column>
<el-table-column prop="sex" label="性别"></el-table-column>
<el-table-column prop="unionName" label="所属工会"></el-table-column>
<el-table-column prop="unitName" label="所属单位"></el-table-column>
<el-table-column prop="leaveDays" label="休假天数"></el-table-column>
<el-table-column prop="applyTime" label="申请时间"></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
·
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="300px">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="openAudit(row)" size="mini" type="primary">审核
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<maternity-leave-info ref="maternityLeaveInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=""
class="flow-task-form">
<el-descriptions :column="2" border>
<el-descriptions-item label="陪产假" v-if="isMale">
<el-form-item label="陪产假" prop="withLeave">
<el-input v-model="formData.withLeave" placeholder="请输入陪产天数"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="育儿假" v-if="isMale">
<el-form-item label="育儿假" prop="parentalLeave">
<el-input v-model="formData.parentalLeave" placeholder="请输入育儿假天数"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="产假" v-if="isFemale">
<el-form-item label="产假" prop="maternityLeave">
<el-input v-model="formData.maternityLeave" placeholder="请输入产假天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="延长假" v-if="isFemale">
<el-form-item label="延长假" prop="extendLeave">
<el-input v-model="formData.extendLeave" placeholder="请输入延长假天数"
type="number" :disabled="true"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="多胞胎" v-if="isFemale">
<el-form-item label="多胞胎" prop="birthsLeave">
<el-select v-model="formData.birthsLeave" placeholder="请选择多胞胎天数"
clearable style="width: 100%">
<el-option label="15" :value="15"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="难产假" v-if="isFemale">
<el-form-item label="难产假" prop="difficultLeave">
<el-select v-model="formData.difficultLeave" placeholder="请选择难产假天数"
clearable style="width: 100%">
<el-option label="15" :value="15"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="寒假">
<el-form-item label="寒假" prop="winterLeave">
<el-input v-model="formData.winterLeave" placeholder="请输入寒假天数"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="暑假">
<el-form-item label="暑假" prop="summerLeave">
<el-input v-model="formData.summerLeave" placeholder="请输入暑假天数"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="休假时间起">
<el-form-item label="休假时间起" prop="startTime">
<el-date-picker type="date"
v-model="formData.startTime"
placeholder="请选择休假时间起"
clearable
style="width: 100%"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="休假时间止">
<el-form-item label="休假时间止" prop="endTime">
<el-date-picker type="date"
v-model="formData.endTime"
placeholder="请选择休假时间止"
clearable
style="width: 100%"
value-format="yyyy-MM-dd"
@change="changeEndTime"
></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="合计天数" span="2">{{formData.leaveDays}}
</el-descriptions-item>
<el-descriptions-item label="审批意见" span="2">
<el-form-item label="审批意见" prop="tf_opinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="电子签名" span="2">
<el-form-item label="电子签名" prop="tf_userSign"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.tf_userSign"></pc-signature>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
</el-row>
</div>
</maternity-leave-info>
</template>
</guava>
</div>
<script>
<!--#include('../common/info.js'){}#-->
const vue = new Vue({
el: "#app",
store,
//分页数据
mixins: [initTableMixins],
components: {
"maternity-leave-info": maternityLeaveInfo
},
data() {
return {
pageDataUrl: "/platform/maternityLeave/familyPlanningOffice/pageData",
pageForm: {
approval: false
},
formData: {},
showApprovalForm: false,
unionOptions: [],
unitOptions: [],
userOptions: [],
formRules: {
startTime: [{required: true, message: '请选择休假开始时间', trigger: 'change'}],
endTime: [{required: true, message: '请选择休假结束时间', trigger: 'change'},
{
validator: (rule, value, callback) => {
if (this.formData.startTime && value) {
const startDate = new Date(this.formData.startTime);
const endDate = new Date(value);
if (endDate < startDate) {
callback(new Error('休假结束时间不能早于开始时间'));
} else {
callback();
}
} else {
callback();
}
},
trigger: 'change'
}
],
}
}
},
watch: {
totalLeaveDays(newVal) {
this.$set(this.formData, 'leaveDays', newVal);
// 当合计天数或开始时间变化时,自动计算结束时间
this.calculateEndTime();
},
'formData.startTime'() {
// 当开始时间变化时,自动计算结束时间
this.calculateEndTime();
},
},
computed: {
// 计算合计天数
totalLeaveDays() {
const fields = [
'withLeave', 'parentalLeave', 'maternityLeave',
'extendLeave', 'birthsLeave', 'difficultLeave',
'winterLeave', 'summerLeave'
];
let total = 0;
fields.forEach(field => {
const value = this.formData[field];
if (value && !isNaN(value)) {
total += parseFloat(value);
}
});
return total;
},
// 是否为男性
isMale() {
return this.formData.sex === '男性' || this.formData.sex === '男';
},
// 是否为女性
isFemale() {
return this.formData.sex === '女性' || this.formData.sex === '女';
},
},
methods: {
changeEndTime() {
if (this.formData.startTime && this.formData.endTime) {
const startTime = this.$moment(this.formData.startTime)
const endTime = this.$moment(this.formData.endTime)
const day = endTime.diff(startTime, 'days')
this.$set(this.formData, 'leaveDays', day);
}
},
// 计算休假时间止
calculateEndTime() {
const startDate = new Date(this.formData.startTime);
if (!isNaN(startDate.getTime())) {
// 创建新的日期对象,避免修改原始日期
const endDate = new Date(startDate);
// 添加天数(leaveDays - 1,因为包含开始日期)
endDate.setDate(endDate.getDate() + this.formData.leaveDays - 1);
// 格式化为 yyyy-MM-dd
const year = endDate.getFullYear();
const month = String(endDate.getMonth() + 1).padStart(2, '0');
const day = String(endDate.getDate()).padStart(2, '0');
this.$set(this.formData, 'endTime', year + '-' + month + '-' + day);
}
},
onView(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = false
this.$refs.maternityLeaveInfoRef.onOpen(row)
})
},
openAudit(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = true
this.formData = {
id: row.id,
sex: row.sex,
loverSex: row.loverSex,
processTaskId: row.taskId,
taskName: row.curTaskName
}
if (["男", "男性"].includes(row.sex)) {
this.$set(this.formData, 'withLeave', 15);
this.$set(this.formData, 'parentalLeave', 10);
} else {
this.$set(this.formData, 'maternityLeave', 98);
this.$set(this.formData, 'extendLeave', 60);
}
this.$refs.maternityLeaveInfoRef.onOpen(row)
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.pageData()
}
})
})
},
async handleTaskAction(val) {
if (val === 1) {
const isValid = await this.$refs.formRef.validate()
if (!isValid) return;
}
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/maternityLeave/familyPlanningOffice/doReview", {
data: JSON.stringify({
...this.formData,
submitType: val
}), id: this.formData.id
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
},
created() {
this.pageData()
//工会查询
this.$businessTool.listUnion().then((res) => (this.unionOptions = res))
//单位查询
this.$businessTool.listUnit().then((res) => (this.unitOptions = res))
}
})
</script>
<!--#
}
#-->
@@ -43,9 +43,9 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool>
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
@@ -56,7 +56,8 @@ layout("/layouts/platform.html"){
<el-table-column prop="unitName" label="所属单位"></el-table-column>
<el-table-column prop="leaveDays" label="休假天数"></el-table-column>
<el-table-column prop="applyTime" label="申请时间"></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>·
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
·
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
@@ -88,7 +89,8 @@ layout("/layouts/platform.html"){
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item>
<el-form-item label="电子签名" prop="tf_userSign" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-form-item label="电子签名" prop="tf_userSign"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.tf_userSign"></pc-signature>
</el-form-item>
</el-form>
@@ -105,7 +107,6 @@ layout("/layouts/platform.html"){
</div>
<script>
<!--#include('../common/info.js'){}#-->
new Vue({
@@ -128,16 +129,16 @@ layout("/layouts/platform.html"){
unitOptions: [],
userOptions: [],
}
}
,
},
methods: {
onView(row) {
this.$refs.guava.view(()=>{
this.$refs.guava.view(() => {
this.showApprovalForm = false
this.$refs.maternityLeaveInfoRef.onOpen(row)
})
},
openAudit(row) {
this.$refs.guava.view(()=>{
this.$refs.guava.view(() => {
this.showApprovalForm = true
this.formData = {
processTaskId: row.taskId,
@@ -6,12 +6,13 @@ layout("/layouts/platform_h5.html"){
</style>
<div id="app" v-cloak>
<van-nav-bar title="生育休假申请" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed z-index="999"
<van-nav-bar title="生育休假申请" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed
z-index="999"
class="custom-nav"></van-nav-bar>
<div class="form-container">
<van-form ref="formRef">
<van-cell-group title="人员信息" class="form-section">
<van-cell-group title="申请信息" class="form-section">
<van-field label="职工姓名" v-model="formData.userName" placeholder="从信息中心获取"
readonly></van-field>
<van-field label="性别" v-model="formData.sex" placeholder="从信息中心获取" readonly></van-field>
@@ -21,7 +22,8 @@ layout("/layouts/platform_h5.html"){
<van-field label="工作单位" v-model="formData.unitName" placeholder="从信息中心获取"
readonly></van-field>
<van-field label="电话" v-model="formData.mobile" placeholder="从信息中心获取" readonly></van-field>
<van-field label="爱人姓名" v-model="formData.loverName" placeholder="请输入爱人姓名" required></van-field>
<van-field label="爱人姓名" v-model="formData.loverName" placeholder="请输入爱人姓名"
required></van-field>
<van-field
v-model="formData.loverSex"
name="loverSex"
@@ -67,100 +69,11 @@ layout("/layouts/platform_h5.html"){
@confirm="onLoverBirthdayConfirm"
@cancel="showLoverBirthdayPicker = false"
show-toolbar
/>
></van-datetime-picker>
</van-popup>
<van-field label="工作单位" v-model="formData.loverUnitName" placeholder="请输入工作单位" required></van-field>
</van-cell-group>
<van-cell-group title="假期类型" class="form-section">
<van-field label="陪产假" v-model="formData.withLeave" readonly type="number"
v-if="isMale" required></van-field>
<van-field label="育儿假" v-model="formData.parentalLeave" readonly type="number"
v-if="isMale" required></van-field>
<van-field label="产假" v-model="formData.maternityLeave" placeholder="请输入天数" type="number"
v-if="isFemale" required></van-field>
<van-field label="延长假" v-model="formData.extendLeave" placeholder="请输入天数" type="number"
v-if="isFemale" required></van-field>
<!-- 替换原有的多胞胎和难产假输入框 -->
<van-field
v-if="isFemale"
label="多胞胎"
v-model="formData.birthsLeave"
readonly
placeholder="请选择天数"
@click="showBirthsLeavePicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showBirthsLeavePicker">
<van-picker
:columns="[{value: 15, text: '15天'}]"
@cancel="showBirthsLeavePicker = false"
@confirm="onBirthsLeaveConfirm"
show-toolbar
></van-picker>
</van-popup>
<van-field
v-if="isFemale"
label="难产假"
v-model="formData.difficultLeave"
readonly
placeholder="请选择天数"
@click="showDifficultLeavePicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showDifficultLeavePicker">
<van-picker
:columns="[{value: 15, text: '15天'}]"
@cancel="showDifficultLeavePicker = false"
@confirm="onDifficultLeaveConfirm"
show-toolbar
></van-picker>
</van-popup>
<van-field label="寒假" v-model="formData.winterLeave" placeholder="请输入天数"
type="number" ></van-field>
<van-field label="暑假" v-model="formData.summerLeave" placeholder="请输入天数"
type="number" ></van-field>
<van-field label="合计天数" :value="totalLeaveDays" readonly></van-field>
<van-field label="休假时间起"
v-model="formData.startTime"
placeholder="请选择休假开始时间"
readonly
@click="showStartTimePicker = true"
clickable
required
></van-field>
<van-popup position="bottom" round v-model:show="showStartTimePicker">
<van-datetime-picker
type="date"
:min-date="minDate"
:max-date="maxDate"
@confirm="onStartTimeConfirm"
@cancel="showStartTimePicker = false"
show-toolbar
/>
</van-popup>
<van-field label="休假时间止"
v-model="formData.endTime"
placeholder="请选择休假结束时间"
readonly
@click="showEndTimePicker = true"
clickable
required
></van-field>
<van-popup position="bottom" round v-model:show="showEndTimePicker">
<van-datetime-picker
type="date"
:min-date="minDate"
:max-date="maxDate"
@confirm="onEndTimeConfirm"
@cancel="showEndTimePicker = false"
show-toolbar
/>
</van-popup>
<van-field label="子女出生日"
<van-field label="工作单位" v-model="formData.loverUnitName" placeholder="请输入工作单位"
required></van-field>
<van-field label="子女出生日期"
v-model="formData.childrenBirthday"
placeholder="请选择子女出生日期"
readonly
@@ -176,11 +89,102 @@ layout("/layouts/platform_h5.html"){
@confirm="onChildrenBirthdayConfirm"
@cancel="showChildrenBirthdayPicker = false"
show-toolbar
/>
></van-datetime-picker>
</van-popup>
</van-cell-group>
<!-- <van-cell-group title="假期类型" class="form-section">
<van-field label="陪产假" v-model="formData.withLeave" readonly type="number"
v-if="isMale" required></van-field>
<van-field label="育儿假" v-model="formData.parentalLeave" readonly type="number"
v-if="isMale" required></van-field>
<van-field label="产假" v-model="formData.maternityLeave" placeholder="请输入天数" type="number"
v-if="isFemale" required></van-field>
<van-field label="延长假" v-model="formData.extendLeave" placeholder="请输入天数" type="number"
v-if="isFemale" required></van-field>
&lt;!&ndash; 替换原有的多胞胎和难产假输入框 &ndash;&gt;
<van-field
v-if="isFemale"
label="多胞胎"
v-model="formData.birthsLeave"
readonly
placeholder="请选择天数"
@click="showBirthsLeavePicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showBirthsLeavePicker">
<van-picker
:columns="[{value: 15, text: '15天'}]"
@cancel="showBirthsLeavePicker = false"
@confirm="onBirthsLeaveConfirm"
show-toolbar
></van-picker>
</van-popup>
<van-field
v-if="isFemale"
label="难产假"
v-model="formData.difficultLeave"
readonly
placeholder="请选择天数"
@click="showDifficultLeavePicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showDifficultLeavePicker">
<van-picker
:columns="[{value: 15, text: '15天'}]"
@cancel="showDifficultLeavePicker = false"
@confirm="onDifficultLeaveConfirm"
show-toolbar
></van-picker>
</van-popup>
<van-field label="寒假" v-model="formData.winterLeave" placeholder="请输入天数"
type="number"></van-field>
<van-field label="暑假" v-model="formData.summerLeave" placeholder="请输入天数"
type="number"></van-field>
<van-field label="合计天数" :value="totalLeaveDays" readonly></van-field>
<van-field label="休假时间起"
v-model="formData.startTime"
placeholder="请选择休假开始时间"
readonly
@click="showStartTimePicker = true"
clickable
required
></van-field>
<van-popup position="bottom" round v-model:show="showStartTimePicker">
<van-datetime-picker
type="date"
:min-date="minDate"
:max-date="maxDate"
@confirm="onStartTimeConfirm"
@cancel="showStartTimePicker = false"
show-toolbar
></van-datetime-picker>
</van-popup>
<van-field label="休假时间止"
v-model="formData.endTime"
placeholder="请选择休假结束时间"
readonly
@click="showEndTimePicker = true"
clickable
required
></van-field>
<van-popup position="bottom" round v-model:show="showEndTimePicker">
<van-datetime-picker
type="date"
:min-date="minDate"
:max-date="maxDate"
@confirm="onEndTimeConfirm"
@cancel="showEndTimePicker = false"
show-toolbar
></van-datetime-picker>
</van-popup>
</van-cell-group>-->
<!-- 提交按钮 -->
<div class="form-actions">
<van-button plain @click="onSave" type="info">保存</van-button>
@@ -206,8 +210,8 @@ layout("/layouts/platform_h5.html"){
// 性别
showLoverSexPicker: false,
loverSexColumns: [
{ value: '男', text: '男' },
{ value: '女', text: '女' }
{value: '男', text: '男'},
{value: '女', text: '女'}
],
showLoverBirthdayPicker: false,
showStartTimePicker: false,
@@ -219,18 +223,18 @@ layout("/layouts/platform_h5.html"){
maxDate: new Date(2040, 12, 31), // 设置最大日期为2040年12月31日
// 表单验证规则
formRules: {
loverName: [{ required: true, message: '请输入爱人姓名' }],
loverSex: [{ required: true, message: '请选择爱人性别' }],
loverNationName: [{ required: true, message: '请选择爱人民族' }],
loverBirthday: [{ required: true, message: '请选择爱人出生年月' }],
loverUnitName: [{ required: true, message: '请输入爱人工作单位' }],
withLeave: [{ required: true, message: '请输入陪产假天数' }],
parentalLeave: [{ required: true, message: '请输入育儿假天数' }],
maternityLeave: [{ required: true, message: '请输入产假天数' }],
extendLeave: [{ required: true, message: '请输入延长假天数' }],
startTime: [{ required: true, message: '请选择休假开始时间' }],
endTime: [{ required: true, message: '请选择休假结束时间' }],
childrenBirthday: [{ required: true, message: '请选择子女出生日期' }]
loverName: [{required: true, message: '请输入爱人姓名'}],
loverSex: [{required: true, message: '请选择爱人性别'}],
loverNationName: [{required: true, message: '请选择爱人民族'}],
loverBirthday: [{required: true, message: '请选择爱人出生年月'}],
loverUnitName: [{required: true, message: '请输入爱人工作单位'}],
withLeave: [{required: true, message: '请输入陪产假天数'}],
parentalLeave: [{required: true, message: '请输入育儿假天数'}],
maternityLeave: [{required: true, message: '请输入产假天数'}],
extendLeave: [{required: true, message: '请输入延长假天数'}],
startTime: [{required: true, message: '请选择休假开始时间'}],
endTime: [{required: true, message: '请选择休假结束时间'}],
childrenBirthday: [{required: true, message: '请选择子女出生日期'}]
}
}
},
@@ -7,13 +7,13 @@ const MATERNITY_LEAVE_INFO = {
<van-cell title="职工姓名">{{ viewData.userName }}</van-cell>
<van-cell title="性别">{{ viewData.sex }}</van-cell>
<van-cell title="民族">{{ viewData.nation }}</van-cell>
<van-cell title="出生年月">{{ formatDate(viewData.birthday) }}</van-cell>
<van-cell title="出生年月">{{$moment(viewData.birthday).format('YYYY-MM-DD')}}</van-cell>
<van-cell title="单位">{{ viewData.unitName }}</van-cell>
<van-cell title="电话">{{ viewData.mobile }}</van-cell>
<van-cell title="爱人姓名">{{ viewData.loverName }}</van-cell>
<van-cell title="性别">{{ viewData.loverSex }}</van-cell>
<van-cell title="民族">{{ viewData.loverNation }}</van-cell>
<van-cell title="出生年月">{{ formatDate(viewData.loverBirthday) }}</van-cell>
<van-cell title="出生年月">{{$moment(viewData.loverBirthday).format('YYYY-MM-DD')}}</van-cell>
<van-cell title="单位">{{ viewData.loverUnitName }}</van-cell>
</van-cell-group>
@@ -27,9 +27,9 @@ const MATERNITY_LEAVE_INFO = {
<van-cell title="寒假">{{ viewData.winterLeave }}</van-cell>
<van-cell title="暑假">{{ viewData.summerLeave }}</van-cell>
<van-cell title="合计">{{ viewData.leaveDays }}</van-cell>
<van-cell title="休假时间起">{{ formatDate(viewData.startTime) }}</van-cell>
<van-cell title="休假时间止">{{ formatDate(viewData.endTime) }}</van-cell>
<van-cell title="子女出生日">{{ formatDate(viewData.childrenBirthday) }}</van-cell>
<van-cell title="休假时间起">{{$moment(viewData.startTime).format('YYYY-MM-DD')}}</van-cell>
<van-cell title="休假时间止">{{$moment(viewData.endTime).format('YYYY-MM-DD')}}</van-cell>
<van-cell title="子女出生日">{{$moment(viewData.childrenBirthday).format('YYYY-MM-DD')}}</van-cell>
</van-cell-group>
@@ -89,31 +89,6 @@ const MATERNITY_LEAVE_INFO = {
}
},
methods: {
// 添加日期格式化方法
formatDate(date) {
if (!date) return '';
// 如果已经是 yyyy-MM-dd 格式,直接返回
if (typeof date === 'string' && /^\d{4}-\d{2}-\d{2}/.test(date)) {
// 如果包含时间,只取日期部分
if (date.length > 10) {
return date.substring(0, 10);
}
return date;
}
// 否则转换为 yyyy-MM-dd 格式
try {
const d = new Date(date);
if (isNaN(d.getTime())) {
return date;
}
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
return year + '-' + month + '-' + day;
} catch (e) {
return date;
}
},
onOpen(row) {
this.row = row
this.visible = true
@@ -0,0 +1,192 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="校工会审核" placeholder
fixed></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
:reverse-color="false"
:show-action="false"
@search="doSearch"
input-align="left"
placeholder="请输入职工姓名搜索"
v-model="pageForm.userName"
></van-search>
<van-tabs v-model="pageForm.approvalText"
@change="(val)=>{this.pageForm.approval = val==='1';this.doSearch();}">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
</van-sticky>
<table-list api="/platform/maternityLeave/familyPlanningOffice/pageData" :page_form.sync="pageForm"
ref="tableListRef"
@ready="doSearch">
<template v-slot="{index,row}">
<table-column label="职工姓名">{{row.userName}}</table-column>
<table-column label="性别">{{row.sex}}</table-column>
<table-column label="工会">{{row.unionName}}</table-column>
<table-column label="所属单位">{{row.unitName}}</table-column>
<table-column label="休假天数">{{row.leaveDays}}</table-column>
<table-column label="申请时间">{{row.applyTime}}</table-column>
<table-column label="当前节点">{{row.curTaskName}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
<i class="fa fa-eye"></i>
<span>查看</span>
</div>
<div class="action-btn" v-if="row.taskState === 10" @click="onAudit(row)">
<i class="fa fa-edit"></i>
<span>审核</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<i class="fa fa-undo"></i>
<span>撤回</span>
</div>
</template>
</table-list>
<maternity-leave-info ref="maternityLeaveInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
计生办审核
</div>
<div class="form-container">
<van-form ref="formRef">
<van-cell-group title="审批意见">
<van-field label=""
:rules="[{ required: true,message:'请填审批意见' }]"
v-model="formData.tf_opinion"
required
type="textarea"
name="tf_opinion"
rows="4"
autosize
class="more-text"
placeholder="请填审批意见"></van-field>
</van-cell-group>
<van-cell-group title="电子签名" class="form-section">
<van-field class="more-text" name="tf_userSign" label="">
<template #input>
<h5-signature v-model="formData.tf_userSign" slot="input"></h5-signature>
</template>
</van-field>
</van-cell-group>
<!-- 按钮区域 -->
<div class="form-actions">
<van-button type="danger" @click="handleTaskAction(6)">退回到发起人</van-button>
<van-button type="danger" @click="handleTaskAction(2)">拒绝申请</van-button>
<van-button type="primary" @click="handleTaskAction(1)">同意申请</van-button>
</div>
</van-form>
</div>
</div>
</maternity-leave-info>
</div>
<script>
<!--#include('../common/info.js'){}#-->
const vue = new Vue({
el: "#app",
store,
dicts: [],
components: {
"maternity-leave-info": MATERNITY_LEAVE_INFO
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: "",
approvalText: "0",
approval: false,
year: new Date().getFullYear(),
},
formData: {},
showApprovalForm: false,
infoShow: false
}
},
methods: {
onRevoke(row) {
this.$dialog.confirm({
title: '温馨提示',
message: '您确定要撤回吗?',
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then(res => {
if (res.code === 0) {
this.$toast.success("提交成功")
this.doSearch()
this.infoShow = false
}
})
}).catch(() => {
// on cancel
});
},
async handleTaskAction(val) {
if (val === 1) {
const isValid = await this.$refs.formRef.validate()
if (!isValid) return;
}
this.$dialog.confirm({
title: '温馨提示',
message: '您确定要提交吗?',
}).then(() => {
this.$axios.post('/platform/maternityLeave/familyPlanningOffice/doReview', {
data: JSON.stringify({
...this.formData,
submitType: val
}), id: this.formData.id
}).then(res => {
if (res.code === 0) {
this.$toast.success("提交成功")
this.doSearch()
this.$refs.maternityLeaveInfoRef.onClose()
}
})
}).catch(() => {
});
},
onView(row) {
this.showApprovalForm = false
this.$refs.maternityLeaveInfoRef.onOpen(row)
},
onAudit(row) {
this.showApprovalForm = true
this.formData = {
tf_opinion: null,
tf_userSign: null,
processTaskId: row.taskId,
id: row.id,
sex: row.sex,
taskName: row.curTaskName
}
this.$refs.maternityLeaveInfoRef.onOpen(row)
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
},
},
created() {
}
})
</script>
<!--#
}
#-->