From 3efdbfc662d7013905da4e89173b906e1726d7da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Wed, 12 Feb 2025 16:37:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC=E5=AE=98=E7=BD=91?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 26 +- README.md | 2 +- api/cms/ad/index.ts | 140 - api/cms/ad/model/index.ts | 42 - api/cms/article/index.ts | 143 - api/cms/article/model/index.ts | 98 - api/cms/category/index.ts | 126 - api/cms/category/model/index.ts | 82 - api/cms/cmsAd/index.ts | 106 + api/cms/cmsAd/model/index.ts | 49 + api/cms/cmsAdRecord/index.ts | 106 + api/cms/cmsAdRecord/model/index.ts | 35 + api/cms/cmsArticle/index.ts | 210 + api/cms/cmsArticle/model/index.ts | 123 + api/cms/cmsArticleCategory/index.ts | 108 + .../cmsArticleCategory}/model/index.ts | 22 +- api/cms/cmsArticleComment/index.ts | 64 +- api/cms/cmsArticleContent/index.ts | 106 + api/cms/cmsArticleContent/model/index.ts | 25 + api/cms/cmsArticleCount/index.ts | 106 + api/cms/cmsArticleCount/model/index.ts | 25 + api/cms/cmsArticleLike/index.ts | 106 + api/cms/cmsArticleLike/model/index.ts | 25 + api/cms/cmsComponents/index.ts | 106 + api/cms/cmsComponents/model/index.ts | 43 + api/cms/cmsDesign/index.ts | 106 + api/cms/{design => cmsDesign}/model/index.ts | 23 +- api/cms/cmsDesignRecord/index.ts | 106 + api/cms/cmsDesignRecord/model/index.ts | 51 + api/cms/cmsDocs/index.ts | 106 + api/cms/cmsDocs/model/index.ts | 45 + api/cms/cmsDocsBook/index.ts | 106 + api/cms/cmsDocsBook/model/index.ts | 37 + api/cms/cmsDocsContent/index.ts | 106 + api/cms/cmsDocsContent/model/index.ts | 25 + api/cms/cmsDomain/index.ts | 151 + api/cms/cmsDomain/model/index.ts | 44 + api/cms/cmsForm/index.ts | 106 + api/cms/cmsForm/model/index.ts | 53 + api/cms/cmsFormRecord/index.ts | 106 + api/cms/cmsFormRecord/model/index.ts | 41 + api/cms/cmsLang/index.ts | 105 + api/cms/cmsLang/model/index.ts | 39 + api/cms/cmsLangLog/index.ts | 105 + api/cms/cmsLangLog/model/index.ts | 27 + api/cms/cmsLink/index.ts | 106 + api/{oa/oaLink => cms/cmsLink}/model/index.ts | 6 +- api/cms/cmsModel/index.ts | 106 + api/cms/cmsModel/model/index.ts | 57 + api/cms/cmsMp/index.ts | 106 + api/cms/{mp => cmsMp}/model/index.ts | 11 +- api/cms/cmsMpAd/index.ts | 106 + api/cms/{mpAd => cmsMpAd}/model/index.ts | 10 +- api/cms/cmsMpField/index.ts | 106 + .../{mpField => cmsMpField}/model/index.ts | 8 +- api/cms/cmsMpMenu/index.ts | 106 + api/cms/{mp-menu => cmsMpMenu}/model/index.ts | 28 +- api/cms/cmsMpPages/index.ts | 106 + .../{mpPages => cmsMpPages}/model/index.ts | 15 +- api/cms/cmsNavigation/index.ts | 135 + api/cms/cmsNavigation/model/index.ts | 112 + api/cms/cmsOrder/index.ts | 106 + api/cms/cmsOrder/model/index.ts | 69 + api/cms/cmsProduct/index.ts | 75 +- api/cms/cmsProduct/model/index.ts | 179 +- api/cms/cmsProductComment/index.ts | 64 +- api/cms/cmsProductComment/model/index.ts | 10 +- api/cms/cmsProductParameter/index.ts | 122 +- api/cms/cmsProductSpec/index.ts | 64 +- api/cms/cmsProductSpecValue/index.ts | 64 +- api/cms/cmsProductUrl/index.ts | 68 +- api/cms/cmsProductUrl/model/index.ts | 4 +- api/cms/cmsSpec/index.ts | 106 + api/{shop/spec => cms/cmsSpec}/model/index.ts | 4 +- api/cms/cmsSpecValue/index.ts | 106 + .../cmsSpecValue}/model/index.ts | 20 +- api/cms/cmsWebsite/index.ts | 132 + api/cms/cmsWebsite/model/index.ts | 108 + api/cms/cmsWebsiteField/index.ts | 149 + api/cms/cmsWebsiteField/model/index.ts | 56 + api/cms/design/index.ts | 143 - api/cms/docs-book/index.ts | 143 - api/cms/docs-book/model/index.ts | 31 - api/cms/docs-content/index.ts | 146 - api/cms/docs-content/model/index.ts | 36 - api/cms/docs/index.ts | 143 - api/cms/docs/model/index.ts | 64 - api/cms/domain/index.ts | 153 - api/cms/domain/model/index.ts | 33 - api/cms/form-record/index.ts | 126 - api/cms/form-record/model/index.ts | 28 - api/cms/form/index.ts | 143 - api/cms/form/model/index.ts | 33 - api/cms/link/index.ts | 64 +- api/cms/link/model/index.ts | 2 + api/cms/mp-menu/index.ts | 106 - api/cms/mp/index.ts | 103 - api/cms/mpAd/index.ts | 106 - api/cms/mpField/index.ts | 132 - api/cms/mpOfficialMenu/index.ts | 106 + .../mpOfficialMenu}/model/index.ts | 28 +- api/cms/mpPages/index.ts | 106 - api/cms/navigation/index.ts | 173 - api/cms/navigation/model/index.ts | 59 - api/cms/website/field/index.ts | 159 - api/cms/website/field/model/index.ts | 45 - api/cms/website/index.ts | 169 - api/cms/website/model/index.ts | 79 - api/index.ts | 3 + api/layout/index.ts | 55 +- api/layout/model/index.ts | 3 + api/oa/app/field/index.ts | 126 - api/oa/app/field/model/index.ts | 24 - api/oa/app/index.ts | 190 - api/oa/app/model/index.ts | 166 - api/oa/app/renew/index.ts | 126 - api/oa/app/renew/model/index.ts | 40 - api/oa/app/url/index.ts | 106 - api/oa/app/url/model/index.ts | 26 - api/oa/app/user/index.ts | 126 - api/oa/app/user/model/index.ts | 37 - api/oa/apply/index.ts | 18 - api/oa/apply/model/index.ts | 43 - api/oa/assets/index.ts | 134 - api/oa/assets/model/index.ts | 89 - api/oa/assets/user/index.ts | 129 - api/oa/assets/user/model/index.ts | 35 - api/oa/chatgpt/index.ts | 31 - api/oa/chatgpt/model/index.ts | 17 - api/oa/customer/index.ts | 140 - api/oa/customer/model/index.ts | 67 - api/oa/link/index.ts | 113 - api/oa/link/model/index.ts | 29 - api/oa/notice/index.ts | 111 - api/oa/notice/model/index.ts | 40 - api/oa/oaApp/index.ts | 106 - api/oa/oaApp/model/index.ts | 149 - api/oa/oaAppField/index.ts | 106 - api/oa/oaAppRenew/index.ts | 106 - api/oa/oaAppRenew/model/index.ts | 41 - api/oa/oaAppUrl/index.ts | 106 - api/oa/oaAppUrl/model/index.ts | 37 - api/oa/oaAppUser/index.ts | 106 - api/oa/oaAppUser/model/index.ts | 31 - api/oa/oaAssets/index.ts | 106 - api/oa/oaAssets/model/index.ts | 91 - api/oa/oaAssetsCode/index.ts | 106 - api/oa/oaAssetsCode/model/index.ts | 51 - api/oa/oaAssetsDomain/index.ts | 106 - api/oa/oaAssetsDomain/model/index.ts | 55 - api/oa/oaAssetsEmail/index.ts | 106 - api/oa/oaAssetsEmail/model/index.ts | 55 - api/oa/oaAssetsServer/index.ts | 106 - api/oa/oaAssetsServer/model/index.ts | 91 - api/oa/oaAssetsSite/index.ts | 106 - api/oa/oaAssetsSite/model/index.ts | 55 - api/oa/oaAssetsUser/index.ts | 106 - api/oa/oaAssetsUser/model/index.ts | 31 - api/oa/oaAssetsVhost/index.ts | 106 - api/oa/oaAssetsVhost/model/index.ts | 55 - api/oa/oaCompany/index.ts | 106 - api/oa/oaCompany/model/index.ts | 117 - api/oa/oaCompanyField/index.ts | 106 - api/oa/oaCompanyField/model/index.ts | 33 - api/oa/oaCompanyUser/index.ts | 106 - api/oa/oaCompanyUser/model/index.ts | 31 - api/oa/oaLink/index.ts | 106 - api/oa/oaProduct/index.ts | 106 - api/oa/oaProduct/model/index.ts | 65 - api/oa/oaProductTabs/index.ts | 106 - api/oa/oaProductTabs/model/index.ts | 49 - api/oa/oaTask/index.ts | 106 - api/oa/oaTask/model/index.ts | 85 - api/oa/oaTaskCount/index.ts | 106 - api/oa/oaTaskCount/model/index.ts | 45 - api/oa/oaTaskRecord/index.ts | 106 - api/oa/oaTaskRecord/model/index.ts | 45 - api/oa/oaTaskUser/index.ts | 106 - api/oa/oaTaskUser/model/index.ts | 31 - api/oa/order/index.ts | 120 - api/oa/order/model/index.ts | 44 - api/oa/product/index.ts | 120 - api/oa/product/model/index.ts | 94 - api/oa/product/tabs/index.ts | 129 - api/oa/product/tabs/model/index.ts | 24 - api/oa/project/index.ts | 106 - api/oa/project/model/index.ts | 56 - api/oa/task-count/index.ts | 120 - api/oa/task-count/model/index.ts | 32 - api/oa/task-record/index.ts | 120 - api/oa/task-record/model/index.ts | 35 - api/oa/task-user/index.ts | 120 - api/oa/task-user/model/index.ts | 27 - api/oa/task/index.ts | 154 - api/oa/task/model/index.ts | 111 - api/oa/task/model/progress.ts | 9 - api/oa/task/model/task.ts | 8 - api/oa/tennat/index.ts | 155 - api/oa/tennat/model/index.ts | 39 - api/passport/login/index.ts | 42 +- api/shop/brand/index.ts | 106 - api/shop/brand/model/index.ts | 31 - api/shop/cashier/index.ts | 194 - api/shop/cashier/model/index.ts | 80 - api/shop/count/index.ts | 119 - api/shop/count/model/index.ts | 40 - api/shop/dealerApply/index.ts | 106 - api/shop/dealerApply/model/index.ts | 41 - api/shop/dealerCapital/index.ts | 106 - api/shop/dealerCapital/model/index.ts | 35 - api/shop/dealerOrder/index.ts | 106 - api/shop/dealerOrder/model/index.ts | 47 - api/shop/dealerReferee/index.ts | 106 - api/shop/dealerReferee/model/index.ts | 29 - api/shop/dealerSetting/index.ts | 106 - api/shop/dealerSetting/model/index.ts | 25 - api/shop/dealerUser/index.ts | 106 - api/shop/dealerUser/model/index.ts | 48 - api/shop/dealerWithdraw/index.ts | 106 - api/shop/dealerWithdraw/model/index.ts | 47 - api/shop/goods/index.ts | 116 - api/shop/goods/model/index.ts | 114 - api/shop/goodsAttr/index.ts | 106 - api/shop/goodsAttr/model/index.ts | 29 - api/shop/goodsAttrResult/index.ts | 106 - api/shop/goodsAttrResult/model/index.ts | 27 - api/shop/goodsAttrValue/index.ts | 106 - api/shop/goodsAttrValue/model/index.ts | 59 - api/shop/goodsCategory/index.ts | 106 - api/shop/goodsComment/index.ts | 106 - api/shop/goodsComment/model/index.ts | 61 - api/shop/goodsCoupon/index.ts | 106 - api/shop/goodsCoupon/model/index.ts | 35 - api/shop/goodsDescription/index.ts | 106 - api/shop/goodsDescription/model/index.ts | 25 - api/shop/goodsLog/index.ts | 106 - api/shop/goodsLog/model/index.ts | 53 - api/shop/goodsRelation/index.ts | 106 - api/shop/goodsRelation/model/index.ts | 31 - api/shop/goodsRule/index.ts | 106 - api/shop/goodsRule/model/index.ts | 23 - api/shop/goodsSku/index.ts | 118 - api/shop/goodsSku/model/index.ts | 50 - api/shop/goodsSpec/index.ts | 106 - api/shop/goodsSpec/model/index.ts | 31 - api/shop/goodsSpecRel/index.ts | 106 - api/shop/goodsSpecRel/model/index.ts | 25 - api/shop/order/index.ts | 106 - api/shop/order/model/index.ts | 108 - api/shop/rechargeOrder/index.ts | 106 - api/shop/rechargeOrder/model/index.ts | 63 - api/shop/shopCart/index.ts | 106 - api/shop/shopCart/model/index.ts | 72 - api/shop/shopMerchant/index.ts | 106 - api/shop/shopMerchant/model/index.ts | 89 - api/shop/shopMerchantAccount/index.ts | 106 - api/shop/shopMerchantAccount/model/index.ts | 39 - api/shop/shopMerchantApply/index.ts | 106 - api/shop/shopMerchantApply/model/index.ts | 74 - api/shop/shopMerchantCount/index.ts | 106 - api/shop/shopMerchantCount/model/index.ts | 29 - api/shop/shopMerchantType/index.ts | 106 - api/shop/shopMerchantType/model/index.ts | 29 - api/shop/shopOrderInfo/index.ts | 106 - api/shop/shopOrderInfo/model/index.ts | 62 - api/shop/spec/index.ts | 106 - api/shop/specValue/index.ts | 106 - api/shop/userAddress/index.ts | 106 - api/shop/userAddress/model/index.ts | 43 - api/shop/users/index.ts | 106 - api/shop/users/model/index.ts | 49 - api/shop/wechatDeposit/index.ts | 106 - api/shop/wechatDeposit/model/index.ts | 43 - api/system/access-key/index.ts | 28 +- api/system/cache/index.ts | 30 +- api/system/chat/index.ts | 64 +- api/system/chatConversation/index.ts | 64 +- api/system/chatMessage/index.ts | 54 +- api/system/company/index.ts | 76 +- api/system/company/model/index.ts | 5 +- api/system/companyComment/index.ts | 48 +- api/system/companyContent/index.ts | 48 +- api/system/companyGit/index.ts | 48 +- api/system/companyParameter/index.ts | 48 +- api/system/companyUrl/index.ts | 48 +- api/system/dict-data/index.ts | 42 +- api/system/dict/index.ts | 28 +- api/system/dictionary-data/index.ts | 42 +- api/system/dictionary/index.ts | 28 +- api/system/environment/index.ts | 50 +- api/system/file/index.ts | 90 +- api/system/login-record/index.ts | 14 +- api/system/menu/index.ts | 58 +- api/system/modules/index.ts | 54 +- api/system/operation-record/index.ts | 14 +- api/system/order/index.ts | 48 +- api/system/orderGoods/index.ts | 48 +- api/system/organization/index.ts | 34 +- api/system/parameter/index.ts | 48 +- api/system/payment/index.ts | 54 +- api/system/plug/index.ts | 50 +- api/system/role/index.ts | 54 +- api/system/setting/index.ts | 54 +- api/system/tenant/index.ts | 72 +- api/system/url/index.ts | 48 +- api/system/user-collection/index.ts | 48 +- api/system/user-file/index.ts | 42 +- api/system/user-group/index.ts | 54 +- api/system/user/index.ts | 96 +- api/system/version/index.ts | 54 +- api/system/website/field/index.ts | 102 +- api/system/website/index.ts | 74 +- api/system/white-domain/index.ts | 60 +- assets/css/base.css | 25 + assets/css/index.css | 838 ++++ assets/css/main.css | 1560 +++++++- assets/css/model.css | 2795 ++++++++++++++ assets/css/user.css | 2 + assets/images/1655690976384393.jpg | Bin 0 -> 271349 bytes assets/images/20220531140749_365.png | Bin 0 -> 15663 bytes assets/images/20220531140815_849.png | Bin 0 -> 8250 bytes assets/images/bj11.jpg | Bin 0 -> 65883 bytes assets/images/bj22.jpg | Bin 0 -> 34224 bytes assets/images/bj33.jpg | Bin 0 -> 133836 bytes assets/images/date.png | Bin 0 -> 1135 bytes assets/images/icon_spirit.png | Bin 0 -> 12579 bytes assets/images/jia1.png | Bin 0 -> 1033 bytes assets/images/n2.png | Bin 0 -> 970 bytes assets/images/nav1.png | Bin 0 -> 1213 bytes assets/images/sort.png | Bin 0 -> 1267 bytes assets/images/sorth.png | Bin 0 -> 1441 bytes assets/m/13.png | Bin 0 -> 3233 bytes assets/m/a1.png | Bin 0 -> 1090 bytes assets/m/a2.png | Bin 0 -> 995 bytes assets/m/a3.png | Bin 0 -> 915 bytes assets/m/abc.png | Bin 0 -> 5550 bytes assets/m/abcd.png | Bin 0 -> 2156 bytes assets/m/abcde.png | Bin 0 -> 3102 bytes assets/m/about.png | Bin 0 -> 48516 bytes assets/m/app.css | 714 ++++ assets/m/btn.png | Bin 0 -> 5971 bytes assets/m/dd1.jpg | Bin 0 -> 7065 bytes assets/m/eef.jpg | Bin 0 -> 313 bytes assets/m/icon.png | Bin 0 -> 6814 bytes assets/m/navbg.png | Bin 0 -> 3088 bytes assets/m/navli.png | Bin 0 -> 933 bytes assets/m/reset.css | 105 + assets/m/share_icon.png | Bin 0 -> 3957 bytes assets/m/share_icon2.png | Bin 0 -> 8640 bytes assets/m/ui.css | 348 ++ components/AppFooter.vue | 113 - components/AppFooter/AppFooter.vue | 20 + components/AppFooter/Copyright/Copyright.vue | 28 + components/AppFooter/Link/Link.vue | 25 + components/AppFooter/SubMenu/SubMenu.vue | 30 + components/AppFooter/ToolBar/ToolBar.vue | 32 + components/AppHeader.vue | 233 -- components/AppHeader/AppHeader.vue | 103 + components/AppHeader/Login/Login.vue | 25 + components/AppHeader/Logo/Logo.vue | 27 + components/AppHeader/Menu/Menu.vue | 95 + components/AppHeader/TopBar/TopBar.vue | 34 + components/Banner.vue | 35 +- components/Breadcrumb.vue | 42 +- components/CardList.vue | 44 - components/CmsArticleList.vue | 32 + components/CmsArticleRelated.vue | 48 + components/CmsProductList.vue | 32 + components/CmsProductRelated.vue | 48 + components/CmsRecently.vue | 77 + components/CompanyList.vue | 85 +- components/Content.vue | 36 + components/Left.vue | 100 + components/MCmsProductList.vue | 32 + components/MContent.vue | 35 + components/MFooter.vue | 34 + components/MHeader.vue | 150 + components/NextArticle.vue | 44 + components/PageBanner.vue | 180 - components/PageContainer.vue | 30 - components/Pagination.vue | 64 + components/ProductList.vue | 94 - components/ProductShopInfo.vue | 42 - components/Tags.vue | 25 + components/UnderMaintenance.vue | 43 +- components/UserCard.vue | 225 -- composables/configState.ts | 57 +- composables/useServerRequest.ts | 10 +- config/index.ts | 2 +- error.vue | 24 + i18n.config.ts | 11 + lang/en.json | 134 + lang/zh.json | 134 + layouts/default.vue | 193 +- layouts/mobile.vue | 86 + middleware/route.global.ts | 34 + nuxt.config.ts | 34 +- package.json | 3 + pages/[...404].vue | 19 + pages/[custom].vue | 76 - pages/article/[categoryId].vue | 89 - pages/article/[id].vue | 141 + pages/article/components/CardList.vue | 52 - pages/ask/[userId].vue | 211 -- pages/ask/components/CardList.vue | 55 - pages/ask/index.vue | 103 - pages/case/[id].vue | 193 + pages/case/components/CardList.vue | 63 - pages/case/components/PageBanner.vue | 115 - pages/case/index.vue | 84 - pages/category/components/CardList.vue | 47 - pages/category/index.vue | 91 - pages/components/ArticleList.vue | 104 - pages/components/Banner.vue | 96 - pages/components/CardList.vue | 87 - pages/components/Carousel.vue | 79 + pages/components/Flash.vue | 45 +- pages/components/PlugList.vue | 83 - pages/components/ProductList.vue | 92 - pages/detail/[id].vue | 226 ++ pages/detail/components/LikeArticle.vue | 64 - pages/detail/components/PageBanner.vue | 94 - pages/detail/index.vue | 232 -- pages/developer/components/CardList.vue | 47 - pages/developer/index.vue | 154 - pages/developer/join-in.vue | 149 - pages/docs/components/CardList.vue | 47 - pages/docs/index.vue | 103 - pages/down/components/CardList.vue | 52 - pages/down/index.vue | 96 - pages/index.vue | 466 ++- pages/item/[id].vue | 278 ++ pages/item/components/Comments.vue | 2 +- pages/item/components/PageBanner.vue | 59 +- pages/item/index.vue | 293 -- pages/links/[id].vue | 120 + pages/m.vue | 28 + pages/m/article/[id].vue | 131 + pages/m/case/[id].vue | 129 + pages/m/components/Carousel.vue | 67 + pages/m/detail/[id].vue | 202 + pages/m/index.vue | 183 + pages/m/item/[id].vue | 220 ++ pages/m/order/[id].vue | 232 ++ pages/m/page/[id].vue | 78 + pages/m/product/[id].vue | 122 + pages/m/search/[id].vue | 147 + pages/m/show/[id].vue | 185 + pages/m/tags/[id].vue | 135 + pages/m/video/[id].vue | 110 + pages/m/video/detail/[id].vue | 183 + pages/manage/cms/index.vue | 358 -- pages/manage/index.vue | 373 -- pages/manage/shop/index.vue | 358 -- pages/market/components/CardList.vue | 86 - pages/market/index.vue | 225 +- pages/merchant/index.vue | 82 - pages/order/[id].vue | 228 ++ pages/page/[id].vue | 72 + pages/page/index.vue | 76 - pages/passport/login.vue | 240 +- pages/product/[id].vue | 185 + .../checkout/components/PageBanner.vue | 67 - pages/product/checkout/index.vue | 226 -- pages/product/components/CardList.vue | 81 - .../product/create/components/PageBanner.vue | 67 - pages/product/create/index.vue | 439 --- pages/product/create/product.vue | 389 -- pages/product/createWebsite/index.vue | 25 - pages/product/createWebsite/index2.vue | 25 - pages/product/detail/[id].vue | 168 - pages/product/index.vue | 75 - pages/search/[id].vue | 146 + pages/search/index.vue | 138 - pages/show/[id].vue | 286 ++ pages/show/components/Comments.vue | 201 + pages/show/components/PageBanner.vue | 135 + pages/tags/[id].vue | 151 + pages/templates/components/CardList.vue | 57 - pages/templates/components/PageBanner.vue | 115 - pages/templates/index.vue | 84 - pages/user/auth.vue | 58 - pages/user/components/Auth.vue | 460 --- pages/user/components/Base.vue | 46 - pages/user/components/Order.vue | 45 - pages/user/components/Password.vue | 31 - pages/user/components/UserMenu.vue | 60 - pages/user/index.vue | 96 - pages/user/logout.vue | 13 - pages/user/order.vue | 94 - pages/user/password.vue | 139 - pages/video/[id].vue | 119 + pages/video/detail/[id].vue | 198 + pnpm-lock.yaml | 3366 ++++++++++------- public/assets/images/1655690976384393.jpg | Bin 0 -> 271349 bytes public/assets/images/20220531140749_365.png | Bin 0 -> 15663 bytes public/assets/images/20220531140815_849.png | Bin 0 -> 8250 bytes public/assets/images/bj11.jpg | Bin 0 -> 65883 bytes public/assets/images/bj22.jpg | Bin 0 -> 34224 bytes public/assets/images/bj33.jpg | Bin 0 -> 133836 bytes public/assets/images/date.png | Bin 0 -> 1135 bytes public/assets/images/icon_1.png | Bin 0 -> 1503 bytes public/assets/images/icon_12.png | Bin 0 -> 1965 bytes public/assets/images/icon_2.png | Bin 0 -> 1852 bytes public/assets/images/icon_26.png | Bin 0 -> 2151 bytes public/assets/images/icon_30.png | Bin 0 -> 1496 bytes public/assets/images/icon_spirit.png | Bin 0 -> 12579 bytes public/assets/images/jlt.png | Bin 0 -> 66411 bytes public/assets/images/nav1.png | Bin 0 -> 1213 bytes public/assets/images/sort.png | Bin 0 -> 1267 bytes public/assets/images/sorth.png | Bin 0 -> 1441 bytes public/assets/images/toux.png | Bin 0 -> 31134 bytes public/assets/json/china-provinces.geo.json | 1 + public/assets/json/industry-data.json | 1 + public/assets/json/regions-data.json | 1 + public/assets/logo.png | Bin 0 -> 37459 bytes public/assets/logo.svg | 18 + public/assets/m/13.png | Bin 0 -> 3233 bytes public/assets/m/a1.png | Bin 0 -> 1090 bytes public/assets/m/a2.png | Bin 0 -> 995 bytes public/assets/m/a3.png | Bin 0 -> 915 bytes public/assets/m/abc.png | Bin 0 -> 5550 bytes public/assets/m/abcd.png | Bin 0 -> 2156 bytes public/assets/m/abcde.png | Bin 0 -> 3102 bytes public/assets/m/about.png | Bin 0 -> 48516 bytes public/assets/m/btn.png | Bin 0 -> 5971 bytes public/assets/m/dd1.jpg | Bin 0 -> 7065 bytes public/assets/m/eef.jpg | Bin 0 -> 313 bytes public/assets/m/icon.png | Bin 0 -> 6814 bytes public/assets/m/navbg.png | Bin 0 -> 3088 bytes public/assets/m/navli.png | Bin 0 -> 933 bytes public/assets/m/reset.css | 105 + public/assets/m/share_icon.png | Bin 0 -> 3957 bytes public/assets/m/share_icon2.png | Bin 0 -> 8640 bytes public/assets/m/ui.css | 348 ++ public/assets/scss/var.scss | 3 + ...kJyvf_!!6000000001499-55-tps-70-70 (1).svg | 1 + public/assets/svg/github-mark-white.svg | 1 + public/assets/svg/github-mark.svg | 1 + public/assets/svg/search.svg | 1 + public/assets/svg/websoft-mark-white.svg | 15 + public/map/show.html | 119 + types/global.d.ts | 53 +- utils/common.ts | 318 +- utils/domain.ts | 18 +- utils/request.ts | 190 +- utils/state.ts | 54 + 547 files changed, 23001 insertions(+), 28169 deletions(-) delete mode 100644 api/cms/ad/index.ts delete mode 100644 api/cms/ad/model/index.ts delete mode 100644 api/cms/article/index.ts delete mode 100644 api/cms/article/model/index.ts delete mode 100644 api/cms/category/index.ts delete mode 100644 api/cms/category/model/index.ts create mode 100644 api/cms/cmsAd/index.ts create mode 100644 api/cms/cmsAd/model/index.ts create mode 100644 api/cms/cmsAdRecord/index.ts create mode 100644 api/cms/cmsAdRecord/model/index.ts create mode 100644 api/cms/cmsArticle/index.ts create mode 100644 api/cms/cmsArticle/model/index.ts create mode 100644 api/cms/cmsArticleCategory/index.ts rename api/{shop/goodsCategory => cms/cmsArticleCategory}/model/index.ts (74%) create mode 100644 api/cms/cmsArticleContent/index.ts create mode 100644 api/cms/cmsArticleContent/model/index.ts create mode 100644 api/cms/cmsArticleCount/index.ts create mode 100644 api/cms/cmsArticleCount/model/index.ts create mode 100644 api/cms/cmsArticleLike/index.ts create mode 100644 api/cms/cmsArticleLike/model/index.ts create mode 100644 api/cms/cmsComponents/index.ts create mode 100644 api/cms/cmsComponents/model/index.ts create mode 100644 api/cms/cmsDesign/index.ts rename api/cms/{design => cmsDesign}/model/index.ts (68%) create mode 100644 api/cms/cmsDesignRecord/index.ts create mode 100644 api/cms/cmsDesignRecord/model/index.ts create mode 100644 api/cms/cmsDocs/index.ts create mode 100644 api/cms/cmsDocs/model/index.ts create mode 100644 api/cms/cmsDocsBook/index.ts create mode 100644 api/cms/cmsDocsBook/model/index.ts create mode 100644 api/cms/cmsDocsContent/index.ts create mode 100644 api/cms/cmsDocsContent/model/index.ts create mode 100644 api/cms/cmsDomain/index.ts create mode 100644 api/cms/cmsDomain/model/index.ts create mode 100644 api/cms/cmsForm/index.ts create mode 100644 api/cms/cmsForm/model/index.ts create mode 100644 api/cms/cmsFormRecord/index.ts create mode 100644 api/cms/cmsFormRecord/model/index.ts create mode 100644 api/cms/cmsLang/index.ts create mode 100644 api/cms/cmsLang/model/index.ts create mode 100644 api/cms/cmsLangLog/index.ts create mode 100644 api/cms/cmsLangLog/model/index.ts create mode 100644 api/cms/cmsLink/index.ts rename api/{oa/oaLink => cms/cmsLink}/model/index.ts (85%) create mode 100644 api/cms/cmsModel/index.ts create mode 100644 api/cms/cmsModel/model/index.ts create mode 100644 api/cms/cmsMp/index.ts rename api/cms/{mp => cmsMp}/model/index.ts (91%) create mode 100644 api/cms/cmsMpAd/index.ts rename api/cms/{mpAd => cmsMpAd}/model/index.ts (88%) create mode 100644 api/cms/cmsMpField/index.ts rename api/cms/{mpField => cmsMpField}/model/index.ts (79%) create mode 100644 api/cms/cmsMpMenu/index.ts rename api/cms/{mp-menu => cmsMpMenu}/model/index.ts (82%) create mode 100644 api/cms/cmsMpPages/index.ts rename api/cms/{mpPages => cmsMpPages}/model/index.ts (74%) create mode 100644 api/cms/cmsNavigation/index.ts create mode 100644 api/cms/cmsNavigation/model/index.ts create mode 100644 api/cms/cmsOrder/index.ts create mode 100644 api/cms/cmsOrder/model/index.ts create mode 100644 api/cms/cmsSpec/index.ts rename api/{shop/spec => cms/cmsSpec}/model/index.ts (87%) create mode 100644 api/cms/cmsSpecValue/index.ts rename api/{shop/specValue => cms/cmsSpecValue}/model/index.ts (60%) create mode 100644 api/cms/cmsWebsite/index.ts create mode 100644 api/cms/cmsWebsite/model/index.ts create mode 100644 api/cms/cmsWebsiteField/index.ts create mode 100644 api/cms/cmsWebsiteField/model/index.ts delete mode 100644 api/cms/design/index.ts delete mode 100644 api/cms/docs-book/index.ts delete mode 100644 api/cms/docs-book/model/index.ts delete mode 100644 api/cms/docs-content/index.ts delete mode 100644 api/cms/docs-content/model/index.ts delete mode 100644 api/cms/docs/index.ts delete mode 100644 api/cms/docs/model/index.ts delete mode 100644 api/cms/domain/index.ts delete mode 100644 api/cms/domain/model/index.ts delete mode 100644 api/cms/form-record/index.ts delete mode 100644 api/cms/form-record/model/index.ts delete mode 100644 api/cms/form/index.ts delete mode 100644 api/cms/form/model/index.ts delete mode 100644 api/cms/mp-menu/index.ts delete mode 100644 api/cms/mp/index.ts delete mode 100644 api/cms/mpAd/index.ts delete mode 100644 api/cms/mpField/index.ts create mode 100644 api/cms/mpOfficialMenu/index.ts rename api/{oa/oaAppField => cms/mpOfficialMenu}/model/index.ts (52%) delete mode 100644 api/cms/mpPages/index.ts delete mode 100644 api/cms/navigation/index.ts delete mode 100644 api/cms/navigation/model/index.ts delete mode 100644 api/cms/website/field/index.ts delete mode 100644 api/cms/website/field/model/index.ts delete mode 100644 api/cms/website/index.ts delete mode 100644 api/cms/website/model/index.ts delete mode 100644 api/oa/app/field/index.ts delete mode 100644 api/oa/app/field/model/index.ts delete mode 100644 api/oa/app/index.ts delete mode 100644 api/oa/app/model/index.ts delete mode 100644 api/oa/app/renew/index.ts delete mode 100644 api/oa/app/renew/model/index.ts delete mode 100644 api/oa/app/url/index.ts delete mode 100644 api/oa/app/url/model/index.ts delete mode 100644 api/oa/app/user/index.ts delete mode 100644 api/oa/app/user/model/index.ts delete mode 100644 api/oa/apply/index.ts delete mode 100644 api/oa/apply/model/index.ts delete mode 100644 api/oa/assets/index.ts delete mode 100644 api/oa/assets/model/index.ts delete mode 100644 api/oa/assets/user/index.ts delete mode 100644 api/oa/assets/user/model/index.ts delete mode 100644 api/oa/chatgpt/index.ts delete mode 100644 api/oa/chatgpt/model/index.ts delete mode 100644 api/oa/customer/index.ts delete mode 100644 api/oa/customer/model/index.ts delete mode 100644 api/oa/link/index.ts delete mode 100644 api/oa/link/model/index.ts delete mode 100644 api/oa/notice/index.ts delete mode 100644 api/oa/notice/model/index.ts delete mode 100644 api/oa/oaApp/index.ts delete mode 100644 api/oa/oaApp/model/index.ts delete mode 100644 api/oa/oaAppField/index.ts delete mode 100644 api/oa/oaAppRenew/index.ts delete mode 100644 api/oa/oaAppRenew/model/index.ts delete mode 100644 api/oa/oaAppUrl/index.ts delete mode 100644 api/oa/oaAppUrl/model/index.ts delete mode 100644 api/oa/oaAppUser/index.ts delete mode 100644 api/oa/oaAppUser/model/index.ts delete mode 100644 api/oa/oaAssets/index.ts delete mode 100644 api/oa/oaAssets/model/index.ts delete mode 100644 api/oa/oaAssetsCode/index.ts delete mode 100644 api/oa/oaAssetsCode/model/index.ts delete mode 100644 api/oa/oaAssetsDomain/index.ts delete mode 100644 api/oa/oaAssetsDomain/model/index.ts delete mode 100644 api/oa/oaAssetsEmail/index.ts delete mode 100644 api/oa/oaAssetsEmail/model/index.ts delete mode 100644 api/oa/oaAssetsServer/index.ts delete mode 100644 api/oa/oaAssetsServer/model/index.ts delete mode 100644 api/oa/oaAssetsSite/index.ts delete mode 100644 api/oa/oaAssetsSite/model/index.ts delete mode 100644 api/oa/oaAssetsUser/index.ts delete mode 100644 api/oa/oaAssetsUser/model/index.ts delete mode 100644 api/oa/oaAssetsVhost/index.ts delete mode 100644 api/oa/oaAssetsVhost/model/index.ts delete mode 100644 api/oa/oaCompany/index.ts delete mode 100644 api/oa/oaCompany/model/index.ts delete mode 100644 api/oa/oaCompanyField/index.ts delete mode 100644 api/oa/oaCompanyField/model/index.ts delete mode 100644 api/oa/oaCompanyUser/index.ts delete mode 100644 api/oa/oaCompanyUser/model/index.ts delete mode 100644 api/oa/oaLink/index.ts delete mode 100644 api/oa/oaProduct/index.ts delete mode 100644 api/oa/oaProduct/model/index.ts delete mode 100644 api/oa/oaProductTabs/index.ts delete mode 100644 api/oa/oaProductTabs/model/index.ts delete mode 100644 api/oa/oaTask/index.ts delete mode 100644 api/oa/oaTask/model/index.ts delete mode 100644 api/oa/oaTaskCount/index.ts delete mode 100644 api/oa/oaTaskCount/model/index.ts delete mode 100644 api/oa/oaTaskRecord/index.ts delete mode 100644 api/oa/oaTaskRecord/model/index.ts delete mode 100644 api/oa/oaTaskUser/index.ts delete mode 100644 api/oa/oaTaskUser/model/index.ts delete mode 100644 api/oa/order/index.ts delete mode 100644 api/oa/order/model/index.ts delete mode 100644 api/oa/product/index.ts delete mode 100644 api/oa/product/model/index.ts delete mode 100644 api/oa/product/tabs/index.ts delete mode 100644 api/oa/product/tabs/model/index.ts delete mode 100644 api/oa/project/index.ts delete mode 100644 api/oa/project/model/index.ts delete mode 100644 api/oa/task-count/index.ts delete mode 100644 api/oa/task-count/model/index.ts delete mode 100644 api/oa/task-record/index.ts delete mode 100644 api/oa/task-record/model/index.ts delete mode 100644 api/oa/task-user/index.ts delete mode 100644 api/oa/task-user/model/index.ts delete mode 100644 api/oa/task/index.ts delete mode 100644 api/oa/task/model/index.ts delete mode 100644 api/oa/task/model/progress.ts delete mode 100644 api/oa/task/model/task.ts delete mode 100644 api/oa/tennat/index.ts delete mode 100644 api/oa/tennat/model/index.ts delete mode 100644 api/shop/brand/index.ts delete mode 100644 api/shop/brand/model/index.ts delete mode 100644 api/shop/cashier/index.ts delete mode 100644 api/shop/cashier/model/index.ts delete mode 100644 api/shop/count/index.ts delete mode 100644 api/shop/count/model/index.ts delete mode 100644 api/shop/dealerApply/index.ts delete mode 100644 api/shop/dealerApply/model/index.ts delete mode 100644 api/shop/dealerCapital/index.ts delete mode 100644 api/shop/dealerCapital/model/index.ts delete mode 100644 api/shop/dealerOrder/index.ts delete mode 100644 api/shop/dealerOrder/model/index.ts delete mode 100644 api/shop/dealerReferee/index.ts delete mode 100644 api/shop/dealerReferee/model/index.ts delete mode 100644 api/shop/dealerSetting/index.ts delete mode 100644 api/shop/dealerSetting/model/index.ts delete mode 100644 api/shop/dealerUser/index.ts delete mode 100644 api/shop/dealerUser/model/index.ts delete mode 100644 api/shop/dealerWithdraw/index.ts delete mode 100644 api/shop/dealerWithdraw/model/index.ts delete mode 100644 api/shop/goods/index.ts delete mode 100644 api/shop/goods/model/index.ts delete mode 100644 api/shop/goodsAttr/index.ts delete mode 100644 api/shop/goodsAttr/model/index.ts delete mode 100644 api/shop/goodsAttrResult/index.ts delete mode 100644 api/shop/goodsAttrResult/model/index.ts delete mode 100644 api/shop/goodsAttrValue/index.ts delete mode 100644 api/shop/goodsAttrValue/model/index.ts delete mode 100644 api/shop/goodsCategory/index.ts delete mode 100644 api/shop/goodsComment/index.ts delete mode 100644 api/shop/goodsComment/model/index.ts delete mode 100644 api/shop/goodsCoupon/index.ts delete mode 100644 api/shop/goodsCoupon/model/index.ts delete mode 100644 api/shop/goodsDescription/index.ts delete mode 100644 api/shop/goodsDescription/model/index.ts delete mode 100644 api/shop/goodsLog/index.ts delete mode 100644 api/shop/goodsLog/model/index.ts delete mode 100644 api/shop/goodsRelation/index.ts delete mode 100644 api/shop/goodsRelation/model/index.ts delete mode 100644 api/shop/goodsRule/index.ts delete mode 100644 api/shop/goodsRule/model/index.ts delete mode 100644 api/shop/goodsSku/index.ts delete mode 100644 api/shop/goodsSku/model/index.ts delete mode 100644 api/shop/goodsSpec/index.ts delete mode 100644 api/shop/goodsSpec/model/index.ts delete mode 100644 api/shop/goodsSpecRel/index.ts delete mode 100644 api/shop/goodsSpecRel/model/index.ts delete mode 100644 api/shop/order/index.ts delete mode 100644 api/shop/order/model/index.ts delete mode 100644 api/shop/rechargeOrder/index.ts delete mode 100644 api/shop/rechargeOrder/model/index.ts delete mode 100644 api/shop/shopCart/index.ts delete mode 100644 api/shop/shopCart/model/index.ts delete mode 100644 api/shop/shopMerchant/index.ts delete mode 100644 api/shop/shopMerchant/model/index.ts delete mode 100644 api/shop/shopMerchantAccount/index.ts delete mode 100644 api/shop/shopMerchantAccount/model/index.ts delete mode 100644 api/shop/shopMerchantApply/index.ts delete mode 100644 api/shop/shopMerchantApply/model/index.ts delete mode 100644 api/shop/shopMerchantCount/index.ts delete mode 100644 api/shop/shopMerchantCount/model/index.ts delete mode 100644 api/shop/shopMerchantType/index.ts delete mode 100644 api/shop/shopMerchantType/model/index.ts delete mode 100644 api/shop/shopOrderInfo/index.ts delete mode 100644 api/shop/shopOrderInfo/model/index.ts delete mode 100644 api/shop/spec/index.ts delete mode 100644 api/shop/specValue/index.ts delete mode 100644 api/shop/userAddress/index.ts delete mode 100644 api/shop/userAddress/model/index.ts delete mode 100644 api/shop/users/index.ts delete mode 100644 api/shop/users/model/index.ts delete mode 100644 api/shop/wechatDeposit/index.ts delete mode 100644 api/shop/wechatDeposit/model/index.ts create mode 100644 assets/css/base.css create mode 100644 assets/css/index.css create mode 100644 assets/css/model.css create mode 100644 assets/css/user.css create mode 100644 assets/images/1655690976384393.jpg create mode 100644 assets/images/20220531140749_365.png create mode 100644 assets/images/20220531140815_849.png create mode 100644 assets/images/bj11.jpg create mode 100644 assets/images/bj22.jpg create mode 100644 assets/images/bj33.jpg create mode 100644 assets/images/date.png create mode 100644 assets/images/icon_spirit.png create mode 100644 assets/images/jia1.png create mode 100644 assets/images/n2.png create mode 100644 assets/images/nav1.png create mode 100644 assets/images/sort.png create mode 100644 assets/images/sorth.png create mode 100644 assets/m/13.png create mode 100644 assets/m/a1.png create mode 100644 assets/m/a2.png create mode 100644 assets/m/a3.png create mode 100644 assets/m/abc.png create mode 100644 assets/m/abcd.png create mode 100644 assets/m/abcde.png create mode 100644 assets/m/about.png create mode 100644 assets/m/app.css create mode 100644 assets/m/btn.png create mode 100644 assets/m/dd1.jpg create mode 100644 assets/m/eef.jpg create mode 100644 assets/m/icon.png create mode 100644 assets/m/navbg.png create mode 100644 assets/m/navli.png create mode 100644 assets/m/reset.css create mode 100644 assets/m/share_icon.png create mode 100644 assets/m/share_icon2.png create mode 100644 assets/m/ui.css delete mode 100644 components/AppFooter.vue create mode 100644 components/AppFooter/AppFooter.vue create mode 100644 components/AppFooter/Copyright/Copyright.vue create mode 100644 components/AppFooter/Link/Link.vue create mode 100644 components/AppFooter/SubMenu/SubMenu.vue create mode 100644 components/AppFooter/ToolBar/ToolBar.vue delete mode 100644 components/AppHeader.vue create mode 100644 components/AppHeader/AppHeader.vue create mode 100644 components/AppHeader/Login/Login.vue create mode 100644 components/AppHeader/Logo/Logo.vue create mode 100644 components/AppHeader/Menu/Menu.vue create mode 100644 components/AppHeader/TopBar/TopBar.vue delete mode 100644 components/CardList.vue create mode 100644 components/CmsArticleList.vue create mode 100644 components/CmsArticleRelated.vue create mode 100644 components/CmsProductList.vue create mode 100644 components/CmsProductRelated.vue create mode 100644 components/CmsRecently.vue create mode 100644 components/Content.vue create mode 100644 components/Left.vue create mode 100644 components/MCmsProductList.vue create mode 100644 components/MContent.vue create mode 100644 components/MFooter.vue create mode 100644 components/MHeader.vue create mode 100644 components/NextArticle.vue delete mode 100644 components/PageBanner.vue delete mode 100644 components/PageContainer.vue create mode 100644 components/Pagination.vue delete mode 100644 components/ProductList.vue delete mode 100644 components/ProductShopInfo.vue create mode 100644 components/Tags.vue delete mode 100644 components/UserCard.vue create mode 100644 error.vue create mode 100644 i18n.config.ts create mode 100644 lang/en.json create mode 100644 lang/zh.json create mode 100644 layouts/mobile.vue create mode 100644 middleware/route.global.ts create mode 100644 pages/[...404].vue delete mode 100644 pages/[custom].vue delete mode 100644 pages/article/[categoryId].vue create mode 100644 pages/article/[id].vue delete mode 100644 pages/article/components/CardList.vue delete mode 100644 pages/ask/[userId].vue delete mode 100644 pages/ask/components/CardList.vue delete mode 100644 pages/ask/index.vue create mode 100644 pages/case/[id].vue delete mode 100644 pages/case/components/CardList.vue delete mode 100644 pages/case/components/PageBanner.vue delete mode 100644 pages/case/index.vue delete mode 100644 pages/category/components/CardList.vue delete mode 100644 pages/category/index.vue delete mode 100644 pages/components/ArticleList.vue delete mode 100644 pages/components/Banner.vue delete mode 100644 pages/components/CardList.vue create mode 100644 pages/components/Carousel.vue delete mode 100644 pages/components/PlugList.vue delete mode 100644 pages/components/ProductList.vue create mode 100644 pages/detail/[id].vue delete mode 100644 pages/detail/components/LikeArticle.vue delete mode 100644 pages/detail/components/PageBanner.vue delete mode 100644 pages/detail/index.vue delete mode 100644 pages/developer/components/CardList.vue delete mode 100644 pages/developer/index.vue delete mode 100644 pages/developer/join-in.vue delete mode 100644 pages/docs/components/CardList.vue delete mode 100644 pages/docs/index.vue delete mode 100644 pages/down/components/CardList.vue delete mode 100644 pages/down/index.vue create mode 100644 pages/item/[id].vue delete mode 100644 pages/item/index.vue create mode 100644 pages/links/[id].vue create mode 100644 pages/m.vue create mode 100644 pages/m/article/[id].vue create mode 100644 pages/m/case/[id].vue create mode 100644 pages/m/components/Carousel.vue create mode 100644 pages/m/detail/[id].vue create mode 100644 pages/m/index.vue create mode 100644 pages/m/item/[id].vue create mode 100644 pages/m/order/[id].vue create mode 100644 pages/m/page/[id].vue create mode 100644 pages/m/product/[id].vue create mode 100644 pages/m/search/[id].vue create mode 100644 pages/m/show/[id].vue create mode 100644 pages/m/tags/[id].vue create mode 100644 pages/m/video/[id].vue create mode 100644 pages/m/video/detail/[id].vue delete mode 100644 pages/manage/cms/index.vue delete mode 100644 pages/manage/index.vue delete mode 100644 pages/manage/shop/index.vue delete mode 100644 pages/market/components/CardList.vue delete mode 100644 pages/merchant/index.vue create mode 100644 pages/order/[id].vue create mode 100644 pages/page/[id].vue delete mode 100644 pages/page/index.vue create mode 100644 pages/product/[id].vue delete mode 100644 pages/product/checkout/components/PageBanner.vue delete mode 100644 pages/product/checkout/index.vue delete mode 100644 pages/product/components/CardList.vue delete mode 100644 pages/product/create/components/PageBanner.vue delete mode 100644 pages/product/create/index.vue delete mode 100644 pages/product/create/product.vue delete mode 100644 pages/product/createWebsite/index.vue delete mode 100644 pages/product/createWebsite/index2.vue delete mode 100644 pages/product/detail/[id].vue delete mode 100644 pages/product/index.vue create mode 100644 pages/search/[id].vue delete mode 100644 pages/search/index.vue create mode 100644 pages/show/[id].vue create mode 100644 pages/show/components/Comments.vue create mode 100644 pages/show/components/PageBanner.vue create mode 100644 pages/tags/[id].vue delete mode 100644 pages/templates/components/CardList.vue delete mode 100644 pages/templates/components/PageBanner.vue delete mode 100644 pages/templates/index.vue delete mode 100644 pages/user/auth.vue delete mode 100644 pages/user/components/Auth.vue delete mode 100644 pages/user/components/Base.vue delete mode 100644 pages/user/components/Order.vue delete mode 100644 pages/user/components/Password.vue delete mode 100644 pages/user/components/UserMenu.vue delete mode 100644 pages/user/index.vue delete mode 100644 pages/user/logout.vue delete mode 100644 pages/user/order.vue delete mode 100644 pages/user/password.vue create mode 100644 pages/video/[id].vue create mode 100644 pages/video/detail/[id].vue create mode 100644 public/assets/images/1655690976384393.jpg create mode 100644 public/assets/images/20220531140749_365.png create mode 100644 public/assets/images/20220531140815_849.png create mode 100644 public/assets/images/bj11.jpg create mode 100644 public/assets/images/bj22.jpg create mode 100644 public/assets/images/bj33.jpg create mode 100644 public/assets/images/date.png create mode 100644 public/assets/images/icon_1.png create mode 100644 public/assets/images/icon_12.png create mode 100644 public/assets/images/icon_2.png create mode 100644 public/assets/images/icon_26.png create mode 100644 public/assets/images/icon_30.png create mode 100644 public/assets/images/icon_spirit.png create mode 100644 public/assets/images/jlt.png create mode 100644 public/assets/images/nav1.png create mode 100644 public/assets/images/sort.png create mode 100644 public/assets/images/sorth.png create mode 100644 public/assets/images/toux.png create mode 100644 public/assets/json/china-provinces.geo.json create mode 100644 public/assets/json/industry-data.json create mode 100644 public/assets/json/regions-data.json create mode 100644 public/assets/logo.png create mode 100644 public/assets/logo.svg create mode 100644 public/assets/m/13.png create mode 100644 public/assets/m/a1.png create mode 100644 public/assets/m/a2.png create mode 100644 public/assets/m/a3.png create mode 100644 public/assets/m/abc.png create mode 100644 public/assets/m/abcd.png create mode 100644 public/assets/m/abcde.png create mode 100644 public/assets/m/about.png create mode 100644 public/assets/m/btn.png create mode 100644 public/assets/m/dd1.jpg create mode 100644 public/assets/m/eef.jpg create mode 100644 public/assets/m/icon.png create mode 100644 public/assets/m/navbg.png create mode 100644 public/assets/m/navli.png create mode 100644 public/assets/m/reset.css create mode 100644 public/assets/m/share_icon.png create mode 100644 public/assets/m/share_icon2.png create mode 100644 public/assets/m/ui.css create mode 100644 public/assets/scss/var.scss create mode 100644 public/assets/svg/O1CN01yz6fEl1MwaRtkJyvf_!!6000000001499-55-tps-70-70 (1).svg create mode 100644 public/assets/svg/github-mark-white.svg create mode 100644 public/assets/svg/github-mark.svg create mode 100644 public/assets/svg/search.svg create mode 100644 public/assets/svg/websoft-mark-white.svg create mode 100644 public/map/show.html create mode 100644 utils/state.ts diff --git a/.gitignore b/.gitignore index 4a7f73a..f40cf02 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,2 @@ -# Nuxt dev/build outputs -.output -.data -.nuxt -.nitro -.cache -dist - -# Node dependencies -node_modules - -# Logs -logs -*.log - -# Misc -.DS_Store -.fleet -.idea - -# Local env files -.env -.env.* -!.env.example +/.nuxt/ +/.output/ diff --git a/README.md b/README.md index 63715b7..f5db2a2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# WebsotCms +# Nuxt 3 Minimal Starter Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. diff --git a/api/cms/ad/index.ts b/api/cms/ad/index.ts deleted file mode 100644 index 6139cd4..0000000 --- a/api/cms/ad/index.ts +++ /dev/null @@ -1,140 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Ad, AdParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询广告位 - */ -export async function pageAd(params: AdParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/ad/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询广告位列表 - */ -export async function listAd(params?: AdParam) { - const res = await request.get>(MODULES_API_URL + '/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 addAd(data: Ad) { - const res = await request.post>( - MODULES_API_URL + '/cms/ad', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改广告位 - */ -export async function updateAd(data: Ad) { - const res = await request.put>( - MODULES_API_URL + '/cms/ad', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除广告位 - */ -export async function removeAd(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/ad/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除广告位 - */ -export async function removeBatchAd(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/ad/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateAdStatus(adId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/ad/status', - { - adId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询广告位 - */ -export async function getAd(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/ad/' + 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>( - MODULES_API_URL + '/cms/ad/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/ad/model/index.ts b/api/cms/ad/model/index.ts deleted file mode 100644 index 209df98..0000000 --- a/api/cms/ad/model/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 广告位 - */ -export interface Ad { - adId?: number; - name?: string; - adType?: string; - type?: string; - width?: string; - height?: string; - path?: string; - images?: string; - userId?: number; - sortNumber?: number; - comments?: string; - status?: number; - createTime?: string; - updateTime?: string; -} - -/** - * 图片列表 - */ -export interface AdItem { - uid?: number; - url?: string; - path?: string; - status?: string; -} - -/** - * 广告位搜索条件 - */ -export interface AdParam extends PageParam { - adId?: string; - name?: number; - type?: number; - adType?: string; - userId?: number; -} diff --git a/api/cms/article/index.ts b/api/cms/article/index.ts deleted file mode 100644 index d21582d..0000000 --- a/api/cms/article/index.ts +++ /dev/null @@ -1,143 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Article, ArticleParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询文章 - */ -export async function pageArticle(params: ArticleParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/article/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询文章列表 - */ -export async function listArticle(params?: ArticleParam) { - const res = await request.get>( - MODULES_API_URL + '/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 addArticle(data: Article) { - const res = await request.post>( - MODULES_API_URL + '/cms/article', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改文章 - */ -export async function updateArticle(data: Article) { - const res = await request.put>( - MODULES_API_URL + '/cms/article', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除文章 - */ -export async function removeArticle(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/article/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除文章 - */ -export async function removeBatchArticle(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/article/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateArticleStatus(articleId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/article/status', - { - articleId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询文章 - */ -export async function getArticle(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/article/' + 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>( - MODULES_API_URL + '/cms/article/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/article/model/index.ts b/api/cms/article/model/index.ts deleted file mode 100644 index 8f3b197..0000000 --- a/api/cms/article/model/index.ts +++ /dev/null @@ -1,98 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 文章 - */ -export interface Article { - // 文章id - articleId?: number; - // 文章标题 - title?: string; - // 分类类型 - type?: number; - // 展现方式 - showType?: any; - // 文章类型 - categoryId?: number; - // 文章分类 - categoryName?: string; - // 父级分类 - parentId?: number; - // 父级分类名称 - parentName?: string; - // 父级分类路径 - parentPath?: string; - // 封面图 - image?: string; - // 附件 - files?: string; - // 附件 - fileList?: string[]; - // 缩列图 - thumbnail?: string; - // 视频地址 - video?: string; - // 上传的文件类型 - accept?: string; - // 来源 - source?: string; - // 文章内容 - content?: string; - // 虚拟阅读量 - virtualViews?: number; - // 实际阅读量 - actualViews?: number; - // 浏览权限 - permission?: number; - // 访问密码 - password?: string; - // 访问密码(客户端传) - password2?: string; - // 用户ID - userId?: number; - // 用户昵称 - nickname?: string; - // 账号 - username?: string; - // 用户头像 - avatar?: string; - // 作者 - author?: string; - // 所属门店ID - shopId?: number; - // - likes?: number; - // 排序 - sortNumber?: any; - // 备注 - comments?: any; - // 状态 - status?: number; - // 创建时间 - createTime?: string; - // 更新时间 - updateTime?: string; - // 租户ID - tenantId?: number; - // 租户名称 - tenantName?: string; - // 租户logo - logo?: string; -} - -/** - * 文章搜索条件 - */ -export interface ArticleParam extends PageParam { - title?: string; - articleId?: number; - categoryId?: number; - status?: string; - sortNumber?: string; - createTime?: string; - username?: string; - nickname?: string; - userId?: number; - // 商户编号 - merchantCode?: string; -} diff --git a/api/cms/category/index.ts b/api/cms/category/index.ts deleted file mode 100644 index e1835ad..0000000 --- a/api/cms/category/index.ts +++ /dev/null @@ -1,126 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { ArticleCategory, ArticleCategoryParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询文章分类 - */ -export async function pageArticleCategory(params: ArticleCategoryParam) { - const res = await request.get>>( - MODULES_API_URL + '/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 listArticleCategory(params?: ArticleCategoryParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/article-category', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询文章分类 - */ -export async function getArticleCategory(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/article-category/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加文章分类 - */ -export async function addArticleCategory(data: ArticleCategory) { - const res = await request.post>( - MODULES_API_URL + '/cms/article-category', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改文章分类 - */ -export async function updateArticleCategory(data: ArticleCategory) { - const res = await request.put>( - MODULES_API_URL + '/cms/article-category', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除文章分类 - */ -export async function removeArticleCategory(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/article-category/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除文章分类 - */ -export async function removeBatchArticleCategory(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/article-category/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/cms/article-category/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/category/model/index.ts b/api/cms/category/model/index.ts deleted file mode 100644 index 07aceca..0000000 --- a/api/cms/category/model/index.ts +++ /dev/null @@ -1,82 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 文章分类 - */ -export interface ArticleCategory { - // 文章分类id - categoryId?: number; - // 文章分类名称 - categoryName?: string; - // 分类类型 0列表 1页面 2链接 - type?: number; - // 文章分类 - title?: string; - // 文章分类图片 - image?: string; - // 路由/链接 - path?: string; - // 组件路径 - component?: string; - // 页面ID - pageId?: number; - // 页面名称 - pageName?: string; - // 上级分类 - parentId?: number; - // 上级分类名称 - parentName?: string; - // 封面图 - avatar?: string; - // 用户ID - userId?: string; - // 所属门店ID - shopId?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - // 状态 - status?: number; - // 是否显示在首页 - showIndex?: number; - // 是否推荐 - recommend?: number; - // 创建时间 - createTime?: string; - // 更新时间 - updateTime?: string; - key?: number; - value?: number; - // 子菜单 - children?: ArticleCategory[]; - tempPath?: string; - disabled?: boolean; - tenantId?: number; -} - -/** - * 整理分类用于网站导航栏 - */ -export interface ArrangeCategory { - categoryId?: number; - type?: number; - title?: string; - parentId?: number; - avatar?: string; - path?: string; - component?: string; - pageId?: number; - sortNumber?: number; - comments?: string; - status?: number; - children?: ArrangeCategory[]; -} - -/** - * 文章分类搜索条件 - */ -export interface ArticleCategoryParam extends PageParam { - title?: string; - categoryId?: number; -} diff --git a/api/cms/cmsAd/index.ts b/api/cms/cmsAd/index.ts new file mode 100644 index 0000000..8459932 --- /dev/null +++ b/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'; + + +/** + * 分页查询广告位 + */ +export async function pageCmsAd(params: CmsAdParam) { + const res = await request.get>>( + '/cms/cms-ad/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询广告位列表 + */ +export async function listCmsAd(params?: CmsAdParam) { + const res = await request.get>( + '/cms/cms-ad', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加广告位 + */ +export async function addCmsAd(data: CmsAd) { + const res = await request.post>( + '/cms/cms-ad', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改广告位 + */ +export async function updateCmsAd(data: CmsAd) { + const res = await request.put>( + '/cms/cms-ad', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除广告位 + */ +export async function removeCmsAd(id?: number) { + const res = await request.del>( + '/cms/cms-ad/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除广告位 + */ +export async function removeBatchCmsAd(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-ad/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询广告位 + */ +export async function getCmsAd(id: number) { + const res = await request.get>( + '/cms/cms-ad/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsAd/model/index.ts b/api/cms/cmsAd/model/index.ts new file mode 100644 index 0000000..5004196 --- /dev/null +++ b/api/cms/cmsAd/model/index.ts @@ -0,0 +1,49 @@ +import type { PageParam } from '@/api'; + +/** + * 广告位 + */ +export interface CmsAd { + // ID + adId?: number; + // 栏目ID + categoryId?: number; + // 广告类型 + type?: number; + // 广告位名称 + name?: string; + // 宽 + width?: string; + // 高 + height?: string; + // 广告图片 + images?: any; + // 广告图片列表 + imageList?: any; + // 路由/链接地址 + path?: string; + // 用户ID + userId?: number; + // 排序(数字越小越靠前) + sortNumber?: number; + // 备注 + comments?: string; + // 状态, 0正常, 1冻结 + status?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; +} + +/** + * 广告位搜索条件 + */ +export interface CmsAdParam extends PageParam { + adId?: number; + type?: any; + categoryId?: number; + keywords?: string; +} diff --git a/api/cms/cmsAdRecord/index.ts b/api/cms/cmsAdRecord/index.ts new file mode 100644 index 0000000..3c3da61 --- /dev/null +++ b/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'; + + +/** + * 分页查询广告图片 + */ +export async function pageCmsAdRecord(params: CmsAdRecordParam) { + const res = await request.get>>( + '/cms/cms-ad-record/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询广告图片列表 + */ +export async function listCmsAdRecord(params?: CmsAdRecordParam) { + const res = await request.get>( + '/cms/cms-ad-record', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加广告图片 + */ +export async function addCmsAdRecord(data: CmsAdRecord) { + const res = await request.post>( + '/cms/cms-ad-record', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改广告图片 + */ +export async function updateCmsAdRecord(data: CmsAdRecord) { + const res = await request.put>( + '/cms/cms-ad-record', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除广告图片 + */ +export async function removeCmsAdRecord(id?: number) { + const res = await request.del>( + '/cms/cms-ad-record/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除广告图片 + */ +export async function removeBatchCmsAdRecord(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-ad-record/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询广告图片 + */ +export async function getCmsAdRecord(id: number) { + const res = await request.get>( + '/cms/cms-ad-record/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsAdRecord/model/index.ts b/api/cms/cmsAdRecord/model/index.ts new file mode 100644 index 0000000..0ecf5d1 --- /dev/null +++ b/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/api/cms/cmsArticle/index.ts b/api/cms/cmsArticle/index.ts new file mode 100644 index 0000000..3ac5ea2 --- /dev/null +++ b/api/cms/cmsArticle/index.ts @@ -0,0 +1,210 @@ +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.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询文章列表 + */ +export async function listCmsArticle(params?: CmsArticleParam) { + const res = await request.get>( + '/cms/cms-article', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加文章 + */ +export async function addCmsArticle(data: CmsArticle) { + const res = await request.post>( + '/cms/cms-article', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改文章 + */ +export async function updateCmsArticle(data: CmsArticle) { + const res = await request.put>( + '/cms/cms-article', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除文章 + */ +export async function removeCmsArticle(id?: number) { + const res = await request.del>( + '/cms/cms-article/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除文章 + */ +export async function removeBatchCmsArticle(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-article/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询文章 + */ +export async function getCmsArticle(id: number) { + const res = await request.get>( + '/cms/cms-article/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +export async function getCount(params?: CmsArticleParam) { + const res = await request.get>('/cms/cms-article/data', { + params + }); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 上一篇 + * @param params + */ +export async function getPrevious(params?: CmsArticleParam) { + const res = await request.get>( + '/cms/cms-article/getPrevious/' + params?.articleId, + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 下一篇 + * @param params + */ +export async function getNext(params?: CmsArticleParam) { + const res = await request.get>( + '/cms/cms-article/getNext/' + params?.articleId, + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 验证文章密码 + * @param params + */ +export async function checkArticlePassword(params?: CmsArticleParam) { + const res = await request.get>( + '/cms/cms-article/checkArticlePassword', + { + params + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +export async function findTags(params?: CmsArticleParam) { + const res = await request.get>( + '/cms/cms-article/findTags', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +export async function pageTags(params?: CmsArticleParam) { + const res = await request.get>( + '/cms/cms-article/pageTags', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 按IDS查询文章 + * @param params + */ +export async function getByIds(params?: CmsArticleParam) { + const res = await request.get>( + '/cms/cms-article/getByIds', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + diff --git a/api/cms/cmsArticle/model/index.ts b/api/cms/cmsArticle/model/index.ts new file mode 100644 index 0000000..f11c3a0 --- /dev/null +++ b/api/cms/cmsArticle/model/index.ts @@ -0,0 +1,123 @@ +import type { PageParam } from '@/api'; + +/** + * 文章 + */ +export interface CmsArticle { + // 文章ID + articleId?: number; + // 文章标题 + title?: string; + // 文章类型 0常规 1视频 + type?: number; + // 文章模型 + model?: string; + // 文章详情页模板 + detail?: string; + // banner图片 + banner?: string; + // 列表显示方式(10小图展示 20大图展示) + showType?: number; + // 话题 + topic?: string; + // 标签 + tags?: any; + // 栏目ID + categoryId?: number; + // 栏目名称 + categoryName?: string; + // 封面图 + image?: string; + // 缩列图 + thumbnail?: 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; + // 评分 + rate?: number; + // 评论数 + commentNumbers?: number; + // 提醒谁看 + toUsers?: string; + // 文章内容 + content?: string; + // 是否推荐 + recommend?: number; + // 用户ID + userId?: number; + // 排序(数字越小越靠前) + sortNumber?: number; + // 备注 + comments?: string; + // 状态, 0已发布, 1待审核 2已驳回 3违规内容 + status?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 修改时间 + updateTime?: string; + // 父级id + parentId?: number; + nickname?: string; + username?: string; + author?: string; + shopId?: number; + tenantName?: string; + logo?: string; + fileList?: any; +} + +/** + * 文章搜索条件 + */ +export interface CmsArticleParam extends PageParam { + articleId?: number; + articleIds?: string; + parentId?: number; + status?: number; + // 是否推荐 + recommend?: number; + keywords?: string; + // 验证密码 + password?: string; + password2?: string; + tags?: string; + detail?: string; + sceneType?: string; +} diff --git a/api/cms/cmsArticleCategory/index.ts b/api/cms/cmsArticleCategory/index.ts new file mode 100644 index 0000000..78c6d7c --- /dev/null +++ b/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'; + + +/** + * 分页查询文章分类表 + */ +export async function pageCmsArticleCategory(params: CmsArticleCategoryParam) { + const res = await request.get>>( + '/cms/cms-article-category/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询文章分类表列表 + */ +export async function listCmsArticleCategory(params?: CmsArticleCategoryParam) { + const res = await request.get>( + '/cms/cms-article-category', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加文章分类表 + */ +export async function addCmsArticleCategory(data: CmsArticleCategory) { + const res = await request.post>( + '/cms/cms-article-category', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改文章分类表 + */ +export async function updateCmsArticleCategory(data: CmsArticleCategory) { + const res = await request.put>( + '/cms/cms-article-category', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除文章分类表 + */ +export async function removeCmsArticleCategory(id?: number) { + const res = await request.del>( + '/cms/cms-article-category/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除文章分类表 + */ +export async function removeBatchCmsArticleCategory( + data: (number | undefined)[] +) { + const res = await request.del>( + '/cms/cms-article-category/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询文章分类表 + */ +export async function getCmsArticleCategory(id: number) { + const res = await request.get>( + '/cms/cms-article-category/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/shop/goodsCategory/model/index.ts b/api/cms/cmsArticleCategory/model/index.ts similarity index 74% rename from api/shop/goodsCategory/model/index.ts rename to api/cms/cmsArticleCategory/model/index.ts index 8e44f30..7f8b2a8 100644 --- a/api/shop/goodsCategory/model/index.ts +++ b/api/cms/cmsArticleCategory/model/index.ts @@ -1,10 +1,10 @@ import type { PageParam } from '@/api'; /** - * 商品分类 + * 文章分类表 */ -export interface GoodsCategory { - // 商品分类ID +export interface CmsArticleCategory { + // 文章分类ID categoryId?: number; // 分类标识 categoryCode?: string; @@ -24,7 +24,7 @@ export interface GoodsCategory { pageId?: number; // 用户ID userId?: number; - // 商品数量 + // 文章数量 count?: number; // 排序(数字越小越靠前) sortNumber?: number; @@ -42,26 +42,18 @@ export interface GoodsCategory { deleted?: number; // 租户id tenantId?: number; - // 注册时间 + // 创建时间 createTime?: string; // 修改时间 updateTime?: string; - disabled?: boolean; - key?: number; value?: number; label?: string; - // 子菜单 - children?: GoodsCategory[]; - // 商铺ID - merchantId?: number; } /** - * 商品分类搜索条件 + * 文章分类表搜索条件 */ -export interface GoodsCategoryParam extends PageParam { +export interface CmsArticleCategoryParam extends PageParam { categoryId?: number; - parentId?: number; - type?: number; keywords?: string; } diff --git a/api/cms/cmsArticleComment/index.ts b/api/cms/cmsArticleComment/index.ts index 3d62d81..c52449e 100644 --- a/api/cms/cmsArticleComment/index.ts +++ b/api/cms/cmsArticleComment/index.ts @@ -1,22 +1,22 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { CmsArticleComment, CmsArticleCommentParam } from './model'; -import { MODULES_API_URL } from '@/config/index'; + /** * 分页查询文章评论表 */ export async function pageCmsArticleComment(params: CmsArticleCommentParam) { const res = await request.get>>( - MODULES_API_URL + '/cms/cms-article-comment/page', + '/cms/cms-article-comment/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -24,15 +24,15 @@ export async function pageCmsArticleComment(params: CmsArticleCommentParam) { */ export async function listCmsArticleComment(params?: CmsArticleCommentParam) { const res = await request.get>( - MODULES_API_URL + '/cms/cms-article-comment', + '/cms/cms-article-comment', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -40,13 +40,13 @@ export async function listCmsArticleComment(params?: CmsArticleCommentParam) { */ export async function addCmsArticleComment(data: CmsArticleComment) { const res = await request.post>( - MODULES_API_URL + '/cms/cms-article-comment', + '/cms/cms-article-comment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -54,42 +54,42 @@ export async function addCmsArticleComment(data: CmsArticleComment) { */ export async function updateCmsArticleComment(data: CmsArticleComment) { const res = await request.put>( - MODULES_API_URL + '/cms/cms-article-comment', + '/cms/cms-article-comment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除文章评论表 */ export async function removeCmsArticleComment(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/cms-article-comment/' + id + const res = await request.del>( + '/cms/cms-article-comment/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除文章评论表 */ export async function removeBatchCmsArticleComment(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/cms-article-comment/batch', + const res = await request.del>( + '/cms/cms-article-comment/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -97,10 +97,10 @@ export async function removeBatchCmsArticleComment(data: (number | undefined)[]) */ export async function getCmsArticleComment(id: number) { const res = await request.get>( - MODULES_API_URL + '/cms/cms-article-comment/' + id + '/cms/cms-article-comment/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/cms/cmsArticleContent/index.ts b/api/cms/cmsArticleContent/index.ts new file mode 100644 index 0000000..503d85f --- /dev/null +++ b/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'; + + +/** + * 分页查询文章记录表 + */ +export async function pageCmsArticleContent(params: CmsArticleContentParam) { + const res = await request.get>>( + '/cms/cms-article-content/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询文章记录表列表 + */ +export async function listCmsArticleContent(params?: CmsArticleContentParam) { + const res = await request.get>( + '/cms/cms-article-content', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加文章记录表 + */ +export async function addCmsArticleContent(data: CmsArticleContent) { + const res = await request.post>( + '/cms/cms-article-content', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改文章记录表 + */ +export async function updateCmsArticleContent(data: CmsArticleContent) { + const res = await request.put>( + '/cms/cms-article-content', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除文章记录表 + */ +export async function removeCmsArticleContent(id?: number) { + const res = await request.del>( + '/cms/cms-article-content/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除文章记录表 + */ +export async function removeBatchCmsArticleContent(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-article-content/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询文章记录表 + */ +export async function getCmsArticleContent(id: number) { + const res = await request.get>( + '/cms/cms-article-content/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsArticleContent/model/index.ts b/api/cms/cmsArticleContent/model/index.ts new file mode 100644 index 0000000..432c376 --- /dev/null +++ b/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/api/cms/cmsArticleCount/index.ts b/api/cms/cmsArticleCount/index.ts new file mode 100644 index 0000000..1dec319 --- /dev/null +++ b/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'; + + +/** + * 分页查询点赞文章 + */ +export async function pageCmsArticleCount(params: CmsArticleCountParam) { + const res = await request.get>>( + '/cms/cms-article-count/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询点赞文章列表 + */ +export async function listCmsArticleCount(params?: CmsArticleCountParam) { + const res = await request.get>( + '/cms/cms-article-count', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加点赞文章 + */ +export async function addCmsArticleCount(data: CmsArticleCount) { + const res = await request.post>( + '/cms/cms-article-count', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改点赞文章 + */ +export async function updateCmsArticleCount(data: CmsArticleCount) { + const res = await request.put>( + '/cms/cms-article-count', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除点赞文章 + */ +export async function removeCmsArticleCount(id?: number) { + const res = await request.del>( + '/cms/cms-article-count/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除点赞文章 + */ +export async function removeBatchCmsArticleCount(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-article-count/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询点赞文章 + */ +export async function getCmsArticleCount(id: number) { + const res = await request.get>( + '/cms/cms-article-count/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsArticleCount/model/index.ts b/api/cms/cmsArticleCount/model/index.ts new file mode 100644 index 0000000..9cfbc24 --- /dev/null +++ b/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/api/cms/cmsArticleLike/index.ts b/api/cms/cmsArticleLike/index.ts new file mode 100644 index 0000000..b5200ea --- /dev/null +++ b/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'; + + +/** + * 分页查询点赞文章 + */ +export async function pageCmsArticleLike(params: CmsArticleLikeParam) { + const res = await request.get>>( + '/cms/cms-article-like/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询点赞文章列表 + */ +export async function listCmsArticleLike(params?: CmsArticleLikeParam) { + const res = await request.get>( + '/cms/cms-article-like', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加点赞文章 + */ +export async function addCmsArticleLike(data: CmsArticleLike) { + const res = await request.post>( + '/cms/cms-article-like', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改点赞文章 + */ +export async function updateCmsArticleLike(data: CmsArticleLike) { + const res = await request.put>( + '/cms/cms-article-like', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除点赞文章 + */ +export async function removeCmsArticleLike(id?: number) { + const res = await request.del>( + '/cms/cms-article-like/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除点赞文章 + */ +export async function removeBatchCmsArticleLike(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-article-like/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询点赞文章 + */ +export async function getCmsArticleLike(id: number) { + const res = await request.get>( + '/cms/cms-article-like/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsArticleLike/model/index.ts b/api/cms/cmsArticleLike/model/index.ts new file mode 100644 index 0000000..ccee27a --- /dev/null +++ b/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/api/cms/cmsComponents/index.ts b/api/cms/cmsComponents/index.ts new file mode 100644 index 0000000..0c9c62d --- /dev/null +++ b/api/cms/cmsComponents/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsComponents, CmsComponentsParam } from './model'; + + +/** + * 分页查询组件 + */ +export async function pageCmsComponents(params: CmsComponentsParam) { + const res = await request.get>>( + '/cms/cms-components/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询组件列表 + */ +export async function listCmsComponents(params?: CmsComponentsParam) { + const res = await request.get>( + '/cms/cms-components', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加组件 + */ +export async function addCmsComponents(data: CmsComponents) { + const res = await request.post>( + '/cms/cms-components', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改组件 + */ +export async function updateCmsComponents(data: CmsComponents) { + const res = await request.put>( + '/cms/cms-components', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除组件 + */ +export async function removeCmsComponents(id?: number) { + const res = await request.del>( + '/cms/cms-components/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除组件 + */ +export async function removeBatchCmsComponents(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-components/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询组件 + */ +export async function getCmsComponents(id: number) { + const res = await request.get>( + '/cms/cms-components/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsComponents/model/index.ts b/api/cms/cmsComponents/model/index.ts new file mode 100644 index 0000000..f3fc8f5 --- /dev/null +++ b/api/cms/cmsComponents/model/index.ts @@ -0,0 +1,43 @@ +import type { PageParam } from '@/api'; + +/** + * 组件 + */ +export interface CmsComponents { + // ID + id?: number; + // 组件标题 + title?: string; + // 关联导航ID + navigationId?: number; + // 组件类型 + type?: string; + // 页面关键词 + keywords?: string; + // 页面描述 + description?: string; + // 组件路径 + path?: string; + // 组件图标 + icon?: string; + // 用户ID + userId?: number; + // 排序(数字越小越靠前) + sortNumber?: number; + // 备注 + comments?: string; + // 状态, 0正常, 1冻结 + status?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; +} + +/** + * 组件搜索条件 + */ +export interface CmsComponentsParam extends PageParam { + id?: number; + keywords?: string; +} diff --git a/api/cms/cmsDesign/index.ts b/api/cms/cmsDesign/index.ts new file mode 100644 index 0000000..c0051b3 --- /dev/null +++ b/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'; + + +/** + * 分页查询页面管理记录表 + */ +export async function pageCmsDesign(params: CmsDesignParam) { + const res = await request.get>>( + '/cms/cms-design/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询页面管理记录表列表 + */ +export async function listCmsDesign(params?: CmsDesignParam) { + const res = await request.get>( + '/cms/cms-design', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加页面管理记录表 + */ +export async function addCmsDesign(data: CmsDesign) { + const res = await request.post>( + '/cms/cms-design', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改页面管理记录表 + */ +export async function updateCmsDesign(data: CmsDesign) { + const res = await request.put>( + '/cms/cms-design', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除页面管理记录表 + */ +export async function removeCmsDesign(id?: number) { + const res = await request.del>( + '/cms/cms-design/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除页面管理记录表 + */ +export async function removeBatchCmsDesign(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-design/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询页面管理记录表 + */ +export async function getCmsDesign(id: number) { + const res = await request.get>( + '/cms/cms-design/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/design/model/index.ts b/api/cms/cmsDesign/model/index.ts similarity index 68% rename from api/cms/design/model/index.ts rename to api/cms/cmsDesign/model/index.ts index a1f8674..48f10ce 100644 --- a/api/cms/design/model/index.ts +++ b/api/cms/cmsDesign/model/index.ts @@ -1,9 +1,9 @@ import type { PageParam } from '@/api'; /** - * 页面 + * 页面管理记录表 */ -export interface Design { +export interface CmsDesign { pageId?: number; name?: string; keywords?: string; @@ -14,6 +14,7 @@ export interface Design { content?: string; // 类型 type?: string; + categoryId?: number; // 宽 width?: string; // 高 @@ -39,17 +40,21 @@ export interface Design { // 页面布局 layout?: string; backgroundColor?: string; - demoUrl?: string; + // 关联网站导航ID + navigationId?: number; + showLayout?: boolean; + btn?: any[]; + showBanner?: boolean; buyUrl?: string; + demoUrl?: string; + account?: string; docUrl?: string; } /** - * 页面搜索条件 + * 页面管理记录表搜索条件 */ -export interface DesignParam extends PageParam { - pageId?: string; - name?: number; - type?: number; - userId?: number; +export interface CmsDesignParam extends PageParam { + pageId?: number; + keywords?: string; } diff --git a/api/cms/cmsDesignRecord/index.ts b/api/cms/cmsDesignRecord/index.ts new file mode 100644 index 0000000..f82aa26 --- /dev/null +++ b/api/cms/cmsDesignRecord/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsDesignRecord, CmsDesignRecordParam } from './model'; + + +/** + * 分页查询页面组件表 + */ +export async function pageCmsDesignRecord(params: CmsDesignRecordParam) { + const res = await request.get>>( + '/cms/cms-design-record/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询页面组件表列表 + */ +export async function listCmsDesignRecord(params?: CmsDesignRecordParam) { + const res = await request.get>( + '/cms/cms-design-record', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加页面组件表 + */ +export async function addCmsDesignRecord(data: CmsDesignRecord) { + const res = await request.post>( + '/cms/cms-design-record', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改页面组件表 + */ +export async function updateCmsDesignRecord(data: CmsDesignRecord) { + const res = await request.put>( + '/cms/cms-design-record', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除页面组件表 + */ +export async function removeCmsDesignRecord(id?: number) { + const res = await request.del>( + '/cms/cms-design-record/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除页面组件表 + */ +export async function removeBatchCmsDesignRecord(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-design-record/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询页面组件表 + */ +export async function getCmsDesignRecord(id: number) { + const res = await request.get>( + '/cms/cms-design-record/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsDesignRecord/model/index.ts b/api/cms/cmsDesignRecord/model/index.ts new file mode 100644 index 0000000..0c6e809 --- /dev/null +++ b/api/cms/cmsDesignRecord/model/index.ts @@ -0,0 +1,51 @@ +import type { PageParam } from '@/api'; + +/** + * 页面组件表 + */ +export interface CmsDesignRecord { + // ID + id?: number; + // 关联导航ID + navigationId?: number; + parentId?: number; + pageId?: number; + // 组件 + title?: string; + // 组件标识 + dictCode?: string; + // 组件样式 + styles?: string; + // 卡片阴影显示时机 + shadow?: string; + // 页面关键词 + keywords?: string; + // 页面描述 + description?: string; + // 页面路由地址 + path?: string; + // 缩列图 + photo?: string; + // 用户ID + userId?: number; + // 排序(数字越小越靠前) + sortNumber?: number; + // 备注 + comments?: string; + // 状态, 0正常, 1冻结 + status?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 所属期次 + periodId?: number; +} + +/** + * 页面组件表搜索条件 + */ +export interface CmsDesignRecordParam extends PageParam { + id?: number; + keywords?: string; +} diff --git a/api/cms/cmsDocs/index.ts b/api/cms/cmsDocs/index.ts new file mode 100644 index 0000000..bb73666 --- /dev/null +++ b/api/cms/cmsDocs/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsDocs, CmsDocsParam } from './model'; + + +/** + * 分页查询文档管理记录表 + */ +export async function pageCmsDocs(params: CmsDocsParam) { + const res = await request.get>>( + '/cms/cms-docs/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询文档管理记录表列表 + */ +export async function listCmsDocs(params?: CmsDocsParam) { + const res = await request.get>( + '/cms/cms-docs', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加文档管理记录表 + */ +export async function addCmsDocs(data: CmsDocs) { + const res = await request.post>( + '/cms/cms-docs', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改文档管理记录表 + */ +export async function updateCmsDocs(data: CmsDocs) { + const res = await request.put>( + '/cms/cms-docs', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除文档管理记录表 + */ +export async function removeCmsDocs(id?: number) { + const res = await request.del>( + '/cms/cms-docs/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除文档管理记录表 + */ +export async function removeBatchCmsDocs(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-docs/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询文档管理记录表 + */ +export async function getCmsDocs(id: number) { + const res = await request.get>( + '/cms/cms-docs/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsDocs/model/index.ts b/api/cms/cmsDocs/model/index.ts new file mode 100644 index 0000000..1c8c78d --- /dev/null +++ b/api/cms/cmsDocs/model/index.ts @@ -0,0 +1,45 @@ +import type { PageParam } from '@/api'; + +/** + * 文档管理记录表 + */ +export interface CmsDocs { + // 文档ID + docsId?: number; + // 文档标题 + title?: string; + // 上级目录 + parentId?: number; + // 书籍ID + bookId?: number; + // 可见性(public,private,protected) + visibility?: string; + // 虚拟阅读量(仅用作展示) + virtualViews?: number; + // 实际阅读量 + actualViews?: number; + // 用户ID + userId?: number; + // 备注 + comments?: string; + // 排序(数字越小越靠前) + sortNumber?: number; + // 状态, 0正常, 1冻结 + status?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 修改时间 + updateTime?: string; +} + +/** + * 文档管理记录表搜索条件 + */ +export interface CmsDocsParam extends PageParam { + docsId?: number; + keywords?: string; +} diff --git a/api/cms/cmsDocsBook/index.ts b/api/cms/cmsDocsBook/index.ts new file mode 100644 index 0000000..79b6f88 --- /dev/null +++ b/api/cms/cmsDocsBook/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsDocsBook, CmsDocsBookParam } from './model'; + + +/** + * 分页查询书籍记录表 + */ +export async function pageCmsDocsBook(params: CmsDocsBookParam) { + const res = await request.get>>( + '/cms/cms-docs-book/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询书籍记录表列表 + */ +export async function listCmsDocsBook(params?: CmsDocsBookParam) { + const res = await request.get>( + '/cms/cms-docs-book', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加书籍记录表 + */ +export async function addCmsDocsBook(data: CmsDocsBook) { + const res = await request.post>( + '/cms/cms-docs-book', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改书籍记录表 + */ +export async function updateCmsDocsBook(data: CmsDocsBook) { + const res = await request.put>( + '/cms/cms-docs-book', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除书籍记录表 + */ +export async function removeCmsDocsBook(id?: number) { + const res = await request.del>( + '/cms/cms-docs-book/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除书籍记录表 + */ +export async function removeBatchCmsDocsBook(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-docs-book/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询书籍记录表 + */ +export async function getCmsDocsBook(id: number) { + const res = await request.get>( + '/cms/cms-docs-book/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsDocsBook/model/index.ts b/api/cms/cmsDocsBook/model/index.ts new file mode 100644 index 0000000..5e02d44 --- /dev/null +++ b/api/cms/cmsDocsBook/model/index.ts @@ -0,0 +1,37 @@ +import type { PageParam } from '@/api'; + +/** + * 书籍记录表 + */ +export interface CmsDocsBook { + // ID + bookId?: number; + // 书籍名称 + name?: string; + // 书籍标识 + code?: string; + // 封面图 + photo?: string; + // 备注 + comments?: string; + // 文档内容 + content?: string; + // 排序(数字越小越靠前) + sortNumber?: number; + // 状态, 0正常, 1冻结 + status?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; +} + +/** + * 书籍记录表搜索条件 + */ +export interface CmsDocsBookParam extends PageParam { + bookId?: number; + keywords?: string; +} diff --git a/api/cms/cmsDocsContent/index.ts b/api/cms/cmsDocsContent/index.ts new file mode 100644 index 0000000..ef4fc0c --- /dev/null +++ b/api/cms/cmsDocsContent/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsDocsContent, CmsDocsContentParam } from './model'; + + +/** + * 分页查询文档内容记录表 + */ +export async function pageCmsDocsContent(params: CmsDocsContentParam) { + const res = await request.get>>( + '/cms/cms-docs-content/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询文档内容记录表列表 + */ +export async function listCmsDocsContent(params?: CmsDocsContentParam) { + const res = await request.get>( + '/cms/cms-docs-content', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加文档内容记录表 + */ +export async function addCmsDocsContent(data: CmsDocsContent) { + const res = await request.post>( + '/cms/cms-docs-content', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改文档内容记录表 + */ +export async function updateCmsDocsContent(data: CmsDocsContent) { + const res = await request.put>( + '/cms/cms-docs-content', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除文档内容记录表 + */ +export async function removeCmsDocsContent(id?: number) { + const res = await request.del>( + '/cms/cms-docs-content/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除文档内容记录表 + */ +export async function removeBatchCmsDocsContent(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-docs-content/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询文档内容记录表 + */ +export async function getCmsDocsContent(id: number) { + const res = await request.get>( + '/cms/cms-docs-content/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsDocsContent/model/index.ts b/api/cms/cmsDocsContent/model/index.ts new file mode 100644 index 0000000..dc06432 --- /dev/null +++ b/api/cms/cmsDocsContent/model/index.ts @@ -0,0 +1,25 @@ +import type { PageParam } from '@/api'; + +/** + * 文档内容记录表 + */ +export interface CmsDocsContent { + // ID + id?: number; + // 文档ID + docsId?: number; + // 文档内容 + content?: string; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; +} + +/** + * 文档内容记录表搜索条件 + */ +export interface CmsDocsContentParam extends PageParam { + id?: number; + keywords?: string; +} diff --git a/api/cms/cmsDomain/index.ts b/api/cms/cmsDomain/index.ts new file mode 100644 index 0000000..cf217e5 --- /dev/null +++ b/api/cms/cmsDomain/index.ts @@ -0,0 +1,151 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsDomain, CmsDomainParam } from './model'; +import { SERVER_API_URL } from '@/config'; + +/** + * 分页查询网站域名记录表 + */ +export async function pageCmsDomain(params: CmsDomainParam) { + const res = await request.get>>( + SERVER_API_URL + '/cms/cms-domain/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询网站域名记录表列表 + */ +export async function listCmsDomain(params?: CmsDomainParam) { + const res = await request.get>( + SERVER_API_URL + '/cms/cms-domain', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加网站域名记录表 + */ +export async function addCmsDomain(data: CmsDomain) { + const res = await request.post>( + SERVER_API_URL + '/cms/cms-domain', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改网站域名记录表 + */ +export async function updateCmsDomain(data: CmsDomain) { + const res = await request.post>( + SERVER_API_URL + '/cms/cms-domain/domain', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除网站域名记录表 + */ +export async function removeCmsDomain(id?: number) { + const res = await request.del>( + SERVER_API_URL + '/cms/cms-domain/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除网站域名记录表 + */ +export async function removeBatchCmsDomain(data: (number | undefined)[]) { + const res = await request.del>( + SERVER_API_URL + '/cms/cms-domain/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询网站域名记录表 + */ +export async function getCmsDomain(id: number) { + const res = await request.get>( + SERVER_API_URL + '/cms/cms-domain/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 检查IP是否存在 + */ +export async function checkExistence( + field: string, + value: string, + id?: number +) { + const res = await request.get>( + SERVER_API_URL + '/cms/domain/existence', + { + params: { field, value, id } + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +export async function resolvable(id: number) { + const res = await request.get>( + SERVER_API_URL + '/cms/domain/resolvable/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +export async function getTenantIdByDomain(params: CmsDomainParam) { + const config = useRuntimeConfig(); + const res = await request.get>>( + config.public.apiServer + '/cms/cms-domain/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + diff --git a/api/cms/cmsDomain/model/index.ts b/api/cms/cmsDomain/model/index.ts new file mode 100644 index 0000000..377e838 --- /dev/null +++ b/api/cms/cmsDomain/model/index.ts @@ -0,0 +1,44 @@ +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; + domain?: string; + keywords?: string; +} diff --git a/api/cms/cmsForm/index.ts b/api/cms/cmsForm/index.ts new file mode 100644 index 0000000..8d2b184 --- /dev/null +++ b/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'; + + +/** + * 分页查询表单设计表 + */ +export async function pageCmsForm(params: CmsFormParam) { + const res = await request.get>>( + '/cms/cms-form/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询表单设计表列表 + */ +export async function listCmsForm(params?: CmsFormParam) { + const res = await request.get>( + '/cms/cms-form', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加表单设计表 + */ +export async function addCmsForm(data: CmsForm) { + const res = await request.post>( + '/cms/cms-form', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改表单设计表 + */ +export async function updateCmsForm(data: CmsForm) { + const res = await request.put>( + '/cms/cms-form', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除表单设计表 + */ +export async function removeCmsForm(id?: number) { + const res = await request.del>( + '/cms/cms-form/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除表单设计表 + */ +export async function removeBatchCmsForm(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-form/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询表单设计表 + */ +export async function getCmsForm(id: number) { + const res = await request.get>( + '/cms/cms-form/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsForm/model/index.ts b/api/cms/cmsForm/model/index.ts new file mode 100644 index 0000000..6e43ff9 --- /dev/null +++ b/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/api/cms/cmsFormRecord/index.ts b/api/cms/cmsFormRecord/index.ts new file mode 100644 index 0000000..c191158 --- /dev/null +++ b/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'; + + +/** + * 分页查询表单数据记录表 + */ +export async function pageCmsFormRecord(params: CmsFormRecordParam) { + const res = await request.get>>( + '/cms/cms-form-record/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询表单数据记录表列表 + */ +export async function listCmsFormRecord(params?: CmsFormRecordParam) { + const res = await request.get>( + '/cms/cms-form-record', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加表单数据记录表 + */ +export async function addCmsFormRecord(data: CmsFormRecord) { + const res = await request.post>( + '/cms/cms-form-record', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改表单数据记录表 + */ +export async function updateCmsFormRecord(data: CmsFormRecord) { + const res = await request.put>( + '/cms/cms-form-record', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除表单数据记录表 + */ +export async function removeCmsFormRecord(id?: number) { + const res = await request.del>( + '/cms/cms-form-record/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除表单数据记录表 + */ +export async function removeBatchCmsFormRecord(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-form-record/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询表单数据记录表 + */ +export async function getCmsFormRecord(id: number) { + const res = await request.get>( + '/cms/cms-form-record/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsFormRecord/model/index.ts b/api/cms/cmsFormRecord/model/index.ts new file mode 100644 index 0000000..4bd8f39 --- /dev/null +++ b/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/api/cms/cmsLang/index.ts b/api/cms/cmsLang/index.ts new file mode 100644 index 0000000..bda1b17 --- /dev/null +++ b/api/cms/cmsLang/index.ts @@ -0,0 +1,105 @@ +import request from '@/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsLang, CmsLangParam } from './model'; + +/** + * 分页查询国际化 + */ +export async function pageCmsLang(params: CmsLangParam) { + const res = await request.get>>( + '/cms/cms-lang/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询国际化列表 + */ +export async function listCmsLang(params?: CmsLangParam) { + const res = await request.get>( + '/cms/cms-lang', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加国际化 + */ +export async function addCmsLang(data: CmsLang) { + const res = await request.post>( + '/cms/cms-lang', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改国际化 + */ +export async function updateCmsLang(data: CmsLang) { + const res = await request.put>( + '/cms/cms-lang', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除国际化 + */ +export async function removeCmsLang(id?: number) { + const res = await request.del>( + '/cms/cms-lang/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除国际化 + */ +export async function removeBatchCmsLang(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-lang/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询国际化 + */ +export async function getCmsLang(id: number) { + const res = await request.get>( + '/cms/cms-lang/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsLang/model/index.ts b/api/cms/cmsLang/model/index.ts new file mode 100644 index 0000000..2dae25f --- /dev/null +++ b/api/cms/cmsLang/model/index.ts @@ -0,0 +1,39 @@ +import type { PageParam } from '@/api'; + +/** + * 国际化 + */ +export interface CmsLang { + // ID + id?: number; + // 名称 + name?: string; + // 菜单组件地址, 目录可为空 + code?: string; + // 启用语言 + lang?: string; + // 排序(数字越小越靠前) + sortNumber?: number; + // 备注 + comments?: string; + // 0禁用 1启用 + enable?: boolean; + // 状态, 0禁用 1启用 + status?: boolean; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 修改时间 + updateTime?: string; +} + +/** + * 国际化搜索条件 + */ +export interface CmsLangParam extends PageParam { + id?: number; + keywords?: string; +} diff --git a/api/cms/cmsLangLog/index.ts b/api/cms/cmsLangLog/index.ts new file mode 100644 index 0000000..056858b --- /dev/null +++ b/api/cms/cmsLangLog/index.ts @@ -0,0 +1,105 @@ +import request from '@/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsLangLog, CmsLangLogParam } from './model'; + +/** + * 分页查询国际化记录启用 + */ +export async function pageCmsLangLog(params: CmsLangLogParam) { + const res = await request.get>>( + '/cms/cms-lang-log/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询国际化记录启用列表 + */ +export async function listCmsLangLog(params?: CmsLangLogParam) { + const res = await request.get>( + '/cms/cms-lang-log', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加国际化记录启用 + */ +export async function addCmsLangLog(data: CmsLangLog) { + const res = await request.post>( + '/cms/cms-lang-log', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改国际化记录启用 + */ +export async function updateCmsLangLog(data: CmsLangLog) { + const res = await request.put>( + '/cms/cms-lang-log', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除国际化记录启用 + */ +export async function removeCmsLangLog(id?: number) { + const res = await request.del>( + '/cms/cms-lang-log/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除国际化记录启用 + */ +export async function removeBatchCmsLangLog(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-lang-log/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询国际化记录启用 + */ +export async function getCmsLangLog(id: number) { + const res = await request.get>( + '/cms/cms-lang-log/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsLangLog/model/index.ts b/api/cms/cmsLangLog/model/index.ts new file mode 100644 index 0000000..0d1cc29 --- /dev/null +++ b/api/cms/cmsLangLog/model/index.ts @@ -0,0 +1,27 @@ +import type { PageParam } from '@/api'; + +/** + * 国际化记录启用 + */ +export interface CmsLangLog { + // ID + id?: number; + // 关联ID + langId?: number; + // 编码 + code?: string; + // 名称 + lang?: string; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; +} + +/** + * 国际化记录启用搜索条件 + */ +export interface CmsLangLogParam extends PageParam { + id?: number; + keywords?: string; +} diff --git a/api/cms/cmsLink/index.ts b/api/cms/cmsLink/index.ts new file mode 100644 index 0000000..1ff0fd4 --- /dev/null +++ b/api/cms/cmsLink/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsLink, CmsLinkParam } from './model'; + + +/** + * 分页查询常用链接 + */ +export async function pageCmsLink(params: CmsLinkParam) { + const res = await request.get>>( + '/cms/cms-link/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询常用链接列表 + */ +export async function listCmsLink(params?: CmsLinkParam) { + const res = await request.get>( + '/cms/cms-link', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加常用链接 + */ +export async function addCmsLink(data: CmsLink) { + const res = await request.post>( + '/cms/cms-link', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改常用链接 + */ +export async function updateCmsLink(data: CmsLink) { + const res = await request.put>( + '/cms/cms-link', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除常用链接 + */ +export async function removeCmsLink(id?: number) { + const res = await request.del>( + '/cms/cms-link/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除常用链接 + */ +export async function removeBatchCmsLink(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-link/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询常用链接 + */ +export async function getCmsLink(id: number) { + const res = await request.get>( + '/cms/cms-link/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/oa/oaLink/model/index.ts b/api/cms/cmsLink/model/index.ts similarity index 85% rename from api/oa/oaLink/model/index.ts rename to api/cms/cmsLink/model/index.ts index 63dc11b..1258a5c 100644 --- a/api/oa/oaLink/model/index.ts +++ b/api/cms/cmsLink/model/index.ts @@ -3,7 +3,7 @@ import type { PageParam } from '@/api'; /** * 常用链接 */ -export interface OaLink { +export interface CmsLink { // 自增ID id?: number; // 链接名称 @@ -16,8 +16,6 @@ export interface OaLink { linkType?: string; // 应用ID appId?: number; - // 所属栏目 - categoryId?: number; // 用户ID userId?: number; // 是否推荐 @@ -39,7 +37,7 @@ export interface OaLink { /** * 常用链接搜索条件 */ -export interface OaLinkParam extends PageParam { +export interface CmsLinkParam extends PageParam { id?: number; keywords?: string; } diff --git a/api/cms/cmsModel/index.ts b/api/cms/cmsModel/index.ts new file mode 100644 index 0000000..b0b2642 --- /dev/null +++ b/api/cms/cmsModel/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsModel, CmsModelParam } from './model'; + + +/** + * 分页查询模型 + */ +export async function pageCmsModel(params: CmsModelParam) { + const res = await request.get>>( + '/cms/cms-model/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询模型列表 + */ +export async function listCmsModel(params?: CmsModelParam) { + const res = await request.get>( + '/cms/cms-model', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加模型 + */ +export async function addCmsModel(data: CmsModel) { + const res = await request.post>( + '/cms/cms-model', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改模型 + */ +export async function updateCmsModel(data: CmsModel) { + const res = await request.put>( + '/cms/cms-model', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除模型 + */ +export async function removeCmsModel(id?: number) { + const res = await request.del>( + '/cms/cms-model/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除模型 + */ +export async function removeBatchCmsModel(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-model/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询模型 + */ +export async function getCmsModel(id: number) { + const res = await request.get>( + '/cms/cms-model/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsModel/model/index.ts b/api/cms/cmsModel/model/index.ts new file mode 100644 index 0000000..80daad0 --- /dev/null +++ b/api/cms/cmsModel/model/index.ts @@ -0,0 +1,57 @@ +import type { PageParam } from '@/api'; + +/** + * 模型 + */ +export interface CmsModel { + // ID + modelId?: number; + // 模型名称 + name?: string; + // 唯一标识 + model?: string; + // 菜单路由地址 + path?: string; + // 菜单组件地址, 目录可为空 + component?: string; + // 模型banner图片 + banner?: string; + // 缩列图 + thumb?: string; + // 封面图宽 + imageWidth?: string; + // 封面图高 + imageHeight?: string; + // 样式 + style?: string; + // Banner上的标题 + title?: string; + // Banner上的描述 + desc?: string; + // 列表显示方式(10小图展示 20大图展示) + showType?: number; + // 用户ID + userId?: number; + // 排序(数字越小越靠前) + sortNumber?: number; + // 备注 + comments?: string; + // 状态, 0已发布, 1待审核 2已驳回 3违规内容 + status?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 修改时间 + updateTime?: string; +} + +/** + * 模型搜索条件 + */ +export interface CmsModelParam extends PageParam { + modelId?: number; + keywords?: string; +} diff --git a/api/cms/cmsMp/index.ts b/api/cms/cmsMp/index.ts new file mode 100644 index 0000000..b9dba79 --- /dev/null +++ b/api/cms/cmsMp/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsMp, CmsMpParam } from './model'; + + +/** + * 分页查询小程序信息 + */ +export async function pageCmsMp(params: CmsMpParam) { + const res = await request.get>>( + '/cms/cms-mp/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询小程序信息列表 + */ +export async function listCmsMp(params?: CmsMpParam) { + const res = await request.get>( + '/cms/cms-mp', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加小程序信息 + */ +export async function addCmsMp(data: CmsMp) { + const res = await request.post>( + '/cms/cms-mp', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改小程序信息 + */ +export async function updateCmsMp(data: CmsMp) { + const res = await request.put>( + '/cms/cms-mp', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除小程序信息 + */ +export async function removeCmsMp(id?: number) { + const res = await request.del>( + '/cms/cms-mp/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除小程序信息 + */ +export async function removeBatchCmsMp(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-mp/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询小程序信息 + */ +export async function getCmsMp(id: number) { + const res = await request.get>( + '/cms/cms-mp/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/mp/model/index.ts b/api/cms/cmsMp/model/index.ts similarity index 91% rename from api/cms/mp/model/index.ts rename to api/cms/cmsMp/model/index.ts index 91e1233..b3eafe1 100644 --- a/api/cms/mp/model/index.ts +++ b/api/cms/cmsMp/model/index.ts @@ -3,15 +3,15 @@ import type { PageParam } from '@/api'; /** * 小程序信息 */ -export interface Mp { +export interface CmsMp { // ID mpId?: number; + // 是否主账号 + type?: number; // 小程序ID appId?: string; // 小程序密钥 appSecret?: string; - // 是否主账号 - type?: number; // 小程序名称 mpName?: string; // 小程序简称 @@ -48,15 +48,14 @@ export interface Mp { deleted?: number; // 租户id tenantId?: number; - // 注册时间 + // 创建时间 createTime?: string; } /** * 小程序信息搜索条件 */ -export interface MpParam extends PageParam { +export interface CmsMpParam extends PageParam { mpId?: number; - type?: number; keywords?: string; } diff --git a/api/cms/cmsMpAd/index.ts b/api/cms/cmsMpAd/index.ts new file mode 100644 index 0000000..f2b6f54 --- /dev/null +++ b/api/cms/cmsMpAd/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsMpAd, CmsMpAdParam } from './model'; + + +/** + * 分页查询小程序广告位 + */ +export async function pageCmsMpAd(params: CmsMpAdParam) { + const res = await request.get>>( + '/cms/cms-mp-ad/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询小程序广告位列表 + */ +export async function listCmsMpAd(params?: CmsMpAdParam) { + const res = await request.get>( + '/cms/cms-mp-ad', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加小程序广告位 + */ +export async function addCmsMpAd(data: CmsMpAd) { + const res = await request.post>( + '/cms/cms-mp-ad', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改小程序广告位 + */ +export async function updateCmsMpAd(data: CmsMpAd) { + const res = await request.put>( + '/cms/cms-mp-ad', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除小程序广告位 + */ +export async function removeCmsMpAd(id?: number) { + const res = await request.del>( + '/cms/cms-mp-ad/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除小程序广告位 + */ +export async function removeBatchCmsMpAd(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-mp-ad/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询小程序广告位 + */ +export async function getCmsMpAd(id: number) { + const res = await request.get>( + '/cms/cms-mp-ad/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/mpAd/model/index.ts b/api/cms/cmsMpAd/model/index.ts similarity index 88% rename from api/cms/mpAd/model/index.ts rename to api/cms/cmsMpAd/model/index.ts index dcf5801..3d061d6 100644 --- a/api/cms/mpAd/model/index.ts +++ b/api/cms/cmsMpAd/model/index.ts @@ -3,13 +3,11 @@ import type { PageParam } from '@/api'; /** * 小程序广告位 */ -export interface MpAd { +export interface CmsMpAd { // ID adId?: number; // 页面ID pageId?: number; - // 页面名称 - pageName?: string; // 广告类型 adType?: string; // 广告位名称 @@ -22,6 +20,8 @@ export interface MpAd { images?: string; // 路由/链接地址 path?: string; + // 页面名称 + pageName?: string; // 用户ID userId?: number; // 排序(数字越小越靠前) @@ -34,14 +34,14 @@ export interface MpAd { deleted?: number; // 租户id tenantId?: number; - // 注册时间 + // 创建时间 createTime?: string; } /** * 小程序广告位搜索条件 */ -export interface MpAdParam extends PageParam { +export interface CmsMpAdParam extends PageParam { adId?: number; keywords?: string; } diff --git a/api/cms/cmsMpField/index.ts b/api/cms/cmsMpField/index.ts new file mode 100644 index 0000000..21c4f87 --- /dev/null +++ b/api/cms/cmsMpField/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsMpField, CmsMpFieldParam } from './model'; + + +/** + * 分页查询小程序配置 + */ +export async function pageCmsMpField(params: CmsMpFieldParam) { + const res = await request.get>>( + '/cms/cms-mp-field/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询小程序配置列表 + */ +export async function listCmsMpField(params?: CmsMpFieldParam) { + const res = await request.get>( + '/cms/cms-mp-field', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加小程序配置 + */ +export async function addCmsMpField(data: CmsMpField) { + const res = await request.post>( + '/cms/cms-mp-field', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改小程序配置 + */ +export async function updateCmsMpField(data: CmsMpField) { + const res = await request.put>( + '/cms/cms-mp-field', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除小程序配置 + */ +export async function removeCmsMpField(id?: number) { + const res = await request.del>( + '/cms/cms-mp-field/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除小程序配置 + */ +export async function removeBatchCmsMpField(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-mp-field/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询小程序配置 + */ +export async function getCmsMpField(id: number) { + const res = await request.get>( + '/cms/cms-mp-field/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/mpField/model/index.ts b/api/cms/cmsMpField/model/index.ts similarity index 79% rename from api/cms/mpField/model/index.ts rename to api/cms/cmsMpField/model/index.ts index 3738592..f573edb 100644 --- a/api/cms/mpField/model/index.ts +++ b/api/cms/cmsMpField/model/index.ts @@ -3,7 +3,7 @@ import type { PageParam } from '@/api'; /** * 小程序配置 */ -export interface MpField { +export interface CmsMpField { // 自增ID id?: number; // 类型,0文本 1图片 2其他 @@ -16,22 +16,20 @@ export interface MpField { value?: string; // 页面ID pageId?: number; - // 页面名称 - pageName?: string; // 排序(数字越小越靠前) sortNumber?: number; // 是否删除, 0否, 1是 deleted?: number; // 租户id tenantId?: number; - // 注册时间 + // 创建时间 createTime?: string; } /** * 小程序配置搜索条件 */ -export interface MpFieldParam extends PageParam { +export interface CmsMpFieldParam extends PageParam { id?: number; keywords?: string; } diff --git a/api/cms/cmsMpMenu/index.ts b/api/cms/cmsMpMenu/index.ts new file mode 100644 index 0000000..6dc578a --- /dev/null +++ b/api/cms/cmsMpMenu/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsMpMenu, CmsMpMenuParam } from './model'; + + +/** + * 分页查询小程序端菜单 + */ +export async function pageCmsMpMenu(params: CmsMpMenuParam) { + const res = await request.get>>( + '/cms/cms-mp-menu/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询小程序端菜单列表 + */ +export async function listCmsMpMenu(params?: CmsMpMenuParam) { + const res = await request.get>( + '/cms/cms-mp-menu', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加小程序端菜单 + */ +export async function addCmsMpMenu(data: CmsMpMenu) { + const res = await request.post>( + '/cms/cms-mp-menu', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改小程序端菜单 + */ +export async function updateCmsMpMenu(data: CmsMpMenu) { + const res = await request.put>( + '/cms/cms-mp-menu', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除小程序端菜单 + */ +export async function removeCmsMpMenu(id?: number) { + const res = await request.del>( + '/cms/cms-mp-menu/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除小程序端菜单 + */ +export async function removeBatchCmsMpMenu(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-mp-menu/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询小程序端菜单 + */ +export async function getCmsMpMenu(id: number) { + const res = await request.get>( + '/cms/cms-mp-menu/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/mp-menu/model/index.ts b/api/cms/cmsMpMenu/model/index.ts similarity index 82% rename from api/cms/mp-menu/model/index.ts rename to api/cms/cmsMpMenu/model/index.ts index 8d94058..7019e58 100644 --- a/api/cms/mp-menu/model/index.ts +++ b/api/cms/cmsMpMenu/model/index.ts @@ -3,17 +3,17 @@ import type { PageParam } from '@/api'; /** * 小程序端菜单 */ -export interface MpMenu { +export interface CmsMpMenu { // ID menuId?: number; // 上级id, 0是顶级 parentId?: number; // 菜单名称 title?: string; - // 类型 0自定义 1单页内容2外部链接 + // 类型 0功能图标 1订单状态图标 2首页导航图标 3 商城导航图标 4管理人员功能图标 type?: number; // 是否微信小程序菜单 - isMpWeixin?: boolean; + isMpWeixin?: string; // 菜单路由地址 path?: string; // 菜单组件地址, 目录可为空 @@ -21,17 +21,17 @@ export interface MpMenu { // 打开位置 target?: string; // 菜单图标 - icon?: string; + avatar?: string; // 图标颜色 color?: string; // 上传图标 - avatar?: string; - // 所在行 - rows?: number; + icon?: string; // 是否隐藏, 0否, 1是(仅注册路由不显示在左侧菜单) hide?: number; // 位置 0不限 1顶部 2底部 position?: number; + // 0 第一行 1第二行 + rows?: number; // 菜单侧栏选中的path active?: string; // 其它路由元信息 @@ -56,6 +56,8 @@ export interface MpMenu { adminShow?: number; // 设为首页 home?: number; + // 分组名称 + groupName?: string; // 排序(数字越小越靠前) sortNumber?: number; // 备注 @@ -64,22 +66,14 @@ export interface MpMenu { status?: number; // 租户id tenantId?: number; - // 注册时间 + // 创建时间 createTime?: string; - // 子菜单 - children?: MpMenu[]; - pageName?: string; - groupName?: string; } /** * 小程序端菜单搜索条件 */ -export interface MpMenuParam extends PageParam { - parentId?: number; +export interface CmsMpMenuParam extends PageParam { menuId?: number; - pageId?: number; - subpackage?: string; - type?: number; keywords?: string; } diff --git a/api/cms/cmsMpPages/index.ts b/api/cms/cmsMpPages/index.ts new file mode 100644 index 0000000..667e3cc --- /dev/null +++ b/api/cms/cmsMpPages/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsMpPages, CmsMpPagesParam } from './model'; + + +/** + * 分页查询小程序页面 + */ +export async function pageCmsMpPages(params: CmsMpPagesParam) { + const res = await request.get>>( + '/cms/cms-mp-pages/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询小程序页面列表 + */ +export async function listCmsMpPages(params?: CmsMpPagesParam) { + const res = await request.get>( + '/cms/cms-mp-pages', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加小程序页面 + */ +export async function addCmsMpPages(data: CmsMpPages) { + const res = await request.post>( + '/cms/cms-mp-pages', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改小程序页面 + */ +export async function updateCmsMpPages(data: CmsMpPages) { + const res = await request.put>( + '/cms/cms-mp-pages', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除小程序页面 + */ +export async function removeCmsMpPages(id?: number) { + const res = await request.del>( + '/cms/cms-mp-pages/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除小程序页面 + */ +export async function removeBatchCmsMpPages(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-mp-pages/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询小程序页面 + */ +export async function getCmsMpPages(id: number) { + const res = await request.get>( + '/cms/cms-mp-pages/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/mpPages/model/index.ts b/api/cms/cmsMpPages/model/index.ts similarity index 74% rename from api/cms/mpPages/model/index.ts rename to api/cms/cmsMpPages/model/index.ts index ac06f00..8b08ae1 100644 --- a/api/cms/mpPages/model/index.ts +++ b/api/cms/cmsMpPages/model/index.ts @@ -3,7 +3,7 @@ import type { PageParam } from '@/api'; /** * 小程序页面 */ -export interface MpPages { +export interface CmsMpPages { // ID id?: number; // 上级id, 0是顶级 @@ -18,9 +18,9 @@ export interface MpPages { subpackage?: string; // 图标 icon?: string; - // (优先级高于图标) + // 未选中图标 iconPath?: string; - // (优先级高于图标) + // 选中的图标 selectedIconPath?: string; // 排序(数字越小越靠前) sortNumber?: number; @@ -34,19 +34,14 @@ export interface MpPages { deleted?: number; // 租户id tenantId?: number; - // 注册时间 + // 创建时间 createTime?: string; - // 子页面 - children?: MpPages[]; } /** * 小程序页面搜索条件 */ -export interface MpPagesParam extends PageParam { +export interface CmsMpPagesParam extends PageParam { id?: number; - title?: string; - path?: string; - subpackage?: string; keywords?: string; } diff --git a/api/cms/cmsNavigation/index.ts b/api/cms/cmsNavigation/index.ts new file mode 100644 index 0000000..4329f5f --- /dev/null +++ b/api/cms/cmsNavigation/index.ts @@ -0,0 +1,135 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsNavigation, CmsNavigationParam } from './model'; + +/** + * 分页查询网站导航记录表 + */ +export async function pageCmsNavigation(params: CmsNavigationParam) { + const res = await request.get>>( + '/cms/cms-navigation/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询网站导航记录表列表 + */ +export async function listCmsNavigation(params?: CmsNavigationParam) { + const res = await request.get>( + '/cms/cms-navigation', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询导航列表(树形结构) + */ +export async function treeNavigation(params?: CmsNavigationParam) { + const res = await request.get>( + '/cms/cms-navigation/tree', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} +/** + * 添加网站导航记录表 + */ +export async function addCmsNavigation(data: CmsNavigation) { + const res = await request.post>( + '/cms/cms-navigation', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改网站导航记录表 + */ +export async function updateCmsNavigation(data: CmsNavigation) { + const res = await request.put>( + '/cms/cms-navigation', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除网站导航记录表 + */ +export async function removeCmsNavigation(id?: number) { + const res = await request.del>( + '/cms/cms-navigation/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除网站导航记录表 + */ +export async function removeBatchCmsNavigation(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-navigation/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询网站导航记录表 + */ +export async function getCmsNavigation(id: number) { + const res = await request.get>( + '/cms/cms-navigation/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +export async function getNavigationByPath(params: CmsNavigationParam) { + const res = await request.get>( + '/cms/cms-navigation/getNavigationByPath', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + + diff --git a/api/cms/cmsNavigation/model/index.ts b/api/cms/cmsNavigation/model/index.ts new file mode 100644 index 0000000..c84db26 --- /dev/null +++ b/api/cms/cmsNavigation/model/index.ts @@ -0,0 +1,112 @@ +import type {PageParam} from '@/api'; +import type {CmsDesign} from "~/api/cms/cmsDesign/model"; +import type {CmsModel} from "~/api/cms/cmsModel/model"; + +/** + * 网站导航记录表 + */ +export interface CmsNavigation { + // ID + navigationId?: number; + // 上级id, 0是顶级 + parentId?: number; + // 菜单名称 + title?: string; + // 模型 + model?: string; + // 标识 + code?: string; + // 菜单路由地址 + path?: string; + // 菜单组件地址, 目录可为空 + component?: string; + // 组件路径 + componentPath?: string; + // 打开位置 + target?: string; + // 菜单图标 + icon?: string; + // banner图片 + banner?: string; + // 图标颜色 + color?: string; + // 是否隐藏, 0否, 1是(仅注册路由不显示在左侧菜单) + hide?: number; + // 可见类型 0所有人 1登录可见 2密码可见 + permission?: number; + // 访问密码 + password?: string; + // 位置 0不限 1顶部 2底部 + position?: number; + // 仅在顶部显示 + top?: number; + // 仅在底部显示 + bottom?: number; + // 菜单侧栏选中的path + active?: string; + // 其它路由元信息 + meta?: string; + // css样式 + style?: string; + // 父级栏目路由 + parentPath?: string; + // 父级栏目名称 + parentName?: string; + // 模型名称 + modelName?: string; + // 类型(已废弃) + type?: number; + // 绑定的页面(已废弃) + pageId?: number; + // 项目ID + itemId?: number; + // 是否微信小程序菜单 + isMpWeixin?: string; + // 用户ID + userId?: number; + // 设为首页 + home?: number; + // 排序(数字越小越靠前) + sortNumber?: number; + // 备注 + comments?: string; + // 是否删除, 0否, 1是 + deleted?: number; + // 状态, 0正常, 1冻结 + status?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 父级栏目 + parent?: CmsNavigation; + // 子级栏目 + children?: CmsNavigation[]; + // 模型信息 + modelInfo?: CmsModel; + // 栏目名称 + categoryName?: string; + // 是否禁用 + disabled?: boolean; + // 链接地址 + design?: CmsDesign; + // 子级数量 + childHeight?: number, + // 是否展开 + showChild?: boolean + // 布局 + layout?: any; + // 标题 + label?: string; + // 值 + value?: number; +} + +/** + * 网站导航记录表搜索条件 + */ +export interface CmsNavigationParam extends PageParam { + navigationId?: number; + parentId?: number; + keywords?: string; +} diff --git a/api/cms/cmsOrder/index.ts b/api/cms/cmsOrder/index.ts new file mode 100644 index 0000000..1d32dd6 --- /dev/null +++ b/api/cms/cmsOrder/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsOrder, CmsOrderParam } from './model'; + + +/** + * 分页查询订单 + */ +export async function pageCmsOrder(params: CmsOrderParam) { + const res = await request.get>>( + '/cms/cms-order/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询订单列表 + */ +export async function listCmsOrder(params?: CmsOrderParam) { + const res = await request.get>( + '/cms/cms-order', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加订单 + */ +export async function addCmsOrder(data: CmsOrder) { + const res = await request.post>( + '/cms/cms-order', + data + ); + if (res.code === 0) { + return res; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改订单 + */ +export async function updateCmsOrder(data: CmsOrder) { + const res = await request.put>( + '/cms/cms-order', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除订单 + */ +export async function removeCmsOrder(id?: number) { + const res = await request.del>( + '/cms/cms-order/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除订单 + */ +export async function removeBatchCmsOrder(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-order/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询订单 + */ +export async function getCmsOrder(id: number) { + const res = await request.get>( + '/cms/cms-order/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsOrder/model/index.ts b/api/cms/cmsOrder/model/index.ts new file mode 100644 index 0000000..122f82f --- /dev/null +++ b/api/cms/cmsOrder/model/index.ts @@ -0,0 +1,69 @@ +import type { PageParam } from '@/api'; + +/** + * 订单 + */ +export interface CmsOrder { + // 订单号 + orderId?: number; + // 关联模型 + model?: string; + // 订单标题 + title?: string; + // 订单编号 + orderNo?: string; + // 订单类型,0商城 1询价 2留言 + type?: number; + // 关联文章ID + articleId?: number; + // 真实姓名 + realName?: string; + // 手机号码 + phone?: string; + // 电子邮箱 + email?: string; + // 收货地址 + address?: string; + // 订单内容 + content?: string; + // 订单总额 + totalPrice?: string; + // 实际付款 + payPrice?: string; + // 报价询价 + price?: string; + // 购买数量 + totalNum?: number; + // 二维码地址,保存订单号,支付成功后才生成 + qrcode?: string; + // 下单渠道,0网站 1小程序 2其他 + channel?: number; + // 过期时间 + expirationTime?: string; + // 订单是否已结算(0未结算 1已结算) + isSettled?: number; + // 用户id + userId?: number; + // 备注 + comments?: string; + // 排序号 + sortNumber?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 图像验证码 + code?: string; + // 图像验证码内容 + text?: string; +} + +/** + * 订单搜索条件 + */ +export interface CmsOrderParam extends PageParam { + orderId?: number; + keywords?: string; +} diff --git a/api/cms/cmsProduct/index.ts b/api/cms/cmsProduct/index.ts index bfcfb7b..f59e889 100644 --- a/api/cms/cmsProduct/index.ts +++ b/api/cms/cmsProduct/index.ts @@ -1,23 +1,22 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { CmsProduct, CmsProductParam } from './model'; -import { SERVER_API_URL } from '~/config'; -import type { ArticleParam } from "@/api/cms/article/model"; + /** * 分页查询产品 */ export async function pageCmsProduct(params: CmsProductParam) { const res = await request.get>>( - SERVER_API_URL + '/cms/cms-product/page', + '/cms/cms-product/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -25,15 +24,15 @@ export async function pageCmsProduct(params: CmsProductParam) { */ export async function listCmsProduct(params?: CmsProductParam) { const res = await request.get>( - SERVER_API_URL + '/cms/cms-product', + '/cms/cms-product', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -41,13 +40,13 @@ export async function listCmsProduct(params?: CmsProductParam) { */ export async function addCmsProduct(data: CmsProduct) { const res = await request.post>( - SERVER_API_URL + '/cms/cms-product', + '/cms/cms-product', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -55,42 +54,42 @@ export async function addCmsProduct(data: CmsProduct) { */ export async function updateCmsProduct(data: CmsProduct) { const res = await request.put>( - SERVER_API_URL + '/cms/cms-product', + '/cms/cms-product', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除产品 */ export async function removeCmsProduct(id?: number) { - const res = await request.delete>( - SERVER_API_URL + '/cms/cms-product/' + id + const res = await request.del>( + '/cms/cms-product/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除产品 */ export async function removeBatchCmsProduct(data: (number | undefined)[]) { - const res = await request.delete>( - SERVER_API_URL + '/cms/cms-product/batch', + const res = await request.del>( + '/cms/cms-product/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -98,20 +97,20 @@ export async function removeBatchCmsProduct(data: (number | undefined)[]) { */ export async function getCmsProduct(id: number) { const res = await request.get>( - SERVER_API_URL + '/cms/cms-product/' + id + '/cms/cms-product/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } -export async function getCount(params: ArticleParam) { - const res = await request.get(SERVER_API_URL + '/cms/cms-product/data', { +export async function getCount(params: CmsProductParam) { + const res = await request.get('/cms/cms-product/data', { params }); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/cms/cmsProduct/model/index.ts b/api/cms/cmsProduct/model/index.ts index 8a603fa..484338e 100644 --- a/api/cms/cmsProduct/model/index.ts +++ b/api/cms/cmsProduct/model/index.ts @@ -1,105 +1,98 @@ -import type {PageParam} from '@/api'; -import type {CmsProductParameter} from "~/api/cms/cmsProductParameter/model"; -import type {CmsProductUrl} from "~/api/cms/cmsProductUrl/model"; +import type { PageParam } from '@/api'; /** * 产品 */ export interface CmsProduct { - // 自增ID - productId?: number; - // 类型 0软件产品 1实物商品 2虚拟商品 - type?: number; - // 产品编码 - code?: string; - // 产品标题 - title?: string; - // 封面图 - image?: string; - // 产品详情 - content?: string; - // 父级分类ID - parentId?: number; - // 产品分类ID - categoryId?: number; - // 产品规格 0单规格 1多规格 - specs?: number; - // 货架 - position?: string; - // 单位名称 (个) - unitName?: string; - // 进货价格 - price?: number; - // 销售价格 - salePrice?: number; - // 库存计算方式(10下单减库存 20付款减库存) - deductStockType?: number; - // 轮播图 - files?: any; - // 销量 - sales?: number; - // 库存 - stock?: number; - // 安装次数 - install?: number; - // 消费赚取积分 - gainIntegral?: string; - // 计费方式 - durationMethod?: number; - // 推荐 - recommend?: number; - // 商户ID - merchantId?: number; - merchantName: undefined, - merchantAvatar: undefined, - merchantComments: undefined, - // 状态(0:未上架,1:上架) - isShow?: string; - // 状态, 0上架 1待上架 2待审核 3审核不通过 - status?: number; - // 备注 - comments?: string; - // 排序号 - sortNumber?: number; - // 用户ID - userId?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; - // 父级分类名称 - parentName?: string; - // 父级分类路径 - parentPath?: string; - // 分类名称 - categoryName?: string; - // 评分 - rate?: string; - // 是否已购买 - isBuy?: boolean; - // 是否已安装插件 - installed?: boolean; - // 产品参数 - parameters?: CmsProductParameter[]; - // 产品链接 - links?: CmsProductUrl[]; - // 插件入口 - path?: string; - // 标签 - tag?: string; - // 菜单ID - menuId?: number; + // 自增ID + productId?: number; + // 类型 0软件产品 1实物商品 2虚拟商品 + type?: number; + // 产品编码 + code?: string; + // 产品标题 + title?: string; + // 封面图 + image?: string; + // 产品详情 + content?: string; + // 父级分类ID + parentId?: number; + // 父级栏目名称 + parentName?: string; + // 产品分类ID + categoryId?: number; + // 分类名称 + categoryName?: string; + // 关联的菜单ID + menuId?: number; + // 控制台入口 + path?: string; + // 产品规格 0单规格 1多规格 + specs?: number; + // 货架 + position?: string; + // 单位名称 (个) + unitName?: string; + // 进货价格 + price?: string; + // 销售价格 + salePrice?: string; + // 标签 + tag?: string; + // 库存计算方式(10下单减库存 20付款减库存) + deductStockType?: number; + // 交付方式 + deliveryMethod?: number; + // 购买时长 + durationMethod?: number; + // 服务套餐 + serverMethod?: number; + // 套餐版本 + packageMethod?: number; + // 可购买数量 + canBuyNumber?: number; + // 轮播图 + files?: string; + // 销量 + sales?: number; + // 库存 + stock?: number; + // 消费赚取积分 + gainIntegral?: string; + // 推荐 + recommend?: number; + // 是否官方自营 + official?: number; + // 商户ID + merchantId?: number; + // 状态(0:未上架,1:上架) + isShow?: string; + // 状态, 0上架 1待上架 2待审核 3审核不通过 + status?: number; + // 备注 + comments?: string; + // 排序号 + sortNumber?: number; + // 用户ID + userId?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 修改时间 + updateTime?: string; } /** * 产品搜索条件 */ export interface CmsProductParam extends PageParam { - productId?: number; - status?: number; - keywords?: string; + productId?: number; + type?: number; + official?: number; + status?: number; + keywords?: string; } diff --git a/api/cms/cmsProductComment/index.ts b/api/cms/cmsProductComment/index.ts index 809b805..64deebe 100644 --- a/api/cms/cmsProductComment/index.ts +++ b/api/cms/cmsProductComment/index.ts @@ -1,22 +1,22 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type {ApiResult, PageResult} from '@/api'; import type {CmsProductComment, CmsProductCommentParam} from './model'; -import {SERVER_API_URL} from '@/config/index'; + /** * 分页查询产品评论 */ export async function pageCmsProductComment(params: CmsProductCommentParam) { const res = await request.get>>( - SERVER_API_URL + '/cms/cms-product-comment/page', + '/cms/cms-product-comment/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -24,15 +24,15 @@ export async function pageCmsProductComment(params: CmsProductCommentParam) { */ export async function listCmsProductComment(params?: CmsProductCommentParam) { const res = await request.get>( - SERVER_API_URL + '/cms/cms-product-comment', + '/cms/cms-product-comment', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -40,13 +40,13 @@ export async function listCmsProductComment(params?: CmsProductCommentParam) { */ export async function addCmsProductComment(data: CmsProductComment) { const res = await request.post>( - SERVER_API_URL + '/cms/cms-product-comment', + '/cms/cms-product-comment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -54,42 +54,42 @@ export async function addCmsProductComment(data: CmsProductComment) { */ export async function updateCmsProductComment(data: CmsProductComment) { const res = await request.put>( - SERVER_API_URL + '/cms/cms-product-comment', + '/cms/cms-product-comment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除产品评论 */ export async function removeCmsProductComment(id?: number) { - const res = await request.delete>( - SERVER_API_URL + '/cms/cms-product-comment/' + id + const res = await request.del>( + '/cms/cms-product-comment/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除产品评论 */ export async function removeBatchCmsProductComment(data: (number | undefined)[]) { - const res = await request.delete>( - SERVER_API_URL + '/cms/cms-product-comment/batch', + const res = await request.del>( + '/cms/cms-product-comment/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -97,10 +97,10 @@ export async function removeBatchCmsProductComment(data: (number | undefined)[]) */ export async function getCmsProductComment(id: number) { const res = await request.get>( - SERVER_API_URL + '/cms/cms-product-comment/' + id + '/cms/cms-product-comment/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/cms/cmsProductComment/model/index.ts b/api/cms/cmsProductComment/model/index.ts index 9e5cd18..c8df35c 100644 --- a/api/cms/cmsProductComment/model/index.ts +++ b/api/cms/cmsProductComment/model/index.ts @@ -10,25 +10,21 @@ export interface CmsProductComment { productId?: number; // 用户ID userId?: number; + // 昵称 + nickname?: string; // 用户头像 avatar?: string; - // 用户昵称 - nickname?: string; - image?: string; // 排序(数字越小越靠前) sortNumber?: number; // 评论内容 comments?: string; - // 评分 - rate?: number; // 状态 status?: number; // 租户id tenantId?: number; // 创建时间 createTime?: string; - // 子列表 - children?: CmsProductComment[]; + image?: string; } /** diff --git a/api/cms/cmsProductParameter/index.ts b/api/cms/cmsProductParameter/index.ts index 633b037..b5d11a6 100644 --- a/api/cms/cmsProductParameter/index.ts +++ b/api/cms/cmsProductParameter/index.ts @@ -1,106 +1,106 @@ -import request from '@/utils/request'; -import type {ApiResult, PageResult} from '@/api'; -import type {CmsProductParameter, CmsProductParameterParam} from './model'; -import {SERVER_API_URL} from '@/config'; +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsProductParameter, CmsProductParameterParam } from './model'; + /** * 分页查询产品参数 */ export async function pageCmsProductParameter(params: CmsProductParameterParam) { - const res = await request.get>>( - SERVER_API_URL + '/cms/cms-product-parameter/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; + const res = await request.get>>( + '/cms/cms-product-parameter/page', + { + params } - return Promise.reject(new Error(res.data.message)); + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); } /** * 查询产品参数列表 */ export async function listCmsProductParameter(params?: CmsProductParameterParam) { - const res = await request.get>( - SERVER_API_URL + '/cms/cms-product-parameter', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + const res = await request.get>( + '/cms/cms-product-parameter', + { + params } - return Promise.reject(new Error(res.data.message)); + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); } /** * 添加产品参数 */ export async function addCmsProductParameter(data: CmsProductParameter) { - const res = await request.post>( - SERVER_API_URL + '/cms/cms-product-parameter', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); + const res = await request.post>( + '/cms/cms-product-parameter', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); } /** * 修改产品参数 */ export async function updateCmsProductParameter(data: CmsProductParameter) { - const res = await request.put>( - SERVER_API_URL + '/cms/cms-product-parameter', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); + const res = await request.put>( + '/cms/cms-product-parameter', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); } /** * 删除产品参数 */ export async function removeCmsProductParameter(id?: number) { - const res = await request.delete>( - SERVER_API_URL + '/cms/cms-product-parameter/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); + const res = await request.del>( + '/cms/cms-product-parameter/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); } /** * 批量删除产品参数 */ export async function removeBatchCmsProductParameter(data: (number | undefined)[]) { - const res = await request.delete>( - SERVER_API_URL + '/cms/cms-product-parameter/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; + const res = await request.del>( + '/cms/cms-product-parameter/batch', + { + data } - return Promise.reject(new Error(res.data.message)); + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); } /** * 根据id查询产品参数 */ export async function getCmsProductParameter(id: number) { - const res = await request.get>( - SERVER_API_URL + '/cms/cms-product-parameter/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); + const res = await request.get>( + '/cms/cms-product-parameter/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); } diff --git a/api/cms/cmsProductSpec/index.ts b/api/cms/cmsProductSpec/index.ts index d4869db..97fc1d8 100644 --- a/api/cms/cmsProductSpec/index.ts +++ b/api/cms/cmsProductSpec/index.ts @@ -1,22 +1,22 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { CmsProductSpec, CmsProductSpecParam } from './model'; -import { MODULES_API_URL } from '@/config'; + /** * 分页查询规格 */ export async function pageCmsProductSpec(params: CmsProductSpecParam) { const res = await request.get>>( - MODULES_API_URL + '/cms/cms-product-spec/page', + '/cms/cms-product-spec/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -24,15 +24,15 @@ export async function pageCmsProductSpec(params: CmsProductSpecParam) { */ export async function listCmsProductSpec(params?: CmsProductSpecParam) { const res = await request.get>( - MODULES_API_URL + '/cms/cms-product-spec', + '/cms/cms-product-spec', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -40,13 +40,13 @@ export async function listCmsProductSpec(params?: CmsProductSpecParam) { */ export async function addCmsProductSpec(data: CmsProductSpec) { const res = await request.post>( - MODULES_API_URL + '/cms/cms-product-spec', + '/cms/cms-product-spec', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -54,42 +54,42 @@ export async function addCmsProductSpec(data: CmsProductSpec) { */ export async function updateCmsProductSpec(data: CmsProductSpec) { const res = await request.put>( - MODULES_API_URL + '/cms/cms-product-spec', + '/cms/cms-product-spec', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除规格 */ export async function removeCmsProductSpec(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/cms-product-spec/' + id + const res = await request.del>( + '/cms/cms-product-spec/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除规格 */ export async function removeBatchCmsProductSpec(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/cms-product-spec/batch', + const res = await request.del>( + '/cms/cms-product-spec/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -97,10 +97,10 @@ export async function removeBatchCmsProductSpec(data: (number | undefined)[]) { */ export async function getCmsProductSpec(id: number) { const res = await request.get>( - MODULES_API_URL + '/cms/cms-product-spec/' + id + '/cms/cms-product-spec/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/cms/cmsProductSpecValue/index.ts b/api/cms/cmsProductSpecValue/index.ts index b683f8b..3034a36 100644 --- a/api/cms/cmsProductSpecValue/index.ts +++ b/api/cms/cmsProductSpecValue/index.ts @@ -1,22 +1,22 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { CmsProductSpecValue, CmsProductSpecValueParam } from './model'; -import { MODULES_API_URL } from '@/config'; + /** * 分页查询规格值 */ export async function pageCmsProductSpecValue(params: CmsProductSpecValueParam) { const res = await request.get>>( - MODULES_API_URL + '/cms/cms-product-spec-value/page', + '/cms/cms-product-spec-value/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -24,15 +24,15 @@ export async function pageCmsProductSpecValue(params: CmsProductSpecValueParam) */ export async function listCmsProductSpecValue(params?: CmsProductSpecValueParam) { const res = await request.get>( - MODULES_API_URL + '/cms/cms-product-spec-value', + '/cms/cms-product-spec-value', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -40,13 +40,13 @@ export async function listCmsProductSpecValue(params?: CmsProductSpecValueParam) */ export async function addCmsProductSpecValue(data: CmsProductSpecValue) { const res = await request.post>( - MODULES_API_URL + '/cms/cms-product-spec-value', + '/cms/cms-product-spec-value', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -54,42 +54,42 @@ export async function addCmsProductSpecValue(data: CmsProductSpecValue) { */ export async function updateCmsProductSpecValue(data: CmsProductSpecValue) { const res = await request.put>( - MODULES_API_URL + '/cms/cms-product-spec-value', + '/cms/cms-product-spec-value', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除规格值 */ export async function removeCmsProductSpecValue(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/cms-product-spec-value/' + id + const res = await request.del>( + '/cms/cms-product-spec-value/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除规格值 */ export async function removeBatchCmsProductSpecValue(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/cms-product-spec-value/batch', + const res = await request.del>( + '/cms/cms-product-spec-value/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -97,10 +97,10 @@ export async function removeBatchCmsProductSpecValue(data: (number | undefined)[ */ export async function getCmsProductSpecValue(id: number) { const res = await request.get>( - MODULES_API_URL + '/cms/cms-product-spec-value/' + id + '/cms/cms-product-spec-value/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/cms/cmsProductUrl/index.ts b/api/cms/cmsProductUrl/index.ts index 3ff0730..1deb799 100644 --- a/api/cms/cmsProductUrl/index.ts +++ b/api/cms/cmsProductUrl/index.ts @@ -1,22 +1,22 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { CmsProductUrl, CmsProductUrlParam } from './model'; -import { MODULES_API_URL } from '@/config'; +import request from '~/utils/request'; +import type {ApiResult, PageResult} from '@/api'; +import type {CmsProductUrl, CmsProductUrlParam} from './model'; + /** * 分页查询域名 */ export async function pageCmsProductUrl(params: CmsProductUrlParam) { const res = await request.get>>( - MODULES_API_URL + '/cms/cms-product-url/page', + '/cms/cms-product-url/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -24,15 +24,15 @@ export async function pageCmsProductUrl(params: CmsProductUrlParam) { */ export async function listCmsProductUrl(params?: CmsProductUrlParam) { const res = await request.get>( - MODULES_API_URL + '/cms/cms-product-url', + '/cms/cms-product-url', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -40,13 +40,13 @@ export async function listCmsProductUrl(params?: CmsProductUrlParam) { */ export async function addCmsProductUrl(data: CmsProductUrl) { const res = await request.post>( - MODULES_API_URL + '/cms/cms-product-url', + '/cms/cms-product-url', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -54,42 +54,42 @@ export async function addCmsProductUrl(data: CmsProductUrl) { */ export async function updateCmsProductUrl(data: CmsProductUrl) { const res = await request.put>( - MODULES_API_URL + '/cms/cms-product-url', + '/cms/cms-product-url', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除域名 */ export async function removeCmsProductUrl(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/cms-product-url/' + id + const res = await request.del>( + '/cms/cms-product-url/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除域名 */ export async function removeBatchCmsProductUrl(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/cms-product-url/batch', + const res = await request.del>( + '/cms/cms-product-url/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -97,10 +97,10 @@ export async function removeBatchCmsProductUrl(data: (number | undefined)[]) { */ export async function getCmsProductUrl(id: number) { const res = await request.get>( - MODULES_API_URL + '/cms/cms-product-url/' + id + '/cms/cms-product-url/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/cms/cmsProductUrl/model/index.ts b/api/cms/cmsProductUrl/model/index.ts index af842a7..92e5ddf 100644 --- a/api/cms/cmsProductUrl/model/index.ts +++ b/api/cms/cmsProductUrl/model/index.ts @@ -12,14 +12,14 @@ export interface CmsProductUrl { type?: string; // 域名 domain?: string; - // 二维码 - qrcode?: string; // 账号 account?: string; // 密码 password?: string; // 商户ID merchantId?: number; + // 二维码 + qrcode?: string; // 备注 comments?: string; // 排序(数字越小越靠前) diff --git a/api/cms/cmsSpec/index.ts b/api/cms/cmsSpec/index.ts new file mode 100644 index 0000000..6fdd058 --- /dev/null +++ b/api/cms/cmsSpec/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsSpec, CmsSpecParam } from './model'; + + +/** + * 分页查询规格 + */ +export async function pageCmsSpec(params: CmsSpecParam) { + const res = await request.get>>( + '/cms/cms-spec/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询规格列表 + */ +export async function listCmsSpec(params?: CmsSpecParam) { + const res = await request.get>( + '/cms/cms-spec', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加规格 + */ +export async function addCmsSpec(data: CmsSpec) { + const res = await request.post>( + '/cms/cms-spec', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改规格 + */ +export async function updateCmsSpec(data: CmsSpec) { + const res = await request.put>( + '/cms/cms-spec', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除规格 + */ +export async function removeCmsSpec(id?: number) { + const res = await request.del>( + '/cms/cms-spec/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除规格 + */ +export async function removeBatchCmsSpec(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-spec/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询规格 + */ +export async function getCmsSpec(id: number) { + const res = await request.get>( + '/cms/cms-spec/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/shop/spec/model/index.ts b/api/cms/cmsSpec/model/index.ts similarity index 87% rename from api/shop/spec/model/index.ts rename to api/cms/cmsSpec/model/index.ts index 800c169..3a7913a 100644 --- a/api/shop/spec/model/index.ts +++ b/api/cms/cmsSpec/model/index.ts @@ -3,7 +3,7 @@ import type { PageParam } from '@/api'; /** * 规格 */ -export interface Spec { +export interface CmsSpec { // 规格ID specId?: number; // 规格名称 @@ -29,7 +29,7 @@ export interface Spec { /** * 规格搜索条件 */ -export interface SpecParam extends PageParam { +export interface CmsSpecParam extends PageParam { specId?: number; keywords?: string; } diff --git a/api/cms/cmsSpecValue/index.ts b/api/cms/cmsSpecValue/index.ts new file mode 100644 index 0000000..337ea46 --- /dev/null +++ b/api/cms/cmsSpecValue/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsSpecValue, CmsSpecValueParam } from './model'; + + +/** + * 分页查询规格值 + */ +export async function pageCmsSpecValue(params: CmsSpecValueParam) { + const res = await request.get>>( + '/cms/cms-spec-value/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询规格值列表 + */ +export async function listCmsSpecValue(params?: CmsSpecValueParam) { + const res = await request.get>( + '/cms/cms-spec-value', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加规格值 + */ +export async function addCmsSpecValue(data: CmsSpecValue) { + const res = await request.post>( + '/cms/cms-spec-value', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改规格值 + */ +export async function updateCmsSpecValue(data: CmsSpecValue) { + const res = await request.put>( + '/cms/cms-spec-value', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除规格值 + */ +export async function removeCmsSpecValue(id?: number) { + const res = await request.del>( + '/cms/cms-spec-value/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除规格值 + */ +export async function removeBatchCmsSpecValue(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-spec-value/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询规格值 + */ +export async function getCmsSpecValue(id: number) { + const res = await request.get>( + '/cms/cms-spec-value/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/shop/specValue/model/index.ts b/api/cms/cmsSpecValue/model/index.ts similarity index 60% rename from api/shop/specValue/model/index.ts rename to api/cms/cmsSpecValue/model/index.ts index eb1e717..697279d 100644 --- a/api/shop/specValue/model/index.ts +++ b/api/cms/cmsSpecValue/model/index.ts @@ -3,31 +3,27 @@ import type { PageParam } from '@/api'; /** * 规格值 */ -export interface SpecValue { +export interface CmsSpecValue { // 规格值ID specValueId?: number; - // 规格值 - specValue?: string; // 规格组ID specId?: number; - // 描述 + // 规格值 + specValue?: string; + // 备注 comments?: string; - // 排序 + // 排序号 sortNumber?: number; // 租户id tenantId?: number; - key?: string; - label?: string; - value?: string; - detail?: [string]; - specName?: string; + // 创建时间 + createTime?: string; } /** * 规格值搜索条件 */ -export interface SpecValueParam extends PageParam { +export interface CmsSpecValueParam extends PageParam { specValueId?: number; - specId?: number; keywords?: string; } diff --git a/api/cms/cmsWebsite/index.ts b/api/cms/cmsWebsite/index.ts new file mode 100644 index 0000000..1dd0c25 --- /dev/null +++ b/api/cms/cmsWebsite/index.ts @@ -0,0 +1,132 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsWebsite, CmsWebsiteParam } from './model'; + + +/** + * 分页查询网站信息记录表 + */ +export async function pageCmsWebsite(params: CmsWebsiteParam) { + const res = await request.get>>( + '/cms/cms-website/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询网站信息记录表列表 + */ +export async function listCmsWebsite(params?: CmsWebsiteParam) { + const res = await request.get>( + '/cms/cms-website', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加网站信息记录表 + */ +export async function addCmsWebsite(data: CmsWebsite) { + const res = await request.post>( + '/cms/cms-website', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改网站信息记录表 + */ +export async function updateCmsWebsite(data: CmsWebsite) { + const res = await request.put>( + '/cms/cms-website', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除网站信息记录表 + */ +export async function removeCmsWebsite(id?: number) { + const res = await request.del>( + '/cms/cms-website/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除网站信息记录表 + */ +export async function removeBatchCmsWebsite(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-website/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询网站信息记录表 + */ +export async function getCmsWebsite(id: number) { + const res = await request.get>( + '/cms/cms-website/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 清除缓存 + */ +export async function removeSiteInfoCache(key?: string) { + const res = await request.del>( + '/cms/cms-website/clearSiteInfo/' + key + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +export async function pageCmsWebsiteAll(params: CmsWebsiteParam) { + const res = await request.get>>( + 'https://cms-api.websoft.top/api/cms/cms-website/pageAll', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsWebsite/model/index.ts b/api/cms/cmsWebsite/model/index.ts new file mode 100644 index 0000000..20d45f3 --- /dev/null +++ b/api/cms/cmsWebsite/model/index.ts @@ -0,0 +1,108 @@ +import type { PageParam } from '@/api'; +import type {CmsNavigation} from "~/api/cms/cmsNavigation/model"; + +/** + * 网站信息记录表 + */ +export interface CmsWebsite { + // 站点ID + websiteId?: number; + // 网站名称 + websiteName?: string; + // 网站标识 + websiteCode?: string; + // 网站LOGO + websiteIcon?: string; + // 网站LOGO + websiteLogo?: string; + // 网站LOGO(深色模式) + websiteDarkLogo?: string; + // 网站类型 + websiteType?: string; + // 网站关键词 + keywords?: string; + // 域名前缀 + prefix?: string; + // 绑定域名 + domain?: string; + // 全局样式 + style?: string; + // 后台管理地址 + adminUrl?: string; + // 应用版本 10免费版 20专业版 30永久授权 + version?: number; + // 服务到期时间 + expirationTime?: string; + // 模版ID + templateId?: number; + // 行业类型(父级) + industryParent?: string; + // 行业类型(子级) + industryChild?: string; + // 企业ID + companyId?: number; + // 所在国家 + country?: string; + // 所在省份 + province?: string; + // 所在城市 + city?: string; + // 所在辖区 + region?: string; + // 经度 + longitude?: string; + // 纬度 + latitude?: string; + // 街道地址 + address?: string; + // 联系电话 + phone?: string; + // 电子邮箱 + email?: string; + // ICP备案号 + icpNo?: string; + // 公安备案 + policeNo?: string; + // 备注 + comments?: string; + // 是否推荐 + recommend?: number; + // 运行状态 + running?: number; + // 状态 0未开通 1运行中 2维护中 3已关闭 4已欠费停机 5违规关停 + status?: number; + // 维护说明 + statusText?: string; + // 关闭说明 + statusClose?: string; + // 状态图标 + statusIcon?: string; + // 全局样式 + styles?: string; + // 排序号 + sortNumber?: number; + // 用户ID + userId?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 修改时间 + updateTime?: string; + // 网站配置 + config?: any; + topNavs?: CmsNavigation[]; + bottomNavs?: CmsNavigation[]; + loginUser?: any; +} + +/** + * 网站信息记录表搜索条件 + */ +export interface CmsWebsiteParam extends PageParam { + websiteId?: number; + status?: number; + keywords?: string; +} diff --git a/api/cms/cmsWebsiteField/index.ts b/api/cms/cmsWebsiteField/index.ts new file mode 100644 index 0000000..86602a6 --- /dev/null +++ b/api/cms/cmsWebsiteField/index.ts @@ -0,0 +1,149 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type {CmsWebsiteField, CmsWebsiteFieldParam, Config} from './model'; + +const config = useRuntimeConfig(); + +/** + * 分页查询应用参数 + */ +export async function pageCmsWebsiteField(params: CmsWebsiteFieldParam) { + const res = await request.get>>( + '/cms/cms-website-field/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询应用参数列表 + */ +export async function listCmsWebsiteField(params?: CmsWebsiteFieldParam) { + const res = await request.get>( + '/cms/cms-website-field', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加应用参数 + */ +export async function addCmsWebsiteField(data: CmsWebsiteField) { + const res = await request.post>( + '/cms/cms-website-field', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改应用参数 + */ +export async function updateCmsWebsiteField(data: CmsWebsiteField) { + const res = await request.put>( + '/cms/cms-website-field', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除应用参数 + */ +export async function removeCmsWebsiteField(id?: number) { + const res = await request.del>( + '/cms/cms-website-field/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除应用参数 + */ +export async function removeBatchCmsWebsiteField(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/cms-website-field/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询应用参数 + */ +export async function getCmsWebsiteField(id: number) { + const res = await request.get>( + '/cms/cms-website-field/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 恢复项目参数 + */ +export async function undeleteWebsiteField(id?: number) { + const res = await request.del>( + '/cms/website-field/undelete/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + + +/** + * 查询项目参数列表 + */ +export async function configWebsiteField(params?: CmsWebsiteFieldParam) { + const res = await request.get>( + '/cms/cms-website-field/config', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} +/** + * 根据id查询项目参数 + */ +export async function getWebsiteField(id: number) { + const res = await request.get>( + '/cms/cms-website-field/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/cms/cmsWebsiteField/model/index.ts b/api/cms/cmsWebsiteField/model/index.ts new file mode 100644 index 0000000..de48ac8 --- /dev/null +++ b/api/cms/cmsWebsiteField/model/index.ts @@ -0,0 +1,56 @@ +import type { PageParam } from '@/api'; + +/** + * 应用参数 + */ +export interface CmsWebsiteField { + // 自增ID + id?: number; + // 类型,0文本 1图片 2其他 + type?: number; + // 名称 + name?: string; + // 默认值 + defaultValue?: string; + // 可修改的值 [on|off] + modifyRange?: string; + // 备注 + comments?: string; + // css样式 + style?: string; + // 名称 + value?: string; + // 排序(数字越小越靠前) + sortNumber?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; +} + +/** + * 应用参数搜索条件 + */ +export interface CmsWebsiteFieldParam extends PageParam { + id?: number; + name?: string; + keywords?: string; +} + +export interface Config { + siteName?: string; + siteLogo?: string; + domain?: string; + icpNo?: string; + copyright?: string; + loginBgImg?: string; + address?: string; + tel?: string; + kefu2?: string; + kefu1?: string; + email?: string; + loginTitle?: string; + sysLogo?: string; +} diff --git a/api/cms/design/index.ts b/api/cms/design/index.ts deleted file mode 100644 index 910a4f8..0000000 --- a/api/cms/design/index.ts +++ /dev/null @@ -1,143 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Design, DesignParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询页面设计 - */ -export async function pageDesign(params: DesignParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/design/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询页面设计列表 - */ -export async function listDesign(params?: DesignParam) { - const res = await request.get>( - MODULES_API_URL + '/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 addDesign(data: Design) { - const res = await request.post>( - MODULES_API_URL + '/cms/design', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改页面设计 - */ -export async function updateDesign(data: Design) { - const res = await request.put>( - MODULES_API_URL + '/cms/design', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除页面设计 - */ -export async function removeDesign(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/design/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除页面设计 - */ -export async function removeBatchDesign(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/design/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateDesignStatus(designId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/design/status', - { - designId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询页面设计 - */ -export async function getDesign(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/design/' + 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>( - MODULES_API_URL + '/cms/design/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/docs-book/index.ts b/api/cms/docs-book/index.ts deleted file mode 100644 index b3e4937..0000000 --- a/api/cms/docs-book/index.ts +++ /dev/null @@ -1,143 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DocsBook, DocsBookParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询书籍 - */ -export async function pageDocsBook(params: DocsBookParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/docs-book/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询书籍列表 - */ -export async function listDocsBook(params?: DocsBookParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/docs-book', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加书籍 - */ -export async function addDocsBook(data: DocsBook) { - const res = await request.post>( - MODULES_API_URL + '/cms/docs-book', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改书籍 - */ -export async function updateDocsBook(data: DocsBook) { - const res = await request.put>( - MODULES_API_URL + '/cms/docs-book', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除书籍 - */ -export async function removeDocsBook(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/docs-book/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除书籍 - */ -export async function removeBatchDocsBook(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/docs-book/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateDocsBookStatus(docsId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/docs-book/status', - { - docsId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询书籍 - */ -export async function getDocsBook(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/docs-book/' + 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>( - MODULES_API_URL + '/cms/docs-book/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/docs-book/model/index.ts b/api/cms/docs-book/model/index.ts deleted file mode 100644 index ddfeff0..0000000 --- a/api/cms/docs-book/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 书籍内容 - */ -export interface DocsBook { - // 自增ID - bookId?: number; - // 名称 - name?: string; - // 书籍标识 - code?: string; - // 封面图 - photo?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - // 状态 - status?: number; - // 创建时间 - createTime?: string; -} - -/** - * 书籍搜索条件 - */ -export interface DocsBookParam extends PageParam { - bookId?: number; - docsId?: number; -} diff --git a/api/cms/docs-content/index.ts b/api/cms/docs-content/index.ts deleted file mode 100644 index f263076..0000000 --- a/api/cms/docs-content/index.ts +++ /dev/null @@ -1,146 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DocsContent, DocsContentParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询文档 - */ -export async function pageDocsContent(params: DocsContentParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/docs-content/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询文档列表 - */ -export async function listDocsContent(params?: DocsContentParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/docs-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 addDocsContent(data: DocsContent) { - const res = await request.post>( - MODULES_API_URL + '/cms/docs-content', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改文档 - */ -export async function updateDocsContent(data: DocsContent) { - const res = await request.put>( - MODULES_API_URL + '/cms/docs-content', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除文档 - */ -export async function removeDocsContent(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/docs-content/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除文档 - */ -export async function removeBatchDocsContent(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/docs-content/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateDocsContentStatus( - docsId?: number, - status?: number -) { - const res = await request.put>( - MODULES_API_URL + '/cms/docs-content/status', - { - docsId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询文档 - */ -export async function getDocsContent(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/docs-content/' + 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>( - MODULES_API_URL + '/cms/docs-content/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/docs-content/model/index.ts b/api/cms/docs-content/model/index.ts deleted file mode 100644 index 418108b..0000000 --- a/api/cms/docs-content/model/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 文档内容 - */ -export interface DocsContent { - // 自增ID - id?: number; - // 文档内容id - docsId?: number; - // 文档内容 - content?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - // 状态 - status?: number; - // 创建时间 - createTime?: string; - // 更新时间 - updateTime?: string; - // - key?: number; - // - value?: number; -} - -/** - * 文档内容搜索条件 - */ -export interface DocsContentParam extends PageParam { - id?: number; - docsId?: number; - content?: string; -} diff --git a/api/cms/docs/index.ts b/api/cms/docs/index.ts deleted file mode 100644 index 6036e90..0000000 --- a/api/cms/docs/index.ts +++ /dev/null @@ -1,143 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Docs, DocsParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询文档 - */ -export async function pageDocs(params: DocsParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/docs/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询文档列表 - */ -export async function listDocs(params?: DocsParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/docs', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加文档 - */ -export async function addDocs(data: Docs) { - const res = await request.post>( - MODULES_API_URL + '/cms/docs', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改文档 - */ -export async function updateDocs(data: Docs) { - const res = await request.put>( - MODULES_API_URL + '/cms/docs', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除文档 - */ -export async function removeDocs(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/docs/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除文档 - */ -export async function removeBatchDocs(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/docs/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateDocsStatus(docsId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/docs/status', - { - docsId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询文档 - */ -export async function getDocs(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/docs/' + 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>( - MODULES_API_URL + '/cms/docs/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/docs/model/index.ts b/api/cms/docs/model/index.ts deleted file mode 100644 index b1c1e7b..0000000 --- a/api/cms/docs/model/index.ts +++ /dev/null @@ -1,64 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 文档 - */ -export interface Docs { - // 文档id - docsId?: number; - // 书籍ID - bookId?: number; - // 书籍标识 - code?: string; - // 文档标题 - title?: string; - // 上级分类 - parentId?: number; - // 上级分类名称 - parentName?: string; - // 文档内容 - content?: string; - // 虚拟阅读量 - virtualViews?: string; - // 实际阅读量 - actualViews?: string; - // 用户ID - userId?: string; - // 用户昵称 - nickname?: string; - // 账号 - username?: string; - // 用户头像 - userAvatar?: string; - // 所属门店ID - shopId?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - // 状态 - status?: number; - // 创建时间 - createTime?: string; - // 更新时间 - updateTime?: string; - key?: number; - value?: number; - isUpdate?: boolean; -} - -/** - * 文档搜索条件 - */ -export interface DocsParam extends PageParam { - bookId?: number; - code?: string; - title?: string; - docsId?: number; - categoryId?: string; - status?: string; - sortNumber?: string; - createTime?: string; - username?: string; - nickname?: string; -} diff --git a/api/cms/domain/index.ts b/api/cms/domain/index.ts deleted file mode 100644 index 2af1adb..0000000 --- a/api/cms/domain/index.ts +++ /dev/null @@ -1,153 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Domain, DomainParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询网站域名 - */ -export async function pageDomain(params: DomainParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/domain/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询网站域名列表 - */ -export async function listDomain(params?: DomainParam) { - const res = await request.get>( - MODULES_API_URL + '/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 addDomain(data: Domain) { - const res = await request.post>( - MODULES_API_URL + '/cms/domain', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改网站域名 - */ -export async function updateDomain(data: Domain) { - const res = await request.put>( - MODULES_API_URL + '/cms/domain', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除网站域名 - */ -export async function removeDomain(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/domain/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除网站域名 - */ -export async function removeBatchDomain(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/domain/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateDomainStatus(docsId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/domain/status', - { - docsId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询网站域名 - */ -export async function getDomain(id: number) { - const res = await request.get>( - MODULES_API_URL + '/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>( - MODULES_API_URL + '/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>( - MODULES_API_URL + '/cms/domain/resolvable/' + id - ); - if (res.data.code === 0 && res.data) { - return res.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/domain/model/index.ts b/api/cms/domain/model/index.ts deleted file mode 100644 index 4278f6e..0000000 --- a/api/cms/domain/model/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 网站域名 - */ -export interface Domain { - // 自增ID - id?: number; - // 域名 - domain?: string; - // 主机记录 - hostName?: string; - // 主机记录值 - hostValue?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - // 状态 - status?: number; - // 创建时间 - createTime?: string; - // 租户ID - tenantId?: number; -} - -/** - * 网站域名搜索条件 - */ -export interface DomainParam extends PageParam { - id?: number; - domain?: string; -} diff --git a/api/cms/form-record/index.ts b/api/cms/form-record/index.ts deleted file mode 100644 index 2df2910..0000000 --- a/api/cms/form-record/index.ts +++ /dev/null @@ -1,126 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { FormRecord, FormRecordParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询表单设计 - */ -export async function pageFormRecord(params: FormRecordParam) { - const res = await request.get>>( - MODULES_API_URL + '/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 listFormRecord(params?: FormRecordParam) { - const res = await request.get>( - MODULES_API_URL + '/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 addFormRecord(data: FormRecord) { - const res = await request.post>( - MODULES_API_URL + '/cms/form-record', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改表单设计 - */ -export async function updateFormRecord(data: FormRecord) { - const res = await request.put>( - MODULES_API_URL + '/cms/form-record', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除表单设计 - */ -export async function removeFormRecord(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/form-record/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除表单设计 - */ -export async function removeBatchFormRecord(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/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 getFormRecord(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/form-record/' + 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>( - MODULES_API_URL + '/cms/form-record/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/form-record/model/index.ts b/api/cms/form-record/model/index.ts deleted file mode 100644 index c8aa781..0000000 --- a/api/cms/form-record/model/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 表单数据 - */ -export interface FormRecord { - formRecordId?: number; - formId?: number; - name?: string; - formData?: string; - formObj?: Object; - userId?: number; - sortNumber?: number; - comments?: string; - status?: number; - createTime?: string; - layout?: string; -} - -/** - * 搜索条件 - */ -export interface FormRecordParam extends PageParam { - formRecordId?: string; - formId?: number; - phone?: string; - name?: number; -} diff --git a/api/cms/form/index.ts b/api/cms/form/index.ts deleted file mode 100644 index 5f69d24..0000000 --- a/api/cms/form/index.ts +++ /dev/null @@ -1,143 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Form, FormParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询表单设计 - */ -export async function pageForm(params: FormParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/form/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询表单设计列表 - */ -export async function listForm(params?: FormParam) { - const res = await request.get>( - MODULES_API_URL + '/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 addForm(data: Form) { - const res = await request.post>( - MODULES_API_URL + '/cms/form', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改表单设计 - */ -export async function updateForm(data: Form) { - const res = await request.put>( - MODULES_API_URL + '/cms/form', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除表单设计 - */ -export async function removeForm(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/form/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除表单设计 - */ -export async function removeBatchForm(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/form/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateFormStatus(formId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/form/status', - { - formId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询表单设计 - */ -export async function getForm(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/form/' + 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>( - MODULES_API_URL + '/cms/form/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/form/model/index.ts b/api/cms/form/model/index.ts deleted file mode 100644 index e82aaa6..0000000 --- a/api/cms/form/model/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 表单设计 - */ -export interface Form { - formId?: number; - name?: string; - photo?: string; - background?: string; - video?: string; - submitNumber?: number; - layout?: string; - userId?: number; - sortNumber?: number; - comments?: string; - status?: number; - createTime?: string; - hidePhoto?: any; - hideBackground?: number; - hideVideo?: number; - opacity?: number; - data?: any[]; - clearCache?: number; -} - -/** - * 搜索条件 - */ -export interface FormParam extends PageParam { - formId?: number; - name?: number; -} diff --git a/api/cms/link/index.ts b/api/cms/link/index.ts index bf50f6d..e604d17 100644 --- a/api/cms/link/index.ts +++ b/api/cms/link/index.ts @@ -1,22 +1,22 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Link, LinkParam } from './model'; -import { MODULES_API_URL } from '~/config'; + /** * 分页查询链接 */ export async function pageLink(params: LinkParam) { const res = await request.get>>( - MODULES_API_URL + '/oa/link/page', + '/oa/link/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -24,15 +24,15 @@ export async function pageLink(params: LinkParam) { */ export async function listLink(params?: LinkParam) { const res = await request.get>( - MODULES_API_URL + '/oa/link', + '/oa/link', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -40,13 +40,13 @@ export async function listLink(params?: LinkParam) { */ export async function addLink(data: Link) { const res = await request.post>( - MODULES_API_URL + '/oa/link', + '/oa/link', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -54,42 +54,42 @@ export async function addLink(data: Link) { */ export async function updateLink(data: Link) { const res = await request.put>( - MODULES_API_URL + '/oa/link', + '/oa/link', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除链接 */ export async function removeLink(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/link/' + id + const res = await request.del>( + '/oa/link/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除链接 */ export async function removeBatchLink(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/link/batch', + const res = await request.del>( + '/oa/link/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -101,13 +101,13 @@ export async function checkExistence( id?: number ) { const res = await request.get>( - MODULES_API_URL + '/oa/link/existence', + '/oa/link/existence', { params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/cms/link/model/index.ts b/api/cms/link/model/index.ts index 7d7f821..40f5988 100644 --- a/api/cms/link/model/index.ts +++ b/api/cms/link/model/index.ts @@ -10,6 +10,7 @@ export interface Link { url?: string; linkType?: string; appId?: number; + categoryId?: number; userId?: number; comments?: string; recommend?: number; @@ -25,5 +26,6 @@ export interface Link { export interface LinkParam extends PageParam { id?: number; linkType?: string; + categoryId?: number; name?: string; } diff --git a/api/cms/mp-menu/index.ts b/api/cms/mp-menu/index.ts deleted file mode 100644 index fe8d53e..0000000 --- a/api/cms/mp-menu/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { MpMenu, MpMenuParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询小程序端菜单 - */ -export async function pageMpMenu(params: MpMenuParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/mp-menu/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询小程序端菜单列表 - */ -export async function listMpMenu(params?: MpMenuParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp-menu', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加小程序端菜单 - */ -export async function addMpMenu(data: MpMenu) { - const res = await request.post>( - MODULES_API_URL + '/cms/mp-menu', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改小程序端菜单 - */ -export async function updateMpMenu(data: MpMenu) { - const res = await request.put>( - MODULES_API_URL + '/cms/mp-menu', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除小程序端菜单 - */ -export async function removeMpMenu(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-menu/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除小程序端菜单 - */ -export async function removeBatchMpMenu(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-menu/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询小程序端菜单 - */ -export async function getMpMenu(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp-menu/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/mp/index.ts b/api/cms/mp/index.ts deleted file mode 100644 index 7f3ba93..0000000 --- a/api/cms/mp/index.ts +++ /dev/null @@ -1,103 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Mp, MpParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询小程序信息 - */ -export async function pageMp(params: MpParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/mp/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询小程序信息列表 - */ -export async function listMp(params?: MpParam) { - const res = await request.get>(MODULES_API_URL + '/cms/mp', { - params - }); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加小程序信息 - */ -export async function addMp(data: Mp) { - const res = await request.post>( - MODULES_API_URL + '/cms/mp', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改小程序信息 - */ -export async function updateMp(data: Mp) { - const res = await request.put>( - MODULES_API_URL + '/cms/mp', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除小程序信息 - */ -export async function removeMp(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除小程序信息 - */ -export async function removeBatchMp(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询小程序信息 - */ -export async function getMp(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/mpAd/index.ts b/api/cms/mpAd/index.ts deleted file mode 100644 index ab4b468..0000000 --- a/api/cms/mpAd/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { MpAd, MpAdParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询小程序广告位 - */ -export async function pageMpAd(params: MpAdParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/mp-ad/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询小程序广告位列表 - */ -export async function listMpAd(params?: MpAdParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp-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 addMpAd(data: MpAd) { - const res = await request.post>( - MODULES_API_URL + '/cms/mp-ad', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改小程序广告位 - */ -export async function updateMpAd(data: MpAd) { - const res = await request.put>( - MODULES_API_URL + '/cms/mp-ad', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除小程序广告位 - */ -export async function removeMpAd(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-ad/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除小程序广告位 - */ -export async function removeBatchMpAd(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-ad/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询小程序广告位 - */ -export async function getMpAd(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp-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/api/cms/mpField/index.ts b/api/cms/mpField/index.ts deleted file mode 100644 index f3d69a6..0000000 --- a/api/cms/mpField/index.ts +++ /dev/null @@ -1,132 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { MpField, MpFieldParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询小程序配置 - */ -export async function pageMpField(params: MpFieldParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/mp-field/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询小程序配置列表 - */ -export async function listMpField(params?: MpFieldParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp-field', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加小程序配置 - */ -export async function addMpField(data: MpField) { - const res = await request.post>( - MODULES_API_URL + '/cms/mp-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改小程序配置 - */ -export async function updateMpField(data: MpField) { - const res = await request.put>( - MODULES_API_URL + '/cms/mp-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除小程序配置 - */ -export async function removeMpField(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-field/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除小程序配置 - */ -export async function removeBatchMpField(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-field/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询小程序配置 - */ -export async function getMpField(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp-field/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 清除缓存 - */ -export async function removeMpInfoCache(key?: string) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-field/clearMpInfo/' + key - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 恢复项目参数 - */ -export async function undeleteMpField(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-field/undelete/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/mpOfficialMenu/index.ts b/api/cms/mpOfficialMenu/index.ts new file mode 100644 index 0000000..7564e57 --- /dev/null +++ b/api/cms/mpOfficialMenu/index.ts @@ -0,0 +1,106 @@ +import request from '~/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { MpOfficialMenu, MpOfficialMenuParam } from './model'; + + +/** + * 分页查询小程序端菜单 + */ +export async function pageMpOfficialMenu(params: MpOfficialMenuParam) { + const res = await request.get>>( + '/cms/mp-official-menu/page', + { + params + } + ); + if (res.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 查询小程序端菜单列表 + */ +export async function listMpOfficialMenu(params?: MpOfficialMenuParam) { + const res = await request.get>( + '/cms/mp-official-menu', + { + params + } + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 添加小程序端菜单 + */ +export async function addMpOfficialMenu(data: MpOfficialMenu) { + const res = await request.post>( + '/cms/mp-official-menu', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 修改小程序端菜单 + */ +export async function updateMpOfficialMenu(data: MpOfficialMenu) { + const res = await request.put>( + '/cms/mp-official-menu', + data + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 删除小程序端菜单 + */ +export async function removeMpOfficialMenu(id?: number) { + const res = await request.del>( + '/cms/mp-official-menu/' + id + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 批量删除小程序端菜单 + */ +export async function removeBatchMpOfficialMenu(data: (number | undefined)[]) { + const res = await request.del>( + '/cms/mp-official-menu/batch', + { + data + } + ); + if (res.code === 0) { + return res.message; + } + return Promise.reject(new Error(res.message)); +} + +/** + * 根据id查询小程序端菜单 + */ +export async function getMpOfficialMenu(id: number) { + const res = await request.get>( + '/cms/mp-official-menu/' + id + ); + if (res.code === 0 && res.data) { + return res.data; + } + return Promise.reject(new Error(res.message)); +} diff --git a/api/oa/oaAppField/model/index.ts b/api/cms/mpOfficialMenu/model/index.ts similarity index 52% rename from api/oa/oaAppField/model/index.ts rename to api/cms/mpOfficialMenu/model/index.ts index 2949e4e..dc4cd02 100644 --- a/api/oa/oaAppField/model/index.ts +++ b/api/cms/mpOfficialMenu/model/index.ts @@ -1,23 +1,27 @@ import type { PageParam } from '@/api'; /** - * 应用参数 + * 小程序端菜单 */ -export interface OaAppField { - // 自增ID +export interface MpOfficialMenu { + // ID id?: number; - // 应用ID - appId?: number; - // 名称 + // 上级id, 0是顶级 + parentId?: number; + // 菜单名称 name?: string; - // 备注 - comments?: string; + // 类型 + type?: string; + // 菜单值 + key?: string; // 用户ID userId?: number; - // 状态, 0正常, 1删除 - status?: number; // 排序(数字越小越靠前) sortNumber?: number; + // 备注 + comments?: string; + // 状态, 0正常, 1冻结 + status?: number; // 租户id tenantId?: number; // 创建时间 @@ -25,9 +29,9 @@ export interface OaAppField { } /** - * 应用参数搜索条件 + * 小程序端菜单搜索条件 */ -export interface OaAppFieldParam extends PageParam { +export interface MpOfficialMenuParam extends PageParam { id?: number; keywords?: string; } diff --git a/api/cms/mpPages/index.ts b/api/cms/mpPages/index.ts deleted file mode 100644 index fbbf48a..0000000 --- a/api/cms/mpPages/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { MpPages, MpPagesParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询小程序页面 - */ -export async function pageMpPages(params: MpPagesParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/mp-pages/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询小程序页面列表 - */ -export async function listMpPages(params?: MpPagesParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp-pages', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加小程序页面 - */ -export async function addMpPages(data: MpPages) { - const res = await request.post>( - MODULES_API_URL + '/cms/mp-pages', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改小程序页面 - */ -export async function updateMpPages(data: MpPages) { - const res = await request.put>( - MODULES_API_URL + '/cms/mp-pages', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除小程序页面 - */ -export async function removeMpPages(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-pages/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除小程序页面 - */ -export async function removeBatchMpPages(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/mp-pages/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询小程序页面 - */ -export async function getMpPages(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/mp-pages/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/navigation/index.ts b/api/cms/navigation/index.ts deleted file mode 100644 index 16ba277..0000000 --- a/api/cms/navigation/index.ts +++ /dev/null @@ -1,173 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Navigation, NavigationParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询导航 - */ -export async function pageNavigation(params: NavigationParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/navigation/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询导航列表 - */ -export async function listNavigation(params?: NavigationParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/navigation', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加导航 - */ -export async function addNavigation(data: Navigation) { - const res = await request.post>( - MODULES_API_URL + '/cms/navigation', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改导航 - */ -export async function updateNavigation(data: Navigation) { - const res = await request.put>( - MODULES_API_URL + '/cms/navigation', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除导航 - */ -export async function removeNavigation(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/navigation/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除导航 - */ -export async function removeBatchNavigation(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/navigation/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateNavigationStatus(navigationId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/navigation/status', - { - navigationId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询导航 - */ -export async function getNavigation(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/navigation/' + 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>( - MODULES_API_URL + '/cms/navigation/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 树形结构 - * @param params - */ -export async function treeNavigation(params?: NavigationParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/navigation/tree', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据path查询导航 - */ -export async function getNavigationByPath(path: string) { - const res = await request.get>( - MODULES_API_URL + '/cms/navigation/getNavigationByPath/' + path - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/navigation/model/index.ts b/api/cms/navigation/model/index.ts deleted file mode 100644 index ce7c851..0000000 --- a/api/cms/navigation/model/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type {Design} from "~/api/cms/design/model"; - -/** - * 菜单 - */ -export interface Navigation{ - navigationId?: number; - parentId?: number; - title?: string; - path?: string; - icon?: string; - component?: string; - type?: number; - sortNumber?: number; - hide?: number; - permission?: number; - password?: string; - home?: number; - position?: number; - meta?: string; - children?: Navigation[]; - disabled?: boolean; - tenantId?: number; - comments?: string; - status?: number; - pageId?: number; - articleCategoryId?: number; - articleId?: number; - goodsCategoryId?: number; - goodsId?: number; - bookCode?: string; - formId?: number; - pageName?: string; - createTime?: string; - isMpWeixin?: boolean; - target?: string; - layout?: string; - design?: Design; - // 用于面包肖屑 - parentName?: string; - parentPath?: string; - parentStatus?: number; - categoryName?: string; - categoryPath?: string; - currentTitle?: string; - style?: string; - label?: string; - value?: number; -} - -/** - * 菜单搜索参数 - */ -export interface NavigationParam { - title?: string; - path?: string; - authority?: string; - parentId?: number; -} diff --git a/api/cms/website/field/index.ts b/api/cms/website/field/index.ts deleted file mode 100644 index 7a3df7d..0000000 --- a/api/cms/website/field/index.ts +++ /dev/null @@ -1,159 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { - WebsiteField, - WebsiteFieldParam -} from '@/api/cms/website/field/model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 分页查询项目参数 - */ -export async function pageWebsiteField(params: WebsiteFieldParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/website-field/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询项目参数列表 - */ -export async function listWebsiteField(params?: WebsiteFieldParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/website-field', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询项目参数 - */ -export async function getWebsiteField(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/website-field/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加项目参数 - */ -export async function addWebsiteField(data: WebsiteField) { - const res = await request.post>( - MODULES_API_URL + '/cms/website-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改项目参数 - */ -export async function updateWebsiteField(data: WebsiteField) { - const res = await request.put>( - MODULES_API_URL + '/cms/website-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除项目参数 - */ -export async function removeWebsiteField(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/website-field/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除项目参数 - */ -export async function removeBatchWebsiteField(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/website-field/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/cms/website-field/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 undeleteWebsiteField(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/website-field/undelete/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - - -/** - * 查询网站参数(对象形式) - */ -export async function getSiteConfig(params: WebsiteFieldParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/website-field/config', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/website/field/model/index.ts b/api/cms/website/field/model/index.ts deleted file mode 100644 index e48a3d2..0000000 --- a/api/cms/website/field/model/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 网站参数 - */ -export interface WebsiteField { - id?: number; - name?: string; - value?: string; - comments?: string; - userId?: number; - type?: number; - status?: any; - sortNumber?: any; - createTime?: string; - deleted?: number; -} - -// 约定的网站参数名称 -export interface WebsiteParam { - // 网站名称 - site_logo?: string; - // 登录页面标题 - login_name?: string; - // 登录页面的背景图片 - login_bg_img?: string; -} - -// 约定的小程序参数名称 -export interface MpWeixinParam { - // 小程序LOGO - site_logo?: string; - // 我的页面顶部背景图片 - mp_user_top?: string; -} - -/** - * 网站参数搜索条件 - */ -export interface WebsiteFieldParam extends PageParam { - id?: number; - userId?: number; - name?: string; - websiteId?: number; -} diff --git a/api/cms/website/index.ts b/api/cms/website/index.ts deleted file mode 100644 index 831512d..0000000 --- a/api/cms/website/index.ts +++ /dev/null @@ -1,169 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Website, WebsiteParam } from './model'; -import { MODULES_API_URL } from '~/config'; - -/** - * 获取网站信息 - */ -export async function getSiteInfo() { - const res = await request.get>( - MODULES_API_URL + '/cms/website/getSiteInfo' - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 清除缓存 - */ -export async function removeSiteInfoCache(key?: string) { - const res = await request.delete>( - MODULES_API_URL + '/cms/website/clearSiteInfo/' + key - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 分页查询网站 - */ -export async function pageWebsite(params: WebsiteParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/website/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询网站列表 - */ -export async function listWebsite(params?: WebsiteParam) { - const res = await request.get>( - MODULES_API_URL + '/cms/website', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加网站 - */ -export async function addWebsite(data: Website) { - const res = await request.post>( - MODULES_API_URL + '/cms/website', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改网站 - */ -export async function updateWebsite(data: Website) { - const res = await request.put>( - MODULES_API_URL + '/cms/website', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除网站 - */ -export async function removeWebsite(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/website/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除网站 - */ -export async function removeBatchWebsite(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/website/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateWebsiteStatus(websiteId?: number, status?: number) { - const res = await request.put>( - MODULES_API_URL + '/cms/website/status', - { - websiteId, - status - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询网站 - */ -export async function getWebsite(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/website/' + 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>( - MODULES_API_URL + '/cms/website/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/cms/website/model/index.ts b/api/cms/website/model/index.ts deleted file mode 100644 index 64dcb29..0000000 --- a/api/cms/website/model/index.ts +++ /dev/null @@ -1,79 +0,0 @@ -import type { WebsiteField } from '@/api/cms/website/field/model'; -import type {Navigation} from "@/api/cms/navigation/model"; -import type {ArrangeCategory} from "@/api/cms/category/model"; -import type {Link} from "~/api/cms/link/model"; -import type {User} from "~/api/system/user/model"; - -/** - * 菜单 - */ -export interface Website { - websiteId?: number; - websiteName?: string; - websiteCode?: string; - websiteIcon?: string; - websiteLogo?: string; - websiteDarkLogo?: string; - websiteType?: string; - styles?: string; - keywords?: string; - address?: string; - phone?: string; - email?: string; - version?: number; - expirationTime?: string; - templateId?: string; - industryParent?: string; - industryChild?: string; - companyId?: number; - prefix?: string; - domain?: string; - adminUrl?: string; - icpNo?: string; - policeNo?: string; - comments?: string; - sortNumber?: number; - createTime?: string; - disabled?: boolean; - country?: string; - province?: string; - city?: string; - region?: string; - appId?: number; - fields?: WebsiteField[]; - // 状态码 - status?: number; - // 状态名称 - statusName?: string; - // 状态图标 - statusIcon?: string; - // 状态说明 - statusText?: string; - // 关闭原因 - statusClose?: string; - // 跳转按钮文本 - statusBtnText?: string; - // 跳转地址 - statusUrl?: string; - tenantId?: number; - tenantName?: string; - navigations?: Navigation[]; - categoryList?: ArrangeCategory[]; - links?: Link[]; - // 配置信息 - config?: any; - topNavs?: Navigation[]; - bottomNavs?: Navigation[]; - loginUser?: User; -} - -/** - * 菜单搜索参数 - */ -export interface WebsiteParam { - title?: string; - path?: string; - authority?: string; - parentId?: number; - domain?: string; -} diff --git a/api/index.ts b/api/index.ts index 9077748..c3128e8 100644 --- a/api/index.ts +++ b/api/index.ts @@ -55,4 +55,7 @@ export interface PageParam { isExpireTime?: number; showSoldStatus?: boolean; dateTime?: string; + lang?: string; + model?: string; + type?: string; } diff --git a/api/layout/index.ts b/api/layout/index.ts index 947f260..ae9bac4 100644 --- a/api/layout/index.ts +++ b/api/layout/index.ts @@ -1,32 +1,35 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult } from '@/api'; import type { User } from '@/api/system/user/model'; import type { UpdatePasswordParam } from './model'; -import { MODULES_API_URL, SERVER_API_URL } from '~/config'; -import type {Website} from "~/api/cms/website/model"; +import type {CmsWebsite, CmsWebsiteParam} from "~/api/cms/cmsWebsite/model"; /** * 获取网站信息 */ -export async function getSiteInfo() { - const res = await request.get>( - MODULES_API_URL + '/cms/website/getSiteInfo' +export async function getSiteInfo(params: CmsWebsiteParam) { + const res = await request.get>( + '/cms/cms-website/getSiteInfo', + { + params + } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 获取当前登录的用户信息、菜单、权限、角色 */ export async function getUserInfo(): Promise { - const res = await request.get>(SERVER_API_URL + '/auth/user'); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + const config = useRuntimeConfig(); + const res = await request.get>(config.public.apiServer + '/auth/user'); + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -35,12 +38,12 @@ export async function getUserInfo(): Promise { */ export async function getServerTime() { const res = await request.get>( - MODULES_API_URL + '/cms/website/getServerTime' + '/cms/website/getServerTime' ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -49,13 +52,13 @@ export async function getServerTime() { */ export async function getNext7day() { const res = await request.get>( - MODULES_API_URL + '/cms/website/getNext7day' + '/cms/website/getNext7day' ); console.log('res.data.code: ', res.data.code); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -64,7 +67,7 @@ export async function getNext7day() { */ export async function transferToken(url: string): Promise { const res = await request.get>(url); - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -74,11 +77,11 @@ export async function updatePassword( data: UpdatePasswordParam ): Promise { const res = await request.put>( - SERVER_API_URL + '/auth/password', + '/auth/password', data ); - if (res.data.code === 0) { - return res.data.message ?? '修改成功'; + if (res.code === 0) { + return res.message ?? '修改成功'; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/layout/model/index.ts b/api/layout/model/index.ts index 4173044..a3edbc1 100644 --- a/api/layout/model/index.ts +++ b/api/layout/model/index.ts @@ -13,6 +13,9 @@ export interface Layout { backgroundColor?: string; headerStyle?: any; siteNameStyle?: any; + showBanner?: boolean; + // 背景图片 + banner?: string; } /** diff --git a/api/oa/app/field/index.ts b/api/oa/app/field/index.ts deleted file mode 100644 index 864e7b1..0000000 --- a/api/oa/app/field/index.ts +++ /dev/null @@ -1,126 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { AppField, AppFieldParam } from '@/api/oa/app/field/model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询项目参数 - */ -export async function pageAppField(params: AppFieldParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/app-field/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询项目参数列表 - */ -export async function listAppField(params?: AppFieldParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-field', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询项目参数 - */ -export async function getAppField(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-field/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加项目参数 - */ -export async function addAppField(data: AppField) { - const res = await request.post>( - MODULES_API_URL + '/oa/app-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改项目参数 - */ -export async function updateAppField(data: AppField) { - const res = await request.put>( - MODULES_API_URL + '/oa/app-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除项目参数 - */ -export async function removeAppField(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app-field/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除项目参数 - */ -export async function removeBatchAppField(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app-field/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-field/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/app/field/model/index.ts b/api/oa/app/field/model/index.ts deleted file mode 100644 index 788eaf5..0000000 --- a/api/oa/app/field/model/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 项目参数 - */ -export interface AppField { - id?: number; - name?: string; - comments?: string; - userId?: number; - appId?: number; - status?: any; - sortNumber?: any; - createTime?: string; -} - -/** - * 项目参数搜索条件 - */ -export interface AppFieldParam extends PageParam { - id?: number; - userId?: number; - appId?: number; -} diff --git a/api/oa/app/index.ts b/api/oa/app/index.ts deleted file mode 100644 index 022960e..0000000 --- a/api/oa/app/index.ts +++ /dev/null @@ -1,190 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { App, AppParam } from './model/index'; -import { MODULES_API_URL } from '@/config'; - -export async function getCount() { - const res = await request.get(MODULES_API_URL + '/oa/app/data'); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 分页查询应用 - */ -export async function pageApp(params: AppParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/app/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询应用列表 - */ -export async function listApp(params?: AppParam) { - const res = await request.get>(MODULES_API_URL + '/oa/app', { - params - }); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询应用 - */ -export async function getApp(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/app/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加应用 - */ -export async function addApp(data: App) { - const res = await request.post>( - MODULES_API_URL + '/oa/app', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改应用 - */ -export async function updateApp(data: App) { - const res = await request.put>( - MODULES_API_URL + '/oa/app', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除应用 - */ -export async function removeApp(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除应用 - */ -export async function removeBatchApp(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/app/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 getAppSecret(data: App) { - const res = await request.post>( - MODULES_API_URL + '/open/app/getAppSecret', - data - ); - if (res.data.code === 0 && res.data.data) { - return res.data; - } - return Promise.reject(new Error(res.data.message)); -} - -export async function updateAppSecret(data: App) { - const res = await request.post>( - MODULES_API_URL + '/oa/app/updateAppSecret', - data - ); - if (res.data.code === 0 && res.data.data) { - return res.data; - } - return Promise.reject(new Error(res.data.message)); -} - -// 添加菜单 -export async function saveMenu(data: App) { - const res = await request.post>( - MODULES_API_URL + '/oa/app/saveMenu', - data - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -// 添加菜单按钮 -export async function saveAuthority(data: any[]) { - const res = await request.post>( - MODULES_API_URL + '/oa/app/saveAuthority', - data - ); - if (res.data.code === 0) { - return res.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询我的项目信息 - */ -export async function getMyApp() { - const res = await request.get>( - MODULES_API_URL + '/oa/app/getMyApp' - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/app/model/index.ts b/api/oa/app/model/index.ts deleted file mode 100644 index ef6a027..0000000 --- a/api/oa/app/model/index.ts +++ /dev/null @@ -1,166 +0,0 @@ -import type { PageParam } from '@/api'; -import { AppUser } from '@/api/oa/app/user/model'; -import { AppField } from '@/api/oa/app/field/model'; - -/** - * 应用 - */ -export interface App { - // 应用id - appId?: number; - // 应用秘钥 - appSecret?: string; - // 英文名称 - enName?: string; - // 应用名称 - appName?: string; - // 上级id, 0是顶级 - parentId?: number; - // 应用编号 - appCode?: string; - // 应用图标 - appIcon?: string; - appQrcode?: string; - // 应用截图 - images?: string; - // 应用类型 - appType?: string; - appTypeMultiple?: string[]; - // 菜单类型 - menuType?: number; - // 应用地址 - appUrl?: string; - // 后台管理地址 - adminUrl?: string; - // 原型图地址 - prototypeUrl?: string; - // 下载地址 - downUrl?: string; - // 服务器接口地址 - serverUrl?: string; - // 模块接口地址 - modulesUrl?: string; - // 回调地址 - callbackUrl?: string; - // 腾讯文档地址 - gitUrl?: string; - docsUrl?: string; - ipAddress?: string; - fileUrl?: string; - // 应用包名 - packageName?: string; - // 点击次数 - clicks?: string; - // 安装次数 - installs?: string; - // 项目介绍 - content?: string; - // 开发者(个人) - developer?: string; - director?: string; - projectDirector?: string; - salesman?: string; - // 续费金额 - renewMoney?: string; - // 软件定价 - price?: number; - // 评分 - score?: string; - // 星级 - star?: string; - // 菜单组件地址 - component?: string; - // 菜单路由地址 - path?: string; - // 权限标识 - authority?: string; - // 打开位置 - target?: string; - // 是否隐藏, 0否, 1是(仅注册路由不显示在左侧菜单) - hide?: number; - // 菜单侧栏选中的path - active?: string; - // 其它路由元信息 - meta?: string; - // 版本 - edition?: string; - // 版本号 - version?: string; - // 是否已安装 - isUse?: number; - // 排序 - sortNumber?: number; - // 备注 - comments?: any; - tenantName?: string; - companyId?: number; - companyName?: string; - // 租户编号 - tenantCode?: string; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 过期时间 - expirationTime?: string; - // 应用状态 - appStatus?: string; - // 状态 - status?: number; - // 发布者 - userId?: any; - // 发布者昵称 - nickname?: string; - // 子菜单 - children?: App[]; - // 权限树回显选中状态, 0未选中, 1选中 - checked?: boolean; - // - key?: number; - // - value?: number; - // - parentIds?: number[]; - // - openType?: number; - // - search?: any; - // 成员管理 - users?: AppUser[]; - fields?: AppField[]; - // 项目需求 - requirement?: string; - phone?: string; - file1?: string; - file2?: string; - file3?: string; - showCase?: boolean; - showIndex?: boolean; - recommend?: boolean; - categoryName?: string; - title?: string; -} - -/** - * 应用搜索条件 - */ -export interface AppParam extends PageParam { - userId?: number; - appName?: any; - appCode?: string; - appId?: number; - developer?: string; - tenantCode?: string; - parentId?: string; - tenantName?: string; - companyName?: string; - companyId?: number; - status?: number; - nickname?: string; - appStatus?: any; - showCase?: boolean; - showIndex?: boolean; - showExpiration?: boolean; - keywords?: any; - sceneType?: string; -} diff --git a/api/oa/app/renew/index.ts b/api/oa/app/renew/index.ts deleted file mode 100644 index fc0e13f..0000000 --- a/api/oa/app/renew/index.ts +++ /dev/null @@ -1,126 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { AppRenew, AppRenewParam } from '@/api/oa/app/renew/model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询开发成员 - */ -export async function pageAppRenew(params: AppRenewParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/app-renew/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询开发成员列表 - */ -export async function listAppRenew(params?: AppRenewParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-renew', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询开发成员 - */ -export async function getAppRenew(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-renew/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加开发成员 - */ -export async function addAppRenew(data: AppRenew) { - const res = await request.post>( - MODULES_API_URL + '/oa/app-renew', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改开发成员 - */ -export async function updateAppRenew(data: AppRenew) { - const res = await request.put>( - MODULES_API_URL + '/oa/app-renew', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除开发成员 - */ -export async function removeAppRenew(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app-renew/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除开发成员 - */ -export async function removeBatchAppRenew(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app-renew/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-renew/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/app/renew/model/index.ts b/api/oa/app/renew/model/index.ts deleted file mode 100644 index 5bfd819..0000000 --- a/api/oa/app/renew/model/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 开发成员 - */ -export interface AppRenew { - appRenewId?: number; - money?: any; - comments?: string; - startTime?: any; - endTime?: any; - userId?: number; - nickname?: string; - email?: string; - phone?: string; - mobile?: string; - appId?: number; - companyId?: number; - status?: any; - images?: string; - files?: any; - createTime?: string; - editStatus?: boolean; -} - -/** - * 开发成员搜索条件 - */ -export interface AppRenewParam extends PageParam { - userId?: number; - appId?: number; -} - -export interface UserItem { - key: string; - isEdit?: boolean; - number?: string; - name?: string; - department?: string; -} diff --git a/api/oa/app/url/index.ts b/api/oa/app/url/index.ts deleted file mode 100644 index 8bafcf0..0000000 --- a/api/oa/app/url/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { AppUrl, AppUrlParam } from '@/api/oa/app/url/model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询项目域名 - */ -export async function pageAppUrl(params: AppUrlParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/app-url/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询项目域名列表 - */ -export async function listAppUrl(params?: AppUrlParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-url', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询项目域名 - */ -export async function getAppUrl(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-url/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加项目域名 - */ -export async function addAppUrl(data: AppUrl) { - const res = await request.post>( - MODULES_API_URL + '/oa/app-url', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改项目域名 - */ -export async function updateAppUrl(data: AppUrl) { - const res = await request.put>( - MODULES_API_URL + '/oa/app-url', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除项目域名 - */ -export async function removeAppUrl(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app-url/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除项目域名 - */ -export async function removeBatchAppUrl(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app-url/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/app/url/model/index.ts b/api/oa/app/url/model/index.ts deleted file mode 100644 index 01f11c2..0000000 --- a/api/oa/app/url/model/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 项目域名 - */ -export interface AppUrl { - appUrlId?: number; - name?: string; - domain?: string; - account?: string; - password?: string; - comments?: string; - appId?: number; - status?: any; - sortNumber?: any; - createTime?: string; -} - -/** - * 项目域名搜索条件 - */ -export interface AppUrlParam extends PageParam { - id?: number; - userId?: number; - appId?: number; -} diff --git a/api/oa/app/user/index.ts b/api/oa/app/user/index.ts deleted file mode 100644 index 6c3022f..0000000 --- a/api/oa/app/user/index.ts +++ /dev/null @@ -1,126 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { AppUser, AppUserParam } from '@/api/oa/app/user/model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询开发成员 - */ -export async function pageAppUser(params: AppUserParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/app-user/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询开发成员列表 - */ -export async function listAppUser(params?: AppUserParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-user', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询开发成员 - */ -export async function getAppUser(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-user/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加开发成员 - */ -export async function addAppUser(data: AppUser) { - const res = await request.post>( - MODULES_API_URL + '/oa/app-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改开发成员 - */ -export async function updateAppUser(data: AppUser) { - const res = await request.put>( - MODULES_API_URL + '/oa/app-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除开发成员 - */ -export async function removeAppUser(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app-user/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除开发成员 - */ -export async function removeBatchAppUser(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/app-user/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/app-user/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/app/user/model/index.ts b/api/oa/app/user/model/index.ts deleted file mode 100644 index c544c0d..0000000 --- a/api/oa/app/user/model/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 开发成员 - */ -export interface AppUser { - // 开发成员id - appUserId?: number; - role?: number; - userId?: number; - username?: string; - nickname?: string; - avatar?: string; - email?: string; - phone?: string; - mobile?: string; - appId?: number; - status?: string; - createTime?: string; -} - -/** - * 开发成员搜索条件 - */ -export interface AppUserParam extends PageParam { - userId?: number; - appId?: number; - role?: number; -} - -export interface UserItem { - key: string; - isEdit?: boolean; - number?: string; - name?: string; - department?: string; -} diff --git a/api/oa/apply/index.ts b/api/oa/apply/index.ts deleted file mode 100644 index 01effea..0000000 --- a/api/oa/apply/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult } from '@/api'; -import type { Customer } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 申请免费体验 - */ -export async function apply(data: Customer) { - const res = await request.post>( - MODULES_API_URL + '/customer-apply', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/apply/model/index.ts b/api/oa/apply/model/index.ts deleted file mode 100644 index 099dbfd..0000000 --- a/api/oa/apply/model/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 客户 - */ -export interface Customer { - // 客户id - customerId?: number; - // 客户类型 - customerType?: string; - // 客户标识 - customerCode: string; - // 客户名称 - customerName?: string; - // 客户头像 - customerAvatar?: string; - // 座机电话 - customerPhone?: string; - // 手机号码 - customerMobile?: string; - // 联系人 - customerContacts?: string; - // 联系地址 - customerAddress?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - // 创建时间 - createTime?: string; - // 状态 - status?: string; -} - -/** - * 客户搜索条件 - */ -export interface CustomerParam extends PageParam { - customerName?: string; - customerCode?: string; - // 商户编号 - merchantCode?: string; -} diff --git a/api/oa/assets/index.ts b/api/oa/assets/index.ts deleted file mode 100644 index 9a911df..0000000 --- a/api/oa/assets/index.ts +++ /dev/null @@ -1,134 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Assets, AssetsParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -export async function getCount() { - const res = await request.get(MODULES_API_URL + '/oa/assets/data'); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 分页查询资产 - */ -export async function pageAssets(params: AssetsParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/assets/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询资产列表 - */ -export async function listAssets(params?: AssetsParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/assets', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询服务器 - */ -export async function getAssets(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/assets/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加资产 - */ -export async function addAssets(data: Assets) { - const res = await request.post>( - MODULES_API_URL + '/oa/assets', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改资产 - */ -export async function updateAssets(data: Assets) { - const res = await request.put>( - MODULES_API_URL + '/oa/assets', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除资产 - */ -export async function removeAssets(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/assets/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除资产 - */ -export async function removeBatchAssets(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/assets/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/assets/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/assets/model/index.ts b/api/oa/assets/model/index.ts deleted file mode 100644 index 350c94d..0000000 --- a/api/oa/assets/model/index.ts +++ /dev/null @@ -1,89 +0,0 @@ -import type { PageParam } from '@/api'; -import type { User } from '@/api/system/user/model'; -import {AssetsUser} from "@/api/oa/assets/user/model"; - -/** - * 资产 - */ -export interface Assets { - // 资产id - assetsId?: number; - // 资产类型 - type?: string; - // 资产标识 - code: string; - // 资产名称 - name?: string; - // - account?: string; - // - password?: string; - // - panel?: string; - // - panelAccount?: string; - // - panelPassword?: string; - // - configuration?: any; - root?: string; - // - sortNumber?: number; - financeAmount?: any; - financeYears?: any; - financeRenew?: any; - financeCustomerName?: string; - financeCustomerContact?: string; - financeCustomerPhone?: string; - // - brandAccount?: string; - brandPassword?: string; - btSign?: string; - openPort?: any; - comments?: string; - // 所属客户 - customerId?: number; - customerName?: string; - // 品牌 - brand?: string; - // 购买时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 创建时间 - createTime?: string; - // 状态 - status?: string; - userId?: number; - companyId?: number; - companyName?: string; - nickname?: string; - // 可见性类型 - visibility?: string; - // 可见用户ID - userList?: User[]; - systemTotal?: Object; - diskInfo?: Object; - netWork?: Object; - sites?: Object; - users?: AssetsUser[]; -} - -/** - * 资产搜索条件 - */ -export interface AssetsParam extends PageParam { - assetsId?: number; - name?: string; - code?: string; - isExpire?: string; - status?: string; - brand?: string; - customerId?: string; - companyId?: number; - companyName?: string; - userId?: number; - showExpiration?: string; - // 商户编号 - merchantCode?: string; -} diff --git a/api/oa/assets/user/index.ts b/api/oa/assets/user/index.ts deleted file mode 100644 index d1e62fc..0000000 --- a/api/oa/assets/user/index.ts +++ /dev/null @@ -1,129 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { - AssetsUser, - AssetsUserParam -} from '@/api/oa/assets/user/model/index'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询开发成员 - */ -export async function pageAssetsUser(params: AssetsUserParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/assets-user/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询开发成员列表 - */ -export async function listAssetsUser(params?: AssetsUserParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/assets-user', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询开发成员 - */ -export async function getAssetsUser(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/assets-user/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加开发成员 - */ -export async function addAssetsUser(data: AssetsUser) { - const res = await request.post>( - MODULES_API_URL + '/oa/assets-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改开发成员 - */ -export async function updateAssetsUser(data: AssetsUser) { - const res = await request.put>( - MODULES_API_URL + '/oa/assets-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除开发成员 - */ -export async function removeAssetsUser(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/assets-user/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除开发成员 - */ -export async function removeBatchAssetsUser(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/assets-user/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/assets-user/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/assets/user/model/index.ts b/api/oa/assets/user/model/index.ts deleted file mode 100644 index 5e9092e..0000000 --- a/api/oa/assets/user/model/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 开发成员 - */ -export interface AssetsUser { - // 开发成员id - id?: number; - role?: number; - userId?: number; - username?: string; - nickname?: string; - avatar?: string; - email?: string; - phone?: string; - assetsId?: number; - status?: string; - createTime?: string; -} - -/** - * 开发成员搜索条件 - */ -export interface AssetsUserParam extends PageParam { - userId?: number; - assetsId?: number; -} - -export interface UserItem { - key: string; - isEdit?: boolean; - number?: string; - name?: string; - department?: string; -} diff --git a/api/oa/chatgpt/index.ts b/api/oa/chatgpt/index.ts deleted file mode 100644 index b8dfcd1..0000000 --- a/api/oa/chatgpt/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult } from '@/api'; -import { ChatParam } from '@/api/oa/chatgpt/model'; -import {MODULES_API_URL} from "@/config/setting"; - -/** - * 发送 - */ -export async function send(data: ChatParam) { - const res = await request.post>(MODULES_API_URL + '/open/chat/send', data); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 请求openAI - * /open/chat/chat - * 'https://chatgpt.websoft.top/api/open/chat/chat', - */ -export async function chat(data: ChatParam) { - const res = await request.post>( - 'https://chatgpt.websoft.top/api/open/chat/chat', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/chatgpt/model/index.ts b/api/oa/chatgpt/model/index.ts deleted file mode 100644 index abdc126..0000000 --- a/api/oa/chatgpt/model/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * 消息 - */ -export interface Chat { - noticeId?: number; - content?: any; - tenantId?: number; -} - -/** - * 任务搜索条件 - */ -export interface ChatParam { - tenantId?: number; - content?: string; - noticeId?: number; -} diff --git a/api/oa/customer/index.ts b/api/oa/customer/index.ts deleted file mode 100644 index 439feca..0000000 --- a/api/oa/customer/index.ts +++ /dev/null @@ -1,140 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Customer, CustomerParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询客户 - */ -export async function pageCustomer(params: CustomerParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/customer/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询客户列表 - */ -export async function listCustomer(params?: CustomerParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/customer', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询客户 - */ -export async function getCustomer(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/customer/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加客户 - */ -export async function addCustomer(data: Customer) { - const res = await request.post>( - MODULES_API_URL + '/oa/customer', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改客户 - */ -export async function updateCustomer(data: Customer) { - const res = await request.put>( - MODULES_API_URL + '/oa/customer', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量修改客户 - */ -export async function updateBatchCustomer(data: Customer[]) { - const res = await request.put>( - MODULES_API_URL + '/oa/customer/batch', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除客户 - */ -export async function removeCustomer(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/customer/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除客户 - */ -export async function removeBatchCustomer(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/customer/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/customer/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/customer/model/index.ts b/api/oa/customer/model/index.ts deleted file mode 100644 index 722296a..0000000 --- a/api/oa/customer/model/index.ts +++ /dev/null @@ -1,67 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 客户 - */ -export interface Customer { - // 客户id - customerId?: number; - // 客户类型 - customerType?: string; - // 客户来源 - customerSource?: string; - // 客户标识 - customerCode: string; - // 客户名称 - customerName?: string; - // 客户全称 - customerFullName?: string; - // 客户头像 - customerAvatar?: string; - // 座机电话 - customerPhone?: string; - // 手机号码 - customerMobile?: string; - // 联系人 - customerContacts?: string; - // 联系地址 - customerAddress?: string; - customerProvince?: string; - customerCity?: string; - customerRegion?: string; - longitude?: string; - latitude?: string; - // 跟进状态 - progress?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - // 创建时间 - createTime?: string; - // 状态 - status?: string; - // 用户ID - userId?: any; - // 发布者昵称 - nickname?: string; -} - -/** - * 客户搜索条件 - */ -export interface CustomerParam extends PageParam { - customerName?: string; - customerCode?: string; - customerType?: string; - createTimeStart?: string; - createTimeEnd?: string; - customerCategory?: string; - progress?: string; - customerSource?: string; - betweenTime?: any; - userId?: number; - nickname?: string; - // 商户编号 - merchantCode?: string; -} diff --git a/api/oa/link/index.ts b/api/oa/link/index.ts deleted file mode 100644 index ce9827c..0000000 --- a/api/oa/link/index.ts +++ /dev/null @@ -1,113 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Link, LinkParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询链接 - */ -export async function pageLink(params: LinkParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/link/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询链接列表 - */ -export async function listLink(params?: LinkParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/link', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加链接 - */ -export async function addLink(data: Link) { - const res = await request.post>( - MODULES_API_URL + '/oa/link', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改链接 - */ -export async function updateLink(data: Link) { - const res = await request.put>( - MODULES_API_URL + '/oa/link', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除链接 - */ -export async function removeLink(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/link/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除链接 - */ -export async function removeBatchLink(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/link/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/link/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/link/model/index.ts b/api/oa/link/model/index.ts deleted file mode 100644 index 7d7f821..0000000 --- a/api/oa/link/model/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 链接 - */ -export interface Link { - id?: number; - name?: string; - icon?: string; - url?: string; - linkType?: string; - appId?: number; - userId?: number; - comments?: string; - recommend?: number; - sortNumber?: number; - deleted?: number; - status?: number; - createTime?: number; -} - -/** - * 链接搜索条件 - */ -export interface LinkParam extends PageParam { - id?: number; - linkType?: string; - name?: string; -} diff --git a/api/oa/notice/index.ts b/api/oa/notice/index.ts deleted file mode 100644 index 03fb275..0000000 --- a/api/oa/notice/index.ts +++ /dev/null @@ -1,111 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Notice, NoticeParam } from './model/index'; -import { TabsParam } from '@/api/tabs'; - -/** - * 分页查询消息 - */ -export async function pageNotice(params: NoticeParam) { - const res = await request.get>>( - '/oa/notice/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询消息列表 - */ -export async function listNotice(params?: NoticeParam) { - const res = await request.get>('/oa/notice', { - params - }); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询消息 - */ -export async function getNotice(id: number) { - const res = await request.get>('/oa/notice/' + id); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加消息 - */ -export async function addNotice(data: Notice) { - const res = await request.post>('/oa/notice', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改消息 - */ -export async function updateNotice(data: Notice) { - const res = await request.put>('/oa/notice', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除消息 - */ -export async function removeNotice(id?: number) { - const res = await request.delete>('/oa/notice/' + id); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量修改消息 - */ -export async function updateBatchNotices(data: Notice[]) { - const res = await request.put>('/oa/notice/batch', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除消息 - */ -export async function removeBatchNotice(data: (number | undefined)[]) { - const res = await request.delete>('/oa/notice/batch', { - data - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -export async function getCount(params?: TabsParam) { - const res = await request.get>('/oa/notice/count', { - params - }); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/notice/model/index.ts b/api/oa/notice/model/index.ts deleted file mode 100644 index fa7e47b..0000000 --- a/api/oa/notice/model/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 消息 - */ -export interface Notice { - // 消息id - noticeRecordId?: number; - noticeId?: number; - title?: string; - channel?: string; - avatar?: string; - content?: string; - files?: string; - developerId?: number; - userId?: number; - sortNumber?: number; - comments?: string; - status?: number; -} - -/** - * 消息搜索条件 - */ -export interface NoticeParam extends PageParam { - type?: string; - noticeRecordId?: number; - noticeId?: number; - userId?: number; - developerId?: number; - status?: number; -} - -// 查询未读数量 -export interface NnReadNum { - notice?: string; - letter?: number; - todo?: number; - chatGPT?: number; -} diff --git a/api/oa/oaApp/index.ts b/api/oa/oaApp/index.ts deleted file mode 100644 index be70f0c..0000000 --- a/api/oa/oaApp/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaApp, OaAppParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询应用 - */ -export async function pageOaApp(params: OaAppParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-app/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询应用列表 - */ -export async function listOaApp(params?: OaAppParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加应用 - */ -export async function addOaApp(data: OaApp) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-app', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改应用 - */ -export async function updateOaApp(data: OaApp) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-app', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除应用 - */ -export async function removeOaApp(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除应用 - */ -export async function removeBatchOaApp(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询应用 - */ -export async function getOaApp(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaApp/model/index.ts b/api/oa/oaApp/model/index.ts deleted file mode 100644 index 8c7f077..0000000 --- a/api/oa/oaApp/model/index.ts +++ /dev/null @@ -1,149 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 应用 - */ -export interface OaApp { - // 应用ID - appId?: number; - // 应用名称 - appName?: string; - // 应用标识 - appCode?: string; - // 应用秘钥 - appSecret?: string; - // 上级id, 0是顶级 - parentId?: number; - // 应用类型 - appType?: string; - // 应用类型 - appTypeMultiple?: string; - // 类型, 0菜单, 1按钮 - menuType?: number; - // 企业ID - companyId?: number; - // 企业名称 - companyName?: string; - // 应用图标 - appIcon?: string; - // 二维码 - appQrcode?: string; - // 链接地址 - appUrl?: string; - // 后台管理地址 - adminUrl?: string; - // 下载地址 - downUrl?: string; - // 链接地址 - serverUrl?: string; - // 文件服务器 - fileUrl?: string; - // 回调地址 - callbackUrl?: string; - // 腾讯文档地址 - docsUrl?: string; - // 代码仓库地址 - gitUrl?: string; - // 原型图地址 - prototypeUrl?: string; - // IP白名单 - ipAddress?: string; - // 应用截图 - images?: string; - // 应用包名 - packageName?: string; - // 下载次数 - clicks?: number; - // 安装次数 - installs?: number; - // 备注 - comments?: string; - // 应用介绍 - content?: string; - // 项目需求 - requirement?: string; - // 开发者(个人或公司) - developer?: string; - // 项目负责人 - director?: string; - // 项目经理 - projectDirector?: string; - // 业务员 - salesman?: string; - // 软件定价 - price?: number; - // 划线价格 - linePrice?: string; - // 评分 - score?: string; - // 星级 - star?: string; - // 菜单路由地址 - path?: string; - // 菜单组件地址, 目录可为空 - component?: string; - // 权限标识 - authority?: string; - // 打开位置 - target?: string; - // 是否隐藏, 0否, 1是(仅注册路由不显示在左侧菜单) - hide?: number; - // 禁止搜索,1禁止 0 允许 - search?: number; - // 菜单侧栏选中的path - active?: string; - // 其它路由元信息 - meta?: string; - // 版本,0正式版 1基础版 2开发版 - edition?: string; - // 版本号 - version?: string; - // 是否已安装 - isUse?: number; - // 附近1 - file1?: string; - // 附件2 - file2?: string; - // 附件3 - file3?: string; - // 是否显示续费提醒 - showExpiration?: number; - // 是否作为案例展示 - showCase?: number; - // 是否显示在首页 - showIndex?: number; - // 是否推荐 - recommend?: number; - // 到期时间 - expirationTime?: string; - // 续费金额 - renewMoney?: string; - // 应用状态 - appStatus?: string; - // 排序(数字越小越靠前) - sortNumber?: number; - // 状态, 0正常, 1冻结 - status?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 用户ID - userId?: number; - // 机构id - organizationId?: number; - // 租户编号 - tenantCode?: string; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 应用搜索条件 - */ -export interface OaAppParam extends PageParam { - appId?: number; - keywords?: string; -} diff --git a/api/oa/oaAppField/index.ts b/api/oa/oaAppField/index.ts deleted file mode 100644 index f80d4b9..0000000 --- a/api/oa/oaAppField/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAppField, OaAppFieldParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询应用参数 - */ -export async function pageOaAppField(params: OaAppFieldParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-app-field/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询应用参数列表 - */ -export async function listOaAppField(params?: OaAppFieldParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app-field', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加应用参数 - */ -export async function addOaAppField(data: OaAppField) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-app-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改应用参数 - */ -export async function updateOaAppField(data: OaAppField) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-app-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除应用参数 - */ -export async function removeOaAppField(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app-field/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除应用参数 - */ -export async function removeBatchOaAppField(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app-field/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询应用参数 - */ -export async function getOaAppField(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app-field/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAppRenew/index.ts b/api/oa/oaAppRenew/index.ts deleted file mode 100644 index b3c6a56..0000000 --- a/api/oa/oaAppRenew/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAppRenew, OaAppRenewParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询续费管理 - */ -export async function pageOaAppRenew(params: OaAppRenewParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-app-renew/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询续费管理列表 - */ -export async function listOaAppRenew(params?: OaAppRenewParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app-renew', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加续费管理 - */ -export async function addOaAppRenew(data: OaAppRenew) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-app-renew', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改续费管理 - */ -export async function updateOaAppRenew(data: OaAppRenew) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-app-renew', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除续费管理 - */ -export async function removeOaAppRenew(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app-renew/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除续费管理 - */ -export async function removeBatchOaAppRenew(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app-renew/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询续费管理 - */ -export async function getOaAppRenew(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app-renew/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAppRenew/model/index.ts b/api/oa/oaAppRenew/model/index.ts deleted file mode 100644 index 5b3308a..0000000 --- a/api/oa/oaAppRenew/model/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 续费管理 - */ -export interface OaAppRenew { - // 自增ID - appRenewId?: number; - // 应用ID - appId?: number; - // 续费金额 - money?: string; - // 备注 - comments?: string; - // 开始时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 企业ID - companyId?: number; - // 用户ID - userId?: number; - // 付款凭证 - images?: string; - // 用户姓名 - nickname?: string; - // 状态, 0正常, 1待确认 - status?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 续费管理搜索条件 - */ -export interface OaAppRenewParam extends PageParam { - appRenewId?: number; - keywords?: string; -} diff --git a/api/oa/oaAppUrl/index.ts b/api/oa/oaAppUrl/index.ts deleted file mode 100644 index 2faa0e4..0000000 --- a/api/oa/oaAppUrl/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAppUrl, OaAppUrlParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询项目域名 - */ -export async function pageOaAppUrl(params: OaAppUrlParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-app-url/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询项目域名列表 - */ -export async function listOaAppUrl(params?: OaAppUrlParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app-url', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加项目域名 - */ -export async function addOaAppUrl(data: OaAppUrl) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-app-url', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改项目域名 - */ -export async function updateOaAppUrl(data: OaAppUrl) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-app-url', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除项目域名 - */ -export async function removeOaAppUrl(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app-url/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除项目域名 - */ -export async function removeBatchOaAppUrl(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app-url/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询项目域名 - */ -export async function getOaAppUrl(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app-url/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAppUrl/model/index.ts b/api/oa/oaAppUrl/model/index.ts deleted file mode 100644 index e97c2f9..0000000 --- a/api/oa/oaAppUrl/model/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 项目域名 - */ -export interface OaAppUrl { - // 自增ID - appUrlId?: number; - // 应用ID - appId?: number; - // 域名类型 - name?: string; - // 域名 - domain?: string; - // 账号 - account?: string; - // 密码 - password?: string; - // 备注 - comments?: string; - // 排序(数字越小越靠前) - sortNumber?: number; - // 状态, 0正常, 1待确认 - status?: number; - // 创建时间 - createTime?: string; - // 租户id - tenantId?: number; -} - -/** - * 项目域名搜索条件 - */ -export interface OaAppUrlParam extends PageParam { - appUrlId?: number; - keywords?: string; -} diff --git a/api/oa/oaAppUser/index.ts b/api/oa/oaAppUser/index.ts deleted file mode 100644 index af11a65..0000000 --- a/api/oa/oaAppUser/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAppUser, OaAppUserParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询应用成员 - */ -export async function pageOaAppUser(params: OaAppUserParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-app-user/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询应用成员列表 - */ -export async function listOaAppUser(params?: OaAppUserParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app-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 addOaAppUser(data: OaAppUser) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-app-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改应用成员 - */ -export async function updateOaAppUser(data: OaAppUser) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-app-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除应用成员 - */ -export async function removeOaAppUser(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app-user/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除应用成员 - */ -export async function removeBatchOaAppUser(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-app-user/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询应用成员 - */ -export async function getOaAppUser(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-app-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/api/oa/oaAppUser/model/index.ts b/api/oa/oaAppUser/model/index.ts deleted file mode 100644 index a354285..0000000 --- a/api/oa/oaAppUser/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 应用成员 - */ -export interface OaAppUser { - // 自增ID - appUserId?: number; - // 角色,10体验成员 20开发者成员 30管理员 - role?: number; - // 用户ID - userId?: number; - // 应用ID - appId?: number; - // 昵称 - nickname?: string; - // 状态, 0正常, 1待确认 - status?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 应用成员搜索条件 - */ -export interface OaAppUserParam extends PageParam { - appUserId?: number; - keywords?: string; -} diff --git a/api/oa/oaAssets/index.ts b/api/oa/oaAssets/index.ts deleted file mode 100644 index 4595a53..0000000 --- a/api/oa/oaAssets/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAssets, OaAssetsParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询服务器资产记录表 - */ -export async function pageOaAssets(params: OaAssetsParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-assets/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询服务器资产记录表列表 - */ -export async function listOaAssets(params?: OaAssetsParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加服务器资产记录表 - */ -export async function addOaAssets(data: OaAssets) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-assets', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改服务器资产记录表 - */ -export async function updateOaAssets(data: OaAssets) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-assets', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除服务器资产记录表 - */ -export async function removeOaAssets(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除服务器资产记录表 - */ -export async function removeBatchOaAssets(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询服务器资产记录表 - */ -export async function getOaAssets(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAssets/model/index.ts b/api/oa/oaAssets/model/index.ts deleted file mode 100644 index 2e0fad8..0000000 --- a/api/oa/oaAssets/model/index.ts +++ /dev/null @@ -1,91 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 服务器资产记录表 - */ -export interface OaAssets { - // 资产ID - assetsId?: number; - // 资产名称 - name?: string; - // 资产标识 - code?: string; - // 资产类型 - type?: string; - // 服务器厂商 - brand?: string; - // 服务器配置 - configuration?: string; - // 初始账号 - account?: string; - // 初始密码 - password?: string; - // (阿里云/腾讯云)登录账号 - brandAccount?: string; - // (阿里云/腾讯云)登录密码 - brandPassword?: string; - // 宝塔面板 - panel?: string; - // 宝塔面板账号 - panelAccount?: string; - // 宝塔面板密码 - panelPassword?: string; - // 财务信息-合同金额 - financeAmount?: string; - // 购买年限 - financeYears?: number; - // 续费金额 - financeRenew?: string; - // 客户名称 - financeCustomerName?: string; - // 客户联系人 - financeCustomerContact?: string; - // 客户联系电话 - financeCustomerPhone?: string; - // 客户ID - customerId?: number; - // 客户名称 - customerName?: string; - // 开放端口 - openPort?: string; - // 详情内容 - content?: string; - // 购买时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 置顶状态 - isTop?: string; - // 可见性(public,private,protected) - visibility?: string; - // 宝塔接口秘钥 - btSign?: string; - // 文章排序(数字越小越靠前) - sortNumber?: number; - // 描述 - comments?: string; - // 客户ID - companyId?: number; - // 用户ID - userId?: number; - // 机构id - organizationId?: number; - // 状态, 0正常, 1冻结 - status?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 服务器资产记录表搜索条件 - */ -export interface OaAssetsParam extends PageParam { - assetsId?: number; - keywords?: string; -} diff --git a/api/oa/oaAssetsCode/index.ts b/api/oa/oaAssetsCode/index.ts deleted file mode 100644 index 852d4db..0000000 --- a/api/oa/oaAssetsCode/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAssetsCode, OaAssetsCodeParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询代码仓库 - */ -export async function pageOaAssetsCode(params: OaAssetsCodeParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-assets-code/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询代码仓库列表 - */ -export async function listOaAssetsCode(params?: OaAssetsCodeParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-code', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加代码仓库 - */ -export async function addOaAssetsCode(data: OaAssetsCode) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-assets-code', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改代码仓库 - */ -export async function updateOaAssetsCode(data: OaAssetsCode) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-assets-code', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除代码仓库 - */ -export async function removeOaAssetsCode(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-code/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除代码仓库 - */ -export async function removeBatchOaAssetsCode(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-code/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询代码仓库 - */ -export async function getOaAssetsCode(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-code/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAssetsCode/model/index.ts b/api/oa/oaAssetsCode/model/index.ts deleted file mode 100644 index a4d9955..0000000 --- a/api/oa/oaAssetsCode/model/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 代码仓库 - */ -export interface OaAssetsCode { - // ID - id?: number; - // 名称 - name?: string; - // 英文标识 - code?: string; - // 仓库地址 - gitUrl?: string; - // 仓库品牌 - brand?: string; - // 价格 - price?: number; - // 详情内容 - content?: string; - // 购买时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 置顶状态 - isTop?: string; - // 排序(数字越小越靠前) - sortNumber?: number; - // 描述 - comments?: string; - // 用户ID - userId?: number; - // 状态, 0正常, 1冻结 - status?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 代码仓库搜索条件 - */ -export interface OaAssetsCodeParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/oa/oaAssetsDomain/index.ts b/api/oa/oaAssetsDomain/index.ts deleted file mode 100644 index b17e937..0000000 --- a/api/oa/oaAssetsDomain/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAssetsDomain, OaAssetsDomainParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询域名管理记录表 - */ -export async function pageOaAssetsDomain(params: OaAssetsDomainParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-assets-domain/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询域名管理记录表列表 - */ -export async function listOaAssetsDomain(params?: OaAssetsDomainParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-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 addOaAssetsDomain(data: OaAssetsDomain) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-assets-domain', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改域名管理记录表 - */ -export async function updateOaAssetsDomain(data: OaAssetsDomain) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-assets-domain', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除域名管理记录表 - */ -export async function removeOaAssetsDomain(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-domain/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除域名管理记录表 - */ -export async function removeBatchOaAssetsDomain(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-domain/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询域名管理记录表 - */ -export async function getOaAssetsDomain(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-domain/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAssetsDomain/model/index.ts b/api/oa/oaAssetsDomain/model/index.ts deleted file mode 100644 index 5dbd752..0000000 --- a/api/oa/oaAssetsDomain/model/index.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 域名管理记录表 - */ -export interface OaAssetsDomain { - // ID - domainId?: number; - // 域名 - name?: string; - // 域名标识 - code?: string; - // 注册厂商 - brand?: string; - // 初始账号 - account?: string; - // 初始密码 - password?: string; - // 价格 - price?: number; - // 详情内容 - content?: string; - // ssl证书 - ssl?: string; - // 购买时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 置顶状态 - isTop?: string; - // 排序(数字越小越靠前) - sortNumber?: number; - // 描述 - comments?: string; - // 用户ID - userId?: number; - // 状态, 0正常, 1冻结 - status?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 域名管理记录表搜索条件 - */ -export interface OaAssetsDomainParam extends PageParam { - domainId?: number; - keywords?: string; -} diff --git a/api/oa/oaAssetsEmail/index.ts b/api/oa/oaAssetsEmail/index.ts deleted file mode 100644 index 9a05b27..0000000 --- a/api/oa/oaAssetsEmail/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAssetsEmail, OaAssetsEmailParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询企业邮箱记录表 - */ -export async function pageOaAssetsEmail(params: OaAssetsEmailParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-assets-email/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询企业邮箱记录表列表 - */ -export async function listOaAssetsEmail(params?: OaAssetsEmailParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-email', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加企业邮箱记录表 - */ -export async function addOaAssetsEmail(data: OaAssetsEmail) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-assets-email', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改企业邮箱记录表 - */ -export async function updateOaAssetsEmail(data: OaAssetsEmail) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-assets-email', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除企业邮箱记录表 - */ -export async function removeOaAssetsEmail(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-email/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除企业邮箱记录表 - */ -export async function removeBatchOaAssetsEmail(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-email/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询企业邮箱记录表 - */ -export async function getOaAssetsEmail(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-email/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAssetsEmail/model/index.ts b/api/oa/oaAssetsEmail/model/index.ts deleted file mode 100644 index be7f45e..0000000 --- a/api/oa/oaAssetsEmail/model/index.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 企业邮箱记录表 - */ -export interface OaAssetsEmail { - // ID - emailId?: number; - // 域名 - name?: string; - // 域名标识 - code?: string; - // 主机型号 - type?: string; - // 品牌厂商 - brand?: string; - // 初始账号 - system?: string; - // 价格 - price?: number; - // 详情内容 - content?: string; - // ssl证书 - ssl?: string; - // 购买时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 置顶状态 - isTop?: string; - // 排序(数字越小越靠前) - sortNumber?: number; - // 描述 - comments?: string; - // 用户ID - userId?: number; - // 状态, 0正常, 1冻结 - status?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 企业邮箱记录表搜索条件 - */ -export interface OaAssetsEmailParam extends PageParam { - emailId?: number; - keywords?: string; -} diff --git a/api/oa/oaAssetsServer/index.ts b/api/oa/oaAssetsServer/index.ts deleted file mode 100644 index 41961bb..0000000 --- a/api/oa/oaAssetsServer/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAssetsServer, OaAssetsServerParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询服务器资产记录表 - */ -export async function pageOaAssetsServer(params: OaAssetsServerParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-assets-server/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询服务器资产记录表列表 - */ -export async function listOaAssetsServer(params?: OaAssetsServerParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-server', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加服务器资产记录表 - */ -export async function addOaAssetsServer(data: OaAssetsServer) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-assets-server', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改服务器资产记录表 - */ -export async function updateOaAssetsServer(data: OaAssetsServer) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-assets-server', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除服务器资产记录表 - */ -export async function removeOaAssetsServer(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-server/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除服务器资产记录表 - */ -export async function removeBatchOaAssetsServer(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-server/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询服务器资产记录表 - */ -export async function getOaAssetsServer(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-server/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAssetsServer/model/index.ts b/api/oa/oaAssetsServer/model/index.ts deleted file mode 100644 index 20f652c..0000000 --- a/api/oa/oaAssetsServer/model/index.ts +++ /dev/null @@ -1,91 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 服务器资产记录表 - */ -export interface OaAssetsServer { - // 资产ID - serverId?: number; - // 资产名称 - name?: string; - // 资产标识 - code?: string; - // 资产类型 - type?: string; - // 服务器厂商 - brand?: string; - // 服务器配置 - configuration?: string; - // 初始账号 - account?: string; - // 初始密码 - password?: string; - // (阿里云/腾讯云)登录账号 - brandAccount?: string; - // (阿里云/腾讯云)登录密码 - brandPassword?: string; - // 宝塔面板 - panel?: string; - // 宝塔面板账号 - panelAccount?: string; - // 宝塔面板密码 - panelPassword?: string; - // 财务信息-合同金额 - financeAmount?: string; - // 购买年限 - financeYears?: number; - // 续费金额 - financeRenew?: string; - // 客户名称 - financeCustomerName?: string; - // 客户联系人 - financeCustomerContact?: string; - // 客户联系电话 - financeCustomerPhone?: string; - // 客户ID - customerId?: number; - // 客户名称 - customerName?: string; - // 开放端口 - openPort?: string; - // 详情内容 - content?: string; - // 购买时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 置顶状态 - isTop?: string; - // 可见性(public,private,protected) - visibility?: string; - // 宝塔接口秘钥 - btSign?: string; - // 文章排序(数字越小越靠前) - sortNumber?: number; - // 描述 - comments?: string; - // 客户ID - companyId?: number; - // 用户ID - userId?: number; - // 机构id - organizationId?: number; - // 状态, 0正常, 1冻结 - status?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 服务器资产记录表搜索条件 - */ -export interface OaAssetsServerParam extends PageParam { - serverId?: number; - keywords?: string; -} diff --git a/api/oa/oaAssetsSite/index.ts b/api/oa/oaAssetsSite/index.ts deleted file mode 100644 index 04b99a9..0000000 --- a/api/oa/oaAssetsSite/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAssetsSite, OaAssetsSiteParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询网站管理记录表 - */ -export async function pageOaAssetsSite(params: OaAssetsSiteParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-assets-site/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询网站管理记录表列表 - */ -export async function listOaAssetsSite(params?: OaAssetsSiteParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-site', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加网站管理记录表 - */ -export async function addOaAssetsSite(data: OaAssetsSite) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-assets-site', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改网站管理记录表 - */ -export async function updateOaAssetsSite(data: OaAssetsSite) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-assets-site', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除网站管理记录表 - */ -export async function removeOaAssetsSite(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-site/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除网站管理记录表 - */ -export async function removeBatchOaAssetsSite(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-site/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询网站管理记录表 - */ -export async function getOaAssetsSite(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-site/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAssetsSite/model/index.ts b/api/oa/oaAssetsSite/model/index.ts deleted file mode 100644 index ed6557f..0000000 --- a/api/oa/oaAssetsSite/model/index.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 网站管理记录表 - */ -export interface OaAssetsSite { - // ID - siteId?: number; - // 网站名称 - name?: string; - // 域名标识 - code?: string; - // 主机型号 - type?: string; - // 品牌厂商 - brand?: string; - // 初始账号 - system?: string; - // 价格 - price?: number; - // 详情内容 - content?: string; - // ssl证书 - ssl?: string; - // 购买时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 置顶状态 - isTop?: string; - // 排序(数字越小越靠前) - sortNumber?: number; - // 描述 - comments?: string; - // 用户ID - userId?: number; - // 状态, 0正常, 1冻结 - status?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 网站管理记录表搜索条件 - */ -export interface OaAssetsSiteParam extends PageParam { - siteId?: number; - keywords?: string; -} diff --git a/api/oa/oaAssetsUser/index.ts b/api/oa/oaAssetsUser/index.ts deleted file mode 100644 index ccd5c5e..0000000 --- a/api/oa/oaAssetsUser/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAssetsUser, OaAssetsUserParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询服务器成员管理 - */ -export async function pageOaAssetsUser(params: OaAssetsUserParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-assets-user/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询服务器成员管理列表 - */ -export async function listOaAssetsUser(params?: OaAssetsUserParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-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 addOaAssetsUser(data: OaAssetsUser) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-assets-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改服务器成员管理 - */ -export async function updateOaAssetsUser(data: OaAssetsUser) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-assets-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除服务器成员管理 - */ -export async function removeOaAssetsUser(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-user/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除服务器成员管理 - */ -export async function removeBatchOaAssetsUser(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-user/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询服务器成员管理 - */ -export async function getOaAssetsUser(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-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/api/oa/oaAssetsUser/model/index.ts b/api/oa/oaAssetsUser/model/index.ts deleted file mode 100644 index d768d2d..0000000 --- a/api/oa/oaAssetsUser/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 服务器成员管理 - */ -export interface OaAssetsUser { - // 自增ID - id?: number; - // 角色,10体验成员 20开发者成员 30管理员 - role?: number; - // 用户ID - userId?: number; - // 应用ID - assetsId?: number; - // 昵称 - nickname?: string; - // 状态, 0正常, 1待确认 - status?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 服务器成员管理搜索条件 - */ -export interface OaAssetsUserParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/oa/oaAssetsVhost/index.ts b/api/oa/oaAssetsVhost/index.ts deleted file mode 100644 index ff0adc5..0000000 --- a/api/oa/oaAssetsVhost/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaAssetsVhost, OaAssetsVhostParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询虚拟主机记录表 - */ -export async function pageOaAssetsVhost(params: OaAssetsVhostParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-assets-vhost/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询虚拟主机记录表列表 - */ -export async function listOaAssetsVhost(params?: OaAssetsVhostParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-vhost', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加虚拟主机记录表 - */ -export async function addOaAssetsVhost(data: OaAssetsVhost) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-assets-vhost', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改虚拟主机记录表 - */ -export async function updateOaAssetsVhost(data: OaAssetsVhost) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-assets-vhost', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除虚拟主机记录表 - */ -export async function removeOaAssetsVhost(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-vhost/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除虚拟主机记录表 - */ -export async function removeBatchOaAssetsVhost(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-assets-vhost/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询虚拟主机记录表 - */ -export async function getOaAssetsVhost(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-assets-vhost/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaAssetsVhost/model/index.ts b/api/oa/oaAssetsVhost/model/index.ts deleted file mode 100644 index 1ddab6b..0000000 --- a/api/oa/oaAssetsVhost/model/index.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 虚拟主机记录表 - */ -export interface OaAssetsVhost { - // ID - vhostId?: number; - // 域名 - name?: string; - // 域名标识 - code?: string; - // 主机型号 - type?: string; - // 品牌厂商 - brand?: string; - // 初始账号 - system?: string; - // 价格 - price?: number; - // 详情内容 - content?: string; - // ssl证书 - ssl?: string; - // 购买时间 - startTime?: string; - // 到期时间 - endTime?: string; - // 置顶状态 - isTop?: string; - // 排序(数字越小越靠前) - sortNumber?: number; - // 描述 - comments?: string; - // 用户ID - userId?: number; - // 状态, 0正常, 1冻结 - status?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 虚拟主机记录表搜索条件 - */ -export interface OaAssetsVhostParam extends PageParam { - vhostId?: number; - keywords?: string; -} diff --git a/api/oa/oaCompany/index.ts b/api/oa/oaCompany/index.ts deleted file mode 100644 index 72868c2..0000000 --- a/api/oa/oaCompany/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaCompany, OaCompanyParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询企业信息 - */ -export async function pageOaCompany(params: OaCompanyParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-company/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询企业信息列表 - */ -export async function listOaCompany(params?: OaCompanyParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-company', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加企业信息 - */ -export async function addOaCompany(data: OaCompany) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-company', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改企业信息 - */ -export async function updateOaCompany(data: OaCompany) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-company', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除企业信息 - */ -export async function removeOaCompany(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-company/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除企业信息 - */ -export async function removeBatchOaCompany(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-company/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询企业信息 - */ -export async function getOaCompany(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-company/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaCompany/model/index.ts b/api/oa/oaCompany/model/index.ts deleted file mode 100644 index fae4f89..0000000 --- a/api/oa/oaCompany/model/index.ts +++ /dev/null @@ -1,117 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 企业信息 - */ -export interface OaCompany { - // 企业id - companyId?: number; - // 企业简称 - shortName?: string; - // 企业全称 - companyName?: string; - // 企业标识 - companyCode?: string; - // 类型 10企业 20政府单位 - companyType?: string; - // 企业类型多选 - companyTypeMultiple?: string; - // 应用标识 - companyLogo?: string; - // 应用类型 - appType?: string; - // 绑定域名 - domain?: string; - // 联系电话 - phone?: string; - // 座机电话 - tel?: string; - // 邮箱 - email?: string; - // 发票抬头 - invoiceHeader?: string; - // 企业法人 - businessEntity?: string; - // 服务开始时间 - startTime?: string; - // 服务到期时间 - expirationTime?: string; - // 应用版本 10体验版 20授权版 30旗舰版 - version?: number; - // 成员数量(人数上限) - members?: number; - // 成员数量(当前) - users?: number; - // 行业类型(父级) - industryParent?: string; - // 行业类型(子级) - industryChild?: string; - // 部门数量 - departments?: number; - // 存储空间 - storage?: string; - // 存储空间(上限) - storageMax?: string; - // 所在国家 - country?: string; - // 所在省份 - province?: string; - // 所在城市 - city?: string; - // 所在辖区 - region?: string; - // 街道地址 - address?: string; - // 经度 - longitude?: string; - // 纬度 - latitude?: string; - // 备注 - comments?: string; - // 是否实名认证 - authentication?: number; - // 企业默认主体 - authoritative?: number; - // request合法域名 - requestUrl?: string; - // socket合法域名 - socketUrl?: string; - // 主控端域名 - serverUrl?: string; - // 业务域名 - modulesUrl?: string; - // 是否推荐 - recommend?: number; - // 点赞数量 - likes?: number; - // 点击数量 - clicks?: number; - // 购买数量 - buys?: number; - // 是否含税, 0不含, 1含 - isTax?: number; - // 当前克隆的租户ID - planId?: number; - // 状态 - status?: number; - // 排序号 - sortNumber?: number; - // 用户ID - userId?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 企业信息搜索条件 - */ -export interface OaCompanyParam extends PageParam { - companyId?: number; - keywords?: string; -} diff --git a/api/oa/oaCompanyField/index.ts b/api/oa/oaCompanyField/index.ts deleted file mode 100644 index 5525e31..0000000 --- a/api/oa/oaCompanyField/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaCompanyField, OaCompanyFieldParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询企业参数 - */ -export async function pageOaCompanyField(params: OaCompanyFieldParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-company-field/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询企业参数列表 - */ -export async function listOaCompanyField(params?: OaCompanyFieldParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-company-field', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加企业参数 - */ -export async function addOaCompanyField(data: OaCompanyField) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-company-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改企业参数 - */ -export async function updateOaCompanyField(data: OaCompanyField) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-company-field', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除企业参数 - */ -export async function removeOaCompanyField(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-company-field/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除企业参数 - */ -export async function removeBatchOaCompanyField(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-company-field/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询企业参数 - */ -export async function getOaCompanyField(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-company-field/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaCompanyField/model/index.ts b/api/oa/oaCompanyField/model/index.ts deleted file mode 100644 index 2cd4a94..0000000 --- a/api/oa/oaCompanyField/model/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 企业参数 - */ -export interface OaCompanyField { - // 自增ID - id?: number; - // 企业ID - companyId?: number; - // 名称 - name?: string; - // 备注 - comments?: string; - // 用户ID - userId?: number; - // 状态, 0正常, 1删除 - status?: number; - // 排序(数字越小越靠前) - sortNumber?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 企业参数搜索条件 - */ -export interface OaCompanyFieldParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/oa/oaCompanyUser/index.ts b/api/oa/oaCompanyUser/index.ts deleted file mode 100644 index 61ec324..0000000 --- a/api/oa/oaCompanyUser/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaCompanyUser, OaCompanyUserParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询成员管理 - */ -export async function pageOaCompanyUser(params: OaCompanyUserParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-company-user/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询成员管理列表 - */ -export async function listOaCompanyUser(params?: OaCompanyUserParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-company-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 addOaCompanyUser(data: OaCompanyUser) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-company-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改成员管理 - */ -export async function updateOaCompanyUser(data: OaCompanyUser) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-company-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除成员管理 - */ -export async function removeOaCompanyUser(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-company-user/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除成员管理 - */ -export async function removeBatchOaCompanyUser(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-company-user/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询成员管理 - */ -export async function getOaCompanyUser(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-company-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/api/oa/oaCompanyUser/model/index.ts b/api/oa/oaCompanyUser/model/index.ts deleted file mode 100644 index 7294530..0000000 --- a/api/oa/oaCompanyUser/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 成员管理 - */ -export interface OaCompanyUser { - // 自增ID - companyUserId?: number; - // 角色,10体验成员 20开发者成员 30管理员 - role?: number; - // 用户ID - userId?: number; - // 企业ID - companyId?: number; - // 昵称 - nickname?: string; - // 状态, 0正常, 1待确认 - status?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 成员管理搜索条件 - */ -export interface OaCompanyUserParam extends PageParam { - companyUserId?: number; - keywords?: string; -} diff --git a/api/oa/oaLink/index.ts b/api/oa/oaLink/index.ts deleted file mode 100644 index bf20025..0000000 --- a/api/oa/oaLink/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaLink, OaLinkParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询常用链接 - */ -export async function pageOaLink(params: OaLinkParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-link/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询常用链接列表 - */ -export async function listOaLink(params?: OaLinkParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-link', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加常用链接 - */ -export async function addOaLink(data: OaLink) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-link', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改常用链接 - */ -export async function updateOaLink(data: OaLink) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-link', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除常用链接 - */ -export async function removeOaLink(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-link/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除常用链接 - */ -export async function removeBatchOaLink(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-link/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询常用链接 - */ -export async function getOaLink(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-link/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaProduct/index.ts b/api/oa/oaProduct/index.ts deleted file mode 100644 index 993136c..0000000 --- a/api/oa/oaProduct/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaProduct, OaProductParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询产品记录表 - */ -export async function pageOaProduct(params: OaProductParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-product/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询产品记录表列表 - */ -export async function listOaProduct(params?: OaProductParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-product', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加产品记录表 - */ -export async function addOaProduct(data: OaProduct) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-product', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改产品记录表 - */ -export async function updateOaProduct(data: OaProduct) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-product', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除产品记录表 - */ -export async function removeOaProduct(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-product/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除产品记录表 - */ -export async function removeBatchOaProduct(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-product/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询产品记录表 - */ -export async function getOaProduct(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-product/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaProduct/model/index.ts b/api/oa/oaProduct/model/index.ts deleted file mode 100644 index 8381840..0000000 --- a/api/oa/oaProduct/model/index.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 产品记录表 - */ -export interface OaProduct { - // 产品ID - productId?: number; - // 产品名称 - name?: string; - // 产品标识 - code?: string; - // 产品详情 - content?: string; - // 产品类型 - type?: string; - // 产品图标 - logo?: string; - // 产品金额 - money?: string; - // 初始销量 - salesInitial?: number; - // 实际销量 - salesActual?: number; - // 库存总量(包含所有sku) - stockTotal?: number; - // 背景颜色 - backgroundColor?: string; - // 背景图片 - backgroundImage?: string; - // 背景图片(gif) - backgroundGif?: string; - // 购买链接 - buyUrl?: string; - // 控制台链接 - adminUrl?: string; - // 附件 - files?: string; - // 企业ID - companyId?: number; - // 用户ID - userId?: number; - // 排序(数字越小越靠前) - sortNumber?: number; - // 备注 - comments?: string; - // 状态, 0已上架, 1已下架 - status?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 产品记录表搜索条件 - */ -export interface OaProductParam extends PageParam { - productId?: number; - keywords?: string; -} diff --git a/api/oa/oaProductTabs/index.ts b/api/oa/oaProductTabs/index.ts deleted file mode 100644 index 5137371..0000000 --- a/api/oa/oaProductTabs/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaProductTabs, OaProductTabsParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询产品标签记录表 - */ -export async function pageOaProductTabs(params: OaProductTabsParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-product-tabs/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询产品标签记录表列表 - */ -export async function listOaProductTabs(params?: OaProductTabsParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-product-tabs', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加产品标签记录表 - */ -export async function addOaProductTabs(data: OaProductTabs) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-product-tabs', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改产品标签记录表 - */ -export async function updateOaProductTabs(data: OaProductTabs) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-product-tabs', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除产品标签记录表 - */ -export async function removeOaProductTabs(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-product-tabs/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除产品标签记录表 - */ -export async function removeBatchOaProductTabs(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-product-tabs/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询产品标签记录表 - */ -export async function getOaProductTabs(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-product-tabs/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaProductTabs/model/index.ts b/api/oa/oaProductTabs/model/index.ts deleted file mode 100644 index 6f10324..0000000 --- a/api/oa/oaProductTabs/model/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 产品标签记录表 - */ -export interface OaProductTabs { - // 产品标签ID - tabId?: number; - // 产品ID - productId?: number; - // 标签名称 - name?: string; - // 标签类型 - type?: string; - // 产品标签详情 - content?: string; - // 背景颜色 - backgroundColor?: string; - // 背景图片 - backgroundImage?: string; - // 附件 - files?: string; - // 企业ID - companyId?: number; - // 用户ID - userId?: number; - // 排序(数字越小越靠前) - sortNumber?: number; - // 备注 - comments?: string; - // 状态, 0已上架, 1已下架 - status?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 产品标签记录表搜索条件 - */ -export interface OaProductTabsParam extends PageParam { - tabId?: number; - keywords?: string; -} diff --git a/api/oa/oaTask/index.ts b/api/oa/oaTask/index.ts deleted file mode 100644 index b95f643..0000000 --- a/api/oa/oaTask/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaTask, OaTaskParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询任务记录表 - */ -export async function pageOaTask(params: OaTaskParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-task/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询任务记录表列表 - */ -export async function listOaTask(params?: OaTaskParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-task', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加任务记录表 - */ -export async function addOaTask(data: OaTask) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-task', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改任务记录表 - */ -export async function updateOaTask(data: OaTask) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-task', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除任务记录表 - */ -export async function removeOaTask(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-task/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除任务记录表 - */ -export async function removeBatchOaTask(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-task/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询任务记录表 - */ -export async function getOaTask(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-task/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/oaTask/model/index.ts b/api/oa/oaTask/model/index.ts deleted file mode 100644 index 51a7e3c..0000000 --- a/api/oa/oaTask/model/index.ts +++ /dev/null @@ -1,85 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 任务记录表 - */ -export interface OaTask { - // 工单ID - taskId?: number; - // 工单类型 - taskType?: string; - // 任务内容 - name?: string; - // 问题描述 - content?: string; - // 工单附件 - files?: string; - // 工单发起人 - promoter?: number; - // 受理人 - commander?: number; - // 工单状态, 0未开始 1已指派 - progress?: number; - // 优先级 - priority?: string; - // 品质要求 - quality?: string; - // 时限(天) - day?: number; - // 手机号 - phone?: string; - // 开始时间 - startTime?: string; - // 结束时间 - endTime?: string; - // 逾期天数 - overdueDays?: number; - // 项目ID - appId?: number; - // 机构id - organizationId?: number; - // 项目ID - projectId?: number; - // 客户ID - customerId?: number; - // 资产ID - assetsId?: number; - // 用户ID - userId?: number; - // 是否已查阅 - isRead?: number; - // 最后回复人 - lastReadUser?: number; - // 发起人昵称 - nickname?: string; - // 发起人头像 - avatar?: string; - // 最后回复人头像 - lastAvatar?: string; - // 最后回复人昵称 - lastNickname?: string; - // 订单是否已结算(0未结算 1已结算) - isSettled?: number; - // 排序(数字越小越靠前) - sortNumber?: number; - // 备注 - comments?: string; - // 状态, 0待处理, 1已完成 - status?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 任务记录表搜索条件 - */ -export interface OaTaskParam extends PageParam { - taskId?: number; - keywords?: string; -} diff --git a/api/oa/oaTaskCount/index.ts b/api/oa/oaTaskCount/index.ts deleted file mode 100644 index 049f3d8..0000000 --- a/api/oa/oaTaskCount/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaTaskCount, OaTaskCountParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询数据统计 - */ -export async function pageOaTaskCount(params: OaTaskCountParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-task-count/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询数据统计列表 - */ -export async function listOaTaskCount(params?: OaTaskCountParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-task-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 addOaTaskCount(data: OaTaskCount) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-task-count', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改数据统计 - */ -export async function updateOaTaskCount(data: OaTaskCount) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-task-count', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除数据统计 - */ -export async function removeOaTaskCount(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-task-count/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除数据统计 - */ -export async function removeBatchOaTaskCount(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-task-count/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询数据统计 - */ -export async function getOaTaskCount(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-task-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/api/oa/oaTaskCount/model/index.ts b/api/oa/oaTaskCount/model/index.ts deleted file mode 100644 index c451ed0..0000000 --- a/api/oa/oaTaskCount/model/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 数据统计 - */ -export interface OaTaskCount { - // 自增ID - taskCountId?: number; - // 用户ID - userId?: number; - // 待处理数 - pending?: number; - // 闲置的工单(废弃) - unused?: number; - // 已完成数(废弃) - completed?: number; - // 今天处理数 - today?: number; - // 本月处理数 - month?: number; - // 今年处理数 - year?: number; - // 总工单数 - total?: number; - // 部门ID - organizationId?: number; - // 角色ID - roleId?: number; - // 角色标识 - roleCode?: string; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 更新时间 - updateTime?: string; -} - -/** - * 数据统计搜索条件 - */ -export interface OaTaskCountParam extends PageParam { - taskCountId?: number; - keywords?: string; -} diff --git a/api/oa/oaTaskRecord/index.ts b/api/oa/oaTaskRecord/index.ts deleted file mode 100644 index 1607809..0000000 --- a/api/oa/oaTaskRecord/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaTaskRecord, OaTaskRecordParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询工单回复记录表 - */ -export async function pageOaTaskRecord(params: OaTaskRecordParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-task-record/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询工单回复记录表列表 - */ -export async function listOaTaskRecord(params?: OaTaskRecordParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-task-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 addOaTaskRecord(data: OaTaskRecord) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-task-record', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改工单回复记录表 - */ -export async function updateOaTaskRecord(data: OaTaskRecord) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-task-record', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除工单回复记录表 - */ -export async function removeOaTaskRecord(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-task-record/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除工单回复记录表 - */ -export async function removeBatchOaTaskRecord(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-task-record/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询工单回复记录表 - */ -export async function getOaTaskRecord(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-task-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/api/oa/oaTaskRecord/model/index.ts b/api/oa/oaTaskRecord/model/index.ts deleted file mode 100644 index 09cac63..0000000 --- a/api/oa/oaTaskRecord/model/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 工单回复记录表 - */ -export interface OaTaskRecord { - // 回复ID - taskRecordId?: number; - // 上级id, 0是顶级 - parentId?: number; - // 工单ID - taskId?: number; - // 内容 - content?: string; - // 机密信息 - confidential?: string; - // 联系电话 - phone?: string; - // 工单附件 - files?: string; - // 用户ID - userId?: number; - // 排序(数字越小越靠前) - sortNumber?: number; - // 备注 - comments?: string; - // 状态, 0待处理, 1已完成 - status?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 工单回复记录表搜索条件 - */ -export interface OaTaskRecordParam extends PageParam { - taskRecordId?: number; - keywords?: string; -} diff --git a/api/oa/oaTaskUser/index.ts b/api/oa/oaTaskUser/index.ts deleted file mode 100644 index 2b78215..0000000 --- a/api/oa/oaTaskUser/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { OaTaskUser, OaTaskUserParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询工单成员 - */ -export async function pageOaTaskUser(params: OaTaskUserParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/oa-task-user/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询工单成员列表 - */ -export async function listOaTaskUser(params?: OaTaskUserParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-task-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 addOaTaskUser(data: OaTaskUser) { - const res = await request.post>( - MODULES_API_URL + '/oa/oa-task-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改工单成员 - */ -export async function updateOaTaskUser(data: OaTaskUser) { - const res = await request.put>( - MODULES_API_URL + '/oa/oa-task-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除工单成员 - */ -export async function removeOaTaskUser(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-task-user/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除工单成员 - */ -export async function removeBatchOaTaskUser(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/oa-task-user/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询工单成员 - */ -export async function getOaTaskUser(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/oa-task-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/api/oa/oaTaskUser/model/index.ts b/api/oa/oaTaskUser/model/index.ts deleted file mode 100644 index 5fd902f..0000000 --- a/api/oa/oaTaskUser/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 工单成员 - */ -export interface OaTaskUser { - // 自增ID - taskUserId?: number; - // 角色,10体验成员 20开发者成员 30管理员 - role?: number; - // 用户ID - userId?: number; - // 工单ID - taskId?: number; - // 昵称 - nickname?: string; - // 状态, 0待处理, 1已完成 - status?: number; - // 租户id - tenantId?: number; - // 加入时间 - createTime?: string; -} - -/** - * 工单成员搜索条件 - */ -export interface OaTaskUserParam extends PageParam { - taskUserId?: number; - keywords?: string; -} diff --git a/api/oa/order/index.ts b/api/oa/order/index.ts deleted file mode 100644 index eb7ab1f..0000000 --- a/api/oa/order/index.ts +++ /dev/null @@ -1,120 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Order, OrderParam } from './model'; - -/** - * 分页查询订单 - */ -export async function pageOrder(params: OrderParam) { - const res = await request.get>>( - '/oa/order/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询订单列表 - */ -export async function listOrder(params?: OrderParam) { - const res = await request.get>('/oa/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 addOrder(data: Order) { - const res = await request.post>('/oa/order', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改订单 - */ -export async function updateOrder(data: Order) { - const res = await request.put>('/oa/order', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除订单 - */ -export async function removeOrder(id?: number) { - const res = await request.delete>('/oa/order/' + id); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除订单 - */ -export async function removeBatchOrder(data: (number | undefined)[]) { - const res = await request.delete>('/oa/order/batch', { - data - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateOrderStatus(orderId?: number, status?: number) { - const res = await request.put>('/oa/order/status', { - orderId, - status - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询订单 - */ -export async function getOrder(id: number) { - const res = await request.get>('/oa/order/' + 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>('/oa/order/existence', { - params: { field, value, id } - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/order/model/index.ts b/api/oa/order/model/index.ts deleted file mode 100644 index 0c9a5e7..0000000 --- a/api/oa/order/model/index.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { PageParam } from '@/api'; -import { Company } from '@/api/system/company/model'; - -/** - * 订单 - */ -export interface Order { - orderId?: number; - orderNo?: string; - type?: number; - logo?: string; - money?: number; - payPrice?: number; - planId?: number; - priceId?: number; - gradeId?: number; - userId?: number; - companyId?: number; - nickname?: string; - username?: string; - userAvatar?: string; - shopId?: string; - sortNumber?: number; - comments?: string; - status?: number; - createTime?: string; - updateTime?: string; - company?: Company; -} - -/** - * 订单搜索条件 - */ -export interface OrderParam extends PageParam { - orderId?: number; - orderNo?: string; - type?: number; - status?: string; - sortNumber?: string; - userId?: number; - createTime?: string; - username?: string; - nickname?: string; -} diff --git a/api/oa/product/index.ts b/api/oa/product/index.ts deleted file mode 100644 index be36da9..0000000 --- a/api/oa/product/index.ts +++ /dev/null @@ -1,120 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Product, ProductParam } from './model'; - -/** - * 分页查询产品 - */ -export async function pageProduct(params: ProductParam) { - const res = await request.get>>( - '/oa/product/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询产品列表 - */ -export async function listProduct(params?: ProductParam) { - const res = await request.get>('/oa/product', { - params - }); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加产品 - */ -export async function addProduct(data: Product) { - const res = await request.post>('/oa/product', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改产品 - */ -export async function updateProduct(data: Product) { - const res = await request.put>('/oa/product', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除产品 - */ -export async function removeProduct(id?: number) { - const res = await request.delete>('/oa/product/' + id); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除产品 - */ -export async function removeBatchProduct(data: (number | undefined)[]) { - const res = await request.delete>('/oa/product/batch', { - data - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改用户状态 - */ -export async function updateProductStatus(productId?: number, status?: number) { - const res = await request.put>('/oa/product/status', { - productId, - status - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询产品 - */ -export async function getProduct(id: number) { - const res = await request.get>('/oa/product/' + 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>('/oa/product/existence', { - params: { field, value, id } - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/product/model/index.ts b/api/oa/product/model/index.ts deleted file mode 100644 index 77e551d..0000000 --- a/api/oa/product/model/index.ts +++ /dev/null @@ -1,94 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 产品 - */ -export interface Product { - // 自增ID - productId?: number; - // 类型 0软件产品 1实物商品 2虚拟商品 - type?: number; - // 产品编码 - code?: string; - // 产品标题 - title?: string; - // 封面图 - image?: string; - // 产品详情 - content?: string; - // 父级分类ID - parentId?: number; - // 父级栏目名称 - parentName?: string; - // 产品分类ID - categoryId?: number; - // 产品分类名称 - categoryName?: string; - // 标签 - tag?: string; - // 产品规格 0单规格 1多规格 - specs?: number; - // 货架 - position?: string; - // 单位名称 (个) - unitName?: string; - // 进货价格 - price?: number; - // 销售价格 - salePrice?: number; - // 库存计算方式(10下单减库存 20付款减库存) - deductStockType?: number; - // 启用交付方式 - deliveryMethod?: number; - // 启用购买时长 - durationMethod?: number; - // 启用套餐版本 - packageMethod?: number; - // 最大可购买数量 - canBuyNumber?: number; - // 轮播图 - files?: string; - // 销量 - sales?: number; - // 库存 - stock?: number; - // 消费赚取积分 - gainIntegral?: string; - // 推荐 - recommend?: number; - // 是否官方自营 - official?: boolean; - // 商户ID - merchantId?: number; - // 状态(0:未上架,1:上架) - isShow?: string; - // 状态, 0上架 1待上架 2待审核 3审核不通过 - status?: number; - // 备注 - comments?: string; - // 排序号 - sortNumber?: number; - // 用户ID - userId?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; - // 购买数量 - num?: number; -} - -/** - * 产品搜索条件 - */ -export interface ProductParam extends PageParam { - productId?: number; - type?: number; - official?: boolean; - status?: number; - keywords?: string; -} diff --git a/api/oa/product/tabs/index.ts b/api/oa/product/tabs/index.ts deleted file mode 100644 index e7889b1..0000000 --- a/api/oa/product/tabs/index.ts +++ /dev/null @@ -1,129 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { - ProductTabs, - ProductTabsParam -} from '@/api/oa/product/tabs/model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询产品属性 - */ -export async function pageProductTabs(params: ProductTabsParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/product-tabs/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询产品属性列表 - */ -export async function listProductTabs(params?: ProductTabsParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/product-tabs', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询产品属性 - */ -export async function getProductTabs(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/product-tabs/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加产品属性 - */ -export async function addProductTabs(data: ProductTabs) { - const res = await request.post>( - MODULES_API_URL + '/oa/product-tabs', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改产品属性 - */ -export async function updateProductTabs(data: ProductTabs) { - const res = await request.put>( - MODULES_API_URL + '/oa/product-tabs', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除产品属性 - */ -export async function removeProductTabs(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/product-tabs/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除产品属性 - */ -export async function removeBatchProductTabs(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/product-tabs/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - MODULES_API_URL + '/oa/product-tabs/existence', - { - params: { field, value, id } - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/product/tabs/model/index.ts b/api/oa/product/tabs/model/index.ts deleted file mode 100644 index 9115ef4..0000000 --- a/api/oa/product/tabs/model/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 产品属性 - */ -export interface ProductTabs { - productId?: number; - name?: string; - type?: string; - comments?: string; - userId?: number; - appId?: number; - status?: any; - sortNumber?: number; - createTime?: string; -} - -/** - * 项目参数搜索条件 - */ -export interface ProductTabsParam extends PageParam { - productId?: number; - userId?: number; -} diff --git a/api/oa/project/index.ts b/api/oa/project/index.ts deleted file mode 100644 index 3e06eea..0000000 --- a/api/oa/project/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Project, ProjectParam } from './model'; - -/** - * 分页查询项目 - */ -export async function pageProject(params: ProjectParam) { - const res = await request.get>>( - '/oa/project/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询项目列表 - */ -export async function listProject(params?: ProjectParam) { - const res = await request.get>('/oa/project', { - params - }); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询项目 - */ -export async function getProject(id: number) { - const res = await request.get>('/oa/project/' + id); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加项目 - */ -export async function addProject(data: Project) { - const res = await request.post>('/oa/project', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改项目 - */ -export async function updateProject(data: Project) { - const res = await request.put>('/oa/project', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除项目 - */ -export async function removeProject(id?: number) { - const res = await request.delete>('/oa/project/' + id); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除项目 - */ -export async function removeBatchProject(data: (number | undefined)[]) { - const res = await request.delete>('/oa/project/batch', { - data - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>('/oa/project/existence', { - params: { field, value, id } - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/project/model/index.ts b/api/oa/project/model/index.ts deleted file mode 100644 index bb6e700..0000000 --- a/api/oa/project/model/index.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 项目 - */ -export interface Project { - // 项目id - projectId?: number; - // 项目类型 - projectType?: string; - // 项目分类 - projectCategory?: string; - // 项目标识 - projectCode: string; - // 项目名称 - projectName?: string; - // 项目图标 - projectAvatar?: string; - url?: string; - urlDev?: string; - urlAdmin?: string; - account?: string; - money?: string; - realMoney?: string; - annualFee?: string; - qrcode?: string; - progress?: string; - views?: string; - // 项目详情 - content?: string; - // 客户ID - customerId?: number; - // 客户名称 - customerName?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - // 创建时间 - createTime?: string; - // 状态 - status?: string; - // 用户ID - userId?: number; -} - -/** - * 项目搜索条件 - */ -export interface ProjectParam extends PageParam { - projectName?: string; - projectCode?: string; - status?: string; - // 商户编号 - merchantCode?: string; -} diff --git a/api/oa/task-count/index.ts b/api/oa/task-count/index.ts deleted file mode 100644 index 7006fa9..0000000 --- a/api/oa/task-count/index.ts +++ /dev/null @@ -1,120 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { TaskCount, TaskCountParam } from './model/index'; -import { TabsParam } from '@/api/tabs'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询统计 - */ -export async function pageTaskCount(params: TaskCountParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/task-count/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询统计列表 - */ -export async function listTaskCount(params?: TaskCountParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-count', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询统计 - */ -export async function getTaskCount(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-count/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加统计 - */ -export async function addTaskCount(data: TaskCount) { - const res = await request.post>( - MODULES_API_URL + '/oa/task-count', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改统计 - */ -export async function updateTaskCount(data: TaskCount) { - const res = await request.put>( - MODULES_API_URL + '/oa/task-count', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除统计 - */ -export async function removeTaskCount(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/task-count/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除统计 - */ -export async function removeBatchTaskCount(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/task-count/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -export async function getCount(params?: TabsParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-count/count', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/task-count/model/index.ts b/api/oa/task-count/model/index.ts deleted file mode 100644 index 41f65d9..0000000 --- a/api/oa/task-count/model/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 统计 - */ -export interface TaskCount { - // 统计id - taskCountId?: number; - userId?: number; - nickname?: string; - avatar?: string; - phone?: string; - pending?: number; - unused?: number; - today?: number; - month?: number; - year?: number; - total?: number; - commander?: number; - createTime?: string; - updateTime?: string; -} - -/** - * 统计搜索条件 - */ -export interface TaskCountParam extends PageParam { - taskCountId?: number; - userId?: number; - roleId?: number; - roleCode?: string; -} diff --git a/api/oa/task-record/index.ts b/api/oa/task-record/index.ts deleted file mode 100644 index 76136e4..0000000 --- a/api/oa/task-record/index.ts +++ /dev/null @@ -1,120 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { TaskRecord, TaskRecordParam } from './model/index'; -import { TabsParam } from '@/api/tabs'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询任务 - */ -export async function pageTaskRecord(params: TaskRecordParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/task-record/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询任务列表 - */ -export async function listTaskRecord(params?: TaskRecordParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-record', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询任务 - */ -export async function getTaskRecord(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-record/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加任务 - */ -export async function addTaskRecord(data: TaskRecord) { - const res = await request.post>( - MODULES_API_URL + '/oa/task-record', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改任务 - */ -export async function updateTaskRecord(data: TaskRecord) { - const res = await request.put>( - MODULES_API_URL + '/oa/task-record', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除任务 - */ -export async function removeTaskRecord(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/task-record/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除任务 - */ -export async function removeBatchTaskRecord(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/task-record/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -export async function getCount(params?: TabsParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-record/count', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/task-record/model/index.ts b/api/oa/task-record/model/index.ts deleted file mode 100644 index 50254e3..0000000 --- a/api/oa/task-record/model/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { PageParam } from '@/api'; -import { User } from '@/api/user/model'; - -/** - * 任务 - */ -export interface TaskRecord { - // 任务id - taskRecordId?: number; - taskId?: number; - parentId?: number; - nickname?: string; - avatar?: string; - content?: string; - files?: any; - appId?: number; - developerId?: number; - userId?: number; - sortNumber?: number; - comments?: string; - status?: string; - children?: TaskRecord[] | []; - createTime?: string; - toUser: User | null; -} - -/** - * 任务搜索条件 - */ -export interface TaskRecordParam extends PageParam { - taskRecordId?: number; - taskId?: number; - userId?: number; - developerId?: number; -} diff --git a/api/oa/task-user/index.ts b/api/oa/task-user/index.ts deleted file mode 100644 index 6ac9da6..0000000 --- a/api/oa/task-user/index.ts +++ /dev/null @@ -1,120 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { TaskUser, TaskUserParam } from './model/index'; -import { TabsParam } from '@/api/tabs'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询工单成员 - */ -export async function pageTaskUser(params: TaskUserParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/task-user/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询工单成员列表 - */ -export async function listTaskUser(params?: TaskUserParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-user', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询工单成员 - */ -export async function getTaskUser(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-user/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加工单成员 - */ -export async function addTaskUser(data: TaskUser) { - const res = await request.post>( - MODULES_API_URL + '/oa/task-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改工单成员 - */ -export async function updateTaskUser(data: TaskUser) { - const res = await request.put>( - MODULES_API_URL + '/oa/task-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除工单成员 - */ -export async function removeTaskUser(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/task-user/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除工单成员 - */ -export async function removeBatchTaskUser(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/task-user/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -export async function getCount(params?: TabsParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/task-user/count', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/task-user/model/index.ts b/api/oa/task-user/model/index.ts deleted file mode 100644 index 334c1ea..0000000 --- a/api/oa/task-user/model/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 任务 - */ -export interface TaskUser { - // 任务id - taskUserId?: number; - taskId?: number; - role?: number; - userId?: number; - status?: string; - avatar?: string; - name?: string; - username?: string; - email?: string; - phone?: string; -} - -/** - * 任务搜索条件 - */ -export interface TaskUserParam extends PageParam { - taskUserId?: number; - taskId?: number; - userId?: number; -} diff --git a/api/oa/task/index.ts b/api/oa/task/index.ts deleted file mode 100644 index e8ac5d6..0000000 --- a/api/oa/task/index.ts +++ /dev/null @@ -1,154 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Task, TaskParam } from './model/index'; -import { TabsParam } from '@/api/tabs'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询任务 - */ -export async function pageTask(params: TaskParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/task/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询任务列表 - */ -export async function listTask(params?: TaskParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/task', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询任务 - */ -export async function getTask(id: number) { - const res = await request.get>( - MODULES_API_URL + '/oa/task/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加任务 - */ -export async function addTask(data: Task) { - const res = await request.post>( - MODULES_API_URL + '/oa/task', - data - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改任务 - */ -export async function updateTask(data: Task) { - const res = await request.put>( - MODULES_API_URL + '/oa/task', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除任务 - */ -export async function removeTask(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/oa/task/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除任务 - */ -export async function removeBatchTask(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/oa/task/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -export async function getCount(params?: TabsParam) { - const res = await request.get>( - MODULES_API_URL + '/oa/task/count', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 获取工单二维码 - * @param params - */ -export async function taskQRCode(params: TaskParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/task/taskQRCode', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 获取邀请加入二维码 - * @param params - */ -export async function taskJoinQRCode(params: TaskParam) { - const res = await request.get>>( - MODULES_API_URL + '/oa/task/taskJoinQRCode', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/task/model/index.ts b/api/oa/task/model/index.ts deleted file mode 100644 index 31a4cfd..0000000 --- a/api/oa/task/model/index.ts +++ /dev/null @@ -1,111 +0,0 @@ -import type { PageParam } from '@/api'; -import { TaskRecord } from '@/api/oa/task-record/model'; -import { TaskUser } from '@/api/oa/task-user/model'; - -/** - * 任务 - */ -export interface Task { - // 任务id - taskId?: number; - // 任务名称 - name?: string; - // 任务类型 - taskType?: string; - // 关联应用 - appId?: number; - appName?: string; - // 项目ID - projectId?: string; - // 客户ID - customerId?: string; - // 资产ID - assetsId?: string; - // 开始时间 - startTime?: string; - // 结束时间 - endTime?: string; - // 任务内容 - content?: string; - files?: string; - // 任务发起人 - promoter?: number; - promoterName?: string; - promoterAlias?: string; - promoterAvatar?: string; - promoterCompanyName?: string; - // 任务状态 - progress?: number; - isRead?: boolean; - // 优先级 - priority?: string; - // 品质要求 - quality?: string; - // 期限(天) - day?: string; - // 排序 - sortNumber?: number; - // 备注 - comments?: string; - redirect?: string; - // 创建时间 - createTime?: string; - updateTime?: string; - // 状态 - status?: number; - // 发布者 - userId?: any; - // 发布者昵称 - nickname?: string; - // 项目名称 - projectName?: string; - // 图片集 - images?: []; - avatar?: string; - // 受理人 - commander?: number; - commanderName?: string; - commanderAlias?: string; - commanderAvatar?: string; - commanderCompanyName?: string; - commanderRealName?: string; - // 最后回复人 - lastRealName?: string; - lastAvatar?: string; - lastReadUser?: number; - lastNickname?: string; - recordList?: TaskRecord[]; - users?: TaskUser[]; - phone?: string; - overdueDays?: string; - phoneXX?: string; - action?: string; - // 机密信息 - confidential?: any; - tenantId?: number; -} - -/** - * 任务搜索条件 - */ -export interface TaskParam extends PageParam { - taskId?: number; - status?: any; - name?: string; - promoter?: number; - promoterName?: string; - commander?: number; - commanderName?: string; - progress?: number; - betweenTime?: any; - userId?: number; - nickname?: string; - keywords?: any; - current?: string; - pending?: number; - appId?: number; - appName?: string; - companyId?: number; - companyName?: string; - taskType?: string; -} diff --git a/api/oa/task/model/progress.ts b/api/oa/task/model/progress.ts deleted file mode 100644 index 20cf262..0000000 --- a/api/oa/task/model/progress.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * 枚举类 - */ -export const TOBEARRANGED = 0; // 待安排 -export const PENDING = 1; // 待处理 -export const PROCESSING = 2; // 处理中 -export const TOBECONFIRMED = 3; // 待评价 -export const COMPLETED = 4; // 已完成 -export const CLOSED = 5; // 已关闭 diff --git a/api/oa/task/model/task.ts b/api/oa/task/model/task.ts deleted file mode 100644 index 0fd77f8..0000000 --- a/api/oa/task/model/task.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const TASK_STATUS_0 = 0; // 待处理 -export const TASK_STATUS_1 = 1; // 已完成 - -export const ACTION_1 = '派单'; -export const ACTION_2 = '已解决'; -export const ACTION_3 = '关单'; -export const ACTION_4 = '分享'; -export const ACTION_5 = '编辑'; diff --git a/api/oa/tennat/index.ts b/api/oa/tennat/index.ts deleted file mode 100644 index 609092e..0000000 --- a/api/oa/tennat/index.ts +++ /dev/null @@ -1,155 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Tenant, TenantParam } from './model'; -import { Menu } from '@/api/system/menu/model'; - -/** - * 分页查询租户 - */ -export async function pageTenant(params: TenantParam) { - // 租户列表查询需要传一个key - // params.tenantCode = 'ZAcxbdmDQFwUKC3e'; - const res = await request.get>>( - '/system/tenant/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询租户资料 - */ -export async function profile(params?: TenantParam) { - const res = await request.get>('/system/tenant/profile', { - params - }); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询租户列表 - */ -export async function listTenant(params?: TenantParam) { - const res = await request.get>('/system/tenant', { - params - }); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询 - */ -export async function getTenant(id: number) { - const res = await request.get>('/system/tenant/' + id); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加租户 - */ -export async function addTenant(data: Tenant) { - const res = await request.post>('/system/tenant', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改租户 - */ -export async function updateTenant(data: Tenant) { - const res = await request.put>('/system/tenant', data); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除租户 - */ -export async function removeTenant(id?: number) { - const res = await request.delete>('/system/tenant/' + id); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除租户 - */ -export async function removeBatchTenant(data: (number | undefined)[]) { - const res = await request.delete>('/system/tenant/batch', { - data - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 重置用户密码 - */ -export async function updateTenantPassword( - tenantId?: number, - password = 'gxwebsoft.com' -) { - const res = await request.put>('/system/tenant/password', { - tenantId, - password - }); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 检查IP是否存在 - */ -export async function checkExistence( - field: string, - value: string, - id?: number -) { - const res = await request.get>( - '/system/tenant/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 initialization(roleId?: number) { - const res = await request.get>( - '/system/tenant/role-menu/' + roleId - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/oa/tennat/model/index.ts b/api/oa/tennat/model/index.ts deleted file mode 100644 index 7f9fbd6..0000000 --- a/api/oa/tennat/model/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 租户 - */ -export interface Tenant { - // 租户id - tenantId?: number; - // 租户名称 - tenantName?: string; - // 应用ID - appId?: string; - // 应用秘钥 - appSecret?: string; - logo?: string; - // 所属客户 - companyName?: string; - // 关联客户ID - companyId?: string; - // 备注 - comments?: string; - // 创建时间 - createTime?: string; - // 状态 - status?: number; - // - password?: string; -} - -/** - * 租户搜索条件 - */ -export interface TenantParam extends PageParam { - tenantName?: string; - appId?: string; - companyId?: number; - companyName?: string; - tenantCode?: string; -} diff --git a/api/passport/login/index.ts b/api/passport/login/index.ts index dd8512c..f789b8b 100644 --- a/api/passport/login/index.ts +++ b/api/passport/login/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; // import { setToken } from '@/utils/token-util'; import type { ApiResult } from '@/api'; import type { @@ -17,17 +17,17 @@ export async function login(data: LoginParam) { SERVER_API_URL + '/login', data ); - if (res.data.code === 0) { + if (res.code === 0) { // setToken(res.data.data?.access_token, data.remember); - if (res.data.data?.user) { - const user = res.data.data?.user; + if (res.data?.user) { + const user = res.data?.user; localStorage.setItem('TenantId', String(user.tenantId)); localStorage.setItem('UserId', String(user.userId)); } - return res.data.message; + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -37,10 +37,10 @@ export async function getCaptcha() { const res = await request.get>( SERVER_API_URL + '/captcha' ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } export async function loginBySms(data: LoginParam) { @@ -48,7 +48,7 @@ export async function loginBySms(data: LoginParam) { SERVER_API_URL + '/loginBySms', data ); - if (res.data.code === 0) { + if (res.code === 0) { console.log(res.data,'登录成功') // setToken(res.data.data?.access_token, data.remember); // if (res.data.data?.user) { @@ -60,9 +60,9 @@ export async function loginBySms(data: LoginParam) { // localStorage.setItem('MerchantName', String(user.merchantName)); // } - return res.data.message; + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -73,10 +73,10 @@ export async function sendSmsCaptcha(data: LoginParam) { SERVER_API_URL + '/sendSmsCaptcha', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -87,11 +87,11 @@ export async function remoteLogin(data: LoginParam) { 'https://open.gxwebsoft.com/api/login', data ); - if (res.data.code === 0) { + if (res.code === 0) { // setToken(res.data.data?.access_token, data.remember); - return res.data.message; + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -102,8 +102,8 @@ export async function getWxWorkQrConnect(data: any) { SERVER_API_URL + '/wx-work', data ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/shop/brand/index.ts b/api/shop/brand/index.ts deleted file mode 100644 index 2102a84..0000000 --- a/api/shop/brand/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Brand, BrandParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询品牌 - */ -export async function pageBrand(params: BrandParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/brand/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询品牌列表 - */ -export async function listBrand(params?: BrandParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/brand', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加品牌 - */ -export async function addBrand(data: Brand) { - const res = await request.post>( - MODULES_API_URL + '/shop/brand', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改品牌 - */ -export async function updateBrand(data: Brand) { - const res = await request.put>( - MODULES_API_URL + '/shop/brand', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除品牌 - */ -export async function removeBrand(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/brand/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除品牌 - */ -export async function removeBatchBrand(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/brand/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询品牌 - */ -export async function getBrand(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/brand/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/brand/model/index.ts b/api/shop/brand/model/index.ts deleted file mode 100644 index e2698e6..0000000 --- a/api/shop/brand/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 品牌 - */ -export interface Brand { - // ID - brandId?: number; - // 品牌名称 - brandName?: string; - // 图标 - image?: string; - // 备注 - comments?: string; - // 状态 - status?: number; - // 排序号 - sortNumber?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 品牌搜索条件 - */ -export interface BrandParam extends PageParam { - brandId?: number; - keywords?: string; -} diff --git a/api/shop/cashier/index.ts b/api/shop/cashier/index.ts deleted file mode 100644 index 790e92c..0000000 --- a/api/shop/cashier/index.ts +++ /dev/null @@ -1,194 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Cashier, CashierParam, CashierVo } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询收银 - */ -export async function pageCashier(params: CashierParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/cashier/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询收银列表 - */ -export async function listCashier(params?: CashierParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/cashier', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询收银列表 - */ -export async function listByGroupId(params?: CashierParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/cashier/listByGroupId', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加收银 - */ -export async function addCashier(data: Cashier) { - const res = await request.post>( - MODULES_API_URL + '/shop/cashier', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改收银 - */ -export async function updateCashier(data: Cashier) { - const res = await request.put>( - MODULES_API_URL + '/shop/cashier', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除收银 - */ -export async function removeCashier(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/cashier/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除收银 - */ -export async function removeBatchCashier(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/cashier/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询收银 - */ -export async function getCashier(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/cashier/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 挂单 - * @param data - */ -export async function packCashier(data: Cashier[]) { - const res = await request.put>( - MODULES_API_URL + '/shop/cashier/packCashier', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 减少数量 - * @param data - */ -export async function subCartNum(data: Cashier) { - const res = await request.put>( - MODULES_API_URL + '/shop/cashier/subCartNum', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 增加数量 - * @param data - */ -export async function addCartNum(data: Cashier) { - const res = await request.put>( - MODULES_API_URL + '/shop/cashier/addCartNum', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 取单 - */ -export async function getByGroup(groupId: number) { - const res = await request.put>( - MODULES_API_URL + '/shop/cashier/getByGroup/' + groupId - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - - -/** - * 删除整单 - */ -export async function removeByGroup(groupId: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/cashier/removeByGroup/' + groupId - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/cashier/model/index.ts b/api/shop/cashier/model/index.ts deleted file mode 100644 index 64ed207..0000000 --- a/api/shop/cashier/model/index.ts +++ /dev/null @@ -1,80 +0,0 @@ -import type { PageParam } from '@/api'; - -export interface CashierVo { - // 购物车总金额 - totalPrice?: number; - // 宝贝总数量 - totalNums?: number; - // 已选宝贝 - selectNums?: number; - // 是否全选 - selectAll?: boolean; - // 订单备注 - comments?: string; - // 收银台商品列表 - cashiers?: Cashier[]; - // 按groupId分组 - groups?: any[]; -} - -/** - * 收银 - */ -export interface Cashier { - // 收银单ID - id?: number; - // 类型 0商城 1外卖 - type?: number; - // 唯一标识 - code?: string; - // 商品ID - goodsId?: number; - // 商品名称 - goodsName?: string; - // 场地名称 - name?: string; - // 商品封面图 - image?: string; - // 商品规格 - spec?: string; - // 商品价格 - price?: number; - // 商品数量 - cartNum?: number; - // 单商品合计 - totalPrice?: string; - // 0 = 未购买 1 = 已购买 - isPay?: string; - // 是否为立即购买 - isNew?: boolean; - // 是否选中 - selected?: boolean; - // 商户ID - merchantId?: number; - // 用户ID - userId?: string; - // 收银员ID - cashierId?: string; - // 收银单分组ID - groupId?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; - // 是否多规格 - specs?: number; - // 商品规格数据 - goodsSpecValue?: any; -} - -/** - * 收银搜索条件 - */ -export interface CashierParam extends PageParam { - id?: number; - groupId?: number; - showByGroup?: boolean; - keywords?: string; -} diff --git a/api/shop/count/index.ts b/api/shop/count/index.ts deleted file mode 100644 index 5f0672b..0000000 --- a/api/shop/count/index.ts +++ /dev/null @@ -1,119 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Count, CountParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -export async function data(params: CountParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/count/data', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 分页查询商城销售统计表 - */ -export async function pageCount(params: CountParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/count/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商城销售统计表列表 - */ -export async function listCount(params?: CountParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/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 addCount(data: Count) { - const res = await request.post>( - MODULES_API_URL + '/shop/count', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商城销售统计表 - */ -export async function updateCount(data: Count) { - const res = await request.put>( - MODULES_API_URL + '/shop/count', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商城销售统计表 - */ -export async function removeCount(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/count/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商城销售统计表 - */ -export async function removeBatchCount(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/count/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商城销售统计表 - */ -export async function getCount(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/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/api/shop/count/model/index.ts b/api/shop/count/model/index.ts deleted file mode 100644 index 469c78d..0000000 --- a/api/shop/count/model/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商城销售统计表 - */ -export interface Count { - // ID - id?: number; - // 统计日期 - dateTime?: string; - // 总销售额 - totalPrice?: string; - // 今日销售额 - todayPrice?: string; - // 总会员数 - totalUsers?: string; - // 今日新增 - todayUsers?: string; - // 总订单笔数 - totalOrders?: string; - // 今日订单笔数 - todayOrders?: string; - // 备注 - comments?: string; - // 状态, 0正常, 1冻结 - status?: number; - // 租户id - tenantId?: number; - // 注册时间 - createTime?: string; -} - -/** - * 商城销售统计表搜索条件 - */ -export interface CountParam extends PageParam { - id?: number; - dateTime?: string; - keywords?: string; -} diff --git a/api/shop/dealerApply/index.ts b/api/shop/dealerApply/index.ts deleted file mode 100644 index 4bb169b..0000000 --- a/api/shop/dealerApply/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DealerApply, DealerApplyParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询分销商申请记录表 - */ -export async function pageDealerApply(params: DealerApplyParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/dealer-apply/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询分销商申请记录表列表 - */ -export async function listDealerApply(params?: DealerApplyParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-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 addDealerApply(data: DealerApply) { - const res = await request.post>( - MODULES_API_URL + '/shop/dealer-apply', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改分销商申请记录表 - */ -export async function updateDealerApply(data: DealerApply) { - const res = await request.put>( - MODULES_API_URL + '/shop/dealer-apply', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除分销商申请记录表 - */ -export async function removeDealerApply(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-apply/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除分销商申请记录表 - */ -export async function removeBatchDealerApply(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-apply/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询分销商申请记录表 - */ -export async function getDealerApply(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-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/api/shop/dealerApply/model/index.ts b/api/shop/dealerApply/model/index.ts deleted file mode 100644 index 5226459..0000000 --- a/api/shop/dealerApply/model/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 分销商申请记录表 - */ -export interface DealerApply { - // 主键ID - applyId?: number; - // 用户ID - userId?: number; - // 姓名 - realName?: string; - // 手机号 - mobile?: string; - // 推荐人用户ID - refereeId?: number; - // 申请方式(10需后台审核 20无需审核) - applyType?: number; - // 申请时间 - applyTime?: number; - // 审核状态 (10待审核 20审核通过 30驳回) - applyStatus?: number; - // 审核时间 - auditTime?: number; - // 驳回原因 - rejectReason?: string; - // 商城ID - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 分销商申请记录表搜索条件 - */ -export interface DealerApplyParam extends PageParam { - applyId?: number; - keywords?: string; -} diff --git a/api/shop/dealerCapital/index.ts b/api/shop/dealerCapital/index.ts deleted file mode 100644 index 53ff79c..0000000 --- a/api/shop/dealerCapital/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DealerCapital, DealerCapitalParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询分销商资金明细表 - */ -export async function pageDealerCapital(params: DealerCapitalParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/dealer-capital/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询分销商资金明细表列表 - */ -export async function listDealerCapital(params?: DealerCapitalParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-capital', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加分销商资金明细表 - */ -export async function addDealerCapital(data: DealerCapital) { - const res = await request.post>( - MODULES_API_URL + '/shop/dealer-capital', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改分销商资金明细表 - */ -export async function updateDealerCapital(data: DealerCapital) { - const res = await request.put>( - MODULES_API_URL + '/shop/dealer-capital', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除分销商资金明细表 - */ -export async function removeDealerCapital(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-capital/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除分销商资金明细表 - */ -export async function removeBatchDealerCapital(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-capital/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询分销商资金明细表 - */ -export async function getDealerCapital(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-capital/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/dealerCapital/model/index.ts b/api/shop/dealerCapital/model/index.ts deleted file mode 100644 index 2ada833..0000000 --- a/api/shop/dealerCapital/model/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 分销商资金明细表 - */ -export interface DealerCapital { - // 主键ID - id?: number; - // 分销商用户ID - userId?: number; - // 订单ID - orderId?: number; - // 资金流动类型 (10佣金收入 20提现支出 30转账支出 40转账收入) - flowType?: number; - // 金额 - money?: string; - // 描述 - describe?: string; - // 对方用户ID - toUserId?: number; - // 商城ID - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 分销商资金明细表搜索条件 - */ -export interface DealerCapitalParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/dealerOrder/index.ts b/api/shop/dealerOrder/index.ts deleted file mode 100644 index 87b9f8f..0000000 --- a/api/shop/dealerOrder/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DealerOrder, DealerOrderParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询分销商订单记录表 - */ -export async function pageDealerOrder(params: DealerOrderParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/dealer-order/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询分销商订单记录表列表 - */ -export async function listDealerOrder(params?: DealerOrderParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-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 addDealerOrder(data: DealerOrder) { - const res = await request.post>( - MODULES_API_URL + '/shop/dealer-order', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改分销商订单记录表 - */ -export async function updateDealerOrder(data: DealerOrder) { - const res = await request.put>( - MODULES_API_URL + '/shop/dealer-order', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除分销商订单记录表 - */ -export async function removeDealerOrder(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-order/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除分销商订单记录表 - */ -export async function removeBatchDealerOrder(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-order/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询分销商订单记录表 - */ -export async function getDealerOrder(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-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/api/shop/dealerOrder/model/index.ts b/api/shop/dealerOrder/model/index.ts deleted file mode 100644 index b8f6884..0000000 --- a/api/shop/dealerOrder/model/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 分销商订单记录表 - */ -export interface DealerOrder { - // 主键ID - id?: number; - // 买家用户ID - userId?: number; - // 订单ID - orderId?: number; - // 订单总金额(不含运费) - orderPrice?: string; - // 分销商用户id(一级) - firstUserId?: number; - // 分销商用户id(二级) - secondUserId?: number; - // 分销商用户id(三级) - thirdUserId?: number; - // 分销佣金(一级) - firstMoney?: string; - // 分销佣金(二级) - secondMoney?: string; - // 分销佣金(三级) - thirdMoney?: string; - // 订单是否失效(0未失效 1已失效) - isInvalid?: number; - // 佣金结算(0未结算 1已结算) - isSettled?: number; - // 结算时间 - settleTime?: number; - // 商城ID - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 分销商订单记录表搜索条件 - */ -export interface DealerOrderParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/dealerReferee/index.ts b/api/shop/dealerReferee/index.ts deleted file mode 100644 index 542d4c3..0000000 --- a/api/shop/dealerReferee/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DealerReferee, DealerRefereeParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询分销商推荐关系表 - */ -export async function pageDealerReferee(params: DealerRefereeParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/dealer-referee/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询分销商推荐关系表列表 - */ -export async function listDealerReferee(params?: DealerRefereeParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-referee', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加分销商推荐关系表 - */ -export async function addDealerReferee(data: DealerReferee) { - const res = await request.post>( - MODULES_API_URL + '/shop/dealer-referee', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改分销商推荐关系表 - */ -export async function updateDealerReferee(data: DealerReferee) { - const res = await request.put>( - MODULES_API_URL + '/shop/dealer-referee', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除分销商推荐关系表 - */ -export async function removeDealerReferee(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-referee/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除分销商推荐关系表 - */ -export async function removeBatchDealerReferee(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-referee/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询分销商推荐关系表 - */ -export async function getDealerReferee(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-referee/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/dealerReferee/model/index.ts b/api/shop/dealerReferee/model/index.ts deleted file mode 100644 index 4edc1de..0000000 --- a/api/shop/dealerReferee/model/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 分销商推荐关系表 - */ -export interface DealerReferee { - // 主键ID - id?: number; - // 分销商用户ID - dealerId?: number; - // 用户id(被推荐人) - userId?: number; - // 推荐关系层级(1,2,3) - level?: number; - // 商城ID - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 分销商推荐关系表搜索条件 - */ -export interface DealerRefereeParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/dealerSetting/index.ts b/api/shop/dealerSetting/index.ts deleted file mode 100644 index bea5005..0000000 --- a/api/shop/dealerSetting/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DealerSetting, DealerSettingParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询分销商设置表 - */ -export async function pageDealerSetting(params: DealerSettingParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/dealer-setting/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询分销商设置表列表 - */ -export async function listDealerSetting(params?: DealerSettingParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-setting', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加分销商设置表 - */ -export async function addDealerSetting(data: DealerSetting) { - const res = await request.post>( - MODULES_API_URL + '/shop/dealer-setting', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改分销商设置表 - */ -export async function updateDealerSetting(data: DealerSetting) { - const res = await request.put>( - MODULES_API_URL + '/shop/dealer-setting', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除分销商设置表 - */ -export async function removeDealerSetting(id?: string) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-setting/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除分销商设置表 - */ -export async function removeBatchDealerSetting(data: (string | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-setting/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询分销商设置表 - */ -export async function getDealerSetting(id: string) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-setting/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/dealerSetting/model/index.ts b/api/shop/dealerSetting/model/index.ts deleted file mode 100644 index 9dbe7b6..0000000 --- a/api/shop/dealerSetting/model/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 分销商设置表 - */ -export interface DealerSetting { - // 设置项标示 - key?: string; - // 设置项描述 - describe?: string; - // 设置内容(json格式) - values?: string; - // 商城ID - tenantId?: number; - // 更新时间 - updateTime?: number; -} - -/** - * 分销商设置表搜索条件 - */ -export interface DealerSettingParam extends PageParam { - key?: number; - keywords?: string; -} diff --git a/api/shop/dealerUser/index.ts b/api/shop/dealerUser/index.ts deleted file mode 100644 index ea94f46..0000000 --- a/api/shop/dealerUser/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DealerUser, DealerUserParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询分销商用户记录表 - */ -export async function pageDealerUser(params: DealerUserParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/dealer-user/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询分销商用户记录表列表 - */ -export async function listDealerUser(params?: DealerUserParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-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 addDealerUser(data: DealerUser) { - const res = await request.post>( - MODULES_API_URL + '/shop/dealer-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改分销商用户记录表 - */ -export async function updateDealerUser(data: DealerUser) { - const res = await request.put>( - MODULES_API_URL + '/shop/dealer-user', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除分销商用户记录表 - */ -export async function removeDealerUser(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-user/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除分销商用户记录表 - */ -export async function removeBatchDealerUser(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-user/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询分销商用户记录表 - */ -export async function getDealerUser(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-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/api/shop/dealerUser/model/index.ts b/api/shop/dealerUser/model/index.ts deleted file mode 100644 index 5091a0c..0000000 --- a/api/shop/dealerUser/model/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 分销商用户记录表 - */ -export interface DealerUser { - // 自增id - id?: number; - // 分销商用户ID - userId?: number; - // 姓名 - realName?: string; - // 手机号 - mobile?: string; - // 支付密码 - payPassword?: string; - // 当前可提现佣金 - money?: string; - // 已冻结佣金 - freezeMoney?: string; - // 累积提现佣金 - totalMoney?: string; - // 推荐人用户ID - refereeId?: number; - // 成员数量(一级) - firstNum?: number; - // 成员数量(二级) - secondNum?: number; - // 成员数量(三级) - thirdNum?: number; - // 是否删除 - isDelete?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 分销商用户记录表搜索条件 - */ -export interface DealerUserParam extends PageParam { - id?: number; - userId?: number; - keywords?: string; -} diff --git a/api/shop/dealerWithdraw/index.ts b/api/shop/dealerWithdraw/index.ts deleted file mode 100644 index e52e413..0000000 --- a/api/shop/dealerWithdraw/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { DealerWithdraw, DealerWithdrawParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询分销商提现明细表 - */ -export async function pageDealerWithdraw(params: DealerWithdrawParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/dealer-withdraw/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询分销商提现明细表列表 - */ -export async function listDealerWithdraw(params?: DealerWithdrawParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-withdraw', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加分销商提现明细表 - */ -export async function addDealerWithdraw(data: DealerWithdraw) { - const res = await request.post>( - MODULES_API_URL + '/shop/dealer-withdraw', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改分销商提现明细表 - */ -export async function updateDealerWithdraw(data: DealerWithdraw) { - const res = await request.put>( - MODULES_API_URL + '/shop/dealer-withdraw', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除分销商提现明细表 - */ -export async function removeDealerWithdraw(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-withdraw/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除分销商提现明细表 - */ -export async function removeBatchDealerWithdraw(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/dealer-withdraw/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询分销商提现明细表 - */ -export async function getDealerWithdraw(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/dealer-withdraw/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/dealerWithdraw/model/index.ts b/api/shop/dealerWithdraw/model/index.ts deleted file mode 100644 index f6ae4c1..0000000 --- a/api/shop/dealerWithdraw/model/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 分销商提现明细表 - */ -export interface DealerWithdraw { - // 主键ID - id?: number; - // 分销商用户ID - userId?: number; - // 提现金额 - money?: string; - // 打款方式 (10微信 20支付宝 30银行卡) - payType?: number; - // 支付宝姓名 - alipayName?: string; - // 支付宝账号 - alipayAccount?: string; - // 开户行名称 - bankName?: string; - // 银行开户名 - bankAccount?: string; - // 银行卡号 - bankCard?: string; - // 申请状态 (10待审核 20审核通过 30驳回 40已打款) - applyStatus?: number; - // 审核时间 - auditTime?: number; - // 驳回原因 - rejectReason?: string; - // 来源客户端(APP、H5、小程序等) - platform?: string; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 分销商提现明细表搜索条件 - */ -export interface DealerWithdrawParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goods/index.ts b/api/shop/goods/index.ts deleted file mode 100644 index 100a82d..0000000 --- a/api/shop/goods/index.ts +++ /dev/null @@ -1,116 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Goods, GoodsParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -export async function getCount(params: GoodsParam) { - const res = await request.get(MODULES_API_URL + '/shop/goods/data', { - params - }); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 分页查询商品记录表 - */ -export async function pageGoods(params: GoodsParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品记录表列表 - */ -export async function listGoods(params?: GoodsParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品记录表 - */ -export async function addGoods(data: Goods) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品记录表 - */ -export async function updateGoods(data: Goods) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品记录表 - */ -export async function removeGoods(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品记录表 - */ -export async function removeBatchGoods(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品记录表 - */ -export async function getGoods(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goods/model/index.ts b/api/shop/goods/model/index.ts deleted file mode 100644 index b3f2ce7..0000000 --- a/api/shop/goods/model/index.ts +++ /dev/null @@ -1,114 +0,0 @@ -import type { PageParam } from '@/api'; -import type { GoodsSpec } from "@/api/shop/goodsSpec/model"; -import type { GoodsSku } from "@/api/shop/goodsSku/model"; -import type {Merchant} from "~/api/shop/merchant/model"; - -export interface GoodsCount { - totalNum: number; - totalNum2: number; - totalNum3: number; - totalNum4: number; -} -/** - * 商品记录表 - */ -export interface Goods { - // 自增ID - goodsId?: number; - // 类型 1实物商品 2虚拟商品 - type?: number; - // 商品编码 - code?: string; - // 商品标题 - goodsName?: string; - // 商品封面图 - image?: string; - // 商品详情 - content?: string; - // 商品分类ID - categoryId?: number; - // 一级分类 - categoryParent?: string; - // 二级分类 - categoryChildren?: string; - // 商品规格 0单规格 1多规格 - specs?: number; - // 货架 - position?: string; - // 进货价格 - price?: number; - // 销售价格 - salePrice?: number; - // 库存计算方式(10下单减库存 20付款减库存) - deductStockType?: number; - // 封面图 - files?: string; - // 封面图数组 - filesImgs?: any; - // 销量 - sales?: number; - // 库存 - stock?: number; - // 商品重量 - goodsWeight?: number; - // 消费赚取积分 - gainIntegral?: number; - // 推荐 - recommend?: number; - // 商户ID - merchantId?: number; - // 商户名称 - merchantName?: string; - // 状态(0:未上架,1:上架) - isShow?: number; - // 状态, 0上架 1待上架 2待审核 3审核不通过 - status?: number; - // 备注 - comments?: string; - // 排序号 - sortNumber?: number; - // 用户ID - userId?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; - // 显示规格名 - specName?: string; - // 商品规格 - goodsSpecs?: GoodsSpec[]; - // 商品sku列表 - goodsSkus?: GoodsSku[]; - // 单位名称 - unitName?: string; - // 购买数量 - num?: number; - radio?: any; - // 店铺信息 - merchant?: Merchant; -} - -export interface BathSet { - - price?: number; - salePrice?: number; - stock?: number; - skuNo?: string; -} - -/** - * 商品记录表搜索条件 - */ -export interface GoodsParam extends PageParam { - parentId?: number; - categoryId?: number; - goodsId?: number; - goodsName?: string; - isShow?: number; - stock?: number; - keywords?: string; -} diff --git a/api/shop/goodsAttr/index.ts b/api/shop/goodsAttr/index.ts deleted file mode 100644 index 25ccbdd..0000000 --- a/api/shop/goodsAttr/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsAttr, GoodsAttrParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品属性表 - */ -export async function pageGoodsAttr(params: GoodsAttrParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-attr/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品属性表列表 - */ -export async function listGoodsAttr(params?: GoodsAttrParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-attr', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品属性表 - */ -export async function addGoodsAttr(data: GoodsAttr) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-attr', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品属性表 - */ -export async function updateGoodsAttr(data: GoodsAttr) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-attr', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品属性表 - */ -export async function removeGoodsAttr(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-attr/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品属性表 - */ -export async function removeBatchGoodsAttr(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-attr/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品属性表 - */ -export async function getGoodsAttr(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-attr/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsAttr/model/index.ts b/api/shop/goodsAttr/model/index.ts deleted file mode 100644 index 458cfe0..0000000 --- a/api/shop/goodsAttr/model/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品属性表 - */ -export interface GoodsAttr { - // 主键 - id?: number; - // 商品ID - goodsId?: number; - // 属性名 - attrName?: string; - // 属性值 - attrValues?: string; - // 活动类型 0=商品,1=秒杀,2=砍价,3=拼团 - type?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; -} - -/** - * 商品属性表搜索条件 - */ -export interface GoodsAttrParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsAttrResult/index.ts b/api/shop/goodsAttrResult/index.ts deleted file mode 100644 index de9c0d4..0000000 --- a/api/shop/goodsAttrResult/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsAttrResult, GoodsAttrResultParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品属性详情表 - */ -export async function pageGoodsAttrResult(params: GoodsAttrResultParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-attr-result/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品属性详情表列表 - */ -export async function listGoodsAttrResult(params?: GoodsAttrResultParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-attr-result', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品属性详情表 - */ -export async function addGoodsAttrResult(data: GoodsAttrResult) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-attr-result', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品属性详情表 - */ -export async function updateGoodsAttrResult(data: GoodsAttrResult) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-attr-result', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品属性详情表 - */ -export async function removeGoodsAttrResult(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-attr-result/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品属性详情表 - */ -export async function removeBatchGoodsAttrResult(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-attr-result/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品属性详情表 - */ -export async function getGoodsAttrResult(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-attr-result/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsAttrResult/model/index.ts b/api/shop/goodsAttrResult/model/index.ts deleted file mode 100644 index 62afe50..0000000 --- a/api/shop/goodsAttrResult/model/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品属性详情表 - */ -export interface GoodsAttrResult { - // 主键 - id?: number; - // 商品ID - goodsId?: number; - // 商品属性参数 - result?: string; - // 活动类型 0=商品,1=秒杀,2=砍价,3=拼团 - type?: string; - // 租户id - tenantId?: number; - // 更新时间 - updateTime?: string; -} - -/** - * 商品属性详情表搜索条件 - */ -export interface GoodsAttrResultParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsAttrValue/index.ts b/api/shop/goodsAttrValue/index.ts deleted file mode 100644 index 24924e6..0000000 --- a/api/shop/goodsAttrValue/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsAttrValue, GoodsAttrValueParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品属性值表 - */ -export async function pageGoodsAttrValue(params: GoodsAttrValueParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-attr-value/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品属性值表列表 - */ -export async function listGoodsAttrValue(params?: GoodsAttrValueParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-attr-value', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品属性值表 - */ -export async function addGoodsAttrValue(data: GoodsAttrValue) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-attr-value', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品属性值表 - */ -export async function updateGoodsAttrValue(data: GoodsAttrValue) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-attr-value', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品属性值表 - */ -export async function removeGoodsAttrValue(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-attr-value/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品属性值表 - */ -export async function removeBatchGoodsAttrValue(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-attr-value/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品属性值表 - */ -export async function getGoodsAttrValue(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-attr-value/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsAttrValue/model/index.ts b/api/shop/goodsAttrValue/model/index.ts deleted file mode 100644 index 2bee0f7..0000000 --- a/api/shop/goodsAttrValue/model/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品属性值表 - */ -export interface GoodsAttrValue { - // 主键 - id?: number; - // 商品ID - goodsId?: number; - // 商品属性索引值 (attr_value|attr_value[|....]) - suk?: string; - // 属性对应的库存 - stock?: number; - // 销量 - sales?: number; - // 属性金额 - price?: number; - // 图片 - image?: string; - // 唯一值 - unique?: string; - // 成本价 - cost?: string; - // 商品条码 - barCode?: string; - // 原价 - otPrice?: string; - // 重量 - weight?: string; - // 体积 - volume?: string; - // 一级返佣 - brokerage?: string; - // 二级返佣 - brokerageTwo?: string; - // 活动类型 0=商品,1=秒杀,2=砍价,3=拼团 - type?: string; - // 活动限购数量 - quota?: number; - // 活动限购数量显示 - quotaShow?: number; - // attr_values 创建更新时的属性对应 - attrValue?: string; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; - // 注册时间 - createTime?: string; -} - -/** - * 商品属性值表搜索条件 - */ -export interface GoodsAttrValueParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsCategory/index.ts b/api/shop/goodsCategory/index.ts deleted file mode 100644 index 0798d1f..0000000 --- a/api/shop/goodsCategory/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsCategory, GoodsCategoryParam } from './model'; -import { MODULES_API_URL } from '@/config/index'; - -/** - * 分页查询商品分类 - */ -export async function pageGoodsCategory(params: GoodsCategoryParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-category/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品分类列表 - */ -export async function listGoodsCategory(params?: GoodsCategoryParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-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 addGoodsCategory(data: GoodsCategory) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-category', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品分类 - */ -export async function updateGoodsCategory(data: GoodsCategory) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-category', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品分类 - */ -export async function removeGoodsCategory(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-category/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品分类 - */ -export async function removeBatchGoodsCategory(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-category/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品分类 - */ -export async function getGoodsCategory(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-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/api/shop/goodsComment/index.ts b/api/shop/goodsComment/index.ts deleted file mode 100644 index d8bb8b4..0000000 --- a/api/shop/goodsComment/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsComment, GoodsCommentParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询评论表 - */ -export async function pageGoodsComment(params: GoodsCommentParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-comment/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询评论表列表 - */ -export async function listGoodsComment(params?: GoodsCommentParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-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 addGoodsComment(data: GoodsComment) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-comment', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改评论表 - */ -export async function updateGoodsComment(data: GoodsComment) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-comment', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除评论表 - */ -export async function removeGoodsComment(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-comment/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除评论表 - */ -export async function removeBatchGoodsComment(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-comment/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询评论表 - */ -export async function getGoodsComment(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-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/api/shop/goodsComment/model/index.ts b/api/shop/goodsComment/model/index.ts deleted file mode 100644 index bf42cfa..0000000 --- a/api/shop/goodsComment/model/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 评论表 - */ -export interface GoodsComment { - // 评论ID - id?: number; - // 用户ID - uid?: number; - // 订单ID - oid?: number; - // 商品唯一id - unique?: string; - // 商品id - goodsId?: number; - // 某种商品类型(普通商品、秒杀商品) - replyType?: string; - // 商品分数 - goodsScore?: string; - // 服务分数 - serviceScore?: string; - // 评论内容 - comment?: string; - // 评论图片 - pics?: string; - // 管理员回复内容 - merchantReplyContent?: string; - // 管理员回复时间 - merchantReplyTime?: number; - // 0未删除1已删除 - isDel?: string; - // 0未回复1已回复 - isReply?: string; - // 用户名称 - nickname?: string; - // 用户头像 - avatar?: string; - // 商品规格属性值,多个,号隔开 - sku?: string; - // 状态, 0正常, 1冻结 - status?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 用户ID - userId?: number; - // 租户id - tenantId?: number; - // 注册时间 - createTime?: string; - // 更新时间 - updateTime?: string; -} - -/** - * 评论表搜索条件 - */ -export interface GoodsCommentParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsCoupon/index.ts b/api/shop/goodsCoupon/index.ts deleted file mode 100644 index 75e4d26..0000000 --- a/api/shop/goodsCoupon/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsCoupon, GoodsCouponParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品优惠券表 - */ -export async function pageGoodsCoupon(params: GoodsCouponParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-coupon/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品优惠券表列表 - */ -export async function listGoodsCoupon(params?: GoodsCouponParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-coupon', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品优惠券表 - */ -export async function addGoodsCoupon(data: GoodsCoupon) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-coupon', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品优惠券表 - */ -export async function updateGoodsCoupon(data: GoodsCoupon) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-coupon', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品优惠券表 - */ -export async function removeGoodsCoupon(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-coupon/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品优惠券表 - */ -export async function removeBatchGoodsCoupon(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-coupon/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品优惠券表 - */ -export async function getGoodsCoupon(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-coupon/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsCoupon/model/index.ts b/api/shop/goodsCoupon/model/index.ts deleted file mode 100644 index 109215d..0000000 --- a/api/shop/goodsCoupon/model/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品优惠券表 - */ -export interface GoodsCoupon { - // - id?: undefined, - // 商品id - goodsId?: undefined, - // 优惠劵id - issueCouponId?: undefined, - // 排序(数字越小越靠前) - sortNumber?: undefined, - // 状态, 0正常, 1冻结 - status?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 用户ID - userId?: number; - // 租户id - tenantId?: number; - // 注册时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 商品优惠券表搜索条件 - */ -export interface GoodsCouponParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsDescription/index.ts b/api/shop/goodsDescription/index.ts deleted file mode 100644 index 201328a..0000000 --- a/api/shop/goodsDescription/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsDescription, GoodsDescriptionParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品描述表 - */ -export async function pageGoodsDescription(params: GoodsDescriptionParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-description/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品描述表列表 - */ -export async function listGoodsDescription(params?: GoodsDescriptionParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-description', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品描述表 - */ -export async function addGoodsDescription(data: GoodsDescription) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-description', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品描述表 - */ -export async function updateGoodsDescription(data: GoodsDescription) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-description', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品描述表 - */ -export async function removeGoodsDescription(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-description/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品描述表 - */ -export async function removeBatchGoodsDescription(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-description/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品描述表 - */ -export async function getGoodsDescription(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-description/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsDescription/model/index.ts b/api/shop/goodsDescription/model/index.ts deleted file mode 100644 index 804b347..0000000 --- a/api/shop/goodsDescription/model/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品描述表 - */ -export interface GoodsDescription { - // - id?: number; - // 商品ID - goodsId?: number; - // 商品详情 - description?: string; - // 商品类型 - type?: string; - // 租户id - tenantId?: number; -} - -/** - * 商品描述表搜索条件 - */ -export interface GoodsDescriptionParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsLog/index.ts b/api/shop/goodsLog/index.ts deleted file mode 100644 index bcc2d64..0000000 --- a/api/shop/goodsLog/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsLog, GoodsLogParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品日志表 - */ -export async function pageGoodsLog(params: GoodsLogParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-log/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品日志表列表 - */ -export async function listGoodsLog(params?: GoodsLogParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-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 addGoodsLog(data: GoodsLog) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-log', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品日志表 - */ -export async function updateGoodsLog(data: GoodsLog) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-log', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品日志表 - */ -export async function removeGoodsLog(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-log/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品日志表 - */ -export async function removeBatchGoodsLog(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-log/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品日志表 - */ -export async function getGoodsLog(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-log/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsLog/model/index.ts b/api/shop/goodsLog/model/index.ts deleted file mode 100644 index 68ecab3..0000000 --- a/api/shop/goodsLog/model/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品日志表 - */ -export interface GoodsLog { - // 统计ID - id?: number; - // 类型visit,cart,order,pay,collect,refund - type?: string; - // 商品ID - goodsId?: number; - // 是否浏览 - visitNum?: string; - // 加入购物车数量 - cartNum?: number; - // 下单数量 - orderNum?: number; - // 支付数量 - payNum?: number; - // 支付金额 - payPrice?: string; - // 商品成本价 - costPrice?: string; - // 支付用户ID - payUid?: number; - // 退款数量 - refundNum?: number; - // 退款金额 - refundPrice?: string; - // 收藏 - collectNum?: string; - // 排序(数字越小越靠前) - sortNumber?: number; - // 状态, 0正常, 1冻结 - status?: number; - // 用户ID - userId?: number; - // 租户id - tenantId?: number; - // 注册时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 商品日志表搜索条件 - */ -export interface GoodsLogParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsRelation/index.ts b/api/shop/goodsRelation/index.ts deleted file mode 100644 index 40f2f0c..0000000 --- a/api/shop/goodsRelation/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsRelation, GoodsRelationParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品点赞和收藏表 - */ -export async function pageGoodsRelation(params: GoodsRelationParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-relation/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品点赞和收藏表列表 - */ -export async function listGoodsRelation(params?: GoodsRelationParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-relation', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品点赞和收藏表 - */ -export async function addGoodsRelation(data: GoodsRelation) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-relation', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品点赞和收藏表 - */ -export async function updateGoodsRelation(data: GoodsRelation) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-relation', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品点赞和收藏表 - */ -export async function removeGoodsRelation(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-relation/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品点赞和收藏表 - */ -export async function removeBatchGoodsRelation(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-relation/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品点赞和收藏表 - */ -export async function getGoodsRelation(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-relation/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsRelation/model/index.ts b/api/shop/goodsRelation/model/index.ts deleted file mode 100644 index 5e76007..0000000 --- a/api/shop/goodsRelation/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品点赞和收藏表 - */ -export interface GoodsRelation { - // id - id?: number; - // 用户ID - userId?: number; - // 商品ID - goodsId?: number; - // 类型(收藏(collect)、点赞(like)) - type?: string; - // 某种类型的商品(普通商品、秒杀商品) - category?: string; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 更新时间 - updateTime?: string; -} - -/** - * 商品点赞和收藏表搜索条件 - */ -export interface GoodsRelationParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsRule/index.ts b/api/shop/goodsRule/index.ts deleted file mode 100644 index 45cb93a..0000000 --- a/api/shop/goodsRule/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsRule, GoodsRuleParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品规则值(规格)表 - */ -export async function pageGoodsRule(params: GoodsRuleParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-rule/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品规则值(规格)表列表 - */ -export async function listGoodsRule(params?: GoodsRuleParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-rule', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品规则值(规格)表 - */ -export async function addGoodsRule(data: GoodsRule) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-rule', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品规则值(规格)表 - */ -export async function updateGoodsRule(data: GoodsRule) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-rule', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品规则值(规格)表 - */ -export async function removeGoodsRule(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-rule/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品规则值(规格)表 - */ -export async function removeBatchGoodsRule(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-rule/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品规则值(规格)表 - */ -export async function getGoodsRule(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-rule/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsRule/model/index.ts b/api/shop/goodsRule/model/index.ts deleted file mode 100644 index 6537e30..0000000 --- a/api/shop/goodsRule/model/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品规则值(规格)表 - */ -export interface GoodsRule { - // - id?: number; - // 规格名称 - ruleName?: string; - // 规格值 - ruleValue?: string; - // 租户id - tenantId?: number; -} - -/** - * 商品规则值(规格)表搜索条件 - */ -export interface GoodsRuleParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/goodsSku/index.ts b/api/shop/goodsSku/index.ts deleted file mode 100644 index dfb2dd1..0000000 --- a/api/shop/goodsSku/index.ts +++ /dev/null @@ -1,118 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsSku, GoodsSkuParam } from './model'; -import { MODULES_API_URL } from '@/config'; -import { GoodsSpec } from '@/api/shop/goodsSpec/model'; - -export async function generateGoodsSku(data: GoodsSpec) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-sku/generateGoodsSku', - data - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 分页查询商品sku列表 - */ -export async function pageGoodsSku(params: GoodsSkuParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-sku/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品sku列表列表 - */ -export async function listGoodsSku(params?: GoodsSkuParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-sku', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品sku列表 - */ -export async function addGoodsSku(data: GoodsSku) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-sku', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品sku列表 - */ -export async function updateGoodsSku(data: GoodsSku) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-sku', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品sku列表 - */ -export async function removeGoodsSku(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-sku/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品sku列表 - */ -export async function removeBatchGoodsSku(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-sku/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品sku列表 - */ -export async function getGoodsSku(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-sku/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsSku/model/index.ts b/api/shop/goodsSku/model/index.ts deleted file mode 100644 index 3d2ab7b..0000000 --- a/api/shop/goodsSku/model/index.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品sku列表 - */ -export interface GoodsSku { - // 主键ID - id?: number; - // 商品ID - goodsId?: number; - // 规格组ID - specId?: number; - // 商品图片 - image?: string; - // 商品价格 - price?: number; - // 市场价格 - salePrice?: number; - // 成本价 - cost?: string; - // 库存 - stock?: number; - // sku编码 - skuNo?: string; - // 唯一值 - unique?: string; - // 重量 - weight?: string; - // 体积 - volume?: string; - // 状态, 0正常, 1异常 - status?: number; - // 备注 - comments?: string; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - images?: any; - sku?: string; -} - -/** - * 商品sku列表搜索条件 - */ -export interface GoodsSkuParam extends PageParam { - id?: number; - goodsId?: number; - keywords?: string; -} diff --git a/api/shop/goodsSpec/index.ts b/api/shop/goodsSpec/index.ts deleted file mode 100644 index 9934cb3..0000000 --- a/api/shop/goodsSpec/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsSpec, GoodsSpecParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品多规格 - */ -export async function pageGoodsSpec(params: GoodsSpecParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-spec/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品多规格列表 - */ -export async function listGoodsSpec(params?: GoodsSpecParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-spec', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品多规格 - */ -export async function addGoodsSpec(data: GoodsSpec) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-spec', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品多规格 - */ -export async function updateGoodsSpec(data: GoodsSpec) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-spec', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品多规格 - */ -export async function removeGoodsSpec(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-spec/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品多规格 - */ -export async function removeBatchGoodsSpec(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-spec/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品多规格 - */ -export async function getGoodsSpec(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-spec/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsSpec/model/index.ts b/api/shop/goodsSpec/model/index.ts deleted file mode 100644 index 0d4cfd5..0000000 --- a/api/shop/goodsSpec/model/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品多规格 - */ -export interface GoodsSpec { - // 主键 - id?: number; - // 商品ID - goodsId?: number; - // 规格ID - specId?: number; - // 规格名称 - specName?: string; - // 规格值 - valueList?: any[]; - specValue?: string; - // 活动类型 0=商品,1=秒杀,2=砍价,3=拼团 - type?: string; - // 租户id - tenantId?: number; -} - -/** - * 商品多规格搜索条件 - */ -export interface GoodsSpecParam extends PageParam { - id?: number; - goodsId: number; - keywords?: string; -} diff --git a/api/shop/goodsSpecRel/index.ts b/api/shop/goodsSpecRel/index.ts deleted file mode 100644 index 68ea8b0..0000000 --- a/api/shop/goodsSpecRel/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { GoodsSpecRel, GoodsSpecRelParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商品规格值 - */ -export async function pageGoodsSpecRel(params: GoodsSpecRelParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/goods-spec-rel/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商品规格值列表 - */ -export async function listGoodsSpecRel(params?: GoodsSpecRelParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-spec-rel', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商品规格值 - */ -export async function addGoodsSpecRel(data: GoodsSpecRel) { - const res = await request.post>( - MODULES_API_URL + '/shop/goods-spec-rel', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商品规格值 - */ -export async function updateGoodsSpecRel(data: GoodsSpecRel) { - const res = await request.put>( - MODULES_API_URL + '/shop/goods-spec-rel', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商品规格值 - */ -export async function removeGoodsSpecRel(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-spec-rel/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商品规格值 - */ -export async function removeBatchGoodsSpecRel(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/goods-spec-rel/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商品规格值 - */ -export async function getGoodsSpecRel(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/goods-spec-rel/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/goodsSpecRel/model/index.ts b/api/shop/goodsSpecRel/model/index.ts deleted file mode 100644 index fb8b1bc..0000000 --- a/api/shop/goodsSpecRel/model/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商品规格值 - */ -export interface GoodsSpecRel { - // 主键 - id?: number; - // 规格ID - specId?: number; - // 规格值ID - specValueId?: number; - // 规格值 - specValue?: string; - // 租户id - tenantId?: number; -} - -/** - * 商品规格值搜索条件 - */ -export interface GoodsSpecRelParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/order/index.ts b/api/shop/order/index.ts deleted file mode 100644 index 96594ab..0000000 --- a/api/shop/order/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Order, OrderParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询 - */ -export async function pageOrder(params: OrderParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/order/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询列表 - */ -export async function listOrder(params?: OrderParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/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 addOrder(data: Order) { - const res = await request.post>( - MODULES_API_URL + '/shop/order', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改 - */ -export async function updateOrder(data: Order) { - const res = await request.put>( - MODULES_API_URL + '/shop/order', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除 - */ -export async function removeOrder(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/order/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除 - */ -export async function removeBatchOrder(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/order/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询 - */ -export async function getOrder(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/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/api/shop/order/model/index.ts b/api/shop/order/model/index.ts deleted file mode 100644 index f6dbead..0000000 --- a/api/shop/order/model/index.ts +++ /dev/null @@ -1,108 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * - */ -export interface Order { - // - orderId?: number; - // 订单类型,0商城订单 1预定订单 2会员卡 - type?: number; - // 订单号 - orderNo?: string; - // 下单渠道,0小程序预定 1俱乐部训练场 3活动订场 - channel?: number; - // 微信支付订单号 - transactionId?: string; - // 微信退款订单号 - refundOrder?: string; - // 场馆id用于权限判断 - merchantId?: number; - // 商户名称 - merchantName?: string; - // 商户编号 - merchantCode?: string; - couponId?: number; - // 用户id - uid?: number; - // 使用的优惠券id - cid?: number; - // 使用的会员卡id - vid?: number; - // 关联管理员id - aid?: number; - // 核销管理员id - adminId?: number; - // IC卡号 - code?: string; - // 真实姓名 - name?: string; - // 手机号码 - phone?: string; - // 订单总额 - totalPrice?: string; - // 减少的金额,使用VIP会员折扣、优惠券抵扣、优惠券折扣后减去的价格 - reducePrice?: string; - // 实际付款 - payPrice?: string; - // 用于统计 - price?: number; - // 价钱,用于积分赠送 - money?: string; - // 退款金额 - refundMoney?: string; - // 教练价格 - coachPrice?: string; - // 教练id - coachId?: number; - // 1微信支付,2积分,3支付宝,4现金,5POS机,6VIP月卡,7VIP年卡,8VIP次卡,9IC月卡,10IC年卡,11IC次卡,12免费,13VIP充值卡,14IC充值卡,15积分支付,16VIP季卡,17IC季卡 - payType?: string; - // 1已付款,2未付款 - payStatus?: string; - // 1已完成,2未使用,3已取消,4退款申请中,5退款被拒绝,6退款成功,7客户端申请退款 - orderStatus?: string; - // 优惠类型:0无、1抵扣优惠券、2折扣优惠券、3、VIP月卡、4VIP年卡,5VIP次卡、6VIP会员卡、7IC月卡、8IC年卡、9IC次卡、10IC会员卡、11免费订单、12VIP充值卡、13IC充值卡、14VIP季卡、15IC季卡 - couponType?: string; - // 二维码地址,保存订单号,支付成功后才生成 - qrcode?: string; - // 优惠说明 - couponDesc?: string; - // vip月卡年卡、ic月卡年卡回退次数 - returnNum?: number; - // vip充值回退金额 - returnMoney?: string; - // 预约详情开始时间数组 - startTime?: string; - // 是否已开具发票:1已开发票,2未开发票,3不能开具发票 - isInvoice?: string; - // 下单时间 - createTime?: number; - // - updateTime?: number; - // 付款时间 - payTime?: number; - // 退款时间 - refundTime?: number; - // 申请退款时间 - refundApplyTime?: number; - // 过期时间 - expirationTime?: string; - // 对账情况:1=已对账;2=未对账;3=已对账,金额对不上;4=未查询到该订单 - checkBill?: number; - // 备注 - comments?: string; - // 排序号 - sortNumber?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 租户id - tenantId?: number; -} - -/** - * 搜索条件 - */ -export interface OrderParam extends PageParam { - orderId?: number; - keywords?: string; -} diff --git a/api/shop/rechargeOrder/index.ts b/api/shop/rechargeOrder/index.ts deleted file mode 100644 index 7811179..0000000 --- a/api/shop/rechargeOrder/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { RechargeOrder, RechargeOrderParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询会员充值订单表 - */ -export async function pageRechargeOrder(params: RechargeOrderParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/recharge-order/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询会员充值订单表列表 - */ -export async function listRechargeOrder(params?: RechargeOrderParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/recharge-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 addRechargeOrder(data: RechargeOrder) { - const res = await request.post>( - MODULES_API_URL + '/shop/recharge-order', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改会员充值订单表 - */ -export async function updateRechargeOrder(data: RechargeOrder) { - const res = await request.put>( - MODULES_API_URL + '/shop/recharge-order', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除会员充值订单表 - */ -export async function removeRechargeOrder(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/recharge-order/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除会员充值订单表 - */ -export async function removeBatchRechargeOrder(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/recharge-order/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询会员充值订单表 - */ -export async function getRechargeOrder(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/recharge-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/api/shop/rechargeOrder/model/index.ts b/api/shop/rechargeOrder/model/index.ts deleted file mode 100644 index 4f0799d..0000000 --- a/api/shop/rechargeOrder/model/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 会员充值订单表 - */ -export interface RechargeOrder { - // 订单ID - orderId?: number; - // 订单号 - orderNo?: string; - // 用户ID - userId?: number; - // 充值方式(10自定义金额 20套餐充值) - rechargeType?: number; - // 机构id - organizationId?: number; - // 充值套餐ID - planId?: number; - // 用户支付金额 - payPrice?: string; - // 赠送金额 - giftMoney?: string; - // 实际到账金额 - actualMoney?: string; - // 用户可用余额 - balance?: string; - // 支付方式(微信/支付宝) - payMethod?: string; - // 支付状态(10待支付 20已支付) - payStatus?: number; - // 付款时间 - payTime?: number; - // 第三方交易记录ID - tradeId?: number; - // 来源客户端 (APP、H5、小程序等) - platform?: string; - // 所属门店ID - shopId?: number; - // 排序(数字越小越靠前) - sortNumber?: number; - // 备注 - comments?: string; - // 状态, 0正常, 1冻结 - status?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 商户编码 - merchantCode?: string; - // 租户id - tenantId?: number; - // 注册时间 - createTime?: string; - // 修改时间 - updateTime?: string; -} - -/** - * 会员充值订单表搜索条件 - */ -export interface RechargeOrderParam extends PageParam { - orderId?: number; - keywords?: string; -} diff --git a/api/shop/shopCart/index.ts b/api/shop/shopCart/index.ts deleted file mode 100644 index fdfe17b..0000000 --- a/api/shop/shopCart/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type {ApiResult, PageResult} from '@/api'; -import type {ShopCart, ShopCartParam} from './model'; -import {SERVER_API_URL} from "~/config"; - -/** - * 分页查询购物车 - */ -export async function pageShopCart(params: ShopCartParam) { - const res = await request.get>>( - SERVER_API_URL + '/shop/shop-cart/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询购物车列表 - */ -export async function listShopCart(params?: ShopCartParam) { - const res = await request.get>( - SERVER_API_URL + '/shop/shop-cart', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加购物车 - */ -export async function addShopCart(data: ShopCart) { - const res = await request.post>( - SERVER_API_URL + '/shop/shop-cart', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改购物车 - */ -export async function updateShopCart(data: ShopCart) { - const res = await request.put>( - SERVER_API_URL + '/shop/shop-cart', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除购物车 - */ -export async function removeShopCart(id?: number) { - const res = await request.delete>( - SERVER_API_URL + '/shop/shop-cart/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除购物车 - */ -export async function removeBatchShopCart(data: (number | undefined)[]) { - const res = await request.delete>( - SERVER_API_URL + '/shop/shop-cart/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询购物车 - */ -export async function getShopCart(id: number) { - const res = await request.get>( - SERVER_API_URL + '/shop/shop-cart/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/shopCart/model/index.ts b/api/shop/shopCart/model/index.ts deleted file mode 100644 index 9fe7ff1..0000000 --- a/api/shop/shopCart/model/index.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { PageParam } from '@/api'; -import type {ShopOrderInfo} from "~/api/shop/shopOrderInfo/model"; -import type {Company} from "~/api/system/company/model"; - -/** - * 购物车 - */ -export interface ShopCart { - // 购物车表ID - id?: string; - // 类型 0商城 1外卖 - type?: number; - // 唯一标识 - code?: string; - // 商品ID - productId?: string; - // 商品规格 - spec?: string; - // 商品价格 - price?: string; - // 商品数量 - cartNum?: number; - // 单商品合计 - totalPrice?: string; - // 0 = 未购买 1 = 已购买 - isPay?: string; - // 是否为立即购买 - isNew?: string; - // 拼团id - combinationId?: number; - // 秒杀产品ID - seckillId?: number; - // 砍价id - bargainId?: number; - // 是否选中 - selected?: string; - // 商户ID - merchantId?: string; - // 用户ID - userId?: string; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 修改时间 - updateTime?: string; - // 商品封面图 - image?: string; -} - -/** - * 购物车搜索条件 - */ -export interface ShopCartParam extends PageParam { - id?: number; - keywords?: string; -} - -export interface MyCart { - appName?: string, - domain?: string, - adminUrl?: string; - menuId?: number; - num?: number, - type?: number; - payType?: number, - payPrice?: number, - month?: number, - comments?: string, - list?: Company[], - totalPrice?: number -} diff --git a/api/shop/shopMerchant/index.ts b/api/shop/shopMerchant/index.ts deleted file mode 100644 index 2b41057..0000000 --- a/api/shop/shopMerchant/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { ShopMerchant, ShopMerchantParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商户 - */ -export async function pageShopMerchant(params: ShopMerchantParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/shop-merchant/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商户列表 - */ -export async function listShopMerchant(params?: ShopMerchantParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商户 - */ -export async function addShopMerchant(data: ShopMerchant) { - const res = await request.post>( - MODULES_API_URL + '/shop/shop-merchant', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商户 - */ -export async function updateShopMerchant(data: ShopMerchant) { - const res = await request.put>( - MODULES_API_URL + '/shop/shop-merchant', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商户 - */ -export async function removeShopMerchant(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商户 - */ -export async function removeBatchShopMerchant(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商户 - */ -export async function getShopMerchant(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/shopMerchant/model/index.ts b/api/shop/shopMerchant/model/index.ts deleted file mode 100644 index 7ed3206..0000000 --- a/api/shop/shopMerchant/model/index.ts +++ /dev/null @@ -1,89 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商户 - */ -export interface ShopMerchant { - // ID - merchantId?: number; - // 商户名称 - merchantName?: string; - // 商户编号 - merchantCode?: string; - // 商户类型 - type?: number; - // 商户图标 - image?: string; - // 商户手机号 - phone?: string; - // 商户姓名 - realName?: string; - // 店铺类型 - shopType?: string; - // 项目分类 - itemType?: string; - // 商户分类 - category?: string; - // 行业父级分类 - parentId?: string; - // 商户经营分类 - merchantCategoryId?: number; - // 商户分类 - merchantCategoryTitle?: string; - // 经纬度 - lngAndLat?: string; - // - lng?: string; - // - lat?: string; - // 所在省份 - province?: string; - // 所在城市 - city?: string; - // 所在辖区 - region?: string; - // 详细地址 - address?: string; - // 手续费 - commission?: string; - // 关键字 - keywords?: string; - // 资质图片 - files?: string; - // 营业时间 - businessTime?: string; - // 文章内容 - content?: string; - // 每小时价格 - price?: string; - // 是否自营 - ownStore?: number; - // 是否推荐 - recommend?: number; - // 是否需要审核 - goodsReview?: number; - // 管理入口 - adminUrl?: string; - // 备注 - comments?: string; - // 所有人 - userId?: number; - // 是否删除, 0否, 1是 - deleted?: number; - // 状态 - status?: number; - // 排序号 - sortNumber?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 商户搜索条件 - */ -export interface ShopMerchantParam extends PageParam { - merchantId?: number; - keywords?: string; -} diff --git a/api/shop/shopMerchantAccount/index.ts b/api/shop/shopMerchantAccount/index.ts deleted file mode 100644 index a8414e3..0000000 --- a/api/shop/shopMerchantAccount/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { ShopMerchantAccount, ShopMerchantAccountParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商户账号 - */ -export async function pageShopMerchantAccount(params: ShopMerchantAccountParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/shop-merchant-account/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商户账号列表 - */ -export async function listShopMerchantAccount(params?: ShopMerchantAccountParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant-account', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商户账号 - */ -export async function addShopMerchantAccount(data: ShopMerchantAccount) { - const res = await request.post>( - MODULES_API_URL + '/shop/shop-merchant-account', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商户账号 - */ -export async function updateShopMerchantAccount(data: ShopMerchantAccount) { - const res = await request.put>( - MODULES_API_URL + '/shop/shop-merchant-account', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商户账号 - */ -export async function removeShopMerchantAccount(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant-account/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商户账号 - */ -export async function removeBatchShopMerchantAccount(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant-account/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商户账号 - */ -export async function getShopMerchantAccount(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant-account/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/shopMerchantAccount/model/index.ts b/api/shop/shopMerchantAccount/model/index.ts deleted file mode 100644 index 6dbada0..0000000 --- a/api/shop/shopMerchantAccount/model/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商户账号 - */ -export interface ShopMerchantAccount { - // ID - id?: number; - // 商户手机号 - phone?: string; - // 真实姓名 - realName?: string; - // 商户ID - merchantId?: number; - // 角色ID - roleId?: number; - // 角色名称 - roleName?: string; - // 用户ID - userId?: number; - // 备注 - comments?: string; - // 状态 - status?: number; - // 排序号 - sortNumber?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 商户账号搜索条件 - */ -export interface ShopMerchantAccountParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/shopMerchantApply/index.ts b/api/shop/shopMerchantApply/index.ts deleted file mode 100644 index 9001fdc..0000000 --- a/api/shop/shopMerchantApply/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { ShopMerchantApply, ShopMerchantApplyParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商户入驻申请 - */ -export async function pageShopMerchantApply(params: ShopMerchantApplyParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/shop-merchant-apply/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商户入驻申请列表 - */ -export async function listShopMerchantApply(params?: ShopMerchantApplyParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant-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 addShopMerchantApply(data: ShopMerchantApply) { - const res = await request.post>( - MODULES_API_URL + '/shop/shop-merchant-apply', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商户入驻申请 - */ -export async function updateShopMerchantApply(data: ShopMerchantApply) { - const res = await request.put>( - MODULES_API_URL + '/shop/shop-merchant-apply', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商户入驻申请 - */ -export async function removeShopMerchantApply(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant-apply/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商户入驻申请 - */ -export async function removeBatchShopMerchantApply(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant-apply/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商户入驻申请 - */ -export async function getShopMerchantApply(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant-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/api/shop/shopMerchantApply/model/index.ts b/api/shop/shopMerchantApply/model/index.ts deleted file mode 100644 index bf78950..0000000 --- a/api/shop/shopMerchantApply/model/index.ts +++ /dev/null @@ -1,74 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商户入驻申请 - */ -export interface ShopMerchantApply { - // ID - applyId?: number; - // 认证类型 - type?: number; - // 商户名称 - merchantName?: string; - // 社会信用代码 - merchantCode?: string; - // 商户图标 - image?: string; - // 商户手机号 - phone?: string; - // 商户姓名 - realName?: string; - // 身份证号码 - idCard?: string; - sfz1?: string; - sfz2?: string; - yyzz?: string; - // 店铺类型 - shopType?: string; - // 行业父级分类 - parentId?: number; - // 所属分类 - categoryId?: number; - // 商户分类 - category?: string; - // 手续费 - commission?: string; - // 关键字 - keywords?: string; - // 资质图片 - files?: string; - // 所有人 - userId?: number; - // 是否自营 - ownStore?: number; - // 是否推荐 - recommend?: number; - // 是否需要审核 - goodsReview?: number; - // 审核完成时间 - completedTime?: string - // 工作负责人 - name2?: string; - // 驳回原因 - reason?: string; - // 审核状态 - checkStatus?: boolean; - // 备注 - comments?: string; - // 状态 - status?: number; - // 排序号 - sortNumber?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 商户入驻申请搜索条件 - */ -export interface ShopMerchantApplyParam extends PageParam { - applyId?: number; - keywords?: string; -} diff --git a/api/shop/shopMerchantCount/index.ts b/api/shop/shopMerchantCount/index.ts deleted file mode 100644 index 9552f46..0000000 --- a/api/shop/shopMerchantCount/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { ShopMerchantCount, ShopMerchantCountParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询门店销售统计表 - */ -export async function pageShopMerchantCount(params: ShopMerchantCountParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/shop-merchant-count/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询门店销售统计表列表 - */ -export async function listShopMerchantCount(params?: ShopMerchantCountParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant-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 addShopMerchantCount(data: ShopMerchantCount) { - const res = await request.post>( - MODULES_API_URL + '/shop/shop-merchant-count', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改门店销售统计表 - */ -export async function updateShopMerchantCount(data: ShopMerchantCount) { - const res = await request.put>( - MODULES_API_URL + '/shop/shop-merchant-count', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除门店销售统计表 - */ -export async function removeShopMerchantCount(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant-count/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除门店销售统计表 - */ -export async function removeBatchShopMerchantCount(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant-count/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询门店销售统计表 - */ -export async function getShopMerchantCount(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant-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/api/shop/shopMerchantCount/model/index.ts b/api/shop/shopMerchantCount/model/index.ts deleted file mode 100644 index ea27a60..0000000 --- a/api/shop/shopMerchantCount/model/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 门店销售统计表 - */ -export interface ShopMerchantCount { - // ID - id?: number; - // 店铺名称 - name?: string; - // 店铺说明 - comments?: string; - // 状态 - status?: number; - // 排序号 - sortNumber?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 门店销售统计表搜索条件 - */ -export interface ShopMerchantCountParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/shopMerchantType/index.ts b/api/shop/shopMerchantType/index.ts deleted file mode 100644 index 8833436..0000000 --- a/api/shop/shopMerchantType/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { ShopMerchantType, ShopMerchantTypeParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询商户类型 - */ -export async function pageShopMerchantType(params: ShopMerchantTypeParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/shop-merchant-type/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询商户类型列表 - */ -export async function listShopMerchantType(params?: ShopMerchantTypeParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant-type', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加商户类型 - */ -export async function addShopMerchantType(data: ShopMerchantType) { - const res = await request.post>( - MODULES_API_URL + '/shop/shop-merchant-type', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改商户类型 - */ -export async function updateShopMerchantType(data: ShopMerchantType) { - const res = await request.put>( - MODULES_API_URL + '/shop/shop-merchant-type', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除商户类型 - */ -export async function removeShopMerchantType(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant-type/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除商户类型 - */ -export async function removeBatchShopMerchantType(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/shop-merchant-type/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询商户类型 - */ -export async function getShopMerchantType(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/shop-merchant-type/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/shopMerchantType/model/index.ts b/api/shop/shopMerchantType/model/index.ts deleted file mode 100644 index c051169..0000000 --- a/api/shop/shopMerchantType/model/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 商户类型 - */ -export interface ShopMerchantType { - // ID - id?: number; - // 店铺类型 - name?: string; - // 店铺入驻条件 - comments?: string; - // 状态 - status?: number; - // 排序号 - sortNumber?: number; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; -} - -/** - * 商户类型搜索条件 - */ -export interface ShopMerchantTypeParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/shopOrderInfo/index.ts b/api/shop/shopOrderInfo/index.ts deleted file mode 100644 index 113318f..0000000 --- a/api/shop/shopOrderInfo/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type {ApiResult, PageResult} from '@/api'; -import type {ShopOrderInfo, ShopOrderInfoParam} from './model'; -import {SERVER_API_URL} from '@/config'; - -/** - * 分页查询 - */ -export async function pageShopOrderInfo(params: ShopOrderInfoParam) { - const res = await request.get>>( - SERVER_API_URL + '/shop/order-info/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询列表 - */ -export async function listShopOrderInfo(params?: ShopOrderInfoParam) { - const res = await request.get>( - SERVER_API_URL + '/shop/order-info', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加 - */ -export async function addShopOrderInfo(data: ShopOrderInfo) { - const res = await request.post>( - SERVER_API_URL + '/shop/order-info', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改 - */ -export async function updateShopOrderInfo(data: ShopOrderInfo) { - const res = await request.put>( - SERVER_API_URL + '/shop/order-info', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除 - */ -export async function removeShopOrderInfo(id?: number) { - const res = await request.delete>( - SERVER_API_URL + '/shop/order-info/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除 - */ -export async function removeBatchShopOrderInfo(data: (number | undefined)[]) { - const res = await request.delete>( - SERVER_API_URL + '/shop/order-info/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询 - */ -export async function getShopOrderInfo(id: number) { - const res = await request.get>( - SERVER_API_URL + '/shop/order-info/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/shopOrderInfo/model/index.ts b/api/shop/shopOrderInfo/model/index.ts deleted file mode 100644 index 61573e7..0000000 --- a/api/shop/shopOrderInfo/model/index.ts +++ /dev/null @@ -1,62 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * - */ -export interface ShopOrderInfo { - // - id?: number; - // 关联订单表id - oid?: number; - // 关联场馆id - sid?: number; - // 关联场地id - fid?: number; - // 场馆 - siteName?: string; - // 场地 - fieldName?: string; - // 预约时间段 - dateTime?: string; - // 单价 - price?: number; - // 儿童价 - childrenPrice?: string; - // 成人人数 - adultNum?: string; - // 儿童人数 - childrenNum?: string; - // 1已付款,2未付款,3无需付款或占用状态 - payStatus?: string; - // 是否免费:1免费、2收费 - isFree?: string; - // 是否支持儿童票:1支持,2不支持 - isChildren?: string; - // 预订类型:1全场,2半场 - type?: string; - // 组合数据:日期+时间段+场馆id+场地id - mergeData?: string; - // 开场时间 - startTime?: number; - // 下单时间 - orderTime?: number; - // 毫秒时间戳 - timeFlag?: string; - // 租户id - tenantId?: number; - // 创建时间 - createTime?: string; - // 商品ID - goodsId?: number; - // 商品名称 - goodsName?: string; -} - -/** - * 搜索条件 - */ -export interface ShopOrderInfoParam extends PageParam { - id?: number; - oid?: number; - keywords?: string; -} diff --git a/api/shop/spec/index.ts b/api/shop/spec/index.ts deleted file mode 100644 index d866b0e..0000000 --- a/api/shop/spec/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Spec, SpecParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询规格 - */ -export async function pageSpec(params: SpecParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/spec/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询规格列表 - */ -export async function listSpec(params?: SpecParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/spec', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加规格 - */ -export async function addSpec(data: Spec) { - const res = await request.post>( - MODULES_API_URL + '/shop/spec', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改规格 - */ -export async function updateSpec(data: Spec) { - const res = await request.put>( - MODULES_API_URL + '/shop/spec', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除规格 - */ -export async function removeSpec(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/spec/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除规格 - */ -export async function removeBatchSpec(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/spec/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询规格 - */ -export async function getSpec(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/spec/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/specValue/index.ts b/api/shop/specValue/index.ts deleted file mode 100644 index 8534d11..0000000 --- a/api/shop/specValue/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { SpecValue, SpecValueParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询规格值 - */ -export async function pageSpecValue(params: SpecValueParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/spec-value/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询规格值列表 - */ -export async function listSpecValue(params?: SpecValueParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/spec-value', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加规格值 - */ -export async function addSpecValue(data: SpecValue) { - const res = await request.post>( - MODULES_API_URL + '/shop/spec-value', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改规格值 - */ -export async function updateSpecValue(data: SpecValue) { - const res = await request.put>( - MODULES_API_URL + '/shop/spec-value', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除规格值 - */ -export async function removeSpecValue(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/spec-value/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除规格值 - */ -export async function removeBatchSpecValue(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/spec-value/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询规格值 - */ -export async function getSpecValue(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/spec-value/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/userAddress/index.ts b/api/shop/userAddress/index.ts deleted file mode 100644 index 8896f0f..0000000 --- a/api/shop/userAddress/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { UserAddress, UserAddressParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询收货地址 - */ -export async function pageUserAddress(params: UserAddressParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/user-address/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询收货地址列表 - */ -export async function listUserAddress(params?: UserAddressParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/user-address', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加收货地址 - */ -export async function addUserAddress(data: UserAddress) { - const res = await request.post>( - MODULES_API_URL + '/shop/user-address', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改收货地址 - */ -export async function updateUserAddress(data: UserAddress) { - const res = await request.put>( - MODULES_API_URL + '/shop/user-address', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除收货地址 - */ -export async function removeUserAddress(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/user-address/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除收货地址 - */ -export async function removeBatchUserAddress(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/user-address/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询收货地址 - */ -export async function getUserAddress(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/user-address/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/userAddress/model/index.ts b/api/shop/userAddress/model/index.ts deleted file mode 100644 index 6fe9239..0000000 --- a/api/shop/userAddress/model/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 收货地址 - */ -export interface UserAddress { - // 主键ID - id?: number; - // 姓名 - name?: string; - // 手机号码 - phone?: string; - // 所在国家 - country?: string; - // 所在省份 - province?: string; - // 所在城市 - city?: string; - // 所在辖区 - region?: string; - // 收货地址 - address?: string; - // 1先生 2女士 - gender?: number; - // 家、公司、学校 - type?: string; - // 默认收货地址 - default?: string; - // 用户ID - userId?: number; - // 租户id - tenantId?: number; - // 注册时间 - createTime?: string; -} - -/** - * 收货地址搜索条件 - */ -export interface UserAddressParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/users/index.ts b/api/shop/users/index.ts deleted file mode 100644 index 5e8b847..0000000 --- a/api/shop/users/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { Users, UsersParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询 - */ -export async function pageUsers(params: UsersParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/users/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询列表 - */ -export async function listUsers(params?: UsersParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/users', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加 - */ -export async function addUsers(data: Users) { - const res = await request.post>( - MODULES_API_URL + '/shop/users', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改 - */ -export async function updateUsers(data: Users) { - const res = await request.put>( - MODULES_API_URL + '/shop/users', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除 - */ -export async function removeUsers(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/users/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除 - */ -export async function removeBatchUsers(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/users/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询 - */ -export async function getUsers(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/users/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/users/model/index.ts b/api/shop/users/model/index.ts deleted file mode 100644 index 9249390..0000000 --- a/api/shop/users/model/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * - */ -export interface Users { - // - id?: number; - // 用户唯一小程序id - openId?: string; - // 小程序用户秘钥 - sessionKey?: string; - // 用户名 - username?: string; - // 头像地址 - avatarUrl?: string; - // 1男,2女 - gender?: string; - // 国家 - country?: string; - // 省份 - province?: string; - // 城市 - city?: string; - // 手机号码 - phone?: string; - // 积分 - integral?: string; - // 余额 - money?: string; - // 注册时间 - createTime?: number; - // - idcard?: string; - // - truename?: string; - // 是否管理员:1是;2否 - isAdmin?: number; - // 租户id - tenantId?: number; -} - -/** - * 搜索条件 - */ -export interface UsersParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/shop/wechatDeposit/index.ts b/api/shop/wechatDeposit/index.ts deleted file mode 100644 index 0a8efc1..0000000 --- a/api/shop/wechatDeposit/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import request from '@/utils/request'; -import type { ApiResult, PageResult } from '@/api'; -import type { WechatDeposit, WechatDepositParam } from './model'; -import { MODULES_API_URL } from '@/config'; - -/** - * 分页查询押金 - */ -export async function pageWechatDeposit(params: WechatDepositParam) { - const res = await request.get>>( - MODULES_API_URL + '/shop/wechat-deposit/page', - { - params - } - ); - if (res.data.code === 0) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 查询押金列表 - */ -export async function listWechatDeposit(params?: WechatDepositParam) { - const res = await request.get>( - MODULES_API_URL + '/shop/wechat-deposit', - { - params - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 添加押金 - */ -export async function addWechatDeposit(data: WechatDeposit) { - const res = await request.post>( - MODULES_API_URL + '/shop/wechat-deposit', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 修改押金 - */ -export async function updateWechatDeposit(data: WechatDeposit) { - const res = await request.put>( - MODULES_API_URL + '/shop/wechat-deposit', - data - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 删除押金 - */ -export async function removeWechatDeposit(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/wechat-deposit/' + id - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 批量删除押金 - */ -export async function removeBatchWechatDeposit(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/wechat-deposit/batch', - { - data - } - ); - if (res.data.code === 0) { - return res.data.message; - } - return Promise.reject(new Error(res.data.message)); -} - -/** - * 根据id查询押金 - */ -export async function getWechatDeposit(id: number) { - const res = await request.get>( - MODULES_API_URL + '/shop/wechat-deposit/' + id - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/api/shop/wechatDeposit/model/index.ts b/api/shop/wechatDeposit/model/index.ts deleted file mode 100644 index acc1256..0000000 --- a/api/shop/wechatDeposit/model/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { PageParam } from '@/api'; - -/** - * 押金 - */ -export interface WechatDeposit { - // - id?: number; - // 订单id - oid?: number; - // 用户id - uid?: number; - // 场地订单号 - orderNum?: string; - // 付款订单号 - wechatOrder?: string; - // 退款订单号 - wechatReturn?: string; - // 场馆名称 - siteName?: string; - // 微信昵称 - username?: string; - // 手机号码 - phone?: string; - // 物品名称 - name?: string; - // 押金金额 - price?: number; - // 押金状态,1已付款,2未付款,已退押金 - status?: string; - // - createTime?: number; - // 租户id - tenantId?: number; -} - -/** - * 押金搜索条件 - */ -export interface WechatDepositParam extends PageParam { - id?: number; - keywords?: string; -} diff --git a/api/system/access-key/index.ts b/api/system/access-key/index.ts index 8c9d659..ae6ab1c 100644 --- a/api/system/access-key/index.ts +++ b/api/system/access-key/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult } from '@/api'; import type { AccessKey, AccessKeyParam } from './model'; import { PageResult } from '@/api'; @@ -11,10 +11,10 @@ export async function pageAccessKey(params: AccessKeyParam) { SERVER_API_URL + '/system/access-key/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -25,10 +25,10 @@ export async function addAccessKey(data: AccessKey) { SERVER_API_URL + '/system/access-key', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -39,21 +39,21 @@ export async function updateAccessKey(data: AccessKey) { SERVER_API_URL + '/system/access-key', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除AccessKey */ export async function removeAccessKey(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/access-key/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/cache/index.ts b/api/system/cache/index.ts index 708e8de..b631df0 100644 --- a/api/system/cache/index.ts +++ b/api/system/cache/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult } from '@/api'; import type { Cache, CacheParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function listCache(params?: CacheParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -27,8 +27,8 @@ export async function getCache(key: String) { const res = await request.get>( SERVER_API_URL + '/system/cache/' + key ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } } @@ -41,10 +41,10 @@ export async function updateCache(cache: Cache) { SERVER_API_URL + '/system/cache', cache ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -52,13 +52,13 @@ export async function updateCache(cache: Cache) { * @param key */ export async function removeCache(key?: String) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/cache/' + key ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -70,7 +70,7 @@ export async function updateCacheTheme(cache: Cache) { SERVER_API_URL + '/system/cache/theme', cache ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } } diff --git a/api/system/chat/index.ts b/api/system/chat/index.ts index 75d3e27..dd51142 100644 --- a/api/system/chat/index.ts +++ b/api/system/chat/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { ChatConversation, @@ -18,10 +18,10 @@ export async function pageChatConversation(params: ChatConversationParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -34,10 +34,10 @@ export async function pageChatMessage(params: ChatMessageParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 查询日志列表 @@ -49,10 +49,10 @@ export async function listChatConversation(params?: ChatConversationParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -63,10 +63,10 @@ export async function addChatMessage(data: ChatMessage) { SERVER_API_URL + '/system/chat-message', data ); - if (res.data.code === 0) { + if (res.code === 0) { return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -77,10 +77,10 @@ export async function addChatConversation(data: ChatConversation) { SERVER_API_URL + '/system/chat-conversation', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -91,10 +91,10 @@ export async function updateChatConversation(data: any) { SERVER_API_URL + '/system/chat-conversation', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -105,10 +105,10 @@ export async function bindChatConversation(data: ChatConversation) { SERVER_API_URL + '/system/chat-conversation/bind', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -119,23 +119,23 @@ export async function addBatchChatConversation(data: ChatConversation[]) { SERVER_API_URL + '/system/chat-conversation/batch', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除日志 */ export async function removeChatConversation(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/chat-conversation/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -144,14 +144,14 @@ export async function removeChatConversation(id?: number) { export async function removeBatchChatConversation( data: (number | undefined)[] ) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/chat-conversation/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/chatConversation/index.ts b/api/system/chatConversation/index.ts index d848a24..9c0527e 100644 --- a/api/system/chatConversation/index.ts +++ b/api/system/chatConversation/index.ts @@ -1,22 +1,22 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { ChatConversation, ChatConversationParam } from './model'; -import { MODULES_API_URL } from '@/config'; + /** * 分页查询聊天消息表 */ export async function pageChatConversation(params: ChatConversationParam) { const res = await request.get>>( - MODULES_API_URL + '/shop/chat-conversation/page', + '/shop/chat-conversation/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -24,15 +24,15 @@ export async function pageChatConversation(params: ChatConversationParam) { */ export async function listChatConversation(params?: ChatConversationParam) { const res = await request.get>( - MODULES_API_URL + '/shop/chat-conversation', + '/shop/chat-conversation', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -40,13 +40,13 @@ export async function listChatConversation(params?: ChatConversationParam) { */ export async function addChatConversation(data: ChatConversation) { const res = await request.post>( - MODULES_API_URL + '/shop/chat-conversation', + '/shop/chat-conversation', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -54,42 +54,42 @@ export async function addChatConversation(data: ChatConversation) { */ export async function updateChatConversation(data: ChatConversation) { const res = await request.put>( - MODULES_API_URL + '/shop/chat-conversation', + '/shop/chat-conversation', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除聊天消息表 */ export async function removeChatConversation(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/shop/chat-conversation/' + id + const res = await request.del>( + '/shop/chat-conversation/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除聊天消息表 */ export async function removeBatchChatConversation(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/shop/chat-conversation/batch', + const res = await request.del>( + '/shop/chat-conversation/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -97,10 +97,10 @@ export async function removeBatchChatConversation(data: (number | undefined)[]) */ export async function getChatConversation(id: number) { const res = await request.get>( - MODULES_API_URL + '/shop/chat-conversation/' + id + '/shop/chat-conversation/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/chatMessage/index.ts b/api/system/chatMessage/index.ts index c2ae0b2..2afe3d4 100644 --- a/api/system/chatMessage/index.ts +++ b/api/system/chatMessage/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { ChatMessage, ChatMessageParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function pageChatMessage(params: ChatMessageParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listChatMessage(params?: ChatMessageParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addChatMessage(data: ChatMessage) { SERVER_API_URL + '/system/chat-message', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,10 +57,10 @@ export async function addBatchChatMessage(data: ChatMessage[]) { SERVER_API_URL + '/system/chat-message/batch', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -71,39 +71,39 @@ export async function updateChatMessage(data: ChatMessage) { SERVER_API_URL + '/system/chat-message', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除聊天消息表 */ export async function removeChatMessage(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/chat-message/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除聊天消息表 */ export async function removeBatchChatMessage(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/chat-message/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -113,8 +113,8 @@ export async function getChatMessage(id: number) { const res = await request.get>( SERVER_API_URL + '/system/chat-message/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/company/index.ts b/api/system/company/index.ts index eb12848..5a9e162 100644 --- a/api/system/company/index.ts +++ b/api/system/company/index.ts @@ -1,7 +1,7 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult } from '@/api'; import type { Company, CompanyParam } from './model'; -import { PageResult } from '@/api'; +import type { PageResult } from '@/api'; import { SERVER_API_URL } from '@/config'; /** @@ -14,10 +14,10 @@ export async function getCompany(params?: CompanyParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -27,11 +27,11 @@ export async function getCompanyAll(companyId: number) { const res = await request.get>( SERVER_API_URL + '/system/company/profileAll/' + companyId ); - if (res.data.code === 0 && res.data) { + if (res.code === 0 && res.data) { console.log(res.data); - return res.data.data; + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -42,10 +42,10 @@ export async function pageCompany(params: CompanyParam) { SERVER_API_URL + '/system/company/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -56,10 +56,10 @@ export async function pageCompanyAll(params: CompanyParam) { SERVER_API_URL + '/system/company/pageAll', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -70,10 +70,10 @@ export async function addCompany(data: Company) { SERVER_API_URL + '/system/company', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -84,10 +84,10 @@ export async function updateCompany(data: Company) { SERVER_API_URL + '/system/company', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -98,50 +98,50 @@ export async function updateCompanyAll(data: Company) { SERVER_API_URL + '/system/company/updateCompanyAll', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除Company */ export async function removeCompany(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } // 销毁租户 export async function destructionTenant(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company/destruction/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除Company */ export async function removeBatchCompany(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } export async function checkExistence( @@ -155,8 +155,8 @@ export async function checkExistence( params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/company/model/index.ts b/api/system/company/model/index.ts index fc83b8d..cc40f04 100644 --- a/api/system/company/model/index.ts +++ b/api/system/company/model/index.ts @@ -10,7 +10,6 @@ export interface Company { companyId?: number; type?: number; menuId?: number; - appName?: string; shortName?: string; companyName?: string; companyType?: number; @@ -56,7 +55,6 @@ export interface Company { userId?: number; official?: boolean; price?: number; - deliveryMethod?: number; chargingMethod?: number; planId?: number; sortNumber?: number; @@ -103,7 +101,7 @@ export interface Company { */ export interface CompanyParam extends PageParam { companyId?: number; - type?: number; + type?: any; official?: boolean; shortName?: string; companyName?: string; @@ -119,4 +117,5 @@ export interface CompanyParam extends PageParam { status?: number; recommend?: boolean; collection?: boolean; + limit?: number; } diff --git a/api/system/companyComment/index.ts b/api/system/companyComment/index.ts index b6dd6b3..cd4380d 100644 --- a/api/system/companyComment/index.ts +++ b/api/system/companyComment/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type {ApiResult, PageResult} from '@/api'; import type {CompanyComment, CompanyCommentParam} from './model'; import {SERVER_API_URL} from '@/config/index'; @@ -13,10 +13,10 @@ export async function pageCompanyComment(params: CompanyCommentParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listCompanyComment(params?: CompanyCommentParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addCompanyComment(data: CompanyComment) { SERVER_API_URL + '/system/company-comment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateCompanyComment(data: CompanyComment) { SERVER_API_URL + '/system/company-comment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除应用评论 */ export async function removeCompanyComment(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-comment/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除应用评论 */ export async function removeBatchCompanyComment(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-comment/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getCompanyComment(id: number) { const res = await request.get>( SERVER_API_URL + '/system/company-comment/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/companyContent/index.ts b/api/system/companyContent/index.ts index 57fc3bf..dad0a8a 100644 --- a/api/system/companyContent/index.ts +++ b/api/system/companyContent/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { CompanyContent, CompanyContentParam } from './model'; import {SERVER_API_URL} from '@/config/index'; @@ -13,10 +13,10 @@ export async function pageCompanyContent(params: CompanyContentParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listCompanyContent(params?: CompanyContentParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addCompanyContent(data: CompanyContent) { SERVER_API_URL + '/system/company-content', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateCompanyContent(data: CompanyContent) { SERVER_API_URL + '/system/company-content', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除应用详情 */ export async function removeCompanyContent(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-content/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除应用详情 */ export async function removeBatchCompanyContent(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-content/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getCompanyContent(id: number) { const res = await request.get>( SERVER_API_URL + '/system/company-content/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/companyGit/index.ts b/api/system/companyGit/index.ts index 8e0694b..81a809d 100644 --- a/api/system/companyGit/index.ts +++ b/api/system/companyGit/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { CompanyGit, CompanyGitParam } from './model'; import { SERVER_API_URL } from '@/config/index'; @@ -13,10 +13,10 @@ export async function pageCompanyGit(params: CompanyGitParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listCompanyGit(params?: CompanyGitParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addCompanyGit(data: CompanyGit) { SERVER_API_URL + '/system/company-git', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateCompanyGit(data: CompanyGit) { SERVER_API_URL + '/system/company-git', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除代码仓库 */ export async function removeCompanyGit(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-git/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除代码仓库 */ export async function removeBatchCompanyGit(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-git/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getCompanyGit(id: number) { const res = await request.get>( SERVER_API_URL + '/system/company-git/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/companyParameter/index.ts b/api/system/companyParameter/index.ts index f438a9e..fde242d 100644 --- a/api/system/companyParameter/index.ts +++ b/api/system/companyParameter/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { CompanyParameter, CompanyParameterParam } from './model'; import {SERVER_API_URL} from '@/config/index'; @@ -13,10 +13,10 @@ export async function pageCompanyParameter(params: CompanyParameterParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listCompanyParameter(params?: CompanyParameterParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addCompanyParameter(data: CompanyParameter) { SERVER_API_URL + '/system/company-parameter', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateCompanyParameter(data: CompanyParameter) { SERVER_API_URL + '/system/company-parameter', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除应用参数 */ export async function removeCompanyParameter(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-parameter/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除应用参数 */ export async function removeBatchCompanyParameter(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-parameter/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getCompanyParameter(id: number) { const res = await request.get>( SERVER_API_URL + '/system/company-parameter/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/companyUrl/index.ts b/api/system/companyUrl/index.ts index d94e3d9..67b3827 100644 --- a/api/system/companyUrl/index.ts +++ b/api/system/companyUrl/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { CompanyUrl, CompanyUrlParam } from './model'; import {SERVER_API_URL} from '@/config/index'; @@ -13,10 +13,10 @@ export async function pageCompanyUrl(params: CompanyUrlParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listCompanyUrl(params?: CompanyUrlParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addCompanyUrl(data: CompanyUrl) { SERVER_API_URL + '/system/company-url', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateCompanyUrl(data: CompanyUrl) { SERVER_API_URL + '/system/company-url', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除应用域名 */ export async function removeCompanyUrl(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-url/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除应用域名 */ export async function removeBatchCompanyUrl(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/company-url/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getCompanyUrl(id: number) { const res = await request.get>( SERVER_API_URL + '/system/company-url/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/dict-data/index.ts b/api/system/dict-data/index.ts index 2d2961a..60f1654 100644 --- a/api/system/dict-data/index.ts +++ b/api/system/dict-data/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { DictData, DictDataParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -11,10 +11,10 @@ export async function pageDictData(params: DictDataParam) { SERVER_API_URL + '/system/dict-data/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -25,10 +25,10 @@ export async function listDictData(params: DictDataParam) { SERVER_API_URL + '/system/dict-data', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -39,10 +39,10 @@ export async function addDictData(data: DictData) { SERVER_API_URL + '/system/dict-data', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -53,35 +53,35 @@ export async function updateDictData(data: DictData) { SERVER_API_URL + '/system/dict-data', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除字典数据 */ export async function removeDictData(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/dict-data/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除字典数据 */ export async function removeDictDataBatch(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/dict-data/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/dict/index.ts b/api/system/dict/index.ts index 74a9973..084d1d5 100644 --- a/api/system/dict/index.ts +++ b/api/system/dict/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult } from '@/api'; import type { Dict, DictParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function listDictionaries(params?: DictParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -27,10 +27,10 @@ export async function addDict(data: Dict) { SERVER_API_URL + '/system/dict', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -41,21 +41,21 @@ export async function updateDict(data: Dict) { SERVER_API_URL + '/system/dict', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除字典 */ export async function removeDict(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/dict/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/dictionary-data/index.ts b/api/system/dictionary-data/index.ts index 6d01044..fcd492f 100644 --- a/api/system/dictionary-data/index.ts +++ b/api/system/dictionary-data/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { DictionaryData, DictionaryDataParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -11,10 +11,10 @@ export async function pageDictionaryData(params: DictionaryDataParam) { SERVER_API_URL + '/system/dict-data/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -25,10 +25,10 @@ export async function listDictionaryData(params: DictionaryDataParam) { SERVER_API_URL + '/system/dict-data', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -39,10 +39,10 @@ export async function addDictionaryData(data: DictionaryData) { SERVER_API_URL + '/system/dict-data', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -53,35 +53,35 @@ export async function updateDictionaryData(data: DictionaryData) { SERVER_API_URL + '/system/dict-data', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除字典数据 */ export async function removeDictionaryData(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/dict-data/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除字典数据 */ export async function removeDictionaryDataBatch(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/dict-data/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/dictionary/index.ts b/api/system/dictionary/index.ts index bb2bff7..7ea6297 100644 --- a/api/system/dictionary/index.ts +++ b/api/system/dictionary/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult } from '@/api'; import type { Dictionary, DictionaryParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function listDictionaries(params?: DictionaryParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -27,10 +27,10 @@ export async function addDictionary(data: Dictionary) { SERVER_API_URL + '/system/dictionary', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -41,21 +41,21 @@ export async function updateDictionary(data: Dictionary) { SERVER_API_URL + '/system/dictionary', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除字典 */ export async function removeDictionary(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/dictionary/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/environment/index.ts b/api/system/environment/index.ts index a71b87f..adecdab 100644 --- a/api/system/environment/index.ts +++ b/api/system/environment/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Environment, EnvironmentParam } from './model/index'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function pageEnvironment(params?: EnvironmentParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listEnvironment(params?: EnvironmentParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -42,10 +42,10 @@ export async function getEnvironment(id: number) { const res = await request.get>( SERVER_API_URL + '/system/environment/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -56,10 +56,10 @@ export async function updateEnvironment(data: Environment) { SERVER_API_URL + '/system/environment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } // 排行榜 @@ -70,10 +70,10 @@ export async function ranking(params?: EnvironmentParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -90,10 +90,10 @@ export async function checkExistence( params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } // 搜索历史 @@ -104,10 +104,10 @@ export async function searchHistory(params?: String) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -118,8 +118,8 @@ export async function createEnvironment(data: Environment) { SERVER_API_URL + '/system/environment/environment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/file/index.ts b/api/system/file/index.ts index dbc9f73..7fd097b 100644 --- a/api/system/file/index.ts +++ b/api/system/file/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { FileRecord, FileRecordParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -17,10 +17,10 @@ export async function uploadFileLocal(file: File, AppId: number) { headers: { AppId } } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -36,10 +36,10 @@ export async function uploadFileLocalByCompany(file: File, CompanyId: number) { headers: { CompanyId } } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -52,10 +52,10 @@ export async function uploadFile(file: File) { SERVER_API_URL + '/oss/upload', formData ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -73,10 +73,10 @@ export async function uploadBase64File(base64: string, fileName?: string) { SERVER_API_URL + '/file/upload/base64', formData ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -89,10 +89,10 @@ export async function uploadCert(file: File) { SERVER_API_URL + '/file/upload', formData ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -103,10 +103,10 @@ export async function pageFiles(params: FileRecordParam) { SERVER_API_URL + '/file/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -116,39 +116,39 @@ export async function getFile(id: number) { const res = await request.get>( SERVER_API_URL + '/file/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除文件 */ export async function removeFile(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/file/remove/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除文件 */ export async function removeFiles(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/file/remove/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -159,10 +159,10 @@ export async function addFiles(data: FileRecord) { SERVER_API_URL + '/file', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -173,10 +173,10 @@ export async function updateFiles(data: FileRecord) { SERVER_API_URL + '/file', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -189,10 +189,10 @@ export async function uploadOss(file: File) { SERVER_API_URL + '/oss/upload', formData ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -208,10 +208,10 @@ export async function uploadOssByGroupId(file: File, GroupId: string) { headers: { GroupId } } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -227,8 +227,8 @@ export async function uploadOssByAppId(file: File, appId: string) { headers: { appId } } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/login-record/index.ts b/api/system/login-record/index.ts index 3648543..1d03a02 100644 --- a/api/system/login-record/index.ts +++ b/api/system/login-record/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { LoginRecord, LoginRecordParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -11,10 +11,10 @@ export async function pageLoginRecords(params: LoginRecordParam) { SERVER_API_URL + '/system/login-record/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -25,8 +25,8 @@ export async function listLoginRecords(params?: LoginRecordParam) { SERVER_API_URL + '/system/login-record', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/menu/index.ts b/api/system/menu/index.ts index 3c39743..69e0e6d 100644 --- a/api/system/menu/index.ts +++ b/api/system/menu/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult } from '@/api'; import type { Menu, MenuParam } from './model'; import { App } from '@/api/dashboard/appstore/model'; @@ -14,10 +14,10 @@ export async function listMenus(params: MenuParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -28,10 +28,10 @@ export async function addMenu(data: Menu) { SERVER_API_URL + '/system/menu', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -42,23 +42,23 @@ export async function updateMenu(data: Menu) { SERVER_API_URL + '/system/menu', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除菜单 */ export async function removeMenu(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/menu/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -69,10 +69,10 @@ export async function installApp(data: App) { SERVER_API_URL + '/system/menu/install', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -83,10 +83,10 @@ export async function uninstallApp(data: App) { SERVER_API_URL + '/system/menu/uninstall', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } // 菜单克隆 @@ -95,10 +95,10 @@ export async function clone(data: Menu) { SERVER_API_URL + '/system/menu/clone', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -109,10 +109,10 @@ export async function createPlug(data: Menu) { SERVER_API_URL + '/system/menu/plug', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } // 安装插件 @@ -120,8 +120,8 @@ export async function installPlug(id?: number) { const res = await request.get>( SERVER_API_URL + '/system/menu/install/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/modules/index.ts b/api/system/modules/index.ts index c4128d6..0118340 100644 --- a/api/system/modules/index.ts +++ b/api/system/modules/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Modules, ModulesParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -11,10 +11,10 @@ export async function pageModules(params) { SERVER_API_URL + '/system/modules/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -27,10 +27,10 @@ export async function listModules(params?: ModulesParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -41,10 +41,10 @@ export async function addModules(data: Modules) { SERVER_API_URL + '/system/modules', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -55,39 +55,39 @@ export async function updateModules(data: Modules) { SERVER_API_URL + '/system/modules', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除角色 */ export async function removeModules(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/modules/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除角色 */ export async function removeModulesBath(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/modules/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -97,10 +97,10 @@ export async function listModulesMenus(modulesId?: number) { const res = await request.get>( SERVER_API_URL + '/system/modules-menu/' + modulesId ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -111,8 +111,8 @@ export async function updateModulesMenus(modulesId?: number, data?: number[]) { SERVER_API_URL + '/system/modules-menu/' + modulesId, data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/operation-record/index.ts b/api/system/operation-record/index.ts index 4c2ffd3..3256960 100644 --- a/api/system/operation-record/index.ts +++ b/api/system/operation-record/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { OperationRecord, OperationRecordParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -11,10 +11,10 @@ export async function pageOperationRecords(params: OperationRecordParam) { SERVER_API_URL + '/system/operation-record/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -25,8 +25,8 @@ export async function listOperationRecords(params?: OperationRecordParam) { SERVER_API_URL + '/system/operation-record', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/order/index.ts b/api/system/order/index.ts index f47dd66..9d9f5f0 100644 --- a/api/system/order/index.ts +++ b/api/system/order/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Order, OrderParam } from './model'; import { SERVER_API_URL } from '@/config/index'; @@ -13,10 +13,10 @@ export async function pageOrder(params: OrderParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listOrder(params?: OrderParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addOrder(data: Order) { SERVER_API_URL + '/system/order', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateOrder(data: Order) { SERVER_API_URL + '/system/order', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除订单 */ export async function removeOrder(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/order/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除订单 */ export async function removeBatchOrder(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/order/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getOrder(id: number) { const res = await request.get>( SERVER_API_URL + '/system/order/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/orderGoods/index.ts b/api/system/orderGoods/index.ts index ce37160..5cf21d6 100644 --- a/api/system/orderGoods/index.ts +++ b/api/system/orderGoods/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { OrderGoods, OrderGoodsParam } from './model'; import {SERVER_API_URL} from '@/config/setting'; @@ -13,10 +13,10 @@ export async function pageOrderGoods(params: OrderGoodsParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listOrderGoods(params?: OrderGoodsParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addOrderGoods(data: OrderGoods) { SERVER_API_URL + '/system/order-goods', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateOrderGoods(data: OrderGoods) { SERVER_API_URL + '/system/order-goods', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除订单商品 */ export async function removeOrderGoods(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/order-goods/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除订单商品 */ export async function removeBatchOrderGoods(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/order-goods/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getOrderGoods(id: number) { const res = await request.get>( SERVER_API_URL + '/system/order-goods/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/organization/index.ts b/api/system/organization/index.ts index 703cf86..631475d 100644 --- a/api/system/organization/index.ts +++ b/api/system/organization/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Organization, OrganizationParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -11,10 +11,10 @@ export async function pageOrganizations(params: OrganizationParam) { SERVER_API_URL + '/system/organization/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -25,10 +25,10 @@ export async function listOrganizations(params?: OrganizationParam) { SERVER_API_URL + '/system/organization', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -39,10 +39,10 @@ export async function addOrganization(data: Organization) { SERVER_API_URL + '/system/organization', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -53,21 +53,21 @@ export async function updateOrganization(data: Organization) { SERVER_API_URL + '/system/organization', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除机构 */ export async function removeOrganization(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/organization/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/parameter/index.ts b/api/system/parameter/index.ts index 1d912b3..340386d 100644 --- a/api/system/parameter/index.ts +++ b/api/system/parameter/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Parameter, ParameterParam } from './model'; import {SERVER_API_URL} from '@/config/index'; @@ -13,10 +13,10 @@ export async function pageParameter(params: ParameterParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listParameter(params?: ParameterParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addParameter(data: Parameter) { SERVER_API_URL + '/system/parameter', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateParameter(data: Parameter) { SERVER_API_URL + '/system/parameter', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除应用参数 */ export async function removeParameter(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/parameter/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除应用参数 */ export async function removeBatchParameter(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/parameter/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getParameter(id: number) { const res = await request.get>( SERVER_API_URL + '/system/parameter/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/payment/index.ts b/api/system/payment/index.ts index cfaf7f9..aead1d9 100644 --- a/api/system/payment/index.ts +++ b/api/system/payment/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Payment, PaymentParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -14,10 +14,10 @@ export async function pagePayment(params: PaymentParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -30,10 +30,10 @@ export async function listPayment(params?: PaymentParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -44,10 +44,10 @@ export async function addPayment(data: Payment) { SERVER_API_URL + '/system/payment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -58,39 +58,39 @@ export async function updatePayment(data: Payment) { SERVER_API_URL + '/system/payment', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除支付方式 */ export async function removePayment(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/payment/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除支付方式 */ export async function removeBatchPayment(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/payment/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -100,10 +100,10 @@ export async function getPayment(id: number) { const res = await request.get>( SERVER_API_URL + '/system/payment/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -114,8 +114,8 @@ export async function getNativeCode(data: Order) { SERVER_API_URL + '/system/wx-native-pay/codeUrl', data ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/plug/index.ts b/api/system/plug/index.ts index 483db41..e6e7a09 100644 --- a/api/system/plug/index.ts +++ b/api/system/plug/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Plug, PlugParam } from './model/index'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function pagePlug(params: PlugParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listPlug(params?: PlugParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -42,10 +42,10 @@ export async function getPlug(id: number) { const res = await request.get>( SERVER_API_URL + '/system/plug/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -56,10 +56,10 @@ export async function updatePlug(data: Plug) { SERVER_API_URL + '/system/plug', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } // 排行榜 @@ -70,10 +70,10 @@ export async function ranking(params?: PlugParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -90,10 +90,10 @@ export async function checkExistence( params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } // 搜索历史 @@ -104,10 +104,10 @@ export async function searchHistory(params?: String) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -118,8 +118,8 @@ export async function createPlug(data: Plug) { SERVER_API_URL + '/system/plug/plug', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/role/index.ts b/api/system/role/index.ts index 161ed0e..5a6d7b8 100644 --- a/api/system/role/index.ts +++ b/api/system/role/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Role, RoleParam } from './model'; import type { Menu } from '../menu/model'; @@ -12,10 +12,10 @@ export async function pageRoles(params: RoleParam) { SERVER_API_URL + '/system/role/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -28,10 +28,10 @@ export async function listRoles(params?: RoleParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -42,10 +42,10 @@ export async function addRole(data: Role) { SERVER_API_URL + '/system/role', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -56,39 +56,39 @@ export async function updateRole(data: Role) { SERVER_API_URL + '/system/role', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除角色 */ export async function removeRole(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/role/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除角色 */ export async function removeRoles(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/role/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -98,10 +98,10 @@ export async function listRoleMenus(roleId?: number) { const res = await request.get>( SERVER_API_URL + '/system/role-menu/' + roleId ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -112,8 +112,8 @@ export async function updateRoleMenus(roleId?: number, data?: number[]) { SERVER_API_URL + '/system/role-menu/' + roleId, data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/setting/index.ts b/api/system/setting/index.ts index 65f479c..a3ef547 100644 --- a/api/system/setting/index.ts +++ b/api/system/setting/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Setting, SettingParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function pageSetting(params: SettingParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listSetting(params?: SettingParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -42,10 +42,10 @@ export async function getSetting(id: number) { const res = await request.get>( SERVER_API_URL + '/system/setting/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -56,10 +56,10 @@ export async function addSetting(data: Setting) { SERVER_API_URL + '/system/setting', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -70,39 +70,39 @@ export async function updateSetting(data: Setting) { SERVER_API_URL + '/system/setting', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除设置 */ export async function removeSetting(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/setting/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除设置 */ export async function removeBatchSetting(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/setting/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -119,8 +119,8 @@ export async function checkExistence( params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/tenant/index.ts b/api/system/tenant/index.ts index f70e364..3eec9a6 100644 --- a/api/system/tenant/index.ts +++ b/api/system/tenant/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Tenant, TenantParam } from './model'; import { Menu } from '@/api/system/menu/model'; @@ -16,10 +16,10 @@ export async function pageTenant(params: TenantParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -32,10 +32,10 @@ export async function profile(params?: TenantParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -48,10 +48,10 @@ export async function listTenant(params?: TenantParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -61,10 +61,10 @@ export async function getTenant(id: number) { const res = await request.get>( SERVER_API_URL + '/system/tenant/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -75,10 +75,10 @@ export async function addTenant(data: Tenant) { SERVER_API_URL + '/system/tenant', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -89,39 +89,39 @@ export async function updateTenant(data: Tenant) { SERVER_API_URL + '/system/tenant', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除租户 */ export async function removeTenant(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/tenant/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除租户 */ export async function removeBatchTenant(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/tenant/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -138,10 +138,10 @@ export async function updateTenantPassword( password } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -158,10 +158,10 @@ export async function checkExistence( params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -171,8 +171,8 @@ export async function initialization(roleId?: number) { const res = await request.get>( SERVER_API_URL + '/system/tenant/role-menu/' + roleId ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/url/index.ts b/api/system/url/index.ts index 2a6577d..9222664 100644 --- a/api/system/url/index.ts +++ b/api/system/url/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Url, UrlParam } from './model'; import {SERVER_API_URL} from '@/config/index'; @@ -13,10 +13,10 @@ export async function pageUrl(params: UrlParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listUrl(params?: UrlParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addUrl(data: Url) { SERVER_API_URL + '/system/url', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateUrl(data: Url) { SERVER_API_URL + '/system/url', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除应用域名 */ export async function removeUrl(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/url/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除应用域名 */ export async function removeBatchUrl(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/url/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getUrl(id: number) { const res = await request.get>( SERVER_API_URL + '/system/url/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/user-collection/index.ts b/api/system/user-collection/index.ts index cbd1889..92a29a3 100644 --- a/api/system/user-collection/index.ts +++ b/api/system/user-collection/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { UserCollection, UserCollectionParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function pageUserCollection(params: UserCollectionParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listUserCollection(params?: UserCollectionParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addUserCollection(data: UserCollection) { SERVER_API_URL + '/system/user-collection', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateUserCollection(data: UserCollection) { SERVER_API_URL + '/system/user-collection', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除我的收藏 */ export async function removeUserCollection(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/user-collection/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除我的收藏 */ export async function removeBatchUserCollection(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/user-collection/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -99,8 +99,8 @@ export async function getUserCollection(id: number) { const res = await request.get>( SERVER_API_URL + '/system/user-collection/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/user-file/index.ts b/api/system/user-file/index.ts index 40f6016..4f6261a 100644 --- a/api/system/user-file/index.ts +++ b/api/system/user-file/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { UserFile, UserFileParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -11,10 +11,10 @@ export async function pageUserFiles(params: UserFileParam) { SERVER_API_URL + '/system/user-file/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -27,10 +27,10 @@ export async function listUserFiles(params: UserFileParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -41,10 +41,10 @@ export async function addUserFile(data: UserFile) { SERVER_API_URL + '/system/user-file', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -55,35 +55,35 @@ export async function updateUserFile(data: UserFile) { SERVER_API_URL + '/system/user-file', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除用户文件 */ export async function removeUserFile(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/user-file/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除用户文件 */ export async function removeUserFiles(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/user-file/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/user-group/index.ts b/api/system/user-group/index.ts index 01e8cbb..0434969 100644 --- a/api/system/user-group/index.ts +++ b/api/system/user-group/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Group, GroupParam } from '@/api/system/user-group/model'; import { SERVER_API_URL } from '@/config'; @@ -12,10 +12,10 @@ export async function pageGroup(params: GroupParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -28,10 +28,10 @@ export async function listGroup(params?: GroupParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -42,10 +42,10 @@ export async function addGroup(data: Group) { SERVER_API_URL + '/system/user-group', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -56,10 +56,10 @@ export async function updateGroup(data: Group) { SERVER_API_URL + '/system/user-group', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -70,10 +70,10 @@ export async function bindGroup(data: Group) { SERVER_API_URL + '/system/user-group/bind', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -84,37 +84,37 @@ export async function addBatchGroup(data: Group[]) { SERVER_API_URL + '/system/user-group/batch', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除仓库 */ export async function removeGroup(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/user-group/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除仓库 */ export async function removeBatchGroup(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/user-group/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/user/index.ts b/api/system/user/index.ts index db453a6..cb2731f 100644 --- a/api/system/user/index.ts +++ b/api/system/user/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { User, UserParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -11,10 +11,10 @@ export async function pageUsers(params: UserParam) { SERVER_API_URL + '/system/user/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -27,10 +27,10 @@ export async function listUsers(params?: UserParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function getStaffs(params?: UserParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -59,10 +59,10 @@ export async function getCompanyList(params?: UserParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -72,10 +72,10 @@ export async function getUser(id: number) { const res = await request.get>( SERVER_API_URL + '/system/user/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -86,10 +86,10 @@ export async function addUser(data: User) { SERVER_API_URL + '/system/user', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -100,39 +100,39 @@ export async function updateUser(data: User) { SERVER_API_URL + '/system/user', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除用户 */ export async function removeUser(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/user/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除用户 */ export async function removeUsers(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/user/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -146,10 +146,10 @@ export async function updateUserStatus(userId?: number, status?: number) { status } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -160,10 +160,10 @@ export async function updateUserRecommend(form) { SERVER_API_URL + '/system/user/recommend', form ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -177,10 +177,10 @@ export async function updateUserPassword(userId?: number, password = '123456') { password } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -193,10 +193,10 @@ export async function importUsers(file: File) { SERVER_API_URL + '/system/user/import', formData ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -213,10 +213,10 @@ export async function checkExistence( params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -229,8 +229,8 @@ export async function countUserBalance(params?: UserParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/version/index.ts b/api/system/version/index.ts index 172673c..69dbfdd 100644 --- a/api/system/version/index.ts +++ b/api/system/version/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Version, VersionParam } from './model'; import type { Menu } from '../menu/model'; @@ -12,10 +12,10 @@ export async function pageVersion(params: VersionParam) { SERVER_API_URL + '/system/version/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -28,10 +28,10 @@ export async function listVersion(params?: VersionParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -42,10 +42,10 @@ export async function addVersion(data: Version) { SERVER_API_URL + '/system/version', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -56,39 +56,39 @@ export async function updateVersion(data: Version) { SERVER_API_URL + '/system/version', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除角色 */ export async function removeVersion(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/version/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除角色 */ export async function removeVersions(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/version/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -98,10 +98,10 @@ export async function listVersionMenus(versionId?: number) { const res = await request.get>( SERVER_API_URL + '/system/version-menu/' + versionId ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -112,8 +112,8 @@ export async function updateVersionMenus(versionId?: number, data?: number[]) { SERVER_API_URL + '/system/version-menu/' + versionId, data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/website/field/index.ts b/api/system/website/field/index.ts index ed3cac1..bbc45a5 100644 --- a/api/system/website/field/index.ts +++ b/api/system/website/field/index.ts @@ -1,112 +1,112 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Config, - WebsiteField, - WebsiteFieldParam -} from "@/api/cms/website/field/model"; -import { MODULES_API_URL } from '@/config'; + CmsWebsiteField, + CmsWebsiteFieldParam +} from "@/api/cms/cmsWebsiteField/model"; + /** * 分页查询项目参数 */ -export async function pageWebsiteField(params: WebsiteFieldParam) { - const res = await request.get>>( - MODULES_API_URL + '/cms/website-field/page', +export async function pageWebsiteField(params: CmsWebsiteFieldParam) { + const res = await request.get>>( + '/cms/website-field/page', { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 查询项目参数列表 */ -export async function listWebsiteField(params?: WebsiteFieldParam) { - const res = await request.get>( - 'https://modules.gxwebsoft.com/api/cms/website-field', +export async function listWebsiteField(params?: CmsWebsiteFieldParam) { + const res = await request.get>( + '/cms/website-field', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 根据id查询项目参数 */ export async function getWebsiteField(id: number) { - const res = await request.get>( - MODULES_API_URL + '/cms/website-field/' + id + const res = await request.get>( + '/cms/website-field/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 添加项目参数 */ -export async function addWebsiteField(data: WebsiteField) { +export async function addWebsiteField(data: CmsWebsiteField) { const res = await request.post>( - MODULES_API_URL + '/cms/website-field', + '/cms/website-field', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 修改项目参数 */ -export async function updateWebsiteField(data: WebsiteField) { +export async function updateWebsiteField(data: CmsWebsiteField) { const res = await request.put>( - MODULES_API_URL + '/cms/website-field', + '/cms/website-field', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除项目参数 */ export async function removeWebsiteField(id?: number) { - const res = await request.delete>( - MODULES_API_URL + '/cms/website-field/' + id + const res = await request.del>( + '/cms/website-field/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除项目参数 */ export async function removeBatchWebsiteField(data: (number | undefined)[]) { - const res = await request.delete>( - MODULES_API_URL + '/cms/website-field/batch', + const res = await request.del>( + '/cms/website-field/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -118,29 +118,29 @@ export async function checkExistence( id?: number ) { const res = await request.get>( - MODULES_API_URL + '/cms/website-field/existence', + '/cms/website-field/existence', { params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 查询项目参数列表 */ -export async function configWebsiteField(params?: WebsiteFieldParam) { +export async function configWebsiteField(params?: CmsWebsiteFieldParam) { const res = await request.get>( - 'https://modules.gxwebsoft.com/api/cms/website-field/config', + '/cms/website-field/config', { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/website/index.ts b/api/system/website/index.ts index fbfdecf..732cb73 100644 --- a/api/system/website/index.ts +++ b/api/system/website/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { Website, WebsiteParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -10,23 +10,23 @@ export async function getSiteInfo() { const res = await request.get>( SERVER_API_URL + '/system/website/getSiteInfo' ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 清除缓存 */ export async function removeSiteInfoCache(key?: string) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/website/clearSiteInfo/' + key ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -39,10 +39,10 @@ export async function pageWebsite(params: WebsiteParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -55,10 +55,10 @@ export async function listWebsite(params?: WebsiteParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -69,10 +69,10 @@ export async function addWebsite(data: Website) { SERVER_API_URL + '/system/website', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -83,39 +83,39 @@ export async function updateWebsite(data: Website) { SERVER_API_URL + '/system/website', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除网站 */ export async function removeWebsite(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/website/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除网站 */ export async function removeBatchWebsite(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/website/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -129,10 +129,10 @@ export async function updateWebsiteStatus(websiteId?: number, status?: number) { status } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -142,10 +142,10 @@ export async function getWebsite(id: number) { const res = await request.get>( SERVER_API_URL + '/system/website/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -162,8 +162,8 @@ export async function checkExistence( params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/api/system/white-domain/index.ts b/api/system/white-domain/index.ts index ccce67d..b069121 100644 --- a/api/system/white-domain/index.ts +++ b/api/system/white-domain/index.ts @@ -1,4 +1,4 @@ -import request from '@/utils/request'; +import request from '~/utils/request'; import type { ApiResult, PageResult } from '@/api'; import type { WhiteDomain, WhiteDomainParam } from './model'; import { SERVER_API_URL } from '@/config'; @@ -13,10 +13,10 @@ export async function pageWhiteDomain(params: WhiteDomainParam) { params } ); - if (res.data.code === 0) { - return res.data.data; + if (res.code === 0) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -29,10 +29,10 @@ export async function listWhiteDomain(params?: WhiteDomainParam) { params } ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -43,10 +43,10 @@ export async function addWhiteDomain(data: WhiteDomain) { SERVER_API_URL + '/system/white-domain', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -57,39 +57,39 @@ export async function updateWhiteDomain(data: WhiteDomain) { SERVER_API_URL + '/system/white-domain', data ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 删除服务器白名单 */ export async function removeWhiteDomain(id?: number) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/white-domain/' + id ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** * 批量删除服务器白名单 */ export async function removeBatchWhiteDomain(data: (number | undefined)[]) { - const res = await request.delete>( + const res = await request.del>( SERVER_API_URL + '/system/white-domain/batch', { data } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -106,10 +106,10 @@ export async function updateWhiteDomainStatus( status } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -119,10 +119,10 @@ export async function getWhiteDomain(id: number) { const res = await request.get>( SERVER_API_URL + '/system/white-domain/' + id ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; + if (res.code === 0 && res.data) { + return res.data; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } /** @@ -139,8 +139,8 @@ export async function checkExistence( params: { field, value, id } } ); - if (res.data.code === 0) { - return res.data.message; + if (res.code === 0) { + return res.message; } - return Promise.reject(new Error(res.data.message)); + return Promise.reject(new Error(res.message)); } diff --git a/assets/css/base.css b/assets/css/base.css new file mode 100644 index 0000000..4e54bba --- /dev/null +++ b/assets/css/base.css @@ -0,0 +1,25 @@ + +html{margin:0;padding:0;border:0;} +body,div,span,object,iframe,h1,h2,h3,h4,p,blockquote,pre,a,address,code,b,em,img, +dl,dt,dd,ol,ul,li,fieldset,form,label,footer, +header,hgroup,nav,section +{margin:0;padding:0;border:0;} +body{background:#f9f9f9;color:#666;position:relative;font:12px/1.5 Microsoft YaHei,arial,宋体,sans-serif;vertical-align:baseline;width:100%;overflow-x:hidden;} +a{text-decoration:none;outline:none;} +a:link{color:#666;} +a:visited{color:#666;} +a:hover,a:active,a:focus{text-decoration:none;outline:none;} + +input{padding:0;margin:0;font-family:'Microsoft YaHei';} +img{border:none;background:none;vertical-align:middle;} +ul,ol,li{list-style-type:none;} +select,input,img,select{vertical-align:middle;} +table{border-collapse:collapse;border-spacing:0} +table, th, td {vertical-align: middle} +.clearfix:after{content: ".";display: block;height: 0;clear: both;overflow: hidden;visibility: hidden;} +.clearfix{zoom:1} +.clearboth{height:0px;line-height:0px;overflow:hidden;clear:both;font-size:0px;} + +h1,h2,h3,h4{font-size:12px;font-weight:bold;} +hr {border: 0;border-top:1px solid #ccc;height:0;} + diff --git a/assets/css/index.css b/assets/css/index.css new file mode 100644 index 0000000..ba2894b --- /dev/null +++ b/assets/css/index.css @@ -0,0 +1,838 @@ +@charset "UTF-8"; +* { + box-sizing: border-box; +} + +.ovimg, +.ibw, +.miw, +.iml, +.imgbig { + overflow: hidden; +} + +.imgbig img { + -webkit-transition: all ease .5s; + -moz-transition: all ease .5s; + -ms-transition: all ease .5s; + -o-transition: all ease .5s; + transition: all ease .5s; +} + +.imgbig:hover img { + -webkit-transform: scale(1.2, 1.2); + -moz-transform: scale(1.2, 1.2); + -ms-transform: scale(1.2, 1.2); + -o-transform: scale(1.2, 1.2); + transform: scale(1.2, 1.2); +} + +.ovimg img { + width: 100%; + min-height: 100%; +} + +.ibw img { + width: 100%; + height: auto; +} + +.miw img { + max-width: 100%; + max-height: 100%; +} + +.iml { + text-align: center; +} + +.iml img { + transform: translateY(-2px); + vertical-align: middle; +} + +.w1200 { + width: 1200px; + margin: 0 auto; +} + +.p1920 { + width: 1920px; + position: relative; + left: 50%; + margin-left: -960px; +} + +.head1 { + background: #FFFFFF; + color: #fff; + font-size: 14px; + width: 1920px; + left: 50%; + margin-left: -960px; + position: relative; +} + +.head1 a { + color: #fff; +} + +.head1 .headr .sous { + margin-top: 14px; + margin-right: 26px; +} + +.head1 .headr .seo { + margin-left: 18px; +} + +.yuyan { + position: relative; +} + +.ssx { + display: none; + position: absolute; + right: 0; + top: 20px; +} + +.ssx a { + font-size: 14px; +} + +/*搜索和热门搜索*/ +#formsearch { + height: 30px; + width: 258px; + border-bottom: 1px solid #fff; +} + +.hotSearch { + float: left; + height: 24px; + line-height: 24px; + font-weight: normal; +} + +#search-type { + float: left; + width: 100px; + height: 24px; + border: 1px solid #c8c8c8; + margin-right: 5px; +} + +.hotSearch a { + margin-right: 6px; +} + +#formsearch input { + height: 30px; + background: none; + border: none; + line-height: 29px; +} + +#formsearch input#keyword { + height: 30px; + line-height: 29px; + color: #fff; + border: none; + width: 200px; + float: left; + outline: none; +} + +#formsearch input#s_btn { + width: 25px; + height: 30px; + line-height: 29px; + text-align: center; + color: #fff; + border: none; + cursor: pointer; + float: right; + background: url(../images/sou.png) no-repeat center center; +} + +.head2 { + background: url(https://oss.wsdns.cn/20241123/02dee75c789c40efb18ade2459af41ac.png) no-repeat top center; + height: 264px; + padding-top: 59px; + position: absolute; + top: 124px; + right: 0; + z-index: 1; + width: 1920px; + left: 50%; + margin-left: -960px; +} + +.head2 .head2-index .dao { + width: 780px; +} + +.tn { + background: url(../images/menu_news_bg.png) no-repeat top center #efefef; + height: 185px; + height: 300px; + background-size: cover; +} + +.navleft { + width: 215px; + padding:0px 16px; + /* margin-right: 30px; */ + float: left; + border-right: solid 1px #cccccc; + overflow: hidden; + /*padding-top: 12px;*/ + height: 280px; +} + +.navright { + height: 185px; + overflow: hidden; + padding-right: 20px; + padding-top: 12px; +} + +.navright img { + width: 243px; + /*height: 110px;*/ +} + +.about-index { + margin-top: 70px; +} + +.about-index .aboutl .at { + border-left: 2px solid #0c6fcd; + height: 35px; + padding-left: 20px; +} + +.about-index .aboutl .at h3 { + color: #0c6fcd; + font-size: 36px; + line-height: 1; + font-weight: 500; +} + +.about-index .aboutl .at h4 { + color: #a7a7a7; + font-size: 28px; + text-transform: uppercase; + font-weight: 500; +} + +.about-index .aboutl .amore { + margin-top: 88px; + margin-top: 28px; + margin-left: 124px; +} + +.about-index .aboutl .amore a { + display: block; + color: #0c6fcd; + font-size: 18px; + transition: 0.5s; +} + +.about-index .aboutl .amore a:hover { + transform: translateX(15px); +} + +.about-index .aboutr { + width: 905px; +} + +.about-index .aboutr p { + color: #333333; + font-size: 16px; + line-height: 20px; + text-align: justify; +} + +.num { + margin-top: 36px; + margin-bottom: 82px; +} + +.num .num-list { + display: flex; + justify-content: center; + align-items: center; +} + +.c2-con ul{ + display: flex; +justify-content: space-between; +flex-wrap: nowrap; +display: -webkit-flex; +align-items: center; +} +.c2-con ul li{ + position: relative; +} +.c2-con ul li:last-child{border-right: 0;} +.c2-con ul li .count-title{color: #0c6fcd;display:inline-block;font-size: 86px;margin-right: 10px;} +.c2-con ul li dt{font-size:18px;color: #0c6fcd;display:inline-block;font-weight: normal;position: absolute;top: 26%;} +.c2-con ul li p{color: #555;text-align: center;position: absolute;bottom: 30px;right: 0;background: #fff;display: inline-block;font-size: 14px;color: #0c6fcd;border-bottom:1px solid #0c6fcd;border-top:1px solid #0c6fcd;} +.c2-con ul li:nth-child(1) p{ + right: -16px; +} + +.pt { + border-left: 2px solid #0c6fcd; + height: 35px; + padding-left: 20px; +} + +.pt h3 { + color: #0c6fcd; + font-size: 36px; + line-height: 1; + font-weight: 500; +} + +.pt h4 { + color: #a7a7a7; + font-size: 28px; + text-transform: uppercase; + font-weight: 500; +} + +.product-bg { + background: #f7f7f7; + padding: 45px 0; +} + +.product-bg .product-roll { + width: 1200px; + margin: 0 auto; + position: relative; + margin-top: 60px; +} + +.product-bg .product-roll .prev { + position: absolute; + left: 0; + top: 50%; + margin-top: -18px; + background: url(../images/left1.png) no-repeat left center; + width: 22px; + height: 36px; + transition: 0.5s; +} + +.product-bg .product-roll .prev:hover { + transform: translateX(-15px); +} + +.product-bg .product-roll .next { + position: absolute; + right: 0; + top: 50%; + margin-top: -18px; + background: url(../images/right1.png) no-repeat left center; + width: 22px; + height: 36px; + transition: 0.5s; +} + +.product-bg .product-roll .next:hover { + transform: translateX(15px); +} + +.product-bg .product-roll .bd ul li { + float: left; + width: 289px; + height: 425px; + position: relative; + margin: 0 7px; +} + +.product-bg .product-roll .bd ul li .img1 img { + width: 289px; + height: 425px; +} + +.product-bg .product-roll .bd ul li .wz { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 146px; + background: rgba(0, 0, 0, 0.4); + padding: 0 22px; + padding-top: 12px; +} + +.product-bg .product-roll .bd ul li .wz .wz1 .ww1 { + color: #fff; + font-size: 16px; + margin-top: 18px; + margin-left: 14px; +} + +.product-bg .product-roll .bd ul li .wz .wz1 .ww2 { + color: #fff; + font-size: 14px; + text-transform: uppercase; + margin-top: 21px; + margin-left: 5px; +} + +.product-bg .product-roll .bd ul li .wz .wz2 { + color: #fff; + font-size: 14px; + line-height: 20px; + margin-top: 6px; +} + +.product-bg .product-roll .tempWrap { + width: 1200px !important; + margin: 0 auto; +} + +.buju-bg { + background: url(/assets/images/bj11.jpg) no-repeat top center; + height: 436px; + overflow: hidden; +} + +.buju-bg .buju-index { + padding-top: 120px; +} + +.buju-bg .buju-index .buju1 { + width: 789px; + padding-top: 40px; +} + +.buju-bg .buju-index .buju1 p { + color: #fff; + font-size: 22px; + line-height: 36px; + letter-spacing: -1px; +} + +.buju-bg .buju-index .buju2 .at { + border-right: 2px solid #fff; + height: 35px; + padding-right: 20px; + text-align: right; +} + +.buju-bg .buju-index .buju2 .at h3 { + color: #fff; + font-size: 36px; + line-height: 1; + font-weight: 500; +} + +.buju-bg .buju-index .buju2 .at h4 { + color: #a7a7a7; + font-size: 22px; + text-transform: uppercase; + font-weight: 500; +} + +.buju-bg .buju-index .buju2 .amore { + margin-top: 40px; +} + +.buju-bg .buju-index .buju2 .amore a { + display: block; + color: white; + font-size: 18px; + transition: 0.5s; + text-align: right; +} + +.buju-bg .buju-index .buju2 .amore a:hover { + transform: translateX(15px); +} + +.case-index { + margin-top: 60px; +} + +.case-index .ctt .cmore { + margin-top: 25px; +} + +.case-index .ctt .cmore a { + display: block; + color: #0c6fcd; + font-size: 16px; +} + +.case-index .case-roll { + margin-top: 46px; +} + +.case-index .case-roll .bd ul li { + float: left; + width: 289px; + margin: 0 7px; +} + +.case-index .case-roll .bd ul li .img1 img { + width: 289px; + height: 200px; +} + +.case-index .case-roll .bd ul li .wz { + text-align: center; + color: #000000; + font-size: 16px; + padding: 18px 0; +} + +.news-bg { + border-top: 1px solid #d9d9d9; + margin-top: 55px; + padding-top: 55px; +} + +.news-bg .news-index .news1-a { + width: 540px; +} + +.news-bg .news-index .news1-a .nlist1 { + margin-top: 42px; +} + +.news-bg .news-index .news1-a .nlist1 li a { + display: block; +} + +.news-bg .news-index .news1-a .nlist1 li a .nw1 { + color: #333333; + font-size: 24px; +} + +.news-bg .news-index .news1-a .nlist1 li a .nw2 { + color: #666666; + font-size: 14px; + text-indent: 2em; + line-height: 22px; + margin-top: 28px; +} + +.news-bg .news-index .news1-a .nlist1 li a .nw3 { + width: 165px; + height: 40px; + background: #0768d2; + color: #fff; + font-size: 14px; + color: #fff; + line-height: 40px; + text-align: center; + margin-top: 28px; +} + +.news-bg .news-index .news1-a .nlist1 li a .nw3:hover { + font-weight: 600; +} + +.news-bg .news-index .news1-b { + width: 598px; + height: 316px; + border: 1px solid #d7d7d7; +} + +.news-bg .nlist2 { + margin-top: 72px; +} + +.news-bg .nlist2 li { + float: left; + width: 580px; +} + +.news-bg .nlist2 li:nth-child(2n) { + float: right; +} + +.news-bg .nlist2 li a { + display: flex; + justify-content: space-between; +} + +.news-bg .nlist2 li a .nl .nhh { + width: 165px; + height: 102px; + border: 1px solid #d7d7d7; + display: none; +} + +.news-bg .nlist2 li a .nl .nhh img { + width: 163px; + height: 100px; +} + +.news-bg .nlist2 li a .nl .date { + background: url(/assets/images/date.png) no-repeat top center; + width: 104px; + height: 104px; + text-align: center; +} + +.news-bg .nlist2 li a .nl .date .d1 { + color: #111111; + font-size: 48px; + font-weight: 600; +} + +.news-bg .nlist2 li a .nl .date .d2 { + color: #111111; + font-size: 14px; + font-weight: 600; +} + +.news-bg .nlist2 li a .nr { + width: 468px; +} + +.news-bg .nlist2 li a .nr .nw1 { + color: #333333; + font-size: 20px; +} + +.news-bg .nlist2 li a .nr .nw2 { + color: #666666; + font-size: 14px; + line-height: 22px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + margin-top: 5px; +} + +.news-bg .nlist2 li a:hover .nl .nhh { + display: block; +} + +.news-bg .nlist2 li a:hover .nl .date { + display: none; +} + +.news-bg .nlist2 li a:hover .nr { + width: 405px; +} + +.news-bg .nlist2 li a:hover .nr .nw1 { + color: #0768d2; +} + +.honor-bg { + background: url(/assets/images/bj22.jpg) no-repeat top center; + height: 142px; + overflow: hidden; + margin-top: 60px; + padding-top: 16px; +} + +.honor-bg .bd .honot-list li { + width: 116px; + height: 116px; + margin: 0 30px; +} + +.honor-bg .bd .honot-list li img { + width: 116px; + height: 116px; +} + +.lxt { + text-align: center; + margin-top: 60px; +} + +.lxt h3 { + color: #0c6fcd; + font-size: 36px; + font-weight: 500; +} + +.lxt h4 { + color: #a7a7a7; + font-size: 22px; + text-transform: uppercase; + font-weight: 500; +} + +.ct-bg { + background: url(/assets/images/bj33.jpg) no-repeat top center; + height: 365px; + margin-top: 110px; + position: relative; +} + +.ct-bg .ct-index { + background: #0c6fcd; + height: 355px; + width: 1200px; + margin: 0 auto; + position: absolute; + top: -64px; + left: 0; + right: 0; + padding: 0 56px; +} + +.ct-bg .ct-index .liu1 { + color: #fff; + font-size: 22px; + padding-top: 25px; +} + +.ct-bg .ct-index .liu2 { + color: #fff; + font-size: 12px; + padding-top: 10px; +} + +.message1 { + margin-top: 20px; +} + +.message1 .m11 { + margin-bottom: 15px; +} + +.message1 .m11 .m22 { + width: 524px; +} + +.message1 .m11 .m22 span { + background: #fff; + width: 524px; + outline: none; + border: none; + height: 35px; + line-height: 35px; + color: #333333; + font-size: 12px; +} + +.message1 .m33 { + width: 1088px; + height: 103px; + background: #fff; +} + +.message1 .m33 span { + width: 1088px; + background: #fff; + outline: none; + border: none; + height: 103px; + line-height: 35px; + color: #333333; + font-size: 12px; + padding-top: 5px; +} + +.message1 #code a { + color: #fff; +} + +.message1 .tj { + width: 88px; + height: 33px; + background: #fff; + margin-top: 15px; + margin-left: 20px; + margin-top: 10px; +} + +.message1 .tj input { + width: 100%; + height: 33px; + line-height: 33px; + border: none; + background: #fff; +} + +.m_input { + background: #fff; + width: 100%; + outline: none; + border: none; + height: 35px; + line-height: 35px; +} + +.m_input2 { + background: #fff; + outline: none; + border: none; + height: 103px; + line-height: 20px; + color: #333333; +} + +.foot-bg { + background: #f5f5f7; + padding: 50px 0; + padding-bottom: 20px; +} + +.foot-bg .foot-index .footl { + width: 800px; +} + +.foot-bg .foot-index .footl .fnav a { + color: #fff; + font-size: 16px; + padding-right: 18px; +} + +.foot-bg .foot-index .footl .fnav a:hover { + font-weight: 600; +} + +.foot-bg .foot-index .footl .fct { + margin-top: 28px; +} + +.foot-bg .foot-index .footl .fct p { + color: #fff; + font-size: 14px; + line-height: 30px; +} + +.foot-bg .foot-index .footr { + width: 230px; + margin-top: 20px; +} + +.foot-bg .foot-index .footr p { + color: #fff; + text-align: center; + line-height: 30px; + font-size: 14px; +} + +.foot-bg .cop-index { + border-top: 1px solid #fff; + margin-top: 30px; + padding: 20px 0; + text-align: center; + color: #fff; + font-size: 12px; +} + +.foot-bg .cop-index a { + color: #fff; +} +.pt, .pt-4{ + padding-top: 0; +} diff --git a/assets/css/main.css b/assets/css/main.css index 1c1d1e8..f4f9890 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -1,122 +1,1534 @@ -* { - margin: 0; - padding: 0; +/*头部样式*/ +.topp.scroll { + position: fixed; + background: rgba(0, 0, 0, 0.5); + -webkit-transition: all .7s ease; + transition: all .7s ease; + z-index: 999; + width: 1920px; + left: 50%; + margin-left: -960px; } -body { - margin: 0; - font-family: Inter, "Inter Fallback: Arial",ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji; - font-size: 15px; - line-height: 1.4rem; +.head-bg { + background: url(../images/nav1.jpg) repeat-x top center; + height: 124px; } -ul, li { - list-style: none; +.wel { + line-height: 36px; + font-size: 13px; + color: #888888; } -a { - text-decoration: none; - color: #333333; +.x { + line-height: 36px; + font-size: 13px; } -a:hover{ - color: #cf1313; +.k1 { + line-height: 36px; + font-size: 13px; + color: #888888; } -h1, h2, h3, h4, h5, h6 { - font-weight: normal; +.k1 a { + line-height: 36px; + font-size: 13px; + color: #888888; } -.flex { - display: flex; +.k1 a:first-child { + font-weight: bold; + text-transform: uppercase; + color: #0c6bc6; } -.container { +.k1 a:nth-child(2) { + font-weight: bold; + text-transform: uppercase; + color: #0c6bc6; +} + +#header { + width: 1200px; margin: 0 auto; } -@media (max-width: 768px){ - .container { - width: auto; - margin: 0 auto; - overflow: hidden; - } +.top { + height: 88px; } -.between { - display: flex; - justify-content: space-between; +.logo {width:322px;} +.logo img{width:100%} +.topLink { + float: right; + text-align: right; + position: relative; + z-index: 9999; } -.column { - flex-direction: column; +.translate { + width: 100px; + position: absolute; + left: 0; + top: 10px; + z-index: 9999; } -.items-center { - display: flex; - align-items: center; +.tran-in { + left: 120px; } -.text-overflow { - width: 100%; +.translate li { + border: 1px dashed #cccccc; + line-height: 26px; + text-align: left; + background: #fff; +} + +.translate li a { + display: block; + padding-left: 10px; + background: url(../images/dot4.png) no-repeat 88% 11px; +} + +.translate li a:hover { + text-decoration: none; + color: #275cea; + cursor: pointer; +} + +.translate-en { + display: none; + padding: 6px; + padding-top: 0px; +} + +.translate li .translate-en a { + padding-left: 0px; + text-align: center; + background: #fff; + border-bottom: 1px solid #cccccc; +} + +.translate li .translate-en a:hover { + font-weight: bold; +} + +.topLink .f_count { + color: #ff0000; + font-size: 13px; + font-weight: bold; +} + +.topLink .k1 { + line-height: 32px; + padding-top: 5px; +} + +.topLink .k2 { + background: url(../images/tel.png) no-repeat left 78%; + padding-left: 36px; + color: #777777; + font-size: 14px; + line-height: 24px; + margin-top: 14px; +} + + + + + +.com-img { + display: inline; overflow: hidden; - text-overflow: ellipsis; - -o-text-overflow: ellipsis; - white-space: nowrap; + margin: 0 auto; + display: table; } -.mt-10 { - margin-top: 10px; +.com-img img { + transition: all 0.5s ease-in 0s; + -webkit-transition: all 0.5s ease-in 0s; + -moz-transition: all 0.5s ease-in 0s; + -o-transition: all 0.5s ease-in 0s; } -.ml-10 { - margin-left: 10px; +.com-img:hover img { + transform: scale(1.1); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); } -.mr-10 { - margin-right: 10px; -} -.mb-10 { - margin-bottom: 10px; -} - -.mt-20 { - margin-top: 20px; -} - -.mr-20 { - margin-right: 20px; -} - -.mb-20 { +/*主体样式*/ +#container { + margin: 0 auto; + margin-top: 40px; margin-bottom: 20px; } -.clearfix:after { - content: ''; +.container { + width: 1200px; + margin: 0 auto; +} + + +.box1 { + background: url(../images/bj1.jpg) no-repeat top center; + height: 823px; + overflow: hidden; + padding-top: 18px; +} + +/*前台多页签*/ +.tab { + position: relative; + margin: 0 -20px; +} + +.tab li { + float: left; display: block; - clear: both; + cursor: pointer; + height: 70px; + line-height: 70px; + font-size: 18px; + color: #555555; + width: 266px; + text-indent: 110px; + margin: 0 22px; + margin-bottom: 15px; } -.grey { - color: grey; +.tab li:nth-of-type(3) { + background: url(../images/tab1.png) no-repeat 40px center; } -.red { - color: #ff0000; +.tab li:nth-of-type(3).cur { + color: #fff; + text-decoration: none; + background: url(../images/tab1h.png) no-repeat 40px center #0c63b6; + position: relative; } -.qr_code { - border: 1px solid #eee; - border-radius: 5px; - padding: 45px 0; +.tab li:nth-of-type(3).cur::after { + position: absolute; + content: ""; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; + bottom: 0px; + left: 46%; } -.bg-fff { - background: #ffffff; +.tab li:nth-of-type(4) { + background: url(../images/tab2.png) no-repeat 40px center; } -.link-color { - color: dodgerblue; +.tab li:nth-of-type(4).cur { + color: #fff; + text-decoration: none; + background: url(../images/tab2h.png) no-repeat 40px center #0c63b6; + position: relative; +} + +.tab li:nth-of-type(4).cur::after { + position: absolute; + content: ""; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; + bottom: 0px; + left: 46%; +} + +.tab li:nth-of-type(1) { + background: url(../images/tab3.png) no-repeat 40px center; +} + +.tab li:nth-of-type(1).cur { + color: #fff; + text-decoration: none; + background: url(../images/tab3h.png) no-repeat 40px center #0c63b6; + position: relative; +} + +.tab li:nth-of-type(1).cur::after { + position: absolute; + content: ""; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; + bottom: 0px; + left: 46%; +} + +.tab li:nth-of-type(7) { + background: url(../images/tab4.png) no-repeat 40px center; +} + +.tab li:nth-of-type(7).cur { + color: #fff; + text-decoration: none; + background: url(../images/tab4h.png) no-repeat 40px center #0c63b6; + position: relative; +} + +.tab li:nth-of-type(7).cur::after { + position: absolute; + content: ""; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; + bottom: 0px; + left: 46%; +} + +.tab li:nth-of-type(8) { + background: url(../images/tab5.png) no-repeat 40px center; +} + +.tab li:nth-of-type(8).cur { + color: #fff; + text-decoration: none; + background: url(../images/tab5h.png) no-repeat 40px center #0c63b6; + position: relative; +} + +.tab li:nth-of-type(8).cur::after { + position: absolute; + content: ""; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; + bottom: 0px; + left: 46%; +} + +.tab li:nth-of-type(6) { + background: url(../images/tab6.png) no-repeat 40px center; +} + +.tab li:nth-of-type(6).cur { + color: #fff; + text-decoration: none; + background: url(../images/tab6h.png) no-repeat 40px center #0c63b6; + position: relative; +} + +.tab li:nth-of-type(6).cur::after { + position: absolute; + content: ""; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; + bottom: 0px; + left: 46%; +} + +.tab li:nth-of-type(5) { + background: url(../images/tab7.png) no-repeat 40px center; +} + +.tab li:nth-of-type(5).cur { + color: #fff; + text-decoration: none; + background: url(../images/tab7h.png) no-repeat 40px center #0c63b6; + position: relative; +} + +.tab li:nth-of-type(5).cur::after { + position: absolute; + content: ""; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; + bottom: 0px; + left: 46%; +} + +.tab li:nth-of-type(2) { + background: url(../images/tab8.png) no-repeat 40px center; +} + +.tab li:nth-of-type(2).cur { + color: #fff; + text-decoration: none; + background: url(../images/tab8h.png) no-repeat 40px center #0c63b6; + position: relative; +} + +.tab li:nth-of-type(2).cur::after { + position: absolute; + content: ""; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; + bottom: 0px; + left: 46%; +} + +.tt { + display: none; +} + +.tab_content { + margin-top: 82px; +} + +.ad-list li .ad-left { + width: 505px; +} + +.ad-list li span { + font-size: 22px; + color: #222222; + background: url(../images/t1.png) no-repeat left center; + padding-left: 25px; +} + +.ad-list li p { + font-size: 14px; + color: #555555; + line-height: 32px; + padding-left: 25px; + padding-top: 10px; +} + +.ad-list li p a { + background: #fff; + border: 1px solid #dddddd; + color: #555555; + width: 158px; + height: 43px; + display: block; + text-align: center; + line-height: 43px; + margin-top: 26px; + position: relative; + z-index: 999; +} + +.ad-list li p a::after { + position: absolute; + left: 0; + top: 0; + content: ""; + width: 0; + height: 43px; + background: #195dbb; + -webkit-transition: all 0.8s; + -moz-transition: all 0.8s; + -ms-transition: all 0.8s; + -o-transition: all 0.8s; + transition: all 0.8s; + z-index: -1; +} + +.ad-list li p a:hover::after { + width: 100%; +} + +.ad-list li p a:hover { + color: #fff; +} + +.ad-list li img { + width: 506px; + height: 160px; + margin-top: 68px; +} + +.ad-list li .ad-right { + width: 659px; +} + +.ad-list li .ad-right img { + width: 659px; + height: 419px; + margin-top: 0px; +} + + + +.box2 { + background: url(../images/bj2.jpg) no-repeat top center; + height: 886px; + overflow: hidden; +} + +.xu-title { + font-weight: normal; + font-size: 34px; + color: #ffffff; + text-align: center; + height: 86px; + line-height: 43px; + margin-top: 60px; +} + +.xu-title span { + display: block; + width: 44px; + height: 2px; + background: #59a2d7; + margin: 0 auto; + margin-top: 10px; +} + +.xu-title p { + font-size: 14px; + color: #cbe2f5; +} + +.tt1 { + display: none; +} + +.tab_content1 { + margin-top: 135px; +} + +.ad-list1 { + width: 505px; + float: right; +} + +.ad-list1 li { + position: relative +} + +.ad-list1 li .main-img { + position: absolute; + top: -72px; + left: -700px; + width: 696px; + height: 423px; +} + +.ad-list1 li b { + display: block; + font-size: 22px; + color: #333333; + line-height: 30px; + display: block; + float: left; + font-weight: normal; + width: 446px; + height: 30px; + overflow: hidden; +} + +.ad-list1 li span { + font-size: 38px; + color: #0c63b6; + float: left; + line-height: 30px; + padding-right: 10px; + position: relative; + font-weight: bold; +} + +.ad-list1 li span::after { + content: ""; + position: absolute; + width: 42px; + height: 3px; + background: #59a2d7; + left: 0; + top: 54px; +} + +.ad-list1 li p { + margin-top: 58px; + font-size: 14px; + color: #444444; + line-height: 28px; +} + +.ad-list1 li a.img { + display: block; + width: 486px; + height: 166px; + overflow: hidden; +} + +.ad-list1 li a.img img { + width: 486px; + height: 166px; + margin-top: 28px; + cursor: pointer; + transition: all 0.6s; +} + +.ad-list1 li:hover a.img img { + transform: scale(1.2); +} + +.tab1 { + width: 1130px; + margin: 0 auto; + margin-top: 127px; +} + +.tab1 li { + float: left; + width: 33.333%; + padding: 16px 0; +} + +.tab1 li:nth-child(1) { + width: 273px; +} + +.tab1 li:nth-child(2) { + width: 465px; +} + +.tab1 li:nth-child(4) { + width: 273px; +} + +.tab1 li:nth-child(5) { + width: 465px; +} + +.tab1 li b { + display: block; + font-size: 15px; + color: #333333; + line-height: 34px; + display: block; + float: left; + font-weight: normal; +} + +.tab1 li span { + font-size: 16px; + color: #fff; + float: left; + position: relative; + font-weight: bold; + width: 34px; + height: 34px; + border-radius: 50%; + background: #0c63b6; + line-height: 34px; + text-align: center; + margin-right: 10px; +} + +.tab1 li.cur { + cursor: pointer; +} + +.tab1 li.cur span { + background: #d9251c; +} + +.tab1 li.cur b { + color: #d9251c; + font-weight: bold; +} + + + +.about-index { + margin-top: 57px; +} + +.ab-title { + color: #222222; +} + +.ab-title p { + color: #999999; +} + +.about-content { + font-size: 15px; + color: #333333; + padding: 0 160px; + text-align: center; + line-height: 32px; + margin-top: 35px; +} + +.about-more { + width: 174px; + height: 42px; + border: 1px solid #eeeeee; + margin: 0 auto; + margin-top: 42px; +} + +.about-more a { + display: block; + line-height: 42px; + font-size: 15px; + color: #333333; + text-align: center; +} + +.about-more:hover { + background: #0c6fcd; +} + +.about-more:hover a { + color: #fff; +} + +.about-roll { + background: url(../images/bj3.png) no-repeat bottom center #fff; + height: 447px; + margin-top: 60px; +} + +.picScroll-left {} + +.picScroll-left .bd {} + +.picScroll-left .bd ul { + overflow: hidden; + zoom: 1; +} + +.picScroll-left .bd ul li { + margin: 0px 10px; + float: left; + _display: inline; + overflow: hidden; + text-align: center; + position: relative; +} + +.picScroll-left .bd ul li:hover { + border-color: #fff; +} + +.picScroll-left { + position: relative; +} + +.picScroll-left .hd {} + +.picScroll-left .prev { + background: url(../images/left.jpg) no-repeat top center; + height: 38px; + width: 38px; + right: 154px; + top: 45px; + position: absolute; +} + +.picScroll-left .prev:hover { + background: url(../images/lefth.jpg) no-repeat top center; +} + +.picScroll-left .next { + background: url(../images/right.jpg) no-repeat top center; + height: 38px; + width: 38px; + right: 100px; + top: 45px; + position: absolute; +} + +.picScroll-left .next:hover { + background: url(../images/righth.jpg) no-repeat top center; +} + +.picList li .icon02 a.img { + display: block; + overflow: hidden; +} + +.picList li .icon02 a.img img { + width: 968px; + height: 335px; + cursor: pointer; +} + + + +.bj4 { + background: url(../images/bj4.jpg) no-repeat top center; + height: 565px; + overflow: hidden; +} + +.fuwu-index { + padding-top: 88px; +} + +.fu-title { + font-size: 36px; + color: #fff; + font-weight: normal; + text-align: center; +} + +.fu-content { + padding: 0 176px; + text-align: center; + color: #bbd5ed; + font-size: 14px; + line-height: 36px; + margin-top: 40px; +} + +.fuwu-wen { + margin-top: 82px; +} + +.fuwu-list li { + float: left; + text-align: center; + margin: 0 16px; + background: url(../images/t2.png) no-repeat right center; + padding: 0 60px; +} + +.fuwu-list li:last-child { + background: none; +} + +.fuwu-list li h2 { + font-size: 70px; + color: #fff; + font-family: "Arial"; + line-height: 80px; +} + +.fuwu-list li p { + font-size: 15px; + color: #bbd5ed; +} + +.bj5 { + background: url(../images/news.png) no-repeat top center; + height: 1382px; + overflow: hidden; + width: 1920px; + position: relative; + left: 50%; + margin-left: -960px; +} + +.ke-index { + position: relative; + + height: 656px; +} + +.kehu-list { + margin-top: 26px; + height: 550px; + position: absolute; + top: 96px; + left: 0; + right: 0; +} + +.kehu-list li { + position: absolute; +} + +.kehu-list li:nth-of-type(1) { + left: -77px; + top: 148px; +} + +.kehu-list li:nth-of-type(2) { + left: 76px; + top: 300px; +} + +.kehu-list li:nth-of-type(3) { + left: 74px; + top: 0px; +} + +.kehu-list li:nth-of-type(4) { + left: 233px; + top: 150px; +} + +.kehu-list li:nth-of-type(5) { + left: 397px; + top: 303px; +} + +.kehu-list li:nth-of-type(6) { + left: 397px; + top: 0px; +} + +.kehu-list li:nth-of-type(7) { + left: 553px; + top: 151px; +} + +.kehu-list li:nth-of-type(8) { + left: 717px; + top: 300px; +} + +.kehu-list li:nth-of-type(9) { + left: 715px; + top: 0px; +} + +.kehu-list li:nth-of-type(10) { + left: 880px; + top: 150px; +} + +.kehu-list li:nth-of-type(11) { + left: 1036px; + top: 303px; +} + + +.kehu-list li:nth-of-type(12) { + right: -85px; + top: 0px; +} + + + + +.picScroll-left1 {} + +.picScroll-left1 .bd {} + +.picScroll-left1 .bd ul { + overflow: hidden; + zoom: 1; +} + +.picScroll-left1 .bd ul li { + margin: 0px 15px; + float: left; + _display: inline; + overflow: hidden; + position: relative; + padding: 0 22px; + border: 1px solid #f3f7f9; + padding-top: 27px; + box-shadow: 0 0 20px #f8f8f8; + margin: 20px; +} + +.picScroll-left1 .bd ul li:hover { + border-color: #fff; +} + +.picScroll-left1 { + position: relative; +} + +.picScroll-left1 .hd {} + +.news_list1 li { + width: 332px; + position: relative; +} + +.news_list1 li dl { + font-size: 15px; + color: #888888; +} + +.news_list1 li dt { + font-size: 22px; + color: #555555; + font-weight: bold; + margin-bottom: 10px; +} + +.news_list1 li a.more { + position: absolute; + right: 27px; + top: 34px; + width: 100px; + height: 31px; + background: #fff; + color: #777777; + text-align: center; + line-height: 31px; + border: 1px solid #f3f7f9; +} + +.news_list1 li:hover a.more { + position: absolute; + right: 27px; + top: 34px; + background: #0c6fcd; + color: #fff; + text-align: center; + line-height: 31px; +} + +.news_list1 li h2 { + font-size: 15px; + line-height: 57px; + border-top: 1px solid #f3f7f9; +} + +.news_list1 li h2 a { + color: #333; +} + +.news_list1 li h2 a:hover { + color: #0c6fcd; +} + +.news_list1 li .img1 { + width: 322px; + height: 180px; + overflow: hidden; +} + +.news_list1 li .img1 img { + width: 332px; + height: 180px; + cursor: pointer; + transition: all 0.6s; +} + +.news_list1 li:hover .img1 img { + transform: scale(1.2); +} + +.news_list1 li span { + display: block; + font-size: 13px; + color: #666666; + line-height: 26px; + padding: 27px 0; + height: 41px; + overflow: hidden; +} + + +.k-title { + margin-top: 40px; +} + +.picScroll-left2 { + margin-top: 30px; +} + +.picScroll-left2 .bd { + border-right: 1px solid #f3f7f9; + margin: 0 -1px; +} + +.picScroll-left2 .bd ul { + overflow: hidden; + zoom: 1; +} + +.picScroll-left2 .bd ul li { + margin: 0px 0px; + float: left; + _display: inline; + overflow: hidden; + position: relative; + border: 1px solid #f3f7f9; + border-right: none; +} + +.picScroll-left2 .bd ul li:last-child {} + +.picScroll-left2 .bd ul li:hover { + border-color: #fff; +} + +.picScroll-left2 { + position: relative; +} + +.picScroll-left2 .hd {} + +.k-list li img { + width: 239px; + height: 129px; +} + + + + + + + + + + + + + +.menu_cate { + width: 220px; + float: left; +} + +.cate_title { + line-height: 31px; + padding-left: 15px; + font-weight: bold; + font-family: "微软雅黑"; + background: url(../images/nav.png) no-repeat 0% 100%; + font-size: 14px; + color: #000; +} + +.about { + width: 460px; + float: left; + margin-left: 12px; + padding-bottom: 5px; +} + +.about_title { + line-height: 31px; + padding-left: 15px; + font-weight: bold; + font-family: "微软雅黑"; + background: url(../images/nav.png) no-repeat 0% 100%; + font-size: 14px; + color: #000; +} + +.about .content { + padding: 5px; + padding-bottom: 12px; + text-indent: 20px; +} + +.navigation { + float: right; + width: 100px; +} + +.index-title { + line-height: 31px; + padding-left: 15px; + font-weight: bold; + font-family: "微软雅黑"; + background: url(../images/nav.png) no-repeat 0% 100%; + font-size: 14px; + color: #000; +} + +.index-table td { + border: solid #add9c0; + border-width: 0px 1px 1px 0px; + padding: 10px 5px; +} + +.index-table { + border: solid #add9c0; + border-width: 1px 0px 0px 1px; + margin-top: 10px; +} + +/*----- Common css ------*/ +.fl { + float: left; +} + +.fr { + float: right; +} + +.di { + _display: inline; +} + +.fwn { + font-weight: normal; +} + +.dib { + *display: inline; + _zoom: 1; + _display: inline; + _font-size: 0px; +} + +/*首页新闻*/ +.news_company { + width: 280px; + float: right; +} + +.news1_title { + line-height: 31px; + padding-left: 15px; + font-weight: bold; + font-family: "微软雅黑"; + background: url(../images/nav.png) no-repeat 0% 100%; + font-size: 14px; + color: #000; +} + +.news_company .content { + padding: 5px; +} + +/*首页左侧联系我们*/ +.contact { + width: 218px; + float: left; + padding-bottom: 5px; + margin-top: 10px; +} + +.contact_title { + line-height: 31px; + padding-left: 15px; + font-weight: bold; + font-family: "微软雅黑"; + background: url(../images/nav.png) no-repeat 0% 100%; + font-size: 14px; + color: #000; +} + +.contact .content { + padding: 5px; + padding-left: 8px; +} + +/*工程案例*/ +.case { + width: 460px; + float: left; + margin-left: 12px; + padding-bottom: 5px; + margin-top: 10px; +} + +.case_title { + line-height: 31px; + padding-left: 15px; + font-weight: bold; + font-family: "微软雅黑"; + background: url(../images/nav.png) no-repeat 0% 100%; + font-size: 14px; + color: #000; +} + +.case .content { + padding: 5px; + padding-bottom: 12px; + text-indent: 20px; +} + +.news2_company { + margin-top: 10px; +} + +/*产品推荐*/ +.recommend_product { + margin-top: 10px; + width: 692px; + float: left; +} + +.recommend_product .title { + line-height: 31px; + padding-left: 15px; + font-weight: bold; + font-family: "微软雅黑"; + background: url(../images/nav.png) no-repeat 0% 100%; + font-size: 14px; + color: #000; +} + +.recommend_product .content { + padding-top: 15px; + padding-bottom: 14px; +} + +.roll_product li { + padding-bottom: 0px; +} + +/*品牌列表*/ +.brand-list { + margin: 20px 0px; + display: flex; + display: -webkit-flex; + flex-wrap: wrap; +} + +.brand-list li { + margin: 5px 8px; +} + +.brand-list li:hover { + box-shadow: 2px 1px 5px; +} + +.brand-list li img { + width: 150px; + height: 120px; +} + + + + +/*友情链接*/ +.link { + background: #0c63b6; + height: 54px; + line-height: 54px; +} + +.f_link { + width: 1200px; + margin: 0 auto; + color: #fff; + font-size: 16px; + text-transform: uppercase; + font-weight: bold; +} + +.f_link a { + font-weight: normal; + font-size: 14px; +} + +.foot-bg { + background: #222222; + padding: 18px 0; +} + +#footer { + position: relative; + width: 1200px; + margin: 0 auto; + color: #aaaaaa; +} + +#footer a { + color: #aaaaaa; +} + +#footer a:hover { + color: #e87518; + text-decoration: none; +} + +.foot1 { + width: 350px; +} + +.foot-title { + font-weight: normal; + border-bottom: 1px solid #383636; + height: 50px; + font-size: 18px; + color: #ffffff; +} + +.nav_foot { + font-size: 14px; + color: #aaaaaa; +} + +.nav_foot a { + color: #aaaaaa; + line-height: 52px; + width: 33.33%; + display: inline-block; + text-align: center; +} + +.foot2 { + width: 385px; + margin-left: 112px; +} + +.ct { + font-size: 14px; + line-height: 50px; + padding-left: 30px; +} + +.erq { + width: 270px; + margin-right: 66px; + text-align: left; + line-height: 30px; + margin-top: 50px; +} + + + +.copyright { + text-align: center; + line-height: 24px; + border-top: 1px solid #333131; + padding-top: 20px; +} + +/*------------内页-------------------*/ + +.left { + width: 217px; + float: left; + background: #fafafa; + /*padding: 0 19px;*/ +} + +.left .box { + margin-bottom: 10px; +} + +.left .box h3 { + line-height: 48px; + font-size: 18px; + color: #fff; + padding-left: 30px; + font-weight: 400; + position: relative; + background: #0c6fcd; +} + +.left .box h3::after { + content: ""; + position: absolute; + width: 5px; + height: 20px; + top: 16px; + left: 16px; + background: url(/assets/images/n2.png) no-repeat top center; +} + +.left .box .content { + padding: 5px 0px; +} + +.prodescription { + border: 1px solid #e5e5e5; + background: #f9f9f9; + line-height: 24px; + padding: 10px; + margin-bottom: 15px; + text-indent: 20px; +} + +.n_banner { + width: 100%; + height: auto; +} + +.n_banner img { + width: 100%; + height: auto; +} + +.sort_menu h3 { + background-color: #ececec; + line-height: 28px; + padding-left: 15px; + font-weight: bold; +} + +.sort_product { + margin-top: 10px; +} + +.sort_product h3 { + background-color: #ececec; + line-height: 28px; + padding-left: 15px; + font-weight: bold; +} + +.n_contact { + margin-top: 10px; +} + +.n_contact h3 { + background-color: #ececec; + line-height: 28px; + padding-left: 15px; + font-weight: bold; +} + +.n_contact .content { + padding: 5px; + line-height: 24px; +} + +.n_contact .content p { + color: #555555; +} + +.right { + float: right; + padding-bottom: 10px; +} + +.sitemp { + background: url(/assets/images/nav1.png) no-repeat left bottom; +} + +.sitemp h2 { + float: left; + line-height: 18px; + text-align: left; + font-size: 20px; + color: #0c6fcd; + padding-left: 18px; + font-weight: normal; +} + +.sitemp .site { + width: 400px; + float: right; + text-align: right; + line-height: 32px; + color: #222222; +} + +.sitemp .site a { + color: #222222; +} + +.right .content { + padding-top: 15px; + overflow: hidden; + line-height: 24px; +} + +.sort_album { + margin-top: 15px; +} + +.right .content img{ + max-width:100%; height:auto !important; } diff --git a/assets/css/model.css b/assets/css/model.css new file mode 100644 index 0000000..a69b92c --- /dev/null +++ b/assets/css/model.css @@ -0,0 +1,2795 @@ +@font-face { + font-family: 'iconfont'; + /* project id 455609 */ + src: url('//at.alicdn.com/t/font_455609_md6xsqc4pwrk9.eot'); + src: url('//at.alicdn.com/t/font_455609_md6xsqc4pwrk9.eot?#iefix') format('embedded-opentype'), + url('//at.alicdn.com/t/font_455609_md6xsqc4pwrk9.woff') format('woff'), + url('//at.alicdn.com/t/font_455609_md6xsqc4pwrk9.ttf') format('truetype'), + url('//at.alicdn.com/t/font_455609_md6xsqc4pwrk9.svg#iconfont') format('svg'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 13px; + font-style: normal; +} + +.key_tag { + text-decoration: underline; +} + +/*导航栏样式*/ +#menu {} + +.nav {} + +.nav li { + line-height: 53px; + height: 53px; + text-align: center; + width: 86px; + float: left; + position: relative; + z-index: 999; +} + +.nav li a { + display: block; + line-height: 53px; + color: #333333; + height: 53px; + font-size: 16px; +} + +.nav li a:hover { + color: #fff; + text-decoration: none; + background-color: #085daf; +} + +.nav .sec { + height: 0; + color: #fff; + overflow: hidden; + z-index: 9999; + position: absolute; + top: 60px; + left: -9px; + padding-top: 0; +} + +.nav .sec a { + color: #696969; + line-height: 28px; + height: 28px; + font-size: 15px; + border-bottom: 1px solid #cccccc; +} + +.nav .sec a:hover { + text-decoration: none; + background: none; + color: #333; + border-bottom: 1px solid #000; +} + +.navleft { + height: 185px; +} + +.navright { + height: 185px; +} + + +/*首页banner*/ +.topbanner { + position: relative; +} + +.banner { + width: 100%; + height: 100%; +} + +.banner ul.bb { + position: relative; + padding: 0px; + margin: 0px; + z-index: 5; + width: 100%; + height: 100%; +} + +.banner ul.bb li { + position: absolute; + display: none; + width: 100%; + height: 100%; +} + +.banner ul.bb li a { + width: 100%; + display: block; + height: 100%; +} + +.banner ul.bb li a img { + width: 100%; + height: 100%; +} + +.banner .num { + position: absolute; + right: 50%; + bottom: 10px; + z-index: 100; +} + +.banner .num li { + float: left; + width: 10px; + height: 10px; + display: inline-block; + margin-right: 12px; + line-height: 10px; + text-indent: -100px; + overflow: hidden; + border-radius: 10px; + border: 1px solid #fff; +} + +.banner .num li.num_hover { + background-color: #ffffff; +} + +.banner .num li.num_hover a { + color: #fff; +} + +.banner .num li a { + float: left; + display: inline; + text-align: center; + color: #666; + text-decoration: none; + cursor: pointer; + width: 16px; + height: 16px; + line-height: 16px; +} + + + + +/*幻灯片样式2*/ +#focus { + width: 255px; + height: 188px; + overflow: hidden; + position: relative; +} + +#focus ul { + height: 188px; + position: absolute; +} + +#focus ul li { + float: left; + width: 255px; + height: 188px; + overflow: hidden; + position: relative; + background: #000; +} + +#focus ul li a img { + height: 188px; + width: 255px; +} + +#focus ul li div { + position: absolute; + overflow: hidden; +} + +#focus .btnBg { + position: absolute; + width: 255px; + height: 20px; + left: 0; + bottom: 0; + background: #000; +} + +#focus .btn { + position: absolute; + width: 255px; + height: 10px; + padding: 5px 10px; + right: 0; + bottom: 0; + text-align: right; +} + +#focus .btn span { + display: inline-block; + _display: inline; + _zoom: 1; + width: 25px; + height: 10px; + _font-size: 0; + margin-left: 5px; + cursor: pointer; + background: #fff; +} + +#focus .btn span.on { + background: #fff; +} + + + +/*产品分类*/ +.cate { + border: 1px solid #e0e1dc; + padding: 10px; + background-color: #f7f7f7; +} + +.cate li { + line-height: 28px; + border-bottom: 1px dashed #d7d7d7; + line-height: 28px; +} + +.cate li a { + padding-left: 60px; + display: block; + height: 28px; + line-height: 28px; + background: url(../images/ico1.gif) 34px center no-repeat; +} + +.cate li a:hover { + background-color: #ececec; + text-decoration: none; +} + +/*详细介绍分页样式*/ +.total { + border-bottom: 1px dashed #e0e1dc; + padding-bottom: 10px; +} + +.paging_num { + padding: 10px 0px; + overflow: hidden; + text-align: right; +} + +.paging_num a { + width: 25px; + height: 20px; + line-height: 20px; + text-align: center; + display: inline-block; + border: 1px dashed #e0e1dc; + color: #666; + margin-left: 15px; +} + +.paging_num a:hover { + text-decoration: none; + color: #005a98; + border: 1px dashed #005a98; +} + +.paging_num .paging_hover { + text-decoration: none; + color: #005a98; + border: 1px dashed #005a98; +} + +/*新闻列表*/ +.news_list li { + line-height: 27px; + position: relative; +} + +.news_list li a { + line-height: 27px; + color: #666; +} + +.news_list li a:hover { + text-decoration: none; + color: #e87518; +} + +.news_list li span { + color: #999; + z-index: 0; + line-height: 27px; + position: absolute; + right: 0px; + top: 0px; +} + +.news_list li h3 { + font-size: 14px; +} + +.news_list li div { + line-height: 24px; +} + +.news_listn { + margin: -5px; +} + +.news_listn li { + padding: 16px; + border: 1px solid #f4f8fb; + margin: 10px 0; + transition: width 2s; +} + +.news_listn li .n-left { + width: 245px; + height: 142px; +} + +.news_listn li .n-left img { + width: 245px; + height: 142px; + overflow: hidden; +} + +.news_listn li .n-right { + width: 596px; + position: relative; +} + +.news_listn li .n-right a { + font-size: 16px; + color: #222222; + font-weight: bold; +} + +.news_listn li .n-right span { + font-size: 14px; + color: #777777; + display: block; + line-height: 28px; + padding-top: 10px; + height: 58px; + overflow: hidden; +} + +.news_listn li .n-right .date { + font-size: 13px; + color: #aaaaaa; + margin-top: 15px; +} + +.news_listn li .n-right .n-more { + position: absolute; + bottom: 0; + right: 0; + width: 116px; + height: 32px; + border: 1px solid #f4f8fb; +} + +.news_listn li .n-right .n-more a { + font-size: 13px; + color: #777777; + font-weight: normal; + line-height: 32px; + text-align: center; + display: block; +} + +.news_listn li:hover { + box-shadow: 0 0 10px #f7f7f7; + +} + +.news_listn li:hover .n-right .n-more { + background: #0c6fcd; +} + +.news_listn li:hover .n-right .n-more a { + color: #fff; +} + +.news_listn li:hover a { + color: #0c6fcd; +} + + +/*热门关键词*/ +.words { + overflow: hidden; + margin-right: -1.3%; + padding-top: 5px; +} + +.words li { + width: 46%; + float: left; + border: 1px solid #eeeeee; + background: none; + padding-left: 0px; + margin-bottom: 10px; + text-align: center; + border-radius: 5px; +} + +.words li a { + line-height: 35px; + font-size: 13px; +} + +.new1 li { + border-bottom: 1px solid #dddddd; + background: url(../images/n3.png) no-repeat 0% 50%; + padding-left: 13px; + line-height: 35px; +} + +.new1 li a { + color: #555555; +} + +.new1 li:hover { + background: url(../images/n4.png) no-repeat 0% 50%; +} + +.new1 li:hover a { + color: #003366; +} + +.right_word { + margin-left: 5%; +} + +/*案例列表*/ +.case_list li { + float: left; + margin-left: 15px; + margin-right: 15px; + padding-bottom: 15px; + _display: inline; +} + +.case_list li a.img { + padding: 1px; + border: 1px solid #e0e1dc; +} + +.case_list li a.img img { + width: 150px; + height: 120px; +} + +.case_list li h3 { + text-align: center; + padding-top: 5px; +} + +.case_list li h3 a { + font-weight: normal; +} + +.case_list li a.img { + display: block; +} + +.case_list li a.img:hover { + border-color: #e87518; +} + +.case_listn { + margin: 0 -10px; + margin-top: 12px; +} + +.case_listn li { + float: left; + margin-left: 10px; + margin-right: 10px; + _display: inline; + margin-bottom: 30px; +} + +.case_listn li a.img {} + +.case_listn li a.img img { + width: 290px; + height: 156px; +} + +.case_listn li h3 { + border: 1px solid #edf3f7; + border-top: none; + height: 70px; + padding: 0 22px; +} + +.case_listn li h3 a { + font-weight: normal; + font-size: 15px; + color: #333333; + line-height: 40px; +} + +.case_listn li h3 a.more { + display: block; + color: #999999; + font-size: 12px; + line-height: 12px; +} + +.case_listn li a.img { + display: block; +} + +.case_listn li:hover { + box-shadow: 0 0 10px #f2f2f2; +} + +.case_listn li:hover h3 { + border-color: #fff; +} + +.case_listn li:hover h3 a { + color: #0c6fcd; + font-weight: bold; +} + +.case_listn li:hover h3 a.more { + font-weight: normal; + color: #999999; + font-size: 12px; +} + +.case_detail>h1 { + font: 20px/54px "微软雅黑"; + color: #333; +} + + + + +/*Tag列表*/ +.tag_list_product { + margin-top: 10px; +} + +.tag_list_product li { + float: left; + padding-bottom: 25px; + _display: inline; + border-bottom: 1px solid #ccc; + margin-bottom: 20px; + width: 100%; +} + +.tag_list_product li a.img { + padding: 1px; + border: 1px solid #e0e1dc; +} + +.tag_list_product li a.img img { + width: 200px; + height: 160px; +} + +.tag_list_product li h3 { + text-align: left; + padding-top: 5px; +} + +.tag_list_product li h3 a { + color: #333; + font-size: 14px; +} + +.tag_list_product li h3 a:hover { + color: #e87518; + text-decoration: none; + outline: none; +} + +.tag_list_product li a.img { + display: block; +} + +.tag_list_product li a.img:hover { + border-color: #e87518; +} + +.tag_list_product li .tab_intro { + margin-left: 25px; + width: 730px; +} + +.tag_list_product li .tab_intro h1 { + font-weight: normal; + width: 33%; + float: left; + line-height: 27px; +} + +.tag_list_product li .tab_intro h2 { + font-weight: normal; + line-height: 27px; +} + +.tag_list_product li .tab_intro .desp { + margin-top: 5px; + line-height: 22px; + color: #888888; + padding: 5px 5px; +} + +.tag_list_product .inquiry { + line-height: 32px; + border: none; + margin-top: 10px; +} + +.tag_list_product .inquiry a { + background: url("../images/xunjia.gif") center center no-repeat; + display: block; + width: 112px; + height: 32px; + text-indent: -99999px; +} + +.tag_list_product .inquiry a:hover { + background-image: url("../images/xunjia_hover.gif"); +} + +.tag-category { + margin: 10px 0; + color: #333; + display: -webkit-box; + display: -moz-box; +} + +.tag-category h3 { + margin-left: 5px; + margin-right: 10px; + padding: 5px 0; + line-height: 27px; +} + +.tag-category ul { + display: block; + margin: 0; + -webkit-box-flex: 1; + -moz-box-flex: 1; +} + +.tag-category ul li { + display: inline-block; + margin-right: 10px; + padding: 5px 0; + line-height: 16px; +} + +.tag-category li a { + display: inline-block; + color: #333; + padding: 5px 15px; + border: 1px solid #d9d9d9; + border-radius: 5px; +} + +.tag-category li a:hover { + color: #e87518; + text-decoration: none; + outline: none; +} + +.tagdescription { + border: 1px solid #e5e5e5; + line-height: 24px; + padding: 10px; + margin-bottom: 15px; + text-indent: 20px; +} + +.tagdescription font { + color: #005a98; + font-weight: bold; +} + +.tag_recom_product { + margin-top: 10px; +} + +.tag_recom_product li { + float: left; + margin: 0 15px; + position: relative; +} + +.tag_recom_product h3 { + font-weight: normal; + font-size: 16px; + border-bottom: 1px solid #f1f1f1; + line-height: 36px; + text-align: left; + padding-left: 15px; + margin-bottom: 30px; +} + +.tag_recom_product li img { + width: 166px; + height: 133px; +} + +.tag_recom_product li h2 { + background: rgba(0, 0, 0, 0.8); + position: absolute; + left: 0; + top: 0; + width: 100%; + line-height: 133px; + text-align: center; + display: none; + font-weight: normal; + color: #fff; + font-size: 14px; +} + +.tag_recom_product li:hover h2 { + display: block; +} + + + +.tag_list_news li { + line-height: 27px; + position: relative; + padding-left: 10px; +} + +.tag_list_news li a { + line-height: 27px; +} + +.tag_list_news li span { + color: #999; + z-index: 0; + line-height: 27px; +} + +.tag_list_news li h3 { + font-size: 14px; +} + +.tag_list_news li div { + line-height: 24px; +} + +.tag_list_news h2 { + line-height: 36px; + font-size: 14px; + color: #666; + background: #f9f9f9; + border: 1px solid #e5e5e5; + font-weight: normal; + text-indent: 20px; + margin-bottom: 15px; +} + + +.tag_list_job li { + line-height: 27px; + height: 27px; + position: relative; + background: url(../images/list_dot1.gif) 0 50% no-repeat; + padding-left: 10px; +} + +.tag_list_job li span { + position: absolute; + color: #999; + right: 0; + z-index: 0; +} + +.tag_list_job h2 { + line-height: 36px; + font-size: 14px; + color: #666; + background: #f9f9f9; + border: 1px solid #e5e5e5; + font-weight: normal; + text-indent: 20px; + margin-bottom: 15px; +} + +.tag_total { + height: 36px; + line-height: 36px; + text-align: left; + padding-left: 20px; + background-color: #edf1f5; + border: 1px solid #b6c7db; +} + + +.search_list_product { + margin-top: 10px; +} + +.search_list_product li { + float: left; + margin-left: 15px; + margin-right: 15px; + padding-bottom: 15px; + _display: inline; +} + +.search_list_product li a.img { + padding: 1px; + border: 1px solid #e0e1dc; +} + +.search_list_product li a.img img { + width: 150px; + height: 120px; +} + +.search_list_product li h3 { + text-align: center; + padding-top: 5px; +} + +.search_list_product li h3 a { + font-weight: normal; +} + +.search_list_product li a.img { + display: block; +} + +.search_list_product li a.img:hover { + border-color: #e87518; +} + +.search_list_product h2 { + line-height: 36px; + font-size: 14px; + color: #666; + background: #f9f9f9; + border: 1px solid #e5e5e5; + font-weight: normal; + text-indent: 20px; + margin-bottom: 15px; +} + +/*产品里列表*/ + +/*滚动*/ +#demo { + overflow: hidden; + width: 100%; + margin: 0 auto; +} + +#indemo { + float: left; + width: 800% +} + +#demo1 { + float: left; +} + +#demo2 { + float: left; +} + +#m_demo { + overflow: hidden; + width: 100%; + margin: 0 auto; +} + +#m_indemo { + float: left; + width: 800% +} + +#m_demo1 { + float: left; +} + +#m_demo2 { + float: left; +} + +/*品牌列表*/ +.brand { + background: #fff; + border: 1px solid #d7d7d7; +} + +.brand .screeBox { + padding: 0; + line-height: 38px; +} + +.brand .screeBox strong { + width: 110px; + background: #fafafa; + color: #333; + text-align: center; + text-indent: 0; + display: block; + float: left; +} + +.brand .screeBox a { + padding: 0 10px; + margin: 0 10px; + color: #005aa0; +} + +.brand .screeBox a.on { + padding: 5px 10px; + background: #d72426; + color: #fff; +} + +.h20 { + height: 20px; +} + +/*产品列表*/ +.product_list li { + float: left; + margin-left: 15px; + margin-right: 15px; + padding-bottom: 15px; + _display: inline; +} + +.product_list li a.img { + padding: 1px; + border: 1px solid #e0e1dc; +} + +.product_list li a.img img { + width: 150px; + height: 120px; +} + +.product_list li h3 { + text-align: center; + padding-top: 5px; +} + +.product_list li h3 a { + font-weight: normal; +} + +.product_list li a.img { + display: block; +} + +.product_list li a.img:hover { + border-color: #e87518; +} + +.roll_product { + float: left; +} + +.product_listn { + margin: 0 -15px; +} + +.product_listn li { + float: left; + margin-left: 15px; + margin-right: 15px; + _display: inline; + border: 1px solid #e0e1dc; + margin-bottom: 30px; +} + +.product_listn li a.img { + padding: 9px; +} + +.product_listn li a.img img { + width: 421px; + height: 300px; +} + +.product_listn li h3 { + font-size: 15px; + color: #333333; + padding: 0 10px; + position: relative; +} + +.product_listn li h3 a { + font-weight: normal; + line-height: 48px; +} + +.product_listn li h3 a.more { + position: absolute; + right: 10px; + top: 0; + line-height: 48px; + font-size: 12px; + color: #bbbbbb; +} + +.product_listn li h3 span { + display: block; + font-weight: normal; + font-size: 13px; + color: #333333; + height: 40px; + overflow: hidden; +} + +.product_listn li a.img { + display: block; +} + +.product_listn li:hover h3 a { + color: #0c6fcd; +} + +.product_listn li:hover h3 a.more { + color: #bbbbbb; +} + + + + + + +.sort_a { + overflow: hidden; +} + +.sort_a .layer1 { + padding: 15px 0px; + border-bottom: 1px dashed #a7b8d4; + position: relative; + height: 133px; + z-index: 1; +} + +.sort_a .layer1 .img { + float: left; + padding: 5px; + border: 1px solid #dddddd; +} + +.sort_a .layer1 .img img { + width: 150px; + height: 120px; +} + +.sort_a .layer1 .img_right { + width: 560px; + float: right; +} + +.sort_a .layer1 .img_right h3 { + font: bold 14px/36px "微软雅黑"; +} + +.sort_a .layer1 .img_right span { + line-height: 25px; + display: block; +} + +.sort_a .layer1 .pro_more { + position: absolute; + right: 0px; + bottom: 15px; + width: 110px; + padding-left: 10px; + height: 28px; + line-height: 28px; + background: #666666; + color: #fff; + font: bold 24px/24px "微软雅黑"; +} + +.sort_a .layer1 .pro_more span { + float: left; +} + +.sort_a .layer1 .pro_more a { + font: normal 12px/28px "宋体"; + color: #fff; + padding-right: 15px; + display: inline-block; +} + +.sort_a .layer1 .pro_more a:hover { + text-decoration: none; + color: #faf104; +} + +.sort_a .abb_product { + padding-top: 15px; + border: 1px dashed #a7b8d4; + border-top: none; +} + + +.productcates { + padding-top: 10px; +} + +.catemore { + color: #0080d9; + margin-top: 6px; + overflow: hidden; + position: relative; +} + +.catemore h2 { + width: 360px; + float: left; + font: bold 15px/36px "微软雅黑"; +} + +.catemore a { + float: right; + font: normal 14px/36px "微软雅黑"; + color: #444444; + padding-right: 28px; +} + +.catemore a:hover { + text-decoration: none; + color: #0080d9; +} + + +/*地图样式*/ +#allmap { + width: 80%; + height: 500px; + float: right; + margin-top: 20px; + margin-bottom: 10px; + margin: 0 auto; +} + +.maplist { + width: 19.9%; + height: 500px; + overflow-y: auto; + float: left; + border: 1px solid #ccc; + border-right: none; +} + +.maplist ul { + height: 498px; + margin: 0px; +} + +.maplist ul li { + width: 80%; + background: url(../images/ditulogo.png) no-repeat 18px 25px; + padding-left: 40px; + line-height: 26px; + font-family: "微软雅黑"; + height: auto; + padding-top: 20px; + padding-bottom: 20px; + border-bottom: 1px dashed #ddd; + cursor: pointer; +} + +.maplist ul li h2 { + font-size: 15px; + margin: 0px; + padding: 0px; +} + +.maplist ul li span { + font-size: 12px; + color: #666; +} + +.maplist ul li img { + width: 100px; + height: 70px; + display: block; + margin-top: 5px; +} + +.province { + font: normal 14px/32px "微软雅黑"; + padding: 0px 10px; +} + +#search_form { + margin: 15px 0px; + padding-left: 20px; +} + +#search_form select { + width: 180px; + border: 1px solid #d9d9d9; + line-height: 32px; + height: 32px; +} + +.button_s { + border: none; + background: #459afa; + line-height: 30px; + color: #fff; + text-align: center; + width: 80px; + margin-left: 15px; + border-radius: 3px; + transition: all 0.3s ease 0s; +} + +.button_s:hover { + background: #fb9108; +} + +/*下载列表*/ + +.down_list li { + line-height: 27px; + height: 27px; + position: relative; + background: url(../images/list_dot1.gif) 0 50% no-repeat; + padding-left: 10px; +} + + +/*招聘列表*/ + +.job_list li { + line-height: 27px; + height: 27px; + position: relative; + background: url(../images/list_dot1.gif) 0 50% no-repeat; + padding-left: 10px; +} + +.job_list li span { + position: absolute; + color: #999; + right: 0; + z-index: 0; +} + +/*招聘列表*/ +.download_list li { + line-height: 27px; + height: 27px; + position: relative; + background: url(../images/list_dot1.gif) 0 50% no-repeat; + padding-left: 10px; +} + +.download_list li span { + position: absolute; + color: #999; + right: 0; + z-index: 0; +} + + +/*详细页面公共样式*/ +h3.title_bar { + margin-left: 40px; + width: 420px; + float: left; +} + +.share { + padding-left: 5px; + padding-bottom: 8px; + float: left; + width: 240px; + height: 26px; +} + +.info_title { + border-bottom: 1px solid #e1e4e6; +} + +.case_title { + border-bottom: 1px solid #e1e4e6; +} + +/*产品详细*/ +.product_detail { + padding: 5px; +} + +.product_detail h1.title { + line-height: 30px; + font-size: 18px; + font-family: "Microsoft YaHei"; + color: #444; + font-weight: 600; +} + +.overview { + background-color: #f5f5f5; + padding: 10px; +} + +.product_detail .img { + width: 383px; + min-height: 274px; + float: left; + padding: 2px; + border: 1px solid #e0e1dc; +} + +.product_detail .small { + width: 377px; + height: 268px; +} + +.jqzoom { + text-decoration: none; + float: left; +} + +.product_detail .list { + width: 488px; + float: left; + margin-left: 24px; + display: block; + padding-top: 8px; +} + +.list_p li { + height: 26px; + font-size: 13px; + padding-bottom: 5px; + padding-top: 5px; + font-family: "Microsoft YaHei"; + color: #444; +} + +.list_p li h2 { + font-size: 13px; + font-weight: normal; + font-family: "Microsoft YaHei"; +} + +.product_detail .inquiry { + line-height: 32px; + border: none; + margin-top: 6px; +} + +.product_detail .inquiry a { + width: 158px; + height: 38px; + background-color: #0c6fcd; + text-align: center; + font: 16px/38px "微软雅黑"; + color: #fff; + display: block; +} + +.buy { + border: none !important; +} + +.buy a { + background: #0057a8; + display: block; + width: 112px; + height: 32px; + float: left; + color: #fff; + text-align: center; + line-height: 32px; + border-radius: 5px; + margin-right: 10px; +} + +/*.buy a:hover{background: #e87518}*/ +.buy a.nobuy-product { + background: #666 +} + +/*.product_detail .inquiry a:hover{background-image:url("../images/xunjia_hover.gif");}*/ +.list_p li h2 a { + font-size: 13px; + font-family: "Microsoft YaHei"; + color: #444; +} + +.p_detail span.title { + line-height: 28px; + height: 28px; + text-align: left; + margin-top: 10px; + display: block; + padding-left: 10px; + font-size: 12px; +} + +.product-tab { + border-bottom: 1px solid #ddd; + margin-top: 15px; +} + +.product-tab li { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: block; + width: 100px; + /*text-align: center;*/ + line-height: 40px; + font-size: 14px; + color: #000; + cursor: pointer; + margin-left: -1px; + /*border-top: 1px solid #ddd;*/ + /*border-left: 1px solid #ddd;*/ + /*border-right: 1px solid #ddd;*/ + z-index: 1; + margin-bottom: -1px; + float: left; +} + +.product-tab li.cur { + /*border-top: 2px solid #3480ce;*/ + /*border-bottom: 1px solid #FFF;*/ + /*color: #3480ce;*/ + /*border-left: 1px solid #ddd;*/ + /*border-right: 1px solid #ddd;*/ + z-index: 3; +} + +.p_detail span.title strong { + padding-right: 20px; + cursor: pointer; +} + +.p_detail p.dd { + padding-top: 5px; + padding-bottom: 5px; +} + +h3.tag { + line-height: 32px; + border-top: 1px dashed #e0e1dc; + margin-top: 10px; + color: #999; + font-weight: normal; +} + +h3.tag a { + color: #005a98; +} + +h3.tag a:hover { + color: #e87518; +} + +.page { + line-height: 26px; + border-top: 1px dashed #e0e1dc; + margin-top: 6px; + padding-top: 5px; + font-size: 12px; +} + +.page a { + color: #005a98; +} + +.page a:hover { + color: #e87518; +} + +.page span { + color: #005a98; +} + +.download-list { + padding: 10px; + overflow: hidden; + line-height: 20px; +} + +.download-list li { + min-height: 40px; + position: relative; + margin-top: 10px; + padding-bottom: 10px; + border-bottom: 1px solid #f0f0f0; + padding-left: 40px; +} + +.download-list li .iconfont { + font-size: 30px; + position: absolute; + left: 0; + top: 15px; +} + +/*产品评论*/ +.product-comment-list { + position: relative; + overflow: hidden; +} + +#commentList li { + padding: 10px 10px 20px; + margin-bottom: 15px; + border-bottom: 1px solid #ddd; + overflow: hidden; +} + +.user-column { + width: 100px; + float: left; +} + +.user-column img { + height: 50px; + max-width: 50px; + border-radius: 50%; +} + +.user-name { + color: #333; + padding-top: 5px; + display: block; +} + +.comment-content { + margin-left: 120px; + overflow: hidden; + position: relative; +} + +.comment-stars i { + font-size: 16px; + color: #ff0000; + display: none; +} + +.comment-stars i.shows { + display: inline-block; +} + +.comment-stars span { + position: absolute; + right: 0; + top: 5px; + color: #999; +} + +.comment-text { + padding: 5px 0; + line-height: 22px; +} + +.comment-recovery { + margin-top: 10px; + padding-top: 10px; + border-top: 1px dashed #ddd; + line-height: 22px; + color: #888; +} + +.comment-recovery span { + color: #f90; +} + +.no-content-icon { + text-align: center; + line-height: 50px; + padding-top: 40px; + color: #999; +} + +.no-content-icon .icon { + font-size: 60px; +} + +/*新闻详细*/ +.news_detail h1.title { + text-align: center; + font-family: "Microsoft YaHei"; + font-size: 18px; + margin-bottom: 5px; + padding-bottom: 10px; +} + +.news_detail h3.title_bar { + line-height: 26px; + text-align: center; + font-weight: normal; + color: #808080; + float: left; + height: 26px; + overflow: hidden; +} + +.news_detail h3.title_bar span { + padding-right: 10px; +} + +/*招聘详细*/ +.job_detail h1.title { + text-align: center; + font-family: "Microsoft YaHei"; + font-size: 18px; + border-bottom: 1px solid #e0e1dc; + margin-bottom: 5px; + padding-bottom: 10px; +} + +.job_detail h3.title_bar { + line-height: 26px; + text-align: center; + font-weight: normal; + color: #808080; +} + +.job_detail h3.title_bar span { + padding-right: 10px; +} + +.job_detail .content h4 { + background-color: #f1f1f1; + height: 26px; + line-height: 26px; + text-align: left; + padding-left: 15px; +} + +.job_detail .content div.text { + padding-top: 10px; + padding-left: 22px; + padding-right: 8px; +} + +/*下载详细*/ +.down_info { + padding: 10px; + margin-top: 15px; +} + +.down_info table { + width: 100%; +} + +.down_info table thead { + line-height: 26px; + background-color: #f2f2f2; +} + +.down_info table th { + border: 1px solid #b6d5f1; +} + +.down_info table td { + padding: 3px; + padding-left: 10px; + padding-right: 5px; + border: 1px solid #b6d5f1; + text-align: center; + line-height: 28px; + height: 28px; +} + +#download { + text-decoration: underline; +} + +#down_detail .title { + line-height: 26px; + text-align: left; + padding-left: 15px; + font-size: 14px; + height: 26px; + background-color: #ececec; +} + +#down_detail .text { + padding: 10px; +} + + +/*内页左侧分类通用样式*/ +.sort {} + +.sort li .about_b { + position: absolute; + left: 210px; + top: 0px; + width: 210px; + padding: 10px 20px; + background: #f5f6f6; + border-bottom: 2px solid #3a78c1; + z-index: 99; +} + +.sort li .layer2 { + position: absolute; + left: 210px; + top: 0px; + width: 210px; + padding: 10px 20px; + background: #f5f6f6; + border-bottom: 2px solid #3a78c1; + z-index: 99; +} + +.sort li .layer2 li { + overflow: hidden; +} + +.sort li .layer2 li a { + font-weight: bold; + background: url(../images/ico1.gif) no-repeat 0% 50%; +} + +.sort li .layer2 li a:hover { + text-decoration: none; + color: #3a78c1; +} + +.sort li .layer2 li .layer3 li { + margin: 6px 0px; + line-height: 24px; + padding-left: 10px; +} + +.sort li .layer2 li .layer3 li a { + font: normal 12px/24px "微软雅黑"; + background: none; +} + +.sort li .layer2 li .layer3 li .layer4 li { + margin: 6px 0px; + line-height: 24px; + padding-left: 15px; +} + +.sort li .layer2 li .layer3 li .layer4 li a { + font: normal 12px/24px "微软雅黑"; + background: none; +} + +.sort li { + position: relative; + z-index: 99; + margin: 16px 0; +} + +.sort li a { + display: block; + padding-left: 34px; + color: #0c6fcd; + font-size: 15px; + /*background: url(/assets/images/sort.png) no-repeat top center;*/ + line-height: 40px; + font-weight: bold; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.sort li a:hover { + color: #0c6fcd; + text-decoration: none; + background: url(/assets/images/sorth.png) no-repeat top center; +} + +.album_sort li { + float: left; + text-align: center; + padding: 6px; + background: #fff; + box-shadow: 0 1px 4px rgba(0, 0, 0, .15); + margin: 0 8px; + margin-bottom: 15px; +} + +.album_sort li a { + color: #666; + display: block; + line-height: 36px; + font-family: "微软雅黑"; +} + +.album_sort li h3 { + text-align: left; + font-weight: normal; +} + +.album_sort li img { + width: 150px; + height: 120px; +} + +.album_sort li a:hover { + color: #3a78c1; + text-decoration: none; +} + +.album_list { + margin: 0 -14px; + margin-top: 12px; +} + +.album_list li { + float: left; + margin: 0 14px; + margin-bottom: 20px; +} + +.album_list li h3 { + text-align: center; + font-size: 14px; + line-height: 30px; +} + +.album_list li img { + width: 442px; +} + +.album_list li h3 a { + display: block; + color: #444444; + font-weight: normal; +} + +.album_list li h3 a:hover { + color: #0c6fcd; +} + + +/*内页留言*/ +.message { + padding-left: 30px; + padding-top: 10px; + z-index: 100; + position: relative; +} + +.message input { + vertical-align: middle; +} + +.message #name { + display: block; + height: 26px; + line-height: 26px; + padding: 0; + padding-left: 6px; + border: 1px solid #dedede; + width: 200px; +} + +.message #ptitle { + display: block; + height: 26px; + line-height: 26px; + padding: 0; + padding-left: 6px; + border: 1px solid #dedede; + width: 200px; +} + +.message #contact { + display: block; + height: 26px; + line-height: 26px; + padding: 0; + padding-left: 6px; + border: 1px solid #dedede; + width: 200px; +} + +.message #email { + display: block; + height: 26px; + line-height: 26px; + padding: 0; + padding-left: 6px; + border: 1px solid #dedede; + width: 200px; +} + +.message #address { + display: block; + height: 26px; + line-height: 26px; + padding: 0; + padding-left: 6px; + border: 1px solid #dedede; + width: 200px; +} + +.message #content { + display: block; + width: 460px; + height: 120px; + padding: 6px; + font-size: 12px; + border: 1px solid #dedede; + margin-top: 6px; +} + +.message .msgbtn { + background: #fe693e; + cursor: pointer; + width: 90px; + height: 30px; + line-height: 30px; + text-align: center; + border: none; + color: #fff; + font-size: 14px; + border-radius: 3px; + margin-top: 15px; + font-family: "Microsoft YaHei"; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +#code { + padding-top: 10px; + line-height: 26px; +} + +#checkcode { + height: 32px; + line-height: 32px; + width: 120px; + border: 1px solid #dedede; +} + +#message_main tr { + position: relative; +} + +#message_main tr th { + font-weight: normal; + text-align: right; + height: 42px; + line-height: 42px; + color: #666; +} + +.m_label { + position: absolute; + width: 160px; + text-align: left; + line-height: 26px; + padding-left: 8px; + color: #ccc; + z-index: 1; + cursor: text; +} + +.c_label { + line-height: 18px; + padding-top: 12px; +} + +/*首页留言表单*/ +.index_message { + position: relative; +} + +.name_input { + border: 1px solid #cccccc; + margin-top: 5px; + background: #fff; + height: 22px; + width: 204px; +} + +.input_left { + float: left; + width: 40px; + text-align: center; + background: url(../images/newadd/title_left.jpg) left top repeat-x; + height: 22px; + line-height: 22px +} + +.input_right { + position: relative; + float: right; +} + +.input_right input { + height: 22px; + line-height: 22px; +} + +.input_right .m_label { + position: absolute; + width: 100px; + text-align: left; + line-height: 22px; + padding-left: 6px; + color: #ccc; + z-index: 1; + cursor: text; +} + + +#m_div { + width: 222px; + position: fixed; + right: 2px; + bottom: 0px; + padding-bottom: 1px; + z-index: 99999; + background: none; +} + +.d_label { + line-height: 18px; + padding-top: 8px; + width: 160px; +} + +.w_message { + border: 1px solid #4a9cf9; + padding: 7px; + padding-top: 3px; + height: 238px; + background: #fff; + padding-bottom: 27px; + background: url(../images/newadd/message_bg.jpg) left top no-repeat; + background-size: 100% 100%; + display: none; +} + +.w_message #name { + width: 156px; + height: 22px; + line-height: 22px; + border: none !important; +} + +.w_message #contact { + width: 156px; + height: 20px; + line-height: 20px; + border: none !important; +} + +.w_message #email { + width: 156px; + height: 20px; + line-height: 20px; + border: none !important; +} + +.w_message #address { + width: 156px; + height: 20px; + line-height: 20px; + border: none !important; +} + +.w_message #content { + width: 192px; + height: 65px; + resize: none; + overflow-y: auto; + overflow-x: hidden; +} + +.w_message #checkcode { + width: 99px; + height: 22px; + line-height: 22px; + border: 1px solid #ccc; + background-color: #fff; +} + + +#message_main { + display: table-cell; +} + +.w_message #message_main tr { + display: block; + width: 100%; + overflow: hidden; + line-height: 28px; +} + +.w_message #message_main tr th { + height: 28px; + line-height: 28px; + width: 37px; + text-align: center; + vertical-align: middle; + overflow: hidden; +} + +.w_message #code { + padding-top: 0px; + margin-top: 5px; +} + +.w_title { + background: none; + color: #fff; + ; + position: relative; + cursor: pointer; + height: 33px; + width: 222px; + overflow: hidden; +} + +.w_message #message_main .m_input { + border: 1px solid #ccc; + background-color: #fff; +} + +.w_message .msgbtn { + width: 93px; + height: 29px; + line-height: 20px; + background: url(../images/newadd/submit.png) 50% 50% no-repeat; + margin-top: 3px; + border: none; + font-family: "宋体", arial; + font-size: 12px; + font-family: "微软雅黑"; + color: #fff; +} + +.w_message .msgbtn_hover { + background: #3c96fc; + color: #fff; + border: 1px solid #3c96fc; +} + + +.m_open { + background: url(../images/newadd/messbtn1.png) left top no-repeat; + position: absolute; + right: 0px; + top: 0px; + cursor: pointer; + overflow: hidden; + width: 19px; + height: 20px; + right: 12px; + top: 8px; + cursor: pointer; +} + +.m_close { + background: url(../images/newadd/messbtn.png) left top no-repeat; +} + +.w_message .m_under { + position: absolute; + width: 227px; + left: 0; + bottom: 1px; + text-align: center; +} + +.w_message .support { + color: #000; + width: 100px; + position: absolute; + bottom: 1px; + right: 8px; + font-size: 12px; +} + +#m_top { + height: 1px; + font-size: 0px; + line-height: 1px; + margin: 0 2px; + background: #4a9cf9; +} + +#m_mid { + height: 1px; + font-size: 0px; + line-height: 1px; + margin: 0 1px; + background: #4a9cf9; +} + +#m_bot { + background: #4a9cf9; + height: 31px; + line-height: 31px; + padding-left: 9px; + font-family: "微软雅黑"; + font-size: 13px; +} + + +/*分页样式1*/ +.pageController { + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + color: #505050; + margin: 0 auto; + border-top: 1px solid #E2E3E4; + margin-top: 16px; + line-height: 24px; +} + +.pageController a { + background-color: #FFF; + vertical-align: middle; + border: #efefef 1px solid; + color: #505050; + padding: 5px 8px; + margin-right: 3px; + margin-left: 3px; + border-radius: 3px; +} + +.pageController a:hover { + background-color: #efefef; + color: #438ece; + text-decoration: none; + border: #efefef 1px solid; +} + +.pageController .currPage { + background-color: #efefef; + color: #ff0000; + border: #efefef 1px solid; +} + +.pageController .t1 { + float: left; + margin-right: 5px; + height: 24px; + line-height: 22px; + white-space: nowrap; +} + +.pageController .t2 { + float: right; + vertical-align: middle; + line-height: 24px; +} + +.pageController .t2 #current { + line-height: 24px; + background-color: #035D67; + vertical-align: middle; + border: 1px solid #035D67; + color: #fff; + padding: 5px 8px; + margin-right: 3px; + margin-left: 3px; + border-radius: 3px; +} + +.pageController .t1 span { + padding-left: 4px; + padding-right: 4px; +} + +.pageController select { + height: 24px; + vertical-align: middle; + text-align: center; + line-height: 24px; +} + +.pageController select option { + vertical-align: middle; +} + +/*相关产品和新闻*/ +.relate_list { + margin-top: 10px; +} + +.relate h4 { + line-height: 30px; + border-bottom: 1px solid #0c6fcd; + padding-left: 5px; +} + +#relate_p .img img { + width: 160px; + height: 114px; +} + +#relate_p li { + margin-left: 9px; + margin-right: 9px; + _display: inline; +} + +#relate_n li { + width: 48%; + float: left; +} + +.relate ul { + float: none; +} + +/*博客列表*/ +.blog_list li { + border-bottom: 1px solid #ccc; + padding-bottom: 20px; +} + +.blog_list li h2 { + line-height: 42px; + height: 42px; + padding-left: 10px; + padding-left: 20px; + border-bottom: 1px dashed #ccc; +} + +.blog_list li h2 a { + font-size: 14px; + font-family: "Microsoft YaHei"; + font-weight: bold; + color: #4C4C4C; + line-height: 42px; + color: #204e7d; +} + +.blog_list li .summary { + color: #878787; + line-height: 28px; + height: 28px; + text-indent: 20px; + padding-top: 5px; + padding-bottom: 5px; +} + +.blog_list li .under { + padding-left: 20px; + padding-top: 5px; + height: 24px; + line-height: 24px; + padding-bottom: 5px; + color: #2970a6; +} + +.blog_list li .under a { + color: #2970a6; +} + +/*网站地图*/ +h3.map_title { + line-height: 30px; + line-height: 30px; + background-color: #f5f8fa; + border: 1px solid #d6dbe1; + text-indent: 20px; + color: #666; + border-bottom: 2px solid #ccc; +} + +.map_list { + line-height: 30px; + padding: 0 5px; + margin-top: 8px; + margin-bottom: 8px; +} + +.map_list a { + padding: 4px; + white-space: nowrap; +} + +.map_list a:hover { + text-decoration: none; + color: #3b639f; + padding: 4px; +} + +.map_list .layer1 { + margin-bottom: 10px; +} + +.map_list .layer2 a { + color: #999; +} + +.map_list .layer2 a:hover { + text-decoration: none; + color: #3b639f; +} + +.map_list h3 { + border-bottom: 1px dashed #cccccc; + margin-bottom: 10px; + line-height: 36px; +} + +.map_list h3 a { + font-weight: normal; +} + +/*热推产品*/ +.content-getkey { + padding: 15px 10px; +} + +.getkey_list li { + float: left; + margin-left: 20px; + margin-right: 20px; + padding-bottom: 15px; + _display: inline; +} + +.getkey_list li a.img { + padding: 1px; + border: 1px solid #e0e1dc; +} + +.getkey_list li a.img img { + width: 150px; + height: 120px; +} + +.getkey_list li h3 { + text-align: center; + padding-top: 5px; +} + +.getkey_list li h3 a { + font-weight: normal; +} + +.getkey_list li a.img { + display: block; +} + +.getkey_list li a.img:hover { + border-color: #e87518; +} + +.content-getkey .content { + line-height: 24px; + overflow: hidden; + padding: 15px 10px 10px; +} + +.getkey_detail .content { + line-height: 24px; + overflow: hidden; + padding: 15px 10px 10px; +} + +/*简历提交*/ +.job-title { + padding-left: 10px; + line-height: 40px; + font-size: 16px; + margin-bottom: 15px; +} + +.job-title .job-send { + background: #476199; + padding: 8px 15px; + border-radius: 4px; + color: #fff; +} + +.send-title { + border-bottom: 1px solid #ddd; + margin-bottom: 15px; + padding-bottom: 10px; + font-size: 16px; + color: #060; +} + +.message-job { + padding-left: 10px; + padding-bottom: 10px; +} + +.message-job li { + line-height: 30px; + margin-bottom: 10px; +} + +.message-job li label { + font-size: 14px; + width: 70px; + float: left; + text-align: right; +} + +.message-job li span { + color: red; +} + +.message-job li input[type='radio'] { + margin: 0 10px; +} + +.message-job li input.jobinput { + border: 1px solid #ccc; + width: 200px; + margin: 0 5px; + line-height: 24px; + height: 24px; + padding: 0 5px; +} + +.message-job li select { + line-height: 24px; + height: 24px; + padding: 0 5px; +} + +.message-job li #experience { + width: 400px; + height: 80px; +} + +.message-job li input#file { + margin-top: 18px; + margin-right: 20px; +} + +.message-job input.jobbtn { + width: 80px; + border: 1px solid #f1f1f1; + background: #476199; + color: #fff; + border-radius: 4px; + font-family: "Microsoft Yahei"; + line-height: 30px; + height: 30px; + margin: 0 8px 0; + cursor: pointer; +} + +.message-job input.jobbtn:hover { + background: #476199; +} + +.message-job li.last { + border-bottom: 1px solid #ddd; + margin-bottom: 8px; + padding: 5px 0; + font-size: 14px; + color: #060; +} + +.resume-prompt { + line-height: 36px; + color: #999; +} + +.message-job span.last { + color: red; + display: inline-block; + line-height: 36px; +} + + + +/*左侧工具条*/ +#toolbar { + position: fixed; + z-index: 9999; + right: 17px; + bottom: 10%; +} + +#toolbar li { + margin-bottom: 3px; + font-size: 0; + width: 57px; + height: 57px; + right: 0; + position: relative; +} + +#toolbar li a { + display: block; + position: absolute; + z-index: 9; + right: 0; + top: 0; + width: 57px; + height: 57px; + overflow: hidden; + background: #292e39; + -webkit-transition: all .5s ease; + transition: all .5s ease; + white-space: nowrap; + font-size: 0; +} + +#toolbar li .icon-font { + display: inline-block; + vertical-align: middle; + width: 57px; + height: 57px; + background-color: #d9d9d9; +} + +#toolbar li .icon-qq:after { + background-position: 0 -150px; +} + +#toolbar li .icon-phone:after { + background-position: 0 -90px; +} + +#toolbar li .icon-ewm:after { + background-position: 0 -30px; +} + +#toolbar li .icon-message:after { + background-position: 0 -120px; +} + +#toolbar li .icon-top:after { + background-position: 0 -60px; +} + +#toolbar li .icon-wangwang:after { + background-position: 0 0; +} + +#toolbar li .wz { + display: inline-block; + line-height: 57px; + font-size: 14px; + color: #fff; + vertical-align: middle; + padding-left: 10px; +} + +#toolbar li.ewm .ewm-box { + position: absolute; + z-index: 1; + padding: 5px; + background: #292e39; + width: 110px; + right: 120%; + bottom: 0; + opacity: 0; + visibility: hidden; + -webkit-transform: translateX(100%); + transform: translateX(100%); + -webkit-transition: all .7s; + transition: all .7s; +} + +#toolbar li.ewm .ewm-box p { + margin-bottom: 0; +} + +#toolbar li.ewm .ewm-box img { + max-width: 100%; +} + +#toolbar li.ewm .ewm-box:after { + content: ''; + position: absolute; + right: -5px; + bottom: 20px; + width: 0; + height: 0; + line-height: 0; + font-size: 0; + overflow: hidden; + border-width: 5px; + cursor: pointer; + border-style: dashed dashed dashed solid; + border-color: transparent transparent transparent #292e39; + border-right: none; +} + +#toolbar li.ewm:hover .icon { + background-position: -57px -180px; +} + +#toolbar li.ewm:hover .ewm-box { + opacity: 1; + visibility: visible; + -webkit-transform: translateY(0); + transform: translateY(0); +} + +#toolbar li.backtop { + cursor: pointer; +} + +#toolbar li.backtop .iconfont { + color: #fff; + background-color: #292e39; +} + +#toolbar li:hover a { + width: 200px; +} + +#toolbar li:hover .icon-font { + background-color: #292e39; +} + +#toolbar li:hover .icon-qq:after { + background-position: -30px -150px; +} + +#toolbar li:hover .icon-phone:after { + background-position: -30px -90px; +} + +#toolbar li:hover .icon-ewm:after { + background-position: -30px -30px; +} + +#toolbar li:hover .icon-message:after { + background-position: -30px -120px; +} + +#toolbar li:hover .icon-wangwang:after { + background-position: -30px 0; +} + +#toolbar li:hover .icon-top:after { + background-position: -30px -60px; +} + +.icon-font { + position: relative; +} + +.icon-font:after { + content: ""; + width: 30px; + height: 30px; + background-image: url(/assets/images/icon_spirit.png); + background-repeat: no-repeat; + position: absolute; + left: calc(50% - 15px); + top: calc(50% - 15px); +} diff --git a/assets/css/user.css b/assets/css/user.css new file mode 100644 index 0000000..8765ad6 --- /dev/null +++ b/assets/css/user.css @@ -0,0 +1,2 @@ +@CHARSET "UTF-8"; + diff --git a/assets/images/1655690976384393.jpg b/assets/images/1655690976384393.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c04855008a9958732c59cfb42f4f4922a34b543 GIT binary patch literal 271349 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%0DU9UW(J@?f4Qg*KQt6Mfq@&E4 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%0DV$>l<%Enp?SI+LJ9gQ- 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

8Sn#FJZ)wQ}2M| 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­hd*%v1p< z9+BE@hspXmH?`Tl+*@F-_ja&Tx2Zz0(N9^!?i0;xs)TV;7E|cIO6)s>+v;7-jbhc* z3Ty5AM0+j#ytP+zog`!hRo!pGrG*{;0JZFDw|#J_^)%f=ROA=FD`j?72TDm)Eb2{+ zs!ly2>km@uyVBb&+neZG)hedF#b%3dTEv&KkXe!JXJHKxTw}6&E3ee`C>4Ogg~OD{cY!%m(=BdC&dq=G;ZOwMCNLIyM-5^z@s3e_4c>o3e8NzxyyHP>z zJ)?Ny_S=SP-*Stj-cU%^h|O9d9XjrJa1DTI*`rFL+M1`9e8Kjd!S|dxy5_bS_6a=w z{5|;Xn=O{$ZT|q4*l(@WO_tv5q}yi@$3iVAglSq-{?n3sN2?2swcE|IhN`C}RhFS) z(Bx`Va_q{J<&q@hyHmN`+iTE@`MF{gkWY+96C6fI5l~K|>KVZ;JVJ>0ND(81&UpTu zQRIf20)E3RgG1sWC<$jb6HY28Ju=&JD;f!YTC2d7jh{1 zg0?M8$by(U%fS+IUx*n49+=s0JzrOQqqW}7hvj!Wd+(*4ZEEdnLnV*YMTW=}5aj2L zjmz5*ZxL5pS+2)+P)4L1*o{J_hNtqU7ofd4QeQcUN&LH$4O zH*AK@>)O${pptJ7|W>5wt}+vRHc{{WZi#GaJSuB36(9H-kci!|ptN7PBf5t{hN*MJdZ zkvW|HtU#|ZpAr4I?puMo5xBWrFG^r7X;@NE#735B;pUD59lqLoheU0f!Be2p&ky`? zK?b)%4RtyYbg5uu=jea=j=EdF_UkFyS-b)c>bovgqT5i;oA%nEg*`pQ%Yej_>mTXu zy^m{sJKp0?_4jH`dzy~e1#pT6mLjENQ6^CJ6oMK8Y=d<+dtJSkNiw8b%Cu>d$8hW& zh|Hx?!y7K&Wx6&eb6txw(@PfGoxIRObt^{8B`!Qp2IkwV>Z1e=sY?zZs3$CeA`WFq zfO&T6mdLO3UrOXW_DYgCf5}TmFf^&ebwX%+6 z1?P>8r=IrEd}P+7aQ7T`Y9bArP2^`J>G^X2cn^wa*&Ok-XUHq78O%a?z0sE*SoK$A zH?!Ne-IgHm3uLnCJmfNx48e{@F}YUFeqx;G`?itC>c*8Yjk8@|Ib8Z9=q>hP^^?TU zhw0B0u4VMV&xt%RHuW(T)B?ynTlR@F<1za2+xy*Z=cUfI&R(_!Tu1E&Qhme@1PpC= zb)KHzZjJKn04y~~u()ZFV1Z>#5ETlL>aIJ++S>x(Rc+>7S?jK9uxiXqk))P_q-tRY z6x={pdQqTo5}?5G#*Os0#>K2YpN)SivDB~o^_>3zyd?-ARkZaM*b1twu&S-p zsLGI*dAzFs+3rdTPpx4u}k5bie!&6-_CN!)rlHV3Lb!ICT znB@Q%5%d9z706~GjHx7MWJL4(&MUPoJ!T>%U=i@h%ne5)95M!D2AZpl&1+?vfzhB+ zhQ?|Ak`yo_fnfuV9&$85eEkq-Q2f#x}jf z)EoPIpRG3=ZT8i7d$(KewzIKqu%SzkD^HheY8BGHVo55+nB)49=ZSwiPZn*%5TmIrp&?q#=cd9 zM)3E1|Sp#FLKXX!Rd(T6YwR_FtBS6Io_+xn`4SQ*CJ~ z5lSIvX&__ORcUCnC#Shc_fhE+3aAVANI<&XKJymzIebk?<$rPkL~RlDRm zHGFNL$wy*BOoJdtWUtbj-Lv;Q3*EW5YV+lIE7!Fcn=EJZjc&}K5<<=osyBQ6$=+P& zrBbetBS;M_3A0i22lz?LJ~;225G85dJ#)zDZ5q#pvNaLF6Bu!Qnkd}u*2QfuwpLk7 z1y?>@K>&5uG_Y_ZDaPHOZlkAO)y!n0U1G8q=+bnUF((&njX#%d4vp^9@q1=q_+xQH zR>H)wl##^gF_HFio(G00*&0b*uc$h@vxYmJvsMP4AXleRBg8k3EU{QIG+dyGjOt(k z8RSd=Oh+8?zTbt`)YD_c^Hd}cq=Amnv1*h))C$@^zgju>gJ`tR0!hcGsAr1T<}Ylx zny58_?)>0GU{0hL=_}Yo82NuGBV?f_gz43viEt33Z#&z6y>J0(uz3{TOv*$ZFMXT zs@R5-!$WIan}qX`!1(8lou^}@)La5ipCy1lmJbnfg9LLVWyYP#h62_VX^{mgW52m% zkA}leni(^tV8^kjXIK6APyC*V)zN>x(I{0z%2E>g+k5WFd}omN#}Q&fV>D0|+Hqi2#GZ zl{t^27wy``Yj*pUq0DA!sNja#c>_h(mh>hSe>EBH3JwCU3OLJ9DZUD10F+EEW z$j}>Xa%u|#0_$;N+Mo{U+-lk;+&$FW(>iM0Z0@ZZy81H<7M74PRKry-+oLoNA--I+ zTe?FWNV9LM0sjCMV3UsVaA{@QHj*QTh-Q3!DcinQiGHWX;X=Ta;o}xSxt4Lwb1E^r}9?AR;6feZweg6Qb+l~5x z2*Oon+@4S%A;OOh>aWSl;X(w$h!+88q5;Gunj!Vs#Q1LGr={ z1Q1$GoNV`<)u>(NJ9?E^ogyd-wMP)FAQ^_30tmvVbluq9P0rPBdr#&bsYUY<`(9wH z!bD^u2G;7!m$utgA?=Db7xOF-@%Pp@b6|aU<-;$J2Y=R6gbGtX{Du#8TA* zTX}RjQm$k+rUh}{d#85p9UcDh9;G0#XB{RT6azB$gXb_o=KvCRy{l+J+}Nd?RE1SV z%&`(+WCRW;+ls3$#HLb25;zI*1bA}eo&(NcfIWcmk8g>`bl9*bRa(FtNelsx?!!rp z@woMmsg|?cveB$7+~fcPZK-3ML`%Q`d7Z$$QL^0=2f-q`iP< zbOk|}P)2y6_IB#Jl@88ebtb(oR1ex>b&v!=FaQ|rrq1ANG9#xAzUhS8vJn*3!X$F3hS{bMTgxty~Q#ip{2T$71i>P2IK7H%etS0uVv! z&_|qB5AfI(XDZJ+PCYHK?z?l`Jv~(yZa0GFIrh7H%X!_b&fsr%7E+Yb#Ko116!j6# z8+Y3F=~mxzrMhS#K}KXL2ZSQ3$1H~&F8kAc^K;vK>b2EVe%`{C^os=4PX-!9ODR&r zAWF_Q-k#i0H@n+twJP4-b&t3X2D4k1EE!8phfacA0Ma5oTi-i>aI&rJ*b=~V4z?!Q zMu>+h<1JH}Byl)PuetYK)z-R;TKbyCX46_0e8#4bt172685~vW59%iW0Blqc_3fk$ zxNae?cGK4?cvgd^2=f-LuyVc3-t&VY#oWHGqe^nu+~ z+iDEDZdTw$PJX3 zKNN{0iiTXX#l5#;%I#NjTi;75(O=3qVopcPVy$6FkWA?S&MMc{T{K$6YC23&Vc`Rh z5Dq}+Cl{13tn>zsXxG#%M)o?At;<4Sfe{%Tb`8L- ztYNwveE=DMn;jG&j$+LjPJB3GzV*8Pm-hhsTN;qZWJj@V3c-*oCapkXn)ltedrgA2 zW=El`b*&sL8r7k!U`Qsg6y~B#n9;aP8J)_NBnt(Ln^$0x%U}=~G0BdY)G)%^tQM;C zLNqT3RXOP&0dIt`Ei!PHFI)M&EooA8H7b^>^(-ln4s-wm5UQhyF*Q?u*u4rI2B?L( znU%B>WrdY3jHUAG^wpBG7=j~dy9T9GE`iRYkjY|JtlgNo)Bsf?Opc%P{lD`5q;+~X z>*@So3~}mm)f}e+PE*1re^wT@V;K-XPIx?*#DYG&pnkjtBnBWH*?I6j&LVK>R0U%s41*ECkuXeUG0Old9Y%5y%QKg-3HM=6sWFuMaXA?MKTjNNDYUOc zalhME#fGKP)YqkkXY(4hsb?bY6!FJ*+`7d!DpMpuCdUlk#e_o~+F}65Wol44UhA|Z z77OJp%EU>`fYYRAKrxNVms>S&D$E?^62l}AG9a>un1QM!Ph()&CDxYqDWTU<_G&7= z_5&T-ut3$fP$a;fs$@Q{9Qb3i_a*6pM$OfU$dO}Mpeu1>tM+05&ohqdOety}@wxUTfUYTSFtVva=~dK~fA9W)N~9 z_~P5Q3Awu262|7UB4H{XX+#(%eO>IimU6~nL$}0srH8B7YLk%@=J2#w{PMZ{K5`t3JTH8p? z706v?0417zAKyDZ{{Xi3?%({Pgu0@PLRngris(SvpHY7%uAO$XF=GH?J7=plzt0M< zP}^0uBWX|;wXoPt06_CsSpdn;AU58(@0RQWKGxcILaXe$+bYsJY5_$AAysq|0>LI6 znXA=ai2}{di#-)w+UA3 z?V#vrRSZEfuk&Gn&gWrBz!iqNJbC|fX9Ire3s**vfR5R&TI2h z!*V+5p}_pw?DA^iAiA`9vDo`>ZtWlXolWyQCO{Zha`_JO%gAo6gldF3$OJ}#5?_70 zdu(&&cV>5QdpTkO{ngUG%vg&6tdFOk*Utq+X2EbCy3J5}l zHx>dz4A?Om+gzVEmqT+?5dA z%8I77TY7G+*(#USADJvwSdt)Px$M17vfga_(rqrWDt) zkRGQ6N}kB$b+M|o-q6iv?TYQ`RkaO`xgZiL2pw6J6Q#Iw#of2nTW-88gRYCJ`6JQKO zW3+Dey{o%zeO0s5q>kxz-L1~B)%@1nr_9=!bn7p2wRNHoI;>-Jxv$oH>bD!c+S<=u zdwWLSv8>wZ^9j_h7^{N z2Y#*cY_O@Z7>xT)!?FJWR1V|Q_R?0@+wDhMr7{h7(PrM30gxh!tFhG#xXgiv?>oOq zm-LEKcK-k^S=wK1X23kk+nQ9|z>QONYy)P^3I-p0-fG_UuH091ZRk5{t1Uz(k#9v? zZdpGuE3J)H70^+^4UXZkzqR*T?q+tUdH|<=MXq(0zo&P~?yG9T*JUP(k%FTjokaft z&N|Qhxzf?s>0SK8siUd9P zH2psAJUPT*r9w&06i*I04*@5@2|hT~K>&Dy20CmC>EwA%eE82Ee^vx3_T}Nv3aZRN zAGBogJWoHcjvTQ$m7lZk!)%f3>DKBjS6rQ;T|J;7hmreWW;EjcinEIz)na(7gbX0_ zkmNLVPFpZR`Y*)ZZEaN-CJq7bwo992SHJiWeB+ehV46j_Tr*y zDy-HujC9I}a!=-w`$6YY7E|RX32pCP4oDV&3zcP*VWh~=SxH7GB`XqfRn_h0vVsO< zfQ|-p%5%aR_cp7MkOagGp{FhxaN#3{4ZDqw)U=GnN~H3cT|ahw@nw%=8teSJ)DJCm zqa7922f~VFqxXp>X9sb$+E-Tj*r{NkGlJ4}5t)$8%5%|Ym~l8&pCMtUek_LqMoeHB z$Qa`|Z7Eq{Dqy!BGQ*koWy>F#V~W&?iCn&eKVJ-Q8C3N}uEu9D#F&%E%14`@J{Yk~ zGL?@4G3i(IziUm`tVNX2izQH^IPHC()FW?p&uqr3tfigN zEBLFX!r(ViSh|Y{i$oCwMjJ{1pnLck{W;(jQKi71IY`g_o<|9}`9pONU!JX9FvKWO zWCIMjDav9*;dj^e_1m)2wW5bEMQbKC5VD}Li3EUPMshs7K9AA{c$y{ zWCT6+)gi0QHnx#j-uHUhz!>#d+3eSE>f=l9cK-n8M^binBi&}wtEpYZ zgQOT(*S4m3P*{>N+Px**_j{Uq_o(S@rqIxqe7&33&}qMRwW~SRU1eIi&={rc`VrN) zeumknYu;=&-LAd0H`DVr?rPeXZA(jTo;LM677ps5-BERw(6Q-TyC-1ScMa~(cyBas zHx<*hux*u@)$g)awgGieMxt*O!m%-q;okoMsbAC1?^qo=cRPKZ2X>or3~2$j*Xnn> zP;t7nB~>5GF5N<-dE134Zs7|Ec`D`$D!Ew-q!1n_PJS5edmYaA=dRm9Hf{oLT-vA- zOWdyPsK1qtdb#5rOyOCIv=D9qnlPOGx{N3CAG&WwV=r+*Vx3aa^)wCz5 z5q531EZe1gtGF};X4NAsS-ihvxJvIeb?duvPULPWtTMGXHG6s(E2HRRSyo!W2the6 z>$Cbkj?uOf8ojpTaP+%QP8V|aJ!A-#*1*9ahByoku*sZGP3@7Kam$D?JaN{N*KpPF zm>dL|kbh}M4hC^jI*yiXI37Gkt~q!f6EU6=>o&>?=|f^F)TOgE>t%p!Dh!q&vW^fZ z9d57XOmuZw!Z_-k8g*w8!#+5Uq>pwb&VOgsh@KPn`*2Sw<;&~w#z2!Z0!;V}5$GR$f`q>+$;m#}5*7?v|J znKSI?n9CLuaMA#U;Caah_J;}Kq>O=_01uSR{rUT_p+Mos!#}G7&6m5D0~9l=2e&Np zL}5$(maGJ>TWNK^oZok~Fv#D|6rC4>MB05C=NA=_VB zR%sHBnXAOih6Pzjf(hVb3aATN5*7(3I4ArdktYpx$T4SRyOH<&tB%S65y;y1K}|q-yS%6 z_0(NZN`eU=Z_*FYaGSAA(YXMEKkpSnx|!#YVf(?Pa5zJxs8W93KGW_T^2XWhrEMzG zRk${yOCcUPWt}8F(1T@xiIL2ppV&B4p>M-#$EM2MiLam=WyH zhq!(?ub_pQ_yL)oCoU%y*>fV;0U5^@+v-Do>^QbwqQ1c5pEVZ30r zL}i{Pt2LbD11lVXJOTGibIS=`drJ$zI!N~?L@&zkGVL{ApdWr!SMK_rL(PCIvc+1R%3cH6DGRmfVZq}wCn zRc#|s20%X3BeUDvHoIM$T&%*P?8K=g4OS9(nLP4|%;TlSO2866i2mGG>$9-du%^Nx zB+1jOFj{hqr%~5(IN3W4QJ!pX4?aYwKTiRyAWrT{4Rn5n~V-fHWqe$0#-SZ%X!U?)QIPadzni zzntn%n!S-yY1^WR4XPNK$wXp}r*YaHzTuL$(O?09wLz?~{enX)d7!G9BLi*RyN_w@ z-TH&_kE?UlTDK%NrMk*`+i_-*HCfiEusV7wVt4+Y@0)n;8%GAh8!H0^bb5mTO;#yW zSz)ND5+@#%-TH^ryIqHBtytKV(YP1>bC*==+(iY-1+Kd*MXVJvgaUE3-1=MA`#r_m zixf87f3&u$iC|gl7NfmSxTREC6_Nu0#i5l*^u<28^+I>+QY)uzTK@noeaWnY*0R#! zhy-1xs~d4jC}j#V8)3QMr7LFUTH38`&9(|mqt+|wx+_|8GhOb?9%4wn{bkyFmD}Ch z9=7hC>~3pYgARbNP_oUkA!fI4d1YI|ua-R9Z&vzyyxp_;JhGs3(w5C7-T1ALZg#c=C2SCslUz-m7k8n3T6$;YzH9DQ6 zsEJa$GAfy1`n58G%AlP%s*cy(fZ1DJ3~as8LRiQh>#>nvNJ~MjScPU#4Vq-)o#(2( zNq*9+n#FUs+8yrW$Ou?HM5kGBqeYIhQ4WlGcUpZ*>y7@`ZBr*j_PYe#y|ozXo0sNL zQDs1aD+a*C>C{LQu&c6v_s05hw>!`*qKj#C-5LwRixn(&8@3-63oEKnHlY~qXS4dB zXWTp87Hg@?{Jj>^(5pq&ST*gpEX7E)HMAt@v6eu?*}wERc73kewwr39?V`0(#fMQP zSymbHokCegE#G$T!`!ae*0S~{((_s$5_)Gso=Qs)24s_!iB{@tMj?b|r-79sRL(|u zw<}aQbrt-f_=_`+R-VKHswd6P#fg92PSoA~WYcJaWZls%1xAN=`wS zgpU!#Pckv(3aCdpf%oy{#yyzSG6R9iMif@f#0Wge%a%tz9?m$jn-ztMVSzbF<(G#% z&UlhZY_!43KWcnW2!kAFJV99mc<>e&@aC@7x!P8%SOVYpvZqyvEX<^^^VH!@a=JlNmXwgkFK5x$Oc>#UL7#WugCIyAJU`d$;eu5GZ8?wtFgg2U!!wSfQlx-Hl~yo##PFZ>VN#HF zF#-UYJOBV@N#r=r9=lOW@MT~jfyjak@ZiAZi*}vMxwRWAm948#*X9ttC2$Lq4dqtV zvbZMUFSbJVQU{^?Plw70hjAnBL~ zl>1Ks?LS@{X;$5?yqzH{2GZ>&0)+=u!74z^2^j9%J(WNjZKy+%gvO|Lo-M4+e()TNJ2D&tQ7?1is)sjiZe+HL&i?hl9IcES&NV)OL;)mGPy_*0d#-}B;uakwd`A3?iY21yQ^&6 zRBu7$vf7SJ>~#$Svs)`FnA13_%lj1u@Ev5>1!|765fPTcsO$qU2hKc%1tjCRZ?^lI zTK(x`e~|%JGh=ktNvY(J86YSm0x;VeJKu1w_5-b12)ctXQ&zOoW2D0rWnfflBo!01 z-0Zz)y*IAkp<|w?4hzjqb~8l+=~&=r->4r7=$FcNRKPU2UmK)1_Lny3n$= zd%oxC{{TeyJNGF?yM3jbo$?CRZgSUF+hkiI@6?Tbx|ZIMJ9M>y5#4(ybKdRg>>H~q zvfaAZTZLqON%D_qHf^d#_-or0Ateork_g&&Pf%^^M!79(@1?F_^{G^?+O&IKu|LE9 z6#0lG3~l>{>vvxJcVTavS8MB=EArM&?ijeSG}$$xg*s}oUpyVdU-F|*mZVEuy}6Ag z*|=Hpy@onG5lB8;H>54}{M{w1vu-aofhNlJ78WHAqAaa^*JK&gs0X)q-G`=j{k1mr zEnh3MR@qk7s39y}!W(Qmmo84~-6~ung@cwiV`H;>3fAuGzHKO{Hafh_6crhH+v16w zZ2dvM^vHhA+$(k4UuxJ^#;+%O8C^)ev*a?RM*@s<$EG)1FHv^A&vfoPCEXhK-hY%M z_*HJ-bOkNBuo7OH*o0tFln?>!9gDg3AGd9~uSHGM3Yyzhg-8N?+JgpW(>f7Tf!X%T zFGF39HPY(hpuwj!>Q)^{63<%((ntnIHXXaXdIS1tRXa_&2XovvyDhbAwQEhnHuT?P z+jxjqVAnbPwnXBDQeZaf0tv^^5t3T zV#*cvUZnnze^7lJy!7oIvhK2XZtr#0r9_sB4Wyclb)xi1kk%G^5txR@cz)UHPfl$| zbkZy|UEb{7ZSQI8Z?_i>yH~idK7gyYuBH{Lt#&nff!lV^Sbtc3L*9K+e)4X8p4&|q zlHDK5BAObCo>y^5wH?r)Scw?9yB6ov-Oinx%@lV&-Lcr*B?U{Xe^onR<^wf@a9tdz zF5=5ni~D!4`-iJ`cAB2rMLRCrVIsW?ZFXN)?&=xU+fAtU*4tkzXk=z#{{S=m$8G*o zJx`SWX|VbJj=zIfQ{{eVN9^j;t2pWBjN?q_mjmEV6<)v;^V9Tw9^=ID!N}?Qd^mVd z_VdQ`e?>E}qfb@x0X3Z~$2QD>LIx`!v@UpM)f4O|?ii`M>PtwB%I z7a~E=kt6na{91AioD2!_xS2WTIc3BUd5nnm<6AM)_5DYV6_}kud_jUU5;M$l`|({> ziLuxy90_BP5@1R3Fg!@bmEH(+VyvPh5s}PD$nhdafxuR5;&YxK>*e+0BpkTs`h9ps zLb{KRKzNc)N~4K900i>Il|JPj^mrv1UZzk!BypP^TnHLU=QEZNyF`i4!}R5a0Dygl z57+qpxR$cL2ZnPzxaXhPdE%Ex{PkiYS1=F8vS7n`SaFy<4lG+~XRoAMLnoAjE+CVX zOM}E_IAKDBJwP(a!JZM9Kcf^;wWU>T_!P1rBz#1X3b}&?qbTErWn~E9!j@U`u@XSx z;wA|hfJS&bO`tzE=mG|GRV8yPsr-tt3P1=X680Wpx`WcYC5 zVv0`0SrVm#?KEU2+kLsrJbUpbo2T8`VZi=mjXth*n~VVI|?vg>uH z;D`nCfJn!6r`ElXz3uzj16|vi>=sxW#U*B!s5NZ$jXhG#02+@|R*`<&w)ZW)J+`}9 zX|r)_A}wv^1h_+{(pb2Kg|ZCF>cu;YKdK#{b-1?8E#%)=X+U&~@38H})mY7$I+nIX zBbFx??(6S#RBGI4M^?3Mc%SnXFHMI=038pO5NZzPXDO&OdR1RB>ez;OiPt*>zJEOu{URldEo(7*+5rBzxH ztWl|D39aPj23Xr}H$B`?+myalw$@kzR|&p zcQu8vnSvU&;n_>Ia)pseD_PV=Mn#)FZUrDBJwjU6AzoQ6gAL|Q2FQh56a$KO^-?I@ z*Ih-Pjoo{c>J$uJFHDe`1-9y2pwf&>0t6k!h{evP&>C~d20l_ISV#j{9J0mTeau5Z zv!_*7xg6Dq0xSbCRh?8gGP48)d+l$81@g(#2>>a9A#?T&^EmlS zcH0p{D-cQ*-C5Ld4BDn#SEdDRq$O>t2`i1Q`)=jB+WM}y4@)Z6lvW3r#**8Gva#k{ zg1Xwo0*M8%D6@BU`^|6=mUfpUm|4}S*vSgMV#M*sY3%-)tGiw5O0~1>{!YOAcdh)Y z6LDEvNA0@=RH>mK%rO1S)|)#!AIx;zU41pS^4k@HA*XJQSPw0()-P0`R$#^kH*ed2 zs@qN0*jC$=y1kcDw;fSk?`^$M3)W=xE7U^?HjQ9odFX08gMW;8@n#P$plmRokf9C z(~ZrAtT#2MrYo#dQ#ZgrC=V{BIaZ{UW-tZLuJAtLr*gKWf@H2-FrF z0u=JVVxffNZR-!}xAgC_pXr^zpe@+zMQ1Jn>AiMP)!V(bRT8=U=w($=IKOG>bv}^o zR8Wq)eZ>}TA91~XTB@UIOWG{8l0`y@0FITe7>377<^KRGIvqcft5;87@j8FR`MCX! zTK@px^)+XJG|YXt+l63ANMob}s!1S`{6Ypn@|A%ZNoA==0!Wd=k@`NI@Fu`S&j3i} zAo7usf+TSm)a?=h1jsSV-VY<=f`y{Mav{FX9B`G?x~yXg7l}XJ@ju&!9nWiP)}Vt@ zSSn&jF*d{L0K;UhtKpCg-~%N4f^JU+3?d@vDUDDW8%quGSE zvlc0kVqlI3JiddEifbo~KtAF3jw1pL526qDoDP$gLZVKcBUci!CS%9;hHwTbRI^pC zq_EOqSQ837asZbZd9wh6hE`Q9a*$3?c}7|A&w$KlieGWHYU{qSZEonwEI?qI9l+`U z(yYi>7$6*p#T_lRLgfw%K`h#cD#Vu388}u@0-&8zOya^S{P3lK8bawAw8@!XAZA;H zVbN7}aSF@}C_KVtGXxgX95@)jS4zXcK2oF!f+VbgGngdl%rrq5ZlF*Wz!}#|s56;e zK1Rw)!P3A$F^jfa6{_8!BrTRwqQ~%dB(ov#P{&B}%S7M;S64Ek0W-!7k?xa%ID?S~ zFnxr62PneqtG>>Tn$_!4&d<^eD{#6=O4S>t6&xWRQjl@C?c4pU?R%JRrLB6U%b}DV zxTz|KQ($6k3`m}t1$45S_SV{;HK1!iPP!cb0K&dN0?;9tDP;hR!H_n~ZT4-J`dAiQ zMUzXCt{76xLNs})kjx>7f({d5+qNdl3~PN=)m=zVk!|-}R;sF2AQpBL!DWaT-}fI; z9^3rBn}s#sx8ChHA27tiwJBAna4BIe)Ox`RJjy0;cKc23Hwx3{OgPfI03~er9=nFG zJzABSJleU7d%mi6TXRwn9^!0g%@KChSmF0H+Q6`~u<5i|7CQ)@$Jsp<{U`0i)cpgu zx2ILT#rM_6Qr*MtcRK5*aacma?YmMC0-!@;-PiKvvtlhLrq5+4$~k!=+Ce^TAj%IU zo;X!CfJKHFOciYOk^8{p80J<1@y746`d87Lj^(~|2KS?FX6ca?*QWJoNZHsAlIwMz zx-bP+2|vp{L)iDdzkb{*+)-^d9LOb6)pZR(fu~Re7@Qka>2iN$X#IT!H{O6dFn{k&!MMekle97jV=L zlNV6MMv_DZ0!B=rgO~?7UmR6aROfFbD}~fk_KJ-}YFL*wthoT1!6q?Zsjc)?milvc zEux*(_1Kl$Wa$^}s}7cytd-K?Y@k`>u#+o-{pYuDcAI8L>9cLDO?D`dlXBF$Odg}D zW<>;qII5T3*xPk16*ad`tz;5bWfVISTq=fgC5g)qwcGlKwe5FachR`H(@izOebH{2 zR-so@Ky|aqMu~uTn`(VQ>Sx?9ZMpUvmA_>DyLR~=f)TZ=a>2I~VHPcALal3HC5h>F zt1L7M>kMtNZf3ZEZE)zTDDHfT1(5k!+=<5X)t;;Vuy);#bfa-tw{1n}>~^;hG~5=e zHv@94GO22HtiriEi!W-ef2qCF;ZEwkwW+qVuS1(tsFz>4J7H$ts~G5GQ@GXSq!Fq; zPq^)W(a!h3{#00!HoNWJ0+bFlxVhabYphKo)~S+}mNm1XIDPl^7y58JC01?4g66Yv z-FDlCw5L%iw{8)s-q6-6T$Y42s0~SK!!X%;d(xhTUzfO3bymK@mQBT)*wt3y_Y=4k z)X?SRGXcy>2?;?v7>Vx-?(kg_Oj`^+HCfF=iP2lyBhCp&6iVE>qsi6JXh)OO#c90 z_xq1lS+&%?r@i*h>ql{+73a#t*eO&w{Kw_gOV|{_5RcydAL>oE@|vnz%O>MVO4#kz zIWbTqh?F*d!KRKZg;MsO_$pDSU|~FTawyq zUn&Xsct$rB?6*X1?+PtK0ZT#>$ShK<2u3=Pe#?7t+`TvG-$d;9`>ImQtlU%Ew)XF- zuE7>C+&uJ=!f8!4vxX5+40G+8oy?-uA7Cz3n;@t;L(y zV`X-&Rl@}7Ay5W_uja?2dw2f;^x?m`cK+F8({|8p+}E_cGTF7*g#6vM=&3nww;++7 zNvlli>%a0|uTSRsFZ16i*Xn%F%j^FD>_;sn_L4~4% z=hX1!6V5Qx(~V2;M^EAQXVv}b&Sr7>8g=vCE*P`;IyJBO_@Ci^-2U`` zc5}w|bwoGuHEZP^XwG~;y&AH|{Al^V{s+O&pUi!oKc^hH{-39YJlc4DzwGn(<>Q9_ z$^AX~_~6GzG>$s-{S(je;m;Y*6UT&mBcF_C!=4^={3a%N@`(Mf4PIZ~#a(WfPpMw6 zw!Vg$&*nN_ew=aW{%)Dk=8SE=Q{=jRD|LK_%|z>H)$=}ohfnbG==AmecUJ;9XT#s^ z&VBgodV1RaQMG*UQ=$8D^18geDE<#e{x=^q;=Nil$emNChwbUl-={oRucgw~lQYwa z6RSt&aQL)&`04ZGaq?Y%&qs&%r`wIs@HI_w)SsA* zEBrs%(c?a7n9Blm#(}~jKfTXa?@ybA<&N8<=X#Pf{Fa`)>Jb|M04{ubo?n7;$9n2~ z{{UA@YW{7~`Ob4XKQCPW00X7%>G@*NK<$ope{Sp5F%X**7^mVKM0QraK^rkvL@%o)u@=gcJ z{{SqXmb3UhT^jVS{$u7c>U>&%{T^a};o|;}^A3;mEwp^+{{SbRp^xT0PtA$=wRv>v z)#Z$B{{WW%04e@c{{SypKg<6B<^KTX9X&_?0G53J0RE%=wr8WK{Ljry`7~qII(pI2 z8vg*4>*(v%Uay$d{{RYqi_rf7FY^=9@=iM+PyST-{{WaxKh6GUj=KK<^BVsE$^6V} z=yklYulD+Q^%Q)BbpPKlehM&mk z{{Y-a?0YaiNB&y*?tq__{%QQiGuQJUH~vz79=tv%*V=SKQ;dVl>LoU(Ek84^4uq$rx$7K=+~D= zgligf>htO0)7PKF)yq~l00u$%zQ6p#g%i}Cob+q{KmII6ogQ5pV?9{f^gd#GORwPL z^5S~kY`U@Ve7~2Yqfef3>F=5TWuyL7vVWgXTULXo`9DL?{HssFqw@Nidf%NG^q=x? z`JeceN6&S>OIKaGe>?os{x=BM`CSgL&HmOmll;5qdbaENex!VD)X^X1I&<*!GU@2~ zZ!F@ko&NxkznA>&+P|Ot&Yq`4Y3Tf?`QL+wPyD2R6Z5AYZ~0n3&3wo5zvsWoy53Da zT{*`cf6D&=$nH|%5^;YBlt7VAH&gUgRa{{a49(D`l0%YP>R zThN_Gep~)G{`dK>m-&{h7~cN?IsR?)zaroHtv@ZQ2A}5t0LuRW%KYyhg#J%oUsv{V z=Qeb(vM{{WKF^YiEb0Oj3(%K3i?@^v-xoPSHdnSagS%6?;Mr~YgHUD4IlT^&D= z{{Yl}OIQ8(d0858QPx&sdOHO*RzWz)90NqphkD7i@`G3eq?SJ!M@?9v7 zoO$E;IqJs8`S1ME)BgZ3AI*P|X_>Mk`A45u9*(arnb-R`UX1J0m++&9KChBIHFNgH zGM-#x?Vrc#&l!H{n4UjR{?C`gJZ=8~oqVs$^=tk=^In{5S=Icj^P)IMo@YmzG2eP0 zKl0sUqJCqk5M!&>{P_LezvgN9v&MZ$=pW(#01t=l#(ggt$~fb_>75-k)fyr-82G&L zJbGSjKOR`$Yv}blql8ZZI`sK9`?K)pkJ{n%{fpZR~&(*FSDzu(t&ME>9RY5TfeQ9ok(b^IDBeML0> z#r5pHFLWhM6*N!cPo|%-dQRHu{oVa~@BP2u+p_D@{{UyN{%`*BY!W5cO$11_^zEV| zuS!k=v?!~ozNo+_e%hPr*z5iM7v{43TBl+vsL#Kuj%bPh0K-{I;_LmLC>DQHG1Twk zsgGxFWv9@6geO}iRrLG2^k&>F(!mE$8-b0LR7Z=|5hh*BfWQxLQqdElD`&9U2KJEy zxvwtZc;Tv#azu*M>lai-KWBg4(Z-_7xYEu`stFQ4D^}*?N-)1L4n;*<7|lSvemQ_?34@UfDrx+`1WX-7vIaD0vK6w!6;%hNI6i@0~W zj!P%{i}DYdc}7fETX4}Lx|n7+kHC^b04^c6UOi0(S5aPtazB-v8;L}bxu;`sufcFP*7{bPXZ9DU_y$5ziKKX>8c|1;W*>2uaTrxal<84M$C|Y z;#KUc{hbP?n)ppgbX`+(uJ_dwPhX<+h=`rsF8=_ykdxQ^Dch(20CF+=JN@qV^z6MV zswaPRo}R1ZUiv5fJw{y-b$x|jMbl6O{{YYZy*sLUFuMNb^R?^fo%QY0x_8y{O&8a* zEorKCALzRyr*Zxr3=w-TN}6e+O3^g`0IDh5PfuQ+RZV}G%4mt-vq#+%_UfGusju=) zbyU??Yp(kGB7Xj(rihBHJd4}vtPy{+w^EaNr+C_;DK4$5IiM;c=%|F6>FLvNUSark z>w+psces{0cHo;Y7__K%m2!_(P!ndWplF&RCsPvt0OB_RxhB)x1&xgc2?Gnef64x7 z*TUxxa*EC*w_jvQUuDMK(^TD|5-W`H%-($Aw^`Uty~W=mIYOjFT>@#i#R~4`{u8hw z__sFFwwqicRV78yBTvRYar~^QVmxM|opwzhi1{uY#v;kqLQFin2`dLAO;GIMzCHw9 z1rJSnamsI&d~20FNa90plKv}FL6#C)Pb5>5ka5m!Qz2Pxq$D#4!t$1cI(JT#qvL-S zc_={%vi%j!-0#A7PDLR@W!9zN(&X?UIw41`p4MNlP8dT{fO7x{UKF$OcT<_<~mGxen?#bm*^ zUJRRxuP;(xk9ro2fw*G3gcT8bVjg9fV3^#Id)r71`yJ(u9F*he*t|?QIsP3Ix+IWc z!7?9kVj`%k*;B72C6*16MezZoj2oD^>nV9nby8A*w$;)CIR=U+-*PW>PhOcPBW5+i z;O-~nV=`t!ZC6Fuv#K4jihY+(M9m0-7l{LXHiHPOI3asDh-k;xH&EtD=^= zC)HD=ZmTWEY|lh592?rXP9hR2r`XJsG)2?5ZiUuNA86539c0DU$vdKLFx&>3{dM*0 z(Nq4PMepc}y?uYRJL&4b+23E=)}P=10G6Js*ZyDh{{a0TPX4|0*H8Zd2iNy?uk25! z`#*R80Du1gFYf-{y>(v8{hDd6?!RyQy8i&nzkdA^>Ddu`C+z*d+0rknDku9rde`fx zr+swv)BU|CZ`hyR*YGVbZ)c*kN^`a_k`#!3lyZckG z_-+^MU4^IjDyE6omir-~qifL|xVx*Z4O7)OOO(=X{oNW*<*XcxRa0eks@%Fnn(8gL zP{iVN{{V37-=`9!v;3(;_)3QYwq_&0{*K1%s^M+@>PVdvmeAm1&5rbO%>MwB`0EQH zP()olw3}IPk$3JWyOX1di)9>3aV%SX-)W4@&pATJ#T-!IaADz;vg5pw$3<~Owx{-V zOUL|e&iNZ}x-7Ep2l0m1k|7ziuYxgg$#QC#@slE|uP^e)(NzmXUo<`l<@O_4M1$>| z&iTuX_~INb??@R=TU28udoCM{HmFXt3a=>Wf{Lo0KO)~H`0I?$Re0EeV}H!Nrs6(` zO2J8&At;w!xeE)&Diwz0?M=-#Xd*hGs%zQTYr;0hKuEix!<*Fj0>8f=x_eq%THVwM`hfG>!v{OCKJn5xnkp$qBv2qAG$_bOVqv%( z5>Du-x-aeM$h-Z3h`zce@KpLQe_p;kdt5FqW?b{~tBpQ3yt40PQHCWKk{g<`Gl<0+ z9MZa*LN(uIdx*Pn0CRp|aa*vjPsxQ z-e`M$y|>?@*j*Z@Gc&_t)k^jvX0i$(yxy$uHSCHrlTkrl+M^g zv9g$o*fiS?sH!TS!A*L~aBu7FHalU7Ug6lQ7x|?gPeF+1*Ey0yI!3t0>B@KA$Qw!1 zT7daVVha1xKxG{d<|S(!yUSc%#P8l6%XCcgZhwm4u3r^bjk{%|435>_G>c+8HGu z$Sf;>hN-zVa#PDsyw~#P?PsSLq zv7&n=c(p3SIO`vSK&wSad`oh^hv<^-YCW{8zf={5Janr^_Ys zkLo;^8pf#Z=33jpa}u3Cw-dXejV3&3BO`Q~Y`RGA@NLmnLdP*HUj;!RMsy@gc~xC+$F+Gj%aC}>IOM({L(W{r z{v%Uk7{v!9@WNJmBWSPlh*){$7E$=(wk+SutmXs@+#`>ui%G98<+L1EknvFQPC<%e z)-~6;brxm$maSW!W*Y9wYnM9DVj5fbQVT6XES8iy`hD=FBrN-Hn8jCq_< zY@KnSBxMkfcYQTPU#DLv@qT%qh~3)ouO(x+<}&sVfW^d~fk|a;o8$JsoQ+!|Q+AHG zGaGNl;iGEWgNVB7x^nLuxA6i_SsRM8yrT=7e@)3(O6gbPw{q%R$*ech*ik$edtY)svmt3Q@>6}v?lH2c-Y+*;yinJ$_lQ6qO)Su zrj-}!iapbyotON5;S7#+M^V`GZ8)n5a$^p{b$zk7C7Na*L5?7Z0;Hgbnr+j!Mfi>y z91={ClF-<3k0A1IA4`Z%smWP2&Cq4-S45bOH}*J@*Ju$6CWNWh+#lr^%#1KtR7RuD zk;&T50#=Jt#=@qf? zzCnA(cQ|L6*Q6%oQeXwP%WvJHD!Sza--C!K$cxr>E4sg?pc>=s5AQzs0zUvS8wwgI@6veeXE zRZgcv?!DsN_I!}3*yftB}6vhx8#!~vi>u7D#zr+XgjNokqHK>3cj5TX&iyV zZ_O_o2@&p0dyl0g?;n)nxf_#dG391SGxrNBYU&CquWtP@HnyVv&b84cdgBwHiRTpY z%yiI3UNex+dRP%^nzYd>Y4;*@+04sN9&z1vF_h8XW6qX~rh>LL?XqfLL_%GDoiJ3n z#wBF3O!Lf!ppLQy^>jnJj@?l^>CzBrVyUVSDj2GM)FD+x>3)iyy7vC> zPRN~p-G67Nf7#o*>({6E_wWAwKl{tpzg0zDKis~*PuD0;1V7aQ4 zW}bDC%r3AlJBu+HXx`D8nI1)}NZ^Osh61X;PJtfCK0o7x;|x5Juesv0CAMtcWFA&d zvjwcRC*N;+B7;Oqx_@nfB{!H~?A(lN)pyR5CpTnGOE!s@t< zDtA>x*GCw{J}~^ZIHVF)xp(zkEAigEmNvS_ZcbBsKGm5nDld;#l^oG@U42E%emTIf zz?AAoc1JM$zRWVYjYdY5#hB$E5@TP9a8bqatZ{q{m+seYy$qb2n-Ff#^ei*42IaarOK9xypYa`CBAvTciZqw<5N`Afu)@P7mB{ zq<|oimLnG8+*FB)sD!RyiztnU1{M#zc;ple+1tDk35b zJbtQ|ABqI>qniuxp+}#2@34pYuQ=w2iMvm@mruL< zzP&|VJD;wonlAUv7xwD9bn57ch*FpL=pad_qJ6rrLZ9K$@9j+xHli=@Rq2FZPaAsu zKZ(Ls)AoAw@7HQf?4Pj!y?uM8y*j9x>P)9}?WT@@X1z3@wUS={0Qyh3zqLDe=^c5HfAV^CvKgw?!)QX`V3qB`ty3QEUAd(Rth7LW<4ndHF8Xs-EduDCAy?r0S96i?d{P7c`6gaJ1(7bs^B`>c1Z%!5Qt7< zF)AXeYNDDhpI*Pyv=g$q{-_@u)pT9jqfjr;L{&sm{rzBZ_>Yh;_~LIWa~+lsn%!b@ zR<9$p!lGezmha>6uh}2UQA3+zjg*%lxWt!$QMGX!QWfK`lfOH;+LwtqXO@nJUleiP zF?fN;C`(KMrZ|?~9yGSH`%8 zVV31QVOWuQUn9sf2JG6K5xl}-NnCj#z^P~+wrphG%`zoPYyu*6KZrl6`K7lLW;|WX zoPm(wH~9qoqJ~~?OB$NS7HbT$2kfWQwvG4?Ntc&ZsGF@&J;cDC)gfR5S4Vh97{`uFY9i zu(C6`0RC-s_DR(l( zX(nV36w$N??O(^$V3W=X5JN42w?tI=Zw~w9$H_|zc0bZ%8TmtFoc_0>iJo$6nPvqB z;ztbfMf6Nvrf;}*6qnVcg2NGJy%`awWRfQ0{{TyjdaIgwgCOG`fA}TMyv=>WH<`48 z;yMhw8<&t(Q{$LsAj2%cti@@j(*(GUO7~92nBlyRciNxoSMfKI>2nN!LT1SjDH1=~mqG3lZ$&f5yk$j~Gcu9>wz> zGr@U2s{^KU55#2h-ZM$c*Hv^e;>}o|bl+_j!J=4Btqp}9#xN1tfi&iLb zd_xn#vG(4ueY|%E#;I`%5t#exQsyN!1S_cYMW>=GmOeoN5Wd#&TK> zt~DVVpFU-??!&JeH8-3c#AW`m+Ezmqo>sjD6%`IT zcVDMv9-*UBBsLqO5~FWA*y@MlO;Ak{bYI$?x^}lZ!!WGou^9&zyEDV_tfnH!@~b5B z$GoeY+P&Z{oAlqawz_udFQt5D;(Dvd;*puR!>Q--^yb=t;WrtvTn^71XKZjUsD0Wd z?Rqw_ep&f%#-$^1GUhMxTQs_h4cJZtsN`CHLu)dvL4B=3&>@u zvyUUNIrrng7V)gMKd(sq?)MoP1C*cgFb}HJtCppLqF#p z3bwJ3pXMOPn@u@$Dj2h+hP&NI)*B|8DiG<{pC$O`&ri0|qmoOGIdg>h>6VB^HoY32 z_1tSAcD6t%i*2bZhUhM+IwrXdS1VL<4jmDgnEwFb>-nSNpDbZEEX)|QAIbdrZVDMD z9WEg4W5#H$qXtK*IEnU~ZDrgqdntCKZR1?aOHk`BxM%>ygk16_KIB(5UjG1bDrxD^ z$YKs$kv0#O(y9$!T}m%0Z8jRQ#O-a;LW2JQhyg`Yri=QERaS0^mxCjTYmPh~G*uxn zxq}cy(FJ>Js{J~O_C1>7cWq7-ScO@U)Js_iNvb1lH7Q*JmO03c3}EwgP<9<=1lxK2b=YkDaNZ{M|a(^TppWM4hLLaGynlH21>KH-iruW%Ft z#~KqX;}?^mHUxyb{NzfCiKlH=6WPxs{ITT)@xnLa=3gaq*!1&U0ueQrNs2p;!yuZe ztE`HPS`vt$is{p?MEJ4Aw{pp;V*LE&i_S)wAUA`mk3E~*-U^x+4u*n;D4mzrSqXt~ z?-Jn6F(NWF-Xq4iW^x zrBqK%&N^zkYO1U2_36b`L`}0hX`&{8W3Hb~b?wyR_0jn4CcT$$h}=c(^wE7fjoVFH zZ_#xAH_QE;z*5W6BuBM;u_37nK-^-b)Y2~sxFD!{oO*ajwr6i zkOU%npqQHYo@li6M;kRx%j>6K>BQRWq5lA>?*f*Ds-z;#E+2D=$*RYEOLeiAoBh84VQ6a71fc>(S- zFu|G%`E5cHXht~`S~aNY*T7y#<9mEErjO!hHrsNCCXQDk>@4hYxe{?H@!?_c>8ocq zKHfoNk2I?($m}$3HbiPWw4We1AV_!2AbWn%dSlKG{|05#0gx5l}%L+SEpfcZ$Z$tvY_~Nb*wo9;nE%NS9@{W&|_{ZXx z3-WgoasCF+54(ol#>DfInA5ZnvPjocW7$%}xVCm{wst;gzEl{Xhzq$sWZGB!l=%C5 zL-S*oU*s-Tqs_Q0ljT{&sD^|3HxQ@FaNb$Nt?OdaMFxfc0B+-I^oD$(U@n_oWqIfI zljGE*%NxS?W47NOIm*i$#BH&5cQr2>gr6d7?yM(TJsf1nE4v#%bU=s!9i=cV79SjZ zx5K!;>W>n3qmgV~_@R&TD}0-sgKavwtvyxNWWn*p5yxc2=~!}Sj2uEo$cIwS{#4a} zsE#_{$qr1wD=<8k$)AZBWZKKFHmY*6Ah8#X+|8Yj5%_YcAvSg_3ZfDdZz>yzE07;L z{DzJ47Dcq^$&Ogp@K!CtHMnTO_f6Ttj@~h4X1Ot5IO9e|FvQ{(|Dgm|Q)``NV7oi8GkkpD1wTTibTHy7JQOr_RK4 zeCHH{tyRrk%zt~0*uOX&Mg~k(Z3OgQxdQs*75N2Wi}LTy+-9DR^W&w1wfPn)XTp3x zd5~H_%4H3F@so+$O5{&!+hnYlo-X84+qEQ=sJ|#7W9vR^ZCB9Qc>YtWzgP*N;^)JOR{Z$C8Snl46vBj;(2NX6(F5VRVZmH)mu2-F^O{5BZd}ap#$2_x#BsZ4Ya`I{^At7W zR_*@)S}&e%wnff~UtI~OS$u$`iH|>gG|aO|Ja5T7J&*gDxAisUmgDTsqRjD3dyr^Z zs%_fxx_D@ERT`&3)*EilI5QT?@uW)_6Kk3)MQUyQv(gAyS(3))Z z*ZWJTN2l?i32XaKD~Oser?0P1rk(VRYu!Ki!mF>}-tBIup4a28{&Vdoum0LAi>UVR z+Y6Xt)p~v|f5lv1oX2gmlH7d1k8vy3 z1>$r-q$6``Pgw}ds)**QNF=C>-=wjR@$VDF?P9w0c5L|8-!S7jtT7Twt0=|mF;#JW!R=C^bugpF#bag1+-D&wR_0nZ=dc}j~UVB36GV(R9tifSvn zzfa7>{$}G@F~@kClFv4LVZ$w_*gDz^!td(NI=RHHp|p_P+PhjONzqc=f?6Z%M_uuw zkRlnJhGp^p05@}Y1>Rb?I;$f(9!(E0r)Eo#$w-kNR$C<4hD)`2VeFgZpUDaE&qkhq zjJY?3x!NUB#vn%4Rc(k<yey-+SNBd(Riw{toRvn)d1QO*KfeNLNqc z-rx?Xo``F&OeVUok>&b&?QIj&>!PlmLLaDv6!q0RsF$y*_FkV~{uH&-_G(C)e*XYo zrmFt{ip8NtRP3k`w`uG9`}GsI{>C3|exzu=pZ&Mjr+{w|*_fA$i~*IhLs6i-h2?&@l)BB@FQO%XrA z9TUIpL{jPydj9|}5-->Ihzr;ISE(M0{E2Fv*Se{Se*JVp>Cfy^L{CoJMHgT1^yu8#Pdh|=DbW>ed*VGgL05?(5SNt$jU+-yGPwdyH z*Scubwe?>5m?pp9uTE?K0Nny9`&ao|ulv`gQ`7vrI;Z}zs_E(b`T;jvYy6rPuR08h z{{T4CR5w%w6Y1;g(<nch%N~iWPG<02(Q|m^yq9D$zO$b5x@lDYQq-7 z*)Oz>JY=%;c?=LIjT{}0AS#L<>>&J|c$lMv<3lO3CdH9beMl2h0bvDH)qjN%b^7#q z6qe*ocgV`stFm5NrjjGXBR&m!pt9r7tEz_aZxc}+5jN}B`gs1F#&S%RynFpec#kN_ zoyX|xuA0WNn(Ti0CgnLP*GG^vnB*5oLFv*}xXl?N5u&PfZ-Mf*4U2Lv6?))>hCh{7 zMzw-!>YHuPuXxAZ)LX?Dl%q|C<1$%22oI#=-}IZtIJ1Zqmgkoxu@)db@*_8@aav)w z_~()G;+;n;D2~D#lAgIor=HPD^I*hKr1G!H+=C$Cj9(9p$(wa{b;9Sqi)i5}a9pIX-CgjV$IKyyHl=VD-cQ;vYJ-v$N{C|D; z`|d7}8V)UWE=8pkM7E~0Cb{P&3OUJjoNtfhxa0Nmud6Yf&XPw1gd2t~IU46EDlv^ZOB=+HG_UaX!9O5g~Q>yT#JkF#_qVb zE;B3Rj0sq-M+Uo+vfB%ck%?|(ACsnsR~XdRGm8w@kKfCl%cbD?-voSX%1#bXKa21j zuzo<-=NxUB@|^6-9egUBzORd?V0CYu3_V$WytJ%>Qy-0fxC7(|D{;3MVObY15EU$=ecqJj2 zarLl%mOPgnioJ2475se8xbB~UZSquAr ztHYG>W?dQg3Dan%M2k8rY7HBX_b$KjR|_4-rTmnV--Z5WZ#m&9wQ@q&6^n$)C#Yn{ zkBoTJ6=)zjzmFAf#-=}dZeBB_=Uzp!!1!qMT6vtklu(Dq7?YXf+L@y}CWT706msq) z+g`_vFqlZ~lb{j_!BN|)PLU8+7m@8+1`N|=X$?3j97#z{L&k_YDz3V9^PiYFJRopw z7c*e_^?ww6j>{v}UwJvvUAQx{>`{{SAnMJ*9E87;46*I`Fj1rdI|#X6Q6f9;zj*XoW&5%l%-Z>Z6-owx`23-w*jjv|w?g#8ow6*HGR`hW!C}TYe`pi_@lyUhjD{U;h9}6-|35*Foyw6?>$pq==e&KL~|%Uq$H(q-(iV|Ens1CjsOh45^&ta6F&N~Ei=k>l;wI8f6%>$quLh;cY(d!Luw*=qrq3gL zHf~VS6@4_*r`gHz3_BxfL?1xE#IfsCQjp_h0s3aqNAk;{4v%`CI+IyFY(^rT6~;8&6;E>Ja)OEFsrl;zS0^x7WJ$A$?QZxWE20&Gzo7ioN@%PcQvz2fx2$W{1^R z(KYHQuXG<^iLd^MHmaVQbs)d^4(aLsC&N_LH1+B*_WPZddjA0Gi%F_#zg>MgirAtm z?t%%fh>P|$s(PlnC#Ub~Q7@`Sbv-mxQhl-Pot0G+*I!PbT@$S3v2eyRB0IQKT@h5V zJTu{s%j~B#j17?ClHuainL_(`?MNk;jYW-+WHA~>G;v6xu8ooxqN4RTlI?g;lm0(s z)cFOTF_Q7WC{bS5NnuyPVUOfkopOuG%J;w)gDy61tA9$Y@RgoCxTl57~caXUg z;-$aE%$=;t>WFx&kZT}6lQjaZsJ_cCQ*w%x=AvW)Ad#Uc;$n<1az##|a*jX1S+B@z zX*r%Pg2Ll|F^d_zk+8_zwI#@$cxZ2yH6EisXjVczUgDyyN{fxv!5{xt%%% zGrW(QwTBJN=xBjH6>IbO#u!;licgBX+e&IENvdc_tH+#qmHz;yH!g6e8s;|XRhIKM zQ+JgeUmeyhHJ!bE)c6)ST@`cj>?FWyFrm2EZhaLOT?I&5b;kUwEtfn_8-7+*Th*6P z6cN^o>LsYJTrpwAycNYfr;YM6xgAzZmU909IMr~LKZoS>Y*tIh@v7-olc5dV%gUpb zEz*ZusBeY#avZ+>ZB?SBg2tUSG_Z)(ebd?@F1L<9PeIb&6R+jd>;n zXIxnCZ3oQ|dv8Gg6V<23QB)+=AAJ>3b@kV>{{2&~Z}}Hq805^e0LSateHe;Xj15JAP{{ZqA=f*?D-w-nIk~JAVOUKwt zPiOfBc29)kcG1{@l~p!$7Pio2U)D{JW%%bDciTam8AZnwk8UrH)^o07k{$j>T}vx9 z$9Tgkr^4`9cT$ns7}EYU|UQr*v*u>GkZI>H8HmPK~tOhDOKB6QB8D2RnZYue`i+HvD!h( zawv3`Q}K*Y?c?L4m}GIO56$H;R25FXLGq`~E-{nv z&m{Q0$dj;MX`hkfxy64F*0DDuD!g*Ok0iOSoi@ig#itW=xg~QeCDfX%Pi#Uo&=&E@ zf9c=yw~O-rbUt3AV=S(%z~tug8RC7K2L94w0k=BQ zRS=1(YKhqiMY3#_Q5AJm71LckHS3GGD;&aj+dJdgI1VS8bMv`CGyl0Om z{-9#CW7^>kIB>}#xZ@Tq_a*Wmg*O9mr0!)-LddBze2SVrcf~XD3K!~d+LtabLCdLD zFRL?IfQU^4jDomnwRRGsbt_a&G>m#DWz$#DQ5946Y5kpI{{S5-_=_LqTvC$>#&VC4 zH)C~u2R7r`8J)4%M}>;Us#j_(CgZ$#<2G_)Sc7f9CS-Q}?E!Z`n62|nEXU*YEP{s` zw8*&bn#(ZDG5mupNi0*)<(zvBsM%gGbR^L%nDb+>O$s3n@Ki3a{{V%RG(2+m$KFQx z%U91hj&kKS{C-uqooB|fGuozIp8dGfMW=n{3|2b9^MeVoPkyD+umsa;awM=WyyuOO zS6)RIA8}J_Y=XO~7K^lXU#DEX@cimI6Nx!ziEl3=)>iVpJ6PP#SI6-R!jqrmSe<9{ zp2vSpG$l2N)@F`b(K^kPawg2%3wC&a55oAPI-utehYK#G#s`#e9QS~tu0YR<@iSN4 zjfnDF&PRmv4Z$ZGp39FogusA`@{~Rf#d)g~dxgllOhgr(Y626!7O4U|gqV&$Tcvxjmeo z%Kn=F01T+Q$mhkQ$#L7dN1csb5{nGSt?lQtHYAp$i%kyZkhd;B@UGs2j%08HR@`-k z@((arOudcBcn2WoF~-JA@qPYRTNS!q`IU@wXsGauBy7CCq>O4 zEoSiF#2Ak9#n%<_{oST{a9GDL%f<2P>)gJ_9I3g1BI1HpBU_SIH!Y`RJrVb$svtsKR$ZO%+J6`O{TX?$1of)Zc++>V@h1SSdx-Udq zv{H)y0NbG|k~aG!iVB*FDr@MzzfPv!**Z^Ia1|h9#$>sYfOkw!Vs`uU6r%zin%&r}1|wO)u`+h&{T5 zs=93^gqOakfb*^E>GywUr%np}Bec5xe%D+T?w{M!KA&uc(@hi6CF$SysxS6*fBI3i zU3AqvQWaCv_n%s8_WAbz0RI3+-`TIPQrFXSQOD6eN};M?5nR*d#bOAwAbjnpA}s_SH7JV zx_#3osOY-tC=H4d`shphJL%IqcA^W>w`;rj1~_VhgZ@27>!N9{y*;Y0c3Mu!^eFN5M-o9oRF+AxOZZj95miRu@YtV^a8MksR)AYx>YS6ySKl=L zbaDMfjWO2J{GF-enYVu_b7-wcqKg|EsIE$Dr6!$&Y)Ay_c}iz*~CnB+B;8iMG#qCtvAJ zS@I_|;#|L#YO~Li`Sfg;g5SlZa}G2)Uhq-5 zZTrSuHOhWOT$jjfuav1O=GRtymOqx1w6-{vNn6*}m04kT1uL1eNDZ@S{7De2Y#C+1 zn6HSVEW5knRgOV#Z;)SD@Wwqd+Vc9&b=BRRi59s7<08h|$@w#<$VQz&-szESL``%= z>J}yO2jLDK@)L|FV3bm4a$Zf8%B&^I?qu0Fk>SqOMa%KE8p>vwjHKy;gNW*?n(fg( zIamDO_|1fH3>rM^E}g^!h}%DM_Ggp2&NmM3w#ejW`D%=6_S=T7DkNlc+$y0GdPsSn zg+CH&r<7>$nr7;U?*750_q8yuam5bNLnFhZH_*s%y zV-j1BV9BGm^p#}IG^j$7yULi$;P>*_F2*`$l^+-WSz@0avu-7UL6ztBQ$8GE7@e%V zBKsw-qP4~=uj}H-${Cqz^*XUKx>~^kN;c!7qWHj{e`|V=VqHGJ zUZ8wBq{DMc4kh6#YJnGkYDYu7OU?#ke?BEwyDG^H^d? zA-zlP-m08&&zvTgVZ}Mr8O&jUkmBxP7V+R>my@wMagP);G^Vd&ZBu~^8zo@kpc7gG zq9OYK01UMHf7JSV_wCc``%RDR{uh(>CrGKPDEptgT@@7`HAPR^qOWeb0|TqdEpSVG z_XNstnvDL7df(s{xm5(JYW(7d#{5@G>lc?SW=27EqE}i?3|Hoe0KqJZ{pr5U{wo zhan$1581G;I6j2yjYL}q+Gfqj^~ouiMP(_d?mZT$XUWnu56VewBl+B46CO_?{h+;m zwfSGiSqB?(*E&>uqn|Ga$tea*{Cc=JbC5Ai9I6>je$yyNjfG`djfSnHDirQpJ3Kya@6#8%#hlPE<9~iNQ6{!>3Cc`de1kH zjakXUD{~2xAYt|yqz` z7hFTY-zu@+iO}bK!=cW&%7dEtw~TSAJfmsEap7lmd{qv9eHGZYaGS(3w;{`RrbA8y zf)Z)PAliYr)nkgJj$Ft{*LOo>ESt9 zgDO)(4!C62)D#Z0pUnL4=e|?GzB=IrQOO@3IirNBc=3xDbC~uxt^qEV!X80sI=aIE zw5InH8kWm4LDUw}2^=yQvK($il#b9#7|_wLdpO&#HApqXA?70fO372fAIxCNKH#a4 zj-;6n$((oNb;G|Y`4<-X0Skh72a*jjWv9k5JR>9Hs*1=Xa4=)!L&g;tyrObDE<}%i zZ5lu|C>wXn*ZRibUn{s}GjElACwYMKS0nQixx-f+fjg42oax$T=;6HJw_hz@dJLh|z_&jgv-i=U8JHbhFzS0mTC+=v@ zS;DsMo7!G5Cu~mVyx{#pOWA`p5$VE>mmQJsSAPr7x3PgI)OG&i(ob>q{+u`M9d)r- zSl^)rr>TzHrjwXgD%Vts3Q@Ow$TX#NEo+0bW77{}HKJ1iVty@S`vTky>OJTW?GLu> zOcqr1j%IcHj&bdnmipqh_+A+%!b}PpCLmi+3g;Hh4V~!N*%@q*Pe$boK4`2R&_JOw zxuohH`$1$Rr*NQdUw3Lm(a=_CVQBAZfn6K*LiM}B8zfC--_1`^icQMJYF5Q$#q6lc zq39Q1od-=PQUo=DzKkQ5AA>iixV(iHT0W7mRn(idb(qv4&0|oikt#)iXd7%u{aU>& zD1L3H1FZ6ij*}SlHWdaTms0?jm!S%}(Gl*erH6^*)360*ak^R1v1G3C-dvi4g6x%5 z=fe2+r1>y8p;Hull&5X`68 zX1qpHmXnis2H-*iYQb)-1OZuC)|Nc(JZGy)5hP0KFBs89Ta?tSa>8<2K&TNV5T<^|Zr~}}vF5Yy z>t}4jcI0tpdJPxkzy|KJ7B1LhQh1TW4?zotgS%8-yRwGF_ zsSG*yNtk3=P_K_aDOe&6X#t6rKp^%i!u7d4W{o5k%gdHX{7Hf2AKtAX(E#_$dqZKY z*k9NSxO-fa^6_>%Y32%aZM7(0zp|NwF0?lWprgueaq^mu&@~EWLHRq1YaT^nRkbH) zy)cM!3fR|E!(?SHY!)=bfpx@DWxs9iwSnNkmLd>#(wmDN<0(kZX^j|<0;zm@;r6FEYeEgXnJ1FaeE zZJYPAk1->pubM3=PH}-i;vd=)I}8d<2`WLSI_%~JJ6P@Psw1$)d5m5QmC~fn1o$v3-5Ko^YEtB(vj)*oK9tPF3 z82PP)ZpgS(4;S+0pOq26yCtzWdWq4z>k(Ta+F{_{q0Obi>XFS;rKjNSw8~HFo=leS zPy%-!^KmbwWfFh<6xV)t;%F%Ht>5~AZTDFLEc5#Hv;{Ux#2BD%>FPxr{70)d`OxnR z=SWc<#nhz(ZfOXqp#IX&1=>(YoG2as%0!SY?O4|3I__x;t6yT@e|y3YM;@2+#XR z3R*Z=lDJto9Vht8kv3-dbfOvdJuN}s%tL6h$-H3EWy~zeMMV&rHxa%=pvH7&eM1lQM7e%M^`EA31HEE4FX5G#~nTGPZb_1ozSE+tsNCT1l)BLqnr}KLqc2zI+uY~yOm2I_G-8sH)S#5KvMIJYoF_?;>58>X z4K}A!yk?ylGZPC{iJi$|Eh5-wsWS{{RFXFh2fOcY4@dJ@e%*RUFrf1KM%Vq9&R0%e z1y1(5;Vh-pT!%1LGUv!pPhzgW!*qV=ZMqMHQ}r70A2o6oAVw~h%`SrDWWMB9!RXO( z+wVH3%{gj5ZE+3s!w{v<6mz7Q0MO<-x41^a-`E`PTU^WB&mpNU-ybe-y$BW?scb}8 z+E?MsR_%bvXq6-IP_6?AYVZT&(|c~n=HQ=Boc%eo`E%&foUCI#dg1LzMX|oQM;fMT zDD?g3|ImrEK{NH!Ptrp1XFA#}Isi*n;5E5#$ukG9OrYm9dVN)^q88DuNx~+*!`v!Y!7_Pm`>*Db{ zzGY9=Jf{G|VJ@dMb`de=(4sF=#YK}CCa}oaXgcwh^l}oSjU4pSHi|P4^@1{XL$8Ha zQ>m{`h3bD#D9&uU46}kZFTeL}=^L6P86*F~o zl6XPQu*Ac)nkw2CVU0GVHi4z^;qO)}@5esWgpheH^gCLOoYZ=IeSqunQR#JP*VDP? zgYv$g_h{30s(e};5m|P{59thQ+PiZ2K&SIel(Tv6XJ-hb9C;BAK=qo9#`6tW7N?S*|m{=t+=W#>5adR!+M=I0v)rHWU1^~t3rD(fp-{r*_$ zfQK*p2!HBg#&|+rE?`)C^|A2dyNzZ7?a(u6W@|^C4t|pDPxJSQ8|LC5VGC4(Bo+6f z%L@g>MlwetrD)mHsfVO9e#u+ge)7cfHqw}Soi>Ih0W|``vvKk5)t~e$m(;I;m9$k$ z%HcnT6&R)Vx`A+2dJ!@Ed&~I4R;mg89I9Vtcu}G(%?%mGzh9$NzqQFk5lh^tjAmgl zlYbIIyvh0k-p_hl*{~t9E0P$#Quf)^B_#wViaCyWQHSY{SG8`UYx39b{PMPa)O7Vs z01rKRU$ehFNaELxqq}f6V&5?qIOyfN4zoNV@(||xc=H2f-aMm{t*mg>T;5*1{aWGd znF(MgknR10qB%yV-y!0cA3W4dV|n4n=gdht)3#$ur_XrHB3rBcVSn`Aeimiq4&x&@ z{`+Wzzf9)!HOs+E@nrqPueUb;-=k#kI9x9=Xw$B&N&;YtkdH3dmm6q1hU4e$%CP1R zz2_QF?o9if_~*4G!^{hQ`D#6-p-PrV(HAKkCK53mT@LIVeJWYhq z-HUW}kd5-3Jw8FY)B7<0-Fy?(L^R_#6(KbIb5<#b)q3yGPE~b&L6cg&JMqb^dp*A7 z^yI0PPN3#8^9K*klGT{Fq6G(`OB2A}?7_|cA3DXHvpUig=V#u@W-3ev4D;X*CFR?* zj*&(k2)8-ZoVU=R109^U*z?5*gHyjiAE|8BBt{tm5i;srsEUVJ{hiw!eMgro@B0TO zF@A@dlW}BT%rHJ!Z_(PM*#=9$Q2|kZbRU`iMn?BiN$-tWF*Po+`)WkX^(7tKAF6+L zQ-gJ1dL19ekYRXwiIJZcH-{OFzxD#^otFD> zRG?346B)>Oc{gfyyt8!DUA6Glh&9wU=(%Ys7ZUBEQd^Pn&g+&sZ?48^$T3Hyic z$^(Lqfi~EX!>RHewyO;%cl{Af-f8&{c(v@ji;oa711-lzT;e${+k;!6eTMqTDOj6zk9nV8sP84BI0hgn&GuVAJ= zqddrUYR&XvivxZPN=1u0iyr_uyVViqHaioqq_nG9yGFW%U4$#+2}&A^+@4eP zoZcG@3sSpl)+rh}#!nG=6SqloYcD6SiaWM%%5(j;6Ma1{u&~Z5V}fPirNNYaI1lAS0Y;QcuE; z#=wB(eVGBFyAgKbAm(-T(0rd%T2q+4a?`9MFTRj&jExf;El-DyMICeVOgEFEyTMaj zRx;p$z*fA#?@CgFExNz_7FOb=AcL^L0B_uWxaZ_(hWIUbFv{IAe@9!OH$DIBO_EZJ zhQxj7W~6;{G%B0GK`?mM3=qs4BDV+x8lSjb#P&1xW(~*CyQ%6n{~;mUVkIFv?=40$pKjGCa31+JVY_pvhz~ z|Ep*nmY%v`T~_gf$uWtSjtaJREIp{(Z6}i zjgbHL49AKIzR(+q8c-JgYZfBF*c&-+MkM&-IXI{=5&>Y>f1F9Fxo+OSyShVaAl>fG zYicltE>ix1ga7h8P5zY>!8DMoEZNBGOR|pLQoJ2CVc23|I>)z z)3((_c93t{uUmhcu^xe9wGK5vI#n(~7C9&IQT2Ln@%qfV=#z(`D*FjWYx_>QK4WA~ z(A)g!t~_2lzw)jnG+EE)?4?mnsz=XE1)nWnmD-2MSHc&w#^vIq%$1vm8OZ{swhT-o zxS{ige_9c>TRqA*$4ZWqjtU_9qPoOvB>^1xDio{&N1~kNUTlNwbAQkOIy75cNvB|W zb}+++fh4Nc)jMBvN;tHiRkvrj?}LYUd(X_b;aULYj?~uDQfatfou6v`8Le}lEq#Zu z>?*_l$Xpt+W+!El_c9MRQFv16{rbYKB7cT8?24-t-i$ z*APE8A*Z0Z#QBW7>CY>dSlEIlHE``Hj0^}eJdBLp5?W+X;%2JlmZ(@Q`FqU2X+P5^ zp+HfP!7gQ0!#Z}vBtiIG()dj5Ts8<;nC<@2;&b|Br@&6MMMq@}Z+t}^9T_J@CRmXj z#v%7oRu*?PIw!`+hx?`J#%Z;#X(n^w(7~bL@7Nc$eb9;=y6mBK#fV$mFmjCMJy{w| zsb;VtSgp}?YdnD|`%o!fY)1(7{LvJ`9w1SPtVaV>ZMjNJ(UIuLJSlTf|3?Aky_9G@ zp1sS;9sGLT(@yFP7ej^BrWdx&!FRd6O2B|q>5(MMks$TfRZ%LZ3%5h{Y-dMbnA1;5 zF#c+(2pBb-T;Hn+)|_?&sU?2I-zetlKsFC&O@*hPG(6aL?Y*-9S+qsdb}slyQC70} z=SH)IQO)c2f8*5(r}spCr@o&EWXi)#CMh1`7(N}gLn{p)M5f zkINOklz|0n;lWYSW?Ijk=oSWI2*UO-6j)yp=J%CcP^(3a6j{D=ly5z7HJi6MU3+@p zwE80+(T;z$JMHpauZ%8=wb3ITOUTtrbci1EmdhMXSHW=(G0OIr&c5FNTKTzLyw26R z+x&x6Gy6-OryFD;?k0hphBkC2jS)rxF&ORXJ=W*(#lf@gORuS>+v8=GK!zzYF=V~4 z=RYE0l+B$Q!I#pG@%4Km<1K+UNQ|7 zn!YWSb0KC{4H;8(aF27Om!(0NUABh|dtU0P2sJUjeg zQgpS~v4^d@DJd#v+p+$KZ8D=q0BFG8C124uuE5?P2_K(quE3TBla+(nor<#gotndY zC>G2!ce$?$0FgRG7Oin%bE-$d%!^7^&I9yUA z$^}o2>ds{4gZpMB*mPinCnQYhko;&jG_Q$Kc_ zCc)*&Nl@0^r0IKiu=m3n(LMDA%aeW!o0ba5lR$B`D@pH0W7QCWDmNf#!N}*U;(r~F zIj`U*Z#^$A)ri3l>-NXMiz`y7qJA&;0iG=;)|fJWBExwwf8{9*Kk<%v{~p%7AI<&UVZ}_Rv6| za&YB53@=Sdj-1p8=1+QcaYmjCg?OhyA<6pqjXTjD%=xH_dkLE;Z;<4h*41x#I|m!* zq46E4$W%A*at#7)cd_>^BNZ-^v+ViR_Ar%Vu<@s2l7auwkAU_B9ij{#bM-cIEVX-B zPt|3T0r#{uIWru8Cm4+gTOx%`OZaOi{+9m6>XB=GR{CB!HaH_4O2H0__wRU`zpVk> z=UzOa|ElPitoJtbm_0H3w8!dI zABsOLSXjObvuS<{*J5Fn0~)~*j_kvRFWQ-V`Xsrox8A%1rfKDa$8WiI>e~cMq&fUo zK9?@2kMI4^(NX+$cNMv&LNwAaQp1)Lwz)b$DUhoTV3I0F6EoSiv)8~THnZGf%^2xq z0GNlsEyLa@GyHdB*Uhb1+6gZW;!UEZXd$|K%lMyOUD6l7eg?^H=F>A<=T9FfOXL5G zg8gu>Y{_Dua3k#g1___jt^@4VsQ0%_iR;vxR;Z_LZcp)wmQuH0f3eN#Z;0Nt7g_dj zf~RRWW7l^h%&xQ`d{op#ZEkv9st;E`@RIPj1t!#phZ+1L78F;UcJtDF#GA!&$!h5Vc2w3WMNv#yZ$%>hN>>j&ZHB3!%JwGGe`)M$VICV*Bm@a< z@h_hdc|C&>ioSc+A+mF$KF%xAh@2;bfC}iTWBPoSZq-?V_77+v;D2rQ^hBgQOVyd z?cNMj(E{;@u{-lMG>mr+j3!HSziDGjTgaC<2&)bf25@v}p=?E}(dX9wm&f{)7@>Wh zbio|vT6U3OGS(vZ$7fQ910S z`hCKPTioRQc-!PEY*-!&2$diPpxGCY)6A=ah%@o6fZ%zy$O}!A)+v%BrqhG6c5H`3 zf78R6K|m~oS@)cVRU!7%u{(?G7bq(jZUljsqXy$%Nyxp8QE57AFK*hw5UR{iif~(J z@2#M%=o`yjN>cQ(^r)8*F17(F9*r=7;T5=xHfgB!W32 z*3}WpfAK#q4avLL$KzO&d}LEc*Z&s3r-bc)(gfMOW^BzDjz@Q}SjSs~?T@-!G)MpY z&_(&JQ7eI{lem2BXXKVgmRl3(uEs&)nqkpzrEy^($NkL5>*43S$CWSYJjPf?fvK>F ze&!|jo6J_gyZA;K5(>G%-QN+Zpb-TU)$`-Lu zng!$kJ?SV-V3!qX0Ip@tSKY!@0GAo=5% zi<*kco47N{Q5P4O35|a@(O(R%g?U{TO(Xm2lzCDma;PfOi6B|c=FkQURRU|XRd2sZ zG<@n}8H>$sz%qoVxm?6ZHb-k{3Eq66t}HOng;>#utY#21Op~c~7jOAp_7>*9d_{1M zkqtGrN&-P#;|3yQ&~)S>FF@WAIL zfNkX*Oqoo`y#<%JbmSd?k#FysAE@;x3z=M)AD|j=#|?v97%fD z#IE4qO$FLCXp=|qIFLK7n8yb{;o3vk7PPcLB=w3vQn+TC5_a54*}h|cJ+`TF z`{ErlIkO3f4@2j(|0V?k6awDyYe?CQE;UAA^p*M)1M~iK_@^&~`BNwv*U5N+RR?+9 zcBjt#^LkqOvIyoMB22p!;|8!q#=J9N`gi}1hy;*&HgG^7sxoJS^8@>fVZ2C8-Ti77 z?~08^wommXZ$SHn4M{jRIELUMsJO=fTV^9qGBPlKX|uKhck-lcag3#obD}S^coQuZ zpyH`ONUVoDySQ18X5v5~kqH{ddu@E?F31s0m;Z!2)Bd#==PSJ&39)oy${P#L{@3m{ z^MWZVzN`@8wf!j-qO)f7ifteT9WZb*TabW4hSY^aWhhl(`c+5%q%E6;LlC+DJ@HiM zRK*szufsfLShC4Z1(m~E=Wt1liz+9AtAfN%e}Gn6RYA3buW*x+ow8pSxE5BgSLcZd z{26J~S@jRmm+-A9dRbsS*_`Wv>pKxl!iQE>ev&t;T^>3AA%!clwlZ}Q(?o2!Tf=zo z{nh@GViXQO7UAH&n625`yc8f-^!VL6CeP<*jOvmzNF%}{es`F zmRy{^-lm+?r@oBTmb&mxAG^pLWaO=OWFHDN=cqak{u+)4;MhlDL(WJy<0QcB97yZ) z+tKJuz?aR$J;s#q-gX3+On-+)jXZ-kgpvg>y451CsPU{Y=%5f`b1_@49Mz`M{3;;t zp*kTDws4H4f`PJSTI$8H8vreCeKo}iN+v%eHx2w@!YAFuK;Vz!P`<6(qOUt-;>kqS&g4D9mQlv?Sdo#_Bj)cnrZ3dTqEh7v$ zW31X2h*UNJ3F|3bML*dEa{}<2n7B7;OdVWz^kk*zF=Nd`(Z9KVlt9P7WlGkdE zP4IT}mPMaDjIYE8L^{YrS3B=7#v1}S)_i?DX5^*+8=-scRzT=6 zS+A6Ob5x&ES8Rmqo4uRgX|!>@PR!3+C9nqurir`}cDeAXPX_s^QE7#L%%vi#^TEyW ziDGN7j@ga*q1bw(G|~{xIV|#8M*OrmK1dK<6*9KNhIbQxw{8Sk(`kX!Mn~+<5G#-5!_;^Pf1LzVXJXxk{?h!9 znfsN`VIneTMUCf<*=R&EKKk;tT_beocEDj2zv*;9dmm+DO+PTQyQMjr<|_xji<@oN`3Z zF=##3?D|FRgV0mO9~r=lJsR>%u>CaQltOHAUIui{?5w_`MPm(V!g#J!D3PA_vAb7n zO}Hyr-r{LPT;if`6CJgq9G99!U}nB3h3dNk5=FaOHckDagQ}5X9;W{rrkh682B*838 zK88pBOI(d3o1CzM@;2*2!E zGCemZNH&c@1iYCBV9Cv|YgvvyaJtP*{PUw%lpXCkTdkBOL*149>+ImKp5T-q*~~{m z$JPhmv~4Xi@0t4yd6Vi++W*WvJBo*_X($@Lr%Q5g`$7CBL>X!QVWc-v!m}l8bveCq z9`ej4HQ3OSBZ8-XLK$Ok{FEjS$00}W#?`KG# zn8i)HkYT3R5vsY571sgl>ba1i-3!@tpHf3@FfmpN$$SyB=5|tZ-|lBnSZaD1QydtC zc9{LS61t4wA#?s7j4Hl|XoKB%X=yl0_Ppiv@WmoG#J8P2yux2!NNIzGFyunBMT%U; zPbpzAa}1RTfYG+S!X*?(+ZJ7eaN7@aKtzK`K=`*gQ1YE72*mvOYni+q+VXI`l zIg<~-?eK48e!wlr{XUA+dOsU&o2Rr+u_V%hXGm_V)wNy;0u9Dp4aD>toSowZVtzzbq3ISU73XFSw(fJ?xDqR zoLr36Nj&l(oB1wbE%T)~i~wAQ!lY5xRWIjc=0jcCZAg!`D!=!0v+CcNa&hvXk_o`% z`=$wS*J#~-WPIuEy- zrsGA`Z$v1#Q*PFD1$JXi><1!K>Cp`F%x=yL>0+2%5Fu?xJa6GKc|$nmN}7`6@`on2 zHrXy{IAbKJCbK!ZL^)5Ptb5YMN3w;Y=@ivAUdyHSBtj_Hj5X(!{{u~%14bo)xsU|6 z__;_FDGYSL@{KlC%>K`&)-%Lj`NO|{=bXxx6cXG&B=9}2Rz{^gAO{imhI8&1N)$CF0=sDy zb-5_Ctm64zFx(sdlB;9?W)z@SkE-Hr7^)~$a!8MjY^I4H1d9TYaw+;)0Wx8rb@9?` zC_@5f!smP=vE|)2>%6AnoU}x75xug z@6-Mv@}e0#{G|mMcE|DpNFiKY*fXu0q;wgF;>aj^c*Ie}p{}CIb%=}_#Jd_6sVG<` zCz4dQ>T=3TF498?HX1nU^7WJdmP9&kyhZwlPU>nohvK6zB~_B$YiP7i!qTD;qJmuk zpb63@C9XAV_!Bt5o>$e?R+7H*a2^a#)}5D_@b0BN({UlOfA80fQN4U?12`V&dbcMxFJ@*~^a5qNn7kbw_jW5fTZA{x z^<8JiKAuOeoH0o}cnRQr7T-#}6(tUqqcnW>UcM$iP%PkG@%;4R&q|zI(jk@<>TeZi zxz7oMax8Q$|FWJ{*cvpF0girjViS75|9L%wkAL{O#ZN0$V(=m51zo~fhO4_Hu=x|I z`UaxJS4nCrUteeXfw9nrw<$)HGY)0E*fVsa z=@QD>;!>*HbNh72c>Y5Zf2x|L*VdNHgh5Rjb&tycxr3(XtG8SvLnCGnbvJE*s8;fp z*Q+gO1kv-~xnil98eF!=h~=50*k+($7(@sIk%%&Pn#!exJo`Gm&jfDVQ5TIMaWAcm zoW$rTcps*MZs+600R86IV!&*lONQW+?UzICz8&yGRWxEe@1{#QE@-~r@<1!T*J7;u zY~GE%1$9WSVdUcoRQLE*F0fHY@(H(~ zKbrE}sx`LtePIu|*_2xwWcg$3hC>*LGHa)1q@XOGlSmC{<{97n1kQ}sk`P`<5ZKIV>X!qk%bV_e$i$0vj zy~#wL1OmM{2t?GsFuxzoQYYbe0zuW=f=MUKA2V;gGj)UFe`8{&@_A7tyD^*e^F|nA ze_uBs@4JK}S(5umNw%%IX|g2BgUf>$1MeiZ!y{K!sp2N`zLEEaWkr$uM$>*Zs$?2J zu|uquL!@6JnWin)s(eC=_5Nw@^wrOh*Y4)W%tdz3%usfXaEmX7I9^GfG)b>JloqZo zCW{#FV+&$izwjr^2M25Md(8wD&_mowm6)x&?^I?B%pKmvK}56J&hCy)G-04S_ZZdX zSLN~Cw<Jp@5#?hq_IdO#=U;y3*UdOx zrO<%@XlHT!tb&J&ksWOfs)RDf8xJ$+{@FG_PF@R!{oX>WAX$MLoqLYWB`A(|#xZ0n zUUYd`NvEqgosUXj`J=hZgluxUP}1g&OT0*P`XT$Ki~(_jv%1+^Z20PdONxV+>?KV5 zSlPAiPwF%&ghlz5$h9mo+h2I0Qo2b%PthYQpYrJwqNbmMXW8k^kwa7PW2lkPEDUyc zd1gGCU7o-8(`rK3G?h8;4vP!`xvQ9ZtX=cH8QgmkK0{G9~@}xjUU29Aahn8-mnYs|guPX0&}1?;a2PcfVpxv+i`rYMXV(%M5@en;!{?}?0o0_9YM(Td zYy1XF{NX7M$|5H>tEr_iZUGdJyPTX1mU`1he`LFoW$%^fo>?pkUsl64wOo!E#2I+a z!w(hEL(IRYpmXXj!<4I|rnt8XOEWA$V7Aty*H<61JzOr;rX=%Pr3r8d+bUB;v|!qF zT-od`p}iAyH8KocF;{e+P!Qgj)6@KzA{aN^qRzip=VJhmj=5B`Mr zd+c`w6asr6%&H>|P0s&((3qrVjZu;|VLTJcB7#Y8!Rq2E)SMn+QN~h+c1H2s3TQ3_ zzgCS*Rc?>y`Ddky9ItieGkpE2@?iGE3acfeUt?*{@Uysi#4J`MGi=!^=B~}o*#(DF zY#&rSYUH-!Wuy3J?Ab6V*TZ)SNkR|TzZH#QTQ{;qWNf+E9dlKv3z$_b_q41=mFoTK zPJJvI&eSp(U*8fh)&B(lC#Ihh+MZnQd9b3Glh%Txzg%mWLe?D z=gL89yp0kzXJ=LbSVlKihZ#XvM)8u0BHKgfARQDWQr68cIGb=opF&rfglu^ZMKgFi z`@4>)^9Sy&h_+ez-73M2-gSxbt?25E)lj=8U-Tu5xr+&Vy{rOjaf~kcWUXbT&6{SP z#pYrz1?~-Pki5<#21Y(xmD0MNZZ$|jXR0Up(vZ~@J~56h=H@d-u6D+A`yBn0OcDif zy=?#eFx6*gS1u!EyCX&Ss!2zWQ$$DcTvisRys;TSVA8it)PK;UX`yN;ft8z$Pi(a` zLZB#xLX|uDaxE~rE*}bxmCl-fHP++5r@C`?I`S78~gRK#K zNj4o&j7GQRKCOV*ShoCVcrxq9bTZ+;wv!jc56~<@UD<#ExT_fN{xY5&8c|kCJ)uMx zKYJt=FY;&tti#Yw_r`AE0Bp8lV2DiED`6v{1th~qN&F-_D4htGYp#}WN8$r-d+lb+ zmVlhhrkoK19fJ(0_|i1w#k8Q;Jg~o=G4k-4nBMlYSWnlMxCj#)K}Ru4BB6PyrAd@6 z+pP+;887W9c5JU_4Bxm~nQk#$?Gmbgd;03wXqgdRU4BplF8=N^%*JLvgewi(d!cM>~J>Y(I7tDDBs+{)

I||WR;TcVetL? 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 z%0D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 MqH-eDLcat4AO2zCpa1{> literal 0 HcmV?d00001 diff --git a/assets/images/20220531140815_849.png b/assets/images/20220531140815_849.png new file mode 100644 index 0000000000000000000000000000000000000000..2909bb6d09cd5cd5531c127f13c3b92a11c69d6f GIT binary patch literal 8250 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

d3o`IF-Sw-dQ%i}xPa2vp}ji97LXx*%Qb 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 b-?k5WrI0g<{+t`-Fu^c&AwwkYH|Bo;azoIl literal 0 HcmV?d00001 diff --git a/assets/images/bj33.jpg b/assets/images/bj33.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d89199410a42240a15e71df6897ee4e245ed602 GIT binary patch literal 133836 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 literal 0 HcmV?d00001 diff --git a/assets/images/date.png b/assets/images/date.png new file mode 100644 index 0000000000000000000000000000000000000000..12447f0000b1c64ca8ca9806a31939d6fbab55f8 GIT binary patch literal 1135 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 z zMQiDj>xjpcW79d&X2+tSJZ2r8Wos41n=#%VRxAFnIUTOvA*z@zdrw3h{TgJ~Ko0 zn{mULUpcDqZiu+me&;>W+2A4<0-~xezC)fuPFOp zQ1hMq$G4Y%UL*eaAX7a=$87#np;fsjjmt4{r%3Mn?X)!pDO#qfcp^g`^PUxF&~nWm+8cS+l3F-xzMC-<>qDC_E~yFVIM z1u5a9$~(62R_$wTBk3;w`*H4zBfh%OVi>Hz4Upk|9cCm*$V$OY^N&a*0UYjXOQE?N z1`WyQ2>zd5tNO-og115oO>va~^jRwt83HmdO?PaRwcH!$%T{W@df?#VI5#IoH_#*p zszugAupb9naHPWT`hBIwFchQ-@Cn zEi0q0z^X_4`Gt461h&P|_JL43F~DZEB&7_fp@uQ9%`*_6!0h#C(cw^(j|;t!bI-IVz?745?Q`~&%lWs1tt+wI=ldK0(bZ8E1AKG2#A#m!y0>(eD zVXPaB3$hsgc+k&f1(#(u5Q*Cfehu{AsgkkDA zlG1|f$V>lyPW|UcL+?sp*J}Zb+UgU2Kn37d;abq6{(ScE1J*&E(lIj?UjM{sF z7f%r;s;YGT0O|+E*C8<_t&gIt-+@5h@Zb-cmG#Ogt0kA>=FA}}-v_v#g-sGt&(f5uP`7ww4*EC`d=~a;m(ZWai znFDGFs^ex2=RH=_!&|k^DQv~dk7cN13>Mib`0z<4rj$bjf#TuuelKz%BS0(M=ko@T z^g(kjbxv9gIe3bA`B>L;LyFJF2NT~`%L~p)p>um6#Ah(E*o4!TB1EpjukqpEaQvL}n305yV9I&@p2epjBr5z)W0TsraRawpFh zD$=y#Q9Z0yLO49w{W6+b(wy6MOR{i0w^b&F;4-Ms4Y#|nR9)f!rB!(O{($R!WL@%8 zl*FAZV8Mgku*U^Yh#YNtt}%dCu_48Y&O-!~xFCAV9}`=Y%Wg z;*3YGGlGNmoCtB}Oxh}0nOJC6FTVMmk!-*-AVSn565>K$zl=6yK$zw_^W+Wr zDEd#eF!^09>AS0vnQsoyX+Ze+%-(+w(l5LWebwg`Q9R@$j!2k4dX{(~fF02L>98YjM5a-6k= zzB^k>q=$6-W2&rD$WPZNowLk_u7|YeJK*R(P=NUAnZpM;VaxTh9~)cd&y!WUy4x-e zEN&2+>2zw$T4sU%huvp(cXk|rc0*p(;(RH0ATqBeZ^2kMDi)`qK|nvohKj+P#1&uO zyNo!^`v4(?xqjPi>W>7*34on*!nW{gZmjh&^V~S%B(aUYOp9ZbBNIT2+FuRodw+Ux z%Ji|~?b4cIuc=$Cd|WFF3mSbZReUKiwx#`@L{{3G)ES$H9)+1K{=;Yc{b#uDj^{zwp7QZ>6I`f^<%d9hfQLranWtNDAv`enz-wowgE|fAQzf3D6iD5 z4)%JtzA5PQ+Ml3MPIkJbx+&Ebp3DIraAk@I?7t^k`0`z#-^+~M6I0hZF35Mx{P`8U zL67e}hugE8rsU>JYCkw@SU=DcZl?kx?m}d~RzO;Z{q#%ek{D{}nv%M1*d}omjHMr! zS||=~6*`@EKEs)3I}YMj51EDY)PqktaM|F~TbQ<3U=Qcjoy1q^$c@DAXtlxP=>?wk zfV%7OgxK&Fp|vhr;yN?-vr_AERiEN%Qs|~Wb{&X)xy4g;en-_$c{Ktnypl1+Tg9l| zbh$X3v+g2X+&`fFeMPLbNKKC@_SnbwaZ$$dOiB98>kdbcDhSk-m!p#)vkB)5d))?4 zJ#LG%@EX)FqI0CPw7JvF=WBatd{r_dbW53hrqc~mDACKk$nO(GKX(iP;$O-?5q>kDw-0tdr$SB0P&+%4b!pOcl<5|y7;R)3i548vJ zV^tE*5&_i@XcwBwvCcA^*B>X1YSB+0;_~q^EQbNDmY!2VegAcv88~ECHTAZdzR&;m Q*S|5C7@EV&^qp?}F9no@l>h($ literal 0 HcmV?d00001 diff --git a/assets/images/jia1.png b/assets/images/jia1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a0f793913e63bd996d8e656a273320ea230d902 GIT binary patch literal 1033 zcmaJ=&ui0A9FH3e9orwU>EMyd*udsje{3%{j+(SvaVfK_w8y2%>l(J?#pKnd6E7-= zAVa~6vYQ@ML=e2_4qiOWlY-(w5D`3i5j+d?rE5D6*1*gA!RPb&{&=5vbEUXAJ~}zd zFwA&iNh{HLmX4XDBlK@(KCIGdg5;`X71v42@DY=>a1DWiW2~bRGOYH+wQ=FA zZf%&*Vi(SUOej+U2N45=&ZZm4p~7}_Wx9@zc@}gaWJ6&OlB((}K*c@+DJ~s1#l$?A zgPfRx^HTB@kOVQ!3y>F+aY2*?C<`L!ek_gVTXngl<-4)yPGK8_crwqoS}m@X;IO~W zix5Iyka$UoQ$##yyTl0NZV>A!Xecm!+aor1L8NHZaFZx3&GeuI$Lq_wLAOn`VSH$K zyvPYrNj;#h{~zi&eRM!d=rG@Z3J2x3hxif-aML&G#nod`C{I>>WDx9^G2ZNTaixI? z4jR}4sv31|4$M?+*TSt}w!_hNx!?xGa7|Ru6qc%Rwr$CYJe(8rLNb?5N}`xkvx#JS zJ_jY3P*X`Mo$7HlY&IR_k{;JO;rH=QhwV&hb75XgN1ua_+Ki7Wm?=K9G36dn; z9u9xKd&NBdQhivza<8#dd@{4n)?@u4X`pg@&aPek E1Fqpm`Tzg` literal 0 HcmV?d00001 diff --git a/assets/images/n2.png b/assets/images/n2.png new file mode 100644 index 0000000000000000000000000000000000000000..5953627d5db169633e3129719500f8764cdd006d GIT binary patch literal 970 zcmaJ=y>HV%9CfK0p-L4XSg06Iu2euGKA+Qs`c$_~?U-7^Axa}P6T-1Cjn&#`>??7r z4plcK!~i>gLMH|!hIT*#B>n+9b!T8>0HktGlazsA>3ko0@BKdR-Sb-Y!PMmRq#y`W z)~ZqG^8_E)FX#BbdHT`i(@j=svNhUfT_+|&*`qB2tiahIb>etCPd}3dK^UL)8%@@< zA7YmVl9OSiG>AA`5Ehow$ZG-R=F8?;?c2eN{rm z`GQis2NW3Y<^xMQ622&@3NRqRX z20+{XKQsu2=!DhDMZW(OP8vHAfpwD5?bziP*Ph8jMOcrC!)V-~bZgMXT8A>4bZ7*0 zz1KBxXWb7y+D-2EIJS+gFkw#U63fs;t|IxqhZUnxHq3HGF-s~!6;(y^rYX-=N{Wsu zg?TjK8r0nmNXQ0U?}BTN-n7%kdPW^R%p&fMwD z-RvX?t^tV_ON$Ra_9g9uAc6`aTB$!lv}#*l3?!{44fs+awooV(q-WM_(t_(e+&Sm+ zec$=+x#u45>)o}X>D?xT(1v`ET0p4bONepf>#&}`tDT157M2@e{d9<&o*Yr9n(U<2Amia~8&4>5dTyTC>$)fu?DF-jO7B*T`I=9aH~&tc0< zb9>^NsJU4(V)aaTq<^BfXiSV6vdMMsz^On10h=%#2lhe7SAsNG)m0!4w*?MYA#60w zy)ZSP_2De_2#)iKh#^T5PRhI#?`V(4+i+Br;({m(k{A&sMG}>$h*v%is(I#+Qc$~B zYC)FfMi_GyK`58Ye7T*c-moCavMh*EAsUSUBI1ubOb;TC-%?XhiEnt8%Pi{PP*ESG zC6?yE>5C)S?y9Wgue1poCIq@GNW2&xsRq=vS3_-k745SES@Zi+VZS);5}`nRTJj9I zxS^J?l&fStqBH6hDLq*0V&4d5)E}WP&StA!!|(609Fvy))+$HSl)U3J-7!dBO>>~a zTb8MGW!iIcEY=b2PRNp!lQXeIyBzCQvx$r<$C7f5t5Tz66NlBf<{DS7%MHiDcA>IL zJZp@Y-5#}Z_1KD4-%Fyd-U`>O?c5MqLC=6Fe7n0TCCk{-!2ctdq z_vv2{S{KQynPM>abpGm_H+H^LSybCfmDuEmmyY@~2a+3;?vZ zb!4_~KK%6?JKpksoxR$8C)>Dpx^w=-()8#3GxAL9?z;~@Xh3LTxwLP2*1gC7^uq+a zyq=|VJwG=6z78Jr7rP+e7{2XeVKmbM%Ws=t`J)k`O0XWGovGIVw++B+QSfnU+sO;l ze*x~RTT9<;KJib-w_)=0?QG*k_+Q)qeEfgZdKF$)>zRDHwEyv;=C+H8o3nHGr%r+3 t?k7*cRAuVVN9?^bM?P762-$(9wreOiwe`XC>(MU2pnR@ZJ=^u^r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_Ju}^8LqkIab4xu# zQww7wQym2(14C1N1515F16>0{D?ryA&s6|>+bR>c zTg-5p2i2Q`+b!le_38s1qYsK)q{xN|0aFl&2~WB}4m|Ov<^fZD5in_A)UL5+U|>x4 zba4!+xb^1FSudtQiH3*9kCv%TFxwo^DW>>7jLYY3cVvpX z2(0XW!`8IGNc^rti#^9#4!y;J8Xrt_cQtyPbG(;sKf8Z={<*}2p0f9`47WZQG6kqO zOkCj6pyW7_!L><=v5Uo(NrW>%MMFr!bK=iQwZA_dyt2T1Vzd6v^1Exd{^H?_5~-ZX zdt7)z{jO@3TrrzJXNps<@6Zg$`gfE*AWaR!w{QvymdKI;Vst00<4cg8%>k literal 0 HcmV?d00001 diff --git a/assets/images/sorth.png b/assets/images/sorth.png new file mode 100644 index 0000000000000000000000000000000000000000..df4bb373863037f4d61e3c821a7c181e0809da8c GIT binary patch literal 1441 zcmeAS@N?(olHy`uVBq!ia0vp^4}n;ZgAGXD8U}fi7AzZCsS=07?{;ELn2Bde0{8v^K*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-xUqS~&|m@vn0`fKfxe-h0mw@*g}%P{mFDKcRTq~8r6Sym)!^cg z%7Rq=pw#00(xPNw#HA^NtSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu09sGdR=~G{Q6U zQu51-HNkp(eXTt6ic1pnl2bihY?Xkf=w)W6SeZJRIJ%jbS{k{TSsEI;S~?m#Ik~wQ zT9}$SIXgSMIKlL~%^w@(RX--ik?! zTc;`s1xo*KY!Z(-8~>qgfuZrcb&|%MQ5^4lraW&-@iy#>PPikq`+y4065vD~YAY}>l-!{N6+o^WY-r7V-NWJi6P$+7ZnNsEjH)93HszAGTLr8WAp z^2YL#TA#RD;r{rU9RZasnyzIW!10+ME>CZradW$+UtjK~MIYLO zJ|AaJm-<}!?`)C7f8J$VwiQQ4)THk7=lFlPOhiDjLjV)6Nwb&V7g96dK;9?Q_qmmT zw|&<8@;49Pw@;tWbmp|6Sp5mH``iM*#FMra35l8C>@w7Jd2wEBi%e3UkW;Oqp1ttD icNaLmm>&C~cYq;oVnrR#{*)b{LetaL&t;ucLK6VUB?}G! literal 0 HcmV?d00001 diff --git a/assets/m/13.png b/assets/m/13.png new file mode 100644 index 0000000000000000000000000000000000000000..ff10bdd8664de0e77c5c60a9adabac2dc37a7e58 GIT binary patch literal 3233 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 T0WTQ800000NkvXXu0mjfc+o1y literal 0 HcmV?d00001 diff --git a/assets/m/a1.png b/assets/m/a1.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa5ba4195afbb61d2bc1fc67251414de598934c GIT binary patch literal 1090 zcmV-I1ikx-P)dr#M`iJMci zZ8{$|oowk=<^wXB!w04bE-es50zst2KUC_E`YR$btAC=DXe!en|4>8)9SV|>50$zZ ziL$9>duaJAOmphG-QM5&9Qtv(_nzze!V7lKIXmCq@BALl_e2wkL?nYK!#vDFIdT!z zxj%6e=Wzz#>F>UDH;jfP9*xy_5d+bNR{V-yB_D>7D8(2^jSiN{SG!%D0|mU?j% zmv9~T@CP0#`5+YO$xKDHe(%G_=>AUzOC0btHsA^lVg-tmTxVh^#}xga9rI9wO}L2N zm>T@w;EhILBRa7er704ck$4kLIDt=4hDmrr4OoK5s>!;%_WIM-iqYFcjgHGIc&VPdsumaEdH;U*$mS$mh$a;QV4UIa-e^#TH z>$k0dtIqiz-P^8NhHuY-RGXWcyI$dwJ%iK z^RLHGc+DU96c*r;Gp=2D6(yR*1-hn6%Pjc+Q7y|ho4heCc5C@XwJcc-S8vDbcN`69 z)F$Hh{!p4>N@yO~?pN+<@4ce^HdWMNfs?cuJDjAC6F=A_w8RCtgWpqJXtQ*__F;=# z*cvhk(}m6WY)_M>PkV2&n29RqakXiN_VqKdJ*6DaSyHLScMirny*(N-EMZ~!;xVl; zTM7e$Z!S%$X?iLVEs0}k8ktGt9)obzpgl$5P?B?I21jR{u zJVh<^qfn2&zmcUa^Ny!68}RpT^3M!*FRD=G;m1&CvW*Sw*O`oMr8?Q_X{-EJy_+0Z zMg?ksAHU%;*5VD7Jeh`dV5x?y+0!!Gu1ER;o^*=19%t`r58e-X8Rs=WSF>6^_vaV7dD||&dE>J+j=!5u8FW8r}cXY zUeftSEw8Y!A$vuMKg8K&#h%qz(^RE(Or_}&yqsY&>tQ8U<7;%I0TY7PhJ8uQz(y^p zJ(_IS^d{@mY|Yk|TBJEKUF+Oxu5I`{P=96g31jg**6X{;UJe&j-1VwKgH-aAY1?gA zLC~lgt6$$ve&nk6b1_kgaNmwXaE2J literal 0 HcmV?d00001 diff --git a/assets/m/a2.png b/assets/m/a2.png new file mode 100644 index 0000000000000000000000000000000000000000..e83f2836d3d6a9351eeb9ac4a274ac516c2862eb GIT binary patch literal 995 zcmV<9104K`P)4Hf*-VwtwOnoIN!u`Ll zYyn+bV;ib)33JgM^*zSMgmm6`?8GNr!5H^guV8ynjos)M5X4U_EXE5wzy!a54X{PQ zHY3yLf_0Ihrz zaT(n_PE5r_9LLM(@Ad;Xu?#JIg09xsg-EuJBoyI03Or6o#3+~TUH9B>7zz-@eX^p|6@&s`Sk%bgu&W%NRG9K|z_HQ5FI^xM|n z6)eOQY{w@ZYl*?iK<-wIkLYay2cia-@Wmqmv{NceP|7-tQ%VB+QK4fg$kF88txV%` zEnqji!V8}q7;^pY<4AM4XzG|u)F-9=!~+|fs2N$XYL9`I!tUT5QehJuiH&%xN0{Xp zTdq9o)t(?PQHl41&&(nUcos9%mxgg3W9<&kDXDukdtKqM1|+*4owM1Dcj9S4Rk3fN zR3*x<*^NcQdVls<>iP`)fiu{p-(Kw&4&r@4z-)W$7Vw__$P5^4MRk+vU5)FQz59K* z5OBUNl@9hTg!LHg?t1IfP6&AEYxHQHU$af(h|fnCYpu~1cf(r9_9#Z{PJ`Z4iQZ?G zBW}I!xSS_Dxv0S=Asb~B@)VoGXgHaXRR&mBBsgU2mfLLb_yhe$NaJ-;XaS>w? zjx%P)~+gaU93-zx~%{#+F&m z*~%tn4znCLhjIuxMAgVbC|NoX>z3O?M-|zYTp5N*FdpblSkx-m83bQa4{n1I!zo7v)aUONCD(MiT zp^4ax$@q#pcz{>R?~Q>NiF91UZd?ki%^LDa!CthX9%bkgP|nj6i*Y;hCmlh$znuRi zD^Q~sb_KlD%6}*>OK{luodHwrXE|5^08WFb7S;uv!-B*J9MYf zs5wbe19RgH(FhzwzbN_kVGlHfVS6wTtyrT1rC6nF>&XEWIV-F4p)St!)=9+-mnxQIsIT-Bh-HoPqcoA?13jtp$UTBmTL zKEzTOE0B$cc#IYd!B9NKG5mDizv5Mrs~sOwg|-Zn@WXj#DM26b1r^S7OZSvtjy0%4 zoAT^~W?N<#e9*&BG9+Nh79kbYigzo~Re9y=WwpwTb>6d(m6G7aJSXD<7HU5H!L`Pj zt8Dc=r0aBNs7CvS{&#mjBGbvZtpK{k_W^eOS=Vp1x!>sChVrhizi5=a)Ymq-wf0OC z8FnVoR#3iE_ZMl>leNNTI`a~gGPGT4 zb>B;M)!C-X!4HKDZ=+4XoPZ!YLmRjt$_A~%Jm-G7Hf*66R8Q)Fv*CFcXJ~A{&DS<) z(K5D0@dD$qT|<|ud3%XzUdt9JTTtDO^Ct_FP>ehsepl7&kj}G+7rxvVE0nRc9gX>= zDe})(UHgI#zA#RxK-qsZwm?DptRi^eQQi^9)!3mp{|bJYI-??LBrVoIgJ%Q2;th6a z4ilo39fb90(CXc(GwrW(v3|E~1+GJhB1nUR?>ntH+cSd|`7LUkK_zar_rK0dIa>Nf psx(6tHz}&zz-83Os^pgd0|3)lV+{vN?x6qx002ovPDHLkV1mH*xP1Ts literal 0 HcmV?d00001 diff --git a/assets/m/abc.png b/assets/m/abc.png new file mode 100644 index 0000000000000000000000000000000000000000..800f5f0eecc10e2712e7c20fa6e150d3af8fc063 GIT binary patch literal 5550 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 literal 0 HcmV?d00001 diff --git a/assets/m/dd1.jpg b/assets/m/dd1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3f1424995eebaa6a8c2f7801887a0e434bc92fd GIT binary patch literal 7065 zcmbVQ2|QHq*MIJv&Dh5lvW$IS#yUjyoh;eXX3R{CWoV2wB@$W6l29qpPN|e7Z9*ZH zQkF_Zeo|49NGR_e^{d|Z^WWb8^ZCsEeD8VAdCvDa=RD`$JB$5`LqOavp0No4Cnt5l z1%8jkaX_$*p@t;@2%r%$4S>ZVlynH29c8Mc!;IFZ&?1BA+SJGhop?%=4oO>A2bfvJ zM^UI@bT%=F9?W2x%YVFbL!QW>naleby6L(_+0a86j)^S#>cmyv)Wk5V2~FN&CDAP2 zG(I9Kg3hK8<0HbE(Wdd{@=J@GBA6rAktZ&xu*1ydtvFtZ{%#&bn@AR&XsB(ZMJ16) zL}L?ek|9}N&rp-7r%N)_(KXQ_>1yecOi8+?db-4)Lmu(QqHQwuvbF!|3%N6w|GBBS zxH#=NeeFnAunx(@#6(9|Pe)Hr3(?SuPGGVr@mkDig}+y@rAJd)j3_oEl1b#ONC}FJ zVVlb%On+=4BFfF}*TVlWS`iVPeJyE6v%ToQY5YU&Xzzq5x{en;Ix>bur6cMJe;XsQ z``3;*iU=E1+em6m1f9utvNe}SB-%6v%~X%9N46)E4Gc(RLlVi(glu4|OD5}^*cSV;!<=>8GkUa(la*EBiR_++gjV$>RXeIZ4FHHjEu?F zwj_NkdwVPSpEk5VcKmN`bP(q{oK*gi+P_6ey>Q^KLPc(Vl{%e?)He$$*&g0M#6#sL@?PbF9&O)|C#_I?mmD49$*0p017oa%5Am1H|OLz z+1U`I5vAX!kb`D=kt2wVM_P^^L?Q?MKL&vs#bN^hc_23WG^A(|oQB}=ICd0AK7nA7 zpfC=GImcXtg%CurI0py+z?w@sKd>bS(;}EiJAgTyqi7K{4sJ#8uGknlf>EvrPLE~K z;}HB9!HVHA5ex*+B3LAXPKgEp&C8Lq>C_Me>mrz!wMz*bW2S!4wOyK)8_d56+5CWeG?@n zoK55el^Pk2G$vv+(*Eg0t^ZrZ|Fz*CwEp0siL^gDi;lD-qAyZq3}!HrZYGVf)QlO- zf0p6@((Dfo9QdQI5g>f*I}q8Z4FtPH0P6i+fEMNfsC9>t8R%EuT=BkubMpLTM}O2k zf|2>9>;JmIxyUUX%?KuP#5P{uL~0BxmV=Qq!MR`nHxK|KKmy1B1)vJFfF3XgD}W`i z1J1x5c!M=y1E7Ks5CK>q4kUpTkPfmz9@qyCfHH6loCejP2GoPA;3l{YI>7_b1D=6F zFapNF1egKy5Cq{MK1djnfMg*hNCVP?$k0m24swOOpfyk+6bvz;7$^za0cAr4&;h6% zIt^WbE<-n=4(K8D1R8?gLZ6^H7zOjfBCs^94C}yT*a~)mz2Wt6FuWN~gwxqP5T~(2i&yG!?xWy$zj%K7c-ju0yw?AEAfP6X@?4K8zGb17nJD!uVr? zF>#o5OcCY;rWSJx(}Nko%wVxtF{}#K80&~#gAK)Q!RBBOVb5Wkun)1r*l8RNCxO$z znd97X6dW6uj@yqrgS&z2#*N@+xp=r_x%9Z~xdOPDT&Y||T$Nncxw^SVx#sbLcqP0k z-W^ZFC*X7O$MB8#F8m07o}0j}!fnp&%^k{}!d=2$&3%h|fP0FEhew{rgvXPI!LyyG zgy%d@JI@f$S6(4rbzU3Zb-XdWdw5UsHt{~;o#Nx;Q|7be3*ck(?cqDk*TVOLZNw zCy`K*Y>~4f_eCZ|g+vWReMRF%4~kwB9TY=}DT_IYg^T5i)rj?q%`KB&X0?pIEOS}) zvhHPH#FvX(iqplj#LtQMh|ft7CF~@^B=RNdC7w&7CDkQ8CF3LyOWu+kUoNtI#d7NM ztmQS!pGv_}>QY`(TcnOk-Ibb_mXUUlj*{Ll-6B0MBPL@h6Dm_Eb6w`Gtg!4#S%z$( z>L{Xv@F`QUJY$Z;}Ny$0N#mJS*-Itq}SCRLTPnAC>|6GAvfvm7ep-`b&VM0+> z(M>T)u}bl&5?+a{6rxnD)TZ=BSw-1TIYYT#`HhOWijzvBN|nlhDxa!_>Somn)yHaB zHL_Zm+99ae<@dWiZ#^)3xq!$^anaY*B#CPvdllc`yu*{8*;Wu+CXRi!ngEvD_N zovK~0{Xs`jCqO4(r%mU(uAy$Y?lIkGBq5SBDV5Yn`lP3>N7Xy1_gJ4#-(Ejizd?V} zK*NA;aM+;VP}tDTFvGCf@SBmb5zDCB=&iA$aiDRjaUWTP>_N^Ux0_&0tWAEU_M^R*YrE6J;EweaeVt1DN}cw2ktdO!0~^@;Im z_7(75=X=`si=VAuf#0CNj{jEw&NY&27;72=Z~?vnCjzF|+O6HUc4VF5y7YCu>s8jr zukY9(xgmVRwT%KBDH|^aVgmgFD+3oO?vx73bdXa}Y0w1KhFVM=qgm1lX>aM~^aA?m zCi6`No8APQ2k#Aj8)6Ys6f(}RVH{vghB}6pg?*`Qj&(YT5T=g25k%4)|{-6oR&PY-C_Hw6z-I; zlzXYVsRgN@clhmSOp{LAo;JMGVP{o3e>y9@FJnbU*)H@h#;*IB`kDJPzh}|1?qus` z7iBNxP;>6=ChacSy|`!7p8L5*xrg(xdCa`te2e^31%!gcg5kYxd+Q2`g;|B4_ifzQ zQDjh5R?J--Q#@GWTGFszaev4&< zRd3I%JM-YI?b(KEt?Ke~V&}5YgYz-x-(3j2&|BkD(|nP9vHFtIrP5mA+N?ULE}?Fs zKBRuIVNJus%g&dZ8&@>eUeUgC@~Yg`gV#i_rl_Xzo544Sn>RK; zYw>S+-0InS|CYy*|DDee3!L`)U1eo`gS{d>Z?7{@L~c z%s|$2!RJLUq+V3KRC{@D&}i`5knPajSF2w=8>SAA{T2P!!bsX{zSl*gvZJTp=)Jl6 z*8c5-cWd8`j75#jkEg#Uyf6Kr`r*>ehSX^BE0F;+Ld;zTqc^80CKopI_ za`Pdtv`+vKL%!a{p98SGc<~uXLq0qH;{pF3s9)o!H4H(>Eb{v`@t=alWnaeM*PF9`rREEhmy1ObFbE&YB@pc&%7omnmV^EkM8W4;^6NE58P8dtFk{1#5r07|17F7x=sL)pwLOi2zcq|(Cb2SJC z1e6@flaeBY7PQ)&f8nOQu*gLDq@K0@!yzxxAXaKcO}BwCLTxENsGqbUf*c80c~S&7 zr(BrGFTc6?6!0Q*FabqCauS!&t6G*i;@!_Tqj!zgr4wvJo-8Zh;qBU1?w;WpuubTT z;qgNUBZJrti(sn~HpXoIPMyH%nljJPOVkynR`(UY=yn(MgHNop0&Sfc-jmJn2IU)w z3oe8Pgn{Fy&qTWv$L?hft%tuH@42#XkCM;ZH)D#CN%ij?+S7exYW*(s9UbR}z8eQ>rPQ5Sf?ilaG zG+Mk23n2FK?L{8NmD}U%X9QZj4v#Z8e?NTRl@!D^u}&$;aOA>Y5l!zWuT>D6lUaHf z!aPNn)<-gofk_@_g%?F_=P$brucba@T+CY$8CvN4WrtKm%9YoOfuU9JF+Ca1^GUnE zHpbBOw>ntQeLH?Uw<z#QEB|;bVIN)vT^X=%ci#yO~)$IY-SY4DJO(nc!?$iAv6!Xe_K!+FgdM!IF@_Y(R(GO{7C`F zpPrUBRoWmsplMe@xg!$(7jst89S2g`Im0|tugsr??mg>un^e%)lkr@t@^~Xl<-lQTSJu|!^-n)r zAO0Bsrrn}{uAtV$mBo_RTR%*BoiT*%6Nw7H_ONEPzlP{chhjQ;+bir9-)GizENM(=u_LfFWK7NludgYpQ-(x&QGyTo| zm6UYKhwU9&DMMY^%TK(eoOxC=a_AY^v%puiaBqd`RD0Bxx^ai65xI(M1DP)7Qv`=% z7l#bzPMu@vBgDC=Nf)7eQe{a@l*YCrpFX|Xa_uxD)ZHxIvuDXpb zb=_M5mwH$Su?X9Wkt$Gi zWd(a&kdsf+jaA4B4ll?$KkmWDedtcDl2y0HxCM%O=^=c4Q<3S_umN@Nu|2PF z4}3H8_%dDM)aKSasU%vMPhLr)5}|7kPs6@lLIUwkflUjey&d;;$)avD>CLR5{!10NMuzSaKxTZ9yG1}-i+nZYS_6xk^u`y}ro7_-C7As2oQeRmZ zI00*RWK7^ZpO5XV8Q&#>f=^T>{b(?pJz;&uay^eoNNs3dcQ$t=Zx?>&KDpi7GrJWI z(`t(!Ii!rbZNU~3o44u<1lQy`vpzTmKHU_VXI*5Jq~=o9f7R^RjvGhI5<~`0ZEQb$ z`P*Clmbm}{m30QkAhE*TqziZ5b9+U;RSOMw$tE{@%VUf5FV#oyFZ1j;g|%8(J^r#Z zeily0u57XQ7aM%i?g3vRmemFC;d}Tsdew!(aT)!Hhf~dPD7rP{*`1M@2mMM--D)+_ zH@Z|N&fW{-4chdbJTx}?qwR3^0{JJKc0mr0`(|^yAFX5-^W8Y^Owypo4x)~y7((kZhh~p)wPhkZ5t>0s-4TK^Ye zS&G6DS5pZlpOC<<17fxUmma0Z@C%y{ zmYYpDRpQrFk=jJ?wm)xGtw*jq>0BXLGK#siqGGLd=7(s?ja+oja~ri{Q~wow8_v3w zT(+*T%RNOex@C**dEzo*=p3`-X5F(Rs~XbcVcO7lu2F{~ExSB^<8nc++TO@rLTVVC z%onl!B>v%)mi-?N=*~D^{#AN{9>c)r{moK|KA6NNiobcWOH*@bmrHMtl;~P{u*wYo zfB^BqyqAIn*Wsf&txL||%4+g+=08C`A+k&OLBg0}e#?sSH7P3hR?{G+7@F(gL`cw! z*4w_=-iB;PTz1#ltOO0P6EFN~t9XS6Mps$Pm>ezd8`=-&^1)7A@@rR*seEl)nP}|i zDhYBny_y7#;@}AOsIQN&Ozdh}mg@xp^k0MOucyVs44ukU2SwbPf@1c}N|x6YvTKFP zothG-JZ61VAu)I~qxG`3|Be+`*5V}##Vc#O>>jW~bg5;(3RBQ{jYd)Rc6BDG99-Vn zF6f*(Xiq!}J)?cUKWuw@!7FiZ@#D0+rPV{&w|?#tdB?=HfF5;gOXfO9&xyl=3~*_= z$9CjDTE3c_MhMxRI|B1k08z*t#WS=c**wQI1na0ri$1BffMGGsEtS4nr( zm+C(q&f$*ss6Xt3A|RJSc)<5ov&9+&1z;lTiB>mXPUpyvVkq3OK~%!hv67ROR&TV? z1;$t#TWg$aG@MK85Ho9~oiVPNxTKl2ge)tTzE}F0>hH=a9N}XO5Hop1p4d}3VGJVq gV--z8RRA__{}{mknQ%qQB-!lI!EU=h6e%1oFShj|L;wH) literal 0 HcmV?d00001 diff --git a/assets/m/icon.png b/assets/m/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4c832bcdf4b326ae171420a615a69368814716a6 GIT binary patch literal 6814 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 MW4Eo(`!C=A0VLTRJpcdz literal 0 HcmV?d00001 diff --git a/assets/m/reset.css b/assets/m/reset.css new file mode 100644 index 0000000..c9f254b --- /dev/null +++ b/assets/m/reset.css @@ -0,0 +1,105 @@ + +@font-face { + font-family: 'iconfont'; /* project id 276054 */ + src: url('//at.alicdn.com/t/font_icalidlgdg77rpb9.eot'); + src: url('//at.alicdn.com/t/font_icalidlgdg77rpb9.eot?#iefix') format('embedded-opentype'), + url('//at.alicdn.com/t/font_icalidlgdg77rpb9.woff') format('woff'), + url('//at.alicdn.com/t/font_icalidlgdg77rpb9.ttf') format('truetype'), + url('//at.alicdn.com/t/font_icalidlgdg77rpb9.svg#iconfont') format('svg'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; +} + + +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, +time, mark, audio, video, input { + margin: 0; + padding: 0; + border: none; + outline: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + text-align:center; +} +html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 { + -webkit-text-size-adjust: none; + text-align:left; + +} + + +header, menu, nav, section, article, aside { +display: block; +} +a{-webkit-tap-highlight:rgba(0,0,0,0);color:#333;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);} +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; +} + +body { + font-family:"Microsoft yahei","微软雅黑","Tahoma","Verdana","Arial","sans-serif";color:#333; + overflow: auto; + background: aliceblue; +} + +ol, ul { + list-style: none; +} + +blockquote, q { + quotes: none; +} + +blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; +} + +ins { + text-decoration: none; +} + +del { + text-decoration: line-through; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} +*{-webkit-box-sizing: border-box;-moz-box-sizing: border-box; -ms-box-sizing: border-box;-o-box-sizing: border-box;box-sizing: border-box;} +.clearfix:after{content: ".";display: block;height: 0;clear: both;overflow: hidden;visibility: hidden;} +.clearfix{zoom:1} + +html{margin:0;padding:0;border:0;} +body,div,span,object,iframe,h1,h2,h3,h4,p,blockquote,pre,a,address,code,b,em,img, +dl,dt,dd,ol,ul,li,fieldset,form,label,footer, +header,hgroup,nav,section +{margin:0;padding:0;border:0;} +body{background:#eeeeee;color:#333;position:relative;font-size:100%;font:12px/1.5 Microsoft yahei,arial,sans-serif;vertical-align:baseline;} +a{text-decoration:none;outline:none;} +a:link{color:#333;} +a:visited{color:#333;} +a:hover,a:active,a:focus{color:#e87518;text-decoration:none;outline:none;} + +input{padding:0;margin:0;} +img{border:none;background:none;vertical-align:middle;} +ul,ol,li{list-style-type:none;} +select,input,img,select{vertical-align:middle;} +table{border-collapse:collapse;border-spacing:0} +table, th, td {vertical-align: middle} +.clearfix:after{content: ".";display: block;height: 0;clear: both;overflow: hidden;visibility: hidden;} +.clearfix{zoom:1} +.clearboth{height:0px;line-height:0px;overflow:hidden;clear:both;font-size:0px;} + +h1,h2,h3,h4{font-size:12px;font-weight:bold;} +hr {border: 0;border-top:1px solid #ccc;height:0;} diff --git a/assets/m/share_icon.png b/assets/m/share_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0c66c6ac2645a840c968c4d1e323b5215466b9 GIT binary patch literal 3957 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 literal 0 HcmV?d00001 diff --git a/assets/m/share_icon2.png b/assets/m/share_icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe087dae045c6d03a7de7282b7d7caf3e4e0be5 GIT binary patch literal 8640 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 - - - - - - - - diff --git a/components/AppFooter/AppFooter.vue b/components/AppFooter/AppFooter.vue new file mode 100644 index 0000000..75daaa8 --- /dev/null +++ b/components/AppFooter/AppFooter.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/components/AppFooter/Copyright/Copyright.vue b/components/AppFooter/Copyright/Copyright.vue new file mode 100644 index 0000000..36ca891 --- /dev/null +++ b/components/AppFooter/Copyright/Copyright.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/components/AppFooter/Link/Link.vue b/components/AppFooter/Link/Link.vue new file mode 100644 index 0000000..65d024e --- /dev/null +++ b/components/AppFooter/Link/Link.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/components/AppFooter/SubMenu/SubMenu.vue b/components/AppFooter/SubMenu/SubMenu.vue new file mode 100644 index 0000000..8f734ad --- /dev/null +++ b/components/AppFooter/SubMenu/SubMenu.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/components/AppFooter/ToolBar/ToolBar.vue b/components/AppFooter/ToolBar/ToolBar.vue new file mode 100644 index 0000000..e06cd4d --- /dev/null +++ b/components/AppFooter/ToolBar/ToolBar.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/components/AppHeader.vue b/components/AppHeader.vue deleted file mode 100644 index 25964a0..0000000 --- a/components/AppHeader.vue +++ /dev/null @@ -1,233 +0,0 @@ - - - - - diff --git a/components/AppHeader/AppHeader.vue b/components/AppHeader/AppHeader.vue new file mode 100644 index 0000000..8975bb1 --- /dev/null +++ b/components/AppHeader/AppHeader.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/components/AppHeader/Login/Login.vue b/components/AppHeader/Login/Login.vue new file mode 100644 index 0000000..1201eb1 --- /dev/null +++ b/components/AppHeader/Login/Login.vue @@ -0,0 +1,25 @@ + + + diff --git a/components/AppHeader/Logo/Logo.vue b/components/AppHeader/Logo/Logo.vue new file mode 100644 index 0000000..a85c6ba --- /dev/null +++ b/components/AppHeader/Logo/Logo.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/components/AppHeader/Menu/Menu.vue b/components/AppHeader/Menu/Menu.vue new file mode 100644 index 0000000..d3fe03b --- /dev/null +++ b/components/AppHeader/Menu/Menu.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/components/AppHeader/TopBar/TopBar.vue b/components/AppHeader/TopBar/TopBar.vue new file mode 100644 index 0000000..0dbf68e --- /dev/null +++ b/components/AppHeader/TopBar/TopBar.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/components/Banner.vue b/components/Banner.vue index 592c7d9..a3058ca 100644 --- a/components/Banner.vue +++ b/components/Banner.vue @@ -1,38 +1,23 @@ diff --git a/components/Breadcrumb.vue b/components/Breadcrumb.vue index 7c07511..7263841 100644 --- a/components/Breadcrumb.vue +++ b/components/Breadcrumb.vue @@ -1,29 +1,35 @@ - - + + diff --git a/components/CardList.vue b/components/CardList.vue deleted file mode 100644 index 09c2a97..0000000 --- a/components/CardList.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/components/CmsArticleList.vue b/components/CmsArticleList.vue new file mode 100644 index 0000000..1d74963 --- /dev/null +++ b/components/CmsArticleList.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/components/CmsArticleRelated.vue b/components/CmsArticleRelated.vue new file mode 100644 index 0000000..28e294d --- /dev/null +++ b/components/CmsArticleRelated.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/components/CmsProductList.vue b/components/CmsProductList.vue new file mode 100644 index 0000000..1bf0b7c --- /dev/null +++ b/components/CmsProductList.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/components/CmsProductRelated.vue b/components/CmsProductRelated.vue new file mode 100644 index 0000000..e95fff6 --- /dev/null +++ b/components/CmsProductRelated.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/components/CmsRecently.vue b/components/CmsRecently.vue new file mode 100644 index 0000000..69439bc --- /dev/null +++ b/components/CmsRecently.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/components/CompanyList.vue b/components/CompanyList.vue index 519d089..a43faa5 100644 --- a/components/CompanyList.vue +++ b/components/CompanyList.vue @@ -1,60 +1,20 @@ diff --git a/components/Content.vue b/components/Content.vue new file mode 100644 index 0000000..7d61a74 --- /dev/null +++ b/components/Content.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/components/Left.vue b/components/Left.vue new file mode 100644 index 0000000..012d388 --- /dev/null +++ b/components/Left.vue @@ -0,0 +1,100 @@ + + + diff --git a/components/MCmsProductList.vue b/components/MCmsProductList.vue new file mode 100644 index 0000000..e3d66d7 --- /dev/null +++ b/components/MCmsProductList.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/components/MContent.vue b/components/MContent.vue new file mode 100644 index 0000000..c5650b7 --- /dev/null +++ b/components/MContent.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/components/MFooter.vue b/components/MFooter.vue new file mode 100644 index 0000000..9b39a17 --- /dev/null +++ b/components/MFooter.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/components/MHeader.vue b/components/MHeader.vue new file mode 100644 index 0000000..122bb8a --- /dev/null +++ b/components/MHeader.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/components/NextArticle.vue b/components/NextArticle.vue new file mode 100644 index 0000000..a2d21dc --- /dev/null +++ b/components/NextArticle.vue @@ -0,0 +1,44 @@ + + + + + + diff --git a/components/PageBanner.vue b/components/PageBanner.vue deleted file mode 100644 index cab2a43..0000000 --- a/components/PageBanner.vue +++ /dev/null @@ -1,180 +0,0 @@ - - - diff --git a/components/PageContainer.vue b/components/PageContainer.vue deleted file mode 100644 index 48fcd03..0000000 --- a/components/PageContainer.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/components/Pagination.vue b/components/Pagination.vue new file mode 100644 index 0000000..2374b8d --- /dev/null +++ b/components/Pagination.vue @@ -0,0 +1,64 @@ + + + + + + diff --git a/components/ProductList.vue b/components/ProductList.vue deleted file mode 100644 index f5f32bd..0000000 --- a/components/ProductList.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - diff --git a/components/ProductShopInfo.vue b/components/ProductShopInfo.vue deleted file mode 100644 index d0b03a1..0000000 --- a/components/ProductShopInfo.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - - diff --git a/components/Tags.vue b/components/Tags.vue new file mode 100644 index 0000000..45119c4 --- /dev/null +++ b/components/Tags.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/components/UnderMaintenance.vue b/components/UnderMaintenance.vue index bb04401..579f466 100644 --- a/components/UnderMaintenance.vue +++ b/components/UnderMaintenance.vue @@ -1,17 +1,40 @@ diff --git a/composables/configState.ts b/composables/configState.ts index d330be7..14d4356 100644 --- a/composables/configState.ts +++ b/composables/configState.ts @@ -1,47 +1,59 @@ -import { useState } from '#imports'; -import type { Config } from '~/types/global'; -import type {Website} from "~/api/cms/website/model"; -import type {Navigation} from "~/api/cms/navigation/model"; +import {useState} from '#imports'; +import type {CmsWebsite} from "~/api/cms/cmsWebsite/model"; +import type {CmsNavigation} from "~/api/cms/cmsNavigation/model"; import type {User} from "~/api/system/user/model"; import type {Company} from "~/api/system/company/model"; -import type {MyCart, ShopCart} from "~/api/shop/shopCart/model"; +import type {Layout} from "~/api/layout/model"; +import type {Config} from "~/types/global"; +import type {CmsWebsiteField} from "~/api/cms/cmsWebsiteField/model"; // 网站信息 export const useWebsite = () => - useState('website', () => { + useState('website', () => { return {}; }); // 参数配置 export const useConfigInfo = () => - useState('config', () => { - return {}; - }); + useState('config', () => { + return { + productParentId: undefined, + searchCategoryId: undefined + }; + }); // 主导航 export const useMenu = () => - useState('menu', () => { + useState('menu', () => { return []; }); // 副导航 export const useSubMenu = () => - useState('subMenu', () => { + useState('subMenu', () => { return []; }); // 页面元素 -export const useForm = () => useState('form', () => { +export const usePage = () => useState('page', () => { return {}; }); + +// 页面布局 +export const useLayout = () => useState('layout', () => { + return { + showBanner: true + } +}); + // 固钉 export const useProductAffix = () => useState('affixTop', () => { return false; }); // 后台管理域名 -export const useSysDomain = () => useState('useSysDomain', () => ''); +export const useSysDomain = () => useState('SysDomain', () => ''); // 登录凭证 export const useToken = () => useState('token', () => ''); @@ -70,15 +82,14 @@ export const useCompany = () => }); // 是否显示登录弹窗 -export const useShowLogin = () => useState('showLogin',() => false) +export const useShowLogin = () => useState('showLogin', () => false); + +// 登录凭证 +export const useIsMobile = () => useState('isMobile', () => false); // 购物车状态 -export const useCart = () => useState('cart', () => { +export const useCart = () => useState('cart', () => { return { - appName: '', - domain: '', - adminUrl: '', - menuId: undefined, num: 1, type: 1, payType: 102, @@ -89,3 +100,11 @@ export const useCart = () => useState('cart', () => { totalPrice: 0 }; }); + +export const useLogo = () => useState('logo', () => { + return { + siteName: '', + siteLogo: undefined, + value: '', + }; +}) diff --git a/composables/useServerRequest.ts b/composables/useServerRequest.ts index c3458b1..f2347a4 100644 --- a/composables/useServerRequest.ts +++ b/composables/useServerRequest.ts @@ -28,7 +28,10 @@ export const useServerRequest = (url: string, opts?: UseFetchOptions(url: string, opts?: UseFetchOptions +defineProps({ + error: Object +}) + + + + + + diff --git a/i18n.config.ts b/i18n.config.ts new file mode 100644 index 0000000..1e9dd18 --- /dev/null +++ b/i18n.config.ts @@ -0,0 +1,11 @@ +import en from './lang/en.json' +import zh from './lang/zh.json' + +export default defineI18nConfig(() => ({ + legacy: false, // 是否兼容之前 + fallbackLocale: 'en', // 区配不到的语言就用en + messages: { + en: en, + zh: zh + } +})) diff --git a/lang/en.json b/lang/en.json new file mode 100644 index 0000000..edc22d4 --- /dev/null +++ b/lang/en.json @@ -0,0 +1,134 @@ +{ + "home": "Home", + "index": { + "about": "ABOUT US", + "aboutUs": "ABOUT US", + "mobileHome": "MOBILE HOME", + "container": "CONTAINER", + "quickLcl": "QUICK LCL", + "lightSteelVilla": "LIGHT STEEL VILLA", + "packingBox": "PACKING BOX", + "tourism": "Culture and Tourism", + "mobileHomeText": "Light steel activity rooms are widely used as temporary construction buildings for outdoor operations such as roads, railways, and buildings; Urban municipal, commercial, and other temporary buildings, such as temporary offices, conference rooms...", + "tourismText": "Cultural and tourism products include spacecraft, mobile homestays, commercial districts, and other innovative products that combine modern technology with tourism accommodation....", + "containerText": "Fast LCL (Less than Container Load) is the abbreviation for fast assembling houses. Nowadays, many construction sites are not familiar with this new product, and it is not unfamiliar to those who have been engaged in the container activity house...", + "quickLclText": "Weiguan Luxury Light Steel Villa is a modern architectural house specially designed for tourist attractions, leisure farms, and tourist resorts. The light steel activity room can integrate with the scenic environment and has environmental protection features", + "lightSteelVillaText": "Weiguan Luxury Light Steel Villa is a modern architectural house specially designed for tourist attractions, leisure farms, and tourist resorts. The light steel activity room can integrate with the scenic environment and has environmental protection features", + "packingBoxText": "A packing box is a modular building product based on a steel frame and lightweight wall panel structural system. This product consists of a top frame, bottom frame, corner columns, and 14 interchangeable wall panels, which can be packaged and packaged", + "contact": "CONTACT US", + "keyword": "Please enter keywords", + "news": "Latest News", + "partner": "Partner", + "parentNameCase": "Case", + "companyProfile": "Company Profile" + }, + "page": { + "title": "About", + "news": "Information", + "hotKey": "Hot Keywords", + "contact": "Contact Us", + "tel": "Tel", + "fax": "Fax", + "phone": "Phone", + "email": "Email", + "address": "Address", + "factory": "Factory", + "domain": "Domain" + }, + "order": { + "name": "Message", + "title": "Product", + "content": "Content", + "realName": "Name", + "phone": "Phone", + "email": "E-mail", + "address": "Address", + "code": "Verification code", + "imgCode": "Image Code", + "submit": "Submit Now" + }, + "product": { + "title": "Product" + }, + "case": { + "detail": "More" + }, + "show": { + "detail": "Detail" + }, + "video": { + "title": "Video" + }, + "search": { + "column": "Column", + "results": "Search Results", + "find": "Find", + "nums": "Results" + }, + "footer": { + "wxCode": "WeChat QRCode", + "mp": "Mini Program", + "text1": "specializes in", + "text2": "welcome to call us for consultation!!", + "key1": "Guangxi prefabricated houses", + "key2": "Nanning prefabricated houses", + "key3": "prefabricated house manufacturers", + "statement": "Statement: This website is partly from the Internet. If there is any infringement, please contact us to delete it", + "support": "technical support", + "hotProducts": "Hot Products", + "mainArea": "Main business area", + "nanning": "NanNing", + "beihai": "BeiHai", + "baise": "BaiSe", + "guigang": "GuiGang", + "yulin": "YuLin", + "guilin": "GuiLin", + "hechi": "HeChi", + "liuzhou": "LiuZhou", + "guangxi": "GuangXi", + "qinzhou": "QinZhou" + }, + "pagination": { + "total": "Total", + "unit": "", + "perPage": "Per", + "pageNumber": "" + }, + "more": "More", + "submit": "Submit", + "formTitle": "Your needs and messages", + "formDesc": "Fill in your requirements online, we are dedicated to serving you", + "youName": "Your name", + "youEmail": "Your Email", + "youPhone": "Your Phone", + "youMessage": "Your detailed requirements", + "submitSuccess": "Successfully", + "submitFail": "Submission failed", + "changeOne": "Change", + "imgCode": "code", + "detail": "Detail", + "articleTitle": "News", + "productTitle": "PRODUCT", + "industryLayout": "INDUSTRIAL LAYOUT", + "customerCase": "CUSTOMERS CASES", + "articleUrl": "Url", + "previous": "Previous", + "next": "Next", + "productRelated": "ProductRelated", + "articleRelated": "ArticleRelated", + "parentNameCase": "Case", + "categoryName": "Category", + "createTime": "CreateTime", + "overview": "Overview", + "keyword": "Keyword", + "recentlyViewed": "Recently Viewed", + "author": "Author", + "label": "Label", + "click": "Click", + "seeMore": "See more", + "onlineInquiry": "Online Inquiry", + "searchKeywords": "Keywords", + "tel": "Tel", + "map": "Map", + "message": "Msg" +} diff --git a/lang/zh.json b/lang/zh.json new file mode 100644 index 0000000..2146e5d --- /dev/null +++ b/lang/zh.json @@ -0,0 +1,134 @@ +{ + "home": "首页", + "index": { + "about": "关于我们", + "aboutUs": "ABOUT US", + "mobileHome": "活动房", + "container": "集装箱", + "quickLcl": "快拼房", + "lightSteelVilla": "轻钢别墅", + "packingBox": "打包箱", + "tourism": "文旅产品", + "mobileHomeText": "轻钢活动房广泛用于道路、铁路、建筑等野外作业的临时施工用房;城市市政、商业及其它临时性用房,如:临时办公室、会议室...", + "tourismText": "文旅产品有太空舱、移动民宿、商业街区等产品,结合了现代科技与旅游住宿的创新型产品....", + "containerText": "快拼箱是快速拼装房屋的简称,现在很多的建筑工地并不了解快拼箱这个新产品,对于长期从事集装箱活动房、彩钢房行业的人并不陌生...", + "quickLclText": "伟冠豪华轻钢别墅是专为旅游景区、休闲农庄、旅游度假村量身定做的一款现代建筑房屋,轻钢活动房能与景区环境融为一体,并拥有环保...", + "lightSteelVillaText": "伟冠豪华轻钢别墅是专为旅游景区、休闲农庄、旅游度假村量身定做的一款现代建筑房屋,轻钢活动房能与景区环境融为一体,并拥有环保...", + "packingBoxText": "打包箱是一款基于钢框架和轻质墙板结构体系的模块化建筑产品。该产品由顶框、底框、角柱和14块可互换的墙板组成,可打包包装...", + "contact": "联系我们", + "keyword": "请输入关键词", + "news": "最新资讯", + "partner": "合作客户", + "parentNameCase": "项目展示", + "companyProfile": "公司简介" + }, + "page": { + "title": "关于我们", + "news": "新闻资讯", + "hotKey": "热门关键词", + "contact": "联系我们", + "tel": "办公电话", + "fax": "公司传真", + "phone": "销售热线", + "email": "邮箱地址", + "address": "公司地址", + "factory": "生产基地", + "domain": "网址" + }, + "order": { + "name": "在线留言", + "title": "产品名称", + "content": "留言内容", + "realName": "您的姓名", + "phone": "联系电话", + "email": "电子邮箱", + "address": "收货地址", + "code": "验证码", + "imgCode": "图形验证码", + "submit": "立即提交" + }, + "product": { + "title": "产品系列" + }, + "case": { + "detail": "查看详情" + }, + "show": { + "detail": "详细介绍" + }, + "video": { + "title": "宣传视频" + }, + "search": { + "column": "所属栏目", + "results": "全站搜索结果", + "find": "找到", + "nums": "个结果" + }, + "footer": { + "wxCode": "微信公众号二维码", + "mp": "微信小程序", + "text1": "专业从事于", + "text2": "欢迎来电咨询!", + "key1": "广西活动房", + "key2": "南宁活动房", + "key3": "活动房厂家", + "statement": "声明:本站部分源于互联网如有侵权请与我们联系删除", + "support": "技术支持", + "hotProducts": "热推产品", + "mainArea": "主营区域", + "nanning": "南宁", + "beihai": "北海", + "baise": "百色", + "guigang": "贵港", + "yulin": "玉林", + "guilin": "桂林", + "hechi": "河池", + "liuzhou": "柳州", + "guangxi": "广西", + "qinzhou": "钦州" + }, + "pagination": { + "total": "共", + "unit": "条", + "perPage": "每页", + "pageNumber": "页次" + }, + "more": "了解更多", + "submit": "立即提交", + "formTitle": "您的需求与留言", + "formDesc": "在线填写您的需求,我们竭诚为您服务", + "youName": "您的姓名", + "youEmail": "您的邮箱", + "youPhone": "您的电话", + "youMessage": "您的留言", + "submitSuccess": "提交成功", + "submitFail": "提交失败", + "changeOne": "换一张", + "imgCode": "图形验证码", + "detail": "详情", + "articleTitle": "新闻资讯", + "productTitle": "产品系列", + "industryLayout": "产业布局", + "customerCase": "客户案例", + "articleUrl": "本文网址", + "previous": "上一篇", + "next": "下一篇", + "productRelated": "相关产品", + "articleRelated": "相关新闻", + "parentNameCase": "项目展示", + "categoryName": "所属分类", + "createTime": "发布日期", + "overview": "产品概述", + "keyword": "关键词", + "recentlyViewed": "最近浏览", + "author": "作者", + "click": "点击", + "label": "标签", + "seeMore": "查看更多", + "onlineInquiry": "在线询价", + "searchKeywords": "搜索关键词", + "tel": "电话", + "map": "地图", + "message": "留言" +} diff --git a/layouts/default.vue b/layouts/default.vue index 8b39a64..8548512 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -1,43 +1,24 @@ + + diff --git a/layouts/mobile.vue b/layouts/mobile.vue new file mode 100644 index 0000000..b89cc5f --- /dev/null +++ b/layouts/mobile.vue @@ -0,0 +1,86 @@ + + + + diff --git a/middleware/route.global.ts b/middleware/route.global.ts new file mode 100644 index 0000000..3012c91 --- /dev/null +++ b/middleware/route.global.ts @@ -0,0 +1,34 @@ +import {useIsMobile, useToken} from "~/composables/configState"; + +/** + * @description 路由守卫 + */ +export default defineNuxtRouteMiddleware((to, from) => { + const matchers = ['/user']; + if(matchers.includes(to.path)){ + if(import.meta.client){ + let token = useToken() + if(!token.value){ + console.log('ekekekekeke') + return navigateTo({ + path: '/passport/login', + query: { + redirect: to.path + } + }) + } + } + } + + // 手机版跳转 + if(import.meta.client) { + const mobile = useIsMobile(); + const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); + if (isMobile) { + mobile.value = true; + if (to.path.indexOf('/m') < 0) { + return window.location.href = `/m` + } + } + } +}) diff --git a/nuxt.config.ts b/nuxt.config.ts index 65252e2..65229fa 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -10,7 +10,7 @@ const appId = 10398; // 接口地址 let apiBaseUrl = 'https://cms-api.websoft.top/api' // 应用名称 -const appName = '广西活动房_广西集装箱_打包箱_隔离房_广西伟冠集成房屋有限公司'; +const appName = '网宿软件'; @@ -25,7 +25,17 @@ if(isDev){ export default defineNuxtConfig({ compatibilityDate: '2024-04-03', devtools: {enabled: false}, - modules: ["@element-plus/nuxt",'@unocss/nuxt', "@nuxt/image"], + modules: [ + '@element-plus/nuxt', + '@unocss/nuxt', + '@nuxt/image', + '@nuxtjs/i18n', + // '@pinia/nuxt', + // '@pinia-plugin-persistedstate/nuxt', + ], + // build: { + // transpile: ['pinia-plugin-persistedstate'] + // }, css: [ 'element-plus/dist/index.css', 'element-plus/theme-chalk/display.css', @@ -35,23 +45,31 @@ export default defineNuxtConfig({ plugins: [ '@/plugins/element-ui' ], + i18n: { + strategy: 'prefix_and_default', // 添加路由前缀的方式 prefix_and_default + locales: ["zh","en"], //配置语种 + defaultLocale: 'zh', // 默认语种 + vueI18n: './i18n.config.ts', // 通过vueI18n配置 + }, app: { head: { - viewport: 'width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no', - title: '首页', + title: appName, meta: [ { name: 'keywords', content: '企业官网,建站系统,websoftCMS,网站源码,java,nuxt,antd,vue3' }, { name: 'description', content: 'weSite企业建站系统,助力企业信息化建设和转型,主要产品有:企业官网,电商系统,微信公众号,微信小程序应用等,使用目前最流行的技术栈打造。https://websoft.top' - } + }, + { name: 'apple-mobile-web-app-capable', content: 'yes'}, + { name: 'apple-mobile-web-app-status-bar-style', content: 'black'} ], link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }], + viewport: 'width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no', + script: [ + { innerHTML: 'var备案号 = "备案号:桂ICP备13003666号";', type: 'text/javascript' } + ] } }, - devServer: { - port: 16880 - }, $production: { devServer: { port: appId diff --git a/package.json b/package.json index d7b552a..84b77aa 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@nuxtjs/eslint-config-typescript": "^12.1.0", "@typescript-eslint/parser": "^7.1.1", "ant-design-vue": "^3.2.11", + "aos": "^2.3.4", "axios": "^1.7.4", "dayjs": "^1.11.5", "dayjs-nuxt": "^1.1.2", @@ -33,6 +34,7 @@ "qrcode": "^1.5.4", "qrcode.vue": "^3.3.3", "sass": "^1.57.1", + "swiper": "^11.1.15", "uuid": "^10.0.0", "vue": "latest", "vue-i18n": "^9.14.0", @@ -48,6 +50,7 @@ "@nuxt/image": "^1.7.0", "@nuxtjs/eslint-config-typescript": "^12.1.0", "@nuxtjs/i18n": "^8.5.2", + "@types/aos": "^3.0.7", "@types/uuid": "^10.0.0", "@typescript-eslint/parser": "^7.1.1", "@unocss/nuxt": "^0.62.2", diff --git a/pages/[...404].vue b/pages/[...404].vue new file mode 100644 index 0000000..0183153 --- /dev/null +++ b/pages/[...404].vue @@ -0,0 +1,19 @@ + + + + + diff --git a/pages/[custom].vue b/pages/[custom].vue deleted file mode 100644 index a96438f..0000000 --- a/pages/[custom].vue +++ /dev/null @@ -1,76 +0,0 @@ - - diff --git a/pages/article/[categoryId].vue b/pages/article/[categoryId].vue deleted file mode 100644 index f3f8b43..0000000 --- a/pages/article/[categoryId].vue +++ /dev/null @@ -1,89 +0,0 @@ - - diff --git a/pages/article/[id].vue b/pages/article/[id].vue new file mode 100644 index 0000000..6ab63a3 --- /dev/null +++ b/pages/article/[id].vue @@ -0,0 +1,141 @@ + + diff --git a/pages/article/components/CardList.vue b/pages/article/components/CardList.vue deleted file mode 100644 index e263a32..0000000 --- a/pages/article/components/CardList.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - diff --git a/pages/ask/[userId].vue b/pages/ask/[userId].vue deleted file mode 100644 index c01b884..0000000 --- a/pages/ask/[userId].vue +++ /dev/null @@ -1,211 +0,0 @@ - - - - diff --git a/pages/ask/components/CardList.vue b/pages/ask/components/CardList.vue deleted file mode 100644 index 16fdc56..0000000 --- a/pages/ask/components/CardList.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - diff --git a/pages/ask/index.vue b/pages/ask/index.vue deleted file mode 100644 index bd5acee..0000000 --- a/pages/ask/index.vue +++ /dev/null @@ -1,103 +0,0 @@ - - diff --git a/pages/case/[id].vue b/pages/case/[id].vue new file mode 100644 index 0000000..a8599bf --- /dev/null +++ b/pages/case/[id].vue @@ -0,0 +1,193 @@ + + + diff --git a/pages/case/components/CardList.vue b/pages/case/components/CardList.vue deleted file mode 100644 index 3f5ad87..0000000 --- a/pages/case/components/CardList.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - diff --git a/pages/case/components/PageBanner.vue b/pages/case/components/PageBanner.vue deleted file mode 100644 index df21871..0000000 --- a/pages/case/components/PageBanner.vue +++ /dev/null @@ -1,115 +0,0 @@ - - - diff --git a/pages/case/index.vue b/pages/case/index.vue deleted file mode 100644 index 2b1fef2..0000000 --- a/pages/case/index.vue +++ /dev/null @@ -1,84 +0,0 @@ - - diff --git a/pages/category/components/CardList.vue b/pages/category/components/CardList.vue deleted file mode 100644 index 0e26051..0000000 --- a/pages/category/components/CardList.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/pages/category/index.vue b/pages/category/index.vue deleted file mode 100644 index 259e6f4..0000000 --- a/pages/category/index.vue +++ /dev/null @@ -1,91 +0,0 @@ - - diff --git a/pages/components/ArticleList.vue b/pages/components/ArticleList.vue deleted file mode 100644 index 96e5579..0000000 --- a/pages/components/ArticleList.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - diff --git a/pages/components/Banner.vue b/pages/components/Banner.vue deleted file mode 100644 index 11d6d93..0000000 --- a/pages/components/Banner.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - diff --git a/pages/components/CardList.vue b/pages/components/CardList.vue deleted file mode 100644 index 941262f..0000000 --- a/pages/components/CardList.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - diff --git a/pages/components/Carousel.vue b/pages/components/Carousel.vue new file mode 100644 index 0000000..7400e81 --- /dev/null +++ b/pages/components/Carousel.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/pages/components/Flash.vue b/pages/components/Flash.vue index a0db57f..d1d5061 100644 --- a/pages/components/Flash.vue +++ b/pages/components/Flash.vue @@ -19,8 +19,8 @@ -
- +
- v3.0 版本发布 + v3.0 版本发布

构建现代Web应用
- Vue 框架 +

-
WEBSOFT是一个基于Vue和Nuxt构建的web框架,使web开发更直观而强大
+
基于Java SpringBoot构建的SaaS软件平台、支持Vue、React前端框架
自信地创建高性能和生产级的全栈web应用程序和网站
-
- 立即开始 - - 源码下载 - 商业版演示 +
+ + + +
+ Windows + Windows +
+ +
+ macOs + macOs +
+ +
+ iOS + iOS +
+ +
+ Android + Android +
+ + + +
@@ -112,7 +134,8 @@ diff --git a/pages/components/PlugList.vue b/pages/components/PlugList.vue deleted file mode 100644 index d6d92d1..0000000 --- a/pages/components/PlugList.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - diff --git a/pages/components/ProductList.vue b/pages/components/ProductList.vue deleted file mode 100644 index 13a09c0..0000000 --- a/pages/components/ProductList.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - diff --git a/pages/detail/[id].vue b/pages/detail/[id].vue new file mode 100644 index 0000000..ec36a8b --- /dev/null +++ b/pages/detail/[id].vue @@ -0,0 +1,226 @@ + + + + + diff --git a/pages/detail/components/LikeArticle.vue b/pages/detail/components/LikeArticle.vue deleted file mode 100644 index 70cbbf5..0000000 --- a/pages/detail/components/LikeArticle.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - - diff --git a/pages/detail/components/PageBanner.vue b/pages/detail/components/PageBanner.vue deleted file mode 100644 index b3b03da..0000000 --- a/pages/detail/components/PageBanner.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - diff --git a/pages/detail/index.vue b/pages/detail/index.vue deleted file mode 100644 index 9472092..0000000 --- a/pages/detail/index.vue +++ /dev/null @@ -1,232 +0,0 @@ - - - - - diff --git a/pages/developer/components/CardList.vue b/pages/developer/components/CardList.vue deleted file mode 100644 index 1bad488..0000000 --- a/pages/developer/components/CardList.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/pages/developer/index.vue b/pages/developer/index.vue deleted file mode 100644 index e45f4b7..0000000 --- a/pages/developer/index.vue +++ /dev/null @@ -1,154 +0,0 @@ - - diff --git a/pages/developer/join-in.vue b/pages/developer/join-in.vue deleted file mode 100644 index 701ed25..0000000 --- a/pages/developer/join-in.vue +++ /dev/null @@ -1,149 +0,0 @@ - - diff --git a/pages/docs/components/CardList.vue b/pages/docs/components/CardList.vue deleted file mode 100644 index 1bad488..0000000 --- a/pages/docs/components/CardList.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/pages/docs/index.vue b/pages/docs/index.vue deleted file mode 100644 index 0eaa8bc..0000000 --- a/pages/docs/index.vue +++ /dev/null @@ -1,103 +0,0 @@ - - diff --git a/pages/down/components/CardList.vue b/pages/down/components/CardList.vue deleted file mode 100644 index 53a343e..0000000 --- a/pages/down/components/CardList.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - diff --git a/pages/down/index.vue b/pages/down/index.vue deleted file mode 100644 index 482aa34..0000000 --- a/pages/down/index.vue +++ /dev/null @@ -1,96 +0,0 @@ - - diff --git a/pages/index.vue b/pages/index.vue index 3f4d29d..5f146f7 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -1,68 +1,442 @@ + + + + diff --git a/pages/item/[id].vue b/pages/item/[id].vue new file mode 100644 index 0000000..2e15109 --- /dev/null +++ b/pages/item/[id].vue @@ -0,0 +1,278 @@ + + + + + diff --git a/pages/item/components/Comments.vue b/pages/item/components/Comments.vue index e75dd0f..898ce9d 100644 --- a/pages/item/components/Comments.vue +++ b/pages/item/components/Comments.vue @@ -8,7 +8,7 @@ size="large" status-icon > - +

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
1-}|J#^37I01E$ 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
;t*`)RU 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 SjQDwxuA*t08W#8O)><1NDi zD7{#MtNTA_|5sl92cV|r|39d!E5raaS}$)s`+w>EUlDs51i0G^=-GR@`FPse18`Po zu)E|0q|75^Tq=w|EV zYLE2(d#v5RV@3YYv5+{px`UY&?LD1*?d_C3-CUW`%a(NdziEO0pZNY7YxjTCBJ_Wb z6#&EtK%4s?oBj7IAVJXMKcWj7{|LW55=gu!5bg6l7ztWnVRo;93Spej!k)k||M_5n zCoF96jfIVa4SjHManK)JTs%B{JUmm;n;zwEZL-K?a^b*F% z4Qg#XS%ts7dF3U78=B8Xv2@cmu@1HWwp-Cqlnji6;b7umV}bEtCI~&*HQg&%@X`1@ zy{p*r*0n4iAwu62miC3;c(Rh8&%lTP93~kS8SDn^G_S3_&2=6{=fi6{okKhF69)5m zZPPK#&!frvyHEAEG(Xa%XP2&|^7OW>@8S0PIjnha{6(F%hQH{axty~7dD!LJuX^QQ)# zf7%Qn7@VIq+b_rt{m`Sv9{}91p*L5L+q%kA7yX=bhGgKM?@#{Fjy#!P{50^jt>I$+ zSup>Z^Ve}8fFp=qkT6g?VAilH+j67~6U<@kWnK_70oa9nm~RExwX3iCO$K0LMZX9-Dro?F#t6oc9g5%373jRL zKT}dHecAW-$H zvO<5xHE6X|jM6##f6Y1zW`%pKeE7-;77GB-?D$UrK-LX3$_px}<{H7?*{t*>E^wn6 zI^e>(&MzGxvjT)h5ES|+WkO}p-2dQyADRnzEv|M! zJ?I5ou0z^FMp7&^$FWxu8Ajg0{w2vNpkt+WvoWi?8y6Sr;q2>^bw{1dZ!2 z)|iDljgMt|Jk%)z93!r6zuK1 zH`v?8S3v>o4u5)NTDJ)H%uMK^2H2<8EkU0EX;9Vg}fwx!eUPom52=3N?7{ z`-~AEO=!o8M}g@}nlA8*EbyK#1N4spb_B}*BUmdMOoi5s;%wh|w)(jnx})Z26o3j_ zbhZ11@&}Fo2iZS85V8ji@x7@%V99@tAN%#s5EWW0fLI&Zs_+%8$0^7dy&l{@F09c4 ze-j4bdiASj2O^p3K?A+Xe?xsmQ-1;UYzJDT_^b*1dM9fKdL>};p2T;4CSVTv&Y2gK z+GO+g|M?6UcBykF?s^VuYd?A!pFG(1873}hEqMnG)l3Gg`s=klv>f9r+OG5Vf4@GO zpU_9YrdN|`@=2PuU|w`pK|_cct6EHa`t=Mz7=YLFl5uP~v#tI2s-GjXwWXgQZ1M>BcU zPpd%cv~D7kH?P%)W^tFXe%gWjlILtyA9$uYJ67P)D=QtxG<{O08mC{7irdlF_PIuV!hyfxo^@mEnSIz*^D9dtE*pM)+i#b zRis~EJOxqE=Y$5QkW#-FON=TV^i7(*0N20g2-f~Tz+iu2-A02I8tifdWU6H|02rCA zq&1dl3s%Z=(Ftb$7ZoyFz4`)5tHjwgmUzriN*($UW1+jm!Rf;~?IT zPg`8|-WI;t4}c%q!XH4gz!Y9xvoiJ;$pA~4K=6gwaBPiBL!y`L3yF>1vf6H2WyPyj z1-HiXW!ap}iZLT8-a`K4@t7gb#xLT@sZAEw#Al6qD!&HB#$>H#@fP$q9C%Ey($kC` z#$8sQvd!HSnY6%M@!^tZ3SY>L$|JI*3k(gR&hI{${zR%xC_vmHuS*gqd6pR%s(?ZN z5OiKzQdw#$d8lMW@WCj-}inh5G*MHK+rl7 z`+-e8sQZU_`x2W9an9>)c?oJ6`A-qnF-LehatFdwZaPYEy33`Kp?8=FZ`k=@U$MRO zgYHvA@9jl9A0Fn~0-bGRe8rTeJI44LI&xDKZ?DoQG|NX3fTlg$SIw8UT>Mh%ZPw!I zm$G*$e0w8X^&wUp0})B!4+g>w9+H5H1dh+ra%`cs25e-J5?aV@m3sBlA>9HptSx*B z6u|Z-4a?7Gw|{_56IZ<)@Z*^&BsZ6UHoZbiTjMI3WC6&=e?_xuR(PsKpD_w~}qyuEX(VD!EHs#P` z1x-d!u%xzsasMVV`}W{Zbm(Ag@BL)nRS$XL_kk7R_~ZN{?IKixY)4g@$KJzy5c?GO zZxM9P6waAHJBQgoG1x1}BIeG`gSh8Un<3h6ncQh<5kk;K;xD~-wDb-~#JbSwHG88D z`Wv$XTf_@aT^A2m&saK0n9h98uB{%P!@f5i-biVknJA*6#f`F-H`CRMpv55nWXSBy zr6{7WgpW;5ieLOl?h`RA$`KnALv92=4@-{O83QzFF<_76STY{TF*{=GpuaIOU?Hca zI2c7(ax71XK`*moVT3am7=%qs&V@}33&|zL$JUo)CdH=>$#ulR0{8)9XAA(J0s2HR z0jwx2^f^8b4$BiAQoRT=O*v*VO$bvV5f>l~%#4Lki~9tJ983zPdnET99~%=lgqc(? z3ZRAv$W;Z&k9EuQ+1VjkjT1_$)l!P$@+1|Yg3SUoHS0lFr-F}wxU=c@S~3(7sp zs{DA`94crweySv!PB%JTTQ}0LmsCcvt~gc*OIf(TG50t#%}=v6+4}xKc4Y96DtoJo zb^0jYocK*sC;bw++kr?wpUDQs*$warNp*)_Oga#G5Kw zb4}QIk)8wWQ9fn_A+r+p^KvqL=JE)hd_(-CCpS&E=&48byuY&z)5KG^O^E4;Uk~Zo zqkigGzPh@a{sGn3NAe!|x?cPh7d9roh=Glyp`1u5f7^3dX*sQqDF)^n?D8v*$tIN& zSf1LHa`|#mkluFYIVg(|N_uxIw1CEtI;&i;#U8)cP?18HFrUCcfknMES%Hh)0H0e4 zpF)`no~)}m7Se*t8p=wS_3B9qrW#M4i-95e6@@$u134u!9UWV)2!rdTk@*-DB#JiI z4D6biGQO_eI)}v$(0xB!Iq2^Q3MRg^xWj)A%jVptnD0L0J-Imu(#9>f^dWnHZhP-k_cKLzG;wfVgg`7AUgR^ zFo7sC13AQu!UZx%rT~2dVTEK1lIKwcNCSZ2qd{Sh06r|aPdboT=RqBKq1>gAL<0=C z`P8SO+_|Kp|^C)B#H}mP>Ttv8_DMHq*gFi+1L^gg=3GYVMta!Q^o$7wldm1+{D`nSM$xRIY zPcX?bdl!W4!+Xa~Jon6dCdlf$-8XM-PmYgf-1WZOY;5wynBkH>z1QZvczf>=rOCp4 zifO8dEMkUE`LPZ$oY`33!r<4jEwY+XJCO`woZHeRofp?=_i`?ZN=R;OGHU06ATNoQ z#ft$4CX$ntf`O*kAr7y#)G%Tfwzx4rk%wy^)wTI*(?5)U_&{&i&(Ns&euYeVm|k;a z$ZpqT!njO}tJ0c*QS-Rif!^zGlXuEq(8yft;7h|Xk(5yJSiCap52o*Ium38Z$huZA zc)a#ic*!)i^-lM^ttnmlOwKpK((&4WI;pBK%R(bwtLg7rw+2_*8l&ja)2Rd_>@uhj zn9Cvv*V3sbQx4f!df$i`j^JlYbIgw;ZrjXF#BI+w?eXO&$=)~5Uxsf}IpSQU|K?yo zF3-lCtjn&8&B9h5qh&}p*HLsJ$w%y7F<+BkVJxyl-RR+fkh#k8`O)S3I-BNRh}L|; zd$E@&m4SG?UDG9IHO-Hl%2f{^XR~+aNx~%XBw)uZGbA-6z{=Ah=if z@3u14^*r{7@}8K=cy?T&a<=jad3FQ!JaWRQWkS+?My}#eQatrsT3xK?cRXLl@SCtQ zHs~hj*AyeMSvi6P~S4 z&JY|nP%v_m2y6ljMI6u~jLOZ2h{KdimV2Z`cr8Dc>pF9{hj3nu`)lt5`jlPY&}D+M zxsgk8p9?D(+9j6l;1X}A3_86YZ+OL;FTF%$B-R*FSLz8n&s)t*6CfAX#iWc{Ni0b6 zPcQpp87k{)hOuzi-?d@nSepBoarOR<)xK-kkH&2HF&{mL(_x&$)_nK(chAhtv)X`N zGLO!=Gb{ESMy0_f@%d>(i7pa_%Cj9hcp1Z5!Os*)y~1zNQJ7k2Zb2n9)mr6Nb#4An zKdSqU^oxephh_ntiuyllth!rSkaBN(BW547V6~3Ub_9C#QCmMA$T72xxkWcKMe}Ys zMa2|CDG-=x6#vaTB zOSY|D57M>j_@$%#TUw|9Q`q3~OU(9jSiG~c?)c^jQfk<1wC1#9aHFZ?!Rpf6{>|0a z^xnb*XGWh423{)$SGaJv#&H#y<6Ez1-P<}JhzGD64~6_c*3ghJ+GVxYRprl$flN9hFO8?x90lHmhoxTYK1Uu*68GOmj^^s_p>nQBBuxn$}MnSAT6 zsJbiPANsuCf+XqjrO=l#-gyQhn1sk=Hal7a!%g{E9p(hxs|J{aaD)Kyu$gnB(#-}uRCrB!a%|m8@Plit|Pr~z75K)2u z*1Iw-ne?usuAYvj&dsROcj~222qVH2brgu~f!eVf$d82Xp2Kt(2U5>rbSYF@r+sV5 zfxpgZsa{N2oWmrwmwCIMo*4gnnt7pc4HLa}N_rtrh{;D4aC7gllmQjX!%`9q8O8YX z94H=g2Pg+{KtLUoL|}4fJ%0yJqY9AoL2CtY513F42E|(#r19v02zVBtWk4yxFif;g zK|vYtWguF^#EZIkR3Ze;@A=t4pF?ud?(CBsI&#Y`)B)a$9QZxRQ37tEyK_NMhouWS zOvowb=7!|QE3#o?DPUm9bAjLrOYS)jGX-#t#7360Y94&KNn-0)RTTDnn4?Y{7Ep(cvsFtE#|CiVW>TjXPu zY2MiQ>jUr&gC4DpU+R>nyL5j@y!dJM5~m>b#TN0L6(g&Jr%l5>SJw?83X-#o_kr4y zFQ<~0qs}JJ^4tc*v+K{+GM0CbYVH@ZuCJ2YXL%Eabp?M#?o7REk{g)b8q6)TltGTF6JxZq7Ug!r?s@;5Bfxsr!7(_&k9R$8`@yg zEgln18+EUKmf*PiR#g>*O2>yzeJs>2Jl*hJ+uHv&QTxREq`lM9#ndCGE4&Y*a6+x1#%83%q|KNcR7wtRZ|U8RF8@vU3J zo=YCS_aB{EG|OyUjgy>^W@7U7{bqk4tGqbT;o}>vRwRef41au6d2O@D(r!9s`q>p4 z=IjYn6C*3VsZ({~!yjQ=CNa}vs5sKT!LAkownj0xmKDL@p7pq`@-O4JzfQCd-!f(z z-`>|7WvUxJhdCe8H@%MgU%&LanQ=4Y^Cff9&~oK_mrdT@x*_mH8-b07>z6gg z8#+03?^-H_M`}rIy0DI3Yv^*i&$~PC$D9nw@8UB}h2)Yvp?+VEpI<6ed`;(z!5cYU zC3`|_twK^w3c|vCvZ+u*`9I{C+@ZPt%-(X_q-tF7=JFVRNh6&Y5?(H4p>h!Y8ptcE zml~k`7Ip|vm?B{qh9ZW6jk^(9^;#0#mM8BCg((gNc6lUl$y^Xidv^H=;a(l7lCsT^y&hq*~u!-Nv){ThjGp2p3WkxsgbJ(q5p^5yd zi9+D+fo6$P7)(9FFNSoAd<35x%9wycJLUl`{scTP6a+%HEF?edBC@=QJTZWIKnJAY z8_I8hD@N-%&}#q=+^!5zA+&-5?@TT?BFU8psW!-yfEt4^6YY3MfL#FTn+{GM?Ugl?fZKvL~E(qq7b3~v^qw!fE!ia!alH3Ug!Z?QQ(qXTdQ*stehZEp zhUEt~8tqGH>GcdBfAWpBZzy8xDE+)Pf+`?%9zSxWOv>c@N_s#_M*eE<(5NGInDfao zjt%*kv*6xVo(09*+RT)Fv8=kMbQxYHA8*|DPHaLuAtX)I2}fBo7!csjxU;j zylXCf4&w+Aii`XDY`-85o>Ss55N$ra*BdY& zJ^OYrZ;Gt2ZQs|YMk+ODF7b&BKO^D3^7W$>b4-pbkLv6N7m@InwN)U$OLR{;W1Sg1J3gk@zsKD0>oKXKUr;yF~guH~1m^jLPwVwB;C4!FLjr z@>^75@h4mA#M{x`*jic|f1i^{tT5gPM{}zB2aKuoS~MLcNAuHNYw-<312VZ}w-~q_ z@w`#~W_*adqkSo&sBe2hBg2-xzwh|D6!h2TXjYACShVqq&8TP!Nuhjy41M^}YPO~M zaxT|&I$i`{Bx@u6v0S%Wj{_MsJf~_Y@6P*?o6l{_OMT?!m2~hKFtK-4nKO9U$mLY2 znS0Gkg;_XC1q9{l$Z_o`G6Q+&w^>L7xI?1U3~W4%$Rd&xDTSO%6AYC_K_bBwf}uzZ z>LC5P?ld}@WSAJ(SIRlcW9-Tk-hQrRWuR0gSG-c1QO=I3h<^n)ikwVI;Trbyhy+r3 zXQG$lhnEjl&+x9hp}G$mJOyr4ww-yucxRl~eGVJ$dMCZ$c9wExU)?BLCbtPp3U?S5 zez_bMEjO?Mzz~2Jr5EM{7#m$IC;_&CVhbq1z=0wQC_aEf^}ot3PzZ5hXFw4rmy}%x zNQ~>jIVP*8`o{K_;$*~xUG_V5k6hRE410tEt{0wF#QBc%j z`U1E|iopg#d8j`07T_p;qy!B*dq+%!&aqXoF|i>+AiEeEL8^lGXPwR+JhXfcJe z!&SWS15J5SZ)<5h^>?)_$?yJJJ|8*OJtb$DcU%zjr&3`|*JxLn?tH4UjxBnedN9hX zIlppd`5}7)v6MxeiF;Nwdb?X(bT>|u)6V-9zVIbKD%{8OUQ<4_j@Z1yZNF5jr~VYL z%3mf~rlM2hU5L!M{F&N5e|+e6u?Jr}WfO-{OnQLTjd0#b1|KB5hX|GJ80`D!paBbs z&V=a?Z*l~4Ty6-hW2?DQQBLoj)RGO-b;`l92M5Bn^CiU9_C*SNhJ)Ag) z&AQ$AFq<5B#t?@c^L}%IM1$tiDP?S|WZ=$l-(Pzhw1Gdr)x5`g_ebm9 zPg^h6ig_)y8ySh4%xfzJ(yOES!^!kkY76h^os6n}EJv-(9Hy#dwzM~QrQJmGYAaPC z#2*9)>m63P9Gc+=!cE=BQLk$4OZi;co81fR5C&qck9fPHL%DyZ;t9OZJS|XBYIL;? z=H3hI)2>8~Nl{J}FU0CUIEQVMnz8cSbupuRz&&%nppag{EcM>Q9)EG|9e(x=IH)0M zA}4iwvu>F5eZ^R3xKEWi^idjZ+3=TR>~qGtLlu8oWqPj|sg!V^ZVXasU+$gGZf%h` z(^&jbqG^#L&*h#r_^X65y1)acQ&+v}&^)ky!aXJ@Gx;3mzBrYYs!9L$>dxnBl~nnI zYAvhiwt|}IRZWXd>(fOi;-=q5%@!TaV!HAa-V&c`p1YWfEoTg0`C7te3il1b6F!Ie ztc_}I;Asr6u38%td(-k3SqFahm~o)adAa@m+Yq~IxRbS$MB|Qpw$jaPMQV)@^Q+`{ z%ib8+BYAk433*2F;i)*voYEZlp+DReQ+b$^;1tF%%-r_=I~0bmX%b=EOH}EN3HiI%_DYg>LLEyJTgV9Wm=#@&$YRRb>XUUN z!gNJ6ba8ZJz^~kMaszc{P`%>jxq_{WNpKCPTVvzcGZ+JeN>4#%)I5pKizLorkPZ90 zUgvw}a4>nv)-*{U6x9fIH9$B7G8TQg5h#}d#s*Zxzyr8B6mkqwlz$_oQfDZbLgyk- zkpi6%LBrsaWMzAHRswL zr|-O#*>*c-yzj=5CgIWiYfms9UvEucb#$ z94}{6M@;l)QEaTQ(IItx_D82T3krm5&t~8+sLWSP-byp1-mY!zUYn&q!eV55@Wr?5 zwhV7$yjqNGoYc%d;?(@8Tc+(@qrRj#F%d_$N`ozupxVduu;*31*wXrQ*?233JBfzx zY_)HRFtH>ZUo|fZkQFgQD4iVkU0QUaD{kUstuDY0^>uaJ8mrydXgG+AIlIwUC7eE# z=Q6OE25udeyzV2Qa8X(KV)E_8Bxa*Jd&(=QG^?PvBRjlZ_(zCs9IgeQtc3-RZ_mr^ z!}U71!z`grWrbn3xB~40P5#Z@+Xsh}aWvn)nI$|N#-5~-?zhHiE}*LnyiU7+x-*d8 zC6iOL^~P9zW?(ICeWsZPzc3MDRO0)x?bk0cm7Vd81Ft`cf4os`%*o$IpFL_={b^;n zBz3DHz;IEt-?nyFaU%}C{(j4*-a5m*=^3NM&!s{d*tO_gA~l zVbgRiH%i@?G0C2YMd zmQx)V{bSPx8S3MJlP->c8)r9C{vbvXUA#!%!knE)Q=)uRrn0-bqD>l^9&_Meks6xbr&M_~{A~0*f{Gs#Af1^86HVhHD@^T6t3b}275CmjV&V(0*RuJexIi@2v z=EdO!l&1c5%*U)G^B%N#z)2k_wdsPo6FQ4@4uOv8pwkH`RD{Ay?l8!B;;=lC3o*o! zi^7h8NE=myMUb)y!k7;y+t*HVzPt&dlNRUmPPr0F{q^;!0Ulwo{z>5q%_-y6bc@AB z3lBHEpd}){@3g2~VK=RYY?sFtRaY|$T;1IIS6p|0Et^ZxnZXsjoU6}af@UwfD_(fd zczQ0_wPcvQlap9&@1x#($uz58`;+r}UWFfDY~l5#Ub6u6vG>GWK7^O+s=N+O8~P<% z5#0A3kg?a?2hs}sgzG(+4)|C0BtDHWg)yMit8}w$9g)LAm2Fy&(w?NOC7O!pwhJg_ zW}zZvcw18{yF>RKvmRD)h}{Z69C^{1;ASu`(c#}-d`h&!VX)E1t9*TQe)c`K`J1@< zqy!}t?p@j9j`diqf-;vlwV29TX%C6@%Gs;f$__%Ec8tPlK=)}4xgBwhgv*;hp+LPe~WwiDu8cM6U*=)$Clpxf0~` zV#b_$cVk`KdrZ0qDf0g7?YQCG7DO}OK-L;bwPoPG{SR+@uiPkvB1uyNQ`vQkWtAD; z`s#|ov07?ttGdj%+JH>k*bFN1b)&|C)ZWb{#1*^;J1Hl1ZWHl|#aSL!GpA<06E6=Y zBKM?zvKhu>$&J=$XZ}v<@A0>#86M