From dd14780fcd5263152432d03d356168957aa8b62e Mon Sep 17 00:00:00 2001 From: tanzs Date: Sun, 16 Feb 2025 17:09:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E3=80=81banner=E3=80=81=E5=85=AC=E5=91=8A?= =?UTF-8?q?=E3=80=81=E9=97=A8=E5=BA=97=E3=80=81=E4=BA=A7=E5=93=81=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appbanner/controller/AppBannerController.java | 2 +- .../modules/demo/appbanner/entity/AppBanner.java | 11 +- .../demo/appbanner/mapper/AppBannerMapper.java | 2 +- .../demo/appbanner/service/IAppBannerService.java | 2 +- .../service/impl/AppBannerServiceImpl.java | 2 +- .../modules/demo/appbanner/vue3/AppBanner.data.ts | 16 +- .../demo/appuser/controller/AppUserController.java | 32 +++- .../jeecg/modules/demo/appuser/entity/AppUser.java | 11 +- .../modules/demo/appuser/mapper/AppUserMapper.java | 5 +- .../demo/appuser/mapper/xml/AppUserMapper.xml | 2 +- .../demo/appuser/service/IAppUserService.java | 2 +- .../appuser/service/impl/AppUserServiceImpl.java | 2 +- .../modules/demo/appuser/uniapp/AppUserForm.vue | 116 ++++++++++++ .../modules/demo/appuser/uniapp/AppUserList.vue | 44 +++++ .../modules/demo/appuser/vue3/AppUser.data.ts | 169 ++++-------------- .../notice/controller/AppNoticeController.java | 184 +++++++++++++++++++ .../modules/demo/notice/entity/AppNotice.java | 77 ++++++++ .../demo/notice/mapper/AppNoticeMapper.java | 17 ++ .../demo/notice/mapper/xml/AppNoticeMapper.xml | 5 + .../demo/notice/service/IAppNoticeService.java | 14 ++ .../notice/service/impl/AppNoticeServiceImpl.java | 19 ++ .../modules/demo/notice/uniapp/AppNoticeForm.vue | 102 +++++++++++ .../modules/demo/notice/uniapp/AppNoticeList.vue | 44 +++++ .../modules/demo/notice/vue3/AppNotice.api.ts | 64 +++++++ .../modules/demo/notice/vue3/AppNotice.data.ts | 128 ++++++++++++++ .../modules/demo/notice/vue3/AppNoticeList.vue | 195 ++++++++++++++++++++ .../vue3/V20250216_1__menu_insert_AppNotice.sql | 26 +++ .../demo/notice/vue3/components/AppNoticeForm.vue | 70 ++++++++ .../demo/notice/vue3/components/AppNoticeModal.vue | 76 ++++++++ .../product/controller/AppProductController.java | 180 +++++++++++++++++++ .../modules/demo/product/entity/AppProduct.java | 76 ++++++++ .../demo/product/mapper/AppProductMapper.java | 17 ++ .../demo/product/mapper/xml/AppProductMapper.xml | 5 + .../demo/product/service/IAppProductService.java | 14 ++ .../service/impl/AppProductServiceImpl.java | 19 ++ .../modules/demo/product/uniapp/AppProductForm.vue | 102 +++++++++++ .../modules/demo/product/uniapp/AppProductList.vue | 44 +++++ .../modules/demo/product/vue3/AppProduct.api.ts | 64 +++++++ .../modules/demo/product/vue3/AppProduct.data.ts | 124 +++++++++++++ .../modules/demo/product/vue3/AppProductList.vue | 196 +++++++++++++++++++++ .../vue3/V20250216_1__menu_insert_AppProduct.sql} | 18 +- .../product/vue3/components/AppProductForm.vue | 70 ++++++++ .../product/vue3/components/AppProductModal.vue | 76 ++++++++ .../controller/AppCategoryController.java | 180 +++++++++++++++++++ .../demo/productCategory/entity/AppCategory.java | 64 +++++++ .../productCategory/mapper/AppCategoryMapper.java | 17 ++ .../mapper/xml/AppCategoryMapper.xml | 5 + .../service/IAppCategoryService.java | 14 ++ .../service/impl/AppCategoryServiceImpl.java | 19 ++ .../productCategory/uniapp/AppCategoryForm.vue | 84 +++++++++ .../productCategory/uniapp/AppCategoryList.vue | 44 +++++ .../demo/productCategory/vue3/AppCategory.api.ts | 64 +++++++ .../demo/productCategory/vue3/AppCategory.data.ts | 71 ++++++++ .../demo/productCategory/vue3/AppCategoryList.vue | 191 ++++++++++++++++++++ .../vue3/V20250216_1__menu_insert_AppCategory.sql | 26 +++ .../vue3/components/AppCategoryForm.vue | 70 ++++++++ .../vue3/components/AppCategoryModal.vue | 76 ++++++++ .../AppProductCategoryJoinController.java | 180 +++++++++++++++++++ .../entity/AppProductCategoryJoin.java | 68 +++++++ .../mapper/AppProductCategoryJoinMapper.java | 17 ++ .../mapper/xml/AppProductCategoryJoinMapper.xml | 5 + .../service/IAppProductCategoryJoinService.java | 14 ++ .../impl/AppProductCategoryJoinServiceImpl.java | 19 ++ .../uniapp/AppProductCategoryJoinForm.vue | 90 ++++++++++ .../uniapp/AppProductCategoryJoinList.vue | 44 +++++ .../vue3/AppProductCategoryJoin.api.ts | 64 +++++++ .../vue3/AppProductCategoryJoin.data.ts | 72 ++++++++ .../vue3/AppProductCategoryJoinList.vue | 190 ++++++++++++++++++++ ...50216_1__menu_insert_AppProductCategoryJoin.sql | 26 +++ .../vue3/components/AppProductCategoryJoinForm.vue | 70 ++++++++ .../components/AppProductCategoryJoinModal.vue | 76 ++++++++ .../demo/store/controller/AppStoreController.java | 184 +++++++++++++++++++ .../jeecg/modules/demo/store/entity/AppStore.java | 73 ++++++++ .../modules/demo/store/mapper/AppStoreMapper.java | 17 ++ .../demo/store/mapper/xml/AppStoreMapper.xml | 5 + .../demo/store/service/IAppStoreService.java | 14 ++ .../store/service/impl/AppStoreServiceImpl.java | 19 ++ .../modules/demo/store/uniapp/AppStoreForm.vue | 96 ++++++++++ .../modules/demo/store/uniapp/AppStoreList.vue | 44 +++++ .../jeecg/modules/demo/store/vue3/AppStore.api.ts | 64 +++++++ .../jeecg/modules/demo/store/vue3/AppStore.data.ts | 102 +++++++++++ .../jeecg/modules/demo/store/vue3/AppStoreList.vue | 190 ++++++++++++++++++++ .../vue3/V20250216_1__menu_insert_AppStore.sql | 26 +++ .../demo/store/vue3/components/AppStoreForm.vue | 70 ++++++++ .../demo/store/vue3/components/AppStoreModal.vue | 76 ++++++++ .../jeecg/modules/system/util/RandImageUtil.java | 9 +- jeecg-module-system/jeecg-system-start/pom.xml | 59 ++++++- .../src/main/resources/application-dev.yml | 2 +- .../src/main/resources/application-dm8.yml | 2 +- .../src/main/resources/application-kingbase8.yml | 2 +- .../src/main/resources/application-prod.yml | 2 +- .../src/main/resources/application-test.yml | 68 ++++--- 92 files changed, 5219 insertions(+), 209 deletions(-) create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/uniapp/AppUserForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/uniapp/AppUserList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/controller/AppNoticeController.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/entity/AppNotice.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/mapper/AppNoticeMapper.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/mapper/xml/AppNoticeMapper.xml create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/service/IAppNoticeService.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/service/impl/AppNoticeServiceImpl.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/uniapp/AppNoticeForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/uniapp/AppNoticeList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNotice.api.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNotice.data.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNoticeList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/V20250216_1__menu_insert_AppNotice.sql create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/components/AppNoticeForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/components/AppNoticeModal.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/controller/AppProductController.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/entity/AppProduct.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/mapper/AppProductMapper.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/mapper/xml/AppProductMapper.xml create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/service/IAppProductService.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/service/impl/AppProductServiceImpl.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/uniapp/AppProductForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/uniapp/AppProductList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProduct.api.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProduct.data.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProductList.vue rename jeecg-module-demo/src/main/java/org/jeecg/modules/demo/{appbanner/vue3/V20250211_1__menu_insert_AppBanner.sql => product/vue3/V20250216_1__menu_insert_AppProduct.sql} (57%) create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/components/AppProductForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/components/AppProductModal.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/controller/AppCategoryController.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/entity/AppCategory.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/mapper/AppCategoryMapper.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/mapper/xml/AppCategoryMapper.xml create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/service/IAppCategoryService.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/service/impl/AppCategoryServiceImpl.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/uniapp/AppCategoryForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/uniapp/AppCategoryList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategory.api.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategory.data.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategoryList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/V20250216_1__menu_insert_AppCategory.sql create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/components/AppCategoryForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/components/AppCategoryModal.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/controller/AppProductCategoryJoinController.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/entity/AppProductCategoryJoin.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/mapper/AppProductCategoryJoinMapper.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/mapper/xml/AppProductCategoryJoinMapper.xml create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/service/IAppProductCategoryJoinService.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/service/impl/AppProductCategoryJoinServiceImpl.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/uniapp/AppProductCategoryJoinForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/uniapp/AppProductCategoryJoinList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoin.api.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoin.data.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoinList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/V20250216_1__menu_insert_AppProductCategoryJoin.sql create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/components/AppProductCategoryJoinForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/components/AppProductCategoryJoinModal.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/controller/AppStoreController.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/entity/AppStore.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/mapper/AppStoreMapper.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/mapper/xml/AppStoreMapper.xml create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/service/IAppStoreService.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/service/impl/AppStoreServiceImpl.java create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/uniapp/AppStoreForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/uniapp/AppStoreList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStore.api.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStore.data.ts create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStoreList.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/V20250216_1__menu_insert_AppStore.sql create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/components/AppStoreForm.vue create mode 100644 jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/components/AppStoreModal.vue diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/controller/AppBannerController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/controller/AppBannerController.java index 2d9cbd7..1123cbf 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/controller/AppBannerController.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/controller/AppBannerController.java @@ -42,7 +42,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; /** * @Description: 应用广告配置 * @Author: jeecg-boot - * @Date: 2025-02-11 + * @Date: 2025-02-15 * @Version: V1.0 */ @Api(tags="应用广告配置") diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/entity/AppBanner.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/entity/AppBanner.java index 9a44b3c..ea90e30 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/entity/AppBanner.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/entity/AppBanner.java @@ -23,7 +23,7 @@ import lombok.experimental.Accessors; /** * @Description: 应用广告配置 * @Author: jeecg-boot - * @Date: 2025-02-11 + * @Date: 2025-02-15 * @Version: V1.0 */ @Data @@ -47,15 +47,18 @@ public class AppBanner implements Serializable { @ApiModelProperty(value = "跳转地址") private java.lang.String jumpUrl; /**跳转类型*/ - @Excel(name = "跳转类型", width = 15) + @Excel(name = "跳转类型", width = 15, dicCode = "app_banner_jump_type") + @Dict(dicCode = "app_banner_jump_type") @ApiModelProperty(value = "跳转类型") private java.lang.Integer jumpType; /**广告位置*/ - @Excel(name = "广告位置", width = 15) + @Excel(name = "广告位置", width = 15, dicCode = "app_banner_position") + @Dict(dicCode = "app_banner_position") @ApiModelProperty(value = "广告位置") private java.lang.Integer position; /**状态(0 禁用 1 启用)*/ - @Excel(name = "状态(0 禁用 1 启用)", width = 15) + @Excel(name = "状态(0 禁用 1 启用)", width = 15, dicCode = "dict_item_status") + @Dict(dicCode = "dict_item_status") @ApiModelProperty(value = "状态(0 禁用 1 启用)") private java.lang.Integer status; /**分享名称*/ diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/mapper/AppBannerMapper.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/mapper/AppBannerMapper.java index aa5703c..275409b 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/mapper/AppBannerMapper.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/mapper/AppBannerMapper.java @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @Description: 应用广告配置 * @Author: jeecg-boot - * @Date: 2025-02-11 + * @Date: 2025-02-15 * @Version: V1.0 */ public interface AppBannerMapper extends BaseMapper { diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/service/IAppBannerService.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/service/IAppBannerService.java index 98463fd..aa476ba 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/service/IAppBannerService.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/service/IAppBannerService.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; /** * @Description: 应用广告配置 * @Author: jeecg-boot - * @Date: 2025-02-11 + * @Date: 2025-02-15 * @Version: V1.0 */ public interface IAppBannerService extends IService { diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/service/impl/AppBannerServiceImpl.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/service/impl/AppBannerServiceImpl.java index cbb54c2..ab93d48 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/service/impl/AppBannerServiceImpl.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/service/impl/AppBannerServiceImpl.java @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** * @Description: 应用广告配置 * @Author: jeecg-boot - * @Date: 2025-02-11 + * @Date: 2025-02-15 * @Version: V1.0 */ @Service diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/vue3/AppBanner.data.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/vue3/AppBanner.data.ts index fda0f8f..602409f 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/vue3/AppBanner.data.ts +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/vue3/AppBanner.data.ts @@ -60,6 +60,7 @@ export const searchFormSchema: FormSchema[] = [ field: 'jumpType', component: 'JSelectMultiple', componentProps:{ + dictCode:"app_banner_jump_type" }, //colProps: {span: 6}, }, @@ -68,6 +69,7 @@ export const searchFormSchema: FormSchema[] = [ field: 'position', component: 'JSelectMultiple', componentProps:{ + dictCode:"app_banner_position" }, //colProps: {span: 6}, }, @@ -76,6 +78,7 @@ export const searchFormSchema: FormSchema[] = [ field: 'status', component: 'JSelectMultiple', componentProps:{ + dictCode:"dict_item_status" }, //colProps: {span: 6}, }, @@ -120,7 +123,7 @@ export const formSchema: FormSchema[] = [ field: 'jumpType', component: 'JDictSelectTag', componentProps:{ - dictCode:"" + dictCode:"app_banner_jump_type" }, dynamicRules: ({model,schema}) => { return [ @@ -133,7 +136,7 @@ export const formSchema: FormSchema[] = [ field: 'position', component: 'JDictSelectTag', componentProps:{ - dictCode:"" + dictCode:"app_banner_position" }, dynamicRules: ({model,schema}) => { return [ @@ -144,9 +147,10 @@ export const formSchema: FormSchema[] = [ { label: '状态(0 禁用 1 启用)', field: 'status', + defaultValue: 1, component: 'JDictSelectTag', componentProps:{ - dictCode:"", + dictCode:"dict_item_status", type: "radio" }, dynamicRules: ({model,schema}) => { @@ -181,9 +185,9 @@ export const formSchema: FormSchema[] = [ export const superQuerySchema = { image: {title: '图片地址',order: 0,view: 'image', type: 'string',}, jumpUrl: {title: '跳转地址',order: 1,view: 'text', type: 'string',}, - jumpType: {title: '跳转类型',order: 2,view: 'number', type: 'number',dictCode: '',}, - position: {title: '广告位置',order: 3,view: 'number', type: 'number',dictCode: '',}, - status: {title: '状态(0 禁用 1 启用)',order: 4,view: 'number', type: 'number',dictCode: '',}, + jumpType: {title: '跳转类型',order: 2,view: 'number', type: 'number',dictCode: 'app_banner_jump_type',}, + position: {title: '广告位置',order: 3,view: 'number', type: 'number',dictCode: 'app_banner_position',}, + status: {title: '状态(0 禁用 1 启用)',order: 4,view: 'number', type: 'number',dictCode: 'dict_item_status',}, shareName: {title: '分享名称',order: 5,view: 'text', type: 'string',}, shareImage: {title: '分享图',order: 6,view: 'image', type: 'string',}, createTime: {title: '创建日期',order: 7,view: 'datetime', type: 'string',}, diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/controller/AppUserController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/controller/AppUserController.java index a35d352..196b36e 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/controller/AppUserController.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/controller/AppUserController.java @@ -2,24 +2,38 @@ package org.jeecg.modules.demo.appuser.controller; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.demo.appuser.entity.AppUser; +import org.jeecg.modules.demo.appuser.service.IAppUserService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecg.common.system.base.controller.JeecgController; -import org.jeecg.modules.demo.appuser.entity.AppUser; -import org.jeecg.modules.demo.appuser.service.IAppUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.aspect.annotation.AutoLog; @@ -28,7 +42,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; /** * @Description: 应用用户表 * @Author: jeecg-boot - * @Date: 2025-02-10 + * @Date: 2025-02-16 * @Version: V1.0 */ @Api(tags="应用用户表") @@ -38,7 +52,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; public class AppUserController extends JeecgController { @Autowired private IAppUserService appUserService; - + /** * 分页列表查询 * @@ -64,7 +78,7 @@ public class AppUserController extends JeecgController IPage pageList = appUserService.page(page, queryWrapper); return Result.OK(pageList); } - + /** * 添加 * @@ -79,7 +93,7 @@ public class AppUserController extends JeecgController appUserService.save(appUser); return Result.OK("添加成功!"); } - + /** * 编辑 * @@ -94,7 +108,7 @@ public class AppUserController extends JeecgController appUserService.updateById(appUser); return Result.OK("编辑成功!"); } - + /** * 通过id删除 * @@ -109,7 +123,7 @@ public class AppUserController extends JeecgController appUserService.removeById(id); return Result.OK("删除成功!"); } - + /** * 批量删除 * @@ -124,7 +138,7 @@ public class AppUserController extends JeecgController this.appUserService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } - + /** * 通过id查询 * diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/entity/AppUser.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/entity/AppUser.java index d47bb81..8c269b2 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/entity/AppUser.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/entity/AppUser.java @@ -23,7 +23,7 @@ import lombok.experimental.Accessors; /** * @Description: 应用用户表 * @Author: jeecg-boot - * @Date: 2025-02-10 + * @Date: 2025-02-16 * @Version: V1.0 */ @Data @@ -38,9 +38,9 @@ public class AppUser implements Serializable { @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "主键") private java.lang.String id; - /**昵称*/ - @Excel(name = "昵称", width = 15) - @ApiModelProperty(value = "昵称") + /**用户名*/ + @Excel(name = "用户名", width = 15) + @ApiModelProperty(value = "用户名") private java.lang.String nickName; /**头像*/ @Excel(name = "头像", width = 15) @@ -63,7 +63,8 @@ public class AppUser implements Serializable { @ApiModelProperty(value = "密码") private java.lang.String password; /**状态*/ - @Excel(name = "状态", width = 15) + @Excel(name = "状态", width = 15, dicCode = "dict_item_status") + @Dict(dicCode = "dict_item_status") @ApiModelProperty(value = "状态") private java.lang.Integer status; /**邮箱*/ diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/mapper/AppUserMapper.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/mapper/AppUserMapper.java index 161ce19..46b15a7 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/mapper/AppUserMapper.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/mapper/AppUserMapper.java @@ -1,12 +1,15 @@ package org.jeecg.modules.demo.appuser.mapper; +import java.util.List; + +import org.apache.ibatis.annotations.Param; import org.jeecg.modules.demo.appuser.entity.AppUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @Description: 应用用户表 * @Author: jeecg-boot - * @Date: 2025-02-10 + * @Date: 2025-02-16 * @Version: V1.0 */ public interface AppUserMapper extends BaseMapper { diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/mapper/xml/AppUserMapper.xml b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/mapper/xml/AppUserMapper.xml index c324f26..4eec8b2 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/mapper/xml/AppUserMapper.xml +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/mapper/xml/AppUserMapper.xml @@ -2,4 +2,4 @@ - + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/service/IAppUserService.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/service/IAppUserService.java index ef81024..aa85ec9 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/service/IAppUserService.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/service/IAppUserService.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; /** * @Description: 应用用户表 * @Author: jeecg-boot - * @Date: 2025-02-10 + * @Date: 2025-02-16 * @Version: V1.0 */ public interface IAppUserService extends IService { diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/service/impl/AppUserServiceImpl.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/service/impl/AppUserServiceImpl.java index 8ea9538..13c141e 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/service/impl/AppUserServiceImpl.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/service/impl/AppUserServiceImpl.java @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** * @Description: 应用用户表 * @Author: jeecg-boot - * @Date: 2025-02-10 + * @Date: 2025-02-16 * @Version: V1.0 */ @Service diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/uniapp/AppUserForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/uniapp/AppUserForm.vue new file mode 100644 index 0000000..80faa60 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/uniapp/AppUserForm.vue @@ -0,0 +1,116 @@ + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/uniapp/AppUserList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/uniapp/AppUserList.vue new file mode 100644 index 0000000..88c55a7 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/uniapp/AppUserList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/vue3/AppUser.data.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/vue3/AppUser.data.ts index 88cc939..742bf6d 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/vue3/AppUser.data.ts +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appuser/vue3/AppUser.data.ts @@ -6,40 +6,26 @@ import { getWeekMonthQuarterYear } from '/@/utils'; //列表数据 export const columns: BasicColumn[] = [ { - title: '昵称', + title: '用户名', align:"center", dataIndex: 'nickName' }, { title: '头像', align:"center", - dataIndex: 'avatar' + dataIndex: 'avatar', + customRender:render.renderImage, }, { title: '手机号', align:"center", dataIndex: 'phone' }, - { - title: '小程序 openid', - align:"center", - dataIndex: 'openid' - }, - { - title: '小程序 unionid', - align:"center", - dataIndex: 'unionid' - }, { title: '状态', align:"center", dataIndex: 'status_dictText' }, - { - title: '邮箱', - align:"center", - dataIndex: 'email' - }, { title: '最后登录时间', align:"center", @@ -50,11 +36,6 @@ export const columns: BasicColumn[] = [ align:"center", dataIndex: 'lastLoginIp' }, - { - title: '邀请人', - align:"center", - dataIndex: 'inviterId' - }, { title: '创建日期', align:"center", @@ -69,7 +50,7 @@ export const columns: BasicColumn[] = [ //查询数据 export const searchFormSchema: FormSchema[] = [ { - label: "昵称", + label: "用户名", field: "nickName", component: 'JInput', }, @@ -77,18 +58,6 @@ export const searchFormSchema: FormSchema[] = [ label: "手机号", field: 'phone', component: 'Input', - //colProps: {span: 6}, - }, - { - label: "小程序 openid", - field: 'openid', - component: 'Input', - //colProps: {span: 6}, - }, - { - label: "小程序 unionid", - field: 'unionid', - component: 'Input', //colProps: {span: 6}, }, { @@ -96,13 +65,8 @@ export const searchFormSchema: FormSchema[] = [ field: 'status', component: 'JSelectMultiple', componentProps:{ + dictCode:"dict_item_status" }, - //colProps: {span: 6}, - }, - { - label: "邮箱", - field: 'email', - component: 'Input', //colProps: {span: 6}, }, { @@ -119,119 +83,56 @@ export const searchFormSchema: FormSchema[] = [ //表单数据 export const formSchema: FormSchema[] = [ { - label: '昵称', + label: '用户名', field: 'nickName', component: 'Input', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入用户名!'}, + ]; + }, }, { label: '头像', field: 'avatar', - component: 'Input', - }, - { - label: '手机号', - field: 'phone', - component: 'Input', - }, - { - label: '小程序 openid', - field: 'openid', - component: 'Input', + component: 'JImageUpload', + componentProps:{ + fileMax: 0 + }, dynamicRules: ({model,schema}) => { return [ - { required: true, message: '请输入小程序 openid!'}, + { required: true, message: '请输入头像!'}, ]; }, }, { - label: '小程序 unionid', - field: 'unionid', + label: '手机号', + field: 'phone', component: 'Input', - dynamicRules: ({model,schema}) => { - return [ - { required: true, message: '请输入小程序 unionid!'}, - ]; - }, }, { label: '密码', field: 'password', - component: 'Input', + component: 'InputPassword', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入密码!'}, + ]; + }, }, { label: '状态', field: 'status', component: 'JDictSelectTag', componentProps:{ - dictCode:"" + dictCode:"dict_item_status", + type: "radio" }, dynamicRules: ({model,schema}) => { return [ { required: true, message: '请输入状态!'}, ]; }, - }, - { - label: '邮箱', - field: 'email', - component: 'Input', - }, - { - label: '最后登录时间', - field: 'lastLoginAt', - component: 'DatePicker', - componentProps: { - showTime: true, - valueFormat: 'YYYY-MM-DD HH:mm:ss' - }, - }, - { - label: '最后登录 IP', - field: 'lastLoginIp', - component: 'Input', - }, - { - label: '密码盐值', - field: 'passwordSalt', - component: 'Input', - dynamicRules: ({model,schema}) => { - return [ - { required: true, message: '请输入密码盐值!'}, - ]; - }, - }, - { - label: '邀请人', - field: 'inviterId', - component: 'InputNumber', - }, - { - label: '创建日期', - field: 'createTime', - component: 'DatePicker', - componentProps: { - showTime: true, - valueFormat: 'YYYY-MM-DD HH:mm:ss' - }, - dynamicRules: ({model,schema}) => { - return [ - { required: true, message: '请输入创建日期!'}, - ]; - }, - }, - { - label: '更新日期', - field: 'updateTime', - component: 'DatePicker', - componentProps: { - showTime: true, - valueFormat: 'YYYY-MM-DD HH:mm:ss' - }, - }, - { - label: '所属部门', - field: 'sysOrgCode', - component: 'Input', }, // TODO 主键隐藏字段,目前写死为ID { @@ -244,18 +145,14 @@ export const formSchema: FormSchema[] = [ // 高级查询数据 export const superQuerySchema = { - nickName: {title: '昵称',order: 0,view: 'text', type: 'string',}, - avatar: {title: '头像',order: 1,view: 'text', type: 'string',}, + nickName: {title: '用户名',order: 0,view: 'text', type: 'string',}, + avatar: {title: '头像',order: 1,view: 'image', type: 'string',}, phone: {title: '手机号',order: 2,view: 'text', type: 'string',}, - openid: {title: '小程序 openid',order: 3,view: 'text', type: 'string',}, - unionid: {title: '小程序 unionid',order: 4,view: 'text', type: 'string',}, - status: {title: '状态',order: 6,view: 'number', type: 'number',dictCode: '',}, - email: {title: '邮箱',order: 7,view: 'text', type: 'string',}, - lastLoginAt: {title: '最后登录时间',order: 8,view: 'datetime', type: 'string',}, - lastLoginIp: {title: '最后登录 IP',order: 9,view: 'text', type: 'string',}, - inviterId: {title: '邀请人',order: 11,view: 'number', type: 'number',}, - createTime: {title: '创建日期',order: 12,view: 'datetime', type: 'string',}, - updateTime: {title: '更新日期',order: 13,view: 'datetime', type: 'string',}, + status: {title: '状态',order: 4,view: 'number', type: 'number',dictCode: 'dict_item_status',}, + lastLoginAt: {title: '最后登录时间',order: 5,view: 'datetime', type: 'string',}, + lastLoginIp: {title: '最后登录 IP',order: 6,view: 'text', type: 'string',}, + createTime: {title: '创建日期',order: 7,view: 'datetime', type: 'string',}, + updateTime: {title: '更新日期',order: 8,view: 'datetime', type: 'string',}, }; /** diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/controller/AppNoticeController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/controller/AppNoticeController.java new file mode 100644 index 0000000..9121db1 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/controller/AppNoticeController.java @@ -0,0 +1,184 @@ +package org.jeecg.modules.demo.notice.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.demo.notice.entity.AppNotice; +import org.jeecg.modules.demo.notice.service.IAppNoticeService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + + /** + * @Description: 公告管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Api(tags="公告管理") +@RestController +@RequestMapping("/notice/appNotice") +@Slf4j +public class AppNoticeController extends JeecgController { + @Autowired + private IAppNoticeService appNoticeService; + + /** + * 分页列表查询 + * + * @param appNotice + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "公告管理-分页列表查询") + @ApiOperation(value="公告管理-分页列表查询", notes="公告管理-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AppNotice appNotice, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + // 自定义查询规则 + Map customeRuleMap = new HashMap<>(); + // 自定义多选的查询规则为:LIKE_WITH_OR + customeRuleMap.put("status", QueryRuleEnum.LIKE_WITH_OR); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appNotice, req.getParameterMap(),customeRuleMap); + Page page = new Page(pageNo, pageSize); + IPage pageList = appNoticeService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param appNotice + * @return + */ + @AutoLog(value = "公告管理-添加") + @ApiOperation(value="公告管理-添加", notes="公告管理-添加") + @RequiresPermissions("notice:app_notice:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AppNotice appNotice) { + appNoticeService.save(appNotice); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param appNotice + * @return + */ + @AutoLog(value = "公告管理-编辑") + @ApiOperation(value="公告管理-编辑", notes="公告管理-编辑") + @RequiresPermissions("notice:app_notice:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AppNotice appNotice) { + appNoticeService.updateById(appNotice); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "公告管理-通过id删除") + @ApiOperation(value="公告管理-通过id删除", notes="公告管理-通过id删除") + @RequiresPermissions("notice:app_notice:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + appNoticeService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "公告管理-批量删除") + @ApiOperation(value="公告管理-批量删除", notes="公告管理-批量删除") + @RequiresPermissions("notice:app_notice:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.appNoticeService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "公告管理-通过id查询") + @ApiOperation(value="公告管理-通过id查询", notes="公告管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AppNotice appNotice = appNoticeService.getById(id); + if(appNotice==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(appNotice); + } + + /** + * 导出excel + * + * @param request + * @param appNotice + */ + @RequiresPermissions("notice:app_notice:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AppNotice appNotice) { + return super.exportXls(request, appNotice, AppNotice.class, "公告管理"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("notice:app_notice:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AppNotice.class); + } + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/entity/AppNotice.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/entity/AppNotice.java new file mode 100644 index 0000000..d3d12e7 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/entity/AppNotice.java @@ -0,0 +1,77 @@ +package org.jeecg.modules.demo.notice.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 公告管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Data +@TableName("app_notice") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="app_notice对象", description="公告管理") +public class AppNotice implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + /**标题*/ + @Excel(name = "标题", width = 15) + @ApiModelProperty(value = "标题") + private java.lang.String title; + /**内容*/ + @Excel(name = "内容", width = 15) + @ApiModelProperty(value = "内容") + private java.lang.String content; + /**状态*/ + @Excel(name = "状态", width = 15, dicCode = "dict_item_status") + @Dict(dicCode = "dict_item_status") + @ApiModelProperty(value = "状态") + private java.lang.Integer status; + /**排序*/ + @Excel(name = "排序", width = 15) + @ApiModelProperty(value = "排序") + private java.lang.Integer sort; + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/mapper/AppNoticeMapper.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/mapper/AppNoticeMapper.java new file mode 100644 index 0000000..05f3fcf --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/mapper/AppNoticeMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.demo.notice.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.demo.notice.entity.AppNotice; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 公告管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface AppNoticeMapper extends BaseMapper { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/mapper/xml/AppNoticeMapper.xml b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/mapper/xml/AppNoticeMapper.xml new file mode 100644 index 0000000..eb67d9a --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/mapper/xml/AppNoticeMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/service/IAppNoticeService.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/service/IAppNoticeService.java new file mode 100644 index 0000000..4cc8dcb --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/service/IAppNoticeService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.demo.notice.service; + +import org.jeecg.modules.demo.notice.entity.AppNotice; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 公告管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface IAppNoticeService extends IService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/service/impl/AppNoticeServiceImpl.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/service/impl/AppNoticeServiceImpl.java new file mode 100644 index 0000000..9866b8a --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/service/impl/AppNoticeServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.demo.notice.service.impl; + +import org.jeecg.modules.demo.notice.entity.AppNotice; +import org.jeecg.modules.demo.notice.mapper.AppNoticeMapper; +import org.jeecg.modules.demo.notice.service.IAppNoticeService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 公告管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Service +public class AppNoticeServiceImpl extends ServiceImpl implements IAppNoticeService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/uniapp/AppNoticeForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/uniapp/AppNoticeForm.vue new file mode 100644 index 0000000..cbf6d47 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/uniapp/AppNoticeForm.vue @@ -0,0 +1,102 @@ + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/uniapp/AppNoticeList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/uniapp/AppNoticeList.vue new file mode 100644 index 0000000..9c67b8c --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/uniapp/AppNoticeList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNotice.api.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNotice.api.ts new file mode 100644 index 0000000..3dfef06 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNotice.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/notice/appNotice/list', + save='/notice/appNotice/add', + edit='/notice/appNotice/edit', + deleteOne = '/notice/appNotice/delete', + deleteBatch = '/notice/appNotice/deleteBatch', + importExcel = '/notice/appNotice/importExcel', + exportXls = '/notice/appNotice/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNotice.data.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNotice.data.ts new file mode 100644 index 0000000..04e191f --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNotice.data.ts @@ -0,0 +1,128 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '标题', + align:"center", + dataIndex: 'title' + }, + { + title: '状态', + align:"center", + dataIndex: 'status_dictText' + }, + { + title: '排序', + align:"center", + sorter: true, + dataIndex: 'sort' + }, + { + title: '创建日期', + align:"center", + sorter: true, + dataIndex: 'createTime' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ + { + label: "标题", + field: "title", + component: 'JInput', + }, + { + label: "状态", + field: 'status', + component: 'JSelectMultiple', + componentProps:{ + dictCode:"dict_item_status" + }, + //colProps: {span: 6}, + }, + { + label: "创建日期", + field: "createTime", + component: 'RangePicker', + componentProps: { + valueType: 'Date', + showTime:true + }, + //colProps: {span: 6}, + }, +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '标题', + field: 'title', + component: 'Input', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入标题!'}, + ]; + }, + }, + { + label: '内容', + field: 'content', + component: 'JEditor', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入内容!'}, + ]; + }, + }, + { + label: '状态', + field: 'status', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"dict_item_status", + type: "radio" + }, + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入状态!'}, + ]; + }, + }, + { + label: '排序', + field: 'sort', + component: 'InputNumber', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入排序!'}, + ]; + }, + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + title: {title: '标题',order: 0,view: 'text', type: 'string',}, + status: {title: '状态',order: 2,view: 'number', type: 'number',dictCode: 'dict_item_status',}, + sort: {title: '排序',order: 3,view: 'number', type: 'number',}, + createTime: {title: '创建日期',order: 4,view: 'datetime', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNoticeList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNoticeList.vue new file mode 100644 index 0000000..be443c7 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/AppNoticeList.vue @@ -0,0 +1,195 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/V20250216_1__menu_insert_AppNotice.sql b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/V20250216_1__menu_insert_AppNotice.sql new file mode 100644 index 0000000..0ce7d36 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/V20250216_1__menu_insert_AppNotice.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/notice文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025021603255270490', NULL, '公告管理', '/notice/appNoticeList', 'notice/AppNoticeList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-02-16 15:25:49', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021603255270491', '2025021603255270490', '添加公告管理', NULL, NULL, 0, NULL, NULL, 2, 'notice:app_notice:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 15:25:49', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021603255270492', '2025021603255270490', '编辑公告管理', NULL, NULL, 0, NULL, NULL, 2, 'notice:app_notice:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 15:25:49', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021603255270493', '2025021603255270490', '删除公告管理', NULL, NULL, 0, NULL, NULL, 2, 'notice:app_notice:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 15:25:49', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021603255270494', '2025021603255270490', '批量删除公告管理', NULL, NULL, 0, NULL, NULL, 2, 'notice:app_notice:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 15:25:49', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021603255270495', '2025021603255270490', '导出excel_公告管理', NULL, NULL, 0, NULL, NULL, 2, 'notice:app_notice:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 15:25:49', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021603255270496', '2025021603255270490', '导入excel_公告管理', NULL, NULL, 0, NULL, NULL, 2, 'notice:app_notice:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 15:25:49', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/components/AppNoticeForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/components/AppNoticeForm.vue new file mode 100644 index 0000000..f46908d --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/components/AppNoticeForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/components/AppNoticeModal.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/components/AppNoticeModal.vue new file mode 100644 index 0000000..f25181c --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/notice/vue3/components/AppNoticeModal.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/controller/AppProductController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/controller/AppProductController.java new file mode 100644 index 0000000..6c29b06 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/controller/AppProductController.java @@ -0,0 +1,180 @@ +package org.jeecg.modules.demo.product.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.demo.product.entity.AppProduct; +import org.jeecg.modules.demo.product.service.IAppProductService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + + /** + * @Description: 产品管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Api(tags="产品管理") +@RestController +@RequestMapping("/product/appProduct") +@Slf4j +public class AppProductController extends JeecgController { + @Autowired + private IAppProductService appProductService; + + /** + * 分页列表查询 + * + * @param appProduct + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "产品管理-分页列表查询") + @ApiOperation(value="产品管理-分页列表查询", notes="产品管理-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AppProduct appProduct, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appProduct, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = appProductService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param appProduct + * @return + */ + @AutoLog(value = "产品管理-添加") + @ApiOperation(value="产品管理-添加", notes="产品管理-添加") + @RequiresPermissions("product:app_product:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AppProduct appProduct) { + appProductService.save(appProduct); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param appProduct + * @return + */ + @AutoLog(value = "产品管理-编辑") + @ApiOperation(value="产品管理-编辑", notes="产品管理-编辑") + @RequiresPermissions("product:app_product:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AppProduct appProduct) { + appProductService.updateById(appProduct); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "产品管理-通过id删除") + @ApiOperation(value="产品管理-通过id删除", notes="产品管理-通过id删除") + @RequiresPermissions("product:app_product:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + appProductService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "产品管理-批量删除") + @ApiOperation(value="产品管理-批量删除", notes="产品管理-批量删除") + @RequiresPermissions("product:app_product:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.appProductService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "产品管理-通过id查询") + @ApiOperation(value="产品管理-通过id查询", notes="产品管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AppProduct appProduct = appProductService.getById(id); + if(appProduct==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(appProduct); + } + + /** + * 导出excel + * + * @param request + * @param appProduct + */ + @RequiresPermissions("product:app_product:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AppProduct appProduct) { + return super.exportXls(request, appProduct, AppProduct.class, "产品管理"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("product:app_product:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AppProduct.class); + } + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/entity/AppProduct.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/entity/AppProduct.java new file mode 100644 index 0000000..018fd80 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/entity/AppProduct.java @@ -0,0 +1,76 @@ +package org.jeecg.modules.demo.product.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 产品管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Data +@TableName("app_product") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="app_product对象", description="产品管理") +public class AppProduct implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + /**产品名称*/ + @Excel(name = "产品名称", width = 15) + @ApiModelProperty(value = "产品名称") + private java.lang.String name; + /**产品分类*/ + @Excel(name = "产品分类", width = 15) + @ApiModelProperty(value = "产品分类") + private java.lang.Integer categoryId; + /**产品内容*/ + @Excel(name = "产品内容", width = 15) + @ApiModelProperty(value = "产品内容") + private java.lang.String content; + /**产品合同模板*/ + @Excel(name = "产品合同模板", width = 15) + @ApiModelProperty(value = "产品合同模板") + private java.lang.String pdf; + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/mapper/AppProductMapper.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/mapper/AppProductMapper.java new file mode 100644 index 0000000..ef05096 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/mapper/AppProductMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.demo.product.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.demo.product.entity.AppProduct; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 产品管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface AppProductMapper extends BaseMapper { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/mapper/xml/AppProductMapper.xml b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/mapper/xml/AppProductMapper.xml new file mode 100644 index 0000000..7f98ede --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/mapper/xml/AppProductMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/service/IAppProductService.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/service/IAppProductService.java new file mode 100644 index 0000000..361603b --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/service/IAppProductService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.demo.product.service; + +import org.jeecg.modules.demo.product.entity.AppProduct; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 产品管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface IAppProductService extends IService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/service/impl/AppProductServiceImpl.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/service/impl/AppProductServiceImpl.java new file mode 100644 index 0000000..85ff9d1 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/service/impl/AppProductServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.demo.product.service.impl; + +import org.jeecg.modules.demo.product.entity.AppProduct; +import org.jeecg.modules.demo.product.mapper.AppProductMapper; +import org.jeecg.modules.demo.product.service.IAppProductService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 产品管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Service +public class AppProductServiceImpl extends ServiceImpl implements IAppProductService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/uniapp/AppProductForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/uniapp/AppProductForm.vue new file mode 100644 index 0000000..bce0c07 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/uniapp/AppProductForm.vue @@ -0,0 +1,102 @@ + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/uniapp/AppProductList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/uniapp/AppProductList.vue new file mode 100644 index 0000000..c22dbdf --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/uniapp/AppProductList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProduct.api.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProduct.api.ts new file mode 100644 index 0000000..97932c4 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProduct.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/product/appProduct/list', + save='/product/appProduct/add', + edit='/product/appProduct/edit', + deleteOne = '/product/appProduct/delete', + deleteBatch = '/product/appProduct/deleteBatch', + importExcel = '/product/appProduct/importExcel', + exportXls = '/product/appProduct/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProduct.data.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProduct.data.ts new file mode 100644 index 0000000..b95dca0 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProduct.data.ts @@ -0,0 +1,124 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '产品名称', + align:"center", + dataIndex: 'name' + }, + { + title: '产品分类', + align:"center", + dataIndex: 'categoryId_dictText' + }, + { + title: '产品内容', + align:"center", + dataIndex: 'content' + }, + { + title: '产品合同模板', + align:"center", + dataIndex: 'pdf', + }, + { + title: '创建日期', + align:"center", + dataIndex: 'createTime' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ + { + label: "产品名称", + field: "name", + component: 'JInput', + }, + { + label: "产品内容", + field: "content", + component: 'JInput', + }, + { + label: "创建日期", + field: "createTime", + component: 'RangePicker', + componentProps: { + valueType: 'Date', + showTime:true + }, + //colProps: {span: 6}, + }, +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '产品名称', + field: 'name', + component: 'Input', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入产品名称!'}, + ]; + }, + }, + { + label: '产品分类', + field: 'categoryId', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"" + }, + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入产品分类!'}, + ]; + }, + }, + { + label: '产品内容', + field: 'content', + component: 'Input', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入产品内容!'}, + ]; + }, + }, + { + label: '产品合同模板', + field: 'pdf', + component: 'JUpload', + componentProps:{ + }, + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + name: {title: '产品名称',order: 0,view: 'text', type: 'string',}, + categoryId: {title: '产品分类',order: 1,view: 'number', type: 'number',dictCode: '',}, + content: {title: '产品内容',order: 2,view: 'text', type: 'string',}, + pdf: {title: '产品合同模板',order: 3,view: 'file', type: 'string',}, + createTime: {title: '创建日期',order: 4,view: 'datetime', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProductList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProductList.vue new file mode 100644 index 0000000..3dff3bd --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/AppProductList.vue @@ -0,0 +1,196 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/vue3/V20250211_1__menu_insert_AppBanner.sql b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/V20250216_1__menu_insert_AppProduct.sql similarity index 57% rename from jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/vue3/V20250211_1__menu_insert_AppBanner.sql rename to jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/V20250216_1__menu_insert_AppProduct.sql index 2724e45..75ff7f2 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/appbanner/vue3/V20250211_1__menu_insert_AppBanner.sql +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/V20250216_1__menu_insert_AppProduct.sql @@ -1,26 +1,26 @@ --- 注意:该页面对应的前台目录为views/appbanner文件夹下 +-- 注意:该页面对应的前台目录为views/product文件夹下 -- 如果你想更改到其他目录,请修改sql中component字段对应的值 -INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) -VALUES ('2025021104268720180', NULL, '应用广告配置', '/appbanner/appBannerList', 'appbanner/AppBannerList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-02-11 16:26:18', NULL, NULL, 0); +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025021604252050570', NULL, '产品管理', '/app/appProductList', 'miniapp/product/AppProductList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-02-16 16:25:57', NULL, NULL, 0); -- 权限控制sql -- 新增 INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) -VALUES ('2025021104268720181', '2025021104268720180', '添加应用广告配置', NULL, NULL, 0, NULL, NULL, 2, 'appbanner:app_banner:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-11 16:26:18', NULL, NULL, 0, 0, '1', 0); +VALUES ('2025021604252050571', '2025021604252050570', '添加产品管理', NULL, NULL, 0, NULL, NULL, 2, 'product:app_product:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:25:57', NULL, NULL, 0, 0, '1', 0); -- 编辑 INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) -VALUES ('2025021104268720182', '2025021104268720180', '编辑应用广告配置', NULL, NULL, 0, NULL, NULL, 2, 'appbanner:app_banner:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-11 16:26:18', NULL, NULL, 0, 0, '1', 0); +VALUES ('2025021604252050572', '2025021604252050570', '编辑产品管理', NULL, NULL, 0, NULL, NULL, 2, 'product:app_product:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:25:57', NULL, NULL, 0, 0, '1', 0); -- 删除 INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) -VALUES ('2025021104268720183', '2025021104268720180', '删除应用广告配置', NULL, NULL, 0, NULL, NULL, 2, 'appbanner:app_banner:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-11 16:26:18', NULL, NULL, 0, 0, '1', 0); +VALUES ('2025021604252050573', '2025021604252050570', '删除产品管理', NULL, NULL, 0, NULL, NULL, 2, 'product:app_product:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:25:57', NULL, NULL, 0, 0, '1', 0); -- 批量删除 INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) -VALUES ('2025021104268720184', '2025021104268720180', '批量删除应用广告配置', NULL, NULL, 0, NULL, NULL, 2, 'appbanner:app_banner:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-11 16:26:18', NULL, NULL, 0, 0, '1', 0); +VALUES ('2025021604252050574', '2025021604252050570', '批量删除产品管理', NULL, NULL, 0, NULL, NULL, 2, 'product:app_product:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:25:57', NULL, NULL, 0, 0, '1', 0); -- 导出excel INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) -VALUES ('2025021104268720185', '2025021104268720180', '导出excel_应用广告配置', NULL, NULL, 0, NULL, NULL, 2, 'appbanner:app_banner:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-11 16:26:18', NULL, NULL, 0, 0, '1', 0); +VALUES ('2025021604252050575', '2025021604252050570', '导出excel_产品管理', NULL, NULL, 0, NULL, NULL, 2, 'product:app_product:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:25:57', NULL, NULL, 0, 0, '1', 0); -- 导入excel INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) -VALUES ('2025021104268720186', '2025021104268720180', '导入excel_应用广告配置', NULL, NULL, 0, NULL, NULL, 2, 'appbanner:app_banner:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-11 16:26:18', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file +VALUES ('2025021604252050576', '2025021604252050570', '导入excel_产品管理', NULL, NULL, 0, NULL, NULL, 2, 'product:app_product:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:25:57', NULL, NULL, 0, 0, '1', 0); diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/components/AppProductForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/components/AppProductForm.vue new file mode 100644 index 0000000..180413b --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/components/AppProductForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/components/AppProductModal.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/components/AppProductModal.vue new file mode 100644 index 0000000..7f4453b --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/product/vue3/components/AppProductModal.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/controller/AppCategoryController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/controller/AppCategoryController.java new file mode 100644 index 0000000..f02df22 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/controller/AppCategoryController.java @@ -0,0 +1,180 @@ +package org.jeecg.modules.demo.productCategory.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.demo.productCategory.entity.AppCategory; +import org.jeecg.modules.demo.productCategory.service.IAppCategoryService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + + /** + * @Description: 产品分类管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Api(tags="产品分类管理") +@RestController +@RequestMapping("/productCategory/appCategory") +@Slf4j +public class AppCategoryController extends JeecgController { + @Autowired + private IAppCategoryService appCategoryService; + + /** + * 分页列表查询 + * + * @param appCategory + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "产品分类管理-分页列表查询") + @ApiOperation(value="产品分类管理-分页列表查询", notes="产品分类管理-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AppCategory appCategory, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appCategory, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = appCategoryService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param appCategory + * @return + */ + @AutoLog(value = "产品分类管理-添加") + @ApiOperation(value="产品分类管理-添加", notes="产品分类管理-添加") + @RequiresPermissions("productCategory:app_category:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AppCategory appCategory) { + appCategoryService.save(appCategory); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param appCategory + * @return + */ + @AutoLog(value = "产品分类管理-编辑") + @ApiOperation(value="产品分类管理-编辑", notes="产品分类管理-编辑") + @RequiresPermissions("productCategory:app_category:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AppCategory appCategory) { + appCategoryService.updateById(appCategory); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "产品分类管理-通过id删除") + @ApiOperation(value="产品分类管理-通过id删除", notes="产品分类管理-通过id删除") + @RequiresPermissions("productCategory:app_category:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + appCategoryService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "产品分类管理-批量删除") + @ApiOperation(value="产品分类管理-批量删除", notes="产品分类管理-批量删除") + @RequiresPermissions("productCategory:app_category:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.appCategoryService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "产品分类管理-通过id查询") + @ApiOperation(value="产品分类管理-通过id查询", notes="产品分类管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AppCategory appCategory = appCategoryService.getById(id); + if(appCategory==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(appCategory); + } + + /** + * 导出excel + * + * @param request + * @param appCategory + */ + @RequiresPermissions("productCategory:app_category:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AppCategory appCategory) { + return super.exportXls(request, appCategory, AppCategory.class, "产品分类管理"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("productCategory:app_category:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AppCategory.class); + } + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/entity/AppCategory.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/entity/AppCategory.java new file mode 100644 index 0000000..8581338 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/entity/AppCategory.java @@ -0,0 +1,64 @@ +package org.jeecg.modules.demo.productCategory.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 产品分类管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Data +@TableName("app_category") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="app_category对象", description="产品分类管理") +public class AppCategory implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + /**名称*/ + @Excel(name = "名称", width = 15) + @ApiModelProperty(value = "名称") + private java.lang.String categoryName; + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/mapper/AppCategoryMapper.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/mapper/AppCategoryMapper.java new file mode 100644 index 0000000..84d93e6 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/mapper/AppCategoryMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.demo.productCategory.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.demo.productCategory.entity.AppCategory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 产品分类管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface AppCategoryMapper extends BaseMapper { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/mapper/xml/AppCategoryMapper.xml b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/mapper/xml/AppCategoryMapper.xml new file mode 100644 index 0000000..d3e33df --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/mapper/xml/AppCategoryMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/service/IAppCategoryService.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/service/IAppCategoryService.java new file mode 100644 index 0000000..862f051 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/service/IAppCategoryService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.demo.productCategory.service; + +import org.jeecg.modules.demo.productCategory.entity.AppCategory; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 产品分类管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface IAppCategoryService extends IService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/service/impl/AppCategoryServiceImpl.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/service/impl/AppCategoryServiceImpl.java new file mode 100644 index 0000000..cc05693 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/service/impl/AppCategoryServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.demo.productCategory.service.impl; + +import org.jeecg.modules.demo.productCategory.entity.AppCategory; +import org.jeecg.modules.demo.productCategory.mapper.AppCategoryMapper; +import org.jeecg.modules.demo.productCategory.service.IAppCategoryService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 产品分类管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Service +public class AppCategoryServiceImpl extends ServiceImpl implements IAppCategoryService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/uniapp/AppCategoryForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/uniapp/AppCategoryForm.vue new file mode 100644 index 0000000..0cb64c3 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/uniapp/AppCategoryForm.vue @@ -0,0 +1,84 @@ + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/uniapp/AppCategoryList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/uniapp/AppCategoryList.vue new file mode 100644 index 0000000..89c8f69 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/uniapp/AppCategoryList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategory.api.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategory.api.ts new file mode 100644 index 0000000..7e0611d --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategory.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/productCategory/appCategory/list', + save='/productCategory/appCategory/add', + edit='/productCategory/appCategory/edit', + deleteOne = '/productCategory/appCategory/delete', + deleteBatch = '/productCategory/appCategory/deleteBatch', + importExcel = '/productCategory/appCategory/importExcel', + exportXls = '/productCategory/appCategory/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategory.data.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategory.data.ts new file mode 100644 index 0000000..88c247d --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategory.data.ts @@ -0,0 +1,71 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '名称', + align:"center", + dataIndex: 'categoryName' + }, + { + title: '创建日期', + align:"center", + dataIndex: 'createTime' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ + { + label: "名称", + field: "categoryName", + component: 'JInput', + }, + { + label: "创建日期", + field: "createTime", + component: 'RangePicker', + componentProps: { + valueType: 'Date', + showTime:true + }, + //colProps: {span: 6}, + }, +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '名称', + field: 'categoryName', + component: 'Input', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入名称!'}, + ]; + }, + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + categoryName: {title: '名称',order: 0,view: 'text', type: 'string',}, + createTime: {title: '创建日期',order: 1,view: 'datetime', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategoryList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategoryList.vue new file mode 100644 index 0000000..6bad93a --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/AppCategoryList.vue @@ -0,0 +1,191 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/V20250216_1__menu_insert_AppCategory.sql b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/V20250216_1__menu_insert_AppCategory.sql new file mode 100644 index 0000000..a5137ad --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/V20250216_1__menu_insert_AppCategory.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/productCategory文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025021604261960250', NULL, '产品分类管理', '/app/appCategoryList', 'miniapp/productCategory/AppCategoryList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-02-16 16:26:25', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604261960251', '2025021604261960250', '添加产品分类管理', NULL, NULL, 0, NULL, NULL, 2, 'productCategory:app_category:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:26:25', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604261960252', '2025021604261960250', '编辑产品分类管理', NULL, NULL, 0, NULL, NULL, 2, 'productCategory:app_category:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:26:25', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604261960253', '2025021604261960250', '删除产品分类管理', NULL, NULL, 0, NULL, NULL, 2, 'productCategory:app_category:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:26:25', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604261960254', '2025021604261960250', '批量删除产品分类管理', NULL, NULL, 0, NULL, NULL, 2, 'productCategory:app_category:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:26:25', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604261960255', '2025021604261960250', '导出excel_产品分类管理', NULL, NULL, 0, NULL, NULL, 2, 'productCategory:app_category:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:26:25', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604261960256', '2025021604261960250', '导入excel_产品分类管理', NULL, NULL, 0, NULL, NULL, 2, 'productCategory:app_category:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:26:25', NULL, NULL, 0, 0, '1', 0); diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/components/AppCategoryForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/components/AppCategoryForm.vue new file mode 100644 index 0000000..754258f --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/components/AppCategoryForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/components/AppCategoryModal.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/components/AppCategoryModal.vue new file mode 100644 index 0000000..b147a1a --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategory/vue3/components/AppCategoryModal.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/controller/AppProductCategoryJoinController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/controller/AppProductCategoryJoinController.java new file mode 100644 index 0000000..1fabcce --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/controller/AppProductCategoryJoinController.java @@ -0,0 +1,180 @@ +package org.jeecg.modules.demo.productCategoryJoin.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.demo.productCategoryJoin.entity.AppProductCategoryJoin; +import org.jeecg.modules.demo.productCategoryJoin.service.IAppProductCategoryJoinService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + + /** + * @Description: 产品分类关联表 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Api(tags="产品分类关联表") +@RestController +@RequestMapping("/productCategoryJoin/appProductCategoryJoin") +@Slf4j +public class AppProductCategoryJoinController extends JeecgController { + @Autowired + private IAppProductCategoryJoinService appProductCategoryJoinService; + + /** + * 分页列表查询 + * + * @param appProductCategoryJoin + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "产品分类关联表-分页列表查询") + @ApiOperation(value="产品分类关联表-分页列表查询", notes="产品分类关联表-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AppProductCategoryJoin appProductCategoryJoin, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appProductCategoryJoin, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = appProductCategoryJoinService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param appProductCategoryJoin + * @return + */ + @AutoLog(value = "产品分类关联表-添加") + @ApiOperation(value="产品分类关联表-添加", notes="产品分类关联表-添加") + @RequiresPermissions("productCategoryJoin:app_product_category_join:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AppProductCategoryJoin appProductCategoryJoin) { + appProductCategoryJoinService.save(appProductCategoryJoin); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param appProductCategoryJoin + * @return + */ + @AutoLog(value = "产品分类关联表-编辑") + @ApiOperation(value="产品分类关联表-编辑", notes="产品分类关联表-编辑") + @RequiresPermissions("productCategoryJoin:app_product_category_join:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AppProductCategoryJoin appProductCategoryJoin) { + appProductCategoryJoinService.updateById(appProductCategoryJoin); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "产品分类关联表-通过id删除") + @ApiOperation(value="产品分类关联表-通过id删除", notes="产品分类关联表-通过id删除") + @RequiresPermissions("productCategoryJoin:app_product_category_join:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + appProductCategoryJoinService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "产品分类关联表-批量删除") + @ApiOperation(value="产品分类关联表-批量删除", notes="产品分类关联表-批量删除") + @RequiresPermissions("productCategoryJoin:app_product_category_join:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.appProductCategoryJoinService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "产品分类关联表-通过id查询") + @ApiOperation(value="产品分类关联表-通过id查询", notes="产品分类关联表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AppProductCategoryJoin appProductCategoryJoin = appProductCategoryJoinService.getById(id); + if(appProductCategoryJoin==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(appProductCategoryJoin); + } + + /** + * 导出excel + * + * @param request + * @param appProductCategoryJoin + */ + @RequiresPermissions("productCategoryJoin:app_product_category_join:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AppProductCategoryJoin appProductCategoryJoin) { + return super.exportXls(request, appProductCategoryJoin, AppProductCategoryJoin.class, "产品分类关联表"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("productCategoryJoin:app_product_category_join:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AppProductCategoryJoin.class); + } + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/entity/AppProductCategoryJoin.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/entity/AppProductCategoryJoin.java new file mode 100644 index 0000000..fe3b124 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/entity/AppProductCategoryJoin.java @@ -0,0 +1,68 @@ +package org.jeecg.modules.demo.productCategoryJoin.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 产品分类关联表 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Data +@TableName("app_product_category_join") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="app_product_category_join对象", description="产品分类关联表") +public class AppProductCategoryJoin implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + /**产品 id*/ + @Excel(name = "产品 id", width = 15) + @ApiModelProperty(value = "产品 id") + private java.lang.Integer productId; + /**分类 id*/ + @Excel(name = "分类 id", width = 15) + @ApiModelProperty(value = "分类 id") + private java.lang.Integer categoryId; + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/mapper/AppProductCategoryJoinMapper.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/mapper/AppProductCategoryJoinMapper.java new file mode 100644 index 0000000..f475b85 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/mapper/AppProductCategoryJoinMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.demo.productCategoryJoin.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.demo.productCategoryJoin.entity.AppProductCategoryJoin; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 产品分类关联表 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface AppProductCategoryJoinMapper extends BaseMapper { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/mapper/xml/AppProductCategoryJoinMapper.xml b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/mapper/xml/AppProductCategoryJoinMapper.xml new file mode 100644 index 0000000..5f76977 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/mapper/xml/AppProductCategoryJoinMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/service/IAppProductCategoryJoinService.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/service/IAppProductCategoryJoinService.java new file mode 100644 index 0000000..c746c8d --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/service/IAppProductCategoryJoinService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.demo.productCategoryJoin.service; + +import org.jeecg.modules.demo.productCategoryJoin.entity.AppProductCategoryJoin; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 产品分类关联表 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface IAppProductCategoryJoinService extends IService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/service/impl/AppProductCategoryJoinServiceImpl.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/service/impl/AppProductCategoryJoinServiceImpl.java new file mode 100644 index 0000000..58b0c05 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/service/impl/AppProductCategoryJoinServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.demo.productCategoryJoin.service.impl; + +import org.jeecg.modules.demo.productCategoryJoin.entity.AppProductCategoryJoin; +import org.jeecg.modules.demo.productCategoryJoin.mapper.AppProductCategoryJoinMapper; +import org.jeecg.modules.demo.productCategoryJoin.service.IAppProductCategoryJoinService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 产品分类关联表 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Service +public class AppProductCategoryJoinServiceImpl extends ServiceImpl implements IAppProductCategoryJoinService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/uniapp/AppProductCategoryJoinForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/uniapp/AppProductCategoryJoinForm.vue new file mode 100644 index 0000000..b71dbdd --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/uniapp/AppProductCategoryJoinForm.vue @@ -0,0 +1,90 @@ + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/uniapp/AppProductCategoryJoinList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/uniapp/AppProductCategoryJoinList.vue new file mode 100644 index 0000000..53605da --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/uniapp/AppProductCategoryJoinList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoin.api.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoin.api.ts new file mode 100644 index 0000000..5835861 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoin.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/productCategoryJoin/appProductCategoryJoin/list', + save='/productCategoryJoin/appProductCategoryJoin/add', + edit='/productCategoryJoin/appProductCategoryJoin/edit', + deleteOne = '/productCategoryJoin/appProductCategoryJoin/delete', + deleteBatch = '/productCategoryJoin/appProductCategoryJoin/deleteBatch', + importExcel = '/productCategoryJoin/appProductCategoryJoin/importExcel', + exportXls = '/productCategoryJoin/appProductCategoryJoin/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoin.data.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoin.data.ts new file mode 100644 index 0000000..324dc84 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoin.data.ts @@ -0,0 +1,72 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '产品 id', + align:"center", + dataIndex: 'productId' + }, + { + title: '分类 id', + align:"center", + dataIndex: 'categoryId' + }, + { + title: '创建日期', + align:"center", + dataIndex: 'createTime' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '产品 id', + field: 'productId', + component: 'InputNumber', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入产品 id!'}, + ]; + }, + }, + { + label: '分类 id', + field: 'categoryId', + component: 'InputNumber', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入分类 id!'}, + ]; + }, + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + productId: {title: '产品 id',order: 0,view: 'number', type: 'number',}, + categoryId: {title: '分类 id',order: 1,view: 'number', type: 'number',}, + createTime: {title: '创建日期',order: 2,view: 'datetime', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoinList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoinList.vue new file mode 100644 index 0000000..ce86da0 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/AppProductCategoryJoinList.vue @@ -0,0 +1,190 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/V20250216_1__menu_insert_AppProductCategoryJoin.sql b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/V20250216_1__menu_insert_AppProductCategoryJoin.sql new file mode 100644 index 0000000..0c9aaa3 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/V20250216_1__menu_insert_AppProductCategoryJoin.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/productCategoryJoin文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025021604458930590', NULL, '产品分类关联表', '/productCategoryJoin/appProductCategoryJoinList', 'productCategoryJoin/AppProductCategoryJoinList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-02-16 16:45:59', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604458930591', '2025021604458930590', '添加产品分类关联表', NULL, NULL, 0, NULL, NULL, 2, 'productCategoryJoin:app_product_category_join:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:45:59', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604458930592', '2025021604458930590', '编辑产品分类关联表', NULL, NULL, 0, NULL, NULL, 2, 'productCategoryJoin:app_product_category_join:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:45:59', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604458930593', '2025021604458930590', '删除产品分类关联表', NULL, NULL, 0, NULL, NULL, 2, 'productCategoryJoin:app_product_category_join:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:45:59', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604458930594', '2025021604458930590', '批量删除产品分类关联表', NULL, NULL, 0, NULL, NULL, 2, 'productCategoryJoin:app_product_category_join:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:45:59', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604458930595', '2025021604458930590', '导出excel_产品分类关联表', NULL, NULL, 0, NULL, NULL, 2, 'productCategoryJoin:app_product_category_join:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:45:59', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021604458930596', '2025021604458930590', '导入excel_产品分类关联表', NULL, NULL, 0, NULL, NULL, 2, 'productCategoryJoin:app_product_category_join:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 16:45:59', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/components/AppProductCategoryJoinForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/components/AppProductCategoryJoinForm.vue new file mode 100644 index 0000000..85e1a28 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/components/AppProductCategoryJoinForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/components/AppProductCategoryJoinModal.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/components/AppProductCategoryJoinModal.vue new file mode 100644 index 0000000..e24d240 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/productCategoryJoin/vue3/components/AppProductCategoryJoinModal.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/controller/AppStoreController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/controller/AppStoreController.java new file mode 100644 index 0000000..624d215 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/controller/AppStoreController.java @@ -0,0 +1,184 @@ +package org.jeecg.modules.demo.store.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.demo.store.entity.AppStore; +import org.jeecg.modules.demo.store.service.IAppStoreService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + + /** + * @Description: 门店管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Api(tags="门店管理") +@RestController +@RequestMapping("/store/appStore") +@Slf4j +public class AppStoreController extends JeecgController { + @Autowired + private IAppStoreService appStoreService; + + /** + * 分页列表查询 + * + * @param appStore + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "门店管理-分页列表查询") + @ApiOperation(value="门店管理-分页列表查询", notes="门店管理-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AppStore appStore, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + // 自定义查询规则 + Map customeRuleMap = new HashMap<>(); + // 自定义多选的查询规则为:LIKE_WITH_OR + customeRuleMap.put("status", QueryRuleEnum.LIKE_WITH_OR); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appStore, req.getParameterMap(),customeRuleMap); + Page page = new Page(pageNo, pageSize); + IPage pageList = appStoreService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param appStore + * @return + */ + @AutoLog(value = "门店管理-添加") + @ApiOperation(value="门店管理-添加", notes="门店管理-添加") + @RequiresPermissions("store:app_store:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AppStore appStore) { + appStoreService.save(appStore); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param appStore + * @return + */ + @AutoLog(value = "门店管理-编辑") + @ApiOperation(value="门店管理-编辑", notes="门店管理-编辑") + @RequiresPermissions("store:app_store:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AppStore appStore) { + appStoreService.updateById(appStore); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "门店管理-通过id删除") + @ApiOperation(value="门店管理-通过id删除", notes="门店管理-通过id删除") + @RequiresPermissions("store:app_store:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + appStoreService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "门店管理-批量删除") + @ApiOperation(value="门店管理-批量删除", notes="门店管理-批量删除") + @RequiresPermissions("store:app_store:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.appStoreService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "门店管理-通过id查询") + @ApiOperation(value="门店管理-通过id查询", notes="门店管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AppStore appStore = appStoreService.getById(id); + if(appStore==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(appStore); + } + + /** + * 导出excel + * + * @param request + * @param appStore + */ + @RequiresPermissions("store:app_store:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AppStore appStore) { + return super.exportXls(request, appStore, AppStore.class, "门店管理"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("store:app_store:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AppStore.class); + } + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/entity/AppStore.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/entity/AppStore.java new file mode 100644 index 0000000..510b478 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/entity/AppStore.java @@ -0,0 +1,73 @@ +package org.jeecg.modules.demo.store.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 门店管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Data +@TableName("app_store") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="app_store对象", description="门店管理") +public class AppStore implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + /**门店名称*/ + @Excel(name = "门店名称", width = 15) + @ApiModelProperty(value = "门店名称") + private java.lang.String storeName; + /**状态*/ + @Excel(name = "状态", width = 15, dicCode = "dict_item_status") + @Dict(dicCode = "dict_item_status") + @ApiModelProperty(value = "状态") + private java.lang.Integer status; + /**备注*/ + @Excel(name = "备注", width = 15) + @ApiModelProperty(value = "备注") + private java.lang.String remark; + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/mapper/AppStoreMapper.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/mapper/AppStoreMapper.java new file mode 100644 index 0000000..8ce3a83 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/mapper/AppStoreMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.demo.store.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.demo.store.entity.AppStore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 门店管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface AppStoreMapper extends BaseMapper { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/mapper/xml/AppStoreMapper.xml b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/mapper/xml/AppStoreMapper.xml new file mode 100644 index 0000000..96bba55 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/mapper/xml/AppStoreMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/service/IAppStoreService.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/service/IAppStoreService.java new file mode 100644 index 0000000..f08c539 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/service/IAppStoreService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.demo.store.service; + +import org.jeecg.modules.demo.store.entity.AppStore; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 门店管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +public interface IAppStoreService extends IService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/service/impl/AppStoreServiceImpl.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/service/impl/AppStoreServiceImpl.java new file mode 100644 index 0000000..effcdf4 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/service/impl/AppStoreServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.demo.store.service.impl; + +import org.jeecg.modules.demo.store.entity.AppStore; +import org.jeecg.modules.demo.store.mapper.AppStoreMapper; +import org.jeecg.modules.demo.store.service.IAppStoreService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 门店管理 + * @Author: jeecg-boot + * @Date: 2025-02-16 + * @Version: V1.0 + */ +@Service +public class AppStoreServiceImpl extends ServiceImpl implements IAppStoreService { + +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/uniapp/AppStoreForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/uniapp/AppStoreForm.vue new file mode 100644 index 0000000..31611b1 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/uniapp/AppStoreForm.vue @@ -0,0 +1,96 @@ + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/uniapp/AppStoreList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/uniapp/AppStoreList.vue new file mode 100644 index 0000000..dac6b2f --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/uniapp/AppStoreList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStore.api.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStore.api.ts new file mode 100644 index 0000000..57073a4 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStore.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/store/appStore/list', + save='/store/appStore/add', + edit='/store/appStore/edit', + deleteOne = '/store/appStore/delete', + deleteBatch = '/store/appStore/deleteBatch', + importExcel = '/store/appStore/importExcel', + exportXls = '/store/appStore/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStore.data.ts b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStore.data.ts new file mode 100644 index 0000000..557dfdf --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStore.data.ts @@ -0,0 +1,102 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '门店名称', + align:"center", + dataIndex: 'storeName' + }, + { + title: '状态', + align:"center", + dataIndex: 'status_dictText' + }, + { + title: '备注', + align:"center", + dataIndex: 'remark' + }, + { + title: '创建日期', + align:"center", + dataIndex: 'createTime' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ + { + label: "门店名称", + field: "storeName", + component: 'JInput', + }, + { + label: "状态", + field: 'status', + component: 'JSelectMultiple', + componentProps:{ + dictCode:"dict_item_status" + }, + //colProps: {span: 6}, + }, +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '门店名称', + field: 'storeName', + component: 'Input', + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入门店名称!'}, + ]; + }, + }, + { + label: '状态', + field: 'status', + defaultValue: 1, + component: 'JDictSelectTag', + componentProps:{ + dictCode:"dict_item_status", + type: "radio" + }, + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入状态!'}, + ]; + }, + }, + { + label: '备注', + field: 'remark', + component: 'Input', + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + storeName: {title: '门店名称',order: 0,view: 'text', type: 'string',}, + status: {title: '状态',order: 1,view: 'number', type: 'number',dictCode: 'dict_item_status',}, + remark: {title: '备注',order: 2,view: 'text', type: 'string',}, + createTime: {title: '创建日期',order: 3,view: 'datetime', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStoreList.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStoreList.vue new file mode 100644 index 0000000..120cb32 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/AppStoreList.vue @@ -0,0 +1,190 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/V20250216_1__menu_insert_AppStore.sql b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/V20250216_1__menu_insert_AppStore.sql new file mode 100644 index 0000000..76a2b3d --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/V20250216_1__menu_insert_AppStore.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/store文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025021602224080490', NULL, '门店管理', '/app/appStoreList', 'miniapp/store/AppStoreList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-02-16 14:22:49', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021602224080491', '2025021602224080490', '添加门店管理', NULL, NULL, 0, NULL, NULL, 2, 'store:app_store:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 14:22:49', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021602224080492', '2025021602224080490', '编辑门店管理', NULL, NULL, 0, NULL, NULL, 2, 'store:app_store:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 14:22:49', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021602224080493', '2025021602224080490', '删除门店管理', NULL, NULL, 0, NULL, NULL, 2, 'store:app_store:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 14:22:49', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021602224080494', '2025021602224080490', '批量删除门店管理', NULL, NULL, 0, NULL, NULL, 2, 'store:app_store:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 14:22:49', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021602224080495', '2025021602224080490', '导出excel_门店管理', NULL, NULL, 0, NULL, NULL, 2, 'store:app_store:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 14:22:49', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025021602224080496', '2025021602224080490', '导入excel_门店管理', NULL, NULL, 0, NULL, NULL, 2, 'store:app_store:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-02-16 14:22:49', NULL, NULL, 0, 0, '1', 0); diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/components/AppStoreForm.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/components/AppStoreForm.vue new file mode 100644 index 0000000..469481b --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/components/AppStoreForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/components/AppStoreModal.vue b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/components/AppStoreModal.vue new file mode 100644 index 0000000..3f50b17 --- /dev/null +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/store/vue3/components/AppStoreModal.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java index 0be039e..4e7945d 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java @@ -125,8 +125,8 @@ public class RandImageUtil { // 设置字体颜色 graphics.setColor(Color.BLACK); // 设置字体样式 -// graphics.setFont(new Font("Arial Black", Font.ITALIC, 18)); - graphics.setFont(new Font("Times New Roman", Font.BOLD, 24)); + graphics.setFont(new Font("Arial Black,Arial, Helvetica, DejaVu Sans, Sans-serif", Font.ITALIC, 18)); +// graphics.setFont(new Font("Times New Roman", Font.BOLD, 24)); // 设置字符,字符间距,上边距 graphics.drawString(String.valueOf(resultCode.charAt(i)), (23 * i) + 8, 26); } @@ -151,4 +151,9 @@ public class RandImageUtil { return new Color(r, g, b); } + + public static void main(String[] args) throws IOException { + System.err.println(generate("1234")); + } + } diff --git a/jeecg-module-system/jeecg-system-start/pom.xml b/jeecg-module-system/jeecg-system-start/pom.xml index 94c7b26..744e9d6 100644 --- a/jeecg-module-system/jeecg-system-start/pom.xml +++ b/jeecg-module-system/jeecg-system-start/pom.xml @@ -38,17 +38,72 @@ + + + + + + + + + + + + + + + + org.springframework.boot spring-boot-maven-plugin - 2.7.15 - true + ZIP + + + nothing + nothing + + + + + + repackage + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.3.0 + + + copy-dependencies + package + + copy-dependencies + + + + ${project.build.directory}/lib + + runtime + + false + false + + + + + diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml index 3977ac0..07e774e 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml @@ -7,7 +7,7 @@ server: include-stacktrace: ALWAYS include-message: ALWAYS servlet: - context-path: /jeecg-boot + context-path: /contract compression: enabled: true min-response-size: 1024 diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dm8.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dm8.yml index b739fb5..83b179b 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dm8.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dm8.yml @@ -7,7 +7,7 @@ server: include-stacktrace: ALWAYS include-message: ALWAYS servlet: - context-path: /jeecg-boot + context-path: /contract compression: enabled: true min-response-size: 1024 diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-kingbase8.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-kingbase8.yml index 8069e6f..e7b5440 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-kingbase8.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-kingbase8.yml @@ -7,7 +7,7 @@ server: include-stacktrace: ALWAYS include-message: ALWAYS servlet: - context-path: /jeecg-boot + context-path: /contract compression: enabled: true min-response-size: 1024 diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml index e51b094..104c7aa 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml @@ -7,7 +7,7 @@ server: include-stacktrace: ALWAYS include-message: ALWAYS servlet: - context-path: /jeecg-boot + context-path: /contract compression: enabled: true min-response-size: 1024 diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml index 94019a7..a926b56 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml @@ -7,7 +7,7 @@ server: include-stacktrace: ALWAYS include-message: ALWAYS servlet: - context-path: /jeecg-boot + context-path: /contract compression: enabled: true min-response-size: 1024 @@ -163,9 +163,9 @@ spring: slow-sql-millis: 5000 datasource: master: - url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai - username: root - password: root + url: jdbc:mysql://8.138.162.67:3306/jeecg_boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + username: jeecg_boot_test + password: jeecg_boot_test_QM driver-class-name: com.mysql.cj.jdbc.Driver # 多数据源配置 #multi-datasource1: @@ -175,10 +175,10 @@ spring: #driver-class-name: com.mysql.cj.jdbc.Driver #redis 配置 redis: - database: 0 - host: 192.168.1.188 - port: 6379 - password: '' + database: 12 + host: 127.0.0.1 + port: 63799 + password: 'WEather_2024' #mybatis plus 设置 mybatis-plus: mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml @@ -186,13 +186,13 @@ mybatis-plus: # 关闭MP3.0自带的banner banner: false db-config: - #主键类型 + #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)"; id-type: ASSIGN_ID # 默认数据库表下划线命名 table-underline: true configuration: # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 返回类型为Map,显示null对应的字段 call-setters-on-nulls: true #jeecg专用配置 @@ -216,26 +216,26 @@ jeecg: signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a #签名拦截接口 signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys,/sys/sendChangePwdSms,/sys/user/sendChangePhoneSms,/sys/sms,/desform/api/sendVerifyCode - # local\minio\alioss - uploadType: local + # 本地:local、Minio:minio、阿里云:alioss + uploadType: alioss # 前端访问地址 domainUrl: pc: http://localhost:3100 app: http://localhost:8051 path: #文件上传根目录 设置 - upload: D://opt//upFiles + upload: /opt/upFiles #webapp文件路径 - webapp: D://opt//webapp + webapp: /opt/webapp shiro: excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/bigscreen/category/**,/bigscreen/visual/**,/bigscreen/map/**,/jmreport/bigscreen2/** #阿里云oss存储和大鱼短信秘钥配置 oss: - accessKey: ?? - secretKey: ?? - endpoint: oss-cn-beijing.aliyuncs.com - bucketName: jeecgdev - staticDomain: https://static.jeecg.com + accessKey: LTAI5tPfZo39q2r9Sr5mW84u + secretKey: XxExGallsV4O9nERHpVsQg2XtPCU7r + endpoint: oss-cn-guangzhou.aliyuncs.com + bucketName: augcl + staticDomain: https://img.augcl.com # 短信模板 sms-template: # 签名 @@ -249,17 +249,17 @@ jeecg: # 注册账号短信模板编码 SMS_175430166: # 在线预览文件服务器地址配置 - file-view-domain: http://127.0.0.1:8012 + file-view-domain: http://fileview.jeecg.com # minio文件上传 minio: minio_url: http://minio.jeecg.com minio_name: ?? minio_pass: ?? - bucketName: ?? + bucketName: otatest #大屏报表参数设置 jmreport: #多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增) - saasMode: + saasMode: # 平台上线安全配置(v1.6.2+ 新增) firewall: # 数据源安全 (开启后,不允许使用平台数据源、SQL解析加签并且不允许查询数据库) @@ -288,10 +288,10 @@ jeecg: app-id: ?? api-key: ?? secret-key: ?? - # ElasticSearch 设置 + # ElasticSearch 6设置 elasticsearch: cluster-name: jeecg-ES - cluster-nodes: 192.168.1.188:9200 + cluster-nodes: 127.0.0.1:9200 check-enabled: false #Mybatis输出sql日志 logging: @@ -336,3 +336,23 @@ justauth: type: default prefix: 'demo::' timeout: 1h + +# 微信小程序配置 +wx: + miniapp: + appid: wx68d9303618dc078a + secret: 253f72c42e4a4495546b104ea120f2de + aesKey: '' + msgDataFormat: 'JSON' # 消息格式,XML或者JSON. + token: '' + config-storage: + key-prefix: 'wa' # 相关redis前缀配置: wa(默认) + type: RedisTemplate # 配置类型: Memory(默认), Jedis, RedisTemplate + redis: + database: 12 + host: 14.103.91.133 + port: 63799 + password: 'WEather_2024' + #连接超时时间 + timeout: 5000 + http-client-type: 'HttpClient' # http客户端类型: HttpClient(默认), OkHttp, JoddHttp