Browse Source

系统切换&支付开关

huwei 1 month ago
parent
commit
2f410d6ace
31 changed files with 907 additions and 127 deletions
  1. 32 0
      server/internal/admin/api/gm.go
  2. 26 0
      server/internal/admin/api/pay_switch.go
  3. 36 17
      server/internal/admin/api/service.go
  4. 15 0
      server/internal/admin/forms/drainage_server.go
  5. 4 3
      server/internal/admin/forms/service_select.go
  6. 49 0
      server/internal/admin/gm_services/gms_equipment.go
  7. 1 0
      server/internal/admin/gm_services/gms_swticher.go
  8. 5 1
      server/internal/admin/server/router.go
  9. 5 5
      server/internal/admin/service/drainage_server.go
  10. 70 0
      server/internal/admin/service/pay_switch.go
  11. 8 3
      server/internal/admin/service/service.go
  12. 1 0
      server/internal/jsonc/main.go
  13. 6 0
      server/package/gmdata/data.go
  14. 1 0
      server/package/graveserver/leafstalk/covenant/msg/login.go
  15. 23 0
      web/src/api/account/list.ts
  16. 10 0
      web/src/convert/legend/map.ts
  17. 2 0
      web/src/layout/components/Header/components.ts
  18. 18 0
      web/src/layout/components/Header/index.vue
  19. 89 2
      web/src/layout/components/Logo/index.vue
  20. 1 1
      web/src/main.ts
  21. 1 1
      web/src/store/modules/asyncRoute.ts
  22. 3 3
      web/src/utils/http/axios/index.ts
  23. 11 0
      web/src/utils/urlUtils.ts
  24. 0 2
      web/src/views/account/accountList/components/BaseInfo.vue
  25. 3 3
      web/src/views/account/accountList/components/Chapter.vue
  26. 383 0
      web/src/views/account/accountList/components/Legend.vue
  27. 8 0
      web/src/views/account/accountList/info.vue
  28. 4 0
      web/src/views/account/accountList/userInfo.ts
  29. 1 1
      web/src/views/entrance/index.vue
  30. 1 1
      web/src/views/serverSelect/select.vue
  31. 90 84
      web/src/views/system/config/IosPay.vue

+ 32 - 0
server/internal/admin/api/gm.go

@@ -997,6 +997,18 @@ func AddRune(ctx *gin.Context) {
 	ctx.JSON(200, forms.Resp{})
 }
 
+func AddLegend(ctx *gin.Context) {
+	var params forms.AddMaterialReq
+	ctx.ShouldBind(&params)
+
+	err := gm_services.AddLegend(ctx, params)
+	if err != nil {
+		ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
+		return
+	}
+	ctx.JSON(200, forms.Resp{})
+}
+
 func GetAllTalents(ctx *gin.Context) {
 	ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.Talents})
 }
@@ -1054,6 +1066,26 @@ func GetAllRunes(ctx *gin.Context) {
 	ctx.JSON(200, forms.Resp{Code: 0, Data: data})
 }
 
+func GetAllLegends(ctx *gin.Context) {
+	type Material struct {
+		ID   int    `json:"ItemId"`
+		Type int    `json:"ItemType"`
+		Name string `json:"ItemName"`
+	}
+	var data = make(map[string][]Material)
+	for _, v := range gmdata.LegendsDict {
+		type1 := fmt.Sprintf("%d", v.Type)
+
+		data[type1] = append(data[type1], Material{
+			ID:   v.ID,
+			Type: v.Type,
+			Name: v.Name,
+		})
+
+	}
+	ctx.JSON(200, forms.Resp{Code: 0, Data: data})
+}
+
 func GetAllRoles(ctx *gin.Context) {
 	ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.Roles})
 }

+ 26 - 0
server/internal/admin/api/pay_switch.go

@@ -0,0 +1,26 @@
+package api
+
+import (
+	"gadmin/internal/admin/forms"
+	"gadmin/internal/admin/service"
+	"github.com/gin-gonic/gin"
+)
+
+func GetPaySwitch(ctx *gin.Context) {
+	ctx.JSON(200, service.PaySwitchService.GetPaySwitch(ctx))
+}
+
+func EditPaySwitch(ctx *gin.Context) {
+	var req forms.EditPaySwitchReq
+	if err := ctx.ShouldBind(&req); err != nil {
+		ctx.JSON(200, ErrorResponse(err))
+		return
+	}
+
+	if err := forms.ParseParams(&req); err != nil {
+		ctx.JSON(200, ErrorResponse(err))
+		return
+	}
+
+	ctx.JSON(200, service.PaySwitchService.EditPaySwitch(ctx, req))
+}

+ 36 - 17
server/internal/admin/api/service.go

