From b8e3de0f9b36c0efaf2b8577e9d9574610fd9a7b Mon Sep 17 00:00:00 2001 From: zc <2064281269@qq.com> Date: Fri, 28 Nov 2025 22:26:57 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 191 -------------------------------- README.md | 69 ------------ config.js | 5 +- core/config/defaultConfig.js | 2 +- manifest.json | 22 +++- package.json | 4 + utils/request/axios.js | 209 +++++++++++++++++++++++++++++++++++ 7 files changed, 233 insertions(+), 269 deletions(-) delete mode 100644 LICENSE delete mode 100644 README.md create mode 100644 utils/request/axios.js diff --git a/LICENSE b/LICENSE deleted file mode 100644 index c40d577..0000000 --- a/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "{}" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright 2018 萤火科技 - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 343369f..0000000 --- a/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# 萤火商城V2.0开源版 [uni-app端] - -#### 项目介绍 -萤火商城V2.0,是2021年全新推出的一款轻量级、高性能、前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城。 - - 如果对您有帮助,您可以点右上角 “Star” 收藏一下 ,获取第一时间更新,谢谢! - -#### 源码下载 -1. 主商城端(又称后端、服务端,PHP开发 用于管理后台和提供api接口) - - 下载地址:[https://gitee.com/xany/yoshop2.0](https://gitee.com/xany/yoshop2.0) - -2. 用户端(也叫客户端、前端,uniapp开发 用于生成H5和微信小程序) - - 下载地址:[https://gitee.com/xany/yoshop2.0-uniapp](https://gitee.com/xany/yoshop2.0-uniapp) - -#### 如何使用uni-app端 - -##### 一、导入uniapp项目 - - 1. 首先下载HBuilderX并安装,地址:https://www.dcloud.io/hbuilderx.html - 2. 打开HBuilderX -> 顶部菜单栏 -> 文件 -> 导入 -> 从本地目录导入 -> 选择uniapp端项目目录 - 3. 找到config.js文件,找到里面的apiUrl项,填入已搭建的后端url地址 - 4. 打开manifest.json文件,选择微信小程序配置,填写小程序的appid - -##### 二、本地调试 - - 1. 打开HBuilderX -> 顶部菜单栏 -> 运行 -> 运行到浏览器 -> Chrome - 2. 如果请求后端api时 提示跨域错误,可安装Chrome插件:【Allow CORS: Access-Control-Allow-Origin】,地址:https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf - -##### 三、打包发行(H5) - - 1. 打开HBuilderX -> 顶部菜单栏 -> 发行 -> 网站H5-手机版 - 2. 打包后的文件路径:/unpackage/dist/build/h5 - 3. 将打包完成的所有文件 复制到商城后端/pulic目录下,全部替换 - -##### 四、打包发行(微信小程序) - - 1. 下载微信开发者工具并安装,地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html - 2. 打开HBuilderX -> 顶部菜单栏 -> 发行 -> 小程序-微信 - 3. 打包后的文件路径:/unpackage/dist/build/mp-weixin - 5. 打开微信开发者工具 导入 打包完成的项目 - 6. 检查没有运行错误,在右上方上传小程序 - - -#### UNIAPP-页面展示 -![前端展示](https://images.gitee.com/uploads/images/2021/0316/215102_7bcb0802_2166072.png "前端展示.png") - -#### 系统演示 -![前端演示二维码](https://images.gitee.com/uploads/images/2021/0316/104516_3778337e_2166072.png "111.png") - - - - -#### 版权须知 - -1. 允许个人学习研究使用,支持二次开发,允许商业用途(仅限自运营)。 -2. 允许商业用途,但仅限自运营,如果商用必须保留版权信息,望自觉遵守。 -3. 不允许对程序代码以任何形式任何目的的再发行或出售,否则将追究侵权者法律责任。 - - -本项目包含的第三方源码和二进制文件之版权信息另行标注。 - -版权所有Copyright © 2017-2021 By 萤火科技 (https://www.yiovo.com) All rights reserved。 - - - - - diff --git a/config.js b/config.js index 03ace8d..1607afe 100644 --- a/config.js +++ b/config.js @@ -1,13 +1,14 @@ export default { // 系统名称 - name: "萤火商城2.0", + name: "购de着商城", /** * 后端api地址 (必填; 斜杠/结尾; 请确保能访问) * 例如: https://www.你的域名.com/index.php?s=/api/ */ - apiUrl: "https://www.你的域名.com/index.php?s=/api/", +// apiUrl: "https://shop2.client.yiovo.com/index.php?s=/api/", // 微信小程序 + apiUrl: "/index.php?s=/api/", // H5 /** * 是否启用商城设置缓存 diff --git a/core/config/defaultConfig.js b/core/config/defaultConfig.js index 0281fcc..efeaf3d 100644 --- a/core/config/defaultConfig.js +++ b/core/config/defaultConfig.js @@ -3,7 +3,7 @@ export default { // 系统名称 - name: "萤火商城2.0", + name: "购de着商城", /** * 后端api地址 (必填; 斜杠/结尾; 请确保能访问) diff --git a/manifest.json b/manifest.json index 9c66386..f61768b 100644 --- a/manifest.json +++ b/manifest.json @@ -1,9 +1,9 @@ { - "name" : "萤火商城2.0", + "name" : "购de着商城", "appid" : "", - "description" : "萤火商城V2.0,是全新推出的一款轻量级、高性能、前后端分离的电商系统,让您快速搭建个性化独立商城", - "versionName" : "2.1.2", - "versionCode" : 212, + "description" : "购de着商城,是全新推出的一款轻量级、高性能、前后端分离的电商系统,让您快速搭建个性化独立商城", + "versionName" : "1.0.0", + "versionCode" : 100, "transformPx" : false, /* 5+App特有相关 */ "app-plus" : { @@ -81,7 +81,7 @@ "quickapp" : {}, /* 小程序特有相关 */ "mp-weixin" : { - "appid" : "", + "appid" : "wx75fa59c097bd3dfd", "setting" : { // 是否检查安全域名和 TLS 版本 "urlCheck" : true, @@ -137,7 +137,17 @@ "base" : "./" }, "devServer" : { - "port" : 8010 + "port" : 8010, + "proxy" : { + "/api" : { + "target" : "https://shop2.client.yiovo.com", + "changeOrigin" : true, + "secure" : true, + "pathRewrite" : { + "^/api" : "/index.php?s=/api" + } + } + } }, "title" : "" }, diff --git a/package.json b/package.json index b7ecaff..a6ed338 100644 --- a/package.json +++ b/package.json @@ -4,5 +4,9 @@ }, "devDependencies": { "vite-plugin-multiple-entries2": "^0.0.1" + }, + "volta": { + "node": "24.6.0", + "yarn": "1.22.22" } } diff --git a/utils/request/axios.js b/utils/request/axios.js new file mode 100644 index 0000000..a49a6e4 --- /dev/null +++ b/utils/request/axios.js @@ -0,0 +1,209 @@ +/** + * @description: HTTP请求方法枚举 + */ +export const HttpMethod = { + GET: "GET", + POST: "POST", + OPTIONS: "OPTIONS", + PUT: "PUT", + DELETE: "DELETE", +}; + +/** + * @description: HTTP请求配置 + * @typedef {Object} RequestConfig + * @property {string} [url] - API路径 + * @property {HttpMethod} [method] - Method类型 + * @property {any} [data] - 接口返回数据 + * @property {boolean} [needToken] - 无TOKEN触发异常捕获时,是否执行异常逻辑 + * @property {object} [header] - Header头部 + * @property {string} [dataType] - 返回的数据格式 + * @property {boolean} [noShowMsg] - 请求报错时,是否弹出message提示(默认弹出) + */ + +class HttpRequest { + static instance = null; + constructor() {} + static getInstance() { + if (!this.instance) { + this.instance = new HttpRequest(); + } + return this.instance; + } + + // 处理请求异常状态码 + handerErrorStatus(statusCode, requestConfig) { + let msg = "服务找不到"; + if (statusCode === 502 || statusCode === 503) { + msg = "服务器开小差了~"; + } + !requestConfig.noShowMsg && + wx.showToast({ + title: `${msg},错误码:${statusCode}`, + icon: "none", + }); + return msg; + } + + // 处理请求异常 + handerError(err, requestConfig) { + let msg = `请求异常`; + if (/timeout/.test(err.errMsg)) { + msg = "请求超时"; + } + !requestConfig.noShowMsg && + wx.showToast({ + title: msg, + icon: "none", + }); + return msg; + } + + // 服务器接口请求 + request(requestConfig) { + const _this = this; + const wxSystemInfo = wx.getSystemInfoSync(); + const user_info = wx.getStorageSync("user_info") || {}; + const reqData = Object.assign(requestConfig.data, { + buyerId: user_info.buyerId, + flag: user_info.flag, + }); + return new Promise((resolve, reject) => { + wx.request({ + method: requestConfig.method, + url: `${requestConfig.url}`, + data: reqData, + header: { ...(requestConfig?.header || {}), token: user_info.token }, + dataType: "json", + success(res) { + const code = res.statusCode || -404; + const data = res.data; + /** 接口请求成功*/ + if (code == 200) { + if (["1003", "1004", "1005", "1006"].includes(data.code)) { + wx.showModal({ + content: data.msg, + success(res) { + if (res.confirm) { + wx.removeStorageSync("user_info"); + wx.navigateTo({ url: "/pages/login/index" }); + } else if (res.cancel) { + try { + wx.removeStorageSync("user_info"); + } catch (e) { + console.log("登录失效catch:", e); + } + wx.reLaunch({ url: "/pages/index/index" }); + wx.hideLoading(); + } + }, + }); + } else { + resolve(data); + } + } else if (code === 401) { + // 未授权 + !requestConfig.noShowMsg && + wx + .showModal({ + title: "登录失效", + content: "登录失效,请重新登录", + }) + .then((resModa) => { + if (resModa.confirm) { + wx.removeStorageSync("user_info"); + wx.navigateTo({ url: "/pages/login/index" }); + } else if (resModa.cancel) { + try { + wx.removeStorageSync("user_info"); + wx.reLaunch({ url: "/pages/index/index" }); + } catch (e) { + console.log("登录失效catch:", e); + } + } + }); + reject({ code, msg: "未登录", data: data }); + } else { + //非200及401状态码-数据处理 + const errMsg = _this.handerErrorStatus(code, requestConfig); + reject({ code, msg: errMsg, data }); + } + }, + fail: (err) => { + console.log("失败了", err); + + let msg = _this.handerError(err, requestConfig); + reject({ msg }); + }, + }); + }); + } + + /** + * @description: get请求函数 + * @param {string} url 请求地址 + * @param {Object} data 请求参数 + * @param {RequestConfig} OtherConfig request其他配置 + * @return {*} + */ + get(url, data, OtherConfig) { + return this.request({ + method: HttpMethod.GET, + url, + data, + ...OtherConfig, + }); + } + + /** + * @description: post请求函数 + * @param {string} url 请求地址 + * @param {Object} data 请求参数 + * @param {Object} thrid 三方接口 + * @param {RequestConfig} OtherConfig request其他配置 + * @return {*} + */ + post(url, data, OtherConfig) { + return this.request({ + method: HttpMethod.POST, + url, + data, + ...OtherConfig, + }); + } + + /** + * @description: delete请求函数 + * @param {string} url 请求地址 + * @param {Object} data 请求参数 + * @param {RequestConfig} OtherConfig request其他配置 + * @return {*} + */ + delete(url, data, OtherConfig) { + return this.request({ + method: HttpMethod.DELETE, + url, + data, + ...OtherConfig, + }); + } + + /** + * @description: put请求函数 + * @param {string} url 请求地址 + * @param {Object} data 请求参数 + * @param {RequestConfig} OtherConfig request其他配置 + * @return {*} + */ + put(url, data, OtherConfig) { + return this.request({ + method: HttpMethod.PUT, + url, + data, + ...OtherConfig, + }); + } +} + +export const httpRequest = HttpRequest.getInstance(); +