mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	Merge branch 'feature/auth' of https://gitee.com/zhijiantianya/ruoyi-vue-pro
Conflicts: README.md
This commit is contained in:
		| @@ -256,9 +256,9 @@ _前端基于 crmeb uniapp 经过授权重构,优化代码实现,接入芋 | ||||
|  | ||||
| | 框架                                                                                          | 说明               | 版本          | 学习指南                                                           | | ||||
| |---------------------------------------------------------------------------------------------|------------------|-------------|----------------------------------------------------------------| | ||||
| | [Spring Boot](https://spring.io/projects/spring-boot)                                       | 应用开发框架           | 2.7.14      | [文档](https://github.com/YunaiV/SpringBoot-Labs)                | | ||||
| | [Spring Boot](https://spring.io/projects/spring-boot)                                       | 应用开发框架           | 2.7.15      | [文档](https://github.com/YunaiV/SpringBoot-Labs)                | | ||||
| | [MySQL](https://www.mysql.com/cn/)                                                          | 数据库服务器           | 5.7 / 8.0+  |                                                                | | ||||
| | [Druid](https://github.com/alibaba/druid)                                                   | JDBC 连接池、监控组件    | 1.2.18      | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | | ||||
| | [Druid](https://github.com/alibaba/druid)                                                   | JDBC 连接池、监控组件    | 1.2.19      | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | | ||||
| | [MyBatis Plus](https://mp.baomidou.com/)                                                    | MyBatis 增强工具包    | 3.5.3.1     | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao)         | | ||||
| | [Dynamic Datasource](https://dynamic-datasource.com/)                                       | 动态数据源            | 3.6.1       | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | | ||||
| | [Redis](https://redis.io/)                                                                  | key-value 数据库    | 5.0 / 6.0   |                                                                | | ||||
|   | ||||
							
								
								
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -40,7 +40,7 @@ | ||||
|         <flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version> | ||||
|         <!-- 看看咋放到 bom 里 --> | ||||
|         <lombok.version>1.18.28</lombok.version> | ||||
|         <spring.boot.version>2.7.14</spring.boot.version> | ||||
|         <spring.boot.version>2.7.15</spring.boot.version> | ||||
|         <mapstruct.version>1.5.5.Final</mapstruct.version> | ||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
|     </properties> | ||||
|   | ||||
| @@ -17,13 +17,13 @@ | ||||
|         <revision>1.8.1-snapshot</revision> | ||||
|         <flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version> | ||||
|         <!-- 统一依赖管理 --> | ||||
|         <spring.boot.version>2.7.14</spring.boot.version> | ||||
|         <spring.boot.version>2.7.15</spring.boot.version> | ||||
|         <!-- Web 相关 --> | ||||
|         <springdoc.version>1.7.0</springdoc.version> | ||||
|         <knife4j.version>4.3.0</knife4j.version> | ||||
|         <servlet.versoin>2.5</servlet.versoin> | ||||
|         <!-- DB 相关 --> | ||||
|         <druid.version>1.2.18</druid.version> | ||||
|         <druid.version>1.2.19</druid.version> | ||||
|         <mybatis-plus.version>3.5.3.2</mybatis-plus.version> | ||||
|         <mybatis-plus-generator.version>3.5.3.2</mybatis-plus-generator.version> | ||||
|         <dynamic-datasource.version>3.6.1</dynamic-datasource.version> | ||||
| @@ -44,11 +44,11 @@ | ||||
|         <!-- Bpm 工作流相关 --> | ||||
|         <flowable.version>6.8.0</flowable.version> | ||||
|         <!-- 工具类相关 --> | ||||
|         <captcha-plus.version>1.0.6</captcha-plus.version> | ||||
|         <captcha-plus.version>1.0.7</captcha-plus.version> | ||||
|         <jsoup.version>1.15.4</jsoup.version> | ||||
|         <lombok.version>1.18.28</lombok.version> | ||||
|         <mapstruct.version>1.5.5.Final</mapstruct.version> | ||||
|         <hutool.version>5.8.20</hutool.version> | ||||
|         <hutool.version>5.8.21</hutool.version> | ||||
|         <easyexcel.verion>3.3.2</easyexcel.verion> | ||||
|         <velocity.version>2.3</velocity.version> | ||||
|         <screw.version>1.0.5</screw.version> | ||||
| @@ -64,12 +64,12 @@ | ||||
|         <okio.version>3.0.0</okio.version> | ||||
|         <okhttp3.version>4.10.0</okhttp3.version> | ||||
|         <commons-io.version>2.11.0</commons-io.version> | ||||
|         <minio.version>8.5.4</minio.version> | ||||
|         <minio.version>8.5.5</minio.version> | ||||
|         <aliyun-java-sdk-core.version>4.6.3</aliyun-java-sdk-core.version> | ||||
|         <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version> | ||||
|         <tencentcloud-sdk-java.version>3.1.758</tencentcloud-sdk-java.version> | ||||
|         <justauth.version>1.0.3</justauth.version> | ||||
|         <jimureport.version>1.5.8</jimureport.version> | ||||
|         <justauth.version>1.0.4</justauth.version> | ||||
|         <jimureport.version>1.6.1</jimureport.version> | ||||
|         <xercesImpl.version>2.12.2</xercesImpl.version> | ||||
|         <weixin-java.version>4.5.0</weixin-java.version> | ||||
|     </properties> | ||||
|   | ||||
| @@ -21,7 +21,7 @@ | ||||
|         <maven.compiler.target>8</maven.compiler.target> | ||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
|         <!-- 统一依赖管理 --> | ||||
|         <spring.boot.version>2.7.14</spring.boot.version> | ||||
|         <spring.boot.version>2.7.15</spring.boot.version> | ||||
|     </properties> | ||||
|  | ||||
|     <dependencyManagement> | ||||
| @@ -52,7 +52,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>cn.hutool</groupId> | ||||
|             <artifactId>hutool-all</artifactId> | ||||
|             <version>5.8.20</version> | ||||
|             <version>5.8.21</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|   | ||||
| @@ -21,7 +21,7 @@ | ||||
|         <maven.compiler.target>8</maven.compiler.target> | ||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
|         <!-- 统一依赖管理 --> | ||||
|         <spring.boot.version>2.7.14</spring.boot.version> | ||||
|         <spring.boot.version>2.7.15</spring.boot.version> | ||||
|     </properties> | ||||
|  | ||||
|     <dependencyManagement> | ||||
| @@ -52,7 +52,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>cn.hutool</groupId> | ||||
|             <artifactId>hutool-all</artifactId> | ||||
|             <version>5.8.20</version> | ||||
|             <version>5.8.21</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|   | ||||
| @@ -3,27 +3,27 @@ import { defHttp } from '@/utils/http/axios' | ||||
|  | ||||
| // 查询${table.classComment}列表 | ||||
| export function get${simpleClassName}Page(params) { | ||||
|     return defHttp.get({ url: '${baseURL}/page', params }) | ||||
|   return defHttp.get({ url: '${baseURL}/page', params }) | ||||
| } | ||||
|  | ||||
| // 查询${table.classComment}详情 | ||||
| export function get${simpleClassName}(id: number) { | ||||
|     return defHttp.get({ url: '${baseURL}/get?id=' + id }) | ||||
|   return defHttp.get({ url: `${baseURL}/get?id=${id}` }) | ||||
| } | ||||
|  | ||||
| // 新增${table.classComment} | ||||
| export function create${simpleClassName}(data) { | ||||
|     return defHttp.post({ url: '${baseURL}/create', data }) | ||||
|   return defHttp.post({ url: '${baseURL}/create', data }) | ||||
| } | ||||
|  | ||||
| // 修改${table.classComment} | ||||
| export function update${simpleClassName}(data) { | ||||
|     return defHttp.put({ url: '${baseURL}/update', data }) | ||||
|   return defHttp.put({ url: '${baseURL}/update', data }) | ||||
| } | ||||
|  | ||||
| // 删除${table.classComment} | ||||
| export function delete${simpleClassName}(id: number) { | ||||
|     return defHttp.delete({ url: '${baseURL}/delete?id=' + id }) | ||||
|   return defHttp.delete({ url: `${baseURL}/delete?id=${id}` }) | ||||
| } | ||||
|  | ||||
| // 导出${table.classComment} Excel | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| import { BasicColumn, FormSchema, useRender } from '@/components/Table' | ||||
| import type { BasicColumn, FormSchema } from '@/components/Table' | ||||
| import { useRender } from '@/components/Table' | ||||
| import { DICT_TYPE, getDictOptions } from '@/utils/dict' | ||||
|  | ||||
| export const columns: BasicColumn[] = [ | ||||
| @@ -92,13 +93,13 @@ export const createFormSchema: FormSchema[] = [ | ||||
|   #elseif($column.htmlType == "imageUpload")## 图片上传 | ||||
|     component: 'FileUpload', | ||||
|     componentProps: { | ||||
|       fileType: 'file', | ||||
|       fileType: 'image', | ||||
|       maxCount: 1, | ||||
|     }, | ||||
|   #elseif($column.htmlType == "fileUpload")## 文件上传 | ||||
|     component: 'FileUpload', | ||||
|     componentProps: { | ||||
|       fileType: 'image', | ||||
|       fileType: 'file', | ||||
|       maxCount: 1, | ||||
|     }, | ||||
|   #elseif($column.htmlType == "editor")## 文本编辑器 | ||||
| @@ -132,6 +133,11 @@ export const createFormSchema: FormSchema[] = [ | ||||
|     }, | ||||
|   #elseif($column.htmlType == "datetime")## 时间框 | ||||
|     component: 'DatePicker', | ||||
|     componentProps: { | ||||
|       showTime: true, | ||||
|       format: 'YYYY-MM-DD HH:mm:ss', | ||||
|       valueFormat: 'x', | ||||
|     }, | ||||
|   #elseif($column.htmlType == "textarea")## 文本域 | ||||
|     component: 'InputTextArea', | ||||
|   #end | ||||
| @@ -154,7 +160,7 @@ export const updateFormSchema: FormSchema[] = [ | ||||
| #set ($javaField = $column.javaField) | ||||
| #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) | ||||
| #set ($comment = $column.columnComment) | ||||
| #if (!$column.primaryKey)## 忽略主键,不用在表单里 | ||||
|   #if (!$column.primaryKey)## 忽略主键,不用在表单里 | ||||
|   { | ||||
|     label: '${comment}', | ||||
|     field: '${javaField}', | ||||
| @@ -164,45 +170,57 @@ export const updateFormSchema: FormSchema[] = [ | ||||
|     #if ($column.htmlType == "input") | ||||
|     component: 'Input', | ||||
|     #elseif($column.htmlType == "imageUpload")## 图片上传 | ||||
|     component: 'Upload', | ||||
|     component: 'FileUpload', | ||||
|     componentProps: { | ||||
|       fileType: 'image', | ||||
|       maxCount: 1, | ||||
|     }, | ||||
|     #elseif($column.htmlType == "fileUpload")## 文件上传 | ||||
|     component: 'Upload', | ||||
|     #elseif($column.htmlType == "editor")## 文本编辑器 | ||||
|     component: 'Editor', | ||||
|     component: 'FileUpload', | ||||
|     componentProps: { | ||||
|       fileType: 'file', | ||||
|       maxCount: 1, | ||||
|     }, | ||||
|     #elseif($column.htmlType == "editor")## 文本编辑器component: 'Editor', | ||||
|     #elseif($column.htmlType == "select")## 下拉框 | ||||
|     component: 'Select', | ||||
|     componentProps: { | ||||
|       #if ("" != $dictType)## 有数据字典 | ||||
|         options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), | ||||
|       options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), | ||||
|       #else##没数据字典 | ||||
|         options:[], | ||||
|       options:[], | ||||
|       #end | ||||
|     }, | ||||
|     #elseif($column.htmlType == "checkbox")## 多选框 | ||||
|     component: 'Checkbox', | ||||
|     componentProps: { | ||||
|       #if ("" != $dictType)## 有数据字典 | ||||
|         options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), | ||||
|       options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), | ||||
|       #else##没数据字典 | ||||
|         options:[], | ||||
|       options:[], | ||||
|       #end | ||||
|     }, | ||||
|     #elseif($column.htmlType == "radio")## 单选框 | ||||
|     component: 'RadioButtonGroup', | ||||
|     componentProps: { | ||||
|       #if ("" != $dictType)## 有数据字典 | ||||
|         options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), | ||||
|       options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), | ||||
|       #else##没数据字典 | ||||
|         options:[], | ||||
|       options:[], | ||||
|       #end | ||||
|     }, | ||||
|     #elseif($column.htmlType == "datetime")## 时间框 | ||||
|     component: 'DatePicker', | ||||
|     componentProps: { | ||||
|       showTime: true, | ||||
|       format: 'YYYY-MM-DD HH:mm:ss', | ||||
|       valueFormat: 'x', | ||||
|     }, | ||||
|     #elseif($column.htmlType == "textarea")## 文本域 | ||||
|     component: 'InputTextArea', | ||||
|     #end | ||||
|   }, | ||||
| #end | ||||
|   #end | ||||
| #end | ||||
| #end | ||||
| ] | ||||
| @@ -9,9 +9,10 @@ import { create${simpleClassName}, get${simpleClassName}, update${simpleClassNam | ||||
|  | ||||
| defineOptions({ name: '${table.className}Modal' }) | ||||
|  | ||||
| const emit = defineEmits(['success', 'register']) | ||||
|  | ||||
| const { t } = useI18n() | ||||
| const { createMessage } = useMessage() | ||||
| const emit = defineEmits(['success', 'register']) | ||||
| const isUpdate = ref(true) | ||||
|  | ||||
| const [registerForm, { setFieldsValue, resetFields, resetSchema, validate }] = useForm({ | ||||
| @@ -37,11 +38,11 @@ async function handleSubmit() { | ||||
|   try { | ||||
|     const values = await validate() | ||||
|     setModalProps({ confirmLoading: true }) | ||||
|     if (unref(isUpdate)) { | ||||
|     if (unref(isUpdate)) | ||||
|       await update${simpleClassName}(values) | ||||
|     } else { | ||||
|     else | ||||
|       await create${simpleClassName}(values) | ||||
|     } | ||||
|  | ||||
|     closeModal() | ||||
|     emit('success') | ||||
|     createMessage.success(t('common.saveSuccessText')) | ||||
| @@ -51,7 +52,7 @@ async function handleSubmit() { | ||||
| } | ||||
| </script> | ||||
| <template> | ||||
|   <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit"> | ||||
|   <BasicModal v-bind="$attrs" :title="isUpdate ? t('action.edit') : t('action.create')" @register="registerModal" @ok="handleSubmit"> | ||||
|     <BasicForm @register="registerForm" /> | ||||
|   </BasicModal> | ||||
| </template> | ||||
| @@ -1,12 +1,12 @@ | ||||
| <script lang="ts" setup> | ||||
| import ${simpleClassName}Modal from './${simpleClassName}Modal.vue' | ||||
| import ${ simpleClassName }Modal from './${simpleClassName}Modal.vue' | ||||
| import { columns, searchFormSchema } from './${classNameVar}.data' | ||||
| import { useI18n } from '@/hooks/web/useI18n' | ||||
| import { useMessage } from '@/hooks/web/useMessage' | ||||
| import { useModal } from '@/components/Modal' | ||||
| import { IconEnum } from '@/enums/appEnum' | ||||
| import { BasicTable, useTable, TableAction } from '@/components/Table' | ||||
| import { delete${simpleClassName}, export${simpleClassName}, get${simpleClassName}Page } from '@/api/${table.moduleName}/${classNameVar}' | ||||
| import { delete${ simpleClassName }, export${ simpleClassName }, get${ simpleClassName } Page } from '@/api/${table.moduleName}/${classNameVar}' | ||||
|  | ||||
| defineOptions({ name: '${table.className}' }) | ||||
|  | ||||
| @@ -16,17 +16,17 @@ const [registerModal, { openModal }] = useModal() | ||||
|  | ||||
| const [registerTable, { getForm, reload }] = useTable({ | ||||
|   title: '${table.classComment}列表', | ||||
|   api: get${simpleClassName}Page, | ||||
|   columns, | ||||
|   formConfig: { labelWidth: 120, schemas: searchFormSchema }, | ||||
|   useSearchForm: true, | ||||
|   showTableSetting: true, | ||||
|   actionColumn: { | ||||
|     width: 140, | ||||
|     title: t('common.action'), | ||||
|     dataIndex: 'action', | ||||
|     fixed: 'right', | ||||
|   }, | ||||
|   api: get${ simpleClassName }Page, | ||||
|     columns, | ||||
|     formConfig: { labelWidth: 120, schemas: searchFormSchema }, | ||||
|     useSearchForm: true, | ||||
|     showTableSetting: true, | ||||
|     actionColumn: { | ||||
|       width: 140, | ||||
|       title: t('common.action'), | ||||
|       dataIndex: 'action', | ||||
|       fixed: 'right', | ||||
|     }, | ||||
| }) | ||||
|  | ||||
| function handleCreate() { | ||||
| @@ -43,14 +43,14 @@ async function handleExport() { | ||||
|     iconType: 'warning', | ||||
|     content: t('common.exportMessage'), | ||||
|     async onOk() { | ||||
|       await export${simpleClassName}(getForm().getFieldsValue()) | ||||
|       await export${ simpleClassName } (getForm().getFieldsValue()) | ||||
|       createMessage.success(t('common.exportSuccessText')) | ||||
|     }, | ||||
|   }) | ||||
| } | ||||
|  | ||||
| async function handleDelete(record: Recordable) { | ||||
|   await delete${simpleClassName}(record.id) | ||||
|   await delete${ simpleClassName } (record.id) | ||||
|   createMessage.success(t('common.delSuccessText')) | ||||
|   reload() | ||||
| } | ||||
|   | ||||
| @@ -9,41 +9,41 @@ import java.time.LocalDateTime; | ||||
| @Data | ||||
| public class AppArticleRespVO { | ||||
|  | ||||
|     @Schema(description = "文章编号", required = true, example = "1") | ||||
|     @Schema(description = "文章编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||
|     private Long id; | ||||
|  | ||||
|     @Schema(description = "文章标题", required = true, example = "芋道源码 - 促销模块") | ||||
|     @Schema(description = "文章标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码 - 促销模块") | ||||
|     private String title; | ||||
|  | ||||
|     @Schema(description = "文章作者", required = true, example = "芋道源码") | ||||
|     @Schema(description = "文章作者", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") | ||||
|     private String author; | ||||
|  | ||||
|     @Schema(description = "分类编号", required = true, example = "2048") | ||||
|     @Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") | ||||
|     private Long categoryId; | ||||
|  | ||||
|     @Schema(description = "图文封面", required = true, example = "https://www.iocoder.cn/1.png") | ||||
|     @Schema(description = "图文封面", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") | ||||
|     private String picUrl; | ||||
|  | ||||
|     @Schema(description = "文章简介", required = true, example = "我是简介") | ||||
|     @Schema(description = "文章简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是简介") | ||||
|     private String introduction; | ||||
|  | ||||
|     @Schema(description = "文章内容", required = true, example = "我是详细") | ||||
|     @Schema(description = "文章内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是详细") | ||||
|     private String description; | ||||
|  | ||||
|     @Schema(description = "发布时间", required = true) | ||||
|     @Schema(description = "发布时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime createTime; | ||||
|  | ||||
|     @Schema(description = "浏览量", required = true, example = "1024") | ||||
|     @Schema(description = "浏览量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private Integer browseCount; | ||||
|  | ||||
|     @Schema(description = "关联的商品 SPU 编号", example = "1024") | ||||
|     private Long spuId; | ||||
|  | ||||
| // TODO 芋艿:下面 2 个字段,后端要存储,前端不用返回; | ||||
| //    @Schema(description = "是否热卖推荐", required = true, example = "true") | ||||
| //    @Schema(description = "是否热卖推荐", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") | ||||
| //    private Boolean recommendHot; | ||||
| // | ||||
| //    @Schema(description = "是否 Banner 推荐", required = true, example = "true") | ||||
| //    @Schema(description = "是否 Banner 推荐", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") | ||||
| //    private Boolean recommendBanner; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -7,20 +7,20 @@ import lombok.Data; | ||||
| @Data | ||||
| public class AppArticleCategoryRespVO { | ||||
|  | ||||
|     @Schema(description = "分类编号", required = true, example = "1") | ||||
|     @Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||
|     private Long id; | ||||
|  | ||||
|     @Schema(description = "分类名称", required = true, example = "技术") | ||||
|     @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "技术") | ||||
|     private String name; | ||||
|  | ||||
|     @Schema(description = "分类图标", required = true, example = "https://www.iocoder.cn/1.png") | ||||
|     @Schema(description = "分类图标", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") | ||||
|     private String picUrl; | ||||
|  | ||||
|     // TODO 芋艿:下面 2 个字段,后端要存储,前端不用返回; | ||||
| //    @Schema(description = "状态", required = true, example = "1") | ||||
| //    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||
| //    private Integer status; | ||||
| // | ||||
| //    @Schema(description = "排序", required = true, example = "1024") | ||||
| //    @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
| //    private Integer sort; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -9,46 +9,46 @@ import java.time.LocalDateTime; | ||||
| @Data | ||||
| public class AppBargainActivityDetailRespVO { | ||||
|  | ||||
|     @Schema(description = "砍价活动编号", required = true, example = "1024") | ||||
|     @Schema(description = "砍价活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private Long id; | ||||
|  | ||||
|     @Schema(description = "砍价活动名称", required = true, example = "618 大砍价") | ||||
|     @Schema(description = "砍价活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "618 大砍价") | ||||
|     private String name; | ||||
|  | ||||
|     @Schema(description = "活动开始时间", required = true) | ||||
|     @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime startTime; | ||||
|  | ||||
|     @Schema(description = "活动结束时间", required = true) | ||||
|     @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime endTime; | ||||
|  | ||||
|     @Schema(description = "商品 SPU 编号", required = true, example = "2048") | ||||
|     @Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") | ||||
|     private Long spuId; | ||||
|  | ||||
|     @Schema(description = "商品 SKU 编号", required = true, example = "1024") | ||||
|     @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private Long skuId; | ||||
|  | ||||
|     @Schema(description = "商品价格,单位:分", required = true, example = "100") | ||||
|     @Schema(description = "商品价格,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") | ||||
|     private Integer price; | ||||
|  | ||||
|     @Schema(description = "商品描述", required = true, example = "我要吃西红柿") | ||||
|     @Schema(description = "商品描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "我要吃西红柿") | ||||
|     private String description; | ||||
|  | ||||
|     @Schema(description = "砍价库存", required = true, example = "512") | ||||
|     @Schema(description = "砍价库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "512") | ||||
|     private Integer stock; | ||||
|  | ||||
|     @Schema(description = "商品图片", required = true, example = "4096") // 从 SPU 的 picUrl 读取 | ||||
|     @Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "4096") // 从 SPU 的 picUrl 读取 | ||||
|     private String picUrl; | ||||
|  | ||||
|     @Schema(description = "商品市场价,单位:分", required = true, example = "50") // 从 SPU 的 marketPrice 读取 | ||||
|     @Schema(description = "商品市场价,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "50") // 从 SPU 的 marketPrice 读取 | ||||
|     private Integer marketPrice; | ||||
|  | ||||
|     @Schema(description = "商品单位", required = true, example = "个") // 从 SPU 的 unit 读取,然后转换 | ||||
|     @Schema(description = "商品单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "个") // 从 SPU 的 unit 读取,然后转换 | ||||
|     private String unitName; | ||||
|  | ||||
|     @Schema(description = "砍价最低金额,单位:分", required = true, example = "100") // 从砍价商品里取最低价 | ||||
|     @Schema(description = "砍价最低金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") // 从砍价商品里取最低价 | ||||
|     private Integer bargainPrice; | ||||
|  | ||||
|     @Schema(description = "砍价成功数量", required = true, example = "100") | ||||
|     @Schema(description = "砍价成功数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") | ||||
|     private Integer successCount; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -9,34 +9,34 @@ import java.time.LocalDateTime; | ||||
| @Data | ||||
| public class AppBargainActivityRespVO { | ||||
|  | ||||
|     @Schema(description = "砍价活动编号", required = true, example = "1024") | ||||
|     @Schema(description = "砍价活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private Long id; | ||||
|  | ||||
|     @Schema(description = "砍价活动名称", required = true, example = "618 大砍价") | ||||
|     @Schema(description = "砍价活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "618 大砍价") | ||||
|     private String name; | ||||
|  | ||||
|     @Schema(description = "活动开始时间", required = true) | ||||
|     @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime startTime; | ||||
|  | ||||
|     @Schema(description = "活动结束时间", required = true) | ||||
|     @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime endTime; | ||||
|  | ||||
|     @Schema(description = "商品 SPU 编号", required = true, example = "2048") | ||||
|     @Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") | ||||
|     private Long spuId; | ||||
|  | ||||
|     @Schema(description = "商品 SKU 编号", required = true, example = "1024") | ||||
|     @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private Long skuId; | ||||
|  | ||||
|     @Schema(description = "砍价库存", required = true, example = "512") | ||||
|     @Schema(description = "砍价库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "512") | ||||
|     private Integer stock; | ||||
|  | ||||
|     @Schema(description = "商品图片", required = true, example = "4096") // 从 SPU 的 picUrl 读取 | ||||
|     @Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "4096") // 从 SPU 的 picUrl 读取 | ||||
|     private String picUrl; | ||||
|  | ||||
|     @Schema(description = "商品市场价,单位:分", required = true, example = "50") // 从 SPU 的 marketPrice 读取 | ||||
|     @Schema(description = "商品市场价,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "50") // 从 SPU 的 marketPrice 读取 | ||||
|     private Integer marketPrice; | ||||
|  | ||||
|     @Schema(description = "砍价最低金额,单位:分", required = true, example = "100") // 从砍价商品里取最低价 | ||||
|     @Schema(description = "砍价最低金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") // 从砍价商品里取最低价 | ||||
|     private Integer bargainPrice; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull; | ||||
| @Data | ||||
| public class AppBargainHelpCreateReqVO { | ||||
|  | ||||
|     @Schema(description = "砍价记录编号", required = true, example = "1024") | ||||
|     @Schema(description = "砍价记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     @NotNull(message = "砍价记录编号不能为空") | ||||
|     private Long recordId; | ||||
|  | ||||
|   | ||||
| @@ -9,16 +9,16 @@ import java.time.LocalDateTime; | ||||
| @Data | ||||
| public class AppBargainHelpRespVO { | ||||
|  | ||||
|     @Schema(description = "助力用户的昵称", required = true, example = "1024") | ||||
|     @Schema(description = "助力用户的昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private String nickname; | ||||
|  | ||||
|     @Schema(description = "助力用户的头像", required = true, example = "1024") | ||||
|     @Schema(description = "助力用户的头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private String avatar; | ||||
|  | ||||
|     @Schema(description = "助力用户的砍价金额", required = true, example = "1024") | ||||
|     @Schema(description = "助力用户的砍价金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private Integer reducePrice; | ||||
|  | ||||
|     @Schema(description = "创建时间", required = true, example = "1024") | ||||
|     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private LocalDateTime createTime; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull; | ||||
| @Data | ||||
| public class AppBargainRecordCreateReqVO { | ||||
|  | ||||
|     @Schema(description = "砍价活动编号", required = true, example = "1024") | ||||
|     @Schema(description = "砍价活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     @NotNull(message = "砍价活动编号不能为空") | ||||
|     private Long activityId; | ||||
|  | ||||
|   | ||||
| @@ -9,23 +9,23 @@ import java.util.List; | ||||
| @Data | ||||
| public class AppBargainRecordSummaryRespVO { | ||||
|  | ||||
|     @Schema(description = "砍价用户数量", required = true, example = "1024") | ||||
|     @Schema(description = "砍价用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private Integer userCount; | ||||
|  | ||||
|     @Schema(description = "成功砍价的记录", required = true) // 只返回最近的 7 个 | ||||
|     @Schema(description = "成功砍价的记录", requiredMode = Schema.RequiredMode.REQUIRED) // 只返回最近的 7 个 | ||||
|     private List<Record> successRecords; | ||||
|  | ||||
|     @Schema(description = "成功砍价记录") | ||||
|     @Data | ||||
|     public static class Record { | ||||
|  | ||||
|         @Schema(description = "用户昵称", required = true, example = "王**") | ||||
|         @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王**") | ||||
|         private String nickname; | ||||
|  | ||||
|         @Schema(description = "用户头像", required = true, example = "https://www.iocoder.cn/xxx.jpg") | ||||
|         @Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xxx.jpg") | ||||
|         private String avatar; | ||||
|  | ||||
|         @Schema(description = "活动名称", required = true, example = "天蚕土豆") | ||||
|         @Schema(description = "活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "天蚕土豆") | ||||
|         private String activityName; | ||||
|  | ||||
|     } | ||||
|   | ||||
| @@ -15,15 +15,15 @@ public class AppCouponMatchReqVO { | ||||
|     @NotNull(message = "商品金额不能为空") | ||||
|     private Integer price; | ||||
|  | ||||
|     @Schema(description = "商品 SPU 编号的数组", required = true, example = "[1, 2]") | ||||
|     @Schema(description = "商品 SPU 编号的数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 2]") | ||||
|     @NotEmpty(message = "商品 SPU 编号不能为空") | ||||
|     private List<Long> spuIds; | ||||
|  | ||||
|     @Schema(description = "商品 SKU 编号的数组", required = true, example = "[1, 2]") | ||||
|     @Schema(description = "商品 SKU 编号的数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 2]") | ||||
|     @NotEmpty(message = "商品 SKU 编号不能为空") | ||||
|     private List<Long> skuIds; | ||||
|  | ||||
|     @Schema(description = "分类编号的数组", required = true, example = "[10, 20]") | ||||
|     @Schema(description = "分类编号的数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[10, 20]") | ||||
|     @NotEmpty(message = "分类编号不能为空") | ||||
|     private List<Long> categoryIds; | ||||
|  | ||||
|   | ||||
| @@ -8,10 +8,10 @@ import lombok.Data; | ||||
| @Data | ||||
| public class AppDeliveryConfigRespVO { | ||||
|  | ||||
|     @Schema(description = "腾讯地图 KEY", required = true, example = "123456") | ||||
|     @Schema(description = "腾讯地图 KEY", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") | ||||
|     private String tencentLbsKey; | ||||
|  | ||||
|     @Schema(description = "是否开启自提", required = true, example = "true") | ||||
|     @Schema(description = "是否开启自提", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") | ||||
|     private Boolean pickUpEnable; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -7,10 +7,10 @@ import lombok.Data; | ||||
| @Data | ||||
| public class AppDeliveryExpressRespVO { | ||||
|  | ||||
|     @Schema(description = "编号", required = true, example = "1") | ||||
|     @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||
|     private Long id; | ||||
|  | ||||
|     @Schema(description = "门店名称", required = true, example = "顺丰") | ||||
|     @Schema(description = "门店名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "顺丰") | ||||
|     private String name; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -25,12 +25,12 @@ public class AppTradeOrderSettlementReqVO { | ||||
|     @Schema(description = "优惠劵编号", example = "1024") | ||||
|     private Long couponId; | ||||
|  | ||||
|     @Schema(description = "是否使用积分", required = true, example = "true") | ||||
|     @Schema(description = "是否使用积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") | ||||
|     @NotNull(message = "是否使用积分不能为空") | ||||
|     private Boolean pointStatus; | ||||
|  | ||||
|     // ========== 配送相关相关字段 ========== | ||||
|     @Schema(description = "配送方式", required = true, example = "1") | ||||
|     @Schema(description = "配送方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||
|     @InEnum(value = DeliveryTypeEnum.class, message = "配送方式不正确") | ||||
|     private Integer deliveryType; | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,7 @@ import java.util.List; | ||||
| @Data | ||||
| public class AppTradeOrderSettlementRespVO { | ||||
|  | ||||
|     @Schema(description = "交易类型", required = true, example = "1") // 对应 TradeOrderTypeEnum 枚举 | ||||
|     @Schema(description = "交易类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") // 对应 TradeOrderTypeEnum 枚举 | ||||
|     private Integer type = 1; // TODO 芋艿:改成计算 | ||||
|  | ||||
|     @Schema(description = "购物项数组", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|   | ||||
| @@ -13,16 +13,16 @@ import java.time.LocalDateTime; | ||||
| @ToString(callSuper = true) | ||||
| public class PayOrderDetailsRespVO extends PayOrderBaseVO { | ||||
|  | ||||
|     @Schema(description = "支付订单编号", required = true, example = "1024") | ||||
|     @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     private Long id; | ||||
|  | ||||
|     @Schema(description = "应用名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") | ||||
|     private String appName; | ||||
|  | ||||
|     @Schema(description = "创建时间", required = true) | ||||
|     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime createTime; | ||||
|  | ||||
|     @Schema(description = "更新时间", required = true) | ||||
|     @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime updateTime; | ||||
|  | ||||
|     /** | ||||
| @@ -34,7 +34,7 @@ public class PayOrderDetailsRespVO extends PayOrderBaseVO { | ||||
|     @Schema(description = "支付订单扩展") | ||||
|     public static class PayOrderExtension { | ||||
|  | ||||
|         @Schema(description = "支付订单号", required = true, example = "1024") | ||||
|         @Schema(description = "支付订单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|         private String no; | ||||
|  | ||||
|         @Schema(description = "支付异步通知的内容") | ||||
|   | ||||
| @@ -55,7 +55,7 @@ public class DictDataDO extends BaseDO { | ||||
|     /** | ||||
|      * css 样式 | ||||
|      */ | ||||
|     @TableField(updateStrategy = FieldStrategy.IGNORED) | ||||
|     @TableField(updateStrategy = FieldStrategy.ALWAYS) | ||||
|     private String cssClass; | ||||
|     /** | ||||
|      * 备注 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV