diff --git a/vue/gold-system/package.json b/vue/gold-system/package.json index 3d2e2c0..46c17b6 100644 --- a/vue/gold-system/package.json +++ b/vue/gold-system/package.json @@ -6,7 +6,8 @@ "scripts": { "dev": "vite", "build": "vue-tsc -b && vite build", - "preview": "vite preview" + "preview": "vite preview", + "serve": "vite - service serve --host 0.0.0.0 --port 8080" }, "dependencies": { "@element-plus/icons-vue": "^2.3.1", diff --git a/vue/gold-system/src/api/index.js b/vue/gold-system/src/api/index.js new file mode 100644 index 0000000..eae8ed7 --- /dev/null +++ b/vue/gold-system/src/api/index.js @@ -0,0 +1,9 @@ +import http from '../util/http.js'; + +const API={ + post: function(url,data){ + return http({url:url,method:'post',data:data}) + }, +}; + +export default API; \ No newline at end of file diff --git a/vue/gold-system/src/assets/background.jpg b/vue/gold-system/src/assets/background.jpg new file mode 100644 index 0000000..8135c88 Binary files /dev/null and b/vue/gold-system/src/assets/background.jpg differ diff --git a/vue/gold-system/src/assets/css/common.css b/vue/gold-system/src/assets/css/common.css index cf4d1c7..2b43cb7 100644 --- a/vue/gold-system/src/assets/css/common.css +++ b/vue/gold-system/src/assets/css/common.css @@ -24,6 +24,7 @@ display: block; background-color: grey; } + .yellow-dot { margin: 7px 5px 0px 0px; width: 10px; @@ -46,4 +47,26 @@ height: 10px; display: block; background-color: #5f8ff5; +} + +.red-triangle { + width: 0; + height: 0; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 10px solid red; +} + +.green-triangle { + width: 0; + height: 0; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 10px solid green; +} + +.grey-triangle { + width: 10px; + height: 5px; + background-color: grey; } \ No newline at end of file diff --git a/vue/gold-system/src/router/index.js b/vue/gold-system/src/router/index.js index 45794f3..40b1180 100644 --- a/vue/gold-system/src/router/index.js +++ b/vue/gold-system/src/router/index.js @@ -3,8 +3,11 @@ import { createRouter,createWebHashHistory } from 'vue-router'; const router=createRouter({ history:createWebHashHistory(), routes:[ - {path:'/',redirect:"/index"}, + {path:'/login', name:"login", component:()=>import("../views/login.vue")}, + {path:'/',redirect:"/workspace"}, + {path:'/test',component:()=>import("../views/z.vue")}, { + meta:{requireAuth:true}, path:'/index',component:()=>import("../views/index.vue"), children:[ // 工作台 @@ -39,4 +42,13 @@ const router=createRouter({ ] }); +router.beforeEach((to,from,next)=>{ + const token=localStorage.getItem("token"); + if(to.name!="login"&&!token){ + next({name:"login"}); + }else{ + next(); + } +}) + export default router; \ No newline at end of file diff --git a/vue/gold-system/src/util/http.js b/vue/gold-system/src/util/http.js new file mode 100644 index 0000000..2d4e309 --- /dev/null +++ b/vue/gold-system/src/util/http.js @@ -0,0 +1,42 @@ +import axios from 'axios'; + +export default function (options) { + //配置每次发送请求都从localStorage中获取名字叫token的数据, + //添加到请求头部的Authorization属性中 + const token = localStorage.getItem('token'); + //Object.assign用于合并对象的数据 + options.headers = Object.assign( + { token: token }, + options.headers || {} + ); + //axios() 返回一个promise对象,用于异步请求 + //options是一个对象,其中包含了许多用于配置请求的参数, + //例如请求的url、请求方法(GET、POST等)、请求头等 + return axios(options) + .then(({ status, data, statusText }) => { + //该函数在请求成功并返回数据时被调用 + //status:HTTP状态码,例如200表示请求成功。 + //data:服务器返回的数据。 + // statusText:HTTP状态文本,例如"OK"表示请求成功。 + console.log(data); + if (status == 200) { + return data; + } else { + throw new e(statusText); + } + }) + .catch(e=>{ + // 检查是否是因为token过期导致的401错误 + if (e.response && e.response.status === 401) { + // 清除localStorage中的token + localStorage.removeItem('token'); + // 执行重新登录的逻辑,例如跳转到登录页面 + window.location.href = '/login'; + // 可以在这里返回一个特定的值或者对象,以便调用者知道需要重新登录 + return { needsLogin: true }; + } else { + // 其他类型的错误,直接抛出 + return Promise.reject(e); + } + }); +} \ No newline at end of file diff --git a/vue/gold-system/src/views/audit/rechargeAudit.vue b/vue/gold-system/src/views/audit/rechargeAudit.vue index 8f63a71..fd51ff2 100644 --- a/vue/gold-system/src/views/audit/rechargeAudit.vue +++ b/vue/gold-system/src/views/audit/rechargeAudit.vue @@ -1,11 +1,19 @@ \ No newline at end of file + diff --git a/vue/gold-system/src/views/audit/refundAudit.vue b/vue/gold-system/src/views/audit/refundAudit.vue index f119210..78b03d5 100644 --- a/vue/gold-system/src/views/audit/refundAudit.vue +++ b/vue/gold-system/src/views/audit/refundAudit.vue @@ -1,11 +1,19 @@ \ No newline at end of file + diff --git a/vue/gold-system/src/views/consume/addConsume.vue b/vue/gold-system/src/views/consume/addConsume.vue index 395b673..459a929 100644 --- a/vue/gold-system/src/views/consume/addConsume.vue +++ b/vue/gold-system/src/views/consume/addConsume.vue @@ -1,301 +1,347 @@ \ No newline at end of file +.avatar-uploader .el-upload:hover { + border-color: var(--el-color-primary); +} + +.el-icon.avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 50px; + height: 50px; + text-align: center; +} +.form-style { + margin-top: 50px; + max-width: 50%; + float: left; +} +.form-style2 { + max-width: 50%; +} + diff --git a/vue/gold-system/src/views/consume/allConsume.vue b/vue/gold-system/src/views/consume/allConsume.vue index bb8f51a..d6e20b0 100644 --- a/vue/gold-system/src/views/consume/allConsume.vue +++ b/vue/gold-system/src/views/consume/allConsume.vue @@ -3,6 +3,7 @@ import { ref, onMounted, reactive, computed } from "vue"; import ElementPlus from "element-plus"; import { AiFillRead } from "vue-icons-plus/ai"; import axios from "axios"; +import API from "../../api/index.js"; // 变量 // 充值明细表格 const tableData = ref([]); @@ -12,7 +13,7 @@ const detailVo = ref({}); // 搜索对象 const getObj = ref({ pageNum: 1, - pageSize: 5, + pageSize: 10, }); //分页总条目 const total = ref(100); @@ -28,35 +29,36 @@ const area = ref([]); //标签页默认高亮选项 const activeName = ref("all"); -// 支付方式选项 -const payWay = [ +// 消费平台选项 +const consumePlatform = [ { - value: "微信", - label: "微信", + value: "HomilyLink", + label: "HomilyLink", }, { - value: "支付宝", - label: "支付宝", + value: "金币系统", + label: "金币系统", }, { - value: "银联", - label: "银联", + value: "ERP系统", + label: "ERP系统", }, { - value: "信用卡", - label: "信用卡", + value: "金币系统", + label: "金币系统", }, +]; +const consumeType = [ { - value: "借记卡", - label: "借记卡", + value: "购买商品", + label: "购买商品", }, ]; //表格高度 const tableHeight = computed(function () { - return (getObj.value.pageSize + 2) * 60 + "px"; + return (getObj.value.pageSize + 1) * 41 + "px"; }); - // 方法 // 搜索============================================================== // 搜索方法 @@ -78,18 +80,18 @@ const get = async function (val) { } console.log("搜索参数", getObj.value); // 发送POST请求 - const result = await axios.post( - "http://192.168.8.147:10030/consume/select", - { ...getObj.value, detailVo: { ...detailVo.value } } - ); + const result = await API.post("http://192.168.8.93:10050/consume/select", { + ...getObj.value, + detailVo: { ...detailVo.value }, + }); // 将响应结果存储到响应式数据中 console.log("请求成功", result); // 存储表格数据 - tableData.value = result.data.data.list; + tableData.value = result.data.list; console.log("tableData", tableData.value); // 存储分页总数 - total.value = result.data.data.total; + total.value = result.data.total; console.log("total", total.value); } catch (error) { console.log("请求失败", error); @@ -98,12 +100,11 @@ const get = async function (val) { }; // 重置 const reset = function () { - detailVo.value.activityId = ""; - detailVo.value.payWay = ""; - detailVo.value.area = ""; + detailVo.value.productName = ""; + detailVo.value.consumePlatform = ""; + detailVo.value.consumeType = ""; detailVo.value.startDate = ""; detailVo.value.endDate = ""; - get(); }; // 今天 const getToday = function () { @@ -157,30 +158,6 @@ const get7Days = function () { console.log("getTime", getTime.value); get(); }; -//全部充值明细 -const adminAll = function () { - console.log("adminAll"); - detailVo.value.status = ""; - get(); -}; -//待审核充值明细 -const adminWait = function () { - detailVo.value.status = 0; - get(); - console.log("adminWait"); -}; -//已通过充值明细 -const adminPass = function () { - detailVo.value.status = 1; - get(); - console.log("adminPass"); -}; -//已驳回充值明细 -const adminReject = function () { - detailVo.value.status = 2; - get(); - console.log("adminReject"); -}; //点击标签页 const handleClick = function (tab, event) { if (tab.props.name === "all") { @@ -193,52 +170,59 @@ const handleClick = function (tab, event) { adminReject(); } }; -// 获取活动名称 -const getActivity = async function () { - try { - // 发送POST请求 - const result = await axios.post( - "http://192.168.8.93:10010/recharge/activity/select", - {} - ); - // 将响应结果存储到响应式数据中 - console.log("请求成功", result); - // 存储表格数据 - activity.value = result.data.data; - console.log("activity", activity.value); - } catch (error) { - console.log("请求失败", error); - // 在这里可以处理错误逻辑,比如显示错误提示等 +// 挂载 +onMounted(async function () { + await get(); + // getActivity(); + // await getArea(); +}); + +// 验证跳转输入框的数字是否合法 +const checkNumber = function () { + if (typeof parseInt(getObj.value.pageNum) === "number") { + console.log( + "总共有多少页" + Math.ceil(total.value / getObj.value.pageSize) + ); + if ( + getObj.value.pageNum > 0 && + getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize) + ) { + console.log("输入的数字合法"); + get(); + } else { + //提示 + ElMessage({ + type: "error", + message: "请检查输入内容", + }); + } + } else { + //提示 + ElMessage({ + type: "error", + message: "请检查输入内容", + }); } }; -// 获取地区 -const getArea = async function () { +// 查询商品的接口 +const goods = ref([]); +const getGoods = async function () { try { // 发送POST请求 - const result = await axios.post( - "http://192.168.8.93:10010/recharge/recharge", - {} - ); + const result = await API.post("http://192.168.8.93:10020/product", {}); // 将响应结果存储到响应式数据中 console.log("请求成功", result); // 存储全部数据 - allData.value = result.data.data; + goods.value = result.data; console.log("allData", allData.value); - // 分离并去重地区列表 - area.value = [...new Set(allData.value.map((item) => item.area))]; console.log("地区", area.value); } catch (error) { console.log("请求失败", error); // 在这里可以处理错误逻辑,比如显示错误提示等 } }; -// 挂载 -onMounted(async function () { - await get(); - getActivity(); - await getArea(); -}); +getGoods();