diff --git a/.run/ruoyi-debug.run.xml b/.run/ruoyi-debug.run.xml new file mode 100644 index 0000000..0e8e85e --- /dev/null +++ b/.run/ruoyi-debug.run.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/.run/ruoyi-monitor-admin.run.xml b/.run/ruoyi-monitor-admin.run.xml new file mode 100644 index 0000000..beaf7c8 --- /dev/null +++ b/.run/ruoyi-monitor-admin.run.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/.run/ruoyi-server.run.xml b/.run/ruoyi-server.run.xml new file mode 100644 index 0000000..10116af --- /dev/null +++ b/.run/ruoyi-server.run.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/.run/ruoyi-snailjob-server.run.xml b/.run/ruoyi-snailjob-server.run.xml new file mode 100644 index 0000000..38ab774 --- /dev/null +++ b/.run/ruoyi-snailjob-server.run.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/controller/CompositePeriodicPolicyController.java b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/controller/CompositePeriodicPolicyController.java new file mode 100644 index 0000000..a68beae --- /dev/null +++ b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/controller/CompositePeriodicPolicyController.java @@ -0,0 +1,84 @@ +package org.dromara.system.controller; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.system.domain.bo.CompositePeriodicPolicyBo; +import org.dromara.system.service.IPeriodicPolicyCompositeService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 组合分期方案控制器 - 一次性保存分期方案、分期政策、付款明细 + * + * @author System + * @date 2025-01-15 + */ +@Slf4j +@RestController +@RequestMapping("/system/composite/periodicpolicy") +@RequiredArgsConstructor +public class CompositePeriodicPolicyController { + + private final IPeriodicPolicyCompositeService compositeService; + + /** + * 组合保存分期方案及其关联数据 + * + * @param compositeBo 组合分期方案业务对象 + * @return 保存结果 + */ + @Log(title = "组合分期方案", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/save") + public R saveComposite(@Validated(AddGroup.class) @RequestBody CompositePeriodicPolicyBo compositeBo) { + try { + log.info("开始组合保存分期方案数据"); + String schemeId = compositeService.saveCompositePeriodicPolicy( + compositeBo.getPeriodicpolicy(), + compositeBo.getPolicies(), + compositeBo.getPaymentDetails() + ); + log.info("组合保存分期方案数据成功,方案ID: {}", schemeId); + return R.ok(schemeId); + } catch (Exception e) { + log.error("组合保存分期方案数据失败", e); + return R.fail("保存失败: " + e.getMessage()); + } + } + + /** + * 组合更新分期方案及其关联数据 + * + * @param compositeBo 组合分期方案业务对象 + * @return 更新结果 + */ + @Log(title = "组合分期方案", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/update") + public R updateComposite(@Validated(EditGroup.class) @RequestBody CompositePeriodicPolicyBo compositeBo) { + try { + log.info("开始组合更新分期方案数据"); + boolean success = compositeService.updateCompositePeriodicPolicy( + compositeBo.getPeriodicpolicy(), + compositeBo.getPolicies(), + compositeBo.getPaymentDetails() + ); + if (success) { + log.info("组合更新分期方案数据成功"); + return R.ok(); + } else { + log.error("组合更新分期方案数据失败"); + return R.fail("更新失败"); + } + } catch (Exception e) { + log.error("组合更新分期方案数据失败", e); + return R.fail("更新失败: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/TPolicy.java b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/TPolicy.java index 0dd1ff8..1ae2cd4 100644 --- a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/TPolicy.java +++ b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/TPolicy.java @@ -99,8 +99,8 @@ public class TPolicy extends TenantEntity { /** * 首付比例 */ - @TableField("downPaymentRatio") - private BigDecimal downPaymentRatio; + @TableField("down_payment_ratio") + private String downPaymentRatio; /** * 删除标志(0存在 1删除) diff --git a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/bo/CompositePeriodicPolicyBo.java b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/bo/CompositePeriodicPolicyBo.java new file mode 100644 index 0000000..74af555 --- /dev/null +++ b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/bo/CompositePeriodicPolicyBo.java @@ -0,0 +1,44 @@ +package org.dromara.system.domain.bo; + +import lombok.Data; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import java.util.List; + +/** + * 组合分期方案业务对象 - 用于一次性保存分期方案、分期政策、付款明细 + * + * @author System + * @date 2025-01-15 + */ +@Data +public class CompositePeriodicPolicyBo { + + /** + * 分期方案信息 + */ + @Valid + @NotNull(message = "分期方案信息不能为空", groups = {AddGroup.class, EditGroup.class}) + private TPeriodicpolicyBo periodicpolicy; + + /** + * 分期政策列表 + */ + @Valid + private List policies; + + /** + * 付款明细列表(按政策分组) + * 每个元素对应一个政策的付款明细列表 + */ + @Valid + private List> paymentDetails; + + /** + * 是否为编辑模式 + */ + private boolean editMode = false; +} \ No newline at end of file diff --git a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/bo/TPolicyBo.java b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/bo/TPolicyBo.java index 21486ae..b102273 100644 --- a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/bo/TPolicyBo.java +++ b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/bo/TPolicyBo.java @@ -147,6 +147,6 @@ public class TPolicyBo extends BaseEntity { /** * 首付比例 */ - private BigDecimal downPaymentRatio; + private String downPaymentRatio; } diff --git a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/vo/TPolicyVo.java b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/vo/TPolicyVo.java index 899144b..5f22a54 100644 --- a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/vo/TPolicyVo.java +++ b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/domain/vo/TPolicyVo.java @@ -120,7 +120,7 @@ public class TPolicyVo implements Serializable { * 首付比例 */ @ExcelProperty(value = "首付比例") - private BigDecimal downPaymentRatio; + private String downPaymentRatio; } diff --git a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/service/IPeriodicPolicyCompositeService.java b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/service/IPeriodicPolicyCompositeService.java new file mode 100644 index 0000000..5dc5a23 --- /dev/null +++ b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/service/IPeriodicPolicyCompositeService.java @@ -0,0 +1,40 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.bo.TPeriodicpolicyBo; +import org.dromara.system.domain.bo.TPolicyBo; +import org.dromara.system.domain.bo.TPaymentDetailsBo; + +import java.util.List; + +/** + * 分期方案组合服务接口 + * + * @author System + * @date 2025-01-15 + */ +public interface IPeriodicPolicyCompositeService { + + /** + * 组合保存分期方案及其关联的分期政策和付款明细 + * + * @param periodicpolicyBo 分期方案业务对象 + * @param policyBos 分期政策业务对象列表 + * @param paymentDetailsBos 付款明细业务对象列表(按政策分组) + * @return 保存成功的分期方案ID + */ + String saveCompositePeriodicPolicy(TPeriodicpolicyBo periodicpolicyBo, + List policyBos, + List> paymentDetailsBos); + + /** + * 组合更新分期方案及其关联的分期政策和付款明细 + * + * @param periodicpolicyBo 分期方案业务对象 + * @param policyBos 分期政策业务对象列表 + * @param paymentDetailsBos 付款明细业务对象列表(按政策分组) + * @return 是否更新成功 + */ + boolean updateCompositePeriodicPolicy(TPeriodicpolicyBo periodicpolicyBo, + List policyBos, + List> paymentDetailsBos); +} \ No newline at end of file diff --git a/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/service/impl/PeriodicPolicyCompositeServiceImpl.java b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/service/impl/PeriodicPolicyCompositeServiceImpl.java new file mode 100644 index 0000000..15feb8e --- /dev/null +++ b/LCXiaoguan-modules/LCXiaoguan-businessdata/src/main/java/org/dromara/system/service/impl/PeriodicPolicyCompositeServiceImpl.java @@ -0,0 +1,186 @@ +package org.dromara.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.system.domain.bo.TPeriodicpolicyBo; +import org.dromara.system.domain.bo.TPolicyBo; +import org.dromara.system.domain.bo.TPaymentDetailsBo; +import org.dromara.system.domain.TPeriodicpolicy; +import org.dromara.system.domain.TPolicy; +import org.dromara.system.domain.TPaymentDetails; +import org.dromara.system.mapper.TPeriodicpolicyMapper; +import org.dromara.system.mapper.TPolicyMapper; +import org.dromara.system.mapper.TPaymentDetailsMapper; +import org.dromara.system.service.IPeriodicPolicyCompositeService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 分期方案组合服务 - 将分期方案、分期政策、付款明细放在同一个事务下保存 + * + * @author System + * @date 2025-01-15 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PeriodicPolicyCompositeServiceImpl implements IPeriodicPolicyCompositeService { + + private final TPeriodicpolicyMapper periodicpolicyMapper; + private final TPolicyMapper policyMapper; + private final TPaymentDetailsMapper paymentDetailsMapper; + + /** + * 组合保存分期方案及其关联的分期政策和付款明细 + * + * @param periodicpolicyBo 分期方案业务对象 + * @param policyBos 分期政策业务对象列表 + * @param paymentDetailsBos 付款明细业务对象列表(按政策分组) + * @return 保存成功的分期方案ID + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String saveCompositePeriodicPolicy(TPeriodicpolicyBo periodicpolicyBo, + List policyBos, + List> paymentDetailsBos) { + try { + log.info("开始组合保存分期方案数据"); + + // 1. 保存分期方案 + TPeriodicpolicy periodicpolicy = MapstructUtils.convert(periodicpolicyBo, TPeriodicpolicy.class); + // 设置当前登录用户为创建人 + periodicpolicy.setCreator(LoginHelper.getUsername()); + periodicpolicyMapper.insert(periodicpolicy); + String schemeId = periodicpolicy.getId(); + log.info("分期方案保存成功,ID: {}", schemeId); + + // 2. 保存分期政策及其付款明细 + if (policyBos != null && !policyBos.isEmpty()) { + for (int i = 0; i < policyBos.size(); i++) { + TPolicyBo policyBo = policyBos.get(i); + policyBo.setPeriodicPolicyId(schemeId); // 设置关联的分期方案ID + + TPolicy policy = MapstructUtils.convert(policyBo, TPolicy.class); + // 设置当前登录用户为创建人 + policy.setCreator(LoginHelper.getUsername()); + policyMapper.insert(policy); + String policyId = policy.getId(); + log.info("分期政策保存成功,ID: {}", policyId); + + // 3. 保存该政策的付款明细 + if (paymentDetailsBos != null && i < paymentDetailsBos.size()) { + List detailsForPolicy = paymentDetailsBos.get(i); + if (detailsForPolicy != null && !detailsForPolicy.isEmpty()) { + for (TPaymentDetailsBo paymentDetailsBo : detailsForPolicy) { + paymentDetailsBo.setPolicyid(policyId); // 设置关联的政策ID + TPaymentDetails paymentDetails = MapstructUtils.convert(paymentDetailsBo, TPaymentDetails.class); + // 设置当前登录用户为创建人 + paymentDetails.setCreator(LoginHelper.getUsername()); + // 设置创建人ID + paymentDetails.setCreatorid(LoginHelper.getUserIdStr()); + paymentDetailsMapper.insert(paymentDetails); + } + log.info("政策 {} 的付款明细保存成功,共 {} 条", policyId, detailsForPolicy.size()); + } + } + } + } + + log.info("组合保存分期方案数据完成,方案ID: {}", schemeId); + return schemeId; + + } catch (Exception e) { + log.error("组合保存分期方案数据失败", e); + throw new RuntimeException("保存分期方案数据失败: " + e.getMessage(), e); + } + } + + /** + * 组合更新分期方案及其关联的分期政策和付款明细 + * + * @param periodicpolicyBo 分期方案业务对象 + * @param policyBos 分期政策业务对象列表 + * @param paymentDetailsBos 付款明细业务对象列表(按政策分组) + * @return 是否更新成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateCompositePeriodicPolicy(TPeriodicpolicyBo periodicpolicyBo, + List policyBos, + List> paymentDetailsBos) { + try { + log.info("开始组合更新分期方案数据,方案ID: {}", periodicpolicyBo.getId()); + + String schemeId = periodicpolicyBo.getId(); + + // 1. 更新分期方案 + TPeriodicpolicy periodicpolicy = MapstructUtils.convert(periodicpolicyBo, TPeriodicpolicy.class); + // 设置当前登录用户为创建人 + periodicpolicy.setCreator(LoginHelper.getUsername()); + periodicpolicyMapper.updateById(periodicpolicy); + log.info("分期方案更新成功,ID: {}", schemeId); + + // 2. 删除原有的分期政策和付款明细 + // 先获取关联的政策ID列表 + List policyIds = policyMapper.selectObjs(Wrappers.lambdaQuery() + .eq(TPolicy::getPeriodicPolicyId, schemeId) + .select(TPolicy::getId)); + + // 如果有政策ID,才删除对应的付款明细 + if (policyIds != null && !policyIds.isEmpty()) { + paymentDetailsMapper.delete(Wrappers.lambdaQuery() + .in(TPaymentDetails::getPolicyid, policyIds)); + } + + // 再删除分期政策 + policyMapper.delete(Wrappers.lambdaQuery() + .eq(TPolicy::getPeriodicPolicyId, schemeId)); + + log.info("原有的分期政策和付款明细已删除"); + + // 3. 重新保存分期政策及其付款明细 + if (policyBos != null && !policyBos.isEmpty()) { + for (int i = 0; i < policyBos.size(); i++) { + TPolicyBo policyBo = policyBos.get(i); + policyBo.setPeriodicPolicyId(schemeId); + + TPolicy policy = MapstructUtils.convert(policyBo, TPolicy.class); + // 设置当前登录用户为创建人 + policy.setCreator(LoginHelper.getUsername()); + policyMapper.insert(policy); + String policyId = policy.getId(); + + // 保存该政策的付款明细 + if (paymentDetailsBos != null && i < paymentDetailsBos.size()) { + List detailsForPolicy = paymentDetailsBos.get(i); + if (detailsForPolicy != null && !detailsForPolicy.isEmpty()) { + for (TPaymentDetailsBo paymentDetailsBo : detailsForPolicy) { + paymentDetailsBo.setPolicyid(policyId); + TPaymentDetails paymentDetails = MapstructUtils.convert(paymentDetailsBo, TPaymentDetails.class); + // 设置当前登录用户为创建人 + paymentDetails.setCreator(LoginHelper.getUsername()); + // 设置创建人ID + paymentDetails.setCreatorid(LoginHelper.getUserIdStr()); + paymentDetailsMapper.insert(paymentDetails); + } + log.info("政策 {} 的付款明细更新成功,共 {} 条", policyId, detailsForPolicy.size()); + } + } + } + } + + log.info("组合更新分期方案数据完成,方案ID: {}", schemeId); + return true; + + } catch (Exception e) { + log.error("组合更新分期方案数据失败", e); + throw new RuntimeException("更新分期方案数据失败: " + e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/LCXiaoguan-ui/src/api/system/installmentpolicy/index.ts b/LCXiaoguan-ui/src/api/system/installmentpolicy/index.ts new file mode 100644 index 0000000..c67527a --- /dev/null +++ b/LCXiaoguan-ui/src/api/system/installmentpolicy/index.ts @@ -0,0 +1,69 @@ +import type { InstallmentpolicyVO, InstallmentpolicyForm } from './types' +import request from '@/utils/request' + +// 分期政策相关API +export function listInstallmentpolicy(params?: any): Promise<{ rows: InstallmentpolicyVO[]; total: number }> { + return request({ + url: '/system/installmentpolicy/list', + method: 'get', + params: params + }) +} + +export function getInstallmentpolicy(id: string | number): Promise { + return request({ + url: '/system/installmentpolicy/' + id, + method: 'get' + }) +} + +export function addInstallmentpolicy(data: InstallmentpolicyForm): Promise { + return request({ + url: '/system/installmentpolicy', + method: 'post', + data: data + }) +} + +export function updateInstallmentpolicy(data: InstallmentpolicyForm): Promise { + return request({ + url: '/system/installmentpolicy', + method: 'put', + data: data + }) +} + +export function delInstallmentpolicy(ids: string | number | (string | number)[]): Promise { + return request({ + url: '/system/installmentpolicy/' + ids, + method: 'delete' + }) +} + +// 组合保存分期政策方案、政策和付款明细 +export function saveCompositeInstallmentPolicy(data: any): Promise { + return request({ + url: '/system/composite/installmentpolicy/save', + method: 'post', + data: data + }) +} + +// 组合更新分期政策方案、政策和付款明细 +export function updateCompositeInstallmentPolicy(data: any): Promise { + return request({ + url: '/system/composite/installmentpolicy/update', + method: 'put', + data: data + }) +} + +// 导出分期政策数据 +export function exportInstallmentpolicy(params?: any): Promise { + return request({ + url: '/system/installmentpolicy/export', + method: 'post', + params: params, + responseType: 'blob' + }) +} \ No newline at end of file diff --git a/LCXiaoguan-ui/src/api/system/installmentpolicy/types.ts b/LCXiaoguan-ui/src/api/system/installmentpolicy/types.ts new file mode 100644 index 0000000..a5e15cf --- /dev/null +++ b/LCXiaoguan-ui/src/api/system/installmentpolicy/types.ts @@ -0,0 +1,27 @@ +// 分期政策VO +export interface InstallmentpolicyVO { + id?: string | number + schemeName?: string + installments?: string[] + fillingInstruction?: string + effectiveDate?: string + invalidDate?: string + creator?: string + createDate?: string + status?: string + policies?: any[] +} + +// 分期政策表单 +export interface InstallmentpolicyForm { + id?: string | number + schemeName?: string + installments?: string[] + fillingInstruction?: string + effectiveDate?: string + invalidDate?: string + creator?: string + createDate?: string + status?: string + policies?: any[] +} \ No newline at end of file diff --git a/LCXiaoguan-ui/src/api/system/periodicpolicy/index.ts b/LCXiaoguan-ui/src/api/system/periodicpolicy/index.ts index 89b6e3d..8431e75 100644 --- a/LCXiaoguan-ui/src/api/system/periodicpolicy/index.ts +++ b/LCXiaoguan-ui/src/api/system/periodicpolicy/index.ts @@ -39,3 +39,21 @@ export function delPeriodicpolicy(ids: string | number | (string | number)[]): P method: 'delete' }) } + +// 组合保存分期方案、政策和付款明细 +export function saveCompositePeriodicPolicy(data: any): Promise { + return request({ + url: '/system/composite/periodicpolicy/save', + method: 'post', + data: data + }) +} + +// 组合更新分期方案、政策和付款明细 +export function updateCompositePeriodicPolicy(data: any): Promise { + return request({ + url: '/system/composite/periodicpolicy/update', + method: 'put', + data: data + }) +} diff --git a/LCXiaoguan-ui/src/router/index.ts b/LCXiaoguan-ui/src/router/index.ts index 094b6f0..ca6812f 100644 --- a/LCXiaoguan-ui/src/router/index.ts +++ b/LCXiaoguan-ui/src/router/index.ts @@ -123,12 +123,31 @@ export const constantRoutes: RouteRecordRaw[] = [ children: [ { path: 'add', - component: () => import('@/views/system/policy/add/index.vue'), + component: () => import('@/views/system/periodicpolicy/add/index.vue'), name: 'AddPolicy', meta: { title: '新增首付分期政策', activeMenu: '/system/policy' } } ] }, + { + path: '/system/periodicpolicy/installment', + component: Layout, + hidden: true, + children: [ + { + path: '', + component: () => import('@/views/system/periodicpolicy/installment/index.vue'), + name: 'InstallmentPolicy', + meta: { title: '分期政策管理', activeMenu: '/system/periodicpolicy' } + }, + { + path: 'add', + component: () => import('@/views/system/periodicpolicy/installment/add/index.vue'), + name: 'AddInstallmentPolicy', + meta: { title: '新增分期政策方案', activeMenu: '/system/periodicpolicy' } + } + ] + }, { path: '/system/project', component: Layout, diff --git a/LCXiaoguan-ui/src/views/system/periodicpolicy/add/index.vue b/LCXiaoguan-ui/src/views/system/periodicpolicy/add/index.vue index 36f5855..5329643 100644 --- a/LCXiaoguan-ui/src/views/system/periodicpolicy/add/index.vue +++ b/LCXiaoguan-ui/src/views/system/periodicpolicy/add/index.vue @@ -39,6 +39,7 @@
+
关联首付分期政策 @@ -50,7 +51,7 @@ :data="policyTableData" border style="width: 100%" - :header-cell-style="{ background: '#f5f7fa', color: '#606266', fontWeight: 'bold' }" + :header-cell-style="{ color: '#606266', fontWeight: 'normal' }" > @@ -111,10 +112,16 @@ - - - - + + + + + + + + + + @@ -168,14 +175,6 @@ - - - - - - - - @@ -197,39 +196,39 @@
- + - + - + @@ -253,8 +252,10 @@
@@ -264,10 +265,14 @@ - + + + + + - + @@ -276,21 +281,30 @@ + + + + + + + + + + + + - - - - - - + 非贷款类房款 - + + + @@ -317,10 +331,11 @@ @@ -332,812 +347,412 @@ diff --git a/LCXiaoguan-ui/src/views/system/periodicpolicy/index.vue b/LCXiaoguan-ui/src/views/system/periodicpolicy/index.vue index 2abf1b8..4fc30b5 100644 --- a/LCXiaoguan-ui/src/views/system/periodicpolicy/index.vue +++ b/LCXiaoguan-ui/src/views/system/periodicpolicy/index.vue @@ -190,12 +190,21 @@ - - + + @@ -219,6 +228,7 @@ import { ref, computed, onMounted, onUnmounted } from 'vue'; import { useRouter } from 'vue-router'; import { ElMessage } from 'element-plus'; +import { Edit, Delete, Document } from '@element-plus/icons-vue'; import { listProject } from '@/api/system/project'; import { listPeriodicpolicy } from '@/api/system/periodicpolicy'; @@ -605,8 +615,81 @@ const handleEdit = (row) => { // 处理分期政策编辑跳转 const handleEditPolicy = (row) => { - // 这里可以添加分期政策的编辑逻辑 console.log('编辑分期政策:', row); + + if (!row.id) { + console.error('缺少必要的ID参数:', row); + ElMessage.error('无法编辑:缺少分期方案ID'); + return; + } + + // 跳转到分期政策编辑页面 + const queryString = new URLSearchParams({ + id: String(row.id), + schemeType: row.schemeType || 'policy', + installments: row.projGuid || '' + }).toString(); + + window.location.href = `/periodicpolicy/add?${queryString}`; +}; + +// 处理分期政策按钮跳转 +const handleInstallmentPolicy = (row) => { + console.log('跳转到分期政策管理:', row); + + if (!row.id) { + console.error('缺少必要的ID参数:', row); + ElMessage.error('无法跳转:缺少分期方案ID'); + return; + } + + // 跳转到分期政策管理页面 + const queryString = new URLSearchParams({ + schemeId: String(row.id), + schemeName: row.schemeName || '', + projectId: row.projGuid || '' + }).toString(); + + window.location.href = `/system/periodicpolicy/installment?${queryString}`; +}; + +// 处理删除分期方案 +const handleDelete = async (row) => { + if (!row.id) { + console.error('缺少必要的ID参数:', row); + ElMessage.error('无法删除:缺少分期方案ID'); + return; + } + + try { + // 确认删除 + await ElMessageBox.confirm( + `确定要删除分期方案"${row.schemeName || row.schemeName || '未命名方案'}"吗?`, + '删除确认', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + } + ); + + // 执行删除操作 + loading.value = true; + const { delPeriodicpolicy } = await import('@/api/system/periodicpolicy'); + await delPeriodicpolicy(row.id); + + ElMessage.success('删除成功'); + + // 重新加载数据 + await fetchTableData(); + } catch (error) { + if (error !== 'cancel') { + console.error('删除分期方案失败:', error); + ElMessage.error(error?.response?.data?.message || '删除失败,请稍后重试'); + } + } finally { + loading.value = false; + } }; diff --git a/LCXiaoguan-ui/src/views/system/periodicpolicy/installment/add/index.vue b/LCXiaoguan-ui/src/views/system/periodicpolicy/installment/add/index.vue new file mode 100644 index 0000000..820dc8e --- /dev/null +++ b/LCXiaoguan-ui/src/views/system/periodicpolicy/installment/add/index.vue @@ -0,0 +1,982 @@ + + + + + \ No newline at end of file diff --git a/LCXiaoguan-ui/src/views/system/periodicpolicy/installment/index.vue b/LCXiaoguan-ui/src/views/system/periodicpolicy/installment/index.vue new file mode 100644 index 0000000..933fc01 --- /dev/null +++ b/LCXiaoguan-ui/src/views/system/periodicpolicy/installment/index.vue @@ -0,0 +1,297 @@ + + + + + \ No newline at end of file diff --git a/LCXiaoguan-ui/src/views/system/policy/index.vue b/LCXiaoguan-ui/src/views/system/policy/index.vue index cbed4c9..1995ec8 100644 --- a/LCXiaoguan-ui/src/views/system/policy/index.vue +++ b/LCXiaoguan-ui/src/views/system/policy/index.vue @@ -332,6 +332,8 @@ const handleExport = () => { ); }; + + onMounted(() => { getList(); }); diff --git a/script/sql/分期方案初始化脚本.sql b/script/sql/分期方案初始化脚本.sql index 405d8e6..c6e2aa8 100644 --- a/script/sql/分期方案初始化脚本.sql +++ b/script/sql/分期方案初始化脚本.sql @@ -81,7 +81,7 @@ CREATE TABLE t_policy ( `description` TEXT COMMENT '说明', `category` VARCHAR ( 128 ) NOT NULL COMMENT '类别', `payment_type` VARCHAR ( 128 ) NOT NULL COMMENT '付款方式类型', - `down_payment_ratio` DECIMAL (5,2) DEFAULT NULL COMMENT '首付比例(%)', + `down_payment_ratio` VARCHAR(20) DEFAULT NULL COMMENT '首付比例(%)', `payment_method` VARCHAR ( 50 ) DEFAULT NULL COMMENT '付款方式', `policy_type` VARCHAR ( 50 ) DEFAULT NULL COMMENT '政策类型', `tenant_id` VARCHAR ( 20 ) DEFAULT '000000' COMMENT '租户编号',