From 5e26fdc7fb1a904d4232048d8946fbccedbcd4a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com>
Date: Sat, 17 Jan 2026 18:23:37 +0800
Subject: [PATCH] =?UTF-8?q?feat(app):=20=E5=88=9D=E5=A7=8B=E5=8C=96?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=85=8D=E7=BD=AE=E5=92=8C=E9=A1=B5=E9=9D=A2?=
=?UTF-8?q?=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 添加 .dockerignore 和 .env.example 配置文件
- 添加 .gitignore 忽略规则配置
- 创建服务端代理API路由(_file、_modules、_server)
- 集成 Ant Design Vue 组件库并配置SSR样式提取
- 定义API响应类型封装
- 创建基础布局组件(blank、console)
- 实现应用中心页面和组件(AppsCenter)
- 添加文章列表测试页面
- 配置控制台导航菜单结构
- 实现控制台头部组件
- 创建联系页面表单
---
.dockerignore | 15 +
.env.example | 12 +
.gitignore | 26 +
Dockerfile | 33 +
README.md | 193 +
app/api/bszx/bszxBm/index.ts | 106 +
app/api/bszx/bszxBm/model/index.ts | 78 +
app/api/bszx/bszxBranch/index.ts | 106 +
app/api/bszx/bszxBranch/model/index.ts | 23 +
app/api/bszx/bszxClass/index.ts | 106 +
app/api/bszx/bszxClass/model/index.ts | 48 +
app/api/bszx/bszxEra/index.ts | 106 +
app/api/bszx/bszxEra/model/index.ts | 21 +
app/api/bszx/bszxGrade/index.ts | 106 +
app/api/bszx/bszxGrade/model/index.ts | 37 +
app/api/bszx/bszxOrder/index.ts | 37 +
app/api/bszx/bszxPay/index.ts | 121 +
app/api/bszx/bszxPay/model/index.ts | 69 +
app/api/bszx/bszxPayRanking/index.ts | 135 +
app/api/bszx/bszxPayRanking/model/index.ts | 35 +
app/api/clinic/clinicAppointment/index.ts | 105 +
.../clinic/clinicAppointment/model/index.ts | 47 +
app/api/clinic/clinicDoctorApply/index.ts | 105 +
.../clinic/clinicDoctorApply/model/index.ts | 75 +
.../clinic/clinicDoctorMedicalRecord/index.ts | 105 +
.../clinicDoctorMedicalRecord/model/index.ts | 61 +
app/api/clinic/clinicDoctorUser/index.ts | 105 +
.../clinic/clinicDoctorUser/model/index.ts | 55 +
app/api/clinic/clinicMedicalHistory/index.ts | 105 +
.../clinicMedicalHistory/model/index.ts | 61 +
app/api/clinic/clinicMedicine/index.ts | 105 +
app/api/clinic/clinicMedicine/model/index.ts | 43 +
app/api/clinic/clinicMedicineInout/index.ts | 105 +
.../clinic/clinicMedicineInout/model/index.ts | 61 +
app/api/clinic/clinicMedicineStock/index.ts | 105 +
.../clinic/clinicMedicineStock/model/index.ts | 35 +
app/api/clinic/clinicOrder/index.ts | 105 +
app/api/clinic/clinicOrder/model/index.ts | 167 +
app/api/clinic/clinicPatientUser/index.ts | 105 +
.../clinic/clinicPatientUser/model/index.ts | 49 +
app/api/clinic/clinicPrescription/index.ts | 112 +
.../clinic/clinicPrescription/model/index.ts | 57 +
.../clinic/clinicPrescriptionItem/index.ts | 112 +
.../clinicPrescriptionItem/model/index.ts | 49 +
app/api/clinic/clinicReport/index.ts | 105 +
app/api/clinic/clinicReport/model/index.ts | 61 +
app/api/clinic/clinicVisitRecord/index.ts | 105 +
.../clinic/clinicVisitRecord/model/index.ts | 61 +
app/api/cms/cmsAd/index.ts | 106 +
app/api/cms/cmsAd/model/index.ts | 65 +
app/api/cms/cmsAdRecord/index.ts | 106 +
app/api/cms/cmsAdRecord/model/index.ts | 35 +
app/api/cms/cmsArticle/index.ts | 159 +
app/api/cms/cmsArticle/model/index.ts | 131 +
app/api/cms/cmsArticleCategory/index.ts | 108 +
app/api/cms/cmsArticleCategory/model/index.ts | 59 +
app/api/cms/cmsArticleComment/index.ts | 106 +
app/api/cms/cmsArticleComment/model/index.ts | 47 +
app/api/cms/cmsArticleContent/index.ts | 106 +
app/api/cms/cmsArticleContent/model/index.ts | 25 +
app/api/cms/cmsArticleCount/index.ts | 106 +
app/api/cms/cmsArticleCount/model/index.ts | 25 +
app/api/cms/cmsArticleLike/index.ts | 106 +
app/api/cms/cmsArticleLike/model/index.ts | 25 +
app/api/cms/cmsDesign/index.ts | 106 +
app/api/cms/cmsDesign/model/index.ts | 64 +
app/api/cms/cmsDomain/index.ts | 153 +
app/api/cms/cmsDomain/model/index.ts | 43 +
app/api/cms/cmsForm/index.ts | 106 +
app/api/cms/cmsForm/model/index.ts | 53 +
app/api/cms/cmsFormRecord/index.ts | 106 +
app/api/cms/cmsFormRecord/model/index.ts | 41 +
app/api/cms/cmsLang/index.ts | 106 +
app/api/cms/cmsLang/model/index.ts | 35 +
app/api/cms/cmsLangLog/index.ts | 106 +
app/api/cms/cmsLangLog/model/index.ts | 27 +
app/api/cms/cmsLink/index.ts | 120 +
app/api/cms/cmsLink/model/index.ts | 45 +
app/api/cms/cmsModel/index.ts | 106 +
app/api/cms/cmsModel/model/index.ts | 63 +
app/api/cms/cmsNavigation/index.ts | 151 +
app/api/cms/cmsNavigation/model/index.ts | 110 +
app/api/cms/cmsOrder/index.ts | 106 +
app/api/cms/cmsOrder/model/index.ts | 66 +
app/api/cms/cmsStatistics/index.ts | 106 +
app/api/cms/cmsStatistics/model/index.ts | 79 +
app/api/cms/cmsTemplate/index.ts | 106 +
app/api/cms/cmsTemplate/model/index.ts | 59 +
app/api/cms/cmsWebsite/index.ts | 175 +
app/api/cms/cmsWebsite/model/index.ts | 168 +
app/api/cms/cmsWebsiteField/index.ts | 167 +
app/api/cms/cmsWebsiteField/model/index.ts | 65 +
app/api/cms/cmsWebsiteSetting/index.ts | 106 +
app/api/cms/cmsWebsiteSetting/model/index.ts | 55 +
app/api/cms/link/index.ts | 113 +
app/api/cms/link/model/index.ts | 31 +
app/api/credit/creditBreachOfTrust/index.ts | 126 +
.../credit/creditBreachOfTrust/model/index.ts | 55 +
app/api/credit/creditCaseFiling/index.ts | 126 +
.../credit/creditCaseFiling/model/index.ts | 55 +
app/api/credit/creditCompany/index.ts | 142 +
app/api/credit/creditCompany/model/index.ts | 135 +
app/api/credit/creditCompetitor/index.ts | 126 +
.../credit/creditCompetitor/model/index.ts | 49 +
.../credit/creditCourtAnnouncement/index.ts | 126 +
.../creditCourtAnnouncement/model/index.ts | 55 +
app/api/credit/creditCourtSession/index.ts | 126 +
.../credit/creditCourtSession/model/index.ts | 55 +
app/api/credit/creditCustomer/index.ts | 126 +
app/api/credit/creditCustomer/model/index.ts | 45 +
app/api/credit/creditDeliveryNotice/index.ts | 126 +
.../creditDeliveryNotice/model/index.ts | 55 +
app/api/credit/creditExternal/index.ts | 126 +
app/api/credit/creditExternal/model/index.ts | 63 +
app/api/credit/creditFinalVersion/index.ts | 126 +
.../credit/creditFinalVersion/model/index.ts | 55 +
app/api/credit/creditGqdj/index.ts | 126 +
app/api/credit/creditGqdj/model/index.ts | 55 +
app/api/credit/creditJudgmentDebtor/index.ts | 126 +
.../creditJudgmentDebtor/model/index.ts | 49 +
.../credit/creditJudicialDocument/index.ts | 126 +
.../creditJudicialDocument/model/index.ts | 55 +
app/api/credit/creditJudiciary/index.ts | 126 +
app/api/credit/creditJudiciary/model/index.ts | 69 +
app/api/credit/creditMediation/index.ts | 126 +
app/api/credit/creditMediation/model/index.ts | 55 +
app/api/credit/creditProject/index.ts | 126 +
app/api/credit/creditProject/model/index.ts | 67 +
app/api/credit/creditRiskRelation/index.ts | 126 +
.../credit/creditRiskRelation/model/index.ts | 47 +
app/api/credit/creditSupplier/index.ts | 126 +
app/api/credit/creditSupplier/model/index.ts | 45 +
app/api/credit/creditUser/index.ts | 126 +
app/api/credit/creditUser/model/index.ts | 67 +
app/api/credit/creditXgxf/index.ts | 126 +
app/api/credit/creditXgxf/model/index.ts | 55 +
app/api/dormitory/dormitoryApply/index.ts | 106 +
.../dormitory/dormitoryApply/model/index.ts | 57 +
app/api/dormitory/dormitoryBed/index.ts | 106 +
app/api/dormitory/dormitoryBed/model/index.ts | 55 +
app/api/dormitory/dormitoryBuilding/index.ts | 106 +
.../dormitoryBuilding/model/index.ts | 31 +
app/api/dormitory/dormitoryFloor/index.ts | 106 +
.../dormitory/dormitoryFloor/model/index.ts | 35 +
app/api/dormitory/dormitoryRecord/index.ts | 106 +
.../dormitory/dormitoryRecord/model/index.ts | 43 +
app/api/hjm/hjmBxLog/index.ts | 106 +
app/api/hjm/hjmBxLog/model/index.ts | 45 +
app/api/hjm/hjmCar/index.ts | 135 +
app/api/hjm/hjmCar/model/index.ts | 96 +
app/api/hjm/hjmChoices/index.ts | 106 +
app/api/hjm/hjmChoices/model/index.ts | 39 +
app/api/hjm/hjmCourses/index.ts | 106 +
app/api/hjm/hjmCourses/model/index.ts | 41 +
app/api/hjm/hjmExamLog/index.ts | 106 +
app/api/hjm/hjmExamLog/model/index.ts | 38 +
app/api/hjm/hjmFence/index.ts | 106 +
app/api/hjm/hjmFence/model/index.ts | 44 +
app/api/hjm/hjmGpsLog/index.ts | 106 +
app/api/hjm/hjmGpsLog/model/index.ts | 34 +
app/api/hjm/hjmQuestions/index.ts | 106 +
app/api/hjm/hjmQuestions/model/index.ts | 55 +
app/api/hjm/hjmViolation/index.ts | 106 +
app/api/hjm/hjmViolation/model/index.ts | 43 +
app/api/index.ts | 61 +
app/api/layout/index.ts | 153 +
app/api/layout/model/index.ts | 74 +
app/api/led/index.ts | 27 +
app/api/led/model/index.ts | 45 +
app/api/miniprogram/index.ts | 50 +
app/api/passport/login/index.ts | 117 +
app/api/passport/login/model/index.ts | 46 +
app/api/passport/qrLogin/index.ts | 111 +
app/api/sdy/sdyDealerOrder/index.ts | 135 +
app/api/sdy/sdyDealerOrder/model/index.ts | 75 +
app/api/shop/shopCommissionRole/index.ts | 105 +
.../shop/shopCommissionRole/model/index.ts | 35 +
app/api/shop/shopCoupon/index.ts | 105 +
app/api/shop/shopCoupon/model/index.ts | 71 +
.../shop/shopCouponApplyCate/model/index.ts | 11 +
.../shop/shopCouponApplyItem/model/index.ts | 11 +
app/api/shop/shopDealerApply/index.ts | 158 +
app/api/shop/shopDealerApply/model/index.ts | 61 +
app/api/shop/shopDealerCapital/index.ts | 105 +
app/api/shop/shopDealerCapital/model/index.ts | 39 +
app/api/shop/shopDealerOrder/index.ts | 221 +
app/api/shop/shopDealerOrder/model/index.ts | 77 +
app/api/shop/shopDealerPoster/index.ts | 131 +
app/api/shop/shopDealerPoster/model/index.ts | 93 +
app/api/shop/shopDealerRecord/index.ts | 106 +
app/api/shop/shopDealerRecord/model/index.ts | 39 +
app/api/shop/shopDealerReferee/index.ts | 105 +
app/api/shop/shopDealerReferee/model/index.ts | 48 +
app/api/shop/shopDealerSetting/index.ts | 105 +
app/api/shop/shopDealerSetting/model/index.ts | 25 +
app/api/shop/shopDealerUser/index.ts | 140 +
app/api/shop/shopDealerUser/model/index.ts | 60 +
app/api/shop/shopDealerWithdraw/index.ts | 105 +
.../shop/shopDealerWithdraw/model/index.ts | 63 +
app/api/shop/shopExpress/index.ts | 105 +
app/api/shop/shopExpress/model/index.ts | 35 +
app/api/shop/shopExpressTemplate/index.ts | 105 +
.../shop/shopExpressTemplate/model/index.ts | 43 +
.../shop/shopExpressTemplateDetail/index.ts | 105 +
.../shopExpressTemplateDetail/model/index.ts | 45 +
app/api/shop/shopGift/index.ts | 130 +
app/api/shop/shopGift/model/index.ts | 61 +
app/api/shop/shopGoods/index.ts | 116 +
app/api/shop/shopGoods/model/index.ts | 148 +
app/api/shop/shopGoodsCategory/index.ts | 106 +
app/api/shop/shopGoodsCategory/model/index.ts | 64 +
app/api/shop/shopGoodsCoupon/index.ts | 106 +
app/api/shop/shopGoodsCoupon/model/index.ts | 37 +
app/api/shop/shopGoodsRoleCommission/index.ts | 106 +
.../shopGoodsRoleCommission/model/index.ts | 35 +
app/api/shop/shopGoodsSku/index.ts | 118 +
app/api/shop/shopGoodsSku/model/index.ts | 50 +
app/api/shop/shopGoodsSpec/index.ts | 105 +
app/api/shop/shopGoodsSpec/model/index.ts | 29 +
app/api/shop/shopMerchant/index.ts | 106 +
app/api/shop/shopMerchant/model/index.ts | 95 +
app/api/shop/shopMerchantAccount/index.ts | 106 +
.../shop/shopMerchantAccount/model/index.ts | 39 +
app/api/shop/shopMerchantApply/index.ts | 131 +
app/api/shop/shopMerchantApply/model/index.ts | 74 +
app/api/shop/shopMerchantCount/index.ts | 108 +
app/api/shop/shopMerchantCount/model/index.ts | 29 +
app/api/shop/shopMerchantType/index.ts | 108 +
app/api/shop/shopMerchantType/model/index.ts | 30 +
app/api/shop/shopOrder/index.ts | 137 +
app/api/shop/shopOrder/model/index.ts | 183 +
app/api/shop/shopOrderGoods/index.ts | 106 +
app/api/shop/shopOrderGoods/model/index.ts | 71 +
app/api/shop/shopSpec/index.ts | 106 +
app/api/shop/shopSpec/model/index.ts | 38 +
app/api/shop/shopSpecValue/index.ts | 105 +
app/api/shop/shopSpecValue/model/index.ts | 29 +
app/api/shop/shopUser/index.ts | 106 +
app/api/shop/shopUser/model/index.ts | 163 +
app/api/shop/shopUserAddress/index.ts | 106 +
app/api/shop/shopUserAddress/model/index.ts | 49 +
app/api/shop/shopUserCoupon/index.ts | 105 +
app/api/shop/shopUserCoupon/model/index.ts | 61 +
app/api/shop/shopUserReferee/index.ts | 105 +
app/api/shop/shopUserReferee/model/index.ts | 33 +
app/api/shop/spec/index.ts | 106 +
app/api/shop/spec/model/index.ts | 37 +
app/api/shop/specValue/index.ts | 106 +
app/api/shop/specValue/model/index.ts | 33 +
app/api/system/access-key/index.ts | 59 +
app/api/system/access-key/model/index.ts | 20 +
app/api/system/appstore/index.ts | 11 +
app/api/system/appstore/model/index.ts | 13 +
app/api/system/cache/index.ts | 76 +
app/api/system/cache/model/index.ts | 18 +
app/api/system/chat/index.ts | 157 +
app/api/system/chat/model/index.ts | 49 +
app/api/system/chatConversation/index.ts | 106 +
.../system/chatConversation/model/index.ts | 37 +
app/api/system/chatMessage/index.ts | 120 +
app/api/system/chatMessage/model/index.ts | 49 +
app/api/system/comment/index.ts | 106 +
app/api/system/comment/model/index.ts | 33 +
app/api/system/company/index.ts | 162 +
app/api/system/company/model/index.ts | 187 +
app/api/system/companyComment/index.ts | 106 +
app/api/system/companyComment/model/index.ts | 35 +
app/api/system/companyContent/index.ts | 121 +
app/api/system/companyContent/model/index.ts | 25 +
app/api/system/companyGit/index.ts | 106 +
app/api/system/companyGit/model/index.ts | 41 +
app/api/system/companyParameter/index.ts | 106 +
.../system/companyParameter/model/index.ts | 33 +
app/api/system/companyUrl/index.ts | 106 +
app/api/system/companyUrl/model/index.ts | 39 +
app/api/system/dict-data/index.ts | 87 +
app/api/system/dict-data/model/index.ts | 49 +
app/api/system/dict/index.ts | 61 +
app/api/system/dict/model/index.ts | 29 +
app/api/system/dictionary-data/index.ts | 87 +
app/api/system/dictionary-data/model/index.ts | 37 +
app/api/system/dictionary/index.ts | 61 +
app/api/system/dictionary/model/index.ts | 29 +
app/api/system/domain/index.ts | 119 +
app/api/system/domain/model/index.ts | 38 +
app/api/system/environment/index.ts | 125 +
app/api/system/environment/model/index.ts | 25 +
app/api/system/file/index.ts | 250 +
app/api/system/file/model/index.ts | 55 +
app/api/system/login-record/index.ts | 32 +
app/api/system/login-record/model/index.ts | 38 +
app/api/system/menu/index.ts | 172 +
app/api/system/menu/model/index.ts | 67 +
app/api/system/modules/index.ts | 118 +
app/api/system/modules/model/index.ts | 22 +
app/api/system/operation-record/index.ts | 32 +
.../system/operation-record/model/index.ts | 56 +
app/api/system/order/index.ts | 106 +
app/api/system/order/model/index.ts | 98 +
app/api/system/orderGoods/index.ts | 106 +
app/api/system/orderGoods/model/index.ts | 57 +
app/api/system/organization/index.ts | 73 +
app/api/system/organization/model/index.ts | 42 +
app/api/system/parameter/index.ts | 106 +
app/api/system/parameter/model/index.ts | 31 +
app/api/system/payment/index.ts | 178 +
app/api/system/payment/model/index.ts | 59 +
app/api/system/plug/index.ts | 125 +
app/api/system/plug/model/index.ts | 67 +
app/api/system/role/index.ts | 119 +
app/api/system/role/model/index.ts | 27 +
app/api/system/setting/index.ts | 153 +
app/api/system/setting/model/index.ts | 127 +
app/api/system/tenant/index.ts | 201 +
app/api/system/tenant/model/index.ts | 47 +
app/api/system/url/index.ts | 106 +
app/api/system/url/model/index.ts | 37 +
app/api/system/user-collection/index.ts | 106 +
app/api/system/user-collection/model/index.ts | 25 +
app/api/system/user-file/index.ts | 89 +
app/api/system/user-file/model/index.ts | 39 +
app/api/system/user-grade/index.ts | 120 +
app/api/system/user-grade/model/index.ts | 28 +
app/api/system/user-group/index.ts | 120 +
app/api/system/user-group/model/index.ts | 23 +
app/api/system/user/index.ts | 298 +
app/api/system/user/model/count.ts | 15 +
app/api/system/user/model/index.ts | 161 +
app/api/system/userOauth/index.ts | 106 +
app/api/system/userOauth/model/index.ts | 39 +
app/api/system/userRole/index.ts | 48 +
app/api/system/userRole/model/index.ts | 30 +
app/api/system/userVerify/index.ts | 106 +
app/api/system/userVerify/model/index.ts | 54 +
app/api/system/version/index.ts | 119 +
app/api/system/version/model/index.ts | 26 +
app/api/system/website/field/index.ts | 162 +
app/api/system/website/field/model/index.ts | 63 +
app/api/system/website/index.ts | 169 +
app/api/system/website/model/index.ts | 97 +
app/api/system/white-domain/index.ts | 146 +
app/api/system/white-domain/model/index.ts | 27 +
app/api/user/balance-log/index.ts | 104 +
app/api/user/balance-log/model/index.ts | 31 +
app/api/user/feedback/index.ts | 103 +
app/api/user/feedback/model/index.ts | 29 +
app/api/user/grade/index.ts | 114 +
app/api/user/grade/model/index.ts | 28 +
app/api/user/index.ts | 18 +
app/api/user/model/index.ts | 57 +
app/api/user/recharge/export/index.ts | 109 +
app/api/user/recharge/export/model/index.ts | 37 +
app/api/user/recharge/order/index.ts | 134 +
app/api/user/recharge/order/model/index.ts | 34 +
app/api/user/referee/index.ts | 102 +
app/api/user/referee/model/index.ts | 24 +
app/api/user/userCoupon/index.ts | 106 +
app/api/user/userCoupon/model/index.ts | 59 +
app/app.vue | 7 +
app/assets/css/tailwind.css | 3 +
app/components/QrLogin.vue | 220 +
app/components/SiteFooter.vue | 56 +
app/components/SiteHeader.vue | 199 +
app/components/console/ConsoleHeader.vue | 169 +
app/components/developer/AppsCenter.vue | 156 +
app/composables/usePageSeo.ts | 37 +
app/composables/useSiteInfo.ts | 8 +
app/config/console-nav.ts | 70 +
app/config/developer-nav.ts | 16 +
app/config/mp-nav.ts | 10 +
app/config/nav.ts | 15 +
app/config/oa-nav.ts | 10 +
app/config/setting.ts | 7 +
app/config/site-nav.ts | 10 +
app/layouts/blank.vue | 8 +
app/layouts/console.vue | 439 +
app/layouts/default.vue | 78 +
app/layouts/developer.vue | 259 +
app/layouts/mp.vue | 246 +
app/layouts/oa.vue | 246 +
app/layouts/site.vue | 246 +
app/pages/apps.vue | 11 +
app/pages/articles.vue | 121 +
app/pages/console/account/index.vue | 347 +
app/pages/console/account/kyc.vue | 456 +
app/pages/console/account/members.vue | 442 +
app/pages/console/account/security.vue | 134 +
app/pages/console/coupons.vue | 20 +
app/pages/console/index.vue | 362 +
app/pages/console/invoices.vue | 425 +
app/pages/console/logout.vue | 32 +
app/pages/console/orders.vue | 394 +
app/pages/console/products.vue | 20 +
app/pages/console/tenant/index.vue | 336 +
app/pages/console/tenant/unopened.vue | 40 +
app/pages/contact.vue | 123 +
app/pages/create-app.vue | 595 ++
app/pages/deploy.vue | 91 +
app/pages/developer/apps.vue | 13 +
app/pages/developer/git.vue | 34 +
app/pages/developer/index.vue | 49 +
app/pages/developer/requests.vue | 20 +
app/pages/developer/source.vue | 40 +
app/pages/developer/support.vue | 24 +
app/pages/developer/tutorial.vue | 43 +
app/pages/flow.vue | 71 +
app/pages/index.vue | 189 +
app/pages/login.vue | 516 +
app/pages/market.vue | 87 +
app/pages/mp/index.vue | 13 +
app/pages/oa/index.vue | 13 +
app/pages/platform.vue | 115 +
app/pages/products/index.vue | 91 +
app/pages/profile.vue | 86 +
app/pages/qr-confirm.vue | 252 +
app/pages/site/index.vue | 13 +
app/plugins/antd.ts | 46 +
app/types/api.ts | 7 +
app/utils/domain.ts | 9 +
app/utils/permission.ts | 247 +
app/utils/request.ts | 101 +
app/utils/token-util.ts | 42 +
docs/WEBSITE_PLAN.md | 37 +
ecosystem.config.cjs | 18 +
eslint.config.mjs | 67 +
modules/fix-tailwind-postcss.ts | 26 +
nuxt.config.ts | 92 +
package-lock.json | 8767 +++++++++++++++++
package.json | 33 +
pnpm-lock.yaml | 8661 ++++++++++++++++
public/favicon.ico | Bin 0 -> 4286 bytes
public/robots.txt | 2 +
scripts/crypto-hash-polyfill.mjs | 17 +
server/api/_file/[...path].ts | 25 +
server/api/_modules/[...path].ts | 26 +
server/api/_server/[...path].ts | 25 +
server/api/cms/cms-website/getSiteInfo.get.ts | 33 +
tailwind.config.cjs | 18 +
tsconfig.json | 6 +
439 files changed, 56219 insertions(+)
create mode 100644 .dockerignore
create mode 100644 .env.example
create mode 100644 .gitignore
create mode 100644 Dockerfile
create mode 100644 README.md
create mode 100644 app/api/bszx/bszxBm/index.ts
create mode 100644 app/api/bszx/bszxBm/model/index.ts
create mode 100644 app/api/bszx/bszxBranch/index.ts
create mode 100644 app/api/bszx/bszxBranch/model/index.ts
create mode 100644 app/api/bszx/bszxClass/index.ts
create mode 100644 app/api/bszx/bszxClass/model/index.ts
create mode 100644 app/api/bszx/bszxEra/index.ts
create mode 100644 app/api/bszx/bszxEra/model/index.ts
create mode 100644 app/api/bszx/bszxGrade/index.ts
create mode 100644 app/api/bszx/bszxGrade/model/index.ts
create mode 100644 app/api/bszx/bszxOrder/index.ts
create mode 100644 app/api/bszx/bszxPay/index.ts
create mode 100644 app/api/bszx/bszxPay/model/index.ts
create mode 100644 app/api/bszx/bszxPayRanking/index.ts
create mode 100644 app/api/bszx/bszxPayRanking/model/index.ts
create mode 100644 app/api/clinic/clinicAppointment/index.ts
create mode 100644 app/api/clinic/clinicAppointment/model/index.ts
create mode 100644 app/api/clinic/clinicDoctorApply/index.ts
create mode 100644 app/api/clinic/clinicDoctorApply/model/index.ts
create mode 100644 app/api/clinic/clinicDoctorMedicalRecord/index.ts
create mode 100644 app/api/clinic/clinicDoctorMedicalRecord/model/index.ts
create mode 100644 app/api/clinic/clinicDoctorUser/index.ts
create mode 100644 app/api/clinic/clinicDoctorUser/model/index.ts
create mode 100644 app/api/clinic/clinicMedicalHistory/index.ts
create mode 100644 app/api/clinic/clinicMedicalHistory/model/index.ts
create mode 100644 app/api/clinic/clinicMedicine/index.ts
create mode 100644 app/api/clinic/clinicMedicine/model/index.ts
create mode 100644 app/api/clinic/clinicMedicineInout/index.ts
create mode 100644 app/api/clinic/clinicMedicineInout/model/index.ts
create mode 100644 app/api/clinic/clinicMedicineStock/index.ts
create mode 100644 app/api/clinic/clinicMedicineStock/model/index.ts
create mode 100644 app/api/clinic/clinicOrder/index.ts
create mode 100644 app/api/clinic/clinicOrder/model/index.ts
create mode 100644 app/api/clinic/clinicPatientUser/index.ts
create mode 100644 app/api/clinic/clinicPatientUser/model/index.ts
create mode 100644 app/api/clinic/clinicPrescription/index.ts
create mode 100644 app/api/clinic/clinicPrescription/model/index.ts
create mode 100644 app/api/clinic/clinicPrescriptionItem/index.ts
create mode 100644 app/api/clinic/clinicPrescriptionItem/model/index.ts
create mode 100644 app/api/clinic/clinicReport/index.ts
create mode 100644 app/api/clinic/clinicReport/model/index.ts
create mode 100644 app/api/clinic/clinicVisitRecord/index.ts
create mode 100644 app/api/clinic/clinicVisitRecord/model/index.ts
create mode 100644 app/api/cms/cmsAd/index.ts
create mode 100644 app/api/cms/cmsAd/model/index.ts
create mode 100644 app/api/cms/cmsAdRecord/index.ts
create mode 100644 app/api/cms/cmsAdRecord/model/index.ts
create mode 100644 app/api/cms/cmsArticle/index.ts
create mode 100644 app/api/cms/cmsArticle/model/index.ts
create mode 100644 app/api/cms/cmsArticleCategory/index.ts
create mode 100644 app/api/cms/cmsArticleCategory/model/index.ts
create mode 100644 app/api/cms/cmsArticleComment/index.ts
create mode 100644 app/api/cms/cmsArticleComment/model/index.ts
create mode 100644 app/api/cms/cmsArticleContent/index.ts
create mode 100644 app/api/cms/cmsArticleContent/model/index.ts
create mode 100644 app/api/cms/cmsArticleCount/index.ts
create mode 100644 app/api/cms/cmsArticleCount/model/index.ts
create mode 100644 app/api/cms/cmsArticleLike/index.ts
create mode 100644 app/api/cms/cmsArticleLike/model/index.ts
create mode 100644 app/api/cms/cmsDesign/index.ts
create mode 100644 app/api/cms/cmsDesign/model/index.ts
create mode 100644 app/api/cms/cmsDomain/index.ts
create mode 100644 app/api/cms/cmsDomain/model/index.ts
create mode 100644 app/api/cms/cmsForm/index.ts
create mode 100644 app/api/cms/cmsForm/model/index.ts
create mode 100644 app/api/cms/cmsFormRecord/index.ts
create mode 100644 app/api/cms/cmsFormRecord/model/index.ts
create mode 100644 app/api/cms/cmsLang/index.ts
create mode 100644 app/api/cms/cmsLang/model/index.ts
create mode 100644 app/api/cms/cmsLangLog/index.ts
create mode 100644 app/api/cms/cmsLangLog/model/index.ts
create mode 100644 app/api/cms/cmsLink/index.ts
create mode 100644 app/api/cms/cmsLink/model/index.ts
create mode 100644 app/api/cms/cmsModel/index.ts
create mode 100644 app/api/cms/cmsModel/model/index.ts
create mode 100644 app/api/cms/cmsNavigation/index.ts
create mode 100644 app/api/cms/cmsNavigation/model/index.ts
create mode 100644 app/api/cms/cmsOrder/index.ts
create mode 100644 app/api/cms/cmsOrder/model/index.ts
create mode 100644 app/api/cms/cmsStatistics/index.ts
create mode 100644 app/api/cms/cmsStatistics/model/index.ts
create mode 100644 app/api/cms/cmsTemplate/index.ts
create mode 100644 app/api/cms/cmsTemplate/model/index.ts
create mode 100644 app/api/cms/cmsWebsite/index.ts
create mode 100644 app/api/cms/cmsWebsite/model/index.ts
create mode 100644 app/api/cms/cmsWebsiteField/index.ts
create mode 100644 app/api/cms/cmsWebsiteField/model/index.ts
create mode 100644 app/api/cms/cmsWebsiteSetting/index.ts
create mode 100644 app/api/cms/cmsWebsiteSetting/model/index.ts
create mode 100644 app/api/cms/link/index.ts
create mode 100644 app/api/cms/link/model/index.ts
create mode 100644 app/api/credit/creditBreachOfTrust/index.ts
create mode 100644 app/api/credit/creditBreachOfTrust/model/index.ts
create mode 100644 app/api/credit/creditCaseFiling/index.ts
create mode 100644 app/api/credit/creditCaseFiling/model/index.ts
create mode 100644 app/api/credit/creditCompany/index.ts
create mode 100644 app/api/credit/creditCompany/model/index.ts
create mode 100644 app/api/credit/creditCompetitor/index.ts
create mode 100644 app/api/credit/creditCompetitor/model/index.ts
create mode 100644 app/api/credit/creditCourtAnnouncement/index.ts
create mode 100644 app/api/credit/creditCourtAnnouncement/model/index.ts
create mode 100644 app/api/credit/creditCourtSession/index.ts
create mode 100644 app/api/credit/creditCourtSession/model/index.ts
create mode 100644 app/api/credit/creditCustomer/index.ts
create mode 100644 app/api/credit/creditCustomer/model/index.ts
create mode 100644 app/api/credit/creditDeliveryNotice/index.ts
create mode 100644 app/api/credit/creditDeliveryNotice/model/index.ts
create mode 100644 app/api/credit/creditExternal/index.ts
create mode 100644 app/api/credit/creditExternal/model/index.ts
create mode 100644 app/api/credit/creditFinalVersion/index.ts
create mode 100644 app/api/credit/creditFinalVersion/model/index.ts
create mode 100644 app/api/credit/creditGqdj/index.ts
create mode 100644 app/api/credit/creditGqdj/model/index.ts
create mode 100644 app/api/credit/creditJudgmentDebtor/index.ts
create mode 100644 app/api/credit/creditJudgmentDebtor/model/index.ts
create mode 100644 app/api/credit/creditJudicialDocument/index.ts
create mode 100644 app/api/credit/creditJudicialDocument/model/index.ts
create mode 100644 app/api/credit/creditJudiciary/index.ts
create mode 100644 app/api/credit/creditJudiciary/model/index.ts
create mode 100644 app/api/credit/creditMediation/index.ts
create mode 100644 app/api/credit/creditMediation/model/index.ts
create mode 100644 app/api/credit/creditProject/index.ts
create mode 100644 app/api/credit/creditProject/model/index.ts
create mode 100644 app/api/credit/creditRiskRelation/index.ts
create mode 100644 app/api/credit/creditRiskRelation/model/index.ts
create mode 100644 app/api/credit/creditSupplier/index.ts
create mode 100644 app/api/credit/creditSupplier/model/index.ts
create mode 100644 app/api/credit/creditUser/index.ts
create mode 100644 app/api/credit/creditUser/model/index.ts
create mode 100644 app/api/credit/creditXgxf/index.ts
create mode 100644 app/api/credit/creditXgxf/model/index.ts
create mode 100644 app/api/dormitory/dormitoryApply/index.ts
create mode 100644 app/api/dormitory/dormitoryApply/model/index.ts
create mode 100644 app/api/dormitory/dormitoryBed/index.ts
create mode 100644 app/api/dormitory/dormitoryBed/model/index.ts
create mode 100644 app/api/dormitory/dormitoryBuilding/index.ts
create mode 100644 app/api/dormitory/dormitoryBuilding/model/index.ts
create mode 100644 app/api/dormitory/dormitoryFloor/index.ts
create mode 100644 app/api/dormitory/dormitoryFloor/model/index.ts
create mode 100644 app/api/dormitory/dormitoryRecord/index.ts
create mode 100644 app/api/dormitory/dormitoryRecord/model/index.ts
create mode 100644 app/api/hjm/hjmBxLog/index.ts
create mode 100644 app/api/hjm/hjmBxLog/model/index.ts
create mode 100644 app/api/hjm/hjmCar/index.ts
create mode 100644 app/api/hjm/hjmCar/model/index.ts
create mode 100644 app/api/hjm/hjmChoices/index.ts
create mode 100644 app/api/hjm/hjmChoices/model/index.ts
create mode 100644 app/api/hjm/hjmCourses/index.ts
create mode 100644 app/api/hjm/hjmCourses/model/index.ts
create mode 100644 app/api/hjm/hjmExamLog/index.ts
create mode 100644 app/api/hjm/hjmExamLog/model/index.ts
create mode 100644 app/api/hjm/hjmFence/index.ts
create mode 100644 app/api/hjm/hjmFence/model/index.ts
create mode 100644 app/api/hjm/hjmGpsLog/index.ts
create mode 100644 app/api/hjm/hjmGpsLog/model/index.ts
create mode 100644 app/api/hjm/hjmQuestions/index.ts
create mode 100644 app/api/hjm/hjmQuestions/model/index.ts
create mode 100644 app/api/hjm/hjmViolation/index.ts
create mode 100644 app/api/hjm/hjmViolation/model/index.ts
create mode 100644 app/api/index.ts
create mode 100644 app/api/layout/index.ts
create mode 100644 app/api/layout/model/index.ts
create mode 100644 app/api/led/index.ts
create mode 100644 app/api/led/model/index.ts
create mode 100644 app/api/miniprogram/index.ts
create mode 100644 app/api/passport/login/index.ts
create mode 100644 app/api/passport/login/model/index.ts
create mode 100644 app/api/passport/qrLogin/index.ts
create mode 100644 app/api/sdy/sdyDealerOrder/index.ts
create mode 100644 app/api/sdy/sdyDealerOrder/model/index.ts
create mode 100644 app/api/shop/shopCommissionRole/index.ts
create mode 100644 app/api/shop/shopCommissionRole/model/index.ts
create mode 100644 app/api/shop/shopCoupon/index.ts
create mode 100644 app/api/shop/shopCoupon/model/index.ts
create mode 100644 app/api/shop/shopCouponApplyCate/model/index.ts
create mode 100644 app/api/shop/shopCouponApplyItem/model/index.ts
create mode 100644 app/api/shop/shopDealerApply/index.ts
create mode 100644 app/api/shop/shopDealerApply/model/index.ts
create mode 100644 app/api/shop/shopDealerCapital/index.ts
create mode 100644 app/api/shop/shopDealerCapital/model/index.ts
create mode 100644 app/api/shop/shopDealerOrder/index.ts
create mode 100644 app/api/shop/shopDealerOrder/model/index.ts
create mode 100644 app/api/shop/shopDealerPoster/index.ts
create mode 100644 app/api/shop/shopDealerPoster/model/index.ts
create mode 100644 app/api/shop/shopDealerRecord/index.ts
create mode 100644 app/api/shop/shopDealerRecord/model/index.ts
create mode 100644 app/api/shop/shopDealerReferee/index.ts
create mode 100644 app/api/shop/shopDealerReferee/model/index.ts
create mode 100644 app/api/shop/shopDealerSetting/index.ts
create mode 100644 app/api/shop/shopDealerSetting/model/index.ts
create mode 100644 app/api/shop/shopDealerUser/index.ts
create mode 100644 app/api/shop/shopDealerUser/model/index.ts
create mode 100644 app/api/shop/shopDealerWithdraw/index.ts
create mode 100644 app/api/shop/shopDealerWithdraw/model/index.ts
create mode 100644 app/api/shop/shopExpress/index.ts
create mode 100644 app/api/shop/shopExpress/model/index.ts
create mode 100644 app/api/shop/shopExpressTemplate/index.ts
create mode 100644 app/api/shop/shopExpressTemplate/model/index.ts
create mode 100644 app/api/shop/shopExpressTemplateDetail/index.ts
create mode 100644 app/api/shop/shopExpressTemplateDetail/model/index.ts
create mode 100644 app/api/shop/shopGift/index.ts
create mode 100644 app/api/shop/shopGift/model/index.ts
create mode 100644 app/api/shop/shopGoods/index.ts
create mode 100644 app/api/shop/shopGoods/model/index.ts
create mode 100644 app/api/shop/shopGoodsCategory/index.ts
create mode 100644 app/api/shop/shopGoodsCategory/model/index.ts
create mode 100644 app/api/shop/shopGoodsCoupon/index.ts
create mode 100644 app/api/shop/shopGoodsCoupon/model/index.ts
create mode 100644 app/api/shop/shopGoodsRoleCommission/index.ts
create mode 100644 app/api/shop/shopGoodsRoleCommission/model/index.ts
create mode 100644 app/api/shop/shopGoodsSku/index.ts
create mode 100644 app/api/shop/shopGoodsSku/model/index.ts
create mode 100644 app/api/shop/shopGoodsSpec/index.ts
create mode 100644 app/api/shop/shopGoodsSpec/model/index.ts
create mode 100644 app/api/shop/shopMerchant/index.ts
create mode 100644 app/api/shop/shopMerchant/model/index.ts
create mode 100644 app/api/shop/shopMerchantAccount/index.ts
create mode 100644 app/api/shop/shopMerchantAccount/model/index.ts
create mode 100644 app/api/shop/shopMerchantApply/index.ts
create mode 100644 app/api/shop/shopMerchantApply/model/index.ts
create mode 100644 app/api/shop/shopMerchantCount/index.ts
create mode 100644 app/api/shop/shopMerchantCount/model/index.ts
create mode 100644 app/api/shop/shopMerchantType/index.ts
create mode 100644 app/api/shop/shopMerchantType/model/index.ts
create mode 100644 app/api/shop/shopOrder/index.ts
create mode 100644 app/api/shop/shopOrder/model/index.ts
create mode 100644 app/api/shop/shopOrderGoods/index.ts
create mode 100644 app/api/shop/shopOrderGoods/model/index.ts
create mode 100644 app/api/shop/shopSpec/index.ts
create mode 100644 app/api/shop/shopSpec/model/index.ts
create mode 100644 app/api/shop/shopSpecValue/index.ts
create mode 100644 app/api/shop/shopSpecValue/model/index.ts
create mode 100644 app/api/shop/shopUser/index.ts
create mode 100644 app/api/shop/shopUser/model/index.ts
create mode 100644 app/api/shop/shopUserAddress/index.ts
create mode 100644 app/api/shop/shopUserAddress/model/index.ts
create mode 100644 app/api/shop/shopUserCoupon/index.ts
create mode 100644 app/api/shop/shopUserCoupon/model/index.ts
create mode 100644 app/api/shop/shopUserReferee/index.ts
create mode 100644 app/api/shop/shopUserReferee/model/index.ts
create mode 100644 app/api/shop/spec/index.ts
create mode 100644 app/api/shop/spec/model/index.ts
create mode 100644 app/api/shop/specValue/index.ts
create mode 100644 app/api/shop/specValue/model/index.ts
create mode 100644 app/api/system/access-key/index.ts
create mode 100644 app/api/system/access-key/model/index.ts
create mode 100644 app/api/system/appstore/index.ts
create mode 100644 app/api/system/appstore/model/index.ts
create mode 100644 app/api/system/cache/index.ts
create mode 100644 app/api/system/cache/model/index.ts
create mode 100644 app/api/system/chat/index.ts
create mode 100644 app/api/system/chat/model/index.ts
create mode 100644 app/api/system/chatConversation/index.ts
create mode 100644 app/api/system/chatConversation/model/index.ts
create mode 100644 app/api/system/chatMessage/index.ts
create mode 100644 app/api/system/chatMessage/model/index.ts
create mode 100644 app/api/system/comment/index.ts
create mode 100644 app/api/system/comment/model/index.ts
create mode 100644 app/api/system/company/index.ts
create mode 100644 app/api/system/company/model/index.ts
create mode 100644 app/api/system/companyComment/index.ts
create mode 100644 app/api/system/companyComment/model/index.ts
create mode 100644 app/api/system/companyContent/index.ts
create mode 100644 app/api/system/companyContent/model/index.ts
create mode 100644 app/api/system/companyGit/index.ts
create mode 100644 app/api/system/companyGit/model/index.ts
create mode 100644 app/api/system/companyParameter/index.ts
create mode 100644 app/api/system/companyParameter/model/index.ts
create mode 100644 app/api/system/companyUrl/index.ts
create mode 100644 app/api/system/companyUrl/model/index.ts
create mode 100644 app/api/system/dict-data/index.ts
create mode 100644 app/api/system/dict-data/model/index.ts
create mode 100644 app/api/system/dict/index.ts
create mode 100644 app/api/system/dict/model/index.ts
create mode 100644 app/api/system/dictionary-data/index.ts
create mode 100644 app/api/system/dictionary-data/model/index.ts
create mode 100644 app/api/system/dictionary/index.ts
create mode 100644 app/api/system/dictionary/model/index.ts
create mode 100644 app/api/system/domain/index.ts
create mode 100644 app/api/system/domain/model/index.ts
create mode 100644 app/api/system/environment/index.ts
create mode 100644 app/api/system/environment/model/index.ts
create mode 100644 app/api/system/file/index.ts
create mode 100644 app/api/system/file/model/index.ts
create mode 100644 app/api/system/login-record/index.ts
create mode 100644 app/api/system/login-record/model/index.ts
create mode 100644 app/api/system/menu/index.ts
create mode 100644 app/api/system/menu/model/index.ts
create mode 100644 app/api/system/modules/index.ts
create mode 100644 app/api/system/modules/model/index.ts
create mode 100644 app/api/system/operation-record/index.ts
create mode 100644 app/api/system/operation-record/model/index.ts
create mode 100644 app/api/system/order/index.ts
create mode 100644 app/api/system/order/model/index.ts
create mode 100644 app/api/system/orderGoods/index.ts
create mode 100644 app/api/system/orderGoods/model/index.ts
create mode 100644 app/api/system/organization/index.ts
create mode 100644 app/api/system/organization/model/index.ts
create mode 100644 app/api/system/parameter/index.ts
create mode 100644 app/api/system/parameter/model/index.ts
create mode 100644 app/api/system/payment/index.ts
create mode 100644 app/api/system/payment/model/index.ts
create mode 100644 app/api/system/plug/index.ts
create mode 100644 app/api/system/plug/model/index.ts
create mode 100644 app/api/system/role/index.ts
create mode 100644 app/api/system/role/model/index.ts
create mode 100644 app/api/system/setting/index.ts
create mode 100644 app/api/system/setting/model/index.ts
create mode 100644 app/api/system/tenant/index.ts
create mode 100644 app/api/system/tenant/model/index.ts
create mode 100644 app/api/system/url/index.ts
create mode 100644 app/api/system/url/model/index.ts
create mode 100644 app/api/system/user-collection/index.ts
create mode 100644 app/api/system/user-collection/model/index.ts
create mode 100644 app/api/system/user-file/index.ts
create mode 100644 app/api/system/user-file/model/index.ts
create mode 100644 app/api/system/user-grade/index.ts
create mode 100644 app/api/system/user-grade/model/index.ts
create mode 100644 app/api/system/user-group/index.ts
create mode 100644 app/api/system/user-group/model/index.ts
create mode 100644 app/api/system/user/index.ts
create mode 100644 app/api/system/user/model/count.ts
create mode 100644 app/api/system/user/model/index.ts
create mode 100644 app/api/system/userOauth/index.ts
create mode 100644 app/api/system/userOauth/model/index.ts
create mode 100644 app/api/system/userRole/index.ts
create mode 100644 app/api/system/userRole/model/index.ts
create mode 100644 app/api/system/userVerify/index.ts
create mode 100644 app/api/system/userVerify/model/index.ts
create mode 100644 app/api/system/version/index.ts
create mode 100644 app/api/system/version/model/index.ts
create mode 100644 app/api/system/website/field/index.ts
create mode 100644 app/api/system/website/field/model/index.ts
create mode 100644 app/api/system/website/index.ts
create mode 100644 app/api/system/website/model/index.ts
create mode 100644 app/api/system/white-domain/index.ts
create mode 100644 app/api/system/white-domain/model/index.ts
create mode 100644 app/api/user/balance-log/index.ts
create mode 100644 app/api/user/balance-log/model/index.ts
create mode 100644 app/api/user/feedback/index.ts
create mode 100644 app/api/user/feedback/model/index.ts
create mode 100644 app/api/user/grade/index.ts
create mode 100644 app/api/user/grade/model/index.ts
create mode 100644 app/api/user/index.ts
create mode 100644 app/api/user/model/index.ts
create mode 100644 app/api/user/recharge/export/index.ts
create mode 100644 app/api/user/recharge/export/model/index.ts
create mode 100644 app/api/user/recharge/order/index.ts
create mode 100644 app/api/user/recharge/order/model/index.ts
create mode 100644 app/api/user/referee/index.ts
create mode 100644 app/api/user/referee/model/index.ts
create mode 100644 app/api/user/userCoupon/index.ts
create mode 100644 app/api/user/userCoupon/model/index.ts
create mode 100644 app/app.vue
create mode 100644 app/assets/css/tailwind.css
create mode 100644 app/components/QrLogin.vue
create mode 100644 app/components/SiteFooter.vue
create mode 100644 app/components/SiteHeader.vue
create mode 100644 app/components/console/ConsoleHeader.vue
create mode 100644 app/components/developer/AppsCenter.vue
create mode 100644 app/composables/usePageSeo.ts
create mode 100644 app/composables/useSiteInfo.ts
create mode 100644 app/config/console-nav.ts
create mode 100644 app/config/developer-nav.ts
create mode 100644 app/config/mp-nav.ts
create mode 100644 app/config/nav.ts
create mode 100644 app/config/oa-nav.ts
create mode 100644 app/config/setting.ts
create mode 100644 app/config/site-nav.ts
create mode 100644 app/layouts/blank.vue
create mode 100644 app/layouts/console.vue
create mode 100644 app/layouts/default.vue
create mode 100644 app/layouts/developer.vue
create mode 100644 app/layouts/mp.vue
create mode 100644 app/layouts/oa.vue
create mode 100644 app/layouts/site.vue
create mode 100644 app/pages/apps.vue
create mode 100644 app/pages/articles.vue
create mode 100644 app/pages/console/account/index.vue
create mode 100644 app/pages/console/account/kyc.vue
create mode 100644 app/pages/console/account/members.vue
create mode 100644 app/pages/console/account/security.vue
create mode 100644 app/pages/console/coupons.vue
create mode 100644 app/pages/console/index.vue
create mode 100644 app/pages/console/invoices.vue
create mode 100644 app/pages/console/logout.vue
create mode 100644 app/pages/console/orders.vue
create mode 100644 app/pages/console/products.vue
create mode 100644 app/pages/console/tenant/index.vue
create mode 100644 app/pages/console/tenant/unopened.vue
create mode 100644 app/pages/contact.vue
create mode 100644 app/pages/create-app.vue
create mode 100644 app/pages/deploy.vue
create mode 100644 app/pages/developer/apps.vue
create mode 100644 app/pages/developer/git.vue
create mode 100644 app/pages/developer/index.vue
create mode 100644 app/pages/developer/requests.vue
create mode 100644 app/pages/developer/source.vue
create mode 100644 app/pages/developer/support.vue
create mode 100644 app/pages/developer/tutorial.vue
create mode 100644 app/pages/flow.vue
create mode 100644 app/pages/index.vue
create mode 100644 app/pages/login.vue
create mode 100644 app/pages/market.vue
create mode 100644 app/pages/mp/index.vue
create mode 100644 app/pages/oa/index.vue
create mode 100644 app/pages/platform.vue
create mode 100644 app/pages/products/index.vue
create mode 100644 app/pages/profile.vue
create mode 100644 app/pages/qr-confirm.vue
create mode 100644 app/pages/site/index.vue
create mode 100644 app/plugins/antd.ts
create mode 100644 app/types/api.ts
create mode 100644 app/utils/domain.ts
create mode 100644 app/utils/permission.ts
create mode 100644 app/utils/request.ts
create mode 100644 app/utils/token-util.ts
create mode 100644 docs/WEBSITE_PLAN.md
create mode 100644 ecosystem.config.cjs
create mode 100644 eslint.config.mjs
create mode 100644 modules/fix-tailwind-postcss.ts
create mode 100644 nuxt.config.ts
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 pnpm-lock.yaml
create mode 100644 public/favicon.ico
create mode 100644 public/robots.txt
create mode 100644 scripts/crypto-hash-polyfill.mjs
create mode 100644 server/api/_file/[...path].ts
create mode 100644 server/api/_modules/[...path].ts
create mode 100644 server/api/_server/[...path].ts
create mode 100644 server/api/cms/cms-website/getSiteInfo.get.ts
create mode 100644 tailwind.config.cjs
create mode 100644 tsconfig.json
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..bdece4d
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,15 @@
+.git
+.idea
+.nuxt
+.output
+node_modules
+
+.env
+.env.*
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+归档.zip
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..4f95a49
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,12 @@
+# Tenant / headers
+# - TenantId header will be sent on every request.
+# - Authorization header is taken from client storage (AccessToken) and forwarded by the Nuxt proxy.
+NUXT_PUBLIC_TENANT_ID=10398
+
+# Upstream APIs (required)
+NUXT_PUBLIC_SERVER_API_BASE=https://server.websoft.top/api
+NUXT_PUBLIC_MODULES_API_BASE=https://cms-api.websoft.top/api
+
+# Optional (only if file server is not the same origin as SERVER_API_BASE)
+# Defaults to the origin of `NUXT_PUBLIC_SERVER_API_BASE` (e.g. https://server.websoft.top)
+# NUXT_PUBLIC_FILE_SERVER_BASE=https://file.wsdns.cn
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ea1e3d0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,26 @@
+# Nuxt dev/build outputs
+.output
+.data
+.nuxt
+.nitro
+.cache
+dist
+
+# Node dependencies
+node_modules
+
+# Logs
+logs
+*.log
+.pm2
+
+# Misc
+.DS_Store
+.fleet
+.idea
+
+# Local env files
+.env
+.env.*
+!.env.example
+/.npm-cache/
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..cbe6572
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,33 @@
+# syntax=docker/dockerfile:1.7
+ARG NODE_VERSION=20.19.0
+
+FROM node:${NODE_VERSION}-slim AS build
+WORKDIR /app
+
+ENV NODE_ENV=development \
+ NUXT_TELEMETRY_DISABLED=1
+
+COPY package.json package-lock.json ./
+COPY scripts ./scripts
+
+RUN npm ci --ignore-scripts
+
+COPY . .
+
+RUN npm rebuild
+RUN npm run postinstall
+RUN npm run build
+
+FROM node:${NODE_VERSION}-slim AS runner
+WORKDIR /app
+
+ENV NODE_ENV=production \
+ HOST=0.0.0.0 \
+ PORT=3000 \
+ NUXT_TELEMETRY_DISABLED=1
+
+COPY --from=build /app/.output ./.output
+
+EXPOSE 3000
+
+CMD ["node", ".output/server/index.mjs"]
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..65704d2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,193 @@
+
+
🌐 WebSoftAdmin
+
基于 Vue 3 + Ant Design Vue 的企业级后台管理系统
+
+
+
+
+
+
+
+
+
+
+## 📖 项目简介
+
+WebSoftAdmin 是一个基于 **Vue 3 + Ant Design Vue** 构建的现代化企业级后台管理系统,采用最新的前端技术栈:
+
+- **前端框架**:Vue 3 + TypeScript + Vite
+- **UI 组件库**:Ant Design Vue 3.x
+- **富文本编辑器**:TinyMCE(支持图片/视频上传、一键排版)
+- **图表库**:ECharts + G2
+- **工具库**:Lodash、Day.js、CryptoJS
+
+
+
+## 项目演示
+| 后台管理系统 | https://mp.websoft.top |
+|--------|-------------------------------------------------------------------------------------------------------------------------------------|
+| 账号密码 | [立即注册](https://mp.websoft.top/register/?inviteCode=github) |
+| 关注公众号 |  |
+
+
+
+
+## 🛠️ 技术栈
+
+### 核心技术
+| 技术 | 版本 | 说明 |
+|------|------|------|
+| Vue | 3.x | 渐进式 JavaScript 框架 |
+| TypeScript | 4.x | JavaScript 的超集 |
+| Vite | 4.x | 下一代前端构建工具 |
+| Ant Design Vue | 3.2.11 | 企业级 UI 设计语言 |
+| EleAdmin Pro | 1.10.1 | 企业级组件库 |
+
+### 功能组件
+- **TinyMCE** - 富文本编辑器,支持图片/视频上传
+- **ECharts** - 数据可视化图表库
+- **CropperJS** - 图片裁剪组件
+- **ExcelJS** - Excel 文件处理
+- **Ali OSS** - 阿里云对象存储
+
+## 📋 环境要求
+
+### 基础环境
+- 🟢 **Node.js 16+**
+- 📦 **npm 8+ / yarn 1.22+**
+- 🌐 **现代浏览器**(Chrome 63+、Firefox、Safari、Edge)
+
+### 开发工具
+- **推荐**:VS Code / WebStorm
+- **插件**:Vetur / Volar(Vue 3 支持)
+
+## 🚀 快速开始
+
+### 1. 克隆项目
+```bash
+git clone https://github.com/websoft-top/mp-vue.git
+cd mp-vue
+```
+
+### 2. 安装依赖
+```bash
+# 使用 npm
+npm install
+
+# 或使用 yarn
+yarn install
+```
+
+### 3. 配置环境变量
+```bash
+# 复制环境变量示例文件
+cp .env.example .env
+
+# 编辑 .env 文件,填入您的配置信息
+# 注意:请不要将 .env 文件提交到版本控制系统
+```
+
+### 4. 启动开发服务器
+```bash
+# 开发模式
+npm run dev
+
+# 或
+yarn dev
+```
+
+访问 `http://localhost:3000` 即可看到管理后台。
+
+### 5. 构建生产版本
+```bash
+# 生产构建
+npm run build
+
+# 预览构建结果
+npm run serve
+```
+
+## 🧩 常见问题
+
+### ERROR: EMFILE: too many open files, watch
+
+- 项目已在 `nuxt.config.ts` 中配置忽略 `node_modules/.nuxt/.output` 等目录以减少监听数量。
+- 若仍出现该错误,可在启动前临时提高文件句柄上限后重试:`ulimit -n 8192 && npm run dev`。
+
+## ⚙️ 环境变量配置
+
+项目使用环境变量来管理敏感信息和配置。请按照以下步骤配置:
+
+### 必需配置
+```bash
+# API 配置
+VITE_API_URL=https://your-api.com/api # 后端 API 地址
+VITE_SERVER_API_URL=https://your-server.com/api # 服务端 API 地址
+VITE_FILE_SERVER=https://your-file-server.com # 文件服务器地址
+
+# 应用配置
+VITE_APP_SECRET=your_app_secret # 应用密钥
+VITE_TENANT_ID=your_tenant_id # 租户 ID
+```
+
+### 可选配置
+```bash
+# 高德地图 (如需使用地图功能)
+VITE_MAP_KEY=your_map_key # 高德地图 Key
+VITE_MAP_CODE=your_map_security_code # 高德地图安全密钥
+
+# WebSoftAdmin 授权 (商业版功能)
+VITE_LICENSE_CODE=your_license_code # 授权码
+```
+
+### 获取配置信息
+- **高德地图密钥**:访问 [高德开放平台](https://lbs.amap.com/) 申请
+- **WebSoftAdmin 授权码**:联系 [官方网站](https://websoft.top/) 获取
+- **其他 API 配置**:根据您的后端服务配置
+
+## 🎯 核心功能
+
+### 📝 内容管理系统
+- **文章管理**:支持富文本编辑、图片/视频上传
+- **一键排版**:智能文章格式优化,包含10种专业排版样式
+- **媒体库**:图片/视频文件管理,支持分组和搜索
+- **首行缩进**:中文段落格式智能切换
+
+### 🛒 商城管理
+- **商品管理**:商品信息编辑、规格设置
+- **订单管理**:订单流程跟踪
+- **库存管理**:商品库存监控
+
+### 👥 用户权限
+- **用户管理**:用户信息维护
+- **角色权限**:基于角色的访问控制
+- **菜单管理**:动态菜单配置
+
+## 🎨 富文本编辑器特色功能
+
+### 📸 媒体上传
+- **图片上传**:支持拖拽、粘贴、文件选择
+- **视频上传**:支持多种视频格式
+- **媒体库**:统一的媒体文件管理
+- **OSS 存储**:阿里云对象存储集成
+
+### ✨ 智能排版
+- **一键排版**:10种专业排版优化
+- **首行缩进**:中文段落格式切换
+- **样式优化**:标题、段落、列表、表格等元素美化
+- **响应式**:适配不同屏幕尺寸
+
+## 🏗️ 项目结构
+
+```
+src/
+├── components/ # 公共组件
+├── views/ # 页面组件
+│ ├── cms/ # 内容管理
+│ ├── shop/ # 商城管理
+│ └── system/ # 系统管理
+├── router/ # 路由配置
+├── store/ # 状态管理
+├── utils/ # 工具函数
+└── assets/ # 静态资源
+```
diff --git a/app/api/bszx/bszxBm/index.ts b/app/api/bszx/bszxBm/index.ts
new file mode 100644
index 0000000..f643aa6
--- /dev/null
+++ b/app/api/bszx/bszxBm/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { BszxBm, BszxBmParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询百色中学-报名记录
+ */
+export async function pageBszxBm(params: BszxBmParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/bszx/bszx-bm/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询百色中学-报名记录列表
+ */
+export async function listBszxBm(params?: BszxBmParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-bm',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加百色中学-报名记录
+ */
+export async function addBszxBm(data: BszxBm) {
+ const res = await request.post>(
+ MODULES_API_URL + '/bszx/bszx-bm',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改百色中学-报名记录
+ */
+export async function updateBszxBm(data: BszxBm) {
+ const res = await request.put>(
+ MODULES_API_URL + '/bszx/bszx-bm',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除百色中学-报名记录
+ */
+export async function removeBszxBm(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-bm/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除百色中学-报名记录
+ */
+export async function removeBatchBszxBm(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-bm/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询百色中学-报名记录
+ */
+export async function getBszxBm(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-bm/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/bszx/bszxBm/model/index.ts b/app/api/bszx/bszxBm/model/index.ts
new file mode 100644
index 0000000..e0d2d8c
--- /dev/null
+++ b/app/api/bszx/bszxBm/model/index.ts
@@ -0,0 +1,78 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 百色中学-报名记录
+ */
+export interface BszxBm {
+ // 自增ID
+ id?: number;
+ // 订单编号
+ orderNo?: string;
+ // 姓名
+ name?: string;
+ // 性别 1男 2女
+ sex?: number;
+ sexName?: string;
+ // 手机号码
+ phone?: string;
+ // 手机号码(脱敏)
+ mobile?: string;
+ // 捐款金额
+ price?: string;
+ // 分部ID
+ branchId?: number;
+ // 班级ID
+ classId?: number;
+ // 班级
+ className?: string;
+ // 年级
+ gradeName?: string;
+ // 居住地址
+ address?: string;
+ // 工作单位
+ workUnit?: string;
+ // 职务
+ position?: string;
+ // 是否能到场
+ present?: string;
+ // 年龄
+ age?: number;
+ // 人数
+ number?: number;
+ // 额外信息
+ extra?: string;
+ // 生成的邀请函存放路径
+ certificate?: string;
+ // 预定日期
+ dateTime?: string;
+ // 表单数据
+ formData?: string;
+ // 表单ID
+ formId?: number;
+ // 用户ID
+ userId?: number;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 百色中学-报名记录搜索条件
+ */
+export interface BszxBmParam extends PageParam {
+ id?: number;
+ branchId?: number;
+ gradeName?: string;
+ className?: string;
+ classId?: number;
+ keywords?: string;
+}
diff --git a/app/api/bszx/bszxBranch/index.ts b/app/api/bszx/bszxBranch/index.ts
new file mode 100644
index 0000000..0f7955b
--- /dev/null
+++ b/app/api/bszx/bszxBranch/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { BszxBranch, BszxBranchParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询百色中学-分部
+ */
+export async function pageBszxBranch(params: BszxBranchParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/bszx/bszx-branch/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询百色中学-分部列表
+ */
+export async function listBszxBranch(params?: BszxBranchParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-branch',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加百色中学-分部
+ */
+export async function addBszxBranch(data: BszxBranch) {
+ const res = await request.post>(
+ MODULES_API_URL + '/bszx/bszx-branch',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改百色中学-分部
+ */
+export async function updateBszxBranch(data: BszxBranch) {
+ const res = await request.put>(
+ MODULES_API_URL + '/bszx/bszx-branch',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除百色中学-分部
+ */
+export async function removeBszxBranch(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-branch/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除百色中学-分部
+ */
+export async function removeBatchBszxBranch(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-branch/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询百色中学-分部
+ */
+export async function getBszxBranch(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-branch/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/bszx/bszxBranch/model/index.ts b/app/api/bszx/bszxBranch/model/index.ts
new file mode 100644
index 0000000..16866dd
--- /dev/null
+++ b/app/api/bszx/bszxBranch/model/index.ts
@@ -0,0 +1,23 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 百色中学-分部
+ */
+export interface BszxBranch {
+ // ID
+ id?: number;
+ // 分部名称
+ name?: string;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 租户id
+ tenantId?: number;
+}
+
+/**
+ * 百色中学-分部搜索条件
+ */
+export interface BszxBranchParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/bszx/bszxClass/index.ts b/app/api/bszx/bszxClass/index.ts
new file mode 100644
index 0000000..24eed7b
--- /dev/null
+++ b/app/api/bszx/bszxClass/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { BszxClass, BszxClassParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询百色中学-班级
+ */
+export async function pageBszxClass(params: BszxClassParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/bszx/bszx-class/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询百色中学-班级列表
+ */
+export async function listBszxClass(params?: BszxClassParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-class',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加百色中学-班级
+ */
+export async function addBszxClass(data: BszxClass) {
+ const res = await request.post>(
+ MODULES_API_URL + '/bszx/bszx-class',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改百色中学-班级
+ */
+export async function updateBszxClass(data: BszxClass) {
+ const res = await request.put>(
+ MODULES_API_URL + '/bszx/bszx-class',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除百色中学-班级
+ */
+export async function removeBszxClass(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-class/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除百色中学-班级
+ */
+export async function removeBatchBszxClass(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-class/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询百色中学-班级
+ */
+export async function getBszxClass(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-class/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/bszx/bszxClass/model/index.ts b/app/api/bszx/bszxClass/model/index.ts
new file mode 100644
index 0000000..c25af05
--- /dev/null
+++ b/app/api/bszx/bszxClass/model/index.ts
@@ -0,0 +1,48 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 百色中学-班级
+ */
+export interface BszxClass {
+ // ID
+ id?: number;
+ // 时代ID
+ eraId?: number;
+ // 年级ID
+ gradeId?: number;
+ // 年级
+ gradeName?: string;
+ // 班级
+ className?: string;
+ // 分部
+ branch?: number;
+ // 班级
+ name?: string;
+ // 累计捐款总金额
+ totalMoney?: string;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ value?: number;
+ label?: string;
+}
+
+/**
+ * 百色中学-班级搜索条件
+ */
+export interface BszxClassParam extends PageParam {
+ id?: number;
+ gradeId?: number;
+ eraId?: number;
+ branch?: number;
+ name?: string;
+ className?: string;
+ keywords?: string;
+}
diff --git a/app/api/bszx/bszxEra/index.ts b/app/api/bszx/bszxEra/index.ts
new file mode 100644
index 0000000..45747b5
--- /dev/null
+++ b/app/api/bszx/bszxEra/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { BszxEra, BszxEraParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询百色中学-年代
+ */
+export async function pageBszxEra(params: BszxEraParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/bszx/bszx-era/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询百色中学-年代列表
+ */
+export async function listBszxEra(params?: BszxEraParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-era',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加百色中学-年代
+ */
+export async function addBszxEra(data: BszxEra) {
+ const res = await request.post>(
+ MODULES_API_URL + '/bszx/bszx-era',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改百色中学-年代
+ */
+export async function updateBszxEra(data: BszxEra) {
+ const res = await request.put>(
+ MODULES_API_URL + '/bszx/bszx-era',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除百色中学-年代
+ */
+export async function removeBszxEra(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-era/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除百色中学-年代
+ */
+export async function removeBatchBszxEra(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-era/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询百色中学-年代
+ */
+export async function getBszxEra(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-era/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/bszx/bszxEra/model/index.ts b/app/api/bszx/bszxEra/model/index.ts
new file mode 100644
index 0000000..910da64
--- /dev/null
+++ b/app/api/bszx/bszxEra/model/index.ts
@@ -0,0 +1,21 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 百色中学-年代
+ */
+export interface BszxEra {
+ // ID
+ id?: number;
+ // 年代
+ name?: string;
+ // 租户id
+ tenantId?: number;
+}
+
+/**
+ * 百色中学-年代搜索条件
+ */
+export interface BszxEraParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/bszx/bszxGrade/index.ts b/app/api/bszx/bszxGrade/index.ts
new file mode 100644
index 0000000..294c03f
--- /dev/null
+++ b/app/api/bszx/bszxGrade/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { BszxGrade, BszxGradeParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询百色中学-年级
+ */
+export async function pageBszxGrade(params: BszxGradeParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/bszx/bszx-grade/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询百色中学-年级列表
+ */
+export async function listBszxGrade(params?: BszxGradeParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-grade',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加百色中学-年级
+ */
+export async function addBszxGrade(data: BszxGrade) {
+ const res = await request.post>(
+ MODULES_API_URL + '/bszx/bszx-grade',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改百色中学-年级
+ */
+export async function updateBszxGrade(data: BszxGrade) {
+ const res = await request.put>(
+ MODULES_API_URL + '/bszx/bszx-grade',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除百色中学-年级
+ */
+export async function removeBszxGrade(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-grade/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除百色中学-年级
+ */
+export async function removeBatchBszxGrade(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-grade/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询百色中学-年级
+ */
+export async function getBszxGrade(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-grade/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/bszx/bszxGrade/model/index.ts b/app/api/bszx/bszxGrade/model/index.ts
new file mode 100644
index 0000000..7df61ec
--- /dev/null
+++ b/app/api/bszx/bszxGrade/model/index.ts
@@ -0,0 +1,37 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 百色中学-年级
+ */
+export interface BszxGrade {
+ // ID
+ id?: number;
+ // 年级
+ name?: string;
+ // 年代
+ eraId?: number;
+ // 分部
+ branch?: number;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ value?: number;
+ label?: string;
+}
+
+/**
+ * 百色中学-年级搜索条件
+ */
+export interface BszxGradeParam extends PageParam {
+ id?: number;
+ branch?: number;
+ gradeId?: number;
+ keywords?: string;
+}
diff --git a/app/api/bszx/bszxOrder/index.ts b/app/api/bszx/bszxOrder/index.ts
new file mode 100644
index 0000000..4c7faff
--- /dev/null
+++ b/app/api/bszx/bszxOrder/index.ts
@@ -0,0 +1,37 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import { MODULES_API_URL } from '@/config/setting';
+import {ShopOrder, ShopOrderParam} from "@/api/shop/shopOrder/model";
+
+/**
+ * 分页查询百色中学-捐款记录
+ */
+export async function pageBszxOrder(params: ShopOrderParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/bszx/bszx-order/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+
+/**
+ * 统计订单总金额(只统计有效订单)
+ */
+export async function bszxOrderTotal(params?: ShopOrderParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-order/total',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/bszx/bszxPay/index.ts b/app/api/bszx/bszxPay/index.ts
new file mode 100644
index 0000000..df20870
--- /dev/null
+++ b/app/api/bszx/bszxPay/index.ts
@@ -0,0 +1,121 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { BszxPay, BszxPayParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+import {ShopOrder} from "@/api/shop/shopOrder/model";
+
+/**
+ * 分页查询百色中学-捐款记录
+ */
+export async function pageBszxPay(params: BszxPayParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/bszx/bszx-pay/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询百色中学-捐款记录列表
+ */
+export async function listBszxPay(params?: BszxPayParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-pay',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加百色中学-捐款记录
+ */
+export async function addBszxPay(data: BszxPay) {
+ const res = await request.post>(
+ MODULES_API_URL + '/bszx/bszx-pay',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改百色中学-捐款记录
+ */
+export async function updateBszxPay(data: BszxPay) {
+ const res = await request.put>(
+ MODULES_API_URL + '/bszx/bszx-pay',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除百色中学-捐款记录
+ */
+export async function removeBszxPay(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-pay/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除百色中学-捐款记录
+ */
+export async function removeBatchBszxPay(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-pay/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询百色中学-捐款记录
+ */
+export async function getBszxPay(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-pay/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改订单
+ */
+export async function repairOrder(data: ShopOrder) {
+ const res = await request.put>(
+ MODULES_API_URL + '/bszx/bszx-pay/repair',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/bszx/bszxPay/model/index.ts b/app/api/bszx/bszxPay/model/index.ts
new file mode 100644
index 0000000..016b733
--- /dev/null
+++ b/app/api/bszx/bszxPay/model/index.ts
@@ -0,0 +1,69 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 百色中学-捐款记录
+ */
+export interface BszxPay {
+ // ID
+ id?: number;
+ // 年龄
+ age?: number;
+ // 姓名
+ name?: string;
+ // 性别 1男 2女
+ sex?: number;
+ // 手机号码
+ phone?: string;
+ // 班级
+ className?: string;
+ // 年级
+ gradeName?: string;
+ // 居住地址
+ address?: string;
+ // 工作单位
+ workUnit?: string;
+ // 职务
+ position?: string;
+ // 数量
+ number?: number;
+ // 付费金额
+ price?: string;
+ // 额外信息
+ extra?: string;
+ // 订单编号
+ orderNo?: string;
+ // 预定日期
+ dateTime?: string;
+ // 捐赠证书
+ certificate?: string;
+ // 表单数据
+ formData?: string;
+ // 来源表ID
+ formId?: number;
+ // 用户ID
+ userId?: number;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 百色中学-捐款记录搜索条件
+ */
+export interface BszxPayParam extends PageParam {
+ id?: number;
+ orderId?: number;
+ orderNo?: string;
+ gradeName?: string;
+ className?: string;
+ keywords?: string;
+}
diff --git a/app/api/bszx/bszxPayRanking/index.ts b/app/api/bszx/bszxPayRanking/index.ts
new file mode 100644
index 0000000..7a6dc99
--- /dev/null
+++ b/app/api/bszx/bszxPayRanking/index.ts
@@ -0,0 +1,135 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { BszxPayRanking, BszxPayRankingParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+import {BszxClass, BszxClassParam} from "@/api/bszx/bszxClass/model";
+
+/**
+ * 分页查询百色中学-捐款排行
+ */
+export async function pageBszxPayRanking(params: BszxPayRankingParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询百色中学-捐款排行列表
+ */
+export async function listBszxPayRanking(params?: BszxPayRankingParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+export async function ranking(params?: BszxPayRankingParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking/ranking',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+export async function ranking2(params?: BszxClassParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking/ranking2',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+
+
+/**
+ * 添加百色中学-捐款排行
+ */
+export async function addBszxPayRanking(data: BszxPayRanking) {
+ const res = await request.post>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改百色中学-捐款排行
+ */
+export async function updateBszxPayRanking(data: BszxPayRanking) {
+ const res = await request.put>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除百色中学-捐款排行
+ */
+export async function removeBszxPayRanking(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除百色中学-捐款排行
+ */
+export async function removeBatchBszxPayRanking(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询百色中学-捐款排行
+ */
+export async function getBszxPayRanking(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/bszx/bszx-pay-ranking/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/bszx/bszxPayRanking/model/index.ts b/app/api/bszx/bszxPayRanking/model/index.ts
new file mode 100644
index 0000000..aa46138
--- /dev/null
+++ b/app/api/bszx/bszxPayRanking/model/index.ts
@@ -0,0 +1,35 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 百色中学-捐款排行
+ */
+export interface BszxPayRanking {
+ // ID
+ id?: number;
+ // 来源表ID(项目名称)
+ formId?: number;
+ // 数量
+ number?: number;
+ // 获得捐款总金额
+ totalPrice?: number;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 百色中学-捐款排行搜索条件
+ */
+export interface BszxPayRankingParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicAppointment/index.ts b/app/api/clinic/clinicAppointment/index.ts
new file mode 100644
index 0000000..e3520a0
--- /dev/null
+++ b/app/api/clinic/clinicAppointment/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicAppointment, ClinicAppointmentParam } from './model';
+
+/**
+ * 分页查询挂号
+ */
+export async function pageClinicAppointment(params: ClinicAppointmentParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-appointment/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询挂号列表
+ */
+export async function listClinicAppointment(params?: ClinicAppointmentParam) {
+ const res = await request.get>(
+ '/clinic/clinic-appointment',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加挂号
+ */
+export async function addClinicAppointment(data: ClinicAppointment) {
+ const res = await request.post>(
+ '/clinic/clinic-appointment',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改挂号
+ */
+export async function updateClinicAppointment(data: ClinicAppointment) {
+ const res = await request.put>(
+ '/clinic/clinic-appointment',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除挂号
+ */
+export async function removeClinicAppointment(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-appointment/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除挂号
+ */
+export async function removeBatchClinicAppointment(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-appointment/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询挂号
+ */
+export async function getClinicAppointment(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-appointment/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicAppointment/model/index.ts b/app/api/clinic/clinicAppointment/model/index.ts
new file mode 100644
index 0000000..035dfc9
--- /dev/null
+++ b/app/api/clinic/clinicAppointment/model/index.ts
@@ -0,0 +1,47 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 挂号
+ */
+export interface ClinicAppointment {
+ // 主键ID
+ id?: number;
+ // 类型
+ type?: number;
+ // 就诊原因
+ reason?: string;
+ // 挂号时间
+ evaluateTime?: string;
+ // 医生
+ doctorId?: number;
+ // 医生名称
+ doctorName?: string;
+ // 医生职位
+ doctorPosition?: string;
+ // 患者
+ userId?: number;
+ // 患者名称
+ nickname?: string;
+ // 患者联系电话
+ phone?: string;
+ // 备注
+ comments?: string;
+ // 排序号
+ sortNumber?: number;
+ // 是否删除
+ isDelete?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 挂号搜索条件
+ */
+export interface ClinicAppointmentParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicDoctorApply/index.ts b/app/api/clinic/clinicDoctorApply/index.ts
new file mode 100644
index 0000000..eb2f45b
--- /dev/null
+++ b/app/api/clinic/clinicDoctorApply/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicDoctorApply, ClinicDoctorApplyParam } from './model';
+
+/**
+ * 分页查询医生入驻申请
+ */
+export async function pageClinicDoctorApply(params: ClinicDoctorApplyParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-doctor-apply/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询医生入驻申请列表
+ */
+export async function listClinicDoctorApply(params?: ClinicDoctorApplyParam) {
+ const res = await request.get>(
+ '/clinic/clinic-doctor-apply',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加医生入驻申请
+ */
+export async function addClinicDoctorApply(data: ClinicDoctorApply) {
+ const res = await request.post>(
+ '/clinic/clinic-doctor-apply',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改医生入驻申请
+ */
+export async function updateClinicDoctorApply(data: ClinicDoctorApply) {
+ const res = await request.put>(
+ '/clinic/clinic-doctor-apply',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除医生入驻申请
+ */
+export async function removeClinicDoctorApply(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-doctor-apply/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除医生入驻申请
+ */
+export async function removeBatchClinicDoctorApply(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-doctor-apply/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询医生入驻申请
+ */
+export async function getClinicDoctorApply(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-doctor-apply/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicDoctorApply/model/index.ts b/app/api/clinic/clinicDoctorApply/model/index.ts
new file mode 100644
index 0000000..f0570a0
--- /dev/null
+++ b/app/api/clinic/clinicDoctorApply/model/index.ts
@@ -0,0 +1,75 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 医生入驻申请
+ */
+export interface ClinicDoctorApply {
+ // 主键ID
+ applyId?: number;
+ // 类型 0医生
+ type?: number;
+ // 用户ID
+ userId?: number;
+ // 姓名
+ realName?: string;
+ // 性别 1男 2女
+ gender?: number;
+ // 手机号
+ mobile?: string;
+ // 客户名称
+ dealerName?: string;
+ // 证件号码
+ idCard?: string;
+ // 生日
+ birthDate?: string;
+ // 区分职称等级(如主治医师、副主任医师)
+ professionalTitle?: string;
+ // 工作单位
+ workUnit?: string;
+ // 执业资格核心凭证
+ practiceLicense?: string;
+ // 限定可执业科室或疾病类型
+ practiceScope?: string;
+ // 开始工作时间
+ startWorkDate?: string;
+ // 简历
+ resume?: string;
+ // 使用 JSON 存储多个证件文件路径(如执业证、学历证)
+ certificationFiles?: string;
+ // 详细地址
+ address?: string;
+ // 签约价格
+ money?: string;
+ // 推荐人用户ID
+ refereeId?: number;
+ // 申请方式(10需后台审核 20无需审核)
+ applyType?: number;
+ // 审核状态 (10待审核 20审核通过 30驳回)
+ applyStatus?: number;
+ // 申请时间
+ applyTime?: string;
+ // 审核时间
+ auditTime?: string;
+ // 合同时间
+ contractTime?: string;
+ // 过期时间
+ expirationTime?: string;
+ // 驳回原因
+ rejectReason?: string;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 医生入驻申请搜索条件
+ */
+export interface ClinicDoctorApplyParam extends PageParam {
+ applyId?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicDoctorMedicalRecord/index.ts b/app/api/clinic/clinicDoctorMedicalRecord/index.ts
new file mode 100644
index 0000000..b857e8f
--- /dev/null
+++ b/app/api/clinic/clinicDoctorMedicalRecord/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicDoctorMedicalRecord, ClinicDoctorMedicalRecordParam } from './model';
+
+/**
+ * 分页查询医疗记录
+ */
+export async function pageClinicDoctorMedicalRecord(params: ClinicDoctorMedicalRecordParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-doctor-medical-record/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询医疗记录列表
+ */
+export async function listClinicDoctorMedicalRecord(params?: ClinicDoctorMedicalRecordParam) {
+ const res = await request.get>(
+ '/clinic/clinic-doctor-medical-record',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加医疗记录
+ */
+export async function addClinicDoctorMedicalRecord(data: ClinicDoctorMedicalRecord) {
+ const res = await request.post>(
+ '/clinic/clinic-doctor-medical-record',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改医疗记录
+ */
+export async function updateClinicDoctorMedicalRecord(data: ClinicDoctorMedicalRecord) {
+ const res = await request.put>(
+ '/clinic/clinic-doctor-medical-record',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除医疗记录
+ */
+export async function removeClinicDoctorMedicalRecord(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-doctor-medical-record/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除医疗记录
+ */
+export async function removeBatchClinicDoctorMedicalRecord(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-doctor-medical-record/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询医疗记录
+ */
+export async function getClinicDoctorMedicalRecord(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-doctor-medical-record/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicDoctorMedicalRecord/model/index.ts b/app/api/clinic/clinicDoctorMedicalRecord/model/index.ts
new file mode 100644
index 0000000..92d6ea4
--- /dev/null
+++ b/app/api/clinic/clinicDoctorMedicalRecord/model/index.ts
@@ -0,0 +1,61 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 医疗记录
+ */
+export interface ClinicDoctorMedicalRecord {
+ // 主键ID
+ id?: number;
+ // 买家用户ID
+ userId?: number;
+ // 订单编号
+ orderNo?: string;
+ // 分销商用户id(一级)
+ firstUserId?: number;
+ // 分销商用户id(二级)
+ secondUserId?: number;
+ // 分销商用户id(三级)
+ thirdUserId?: number;
+ // 分销佣金(一级)
+ firstMoney?: string;
+ // 分销佣金(二级)
+ secondMoney?: string;
+ // 分销佣金(三级)
+ thirdMoney?: string;
+ // 单价
+ price?: string;
+ // 订单总金额
+ orderPrice?: string;
+ // 结算金额
+ settledPrice?: string;
+ // 换算成度
+ degreePrice?: string;
+ // 实发金额
+ payPrice?: string;
+ // 税率
+ rate?: string;
+ // 结算月份
+ month?: string;
+ // 订单是否失效(0未失效 1已失效)
+ isInvalid?: number;
+ // 佣金结算(0未结算 1已结算)
+ isSettled?: number;
+ // 结算时间
+ settleTime?: string;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 医疗记录搜索条件
+ */
+export interface ClinicDoctorMedicalRecordParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicDoctorUser/index.ts b/app/api/clinic/clinicDoctorUser/index.ts
new file mode 100644
index 0000000..275286f
--- /dev/null
+++ b/app/api/clinic/clinicDoctorUser/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicDoctorUser, ClinicDoctorUserParam } from './model';
+
+/**
+ * 分页查询分销商用户记录表
+ */
+export async function pageClinicDoctorUser(params: ClinicDoctorUserParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-doctor-user/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询分销商用户记录表列表
+ */
+export async function listClinicDoctorUser(params?: ClinicDoctorUserParam) {
+ const res = await request.get>(
+ '/clinic/clinic-doctor-user',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加分销商用户记录表
+ */
+export async function addClinicDoctorUser(data: ClinicDoctorUser) {
+ const res = await request.post>(
+ '/clinic/clinic-doctor-user',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改分销商用户记录表
+ */
+export async function updateClinicDoctorUser(data: ClinicDoctorUser) {
+ const res = await request.put>(
+ '/clinic/clinic-doctor-user',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除分销商用户记录表
+ */
+export async function removeClinicDoctorUser(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-doctor-user/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除分销商用户记录表
+ */
+export async function removeBatchClinicDoctorUser(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-doctor-user/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询分销商用户记录表
+ */
+export async function getClinicDoctorUser(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-doctor-user/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicDoctorUser/model/index.ts b/app/api/clinic/clinicDoctorUser/model/index.ts
new file mode 100644
index 0000000..0579718
--- /dev/null
+++ b/app/api/clinic/clinicDoctorUser/model/index.ts
@@ -0,0 +1,55 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 分销商用户记录表
+ */
+export interface ClinicDoctorUser {
+ // 主键ID
+ id?: number;
+ // 类型 0经销商 1企业 2集团
+ type?: number;
+ // 自增ID
+ userId?: number;
+ // 姓名
+ realName?: string;
+ // 手机号
+ phone?: string;
+ // 部门
+ departmentId?: number;
+ // 专业领域
+ specialty?: string;
+ // 职务级别
+ position?: string;
+ // 执业资格
+ qualification?: string;
+ // 医生简介
+ introduction?: string;
+ // 挂号费
+ consultationFee?: string;
+ // 工作年限
+ workYears?: number;
+ // 问诊人数
+ consultationCount?: number;
+ // 专属二维码
+ qrcode?: string;
+ // 备注
+ comments?: string;
+ // 排序号
+ sortNumber?: number;
+ // 是否删除
+ isDelete?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 分销商用户记录表搜索条件
+ */
+export interface ClinicDoctorUserParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicMedicalHistory/index.ts b/app/api/clinic/clinicMedicalHistory/index.ts
new file mode 100644
index 0000000..84fbd8b
--- /dev/null
+++ b/app/api/clinic/clinicMedicalHistory/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicMedicalHistory, ClinicMedicalHistoryParam } from './model';
+
+/**
+ * 分页查询病例
+ */
+export async function pageClinicMedicalHistory(params: ClinicMedicalHistoryParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-medical-history/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询病例列表
+ */
+export async function listClinicMedicalHistory(params?: ClinicMedicalHistoryParam) {
+ const res = await request.get>(
+ '/clinic/clinic-medical-history',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加病例
+ */
+export async function addClinicMedicalHistory(data: ClinicMedicalHistory) {
+ const res = await request.post>(
+ '/clinic/clinic-medical-history',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改病例
+ */
+export async function updateClinicMedicalHistory(data: ClinicMedicalHistory) {
+ const res = await request.put>(
+ '/clinic/clinic-medical-history',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除病例
+ */
+export async function removeClinicMedicalHistory(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-medical-history/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除病例
+ */
+export async function removeBatchClinicMedicalHistory(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-medical-history/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询病例
+ */
+export async function getClinicMedicalHistory(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-medical-history/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicMedicalHistory/model/index.ts b/app/api/clinic/clinicMedicalHistory/model/index.ts
new file mode 100644
index 0000000..2d603a4
--- /dev/null
+++ b/app/api/clinic/clinicMedicalHistory/model/index.ts
@@ -0,0 +1,61 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 病例
+ */
+export interface ClinicMedicalHistory {
+ // 主键ID
+ id?: number;
+ // 买家用户ID
+ userId?: number;
+ // 订单编号
+ orderNo?: string;
+ // 分销商用户id(一级)
+ firstUserId?: number;
+ // 分销商用户id(二级)
+ secondUserId?: number;
+ // 分销商用户id(三级)
+ thirdUserId?: number;
+ // 分销佣金(一级)
+ firstMoney?: string;
+ // 分销佣金(二级)
+ secondMoney?: string;
+ // 分销佣金(三级)
+ thirdMoney?: string;
+ // 单价
+ price?: string;
+ // 订单总金额
+ orderPrice?: string;
+ // 结算金额
+ settledPrice?: string;
+ // 换算成度
+ degreePrice?: string;
+ // 实发金额
+ payPrice?: string;
+ // 税率
+ rate?: string;
+ // 结算月份
+ month?: string;
+ // 订单是否失效(0未失效 1已失效)
+ isInvalid?: number;
+ // 佣金结算(0未结算 1已结算)
+ isSettled?: number;
+ // 结算时间
+ settleTime?: string;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 病例搜索条件
+ */
+export interface ClinicMedicalHistoryParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicMedicine/index.ts b/app/api/clinic/clinicMedicine/index.ts
new file mode 100644
index 0000000..fbda8cf
--- /dev/null
+++ b/app/api/clinic/clinicMedicine/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicMedicine, ClinicMedicineParam } from './model';
+
+/**
+ * 分页查询药品库
+ */
+export async function pageClinicMedicine(params: ClinicMedicineParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-medicine/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询药品库列表
+ */
+export async function listClinicMedicine(params?: ClinicMedicineParam) {
+ const res = await request.get>(
+ '/clinic/clinic-medicine',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加药品库
+ */
+export async function addClinicMedicine(data: ClinicMedicine) {
+ const res = await request.post>(
+ '/clinic/clinic-medicine',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改药品库
+ */
+export async function updateClinicMedicine(data: ClinicMedicine) {
+ const res = await request.put>(
+ '/clinic/clinic-medicine',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除药品库
+ */
+export async function removeClinicMedicine(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-medicine/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除药品库
+ */
+export async function removeBatchClinicMedicine(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-medicine/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询药品库
+ */
+export async function getClinicMedicine(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-medicine/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicMedicine/model/index.ts b/app/api/clinic/clinicMedicine/model/index.ts
new file mode 100644
index 0000000..e5e0858
--- /dev/null
+++ b/app/api/clinic/clinicMedicine/model/index.ts
@@ -0,0 +1,43 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 药品库
+ */
+export interface ClinicMedicine {
+ // 主键ID
+ id?: number;
+ // 药名
+ name?: string;
+ // 拼音
+ pinyin?: string;
+ // 分类(如“清热解毒”、“补气养血”)
+ category?: string;
+ // 规格(如“饮片”、“颗粒”)
+ specification?: string;
+ // 单位(如“克”、“袋”)
+ unit?: string;
+ // 描述
+ content?: string;
+ // 单价
+ pricePerUnit?: string;
+ // 是否活跃
+ isActive?: number;
+ // 买家用户ID
+ userId?: number;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 药品库搜索条件
+ */
+export interface ClinicMedicineParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicMedicineInout/index.ts b/app/api/clinic/clinicMedicineInout/index.ts
new file mode 100644
index 0000000..222930b
--- /dev/null
+++ b/app/api/clinic/clinicMedicineInout/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicMedicineInout, ClinicMedicineInoutParam } from './model';
+
+/**
+ * 分页查询出入库
+ */
+export async function pageClinicMedicineInout(params: ClinicMedicineInoutParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-medicine-inout/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询出入库列表
+ */
+export async function listClinicMedicineInout(params?: ClinicMedicineInoutParam) {
+ const res = await request.get>(
+ '/clinic/clinic-medicine-inout',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加出入库
+ */
+export async function addClinicMedicineInout(data: ClinicMedicineInout) {
+ const res = await request.post>(
+ '/clinic/clinic-medicine-inout',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改出入库
+ */
+export async function updateClinicMedicineInout(data: ClinicMedicineInout) {
+ const res = await request.put>(
+ '/clinic/clinic-medicine-inout',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除出入库
+ */
+export async function removeClinicMedicineInout(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-medicine-inout/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除出入库
+ */
+export async function removeBatchClinicMedicineInout(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-medicine-inout/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询出入库
+ */
+export async function getClinicMedicineInout(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-medicine-inout/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicMedicineInout/model/index.ts b/app/api/clinic/clinicMedicineInout/model/index.ts
new file mode 100644
index 0000000..6593539
--- /dev/null
+++ b/app/api/clinic/clinicMedicineInout/model/index.ts
@@ -0,0 +1,61 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 出入库
+ */
+export interface ClinicMedicineInout {
+ // 主键ID
+ id?: number;
+ // 买家用户ID
+ userId?: number;
+ // 订单编号
+ orderNo?: string;
+ // 分销商用户id(一级)
+ firstUserId?: number;
+ // 分销商用户id(二级)
+ secondUserId?: number;
+ // 分销商用户id(三级)
+ thirdUserId?: number;
+ // 分销佣金(一级)
+ firstMoney?: string;
+ // 分销佣金(二级)
+ secondMoney?: string;
+ // 分销佣金(三级)
+ thirdMoney?: string;
+ // 单价
+ price?: string;
+ // 订单总金额
+ orderPrice?: string;
+ // 结算金额
+ settledPrice?: string;
+ // 换算成度
+ degreePrice?: string;
+ // 实发金额
+ payPrice?: string;
+ // 税率
+ rate?: string;
+ // 结算月份
+ month?: string;
+ // 订单是否失效(0未失效 1已失效)
+ isInvalid?: number;
+ // 佣金结算(0未结算 1已结算)
+ isSettled?: number;
+ // 结算时间
+ settleTime?: string;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 出入库搜索条件
+ */
+export interface ClinicMedicineInoutParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicMedicineStock/index.ts b/app/api/clinic/clinicMedicineStock/index.ts
new file mode 100644
index 0000000..ff60b0f
--- /dev/null
+++ b/app/api/clinic/clinicMedicineStock/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicMedicineStock, ClinicMedicineStockParam } from './model';
+
+/**
+ * 分页查询药品库存
+ */
+export async function pageClinicMedicineStock(params: ClinicMedicineStockParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-medicine-stock/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询药品库存列表
+ */
+export async function listClinicMedicineStock(params?: ClinicMedicineStockParam) {
+ const res = await request.get>(
+ '/clinic/clinic-medicine-stock',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加药品库存
+ */
+export async function addClinicMedicineStock(data: ClinicMedicineStock) {
+ const res = await request.post>(
+ '/clinic/clinic-medicine-stock',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改药品库存
+ */
+export async function updateClinicMedicineStock(data: ClinicMedicineStock) {
+ const res = await request.put>(
+ '/clinic/clinic-medicine-stock',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除药品库存
+ */
+export async function removeClinicMedicineStock(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-medicine-stock/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除药品库存
+ */
+export async function removeBatchClinicMedicineStock(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-medicine-stock/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询药品库存
+ */
+export async function getClinicMedicineStock(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-medicine-stock/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicMedicineStock/model/index.ts b/app/api/clinic/clinicMedicineStock/model/index.ts
new file mode 100644
index 0000000..15719ac
--- /dev/null
+++ b/app/api/clinic/clinicMedicineStock/model/index.ts
@@ -0,0 +1,35 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 药品库存
+ */
+export interface ClinicMedicineStock {
+ // 主键ID
+ id?: number;
+ // 药品
+ medicineId?: number;
+ // 库存数量
+ stockQuantity?: number;
+ // 最小库存预警
+ minStockLevel?: number;
+ // 上次更新时间
+ lastUpdated?: string;
+ // 买家用户ID
+ userId?: number;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 药品库存搜索条件
+ */
+export interface ClinicMedicineStockParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicOrder/index.ts b/app/api/clinic/clinicOrder/index.ts
new file mode 100644
index 0000000..0ef3d39
--- /dev/null
+++ b/app/api/clinic/clinicOrder/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicOrder, ClinicOrderParam } from './model';
+
+/**
+ * 分页查询处方订单
+ */
+export async function pageClinicOrder(params: ClinicOrderParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-order/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询处方订单列表
+ */
+export async function listClinicOrder(params?: ClinicOrderParam) {
+ const res = await request.get>(
+ '/clinic/clinic-order',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加处方订单
+ */
+export async function addClinicOrder(data: ClinicOrder) {
+ const res = await request.post>(
+ '/clinic/clinic-order',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改处方订单
+ */
+export async function updateClinicOrder(data: ClinicOrder) {
+ const res = await request.put>(
+ '/clinic/clinic-order',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除处方订单
+ */
+export async function removeClinicOrder(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-order/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除处方订单
+ */
+export async function removeBatchClinicOrder(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-order/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询处方订单
+ */
+export async function getClinicOrder(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-order/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicOrder/model/index.ts b/app/api/clinic/clinicOrder/model/index.ts
new file mode 100644
index 0000000..ddeb3cb
--- /dev/null
+++ b/app/api/clinic/clinicOrder/model/index.ts
@@ -0,0 +1,167 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 处方订单
+ */
+export interface ClinicOrder {
+ // 订单号
+ orderId?: number;
+ // 订单编号
+ orderNo?: string;
+ // 订单类型,0商城订单 1预定订单/外卖 2会员卡
+ type?: number;
+ // 订单标题
+ title?: string;
+ // 快递/自提
+ deliveryType?: number;
+ // 下单渠道,0小程序预定 1俱乐部训练场 3活动订场
+ channel?: number;
+ // 微信支付交易号号
+ transactionId?: string;
+ // 微信退款订单号
+ refundOrder?: string;
+ // 商户ID
+ merchantId?: number;
+ // 商户名称
+ merchantName?: string;
+ // 商户编号
+ merchantCode?: string;
+ // 使用的优惠券id
+ couponId?: number;
+ // 使用的会员卡id
+ cardId?: string;
+ // 关联管理员id
+ adminId?: number;
+ // 核销管理员id
+ confirmId?: number;
+ // IC卡号
+ icCard?: string;
+ // 真实姓名
+ realName?: string;
+ // 关联收货地址
+ addressId?: number;
+ // 收货地址
+ address?: string;
+ //
+ addressLat?: string;
+ //
+ addressLng?: string;
+ // 买家留言
+ buyerRemarks?: string;
+ // 自提店铺id
+ selfTakeMerchantId?: number;
+ // 自提店铺
+ selfTakeMerchantName?: string;
+ // 配送开始时间
+ sendStartTime?: string;
+ // 配送结束时间
+ sendEndTime?: string;
+ // 发货店铺id
+ expressMerchantId?: number;
+ // 发货店铺
+ expressMerchantName?: string;
+ // 订单总额
+ totalPrice?: string;
+ // 减少的金额,使用VIP会员折扣、优惠券抵扣、优惠券折扣后减去的价格
+ reducePrice?: string;
+ // 实际付款
+ payPrice?: string;
+ // 用于统计
+ price?: string;
+ // 价钱,用于积分赠送
+ money?: string;
+ // 取消时间
+ cancelTime?: string;
+ // 取消原因
+ cancelReason?: string;
+ // 退款金额
+ refundMoney?: string;
+ // 教练价格
+ coachPrice?: string;
+ // 购买数量
+ totalNum?: number;
+ // 教练id
+ coachId?: number;
+ // 商品ID
+ formId?: number;
+ // 支付的用户id
+ payUserId?: number;
+ // 0余额支付,1微信支付,2支付宝支付,3银联支付,4现金支付,5POS机支付,6免费,7积分支付
+ payType?: number;
+ // 微信支付子类型:JSAPI小程序支付,NATIVE扫码支付
+ wechatPayType?: string;
+ // 0余额支付,1微信支付,2支付宝支付,3银联支付,4现金支付,5POS机支付,6免费,7积分支付
+ friendPayType?: number;
+ // 0未付款,1已付款
+ payStatus?: string;
+ // 0未使用,1已完成,2已取消,3取消中,4退款申请中,5退款被拒绝,6退款成功,7客户端申请退款
+ orderStatus?: number;
+ // 发货状态(10未发货 20已发货 30部分发货)
+ deliveryStatus?: number;
+ // 无需发货备注
+ deliveryNote?: string;
+ // 发货时间
+ deliveryTime?: string;
+ // 评价状态(0未评价 1已评价)
+ evaluateStatus?: number;
+ // 评价时间
+ evaluateTime?: string;
+ // 优惠类型:0无、1抵扣优惠券、2折扣优惠券、3、VIP月卡、4VIP年卡,5VIP次卡、6VIP会员卡、7IC月卡、8IC年卡、9IC次卡、10IC会员卡、11免费订单、12VIP充值卡、13IC充值卡、14VIP季卡、15IC季卡
+ couponType?: number;
+ // 优惠说明
+ couponDesc?: string;
+ // 二维码地址,保存订单号,支付成功后才生成
+ qrcode?: string;
+ // vip月卡年卡、ic月卡年卡回退次数
+ returnNum?: number;
+ // vip充值回退金额
+ returnMoney?: string;
+ // 预约详情开始时间数组
+ startTime?: string;
+ // 是否已开具发票:0未开发票,1已开发票,2不能开具发票
+ isInvoice?: string;
+ // 发票流水号
+ invoiceNo?: string;
+ // 商家留言
+ merchantRemarks?: string;
+ // 支付时间
+ payTime?: string;
+ // 退款时间
+ refundTime?: string;
+ // 申请退款时间
+ refundApplyTime?: string;
+ // 过期时间
+ expirationTime?: string;
+ // 自提码
+ selfTakeCode?: string;
+ // 是否已收到赠品
+ hasTakeGift?: string;
+ // 对账情况:0=未对账;1=已对账;3=已对账,金额对不上;4=未查询到该订单
+ checkBill?: number;
+ // 订单是否已结算(0未结算 1已结算)
+ isSettled?: number;
+ // 系统版本号 0当前版本 value=其他版本
+ version?: number;
+ // 用户id
+ userId?: number;
+ // 备注
+ comments?: string;
+ // 排序号
+ sortNumber?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 修改时间
+ updateTime?: string;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 处方订单搜索条件
+ */
+export interface ClinicOrderParam extends PageParam {
+ orderId?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicPatientUser/index.ts b/app/api/clinic/clinicPatientUser/index.ts
new file mode 100644
index 0000000..1b40e28
--- /dev/null
+++ b/app/api/clinic/clinicPatientUser/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicPatientUser, ClinicPatientUserParam } from './model';
+
+/**
+ * 分页查询患者
+ */
+export async function pageClinicPatientUser(params: ClinicPatientUserParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-patient-user/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询患者列表
+ */
+export async function listClinicPatientUser(params?: ClinicPatientUserParam) {
+ const res = await request.get>(
+ '/clinic/clinic-patient-user',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加患者
+ */
+export async function addClinicPatientUser(data: ClinicPatientUser) {
+ const res = await request.post>(
+ '/clinic/clinic-patient-user',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改患者
+ */
+export async function updateClinicPatientUser(data: ClinicPatientUser) {
+ const res = await request.put>(
+ '/clinic/clinic-patient-user',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除患者
+ */
+export async function removeClinicPatientUser(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-patient-user/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除患者
+ */
+export async function removeBatchClinicPatientUser(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-patient-user/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询患者
+ */
+export async function getClinicPatientUser(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-patient-user/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicPatientUser/model/index.ts b/app/api/clinic/clinicPatientUser/model/index.ts
new file mode 100644
index 0000000..4f17cad
--- /dev/null
+++ b/app/api/clinic/clinicPatientUser/model/index.ts
@@ -0,0 +1,49 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 患者
+ */
+export interface ClinicPatientUser {
+ // 主键ID
+ id?: number;
+ // 类型 0经销商 1企业 2集团
+ type?: number;
+ // 自增ID
+ userId?: number;
+ // 姓名
+ realName?: string;
+ // 性别
+ sex?: string;
+ // 手机号
+ phone?: string;
+ // 年龄
+ age?: number;
+ // 身高
+ height?: number;
+ // 体重
+ weight?: number;
+ // 过敏史
+ allergyHistory?: string;
+ // 专属二维码
+ qrcode?: string;
+ // 备注
+ comments?: string;
+ // 排序号
+ sortNumber?: number;
+ // 是否删除
+ isDelete?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 患者搜索条件
+ */
+export interface ClinicPatientUserParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicPrescription/index.ts b/app/api/clinic/clinicPrescription/index.ts
new file mode 100644
index 0000000..b5afe13
--- /dev/null
+++ b/app/api/clinic/clinicPrescription/index.ts
@@ -0,0 +1,112 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicPrescription, ClinicPrescriptionParam } from './model';
+
+/**
+ * 分页查询处方主表
+
+ */
+export async function pageClinicPrescription(params: ClinicPrescriptionParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-prescription/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询处方主表
+列表
+ */
+export async function listClinicPrescription(params?: ClinicPrescriptionParam) {
+ const res = await request.get>(
+ '/clinic/clinic-prescription',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加处方主表
+
+ */
+export async function addClinicPrescription(data: ClinicPrescription) {
+ const res = await request.post>(
+ '/clinic/clinic-prescription',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改处方主表
+
+ */
+export async function updateClinicPrescription(data: ClinicPrescription) {
+ const res = await request.put>(
+ '/clinic/clinic-prescription',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除处方主表
+
+ */
+export async function removeClinicPrescription(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-prescription/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除处方主表
+
+ */
+export async function removeBatchClinicPrescription(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-prescription/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询处方主表
+
+ */
+export async function getClinicPrescription(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-prescription/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicPrescription/model/index.ts b/app/api/clinic/clinicPrescription/model/index.ts
new file mode 100644
index 0000000..4307d5d
--- /dev/null
+++ b/app/api/clinic/clinicPrescription/model/index.ts
@@ -0,0 +1,57 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 处方主表
+
+ */
+export interface ClinicPrescription {
+ // 主键ID
+ id?: number;
+ // 患者
+ userId?: number;
+ // 医生
+ doctorId?: number;
+ // 订单编号
+ orderNo?: string;
+ // 关联就诊表
+ visitRecordId?: number;
+ // 处方类型 0中药 1西药
+ prescriptionType?: number;
+ // 诊断结果
+ diagnosis?: string;
+ // 治疗方案
+ treatmentPlan?: string;
+ // 煎药说明
+ decoctionInstructions?: string;
+ // 订单总金额
+ orderPrice?: string;
+ // 单价
+ price?: string;
+ // 实付金额
+ payPrice?: string;
+ // 订单是否失效(0未失效 1已失效)
+ isInvalid?: number;
+ // 结算(0未结算 1已结算)
+ isSettled?: number;
+ // 结算时间
+ settleTime?: string;
+ // 状态, 0正常, 1已完成,2已支付,3已取消
+ status?: number;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 处方主表
+搜索条件
+ */
+export interface ClinicPrescriptionParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicPrescriptionItem/index.ts b/app/api/clinic/clinicPrescriptionItem/index.ts
new file mode 100644
index 0000000..5be1bf9
--- /dev/null
+++ b/app/api/clinic/clinicPrescriptionItem/index.ts
@@ -0,0 +1,112 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicPrescriptionItem, ClinicPrescriptionItemParam } from './model';
+
+/**
+ * 分页查询处方明细表
+
+ */
+export async function pageClinicPrescriptionItem(params: ClinicPrescriptionItemParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-prescription-item/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询处方明细表
+列表
+ */
+export async function listClinicPrescriptionItem(params?: ClinicPrescriptionItemParam) {
+ const res = await request.get>(
+ '/clinic/clinic-prescription-item',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加处方明细表
+
+ */
+export async function addClinicPrescriptionItem(data: ClinicPrescriptionItem) {
+ const res = await request.post>(
+ '/clinic/clinic-prescription-item',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改处方明细表
+
+ */
+export async function updateClinicPrescriptionItem(data: ClinicPrescriptionItem) {
+ const res = await request.put>(
+ '/clinic/clinic-prescription-item',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除处方明细表
+
+ */
+export async function removeClinicPrescriptionItem(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-prescription-item/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除处方明细表
+
+ */
+export async function removeBatchClinicPrescriptionItem(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-prescription-item/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询处方明细表
+
+ */
+export async function getClinicPrescriptionItem(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-prescription-item/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicPrescriptionItem/model/index.ts b/app/api/clinic/clinicPrescriptionItem/model/index.ts
new file mode 100644
index 0000000..95050fa
--- /dev/null
+++ b/app/api/clinic/clinicPrescriptionItem/model/index.ts
@@ -0,0 +1,49 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 处方明细表
+
+ */
+export interface ClinicPrescriptionItem {
+ // 自增ID
+ id?: number;
+ // 关联处方
+ prescriptionId?: number;
+ // 订单编号
+ prescriptionNo?: string;
+ // 关联药品
+ medicineId?: number;
+ // 剂量(如“10g”)
+ dosage?: string;
+ // 用法频率(如“每日三次”)
+ usageFrequency?: string;
+ // 服用天数
+ days?: number;
+ // 购买数量
+ amount?: number;
+ // 单价
+ unitPrice?: string;
+ // 数量
+ quantity?: number;
+ // 排序号
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 用户id
+ userId?: number;
+ // 租户id
+ tenantId?: number;
+ // 更新时间
+ updateTime?: string;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 处方明细表
+搜索条件
+ */
+export interface ClinicPrescriptionItemParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicReport/index.ts b/app/api/clinic/clinicReport/index.ts
new file mode 100644
index 0000000..dbace8d
--- /dev/null
+++ b/app/api/clinic/clinicReport/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicReport, ClinicReportParam } from './model';
+
+/**
+ * 分页查询报告
+ */
+export async function pageClinicReport(params: ClinicReportParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-report/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询报告列表
+ */
+export async function listClinicReport(params?: ClinicReportParam) {
+ const res = await request.get>(
+ '/clinic/clinic-report',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加报告
+ */
+export async function addClinicReport(data: ClinicReport) {
+ const res = await request.post>(
+ '/clinic/clinic-report',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改报告
+ */
+export async function updateClinicReport(data: ClinicReport) {
+ const res = await request.put>(
+ '/clinic/clinic-report',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除报告
+ */
+export async function removeClinicReport(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-report/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除报告
+ */
+export async function removeBatchClinicReport(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-report/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询报告
+ */
+export async function getClinicReport(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-report/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicReport/model/index.ts b/app/api/clinic/clinicReport/model/index.ts
new file mode 100644
index 0000000..866c365
--- /dev/null
+++ b/app/api/clinic/clinicReport/model/index.ts
@@ -0,0 +1,61 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 报告
+ */
+export interface ClinicReport {
+ // 主键ID
+ id?: number;
+ // 买家用户ID
+ userId?: number;
+ // 订单编号
+ orderNo?: string;
+ // 分销商用户id(一级)
+ firstUserId?: number;
+ // 分销商用户id(二级)
+ secondUserId?: number;
+ // 分销商用户id(三级)
+ thirdUserId?: number;
+ // 分销佣金(一级)
+ firstMoney?: string;
+ // 分销佣金(二级)
+ secondMoney?: string;
+ // 分销佣金(三级)
+ thirdMoney?: string;
+ // 单价
+ price?: string;
+ // 订单总金额
+ orderPrice?: string;
+ // 结算金额
+ settledPrice?: string;
+ // 换算成度
+ degreePrice?: string;
+ // 实发金额
+ payPrice?: string;
+ // 税率
+ rate?: string;
+ // 结算月份
+ month?: string;
+ // 订单是否失效(0未失效 1已失效)
+ isInvalid?: number;
+ // 佣金结算(0未结算 1已结算)
+ isSettled?: number;
+ // 结算时间
+ settleTime?: string;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 报告搜索条件
+ */
+export interface ClinicReportParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/clinic/clinicVisitRecord/index.ts b/app/api/clinic/clinicVisitRecord/index.ts
new file mode 100644
index 0000000..0d231df
--- /dev/null
+++ b/app/api/clinic/clinicVisitRecord/index.ts
@@ -0,0 +1,105 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { ClinicVisitRecord, ClinicVisitRecordParam } from './model';
+
+/**
+ * 分页查询病例
+ */
+export async function pageClinicVisitRecord(params: ClinicVisitRecordParam) {
+ const res = await request.get>>(
+ '/clinic/clinic-visit-record/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询病例列表
+ */
+export async function listClinicVisitRecord(params?: ClinicVisitRecordParam) {
+ const res = await request.get>(
+ '/clinic/clinic-visit-record',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加病例
+ */
+export async function addClinicVisitRecord(data: ClinicVisitRecord) {
+ const res = await request.post>(
+ '/clinic/clinic-visit-record',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改病例
+ */
+export async function updateClinicVisitRecord(data: ClinicVisitRecord) {
+ const res = await request.put>(
+ '/clinic/clinic-visit-record',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除病例
+ */
+export async function removeClinicVisitRecord(id?: number) {
+ const res = await request.delete>(
+ '/clinic/clinic-visit-record/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除病例
+ */
+export async function removeBatchClinicVisitRecord(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/clinic/clinic-visit-record/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询病例
+ */
+export async function getClinicVisitRecord(id: number) {
+ const res = await request.get>(
+ '/clinic/clinic-visit-record/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/clinic/clinicVisitRecord/model/index.ts b/app/api/clinic/clinicVisitRecord/model/index.ts
new file mode 100644
index 0000000..cdb98c2
--- /dev/null
+++ b/app/api/clinic/clinicVisitRecord/model/index.ts
@@ -0,0 +1,61 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 病例
+ */
+export interface ClinicVisitRecord {
+ // 主键ID
+ id?: number;
+ // 买家用户ID
+ userId?: number;
+ // 订单编号
+ orderNo?: string;
+ // 分销商用户id(一级)
+ firstUserId?: number;
+ // 分销商用户id(二级)
+ secondUserId?: number;
+ // 分销商用户id(三级)
+ thirdUserId?: number;
+ // 分销佣金(一级)
+ firstMoney?: string;
+ // 分销佣金(二级)
+ secondMoney?: string;
+ // 分销佣金(三级)
+ thirdMoney?: string;
+ // 单价
+ price?: string;
+ // 订单总金额
+ orderPrice?: string;
+ // 结算金额
+ settledPrice?: string;
+ // 换算成度
+ degreePrice?: string;
+ // 实发金额
+ payPrice?: string;
+ // 税率
+ rate?: string;
+ // 结算月份
+ month?: string;
+ // 订单是否失效(0未失效 1已失效)
+ isInvalid?: number;
+ // 佣金结算(0未结算 1已结算)
+ isSettled?: number;
+ // 结算时间
+ settleTime?: string;
+ // 备注
+ comments?: string;
+ // 商城ID
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 病例搜索条件
+ */
+export interface ClinicVisitRecordParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsAd/index.ts b/app/api/cms/cmsAd/index.ts
new file mode 100644
index 0000000..c465bd4
--- /dev/null
+++ b/app/api/cms/cmsAd/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsAd, CmsAdParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询广告位
+ */
+export async function pageCmsAd(params: CmsAdParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-ad/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询广告位列表
+ */
+export async function listCmsAd(params?: CmsAdParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-ad',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加广告位
+ */
+export async function addCmsAd(data: CmsAd) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-ad',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改广告位
+ */
+export async function updateCmsAd(data: CmsAd) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-ad',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除广告位
+ */
+export async function removeCmsAd(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-ad/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除广告位
+ */
+export async function removeBatchCmsAd(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-ad/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询广告位
+ */
+export async function getCmsAd(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-ad/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsAd/model/index.ts b/app/api/cms/cmsAd/model/index.ts
new file mode 100644
index 0000000..104c9d0
--- /dev/null
+++ b/app/api/cms/cmsAd/model/index.ts
@@ -0,0 +1,65 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 广告位
+ */
+export interface CmsAd {
+ // ID
+ adId?: number;
+ // 类型
+ type?: number;
+ // 唯一标识
+ code?: string;
+ // 栏目分类
+ categoryId?: number;
+ // 栏目名称
+ categoryName?: string;
+ // 页面ID
+ designId?: number;
+ // 广告类型
+ adType?: string;
+ // 广告位名称
+ name?: string;
+ // 宽
+ width?: string;
+ // 高
+ height?: string;
+ // css样式
+ style?: string;
+ // 广告图片
+ images?: any;
+ // 广告图片
+ imageList?: any;
+ // 路由/链接地址
+ path?: string;
+ // 用户ID
+ userId?: number;
+ // 语言
+ lang?: string;
+ // 页面ID
+ pageId?: number;
+ // 页面名称
+ pageName?: string;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ merchantId?: number;
+}
+
+/**
+ * 广告位搜索条件
+ */
+export interface CmsAdParam extends PageParam {
+ adId?: number;
+ pageId?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsAdRecord/index.ts b/app/api/cms/cmsAdRecord/index.ts
new file mode 100644
index 0000000..840e6d0
--- /dev/null
+++ b/app/api/cms/cmsAdRecord/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsAdRecord, CmsAdRecordParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询广告图片
+ */
+export async function pageCmsAdRecord(params: CmsAdRecordParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-ad-record/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询广告图片列表
+ */
+export async function listCmsAdRecord(params?: CmsAdRecordParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-ad-record',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加广告图片
+ */
+export async function addCmsAdRecord(data: CmsAdRecord) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-ad-record',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改广告图片
+ */
+export async function updateCmsAdRecord(data: CmsAdRecord) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-ad-record',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除广告图片
+ */
+export async function removeCmsAdRecord(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-ad-record/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除广告图片
+ */
+export async function removeBatchCmsAdRecord(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-ad-record/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询广告图片
+ */
+export async function getCmsAdRecord(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-ad-record/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsAdRecord/model/index.ts b/app/api/cms/cmsAdRecord/model/index.ts
new file mode 100644
index 0000000..0ecf5d1
--- /dev/null
+++ b/app/api/cms/cmsAdRecord/model/index.ts
@@ -0,0 +1,35 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 广告图片
+ */
+export interface CmsAdRecord {
+ // ID
+ adRecordId?: number;
+ // 广告标题
+ title?: string;
+ // 图片地址
+ path?: string;
+ // 链接地址
+ url?: string;
+ // 广告位ID
+ adId?: number;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 广告图片搜索条件
+ */
+export interface CmsAdRecordParam extends PageParam {
+ adRecordId?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsArticle/index.ts b/app/api/cms/cmsArticle/index.ts
new file mode 100644
index 0000000..2ce4d7d
--- /dev/null
+++ b/app/api/cms/cmsArticle/index.ts
@@ -0,0 +1,159 @@
+import request from '@/utils/request';
+import type {ApiResult, PageResult} from '@/api';
+import type {CmsArticle, CmsArticleParam} from './model';
+
+/**
+ * 分页查询文章
+ */
+export async function pageCmsArticle(params: CmsArticleParam) {
+ const res = await request.get>>(
+ '/cms/cms-article/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询文章列表
+ */
+export async function listCmsArticle(params?: CmsArticleParam) {
+ const res = await request.get>(
+ '/cms/cms-article',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加文章
+ */
+export async function addCmsArticle(data: CmsArticle) {
+ const res = await request.post>(
+ '/cms/cms-article',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改文章
+ */
+export async function updateCmsArticle(data: CmsArticle) {
+ const res = await request.put>(
+ '/cms/cms-article',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量修改文章
+ */
+export async function updateBatchCmsArticle(data: any) {
+ const res = await request.put>(
+ '/cms/cms-article/batch',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除文章
+ */
+export async function removeCmsArticle(id?: number) {
+ const res = await request.delete>(
+ '/cms/cms-article/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除文章
+ */
+export async function removeBatchCmsArticle(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ '/cms/cms-article/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询文章
+ */
+export async function getCmsArticle(id: number) {
+ const res = await request.get>(
+ '/cms/cms-article/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据code查询文章
+ */
+export async function getByCode(code: string) {
+ const res = await request.get>(
+ '/cms/cms-article/getByCode/' + code
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+export async function getCount(params: CmsArticleParam) {
+ const res = await request.get('/cms/cms-article/data', {
+ params
+ });
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+
+/**
+ * 文章批量导入
+ */
+export async function importArticles(file: File) {
+ const formData = new FormData();
+ formData.append('file', file);
+ const res = await request.post>(
+ '/cms/cms-article/import',
+ formData
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsArticle/model/index.ts b/app/api/cms/cmsArticle/model/index.ts
new file mode 100644
index 0000000..bad09d2
--- /dev/null
+++ b/app/api/cms/cmsArticle/model/index.ts
@@ -0,0 +1,131 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 文章
+ */
+export interface CmsArticle {
+ // 文章ID
+ articleId?: number;
+ // 文章标题
+ title?: string;
+ // 文章类型 0常规 1视频
+ type?: number;
+ // 文章模型
+ model?: string;
+ // 文章编号
+ code?: string;
+ // 文章详情
+ detail?: string;
+ // 列表显示方式(10小图展示 20大图展示)
+ showType?: number;
+ // 话题
+ topic?: string;
+ // 标签
+ tags?: any;
+ // 父级ID
+ parentId?: number;
+ parentName?: string;
+ // 栏目ID
+ categoryId?: number;
+ // 栏目名称
+ categoryName?: string;
+ // 封面图
+ image?: string;
+ // 来源
+ source?: string;
+ // 摘要
+ overview?: string;
+ // 虚拟阅读量(仅用作展示)
+ virtualViews?: number;
+ // 实际阅读量
+ actualViews?: number;
+ // 浏览权限(0公开 1会员 2密码)
+ permission?: number;
+ // 访问密码
+ password?: string;
+ // 确认密码
+ password2?: string;
+ // 发布来源客户端 (APP、H5、小程序等)
+ platform?: string;
+ // 文章附件
+ files?: string;
+ // 视频地址
+ video?: string;
+ // 接受的文件类型
+ accept?: string;
+ // 经度
+ longitude?: string;
+ // 纬度
+ latitude?: string;
+ // 所在省份
+ province?: string;
+ // 所在城市
+ city?: string;
+ // 所在辖区
+ region?: string;
+ // 街道地址
+ address?: string;
+ // 点赞数
+ likes?: number;
+ // 评论数
+ commentNumbers?: number;
+ // 提醒谁看
+ toUsers?: string;
+ // 文章内容
+ content?: string;
+ // 编辑器类型
+ editor?: number;
+ // PDF地址
+ pdfUrl?: string;
+ // 用户ID
+ userId?: number;
+ // 商户ID
+ merchantId?: number;
+ // 作者
+ author?: string;
+ // 语言
+ lang?: string;
+ // 是否推荐
+ recommend?: number;
+ // 是否同步翻译其他语言版本
+ translation?: boolean;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0已发布, 1待审核 2已驳回 3违规内容
+ status?: number;
+ // 状态描述
+ statusText?: string;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+ // 是否移动端
+ isMobile?: boolean;
+ // 二维码
+ qrcode?: string;
+ // 文章路径
+ url?: string;
+}
+
+/**
+ * 文章搜索条件
+ */
+export interface CmsArticleParam extends PageParam {
+ articleId?: number;
+ model?: string;
+ status?: number;
+ keywords?: string;
+}
+
+export interface CmsArticleCount {
+ totalNum?: number;
+ totalNum2?: number;
+ totalNum3?: number;
+ totalNum4?: number;
+}
diff --git a/app/api/cms/cmsArticleCategory/index.ts b/app/api/cms/cmsArticleCategory/index.ts
new file mode 100644
index 0000000..4159ed2
--- /dev/null
+++ b/app/api/cms/cmsArticleCategory/index.ts
@@ -0,0 +1,108 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsArticleCategory, CmsArticleCategoryParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询文章分类表
+ */
+export async function pageCmsArticleCategory(params: CmsArticleCategoryParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-article-category/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询文章分类表列表
+ */
+export async function listCmsArticleCategory(params?: CmsArticleCategoryParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-category',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加文章分类表
+ */
+export async function addCmsArticleCategory(data: CmsArticleCategory) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-article-category',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改文章分类表
+ */
+export async function updateCmsArticleCategory(data: CmsArticleCategory) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-article-category',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除文章分类表
+ */
+export async function removeCmsArticleCategory(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-category/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除文章分类表
+ */
+export async function removeBatchCmsArticleCategory(
+ data: (number | undefined)[]
+) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-category/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询文章分类表
+ */
+export async function getCmsArticleCategory(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-category/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsArticleCategory/model/index.ts b/app/api/cms/cmsArticleCategory/model/index.ts
new file mode 100644
index 0000000..7f8b2a8
--- /dev/null
+++ b/app/api/cms/cmsArticleCategory/model/index.ts
@@ -0,0 +1,59 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 文章分类表
+ */
+export interface CmsArticleCategory {
+ // 文章分类ID
+ categoryId?: number;
+ // 分类标识
+ categoryCode?: string;
+ // 分类名称
+ title?: string;
+ // 类型 0列表 1单页 2外链
+ type?: number;
+ // 分类图片
+ image?: string;
+ // 上级分类ID
+ parentId?: number;
+ // 路由/链接地址
+ path?: string;
+ // 组件路径
+ component?: string;
+ // 绑定的页面
+ pageId?: number;
+ // 用户ID
+ userId?: number;
+ // 文章数量
+ count?: number;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 是否隐藏, 0否, 1是(仅注册路由不显示在左侧菜单)
+ hide?: number;
+ // 是否推荐
+ recommend?: number;
+ // 是否显示在首页
+ showIndex?: number;
+ // 状态, 0正常, 1禁用
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+ value?: number;
+ label?: string;
+}
+
+/**
+ * 文章分类表搜索条件
+ */
+export interface CmsArticleCategoryParam extends PageParam {
+ categoryId?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsArticleComment/index.ts b/app/api/cms/cmsArticleComment/index.ts
new file mode 100644
index 0000000..085579f
--- /dev/null
+++ b/app/api/cms/cmsArticleComment/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsArticleComment, CmsArticleCommentParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询文章评论表
+ */
+export async function pageCmsArticleComment(params: CmsArticleCommentParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-article-comment/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询文章评论表列表
+ */
+export async function listCmsArticleComment(params?: CmsArticleCommentParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-comment',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加文章评论表
+ */
+export async function addCmsArticleComment(data: CmsArticleComment) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-article-comment',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改文章评论表
+ */
+export async function updateCmsArticleComment(data: CmsArticleComment) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-article-comment',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除文章评论表
+ */
+export async function removeCmsArticleComment(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-comment/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除文章评论表
+ */
+export async function removeBatchCmsArticleComment(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-comment/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询文章评论表
+ */
+export async function getCmsArticleComment(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-comment/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsArticleComment/model/index.ts b/app/api/cms/cmsArticleComment/model/index.ts
new file mode 100644
index 0000000..2490228
--- /dev/null
+++ b/app/api/cms/cmsArticleComment/model/index.ts
@@ -0,0 +1,47 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 文章评论表
+ */
+export interface CmsArticleComment {
+ // 评价ID
+ commentId?: number;
+ // 文章ID
+ articleId?: number;
+ // 评分 (10好评 20中评 30差评)
+ score?: number;
+ // 评价内容
+ content?: string;
+ // 是否为图片评价
+ isPicture?: number;
+ // 评论者ID
+ userId?: number;
+ // 被评价者ID
+ toUserId?: number;
+ // 回复的评论ID
+ replyCommentId?: number;
+ // 回复者ID
+ replyUserId?: number;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0未读, 1已读
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 文章评论表搜索条件
+ */
+export interface CmsArticleCommentParam extends PageParam {
+ commentId?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsArticleContent/index.ts b/app/api/cms/cmsArticleContent/index.ts
new file mode 100644
index 0000000..c25d8f4
--- /dev/null
+++ b/app/api/cms/cmsArticleContent/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsArticleContent, CmsArticleContentParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询文章记录表
+ */
+export async function pageCmsArticleContent(params: CmsArticleContentParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-article-content/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询文章记录表列表
+ */
+export async function listCmsArticleContent(params?: CmsArticleContentParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-content',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加文章记录表
+ */
+export async function addCmsArticleContent(data: CmsArticleContent) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-article-content',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改文章记录表
+ */
+export async function updateCmsArticleContent(data: CmsArticleContent) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-article-content',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除文章记录表
+ */
+export async function removeCmsArticleContent(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-content/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除文章记录表
+ */
+export async function removeBatchCmsArticleContent(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-content/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询文章记录表
+ */
+export async function getCmsArticleContent(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-content/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsArticleContent/model/index.ts b/app/api/cms/cmsArticleContent/model/index.ts
new file mode 100644
index 0000000..432c376
--- /dev/null
+++ b/app/api/cms/cmsArticleContent/model/index.ts
@@ -0,0 +1,25 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 文章记录表
+ */
+export interface CmsArticleContent {
+ //
+ id?: number;
+ // 文章ID
+ articleId?: number;
+ // 文章内容
+ content?: string;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 文章记录表搜索条件
+ */
+export interface CmsArticleContentParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsArticleCount/index.ts b/app/api/cms/cmsArticleCount/index.ts
new file mode 100644
index 0000000..0d88f6d
--- /dev/null
+++ b/app/api/cms/cmsArticleCount/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsArticleCount, CmsArticleCountParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询点赞文章
+ */
+export async function pageCmsArticleCount(params: CmsArticleCountParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-article-count/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询点赞文章列表
+ */
+export async function listCmsArticleCount(params?: CmsArticleCountParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-count',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加点赞文章
+ */
+export async function addCmsArticleCount(data: CmsArticleCount) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-article-count',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改点赞文章
+ */
+export async function updateCmsArticleCount(data: CmsArticleCount) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-article-count',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除点赞文章
+ */
+export async function removeCmsArticleCount(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-count/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除点赞文章
+ */
+export async function removeBatchCmsArticleCount(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-count/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询点赞文章
+ */
+export async function getCmsArticleCount(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-count/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsArticleCount/model/index.ts b/app/api/cms/cmsArticleCount/model/index.ts
new file mode 100644
index 0000000..9cfbc24
--- /dev/null
+++ b/app/api/cms/cmsArticleCount/model/index.ts
@@ -0,0 +1,25 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 点赞文章
+ */
+export interface CmsArticleCount {
+ // 主键ID
+ id?: number;
+ // 文章ID
+ articleId?: number;
+ // 用户ID
+ userId?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 点赞文章搜索条件
+ */
+export interface CmsArticleCountParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsArticleLike/index.ts b/app/api/cms/cmsArticleLike/index.ts
new file mode 100644
index 0000000..ab3dd0f
--- /dev/null
+++ b/app/api/cms/cmsArticleLike/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsArticleLike, CmsArticleLikeParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询点赞文章
+ */
+export async function pageCmsArticleLike(params: CmsArticleLikeParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-article-like/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询点赞文章列表
+ */
+export async function listCmsArticleLike(params?: CmsArticleLikeParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-like',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加点赞文章
+ */
+export async function addCmsArticleLike(data: CmsArticleLike) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-article-like',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改点赞文章
+ */
+export async function updateCmsArticleLike(data: CmsArticleLike) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-article-like',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除点赞文章
+ */
+export async function removeCmsArticleLike(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-like/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除点赞文章
+ */
+export async function removeBatchCmsArticleLike(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-article-like/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询点赞文章
+ */
+export async function getCmsArticleLike(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-article-like/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsArticleLike/model/index.ts b/app/api/cms/cmsArticleLike/model/index.ts
new file mode 100644
index 0000000..ccee27a
--- /dev/null
+++ b/app/api/cms/cmsArticleLike/model/index.ts
@@ -0,0 +1,25 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 点赞文章
+ */
+export interface CmsArticleLike {
+ // 主键ID
+ id?: number;
+ // 文章ID
+ articleId?: number;
+ // 用户ID
+ userId?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 点赞文章搜索条件
+ */
+export interface CmsArticleLikeParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsDesign/index.ts b/app/api/cms/cmsDesign/index.ts
new file mode 100644
index 0000000..eb4736c
--- /dev/null
+++ b/app/api/cms/cmsDesign/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsDesign, CmsDesignParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询页面管理记录表
+ */
+export async function pageCmsDesign(params: CmsDesignParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-design/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询页面管理记录表列表
+ */
+export async function listCmsDesign(params?: CmsDesignParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-design',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加页面管理记录表
+ */
+export async function addCmsDesign(data: CmsDesign) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-design',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改页面管理记录表
+ */
+export async function updateCmsDesign(data: CmsDesign) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-design',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除页面管理记录表
+ */
+export async function removeCmsDesign(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-design/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除页面管理记录表
+ */
+export async function removeBatchCmsDesign(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-design/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询页面管理记录表
+ */
+export async function getCmsDesign(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-design/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsDesign/model/index.ts b/app/api/cms/cmsDesign/model/index.ts
new file mode 100644
index 0000000..d8ef624
--- /dev/null
+++ b/app/api/cms/cmsDesign/model/index.ts
@@ -0,0 +1,64 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 页面管理记录表
+ */
+export interface CmsDesign {
+ pageId?: number;
+ name?: string;
+ keywords?: string;
+ description?: string;
+ path?: string;
+ component?: string;
+ photo?: string;
+ content?: string;
+ // 类型
+ type?: string;
+ categoryId?: number;
+ // 宽
+ width?: string;
+ // 高
+ height?: string;
+ // 页面样式
+ style?: string;
+ // 附件
+ images?: string;
+ // 用户ID
+ userId?: number;
+ // 设为首页
+ home?: number;
+ // 排序
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态
+ status?: number;
+ // 创建时间
+ createTime?: string;
+ // 更新时间
+ updateTime?: string;
+ // 页面布局
+ layout?: string;
+ backgroundColor?: string;
+ // 关联网站导航ID
+ navigationId?: number;
+ showLayout?: boolean;
+ btn?: any[];
+ showBanner?: boolean;
+ showButton?: boolean;
+ // 是否同步翻译其他语言版本
+ translation?: boolean;
+ buyUrl?: string;
+ demoUrl?: string;
+ account?: string;
+ docUrl?: string;
+ parentId?: number;
+}
+
+/**
+ * 页面管理记录表搜索条件
+ */
+export interface CmsDesignParam extends PageParam {
+ pageId?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsDomain/index.ts b/app/api/cms/cmsDomain/index.ts
new file mode 100644
index 0000000..8ae32ad
--- /dev/null
+++ b/app/api/cms/cmsDomain/index.ts
@@ -0,0 +1,153 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsDomain, CmsDomainParam } from './model';
+import { SERVER_API_URL} from '@/config/setting';
+
+/**
+ * 分页查询网站域名记录表
+ */
+export async function pageCmsDomain(params: CmsDomainParam) {
+ const res = await request.get>>(
+ SERVER_API_URL + '/cms/cms-domain/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询网站域名记录表列表
+ */
+export async function listCmsDomain(params?: CmsDomainParam) {
+ const res = await request.get>(
+ SERVER_API_URL + '/cms/cms-domain',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加网站域名记录表
+ */
+export async function addCmsDomain(data: CmsDomain) {
+ const res = await request.post>(
+ SERVER_API_URL + '/cms/cms-domain',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改网站域名记录表
+ */
+export async function updateCmsDomain(data: CmsDomain) {
+ const res = await request.post>(
+ SERVER_API_URL + '/cms/cms-domain/domain',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除网站域名记录表
+ */
+export async function removeCmsDomain(id?: number) {
+ const res = await request.delete>(
+ SERVER_API_URL + '/cms/cms-domain/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除网站域名记录表
+ */
+export async function removeBatchCmsDomain(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ SERVER_API_URL + '/cms/cms-domain/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询网站域名记录表
+ */
+export async function getCmsDomain(id: number) {
+ const res = await request.get>(
+ SERVER_API_URL + '/cms/cms-domain/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 检查IP是否存在
+ */
+export async function checkExistence(
+ field: string,
+ value: string,
+ id?: number
+) {
+ const res = await request.get>(
+ SERVER_API_URL + '/cms/cms-domain/existence',
+ {
+ params: { field, value, id }
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+export async function resolvable(id: number) {
+ const res = await request.get>(
+ SERVER_API_URL + '/cms/cms-domain/resolvable/' + id
+ );
+ if (res.data.code === 0 && res.data) {
+ return res.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+
+/**
+ * 根据授权主域名
+ */
+export async function getAuthorizedDomain() {
+ if(!localStorage.getItem('WebsiteId')){
+ return false;
+ }
+ const res = await request.get>(
+ SERVER_API_URL + '/cms/cms-domain/getAuthorizedDomain/' + localStorage.getItem('WebsiteId')
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsDomain/model/index.ts b/app/api/cms/cmsDomain/model/index.ts
new file mode 100644
index 0000000..3be7c9d
--- /dev/null
+++ b/app/api/cms/cmsDomain/model/index.ts
@@ -0,0 +1,43 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 网站域名记录表
+ */
+export interface CmsDomain {
+ // ID
+ id?: number;
+ // 类型 0赠送域名 1绑定域名
+ type?: number;
+ // 域名
+ domain?: string;
+ // 主机记录
+ hostName?: string;
+ // 记录值
+ hostValue?: string;
+ // 状态
+ status?: number;
+ // 排序号
+ sortNumber?: number;
+ // 网站ID
+ websiteId?: number;
+ // 租户ID
+ appId?: number;
+ // 用户ID
+ userId?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 网站域名记录表搜索条件
+ */
+export interface CmsDomainParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsForm/index.ts b/app/api/cms/cmsForm/index.ts
new file mode 100644
index 0000000..abf07ab
--- /dev/null
+++ b/app/api/cms/cmsForm/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsForm, CmsFormParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询表单设计表
+ */
+export async function pageCmsForm(params: CmsFormParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-form/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询表单设计表列表
+ */
+export async function listCmsForm(params?: CmsFormParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-form',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加表单设计表
+ */
+export async function addCmsForm(data: CmsForm) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-form',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改表单设计表
+ */
+export async function updateCmsForm(data: CmsForm) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-form',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除表单设计表
+ */
+export async function removeCmsForm(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-form/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除表单设计表
+ */
+export async function removeBatchCmsForm(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-form/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询表单设计表
+ */
+export async function getCmsForm(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-form/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsForm/model/index.ts b/app/api/cms/cmsForm/model/index.ts
new file mode 100644
index 0000000..6e43ff9
--- /dev/null
+++ b/app/api/cms/cmsForm/model/index.ts
@@ -0,0 +1,53 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 表单设计表
+ */
+export interface CmsForm {
+ // ID
+ formId?: number;
+ // 表单标题
+ name?: string;
+ // 顶部图片
+ photo?: string;
+ // 背景图片
+ background?: string;
+ // 视频文件
+ video?: string;
+ // 提交次数
+ submitNumber?: number;
+ // 页面布局
+ layout?: string;
+ // 是否隐藏顶部图片
+ hidePhoto?: number;
+ // 是否隐藏背景图片
+ hideBackground?: number;
+ // 是否隐藏视频
+ hideVideo?: number;
+ // 背景图片透明度
+ opacity?: string;
+ // 用户ID
+ userId?: number;
+ // 商户ID
+ merchantId?: number;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 表单设计表搜索条件
+ */
+export interface CmsFormParam extends PageParam {
+ formId?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsFormRecord/index.ts b/app/api/cms/cmsFormRecord/index.ts
new file mode 100644
index 0000000..b281148
--- /dev/null
+++ b/app/api/cms/cmsFormRecord/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsFormRecord, CmsFormRecordParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询表单数据记录表
+ */
+export async function pageCmsFormRecord(params: CmsFormRecordParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-form-record/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询表单数据记录表列表
+ */
+export async function listCmsFormRecord(params?: CmsFormRecordParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-form-record',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加表单数据记录表
+ */
+export async function addCmsFormRecord(data: CmsFormRecord) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-form-record',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改表单数据记录表
+ */
+export async function updateCmsFormRecord(data: CmsFormRecord) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-form-record',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除表单数据记录表
+ */
+export async function removeCmsFormRecord(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-form-record/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除表单数据记录表
+ */
+export async function removeBatchCmsFormRecord(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-form-record/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询表单数据记录表
+ */
+export async function getCmsFormRecord(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-form-record/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsFormRecord/model/index.ts b/app/api/cms/cmsFormRecord/model/index.ts
new file mode 100644
index 0000000..4bd8f39
--- /dev/null
+++ b/app/api/cms/cmsFormRecord/model/index.ts
@@ -0,0 +1,41 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 表单数据记录表
+ */
+export interface CmsFormRecord {
+ // ID
+ formRecordId?: number;
+ // 手机号
+ phone?: string;
+ // 表单数据
+ formData?: string;
+ // 表单ID
+ formId?: number;
+ // 用户ID
+ userId?: number;
+ // 商户ID
+ merchantId?: number;
+ // 姓名
+ name?: string;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0正常, 1冻结
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+}
+
+/**
+ * 表单数据记录表搜索条件
+ */
+export interface CmsFormRecordParam extends PageParam {
+ formRecordId?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsLang/index.ts b/app/api/cms/cmsLang/index.ts
new file mode 100644
index 0000000..8787da1
--- /dev/null
+++ b/app/api/cms/cmsLang/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsLang, CmsLangParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询国际化
+ */
+export async function pageCmsLang(params: CmsLangParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-lang/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询国际化列表
+ */
+export async function listCmsLang(params?: CmsLangParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-lang',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加国际化
+ */
+export async function addCmsLang(data: CmsLang) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-lang',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改国际化
+ */
+export async function updateCmsLang(data: CmsLang) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-lang',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除国际化
+ */
+export async function removeCmsLang(id?: number) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-lang/' + id
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 批量删除国际化
+ */
+export async function removeBatchCmsLang(data: (number | undefined)[]) {
+ const res = await request.delete>(
+ MODULES_API_URL + '/cms/cms-lang/batch',
+ {
+ data
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 根据id查询国际化
+ */
+export async function getCmsLang(id: number) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-lang/' + id
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/app/api/cms/cmsLang/model/index.ts b/app/api/cms/cmsLang/model/index.ts
new file mode 100644
index 0000000..43c1d9e
--- /dev/null
+++ b/app/api/cms/cmsLang/model/index.ts
@@ -0,0 +1,35 @@
+import type { PageParam } from '@/api';
+
+/**
+ * 国际化
+ */
+export interface CmsLang {
+ // ID
+ id?: number;
+ // 名称
+ name?: string;
+ // 编码
+ code?: string;
+ // 排序(数字越小越靠前)
+ sortNumber?: number;
+ // 备注
+ comments?: string;
+ // 状态, 0已发布, 1待审核 2已驳回 3违规内容
+ status?: number;
+ // 是否删除, 0否, 1是
+ deleted?: number;
+ // 租户id
+ tenantId?: number;
+ // 创建时间
+ createTime?: string;
+ // 修改时间
+ updateTime?: string;
+}
+
+/**
+ * 国际化搜索条件
+ */
+export interface CmsLangParam extends PageParam {
+ id?: number;
+ keywords?: string;
+}
diff --git a/app/api/cms/cmsLangLog/index.ts b/app/api/cms/cmsLangLog/index.ts
new file mode 100644
index 0000000..9af33c7
--- /dev/null
+++ b/app/api/cms/cmsLangLog/index.ts
@@ -0,0 +1,106 @@
+import request from '@/utils/request';
+import type { ApiResult, PageResult } from '@/api';
+import type { CmsLangLog, CmsLangLogParam } from './model';
+import { MODULES_API_URL } from '@/config/setting';
+
+/**
+ * 分页查询国际化记录启用
+ */
+export async function pageCmsLangLog(params: CmsLangLogParam) {
+ const res = await request.get>>(
+ MODULES_API_URL + '/cms/cms-lang-log/page',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询国际化记录启用列表
+ */
+export async function listCmsLangLog(params?: CmsLangLogParam) {
+ const res = await request.get>(
+ MODULES_API_URL + '/cms/cms-lang-log',
+ {
+ params
+ }
+ );
+ if (res.data.code === 0 && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 添加国际化记录启用
+ */
+export async function addCmsLangLog(data: CmsLangLog) {
+ const res = await request.post>(
+ MODULES_API_URL + '/cms/cms-lang-log',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改国际化记录启用
+ */
+export async function updateCmsLangLog(data: CmsLangLog) {
+ const res = await request.put>(
+ MODULES_API_URL + '/cms/cms-lang-log',
+ data
+ );
+ if (res.data.code === 0) {
+ return res.data.message;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除国际化记录启用
+ */
+export async function removeCmsLangLog(id?: number) {
+ const res = await request.delete