From e0e38d6ecdece52c9d0c1ecae6db5862859d86bd Mon Sep 17 00:00:00 2001 From: Agent Date: Fri, 20 Mar 2026 04:59:03 +0000 Subject: [PATCH] Initial commit: frontend code --- App.vue | 37 +++ api/auth.js | 55 +++++ api/index.js | 41 ++++ api/order.js | 62 +++++ api/product.js | 76 ++++++ main.js | 11 + manifest.json | 31 +++ package.json | 24 ++ pages.json | 60 +++++ pages/index/index.vue | 219 +++++++++++++++++ pages/login/index.vue | 293 ++++++++++++++++++++++ pages/order/create.vue | 537 +++++++++++++++++++++++++++++++++++++++++ pages/order/list.vue | 372 ++++++++++++++++++++++++++++ pages/product/list.vue | 274 +++++++++++++++++++++ 14 files changed, 2092 insertions(+) create mode 100644 App.vue create mode 100644 api/auth.js create mode 100644 api/index.js create mode 100644 api/order.js create mode 100644 api/product.js create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/index/index.vue create mode 100644 pages/login/index.vue create mode 100644 pages/order/create.vue create mode 100644 pages/order/list.vue create mode 100644 pages/product/list.vue diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..d3a8b64 --- /dev/null +++ b/App.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/api/auth.js b/api/auth.js new file mode 100644 index 0000000..8fd7bdf --- /dev/null +++ b/api/auth.js @@ -0,0 +1,55 @@ +import api from './index' + +/** + * 认证相关API + */ +export default { + /** + * 发送验证码 + */ + sendCode(phone) { + return api.request('/auth/send-code', 'POST', { phone }) + }, + + /** + * 手机号验证码登录 + */ + phoneLogin(phone, code) { + return api.request('/auth/phone-login', 'POST', { phone, code }) + }, + + /** + * 微信登录 + */ + wechatLogin(code) { + return api.request('/auth/wechat', 'POST', { code }) + }, + + /** + * 支付宝登录 + */ + alipayLogin(code) { + return api.request('/auth/alipay', 'POST', { code }) + }, + + /** + * 刷新Token + */ + refreshToken(refreshToken) { + return api.request('/auth/refresh', 'POST', { refreshToken }) + }, + + /** + * 获取当前用户信息 + */ + getCurrentUser() { + return api.request('/auth/me', 'GET') + }, + + /** + * 退出登录 + */ + logout() { + return api.request('/auth/logout', 'POST') + } +} diff --git a/api/index.js b/api/index.js new file mode 100644 index 0000000..f8fecad --- /dev/null +++ b/api/index.js @@ -0,0 +1,41 @@ +// API基础配置 +const BASE_URL = 'http://localhost:8080/api/v1' + +// 请求拦截器 +const request = (url, method, data = {}) => { + const token = uni.getStorageSync('token') + + return new Promise((resolve, reject) => { + uni.request({ + url: BASE_URL + url, + method: method, + data: data, + header: { + 'Content-Type': 'application/json', + 'Authorization': token ? `Bearer ${token}` : '' + }, + success: (res) => { + if (res.data.code === 0) { + resolve(res.data.data) + } else { + uni.showToast({ + title: res.data.message || '请求失败', + icon: 'none' + }) + reject(res.data) + } + }, + fail: (err) => { + uni.showToast({ + title: '网络请求失败', + icon: 'none' + }) + reject(err) + } + }) + }) +} + +export default { + request +} diff --git a/api/order.js b/api/order.js new file mode 100644 index 0000000..0953ef0 --- /dev/null +++ b/api/order.js @@ -0,0 +1,62 @@ +import api from './index' + +/** + * 订单相关API + * 核心业务: + * - 订单创建:计算原价(total_amount)、优惠金额(discount_amount)、实付金额(actual_amount) + * - 订单原价 = 商品标价 × 数量之和 + * - 实付金额 = 原价 - 优惠金额 + */ +export default { + /** + * 创建订单 + * 请求参数示例: + * { + * customer_id: "CUS001", + * items: [ + * { product_id: "PROD001", quantity: 10, price: 50.00 } + * ], + * discount_rate: 90, + * remark: "客户要求送货上门", + * payment_method: "wechat" + * } + */ + createOrder(data) { + return api.request('/orders', 'POST', data) + }, + + /** + * 获取订单列表 + */ + getOrders(params) { + return api.request('/orders', 'GET', params) + }, + + /** + * 获取订单详情(含明细) + */ + getOrderDetail(id) { + return api.request(`/orders/${id}`, 'GET') + }, + + /** + * 取消订单 + */ + cancelOrder(id) { + return api.request(`/orders/${id}/cancel`, 'PUT') + }, + + /** + * 退款 + */ + refundOrder(id) { + return api.request(`/orders/${id}/refund`, 'PUT') + }, + + /** + * 订单统计 + */ + getStatistics(params) { + return api.request('/orders/statistics', 'GET', params) + } +} diff --git a/api/product.js b/api/product.js new file mode 100644 index 0000000..eba69f1 --- /dev/null +++ b/api/product.js @@ -0,0 +1,76 @@ +import api from './index' + +/** + * 商品相关API + */ +export default { + /** + * 获取分类列表 + */ + getCategories() { + return api.request('/products/categories', 'GET') + }, + + /** + * 新增分类 + */ + createCategory(data) { + return api.request('/products/categories', 'POST', data) + }, + + /** + * 修改分类 + */ + updateCategory(id, data) { + return api.request(`/products/categories/${id}`, 'PUT', data) + }, + + /** + * 删除分类 + */ + deleteCategory(id) { + return api.request(`/products/categories/${id}`, 'DELETE') + }, + + /** + * 获取商品列表 + */ + getProducts(params) { + return api.request('/products', 'GET', params) + }, + + /** + * 获取商品详情 + */ + getProduct(id) { + return api.request(`/products/${id}`, 'GET') + }, + + /** + * 新增商品 + */ + createProduct(data) { + return api.request('/products', 'POST', data) + }, + + /** + * 修改商品 + */ + updateProduct(id, data) { + return api.request(`/products/${id}`, 'PUT', data) + }, + + /** + * 删除商品 + */ + deleteProduct(id) { + return api.request(`/products/${id}`, 'DELETE') + }, + + /** + * 获取库存预警商品 + */ + getStockAlerts() { + return api.request('/products/alerts', 'GET') + } +} diff --git a/main.js b/main.js new file mode 100644 index 0000000..a458c83 --- /dev/null +++ b/main.js @@ -0,0 +1,11 @@ +import Vue from 'vue' +import App from './App' + +Vue.config.productionTip = false + +App.mpType = 'page' + +const app = new Vue({ + ...App +}) +app.$mount() diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..1676e00 --- /dev/null +++ b/manifest.json @@ -0,0 +1,31 @@ +{ + "name": "建材销售管家", + "appid": "__UNI__BUILDING", + "description": "建材销售管家移动端应用", + "versionName": "1.0.0", + "versionCode": "100", + "transformPx": false, + "app-plus": { + "usingComponents": true, + "splashscreen": { + "alwaysShowBeforeRender": true, + "waiting": true, + "autoclose": true, + "delay": 0 + }, + "modules": {} + }, + "h5": { + "router": { + "mode": "hash", + "base": "/" + } + }, + "mp-weixin": { + "appid": "wx1234567890", + "setting": { + "urlCheck": false + }, + "usingComponents": true + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b60cfe2 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "building-frontend", + "version": "1.0.0", + "private": true, + "scripts": { + "dev:h5": "uni", + "build:h5": "uni build", + "dev:mp-weixin": "uni -p mp-weixin", + "build:mp-weixin": "uni build -p mp-weixin" + }, + "dependencies": { + "@dcloudio/uni-app": "^2.0.0", + "@dcloudio/uni-h5": "^2.0.0", + "@dcloudio/uni-mp-weixin": "^2.0.0", + "@dcloudio/uni-mp-alipay": "^2.0.0", + "vue": "^3.2.45" + }, + "devDependencies": { + "@dcloudio/types": "^3.0.16", + "@dcloudio/uni-cli-shared": "^2.0.0", + "@dcloudio/vite-plugin-uni": "^2.0.0", + "vite": "^4.0.0" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..42d232e --- /dev/null +++ b/pages.json @@ -0,0 +1,60 @@ +{ + "pages": [ + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "首页" + } + }, + { + "path": "pages/login/index", + "style": { + "navigationBarTitleText": "登录" + } + }, + { + "path": "pages/product/list", + "style": { + "navigationBarTitleText": "商品列表" + } + }, + { + "path": "pages/order/create", + "style": { + "navigationBarTitleText": "创建订单" + } + }, + { + "path": "pages/order/list", + "style": { + "navigationBarTitleText": "订单列表" + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "建材销售管家", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "tabBar": { + "color": "#7A7E83", + "selectedColor": "#3cc51f", + "borderStyle": "black", + "backgroundColor": "#ffffff", + "list": [ + { + "pagePath": "pages/index/index", + "text": "首页" + }, + { + "pagePath": "pages/product/list", + "text": "商品" + }, + { + "pagePath": "pages/order/list", + "text": "订单" + } + ] + } +} diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..007e2a0 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/pages/login/index.vue b/pages/login/index.vue new file mode 100644 index 0000000..0647dcc --- /dev/null +++ b/pages/login/index.vue @@ -0,0 +1,293 @@ + + + + + diff --git a/pages/order/create.vue b/pages/order/create.vue new file mode 100644 index 0000000..c304fa0 --- /dev/null +++ b/pages/order/create.vue @@ -0,0 +1,537 @@ +