This commit is contained in:
=
2025-09-30 16:02:24 +08:00
8 changed files with 171 additions and 106 deletions
@@ -5,7 +5,11 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
@@ -13,21 +17,32 @@ import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.base.utils.PageUtil; import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.TeacherCongressDelegatePush;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate;
import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation_union;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
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;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At; 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 javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -45,6 +60,9 @@ public class TeacherCongressDelegatePushZgAuditController {
@Inject @Inject
private BaseService baseService; private BaseService baseService;
@Inject
private FlowCommonService flowCommonService;
@At("") @At("")
@Ok("beetl:/platform/zhgh/democratic/teachercongress/delegate/push/zcAudit.html") @Ok("beetl:/platform/zhgh/democratic/teachercongress/delegate/push/zcAudit.html")
@SaCheckPermission("tc.delegate.push.zcAudit") @SaCheckPermission("tc.delegate.push.zcAudit")
@@ -182,4 +200,64 @@ public class TeacherCongressDelegatePushZgAuditController {
} }
@At
@ApiOperation("审查通过")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("tc.delegate.push.zcAudit")
@SLog(tag = "代表管理-代表资格审查", msg = "审查通过")
public Result submit(@Param("data") String param, @Valid String id) {
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()) {
Teacher_congress_delegate delegate = new Teacher_congress_delegate();
Sys_user_role userRole = new Sys_user_role();
delegate.setUserId(user.getId());
delegate.setLoginName(user.getLoginname());
delegate.setUserName(user.getUsername());
delegate.setSex(user.getSex());
delegate.setAge(delegatePush.getAge());
delegate.setMobile(user.getMobile());
delegate.setUnitId(user.getUnitId());
delegate.setUnitName(user.getUnitName());
delegate.setUnionId(user.getUnionId());
delegate.setUnionName(user.getUnionName());
delegate.setSessionId(delegatePush.getSessionId());
Teacher_congress_delegation_union delegation_union = baseService.dao().fetch(Teacher_congress_delegation_union.class,
Cnd.where(Teacher_congress_delegation_union::getUnionId, "=", user.getUnionId())
.and(Teacher_congress_delegation_union::getSessionId, "=", delegatePush.getSessionId()));
if (ObjectUtil.isNotEmpty(delegation_union)) {
delegate.setDelegationId(delegation_union.getId());
userRole.setTcDelegationId(delegation_union.getId());
} else {
return Result.error(user.getUnionName() + "没有设置到代表团,请先在代表团管理里设置。");
}
if ("正式代表".equals(delegatePush.getRepresentativeType())) {
Sys_role sys_role = baseService.dao().fetch(Sys_role.class, Cnd.where(Sys_role::getCode, "=", RoleConstant.TEACHER_CONGRESS_DELEGATE_FORMAL.name()));
delegate.setRoleId(sys_role.getId());
userRole.setRoleId(sys_role.getId());
}
if ("列席代表".equals(delegatePush.getRepresentativeType())) {
Sys_role sys_role = baseService.dao().fetch(Sys_role.class, Cnd.where(Sys_role::getCode, "=", RoleConstant.TEACHER_CONGRESS_DELEGATE_ATTENDANCE.name()));
delegate.setRoleId(sys_role.getId());
delegate.setRoleId(sys_role.getId());
userRole.setRoleId(sys_role.getId());
}
userRole.setUserId(user.getId());
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();
}
} }
@@ -1,45 +1,29 @@
package com.budwk.app.zhgh.staffmanage.member.controller.apply; package com.budwk.app.zhgh.staffmanage.member.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil; import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService; import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.flow.enums.ProcessTaskStateEnum;
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.web.commons.base.Globals; import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.web.controllers.open.commons.service.CommonService; import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm; import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService; import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService; import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
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.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At; 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 javax.validation.Valid;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 会员入会申请分工会审核 * 会员入会申请分工会审核
@@ -14,7 +14,7 @@ layout("/layouts/platform.html"){
</el-select> </el-select>
</search-item> </search-item>
<search-item label="分工会"> <search-item label="分工会">
<el-select v-model="pageForm.unionId" filterable 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-option v-for="i in unionOptions" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select> </el-select>
</search-item> </search-item>
@@ -33,7 +33,7 @@ layout("/layouts/platform.html"){
<el-radio-button :label="true">已审核</el-radio-button> <el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button> <el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group> </el-radio-group>
<el-button type="primary" size="small" @click="exportExcel" class="ml5">导出</el-button> <el-button type="primary" size="small" @click="exportExcel" class="ml5">导出</el-button>
</table-tool> </table-tool>
<el-table <el-table
@@ -42,16 +42,16 @@ layout("/layouts/platform.html"){
row-key="id" row-key="id"
@sort-change="pageOrder" @sort-change="pageOrder"
> >
<el-table-column type="selection" width="55" reserve-selection></el-table-column> <!-- <el-table-column type="selection" width="55" reserve-selection></el-table-column>-->
<el-table-column type="index" width="55" label="序号" :index="indexMethod"></el-table-column> <el-table-column type="index" width="55" label="序号" :index="indexMethod"></el-table-column>
<el-table-column label="姓名" prop="userName" width="100"></el-table-column> <el-table-column label="姓名" prop="userName" width="100"></el-table-column>
<el-table-column label="工号" prop="loginName"></el-table-column> <el-table-column label="工号" prop="loginName"></el-table-column>
<el-table-column label="性别" prop="sex" width="50"></el-table-column> <el-table-column label="性别" prop="sex" width="50"></el-table-column>
<el-table-column label="分工会" prop="unionName" show-overflow-tooltip></el-table-column> <el-table-column label="分工会" prop="unionName" show-overflow-tooltip></el-table-column>
<!-- <el-table-column label="民族" prop="nation"></el-table-column>&lt;!&ndash; <!-- <el-table-column label="民族" prop="nation"></el-table-column>&lt;!&ndash;
<el-table-column label="政治面貌" prop="political" <el-table-column label="政治面貌" prop="political"
show-overflow-tooltip></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column label="学历" prop="education"></el-table-column>--> <el-table-column label="学历" prop="education"></el-table-column>-->
<el-table-column label="职称" prop="professionalTitle"></el-table-column> <el-table-column label="职称" prop="professionalTitle"></el-table-column>
<el-table-column label="职级" prop="professionalLevel"></el-table-column> <el-table-column label="职级" prop="professionalLevel"></el-table-column>
<el-table-column label="是否高级职称" prop="seniorTeacher"> <el-table-column label="是否高级职称" prop="seniorTeacher">
@@ -175,11 +175,11 @@ layout("/layouts/platform.html"){
processTaskId: row.taskId, processTaskId: row.taskId,
taskName: row.curTaskName taskName: row.curTaskName
} }
this.$axios.post("/flow/common/executeTask", { this.$axios.post("/platform/teacherCongress/delegate/push/zcAudit/submit", {
data: JSON.stringify({ data: JSON.stringify({
...this.formData, ...this.formData,
submitType: submitType submitType: submitType
}) }), id: row.id
}).then((res) => { }).then((res) => {
if (res.code === 0) { if (res.code === 0) {
this.$message.success(res.msg) this.$message.success(res.msg)
@@ -393,6 +393,7 @@ layout("/layouts/platform.html"){
campus, campus,
userState, userState,
personType, personType,
preparedBy,
idCard, idCard,
mobile, mobile,
email, email,
@@ -414,6 +415,7 @@ layout("/layouts/platform.html"){
this.$set(this.formData, "campus", campus) this.$set(this.formData, "campus", campus)
this.$set(this.formData, "userState", userState) this.$set(this.formData, "userState", userState)
this.$set(this.formData, "personType", personType) this.$set(this.formData, "personType", personType)
this.$set(this.formData, "preparedBy", preparedBy)
this.$set(this.formData, "unitName", unit ? unit.name : unitName) this.$set(this.formData, "unitName", unit ? unit.name : unitName)
this.$set(this.formData, "unitId", unit ? unit.id : unitId) this.$set(this.formData, "unitId", unit ? unit.id : unitId)
this.$set(this.formData, "unionName", union ? union.name : unionName) this.$set(this.formData, "unionName", union ? union.name : unionName)
@@ -31,7 +31,7 @@ const INFO = {
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item> <el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item> <el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item> <el-descriptions-item label="编制类别">{{ viewData.preparedBy }}</el-descriptions-item>
<template v-if="viewData.userState == '退休'"> <template v-if="viewData.userState == '退休'">
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? <el-descriptions-item label="退休日期">{{ viewData.retireDate ?
@@ -25,7 +25,7 @@ const MEMBER_ALL_CHANGE_INFO = {
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item> <el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item> <el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item> <el-descriptions-item label="编制类别">{{ viewData.preparedBy }}</el-descriptions-item>
<template v-if="viewData.userState == '退休'"> <template v-if="viewData.userState == '退休'">
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? $moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item> <el-descriptions-item label="退休日期">{{ viewData.retireDate ? $moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
@@ -139,18 +139,18 @@ const MEMBER_CHANGE = {
:disabled="allowFields('userState')" style="width: 100%"></dict-select> :disabled="allowFields('userState')" style="width: 100%"></dict-select>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="编制类别">
<el-form-item prop="preparedBy">
<dict-select v-model="formData.preparedBy" code="USER_PREPARED_BY_TYPE"
:disabled="allowFields('preparedBy')" style="width: 100%"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="教职工类别"> <el-descriptions-item label="教职工类别">
<el-form-item prop="personType"> <el-form-item prop="personType">
<dict-select v-model="formData.personType" code="USER_PERSON_TYPE" <dict-select v-model="formData.personType" code="USER_PERSON_TYPE"
:disabled="allowFields('personType')" style="width: 100%"></dict-select> :disabled="allowFields('personType')" style="width: 100%"></dict-select>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="编制类别">
<el-form-item prop="preparedBy">
<dict-select v-model="formData.preparedBy" code="USER_PREPARED_BY_TYPE"
:disabled="allowFields('preparedBy')" style="width: 100%"></dict-select>
</el-form-item>
</el-descriptions-item>
<template v-if="formData.userState == '退休'"> <template v-if="formData.userState == '退休'">
<el-descriptions-item label="退休日期"> <el-descriptions-item label="退休日期">
@@ -567,7 +567,7 @@ const optionSelect = {
}, },
style: /*language=CSS*/ ` style: /*language=CSS*/ `
/* 全局变量 */ /* 全局变量 */
:root { /deep/ :root {
--primary-color: #409EFF; --primary-color: #409EFF;
--primary-light: #ecf5ff; --primary-light: #ecf5ff;
--text-primary: #303133; --text-primary: #303133;
@@ -580,7 +580,7 @@ const optionSelect = {
} }
/* 主容器样式 */ /* 主容器样式 */
.welfare-select-container { /deep/ .welfare-select-container {
background: linear-gradient(135deg, #f5f7fa 0%, #ffffff 100%); background: linear-gradient(135deg, #f5f7fa 0%, #ffffff 100%);
padding: 16px; padding: 16px;
border-radius: 8px; border-radius: 8px;
@@ -589,7 +589,7 @@ const optionSelect = {
} }
/* 截止时间提醒 */ /* 截止时间提醒 */
.welfare-deadline { /deep/ .welfare-deadline {
background: linear-gradient(135deg, #fff7f7 0%, #fff 100%); background: linear-gradient(135deg, #fff7f7 0%, #fff 100%);
border-left: 3px solid var(--danger-color); border-left: 3px solid var(--danger-color);
padding: 12px 16px; padding: 12px 16px;
@@ -614,23 +614,23 @@ const optionSelect = {
} }
} }
.welfare-deadline i { /deep/ .welfare-deadline i {
margin-right: 8px; margin-right: 8px;
font-size: 16px; font-size: 16px;
} }
/* 选择提示 */ /* 选择提示 */
.welfare-notice { /deep/ .welfare-notice {
margin-bottom: 16px; margin-bottom: 16px;
} }
.welfare-notice .el-alert { /deep/ .welfare-notice .el-alert {
border-radius: 6px; border-radius: 6px;
padding: 12px 16px; padding: 12px 16px;
} }
/* 内容区域 */ /* 内容区域 */
.welfare-content { /deep/ .welfare-content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 16px; gap: 16px;
@@ -638,7 +638,7 @@ const optionSelect = {
} }
/* 项目信息卡片 */ /* 项目信息卡片 */
.welfare-info-card { /deep/ .welfare-info-card {
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06); box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
@@ -647,14 +647,14 @@ const optionSelect = {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
} }
.project-cover { /deep/ .project-cover {
height: 140px; height: 140px;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
margin: -10px -20px 16px; margin: -10px -20px 16px;
} }
.project-cover::after { /deep/ .project-cover::after {
content: ''; content: '';
position: absolute; position: absolute;
bottom: 0; bottom: 0;
@@ -664,13 +664,13 @@ const optionSelect = {
background: linear-gradient(to top, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)); background: linear-gradient(to top, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));
} }
.project-cover .el-image { /deep/ .project-cover .el-image {
width: 100%; width: 100%;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
} }
.welfare-info-header { /deep/ .welfare-info-header {
padding: 14px 16px; padding: 14px 16px;
border-bottom: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color);
font-size: 16px; font-size: 16px;
@@ -681,41 +681,41 @@ const optionSelect = {
background: linear-gradient(135deg, #f8f9fb 0%, #fff 100%); background: linear-gradient(135deg, #f8f9fb 0%, #fff 100%);
} }
.welfare-info-header i { /deep/ .welfare-info-header i {
margin-right: 8px; margin-right: 8px;
color: var(--primary-color); color: var(--primary-color);
font-size: 18px; font-size: 18px;
} }
.info-item { /deep/ .info-item {
display: flex; display: flex;
padding: 12px 16px; padding: 12px 16px;
border-bottom: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
} }
.info-item:hover { /deep/ .info-item:hover {
background: var(--primary-light); background: var(--primary-light);
} }
.info-item:last-child { /deep/ .info-item:last-child {
border-bottom: none; border-bottom: none;
} }
.info-label { /deep/ .info-label {
width: 100px; width: 100px;
color: var(--text-secondary); color: var(--text-secondary);
font-weight: 500; font-weight: 500;
flex-shrink: 0; flex-shrink: 0;
} }
.info-value { /deep/ .info-value {
flex: 1; flex: 1;
color: var(--text-primary); color: var(--text-primary);
} }
/* 福利选项卡片 */ /* 福利选项卡片 */
.welfare-options-card { /deep/ .welfare-options-card {
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06); box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
@@ -723,7 +723,7 @@ const optionSelect = {
overflow: hidden; overflow: hidden;
} }
.options-count { /deep/ .options-count {
font-size: 14px; font-size: 14px;
color: var(--text-light); color: var(--text-light);
font-weight: normal; font-weight: normal;
@@ -732,7 +732,7 @@ const optionSelect = {
} }
/* 选项网格 */ /* 选项网格 */
.welfare-options-grid { /deep/ .welfare-options-grid {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 16px; gap: 16px;
@@ -740,7 +740,7 @@ const optionSelect = {
} }
/* 选项卡片 */ /* 选项卡片 */
.welfare-option { /deep/ .welfare-option {
position: relative; position: relative;
border-radius: 6px; border-radius: 6px;
overflow: hidden; overflow: hidden;
@@ -755,17 +755,17 @@ const optionSelect = {
animation: fadeIn 0.6s ease-out forwards; animation: fadeIn 0.6s ease-out forwards;
} }
.welfare-option:hover { /deep/ .welfare-option:hover {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
transform: translateY(-2px); transform: translateY(-2px);
} }
.welfare-option.selected { /deep/ .welfare-option.selected {
border-color: var(--primary-color); border-color: var(--primary-color);
box-shadow: 0 4px 16px rgba(64, 158, 255, 0.15); box-shadow: 0 4px 16px rgba(64, 158, 255, 0.15);
} }
.welfare-option.selected::before { /deep/ .welfare-option.selected::before {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; top: 0;
@@ -777,7 +777,7 @@ const optionSelect = {
} }
/* 选项标签 */ /* 选项标签 */
.option-tag { /deep/ .option-tag {
position: absolute; position: absolute;
top: 8px; top: 8px;
right: 8px; right: 8px;
@@ -790,14 +790,14 @@ const optionSelect = {
} }
/* 选项图片 */ /* 选项图片 */
.option-image { /deep/ .option-image {
width: 100%; width: 100%;
height: 160px; height: 160px;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
} }
.option-image::after { /deep/ .option-image::after {
content: ''; content: '';
position: absolute; position: absolute;
bottom: 0; bottom: 0;
@@ -807,18 +807,18 @@ const optionSelect = {
background: linear-gradient(to top, rgba(0, 0, 0, 0.2), transparent); background: linear-gradient(to top, rgba(0, 0, 0, 0.2), transparent);
} }
.option-image .el-image { /deep/ .option-image .el-image {
width: 100%; width: 100%;
height: 100%; height: 100%;
transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
} }
.welfare-option:hover .option-image .el-image { /deep/ .welfare-option:hover .option-image .el-image {
transform: scale(1.06); transform: scale(1.06);
} }
/* 选项内容 */ /* 选项内容 */
.option-content { /deep/ .option-content {
padding: 12px 16px; padding: 12px 16px;
flex: 1; flex: 1;
display: flex; display: flex;
@@ -827,7 +827,7 @@ const optionSelect = {
background: linear-gradient(135deg, #fff 0%, #f8f9fb 100%); background: linear-gradient(135deg, #fff 0%, #f8f9fb 100%);
} }
.option-title { /deep/ .option-title {
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: 600;
color: var(--text-primary); color: var(--text-primary);
@@ -841,7 +841,7 @@ const optionSelect = {
padding-right: 24px; padding-right: 24px;
} }
.option-detail-btn { /deep/ .option-detail-btn {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
color: var(--primary-color); color: var(--primary-color);
@@ -854,41 +854,41 @@ const optionSelect = {
cursor: pointer; cursor: pointer;
} }
.option-detail-btn i { /deep/ .option-detail-btn i {
margin-right: 4px; margin-right: 4px;
font-size: 14px; font-size: 14px;
} }
.option-detail-btn:hover { /deep/ .option-detail-btn:hover {
background: #dceeff; background: #dceeff;
transform: translateX(4px); transform: translateX(4px);
} }
/* 选择控件 */ /* 选择控件 */
.option-radio { /deep/ .option-radio {
position: absolute; position: absolute;
top: 12px; top: 12px;
right: 12px; right: 12px;
} }
.option-stepper { /deep/ .option-stepper {
position: absolute; position: absolute;
bottom: 12px; bottom: 12px;
right: 12px; right: 12px;
} }
.option-stepper .el-input-number { /deep/ .option-stepper .el-input-number {
width: 100px; width: 100px;
} }
/* 底部按钮 */ /* 底部按钮 */
.welfare-footer { /deep/ .welfare-footer {
display: flex; display: flex;
justify-content: center; justify-content: center;
padding: 16px 0; padding: 16px 0;
} }
.welfare-footer .el-button { /deep/ .welfare-footer .el-button {
min-width: 140px; min-width: 140px;
height: 40px; height: 40px;
font-size: 15px; font-size: 15px;
@@ -897,21 +897,21 @@ const optionSelect = {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
} }
.welfare-footer .el-button:hover { /deep/ .welfare-footer .el-button:hover {
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(64, 158, 255, 0.25); box-shadow: 0 4px 12px rgba(64, 158, 255, 0.25);
} }
/* 确认弹窗样式 */ /* 确认弹窗样式 */
.welfare-confirm-dialog { /deep/ .welfare-confirm-dialog {
border-radius: 8px; border-radius: 8px;
} }
.confirm-content { /deep/ .confirm-content {
padding: 16px 0; padding: 16px 0;
} }
.confirm-section-title { /deep/ .confirm-section-title {
font-size: 15px; font-size: 15px;
color: var(--text-primary); color: var(--text-primary);
margin-bottom: 12px; margin-bottom: 12px;
@@ -920,7 +920,7 @@ const optionSelect = {
padding-left: 10px; padding-left: 10px;
} }
.confirm-section-title::before { /deep/ .confirm-section-title::before {
content: ''; content: '';
position: absolute; position: absolute;
left: 0; left: 0;
@@ -932,11 +932,11 @@ const optionSelect = {
border-radius: 2px; border-radius: 2px;
} }
.confirm-mobile-section { /deep/ .confirm-mobile-section {
margin-bottom: 20px; margin-bottom: 20px;
} }
.selected-items { /deep/ .selected-items {
background: #f8f9fb; background: #f8f9fb;
border-radius: 8px; border-radius: 8px;
padding: 16px; padding: 16px;
@@ -945,7 +945,7 @@ const optionSelect = {
overflow-y: auto; overflow-y: auto;
} }
.selected-item { /deep/ .selected-item {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -957,23 +957,23 @@ const optionSelect = {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
} }
.selected-item:last-child { /deep/ .selected-item:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.selected-item:hover { /deep/ .selected-item:hover {
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
} }
.selected-item-left { /deep/ .selected-item-left {
display: flex; display: flex;
align-items: center; align-items: center;
flex: 1; flex: 1;
min-width: 0; min-width: 0;
} }
.selected-item-image { /deep/ .selected-item-image {
width: 60px; width: 60px;
height: 60px; height: 60px;
border-radius: 8px; border-radius: 8px;
@@ -984,13 +984,13 @@ const optionSelect = {
border: 1px solid rgba(0, 0, 0, 0.06); border: 1px solid rgba(0, 0, 0, 0.06);
} }
.selected-item-image .el-image { /deep/ .selected-item-image .el-image {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: block; display: block;
} }
.image-slot { /deep/ .image-slot {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
@@ -1000,13 +1000,13 @@ const optionSelect = {
font-size: 20px; font-size: 20px;
} }
.selected-item-info { /deep/ .selected-item-info {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
padding: 4px 0; padding: 4px 0;
} }
.selected-item-name { /deep/ .selected-item-name {
color: var(--text-primary); color: var(--text-primary);
font-weight: 500; font-weight: 500;
font-size: 15px; font-size: 15px;
@@ -1017,25 +1017,25 @@ const optionSelect = {
white-space: nowrap; white-space: nowrap;
} }
.selected-item-quantity { /deep/ .selected-item-quantity {
color: var(--text-secondary); color: var(--text-secondary);
font-size: 13px; font-size: 13px;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.selected-item-quantity i { /deep/ .selected-item-quantity i {
margin-right: 4px; margin-right: 4px;
font-size: 14px; font-size: 14px;
color: var(--primary-color); color: var(--primary-color);
} }
.selected-item-right { /deep/ .selected-item-right {
flex-shrink: 0; flex-shrink: 0;
margin-left: 16px; margin-left: 16px;
} }
.selected-item-right .el-tag { /deep/ .selected-item-right .el-tag {
font-size: 13px; font-size: 13px;
font-weight: 600; font-weight: 600;
padding: 0 10px; padding: 0 10px;
@@ -1044,7 +1044,7 @@ const optionSelect = {
border-radius: 12px; border-radius: 12px;
} }
.confirm-total { /deep/ .confirm-total {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -1054,19 +1054,19 @@ const optionSelect = {
margin-top: 16px; margin-top: 16px;
} }
.total-label { /deep/ .total-label {
color: var(--text-secondary); color: var(--text-secondary);
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
} }
.total-value { /deep/ .total-value {
color: var(--primary-color); color: var(--primary-color);
font-weight: 600; font-weight: 600;
font-size: 15px; font-size: 15px;
} }
.confirm-warning { /deep/ .confirm-warning {
margin-top: 16px; margin-top: 16px;
padding: 10px 14px; padding: 10px 14px;
background: #fff7e6; background: #fff7e6;
@@ -1077,17 +1077,17 @@ const optionSelect = {
font-size: 13px; font-size: 13px;
} }
.confirm-warning.warning { /deep/ .confirm-warning.warning {
background: #fef0f0; background: #fef0f0;
color: var(--danger-color); color: var(--danger-color);
} }
.confirm-warning i { /deep/ .confirm-warning i {
margin-right: 6px; margin-right: 6px;
font-size: 16px; font-size: 16px;
} }
.deadline-info { /deep/ .deadline-info {
margin-top: 12px; margin-top: 12px;
padding: 10px 14px; padding: 10px 14px;
background: var(--primary-light); background: var(--primary-light);
@@ -1098,22 +1098,23 @@ const optionSelect = {
font-size: 13px; font-size: 13px;
} }
/deep/
.deadline-info i { .deadline-info i {
margin-right: 6px; margin-right: 6px;
font-size: 16px; font-size: 16px;
} }
/* 详情弹窗 */ /* 详情弹窗 */
.welfare-detail-dialog { /deep/ .welfare-detail-dialog {
border-radius: 8px; border-radius: 8px;
} }
.welfare-detail-popup { /deep/ .welfare-detail-popup {
padding: 16px; padding: 16px;
min-height: 200px; min-height: 200px;
} }
.welfare-detail-title { /deep/ .welfare-detail-title {
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
color: var(--text-primary); color: var(--text-primary);
@@ -1123,14 +1124,14 @@ const optionSelect = {
text-align: center; text-align: center;
} }
.welfare-detail-content { /deep/ .welfare-detail-content {
color: var(--text-secondary); color: var(--text-secondary);
line-height: 1.6; line-height: 1.6;
font-size: 14px; font-size: 14px;
} }
/* 加载状态 */ /* 加载状态 */
.welfare-loading { /deep/ .welfare-loading {
min-height: 300px; min-height: 300px;
display: flex; display: flex;
align-items: center; align-items: center;
@@ -1149,7 +1150,7 @@ const optionSelect = {
} }
} }
.welfare-select-container > * { /deep/ .welfare-select-container > * {
animation: fadeIn 0.5s ease-out forwards; animation: fadeIn 0.5s ease-out forwards;
} }
` `