@@ -1,6 +1,7 @@
 package api
 
 import (
+	"encoding/base64"
 	"fmt"
 	"gadmin/config"
 	"gadmin/internal/admin/forms"
@@ -9,6 +10,7 @@ import (
 	"gadmin/utility/token"
 	"github.com/gin-gonic/gin"
 	jsoniter "github.com/json-iterator/go"
+	"time"
 )
 
 // ServiceList 获取系统列表
@@ -29,27 +31,44 @@ func ServiceSelect(c *gin.Context) {
 		return
 	}
 
-	if res, ok := c.Get("user"); !ok {
+	res, ok := c.Get("user")
+	if !ok {
 		c.JSON(200, ErrorResponse(fmt.Errorf("获取用户信息失败")))
 		return
-	} else {
-		user := res.(*token.UserClaims)
-		user.SystemId = req.SystemId
-		userStr, err := jsoniter.MarshalToString(user)
-		if err != nil {
-			c.JSON(200, ErrorResponse(err))
-			return
-		}
-
-		config.TokenRedis.Set(config.GetTokenKey(user.AccessToken), userStr, config.TokenExpireTime)
-		c.JSON(200, serializer.Suc("ok"))
 	}
+	user := res.(*token.UserClaims)
 
-	//if t, err := token.SetSystemId(c, req.SystemId); err != nil {
-	//	fmt.Println(err)
-	//	c.JSON(400, ErrorResponse(err))
+	//user.SystemId = req.SystemId
+	//userStr, err := jsoniter.MarshalToString(user)
+	//if err != nil {
+	//	c.JSON(200, ErrorResponse(err))
 	//	return
-	//} else {
-	//	c.JSON(200, serializer.Suc(map[string]string{"token": t}))
 	//}
+	//
+	//config.TokenRedis.Set(config.GetTokenKey(user.AccessToken), userStr, config.TokenExpireTime)
+	//c.JSON(200, serializer.Suc("ok"))
+
+	// 重新生成新的token,解决浏览器回退问题
+	t := token.GenerateTokenUsingUUID()
+	// 记录登录token
+	key := config.GetUserTokenKey(user.ID)
+	config.TokenRedis.HSet(key, t, time.Now().Unix())
+	config.TokenRedis.Expire(key, time.Hour*12)
+
+	tokenKey := config.GetTokenKey(t)
+	u := &token.UserClaims{
+		ID:          user.ID,
+		UserName:    user.UserName,
+		RoleId:      user.RoleId,
+		Avatar:      user.Avatar,
+		Nickname:    user.Nickname,
+		AccessToken: t,
+		SystemId:    req.SystemId,
+	}
+	userStr, err := jsoniter.MarshalToString(u)
+	if err != nil {
+		c.JSON(200, ErrorResponse(err))
+	}
+	config.TokenRedis.Set(tokenKey, userStr, time.Hour*12)
+	c.JSON(200, serializer.Suc(map[string]string{"token": base64.URLEncoding.EncodeToString([]byte(t))}))
 }

+ 15 - 0
server/internal/admin/forms/drainage_server.go

@@ -23,6 +23,21 @@ func (req *EditDrainageServerReq) Check() error {
 	return nil
 }
 
+type EditPaySwitchReq struct {
+	IosOpenLevel int64 `json:"iosOpenLevel"`
+}
+
+type PayConfig struct {
+	IosOpenLevel int64 `json:"iosOpenLevel"`
+}
+
+func (req *EditPaySwitchReq) Check() error {
+	if req.IosOpenLevel < 1 {
+		return errors.New("请输入有效的等级")
+	}
+	return nil
+}
+
 type GetDisplayServerReq struct {
 }
 

+ 4 - 3
server/internal/admin/forms/service_select.go

@@ -1,9 +1,10 @@
 package forms
 
 type Service struct {
-	Id   int32  `json:"id"`
-	Name string `json:"name"`
-	Path string `json:"path"`
+	Id         int32  `json:"id"`
+	Name       string `json:"name"`
+	Path       string `json:"path"`
+	IsSelected bool   `json:"is_selected"`
 }
 
 type ServiceSelectReq struct {

+ 49 - 0
server/internal/admin/gm_services/gms_equipment.go

@@ -187,6 +187,55 @@ func AddRune(ctx *gin.Context, params forms.AddMaterialReq) (err error) {
 	return
 }
 
+// 给用户加铭文
+func AddLegend(ctx *gin.Context, params forms.AddMaterialReq) (err error) {
+	if params.UserId == 0 {
+		return errNoUser
+	}
+
+	playerAttr, err := player.GetAttrByUserId(params.UserId)
+	if err != nil {
+		return
+	}
+	DB, err := player.GetDBByPlayerAttr(playerAttr)
+	if err != nil {
+		return
+	}
+
+	//获取userAccount
+	var userAccountModel sqlModel.UserAccount
+
+	err = config.LDB.WithContext(ctx).Scopes(sqlModel.UserAccountTable(&userAccountModel, playerAttr.AccID)).Where("accId = ?", playerAttr.AccID).First(&userAccountModel).Error
+	if err != nil {
+		return
+	}
+	openIdArr := strings.Split(userAccountModel.Openid, "@")
+	msgs := msg.GmAddMaterial{
+		MsgId:      character.GenerateMsgId(),
+		PlayerID:   params.UserId,
+		Legends:    map[int64]int64{params.Id: params.Count},
+		OperatorId: token.GetUID(ctx),
+		ClientPlat: openIdArr[1],
+	}
+	rpc_share.MsgMap[msgs.MsgId] = fmt.Sprintf("%s,GM为玩家[%d]添加符文[%d],数量[%d]", utility.FormatSecond(time.Now()), params.UserId, params.Id, params.Count)
+
+	var resp *msg.ResponseGmAddMaterial
+	res, err := config.GmNats.GmRequest(DB, "GmAddMaterial", msgs)
+	if err != nil {
+		return
+	}
+
+	if err = json.Unmarshal(res, &resp); err != nil {
+		return
+	}
+
+	rpc_share.LogChan <- rpc_share.LogMsg{
+		MsgID: msgs.MsgId,
+		Data:  resp,
+	}
+	return
+}
+
 /*
 	func NewMaterials(params forms.AddMaterialReq) []*model.DropMaterial {
 		return []*model.DropMaterial{

+ 1 - 0
server/internal/admin/gm_services/gms_swticher.go

@@ -6,6 +6,7 @@ import (
 )
 
 func UpdateSwitcher(ctx *gin.Context, params forms.UpdateSwitcherReq) (err error) {
+
 	/*if params.ServerId <= 0 {
 		err = errors.New("请选择一个有效的服务器")
 		return

+ 5 - 1
server/internal/admin/server/router.go

@@ -175,6 +175,8 @@ func NewEngine() *gin.Engine {
 			auth.POST("drainageServer/editDisplay", api.EditDisplayServer)
 			auth.GET("drainageServer/getWhiteList", api.GetWhiteListServer)
 			auth.POST("drainageServer/editWhiteList", api.EditWhiteListServer)
+			auth.GET("paySwitch/get", api.GetPaySwitch)
+			//auth.POST("paySwitch/edit", api.EditPaySwitch)
 
 			//auth.GET("treasure/list", api.GetTreasureList)
 			//auth.GET("treasure_chest/list", api.GetTreasureChestList)
@@ -238,7 +240,7 @@ func NewEngine() *gin.Engine {
 			gm.GET("config", api.GetConfig)
 			//gm.GET("conf_path", api.GetJSONPath)
 			//gm.POST("set_conf_path", api.SetNewJsonPath)
-			//gm.POST("updateSwitchers", api.UpdateSwitcher)
+			gm.POST("updateSwitchers", api.EditPaySwitch) // 支付配置
 			//gm.GET("notices", api.GetNoticeList)
 			//gm.POST("notices", api.AddNotice)
 			//gm.POST("del_notice", api.DelNotice)
@@ -253,9 +255,11 @@ func NewEngine() *gin.Engine {
 			//gm.GET("get_all_equipments", api.GetAllEquipments)
 			gm.GET("get_all_materials", api.GetAllMaterials)
 			gm.GET("get_all_runes", api.GetAllRunes)
+			gm.GET("get_all_legends", api.GetAllLegends)
 			//gm.POST("add_equipment", api.AddEquipment)
 			gm.POST("add_material", api.AddMaterial)
 			gm.POST("add_rune", api.AddRune)
+			gm.POST("add_legend", api.AddLegend)
 			//gm.POST("add_gift", api.AddGift)
 			//gm.POST("upgrade_role", api.UpgradeRole)
 			//gm.GET("get_role_level", api.GetRoleLevel) // 角色等级查询

+ 5 - 5
server/internal/admin/service/drainage_server.go

@@ -17,11 +17,11 @@ import (
 )
 
 var DrainageServer = &sDrainageServer{
-	key:                 "grave/servers/loginparams/defaultGates",      // 引流服务器key
-	newerServersKey:     "grave/servers/loginparams/newerServers",      // 新服务器key
-	maxOpendServerIdKey: "grave/servers/loginparams/maxOpendServerId",  // 最大开放服务器ID
-	whiteListKey:        "grave/servers/loginparams/serverWhiteList",   // 登录白名单
-	maxDeployServerId:   "grave/servers/loginparams/maxDeployServerId", // 最大部署服务器
+	key:                 "covenant/servers/loginparams/defaultGates",      // 引流服务器key
+	newerServersKey:     "covenant/servers/loginparams/newerServers",      // 新服务器key
+	maxOpendServerIdKey: "covenant/servers/loginparams/maxOpendServerId",  // 最大开放服务器ID
+	whiteListKey:        "covenant/servers/loginparams/serverWhiteList",   // 登录白名单
+	maxDeployServerId:   "covenant/servers/loginparams/maxDeployServerId", // 最大部署服务器
 }
 
 type sDrainageServer struct {

+ 70 - 0
server/internal/admin/service/pay_switch.go

@@ -0,0 +1,70 @@
+package service
+
+import (
+	"encoding/json"
+	"gadmin/config"
+	"gadmin/internal/admin/forms"
+	"gadmin/utility/serializer"
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	clientv3 "go.etcd.io/etcd/client/v3"
+	"strconv"
+)
+
+var (
+	PaySwitchService = &sPaySwitch{
+		key: "covenant/servers/loginparams/PayConfig",
+	}
+)
+
+type sPaySwitch struct {
+	key string
+}
+
+func (s *sPaySwitch) GetPaySwitch(ctx *gin.Context) serializer.Response {
+	var payConfig forms.PayConfig
+
+	kv := clientv3.NewKV(config.Etcd)
+	getResp, err := kv.Get(ctx, s.key)
+	if err != nil {
+		return serializer.DBErr(err.Error(), err)
+	}
+
+	if len(getResp.Kvs) == 0 {
+		return serializer.Suc(payConfig)
+	}
+
+	if err = json.Unmarshal(getResp.Kvs[0].Value, &payConfig); err != nil {
+		return serializer.DBErr(err.Error(), err)
+	}
+
+	return serializer.Suc(payConfig)
+}
+
+func (s *sPaySwitch) EditPaySwitch(ctx *gin.Context, req forms.EditPaySwitchReq) serializer.Response {
+	payConfig := forms.PayConfig{
+		IosOpenLevel: req.IosOpenLevel,
+	}
+
+	marshal, err := json.Marshal(payConfig)
+	if err != nil {
+		return serializer.DBErr(err.Error(), err)
+	}
+
+	logrus.Warnf("sPaySwitch PayConfig:%v", string(marshal))
+
+	kv := clientv3.NewKV(config.Etcd)
+	putResp, err := kv.Put(ctx, s.key, string(marshal), clientv3.WithPrevKV())
+	if err != nil {
+		return serializer.DBErr(err.Error(), err)
+	}
+
+	logrus.Warnf("Revision:%v", putResp.Header.Revision)
+	if putResp.PrevKv != nil {
+		logrus.Warnf("key:%v", string(putResp.PrevKv.Key))
+		logrus.Warnf("Value:%v", string(putResp.PrevKv.Value))
+		logrus.Warnf("Version:%v", strconv.FormatInt(putResp.PrevKv.Version, 10))
+	}
+
+	return serializer.Suc(nil)
+}

+ 8 - 3
server/internal/admin/service/service.go

@@ -66,10 +66,15 @@ func (s *sService) ServiceList(c *gin.Context) ([]*forms.Service, error) {
 
 	var services []*forms.Service
 	for _, v := range systemModels {
+		isSelected := false
+		if v.ID == claims.SystemId {
+			isSelected = true
+		}
 		services = append(services, &forms.Service{
-			Id:   v.ID,
-			Name: v.Name,
-			Path: v.URL + "?access-token={access-token}",
+			Id:         v.ID,
+			Name:       v.Name,
+			Path:       v.URL + "?access-token={access-token}",
+			IsSelected: isSelected,
 		})
 	}
 	return services, nil

+ 1 - 0
server/internal/jsonc/main.go

@@ -13,6 +13,7 @@ var (
 		//conv.PlayLevel,
 		conv.Item,
 		conv.Rune,
+		conv.Legend,
 		//conv.Antique,
 		//conv.Talents,
 		//conv.Equipment,

+ 6 - 0
server/package/gmdata/data.go

@@ -122,6 +122,7 @@ var (
 	EquipmentDict = make([]Equipment, 0)
 	MaterialsDict = make([]Material, 0)
 	RunesDict     = make([]Rune, 0)
+	LegendsDict   = make([]Rune, 0)
 	AntiQueDict   = make([]Antique, 0) // 古玩信息
 	Goods         = make([]Good, 0)
 	AllShopGoods  = make(map[string]ShopGoods)
@@ -196,6 +197,11 @@ func LoadGraveJson(confPath string) (err error) {
 		return
 	}
 
+	err = LoadItemData(confPath, "legend.json", &LegendsDict)
+	if err != nil {
+		return
+	}
+
 	CurrentPath = confPath
 
 	LoadChapter() //关卡

+ 1 - 0
server/package/graveserver/leafstalk/covenant/msg/login.go

@@ -78,6 +78,7 @@ type GmAddMaterial struct {
 	PlayerID   int64           `json:"userId"`
 	Materials  map[int64]int64 `json:"materials"`
 	Runes      map[int64]int64 `json:"runes"`
+	Legends    map[int64]int64 `json:"legends"`
 	Equipments []int64         `json:"equipments"`
 	Treasures  []int64         `json:"treasures"`
 	OperatorId int64           `json:"operatorId"`

+ 23 - 0
web/src/api/account/list.ts

@@ -202,6 +202,14 @@ export function getAllRunes(params) {
   });
 }
 
+export function getAllLegends(params) {
+  return http.request({
+    url: '/gm/get_all_legends',
+    method: 'get',
+    params,
+  });
+}
+
 export function addRune(params) {
   return http.request({
     url: '/gm/add_rune',
@@ -210,6 +218,14 @@ export function addRune(params) {
   });
 }
 
+export function addLegend(params) {
+  return http.request({
+    url: '/gm/add_legend',
+    method: 'post',
+    params,
+  });
+}
+
 export function addGift(params) {
   return http.request({
     url: '/gm/add_gift',
@@ -404,3 +420,10 @@ export function SetDanScore(params) {
     params,
   });
 }
+
+export function GetPayConfig() {
+  return http.request({
+    url: '/paySwitch/get',
+    method: 'get',
+  });
+}

+ 10 - 0
web/src/convert/legend/map.ts

@@ -0,0 +1,10 @@
+// 1--传承铭文
+// 2--纷争铭文
+// 3--冥想铭文
+// 4--神圣铭文
+export const typeMaps = [
+  { value: 1, label: '传承铭文(1)' },
+  { value: 2, label: '纷争铭文(2)' },
+  { value: 3, label: '冥想铭文(3)' },
+  { value: 4, label: '神圣铭文(4)' },
+];

+ 2 - 0
web/src/layout/components/Header/components.ts

@@ -13,6 +13,7 @@ import {
   UserOutlined,
   CheckOutlined,
   BellOutlined,
+  HomeOutlined,
 } from '@vicons/antd';
 
 import { Refresh } from '@vicons/ionicons5';
@@ -33,4 +34,5 @@ export default {
   CheckOutlined,
   BellOutlined,
   Refresh,
+  HomeOutlined,
 };

+ 18 - 0
web/src/layout/components/Header/index.vue

@@ -69,6 +69,17 @@
       </n-breadcrumb>
     </div>
     <div class="layout-header-right">
+      <!--回到系统选择页面-->
+      <div class="layout-header-trigger layout-header-trigger-min">
+        <n-tooltip placement="bottom">
+          <template #trigger>
+            <n-icon size="18">
+              <HomeOutlined @click="goHome" />
+            </n-icon>
+          </template>
+          <span>主页</span>
+        </n-tooltip>
+      </div>
       <div
         class="layout-header-trigger layout-header-trigger-min"
         v-for="item in iconList"
@@ -326,6 +337,12 @@
         }
       };
 
+      // 回到首页
+      const goHome = () => {
+        let homeUrl = getBaseLoginUrl().split('#')[0];
+        window.open(homeUrl, '_self');
+      };
+
       // 图标列表
       const iconList = [
         // {
@@ -432,6 +449,7 @@
         ...toRefs(state),
         iconList,
         toggleFullScreen,
+        goHome,
         doLogout,
         route,
         dropdownSelect,

+ 89 - 2
web/src/layout/components/Logo/index.vue

@@ -1,13 +1,32 @@
 <template>
   <div class="logo">
     <!--    <img src="~@/assets/images/logo.png" alt="" :class="{ 'mr-2': !collapsed }" />-->
-    <h2 v-show="!collapsed" :style="logoCSS"> {{ title }} </h2>
+    <!--    <h2 v-show="!collapsed" :style="logoCSS"> {{ title }} </h2>-->
+
+    <n-popselect :options="servers" size="large" scrollable @update:value="handleUpdateValue">
+      <n-button :style="logoCSS" :bordered="false"
+        >{{ selectedServer }}
+        <n-icon :component="SafetyCertificateOutlined" style="margin-left: 8px" />
+      </n-button>
+    </n-popselect>
   </div>
 </template>
 
 <script lang="ts">
   import { useUserStoreWidthOut } from '@/store/modules/user';
+  import { SelectOption, useMessage } from 'naive-ui';
   import { ref, computed } from 'vue';
+  import { GetServiceList, SelectSystem } from '@/api/service/service';
+  import { SwapHorizontalOutline } from '@vicons/ionicons5';
+
+  interface server {
+    id: number;
+    name: string;
+    path: string;
+    label: string;
+    value: string;
+    is_selected: boolean;
+  }
 
   export default {
     name: 'Index',
@@ -28,17 +47,85 @@
               'margin-bottom': `0`,
             }
           : {
+              color: `#ffffff`,
               'font-size': `18px`,
               'font-weight': `bold`,
               'margin-bottom': `0`,
             };
       });
-
+      const message = useMessage();
       return {
         title,
         logoCSS,
+        message,
       };
     },
+    data() {
+      return {
+        servers: ref<server[]>([]),
+        selectedServer: ref<string>(''),
+      };
+    },
+    computed: {
+      SafetyCertificateOutlined() {
+        return SwapHorizontalOutline;
+      },
+    },
+    mounted() {
+      this.loadServers();
+    },
+
+    methods: {
+      isSameOrigin(url1: string, url2: string): boolean {
+        try {
+          const a = new URL(url1);
+          const b = new URL(url2);
+          return a.hostname === b.hostname && a.port === b.port;
+        } catch (e) {
+          // 如果URL解析失败,则认为不同源
+          return false;
+        }
+      },
+
+      async loadServers() {
+        try {
+          const res = await GetServiceList();
+          res.forEach((server: server) => {
+            server.label = server.name;
+            server.value = server.name;
+            if (server.is_selected) {
+              this.selectedServer = server.name;
+              // const origin = window.location.origin;
+              // if (!this.isSameOrigin(origin, server.path)) {
+              //   const path = server.path.replace('{access-token}', storage.get(ACCESS_TOKEN));
+              //   window.open(path, '_self');
+              // }
+            }
+          });
+          console.log('Loaded servers:', res);
+          this.servers = res;
+        } catch (error) {
+          console.error('Failed to load servers:', error);
+        }
+      },
+
+      async handleUpdateValue(system_id: string, option: SelectOption) {
+        await SelectSystem({
+          ...{ system_id: option.id },
+        })
+          .then((res) => {
+            console.log('_res:' + JSON.stringify(res));
+            // const ex = 7 * 24 * 60 * 60 * 1000;
+            // storage.set(ACCESS_TOKEN, res.token, ex);
+            const url: string = option.path + '';
+            const path = url.replace('{access-token}', res.token);
+            window.open(path, '_self');
+          })
+          .catch((e: Error) => {
+            this.message.error(e.message ?? '操作失败');
+          });
+      },
+    },
   };
 </script>
 

+ 1 - 1
web/src/main.ts

@@ -26,7 +26,7 @@ async function bootstrap() {
 
   // 调用函数获取查询参数
   const accessToken = getQueryParams();
-  console.log('====accessToken:', accessToken);
+  // console.log('====accessToken:', accessToken);
   if (accessToken !== '' && accessToken !== null) {
     storage.set(ACCESS_TOKEN, accessToken);
   }

+ 1 - 1
web/src/store/modules/asyncRoute.ts

@@ -89,7 +89,7 @@ export const useAsyncRouteStore = defineStore({
     async generateRoutes(data) {
       let accessedRouters;
       const permissionsList = data.permissions || [];
-      console.log("permissionsList: "+JSON.stringify(permissionsList));
+      console.log('permissionsList: ' + JSON.stringify(permissionsList));
       const routeFilter = (route) => {
         const { meta } = route;
         const { permissions } = meta || {};

+ 3 - 3
web/src/utils/http/axios/index.ts

@@ -268,7 +268,7 @@ function createAxios(opt?: Partial<CreateAxiosOptions>) {
         authenticationScheme: '',
         // 接口前缀
         prefixUrl: urlPrefix,
-        headers: { 'Content-Type': ContentTypeEnum.JSON },
+        headers: { 'Content-Type': ContentTypeEnum.JSON, 'Cache-Control': 'no-cache' },
         // 数据处理方式
         transform,
         // 配置项,下面的选项都可以在独立的接口请求中覆盖
@@ -308,7 +308,7 @@ export const customHttp = axios;
 export const http = createAxios({
   requestOptions: {
     // // 是否加入时间戳
-    joinTime: false,
+    joinTime: true,
   },
 });
 
@@ -319,6 +319,6 @@ export const httpJson = createAxios({
     // apiUrl: 'http://localhost:8200',
     urlPrefix: '/json',
     // // 是否加入时间戳
-    joinTime: false,
+    joinTime: true,
   },
 });

+ 11 - 0
web/src/utils/urlUtils.ts

@@ -22,3 +22,14 @@ export function setObjToUrlParams(baseUrl: string, obj: object): string {
   }
   return url;
 }
+
+export function isSameOrigin(url1: string, url2: string): boolean {
+  try {
+    const a = new URL(url1);
+    const b = new URL(url2);
+    return a.hostname === b.hostname && a.port === b.port;
+  } catch (e) {
+    // 如果URL解析失败,则认为不同源
+    return false;
+  }
+}

+ 0 - 2
web/src/views/account/accountList/components/BaseInfo.vue

@@ -872,8 +872,6 @@
 
           paySwitch.pay = res.paySwitch == 1;
           paySwitch.banReason = paySwitch.pay ? paySwitch.banReason : '';
-
-          console.log('========attr:', attr.value);
         })
         .catch((error) => {
           // message.error(error.toString());

+ 3 - 3
web/src/views/account/accountList/components/Chapter.vue

@@ -71,13 +71,13 @@
   function formSubmit() {
     formRef.value.validate((errors) => {
       if (!errors) {
-        console.log('formValue.value:' + JSON.stringify(formValue));
+        // console.log('formValue.value:' + JSON.stringify(formValue));
 
         updateChapter({
           ...{ playerid: props.userId, pass_chapters: formValue.matter },
         })
           .then((_res) => {
-            console.log('_res:' + JSON.stringify(_res));
+            // console.log('_res:' + JSON.stringify(_res));
             message.success('已提交后台处理,添加成功后会推送系统消息,刷新玩家信息查看结果');
           })
           .catch((e: Error) => {
@@ -114,7 +114,7 @@
           ...req,
         })
           .then((_res) => {
-            console.log('_res:' + JSON.stringify(_res));
+            // console.log('_res:' + JSON.stringify(_res));
             message.success('已提交后台处理,添加成功后会推送系统消息,刷新玩家信息查看结果');
           })
           .catch((e: Error) => {

+ 383 - 0
web/src/views/account/accountList/components/Legend.vue

@@ -0,0 +1,383 @@
+<template>
+  <div>
+    <n-card
+      :bordered="true"
+      title="玩家铭文列表"
+      class="proCard mt-2"
+      size="small"
+      :segmented="{ content: true }"
+    >
+      <template #header-extra>
+        <n-space>
+          <n-button strong secondary type="success" @click="openUpdatePlayerRune"
+            >添加铭文</n-button
+          >
+        </n-space>
+      </template>
+      <BasicForm
+        @register="register"
+        @submit="handleSubmit"
+        @reset="handleReset"
+        @keyup.enter="handleSubmit"
+        ref="formRef"
+      >
+        <template #statusSlot="{ model, field }">
+          <n-input v-model:value="model[field]" />
+        </template>
+      </BasicForm>
+      <n-data-table
+        :columns="columns"
+        :data="data"
+        :pagination="paginationReactive"
+        show-size-picker
+        :loading="loading"
+        ref="actionRef"
+      />
+    </n-card>
+
+    <n-modal
+      v-model:show="showModal"
+      :show-icon="false"
+      preset="dialog"
+      title="玩家铭文添加"
+      style="width: 620px"
+    >
+      <n-form
+        :model="formParams"
+        :rules="rules"
+        ref="formRef"
+        label-placement="left"
+        :label-width="80"
+        class="py-4"
+      >
+        <n-form-item label="选择类型" path="type">
+          <n-select
+            v-model:value="formParams.type"
+            placeholder="选择类型"
+            :options="options"
+            @update:value="handleMaterialTypeChange"
+          />
+        </n-form-item>
+        <n-form-item label="选择符文" path="id">
+          <n-select
+            v-model:value="formParams.id"
+            placeholder="选择符文"
+            :options="runeOptions"
+            @update:value="handleMaterialChange"
+          />
+        </n-form-item>
+        <n-form-item label="数量" path="num">
+          <n-input-number
+            placeholder="请输入数量"
+            v-model:value="formParams.num"
+            :max="99999999"
+            :min="-99999999"
+          />
+        </n-form-item>
+      </n-form>
+
+      <template #action>
+        <n-space>
+          <n-button @click="() => (showModal = false)">取消</n-button>
+          <n-button type="info" :loading="formBtnLoading" @click="confirmForm">确定</n-button>
+        </n-space>
+      </template>
+    </n-modal>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import { reactive, ref, onMounted, h } from 'vue';
+  import { BasicForm, FormSchema, useForm } from '@/components/Form';
+  import { useMessage, FormItemRule, SelectOption, NButton } from 'naive-ui';
+  import { filterArray, findIndex, objDalEmpty } from '@/utils/array';
+  import { userInfoObj } from '@/views/account/accountList/userInfo';
+  import { addLegend, getAllLegends } from '@/api/account/list';
+  import { typeMaps } from '@/convert/legend/map';
+  interface Props {
+    userId?: number | string;
+    userInfo?: any;
+  }
+
+  const props = withDefaults(defineProps<Props>(), {
+    userId: 0,
+    userInfo: userInfoObj,
+  });
+
+  // 装备查询数据
+  const data = ref();
+  const originalData = ref();
+  const loading = ref(false);
+  const message = useMessage();
+
+  const paginationReactive = reactive({
+    page: 1,
+    pageSize: 10,
+    pageSizes: [10, 20, 30, 40, 100],
+    showSizePicker: true,
+    onChange: (page: number) => {
+      paginationReactive.page = page;
+    },
+    onUpdatePageSize: (pageSize: number) => {
+      paginationReactive.pageSize = pageSize;
+      paginationReactive.page = 1;
+    },
+  });
+
+  const rules = {
+    id: {
+      trigger: ['blur', 'input'],
+      validator(rule: FormItemRule, value: number) {
+        if (value == undefined) {
+          return true;
+        }
+        if (!/^\d*$/.test(value)) {
+          return new Error('GID只能是数字');
+        }
+        return true;
+      },
+    },
+    equipId: {
+      trigger: ['blur', 'input'],
+      validator(rule: FormItemRule, value: number) {
+        if (value == undefined) {
+          return true;
+        }
+        if (!/^\d*$/.test(value)) {
+          return new Error('装备ID只能是数字');
+        }
+        return true;
+      },
+    },
+  };
+
+  const schemas: FormSchema[] = [
+    {
+      field: 'id',
+      component: 'NInput',
+      label: '铭文id',
+      componentProps: {
+        placeholder: '请输入铭文id',
+        onInput: (e: any) => {
+          console.log(e);
+        },
+      },
+    },
+  ];
+
+  const actionRef = ref();
+
+  const [register, {}] = useForm({
+    gridProps: { cols: '1 s:1 m:2 l:3 xl:4 2xl:4' },
+    labelWidth: 80,
+    schemas,
+  });
+
+  const options = ref(typeMaps);
+
+  const runeOptions = ref([]);
+
+  const showModal = ref(false);
+  const formBtnLoading = ref(false);
+  function openUpdatePlayerRune() {
+    showModal.value = true;
+  }
+
+  const formRef: any = ref(null);
+  let formParams = reactive<any>({
+    type: null,
+    id: null,
+    num: 1,
+  });
+  function confirmForm(e) {
+    e.preventDefault();
+
+    formRef.value.validate((errors) => {
+      if (!errors) {
+        console.log('formParams:' + JSON.stringify(formParams));
+        formParams.id = Number(formParams.id);
+        if (formParams.id == null || formParams.id <= 0) {
+          message.error('请先选择一个铭文');
+          return;
+        }
+
+        if (formParams.num == null || formParams.num == 0) {
+          message.error('输入的数量是无效的');
+          return;
+        }
+
+        addLegend({
+          ...{ user_id: Number(props.userId), id: formParams.id, count: formParams.num },
+        })
+          .then((_res) => {
+            console.log('_res:' + JSON.stringify(_res));
+            message.success('已提交后台处理,添加成功后会推送系统消息,刷新玩家信息查看结果');
+          })
+          .catch((e: Error) => {
+            message.error(e.message ?? '操作失败');
+          });
+
+        setTimeout(() => {
+          showModal.value = false;
+        });
+      } else {
+        message.error('请填写完整信息');
+      }
+      formBtnLoading.value = false;
+    });
+  }
+
+  function handleMaterialTypeChange(value: string, _option: SelectOption) {
+    formParams.type = value;
+    formParams.id = null;
+    runeOptions.value = [];
+    for (let i = 0; i < allRunes.value[value].length; i++) {
+      runeOptions.value.push({
+        label: allRunes.value[value][i].ItemName + '(' + allRunes.value[value][i].ItemId + ')',
+        value: allRunes.value[value][i].ItemId,
+      });
+    }
+  }
+
+  function handleMaterialChange(value: string, option: SelectOption) {
+    formParams.id = value;
+  }
+
+  function handleSubmit(values: Recordable) {
+    values = objDalEmpty(values);
+    // 如果没有搜索条件,则重置
+    if (Object.keys(values).length === 0) {
+      handleReset({});
+      return;
+    }
+    data.value = filterArray(values, originalData.value);
+  }
+
+  function handleReset(_: Recordable) {
+    loadDataTable({});
+  }
+
+  const idsMap = ref<any>([]);
+  function genMaps() {
+    idsMap.value = [];
+    for (let i = 0; i < options.value.length; i++) {
+      if (allRunes.value[options.value[i].value] !== undefined) {
+        let lists = allRunes.value[options.value[i].value];
+        for (let i2 = 0; i2 < lists.length; i2++) {
+          idsMap.value.push({
+            value: lists[i2].ItemId,
+            label: lists[i2].ItemName,
+            pid: lists[i2].ItemType,
+          });
+        }
+      }
+    }
+  }
+
+  const columns = [
+    {
+      title: '铭文ID',
+      key: 'id',
+      width: 160,
+    },
+    {
+      title: '铭文类型',
+      key: 'type',
+      width: 160,
+      render: (rows, _) => {
+        let value = '-';
+        let typ = Math.floor(rows.id / 10000);
+        for (let i = 0; i < options.value.length; i++) {
+          if (options.value[i].value === typ) {
+            value = options.value[i].label;
+            break;
+          }
+        }
+        return value;
+      },
+    },
+    {
+      title: '铭文名称',
+      key: 'name',
+      width: 160,
+      render: (rows, _) => {
+        let index = findIndex(rows.id, idsMap.value);
+        if (index === false) {
+          return `-`;
+        }
+        return idsMap.value[index].label == undefined ? '--' : idsMap.value[index].label;
+      },
+    },
+    {
+      title: '持有数量',
+      key: 'count',
+      width: 160,
+    },
+    {
+      title: '操作',
+      key: 'actions',
+      render(row) {
+        return h(
+          NButton,
+          {
+            strong: true,
+            tertiary: true,
+            size: 'small',
+            onClick: () => play(row),
+          },
+          { default: () => '添加' }
+        );
+      },
+      width: 160,
+    },
+  ];
+
+  function play(row) {
+    showModal.value = true;
+    let index = findIndex(row.id, idsMap.value);
+    if (index === false || idsMap.value[index] === undefined) {
+      message.error('数据读取异常');
+      return;
+    }
+    handleMaterialTypeChange(idsMap.value[index].pid, null);
+    formParams.id = row.id;
+  }
+
+  const allRunes = ref<any>(null);
+  type Item = {
+    id: number;
+    count: number;
+  };
+  const loadDataTable = async (_) => {
+    loading.value = true;
+    if (allRunes.value === null) {
+      allRunes.value = await getAllLegends({});
+      genMaps();
+    }
+    let lists: Item[] = [];
+    // 遍历对象 b
+    const legends = props.userInfo.legends.legends;
+    for (let key in legends) {
+      lists.push({ id: Number(key), count: legends[key] });
+    }
+    console.log('lists:', lists);
+    data.value = lists;
+    originalData.value = lists;
+
+    loading.value = false;
+  };
+
+  onMounted(async () => {
+    if (props.userId < 1) {
+      console.log('传入用户信息不正确,props.userId:', props.userId);
+      return;
+    }
+    await loadDataTable({});
+  });
+
+  const fatherRefresh = () => {
+    loadDataTable({});
+  };
+
+  defineExpose({ fatherRefresh });
+</script>

+ 8 - 0
web/src/views/account/accountList/info.vue

@@ -55,6 +55,9 @@
           <n-tab-pane name="rune" tab="玩家符文">
             <Rune ref="RuneRef" :userId="userId" :userInfo="userInfo" />
           </n-tab-pane>
+          <n-tab-pane name="legend" tab="玩家铭文">
+            <Legend ref="LegendRef" :userId="userId" :userInfo="userInfo" />
+          </n-tab-pane>
           <!-- <n-tab-pane name="recharge" tab="充值记录">
             <RechargeList :userId="userId" :userInfo="userInfo" />
           </n-tab-pane>
@@ -101,6 +104,7 @@
   import BaseInfo from './components/BaseInfo.vue';
   import Material from './components/Material.vue';
   import Rune from './components/Rune.vue';
+  import Legend from './components/Legend.vue';
   import Chapter from './components/Chapter.vue';
 
   interface Props {
@@ -185,6 +189,7 @@
   const EquipmentRef = ref();
   const MaterialRef = ref();
   const RuneRef = ref();
+  const LegendRef = ref();
   const GemRef = ref();
   function triggerRefresh() {
     if (RoleRef.value !== undefined && RoleRef.value !== null) {
@@ -199,6 +204,9 @@
     if (RuneRef.value !== undefined && RuneRef.value !== null) {
       RuneRef.value.fatherRefresh();
     }
+    if (LegendRef.value !== undefined && LegendRef.value !== null) {
+      LegendRef.value.fatherRefresh();
+    }
     if (GemRef.value !== undefined && GemRef.value !== null) {
       GemRef.value.fatherRefresh();
     }

+ 4 - 0
web/src/views/account/accountList/userInfo.ts

@@ -12,6 +12,10 @@ export const userInfoObj = {
   guide: [],
   materials: {},
   runes: {},
+  legends: {
+    legends: {},
+    level: 0,
+  },
   equipments: [],
   roles: [],
   talents: [],

+ 1 - 1
web/src/views/entrance/index.vue

@@ -188,7 +188,7 @@
             console.log('_res:' + JSON.stringify(res));
             // const ex = 7 * 24 * 60 * 60 * 1000;
             // storage.set(ACCESS_TOKEN, res.token, ex);
-            const path = url.replace('{access-token}', storage.get(ACCESS_TOKEN));
+            const path = url.replace('{access-token}', res.token);
             window.open(path, '_self');
           })
           .catch((e: Error) => {

+ 1 - 1
web/src/views/serverSelect/select.vue

@@ -31,7 +31,7 @@
         console.log('_res:' + JSON.stringify(res));
         // const ex = 7 * 24 * 60 * 60 * 1000;
         // storage.set(ACCESS_TOKEN, res.token, ex);
-        const path = url.replace('{access-token}', storage.get(ACCESS_TOKEN));
+        const path = url.replace('{access-token}', res.token);
         window.open(path, '_self');
       })
       .catch((e: Error) => {

+ 90 - 84
web/src/views/system/config/IosPay.vue

@@ -3,37 +3,37 @@
     <n-grid cols="2 s:2 m:2 l:2 xl:2 2xl:2" responsive="screen">
       <n-grid-item>
         <n-form :label-width="80" :model="formValue" ref="formRef">
-          <n-form-item label="服务器" path="serverId">
+          <!--          <n-form-item label="服务器" path="serverId">
             <n-select
               v-model:value="formValue.serverId"
               :options="serverOptions"
               @update:value="handleUpdateValue"
             />
-          </n-form-item>
+          </n-form-item>-->
 
-          <n-form-item label="苹果支付开关" path="iosPay">
+          <!--          <n-form-item label="苹果支付开关" path="iosPay">
             <n-radio-group v-model:value="formValue.iosPay" name="iosPay">
               <n-space>
                 <n-radio :value="1">开启支付</n-radio>
                 <n-radio :value="0">关闭支付</n-radio>
               </n-space>
             </n-radio-group>
-          </n-form-item>
+          </n-form-item>-->
 
           <n-form-item label="苹果开启等级" path="playerLevel">
             <n-input-number
               placeholder="请输入开启等级"
               :min="1"
-              v-model:value="formValue.playerLevel"
+              v-model:value="formValue.iosOpenLevel"
             />
             <n-space>
-            <template #feedback>
-              开启支付后,IOS玩家等级大于等于当前设置的开启等级时才会显示相应支付商品
-            </template>
+              <template #feedback>
+                开启支付后,IOS玩家等级大于等于当前设置的开启等级时才会显示相应支付商品
+              </template>
             </n-space>
           </n-form-item>
 
-          <n-form-item label="安卓支付开关" path="andrPay">
+          <!--          <n-form-item label="安卓支付开关" path="andrPay">
             <n-radio-group v-model:value="formValue.andrPay" name="andrPay">
               <n-space>
                 <n-radio :value="1">米大师支付</n-radio>
@@ -42,18 +42,18 @@
                 <n-radio :value="0">关闭支付</n-radio>
               </n-space>
             </n-radio-group>
-          </n-form-item>
+          </n-form-item>-->
 
-          <n-form-item label="安卓开启等级" path="andrOpenLevel">
+          <!--          <n-form-item label="安卓开启等级" path="andrOpenLevel">
             <n-input-number
               placeholder="请输入开启等级"
               :min="1"
               v-model:value="formValue.andrOpenLevel"
             />
             <template #feedback>
-                开启支付后,IOS玩家等级大于等于当前设置的开启等级时才会显示相应支付商品
+              开启支付后,IOS玩家等级大于等于当前设置的开启等级时才会显示相应支付商品
             </template>
-          </n-form-item>
+          </n-form-item>-->
 
           <div>
             <br />
@@ -70,7 +70,7 @@
 <script lang="ts">
   import { defineComponent, inject, onMounted, reactive, ref, toRefs } from 'vue';
   import { useMessage } from 'naive-ui';
-  import { updateSwitchers } from '@/api/account/list';
+  import { GetPayConfig, updateSwitchers } from '@/api/account/list';
   import { addOnMessage, getSocket } from '@/utils/websocket';
   import { SocketEnum } from '@/enums/socketEnum';
   import { useRouter } from 'vue-router';
@@ -81,16 +81,16 @@
       const useUserStore = useUserStoreWidthOut();
       const formRef: any = ref(null);
       const message = useMessage();
-      const router = useRouter();
+      // const router = useRouter();
       const show = ref(false);
       const data = ref({});
       const state = reactive({
         formValue: {
-          serverId: 1,
-          iosPay: 0,
-          playerLevel: 1,
-          andrPay: 0,
-          andrOpenLevel: 1,
+          // serverId: 1,
+          // iosPay: 0,
+          iosOpenLevel: 1,
+          // andrPay: 0,
+          // andrOpenLevel: 1,
         },
       });
 
@@ -115,74 +115,80 @@
         formRef.value.restoreValidation();
       }
 
-      function queryGuide() {
-        show.value = true;
-
-        if (getSocket() === undefined) {
-          message.error('socket连接异常,请重试!');
-          router.push({ name: 'account-list' });
-          return;
-        }
-
-        try {
-          getSocket().send(
-            JSON.stringify({
-              type: SocketEnum.TypeQuerySwitcher,
-              data: state.formValue.serverId.toString(),
-            })
-          );
-        } catch (_err) {
-          console.log('错误信息:' + _err.message);
-
-          setTimeout(function () {
-            message.error('socket连接被断开,正在尝试恢复....');
-            getSocket().send(
-              JSON.stringify({
-                type: SocketEnum.TypeQuerySwitcher,
-                data: state.formValue.serverId.toString(),
-              })
-            );
-            message.success('socket已恢复');
-          }, 1000);
-        }
+      // function queryGuide() {
+      //   show.value = true;
+      //
+      //   if (getSocket() === undefined) {
+      //     message.error('socket连接异常,请重试!');
+      //     router.push({ name: 'account-list' });
+      //     return;
+      //   }
+      //
+      //   try {
+      //     getSocket().send(
+      //       JSON.stringify({
+      //         type: SocketEnum.TypeQuerySwitcher,
+      //         data: state.formValue.serverId.toString(),
+      //       })
+      //     );
+      //   } catch (_err) {
+      //     console.log('错误信息:' + _err.message);
+      //
+      //     setTimeout(function () {
+      //       message.error('socket连接被断开,正在尝试恢复....');
+      //       getSocket().send(
+      //         JSON.stringify({
+      //           type: SocketEnum.TypeQuerySwitcher,
+      //           data: state.formValue.serverId.toString(),
+      //         })
+      //       );
+      //       message.success('socket已恢复');
+      //     }, 1000);
+      //   }
+      // }
+
+      async function queryGuide() {
+        const res = await GetPayConfig();
+        console.log('res:' + JSON.stringify(res));
+        state.formValue.iosOpenLevel = res.iosOpenLevel;
       }
 
       onMounted(async () => {
-        queryGuide();
+        await queryGuide();
       });
 
-      const onMessageList = inject('onMessageList'); // 接收注入
-      const querySwitcher = (res) => {
-        const data = JSON.parse(res.data);
-        if (data.type !== SocketEnum.TypeQuerySwitcher) {
-          return;
-        }
-
-        show.value = false;
-
-        if (data.code == SocketEnum.CodeErr) {
-          message.error('查询服务出错,cid:' + data.cid);
-          router.push({ name: 'account-list' });
-          return;
-        }
-        if (data.msg !== undefined && data.msg !== null) {
-          try {
-            data.value = JSON.parse(data.msg);
-            state.formValue.playerLevel = data.value.openLevel;
-            state.formValue.iosPay = data.value.iosPay;
-            state.formValue.andrPay = data.value.andrPay;
-            state.formValue.andrOpenLevel = data.value.andrOpenLevel;
-          } catch (e) {
-            message.error('查询服务出错,' + data.msg);
-          }
-        }
-      };
-
-      addOnMessage(onMessageList, querySwitcher);
-
-      function handleUpdateValue(value: string, _option) {
-        queryGuide();
-      }
+      // const onMessageList = inject('onMessageList'); // 接收注入
+      // const querySwitcher = (res) => {
+      //   const data = JSON.parse(res.data);
+      //   if (data.type !== SocketEnum.TypeQuerySwitcher) {
+      //     return;
+      //   }
+      //
+      //   show.value = false;
+      //
+      //   if (data.code == SocketEnum.CodeErr) {
+      //     message.error('查询服务出错,cid:' + data.cid);
+      //     router.push({ name: 'account-list' });
+      //     return;
+      //   }
+      //   if (data.msg !== undefined && data.msg !== null) {
+      //     try {
+      //       data.value = JSON.parse(data.msg);
+      //       state.formValue.playerLevel = data.value.openLevel;
+      //       state.formValue.iosPay = data.value.iosPay;
+      //       state.formValue.andrPay = data.value.andrPay;
+      //       state.formValue.andrOpenLevel = data.value.andrOpenLevel;
+      //     } catch (e) {
+      //       message.error('查询服务出错,' + data.msg);
+      //     }
+      //   }
+      // };
+      //
+      // addOnMessage(onMessageList, querySwitcher);
+
+      // function handleUpdateValue(value: string, _option) {
+      //   queryGuide();
+      // }
 
       const serverOptions = useUserStore.config.server_simple_option;
       return {
@@ -193,7 +199,7 @@
         show,
         data,
         serverOptions,
-        handleUpdateValue,
+        // handleUpdateValue,
       };
     },
   });