diff --git a/src/components/app/LoginRegisterDialog.vue b/src/components/app/LoginRegisterDialog.vue index 070f630..b47f32d 100644 --- a/src/components/app/LoginRegisterDialog.vue +++ b/src/components/app/LoginRegisterDialog.vue @@ -187,7 +187,7 @@ const loginFormRules = reactive>({ ], verifyCode: [ { required: true, message: '请输入验证码' }, - { pattern: /[0-9A-Za-z]{4}/, message: '验证码不符合格式' }, + { pattern: /^[0-9A-Za-z]{4}$/, message: '验证码不符合格式' }, ], }); const logining = ref(false); diff --git a/src/views/GobangListPage.vue b/src/views/GobangListPage.vue index 64a2400..8d1d08c 100644 --- a/src/views/GobangListPage.vue +++ b/src/views/GobangListPage.vue @@ -34,7 +34,16 @@ :disabled="(row as RoomRender).state === RoomState.GAMING" @click="onJoinButtonClick(row)" > - + @@ -70,6 +79,8 @@ export enum RoomState { WAITING = 'WAITING', /** 正在游戏 */ GAMING = 'GAMING', + /** 正在游戏,但对局已经结束 */ + FINISHED = 'FINISHED', } /** 房间UUID */ export type RoomId = string; @@ -87,6 +98,9 @@ export type RoomDetail = { pieces: (-1 | 0 | 1)[][]; whiteUser?: UserInfo; blackUser?: UserInfo; + blackRequestRestart?: boolean; + whiteRequestRestart?: boolean; + canWhiteDown: boolean; }; export enum WinFace { UP = 'UP', @@ -115,10 +129,12 @@ export type Resp = | PayloadPart< 'HasPlayerWin', { - face: WinFace; - isWhite: boolean; - originalX: number; - originalY: number; + winInfo: { + face: WinFace; + isWhite: boolean; + originalX: number; + originalY: number; + }; } > | PayloadPart<'PlayerWin'> @@ -128,17 +144,27 @@ const relations = { CreateRoom: 'RoomCreated', PlayerJoin: ['PlayerSideAllocation', 'RoomInfo'], PlaceChessPiece: ['RoomInfo'], + ResetRoom: ['RoomInfo'], } as const satisfies Relations; +const DEBUG = true; export function useGobangSocket( options: Omit, 'url' | 'relations'>, ) { return useGameSocket()( Object.assign(options, { - url: `wss://wzpmc.cn:18080/chess/${useUserStore().token}`, + url: DEBUG + ? `ws://172.16.114.84:58080/chess/${useUserStore().token}` + : `wss://wzpmc.cn:18080/chess/${useUserStore().token}`, relations, }), ); } +const playerCountMap: Record = { + [RoomState.CREATED]: '0/2', + [RoomState.WAITING]: '1/2', + [RoomState.GAMING]: '2/2', + [RoomState.FINISHED]: '2/2', +};