From 6741aa96563ec1549cbfbc76e9024bfe8490ab38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=9D=E5=86=9B=E5=8D=8E?= Date: Tue, 4 Mar 2025 23:07:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=90=AD=E5=BB=BA=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + .hbuilderx/launch.json | 16 + .idea/.gitignore | 5 + .idea/TakeOutShop.iml | 12 + .idea/UniappTool.xml | 14 + .idea/git_toolbox_blame.xml | 6 + .idea/git_toolbox_prj.xml | 15 + .idea/jsLibraryMappings.xml | 6 + .idea/material_theme_project_new.xml | 12 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + App.vue | 36 ++ index.html | 20 ++ main.js | 14 + manifest.json | 80 +++++ package-lock.json | 484 +++++++++++++++++++++++++++ package.json | 20 ++ pages.json | 87 +++++ pages/cart/cart.vue | 33 ++ pages/cart/style.scss | 0 pages/classify/classify.vue | 33 ++ pages/classify/style.scss | 0 pages/index/index.vue | 220 ++++++++++++ pages/index/style.scss | 270 +++++++++++++++ pages/sidedish/sidedish.vue | 32 ++ pages/sidedish/style.scss | 0 pages/user/style.scss | 0 pages/user/user.vue | 32 ++ server/api.service.js | 38 +++ server/config.js | 21 ++ static/index/AI.png | Bin 0 -> 68425 bytes static/index/arrow.png | Bin 0 -> 1157 bytes static/index/cart_img.png | Bin 0 -> 34283 bytes static/index/img.png | Bin 0 -> 222692 bytes static/index/location.png | Bin 0 -> 996 bytes static/index/location_active.png | Bin 0 -> 1106 bytes static/index/no1.png | Bin 0 -> 6082 bytes static/index/no2.png | Bin 0 -> 6516 bytes static/index/no3.png | Bin 0 -> 6589 bytes static/index/refund_img.png | Bin 0 -> 51272 bytes static/index/scroll_img.png | Bin 0 -> 1102662 bytes static/index/shopimg.png | Bin 0 -> 407996 bytes static/index/v.png | Bin 0 -> 474 bytes static/index/直播炒菜@2x.png | Bin 0 -> 877628 bytes static/oncatr01.png | Bin 0 -> 2263 bytes static/oncatr02.png | Bin 0 -> 1015 bytes static/search_img.png | Bin 0 -> 1456 bytes static/tabBar/Home.png | Bin 0 -> 1538 bytes static/tabBar/Home_active.png | Bin 0 -> 3168 bytes static/tabBar/cart.png | Bin 0 -> 2104 bytes static/tabBar/cart_active.png | Bin 0 -> 3800 bytes static/tabBar/class.png | Bin 0 -> 1667 bytes static/tabBar/class_active.png | Bin 0 -> 4173 bytes static/tabBar/sidedish.png | Bin 0 -> 2574 bytes static/tabBar/sidedish_active.png | Bin 0 -> 4435 bytes static/tabBar/user.png | Bin 0 -> 2043 bytes static/tabBar/user_active.png | Bin 0 -> 4542 bytes static/tag_img.png | Bin 0 -> 7815 bytes store/counter.js | 23 ++ store/index.js | 44 +++ uni.scss | 76 +++++ utils/index.js | 33 ++ 62 files changed, 1698 insertions(+) create mode 100644 .gitignore create mode 100644 .hbuilderx/launch.json create mode 100644 .idea/.gitignore create mode 100644 .idea/TakeOutShop.iml create mode 100644 .idea/UniappTool.xml create mode 100644 .idea/git_toolbox_blame.xml create mode 100644 .idea/git_toolbox_prj.xml create mode 100644 .idea/jsLibraryMappings.xml create mode 100644 .idea/material_theme_project_new.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 App.vue create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/cart/cart.vue create mode 100644 pages/cart/style.scss create mode 100644 pages/classify/classify.vue create mode 100644 pages/classify/style.scss create mode 100644 pages/index/index.vue create mode 100644 pages/index/style.scss create mode 100644 pages/sidedish/sidedish.vue create mode 100644 pages/sidedish/style.scss create mode 100644 pages/user/style.scss create mode 100644 pages/user/user.vue create mode 100644 server/api.service.js create mode 100644 server/config.js create mode 100644 static/index/AI.png create mode 100644 static/index/arrow.png create mode 100644 static/index/cart_img.png create mode 100644 static/index/img.png create mode 100644 static/index/location.png create mode 100644 static/index/location_active.png create mode 100644 static/index/no1.png create mode 100644 static/index/no2.png create mode 100644 static/index/no3.png create mode 100644 static/index/refund_img.png create mode 100644 static/index/scroll_img.png create mode 100644 static/index/shopimg.png create mode 100644 static/index/v.png create mode 100644 static/index/直播炒菜@2x.png create mode 100644 static/oncatr01.png create mode 100644 static/oncatr02.png create mode 100644 static/search_img.png create mode 100644 static/tabBar/Home.png create mode 100644 static/tabBar/Home_active.png create mode 100644 static/tabBar/cart.png create mode 100644 static/tabBar/cart_active.png create mode 100644 static/tabBar/class.png create mode 100644 static/tabBar/class_active.png create mode 100644 static/tabBar/sidedish.png create mode 100644 static/tabBar/sidedish_active.png create mode 100644 static/tabBar/user.png create mode 100644 static/tabBar/user_active.png create mode 100644 static/tag_img.png create mode 100644 store/counter.js create mode 100644 store/index.js create mode 100644 uni.scss create mode 100644 utils/index.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c0b65b5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +unpackage/ \ No newline at end of file diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..81f13f4 --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,16 @@ +{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version": "0.0", + "configurations": [{ + "default" : + { + "launchtype" : "local" + }, + "mp-weixin" : + { + "launchtype" : "local" + }, + "type" : "uniCloud" + } + ] +} diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..10b731c --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ diff --git a/.idea/TakeOutShop.iml b/.idea/TakeOutShop.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/TakeOutShop.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/UniappTool.xml b/.idea/UniappTool.xml new file mode 100644 index 0000000..adde661 --- /dev/null +++ b/.idea/UniappTool.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/.idea/git_toolbox_blame.xml b/.idea/git_toolbox_blame.xml new file mode 100644 index 0000000..7dc1249 --- /dev/null +++ b/.idea/git_toolbox_blame.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 0000000..02b915b --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..c27af06 --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..d05d957 --- /dev/null +++ b/.idea/material_theme_project_new.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..0c8b6f0 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..5224a66 --- /dev/null +++ b/App.vue @@ -0,0 +1,36 @@ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..c3ff205 --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..742f11f --- /dev/null +++ b/main.js @@ -0,0 +1,14 @@ +import { createSSRApp } from 'vue' +// import store from './store' // 如果使用Vuex等状态管理库,则需要引入store等配置项。 +import { createPinia } from 'pinia'; // 引入 Pinia +import App from './App.vue' +// 创建 Pinia 实例 +const pinia = createPinia(); + +export function createApp() { + const app = createSSRApp(App) // 使用createSSRApp创建应用实例(对于小程序很重要) + // 使用 Pinia + app.use(pinia); + // app.use(store) // 使用Vuex等状态管理库(如果有的话) + return { app } // 注意此处返回的是app实例的引用,这对于小程序很重要。 +} \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..a02b7af --- /dev/null +++ b/manifest.json @@ -0,0 +1,80 @@ +{ + "name" : "TakeOutShop", + "appid" : "__UNI__5830F80", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wxae650b415f68bf70", + "setting" : { + "urlCheck" : false, + "es6" : true, + "postcss" : true, + "minified" : false + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "将获取您的具体位置信息,用于门店和您之间的距离以变您进行消费" + } + } + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..049c2f9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,484 @@ +{ + "name": "takeoutshop", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "takeoutshop", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "js-md5": "^0.7.3", + "jweixin-module": "^1.4.1", + "mini-html-parser2": "^0.3.0", + "number-precision": "^1.3.2", + "pinia": "^3.0.1", + "qs": "^5.2.1", + "vuex": "^4.0.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "peer": true, + "dependencies": { + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "peer": true + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "peer": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "peer": true, + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "peer": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz", + "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==", + "dependencies": { + "@vue/devtools-shared": "^7.7.2", + "birpc": "^0.2.19", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz", + "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "peer": true, + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "peer": true, + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "peer": true + }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "peer": true + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "peer": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "node_modules/jweixin-module": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/jweixin-module/-/jweixin-module-1.6.0.tgz", + "integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w==" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/mini-html-parser2": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/mini-html-parser2/-/mini-html-parser2-0.3.0.tgz", + "integrity": "sha512-W4x1MCmtlnAH5M9qQ1WbRn+hTvv7bdrJx4VI+6SD0MUZatW/6K7v213Aidx7VDQmSKoRv+iAn5TswJnesOs71Q==", + "dependencies": { + "domhandler": "^2.4.2", + "entities": "^1.1.1", + "events": "^3.0.0" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/number-precision": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/number-precision/-/number-precision-1.6.0.tgz", + "integrity": "sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ==" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "peer": true + }, + "node_modules/pinia": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.1.tgz", + "integrity": "sha512-WXglsDzztOTH6IfcJ99ltYZin2mY8XZCXujkYWVIJlBjqsP6ST7zw+Aarh63E1cDVYeyUcPCxPHzJpEOmzB6Wg==", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/@vue/devtools-api": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.2.tgz", + "integrity": "sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==", + "dependencies": { + "@vue/devtools-kit": "^7.7.2" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/qs": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/qs/-/qs-5.2.1.tgz", + "integrity": "sha512-sh/hmLUTLEiYFhSbRvkM4zj6fMWnbqQt9wrppR2LJA/U/u4xS2eWN8LBE1xc79ExYZJBVZYSMBv/INC7wpE+fw==", + "engines": ">=0.10.40" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vuex": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz", + "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.0.2" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c41b206 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "takeoutshop", + "version": "1.0.0", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "js-md5": "^0.7.3", + "jweixin-module": "^1.4.1", + "mini-html-parser2": "^0.3.0", + "number-precision": "^1.3.2", + "pinia": "^3.0.1", + "qs": "^5.2.1", + "vuex": "^4.0.2" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..d9bf482 --- /dev/null +++ b/pages.json @@ -0,0 +1,87 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "首页", + "enablePullDownRefresh": true, + "navigationStyle": "custom" + } + }, + { + "path": "pages/classify/classify", + "style": { + "navigationBarTitleText": "分类", + "navigationBarBackgroundColor": "#f2f5f7", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/sidedish/sidedish", + "style": { + "navigationBarTitleText": "帮你配", + "navigationBarBackgroundColor": "#f2f5f7", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/cart/cart", + "style": { + "navigationBarTitleText": "购物车", + "navigationBarBackgroundColor": "#f2f5f7", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/user/user", + "style": { + "navigationBarTitleText": "我的", + "navigationBarBackgroundColor": "#f2f5f7" + } + } + ], + "tabBar": { + "color": "#000000", + "selectedColor": "#E60703", + "backgroundColor": "#ffffff", + "borderStyle": "white", + "list": [ + { + "pagePath": "pages/index/index", + "text": "首页", + "iconPath": "static/tabBar/Home.png", + "selectedIconPath": "static/tabBar/Home_active.png" + }, + { + "pagePath": "pages/classify/classify", + "text": "分类", + "iconPath": "static/tabBar/class.png", + "selectedIconPath": "static/tabBar/class_active.png" + }, + { + "pagePath": "pages/sidedish/sidedish", + "text": "帮你配", + "iconPath": "static/tabBar/sidedish.png", + "selectedIconPath": "static/tabBar/sidedish_active.png" + }, + { + "pagePath": "pages/cart/cart", + "text": "购物车", + "iconPath": "static/tabBar/cart.png", + "selectedIconPath": "static/tabBar/cart_active.png" + }, + { + "pagePath": "pages/user/user", + "text": "我的", + "iconPath": "static/tabBar/user.png", + "selectedIconPath": "static/tabBar/user_active.png" + } + ] + }, + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "外卖点餐", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + } +} diff --git a/pages/cart/cart.vue b/pages/cart/cart.vue new file mode 100644 index 0000000..3832237 --- /dev/null +++ b/pages/cart/cart.vue @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/pages/cart/style.scss b/pages/cart/style.scss new file mode 100644 index 0000000..e69de29 diff --git a/pages/classify/classify.vue b/pages/classify/classify.vue new file mode 100644 index 0000000..06a29c0 --- /dev/null +++ b/pages/classify/classify.vue @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/pages/classify/style.scss b/pages/classify/style.scss new file mode 100644 index 0000000..e69de29 diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..2f2d3a4 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,220 @@ + + + + + \ No newline at end of file diff --git a/pages/index/style.scss b/pages/index/style.scss new file mode 100644 index 0000000..14028ac --- /dev/null +++ b/pages/index/style.scss @@ -0,0 +1,270 @@ +page{ + background-color: #F6F6F6; +} +.main{ + .head{ + position: fixed; + z-index: 100; + width: 100%; + top: 0; + left: 0; + background: linear-gradient(405deg, #F4CECD 0%, #F6F1DC 100%); + padding-bottom: 10px; + .head_location{ + display: flex; + align-items: center; + height: 45px; + .location_img{ + width: 18px; + height: 18px; + margin: 3px 5px 0 10px; + } + .location_title{ + font-size: 28rpx; + color: #000000; + font-weight: 500; + } + .location_arrow_down{ + width: 0; + height: 0; + border-left: 11rpx solid transparent; + border-right: 11rpx solid transparent; + border-top: 13rpx solid #000000; + margin-left: 5px; + margin-top: 3px; + } + } + .head_search{ + margin:0rpx 10px 0rpx 10px;; + display: flex; + align-items: center; + background-color: #FFFFFF; + height: 40px; + border-radius: 50rpx; + font-size: 28rpx; + color: #000000; + justify-content: space-between; + .head_search_img{ + width: 20px; + height: 20px; + margin-left: 13px; + } + .head_search_input{ + width: 500rpx; + height: 100%; + margin-left: 10px; + font-size: 26rpx; + } + .head_search_border{ + height: 15px; + width: 1px; + background-color: #D9D9D9; + } + .head_search_btn{ + width: 120rpx; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + } + } + } + + .grid_wrap{ + padding: 20rpx 20rpx 20rpx 20rpx; + display: flex; + justify-content: space-between; + background: linear-gradient(124deg, #F4CECD 0%, #F6F6F6 50%); + // background: linear-gradient(405deg, #F4CECD 0%, #F6F1DC 100%); + .grid_wrap_l{ + width: 338rpx; + height: 338rpx; + background-color: #000000; + border-radius: 20rpx; + overflow: hidden; + position: relative; + .grid_wrap_live{ + width: 338rpx; + height: 338rpx; + position: absolute; + top: 0; + z-index: 1; + } + .grid_wrap_live_title{ + font-size: 30rpx; + color: #FFFFFF; + display: flex; + z-index: 2; + top: 20rpx; + left: 20rpx; + font-weight: 500; + position: absolute; + display: flex; + align-items: center; + .grid_wrap_live_img{ + width: 28rpx; + height: 28rpx; + margin-right: 10rpx; + } + } + } + .grid_wrap_r{ + width: 355rpx; + .grid_wrap_li{ + padding: 20rpx; + width: 315rpx; + height: 123rpx; + background: #FFFFFF; + border-radius: 17rpx 17rpx 17rpx 17rpx; + display: flex; + justify-content: space-between; + align-items: center; + box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(0, 0, 0, 0.05); + .grid_wrap_li_l{ + .grid_wrap_li_title{ + font-size: 30rpx; + color: #333333; + font-weight: 500; + display: flex; + align-items: center; + .grid_wrap_li_arrow{ + width: 24rpx; + height: 24rpx; + margin-left: 10rpx; + } + } + .grid_wrap_li_desc{ + color: #999999; + font-size: 24rpx; + } + } + .grid_wrap_li_r{ + width: 140rpx; + height: 140rpx; + } + } + .grid_wrap_top{ + margin-top: 20rpx; + } + } + } + .scroll_view{ + width: 100%; + display: flex; + overflow: hidden; + white-space: nowrap; + .typescoll{ + .scroll_view_li{ + width: 620rpx; + background-color: #FFFFFF; + border-radius: 20rpx; + overflow: hidden; + padding-bottom: 30rpx; + display: inline-block; + margin-left: 20rpx; + box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(0, 0, 0, 0.05); + .scroll_view_banner{ + width: 100%; + height: 340rpx; + .scroll_view_bannerimg{ + width: 100%; + height: 340rpx; + } + } + .scroll_view_shop{ + padding: 30rpx 30rpx 0rpx 30rpx; + display: flex; + align-items: center; + justify-content: space-between; + .scroll_view_shop_l{ + width:150rpx; + height:150rpx; + position: relative; + .scroll_view_shop_no{ + width: 32rpx; + height: 45rpx; + position: absolute; + z-index: 2; + top: 0; + left: 0; + } + .scroll_view_shop_img{ + width:150rpx; + height:150rpx; + position: absolute; + z-index: 1; + top: 0; + } + } + .scroll_view_shop_r{ + width: 385rpx; + .scroll_view_shop_title{ + font-size: 28rpx; + color: #000000; + font-weight: 500; + .scroll_view_shop_desc{ + color: #666666; + font-size: 22rpx; + font-weight: 400; + } + } + .scroll_view_shop_tag{ + display: flex; + .scroll_view_shop_li{ + border-radius: 6rpx 6rpx 6rpx 6rpx; + border: 1rpx solid #FF6868; + padding: 0rpx 10rpx 0rpx 10rpx; + border-radius: 10rpx; + color: #FF6868; + font-size: 18rpx; + margin-top: 10rpx; + margin-right: 10rpx; + + } + } + .scroll_view_shop_bottom{ + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 12rpx; + .scroll_view_shop_price{ + font-size: 34rpx; + color: #FF0000; + font-weight: 500; + .market_name{ + color: #999999; + font-size: 24rpx; + text-decoration: line-through; + margin-left: 5rpx; + font-weight: 400; + } + } + .scroll_view_shop_cart{ + width: 65rpx; + height: 65rpx; + display: flex; + align-items: center; + justify-content: center; + .scroll_view_shop_cart_img{ + width: 50rpx; + height: 50rpx; + } + } + } + } + } + } + } + } +} +.price::before { + content: '¥'; + font-size: 24rpx; + margin-right: 5rpx; +} +.prices::before { + content: '¥'; + font-size: 20rpx; + margin-right: 5rpx; + margin-left: 5rpx; +} \ No newline at end of file diff --git a/pages/sidedish/sidedish.vue b/pages/sidedish/sidedish.vue new file mode 100644 index 0000000..86d7c9e --- /dev/null +++ b/pages/sidedish/sidedish.vue @@ -0,0 +1,32 @@ + + + + + \ No newline at end of file diff --git a/pages/sidedish/style.scss b/pages/sidedish/style.scss new file mode 100644 index 0000000..e69de29 diff --git a/pages/user/style.scss b/pages/user/style.scss new file mode 100644 index 0000000..e69de29 diff --git a/pages/user/user.vue b/pages/user/user.vue new file mode 100644 index 0000000..07d1043 --- /dev/null +++ b/pages/user/user.vue @@ -0,0 +1,32 @@ + + + + + \ No newline at end of file diff --git a/server/api.service.js b/server/api.service.js new file mode 100644 index 0000000..fce18bb --- /dev/null +++ b/server/api.service.js @@ -0,0 +1,38 @@ +import { url } from './config' +import {signGen} from "@/utils" + +function _request(options, showErrorModal = true) { + return new Promise((resolve, reject)=> { + uni.request(options).then(({data}) => { + if(data.status === "OK"){ + resolve(data) + }else{ + reject(data); + } + }).catch((err) => { + reject(err); + }) + }) +} + +export const apiService = { + query(path, query, sign = false) { + return _request({ + url: url + path, + data: sign ? signGen(query) : query + }) + }, + get(path, query, sign = true) { + return _request({ + url: url + path, + data: sign ? signGen(query) : query + }) + }, + post(path, params, sign = true, showErrorModal = true) { + return _request({ + url: url + path, + data: sign ? signGen(params) : params, + method: 'POST' + }, showErrorModal) + } +} \ No newline at end of file diff --git a/server/config.js b/server/config.js new file mode 100644 index 0000000..3e56091 --- /dev/null +++ b/server/config.js @@ -0,0 +1,21 @@ +// 环境接口域名变量 +let url = ''; +// 手动切换环境 +const type = 'prod' +/** + * 环境配置地址 + * dev开发 + * test测试 + * prod生产 + */ +if(type === 'dev'){ + url = "https://japitest.3721zh.com/webapp"; +} +if(type === 'test'){ + url = "https://japiuat.3721zh.com/webapp"; +} +if(type === 'prod'){ + url = "https://newapi.3721zh.com/webapp" +} +export{url} + diff --git a/static/index/AI.png b/static/index/AI.png new file mode 100644 index 0000000000000000000000000000000000000000..847e9600e9c494f863b66ab9f2c2f733b8882556 GIT binary patch literal 68425 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

FZs^QHWL9f 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