This commit is contained in:
2025-11-21 10:50:35 +08:00
parent 7b114dbaeb
commit e865951a7c
15 changed files with 84 additions and 75 deletions
@@ -89,7 +89,7 @@ public class ProposalSeniorBasicController {
@ApiOperation(value = "提案内容修改")
@Aop(TransAop.READ_COMMITTED)
public Result update(@Valid @Param("info") ProposalInfo proposalInfo) {
dao.update(proposalInfo,"^name|typeId|brief|measures|excerpt|suggestUnits$");
dao.update(proposalInfo,"^name|code|typeId|brief|measures|excerpt|suggestUnits$");
return Result.success();
}
@@ -143,9 +143,6 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
Cnd cnd = Cnd.NEW();
cnd.and(ProposalUndertakeSuggestion::getProposalId, "=", id);
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
cnd.and(ProposalUndertakeSuggestion::getUnitId, "=", getSelfManageUndertake().getId());
}
cnd.desc(ProposalUndertakeSuggestion::getTime);
List<ProposalUndertakeSuggestion> undertakeSuggestions = dao().query(ProposalUndertakeSuggestion.class, cnd);
info.put("undertakeSuggestions", undertakeSuggestions);
@@ -164,6 +164,7 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
info.id,
info.name,
info.code,
info.suggestUnits,
info.researchFindings,
info.brief,
info.measures,
@@ -194,6 +195,8 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
list.get(i).put("index", i + 1);
list.get(i).put("brief", HtmlUtil.cleanHtmlTag(list.get(i).getString("brief")));
list.get(i).put("measures", HtmlUtil.cleanHtmlTag(list.get(i).getString("measures")));
list.get(i).put("suggestUnits", list.get(i).getString("suggestUnits").replace("[", "").replace("]", ""));
// 流程实例
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", list.get(i).getString("id")));
@@ -224,7 +227,7 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
exportEntities.add(new ExcelExportEntity("提案人电话", "mobile", 20));
exportEntities.add(new ExcelExportEntity("附议人(两名)", "secondedUserNames", 20));
exportEntities.add(new ExcelExportEntity("提案单位", "unitName", 20));
exportEntities.add(new ExcelExportEntity("拟交办单位", "", 20));
exportEntities.add(new ExcelExportEntity("拟交办单位", "suggestUnits", 20));
Teacher_congress_session session = dao().fetch(Teacher_congress_session.class, pageForm.getSessionId());
String title = StrUtil.format("{}第{}{}教代会提案征集汇总表", Globals.AppName, session.getJ(), session.getC());
@@ -432,6 +432,7 @@ public class TeacherCongressDelegatePushController {
""");
Cnd cnd = Cnd.NEW();
SqlExpressionGroup group = new SqlExpressionGroup();
group.or("t.taskName", "=", "0cacd1e7-7bb2-47dd-818b-6a73062e0c62");
group.or("t.taskName", "=", "900217e4-4332-4a21-90dd-363b8be17801");
group.or("t.taskName", "is", null);
cnd.and(group);
@@ -561,7 +562,7 @@ public class TeacherCongressDelegatePushController {
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())){
sql = getSql(pageForm, sessionId, unionId, isFormalOrAttendance);
} else {
sql = getSql(pageForm, sessionId, SecurityUtil.getUnitId(), isFormalOrAttendance);
sql = getSql(pageForm, sessionId, SecurityUtil.getUnionId(), isFormalOrAttendance);
}
List<NutMap> exportList = baseService.listMap(sql);
@@ -20,6 +20,7 @@ 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.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.flow.vo.ProcessTaskVO;
@@ -126,6 +127,11 @@ public class TeacherCongressDelegatePushZgAuditController {
item.put("worker", item.getBoolean("worker") ? "" : "");
item.put("intermediateBelow", item.getBoolean("intermediateBelow") ? "" : "");
item.put("seniorTeacher", item.getBoolean("seniorTeacher") ? "" : "");
if (item.getInt("instanceState") == ProcessInstanceStateEnum.FINISHED.getCode()) {
item.put("instanceStateName", "已通过");
} else if (item.getInt("instanceState") == ProcessInstanceStateEnum.REJECT.getCode()) {
item.put("instanceStateName", "已拒绝");
}
});
@@ -146,6 +152,7 @@ public class TeacherCongressDelegatePushZgAuditController {
entityList.add(new ExcelExportEntity("教代会代表", "isJdh", 20));
entityList.add(new ExcelExportEntity("工代会代表", "isGdh", 20));
entityList.add(new ExcelExportEntity("代表类型", "representativeType", 20));
entityList.add(new ExcelExportEntity("状态", "instanceStateName", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
@@ -231,11 +238,11 @@ public class TeacherCongressDelegatePushZgAuditController {
@SaCheckPermission("tc.delegate.push.zcAudit")
@SLog(tag = "代表管理-代表资格审查", msg = "审查通过")
public Result submit(@Param("data") String param, @Valid String id) {
Dict args = Json.fromJson(Dict.class, param);
TeacherCongressDelegatePush delegatePush = baseService.dao().fetch(TeacherCongressDelegatePush.class, id);
View_user user = baseService.dao().fetch(View_user.class, Cnd.where("id", "=", delegatePush.getUserId()));
if (delegatePush.getIsJdh()) {
if (delegatePush.getIsJdh() && args.getInt("submitType") == 1) {
Teacher_congress_delegate delegate = new Teacher_congress_delegate();
Sys_user_role userRole = new Sys_user_role();
@@ -257,8 +264,8 @@ public class TeacherCongressDelegatePushZgAuditController {
.and(Teacher_congress_delegation_union::getSessionId, "=", delegatePush.getSessionId()));
if (ObjectUtil.isNotEmpty(delegation_unit)) {
delegate.setDelegationId(delegation_unit.getId());
userRole.setTcDelegationId(delegation_unit.getId());
delegate.setDelegationId(delegation_unit.getDelegationId());
userRole.setTcDelegationId(delegation_unit.getDelegationId());
} else {
return Result.error(user.getUnitName() + "没有设置到代表团,请先在代表团管理里设置。");
}
@@ -277,9 +284,8 @@ public class TeacherCongressDelegatePushZgAuditController {
userRole.setTcSessionId(delegatePush.getSessionId());
baseService.dao().insert(delegate);
baseService.dao().insert(userRole);
}
Dict args = Json.fromJson(Dict.class, param);
flowCommonService.executeTask(args);
return Result.success();
}
@@ -298,7 +304,7 @@ public class TeacherCongressDelegatePushZgAuditController {
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" +
java.net.URLEncoder.encode("教代会代表推荐表.zip", "UTF-8"));
java.net.URLEncoder.encode("教代会代表推荐表.zip", "UTF-8"));
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
Sql sql = getSql(pageForm, sessionId, unionId, approval, isFormalOrAttendance);
@@ -16,7 +16,7 @@ const initTableMixins = {
searchName: "",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
pageSize: 20,
totalCount: 0,
pageOrderName: "",
pageOrderBy: "",
@@ -199,7 +199,7 @@ layout("/layouts/platform.html"){
{label: "届次", prop: "sessionName"},
{label: "代表团", prop: "delegationName"},
{label: "立案结果", prop: "caseFilingResult"},
{label: "立案类型", prop: "caseFilingType"},
// {label: "立案类型", prop: "caseFilingType"},
{label: "是否并案", prop: "merge"},
{label: "案由", prop: "brief", visible: false},
{label: "建议措施", prop: "measures", visible: false},
@@ -134,15 +134,22 @@ layout("/layouts/platform.html"){
<el-input maxlength="100" placeholder="提案名称" v-model="formData.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="提案编号" prop="code"
:rules="[{required:true,message:'请输入提案编号',trigger:'blur'}]">
<el-input maxlength="100" placeholder="提案编号" v-model="formData.code"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="12">
<el-form-item label="提案方式" prop="source">
<el-input :value="dict.type.PROPOSAL_SOURCE.find(v=>v.code === formData.source)?.name"
disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="12">
<el-form-item label="提案类别" prop="typeId">
<el-select v-model="formData.typeId" style="width: 100%">
@@ -170,6 +177,9 @@ layout("/layouts/platform.html"){
v-for="item in suggestUnitOptions"></el-option>
</el-select>
</el-form-item>
<el-form-item label="调研情况" prop="researchFindings">
<text-editor v-model="formData.researchFindings" key="researchFindings" placeholder="调研情况"></text-editor>
</el-form-item>
<el-form-item label="案由" prop="brief">
<text-editor v-model="formData.brief" key="brief" placeholder="案由"></text-editor>
</el-form-item>
@@ -92,7 +92,7 @@ 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>
<template v-if="['SATISFIED','FAIRLY_SATISFIED'].includes(formData.tf_feedback)">
<!-- <template v-if="['SATISFIED','FAIRLY_SATISFIED'].includes(formData.tf_feedback)">
<el-form-item label="通讯地址" prop="tf_address" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="formData.tf_address" placeholder="请输入通讯地址" clearable></el-input>
</el-form-item>
@@ -102,7 +102,7 @@ layout("/layouts/platform.html"){
<el-form-item label="邮政编码" prop="tf_postcode" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="formData.tf_postcode" placeholder="请输入邮政编码" clearable></el-input>
</el-form-item>
</template>
</template>-->
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
@@ -131,6 +131,9 @@ layout("/layouts/platform.html"){
v-for="item in suggestUnitOptions"></el-option>
</el-select>
</el-form-item>
<el-form-item label="调研情况" prop="researchFindings">
<text-editor v-model="formData.researchFindings" key="researchFindings" placeholder="调研情况"></text-editor>
</el-form-item>
<el-form-item label="案由" prop="brief">
<text-editor v-model="formData.brief" key="brief" placeholder="案由"></text-editor>
</el-form-item>
@@ -14,7 +14,7 @@ layout("/layouts/platform.html"){
</el-select>
</search-item>
<search-item label="分工会" v-if="$auth.hasRole('SYSADMIN') || $auth.hasRole('SCHOOL_UNION_ADMIN')">
<el-select v-model="pageForm.unionId" filterable @change="listUnit" clearable style="width: 100%">
<el-select v-model="pageForm.unionId" filterable clearable style="width: 100%">
<el-option v-for="i in unionOptions" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</search-item>
@@ -63,7 +63,7 @@ const pushProgress = {
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
<div class="progress-bar-inner bg-success"
:style="{width: metrics.seniorTeacher.progress * 100 + '%'}"></div>
</div>
<div class="progress-info">
@@ -96,7 +96,7 @@ const pushProgress = {
</div>
<div class="progress-bar">
<div
class="progress-bar-inner bg-primary"
class="progress-bar-inner bg-success"
:style="{width: metrics.intermediateBelow.progress * 100 + '%'}"
></div>
</div>
@@ -128,9 +128,8 @@ const pushProgress = {
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.cadre.progress * 100 + '%'}"
></div>
<div class="progress-bar-inner bg-success"
:style="{width: metrics.cadre.progress * 100 + '%'}"></div>
</div>
<div class="progress-info">
<span v-if="metrics.cadre.progress>=1 || metrics.cadre.target===0"
@@ -160,7 +159,7 @@ const pushProgress = {
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
<div class="progress-bar-inner bg-success"
:style="{width: metrics.worker.progress * 100 + '%'}"
></div>
</div>
@@ -96,8 +96,8 @@ const write = {
</el-col>
<el-col :span="12">
<el-form-item label="政治面貌" prop="political">
<el-input maxlength="100" placeholder="政治面貌"
v-model="formData.political"></el-input>
<dict-select v-model="formData.political" style="width: 100%" placeholder="请选择政治面貌"
code="USER_POLITICAL"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -83,7 +83,7 @@ layout("/layouts/platform_h5.html"){
show-word-limit
></van-field>
<template v-if="['SATISFIED','FAIRLY_SATISFIED'].includes(formData.tf_feedback)">
<!-- <template v-if="['SATISFIED','FAIRLY_SATISFIED'].includes(formData.tf_feedback)">
<van-field
v-model="formData.tf_address"
name="tf_address"
@@ -93,7 +93,7 @@ layout("/layouts/platform_h5.html"){
required
show-word-limit
></van-field>
<!--联系电话-->
&lt;!&ndash;联系电话&ndash;&gt;
<van-field
v-model="formData.tf_phone"
name="tf_phone"
@@ -103,7 +103,7 @@ layout("/layouts/platform_h5.html"){
required
show-word-limit
></van-field>
<!--邮政编码-->
&lt;!&ndash;邮政编码&ndash;&gt;
<van-field
v-model="formData.tf_postcode"
name="tf_postcode"
@@ -112,7 +112,7 @@ layout("/layouts/platform_h5.html"){
:rules="[{ required: true, message: '请输入邮政编码' }]"
required
show-word-limit
></van-field>
></van-field>-->
</template>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
@@ -235,9 +235,9 @@ layout("/layouts/platform_h5.html"){
<!-- 搜索框 -->
<div class="search-container">
<van-search
v-model="suggestionUnitSearchText"
placeholder="搜索承办单位"
@input="onSuggestionUnitSearch"
v-model="suggestionUnitSearchText"
placeholder="搜索承办单位"
@input="onSuggestionUnitSearch"
></van-search>
</div>
@@ -246,18 +246,18 @@ layout("/layouts/platform_h5.html"){
<van-checkbox-group v-model="selectedSuggestionUnits">
<van-cell-group>
<van-cell
v-for="item in filteredSuggestionUnits"
:key="item.id"
clickable
@click="toggleSuggestionUnit(item)"
v-for="item in filteredSuggestionUnits"
:key="item.id"
clickable
@click="toggleSuggestionUnit(item)"
>
<template #title>
<div class="option-item">
<van-checkbox
:name="item.name"
:checked="selectedSuggestionUnits.includes(item.name)"
@click.stop
/>
:name="item.name"
:checked="selectedSuggestionUnits.includes(item.name)"
@click.stop
></van-checkbox>
<span class="option-text">{{ item.name }}</span>
</div>
</template>
@@ -270,39 +270,29 @@ layout("/layouts/platform_h5.html"){
</van-cell-group>
<van-cell-group title="提案内容" class="form-group">
<van-field
v-model="formData.researchFindings"
name="researchFindings"
label="调研情况"
type="textarea"
rows="4"
autosize
placeholder="请输入调研情况"
:rules="[{ required: true, message: '请填写调研情况' }]"
required
></van-field>
<van-field class="direction-column-field" name="researchFindings" label="调研情况" required
:rules="[{ required: true, message: '请填写调研情况' }]">
<template #input>
<text-editor v-model="formData.researchFindings" key="researchFindings"
placeholder="调研情况"></text-editor>
</template>
</van-field>
<van-field
v-model="formData.brief"
label="提案案由"
type="textarea"
rows="6"
autosize
placeholder="请输入案由"
:rules="[{ required: true, message: '请填写案由' }]"
required
></van-field>
<van-field class="direction-column-field" name="brief" label="提案案由" required
:rules="[{ required: true, message: '请填写案由' }]">
<template #input>
<text-editor v-model="formData.brief" key="brief"
placeholder="提案案由"></text-editor>
</template>
</van-field>
<van-field
v-model="formData.measures"
label="建议措施"
type="textarea"
rows="6"
autosize
placeholder="请输入建议措施"
:rules="[{ required: true, message: '请填写建议措施' }]"
required
></van-field>
<van-field class="direction-column-field" name="measures" label="建议措施" required
:rules="[{ required: true, message: '请填写建议措施' }]">
<template #input>
<text-editor v-model="formData.measures" key="measures"
placeholder="建议措施"></text-editor>
</template>
</van-field>
</van-cell-group>