Merge pull request 'khy1' (#87) from khy1 into master
All checks were successful
continuous-integration/drone/push Build is passing

Reviewed-on: #87
This commit is contained in:
root 2024-10-28 10:29:06 +08:00
commit 5235fae53c
15 changed files with 531 additions and 3 deletions

View File

@ -0,0 +1,21 @@
import request from '@/config/axios'
// 会员协议 VO
export interface PaidMemberAgreeVO {
id: number // 编号
content: string // 内容
}
// 会员协议 API
export const PaidMemberAgreeApi = {
// 查询会员协议
getPaidMemberAgree: async () => {
return await request.get({ url: `/member/paid-member-agree/get`})
},
// 保存会员协议
savePaidMemberAgree: async (data: PaidMemberAgreeVO) => {
return await request.put({ url: `/member/paid-member-agree/save`, data })
}
}

View File

@ -0,0 +1,96 @@
<template>
<ContentWrap>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="120px"
v-loading="formLoading"
>
<el-tabs>
<el-tab-pane label="付费会员协议">
<el-form-item prop="content">
<Editor v-model="formData.content" />
</el-form-item>
</el-tab-pane>
</el-tabs>
<div class="center-container">
<el-form-item>
<el-button type="primary" @click="onSubmit">保存</el-button>
</el-form-item>
</div>
</el-form>
</ContentWrap>
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { PaidMemberAgreeApi, PaidMemberAgreeVO } from '@/api/member/memberagree'
/** 会员协议 列表 */
defineOptions({ name: 'PaidMemberAgree' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const formLoading = ref(false) // 12
const formData = ref({
id: undefined,
content: undefined
})
const formRef = ref() // Ref
const formRules = reactive({})
/** 查询付费会员协议 */
const getPaidMemberAgree = async () => {
try {
const data = await PaidMemberAgreeApi.getPaidMemberAgree()
if(data == null){
return
}
formData.value = data
} finally {
}
}
const onSubmit = async () => {
//
if (!formRef) return
const valid = await formRef.value.validate()
if (!valid) return
//
formLoading.value = true
try {
const data = formData.value as unknown as PaidMemberAgreeVO
await PaidMemberAgreeApi.savePaidMemberAgree(data)
message.success(t('common.updateSuccess'))
dialogVisible.value = false
} finally {
formLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getPaidMemberAgree()
})
</script>
<style scoped>
.center-container {
display: flex;
justify-content: center; /* 水平居中 */
/* 如果需要垂直居中,并且父容器允许,可以尝试添加以下行(但通常不是必需的)*/
/* align-items: center; */
width: 100%; /* 或设置一个具体的宽度 */
/* 可能需要添加其他样式来确保容器没有其他默认的 padding 或 margin */
box-sizing: border-box;
}
</style>

View File

@ -102,7 +102,6 @@ watch(
if (!newVal) {
formData.value.paidMemberPrice = false; // openPaidMember false paidMemberPriceStatus
}
// newVal true v-if
},
{ immediate: true } //
);

View File

@ -72,6 +72,7 @@ public interface ErrorCodeConstants {
ErrorCode PAID_MEMBER_USER_NOT_OPEN = new ErrorCode(1_004_024_000, "会员未开通");
ErrorCode PAID_MEMBER_USER_PASSED = new ErrorCode(1_004_025_000, "会员已过期");
ErrorCode PAID_MEMBER_CONFIG_NOT_EXISTS = new ErrorCode(1_004_026_000, "付费会员配置不存在");
ErrorCode PAID_MEMBER_AGREE_NOT_EXISTS = new ErrorCode(1_004_027_000, "会员协议不存在");
}

View File

@ -0,0 +1,62 @@
package cn.iocoder.yudao.module.member.controller.admin.memberagree;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.member.controller.admin.memberagree.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.memberagree.PaidMemberAgreeDO;
import cn.iocoder.yudao.module.member.service.memberagree.PaidMemberAgreeService;
@Tag(name = "管理后台 - 会员协议")
@RestController
@RequestMapping("/member/paid-member-agree")
@Validated
public class PaidMemberAgreeController {
@Resource
private PaidMemberAgreeService paidMemberAgreeService;
@PutMapping("/save")
@Operation(summary = "更新会员协议")
@PreAuthorize("@ss.hasPermission('member:paid-member-agree:update')")
public CommonResult<Boolean> savePaidMemberAgree(@Valid @RequestBody PaidMemberAgreeSaveReqVO updateReqVO) {
paidMemberAgreeService.saveAgree(updateReqVO);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得会员协议")
@PreAuthorize("@ss.hasPermission('member:paid-member-agree:query')")
public CommonResult<PaidMemberAgreeRespVO> getPaidMemberAgree() {
PaidMemberAgreeDO paidMemberAgree = paidMemberAgreeService.getAgree();
return success(BeanUtils.toBean(paidMemberAgree, PaidMemberAgreeRespVO.class));
}
}

View File

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.member.controller.admin.memberagree.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 会员协议分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class PaidMemberAgreePageReqVO extends PageParam {
@Schema(description = "内容")
private String content;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.member.controller.admin.memberagree.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 会员协议 Response VO")
@Data
@ExcelIgnoreUnannotated
public class PaidMemberAgreeRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22863")
@ExcelProperty("编号")
private Integer id;
@Schema(description = "内容")
@ExcelProperty("内容")
private String content;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.member.controller.admin.memberagree.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 会员协议新增/修改 Request VO")
@Data
public class PaidMemberAgreeSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22863")
private Integer id;
@Schema(description = "内容")
private String content;
}

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.member.controller.app.memberagree;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
import cn.iocoder.yudao.module.member.controller.admin.memberagree.vo.PaidMemberAgreeRespVO;
import cn.iocoder.yudao.module.member.dal.dataobject.memberagree.PaidMemberAgreeDO;
import cn.iocoder.yudao.module.member.service.memberagree.PaidMemberAgreeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "用户 APP - 用户付费会员协议")
@RestController
@RequestMapping("/member/paid-member-agree")
@Validated
@Slf4j
public class AppPaidMemberAgreeController {
@Resource
private PaidMemberAgreeService paidMemberAgreeService;
@GetMapping("/get")
@Operation(summary = "获得会员协议")
@PreAuthenticated
public CommonResult<PaidMemberAgreeRespVO> getPaidMemberAgree() {
PaidMemberAgreeDO paidMemberAgree = paidMemberAgreeService.getAgree();
return success(BeanUtils.toBean(paidMemberAgree, PaidMemberAgreeRespVO.class));
}
}

View File

@ -6,6 +6,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "用户 APP - 用户个人信息 Response VO")
@ -47,9 +49,9 @@ public class AppMemberUserInfoRespVO {
@Schema(description = "会员名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "季卡")
private String cardName;
@Schema(description = "会员名称", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private String cardExpirationTime;
private LocalDateTime cardExpirationTime;
@Schema(description = "用户 App - 会员等级")
@Data

View File

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.member.convert.memberagree;
import cn.iocoder.yudao.module.member.controller.admin.memberagree.vo.PaidMemberAgreeSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.memberagree.PaidMemberAgreeDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 付费会员协议 Convert
*
*/
@Mapper
public interface PaidMemberAgreeConvert {
PaidMemberAgreeConvert INSTANCE = Mappers.getMapper(PaidMemberAgreeConvert.class);
PaidMemberAgreeDO convert(PaidMemberAgreeSaveReqVO bean);
}

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.member.dal.dataobject.memberagree;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 会员协议 DO
*
* @author 管理员
*/
@TableName("paid_member_agree")
@KeySequence("paid_member_agree_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PaidMemberAgreeDO extends BaseDO {
/**
* 编号
*/
@TableId
private Integer id;
/**
* 内容
*/
private String content;
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.member.dal.mysql.memberagree;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.member.dal.dataobject.memberagree.PaidMemberAgreeDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.member.controller.admin.memberagree.vo.*;
/**
* 会员协议 Mapper
*
* @author 管理员
*/
@Mapper
public interface PaidMemberAgreeMapper extends BaseMapperX<PaidMemberAgreeDO> {
default PageResult<PaidMemberAgreeDO> selectPage(PaidMemberAgreePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<PaidMemberAgreeDO>()
.eqIfPresent(PaidMemberAgreeDO::getContent, reqVO.getContent())
.betweenIfPresent(PaidMemberAgreeDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(PaidMemberAgreeDO::getId));
}
}

View File

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.member.service.memberagree;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.member.controller.admin.memberagree.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.memberagree.PaidMemberAgreeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* 会员协议 Service 接口
*
* @author 管理员
*/
public interface PaidMemberAgreeService {
/**
* 创建会员协议
*
* @param createReqVO 创建信息
* @return 编号
*/
Integer createPaidMemberAgree(@Valid PaidMemberAgreeSaveReqVO createReqVO);
/**
* 更新会员协议
*
* @param updateReqVO 更新信息
*/
void updatePaidMemberAgree(@Valid PaidMemberAgreeSaveReqVO updateReqVO);
/**
* 删除会员协议
*
* @param id 编号
*/
void deletePaidMemberAgree(Integer id);
/**
* 获得会员协议
*
* @param id 编号
* @return 会员协议
*/
PaidMemberAgreeDO getPaidMemberAgree(Integer id);
/**
* 获得会员协议分页
*
* @param pageReqVO 分页查询
* @return 会员协议分页
*/
PageResult<PaidMemberAgreeDO> getPaidMemberAgreePage(PaidMemberAgreePageReqVO pageReqVO);
PaidMemberAgreeDO getAgree();
void saveAgree(@Valid PaidMemberAgreeSaveReqVO saveReqVO);
}

View File

@ -0,0 +1,96 @@
package cn.iocoder.yudao.module.member.service.memberagree;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.member.convert.memberagree.PaidMemberAgreeConvert;
import cn.iocoder.yudao.module.member.convert.memberconfig.PaidMemberConfigConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.memberconfig.PaidMemberConfigDO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.member.controller.admin.memberagree.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.memberagree.PaidMemberAgreeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.dal.mysql.memberagree.PaidMemberAgreeMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
/**
* 会员协议 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class PaidMemberAgreeServiceImpl implements PaidMemberAgreeService {
@Resource
private PaidMemberAgreeMapper paidMemberAgreeMapper;
@Override
public Integer createPaidMemberAgree(PaidMemberAgreeSaveReqVO createReqVO) {
// 插入
PaidMemberAgreeDO paidMemberAgree = BeanUtils.toBean(createReqVO, PaidMemberAgreeDO.class);
paidMemberAgreeMapper.insert(paidMemberAgree);
// 返回
return paidMemberAgree.getId();
}
@Override
public void updatePaidMemberAgree(PaidMemberAgreeSaveReqVO updateReqVO) {
// 校验存在
validatePaidMemberAgreeExists(updateReqVO.getId());
// 更新
PaidMemberAgreeDO updateObj = BeanUtils.toBean(updateReqVO, PaidMemberAgreeDO.class);
paidMemberAgreeMapper.updateById(updateObj);
}
@Override
public void deletePaidMemberAgree(Integer id) {
// 校验存在
validatePaidMemberAgreeExists(id);
// 删除
paidMemberAgreeMapper.deleteById(id);
}
private void validatePaidMemberAgreeExists(Integer id) {
if (paidMemberAgreeMapper.selectById(id) == null) {
throw exception(PAID_MEMBER_AGREE_NOT_EXISTS);
}
}
@Override
public PaidMemberAgreeDO getPaidMemberAgree(Integer id) {
return paidMemberAgreeMapper.selectById(id);
}
@Override
public PageResult<PaidMemberAgreeDO> getPaidMemberAgreePage(PaidMemberAgreePageReqVO pageReqVO) {
return paidMemberAgreeMapper.selectPage(pageReqVO);
}
@Override
public PaidMemberAgreeDO getAgree() {
List<PaidMemberAgreeDO> list = paidMemberAgreeMapper.selectList();
return CollectionUtils.getFirst(list);
}
@Override
public void saveAgree(PaidMemberAgreeSaveReqVO saveReqVO) {
//存在则更新
PaidMemberAgreeDO paidMemberAgreeDO = getAgree();
if(paidMemberAgreeDO != null){
paidMemberAgreeMapper.updateById(PaidMemberAgreeConvert.INSTANCE.convert(saveReqVO).setId(paidMemberAgreeDO.getId()));
return;
}
//不存在则进行插入
paidMemberAgreeMapper.insert(PaidMemberAgreeConvert.INSTANCE.convert(saveReqVO));
}
}