From 09302848c9c2c9b284c626727d0619f2895b6099 Mon Sep 17 00:00:00 2001 From: kubbo <390378816@qq.com> Date: Thu, 24 Apr 2025 19:27:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(server):=20=E6=B7=BB=E5=8A=A0=20GM=20?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E5=8F=B0=E7=89=A9=E5=93=81=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 server 端添加了 /item/send 接口,用于发送物品到指定角色 - 在前端 HomeView 中增加了 GM 操作台功能,可以选定玩家角色名、物品和数量进行发送 - 引入了 body-parser 中间件用于解析请求体 - 优化了表单布局,增加了表单验证 --- package-lock.json | 1 + package.json | 1 + server/src/routes/role.routes.js | 21 +++++++++++ web/src/views/HomeView.vue | 60 ++++++++++++++++++-------------- 4 files changed, 57 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index bcdd2a7..2cc66fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ ], "dependencies": { "axios": "^1.8.4", + "body-parser": "^2.2.0", "dotenv": "^16.5.0", "express": "^5.1.0", "mysql": "^2.18.1", diff --git a/package.json b/package.json index 8a59c14..cd69dc6 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "license": "ISC", "dependencies": { "axios": "^1.8.4", + "body-parser": "^2.2.0", "dotenv": "^16.5.0", "express": "^5.1.0", "mysql": "^2.18.1", diff --git a/server/src/routes/role.routes.js b/server/src/routes/role.routes.js index 865dfb3..4b4111a 100644 --- a/server/src/routes/role.routes.js +++ b/server/src/routes/role.routes.js @@ -1,8 +1,13 @@ const express = require("express"); +const bodyParser = require("body-parser"); // 添加 body-parser 中间件 const { getConnection, query } = require("../utils/db.util"); +const axios = require("axios"); const router = express.Router(); +// 添加 body-parser 中间件 +router.use(bodyParser.json()); + // 获取角色列表 router.get("/roles", async (req, res) => { try { @@ -16,6 +21,22 @@ router.get("/roles", async (req, res) => { } }); +router.post("/item/send", async (req, res) => { + try { + const { roleName, itemId, itemNum = 1 } = req.body; + if (!roleName || !itemId) res.json({ code: 1, msg: "缺少必要参数" }); + const roleId = await query(`SELECT id FROM role where name = '${roleName}' limit 1`); + if (roleId?.length != 1) res.json({ code: 1, msg: "没有找到角色" }); + const role = roleId[0].id; + const result = await axios.post("http://192.168.25.110:19000/center/gm", { role, item: [itemId, itemNum] }); + console.log("物品[%s]发送给[%s]结果:%s", itemId, roleName, result.data); + res.json({ code: 0, msg: "发送成功!" }); + } catch (error) { + console.error("获取角色数据失败:", error); + res.status(500).json({ error: "获取角色数据失败" }); + } +}); + // 获取充值列表 router.get("/recharges", async (req, res) => { try { diff --git a/web/src/views/HomeView.vue b/web/src/views/HomeView.vue index f15ee25..81d92bc 100644 --- a/web/src/views/HomeView.vue +++ b/web/src/views/HomeView.vue @@ -3,12 +3,15 @@ import { ref, onMounted } from 'vue' import axios from 'axios' import itemList from "@/assets/items.json" import dayjs from 'dayjs' +import { ElMessage } from 'element-plus' // 第一个卡片:表单数据 +const gmFormRef = ref() const form = ref({ playerName: '', item: '', + itemNum: '', recharge: '' }) const items = ref(itemList) @@ -53,8 +56,16 @@ onMounted(() => { }) // 提交表单 -const submitForm = () => { - console.log('提交表单:', form.value) +const submitForm = (formEl) => { + formEl.validate().then(async () => { + console.log(form.value); + const params = form.value + const res = await axios.post("/api/item/send", { roleName: params.playerName, itemId: params.item, itemNum: params.itemNum }) + const result = res?.data + if (res.data.code == 0) ElMessage.success(result.msg) + else ElMessage.error(result.msg) + }) + } @@ -65,31 +76,27 @@ const submitForm = () => { GM操作台 - 提交 + 提交 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -98,7 +105,8 @@ const submitForm = () => { 角色列表 - +