feat: 语言切换功能页面推进

This commit is contained in:
hzj 2026-05-06 19:03:04 +08:00
parent 40e4b92eea
commit d20e922a2c
78 changed files with 7891 additions and 1417 deletions

View File

@ -57,12 +57,16 @@
### 当前进行中的主要路由 ### 当前进行中的主要路由
- 当前无 - 当前无进行中主要路由
### 当前跨已完成页面的公共组件联动复查 ### 当前跨已完成页面的公共组件联动复查
- 状态:待处理 - 状态:待处理
- 当前认领:线程一认领 `src/components/data/IpDeviceHandle/index.vue`2026-04-29 - 已完成:`src/components/data/IpDeviceHandle/index.vue`线程一2026-05-06
- 已完成:`src/components/data/UserAccountStatusLogDrawer/index.vue`线程二2026-05-06
- 已完成:`src/components/data/UserVideoViolationTableDialog/index.vue`线程二2026-05-06同步完成 `src/views/approval/not-pass-history/index.vue`
- 已完成:`src/views/common/user_deatils.vue`线程二2026-05-06随客服列表页面直接渲染详情抽屉同步完成
- 已完成:`src/components/data/EditUserGoldCoinRewardForm/index.vue`线程三2026-05-06复核确认仅剩模板注释中文
- 已完成:`src/components/data/UserRegistrationOverviewCharts/*.vue`线程二2026-04-29 - 已完成:`src/components/data/UserRegistrationOverviewCharts/*.vue`线程二2026-04-29
- 已完成:`src/components/data/GoldRunningWaterDialog/index.vue`线程一2026-04-29 - 已完成:`src/components/data/GoldRunningWaterDialog/index.vue`线程一2026-04-29
- 已完成:`src/components/data/EditUserGameCouponRewardForm/index.vue`线程一2026-04-29 - 已完成:`src/components/data/EditUserGameCouponRewardForm/index.vue`线程一2026-04-29
@ -181,23 +185,43 @@
- 参数配置 / Parameter Settings - 参数配置 / Parameter Settings
- 路由别名:`SysConfigSetting` - 路由别名:`SysConfigSetting`
- 路径:`cnf/enums/manager/index` - 路径:`cnf/enums/manager/index`
- 状态:待处理 - 文件:`src/views/cnf/enums/manager/index.vue`
- 状态:已完成
- 幸运礼物规则配置 / Lucky Gift Rule Configuration - 幸运礼物规则配置 / Lucky Gift Rule Configuration
- 路由别名:`game:rule-config` - 路由别名:`game:rule-config`
- 路径:`game/lucky-gift/rule-config/index` - 路径:`game/lucky-gift/rule-config/index`
- 状态:待处理 - 文件:`src/views/game/lucky-gift/rule-config/index.vue`
- 状态:已完成
- 幸运礼物规格配置 / Lucky Gift Specification Configuration - 幸运礼物规格配置 / Lucky Gift Specification Configuration
- 路由别名:`game:standard-config` - 路由别名:`game:standard-config`
- 路径:`game/lucky-gift/standard-config/index` - 路径:`game/lucky-gift/standard-config/index`
- 状态:待处理 - 已完成文件:
- `src/views/game/lucky-gift/standard-config/index.vue`
- `src/views/game/lucky-gift/standard-config/standard-config-edit.vue`
- `src/views/game/lucky-gift/probability-config/index.vue`
- 状态:已完成
- 靓号管理(角色) / Special ID Management (Role) - 靓号管理(角色) / Special ID Management (Role)
- 路由别名:`user:special:id:role` - 路由别名:`user:special:id:role`
- 路径:`user/special-id-role/index` - 路径:`user/special-id-role/index`
- 状态:待处理 - 已完成文件:
- `src/views/user/special-id-role/index.vue`
- `src/views/user/special-id-role/special-setting/index.vue`
- `src/views/user/special-id-role/special-setting/form-edit.vue`
- `src/views/user/special-id-role/special-setting/customize-field-dialog.vue`
- `src/views/user/special-id-role/special-setting/special-log.vue`
- `src/views/user/special-id-role/special-log-info/index.vue`
- 状态已完成线程一2026-05-06
- 礼物管理 / Gift Management - 礼物管理 / Gift Management
- 路由别名:`ContentManagerGift` - 路由别名:`ContentManagerGift`
- 路径:`cnf/gift/index` - 路径:`cnf/gift/index`
- 状态:待处理 - 已完成文件:
- `src/views/cnf/gift/index.vue`
- `src/views/cnf/gift/cp/index.vue`
- `src/views/cnf/gift/setting/index.vue`
- `src/views/cnf/gift/setting/edit.vue`
- `src/views/cnf/gift/week-star/index.vue`
- `src/views/cnf/gift/week-star/add-week-gift-group.vue`
- 状态:已完成
- IM账号管理 / IM Account Management - IM账号管理 / IM Account Management
- 路由别名:`ImAccountManager` - 路由别名:`ImAccountManager`
- 路径:`user/im-account-manager/index` - 路径:`user/im-account-manager/index`
@ -206,11 +230,16 @@
- Banner管理 / Banner Management - Banner管理 / Banner Management
- 路由别名:`BannerManager` - 路由别名:`BannerManager`
- 路径:`sys/banner/index` - 路径:`sys/banner/index`
- 状态:待处理 - 已完成文件:
- `src/views/sys/banner/index.vue`
- `src/views/sys/banner/form-edit.vue`
- 状态:已完成
- 房间主题管理 / Room Theme Management - 房间主题管理 / Room Theme Management
- 路由别名:`RoomThemeManager` - 路由别名:`RoomThemeManager`
- 路径:`room/theme/index` - 路径:`room/theme/index`
- 状态:待处理 - 已完成文件:
- `src/views/room/theme/index.vue`
- 状态已完成线程三2026-05-06
- 国家管理 / Country Management - 国家管理 / Country Management
- 路由别名:`SysCountryCode` - 路由别名:`SysCountryCode`
- 路径:`sys/country-code/index` - 路径:`sys/country-code/index`
@ -219,29 +248,212 @@
- 徽章配置管理 / Badge Configuration Management - 徽章配置管理 / Badge Configuration Management
- 路由别名:`content:manager:badge` - 路由别名:`content:manager:badge`
- 路径:`user/badge/index` - 路径:`user/badge/index`
- 状态:待处理 - 已完成文件:
- `src/views/user/badge/index.vue`
- `src/views/user/badge/badge-give/index.vue`
- `src/views/user/badge/badge-revoke/index.vue`
- `src/views/user/badge/badge-rule/index.vue`
- `src/views/user/badge/badge-rule/source-edit.vue`
- 状态已完成线程一2026-05-06
- 表情管理 / Emoji Management - 表情管理 / Emoji Management
- 路由别名:`EmojiConfig` - 路由别名:`EmojiConfig`
- 路径:`sys/emoji-config/index` - 路径:`sys/emoji-config/index`
- 状态:待处理 - 已完成文件:
- `src/views/sys/emoji-config/index.vue`
- `src/views/sys/emoji-config/emoji/index.vue`
- `src/views/sys/emoji-config/group/index.vue`
- `src/views/sys/emoji-config/group/form-edit.vue`
- 状态已完成线程一2026-05-06
- 靓号管理 / Special ID Management - 靓号管理 / Special ID Management
- 路由别名:`user:special:id` - 路由别名:`user:special:id`
- 路径:`user/special-id/index` - 路径:`user/special-id/index`
- 状态:待处理 - 已完成文件:
- `src/views/user/special-id/index.vue`
- `src/views/user/special-id/special-setting/index.vue`
- `src/views/user/special-id/special-setting/form-edit.vue`
- `src/views/user/special-id/special-setting/customize-field-dialog.vue`
- `src/views/user/special-id/special-setting/special-log.vue`
- `src/views/user/special-id/special-log-info/index.vue`
- 状态已完成线程一2026-05-06
- 邀请用户配置 / Invite User Configuration - 邀请用户配置 / Invite User Configuration
- 路由别名:`AswatInviteUserRule` - 路由别名:`AswatInviteUserRule`
- 路径:`sys/invite-user-rule/index` - 路径:`sys/invite-user-rule/index`
- 状态:待处理 - 已完成文件:
- `src/views/sys/invite-user-rule/index.vue`
- `src/views/sys/invite-user-rule/Lotfun/index.vue`
- 备注:
- `src/views/sys/invite-user-rule/aswat/index.vue``src/views/sys/invite-user-rule/yahlla/index.vue` 当前仅存在注释 import未纳入入口页实际渲染链
- 状态已完成线程二2026-05-06
- 游戏列表 / Game List - 游戏列表 / Game List
- 路由别名:`game:config` - 路由别名:`game:config`
- 路径:`sys/game-config/index` - 路径:`sys/game-config/index`
- 状态:待处理 - 已完成文件:
- `src/views/sys/game-config/index.vue`
- `src/views/sys/game-config/fruit/edit.vue`
- `src/views/sys/game-config/match/index.vue`
- `src/views/sys/game-config/match/form-edit.vue`
- `src/views/sys/game-config/room/index.vue`
- `src/views/sys/game-config/room/form-edit.vue`
- 页面私有组件状态:已随页面同步完成
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/SysOriginIcon/index.vue`:复核通过
- 状态已完成线程三2026-05-06
- 运营日志 / Operations Logs - 运营日志 / Operations Logs
- 路由别名:`operation:log` - 路由别名:`operation:log`
- 状态:待处理 - 状态:部分完成
- 礼物赠送记录 / Gift Sending Records
- 路由别名:`ContentManagerGiftHistory`
- 路径:`user/gift-history/index`
- 已完成文件:
- `src/views/user/gift-history/index.vue`
- 页面私有组件状态:无页面私有组件
- 直接公共组件复核:
- `src/components/data/GiftHistoryDetailsDrawer/index.vue`:复核通过,仅剩注释中文
- `src/components/data/RoomDeatilsDrawer/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- `src/components/SysOriginIcon/index.vue`:复核通过
- `src/views/common/user_deatils.vue`:复核通过,仅剩注释块中文
- 状态已完成线程三2026-05-06
- 用户道具流水 / User Prop Transactions
- 路由别名:`RunningWaterUserProps`
- 路径:`user/user-prop-list/index`
- 已完成文件:
- `src/views/user/user-prop-list/index.vue`
- 页面私有组件状态:无页面私有组件
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- `src/views/common/user_deatils.vue`:复核通过,仅剩注释块中文
- 状态已完成线程三2026-05-06
- 邀请用户 / Invite Users
- 路由别名:`invite:user:register:log`
- 路径:`log/invite-user-log/index`
- 已完成文件:
- `src/views/log/invite-user-log/index.vue`
- 页面私有组件状态:无页面私有组件
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/SysOriginIcon/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- 状态已完成线程三2026-05-06
- 幸运礼物送礼记录 / Lucky Gift Sending Records
- 路由别名:`lucky:give-record`
- 路径:`game/lucky-gift/give-record/index`
- 文件:`src/views/game/lucky-gift/give-record/index.vue`
- 已完成文件:
- `src/views/game/lucky-gift/give-record/index.vue`
- 页面私有组件状态:无页面私有组件
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/SysOriginIcon/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/data/SearchRoomInput/index.vue`:复核通过,仅剩注释中文
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- `src/components/data/RoomDeatilsDrawer/index.vue`:复核通过
- `src/views/common/user_deatils.vue`:复核通过,仅剩注释块中文
- 状态已完成线程一2026-05-06
- 用户签到 / User Check-ins
- 路由别名:`CheckInLog`
- 路径:`user/check-in-log/index`
- 文件:`src/views/user/check-in-log/index.vue`
- 已完成文件:
- `src/views/user/check-in-log/index.vue`
- 页面私有组件状态:无页面私有组件
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/views/common/user_deatils.vue`:复核通过,仅剩注释块中文
- 状态已完成线程一2026-05-06
- 登录日志 / Login Logs
- 路由别名:`app:logger:login`
- 路径:`log/login-logger/index`
- 文件:`src/views/log/login-logger/index.vue`
- 页面私有组件状态:无页面私有组件
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/PlatformSvgIcon/index.vue`:复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- `src/components/data/UserVideoViolationTableDialog/index.vue`:复核通过,仅剩注释中文
- `src/components/data/UserAccountStatusLogDrawer/index.vue`:复核通过
- `src/components/data/AccountHanle/index.vue`:复核保留接口提交默认警告文案
- 状态已完成线程二2026-05-06
- Ludo飞行棋 / Ludo
- 路由别名:`game:ludo`
- 路径:`game/ludo/index`
- 文件:`src/views/game/ludo/index.vue`
- 状态:已完成
- CP申请日志 / CP Application Logs
- 路由别名:`cp:apply:log`
- 路径:`log/cp/index`
- 文件:`src/views/log/cp/index.vue`
- 已完成文件:
- `src/views/log/cp/index.vue`
- 页面私有组件状态:无页面私有组件
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- 状态已完成线程一2026-05-06
- 用户密码日志 / User Password Logs
- 路由别名:`UserPasswordLog`
- 路径:`log/password-log/index`
- 文件:`src/views/log/password-log/index.vue`
- 已完成文件:
- `src/views/log/password-log/index.vue`
- 页面私有组件状态:无页面私有组件
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/SysOriginIcon/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- `src/views/common/user_deatils.vue`:复核通过,仅剩注释块中文
- 状态已完成线程一2026-05-06
- 内购配置 / In-App Purchase Configuration - 内购配置 / In-App Purchase Configuration
- 路由别名:`in:app:purchase:conf` - 路由别名:`in:app:purchase:conf`
- 状态:待处理 - 状态:部分完成
- 渠道管理 / Channel Management
- 路由别名:`channel:manager`
- 路径:`cnf/pay/channel/index`
- 已完成文件:
- `src/views/cnf/pay/channel/index.vue`
- `src/views/cnf/pay/channel/edit-form.vue`
- 页面私有组件状态:`edit-form.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:复核通过
- 状态已完成线程一2026-05-06
- 厂商管理 / Provider Management
- 路由别名:`pay:factory:manager`
- 路径:`cnf/pay/factory/index`
- 已完成文件:
- `src/views/cnf/pay/factory/index.vue`
- `src/views/cnf/pay/factory/edit-form.vue`
- `src/views/cnf/pay/factory/associated-channel.vue`
- `src/views/cnf/pay/comp/transfer-channel.vue`
- 页面私有组件状态:`edit-form.vue``associated-channel.vue``comp/transfer-channel.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:复核通过
- 状态已完成线程一2026-05-06
- 区域关联支付国家 / Region-Payment Country Relations
- 路由别名:`region:pay:country`
- 路径:`cnf/pay/region-relation/index`
- 状态:待处理
- 开通支付国家 / Enabled Payment Countries
- 路由别名:`open:pay:country`
- 路径:`cnf/pay/country/index`
- 状态:待处理
- 应用管理 / Application Management
- 路由别名:`pay:application`
- 路径:`cnf/pay/application/index`
- 状态:待处理
- Google/Apple-V2 / Google/Apple V2
- 路由别名:`google:apple:product:config`
- 路径:`cnf/product-v2/index`
- 状态:待处理
- 活动配置 / Activity Configuration - 活动配置 / Activity Configuration
- 路由别名:`Activity:Config` - 路由别名:`Activity:Config`
- 状态:部分完成 - 状态:部分完成
@ -306,7 +518,16 @@
- 申请靓号 / Apply for Special ID - 申请靓号 / Apply for Special ID
- 路由别名:`BeautifulNumberApply` - 路由别名:`BeautifulNumberApply`
- 路径:`user/beautiful-number-apply/index` - 路径:`user/beautiful-number-apply/index`
- 状态:待处理 - 已完成文件:
- `src/views/user/beautiful-number-apply/index.vue`
- `src/views/user/beautiful-number-apply/components/applyHandle.vue`
- 页面私有组件状态:
- `components/applyHandle.vue`:已随页面同步完成
- 直接公共组件复核:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩注释或注释掉的历史块
- 状态已完成线程二2026-05-06
- App启动页 / App Launch Page - App启动页 / App Launch Page
- 路由别名:`StartPage` - 路由别名:`StartPage`
- 路径:`sys/start-page/index` - 路径:`sys/start-page/index`
@ -317,11 +538,23 @@
- 客服列表 / Customer Service List - 客服列表 / Customer Service List
- 路由别名:`CustomerService` - 路由别名:`CustomerService`
- 路径:`sys/customer-service/index` - 路径:`sys/customer-service/index`
- 状态:待处理 - 已完成文件:
- `src/views/sys/customer-service/index.vue`
- `src/views/common/user_deatils.vue`
- 直接公共组件复核:
- `src/components/SysOriginIcon/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- 状态:已完成
- 金币余额榜 / Gold Balance Leaderboard - 金币余额榜 / Gold Balance Leaderboard
- 路由别名:`gold:balanc:top` - 路由别名:`gold:balanc:top`
- 路径:`user/gold-balance/index` - 路径:`user/gold-balance/index`
- 状态:待处理 - 已完成文件:
- `src/views/user/gold-balance/index.vue`
- 直接公共组件复核:
- `src/components/SysOriginIcon/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- 状态:已完成
- 区域配置 / Region Configuration - 区域配置 / Region Configuration
- 路由别名:`RegionConfig` - 路由别名:`RegionConfig`
- 路径:`sys/region-config/index` - 路径:`sys/region-config/index`
@ -342,7 +575,17 @@
- 在线房间 / Online Rooms - 在线房间 / Online Rooms
- 路由别名:`RoomOnline` - 路由别名:`RoomOnline`
- 路径:`room/online/index` - 路径:`room/online/index`
- 状态:待处理 - 已完成文件:
- `src/views/room/online/index.vue`
- `src/views/room/online/online-member.vue`
- 页面私有组件状态:已随页面同步完成
- 直接公共组件状态:
- `src/components/data/SelectSystemRegion/index.vue`:已完成
- `src/components/data/AccountHanle/index.vue`:历史已完成,本轮复核保留接口提交默认警告内容
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- `src/components/data/Gender/index.vue`:历史已完成,本轮复核通过
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩历史注释与注释掉的购买记录块
- 状态已完成线程一2026-05-06
- 房间资料列表 / Room Profile List - 房间资料列表 / Room Profile List
- 路由别名:`ProfileRoom` - 路由别名:`ProfileRoom`
- 路径:`room/profile/index` - 路径:`room/profile/index`
@ -356,11 +599,30 @@
- 置顶房间 / Pinned Rooms - 置顶房间 / Pinned Rooms
- 路由别名:`room:set:top` - 路由别名:`room:set:top`
- 路径:`sys/set-top/index` - 路径:`sys/set-top/index`
- 状态:待处理 - 已完成文件:
- `src/views/sys/set-top/index.vue`
- `src/views/sys/set-top/form-edit.vue`
- 页面私有组件状态:已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:复核通过
- `src/components/SysOriginIcon/index.vue`:复核通过
- `src/components/data/SearchRoomInput/index.vue`:复核通过,仅剩历史注释中文
- `src/components/data/SelectSystemRegion/index.vue`:历史已完成,本轮复核通过
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- 备注:`statusDesc` 为接口返回动态状态描述,当前无接口样例可可靠推断,暂不翻译
- 状态已完成线程一2026-05-06
- 房间黑名单 / Room Blacklist - 房间黑名单 / Room Blacklist
- 路由别名:`room:user:blacklist` - 路由别名:`room:user:blacklist`
- 路径:`log/blacklist/index` - 路径:`log/blacklist/index`
- 状态:待处理 - 已完成文件:
- `src/views/log/blacklist/index.vue`
- 页面私有组件状态:该目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/SysOriginIcon/index.vue`:复核通过
- `src/components/data/AccountInput/index.vue`:复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- 状态已完成线程一2026-05-06
- 家族管理 / Family Management - 家族管理 / Family Management
- 路由别名:`FamilyManager` - 路由别名:`FamilyManager`
@ -474,11 +736,13 @@
- 用户专属礼物制作 / Custom User Gift Creation - 用户专属礼物制作 / Custom User Gift Creation
- 封禁设备列表 / Blocked Device List - 封禁设备列表 / Blocked Device List
- 最新登记设备 / Latest Registered Devices - 最新登记设备 / Latest Registered Devices
- 运营管理 / Operations Management - 运营管理 / Operations Management
- 营收支出 / Revenue and Expenses - 营收支出 / Revenue and Expenses
- 消费商品订单 / Purchase Orders - 消费商品订单 / Purchase Orders
- 金币收支记录 / Gold Transaction Records - 金币收支记录 / Gold Transaction Records
- 数据配置 / Data Configuration - 数据配置 / Data Configuration
- 参数配置 / Parameter Settings
- 幸运礼物规则配置 / Lucky Gift Rule Configuration
- 国家管理 / Country Management - 国家管理 / Country Management
- IM账号管理 / IM Account Management - IM账号管理 / IM Account Management
- 活动配置 / Activity Configuration - 活动配置 / Activity Configuration
@ -1738,3 +2002,18 @@
] ]
} }
- 2026-05-06 最新同步
- 线程一已完成:靓号管理 / Special ID Management
- 已完成文件:
- `src/views/user/special-id/index.vue`
- `src/views/user/special-id/special-setting/index.vue`
- `src/views/user/special-id/special-setting/form-edit.vue`
- `src/views/user/special-id/special-setting/customize-field-dialog.vue`
- `src/views/user/special-id/special-setting/special-log.vue`
- `src/views/user/special-id/special-log-info/index.vue`
- 模块复核结果:
- 已按模块级规则核对入口页与同目录可见文件
- 递归中文扫描后仅剩一条代码注释 `// true发货 false扣除`
- 校验结果:
- 复用 `pages.specialIdRoleManagement`
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning

File diff suppressed because it is too large Load Diff

View File

@ -83,7 +83,25 @@
- 营收支出 / Revenue and Expenses - 营收支出 / Revenue and Expenses
- 消费商品订单 / Purchase Orders - 消费商品订单 / Purchase Orders
- 金币收支记录 / Gold Transaction Records - 金币收支记录 / Gold Transaction Records
- 内购配置 / In-App Purchase Configuration
- 渠道管理 / Channel Management
- 厂商管理 / Provider Management
- 运营日志 / Operations Logs
- 礼物赠送记录 / Gift Sending Records
- 用户道具流水 / User Prop Transactions
- 用户签到 / User Check-ins
- 邀请用户 / Invite Users
- 幸运礼物送礼记录 / Lucky Gift Sending Records
- 登录日志 / Login Logs
- CP申请日志 / CP Application Logs
- 用户密码日志 / User Password Logs
- 数据配置 / Data Configuration - 数据配置 / Data Configuration
- 参数配置 / Parameter Settings
- 幸运礼物规则配置 / Lucky Gift Rule Configuration
- 幸运礼物规格配置 / Lucky Gift Specification Configuration
- 靓号管理(角色) / Special ID Management (Role)
- 游戏列表 / Game List
- 房间主题管理 / Room Theme Management
- 国家管理 / Country Management - 国家管理 / Country Management
- IM账号管理 / IM Account Management - IM账号管理 / IM Account Management
- 活动配置 / Activity Configuration - 活动配置 / Activity Configuration
@ -92,11 +110,15 @@
- 消息推送 / Message Push - 消息推送 / Message Push
- APP管理员 / App Administrators - APP管理员 / App Administrators
- App启动页 / App Launch Page - App启动页 / App Launch Page
- 客服列表 / Customer Service List
- 系统公告管理 / System Notice Management - 系统公告管理 / System Notice Management
- 金币代理 / Gold Agents - 金币代理 / Gold Agents
- 申请靓号 / Apply for Special ID
- 区域配置 / Region Configuration - 区域配置 / Region Configuration
- 语音房间 / Voice Rooms - 语音房间 / Voice Rooms
- 在线房间 / Online Rooms
- 房间资料列表 / Room Profile List - 房间资料列表 / Room Profile List
- 置顶房间 / Pinned Rooms
- 道具管理 / Prop Management - 道具管理 / Prop Management
- 资源组配置 / Resource Group Configuration - 资源组配置 / Resource Group Configuration
- 主播中心 / Broadcaster Center - 主播中心 / Broadcaster Center
@ -160,9 +182,12 @@
- `src/views/message/push/new-push-form.vue` - `src/views/message/push/new-push-form.vue`
- `src/views/message/push/push-log.vue` - `src/views/message/push/push-log.vue`
- `src/views/message/push/push-task.vue` - `src/views/message/push/push-task.vue`
- `src/views/sys/customer-service/index.vue`
- `src/views/common/user_deatils.vue`
- `src/views/user/user-table/index.vue` - `src/views/user/user-table/index.vue`
- `src/views/user/custom-gift/index.vue` - `src/views/user/custom-gift/index.vue`
- `src/views/log/archive-device/index.vue` - `src/views/log/archive-device/index.vue`
- `src/views/log/login-logger/index.vue`
- `src/views/user/user-device/index.vue` - `src/views/user/user-device/index.vue`
- `src/views/sys/user-manager/index.vue` - `src/views/sys/user-manager/index.vue`
- `src/views/sys/user-manager/edit-user.vue` - `src/views/sys/user-manager/edit-user.vue`
@ -173,6 +198,17 @@
- `src/views/sys/menu-manager/menu-tree.vue` - `src/views/sys/menu-manager/menu-tree.vue`
- `src/views/sys/menu-manager/menu-edit.vue` - `src/views/sys/menu-manager/menu-edit.vue`
- `src/views/sys/resources-manager/index.vue` - `src/views/sys/resources-manager/index.vue`
- `src/views/sys/banner/index.vue`
- `src/views/sys/banner/form-edit.vue`
- `src/views/user/gold-balance/index.vue`
- `src/views/sys/invite-user-rule/index.vue`
- `src/views/sys/invite-user-rule/Lotfun/index.vue`
- `src/views/room/theme/index.vue`
- `src/views/cnf/enums/manager/index.vue`
- `src/views/game/lucky-gift/rule-config/index.vue`
- `src/views/game/lucky-gift/standard-config/index.vue`
- `src/views/game/lucky-gift/standard-config/standard-config-edit.vue`
- `src/views/game/lucky-gift/probability-config/index.vue`
- `src/views/order/candy/purchasing/index.vue` - `src/views/order/candy/purchasing/index.vue`
- `src/views/order/candy/running-water/index.vue` - `src/views/order/candy/running-water/index.vue`
- `src/components/data/UserInfo/BaseInfo/index.vue` - `src/components/data/UserInfo/BaseInfo/index.vue`
@ -251,6 +287,8 @@
- `src/views/user/freight/running-water.vue` - `src/views/user/freight/running-water.vue`
- `src/views/user/freight/seller-info.vue` - `src/views/user/freight/seller-info.vue`
- `src/views/user/freight/freight-seller-running-water.vue` - `src/views/user/freight/freight-seller-running-water.vue`
- `src/views/user/beautiful-number-apply/index.vue`
- `src/views/user/beautiful-number-apply/components/applyHandle.vue`
- `src/views/sys/region-config/index.vue` - `src/views/sys/region-config/index.vue`
- `src/views/sys/region-config/assist/index.vue` - `src/views/sys/region-config/assist/index.vue`
- `src/views/props/props-source-group/index.vue` - `src/views/props/props-source-group/index.vue`
@ -289,18 +327,432 @@
- `src/components/data/AddOtherRechargeDialog/index.vue` - `src/components/data/AddOtherRechargeDialog/index.vue`
- `src/components/data/DiamondRunningWaterDialog/index.vue` - `src/components/data/DiamondRunningWaterDialog/index.vue`
- `src/components/data/DiamondSalaryRunningWaterDialog/index.vue` - `src/components/data/DiamondSalaryRunningWaterDialog/index.vue`
- `src/views/sys/emoji-config/index.vue`
- `src/views/sys/emoji-config/emoji/index.vue`
- `src/views/sys/emoji-config/group/index.vue`
- `src/views/sys/emoji-config/group/form-edit.vue`
- `src/views/user/badge/index.vue`
- `src/views/user/badge/badge-give/index.vue`
- `src/views/user/badge/badge-revoke/index.vue`
- `src/views/user/badge/badge-rule/index.vue`
- `src/views/user/badge/badge-rule/source-edit.vue`
- `src/views/user/check-in-log/index.vue`
- `src/views/log/cp/index.vue`
- `src/views/log/password-log/index.vue`
- `src/views/game/lucky-gift/give-record/index.vue`
- `src/views/sys/game-config/index.vue`
- `src/views/sys/game-config/fruit/edit.vue`
- `src/views/sys/game-config/match/index.vue`
- `src/views/sys/game-config/match/form-edit.vue`
- `src/views/sys/game-config/room/index.vue`
- `src/views/sys/game-config/room/form-edit.vue`
- 表格展示适配:表头自动换行 + 默认最小宽度补齐 - 表格展示适配:表头自动换行 + 默认最小宽度补齐
- 表格展示适配:表头 `.cell` 高度自适应 + 纵向居中修正 - 表格展示适配:表头 `.cell` 高度自适应 + 纵向居中修正
- 表单展示适配:标题纵向居中 - 表单展示适配:标题纵向居中
## 进行中 ## 进行中
- 线程一:公共组件联动复查 / IpDeviceHandle - 当前无进行中任务
- 状态:进行中
- 认领文件:`src/components/data/IpDeviceHandle/index.vue` ## 2026-05-06 最新同步
- 关联已完成页面:
- `src/views/user/user-table/index.vue` - 线程一已完成:主要路由页面 / 运营管理 / 内购配置 / 厂商管理
- 处理原则:只处理组件可见静态展示文本,不修改接口参数、路由路径、权限码、表单提交字段或接口返回内容 - 路由别名:`pay:factory:manager`
- 路径:`cnf/pay/factory/index`
- 已完成文件:
- `src/views/cnf/pay/factory/index.vue`
- `src/views/cnf/pay/factory/edit-form.vue`
- `src/views/cnf/pay/factory/associated-channel.vue`
- `src/views/cnf/pay/comp/transfer-channel.vue`
- 模块复核结果:
- 已完成筛选区、搜索/添加/编辑/关联渠道按钮、表格加载文案、表格列头、厂商编辑弹窗、关联渠道弹窗、穿梭框标题与按钮国际化
- 关联渠道中的渠道类型展示复用 `pages.payChannel.channelTypes`,未修改 `src/constant/type.js` 原常量、接口参数或提交值
- 未修改接口参数、查询字段、路由路径、权限码、表格 `prop` 或接口返回动态数据
- 页面私有组件状态:`edit-form.vue``associated-channel.vue``comp/transfer-channel.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- 验证结果:中文残留扫描通过;语言文件语法检查通过;`npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 状态:已完成,线程一已切回待分配
- 线程一已完成:主要路由页面 / 运营管理 / 内购配置 / 渠道管理
- 路由别名:`channel:manager`
- 路径:`cnf/pay/channel/index`
- 已完成文件:
- `src/views/cnf/pay/channel/index.vue`
- `src/views/cnf/pay/channel/edit-form.vue`
- 模块复核结果:
- 已完成筛选区、搜索/添加/编辑按钮、表格加载文案、表格列头、弹窗标题、表单标签、placeholder、校验提示与弹窗按钮国际化
- 渠道类型展示改为按实际 `value` 映射 `pages.payChannel.channelTypes`,未修改 `src/constant/type.js` 原常量、接口参数或提交值
- 未修改接口参数、查询字段、路由路径、权限码、表格 `prop` 或接口返回动态数据
- 页面私有组件状态:`edit-form.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- 验证结果:中文残留扫描通过;语言文件语法检查通过;`npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 状态:已完成,线程一已切回待分配
- 线程一已完成:主要路由页面 / 语音房间 / 房间黑名单
- 路由别名:`room:user:blacklist`
- 路径:`log/blacklist/index`
- 已完成文件:
- `src/views/log/blacklist/index.vue`
- 模块复核结果:
- 已完成系统筛选、用户/房间输入、日期范围、搜索按钮、表格加载文案、表格列头与加载更多文案国际化
- 接口返回的用户资料、房间资料、封面、房间名称、时间戳等动态数据保持原样
- 未修改接口参数、查询字段、路由路径、权限码、表格 `prop` 或接口返回动态数据
- 页面私有组件状态:该目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- 验证结果:中文残留扫描通过;语言文件语法检查通过;`npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 状态:已完成,线程一已切回待分配
- 线程一已完成:主要路由页面 / 语音房间 / 置顶房间
- 路由别名:`room:set:top`
- 路径:`sys/set-top/index`
- 已完成文件:
- `src/views/sys/set-top/index.vue`
- `src/views/sys/set-top/form-edit.vue`
- 模块复核结果:
- 已完成筛选区、表格列头、是否展示文案、操作按钮、删除确认、表单标签、日期 placeholder、校验提示与本地错误提示国际化
- 表单校验规则改为 `localizedRules` 计算属性,确保语言切换后校验提示跟随更新
- 房间名称、房间封面、区域名称、状态描述 `statusDesc` 等接口返回动态数据保持原样
- `statusDesc` 暂无接口样例,当前未做推断翻译
- 未修改接口参数、查询字段、路由路径、权限码、表格 `prop`、布尔提交值或接口返回数据值
- 页面私有组件状态:`form-edit.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/SearchRoomInput/index.vue`:仅剩历史注释中文,不属于可见展示文本
- `src/components/data/SelectSystemRegion/index.vue`:历史已完成,本轮复核通过
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- 验证结果:语言文件语法检查通过;`npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 状态:已完成,线程一已切回待分配
- 线程一已完成:主要路由页面 / 语音房间 / 在线房间
- 路由别名:`RoomOnline`
- 路径:`room/online/index`
- 已完成文件:
- `src/views/room/online/index.vue`
- `src/views/room/online/online-member.vue`
- 模块复核结果:
- 已完成系统/区域筛选、房间 ID/Account 输入、搜索按钮、热门标签、操作下拉、房间卡片字段名前缀、成员抽屉标题与加载文案国际化
- 房间名称、房间 ID、房间 Account、公告、家族信息、国家/区域等接口返回动态数据保持原样
- 未修改接口参数、查询字段、路由路径、权限码或接口返回数据值
- 页面私有组件状态:`online-member.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/data/SelectSystemRegion/index.vue`:默认 placeholder 已改为 `common.select`,中文残留扫描通过
- `src/components/data/AccountHanle/index.vue`:历史已完成,本轮复核仅剩按规则保留的接口提交默认警告内容
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- `src/components/data/Gender/index.vue`:历史已完成,本轮复核通过
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩历史注释与注释掉的购买记录块
- 验证结果:语言文件语法检查通过;`npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 状态:已完成,线程一已切回待分配
- 线程一已完成:主要路由页面 / 运营管理 / 运营日志 / 幸运礼物送礼记录
- 路由别名:`lucky:give-record`
- 路径:`game/lucky-gift/give-record/index`
- 已完成文件:
- `src/views/game/lucky-gift/give-record/index.vue`
- 模块复核结果:
- 已完成系统筛选、数量筛选、礼物筛选、用户/房间输入、日期范围、统计汇总、搜索按钮、表格加载文案与表格列头国际化
- 数量、礼物 ID、系统来源、用户资料、房间资料、礼物名称等提交值或接口返回动态值保持原样
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- `src/views/game/lucky-gift/give-record/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/game/lucky-gift/give-record` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/data/SearchRoomInput/index.vue`:仅剩代码注释中文,不属于可见展示文本
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- `src/components/data/RoomDeatilsDrawer/index.vue`:扫描无中文命中
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.luckyGiftGiveRecords`
- 已完成验证:
- 语言文件语法检查通过
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程一本轮完成后切回待分配
- 线程一已完成:主要路由页面 / 运营管理 / 运营日志 / 用户密码日志
- 路由别名:`UserPasswordLog`
- 路径:`log/password-log/index`
- 已完成文件:
- `src/views/log/password-log/index.vue`
- 模块复核结果:
- 已完成系统筛选、用户输入、操作类型/业务类型筛选、搜索按钮、表格加载文案、表格列头与类型展示国际化
- `ADD_PASSWORD``UPDATE_PASSWORD``PAY_PASSWORD``ACCOUNT_PASSWORD` 等实际提交值保持原样,仅翻译展示文案
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- `src/views/log/password-log/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/log/password-log` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.userPasswordLogs`
- 已完成验证:
- 语言文件语法检查通过
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程一本轮完成后切回待分配
- 线程一已完成:主要路由页面 / 运营管理 / 运营日志 / CP申请日志
- 路由别名:`cp:apply:log`
- 路径:`log/cp/index`
- 已完成文件:
- `src/views/log/cp/index.vue`
- 模块复核结果:
- 已完成状态筛选、发送/接收用户输入、搜索按钮、表格加载文案、表格列头、状态展示与创建/修改时间前缀国际化
- `WAIT``AGREE``DISMISS``REFUSE``REIMBURSE` 等状态实际提交值保持原样,仅翻译展示文案
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- `src/views/log/cp/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/log/cp` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.cpApplicationLogs`
- 已完成验证:
- 语言文件语法检查通过
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程一本轮完成后切回待分配
- 线程二已完成:主要路由页面 / 运营管理 / 运营日志 / 登录日志
- 已完成文件:
- `src/views/log/login-logger/index.vue`
- 模块复核结果:
- 已完成用户 ID、设备 ID、搜索按钮、表格加载文案、表格列头与操作下拉国际化
- 登录方式名称、用户资料、IP、设备 ID、App 版本等接口返回动态内容保持原样
- `src/views/log/login-logger/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/log/login-logger` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/PlatformSvgIcon/index.vue`:扫描无中文命中
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- `src/components/data/UserVideoViolationTableDialog/index.vue`:仅剩模板注释中文,不属于可见展示文本
- `src/components/data/UserAccountStatusLogDrawer/index.vue`:扫描无中文命中
- `src/components/data/AccountHanle/index.vue`:仅剩按规则保留的接口提交默认警告文案
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.loginLogger`
- 已完成验证:
- 语言文件语法检查通过
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程二本轮完成后切回待分配
- 线程一已完成:主要路由页面 / 运营管理 / 运营日志 / 用户签到
- 已完成文件:
- `src/views/user/check-in-log/index.vue`
- 模块复核结果:
- 已完成用户 ID、日期范围、搜索按钮、表格加载文案与表格列头国际化
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- `src/views/user/check-in-log/index.vue` 中文残留仅剩文件头注释,不属于可见展示文本
- 页面私有组件状态:
- `src/views/user/check-in-log` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.userCheckIns`
- 已完成验证:
- 语言文件语法检查通过
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程一本轮完成后切回待分配
- 线程三已完成:主要路由页面 / 运营管理 / 运营日志 / 邀请用户
- 路由别名:`invite:user:register:log`
- 路径:`log/invite-user-log/index`
- 已完成文件:
- `src/views/log/invite-user-log/index.vue`
- 模块复核结果:
- 已完成系统、国家、邀请用户、被邀请用户、日期范围、搜索按钮、表格加载文案与表格列头国际化
- 国家名称、系统来源名称、用户资料、奖金、设备号与创建时间等接口返回数据保持原样
- `src/views/log/invite-user-log/index.vue` 中文残留仅剩代码注释,不属于可见展示文本
- 页面私有组件状态:
- `src/views/log/invite-user-log` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:历史已完成,本轮复核通过
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.inviteUserLog`
- 已完成验证:
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法检查通过
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程三本轮完成后切回待分配
- 线程三已完成:主要路由页面 / 运营管理 / 运营日志 / 用户道具流水
- 已完成文件:
- `src/views/user/user-prop-list/index.vue`
- 模块复核结果:
- 已完成来源筛选、道具 ID、购买人 ID、接收人 ID、日期范围、搜索按钮、表格加载文案与表格列头国际化
- 来源下拉建议只翻译展示 name`CP_REWARD``PURCHASING_GOLD_PROPS` 等实际提交 value 保持原样
- `src/views/user/user-prop-list/index.vue` 中文残留仅剩模板注释,不属于可见展示文本
- 页面私有组件状态:
- `src/views/user/user-prop-list` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:历史已完成,本轮复核通过
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.userPropTransactions`
- 已完成验证:
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法检查通过
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程三本轮完成后切回待分配
- 线程三已完成:主要路由页面 / 运营管理 / 运营日志 / 礼物赠送记录
- 已完成文件:
- `src/views/user/gift-history/index.vue`
- 模块复核结果:
- 已完成筛选区、统计提示、表格列头、详情按钮、加载更多、已加载全部、提示说明与礼物类型下拉展示文本国际化
- 礼物类型仅翻译展示 label`ORDINARY``STAR` 等实际提交值保持原样
- `src/views/user/gift-history/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/user/gift-history` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/data/GiftHistoryDetailsDrawer/index.vue`:历史已完成,本轮复核仅剩注释中文
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:历史已完成,本轮复核通过
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.giftHistory`
- 已完成验证:
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法检查通过
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程三本轮完成后切回待分配
- 线程三已完成:主要路由页面 / 游戏列表
- 已完成文件:
- `src/views/sys/game-config/index.vue`
- `src/views/sys/game-config/fruit/edit.vue`
- `src/views/sys/game-config/match/index.vue`
- `src/views/sys/game-config/match/form-edit.vue`
- `src/views/sys/game-config/room/index.vue`
- `src/views/sys/game-config/room/form-edit.vue`
- 模块复核结果:
- 已按模块级规则核对入口页与目录可见文件
- 入口页当前实际展示房间 tab匹配 tab 仍在注释中,但对应可见子页已同步完成
- 递归中文扫描后仅剩注释,不属于可见展示文本
- 页面私有组件状态:
- 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- 说明:
- 新增 `pages.gameConfig`
- 未修改接口参数、路由路径、权限码、游戏配置实际值、提交值或接口返回内容
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程三本轮完成后切回待分配
- 线程二已完成:主要路由页面 / 申请靓号
- 已完成文件:
- `src/views/user/beautiful-number-apply/index.vue`
- `src/views/user/beautiful-number-apply/components/applyHandle.vue`
- 模块复核结果:
- 已按模块级规则核对入口页与目录可见文件
- `components/applyHandle.vue` 为入口页直接渲染私有弹窗,已随页面同步完成
- 直接公共组件 `Pagination``AccountInput``user_deatils.vue` 已复核;剩余中文命中仅为注释或注释掉的历史块
- 本模块递归中文扫描仅剩注释,不属于可见展示文本
- 说明:
- 新增 `pages.beautifulNumberApply`
- 未修改接口参数、路由路径、权限码、申请状态实际值、提交值或接口返回内容
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
- 线程二本轮完成后切回待分配
- 线程一已完成:主要路由页面 / 徽章配置管理
- 已完成文件:
- `src/views/user/badge/index.vue`
- `src/views/user/badge/badge-give/index.vue`
- `src/views/user/badge/badge-revoke/index.vue`
- `src/views/user/badge/badge-rule/index.vue`
- `src/views/user/badge/badge-rule/source-edit.vue`
- 模块复核结果:
- 已按模块级规则核对入口页、发放页、收回页、规则页与规则编辑弹窗
- 递归中文扫描后仅剩 `badge-rule/index.vue` 中注释掉的历史配置示例,不属于可见展示文本
- 说明:
- 本地徽章类型配置采用“value 不变、labelKey 展示翻译”的方式处理
- 无额外页面私有组件遗漏,直接公共组件 `AccountInput` 已通过 placeholder 传入翻译文案
- 未修改接口参数、路由路径、权限码、徽章配置实际值或接口返回内容
- 线程一本轮完成后切回待分配
- 线程一已完成:主要路由页面 / 表情管理
- 已完成文件:
- `src/views/sys/emoji-config/index.vue`
- `src/views/sys/emoji-config/emoji/index.vue`
- `src/views/sys/emoji-config/group/index.vue`
- `src/views/sys/emoji-config/group/form-edit.vue`
- 模块复核结果:
- 已按模块级规则核对入口页与目录可见文件
- 递归中文扫描未发现剩余中文可见文本
- 说明:
- 本地常量 `emojiType``emojiSourceType``productConfigShowcase` 采用“值不变、展示翻译”的方式处理
- 无额外页面私有组件遗漏,直接公共组件无需单独补翻
- 未修改接口参数、路由路径、权限码、表情配置实际值或接口返回内容
- 线程一本轮完成后切回待分配
- 线程一已完成:主要路由页面 / 靓号管理
- 已完成文件:
- `src/views/user/special-id/index.vue`
- `src/views/user/special-id/special-setting/index.vue`
- `src/views/user/special-id/special-setting/form-edit.vue`
- `src/views/user/special-id/special-setting/customize-field-dialog.vue`
- `src/views/user/special-id/special-setting/special-log.vue`
- `src/views/user/special-id/special-log-info/index.vue`
- 模块复核结果:
- 已按模块级规则核对入口页与目录可见文件
- 递归中文扫描后,仅剩 `src/views/user/special-id/special-setting/index.vue` 中一条代码注释 `// true发货 false扣除`
- 该注释不属于可见展示文本,按规则保留
- 说明:
- 复用既有 `pages.specialIdRoleManagement` 语言键,未新增重复页面命名空间
- 未修改接口参数、路由路径、权限码、靓号配置实际值或接口返回内容
- 线程一本轮完成后切回待分配
- 线程二已完成:主要路由页面 / 邀请用户配置
- 已完成文件:
- `src/views/sys/invite-user-rule/index.vue`
- `src/views/sys/invite-user-rule/Lotfun/index.vue`
- 模块复核结果:
- 已按模块级规则核对入口页与目录可见文件
- 当前仅 `Lotfun` 子页纳入入口渲染链
- 当前明确排除:
- `src/views/sys/invite-user-rule/aswat/index.vue`
- 原因:当前仅存在注释 import未纳入入口页实际渲染链
- `src/views/sys/invite-user-rule/yahlla/index.vue`
- 原因:当前仅存在注释 import未纳入入口页实际渲染链
- 说明:
- 未修改接口参数、路由路径、权限码、系统值或接口返回内容
- 线程二本轮完成后切回待分配
- 临时任务:已完成 `src/views` 页面私有组件复查 - 临时任务:已完成 `src/views` 页面私有组件复查
- 状态:已完成;当前无可领取明确剩余目录,不再作为后续领取优先级的一环 - 状态:已完成;当前无可领取明确剩余目录,不再作为后续领取优先级的一环
@ -379,10 +831,26 @@
- 完成线程:线程一 - 完成线程:线程一
- 关联页面:用户列表页面 - 关联页面:用户列表页面
- 说明:组件内金币流水弹窗标题、时间范围 placeholder、警告提示、表格列名、类型文案与加载更多状态已国际化接口分页字段、默认时间逻辑与接口返回动态数据保持原样 - 说明:组件内金币流水弹窗标题、时间范围 placeholder、警告提示、表格列名、类型文案与加载更多状态已国际化接口分页字段、默认时间逻辑与接口返回动态数据保持原样
- `src/components/data/EditUserGoldCoinRewardForm/index.vue`
- 完成线程:线程三
- 关联页面:用户列表页面
- 说明历史任务已完成组件内金币奖励弹窗标题、表单标签、placeholder、按钮、校验提示与奖励类型展示国际化本轮复核确认当前中文残留仅为模板注释不属于可见展示文案`currencyRewardReasons` 实际值、表单提交字段与 `sendGold(...)` 调用逻辑保持原样
- `src/components/data/IpDeviceHandle/index.vue`
- 完成线程:线程一
- 关联页面:用户列表页面
- 说明:组件内 IP 设备管控弹窗标题、表单标签、下拉选项、提交按钮与本地必填校验文案已国际化;接口调用、`deviceListBlock` 提交值与提交逻辑保持原样
- `src/components/data/EditUserGoldCoinDeductionForm/index.vue` - `src/components/data/EditUserGoldCoinDeductionForm/index.vue`
- 完成线程:线程三 - 完成线程:线程三
- 关联页面:用户列表页面 - 关联页面:用户列表页面
- 说明组件内扣除用户金币弹窗标题、表单标签、placeholder、按钮与校验提示已国际化`deductGold(...)` 接口调用、表单提交字段与提交值保持原样 - 说明组件内扣除用户金币弹窗标题、表单标签、placeholder、按钮与校验提示已国际化`deductGold(...)` 接口调用、表单提交字段与提交值保持原样
- `src/components/data/UserAccountStatusLogDrawer/index.vue`
- 完成线程:线程二
- 关联页面:用户列表页面
- 说明:组件内账户审批记录抽屉标题、审批类型/审批人/审批时间/备注表头、审批人后缀与待处理文案已国际化;分页参数、接口返回内容与渲染逻辑保持原样
- `src/components/data/UserVideoViolationTableDialog/index.vue`
- 完成线程:线程二
- 关联页面:用户列表页面
- 说明:组件内违规记录弹窗标题、用户昵称与身份类型标签已国际化;同步完成 `src/views/approval/not-pass-history/index.vue` 的时间范围占位文案、用户 ID placeholder、审批类型 placeholder、搜索按钮、审批动作、视频降级提示、机器标签与审核描述标签国际化查询参数、审批类型值、分页逻辑与接口返回内容保持原样
- `src/components/data/UserRegistrationOverviewCharts/dialog.vue` - `src/components/data/UserRegistrationOverviewCharts/dialog.vue`
- 完成线程:线程二 - 完成线程:线程二
- 关联页面:用户列表页面 - 关联页面:用户列表页面
@ -396,10 +864,6 @@
- 关联页面:用户列表页面 - 关联页面:用户列表页面
- 说明:组件内用户工资钻石流水弹窗标题、表格加载文案与表格列名已国际化;分页查询字段、加载逻辑、接口返回工资钻石流水数据、来源、来源描述、类型名称与备注保持原样 - 说明:组件内用户工资钻石流水弹窗标题、表格加载文案与表格列名已国际化;分页查询字段、加载逻辑、接口返回工资钻石流水数据、来源、来源描述、类型名称与备注保持原样
- 当前扫描到仍需复核的“已完成页面 -> 直接公共组件”: - 当前扫描到仍需复核的“已完成页面 -> 直接公共组件”:
- `src/views/user/user-table/index.vue` -> `src/components/data/EditUserGoldCoinRewardForm/index.vue`(中文命中 7历史已处理需确认是否仅剩注释
- `src/views/user/user-table/index.vue` -> `src/components/data/IpDeviceHandle/index.vue`(中文命中 7
- `src/views/user/user-table/index.vue` -> `src/components/data/UserAccountStatusLogDrawer/index.vue`(中文命中 8
- `src/views/user/user-table/index.vue` -> `src/components/data/UserVideoViolationTableDialog/index.vue`(中文命中 5
- 当前未列入“仍需复核”的直接公共组件: - 当前未列入“仍需复核”的直接公共组件:
- 直接组件文件不存在或未解析到本地 `.vue` 文件 - 直接组件文件不存在或未解析到本地 `.vue` 文件
- 扫描无中文命中 - 扫描无中文命中

View File

@ -17,6 +17,465 @@
- 当前先支持 `en``zh` - 当前先支持 `en``zh`
- 后续如果增加 `bn``ar``tr` 等语言,优先复用现有键名体系 - 后续如果增加 `bn``ar``tr` 等语言,优先复用现有键名体系
## 当前认领线程
- 线程一:待分配,上一轮已完成 `src/views/cnf/pay/factory/**``src/views/cnf/pay/comp/transfer-channel.vue` 厂商管理页面国际化、直接公共组件复核、语言文件校验与构建验证
- 线程二:待分配,上一轮已完成 `src/views/log/login-logger/index.vue` 登录日志页面国际化、直接公共组件复核、语言文件校验与构建验证
- 线程三:待分配,上一轮已完成 `src/views/log/invite-user-log/index.vue` 邀请用户页面国际化、直接公共组件复核、语言文件校验与构建验证
## 2026-05-06 最新同步
- 线程一已完成:
- `src/views/cnf/pay/factory/index.vue`
- `src/views/cnf/pay/factory/edit-form.vue`
- `src/views/cnf/pay/factory/associated-channel.vue`
- `src/views/cnf/pay/comp/transfer-channel.vue`
- 已完成模块级复核:
- 厂商管理页面筛选区、搜索/添加/编辑/关联渠道按钮、表格加载文案、表格列头、厂商编辑弹窗、关联渠道弹窗、穿梭框标题与按钮已国际化
- 关联渠道中的渠道类型展示复用 `pages.payChannel.channelTypes`,未修改 `src/constant/type.js` 原常量、接口参数或提交值
- 未修改接口参数、查询字段、路由路径、权限码、表格 `prop` 或接口返回动态数据
- `src/views/cnf/pay/factory/**/*.vue``src/views/cnf/pay/comp/transfer-channel.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/cnf/pay/factory/edit-form.vue` 已随页面同步完成
- `src/views/cnf/pay/factory/associated-channel.vue` 已随页面同步完成
- `src/views/cnf/pay/comp/transfer-channel.vue` 已随关联渠道弹窗同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.payFactory`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/cnf/pay/channel/index.vue`
- `src/views/cnf/pay/channel/edit-form.vue`
- 已完成模块级复核:
- 渠道管理页面筛选区、搜索/添加/编辑按钮、表格加载文案、表格列头、弹窗标题、表单标签、placeholder、校验提示与弹窗按钮已国际化
- 渠道类型展示改为按实际 `value` 映射 `pages.payChannel.channelTypes`,未修改 `src/constant/type.js` 原常量、接口参数或提交值
- 未修改接口参数、查询字段、路由路径、权限码、表格 `prop` 或接口返回动态数据
- `src/views/cnf/pay/channel/**/*.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/cnf/pay/channel/edit-form.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.payChannel`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/log/blacklist/index.vue`
- 已完成模块级复核:
- 房间黑名单页面系统筛选、用户/房间输入、日期范围、搜索按钮、表格列头、加载更多文案国际化
- 接口返回的用户资料、房间资料、封面、房间名称、时间戳等动态数据保持原样
- 未修改接口参数、查询字段、路由路径、权限码、表格 `prop` 或接口返回动态数据
- `src/views/log/blacklist/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/log/blacklist` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.roomBlacklist`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/sys/set-top/index.vue`
- `src/views/sys/set-top/form-edit.vue`
- 已完成模块级复核:
- 置顶房间页面筛选区、表格列头、是否展示文案、操作按钮、删除确认、表单标签、日期 placeholder、校验提示与本地错误提示已国际化
- 表单校验规则改为 `localizedRules` 计算属性,确保语言切换后校验提示跟随更新
- 房间名称、房间封面、区域名称、状态描述 `statusDesc` 等接口返回动态数据保持原样
- `statusDesc` 暂无接口样例,当前未做推断翻译
- 未修改接口参数、查询字段、路由路径、权限码、表格 `prop`、布尔提交值或接口返回数据值
- `src/views/sys/set-top/**/*.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/sys/set-top/form-edit.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/SearchRoomInput/index.vue`:仅剩历史注释中文,不属于可见展示文本
- `src/components/data/SelectSystemRegion/index.vue`:历史已完成,本轮复核通过
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.pinnedRooms`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/room/online/index.vue`
- `src/views/room/online/online-member.vue`
- 已完成模块级复核:
- 在线房间页面系统/区域筛选、房间 ID/Account 输入、搜索按钮、热门标签、操作下拉、房间卡片字段名前缀、成员抽屉标题与加载文案已国际化
- 房间名称、房间 ID、房间 Account、公告、家族信息、国家/区域等接口返回动态数据保持原样
- 未修改接口参数、查询字段、路由路径、权限码或接口返回数据值
- `src/views/room/online/**/*.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/room/online/online-member.vue` 已随页面同步完成
- 直接公共组件状态:
- `src/components/data/SelectSystemRegion/index.vue`:默认 placeholder 已改为 `common.select`,中文残留扫描通过
- `src/components/data/AccountHanle/index.vue`:历史已完成,本轮复核仅剩按规则保留的接口提交默认警告内容
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- `src/components/data/Gender/index.vue`:历史已完成,本轮复核通过
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩历史注释与注释掉的购买记录块
- 已完成语言文件校验:
- `src/lang/messages/base/en.js`
- `src/lang/messages/base/zh.js`
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `common.select``pages.roomOnline`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/game/lucky-gift/give-record/index.vue`
- 已完成模块级复核:
- 系统筛选、数量筛选、礼物筛选、用户/房间输入、日期范围、统计汇总、搜索按钮、表格加载文案与表格列头已国际化
- 数量、礼物 ID、系统来源、用户资料、房间资料、礼物名称等实际提交值或接口返回动态值保持原样
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- `src/views/game/lucky-gift/give-record/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/game/lucky-gift/give-record` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/data/SearchRoomInput/index.vue`:仅剩代码注释中文,不属于可见展示文本
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- `src/components/data/RoomDeatilsDrawer/index.vue`:扫描无中文命中
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.luckyGiftGiveRecords`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/log/password-log/index.vue`
- 已完成模块级复核:
- 系统筛选、用户输入、操作类型/业务类型筛选、搜索按钮、表格加载文案、表格列头与类型展示已国际化
- `ADD_PASSWORD``UPDATE_PASSWORD``PAY_PASSWORD``ACCOUNT_PASSWORD` 等实际提交值保持原样,仅翻译展示文案
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- `src/views/log/password-log/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/log/password-log` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.userPasswordLogs`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/log/cp/index.vue`
- 已完成模块级复核:
- 状态筛选、发送/接收用户输入、搜索按钮、表格加载文案、表格列头、状态展示与创建/修改时间前缀已国际化
- `WAIT``AGREE``DISMISS``REFUSE``REIMBURSE` 等状态实际提交值保持原样,仅翻译展示文案
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- `src/views/log/cp/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/log/cp` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.cpApplicationLogs`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/user/check-in-log/index.vue`
- 已完成模块级复核:
- 页面筛选区、日期范围、表格列头、搜索按钮与表格加载文案已国际化
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- `src/views/user/check-in-log/index.vue` 中文残留仅剩文件头注释,不属于可见展示文本
- 页面私有组件状态:
- `src/views/user/check-in-log` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.userCheckIns`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程二已完成:
- `src/views/log/login-logger/index.vue`
- 已完成模块级复核:
- 登录日志页面用户 ID、设备 ID、搜索按钮、表格加载文案、表格列头与操作下拉已国际化
- 登录方式名称、用户资料、IP、设备 ID、App 版本等接口返回动态内容保持原样
- `src/views/log/login-logger/index.vue` 中文残留扫描通过
- 页面私有组件状态:
- `src/views/log/login-logger` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/components/PlatformSvgIcon/index.vue`:扫描无中文命中
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:扫描无中文命中
- `src/components/data/UserVideoViolationTableDialog/index.vue`:仅剩模板注释中文,不属于可见展示文本
- `src/components/data/UserAccountStatusLogDrawer/index.vue`:扫描无中文命中
- `src/components/data/AccountHanle/index.vue`:仅剩按规则保留的接口提交默认警告文案
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.loginLogger`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程二当前状态:待分配
- 线程三已完成:
- `src/views/log/invite-user-log/index.vue`
- 已完成模块级复核:
- 页面系统、国家、邀请用户、被邀请用户、日期范围、搜索按钮、表格加载文案与表格列头已国际化
- 未修改接口参数、路由路径、权限码、查询字段、分页字段、表格 `prop` 或接口返回数据值
- 国家名称、系统来源名称、用户资料、奖金、设备号与创建时间等动态数据保持原样
- `src/views/log/invite-user-log/index.vue` 中文残留仅剩代码注释,不属于可见展示文本
- 页面私有组件状态:
- `src/views/log/invite-user-log` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:历史已完成,本轮复核通过
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.inviteUserLog`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程三当前状态:待分配
- 线程三已完成:
- `src/views/user/user-prop-list/index.vue`
- 已完成模块级复核:
- `src/views/user/user-prop-list/index.vue`
- 页面筛选区、日期范围、表格列头、搜索按钮与表格加载文案已国际化
- 来源下拉建议只翻译展示 name实际提交 value 保持原样
- 当前中文残留仅为模板注释,不属于可见展示文本
- 页面私有组件状态:
- `src/views/user/user-prop-list` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:历史已完成,本轮复核通过
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.userPropTransactions`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程三当前状态:待分配
- 线程三已完成:
- `src/views/user/gift-history/index.vue`
- 已完成模块级复核:
- `src/views/user/gift-history/index.vue`
- 页面筛选区、统计提示、表格列头、操作按钮、加载更多与已加载全部等可见静态文本已国际化
- 礼物类型下拉仅翻译展示 label接口提交值保持原样
- 页面私有组件状态:
- `src/views/user/gift-history` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/data/GiftHistoryDetailsDrawer/index.vue`:历史已完成,本轮复核仅剩注释中文
- `src/components/data/RoomDeatilsDrawer/index.vue`:历史已完成,本轮复核通过
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:历史已完成,本轮复核通过
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.giftHistory`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程三当前状态:待分配
- 线程三已完成:
- `src/views/sys/game-config/index.vue`
- `src/views/sys/game-config/fruit/edit.vue`
- `src/views/sys/game-config/match/index.vue`
- `src/views/sys/game-config/match/form-edit.vue`
- `src/views/sys/game-config/room/index.vue`
- `src/views/sys/game-config/room/form-edit.vue`
- 已完成模块级复核:
- `src/views/sys/game-config/**/*.vue`
- 入口页当前实际展示房间 tab匹配 tab 仍在注释中,但对应可见子页已同步完成
- 递归中文扫描后仅剩注释,不属于可见展示文本
- 页面私有组件状态:
- 已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.gameConfig`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程三当前状态:待分配
- 线程一已完成:
- `src/views/user/badge/index.vue`
- `src/views/user/badge/badge-give/index.vue`
- `src/views/user/badge/badge-revoke/index.vue`
- `src/views/user/badge/badge-rule/index.vue`
- `src/views/user/badge/badge-rule/source-edit.vue`
- 已完成模块级复核:
- `src/views/user/badge/**/*.vue`
- 递归中文扫描后仅剩 `badge-rule/index.vue` 中注释掉的历史配置示例,不属于可见展示文本
- 已完成语言文件校验:
- `src/lang/messages/base/en.js`
- `src/lang/messages/base/zh.js`
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:新增 `pages.badgeManagement`徽章类型配置采用“value 不变、labelKey 展示翻译”
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程二已完成:
- `src/views/user/beautiful-number-apply/index.vue`
- `src/views/user/beautiful-number-apply/components/applyHandle.vue`
- 已完成模块级复核:
- `src/views/user/beautiful-number-apply/**/*.vue`
- 当前中文残留仅为模板与代码注释,不属于可见展示文本
- 页面私有组件状态:
- `src/views/user/beautiful-number-apply/components/applyHandle.vue`:已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- `src/views/common/user_deatils.vue`:历史已完成,本轮复核仅剩文件头注释与注释掉的购买记录块
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.beautifulNumberApply`
- 已完成构建验证:
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 通过 data URL 方式 ESM 语法检查
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程二当前状态:待分配
- 线程一已完成:
- `src/views/sys/emoji-config/index.vue`
- `src/views/sys/emoji-config/emoji/index.vue`
- `src/views/sys/emoji-config/group/index.vue`
- `src/views/sys/emoji-config/group/form-edit.vue`
- 已完成模块级复核:
- `src/views/sys/emoji-config/**/*.vue`
- 递归中文扫描未发现剩余中文可见文本
- 已完成语言文件校验:
- `src/lang/messages/base/en.js`
- `src/lang/messages/base/zh.js`
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:补齐了 `common.add/save/confirm/tip/loadMore`,并新增 `pages.emojiManagement`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/user/special-id/index.vue`
- `src/views/user/special-id/special-setting/index.vue`
- `src/views/user/special-id/special-setting/form-edit.vue`
- `src/views/user/special-id/special-setting/customize-field-dialog.vue`
- `src/views/user/special-id/special-setting/special-log.vue`
- `src/views/user/special-id/special-log-info/index.vue`
- 已完成模块级复核:
- `src/views/user/special-id/**/*.vue`
- 当前仅剩 `special-setting/index.vue` 中一条代码注释 `// true发货 false扣除`
- 已完成语言文件复用确认:
- 复用 `pages.specialIdRoleManagement`
- 未新增重复的 `specialId` 页面级命名空间
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程一已完成:
- `src/views/user/special-id-role/index.vue`
- `src/views/user/special-id-role/special-setting/index.vue`
- `src/views/user/special-id-role/special-setting/form-edit.vue`
- `src/views/user/special-id-role/special-setting/customize-field-dialog.vue`
- `src/views/user/special-id-role/special-setting/special-log.vue`
- `src/views/user/special-id-role/special-log-info/index.vue`
- 已完成模块级复核:
- `src/views/user/special-id-role/**/*.vue`
- 当前仅剩 `special-setting/index.vue` 中一条代码注释 `// true发货 false扣除`
- 已完成语言文件校验:
- `src/lang/messages/base/en.js`
- `src/lang/messages/base/zh.js`
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 已完成构建验证:
- `npm run build:prod`
- 构建通过,仍为项目既有 `17` 条 warning
- 线程一当前状态:待分配
- 线程二已完成:
- `src/views/sys/customer-service/index.vue`
- `src/views/common/user_deatils.vue`
- 说明:已完成客服列表页面及其直接渲染用户详情抽屉静态展示文本国际化;直接公共组件 `SysOriginIcon``AccountInput` 复核通过;构建通过,仍为项目既有 `17` 条 warning
- 线程二已完成:
- `src/views/user/gold-balance/index.vue`
- 说明:已完成金币余额榜页面筛选区系统与用户 ID placeholder、搜索按钮、用户与余额列表头国际化直接公共组件 `SysOriginIcon``AccountInput``UserTableExhibit` 复核通过;构建通过,仍为项目既有 `17` 条 warning
- 线程二已完成:
- `src/views/sys/invite-user-rule/index.vue`
- `src/views/sys/invite-user-rule/Lotfun/index.vue`
- 说明:已完成邀请用户配置入口页与当前实际渲染 `Lotfun` 子页的提示条、表单标签、修改按钮、确认框与取消提示国际化;`aswat``yahlla` 当前仅在注释 import 中,未纳入入口渲染链;构建通过,仍为项目既有 `17` 条 warning
- 线程二当前状态:待分配
- 线程三已完成:
- `src/views/room/theme/index.vue`
- 说明:已完成房间主题管理页面按钮、表格、状态、弹窗、表单、校验、删除确认与提示国际化;目录无页面私有组件,`Pagination` 中文扫描通过;构建通过,仍为项目既有 `17` 条 warning
- 线程三当前状态:待分配
## 任务优先级 ## 任务优先级
- 全线程统一优先级:`首页 > docs/i18n/主要路由.md` - 全线程统一优先级:`首页 > docs/i18n/主要路由.md`
@ -67,6 +526,12 @@
- 消费商品订单 / Purchase Orders - 消费商品订单 / Purchase Orders
- 金币收支记录 / Gold Transaction Records - 金币收支记录 / Gold Transaction Records
- 数据配置 / Data Configuration - 数据配置 / Data Configuration
- 参数配置 / Parameter Settings
- 幸运礼物规则配置 / Lucky Gift Rule Configuration
- 幸运礼物规格配置 / Lucky Gift Specification Configuration
- 靓号管理(角色) / Special ID Management (Role)
- 游戏列表 / Game List
- 房间主题管理 / Room Theme Management
- 国家管理 / Country Management - 国家管理 / Country Management
- IM账号管理 / IM Account Management - IM账号管理 / IM Account Management
- 活动配置 / Activity Configuration - 活动配置 / Activity Configuration
@ -75,6 +540,7 @@
- 消息推送 / Message Push - 消息推送 / Message Push
- APP管理员 / App Administrators - APP管理员 / App Administrators
- App启动页 / App Launch Page - App启动页 / App Launch Page
- 客服列表 / Customer Service List
- 系统公告管理 / System Notice Management - 系统公告管理 / System Notice Management
- 金币代理 / Gold Agents - 金币代理 / Gold Agents
- 区域配置 / Region Configuration - 区域配置 / Region Configuration
@ -116,6 +582,88 @@
## 本轮新增进展 ## 本轮新增进展
### 2026-05-06
- 已完成页面:
- `src/views/game/lucky-gift/standard-config/index.vue`
- 说明:已完成运营管理 / 数据配置 / 幸运礼物规格配置页面筛选区、列表表头、操作按钮、删除确认与提示、编辑弹窗、概率配置弹窗全部静态展示文本国际化;接口参数、路由路径、权限码、概率数值、数量配置、校验计算、提交数据结构与刷新逻辑保持原样
- 页面私有组件状态:
- `src/views/game/lucky-gift/standard-config/standard-config-edit.vue`:已随页面同步完成
- `src/views/game/lucky-gift/probability-config/index.vue`:入口页直接渲染的页面内组件,已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中,仅展示系统来源图标与动态 `desc`
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.luckyGiftStandardConfig`
- 已完成验证:
- `src/views/game/lucky-gift/standard-config/index.vue``src/views/game/lucky-gift/standard-config/standard-config-edit.vue``src/views/game/lucky-gift/probability-config/index.vue` 中文残留扫描通过
- `src/components/Pagination/index.vue``src/components/SysOriginIcon/index.vue` 中文残留扫描通过
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法检查通过
- 直接执行 `npm run build:prod` 构建通过
- 当前仍保留项目既有 `17` 条 warning未新增阻塞错误
- 已完成页面:
- `src/views/sys/banner/index.vue`
- 说明:已完成运营管理 / 数据配置 / Banner管理页面筛选区系统、平台、状态、区域、国家 placeholder搜索/新增按钮,列表加载文案,封面/小图/alert图/类型/展示位/归属系统/区域/排序/内容/状态/操作列表头,内容 Popover 标签,状态标签,查看/修改/删除按钮删除确认框与删除成功提示国际化接口参数、路由路径、权限码、Banner 类型值、展示位值、平台值、分页/查询/删除逻辑与接口返回内容保持原样
- 页面私有组件状态:
- `src/views/sys/banner/form-edit.vue`:已随页面同步完成
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中,仅展示系统来源图标与动态 `desc`
- `src/components/data/SearchRoomInput/index.vue`:中文命中仅为注释,不属于可见展示文案
- `src/components/data/AccountInput/index.vue`:扫描无中文命中
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.bannerManager`
- 已完成验证:
- `src/views/sys/banner/index.vue``src/views/sys/banner/form-edit.vue` 中文残留仅剩注释
- `src/components/Pagination/index.vue``src/components/SysOriginIcon/index.vue``src/components/data/SearchRoomInput/index.vue``src/components/data/AccountInput/index.vue` 复核通过;`SearchRoomInput` 仅剩注释中文
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法检查通过
- 直接执行 `npm run build:prod` 在当前 Node 22 / webpack OpenSSL 兼容问题下触发 `ERR_OSSL_EVP_UNSUPPORTED`
- 已按协作文档备用方案执行 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod`,构建通过
- 当前仍保留项目既有 `17` 条 warning未新增阻塞错误
- 已完成页面:
- `src/views/game/lucky-gift/rule-config/index.vue`
- 说明:已完成运营管理 / 数据配置 / 幸运礼物规则配置页面标题、Win / Big Win / Super Win 图标区间表单标签、区间包含提示、保存按钮与必填校验提示国际化;接口参数、路由路径、权限码、`sysOrigin` 默认值、查询/提交逻辑、配置值与提交值保持原样
- 页面私有组件状态:
- `src/views/game/lucky-gift/rule-config/index.vue`:目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- 当前页面未直接渲染 `src/components/**` 公共组件
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.luckyGiftRuleConfig`
- 已完成验证:
- `src/views/game/lucky-gift/rule-config/index.vue` 中文残留扫描通过
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法检查通过
- 直接执行 `npm run build:prod` 在当前 Node 22 / webpack OpenSSL 兼容问题下触发 `ERR_OSSL_EVP_UNSUPPORTED`
- 已按协作文档备用方案执行 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod`,构建通过
- 当前仍保留项目既有 `17` 条 warning未新增阻塞错误
- 已完成页面:
- `src/views/cnf/enums/manager/index.vue`
- 说明:已完成运营管理 / 数据配置 / 参数配置页面筛选区、表格列名、状态/返回 APP 展示、操作时间 tooltip、操作按钮、新增/编辑弹窗、表单标签、placeholder、保存/取消按钮、校验提示、删除确认框与复制提示国际化;接口参数、路由路径、权限码、分页/查询/提交/删除/复制逻辑、常量实际值与提交值保持原样
- 页面私有组件状态:
- `src/views/cnf/enums/manager/index.vue`:目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/Pagination/index.vue`:扫描无中文命中
- `src/components/SysOriginIcon/index.vue`:扫描无中文命中,仅展示系统来源图标与动态 `desc`
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.sysConfigSetting`
- 已完成验证:
- `src/views/cnf/enums/manager/index.vue` 中文残留扫描通过
- `src/components/Pagination/index.vue``src/components/SysOriginIcon/index.vue` 中文残留扫描通过
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法检查通过
- 直接执行 `npm run build:prod` 在当前 Node 22 / webpack OpenSSL 兼容问题下触发 `ERR_OSSL_EVP_UNSUPPORTED`
- 已按协作文档备用方案执行 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod`,构建通过
- 当前仍保留项目既有 `17` 条 warning未新增阻塞错误
### 2026-04-29 ### 2026-04-29
- 已完成公共组件联动复查: - 已完成公共组件联动复查:
@ -1386,6 +1934,13 @@
- 已完成公共组件联动复查: - 已完成公共组件联动复查:
- `src/components/data/AssociatedResources/index.vue` - `src/components/data/AssociatedResources/index.vue`
- 说明:线程三已完成活动管理奖励编辑直接复用的关联资源组组件静态展示文本国际化;接口参数、路由路径、权限码、分页/查询/选择逻辑、上下架布尔值、接口返回资源组名称与奖品资源数据保持原样 - 说明:线程三已完成活动管理奖励编辑直接复用的关联资源组组件静态展示文本国际化;接口参数、路由路径、权限码、分页/查询/选择逻辑、上下架布尔值、接口返回资源组名称与奖品资源数据保持原样
- 已完成公共组件联动复查:
- `src/components/data/UserVideoViolationTableDialog/index.vue`
- `src/views/approval/not-pass-history/index.vue`
- 说明:线程二已完成用户列表页面直接复用的违规记录弹窗与其直接渲染的违规历史内容静态展示文本国际化;新增 `pages.userVideoViolationTableDialog``pages.notPassHistory`,保留查询参数、审批类型值、分页逻辑与接口返回内容原样
- 已完成公共组件联动复查:
- `src/components/data/UserAccountStatusLogDrawer/index.vue`
- 说明:线程二已完成用户列表页面直接复用的账户审批记录抽屉静态展示文本国际化;新增 `pages.userAccountStatusLogDrawer`,保留分页参数、接口返回内容与渲染逻辑原样
- 已完成公共组件联动复查: - 已完成公共组件联动复查:
- `src/components/data/UserRegistrationOverviewCharts/dialog.vue` - `src/components/data/UserRegistrationOverviewCharts/dialog.vue`
- `src/components/data/UserRegistrationOverviewCharts/index.vue` - `src/components/data/UserRegistrationOverviewCharts/index.vue`
@ -1394,6 +1949,9 @@
- 已完成公共组件联动复查: - 已完成公共组件联动复查:
- `src/components/data/EditUserGameCouponRewardForm/index.vue` - `src/components/data/EditUserGameCouponRewardForm/index.vue`
- 说明线程一已完成用户列表页面直接复用的奖励用户游戏券弹窗标题、表单标签、placeholder、按钮与校验提示国际化接口参数、路由路径、权限码、表单提交字段、奖励数量与奖励原因提交内容保持原样 - 说明线程一已完成用户列表页面直接复用的奖励用户游戏券弹窗标题、表单标签、placeholder、按钮与校验提示国际化接口参数、路由路径、权限码、表单提交字段、奖励数量与奖励原因提交内容保持原样
- 已完成公共组件联动复查:
- `src/components/data/EditUserGoldCoinRewardForm/index.vue`
- 说明线程三复核完成用户列表页面直接复用的奖励用户金币表单历史任务已完成弹窗标题、表单标签、placeholder、按钮、校验提示与奖励类型展示国际化当前中文残留仅为模板注释不属于可见展示文案`currencyRewardReasons` 实际值、表单提交字段与 `sendGold(...)` 调用逻辑保持原样
- 已完成公共组件联动复查: - 已完成公共组件联动复查:
- `src/components/data/DiamondRunningWaterDialog/index.vue` - `src/components/data/DiamondRunningWaterDialog/index.vue`
- 说明:线程二已完成用户列表页面直接复用的用户钻石流水弹窗标题与表格列名国际化;接口参数、路由路径、权限码、分页查询字段、加载逻辑、接口返回的流水数据、来源、来源描述、类型描述与备注保持原样 - 说明:线程二已完成用户列表页面直接复用的用户钻石流水弹窗标题与表格列名国际化;接口参数、路由路径、权限码、分页查询字段、加载逻辑、接口返回的流水数据、来源、来源描述、类型描述与备注保持原样
@ -1409,10 +1967,22 @@
- 已完成公共组件联动复查: - 已完成公共组件联动复查:
- `src/components/data/EditUserGoldCoinDeductionForm/index.vue` - `src/components/data/EditUserGoldCoinDeductionForm/index.vue`
- 说明线程三已完成用户列表页面直接复用的扣除用户金币弹窗标题、表单标签、placeholder、按钮与校验提示国际化接口参数、路由路径、权限码、`deductGold(...)` 调用、表单提交字段与提交值保持原样 - 说明线程三已完成用户列表页面直接复用的扣除用户金币弹窗标题、表单标签、placeholder、按钮与校验提示国际化接口参数、路由路径、权限码、`deductGold(...)` 调用、表单提交字段与提交值保持原样
- 已完成页面:
- `src/views/sys/customer-service/index.vue`
- 说明:线程二已完成运营管理 / 客服列表页面筛选区系统与区域 placeholder、搜索/新增按钮、提示条、来源系统/客服/区域/上班时间段/创建时间/操作表头、弹窗标题、平台/客服/区域/时间段表单标签、用户 ID placeholder、请选择、按钮、必填校验、删除确认与删除提示国际化接口参数、路由路径、权限码、时间段值、系统值与接口返回内容保持原样
- 页面私有组件状态:
- `src/views/sys/customer-service/index.vue`:无页面私有组件
- 直接公共组件状态:
- `src/components/SysOriginIcon/index.vue`:历史已完成,本轮复核通过
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/views/common/user_deatils.vue`:已随页面同步完成
- 已补充页面级语言 key - 已补充页面级语言 key
- `src/lang/messages/pages/en.js` - `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js` - `src/lang/messages/pages/zh.js`
- 新增范围:`pages.customerService`
- 新增范围:`pages.userDetailsDrawer`
- 新增范围:`pages.editUserGameCouponRewardForm` - 新增范围:`pages.editUserGameCouponRewardForm`
- 已复用范围:`pages.editUserGoldCoinRewardForm`
- 新增范围:`pages.diamondRunningWaterDialog` - 新增范围:`pages.diamondRunningWaterDialog`
- 新增范围:`pages.associatedResources` - 新增范围:`pages.associatedResources`
- 新增范围:`pages.addOtherRechargeDialog` - 新增范围:`pages.addOtherRechargeDialog`
@ -1420,23 +1990,68 @@
- 新增范围:`pages.editDiamondCoinDeductionForm` - 新增范围:`pages.editDiamondCoinDeductionForm`
- 新增范围:`pages.editUserGoldCoinDeductionForm` - 新增范围:`pages.editUserGoldCoinDeductionForm`
- 新增范围:`pages.userRegistrationOverviewCharts` - 新增范围:`pages.userRegistrationOverviewCharts`
- 新增范围:`pages.userAccountStatusLogDrawer`
- 新增范围:`pages.userVideoViolationTableDialog`
- 新增范围:`pages.notPassHistory`
- 已完成验证: - 已完成验证:
- 本轮 `src/components/data/UserVideoViolationTableDialog/index.vue``src/views/approval/not-pass-history/index.vue` 中文残留仅剩注释,不属于可见展示文案
- 本轮 `src/components/data/UserAccountStatusLogDrawer/index.vue` 中文残留扫描通过
- 本轮 `src/components/data/UserRegistrationOverviewCharts/dialog.vue``src/components/data/UserRegistrationOverviewCharts/index.vue``src/components/data/UserRegistrationOverviewCharts/bar-graph-charts.vue` 中文残留扫描通过;仅 `index.vue` 注释块中保留 `placeholder="系统"`,不属于可见展示文案 - 本轮 `src/components/data/UserRegistrationOverviewCharts/dialog.vue``src/components/data/UserRegistrationOverviewCharts/index.vue``src/components/data/UserRegistrationOverviewCharts/bar-graph-charts.vue` 中文残留扫描通过;仅 `index.vue` 注释块中保留 `placeholder="系统"`,不属于可见展示文案
- 本轮 `src/components/data/EditUserGameCouponRewardForm/index.vue` 中文残留扫描通过 - 本轮 `src/components/data/EditUserGameCouponRewardForm/index.vue` 中文残留扫描通过
- 本轮 `src/components/data/EditUserGoldCoinRewardForm/index.vue` 中文扫描仅命中模板注释,不属于可见展示文案
- `src/components/data/AssociatedResources/index.vue` 中文残留扫描通过(上一轮记录) - `src/components/data/AssociatedResources/index.vue` 中文残留扫描通过(上一轮记录)
- 本轮 `src/components/data/DiamondRunningWaterDialog/index.vue` 中文残留扫描通过 - 本轮 `src/components/data/DiamondRunningWaterDialog/index.vue` 中文残留扫描通过
- 本轮 `src/components/data/AddOtherRechargeDialog/index.vue` 中文残留扫描通过 - 本轮 `src/components/data/AddOtherRechargeDialog/index.vue` 中文残留扫描通过
- 本轮 `src/components/data/DiamondSalaryRunningWaterDialog/index.vue` 中文残留扫描通过 - 本轮 `src/components/data/DiamondSalaryRunningWaterDialog/index.vue` 中文残留扫描通过
- 本轮 `src/components/data/EditDiamondCoinDeductionForm/index.vue` 中文残留扫描通过 - 本轮 `src/components/data/EditDiamondCoinDeductionForm/index.vue` 中文残留扫描通过
- 本轮 `src/components/data/EditUserGoldCoinDeductionForm/index.vue` 中文残留扫描通过 - 本轮 `src/components/data/EditUserGoldCoinDeductionForm/index.vue` 中文残留扫描通过
- 本轮 `src/views/sys/customer-service/index.vue` 中文残留仅剩注释
- 本轮 `src/views/common/user_deatils.vue` 中文残留仅剩文件头注释与注释掉的购买记录表格块
- 本轮 `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法校验通过 - 本轮 `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 语法校验通过
- 本轮直接执行 `npm run build:prod` 在当前环境触发 `ERR_OSSL_EVP_UNSUPPORTED` - 本轮直接执行 `npm run build:prod` 构建通过
- 已按协作文档备用方案执行 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 构建通过 - 构建仍保留项目既有 `17` 条 warning其中包含项目既有 `src/views/common/user_deatils.vue` 引用 `@/api/app-user` 未导出的 `getUserAuthInfo``getSubscriptionBalance` warning本轮未新增阻塞错误
- 说明:当前仍保留项目既有 `17` 条 warning未因本轮 `DiamondRunningWaterDialog` / `AddOtherRechargeDialog` / `DiamondSalaryRunningWaterDialog` / `EditDiamondCoinDeductionForm` / `EditUserGoldCoinDeductionForm` / `GoldRunningWaterDialog` / `UserRegistrationOverviewCharts` 国际化改动新增阻塞错误 - 说明:当前仍保留项目既有 `17` 条 warning未因本轮 `DiamondRunningWaterDialog` / `AddOtherRechargeDialog` / `DiamondSalaryRunningWaterDialog` / `EditDiamondCoinDeductionForm` / `EditUserGoldCoinDeductionForm` / `EditUserGoldCoinRewardForm` / `GoldRunningWaterDialog` / `UserRegistrationOverviewCharts` / `UserAccountStatusLogDrawer` / `UserVideoViolationTableDialog` / `notPassHistory` 国际化改动新增阻塞错误
- 已完成页面:
- `src/views/user/gold-balance/index.vue`
- 说明:已完成运营管理 / 金币余额榜页面筛选区系统与用户 ID placeholder、搜索按钮、用户与余额列表头国际化接口参数、路由路径、权限码、排行查询字段、`permissionsSysOriginPlatforms` 的动态平台名称、接口返回用户资料与余额数据保持原样
- 页面私有组件状态:
- `src/views/user/gold-balance` 目录当前仅包含 `index.vue`,无页面私有组件
- 直接公共组件状态:
- `src/components/SysOriginIcon/index.vue`:历史已完成,本轮复核通过
- `src/components/data/AccountInput/index.vue`:历史已完成,本轮复核通过
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:历史已完成,本轮复核通过
- 已补充页面级语言 key
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 新增范围:`pages.goldBalanceLeaderboard`
- 已完成验证:
- `src/views/user/gold-balance/index.vue` 中文残留仅剩注释掉的操作列,不属于可见展示文案
- `src/components/SysOriginIcon/index.vue``src/components/data/AccountInput/index.vue``src/components/data/UserInfo/UserTableExhibit/index.vue` 中文残留扫描通过
- `src/lang/messages/pages/en.js``src/lang/messages/pages/zh.js` 通过 data URL 方式 ESM 语法检查
- 直接执行 `npm run build:prod` 构建通过
- 当前仍保留项目既有 `17` 条 warning未新增阻塞错误
- 已完成页面:
- `src/views/cnf/gift/index.vue`
- `src/views/cnf/gift/cp/index.vue`
- `src/views/cnf/gift/setting/index.vue`
- `src/views/cnf/gift/setting/edit.vue`
- `src/views/cnf/gift/week-star/index.vue`
- `src/views/cnf/gift/week-star/add-week-gift-group.vue`
- 说明线程一已完成礼物管理模块入口页及其直接标签页的静态展示文本国际化包含标签标题、筛选区、表格列头、按钮、placeholder、确认提示、校验提示、上传提示与新增/编辑弹窗文案,未改接口参数、路由路径、权限码、礼物类型实际值或接口返回内容
- 已完成模块级复核:
- `src/views/cnf/gift/**/*.vue`
- 说明:已按模块级检查方案核对入口页与目录文件列表,当前目录仅包含 6 个可见 `.vue` 文件;递归中文扫描后,剩余中文仅为模板注释与代码注释,不属于可见展示文本
- 已完成语言文件校验:
- `src/lang/messages/pages/en.js`
- `src/lang/messages/pages/zh.js`
- 说明:已按对象语法方式完成中英语言文件语法校验,通过
- 已完成构建验证:
- `npm run build:prod`
- 说明:当前环境直接执行构建通过,仍保留项目既有 `17` 条 warning未新增阻塞错误
- 当前认领线程: - 当前认领线程:
- 线程一:进行中,当前认领 `src/components/data/IpDeviceHandle/index.vue` 公共组件联动复查;用于补齐用户列表页面直接复用的 IP 设备管控弹窗静态展示文本国际化 - 线程一:待分配,当前未认领新任务;已完成 `src/views/sys/emoji-config/**` 表情管理模块国际化、中文残留扫描、语言文件校验与构建验证
- 线程二:进行中,当前认领 `src/components/data/UserAccountStatusLogDrawer/index.vue` 公共组件联动复查;用于补齐用户列表页面直接复用的账户审批记录抽屉静态展示文本国际化 - 线程二:待分配,当前未认领新任务;已完成 `src/views/sys/invite-user-rule/**` 邀请用户配置模块国际化、语言文件校验与构建验证
- 线程三:待分配,当前未认领新任务;已完成 `src/components/data/EditUserGoldCoinDeductionForm/index.vue` 公共组件联动复查、中文残留扫描、语言文件语法检查、构建验证与 md 同步 - 线程三:待分配,当前未认领新任务;已完成 `src/views/room/theme/index.vue` 房间主题管理页面国际化、中文残留扫描、语言文件校验与构建验证
## 扫描概况 ## 扫描概况

View File

@ -8,7 +8,7 @@
:multiple-limit="multipleLimit" :multiple-limit="multipleLimit"
:filterable="filterable" :filterable="filterable"
:clearable="clearable" :clearable="clearable"
:placeholder="placeholder" :placeholder="displayPlaceholder"
@change="selectChanged" @change="selectChanged"
> >
<el-input v-model="selecteValue" style="display:none;" /> <el-input v-model="selecteValue" style="display:none;" />
@ -32,7 +32,7 @@ export default {
}, },
placeholder: { placeholder: {
type: String, type: String,
default: '请选择' default: ''
}, },
disabled: { disabled: {
type: Boolean, type: Boolean,
@ -64,6 +64,12 @@ export default {
} }
}, },
computed: {
displayPlaceholder() {
return this.placeholder || this.$t('common.select')
}
},
watch: { watch: {
sysOrigin: { sysOrigin: {
handler(newVal) { handler(newVal) {

View File

@ -1,7 +1,6 @@
<!--账户审批记录表格-->
<template> <template>
<el-dialog <el-dialog
title="账户审批记录" :title="$t('pages.userAccountStatusLogDrawer.dialog.title')"
:visible="true" :visible="true"
width="70%" width="70%"
:before-close="handleClose" :before-close="handleClose"
@ -19,24 +18,24 @@
highlight-current-row highlight-current-row
height="400" height="400"
> >
<el-table-column prop="statusName" label="审批类型" align="center" /> <el-table-column :label="$t('pages.userAccountStatusLogDrawer.table.approvalType')" prop="statusName" align="center" />
<el-table-column prop="approvalUserName" label="审批人" align="center"> <el-table-column :label="$t('pages.userAccountStatusLogDrawer.table.approver')" prop="approvalUserName" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span <span
v-if="scope.row.originType" v-if="scope.row.originType"
>{{ scope.row.approvalUserName }} (App)</span> >{{ scope.row.approvalUserName }} {{ $t('pages.userAccountStatusLogDrawer.suffix.app') }}</span>
<span <span
v-if="!scope.row.originType" v-if="!scope.row.originType"
>{{ scope.row.approvalUserName }} (后台)</span> >{{ scope.row.approvalUserName }} {{ $t('pages.userAccountStatusLogDrawer.suffix.admin') }}</span>
<span v-else>待处理</span> <span v-else>{{ $t('pages.userAccountStatusLogDrawer.word.pending') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="审批时间" align="center"> <el-table-column :label="$t('pages.userAccountStatusLogDrawer.table.approvalTime')" prop="createTime" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="description" label="备注" align="center" /> <el-table-column :label="$t('pages.userAccountStatusLogDrawer.table.remarks')" prop="description" align="center" />
</el-table> </el-table>
<pagination <pagination

View File

@ -1,8 +1,7 @@
<!--违规记录表格-->
<template> <template>
<el-dialog <el-dialog
title="违规记录" :title="$t('pages.userVideoViolationTableDialog.dialog.title')"
:visible="true" :visible="true"
width="70%" width="70%"
:before-close="handleClose" :before-close="handleClose"
@ -14,9 +13,9 @@
<div class="user_info"> <div class="user_info">
<avatar :url="row.userAvatar" size="small" /> <avatar :url="row.userAvatar" size="small" />
<div class="info"> <div class="info">
<span>用户昵称{{ row.userNickname }}</span> <span>{{ $t('pages.userVideoViolationTableDialog.info.userNickname') }}{{ row.userNickname }}</span>
<span>身份类型{{ row.vipStatusName }}</span> <span>{{ $t('pages.userVideoViolationTableDialog.info.identityType') }}{{ row.vipStatusName }}</span>
<!-- <span>累计违规次数{{ row.violationSize }}</span>--> <!-- <span>累计违规次数{{ row.violationSize }}</span>-->
</div> </div>

View File

@ -11,6 +11,12 @@ export default {
common: { common: {
language: 'Language', language: 'Language',
search: 'Search', search: 'Search',
add: 'Add',
save: 'Save',
confirm: 'Confirm',
select: 'Please select',
tip: 'Tip',
loadMore: 'Load More',
globalSize: 'Global Size', globalSize: 'Global Size',
resetPassword: 'Reset Password', resetPassword: 'Reset Password',
logout: 'Logout', logout: 'Logout',

View File

@ -9,6 +9,12 @@ export default {
common: { common: {
language: '\u8bed\u8a00', language: '\u8bed\u8a00',
search: '\u641c\u7d22', search: '\u641c\u7d22',
add: '\u65b0\u589e',
save: '\u4fdd\u5b58',
confirm: '\u786e\u5b9a',
select: '\u8bf7\u9009\u62e9',
tip: '\u63d0\u793a',
loadMore: '\u52a0\u8f7d\u66f4\u591a',
globalSize: '\u5168\u5c40\u5c3a\u5bf8', globalSize: '\u5168\u5c40\u5c3a\u5bf8',
resetPassword: '\u4fee\u6539\u5bc6\u7801', resetPassword: '\u4fee\u6539\u5bc6\u7801',
logout: '\u9000\u51fa\u767b\u5f55', logout: '\u9000\u51fa\u767b\u5f55',

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,3 @@
<!--违规记录表格-->
<template> <template>
<div class="app-container not_pass_history"> <div class="app-container not_pass_history">
<div class="filter-container"> <div class="filter-container">
@ -8,18 +7,18 @@
type="datetimerange" type="datetimerange"
value-format="timestamp" value-format="timestamp"
:picker-options="pickerOptions" :picker-options="pickerOptions"
range-separator="" :range-separator="$t('pages.notPassHistory.filter.rangeSeparator')"
start-placeholder="开始日期" :start-placeholder="$t('pages.notPassHistory.filter.startDate')"
end-placeholder="结束日期" :end-placeholder="$t('pages.notPassHistory.filter.endDate')"
align="right" align="right"
/> />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.userId" placeholder="用户ID" /> <account-input v-model="listQuery.userId" :placeholder="$t('pages.notPassHistory.filter.userId')" />
</div> </div>
<el-select <el-select
v-model="listQuery.violationType" v-model="listQuery.violationType"
placeholder="审批类型" :placeholder="$t('pages.notPassHistory.filter.approvalType')"
style="width: 240px" style="width: 240px"
class="filter-item" class="filter-item"
clearable clearable
@ -40,7 +39,7 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.notPassHistory.action.search') }}
</el-button> </el-button>
</div> </div>
<div class="block"> <div class="block">
@ -49,7 +48,7 @@
<el-card> <el-card>
<h4> <h4>
<span v-if="!item.originType" class="label">{{ item.approvalNickname }}</span> <span v-if="!item.originType" class="label">{{ item.approvalNickname }}</span>
<el-link v-if="item.originType" @click="queryUserDetails(item.approvalUserBaseInfo.id)"> <span class="label">{{ item.approvalUserBaseInfo.userNickname }}</span></el-link> 审批 <el-link v-if="item.originType" @click="queryUserDetails(item.approvalUserBaseInfo.id)"> <span class="label">{{ item.approvalUserBaseInfo.userNickname }}</span></el-link> {{ $t('pages.notPassHistory.word.approved') }}
<el-link @click="queryUserDetails(item.userBaseInfo.id)"> <span class="label">{{ item.userBaseInfo.userNickname }}</span></el-link> <el-link @click="queryUserDetails(item.userBaseInfo.id)"> <span class="label">{{ item.userBaseInfo.userNickname }}</span></el-link>
<el-tag type="info" size="mini">{{ item.violationTypeName }} {{ item.approvalResultName }}</el-tag> <el-tag type="info" size="mini">{{ item.violationTypeName }} {{ item.approvalResultName }}</el-tag>
</h4> </h4>
@ -69,15 +68,15 @@
@mouseout="removeActive($event)" @mouseout="removeActive($event)"
@mouseover="changeActive($event)" @mouseover="changeActive($event)"
> >
您的浏览器不支持 video 标签 {{ $t('pages.notPassHistory.message.unsupportedVideo') }}
</video> </video>
</span> </span>
<span v-else> <span v-else>
{{ item.content }} {{ item.content }}
</span> </span>
</div> </div>
<div v-if="item.labelNames && item.labelNames != '-'">机器标签{{ item.labelNames }}</div> <div v-if="item.labelNames && item.labelNames != '-'">{{ $t('pages.notPassHistory.label.machineTag') }}{{ item.labelNames }}</div>
<div v-if="item.description">审核描述{{ item.description }}</div> <div v-if="item.description">{{ $t('pages.notPassHistory.label.reviewDescription') }}{{ item.description }}</div>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -4,7 +4,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.sysConfigSetting.filter.system')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -22,15 +22,15 @@
<el-cascader <el-cascader
v-model="listQuery.groupList" v-model="listQuery.groupList"
clearable clearable
placeholder="分组" :placeholder="$t('pages.sysConfigSetting.filter.group')"
:options="enumConfigGroupNames" :options="translatedEnumConfigGroupNames"
:props="cascaderProps" :props="cascaderProps"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
/> />
<el-select <el-select
v-model="listQuery.inoperable" v-model="listQuery.inoperable"
placeholder="状态" :placeholder="$t('pages.sysConfigSetting.filter.status')"
clearable clearable
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@ -39,37 +39,37 @@
<el-option <el-option
v-for="item in enumConfigOperates" v-for="item in enumConfigOperates"
:key="item.value" :key="item.value"
:label="item.name" :label="getOperateName(item.value)"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.returnApp" v-model="listQuery.returnApp"
placeholder="返回APP" :placeholder="$t('pages.sysConfigSetting.filter.returnApp')"
clearable clearable
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
> >
<el-option label="是" :value="true" /> <el-option :label="$t('pages.sysConfigSetting.word.yes')" :value="true" />
<el-option label="否" :value="false" /> <el-option :label="$t('pages.sysConfigSetting.word.no')" :value="false" />
</el-select> </el-select>
<el-input <el-input
v-model.trim="listQuery.name" v-model.trim="listQuery.name"
placeholder="键" :placeholder="$t('pages.sysConfigSetting.filter.key')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<el-input <el-input
v-model.trim="listQuery.val" v-model.trim="listQuery.val"
placeholder="值" :placeholder="$t('pages.sysConfigSetting.filter.value')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<el-input <el-input
v-model.trim="listQuery.description" v-model.trim="listQuery.description"
placeholder="描述" :placeholder="$t('pages.sysConfigSetting.filter.description')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
@ -80,7 +80,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.sysConfigSetting.action.search') }}
</el-button> </el-button>
<el-button <el-button
class="filter-item" class="filter-item"
@ -88,44 +88,44 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('pages.sysConfigSetting.action.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.sysConfigSetting.loading')"
fit fit
highlight-current-row highlight-current-row
@cell-mouse-enter="handleMouseEnter" @cell-mouse-enter="handleMouseEnter"
> >
<el-table-column prop="sysOrigin" label="系统" align="center" min-width="60"> <el-table-column prop="sysOrigin" :label="$t('pages.sysConfigSetting.table.system')" align="center" min-width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="title" label="标题" align="center" /> <el-table-column prop="title" :label="$t('pages.sysConfigSetting.table.title')" align="center" />
<el-table-column prop="val" label="值" align="center" /> <el-table-column prop="val" :label="$t('pages.sysConfigSetting.table.value')" align="center" />
<el-table-column prop="groupName" label="分组" align="center"> <el-table-column prop="groupName" :label="$t('pages.sysConfigSetting.table.group')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ getGroupNames(scope.row.groupList) }}</span> <span>{{ getGroupNames(scope.row.groupList) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="dataType" label="数据类型" align="center" width="100" /> <el-table-column prop="dataType" :label="$t('pages.sysConfigSetting.table.dataType')" align="center" width="110" />
<el-table-column prop="sort" label="序号" align="center" width="50" /> <el-table-column prop="sort" :label="$t('pages.sysConfigSetting.table.sort')" align="center" width="70" />
<el-table-column prop="inoperable" label="状态" align="center" width="100"> <el-table-column prop="inoperable" :label="$t('pages.sysConfigSetting.table.status')" align="center" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.inoperable === false" type="success">可操作</el-tag> <el-tag v-if="scope.row.inoperable === false" type="success">{{ getOperateName(false) }}</el-tag>
<el-tag v-if="scope.row.inoperable === true" type="danger">不可操作</el-tag> <el-tag v-if="scope.row.inoperable === true" type="danger">{{ getOperateName(true) }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="returnApp" label="返回APP" align="center" width="80"> <el-table-column prop="returnApp" :label="$t('pages.sysConfigSetting.table.returnApp')" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.returnApp === true"></span> <span v-if="scope.row.returnApp === true">{{ $t('pages.sysConfigSetting.word.yes') }}</span>
<span v-if="scope.row.returnApp === false"></span> <span v-if="scope.row.returnApp === false">{{ $t('pages.sysConfigSetting.word.no') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="description" label="描述" align="center" width="50"> <el-table-column prop="description" :label="$t('pages.sysConfigSetting.table.description')" align="center" width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tooltip class="item" effect="dark" placement="top-start"> <el-tooltip class="item" effect="dark" placement="top-start">
<div slot="content" class="tooltip-content">{{ scope.row.description }}</div> <div slot="content" class="tooltip-content">{{ scope.row.description }}</div>
@ -133,7 +133,7 @@
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="键" align="center" width="50"> <el-table-column prop="name" :label="$t('pages.sysConfigSetting.table.key')" align="center" width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<div @click="copyTextContent(scope.row.name)"> <div @click="copyTextContent(scope.row.name)">
<el-tooltip class="item" effect="dark" placement="top-start"> <el-tooltip class="item" effect="dark" placement="top-start">
@ -143,21 +143,21 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="操作时间" align="center" width="100"> <el-table-column prop="createTime" :label="$t('pages.sysConfigSetting.table.operationTime')" align="center" width="130">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tooltip class="item" effect="dark" placement="top-start"> <el-tooltip class="item" effect="dark" placement="top-start">
<div slot="content" class="tooltip-content"> <div slot="content" class="tooltip-content">
<div>创建时间{{ scope.row.createTime | dateFormat }}</div> <div>{{ $t('pages.sysConfigSetting.table.createdAt') }}{{ scope.row.createTime | dateFormat }}</div>
<div>修改时间{{ scope.row.updateTime | dateFormat }}</div> <div>{{ $t('pages.sysConfigSetting.table.updatedAt') }}{{ scope.row.updateTime | dateFormat }}</div>
</div> </div>
<div class="el-icon-info cursor-pointer" /> <div class="el-icon-info cursor-pointer" />
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="120"> <el-table-column fixed="right" :label="$t('pages.sysConfigSetting.table.actions')" align="center" width="130">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click.native="handleUpdate(scope.row)">编辑</el-button> <el-button type="text" @click.native="handleUpdate(scope.row)">{{ $t('pages.sysConfigSetting.action.edit') }}</el-button>
<el-button type="text" @click.native="handlDel(scope.row)">删除</el-button> <el-button type="text" @click.native="handlDel(scope.row)">{{ $t('pages.sysConfigSetting.action.delete') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -188,13 +188,13 @@
label-position="right" label-position="right"
label-width="80px" label-width="80px"
> >
<el-form-item v-if="isHideProperty" label="键" prop="name"> <el-form-item v-if="isHideProperty" :label="$t('pages.sysConfigSetting.form.key')" prop="name">
<el-input v-model.trim="form.name" type="text" /> <el-input v-model.trim="form.name" type="text" />
</el-form-item> </el-form-item>
<el-form-item label="数据类型" prop="dataType"> <el-form-item :label="$t('pages.sysConfigSetting.form.dataType')" prop="dataType">
<el-select <el-select
v-model="form.dataType" v-model="form.dataType"
placeholder="数据类型" :placeholder="$t('pages.sysConfigSetting.placeholder.dataType')"
style="width:100%;" style="width:100%;"
@change="handleDataTypeChange" @change="handleDataTypeChange"
> >
@ -206,22 +206,22 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="值" prop="val"> <el-form-item :label="$t('pages.sysConfigSetting.form.value')" prop="val">
<el-input v-model.trim="form.val" type="text" /> <el-input v-model.trim="form.val" type="text" />
</el-form-item> </el-form-item>
<el-form-item label="标题" prop="title"> <el-form-item :label="$t('pages.sysConfigSetting.form.title')" prop="title">
<el-input v-model.trim="form.title" type="text" /> <el-input v-model.trim="form.title" type="text" />
</el-form-item> </el-form-item>
<el-form-item label="描述" prop="description"> <el-form-item :label="$t('pages.sysConfigSetting.form.description')" prop="description">
<el-input v-model.trim="form.description" type="text" /> <el-input v-model.trim="form.description" type="text" />
</el-form-item> </el-form-item>
<el-form-item label="分组" prop="groupList"> <el-form-item :label="$t('pages.sysConfigSetting.form.group')" prop="groupList">
<el-cascader v-model="form.groupList" :options="enumConfigGroupNames" :props="cascaderProps" style="width:100%;" /> <el-cascader v-model="form.groupList" :options="translatedEnumConfigGroupNames" :props="cascaderProps" style="width:100%;" />
</el-form-item> </el-form-item>
<el-form-item label="操作状态" prop="inoperable"> <el-form-item :label="$t('pages.sysConfigSetting.form.operationStatus')" prop="inoperable">
<el-select <el-select
v-model="form.inoperable" v-model="form.inoperable"
placeholder="操作状态" :placeholder="$t('pages.sysConfigSetting.placeholder.operationStatus')"
class="filter-item" class="filter-item"
style="width:100%;" style="width:100%;"
> >
@ -229,25 +229,25 @@
v-for="item in enumConfigOperates" v-for="item in enumConfigOperates"
:key="item.value" :key="item.value"
:value="item.value" :value="item.value"
:label="item.name" :label="getOperateName(item.value)"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="返回APP" prop="returnApp"> <el-form-item :label="$t('pages.sysConfigSetting.form.returnApp')" prop="returnApp">
<el-select <el-select
v-model="form.returnApp" v-model="form.returnApp"
placeholder="返回APP" :placeholder="$t('pages.sysConfigSetting.placeholder.returnApp')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="是" :value="true" /> <el-option :label="$t('pages.sysConfigSetting.word.yes')" :value="true" />
<el-option label="否" :value="false" /> <el-option :label="$t('pages.sysConfigSetting.word.no')" :value="false" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('pages.sysConfigSetting.action.save') }}</el-button>
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('pages.sysConfigSetting.action.cancel') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -284,10 +284,21 @@ export default {
name: 'CnfEnumsManager', name: 'CnfEnumsManager',
components: { Pagination }, components: { Pagination },
data() { data() {
const validateRequired = (rule, value, callback) => {
if (value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0)) {
callback(new Error(this.tPage('validation.requiredField')))
return
}
callback()
}
var validateValue = (rule, value, callback) => { var validateValue = (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback(new Error(this.tPage('validation.requiredField')))
return
}
const expression = enumConfigDataTypesExpression[this.form.dataType] const expression = enumConfigDataTypesExpression[this.form.dataType]
if (expression.rex && !expression.rex.test(value)) { if (expression.rex && !expression.rex.test(value)) {
callback(new Error(expression.msg)) callback(new Error(this.getDataTypeValidationMessage(this.form.dataType, expression.msg)))
return return
} }
callback() callback()
@ -323,25 +334,25 @@ export default {
submitLoading: false, submitLoading: false,
rules: { rules: {
name: [ name: [
{ required: true, message: '必填参数不可为空', trigger: 'blur' } { required: true, validator: validateRequired, trigger: 'blur' }
], ],
val: [ val: [
{ required: true, validator: validateValue, trigger: 'blur' } { required: true, validator: validateValue, trigger: 'blur' }
], ],
title: [ title: [
{ required: true, message: '必填参数不可为空', trigger: 'blur' } { required: true, validator: validateRequired, trigger: 'blur' }
], ],
groupList: [ groupList: [
{ required: true, message: '必填参数不可为空', trigger: 'blur' } { required: true, validator: validateRequired, trigger: 'blur' }
], ],
inoperable: [ inoperable: [
{ required: true, message: '必填参数不可为空', trigger: 'blur' } { required: true, validator: validateRequired, trigger: 'blur' }
], ],
returnApp: [ returnApp: [
{ required: true, message: '必填参数不可为空', trigger: 'blur' } { required: true, validator: validateRequired, trigger: 'blur' }
], ],
description: [ description: [
{ required: true, message: '必填参数不可为空', trigger: 'blur' } { required: true, validator: validateRequired, trigger: 'blur' }
] ]
}, },
listLoading: true listLoading: true
@ -351,6 +362,9 @@ export default {
...mapGetters(['permissionsSysOriginPlatforms']), ...mapGetters(['permissionsSysOriginPlatforms']),
isHideProperty() { isHideProperty() {
return !this.form.id || this.form.id <= 0 return !this.form.id || this.form.id <= 0
},
translatedEnumConfigGroupNames() {
return this.translateConfigGroupOptions(this.enumConfigGroupNames)
} }
}, },
created() { created() {
@ -396,7 +410,7 @@ export default {
list = that.enumConfigGroupNames list = that.enumConfigGroupNames
} }
list.forEach(item => { list.forEach(item => {
that.enumConfigGroupNameMap[item.value] = item.name that.enumConfigGroupNameMap[item.value] = that.getConfigGroupName(item.value, item.name)
if (item.children && item.children.length > 0) { if (item.children && item.children.length > 0) {
that.enumConfigGroupNamesToMap(item.children, true) that.enumConfigGroupNamesToMap(item.children, true)
} }
@ -404,19 +418,42 @@ export default {
}, },
getGroupNames(keys) { getGroupNames(keys) {
const that = this const that = this
return keys ? keys.map(item => that.enumConfigGroupNameMap[item]).join('/') : '' return keys ? keys.map(item => that.getConfigGroupName(item, that.enumConfigGroupNameMap[item] || item)).join('/') : ''
},
tPage(key, values) {
return this.$t(`pages.sysConfigSetting.${key}`, values)
},
translateConfigGroupOptions(list) {
return list.map(item => ({
...item,
name: this.getConfigGroupName(item.value, item.name),
children: item.children ? this.translateConfigGroupOptions(item.children) : item.children
}))
},
getConfigGroupName(value, fallback) {
const key = `pages.sysConfigSetting.configGroup.${value}`
const translated = this.$t(key)
return translated === key ? fallback : translated
},
getOperateName(value) {
return value ? this.tPage('operate.inoperable') : this.tPage('operate.operable')
},
getDataTypeValidationMessage(type, fallback) {
const key = `pages.sysConfigSetting.dataTypeValidation.${type}`
const translated = this.$t(key)
return translated === key ? fallback : translated
}, },
handleSearch() { handleSearch() {
this.renderData(true) this.renderData(true)
}, },
handleCreate() { handleCreate() {
this.formVisible = true this.formVisible = true
this.formTitle = '添加' this.formTitle = this.tPage('dialog.create')
this.form = getFormData() this.form = getFormData()
}, },
handleUpdate(row) { handleUpdate(row) {
this.formVisible = true this.formVisible = true
this.formTitle = '编辑' this.formTitle = this.tPage('dialog.edit')
this.form = Object.assign({}, row) this.form = Object.assign({}, row)
}, },
submitForm() { submitForm() {
@ -463,9 +500,9 @@ export default {
const that = this const that = this
that.searchLoading = that.listLoading = false that.searchLoading = that.listLoading = false
this.$confirm('您确定要删除该参数配置吗?', '温馨提示', { this.$confirm(this.tPage('confirm.deleteMessage'), this.tPage('confirm.title'), {
confirmButtonText: '确定', confirmButtonText: this.tPage('confirm.confirm'),
cancelButtonText: '取消' cancelButtonText: this.tPage('confirm.cancel')
}).then(() => { }).then(() => {
delConfig(item.id).then(res => { delConfig(item.id).then(res => {
that.renderData() that.renderData()
@ -477,7 +514,7 @@ export default {
}, },
renderDataSuccess() { renderDataSuccess() {
this.$message({ this.$message({
message: 'Successful', message: this.tPage('message.success'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()
@ -489,12 +526,12 @@ export default {
const that = this const that = this
copyText(text).then(() => { copyText(text).then(() => {
that.$message({ that.$message({
message: '复制成功', message: that.tPage('message.copySuccess'),
type: 'success' type: 'success'
}) })
}).catch(() => { }).catch(() => {
that.$message({ that.$message({
message: '复制失败', message: that.tPage('message.copyFail'),
type: 'error' type: 'error'
}) })
}) })

View File

@ -1,10 +1,10 @@
<template> <template>
<div class="push-form"> <div class="push-form">
<el-form ref="form" :model="form" label-width="100px"> <el-form ref="form" :model="form" label-width="100px">
<el-form-item prop="sysOrigin" label="系统"> <el-form-item prop="sysOrigin" :label="$t('pages.giftManagement.cp.form.system')">
<el-select <el-select
v-model="form.sysOrigin" v-model="form.sysOrigin"
placeholder="归属系统" :placeholder="$t('pages.giftManagement.cp.placeholder.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -24,11 +24,11 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="giftId" label="礼物ID"> <el-form-item prop="giftId" :label="$t('pages.giftManagement.cp.form.giftId')">
<el-input v-model="form.giftId" type="number" /> <el-input v-model="form.giftId" type="number" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="onSubmit">保存</el-button> <el-button type="primary" @click="onSubmit">{{ $t('pages.giftManagement.cp.action.save') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -79,22 +79,22 @@ export default {
return false return false
} }
if (that.form.sysOrigin === '') { if (that.form.sysOrigin === '') {
that.$opsMessage.fail('请输选择系统') that.$opsMessage.fail(this.$t('pages.giftManagement.cp.message.selectSystem'))
return return
} }
if (that.form.giftId === '') { if (that.form.giftId === '') {
that.$opsMessage.fail('请输入礼物ID') that.$opsMessage.fail(this.$t('pages.giftManagement.cp.message.enterGiftId'))
return return
} }
that.$confirm('是否确定修改配置值?', '提示', { that.$confirm(this.$t('pages.giftManagement.cp.message.confirmUpdate'), this.$t('common.tip'), {
confirmButtonText: '确定', confirmButtonText: this.$t('common.confirm'),
cancelButtonText: '取消', cancelButtonText: this.$t('common.cancel'),
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
pushPairCpGiveGiftId(that.form.giftId, that.form.sysOrigin).then(res => { pushPairCpGiveGiftId(that.form.giftId, that.form.sysOrigin).then(res => {
that.$message({ that.$message({
type: 'success', type: 'success',
message: 'Successful' message: this.$t('pages.giftManagement.cp.message.success')
}) })
that.renderData() that.renderData()
}).catch(er => { }).catch(er => {
@ -103,7 +103,7 @@ export default {
}).catch(() => { }).catch(() => {
that.$message({ that.$message({
type: 'info', type: 'info',
message: '已取消操作' message: this.$t('pages.giftManagement.cp.message.cancelled')
}) })
}) })
}) })

View File

@ -18,15 +18,15 @@ export default {
activeName: 'Setting', activeName: 'Setting',
tables: [ tables: [
{ {
title: '礼物配置', title: this.$t('pages.giftManagement.tabs.giftConfig'),
component: 'Setting' component: 'Setting'
}, },
{ {
title: '周星礼物配置', title: this.$t('pages.giftManagement.tabs.weekStarGiftConfig'),
component: 'WeekStar' component: 'WeekStar'
}, },
{ {
title: 'CP组合赠送礼物', title: this.$t('pages.giftManagement.tabs.cpGiftConfig'),
component: 'CP' component: 'CP'
} }
] ]

View File

@ -22,11 +22,11 @@
<el-form-item label-width="0"> <el-form-item label-width="0">
<!-- 平台 选择 --> <!-- 平台 选择 -->
<el-col :md="12" :sm="24" class="col-margin"> <el-col :md="12" :sm="24" class="col-margin">
<el-form-item label="平台" prop="sysOrigin"> <el-form-item :label="$t('pages.giftManagement.edit.form.system')" prop="sysOrigin">
<el-select <el-select
v-model="form.sysOrigin" v-model="form.sysOrigin"
:disabled="isUpdate" :disabled="isUpdate"
placeholder="归属平台" :placeholder="$t('pages.giftManagement.edit.placeholder.system')"
style="width: 100%" style="width: 100%"
class="filter-item" class="filter-item"
@change="loadTmpData()" @change="loadTmpData()"
@ -50,19 +50,19 @@
<!-- 区域 选择 --> <!-- 区域 选择 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item prop="regionList" label="区域"> <el-form-item prop="regionList" :label="$t('pages.giftManagement.edit.form.region')">
<el-button <el-button
type="text" type="text"
style="margin-left: 10px; color: #FF9326;" style="margin-left: 10px; color: #FF9326;"
@click="handleSelectAllRegions" @click="handleSelectAllRegions"
> >
{{ isAllRegionsSelected ? "取消全选" : "全选" }} {{ isAllRegionsSelected ? $t('pages.giftManagement.edit.action.unselectAll') : $t('pages.giftManagement.edit.action.selectAll') }}
</el-button> </el-button>
<el-select <el-select
v-model="form.regionList" v-model="form.regionList"
v-loading="loading" v-loading="loading"
multiple multiple
placeholder="请选择" :placeholder="$t('pages.giftManagement.edit.placeholder.select')"
style="width:calc(100% - 80px);" style="width:calc(100% - 80px);"
> >
<el-option <el-option
@ -79,22 +79,22 @@
<el-form-item label-width="0px"> <el-form-item label-width="0px">
<!-- 名称 --> <!-- 名称 -->
<el-col :md="12" :sm="24" class="col-margin"> <el-col :md="12" :sm="24" class="col-margin">
<el-form-item label="名称" prop="giftName"> <el-form-item :label="$t('pages.giftManagement.edit.form.name')" prop="giftName">
<el-input <el-input
v-model.trim="form.giftName" v-model.trim="form.giftName"
type="text" type="text"
placeholder="礼物名称" :placeholder="$t('pages.giftManagement.edit.placeholder.giftName')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- 编码 --> <!-- 编码 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="Code" prop="giftCode"> <el-form-item :label="$t('pages.giftManagement.edit.form.code')" prop="giftCode">
<el-input <el-input
v-model.trim="form.giftCode" v-model.trim="form.giftCode"
type="text" type="text"
placeholder="礼物编码" :placeholder="$t('pages.giftManagement.edit.placeholder.giftCode')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -103,24 +103,24 @@
<el-form-item v-if="!isTypeFree" label-width="0px"> <el-form-item v-if="!isTypeFree" label-width="0px">
<!-- 金币 --> <!-- 金币 -->
<el-col :md="12" :sm="24" class="col-margin"> <el-col :md="12" :sm="24" class="col-margin">
<el-form-item prop="giftCandy" label="金币"> <el-form-item prop="giftCandy" :label="$t('pages.giftManagement.edit.form.gold')">
<el-input <el-input
v-model="form.giftCandy" v-model="form.giftCandy"
v-number v-number
type="text" type="text"
placeholder="礼物金币" :placeholder="$t('pages.giftManagement.edit.placeholder.giftGold')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- 积分 --> <!-- 积分 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item prop="giftCandy" label="积分"> <el-form-item prop="giftCandy" :label="$t('pages.giftManagement.edit.form.points')">
<el-input <el-input
v-model="form.giftIntegral" v-model="form.giftIntegral"
v-number v-number
type="text" type="text"
placeholder="礼物积分" :placeholder="$t('pages.giftManagement.edit.placeholder.giftPoints')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -129,17 +129,17 @@
<el-form-item prop="giftTab" label-width="0"> <el-form-item prop="giftTab" label-width="0">
<!-- 礼物类型 选择 --> <!-- 礼物类型 选择 -->
<el-col :md="12" :sm="24" class="col-margin"> <el-col :md="12" :sm="24" class="col-margin">
<el-form-item label="礼物类型"> <el-form-item :label="$t('pages.giftManagement.edit.form.giftType')">
<el-select <el-select
v-model="form.giftTab" v-model="form.giftTab"
placeholder="礼物类型" :placeholder="$t('pages.giftManagement.edit.placeholder.giftType')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option <el-option
v-for="item in giftConfigTabs" v-for="item in giftConfigTabs"
:key="item.value" :key="item.value"
:label="item.name" :label="$t(`pages.giftManagement.giftTab.${item.value}`)"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
@ -148,17 +148,17 @@
<!-- 收费类型 选择 --> <!-- 收费类型 选择 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="收费类型"> <el-form-item :label="$t('pages.giftManagement.edit.form.chargeType')">
<el-select <el-select
v-model="form.type" v-model="form.type"
placeholder="收费类型" :placeholder="$t('pages.giftManagement.edit.placeholder.chargeType')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
@change="selectChanged" @change="selectChanged"
> >
<el-option label="金币" :value="'GOLD'" /> <el-option :label="$t('pages.giftManagement.setting.chargeType.gold')" :value="'GOLD'" />
<el-option label="免费" :value="'FREE'" disabled /> <el-option :label="$t('pages.giftManagement.setting.chargeType.free')" :value="'FREE'" disabled />
<el-option label="钻石" :value="'DIAMOND'" /> <el-option :label="$t('pages.giftManagement.setting.chargeType.diamond')" :value="'DIAMOND'" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -167,11 +167,11 @@
<el-form-item label-width="0"> <el-form-item label-width="0">
<!-- 特效 选择 --> <!-- 特效 选择 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="特效" prop="specialList" class="col-margin"> <el-form-item :label="$t('pages.giftManagement.edit.form.specialEffect')" prop="specialList" class="col-margin">
<el-select <el-select
v-model="form.specialList" v-model="form.specialList"
multiple multiple
placeholder="请选择" :placeholder="$t('pages.giftManagement.edit.placeholder.select')"
style="width:100%;" style="width:100%;"
> >
<el-option <el-option
@ -187,12 +187,12 @@
<!-- 排序 --> <!-- 排序 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="排序" prop="sort"> <el-form-item :label="$t('pages.giftManagement.edit.form.sort')" prop="sort">
<el-input <el-input
v-model="form.sort" v-model="form.sort"
v-number v-number
type="text" type="text"
placeholder="请输入排序权重" :placeholder="$t('pages.giftManagement.edit.placeholder.sort')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -201,7 +201,7 @@
<el-form-item label-width="0"> <el-form-item label-width="0">
<!-- 封面 --> <!-- 封面 -->
<el-col :md="12" :sm="24" class="col-margin"> <el-col :md="12" :sm="24" class="col-margin">
<el-form-item label="封面" prop="giftPhoto"> <el-form-item :label="$t('pages.giftManagement.edit.form.cover')" prop="giftPhoto">
<el-upload <el-upload
:file-list="giftPhotoFileList" :file-list="giftPhotoFileList"
:class="{ 'upload-but-hide': giftCoverUploadVisible }" :class="{ 'upload-but-hide': giftCoverUploadVisible }"
@ -220,7 +220,7 @@
<!-- 资源 --> <!-- 资源 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="资源" prop="giftSourceUrl"> <el-form-item :label="$t('pages.giftManagement.edit.form.resource')" prop="giftSourceUrl">
<el-upload <el-upload
:class="{ 'upload-but-hide': form.giftSourceUrl }" :class="{ 'upload-but-hide': form.giftSourceUrl }"
action="" action=""
@ -231,9 +231,9 @@
accept=".svga,.pag,.mp4" accept=".svga,.pag,.mp4"
> >
<div class="upload-but"> <div class="upload-but">
<el-button size="small" type="primary">点击上传</el-button> <el-button size="small" type="primary">{{ $t('pages.giftManagement.edit.action.clickUpload') }}</el-button>
<div slot="tip" class="el-upload__tip"> <div slot="tip" class="el-upload__tip">
只能上传svga/pag/mp4文件 {{ $t('pages.giftManagement.edit.message.uploadTip') }}
</div> </div>
</div> </div>
</el-upload> </el-upload>
@ -252,13 +252,13 @@
<el-form-item label-width="0"> <el-form-item label-width="0">
<!-- 有效期 --> <!-- 有效期 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="有效期" prop="expiredTime"> <el-form-item :label="$t('pages.giftManagement.edit.form.expireTime')" prop="expiredTime">
<el-date-picker <el-date-picker
v-model="form.expiredTime" v-model="form.expiredTime"
:picker-options="pickerOptions" :picker-options="pickerOptions"
value-format="timestamp" value-format="timestamp"
type="date" type="date"
placeholder="下架日期" :placeholder="$t('pages.giftManagement.edit.placeholder.offShelfDate')"
style="width: 100%;" style="width: 100%;"
/> />
</el-form-item> </el-form-item>
@ -268,11 +268,11 @@
<el-form-item v-if="form.giftTab === 'EXCLUSIVE'" label-width="0"> <el-form-item v-if="form.giftTab === 'EXCLUSIVE'" label-width="0">
<!-- 归属人账号 --> <!-- 归属人账号 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="归属人账号" prop="account"> <el-form-item :label="$t('pages.giftManagement.edit.form.ownerAccount')" prop="account">
<el-input <el-input
v-model="form.account" v-model="form.account"
type="text" type="text"
placeholder="归属人账号" :placeholder="$t('pages.giftManagement.edit.placeholder.ownerAccount')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -285,11 +285,11 @@
> >
<!-- 幸运规格 选择 --> <!-- 幸运规格 选择 -->
<el-col :md="12" :sm="24" class="col-margin"> <el-col :md="12" :sm="24" class="col-margin">
<el-form-item prop="standardId" label="幸运规格"> <el-form-item prop="standardId" :label="$t('pages.giftManagement.edit.form.luckyStandard')">
<el-select <el-select
v-model="form.standardId" v-model="form.standardId"
v-loading="loading" v-loading="loading"
placeholder="请选择" :placeholder="$t('pages.giftManagement.edit.placeholder.select')"
style="width:100%;" style="width:100%;"
> >
<el-option <el-option
@ -307,16 +307,16 @@
<el-form-item v-if="form.giftTab === 'CP'" label-width="0"> <el-form-item v-if="form.giftTab === 'CP'" label-width="0">
<!-- 是否告白礼物 --> <!-- 是否告白礼物 -->
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="是否告白礼物" prop="explanationGift"> <el-form-item :label="$t('pages.giftManagement.edit.form.confessionGift')" prop="explanationGift">
<el-select <el-select
v-model="form.explanationGift" v-model="form.explanationGift"
placeholder="告白礼物" :placeholder="$t('pages.giftManagement.edit.placeholder.confessionGift')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="是" :value="true" /> <el-option :label="$t('pages.giftManagement.edit.option.yes')" :value="true" />
<el-option label="否" :value="false" /> <el-option :label="$t('pages.giftManagement.edit.option.no')" :value="false" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -325,8 +325,8 @@
<!-- 操作按钮 --> <!-- 操作按钮 -->
<div slot="footer" style="text-align: center;"> <div slot="footer" style="text-align: center;">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('pages.giftManagement.cp.action.save') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
@ -354,9 +354,10 @@ export default {
} }
}, },
data() { data() {
function commonFormRules() { const requiredMessage = this.$t("pages.giftManagement.edit.validation.required");
return [{ required: true, message: "必填字段", trigger: "blur" }]; const commonFormRules = () => {
} return [{ required: true, message: requiredMessage, trigger: "blur" }];
};
return { return {
pickerOptions: { pickerOptions: {
disabledDate(time) { disabledDate(time) {
@ -370,17 +371,17 @@ export default {
options: [ options: [
{ {
value: "ANIMATION", value: "ANIMATION",
label: "动画", label: this.$t("pages.giftManagement.edit.specialEffect.animation"),
disabled: false disabled: false
}, },
{ {
value: "MUSIC", value: "MUSIC",
label: "音乐", label: this.$t("pages.giftManagement.edit.specialEffect.music"),
disabled: false disabled: false
}, },
{ {
value: "NOTICE", value: "NOTICE",
label: "全局通报", label: this.$t("pages.giftManagement.edit.specialEffect.notice"),
disabled: false disabled: false
}, },
// { // {
@ -390,17 +391,17 @@ export default {
// }, // },
{ {
value: "SVIP_GIFT", value: "SVIP_GIFT",
label: "SVIP礼物", label: this.$t("pages.giftManagement.edit.specialEffect.svipGift"),
disabled: false disabled: false
}, },
{ {
value: "STAR", value: "STAR",
label: "周星礼物", label: this.$t("pages.giftManagement.edit.specialEffect.weekStarGift"),
disabled: false disabled: false
}, },
{ {
value: "GLOBAL_GIFT", value: "GLOBAL_GIFT",
label: "全局广播礼物", label: this.$t("pages.giftManagement.edit.specialEffect.globalBroadcastGift"),
disabled: false disabled: false
} }
], ],
@ -445,9 +446,9 @@ export default {
...mapGetters(["permissionsSysOriginPlatforms"]), ...mapGetters(["permissionsSysOriginPlatforms"]),
eventName() { eventName() {
return this.event === "ADD" return this.event === "ADD"
? "添加" ? this.$t("pages.giftManagement.edit.event.add")
: this.event === "UPDATE" : this.event === "UPDATE"
? "修改" ? this.$t("pages.giftManagement.edit.event.update")
: "ERROR"; : "ERROR";
}, },
isUpdate() { isUpdate() {
@ -510,13 +511,13 @@ export default {
that that
.$simpleUploadFlie(file, "gifts") .$simpleUploadFlie(file, "gifts")
.then(res => { .then(res => {
that.$message.success("上传成功"); that.$message.success(this.$t("pages.giftManagement.edit.message.uploadSuccess"));
that.form.giftSourceUrl = res.name; that.form.giftSourceUrl = res.name;
that.payerSvgaUrl = that.$getAccessImgUrl(res.name); that.payerSvgaUrl = that.$getAccessImgUrl(res.name);
}) })
.catch(er => { .catch(er => {
console.error(er); console.error(er);
that.$message.error("上传失败,请尝试重新上传!"); that.$message.error(this.$t("pages.giftManagement.edit.message.uploadFailed"));
}); });
}, },
handleRemoveSourceUrl(file, fileList) { handleRemoveSourceUrl(file, fileList) {
@ -532,7 +533,7 @@ export default {
.catch(er => { .catch(er => {
console.error(er); console.error(er);
that.giftCoverUploadVisible = false; that.giftCoverUploadVisible = false;
that.$message.error("上传失败,请尝试重新上传!"); that.$message.error(this.$t("pages.giftManagement.edit.message.uploadFailed"));
}); });
}, },
listRegion() { listRegion() {
@ -578,7 +579,7 @@ export default {
if (that.form.giftTab === "LUCKY_GIFT") { if (that.form.giftTab === "LUCKY_GIFT") {
if (!that.form.standardId) { if (!that.form.standardId) {
that.$message.error("幸运礼物必须选择规格"); that.$message.error(this.$t("pages.giftManagement.edit.message.luckyGiftStandardRequired"));
that.submitLoading = false; that.submitLoading = false;
return; return;
} }
@ -590,8 +591,8 @@ export default {
const that = this; const that = this;
that that
.$confirm( .$confirm(
"修改规格会立刻切换新规格新抽奖数据,是否确定切换?", this.$t("pages.giftManagement.edit.message.confirmStandardChange"),
"提示", this.$t("pages.giftManagement.edit.message.tip"),
{ {
type: "warning" type: "warning"
} }

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="归属系统" :placeholder="$t('pages.giftManagement.setting.filter.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="changeSysOrigin" @change="changeSysOrigin"
@ -20,7 +20,7 @@
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.sortType" v-model="listQuery.sortType"
placeholder="排序方式" :placeholder="$t('pages.giftManagement.setting.filter.sortType')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -29,7 +29,7 @@
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.del" v-model="listQuery.del"
placeholder="上/下架" :placeholder="$t('pages.giftManagement.setting.filter.shelfStatus')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
clearable clearable
@ -40,7 +40,7 @@
<el-select <el-select
v-model="listQuery.giftTab" v-model="listQuery.giftTab"
placeholder="类型" :placeholder="$t('pages.giftManagement.setting.filter.giftType')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
clearable clearable
@ -54,12 +54,12 @@
/> />
</el-select> </el-select>
<div v-if="listQuery.giftTab==='EXCLUSIVE'" class="filter-item"> <div v-if="listQuery.giftTab==='EXCLUSIVE'" class="filter-item">
<div><account-input v-model="listQuery.userId" placeholder="用户id" type="USER" :sys-origin="listQuery.sysOrigin" /></div> <div><account-input v-model="listQuery.userId" :placeholder="$t('pages.giftManagement.setting.filter.userId')" type="USER" :sys-origin="listQuery.sysOrigin" /></div>
</div> </div>
<el-select <el-select
v-model="listQuery.region" v-model="listQuery.region"
v-loading="loading" v-loading="loading"
placeholder="区域" :placeholder="$t('pages.giftManagement.setting.filter.region')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
clearable clearable
@ -74,26 +74,26 @@
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.type" v-model="listQuery.type"
placeholder="收费类型" :placeholder="$t('pages.giftManagement.setting.filter.chargeType')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
clearable clearable
@change="handleSearch" @change="handleSearch"
> >
<el-option label="金币" :value="'GOLD'" /> <el-option :label="$t('pages.giftManagement.setting.chargeType.gold')" :value="'GOLD'" />
<el-option label="免费" :value="'FREE'" /> <el-option :label="$t('pages.giftManagement.setting.chargeType.free')" :value="'FREE'" />
<el-option label="钻石" :value="'DIAMOND'" /> <el-option :label="$t('pages.giftManagement.setting.chargeType.diamond')" :value="'DIAMOND'" />
</el-select> </el-select>
<el-input <el-input
v-model.trim="listQuery.giftId" v-model.trim="listQuery.giftId"
placeholder="礼物ID" :placeholder="$t('pages.giftManagement.setting.filter.giftId')"
clearable clearable
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<el-input <el-input
v-model.trim="listQuery.giftName" v-model.trim="listQuery.giftName"
placeholder="礼物名称" :placeholder="$t('pages.giftManagement.setting.filter.giftName')"
clearable clearable
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
@ -104,9 +104,9 @@
v-model="rangeDate" v-model="rangeDate"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
type="daterange" type="daterange"
range-separator="" :range-separator="$t('pages.giftManagement.setting.dateRange.separator')"
start-placeholder="开始日期" :start-placeholder="$t('pages.giftManagement.setting.dateRange.start')"
end-placeholder="结束日期" :end-placeholder="$t('pages.giftManagement.setting.dateRange.end')"
/> />
</div> </div>
@ -116,7 +116,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
<el-button <el-button
class="filter-item" class="filter-item"
@ -124,7 +124,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('pages.giftManagement.action.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -136,7 +136,7 @@
> >
<el-table-column label="ID" width="200" align="center" prop="id" /> <el-table-column label="ID" width="200" align="center" prop="id" />
<el-table-column label="Code" align="center" prop="giftCode" /> <el-table-column label="Code" align="center" prop="giftCode" />
<el-table-column label="封面" align="center"> <el-table-column :label="$t('pages.giftManagement.setting.table.cover')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
style="width: 50px; height: 50px" style="width: 50px; height: 50px"
@ -145,13 +145,13 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="giftName" label="名称" align="center" /> <el-table-column prop="giftName" :label="$t('pages.giftManagement.setting.table.name')" align="center" />
<el-table-column prop="giftCandy" label="金币" align="center" /> <el-table-column prop="giftCandy" :label="$t('pages.giftManagement.setting.table.gold')" align="center" />
<el-table-column prop="giftIntegral" label="积分" align="center" /> <el-table-column prop="giftIntegral" :label="$t('pages.giftManagement.setting.table.points')" align="center" />
<el-table-column prop="regionNameStr" label="区域" align="center" /> <el-table-column prop="regionNameStr" :label="$t('pages.giftManagement.setting.table.region')" align="center" />
<el-table-column prop="typeName" label="类型" align="center" /> <el-table-column prop="typeName" :label="$t('pages.giftManagement.setting.table.type')" align="center" />
<el-table-column prop="sort" label="排序权重" align="center" /> <el-table-column prop="sort" :label="$t('pages.giftManagement.setting.table.sort')" align="center" />
<el-table-column width="100" label="上/下架" align="center"> <el-table-column width="100" :label="$t('pages.giftManagement.setting.table.shelfStatus')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch
v-model="scope.row.del" v-model="scope.row.del"
@ -161,26 +161,26 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间" min-width="170" align="center"> <el-table-column prop="createTime" :label="$t('pages.giftManagement.setting.table.createTime')" min-width="170" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="专属礼物归属人" align="center" min-width="150"> <el-table-column :label="$t('pages.giftManagement.setting.table.owner')" align="center" min-width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userBaseInfo" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.userBaseInfo" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="80"> <el-table-column fixed="right" :label="$t('pages.giftManagement.setting.table.actions')" align="center" width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<i class="el-icon-more" /> <i class="el-icon-more" />
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item type="text" @click.native="handleUpdate(scope.row)">编辑</el-dropdown-item> <el-dropdown-item type="text" @click.native="handleUpdate(scope.row)">{{ $t('pages.giftManagement.setting.action.edit') }}</el-dropdown-item>
<el-dropdown-item v-if="scope.row.giftPhoto" type="text" @click.native="copyContent(scope.row.giftPhoto)">图片地址&nbsp;<i class="el-icon-document-copy" /></el-dropdown-item> <el-dropdown-item v-if="scope.row.giftPhoto" type="text" @click.native="copyContent(scope.row.giftPhoto)">{{ $t('pages.giftManagement.setting.action.imageUrl') }}&nbsp;<i class="el-icon-document-copy" /></el-dropdown-item>
<el-dropdown-item v-if="scope.row.giftSourceUrl" type="text" @click.native="copyContent(scope.row.giftSourceUrl)">动画地址&nbsp;<i class="el-icon-document-copy" /></el-dropdown-item> <el-dropdown-item v-if="scope.row.giftSourceUrl" type="text" @click.native="copyContent(scope.row.giftSourceUrl)">{{ $t('pages.giftManagement.setting.action.animationUrl') }}&nbsp;<i class="el-icon-document-copy" /></el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
@ -221,13 +221,13 @@ export default {
data() { data() {
return { return {
sortTypes: [ sortTypes: [
{ value: 'CREATE_TIME_DESC', name: '创建时间降序' }, { value: 'CREATE_TIME_DESC', name: this.$t('pages.giftManagement.setting.sortType.createTimeDesc') },
{ value: 'AMOUNT_DESC', name: '金额降序' }, { value: 'AMOUNT_DESC', name: this.$t('pages.giftManagement.setting.sortType.amountDesc') },
{ value: 'SORT_DESC', name: '权重降序' } { value: 'SORT_DESC', name: this.$t('pages.giftManagement.setting.sortType.sortDesc') }
], ],
showcaseTypes: [ showcaseTypes: [
{ value: true, name: '下架' }, { value: true, name: this.$t('pages.giftManagement.setting.showcase.offShelf') },
{ value: false, name: '上架' } { value: false, name: this.$t('pages.giftManagement.setting.showcase.onShelf') }
], ],
giftEditParam: {}, giftEditParam: {},
giftConfigTabs, giftConfigTabs,
@ -293,9 +293,9 @@ export default {
methods: { methods: {
copyContent(text) { copyContent(text) {
copyText(text).then(() => { copyText(text).then(() => {
this.$message.success('复制成功') this.$message.success(this.$t('pages.giftManagement.setting.message.copySuccess'))
}).catch(er => { }).catch(er => {
this.$message.error('复制失败') this.$message.error(this.$t('pages.giftManagement.setting.message.copyFailed'))
}) })
}, },
changeSysOrigin() { changeSysOrigin() {
@ -348,14 +348,14 @@ export default {
this.giftEditParam = row this.giftEditParam = row
}, },
giftEditSuccess(res) { giftEditSuccess(res) {
this.$message.success('操作成功') this.$message.success(this.$t('pages.giftManagement.setting.message.operationSuccess'))
this.formVisible = false this.formVisible = false
if (res.event === 'UPDATE') { if (res.event === 'UPDATE') {
this.renderData() this.renderData()
} }
}, },
giftEditFail() { giftEditFail() {
this.$message.success('操作失败') this.$message.error(this.$t('pages.giftManagement.setting.message.operationFailed'))
}, },
handleSwitchChange(row) { handleSwitchChange(row) {
switchDelStatus(row.id, row.del) switchDelStatus(row.id, row.del)

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="gift-edit"> <div class="gift-edit">
<el-dialog <el-dialog
title="添加周星礼物组" :title="$t('pages.giftManagement.weekStar.dialog.title')"
:visible="true" :visible="true"
:modal-append-to-body="true" :modal-append-to-body="true"
:append-to-body="true" :append-to-body="true"
@ -12,17 +12,17 @@
> >
<div v-loading="submitLoading"> <div v-loading="submitLoading">
<el-alert <el-alert
title="注意周星正常运行切换最少需要配置3组礼物" :title="$t('pages.giftManagement.weekStar.message.minimumGiftGroups')"
type="warning" type="warning"
:closable="false" :closable="false"
style="margin-bottom:10px" style="margin-bottom:10px"
/> />
<el-form ref="form" :model="form" :rules="rules" label-width="110px" style="margin-right:50px;"> <el-form ref="form" :model="form" :rules="rules" label-width="110px" style="margin-right:50px;">
<el-form-item v-loading="changeSysOriginLoading" label="归属系统" prop="sysOrigin"> <el-form-item v-loading="changeSysOriginLoading" :label="$t('pages.giftManagement.weekStar.form.system')" prop="sysOrigin">
<el-select <el-select
v-model="form.sysOrigin" v-model="form.sysOrigin"
placeholder="归属系统" :placeholder="$t('pages.giftManagement.weekStar.filter.system')"
style="width: 100%" style="width: 100%"
@change="changeSysOrigin" @change="changeSysOrigin"
> >
@ -37,52 +37,52 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="礼物1" prop="giftOne"> <el-form-item :label="$t('pages.giftManagement.weekStar.form.giftOne')" prop="giftOne">
<el-select <el-select
v-model="form.giftOne" v-model="form.giftOne"
placeholder="礼物类型" :placeholder="$t('pages.giftManagement.weekStar.form.giftType')"
style="width:100%;" style="width:100%;"
> >
<el-option v-for="(item, index) in selectGifts" :key="index" :label="item.giftName" :value="item.id" :disabled="isDisable(item.id)"> <el-option v-for="(item, index) in selectGifts" :key="index" :label="item.giftName" :value="item.id" :disabled="isDisable(item.id)">
<div class="gift-select"> <div class="gift-select">
<img :src="item.giftPhoto" alt="gift"> <img :src="item.giftPhoto" alt="gift">
<span>金币:{{ item.giftCandy }}</span> <span>{{ $t('pages.giftManagement.weekStar.form.goldPrefix') }}{{ item.giftCandy }}</span>
</div> </div>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="礼物2" prop="giftTwo"> <el-form-item :label="$t('pages.giftManagement.weekStar.form.giftTwo')" prop="giftTwo">
<el-select <el-select
v-model="form.giftTwo" v-model="form.giftTwo"
placeholder="礼物类型" :placeholder="$t('pages.giftManagement.weekStar.form.giftType')"
style="width:100%;" style="width:100%;"
> >
<el-option v-for="(item, index) in selectGifts" :key="index" :label="item.giftName" :value="item.id" :disabled="isDisable(item.id)"> <el-option v-for="(item, index) in selectGifts" :key="index" :label="item.giftName" :value="item.id" :disabled="isDisable(item.id)">
<div class="gift-select"> <div class="gift-select">
<img :src="item.giftPhoto" alt="gift"> <img :src="item.giftPhoto" alt="gift">
<span>金币:{{ item.giftCandy }}</span> <span>{{ $t('pages.giftManagement.weekStar.form.goldPrefix') }}{{ item.giftCandy }}</span>
</div> </div>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="礼物3" prop="giftThree"> <el-form-item :label="$t('pages.giftManagement.weekStar.form.giftThree')" prop="giftThree">
<el-select <el-select
v-model="form.giftThree" v-model="form.giftThree"
placeholder="礼物类型" :placeholder="$t('pages.giftManagement.weekStar.form.giftType')"
style="width:100%;" style="width:100%;"
> >
<el-option v-for="(item, index) in selectGifts" :key="index" :label="item.giftName" :value="item.id" :disabled="isDisable(item.id)"> <el-option v-for="(item, index) in selectGifts" :key="index" :label="item.giftName" :value="item.id" :disabled="isDisable(item.id)">
<div class="gift-select"> <div class="gift-select">
<img :src="item.giftPhoto" alt="gift"> <img :src="item.giftPhoto" alt="gift">
<span>金币:{{ item.giftCandy }}</span> <span>{{ $t('pages.giftManagement.weekStar.form.goldPrefix') }}{{ item.giftCandy }}</span>
</div> </div>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" style="text-align: center;"> <div slot="footer" style="text-align: center;">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('pages.giftManagement.cp.action.save') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
@ -96,9 +96,10 @@ import { mapGetters } from 'vuex'
export default { export default {
name: 'AddWeekGiftGroup', name: 'AddWeekGiftGroup',
data() { data() {
const requiredMessage = this.$t('pages.giftManagement.weekStar.validation.required')
function commonFormRules() { function commonFormRules() {
return [ return [
{ required: true, message: '必填字段不可为空', trigger: 'blur' } { required: true, message: requiredMessage, trigger: 'blur' }
] ]
} }
return { return {

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="归属系统" :placeholder="$t('pages.giftManagement.weekStar.filter.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -28,10 +28,10 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('pages.giftManagement.action.add') }}
</el-button> </el-button>
<el-alert <el-alert
title="注意周星正常运行切换最少需要配置3组礼物" :title="$t('pages.giftManagement.weekStar.message.minimumGiftGroups')"
type="warning" type="warning"
:closable="false" :closable="false"
/> />
@ -43,9 +43,9 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="编号" align="center" prop="id" width="200" /> <el-table-column :label="$t('pages.giftManagement.weekStar.table.id')" align="center" prop="id" width="200" />
<el-table-column <el-table-column
label="归属系统" :label="$t('pages.giftManagement.weekStar.table.system')"
align="center" align="center"
prop="sysOrigin" prop="sysOrigin"
width="200" width="200"
@ -58,12 +58,12 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="展示次数" :label="$t('pages.giftManagement.weekStar.table.displayCount')"
align="center" align="center"
prop="displayNumber" prop="displayNumber"
width="100" width="100"
/> />
<el-table-column label="礼物信息" align="center"> <el-table-column :label="$t('pages.giftManagement.weekStar.table.giftInfo')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-row> <el-row>
<el-col <el-col
@ -81,29 +81,29 @@
</el-row> </el-row>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center"> <el-table-column :label="$t('pages.giftManagement.weekStar.table.status')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.type === 'THIS_WEEK'"> <div v-if="scope.row.type === 'THIS_WEEK'">
当前 {{ $t('pages.giftManagement.weekStar.status.current') }}
</div> </div>
<div v-else-if="scope.row.type === 'LAST_WEEK'"> <div v-else-if="scope.row.type === 'LAST_WEEK'">
上周 {{ $t('pages.giftManagement.weekStar.status.lastWeek') }}
</div> </div>
<div v-else-if="scope.row.type === 'NEXT_WEEK'"> <div v-else-if="scope.row.type === 'NEXT_WEEK'">
下周 {{ $t('pages.giftManagement.weekStar.status.nextWeek') }}
</div> </div>
<div v-else> <div v-else>
- -
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="200"> <el-table-column fixed="right" :label="$t('pages.giftManagement.weekStar.table.actions')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="text" type="text"
:disabled="scope.row.type !== 'NONE' || list.length <= 3" :disabled="scope.row.type !== 'NONE' || list.length <= 3"
@click.native="handlDel(scope.row.id)" @click.native="handlDel(scope.row.id)"
>删除</el-button> >{{ $t('pages.giftManagement.weekStar.action.delete') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -193,7 +193,7 @@ export default {
}, },
renderDataSuccess() { renderDataSuccess() {
this.$message({ this.$message({
message: 'Successful', message: this.$t('pages.giftManagement.weekStar.message.success'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()
@ -204,7 +204,7 @@ export default {
}, },
// //
handlDel(id) { handlDel(id) {
this.$confirm('确认删除吗?', '提示', { this.$confirm(this.$t('pages.giftManagement.weekStar.message.confirmDelete'), this.$t('pages.giftManagement.weekStar.message.tip'), {
type: 'warning' type: 'warning'
}) })
.then(() => { .then(() => {

View File

@ -16,31 +16,31 @@
v-loading="submitLoading" v-loading="submitLoading"
style="width: 400px; margin-left:50px;" style="width: 400px; margin-left:50px;"
:model="form" :model="form"
:rules="rules" :rules="localizedRules"
label-width="60px" label-width="60px"
> >
<el-form-item label="类型" prop="channelType"> <el-form-item :label="$t('pages.payChannel.form.type')" prop="channelType">
<el-select <el-select
v-model="form.channelType" v-model="form.channelType"
placeholder="渠道类型" :placeholder="$t('pages.payChannel.placeholder.channelType')"
class="filter-item" class="filter-item"
style="width:100%;" style="width:100%;"
> >
<el-option <el-option
v-for="(item, index) in payChannelGroups" v-for="(item, index) in payChannelGroups"
:key="index" :key="index"
:label="item.name" :label="getChannelTypeName(item.value)"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="Code" prop="channelCode"> <el-form-item label="Code" prop="channelCode">
<el-input v-model.trim="form.channelCode" :disabled="isEdit" type="text" placeholder="请输入渠道Code" /> <el-input v-model.trim="form.channelCode" :disabled="isEdit" type="text" :placeholder="$t('pages.payChannel.placeholder.enterChannelCode')" />
</el-form-item> </el-form-item>
<el-form-item label="名称" prop="channelName"> <el-form-item :label="$t('pages.payChannel.form.name')" prop="channelName">
<el-input v-model.trim="form.channelName" type="text" placeholder="请输入渠道名称" /> <el-input v-model.trim="form.channelName" type="text" :placeholder="$t('pages.payChannel.placeholder.enterChannelName')" />
</el-form-item> </el-form-item>
<el-form-item label="图标" prop="channelIcon"> <el-form-item :label="$t('pages.payChannel.form.icon')" prop="channelIcon">
<el-upload <el-upload
:disabled="iconUploadLoading" :disabled="iconUploadLoading"
:file-list="iconFileList" :file-list="iconFileList"
@ -57,8 +57,8 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('pages.payChannel.action.cancel') }}</el-button>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('pages.payChannel.action.save') }}</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
@ -77,7 +77,6 @@ export default {
} }
}, },
data() { data() {
var commonRequiredParams = [{ required: true, message: '必填参数不可为空', trigger: 'blur' }]
return { return {
payChannelGroups, payChannelGroups,
form: { form: {
@ -87,12 +86,6 @@ export default {
channelIcon: '', channelIcon: '',
channelType: '' channelType: ''
}, },
rules: {
channelCode: commonRequiredParams,
channelName: commonRequiredParams,
channelIcon: commonRequiredParams,
channelType: commonRequiredParams
},
submitLoading: false, submitLoading: false,
iconUploadLoading: false, iconUploadLoading: false,
iconFileList: [] iconFileList: []
@ -103,10 +96,19 @@ export default {
return !!(this.form && this.form.id) return !!(this.form && this.form.id)
}, },
title() { title() {
return this.form && this.form.id ? '修改渠道' : '添加渠道' return this.form && this.form.id ? this.$t('pages.payChannel.dialog.editTitle') : this.$t('pages.payChannel.dialog.addTitle')
}, },
formChannelIconNotEmpty() { formChannelIconNotEmpty() {
return !!(this.form.channelIcon && this.form.channelIcon.length > 0) return !!(this.form.channelIcon && this.form.channelIcon.length > 0)
},
localizedRules() {
const commonRequiredParams = [{ required: true, message: this.$t('pages.payChannel.validation.requiredField'), trigger: 'blur' }]
return {
channelCode: commonRequiredParams,
channelName: commonRequiredParams,
channelIcon: commonRequiredParams,
channelType: commonRequiredParams
}
} }
}, },
watch: { watch: {
@ -126,6 +128,11 @@ export default {
handleClose() { handleClose() {
this.$emit('close') this.$emit('close')
}, },
getChannelTypeName(type) {
const key = `pages.payChannel.channelTypes.${type}`
const translatedName = this.$t(key)
return translatedName === key ? type : translatedName
},
submitForm() { submitForm() {
const that = this const that = this
that.$refs.form.validate(valid => { that.$refs.form.validate(valid => {

View File

@ -4,7 +4,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.channelType" v-model="listQuery.channelType"
placeholder="渠道类型" :placeholder="$t('pages.payChannel.placeholder.channelType')"
class="filter-item" class="filter-item"
style="width: 200px;" style="width: 200px;"
clearable clearable
@ -13,19 +13,19 @@
<el-option <el-option
v-for="(item, index) in payChannelGroups" v-for="(item, index) in payChannelGroups"
:key="index" :key="index"
:label="item.name" :label="getChannelTypeName(item.value)"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
<el-input <el-input
v-model.trim="listQuery.channelCode" v-model.trim="listQuery.channelCode"
placeholder="渠道Code" :placeholder="$t('pages.payChannel.placeholder.channelCode')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<el-input <el-input
v-model.trim="listQuery.channelName" v-model.trim="listQuery.channelName"
placeholder="渠道名称" :placeholder="$t('pages.payChannel.placeholder.channelName')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
@ -35,7 +35,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.payChannel.action.search') }}
</el-button> </el-button>
<el-button <el-button
class="filter-item" class="filter-item"
@ -43,19 +43,19 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="createChannel" @click="createChannel"
> >
添加 {{ $t('pages.payChannel.action.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.payChannel.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="Code" prop="channelCode" align="center" /> <el-table-column label="Code" prop="channelCode" align="center" />
<el-table-column label="名称" prop="channelName" align="center" /> <el-table-column :label="$t('pages.payChannel.table.name')" prop="channelName" align="center" />
<el-table-column label="Icon" prop="channelIcon" align="center"> <el-table-column label="Icon" prop="channelIcon" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
@ -65,21 +65,21 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="类型" prop="channelType" align="center"> <el-table-column :label="$t('pages.payChannel.table.type')" prop="channelType" align="center">
<template> <template>
<template slot-scope="scope"> <template slot-scope="scope">
{{ payChannelGroupNames[scope.row.channelType].name }} {{ getChannelTypeName(scope.row.channelType) }}
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" prop="createTime" align="center"> <el-table-column :label="$t('pages.payChannel.table.createTime')" prop="createTime" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="80"> <el-table-column fixed="right" :label="$t('pages.payChannel.table.actions')" align="center" width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="clickEdit(scope.row)">编辑</el-button> <el-button type="text" @click="clickEdit(scope.row)">{{ $t('pages.payChannel.action.edit') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -157,6 +157,11 @@ export default {
that.selectedRow = row that.selectedRow = row
that.formEditVisible = true that.formEditVisible = true
}, },
getChannelTypeName(type) {
const key = `pages.payChannel.channelTypes.${type}`
const translatedName = this.$t(key)
return translatedName === key ? (this.payChannelGroupNames[type] && this.payChannelGroupNames[type].name) || type : translatedName
},
formEditSuccess(res) { formEditSuccess(res) {
this.selectedRow = {} this.selectedRow = {}
this.formEditVisible = false this.formEditVisible = false

View File

@ -2,7 +2,7 @@
<div class="add-channels"> <div class="add-channels">
<el-popover <el-popover
placement="bottom" placement="bottom"
title="添加渠道" :title="$t('pages.payFactory.dialog.addChannels')"
trigger="click" trigger="click"
@hide="hidePopover" @hide="hidePopover"
@show="isChange=false" @show="isChange=false"
@ -13,12 +13,12 @@
v-loading="channelLoading" v-loading="channelLoading"
style="text-align: left; display: inline-block" style="text-align: left; display: inline-block"
filterable filterable
:titles="['可选', '已选']" :titles="[$t('pages.payFactory.transfer.available'), $t('pages.payFactory.transfer.selected')]"
:format="{ :format="{
noChecked: '${total}', noChecked: '${total}',
hasChecked: '${checked}/${total}' hasChecked: '${checked}/${total}'
}" }"
:button-texts="['删除','开通']" :button-texts="[$t('pages.payFactory.action.delete'), $t('pages.payFactory.action.enable')]"
:props="{key: 'channelCode', label: 'channelName'}" :props="{key: 'channelCode', label: 'channelName'}"
:data="channels" :data="channels"
@change="handleChange" @change="handleChange"
@ -38,7 +38,7 @@
</div> </div>
</el-transfer> </el-transfer>
</div> </div>
<el-button slot="reference" type="text">添加渠道</el-button> <el-button slot="reference" type="text">{{ $t('pages.payFactory.action.addChannels') }}</el-button>
</el-popover> </el-popover>
</div> </div>
</template> </template>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="associated-channel"> <div class="associated-channel">
<el-dialog <el-dialog
title="关联渠道" :title="$t('pages.payFactory.dialog.associatedChannels')"
:visible="true" :visible="true"
:modal-append-to-body="true" :modal-append-to-body="true"
:append-to-body="true" :append-to-body="true"
@ -26,14 +26,14 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="渠道Code" prop="payChannel.channelCode" min-width="100" align="center" show-overflow-tooltip /> <el-table-column :label="$t('pages.payChannel.placeholder.channelCode')" prop="payChannel.channelCode" min-width="100" align="center" show-overflow-tooltip />
<el-table-column label="渠道名称" prop="payChannel.channelName" min-width="100" align="center" show-overflow-tooltip /> <el-table-column :label="$t('pages.payChannel.placeholder.channelName')" prop="payChannel.channelName" min-width="100" align="center" show-overflow-tooltip />
<el-table-column label="渠道类型" prop="payChannel.channelType" min-width="100" align="center" show-overflow-tooltip> <el-table-column :label="$t('pages.payChannel.placeholder.channelType')" prop="payChannel.channelType" min-width="100" align="center" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
{{ payChannelGroupNames[scope.row.payChannel.channelType].name }} {{ getChannelTypeName(scope.row.payChannel.channelType) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="渠道icon" align="center" show-overflow-tooltip min-width="100"> <el-table-column :label="$t('pages.payFactory.table.channelIcon')" align="center" show-overflow-tooltip min-width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<img :src="scope.row.payChannel.channelIcon" alt="icon" width="50"> <img :src="scope.row.payChannel.channelIcon" alt="icon" width="50">
</template> </template>
@ -107,6 +107,11 @@ export default {
handleClose() { handleClose() {
this.$emit('close') this.$emit('close')
}, },
getChannelTypeName(type) {
const key = `pages.payChannel.channelTypes.${type}`
const translatedName = this.$t(key)
return translatedName === key ? (this.payChannelGroupNames[type] && this.payChannelGroupNames[type].name) || type : translatedName
},
// @Deprecated // @Deprecated
changeFactoryChannelCode(row) { changeFactoryChannelCode(row) {
updateFactoryAssociatedChannels({ updateFactoryAssociatedChannels({

View File

@ -16,17 +16,17 @@
v-loading="submitLoading" v-loading="submitLoading"
style="width: 400px; margin-left:50px;" style="width: 400px; margin-left:50px;"
:model="form" :model="form"
:rules="rules" :rules="localizedRules"
label-width="60px" label-width="60px"
> >
<el-form-item label="Code" prop="factoryCode"> <el-form-item label="Code" prop="factoryCode">
<el-input v-model.trim="form.factoryCode" :disabled="isEdit" type="text" placeholder="请输入渠道Code" /> <el-input v-model.trim="form.factoryCode" :disabled="isEdit" type="text" :placeholder="$t('pages.payFactory.placeholder.enterFactoryCode')" />
</el-form-item> </el-form-item>
<el-form-item label="名称" prop="factoryName"> <el-form-item :label="$t('pages.payFactory.form.name')" prop="factoryName">
<el-input v-model.trim="form.factoryName" type="text" placeholder="请输入渠道名称" /> <el-input v-model.trim="form.factoryName" type="text" :placeholder="$t('pages.payFactory.placeholder.enterFactoryName')" />
</el-form-item> </el-form-item>
<el-form-item label="图标" prop="factoryIcon"> <el-form-item :label="$t('pages.payFactory.form.icon')" prop="factoryIcon">
<el-upload <el-upload
:disabled="iconUploadLoading" :disabled="iconUploadLoading"
:file-list="iconFileList" :file-list="iconFileList"
@ -43,8 +43,8 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('pages.payFactory.action.cancel') }}</el-button>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('pages.payFactory.action.save') }}</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
@ -63,7 +63,6 @@ export default {
} }
}, },
data() { data() {
var commonRequiredParams = [{ required: true, message: '必填参数不可为空', trigger: 'blur' }]
return { return {
payChannelGroups, payChannelGroups,
form: { form: {
@ -72,11 +71,6 @@ export default {
factoryName: '', factoryName: '',
factoryIcon: '' factoryIcon: ''
}, },
rules: {
factoryCode: commonRequiredParams,
factoryName: commonRequiredParams,
factoryIcon: commonRequiredParams
},
submitLoading: false, submitLoading: false,
iconUploadLoading: false, iconUploadLoading: false,
iconFileList: [] iconFileList: []
@ -87,10 +81,18 @@ export default {
return !!(this.form && this.form.id) return !!(this.form && this.form.id)
}, },
title() { title() {
return this.form && this.form.id ? '修改厂商' : '添加厂商' return this.form && this.form.id ? this.$t('pages.payFactory.dialog.editTitle') : this.$t('pages.payFactory.dialog.addTitle')
}, },
formFactoryIconNotEmpty() { formFactoryIconNotEmpty() {
return !!(this.form.factoryIcon && this.form.factoryIcon.length > 0) return !!(this.form.factoryIcon && this.form.factoryIcon.length > 0)
},
localizedRules() {
const commonRequiredParams = [{ required: true, message: this.$t('pages.payFactory.validation.requiredField'), trigger: 'blur' }]
return {
factoryCode: commonRequiredParams,
factoryName: commonRequiredParams,
factoryIcon: commonRequiredParams
}
} }
}, },
watch: { watch: {

View File

@ -4,13 +4,13 @@
<div class="filter-container"> <div class="filter-container">
<el-input <el-input
v-model.trim="listQuery.factoryCode" v-model.trim="listQuery.factoryCode"
placeholder="厂商code" :placeholder="$t('pages.payFactory.placeholder.factoryCode')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<el-input <el-input
v-model.trim="listQuery.factoryName" v-model.trim="listQuery.factoryName"
placeholder="厂商名称" :placeholder="$t('pages.payFactory.placeholder.factoryName')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
@ -20,7 +20,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.payFactory.action.search') }}
</el-button> </el-button>
<el-button <el-button
class="filter-item" class="filter-item"
@ -28,19 +28,19 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="createChannel" @click="createChannel"
> >
添加 {{ $t('pages.payFactory.action.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.payFactory.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="Code" prop="factoryCode" align="center" /> <el-table-column label="Code" prop="factoryCode" align="center" />
<el-table-column label="名称" prop="factoryName" align="center" /> <el-table-column :label="$t('pages.payFactory.table.name')" prop="factoryName" align="center" />
<el-table-column label="Icon" prop="factoryIcon" align="center"> <el-table-column label="Icon" prop="factoryIcon" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
@ -50,15 +50,15 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" prop="createTime" align="center"> <el-table-column :label="$t('pages.payFactory.table.createTime')" prop="createTime" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="150"> <el-table-column fixed="right" :label="$t('pages.payFactory.table.actions')" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="clickAssociatedChannels(scope.row)">关联渠道</el-button> <el-button type="text" @click="clickAssociatedChannels(scope.row)">{{ $t('pages.payFactory.action.associateChannels') }}</el-button>
<el-button type="text" @click="clickEdit(scope.row)">编辑</el-button> <el-button type="text" @click="clickEdit(scope.row)">{{ $t('pages.payFactory.action.edit') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -18,8 +18,8 @@
</div> </div>
<div class="text"> <div class="text">
<el-tag type="info">{{ userBaseInfo.userTypeName }}</el-tag> <el-tag type="info">{{ userBaseInfo.userTypeName }}</el-tag>
<el-tag>糖果:{{ balance.candyNumber || 0 }}</el-tag> <el-tag>{{ $t("pages.userDetailsDrawer.label.candy") }}: {{ balance.candyNumber || 0 }}</el-tag>
<el-tag>会员{{ balance.vipStatusName }} <el-tag>{{ $t("pages.userDetailsDrawer.label.vip") }}: {{ balance.vipStatusName }}
<span v-if="balance.vipEvent > 0">{{ balance.vipExpireTime }}</span> <span v-if="balance.vipEvent > 0">{{ balance.vipExpireTime }}</span>
</el-tag> </el-tag>
</div> </div>
@ -29,32 +29,32 @@
<el-container> <el-container>
<el-main> <el-main>
<div class="u-main-item"> <div class="u-main-item">
<h3>基本信息</h3> <h3>{{ $t("pages.userBaseInfo.sections.baseInfo") }}</h3>
<div class="content base-info"> <div class="content base-info">
<div class="base-info-item"> <div class="base-info-item">
<div>ID{{ userBaseInfo.id }}</div> <div>ID{{ userBaseInfo.id }}</div>
<div>国家<flag-icon :code="userBaseInfo.countryCode" size="26" :name="userBaseInfo.countryName" /></div> <div>{{ $t("pages.userBaseInfo.labels.country") }}<flag-icon :code="userBaseInfo.countryCode" size="26" :name="userBaseInfo.countryName" /></div>
<div>邮箱: {{ userRegisterInfo.email }}</div> <div>{{ $t("pages.userBaseInfo.labels.email") }}: {{ userRegisterInfo.email }}</div>
</div> </div>
<div class="base-info-item"> <div class="base-info-item">
<div>手机号码{{ userAuthInfo.cellphoneNumber }}</div> <div>{{ $t("pages.userDetailsDrawer.label.mobileNumber") }}{{ userAuthInfo.cellphoneNumber }}</div>
<div>FacebookId: {{ userAuthInfo.facebookid }}</div> <div>FacebookId: {{ userAuthInfo.facebookid }}</div>
<div>GoogleId: {{ userAuthInfo.googleId }}</div> <div>GoogleId: {{ userAuthInfo.googleId }}</div>
</div> </div>
<div class="base-info-item"> <div class="base-info-item">
<div>AppleId{{ userAuthInfo.appleId }}</div> <div>AppleId{{ userAuthInfo.appleId }}</div>
<div>注册平台: {{ userAuthInfo.originPlatform }}</div> <div>{{ $t("pages.userBaseInfo.labels.registerPlatform") }}: {{ userAuthInfo.originPlatform }}</div>
<div>机型: {{ userAuthInfo.originPhoneModel }}</div> <div>{{ $t("pages.userBaseInfo.labels.phoneModel") }}: {{ userAuthInfo.originPhoneModel }}</div>
</div> </div>
</div> </div>
<div class="content base-info"> <div class="content base-info">
<div class="base-info-item"> <div class="base-info-item">
<div>居住地址{{ userRegisterInfo.residentialAddress }}</div> <div>{{ $t("pages.userBaseInfo.labels.residentialAddress") }}{{ userRegisterInfo.residentialAddress }}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="u-main-item"> <div class="u-main-item">
<h3>照片墙</h3> <h3>{{ $t("pages.userDetailsDrawer.section.photoWall") }}</h3>
<div class="content photo-wall"> <div class="content photo-wall">
<div v-for="item in photoWalls" :key="item.id" class="photo-wall-item"> <div v-for="item in photoWalls" :key="item.id" class="photo-wall-item">
<el-image <el-image

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.luckyGiftGiveRecords.placeholder.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="changeSysOrigin" @change="changeSysOrigin"
@ -20,7 +20,7 @@
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.quantity" v-model="listQuery.quantity"
placeholder="数量" :placeholder="$t('pages.luckyGiftGiveRecords.placeholder.quantity')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
clearable clearable
@ -35,7 +35,7 @@
<el-select <el-select
v-model="listQuery.giftId" v-model="listQuery.giftId"
v-loading="loadingLuckyGift" v-loading="loadingLuckyGift"
placeholder="" :placeholder="$t('pages.luckyGiftGiveRecords.placeholder.gift')"
style="width:140px;" style="width:140px;"
class="filter-item" class="filter-item"
clearable clearable
@ -52,7 +52,7 @@
<span style="float: left;margin-left:10px">{{ item.label }}</span></el-option> <span style="float: left;margin-left:10px">{{ item.label }}</span></el-option>
</el-select> </el-select>
<div class="filter-item"> <div class="filter-item">
<div><account-input v-model="listQuery.userId" placeholder="用户id" type="USER" :sys-origin="listQuery.sysOrigin" /></div> <div><account-input v-model="listQuery.userId" :placeholder="$t('pages.luckyGiftGiveRecords.placeholder.userId')" type="USER" :sys-origin="listQuery.sysOrigin" /></div>
</div> </div>
<div class="filter-item"> <div class="filter-item">
<search-room-input @success="searchRoomSuccess" @fail="searchRoomFail" @load="loadSearchRoom" /> <search-room-input @success="searchRoomSuccess" @fail="searchRoomFail" @load="loadSearchRoom" />
@ -62,9 +62,9 @@
v-model="rangeDate" v-model="rangeDate"
value-format="timestamp" value-format="timestamp"
type="daterange" type="daterange"
range-separator="" :range-separator="$t('pages.luckyGiftGiveRecords.word.to')"
start-placeholder="开始日期" :start-placeholder="$t('pages.luckyGiftGiveRecords.placeholder.startDate')"
end-placeholder="结束日期" :end-placeholder="$t('pages.luckyGiftGiveRecords.placeholder.endDate')"
/> />
</div> </div>
<el-button <el-button
@ -73,44 +73,44 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
<div v-loading="countLoading"> <div v-loading="countLoading">
<div slot="title" class="count-item"> <div slot="title" class="count-item">
<i> <i>
<strong class="strong-style"> 筛选结果汇总</strong> <strong class="strong-style">{{ $t('pages.luckyGiftGiveRecords.summary.title') }}</strong>
</i> </i>
<i> <i>
<strong class="strong-style"> 参加人数: {{ gameLuckyGiftCount.userCount || '-' }}</strong> <strong class="strong-style">{{ $t('pages.luckyGiftGiveRecords.summary.userCount') }}: {{ gameLuckyGiftCount.userCount || '-' }}</strong>
</i> </i>
<i> <i>
<strong class="strong-style"> 用户支出糖果数: {{ gameLuckyGiftCount.userExpendCount || '-' }}</strong> <strong class="strong-style">{{ $t('pages.luckyGiftGiveRecords.summary.userExpendCount') }}: {{ gameLuckyGiftCount.userExpendCount || '-' }}</strong>
</i> </i>
<i> <i>
<strong class="strong-style"> 出奖糖果数: {{ gameLuckyGiftCount.awardCount || '-' }}</strong> <strong class="strong-style">{{ $t('pages.luckyGiftGiveRecords.summary.awardCount') }}: {{ gameLuckyGiftCount.awardCount || '-' }}</strong>
</i> </i>
</div> </div>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.luckyGiftGiveRecords.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="归属系统" align="center" min-width="50"> <el-table-column :label="$t('pages.luckyGiftGiveRecords.table.system')" align="center" min-width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户" align="center" min-width="100"> <el-table-column :label="$t('pages.luckyGiftGiveRecords.table.user')" align="center" min-width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="房间" align="center"> <el-table-column :label="$t('pages.luckyGiftGiveRecords.table.room')" align="center" min-width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="room-profile flex-l"> <div class="room-profile flex-l">
<div class="avatar" style="margin: auto 0.2rem;"> <div class="avatar" style="margin: auto 0.2rem;">
@ -137,8 +137,8 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="giftId" label="礼物Id" align="center" min-width="100" /> <el-table-column prop="giftId" :label="$t('pages.luckyGiftGiveRecords.table.giftId')" align="center" min-width="100" />
<el-table-column label="封面" align="center"> <el-table-column :label="$t('pages.luckyGiftGiveRecords.table.cover')" align="center" min-width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
style="width: 50px; height: 50px" style="width: 50px; height: 50px"
@ -147,18 +147,18 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="payAmount" label="支出金币" align="center" min-width="100" /> <el-table-column prop="payAmount" :label="$t('pages.luckyGiftGiveRecords.table.payAmount')" align="center" min-width="110" />
<el-table-column prop="quantity" label="数量" align="center" min-width="100" /> <el-table-column prop="quantity" :label="$t('pages.luckyGiftGiveRecords.table.quantity')" align="center" min-width="100" />
<el-table-column prop="giftCombos" label="连击礼物次数" align="center" min-width="100" /> <el-table-column prop="giftCombos" :label="$t('pages.luckyGiftGiveRecords.table.giftCombos')" align="center" min-width="130" />
<el-table-column label="累计送礼次数" align="center"> <el-table-column :label="$t('pages.luckyGiftGiveRecords.table.totalGiftCount')" align="center" min-width="130">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.userGiftIncCount">{{ scope.row.userGiftIncCount }}/</span> <span v-if="scope.row.userGiftIncCount">{{ scope.row.userGiftIncCount }}/</span>
<span v-else>{{ scope.row.sysGiftIncCount }}</span> <span v-else>{{ scope.row.sysGiftIncCount }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="multiple" label="出奖倍数" align="center" min-width="100" /> <el-table-column prop="multiple" :label="$t('pages.luckyGiftGiveRecords.table.multiple')" align="center" min-width="100" />
<el-table-column prop="awardAmount" label="出奖金币数" align="center" min-width="100" /> <el-table-column prop="awardAmount" :label="$t('pages.luckyGiftGiveRecords.table.awardAmount')" align="center" min-width="110" />
<el-table-column prop="createTime" label="创建时间" align="center" width="200"> <el-table-column prop="createTime" :label="$t('pages.luckyGiftGiveRecords.table.createTime')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>

View File

@ -2,7 +2,7 @@
<div class="app-container"> <div class="app-container">
<el-dialog <el-dialog
v-loading="listLoading" v-loading="listLoading"
title="概率配置" :title="$t('pages.luckyGiftStandardConfig.probability.dialogTitle')"
:visible="isDialog" :visible="isDialog"
:modal-append-to-body="true" :modal-append-to-body="true"
:append-to-body="true" :append-to-body="true"
@ -14,43 +14,43 @@
<div style="display: inline-flex; flex-direction: row; justify-content: space-around;"> <div style="display: inline-flex; flex-direction: row; justify-content: space-around;">
<el-card v-for="(item, index) in configList" :key="index" class="box-card" style="width:500px;margin: 0rem 10px;margin-bottom: 20px;"> <el-card v-for="(item, index) in configList" :key="index" class="box-card" style="width:500px;margin: 0rem 10px;margin-bottom: 20px;">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>数量:{{ item.giftQuantity }}</span> <span>{{ $t('pages.luckyGiftStandardConfig.probability.quantity', { quantity: item.giftQuantity }) }}</span>
<el-button style="float: right; padding: 3px 0" type="text" @click="saveData(item)">保存</el-button> <el-button style="float: right; padding: 3px 0" type="text" @click="saveData(item)">{{ $t('pages.luckyGiftStandardConfig.action.save') }}</el-button>
</div> </div>
<div style="padding-bottom: 20px;"> <div style="padding-bottom: 20px;">
<el-alert <el-alert
v-if="10000 - item.sumProbability > 0" v-if="10000 - item.sumProbability > 0"
:title="'概率还差' + (10000 - item.sumProbability) + '凑满10000'" :title="$t('pages.luckyGiftStandardConfig.probability.remaining', { value: 10000 - item.sumProbability })"
type="warning" type="warning"
:closable="false" :closable="false"
/> />
<el-alert <el-alert
v-else-if="10000 == item.sumProbability" v-else-if="10000 == item.sumProbability"
title="概率已拼凑完整" :title="$t('pages.luckyGiftStandardConfig.probability.complete')"
type="success" type="success"
:closable="false" :closable="false"
/> />
<el-alert <el-alert
v-else v-else
:title="'概率已超过' + (item.sumProbability - 10000) + ',请调整!'" :title="$t('pages.luckyGiftStandardConfig.probability.exceeded', { value: item.sumProbability - 10000 })"
type="error" type="error"
:closable="false" :closable="false"
/> />
</div> </div>
<div class="gift-probability-form"> <div class="gift-probability-form">
<el-form :ref="'configList' + index" :model="item" label-width="140px"> <el-form :ref="'configList' + index" :model="item" label-width="140px">
<el-form-item label="用户亏钱连击次数" class="gift-probability-label"> <el-form-item :label="$t('pages.luckyGiftStandardConfig.probability.comboIncrements')" class="gift-probability-label">
<el-input v-model.trim="item.comboIncrements" class="gift-probability-config" oninput="value=value.replace(/[^0-9.]/g,'')" /> <el-input v-model.trim="item.comboIncrements" class="gift-probability-config" oninput="value=value.replace(/[^0-9.]/g,'')" />
</el-form-item> </el-form-item>
<el-form-item label="累计送礼次数" class="gift-probability-label"> <el-form-item :label="$t('pages.luckyGiftStandardConfig.probability.giftGiveTotal')" class="gift-probability-label">
<el-input v-model.trim="item.giftGiveTotal" class="gift-probability-config" oninput="value=value.replace(/[^0-9.]/g,'')" /> <el-input v-model.trim="item.giftGiveTotal" class="gift-probability-config" oninput="value=value.replace(/[^0-9.]/g,'')" />
</el-form-item> </el-form-item>
<el-form-item label="总签数" class="gift-probability-label"> <el-form-item :label="$t('pages.luckyGiftStandardConfig.probability.signTotal')" class="gift-probability-label">
<el-input v-model.trim="item.signTotal" class="gift-probability-config" oninput="value=value.replace(/[^0-9.]/g,'')" /> <el-input v-model.trim="item.signTotal" class="gift-probability-config" oninput="value=value.replace(/[^0-9.]/g,'')" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<el-divider>概率</el-divider> <el-divider>{{ $t('pages.luckyGiftStandardConfig.probability.probability') }}</el-divider>
<div class="luck-gift-probability-details-config-edit"> <div class="luck-gift-probability-details-config-edit">
<div class="form-edit"> <div class="form-edit">
<el-form :ref="'formInfo' + index" :model="item.formInfo" label-width="80px" style="margin-right:50px;"> <el-form :ref="'formInfo' + index" :model="item.formInfo" label-width="80px" style="margin-right:50px;">
@ -66,9 +66,9 @@
cursor:pointer;line-height:30px;align-items: center;" cursor:pointer;line-height:30px;align-items: center;"
> >
<div class="sort" style="width: 20px;">{{ index1 + 1 }}</div> <div class="sort" style="width: 20px;">{{ index1 + 1 }}</div>
<div style="width: 100px;margin-left: 0.3rem;"><el-input v-model.trim="item1.multiple" v-number placeholder="倍数" /></div> <div style="width: 100px;margin-left: 0.3rem;"><el-input v-model.trim="item1.multiple" v-number :placeholder="$t('pages.luckyGiftStandardConfig.probability.multiple')" /></div>
<div style="width: 130px;color:#f78e8e;margin-left: 0.3rem;"><el-input v-model.trim="item1.probability" oninput="value=value.replace(/[^0-9.]/g,'')" placeholder="概率" @input="calculateProbability(item)" /></div> <div style="width: 130px;color:#f78e8e;margin-left: 0.3rem;"><el-input v-model.trim="item1.probability" oninput="value=value.replace(/[^0-9.]/g,'')" :placeholder="$t('pages.luckyGiftStandardConfig.probability.probability')" @input="calculateProbability(item)" /></div>
<div style="width: 130px;margin-left: 0.3rem;">签数:{{ parseInt(item1.probability / 10000 * item.signTotal) }}</div> <div style="width: 130px;margin-left: 0.3rem;">{{ $t('pages.luckyGiftStandardConfig.probability.signCount', { count: parseInt(item1.probability / 10000 * item.signTotal) }) }}</div>
<div style="width: 30px;text-align: left;"><i class="del el-icon-delete-solid" @click="deleteUpdateItem(item,index1)" /></div> <div style="width: 30px;text-align: left;"><i class="del el-icon-delete-solid" @click="deleteUpdateItem(item,index1)" /></div>
</div> </div>
</div> </div>
@ -86,17 +86,17 @@
<div style="width: 110px;"> <div style="width: 110px;">
<el-form-item <el-form-item
:prop="'tmpConfigList.' + index2 + '.multiple'" :prop="'tmpConfigList.' + index2 + '.multiple'"
:rules="{ required: true, message: '不可为空', trigger: 'blur'}" :rules="{ required: true, message: $t('pages.luckyGiftStandardConfig.validation.requiredField'), trigger: 'blur'}"
> >
<span><el-input v-model="item2.multiple" v-number placeholder="倍数" oninput="value=value.replace(/[^0-9.]/g,'')" /></span> <span><el-input v-model="item2.multiple" v-number :placeholder="$t('pages.luckyGiftStandardConfig.probability.multiple')" oninput="value=value.replace(/[^0-9.]/g,'')" /></span>
</el-form-item> </el-form-item>
</div> </div>
<div style="width: 215px; margin: 0rem 0.1rem;"> <div style="width: 215px; margin: 0rem 0.1rem;">
<el-form-item <el-form-item
:prop="'tmpConfigList.' + index2 + '.probability'" :prop="'tmpConfigList.' + index2 + '.probability'"
:rules="{ required: true, message: '不可为空', trigger: 'blur'}" :rules="{ required: true, message: $t('pages.luckyGiftStandardConfig.validation.requiredField'), trigger: 'blur'}"
> >
<span><el-input v-model="item2.probability" placeholder="概率(1000就是10%)" oninput="value=value.replace(/[^0-9.]/g,'')" /></span> <span><el-input v-model="item2.probability" :placeholder="$t('pages.luckyGiftStandardConfig.probability.probabilityExample')" oninput="value=value.replace(/[^0-9.]/g,'')" /></span>
</el-form-item> </el-form-item>
</div> </div>
<div style="width: 100px;"> <div style="width: 100px;">
@ -109,7 +109,7 @@
</div> </div>
<div> <div>
<el-button type="text" @click="addContent(index, item)"><i class="el-icon-circle-plus" />添加概率详情</el-button> <el-button type="text" @click="addContent(index, item)"><i class="el-icon-circle-plus" />{{ $t('pages.luckyGiftStandardConfig.probability.addDetail') }}</el-button>
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -118,9 +118,9 @@
</el-card> </el-card>
</div> </div>
<el-alert <el-alert
title="幸运礼物规则-必读" :title="$t('pages.luckyGiftStandardConfig.probability.ruleTitle')"
type="warning" type="warning"
description="规格概率配置5个数量配置需要配置完整才可关联幸运礼物" :description="$t('pages.luckyGiftStandardConfig.probability.ruleDescription')"
show-icon show-icon
/> />
</el-dialog> </el-dialog>
@ -238,19 +238,19 @@ export default {
saveData(item) { saveData(item) {
const that = this const that = this
if (!item.comboIncrements || item.comboIncrements < 0) { if (!item.comboIncrements || item.comboIncrements < 0) {
that.$message.error('连击次数不能为负数') that.$message.error(this.$t('pages.luckyGiftStandardConfig.message.comboIncrementsInvalid'))
return return
} }
if (!item.giftGiveTotal || item.giftGiveTotal < 0) { if (!item.giftGiveTotal || item.giftGiveTotal < 0) {
that.$message.error('累计送礼次数不能为负数') that.$message.error(this.$t('pages.luckyGiftStandardConfig.message.giftGiveTotalInvalid'))
return return
} }
if (!item.signTotal || item.signTotal <= 0) { if (!item.signTotal || item.signTotal <= 0) {
that.$message.error('总签数必须为大于的正整数') that.$message.error(this.$t('pages.luckyGiftStandardConfig.message.signTotalInvalid'))
return return
} }
if (item.formInfo.probabilityDetailsConfigList.length <= 0) { if (item.formInfo.probabilityDetailsConfigList.length <= 0) {
that.$message.error('请配置概率详细') that.$message.error(this.$t('pages.luckyGiftStandardConfig.message.probabilityDetailRequired'))
return return
} }
var probability_ = 0 var probability_ = 0
@ -262,15 +262,15 @@ export default {
signTotal_ += parseInt((detailsConfig.probability / 10000) * item.signTotal) signTotal_ += parseInt((detailsConfig.probability / 10000) * item.signTotal)
}) })
if (probability_ !== 10000) { if (probability_ !== 10000) {
that.$message.error('概率必须等于10000') that.$message.error(this.$t('pages.luckyGiftStandardConfig.message.probabilityMustEqual'))
return return
} }
if (parseInt(signTotal_) !== parseInt(item.signTotal)) { if (parseInt(signTotal_) !== parseInt(item.signTotal)) {
that.$message.error('明细签数(' + signTotal_ + ')必须为等于总签数(' + item.signTotal + ')') that.$message.error(this.$t('pages.luckyGiftStandardConfig.message.signCountMustEqual', { detail: signTotal_, total: item.signTotal }))
return return
} }
if (probabilityValue === 0) { if (probabilityValue === 0) {
that.$message.error('概率必须大于0') that.$message.error(this.$t('pages.luckyGiftStandardConfig.message.probabilityMustBePositive'))
return return
} }
that.listLoading = true that.listLoading = true
@ -283,16 +283,16 @@ export default {
that.submitDataInfo.gameLuckyGiftProbability.sort = item.sort that.submitDataInfo.gameLuckyGiftProbability.sort = item.sort
that.submitDataInfo.gameLuckyGiftProbability.sysOrigin = that.listQuery.sysOrigin that.submitDataInfo.gameLuckyGiftProbability.sysOrigin = that.listQuery.sysOrigin
that.submitDataInfo.gameLuckyGiftProbability.standardId = that.listQuery.standardId that.submitDataInfo.gameLuckyGiftProbability.standardId = that.listQuery.standardId
this.$confirm('确认保存吗?', '如果继续保存,将会清除正在执行的数据!', { this.$confirm(this.$t('pages.luckyGiftStandardConfig.confirm.save'), this.$t('pages.luckyGiftStandardConfig.confirm.saveTitle'), {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
addLuckyGiftProbabilityInfoConfig(that.submitDataInfo).then(res => { addLuckyGiftProbabilityInfoConfig(that.submitDataInfo).then(res => {
that.listLoading = false that.listLoading = false
that.$message.success('保存成功') that.$message.success(this.$t('pages.luckyGiftStandardConfig.message.saveSuccess'))
this.probabilityConfig() this.probabilityConfig()
}).catch(er => { }).catch(er => {
that.listLoading = false that.listLoading = false
that.$message.error('保存失败') that.$message.error(this.$t('pages.luckyGiftStandardConfig.message.saveFailed'))
this.probabilityConfig() this.probabilityConfig()
}) })
}).catch(() => { }).catch(() => {

View File

@ -1,17 +1,17 @@
<template> <template>
<div class="lucky-gift"> <div class="lucky-gift">
<div v-loading="submitLoading"> <div v-loading="submitLoading">
<h2>幸运礼物规则配置</h2> <h2>{{ $t('pages.luckyGiftRuleConfig.title') }}</h2>
<el-form ref="form" :model="form" :rules="rules" label-width="120px" class="rule-config" label-position="left"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" class="rule-config" label-position="left">
<!--<el-alert <!--<el-alert
title="接收人是【主播】则目标与钻石分成比例如下;是【其他用户】则钻石分成比例如下" title="If the recipient is a host, target and diamond sharing ratios follow this rule; if the recipient is another user, diamond sharing ratios follow this rule."
type="warning" type="warning"
:closable="false" :closable="false"
/> />
<el-form-item label-width="0px"> <el-form-item label-width="0px">
<el-col class="col-margin"> <el-col class="col-margin">
<el-form-item label="接收人分成比例" prop="giftShareRatio" label-width="135px"> <el-form-item label="Recipient Share Ratio" prop="giftShareRatio" label-width="135px">
<el-input v-model.trim="form.giftShareRatio" type="text" class="gift-rule-input" placeholder="接收方分成比例" /> <el-input v-model.trim="form.giftShareRatio" type="text" class="gift-rule-input" placeholder="Recipient share ratio" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col style="width:20px"> <el-col style="width:20px">
@ -20,12 +20,12 @@
</el-form-item>--> </el-form-item>-->
<el-form-item label-width="0px"> <el-form-item label-width="0px">
<el-col class="col-margin"> <el-col class="col-margin">
<el-form-item label="Win图标" prop="winStart" label-width="135px"> <el-form-item :label="$t('pages.luckyGiftRuleConfig.form.winIcon')" prop="winStart" label-width="135px">
<el-input v-model.trim="form.winStart" type="text" class="gift-rule-input" /> <el-input v-model.trim="form.winStart" type="text" class="gift-rule-input" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="col-span"> <el-col class="col-span">
<span class="span-padding">(包含)~</span> <span class="span-padding">{{ $t('pages.luckyGiftRuleConfig.word.includeRangeStart') }}</span>
</el-col> </el-col>
<el-col class="col-margin-two"> <el-col class="col-margin-two">
<el-form-item prop="winEnd"> <el-form-item prop="winEnd">
@ -33,17 +33,17 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="col-margin"> <el-col class="col-margin">
<span class="span-padding">(包含)</span> <span class="span-padding">{{ $t('pages.luckyGiftRuleConfig.word.includeRangeEnd') }}</span>
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label-width="0px"> <el-form-item label-width="0px">
<el-col class="col-margin"> <el-col class="col-margin">
<el-form-item label="BigWin图标" prop="bigWinStart" label-width="135px"> <el-form-item :label="$t('pages.luckyGiftRuleConfig.form.bigWinIcon')" prop="bigWinStart" label-width="135px">
<el-input v-model.trim="form.bigWinStart" type="text" class="gift-rule-input" /> <el-input v-model.trim="form.bigWinStart" type="text" class="gift-rule-input" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="col-span"> <el-col class="col-span">
<span class="span-padding">(包含)~</span> <span class="span-padding">{{ $t('pages.luckyGiftRuleConfig.word.includeRangeStart') }}</span>
</el-col> </el-col>
<el-col class="col-margin-two"> <el-col class="col-margin-two">
<el-form-item prop="bigWinEnd"> <el-form-item prop="bigWinEnd">
@ -51,17 +51,17 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="col-margin"> <el-col class="col-margin">
<span class="span-padding">(包含)</span> <span class="span-padding">{{ $t('pages.luckyGiftRuleConfig.word.includeRangeEnd') }}</span>
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label-width="0px"> <el-form-item label-width="0px">
<el-col class="col-margin"> <el-col class="col-margin">
<el-form-item label="SuperWin图标" prop="superStart" label-width="135px"> <el-form-item :label="$t('pages.luckyGiftRuleConfig.form.superWinIcon')" prop="superStart" label-width="135px">
<el-input v-model.trim="form.superStart" type="text" class="gift-rule-input" /> <el-input v-model.trim="form.superStart" type="text" class="gift-rule-input" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="col-span"> <el-col class="col-span">
<span class="span-padding">(包含)~</span> <span class="span-padding">{{ $t('pages.luckyGiftRuleConfig.word.includeRangeStart') }}</span>
</el-col> </el-col>
<el-col class="col-margin-two"> <el-col class="col-margin-two">
<el-form-item prop="superEnd"> <el-form-item prop="superEnd">
@ -69,12 +69,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="col-span"> <el-col class="col-span">
<span class="span-padding">(包含)</span> <span class="span-padding">{{ $t('pages.luckyGiftRuleConfig.word.includeRangeEnd') }}</span>
</el-col> </el-col>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" style="padding-left:20px"> <div slot="footer" style="padding-left:20px">
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('pages.luckyGiftRuleConfig.action.save') }}</el-button>
</div> </div>
</div> </div>
</div> </div>
@ -86,9 +86,10 @@ import { mapGetters } from 'vuex'
export default { export default {
name: 'LuckyGiftRuleConfig', name: 'LuckyGiftRuleConfig',
data() { data() {
const t = this.$t.bind(this)
function commonFormRules() { function commonFormRules() {
return [ return [
{ required: true, message: '必填字段', trigger: 'blur' } { required: true, message: t('pages.luckyGiftRuleConfig.validation.requiredField'), trigger: 'blur' }
] ]
} }
return { return {

View File

@ -4,7 +4,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.luckyGiftStandardConfig.filter.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -20,7 +20,7 @@
</el-option> </el-option>
</el-select> </el-select>
<div class="filter-item"> <div class="filter-item">
<el-input v-model="listQuery.remarks" placeholder="名称" /> <el-input v-model="listQuery.remarks" :placeholder="$t('pages.luckyGiftStandardConfig.filter.name')" />
</div> </div>
<el-button <el-button
:loading="searchLoading" :loading="searchLoading"
@ -29,7 +29,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.luckyGiftStandardConfig.action.search') }}
</el-button> </el-button>
<el-button <el-button
class="filter-item" class="filter-item"
@ -38,28 +38,28 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleAdd" @click="handleAdd"
> >
添加 {{ $t('pages.luckyGiftStandardConfig.action.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.luckyGiftStandardConfig.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="sysOrigin" label="平台" align="center" /> <el-table-column prop="sysOrigin" :label="$t('pages.luckyGiftStandardConfig.table.platform')" align="center" />
<el-table-column prop="remarks" label="名称" /> <el-table-column prop="remarks" :label="$t('pages.luckyGiftStandardConfig.table.name')" />
<el-table-column prop="createTime" label="创建时间" align="center" width="200"> <el-table-column prop="createTime" :label="$t('pages.luckyGiftStandardConfig.table.createdAt')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="380"> <el-table-column fixed="right" :label="$t('pages.luckyGiftStandardConfig.table.actions')" align="center" width="380">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click.native="hanldeEidt(scope.row)">编辑</el-button> <el-button type="text" @click.native="hanldeEidt(scope.row)">{{ $t('pages.luckyGiftStandardConfig.action.edit') }}</el-button>
<el-button type="text" @click.native="handleProbabilityConfigList(scope.row)">概率配置</el-button> <el-button type="text" @click.native="handleProbabilityConfigList(scope.row)">{{ $t('pages.luckyGiftStandardConfig.action.probabilityConfig') }}</el-button>
<el-button type="text" @click.native="handlDel(scope.row)">删除</el-button> <el-button type="text" @click.native="handlDel(scope.row)">{{ $t('pages.luckyGiftStandardConfig.action.delete') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -170,16 +170,16 @@ export default {
this.standardConfigEditVisible = false this.standardConfigEditVisible = false
this.renderData(event === 'create') this.renderData(event === 'create')
}, },
// // Delete
handlDel(row) { handlDel(row) {
this.$confirm('确认删除吗?', '提示', { this.$confirm(this.$t('pages.luckyGiftStandardConfig.confirm.delete'), this.$t('pages.luckyGiftStandardConfig.confirm.title'), {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.listLoading = true this.listLoading = true
deleteStandardConfig(row.id).then((res) => { deleteStandardConfig(row.id).then((res) => {
this.listLoading = false this.listLoading = false
this.$message({ this.$message({
message: '删除成功', message: this.$t('pages.luckyGiftStandardConfig.message.deleteSuccess'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()

View File

@ -18,10 +18,10 @@
:model="formData" :model="formData"
style="width: 400px; margin-left:50px;" style="width: 400px; margin-left:50px;"
> >
<el-form-item label="系统" prop="sysOrigin"> <el-form-item :label="$t('pages.luckyGiftStandardConfig.form.system')" prop="sysOrigin">
<el-select <el-select
v-model="formData.sysOrigin" v-model="formData.sysOrigin"
placeholder="选择系统" :placeholder="$t('pages.luckyGiftStandardConfig.placeholder.selectSystem')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -36,21 +36,21 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="名称" prop="remarks"> <el-form-item :label="$t('pages.luckyGiftStandardConfig.form.name')" prop="remarks">
<el-input v-model.trim="formData.remarks" placeholder="名称" /> <el-input v-model.trim="formData.remarks" :placeholder="$t('pages.luckyGiftStandardConfig.placeholder.name')" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="handleClose"> <el-button @click="handleClose">
取消 {{ $t('pages.luckyGiftStandardConfig.action.cancel') }}
</el-button> </el-button>
<el-button <el-button
:loading="submitLoading" :loading="submitLoading"
type="primary" type="primary"
@click="handleSubmit" @click="handleSubmit"
> >
提交 {{ $t('pages.luckyGiftStandardConfig.action.submit') }}
</el-button> </el-button>
</div> </div>
</el-dialog> </el-dialog>
@ -79,9 +79,6 @@ export default {
sysOrigin: '', sysOrigin: '',
remarks: '' remarks: ''
}, },
rules: {
sysOrigin: [{ required: true, message: '必填项不可为空', trigger: 'blur' }]
},
submitLoading: false submitLoading: false
} }
}, },
@ -90,7 +87,14 @@ export default {
return this.updateData === null return this.updateData === null
}, },
title() { title() {
return this.isAdd ? `添加(${this.sysOrigin})` : `修改(${this.updateData.sysOrigin})` const system = this.isAdd ? this.sysOrigin : this.updateData.sysOrigin
const key = this.isAdd ? 'pages.luckyGiftStandardConfig.dialog.create' : 'pages.luckyGiftStandardConfig.dialog.edit'
return this.$t(key, { system })
},
rules() {
return {
sysOrigin: [{ required: true, message: this.$t('pages.luckyGiftStandardConfig.validation.requiredField'), trigger: 'blur' }]
}
}, },
...mapGetters(['permissionsSysOriginPlatforms']) ...mapGetters(['permissionsSysOriginPlatforms'])
}, },

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="归属系统" :placeholder="$t('pages.roomBlacklist.placeholder.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -19,13 +19,13 @@
</el-option> </el-option>
</el-select> </el-select>
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.userId" :sys-origin="listQuery.sysOrigin" placeholder="被拉黑用户ID" /> <account-input v-model="listQuery.userId" :sys-origin="listQuery.sysOrigin" :placeholder="$t('pages.roomBlacklist.placeholder.blockedUserId')" />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.createUserId" :sys-origin="listQuery.sysOrigin" placeholder="操作用户ID" /> <account-input v-model="listQuery.createUserId" :sys-origin="listQuery.sysOrigin" :placeholder="$t('pages.roomBlacklist.placeholder.operatorUserId')" />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.roomId" :sys-origin="listQuery.sysOrigin" placeholder="房间账号" type="ROOM" /> <account-input v-model="listQuery.roomId" :sys-origin="listQuery.sysOrigin" :placeholder="$t('pages.roomBlacklist.placeholder.roomAccount')" type="ROOM" />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<el-date-picker <el-date-picker
@ -33,9 +33,9 @@
value-format="timestamp" value-format="timestamp"
type="datetimerange" type="datetimerange"
:picker-options="pickerOptions" :picker-options="pickerOptions"
range-separator="" :range-separator="$t('pages.roomBlacklist.word.to')"
start-placeholder="发送日期开始" :start-placeholder="$t('pages.roomBlacklist.placeholder.startDate')"
end-placeholder="发送日期结束" :end-placeholder="$t('pages.roomBlacklist.placeholder.endDate')"
/> />
</div> </div>
<el-button <el-button
@ -45,28 +45,28 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.roomBlacklist.action.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.roomBlacklist.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="操作用户" align="center" show-overflow-tooltip min-width="220"> <el-table-column :label="$t('pages.roomBlacklist.table.operatorUser')" align="center" show-overflow-tooltip min-width="220">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" :tag-name="scope.row.createUserRoles" /> <user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" :tag-name="scope.row.createUserRoles" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="被拉黑用户" align="center" show-overflow-tooltip min-width="220"> <el-table-column :label="$t('pages.roomBlacklist.table.blockedUser')" align="center" show-overflow-tooltip min-width="220">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.beUserProfile" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.beUserProfile" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="房间" align="center" min-width="200"> <el-table-column :label="$t('pages.roomBlacklist.table.room')" align="center" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="room-profile flex-l"> <div class="room-profile flex-l">
<div class="avatar"> <div class="avatar">
@ -90,20 +90,20 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="expiredTime" label="过期时间" align="center" width="200"> <el-table-column prop="expiredTime" :label="$t('pages.roomBlacklist.table.expiredTime')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.expiredTime | dateFormat }} {{ scope.row.expiredTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center" width="200"> <el-table-column prop="createTime" :label="$t('pages.roomBlacklist.table.createTime')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div v-if="listQuery.lastId" class="load-more"> <div v-if="listQuery.lastId" class="load-more">
<span v-if="notData">已加载全部</span> <span v-if="notData">{{ $t('pages.roomBlacklist.word.allLoaded') }}</span>
<el-button v-else size="mini" :disabled="loadMoreLoading" :loading="loadMoreLoading" @click="clickLoadMore">加载更多</el-button> <el-button v-else size="mini" :disabled="loadMoreLoading" :loading="loadMoreLoading" @click="clickLoadMore">{{ $t('pages.roomBlacklist.action.loadMore') }}</el-button>
</div> </div>
<room-deatils-drawer <room-deatils-drawer

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.status" v-model="listQuery.status"
placeholder="状态" :placeholder="$t('pages.cpApplicationLogs.placeholder.status')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -11,15 +11,15 @@
<el-option <el-option
v-for="(item, index) in status" v-for="(item, index) in status"
:key="index" :key="index"
:label="item.name" :label="$t(`pages.cpApplicationLogs.status.${item.value}`)"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.sendApplyUserId" placeholder="发送用户ID" /> <account-input v-model="listQuery.sendApplyUserId" :placeholder="$t('pages.cpApplicationLogs.placeholder.senderId')" />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.acceptApplyUserId" placeholder="接收用户ID" /> <account-input v-model="listQuery.acceptApplyUserId" :placeholder="$t('pages.cpApplicationLogs.placeholder.receiverId')" />
</div> </div>
<el-button <el-button
class="filter-item" class="filter-item"
@ -27,36 +27,36 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.cpApplicationLogs.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="发送用户" align="center" min-width="200"> <el-table-column :label="$t('pages.cpApplicationLogs.table.sender')" align="center" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.sendApplyUser" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.sendApplyUser" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="接收用户" align="center" min-width="200"> <el-table-column :label="$t('pages.cpApplicationLogs.table.receiver')" align="center" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.acceptApplyUser" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.acceptApplyUser" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="金额" prop="applyConsumeGold" align="center" min-width="100" /> <el-table-column :label="$t('pages.cpApplicationLogs.table.amount')" prop="applyConsumeGold" align="center" min-width="100" />
<el-table-column label="状态" prop="ip" align="center" min-width="100"> <el-table-column :label="$t('pages.cpApplicationLogs.table.status')" prop="ip" align="center" min-width="100">
<template slot-scope="scope"> <template slot-scope="scope">
{{ statusMap[scope.row.status] ? statusMap[scope.row.status].name : '?' }} {{ statusMap[scope.row.status] ? $t(`pages.cpApplicationLogs.status.${scope.row.status}`) : '?' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="时间" width="200" align="center"> <el-table-column :label="$t('pages.cpApplicationLogs.table.time')" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div>创建:{{ scope.row.createTime | dateFormat }}</div> <div>{{ $t('pages.cpApplicationLogs.word.created') }}: {{ scope.row.createTime | dateFormat }}</div>
<div>修改:{{ scope.row.updateTime | dateFormat }}</div> <div>{{ $t('pages.cpApplicationLogs.word.updated') }}: {{ scope.row.updateTime | dateFormat }}</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -92,11 +92,11 @@ export default {
}, },
listLoading: true, listLoading: true,
status: [ status: [
{ value: 'WAIT', name: '等待' }, { value: 'WAIT' },
{ value: 'AGREE', name: '同意' }, { value: 'AGREE' },
{ value: 'DISMISS', name: '解散' }, { value: 'DISMISS' },
{ value: 'REFUSE', name: '拒绝' }, { value: 'REFUSE' },
{ value: 'REIMBURSE', name: '退款' } { value: 'REIMBURSE' }
], ],
statusMap: {} statusMap: {}
} }

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.inviteUserLog.placeholder.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -22,7 +22,7 @@
v-model="countryCodeStr" v-model="countryCodeStr"
popper-class="my-autocomplete" popper-class="my-autocomplete"
:fetch-suggestions="querySearch" :fetch-suggestions="querySearch"
placeholder="国家" :placeholder="$t('pages.inviteUserLog.placeholder.country')"
style="width: 200px" style="width: 200px"
class="filter-item" class="filter-item"
clearable clearable
@ -39,10 +39,10 @@
</template> </template>
</el-autocomplete> </el-autocomplete>
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.userId" :sys-origin="listQuery.sysOrigin" placeholder="邀请用户" /> <account-input v-model="listQuery.userId" :sys-origin="listQuery.sysOrigin" :placeholder="$t('pages.inviteUserLog.placeholder.inviter')" />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.inviteUserId" :sys-origin="listQuery.sysOrigin" placeholder="被邀请用户" /> <account-input v-model="listQuery.inviteUserId" :sys-origin="listQuery.sysOrigin" :placeholder="$t('pages.inviteUserLog.placeholder.invitee')" />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<el-date-picker <el-date-picker
@ -50,9 +50,9 @@
value-format="timestamp" value-format="timestamp"
type="datetimerange" type="datetimerange"
:picker-options="pickerOptions" :picker-options="pickerOptions"
range-separator="" :range-separator="$t('pages.inviteUserLog.word.to')"
start-placeholder="发送日期开始" :start-placeholder="$t('pages.inviteUserLog.placeholder.startDate')"
end-placeholder="发送日期结束" :end-placeholder="$t('pages.inviteUserLog.placeholder.endDate')"
/> />
</div> </div>
<el-button <el-button
@ -61,30 +61,30 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.inviteUserLog.action.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.inviteUserLog.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="邀请用户" align="center" show-overflow-tooltip min-width="220"> <el-table-column :label="$t('pages.inviteUserLog.table.inviter')" align="center" show-overflow-tooltip min-width="220">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="被邀请用户" align="center" show-overflow-tooltip min-width="220"> <el-table-column :label="$t('pages.inviteUserLog.table.invitee')" align="center" show-overflow-tooltip min-width="220">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.beUserProfile" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.beUserProfile" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="commission" label="奖金" align="center" min-width="100" /> <el-table-column prop="commission" :label="$t('pages.inviteUserLog.table.commission')" align="center" min-width="100" />
<el-table-column prop="deviceId" label="设备号" align="center" min-width="200" /> <el-table-column prop="deviceId" :label="$t('pages.inviteUserLog.table.deviceId')" align="center" min-width="200" />
<el-table-column prop="createTime" label="创建时间" align="center" width="200"> <el-table-column prop="createTime" :label="$t('pages.inviteUserLog.table.createTime')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>

View File

@ -2,12 +2,12 @@
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <div class="filter-container">
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.userId" placeholder="用户ID" /> <account-input v-model="listQuery.userId" :placeholder="$t('pages.loginLogger.filter.userId')" />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<el-input <el-input
v-model.trim="listQuery.deviceId" v-model.trim="listQuery.deviceId"
placeholder="设备ID" :placeholder="$t('pages.loginLogger.filter.deviceId')"
/> />
</div> </div>
<el-button <el-button
@ -17,50 +17,50 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.loginLogger.action.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.loginLogger.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="平台" prop="appPlatform" align="center" width="60"> <el-table-column :label="$t('pages.loginLogger.table.platform')" prop="appPlatform" align="center" width="60">
<template slot-scope="scope"> <template slot-scope="scope">
<platform-svg-icon :icon="scope.row.appPlatform" /> <platform-svg-icon :icon="scope.row.appPlatform" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户" align="center" min-width="200"> <el-table-column :label="$t('pages.loginLogger.table.user')" align="center" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="设备ID" prop="deviceId" align="center" min-width="200" /> <el-table-column :label="$t('pages.loginLogger.table.deviceId')" prop="deviceId" align="center" min-width="200" />
<el-table-column label="IP" prop="ip" align="center" min-width="100"> <el-table-column :label="$t('pages.loginLogger.table.ip')" prop="ip" align="center" min-width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<a :href="`https://www.ip138.com/iplookup.asp?ip=${scope.row.ip}&action=2`" target="__blank">{{ scope.row.ip }}</a> <a :href="`https://www.ip138.com/iplookup.asp?ip=${scope.row.ip}&action=2`" target="__blank">{{ scope.row.ip }}</a>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="登录方式" prop="loginTypeName" align="center" min-width="100" /> <el-table-column :label="$t('pages.loginLogger.table.loginType')" prop="loginTypeName" align="center" min-width="100" />
<el-table-column label="App版本" prop="appVersion" align="center" min-width="100" /> <el-table-column :label="$t('pages.loginLogger.table.appVersion')" prop="appVersion" align="center" min-width="100" />
<el-table-column prop="createTime" label="登录时间" width="200" align="center"> <el-table-column prop="createTime" :label="$t('pages.loginLogger.table.loginTime')" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="60" align="center"> <el-table-column :label="$t('pages.loginLogger.table.actions')" width="80" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<i class="el-icon-more" /> <i class="el-icon-more" />
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="clickViolationTableVisible(scope.row)">违规记录</el-dropdown-item> <el-dropdown-item @click.native="clickViolationTableVisible(scope.row)">{{ $t('pages.loginLogger.action.violationRecords') }}</el-dropdown-item>
<el-dropdown-item @click.native="accountStatus(scope.row)">账号处理记录</el-dropdown-item> <el-dropdown-item @click.native="accountStatus(scope.row)">{{ $t('pages.loginLogger.action.accountHandlingRecords') }}</el-dropdown-item>
<el-dropdown-item @click.native="accountHanle(scope.row)">账号处理</el-dropdown-item> <el-dropdown-item @click.native="accountHanle(scope.row)">{{ $t('pages.loginLogger.action.accountHandling') }}</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
@ -162,7 +162,7 @@ export default {
}, },
renderDataSuccess() { renderDataSuccess() {
this.$message({ this.$message({
message: 'Successful', message: this.$t('pages.loginLogger.message.success'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.userPasswordLogs.placeholder.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -19,29 +19,29 @@
</el-option> </el-option>
</el-select> </el-select>
<div class="filter-item"> <div class="filter-item">
<div><account-input v-model="listQuery.userId" placeholder="用户id" type="USER" :sys-origin="listQuery.sysOrigin" /></div> <div><account-input v-model="listQuery.userId" :placeholder="$t('pages.userPasswordLogs.placeholder.userId')" type="USER" :sys-origin="listQuery.sysOrigin" /></div>
</div> </div>
<el-select <el-select
v-model="listQuery.operateType" v-model="listQuery.operateType"
placeholder="操作类型" :placeholder="$t('pages.userPasswordLogs.placeholder.operationType')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
clearable clearable
@change="handleSearch" @change="handleSearch"
> >
<el-option label="设置密码" :value="'ADD_PASSWORD'" /> <el-option :label="$t('pages.userPasswordLogs.operationType.ADD_PASSWORD')" :value="'ADD_PASSWORD'" />
<el-option label="修改密码" :value="'UPDATE_PASSWORD'" /> <el-option :label="$t('pages.userPasswordLogs.operationType.UPDATE_PASSWORD')" :value="'UPDATE_PASSWORD'" />
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.businessType" v-model="listQuery.businessType"
placeholder="业务类型" :placeholder="$t('pages.userPasswordLogs.placeholder.businessType')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
clearable clearable
@change="handleSearch" @change="handleSearch"
> >
<el-option label="支付密码" :value="'PAY_PASSWORD'" /> <el-option :label="$t('pages.userPasswordLogs.businessType.PAY_PASSWORD')" :value="'PAY_PASSWORD'" />
<el-option label="账号登录密码" :value="'ACCOUNT_PASSWORD'" /> <el-option :label="$t('pages.userPasswordLogs.businessType.ACCOUNT_PASSWORD')" :value="'ACCOUNT_PASSWORD'" />
</el-select> </el-select>
<el-button <el-button
class="filter-item" class="filter-item"
@ -49,45 +49,45 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.userPasswordLogs.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="sysOrigin" label="系统" align="center" width="100"> <el-table-column prop="sysOrigin" :label="$t('pages.userPasswordLogs.table.system')" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户" align="center" min-width="100"> <el-table-column :label="$t('pages.userPasswordLogs.table.user')" align="center" min-width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="imei" label="设备" align="center" width="300" /> <el-table-column prop="imei" :label="$t('pages.userPasswordLogs.table.device')" align="center" width="300" />
<el-table-column label="操作类型" align="center"> <el-table-column :label="$t('pages.userPasswordLogs.table.operationType')" align="center" min-width="120">
<template slot-scope="scope"> <template slot-scope="scope">
<div> <div>
<el-tag v-if="scope.row.operateType === 'ADD_PASSWORD'">设置密码</el-tag> <el-tag v-if="scope.row.operateType === 'ADD_PASSWORD'">{{ $t('pages.userPasswordLogs.operationType.ADD_PASSWORD') }}</el-tag>
<el-tag v-else-if="scope.row.operateType === 'UPDATE_PASSWORD'">修改密码</el-tag> <el-tag v-else-if="scope.row.operateType === 'UPDATE_PASSWORD'">{{ $t('pages.userPasswordLogs.operationType.UPDATE_PASSWORD') }}</el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="业务类型" align="center"> <el-table-column :label="$t('pages.userPasswordLogs.table.businessType')" align="center" min-width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<div> <div>
<el-tag v-if="scope.row.businessType === 'PAY_PASSWORD'">支付密码</el-tag> <el-tag v-if="scope.row.businessType === 'PAY_PASSWORD'">{{ $t('pages.userPasswordLogs.businessType.PAY_PASSWORD') }}</el-tag>
<el-tag v-else-if="scope.row.businessType === 'ACCOUNT_PASSWORD'">账号登录密码</el-tag> <el-tag v-else-if="scope.row.businessType === 'ACCOUNT_PASSWORD'">{{ $t('pages.userPasswordLogs.businessType.ACCOUNT_PASSWORD') }}</el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center" width="200"> <el-table-column prop="createTime" :label="$t('pages.userPasswordLogs.table.createTime')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="归属系统" :placeholder="$t('pages.roomOnline.placeholder.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="changeSysOrigin" @change="changeSysOrigin"
@ -25,21 +25,21 @@
ref="regionSelectPolicy" ref="regionSelectPolicy"
v-model="listQuery.region" v-model="listQuery.region"
:sys-origin="listQuery.sysOrigin" :sys-origin="listQuery.sysOrigin"
placeholder="请选择区域" :placeholder="$t('pages.roomOnline.placeholder.region')"
/> />
</div> </div>
<el-input <el-input
v-model.trim="listQuery.roomId" v-model.trim="listQuery.roomId"
v-number v-number
placeholder="房间ID" :placeholder="$t('pages.roomOnline.placeholder.roomId')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<el-input <el-input
v-model.trim="listQuery.roomAccount" v-model.trim="listQuery.roomAccount"
v-number v-number
placeholder="房间Account" :placeholder="$t('pages.roomOnline.placeholder.roomAccount')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
@ -49,7 +49,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.roomOnline.action.search') }}
</el-button> </el-button>
</div> </div>
@ -63,46 +63,46 @@
<div class="imgs flex-l"> <div class="imgs flex-l">
<avatar :url="item.profile.roomCover" size="mini" /> <avatar :url="item.profile.roomCover" size="mini" />
<el-tag size="mini" style="margin: 0px 10px;">{{ item.activeRoom.region }}</el-tag> <el-tag size="mini" style="margin: 0px 10px;">{{ item.activeRoom.region }}</el-tag>
<el-tag v-if=" item.activeRoom.hot" type="danger" size="mini">热门</el-tag> <el-tag v-if=" item.activeRoom.hot" type="danger" size="mini">{{ $t('pages.roomOnline.status.hot') }}</el-tag>
</div> </div>
</div> </div>
<div class="operaiton"> <div class="operaiton">
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
操作<i class="el-icon-arrow-down el-icon--right" /> {{ $t('pages.roomOnline.action.operations') }}<i class="el-icon-arrow-down el-icon--right" />
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="clickCallMember(item)">在线成员</el-dropdown-item> <el-dropdown-item @click.native="clickCallMember(item)">{{ $t('pages.roomOnline.action.onlineMembers') }}</el-dropdown-item>
<el-dropdown-item @click.native="clickAccountHandle(item)">账号处理</el-dropdown-item> <el-dropdown-item @click.native="clickAccountHandle(item)">{{ $t('pages.roomOnline.action.accountHandle') }}</el-dropdown-item>
<el-dropdown-item @click.native="clickQueryRoomDetails(item)">房间详情</el-dropdown-item> <el-dropdown-item @click.native="clickQueryRoomDetails(item)">{{ $t('pages.roomOnline.action.roomDetails') }}</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="nowrap-ellipsis">名称<a :title="item.profile.roomName">{{ item.profile.roomName }}</a></div> <div class="nowrap-ellipsis">{{ $t('pages.roomOnline.label.name') }}: <a :title="item.profile.roomName">{{ item.profile.roomName }}</a></div>
<div class="nowrap-ellipsis">ID<a :title="item.profile.id">{{ item.profile.id }}</a></div> <div class="nowrap-ellipsis">{{ $t('pages.roomOnline.label.id') }}: <a :title="item.profile.id">{{ item.profile.id }}</a></div>
<div> <div>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<div class="nowrap-ellipsis"> <div class="nowrap-ellipsis">
账号<a :title="item.profile.roomAccount">{{ item.profile.roomAccount }}</a> {{ $t('pages.roomOnline.label.account') }}: <a :title="item.profile.roomAccount">{{ item.profile.roomAccount }}</a>
</div> </div>
</el-col> </el-col>
<el-col v-if="item.profile.setting && item.profile.setting.password" :span="12"> <el-col v-if="item.profile.setting && item.profile.setting.password" :span="12">
<div class="nowrap-ellipsis">密码<a :title="item.profile.setting">{{ item.profile.setting.password }}</a></div> <div class="nowrap-ellipsis">{{ $t('pages.roomOnline.label.password') }}: <a :title="item.profile.setting">{{ item.profile.setting.password }}</a></div>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
<div class="nowrap-ellipsis">公告<a :title="item.profile.roomDesc">{{ item.profile.roomDesc }}</a></div> <div class="nowrap-ellipsis">{{ $t('pages.roomOnline.label.notice') }}: <a :title="item.profile.roomDesc">{{ item.profile.roomDesc }}</a></div>
<flag-icon class="user-flag" :code="item.activeRoom.countryCode" :tooltip="item.activeRoom.countryName" size="24" /> <flag-icon class="user-flag" :code="item.activeRoom.countryCode" :tooltip="item.activeRoom.countryName" size="24" />
<div v-if="item.activeRoom.familyProfile" class="family-info nowrap-ellipsis flex-l"> <div v-if="item.activeRoom.familyProfile" class="family-info nowrap-ellipsis flex-l">
家族 <avatar :url="item.activeRoom.familyProfile.familyAvatar" size="mini" /> {{ $t('pages.roomOnline.label.family') }}: <avatar :url="item.activeRoom.familyProfile.familyAvatar" size="mini" />
&nbsp;[{{ item.activeRoom.familyProfile.familyAccount }}] <a :title="item.activeRoom.familyProfile.familyName ">{{ item.activeRoom.familyProfile.familyName }}</a> &nbsp;[{{ item.activeRoom.familyProfile.familyAccount }}] <a :title="item.activeRoom.familyProfile.familyName ">{{ item.activeRoom.familyProfile.familyName }}</a>
</div> </div>
<div v-else class=" nowrap-ellipsis"> <div v-else class=" nowrap-ellipsis">
家族 {{ $t('pages.roomOnline.label.family') }}: {{ $t('pages.roomOnline.status.none') }}
</div> </div>
</div> </div>
</el-card></el-col> </el-card></el-col>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="live-broadcast-history-member"> <div class="live-broadcast-history-member">
<el-drawer <el-drawer
title="成员信息" :title="$t('pages.roomOnline.drawer.memberInfo')"
:visible="true" :visible="true"
:append-to-body="true" :append-to-body="true"
:before-close="handleClose" :before-close="handleClose"
@ -16,12 +16,12 @@
<div class="imgs"><avatar :url="item.userAvatar" :gender="item.gender" size="mini" /> </div> <div class="imgs"><avatar :url="item.userAvatar" :gender="item.gender" size="mini" /> </div>
<div class="infos" @click="clickUserDetails(item)"><gender :gender="item.gender" :gender-name="item.genderName" :desc="item.userNickname" /></div> <div class="infos" @click="clickUserDetails(item)"><gender :gender="item.gender" :gender-name="item.genderName" :desc="item.userNickname" /></div>
</h4> </h4>
<div class="account-handle"><el-button type="text" size="mini" @click="clickAccountHandle(item)">账号处理</el-button></div> <div class="account-handle"><el-button type="text" size="mini" @click="clickAccountHandle(item)">{{ $t('pages.roomOnline.action.accountHandle') }}</el-button></div>
<div slot="dot"><flag-icon class="time-dot" :code="item.countryCode" :tooltip="item.countryName" size="26" /></div> <div slot="dot"><flag-icon class="time-dot" :code="item.countryCode" :tooltip="item.countryName" size="26" /></div>
</div> </div>
<el-divider class="cursor-pointer"> <el-divider class="cursor-pointer">
<div v-if="notData === true">已加载全部</div> <div v-if="notData === true">{{ $t('pages.roomOnline.loading.allLoaded') }}</div>
<div v-else v-loading="listLoading" @click="loadMore">点击加载更多</div> <div v-else v-loading="listLoading" @click="loadMore">{{ $t('pages.roomOnline.loading.loadMore') }}</div>
</el-divider> </el-divider>
</div> </div>
</el-drawer> </el-drawer>

View File

@ -8,17 +8,17 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('pages.roomThemeManager.action.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.roomThemeManager.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="主题背景图" align="center"> <el-table-column :label="$t('pages.roomThemeManager.table.themeBack')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
style="width: 60px; height: 80px" style="width: 60px; height: 80px"
@ -27,23 +27,23 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center"> <el-table-column :label="$t('pages.roomThemeManager.table.status')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div> <div>
<span v-if="scope.row.showcase === false">下架</span> <span v-if="scope.row.showcase === false">{{ $t('pages.roomThemeManager.status.offShelf') }}</span>
<span v-if="scope.row.showcase === true">上架</span> <span v-if="scope.row.showcase === true">{{ $t('pages.roomThemeManager.status.onShelf') }}</span>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="themeMoney" label="主题金额" align="center" /> <el-table-column prop="themeMoney" :label="$t('pages.roomThemeManager.table.themeMoney')" align="center" />
<el-table-column prop="createTime" label="创建时间" align="center"> <el-table-column prop="createTime" :label="$t('pages.roomThemeManager.table.createdAt')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="100"> <el-table-column fixed="right" :label="$t('pages.roomThemeManager.table.actions')" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click.native="handleUpdate(scope.row)">修改</el-button> <el-button type="text" @click.native="handleUpdate(scope.row)">{{ $t('pages.roomThemeManager.action.edit') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -65,31 +65,31 @@
> >
<div v-loading="submitLoading"> <div v-loading="submitLoading">
<el-form ref="form" :model="form" :rules="rules" label-width="110px"> <el-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-form-item label="主题背景图" prop="themeBack"> <el-form-item :label="$t('pages.roomThemeManager.form.themeBack')" prop="themeBack">
<upload-image <upload-image
v-model="form.themeBack" v-model="form.themeBack"
:file-dir="$application.fileBucket.back" :file-dir="$application.fileBucket.back"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="showcase"> <el-form-item :label="$t('pages.roomThemeManager.form.status')" prop="showcase">
<el-select <el-select
v-model="form.showcase" v-model="form.showcase"
placeholder="状态" :placeholder="$t('pages.roomThemeManager.placeholder.status')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="上架" :value="true" /> <el-option :label="$t('pages.roomThemeManager.status.onShelf')" :value="true" />
<el-option label="下架" :value="false" /> <el-option :label="$t('pages.roomThemeManager.status.offShelf')" :value="false" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="主题金额" prop="themeMoney"> <el-form-item :label="$t('pages.roomThemeManager.form.themeMoney')" prop="themeMoney">
<el-input v-model.trim="form.themeMoney" type="number" /> <el-input v-model.trim="form.themeMoney" type="number" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('pages.roomThemeManager.action.save') }}</el-button>
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('pages.roomThemeManager.action.cancel') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -113,7 +113,7 @@ export default {
limit: 20 limit: 20
}, },
formVisible: false, formVisible: false,
textOptTitle: '', dialogType: '',
// fileList: [], // fileList: [],
form: { form: {
id: '', id: '',
@ -122,18 +122,27 @@ export default {
themeMoney: '' themeMoney: ''
}, },
submitLoading: false, submitLoading: false,
rules: { listLoading: true
}
},
computed: {
textOptTitle() {
return this.dialogType === 'edit'
? this.$t('pages.roomThemeManager.dialog.editTitle')
: this.$t('pages.roomThemeManager.dialog.addTitle')
},
rules() {
return {
themeBack: [ themeBack: [
{ required: true, message: '请填写主题背景图', trigger: 'change' } { required: true, message: this.$t('pages.roomThemeManager.validation.themeBack'), trigger: 'change' }
], ],
showcase: [ showcase: [
{ required: true, message: '请填写状态', trigger: 'blur' } { required: true, message: this.$t('pages.roomThemeManager.validation.status'), trigger: 'blur' }
], ],
themeMoney: [ themeMoney: [
{ required: true, message: '请填写主题金额', trigger: 'blur' } { required: true, message: this.$t('pages.roomThemeManager.validation.themeMoney'), trigger: 'blur' }
] ]
}, }
listLoading: true
} }
}, },
created() { created() {
@ -193,16 +202,15 @@ export default {
} }
}) })
}, },
//
handlDel(id) { handlDel(id) {
this.$confirm('确认删除吗?', '提示', { this.$confirm(this.$t('pages.roomThemeManager.message.confirmDelete'), this.$t('pages.roomThemeManager.message.tips'), {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.listLoading = true this.listLoading = true
deleteRoomTheme(id).then((res) => { deleteRoomTheme(id).then((res) => {
this.listLoading = false this.listLoading = false
this.$message({ this.$message({
message: '删除成功', message: this.$t('pages.roomThemeManager.message.deleteSuccess'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()
@ -216,12 +224,12 @@ export default {
}, },
handleCreate() { handleCreate() {
this.formVisible = true this.formVisible = true
this.textOptTitle = '添加' this.dialogType = 'add'
this.clearForm() this.clearForm()
console.log(' this.form', this.form) console.log(' this.form', this.form)
}, },
handleUpdate(row) { handleUpdate(row) {
this.textOptTitle = '修改' this.dialogType = 'edit'
this.formVisible = true this.formVisible = true
this.clearForm() this.clearForm()
this.form = Object.assign(this.form, row) this.form = Object.assign(this.form, row)

View File

@ -14,7 +14,7 @@
<div class="drawer-form"> <div class="drawer-form">
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="100px">
<!-- 封面 --> <!-- 封面 -->
<el-form-item label="封面" prop="cover"> <el-form-item :label="$t('pages.bannerManager.form.cover')" prop="cover">
<el-col :span="8"> <el-col :span="8">
<el-form-item prop="cover" class="upload-small"> <el-form-item prop="cover" class="upload-small">
<el-upload <el-upload
@ -33,7 +33,9 @@
v-loading="coverUploadLoading" v-loading="coverUploadLoading"
class="el-icon-plus" class="el-icon-plus"
/> />
<div slot="tip" class="el-upload__tip">banner封面</div> <div slot="tip" class="el-upload__tip">{{
$t("pages.bannerManager.uploadTip.cover")
}}</div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -55,7 +57,9 @@
v-loading="smallCoverUploadLoading" v-loading="smallCoverUploadLoading"
class="el-icon-plus" class="el-icon-plus"
/> />
<div slot="tip" class="el-upload__tip">banner小图</div> <div slot="tip" class="el-upload__tip">{{
$t("pages.bannerManager.uploadTip.smallCover")
}}</div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -77,31 +81,39 @@
v-loading="alertCoverUploadLoading" v-loading="alertCoverUploadLoading"
class="el-icon-plus" class="el-icon-plus"
/> />
<div slot="tip" class="el-upload__tip">首页弹出banner</div> <div slot="tip" class="el-upload__tip">{{
$t("pages.bannerManager.uploadTip.alertCover")
}}</div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-form-item> </el-form-item>
<!-- 状态 --> <!-- 状态 -->
<el-form-item label="状态" prop="showcase"> <el-form-item :label="$t('pages.bannerManager.form.status')" prop="showcase">
<el-select <el-select
v-model="form.showcase" v-model="form.showcase"
placeholder="状态" :placeholder="$t('pages.bannerManager.placeholder.status')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="下架" :value="false" /> <el-option
<el-option label="上架" :value="true" /> :label="$t('pages.bannerManager.status.offShelf')"
:value="false"
/>
<el-option
:label="$t('pages.bannerManager.status.onShelf')"
:value="true"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 平台 --> <!-- 平台 -->
<el-form-item label="平台" prop="platform"> <el-form-item :label="$t('pages.bannerManager.form.platform')" prop="platform">
<el-select <el-select
v-model="form.platform" v-model="form.platform"
placeholder="状态" :placeholder="$t('pages.bannerManager.placeholder.platform')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
@ -116,28 +128,31 @@
</el-form-item> </el-form-item>
<!-- 类型 --> <!-- 类型 -->
<el-form-item label="类型" prop="type"> <el-form-item :label="$t('pages.bannerManager.form.type')" prop="type">
<el-select <el-select
v-model="form.type" v-model="form.type"
placeholder="类型" :placeholder="$t('pages.bannerManager.placeholder.type')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="H5" :value="'H5'" /> <el-option
<el-option label="APP" :value="'APP'" /> v-for="item in typeOptions"
<el-option label="AD" :value="'AD'" /> :key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 内容 --> <!-- 内容 -->
<el-form-item label="内容"> <el-form-item :label="$t('pages.bannerManager.form.content')">
<el-autocomplete <el-autocomplete
v-model.trim="form.content" v-model.trim="form.content"
style="width: 100%;" style="width: 100%;"
:fetch-suggestions="querySearchContentRestaurants" :fetch-suggestions="querySearchContentRestaurants"
popper-class="form-autocomplete" popper-class="form-autocomplete"
placeholder="请输入内容" :placeholder="$t('pages.bannerManager.placeholder.content')"
> >
<template slot-scope="{ item }"> <template slot-scope="{ item }">
<div class="name">{{ item.label }}</div> <div class="name">{{ item.label }}</div>
@ -152,13 +167,16 @@
form.content !== 'ENTER_ROOM' && form.content !== 'ENTER_ROOM' &&
form.content !== 'ENTER_PERSONAL_CENTER' form.content !== 'ENTER_PERSONAL_CENTER'
" "
label="参数" :label="$t('pages.bannerManager.form.params')"
> >
<el-input v-model.trim="form.params" type="text" /> <el-input v-model.trim="form.params" type="text" />
</el-form-item> </el-form-item>
<!-- 房间 --> <!-- 房间 -->
<el-form-item v-if="form.content === 'ENTER_ROOM'" label="房间"> <el-form-item
v-if="form.content === 'ENTER_ROOM'"
:label="$t('pages.bannerManager.form.room')"
>
<search-room-input <search-room-input
:room-id="tmpRoomId" :room-id="tmpRoomId"
@success="searchRoomSuccess" @success="searchRoomSuccess"
@ -170,73 +188,82 @@
<!-- 用户 --> <!-- 用户 -->
<el-form-item <el-form-item
v-if="form.content === 'ENTER_PERSONAL_CENTER'" v-if="form.content === 'ENTER_PERSONAL_CENTER'"
label="用户" :label="$t('pages.bannerManager.form.user')"
> >
<account-input <account-input
v-model="tmpUserId" v-model="tmpUserId"
:sys-origin="sysOrigin" :sys-origin="sysOrigin"
placeholder="用户ID" :placeholder="$t('pages.bannerManager.placeholder.userId')"
/> />
</el-form-item> </el-form-item>
<!-- 展示位 --> <!-- 展示位 -->
<el-form-item label="展示位" prop="displayPosition"> <el-form-item
:label="$t('pages.bannerManager.form.displayPosition')"
prop="displayPosition"
>
<el-select <el-select
v-model="form.displayPosition" v-model="form.displayPosition"
placeholder="类型" :placeholder="$t('pages.bannerManager.placeholder.displayPosition')"
clearable clearable
multiple="" multiple=""
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option <el-option
v-for="(item, index) in displayPosition" v-for="item in displayPositionOptions"
:key="index" :key="item.value"
:label="item.name" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 开始时间 --> <!-- 开始时间 -->
<el-form-item label="开始时间" prop="startTime"> <el-form-item
:label="$t('pages.bannerManager.form.startTime')"
prop="startTime"
>
<el-date-picker <el-date-picker
v-model="form.startTime" v-model="form.startTime"
type="datetime" type="datetime"
value-format="timestamp" value-format="timestamp"
placeholder="选择日期时间" :placeholder="$t('pages.bannerManager.placeholder.dateTime')"
style="width:100%;" style="width:100%;"
/> />
</el-form-item> </el-form-item>
<!-- 过期时间 --> <!-- 过期时间 -->
<el-form-item label="过期时间" prop="expiredTime"> <el-form-item
:label="$t('pages.bannerManager.form.expiredTime')"
prop="expiredTime"
>
<el-date-picker <el-date-picker
v-model="form.expiredTime" v-model="form.expiredTime"
type="datetime" type="datetime"
value-format="timestamp" value-format="timestamp"
placeholder="选择日期时间" :placeholder="$t('pages.bannerManager.placeholder.dateTime')"
style="width:100%;" style="width:100%;"
/> />
</el-form-item> </el-form-item>
<!-- 排序 --> <!-- 排序 -->
<el-form-item label="排序" prop="depict"> <el-form-item :label="$t('pages.bannerManager.form.sort')" prop="depict">
<el-input <el-input
v-model.trim="form.sort" v-model.trim="form.sort"
v-number v-number
placeholder="降序排列(数字越大越靠前)" :placeholder="$t('pages.bannerManager.placeholder.sort')"
/> />
</el-form-item> </el-form-item>
<!-- 区域 --> <!-- 区域 -->
<el-form-item label="区域" prop="regionList"> <el-form-item :label="$t('pages.bannerManager.form.region')" prop="regionList">
<el-select <el-select
v-model="form.regionList" v-model="form.regionList"
v-loading="loading" v-loading="loading"
multiple multiple
clearable clearable
placeholder="请选择" :placeholder="$t('pages.bannerManager.placeholder.select')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -250,13 +277,13 @@
</el-form-item> </el-form-item>
<!-- 国家 --> <!-- 国家 -->
<el-form-item label="国家" prop="countryCode"> <el-form-item :label="$t('pages.bannerManager.form.country')" prop="countryCode">
<el-select <el-select
v-model="selectCountryCode" v-model="selectCountryCode"
v-loading="loadingCountry" v-loading="loadingCountry"
multiple multiple
clearable clearable
placeholder="请选择" :placeholder="$t('pages.bannerManager.placeholder.select')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
@change="changeCountry" @change="changeCountry"
@ -278,7 +305,7 @@
</el-form-item> </el-form-item>
<!-- 描述 --> <!-- 描述 -->
<el-form-item label="描述" prop="depict"> <el-form-item :label="$t('pages.bannerManager.form.description')" prop="depict">
<el-input <el-input
v-model.trim="form.depict" v-model.trim="form.depict"
resize="none" resize="none"
@ -291,8 +318,12 @@
</el-form> </el-form>
</div> </div>
<div class="drawer-footer"> <div class="drawer-footer">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{
<el-button type="primary" @click="submitForm()">保存</el-button> $t("pages.bannerManager.action.cancel")
}}</el-button>
<el-button type="primary" @click="submitForm()">{{
$t("pages.bannerManager.action.save")
}}</el-button>
</div> </div>
</div> </div>
</el-drawer> </el-drawer>
@ -320,16 +351,13 @@ export default {
}, },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: "必填字段", trigger: "blur" } {
required: true,
message: this.$t("pages.bannerManager.validation.requiredField"),
trigger: "blur"
}
]; ];
return { return {
displayPosition: [
{ name: "房间内", value: "ROOM" },
{ name: "发现页", value: "EXPLORE_PAGE" },
{ name: "首页弹出层", value: "HOME_ALERT" },
{ name: "钱包", value: "WALLET" },
{ name: "游戏", value: "GAME" }
],
appPlatforms, appPlatforms,
searchDisabled: false, searchDisabled: false,
alertCoverUploadLoading: false, alertCoverUploadLoading: false,
@ -370,15 +398,6 @@ export default {
sysOrigin: commonRules, sysOrigin: commonRules,
expiredTime: commonRules expiredTime: commonRules
}, },
contentRestaurants: [
{ value: "GIFT_PACK_BUY", label: "礼物背包" },
{ value: "ENTER_ROOM", label: "进入房间" },
{ value: "ENTER_PERSONAL_CENTER", label: "个人中心" },
{ value: "RECHARGE_IN_APP", label: "充值-站内" },
{ value: "RECHARGE_H5", label: "充值-H5(站外)" },
{ value: "PROP_STORE", label: "道具商店" }
],
selectCountryCode: [], selectCountryCode: [],
countryList: [], countryList: [],
loadingCountry: false loadingCountry: false
@ -386,7 +405,10 @@ export default {
}, },
computed: { computed: {
textOptTitle() { textOptTitle() {
return `${this.row && this.row.id ? "修改" : "新增"}(${this.sysOrigin})`; const action = this.row && this.row.id
? this.$t("pages.bannerManager.dialog.edit")
: this.$t("pages.bannerManager.dialog.create");
return `${action}(${this.sysOrigin})`;
}, },
isShowCoverUpload() { isShowCoverUpload() {
return !this.form.cover; return !this.form.cover;
@ -397,6 +419,76 @@ export default {
isShowAlertCoverUpload() { isShowAlertCoverUpload() {
return !this.form.alertCover; return !this.form.alertCover;
}, },
typeOptions() {
return [
{
value: "H5",
label: this.$t("pages.bannerManager.type.H5")
},
{
value: "APP",
label: this.$t("pages.bannerManager.type.APP")
},
{
value: "AD",
label: this.$t("pages.bannerManager.type.AD")
}
];
},
displayPositionOptions() {
return [
{
value: "ROOM",
label: this.$t("pages.bannerManager.displayPosition.ROOM")
},
{
value: "EXPLORE_PAGE",
label: this.$t("pages.bannerManager.displayPosition.EXPLORE_PAGE")
},
{
value: "HOME_ALERT",
label: this.$t("pages.bannerManager.displayPosition.HOME_ALERT")
},
{
value: "WALLET",
label: this.$t("pages.bannerManager.displayPosition.WALLET")
},
{
value: "GAME",
label: this.$t("pages.bannerManager.displayPosition.GAME")
}
];
},
contentRestaurants() {
return [
{
value: "GIFT_PACK_BUY",
label: this.$t("pages.bannerManager.contentOption.GIFT_PACK_BUY")
},
{
value: "ENTER_ROOM",
label: this.$t("pages.bannerManager.contentOption.ENTER_ROOM")
},
{
value: "ENTER_PERSONAL_CENTER",
label: this.$t(
"pages.bannerManager.contentOption.ENTER_PERSONAL_CENTER"
)
},
{
value: "RECHARGE_IN_APP",
label: this.$t("pages.bannerManager.contentOption.RECHARGE_IN_APP")
},
{
value: "RECHARGE_H5",
label: this.$t("pages.bannerManager.contentOption.RECHARGE_H5")
},
{
value: "PROP_STORE",
label: this.$t("pages.bannerManager.contentOption.PROP_STORE")
}
];
},
...mapGetters(["permissionsSysOriginPlatforms"]) ...mapGetters(["permissionsSysOriginPlatforms"])
}, },
watch: { watch: {
@ -552,7 +644,9 @@ export default {
} }
if (!submitForm.sysOrigin) { if (!submitForm.sysOrigin) {
that.$opsMessage.fail("系统错误, 没有平台信息!"); that.$opsMessage.fail(
that.$t("pages.bannerManager.message.missingSystem")
);
return; return;
} }
if (submitForm.id) { if (submitForm.id) {

View File

@ -5,7 +5,7 @@
<!-- 系统 --> <!-- 系统 -->
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.bannerManager.filter.system')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
@change="changeSysOrigin" @change="changeSysOrigin"
@ -28,7 +28,7 @@
v-model="listQuery.platform" v-model="listQuery.platform"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
placeholder="平台" :placeholder="$t('pages.bannerManager.filter.platform')"
> >
<el-option <el-option
v-for="(item, index) in appPlatforms" v-for="(item, index) in appPlatforms"
@ -41,21 +41,30 @@
<!-- 状态 --> <!-- 状态 -->
<el-select <el-select
v-model="listQuery.showcase" v-model="listQuery.showcase"
placeholder="状态" :placeholder="$t('pages.bannerManager.filter.status')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
> >
<el-option label="上架" :value="1" /> <el-option
<el-option label="下架" :value="2" /> :label="$t('pages.bannerManager.status.onShelf')"
<el-option label="过期" :value="3" /> :value="1"
/>
<el-option
:label="$t('pages.bannerManager.status.offShelf')"
:value="2"
/>
<el-option
:label="$t('pages.bannerManager.status.expired')"
:value="3"
/>
</el-select> </el-select>
<!-- 区域 --> <!-- 区域 -->
<el-select <el-select
v-model="listQuery.region" v-model="listQuery.region"
v-loading="loading" v-loading="loading"
placeholder="区域" :placeholder="$t('pages.bannerManager.filter.region')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
clearable clearable
@ -73,7 +82,7 @@
<el-select <el-select
v-model="listQuery.countryCode" v-model="listQuery.countryCode"
v-loading="loadingCountry" v-loading="loadingCountry"
placeholder="国家" :placeholder="$t('pages.bannerManager.filter.country')"
style="width: 200px" style="width: 200px"
class="filter-item" class="filter-item"
clearable clearable
@ -102,7 +111,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t("pages.bannerManager.action.search") }}
</el-button> </el-button>
<!-- 新增按钮 --> <!-- 新增按钮 -->
@ -112,7 +121,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t("pages.bannerManager.action.add") }}
</el-button> </el-button>
</div> </div>
@ -120,13 +129,17 @@
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.bannerManager.loading')"
fit fit
highlight-current-row highlight-current-row
@cell-mouse-enter="handleMouseEnter" @cell-mouse-enter="handleMouseEnter"
> >
<!-- 封面 --> <!-- 封面 -->
<el-table-column label="封面" align="center" width="400"> <el-table-column
:label="$t('pages.bannerManager.table.cover')"
align="center"
width="400"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
:lazy="true" :lazy="true"
@ -138,7 +151,11 @@
</el-table-column> </el-table-column>
<!-- 小图 --> <!-- 小图 -->
<el-table-column label="小图" align="center" width="150"> <el-table-column
:label="$t('pages.bannerManager.table.smallCover')"
align="center"
width="150"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
:lazy="true" :lazy="true"
@ -154,7 +171,11 @@
</el-table-column> </el-table-column>
<!-- alert图 --> <!-- alert图 -->
<el-table-column label="alert图" align="center" width="150"> <el-table-column
:label="$t('pages.bannerManager.table.alertCover')"
align="center"
width="150"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
:lazy="true" :lazy="true"
@ -170,17 +191,24 @@
</el-table-column> </el-table-column>
<!-- 类型 --> <!-- 类型 -->
<el-table-column prop="type" label="类型" align="center" /> <el-table-column
prop="type"
:label="$t('pages.bannerManager.table.type')"
align="center"
/>
<!-- 展示位 --> <!-- 展示位 -->
<el-table-column <el-table-column
prop="displayPositionNames" prop="displayPositionNames"
label="展示位" :label="$t('pages.bannerManager.table.displayPosition')"
align="center" align="center"
/> />
<!-- 系统 --> <!-- 系统 -->
<el-table-column label="归属系统" align="center"> <el-table-column
:label="$t('pages.bannerManager.table.system')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon <sys-origin-icon
:icon="scope.row.sysOrigin" :icon="scope.row.sysOrigin"
@ -190,60 +218,101 @@
</el-table-column> </el-table-column>
<!-- 区域 --> <!-- 区域 -->
<el-table-column prop="regionNameStr" label="区域" align="center" /> <el-table-column
prop="regionNameStr"
:label="$t('pages.bannerManager.table.region')"
align="center"
/>
<!-- 排序 --> <!-- 排序 -->
<el-table-column prop="sort" label="排序" align="center" /> <el-table-column
prop="sort"
:label="$t('pages.bannerManager.table.sort')"
align="center"
/>
<!-- 内容 --> <!-- 内容 -->
<el-table-column prop="content" label="内容" align="center"> <el-table-column
prop="content"
:label="$t('pages.bannerManager.table.content')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover placement="top-start" trigger="hover"> <el-popover placement="top-start" trigger="hover">
<div class="popover-content"> <div class="popover-content">
<div><strong>内容</strong>{{ scope.row.content }}</div> <div>
<div><strong>参数</strong>{{ scope.row.params }}</div> <strong>{{ $t("pages.bannerManager.popover.content") }}:</strong>
<div><strong>描述</strong>{{ scope.row.depict }}</div> {{ scope.row.content }}
<div><strong>开始时间</strong>{{ scope.row.startTime }}</div> </div>
<div><strong>过期时间</strong>{{ scope.row.expiredTime }}</div> <div>
<strong>{{ $t("pages.bannerManager.popover.params") }}:</strong>
{{ scope.row.params }}
</div>
<div>
<strong>{{ $t("pages.bannerManager.popover.description") }}:</strong>
{{ scope.row.depict }}
</div>
<div>
<strong>{{ $t("pages.bannerManager.popover.startTime") }}:</strong>
{{ scope.row.startTime }}
</div>
<div>
<strong>{{ $t("pages.bannerManager.popover.expiredTime") }}:</strong>
{{ scope.row.expiredTime }}
</div>
</div> </div>
<el-button slot="reference" type="text">查看</el-button> <el-button slot="reference" type="text">{{
$t("pages.bannerManager.action.view")
}}</el-button>
</el-popover> </el-popover>
</template> </template>
</el-table-column> </el-table-column>
<!-- 状态 --> <!-- 状态 -->
<el-table-column label="状态" align="center"> <el-table-column
:label="$t('pages.bannerManager.table.status')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div> <div>
<el-tag <el-tag
v-if="scope.row.expired === true && scope.row.showcase === false" v-if="scope.row.expired === true && scope.row.showcase === false"
type="warning" type="warning"
>下架+过期</el-tag >{{ $t("pages.bannerManager.status.offShelfExpired") }}</el-tag
> >
<el-tag <el-tag
v-else-if=" v-else-if="
scope.row.expired === true && scope.row.showcase === true scope.row.expired === true && scope.row.showcase === true
" "
type="warning" type="warning"
>上架+过期</el-tag >{{ $t("pages.bannerManager.status.onShelfExpired") }}</el-tag
> >
<el-tag v-else-if="scope.row.expired === true" type="warning" <el-tag v-else-if="scope.row.expired === true" type="warning"
>过期</el-tag >{{ $t("pages.bannerManager.status.expired") }}</el-tag
> >
<el-tag v-else-if="scope.row.showcase === false" type="danger" <el-tag v-else-if="scope.row.showcase === false" type="danger"
>下架</el-tag >{{ $t("pages.bannerManager.status.offShelf") }}</el-tag
> >
<el-tag v-else-if="scope.row.showcase === true">上架</el-tag> <el-tag v-else-if="scope.row.showcase === true">{{
$t("pages.bannerManager.status.onShelf")
}}</el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<!-- 操作按钮列表 --> <!-- 操作按钮列表 -->
<el-table-column fixed="right" label="操作" align="center" width="200"> <el-table-column
fixed="right"
:label="$t('pages.bannerManager.table.actions')"
align="center"
width="200"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click.native="handleUpdate()">修改</el-button> <el-button type="text" @click.native="handleUpdate()">{{
$t("pages.bannerManager.action.edit")
}}</el-button>
<el-button type="text" @click.native="handlDel(scope.row)" <el-button type="text" @click.native="handlDel(scope.row)"
>删除</el-button >{{ $t("pages.bannerManager.action.delete") }}</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
@ -362,7 +431,7 @@ export default {
}, },
renderDataSuccess() { renderDataSuccess() {
this.$message({ this.$message({
message: "Successful", message: this.$t("pages.bannerManager.message.success"),
type: "success" type: "success"
}); });
this.renderData(); this.renderData();
@ -420,15 +489,19 @@ export default {
// //
handlDel(row) { handlDel(row) {
this.$confirm("确认删除吗?", "提示", { this.$confirm(
this.$t("pages.bannerManager.confirm.delete"),
this.$t("pages.bannerManager.confirm.title"),
{
type: "warning" type: "warning"
}) }
)
.then(() => { .then(() => {
this.listLoading = true; this.listLoading = true;
deleteBanner(row.id, row.sysOrigin).then(res => { deleteBanner(row.id, row.sysOrigin).then(res => {
this.listLoading = false; this.listLoading = false;
this.$message({ this.$message({
message: "删除成功", message: this.$t("pages.bannerManager.message.deleteSuccess"),
type: "success" type: "success"
}); });
this.renderData(); this.renderData();

View File

@ -5,7 +5,7 @@
<!-- 系统选择框 --> <!-- 系统选择框 -->
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.customerService.filter.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="changeSysOrigin" @change="changeSysOrigin"
@ -27,7 +27,7 @@
<el-select <el-select
v-model="listQuery.region" v-model="listQuery.region"
v-loading="loading" v-loading="loading"
placeholder="区域" :placeholder="$t('pages.customerService.filter.region')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
clearable clearable
@ -49,7 +49,7 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t("pages.customerService.action.search") }}
</el-button> </el-button>
<!-- 新增按钮 --> <!-- 新增按钮 -->
@ -59,13 +59,13 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t("pages.customerService.action.add") }}
</el-button> </el-button>
</div> </div>
<!-- 提示 --> <!-- 提示 -->
<el-alert <el-alert
title="排班统一“上海时间”,不区分国家,时差等因素" :title="$t('pages.customerService.message.scheduleNotice')"
type="success" type="success"
:closable="false" :closable="false"
/> />
@ -78,7 +78,11 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="sysOrigin" label="来源系统" align="center"> <el-table-column
prop="sysOrigin"
:label="$t('pages.customerService.table.sourceSystem')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon <sys-origin-icon
:icon="scope.row.sysOrigin" :icon="scope.row.sysOrigin"
@ -86,7 +90,10 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="客服" align="center"> <el-table-column
:label="$t('pages.customerService.table.customerService')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-link <el-link
v-if="scope.row.userProfile.id" v-if="scope.row.userProfile.id"
@ -97,8 +104,15 @@
</el-link> </el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="regionNameStr" label="区域" align="center" /> <el-table-column
<el-table-column label="上班时间段" align="center"> prop="regionNameStr"
:label="$t('pages.customerService.table.region')"
align="center"
/>
<el-table-column
:label="$t('pages.customerService.table.shiftTimeSlots')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-for="(item, index) in scope.row.timeSlots" :key="index"> <span v-for="(item, index) in scope.row.timeSlots" :key="index">
<el-tag style="margin: 2px 2px;">{{ item }}:00</el-tag> <el-tag style="margin: 2px 2px;">{{ item }}:00</el-tag>
@ -107,7 +121,7 @@
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="createTime" prop="createTime"
label="创建时间" :label="$t('pages.customerService.table.createdAt')"
width="100" width="100"
align="center" align="center"
> >
@ -115,7 +129,11 @@
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center"> <el-table-column
fixed="right"
:label="$t('pages.customerService.table.actions')"
align="center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="primary"
@ -156,27 +174,31 @@
label-width="100px" label-width="100px"
style="margin-right: 50px;" style="margin-right: 50px;"
> >
<el-form-item label="平台"> <el-form-item :label="$t('pages.customerService.form.platform')">
<el-input <el-input
v-model.trim="listQuery.sysOrigin" v-model.trim="listQuery.sysOrigin"
:disabled="true" :disabled="true"
type="text" type="text"
/> />
</el-form-item> </el-form-item>
<el-form-item v-if="form.id == ''" label="客服" prop="userId"> <el-form-item
v-if="form.id == ''"
:label="$t('pages.customerService.form.customerService')"
prop="userId"
>
<account-input <account-input
v-model="form.userId" v-model="form.userId"
:sys-origin="listQuery.sysOrigin" :sys-origin="listQuery.sysOrigin"
placeholder="用户ID" :placeholder="$t('pages.customerService.placeholder.userId')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="区域" prop="regionList"> <el-form-item :label="$t('pages.customerService.form.region')" prop="regionList">
<el-select <el-select
v-model="form.regionList" v-model="form.regionList"
v-loading="loading" v-loading="loading"
multiple multiple
clearable clearable
placeholder="请选择" :placeholder="$t('pages.customerService.placeholder.select')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -188,7 +210,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="时间段" prop="timeSlots"> <el-form-item :label="$t('pages.customerService.form.timeSlots')" prop="timeSlots">
<el-checkbox-group v-model="form.timeSlots"> <el-checkbox-group v-model="form.timeSlots">
<el-checkbox-button <el-checkbox-button
v-for="slot in timeSlotList" v-for="slot in timeSlotList"
@ -200,12 +222,12 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button v-if="form.id == ''" type="primary" @click="add()" <el-button v-if="form.id == ''" type="primary" @click="add()"
>添加</el-button >{{ $t("pages.customerService.action.add") }}</el-button
> >
<el-button v-if="form.id != ''" type="primary" @click="update()" <el-button v-if="form.id != ''" type="primary" @click="update()"
>修改</el-button >{{ $t("pages.customerService.action.edit") }}</el-button
> >
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t("pages.customerService.action.cancel") }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -247,7 +269,11 @@ export default {
}, },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: "必填字段", trigger: "blur" } {
required: true,
message: this.$t("pages.customerService.validation.requiredField"),
trigger: "blur"
}
]; ];
return { return {
searchDisabled: false, searchDisabled: false,
@ -361,10 +387,12 @@ export default {
}, },
handleCreate() { handleCreate() {
console.log(1111, this.form.userId); console.log(1111, this.form.userId);
this.textOptTitle = this.$t("pages.customerService.dialog.create");
this.formVisible = true; this.formVisible = true;
this.form.userId = ""; this.form.userId = "";
}, },
handleEdit(row) { handleEdit(row) {
this.textOptTitle = this.$t("pages.customerService.dialog.edit");
this.formVisible = true; this.formVisible = true;
this.form = row; this.form = row;
this.form.userId = row.userProfile.account; this.form.userId = row.userProfile.account;
@ -380,12 +408,16 @@ export default {
del(item) { del(item) {
const that = this; const that = this;
that that
.$confirm("确定删除客服人员吗", "提示", { .$confirm(
type: "warning" that.$t("pages.customerService.confirm.delete"),
}) that.$t("pages.customerService.confirm.title"),
{
type: "warning"
}
)
.then(() => { .then(() => {
that.$message({ that.$message({
message: "删除中,请等待结果", message: that.$t("pages.customerService.message.deleting"),
type: "warning" type: "warning"
}); });
that.listLoading = true; that.listLoading = true;
@ -393,7 +425,7 @@ export default {
.then(res => { .then(res => {
that.listLoading = false; that.listLoading = false;
that.$message({ that.$message({
message: "成功删除", message: that.$t("pages.customerService.message.deleteSuccess"),
type: "success" type: "success"
}); });
that.renderData(); that.renderData();

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.emojiManagement.common.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="changeSysOrigin" @change="changeSysOrigin"
@ -21,7 +21,7 @@
<el-select <el-select
v-model="listQuery.groupId" v-model="listQuery.groupId"
v-loading="groupListLoading" v-loading="groupListLoading"
placeholder="分组" :placeholder="$t('pages.emojiManagement.common.group')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -36,14 +36,14 @@
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.type" v-model="listQuery.type"
placeholder="类型" :placeholder="$t('pages.emojiManagement.common.type')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
clearable clearable
@change="handleSearch" @change="handleSearch"
> >
<el-option <el-option
v-for="item in emojiType" v-for="item in emojiTypeOptions"
:key="item.value" :key="item.value"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -51,14 +51,14 @@
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.shelfStatus" v-model="listQuery.shelfStatus"
placeholder="状态" :placeholder="$t('pages.emojiManagement.common.status')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
clearable clearable
@change="handleSearch" @change="handleSearch"
> >
<el-option <el-option
v-for="item in productConfigShowcase" v-for="item in productConfigShowcaseOptions"
:key="item.value" :key="item.value"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -71,7 +71,7 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
<el-button <el-button
@ -80,7 +80,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -90,32 +90,32 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="sysOrigin" label="系统" align="center" width="100"> <el-table-column :label="$t('pages.emojiManagement.common.system')" prop="sysOrigin" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="资源类型" align="center" width="100"> <el-table-column :label="$t('pages.emojiManagement.emoji.table.sourceType')" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-for="(item, index) in emojiSourceType " :key="index"> <span v-for="(item, index) in emojiSourceTypeOptions " :key="index">
<span v-if="item.value == scope.row.sourceType">{{ item.name }}</span> <span v-if="item.value == scope.row.sourceType">{{ item.name }}</span>
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="封面" align="center" width="100"> <el-table-column :label="$t('pages.emojiManagement.common.cover')" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<avatar :url="scope.row.coverUrl" /> <avatar :url="scope.row.coverUrl" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="group.groupName" label="分组" align="center" /> <el-table-column :label="$t('pages.emojiManagement.common.group')" prop="group.groupName" align="center" />
<el-table-column label="表情类型" align="center"> <el-table-column :label="$t('pages.emojiManagement.emoji.table.emojiType')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-for="(item, index) in emojiType " :key="index"> <span v-for="(item, index) in emojiTypeOptions " :key="index">
<span v-if="item.value == scope.row.type">{{ item.name }}</span> <span v-if="item.value == scope.row.type">{{ item.name }}</span>
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="200" label="上/下架" align="center"> <el-table-column :label="$t('pages.emojiManagement.emoji.table.shelfStatus')" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch
v-model="scope.row.shelfStatus" v-model="scope.row.shelfStatus"
@ -125,16 +125,16 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="排序" prop="sort" align="center" /> <el-table-column :label="$t('pages.emojiManagement.common.sort')" prop="sort" align="center" />
<el-table-column prop="createTime" label="创建时间" width="200" align="center"> <el-table-column :label="$t('pages.emojiManagement.common.createdAt')" prop="createTime" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="100"> <el-table-column :label="$t('pages.emojiManagement.common.actions')" fixed="right" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<div> <div>
<el-button type="text" @click.native="handlUpdate(scope.row)">修改</el-button> <el-button type="text" @click.native="handlUpdate(scope.row)">{{ $t('pages.emojiManagement.common.edit') }}</el-button>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -160,13 +160,13 @@
<div v-loading="submitLoading"> <div v-loading="submitLoading">
<el-form ref="form" :model="form" label-width="110px" :rules="formRules"> <el-form ref="form" :model="form" label-width="110px" :rules="formRules">
<el-form-item <el-form-item
label="分组" :label="$t('pages.emojiManagement.common.group')"
prop="groupId" prop="groupId"
> >
<el-select <el-select
v-model="form.groupId" v-model="form.groupId"
v-loading="groupListLoading" v-loading="groupListLoading"
placeholder="类型" :placeholder="$t('pages.emojiManagement.common.group')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -180,17 +180,17 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="类型" :label="$t('pages.emojiManagement.common.type')"
prop="type" prop="type"
> >
<el-select <el-select
v-model="form.sourceType" v-model="form.sourceType"
placeholder="资源类型" :placeholder="$t('pages.emojiManagement.emoji.placeholder.sourceType')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option <el-option
v-for="(item, index) in emojiSourceType" v-for="(item, index) in emojiSourceTypeOptions"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -200,7 +200,7 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-model="form.coverUrl" label="封面" prop="coverUrl"> <el-form-item v-model="form.coverUrl" :label="$t('pages.emojiManagement.common.cover')" prop="coverUrl">
<el-upload <el-upload
:disabled="coverUploadLoading" :disabled="coverUploadLoading"
:file-list="coverFileList" :file-list="coverFileList"
@ -216,7 +216,7 @@
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item v-model="form.sourceUrl" label="svga/gif" prop="sourceUrl"> <el-form-item v-model="form.sourceUrl" :label="$t('pages.emojiManagement.emoji.form.sourceFile')" prop="sourceUrl">
<el-upload <el-upload
:disabled="sourceUploadLoading" :disabled="sourceUploadLoading"
:class="{'upload-but-hide': !isShowSourceUpload}" :class="{'upload-but-hide': !isShowSourceUpload}"
@ -228,25 +228,25 @@
accept=".svga,.gif,.pag" accept=".svga,.gif,.pag"
> >
<div class="upload-but"> <div class="upload-but">
<el-button :loading="sourceUploadLoading" size="small" type="primary">点击上传</el-button> <el-button :loading="sourceUploadLoading" size="small" type="primary">{{ $t('pages.emojiManagement.emoji.upload.button') }}</el-button>
<div slot="tip" class="el-upload__tip">只能上传svga/gif/pag文件</div> <div slot="tip" class="el-upload__tip">{{ $t('pages.emojiManagement.emoji.upload.tip') }}</div>
</div> </div>
</el-upload> </el-upload>
<svgaplayer v-if="!isShowSourceUpload" :url="form.sourceUrl" /> <svgaplayer v-if="!isShowSourceUpload" :url="form.sourceUrl" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="类型" :label="$t('pages.emojiManagement.common.type')"
prop="type" prop="type"
> >
<el-select <el-select
v-model="form.type" v-model="form.type"
placeholder="类型" :placeholder="$t('pages.emojiManagement.common.type')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option <el-option
v-for="(item, index) in emojiType" v-for="(item, index) in emojiTypeOptions"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -258,17 +258,17 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="上架" :label="$t('pages.emojiManagement.emoji.form.shelfStatus')"
prop="type" prop="type"
> >
<el-select <el-select
v-model="form.shelfStatus" v-model="form.shelfStatus"
placeholder="上架" :placeholder="$t('pages.emojiManagement.emoji.form.shelfStatus')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option <el-option
v-for="(item, index) in productConfigShowcase" v-for="(item, index) in productConfigShowcaseOptions"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -278,13 +278,13 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="顺序" prop="sort"> <el-form-item :label="$t('pages.emojiManagement.emoji.form.sort')" prop="sort">
<el-input v-model.trim="form.sort" type="number" :placeholder="'数字越小越靠前'" /> <el-input v-model.trim="form.sort" type="number" :placeholder="$t('pages.emojiManagement.emoji.placeholder.sort')" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('common.save') }}</el-button>
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -319,7 +319,7 @@ export default {
components: { Pagination }, components: { Pagination },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: '必填字段不可为空', trigger: 'blur' } { required: true, message: this.$t('pages.emojiManagement.validation.required'), trigger: 'blur' }
] ]
return { return {
svgaplayerVisable: false, svgaplayerVisable: false,
@ -364,7 +364,25 @@ export default {
return !this.form.sourceUrl return !this.form.sourceUrl
}, },
textOptTitle() { textOptTitle() {
return (this.row && this.row.id ? '修改' : '添加') + `(${this.$sysOriginMap[this.listQuery.sysOrigin]})` return (this.row && this.row.id ? this.$t('pages.emojiManagement.dialog.edit') : this.$t('pages.emojiManagement.dialog.add')) + `(${this.$sysOriginMap[this.listQuery.sysOrigin]})`
},
productConfigShowcaseOptions() {
return productConfigShowcase.map(item => ({
...item,
name: item.value ? this.$t('pages.emojiManagement.options.onShelf') : this.$t('pages.emojiManagement.options.offShelf')
}))
},
emojiTypeOptions() {
return emojiType.map(item => ({
...item,
name: item.value === 'VIP' ? this.$t('pages.emojiManagement.options.vip') : this.$t('pages.emojiManagement.options.normal')
}))
},
emojiSourceTypeOptions() {
return emojiSourceType.map(item => ({
...item,
name: String(item.name).toUpperCase()
}))
}, },
...mapGetters(['permissionsSysOriginPlatforms']) ...mapGetters(['permissionsSysOriginPlatforms'])
}, },
@ -451,7 +469,7 @@ export default {
}, },
handleSwitchChange(row) { handleSwitchChange(row) {
const that = this const that = this
var text = row.shelfStatus ? '上架成功' : '下架成功' var text = row.shelfStatus ? that.$t('pages.emojiManagement.message.onShelfSuccess') : that.$t('pages.emojiManagement.message.offShelfSuccess')
offShelfById(row.id).then(res => { offShelfById(row.id).then(res => {
that.$emit('success', text) that.$emit('success', text)
that.renderData(true) that.renderData(true)

View File

@ -13,12 +13,12 @@
<el-form ref="form" :model="form" label-width="110px" :rules="formRules" style="margin-right: 20px;"> <el-form ref="form" :model="form" label-width="110px" :rules="formRules" style="margin-right: 20px;">
<el-form-item <el-form-item
v-if="!form.id" v-if="!form.id"
label="系统" :label="$t('pages.emojiManagement.common.system')"
prop="sysOrigin" prop="sysOrigin"
> >
<el-select <el-select
v-model="form.sysOrigin" v-model="form.sysOrigin"
placeholder="系统" :placeholder="$t('pages.emojiManagement.common.system')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -35,15 +35,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="!form.id" label="分组Code" prop="groupCode"> <el-form-item v-if="!form.id" :label="$t('pages.emojiManagement.group.form.groupCode')" prop="groupCode">
<el-input v-model.trim="form.groupCode" placeholder="分组Code" /> <el-input v-model.trim="form.groupCode" :placeholder="$t('pages.emojiManagement.group.placeholder.groupCode')" />
</el-form-item> </el-form-item>
<el-form-item label="分组名称" prop="groupName"> <el-form-item :label="$t('pages.emojiManagement.group.form.groupName')" prop="groupName">
<el-input v-model.trim="form.groupName" placeholder="分组名称" /> <el-input v-model.trim="form.groupName" :placeholder="$t('pages.emojiManagement.group.placeholder.groupName')" />
</el-form-item> </el-form-item>
<el-form-item v-model="form.cover" label="封面" prop="cover"> <el-form-item v-model="form.cover" :label="$t('pages.emojiManagement.common.cover')" prop="cover">
<el-upload <el-upload
:disabled="coverUploadLoading" :disabled="coverUploadLoading"
:file-list="coverFileList" :file-list="coverFileList"
@ -58,28 +58,28 @@
<i slot="default" v-loading="coverUploadLoading" class="el-icon-plus" /> <i slot="default" v-loading="coverUploadLoading" class="el-icon-plus" />
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="售卖价格" prop="amount"> <el-form-item :label="$t('pages.emojiManagement.group.form.amount')" prop="amount">
<el-input v-model.trim="form.amount" type="number" :placeholder="'不填或填0都为免费'" /> <el-input v-model.trim="form.amount" type="number" :placeholder="$t('pages.emojiManagement.group.placeholder.amount')" />
</el-form-item> </el-form-item>
<el-form-item label="上/下架" prop="shelfStatus"> <el-form-item :label="$t('pages.emojiManagement.group.form.shelfStatus')" prop="shelfStatus">
<el-radio-group v-model="form.shelfStatus"> <el-radio-group v-model="form.shelfStatus">
<el-radio :label="1">上架</el-radio> <el-radio :label="1">{{ $t('pages.emojiManagement.options.onShelf') }}</el-radio>
<el-radio :label="0">下架</el-radio> <el-radio :label="0">{{ $t('pages.emojiManagement.options.offShelf') }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="ktv表情" prop="ktvStatus"> <el-form-item :label="$t('pages.emojiManagement.group.form.ktvStatus')" prop="ktvStatus">
<el-radio-group v-model="form.ktvStatus"> <el-radio-group v-model="form.ktvStatus">
<el-radio :label="1"></el-radio> <el-radio :label="1">{{ $t('pages.emojiManagement.options.yes') }}</el-radio>
<el-radio :label="0"></el-radio> <el-radio :label="0">{{ $t('pages.emojiManagement.options.no') }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="权重" prop="sort"> <el-form-item :label="$t('pages.emojiManagement.group.form.weight')" prop="sort">
<el-input v-model.trim="form.sort" v-number placeholder="数字越大越靠前" /> <el-input v-model.trim="form.sort" v-number :placeholder="$t('pages.emojiManagement.group.placeholder.weight')" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('common.save') }}</el-button>
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -101,7 +101,7 @@ export default {
}, },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: '必填字段不可为空', trigger: 'blur' } { required: true, message: this.$t('pages.emojiManagement.validation.required'), trigger: 'blur' }
] ]
return { return {
submitLoading: false, submitLoading: false,
@ -138,7 +138,7 @@ export default {
return !this.form.sourceUrl return !this.form.sourceUrl
}, },
textOptTitle() { textOptTitle() {
return this.row && this.row.id ? '修改' : '添加' return this.row && this.row.id ? this.$t('pages.emojiManagement.dialog.edit') : this.$t('pages.emojiManagement.dialog.add')
}, },
isUpdate() { isUpdate() {
return this.row && this.row.id return this.row && this.row.id

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.emojiManagement.common.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -20,29 +20,29 @@
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.shelfStatus" v-model="listQuery.shelfStatus"
placeholder="状态" :placeholder="$t('pages.emojiManagement.common.status')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
clearable clearable
@change="handleSearch" @change="handleSearch"
> >
<el-option label="上架" :value="1" /> <el-option :label="$t('pages.emojiManagement.options.onShelf')" :value="1" />
<el-option label="下架" :value="0" /> <el-option :label="$t('pages.emojiManagement.options.offShelf')" :value="0" />
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.ktvStatus" v-model="listQuery.ktvStatus"
placeholder="ktv表情" :placeholder="$t('pages.emojiManagement.group.filter.ktvEmoji')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
clearable clearable
@change="handleSearch" @change="handleSearch"
> >
<el-option label="是" :value="1" /> <el-option :label="$t('pages.emojiManagement.options.yes')" :value="1" />
<el-option label="否" :value="0" /> <el-option :label="$t('pages.emojiManagement.options.no')" :value="0" />
</el-select> </el-select>
<el-input <el-input
v-model.trim="listQuery.groupCode" v-model.trim="listQuery.groupCode"
placeholder="编码" :placeholder="$t('pages.emojiManagement.common.code')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
@ -52,7 +52,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
<el-button <el-button
@ -61,7 +61,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="clickCreate" @click="clickCreate"
> >
新增 {{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -71,25 +71,25 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="sysOrigin" label="系统" align="center" width="100"> <el-table-column :label="$t('pages.emojiManagement.common.system')" prop="sysOrigin" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="groupCode" label="编码" align="center" /> <el-table-column :label="$t('pages.emojiManagement.common.code')" prop="groupCode" align="center" />
<el-table-column prop="groupName" label="名称" align="center" /> <el-table-column :label="$t('pages.emojiManagement.common.name')" prop="groupName" align="center" />
<el-table-column label="封面" align="center" width="150"> <el-table-column :label="$t('pages.emojiManagement.common.cover')" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<avatar :url="scope.row.cover" /> <avatar :url="scope.row.cover" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="售卖价格" align="center"> <el-table-column :label="$t('pages.emojiManagement.group.table.salePrice')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.amount > 0">{{ scope.row.amount }}</span> <span v-if="scope.row.amount > 0">{{ scope.row.amount }}</span>
<span v-else>免费</span> <span v-else>{{ $t('pages.emojiManagement.options.free') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="200" label="上/下架" align="center"> <el-table-column :label="$t('pages.emojiManagement.group.table.shelfStatus')" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch
v-model="scope.row.shelfStatus" v-model="scope.row.shelfStatus"
@ -97,24 +97,24 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="100" label="ktv表情" align="center"> <el-table-column :label="$t('pages.emojiManagement.group.filter.ktvEmoji')" width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div> <div>
<el-tag v-if="scope.row.ktvStatus === 1"></el-tag> <el-tag v-if="scope.row.ktvStatus === 1">{{ $t('pages.emojiManagement.options.yes') }}</el-tag>
<el-tag v-else-if="scope.row.ktvStatus === 0"></el-tag> <el-tag v-else-if="scope.row.ktvStatus === 0">{{ $t('pages.emojiManagement.options.no') }}</el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="排序" prop="sort" align="center" /> <el-table-column :label="$t('pages.emojiManagement.common.sort')" prop="sort" align="center" />
<el-table-column prop="createTime" label="创建时间" width="200" align="center"> <el-table-column :label="$t('pages.emojiManagement.common.createdAt')" prop="createTime" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="100"> <el-table-column :label="$t('pages.emojiManagement.common.actions')" fixed="right" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<div> <div>
<el-button type="text" @click.native="clickEdit(scope.row)">修改</el-button> <el-button type="text" @click.native="clickEdit(scope.row)">{{ $t('pages.emojiManagement.common.edit') }}</el-button>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -191,7 +191,7 @@ export default {
handleSwitchChange(row) { handleSwitchChange(row) {
const that = this const that = this
switchGroupShelfStatus(row.id, row.shelfStatus).then(res => { switchGroupShelfStatus(row.id, row.shelfStatus).then(res => {
that.$emit('success', 'Successful') that.$emit('success', that.$t('pages.emojiManagement.message.updateSuccess'))
that.renderData(false) that.renderData(false)
}).catch(er => { }).catch(er => {
row.shelfStatus = row.shelfStatus ? 0 : 1 row.shelfStatus = row.shelfStatus ? 0 : 1

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane v-for="item in tables" :key="item.name" :label="item.title" :name="item.component" /> <el-tab-pane v-for="item in tables" :key="item.name" :label="$t(item.titleKey)" :name="item.component" />
<component :is="activeName" /> <component :is="activeName" />
</el-tabs> </el-tabs>
</div> </div>
@ -17,11 +17,11 @@ export default {
activeName: 'EmojiGroup', activeName: 'EmojiGroup',
tables: [ tables: [
{ {
title: '分组', titleKey: 'pages.emojiManagement.tabs.group',
component: 'EmojiGroup' component: 'EmojiGroup'
}, },
{ {
title: '资源', titleKey: 'pages.emojiManagement.tabs.resource',
component: 'EmojiConf' component: 'EmojiConf'
} }
] ]

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container-region"> <div class="app-container-region">
<el-dialog <el-dialog
:title="'游戏参数配置'" :title="$t('pages.gameConfig.fruit.gameParamsTitle')"
:visible="true" :visible="true"
:modal-append-to-body="true" :modal-append-to-body="true"
:append-to-body="true" :append-to-body="true"
@ -9,27 +9,27 @@
:before-close="handleClose" :before-close="handleClose"
> >
<div style="margin-left: 10%;"> <div style="margin-left: 10%;">
<span class="custom-font" style="size: 20;">奖项配置</span> <span class="custom-font" style="size: 20;">{{ $t('pages.gameConfig.fruit.prizeConfig') }}</span>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.gameConfig.common.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column <el-table-column
prop="sort" prop="sort"
label="排序" :label="$t('pages.gameConfig.common.sort')"
width="100" width="100"
/> />
<el-table-column <el-table-column
prop="prizeName" prop="prizeName"
label="名称" :label="$t('pages.gameConfig.common.name')"
width="120" width="120"
/> />
<el-table-column <el-table-column
prop="prizeImg" prop="prizeImg"
label="图标" :label="$t('pages.gameConfig.common.icon')"
width="150" width="150"
> >
<template slot-scope="scope"> <template slot-scope="scope">
@ -43,31 +43,31 @@
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="award" prop="award"
label="获得奖励倍数" :label="$t('pages.gameConfig.fruit.awardMultiplier')"
width="120" width="120"
/> />
<el-table-column <el-table-column
prop="prob" prop="prob"
width="100" width="100"
label="概率" :label="$t('pages.gameConfig.common.probability')"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ !scope.row.prob ? 0 : (scope.row.prob * 100).toFixed(2) }} % {{ !scope.row.prob ? 0 : (scope.row.prob * 100).toFixed(2) }} %
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="操作" :label="$t('pages.gameConfig.common.actions')"
width="120" width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click.native="handleUpdate(scope.row)">修改</el-button> <el-button type="text" @click.native="handleUpdate(scope.row)">{{ $t('pages.gameConfig.action.edit') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<el-dialog <el-dialog
:title="'奖项配置'" :title="$t('pages.gameConfig.fruit.prizeConfig')"
:visible="innerVisible" :visible="innerVisible"
:modal-append-to-body="true" :modal-append-to-body="true"
:before-close="closePrizeDialog" :before-close="closePrizeDialog"
@ -79,7 +79,7 @@
<div v-loading="prizeLoading"> <div v-loading="prizeLoading">
<div class="form-contetn"> <div class="form-contetn">
<el-form ref="form" :model="prize" :rules="rules" label-width="110px" style="margin-right: 50px;"> <el-form ref="form" :model="prize" :rules="rules" label-width="110px" style="margin-right: 50px;">
<el-form-item label="封面" prop="prizeImg"> <el-form-item :label="$t('pages.gameConfig.common.cover')" prop="prizeImg">
<el-upload <el-upload
:disabled="coverUploadLoading" :disabled="coverUploadLoading"
:file-list="coverFileList" :file-list="coverFileList"
@ -94,42 +94,42 @@
<i slot="default" v-loading="coverUploadLoading" class="el-icon-plus" /> <i slot="default" v-loading="coverUploadLoading" class="el-icon-plus" />
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="名称" prop="prizeName"> <el-form-item :label="$t('pages.gameConfig.common.name')" prop="prizeName">
<el-input v-model.trim="prize.prizeName" type="text" placeholder="请输入名称" minlength="1" maxlength="150" show-word-limit /> <el-input v-model.trim="prize.prizeName" type="text" :placeholder="$t('pages.gameConfig.placeholder.name')" minlength="1" maxlength="150" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="类型" prop="type"> <el-form-item :label="$t('pages.gameConfig.common.type')" prop="type">
<el-select <el-select
v-model="prize.type" v-model="prize.type"
placeholder="类型" :placeholder="$t('pages.gameConfig.common.type')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="蔬菜" :value="1" /> <el-option :label="$t('pages.gameConfig.fruit.vegetable')" :value="1" />
<el-option label="披萨" :value="2" /> <el-option :label="$t('pages.gameConfig.fruit.pizza')" :value="2" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="获得奖励 X " prop="award"> <el-form-item :label="$t('pages.gameConfig.fruit.awardX')" prop="award">
<el-input-number <el-input-number
v-model.trim="prize.award" v-model.trim="prize.award"
v-number v-number
controls-position="right" controls-position="right"
:min="0" :min="0"
:max="99999999" :max="99999999"
placeholder="请输入获得奖励" :placeholder="$t('pages.gameConfig.fruit.awardPlaceholder')"
/><span> </span> /><span> {{ $t('pages.gameConfig.fruit.times') }}</span>
</el-form-item> </el-form-item>
<el-form-item label="概率" prop="prob"> <el-form-item :label="$t('pages.gameConfig.common.probability')" prop="prob">
<el-input-number v-model="prize.prob" controls-position="right" :precision="2" :min="0" :max="99999" placeholder="概率" />% <el-input-number v-model="prize.prob" controls-position="right" :precision="2" :min="0" :max="99999" :placeholder="$t('pages.gameConfig.common.probability')" />%
</el-form-item> </el-form-item>
<el-form-item label="排序" prop="sort"> <el-form-item :label="$t('pages.gameConfig.common.sort')" prop="sort">
<el-input-number v-model.trim="prize.sort" v-number :min="0" :max="99999" placeholder="降序排列(数字越大越靠前)" /> <el-input-number v-model.trim="prize.sort" v-number :min="0" :max="99999" :placeholder="$t('pages.gameConfig.placeholder.sort')" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div slot="footer" style="text-align: right;"> <div slot="footer" style="text-align: right;">
<el-button @click="closePrizeDialog()">取消</el-button> <el-button @click="closePrizeDialog()">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submitPrize()">保存</el-button> <el-button type="primary" @click="submitPrize()">{{ $t('common.save') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
@ -146,7 +146,7 @@
:rules="configRules" :rules="configRules"
label-width="140px" label-width="140px"
> >
<el-form-item label="蔬菜图标:" prop="vegetableImg"> <el-form-item :label="$t('pages.gameConfig.fruit.vegetableIcon')" prop="vegetableImg">
<el-upload <el-upload
class="upload-demo" class="upload-demo"
action="" action=""
@ -155,10 +155,10 @@
accept="image/png,image/jpg,image/jpeg" accept="image/png,image/jpg,image/jpeg"
> >
<el-image v-if="form.vegetableImg" :src="form.vegetableImg" fit="fill" style="width: 150px; height: 150px" /> <el-image v-if="form.vegetableImg" :src="form.vegetableImg" fit="fill" style="width: 150px; height: 150px" />
<el-button v-loading="uploadLoading" size="small" type="primary">点击上传</el-button> <el-button v-loading="uploadLoading" size="small" type="primary">{{ $t('pages.gameConfig.upload.clickUpload') }}</el-button>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="披萨图标:" prop="pizzaImg"> <el-form-item :label="$t('pages.gameConfig.fruit.pizzaIcon')" prop="pizzaImg">
<el-upload <el-upload
class="upload-demo" class="upload-demo"
action="" action=""
@ -167,20 +167,20 @@
accept="image/png,image/jpg,image/jpeg" accept="image/png,image/jpg,image/jpeg"
> >
<el-image v-if="form.pizzaImg" :src="form.pizzaImg" fit="fill" style="width: 150px; height: 150px" /> <el-image v-if="form.pizzaImg" :src="form.pizzaImg" fit="fill" style="width: 150px; height: 150px" />
<el-button v-loading="uploadPizzLoading" size="small" type="primary">点击上传</el-button> <el-button v-loading="uploadPizzLoading" size="small" type="primary">{{ $t('pages.gameConfig.upload.clickUpload') }}</el-button>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="下注金额配置" prop="code"> <el-form-item :label="$t('pages.gameConfig.fruit.wagerConfig')" prop="code">
<el-input <el-input
v-model.trim="form.wager" v-model.trim="form.wager"
placeholder="下注金额配置" :placeholder="$t('pages.gameConfig.fruit.wagerConfig')"
style="width: 250px;" style="width: 250px;"
maxlength="20" maxlength="20"
show-word-limit show-word-limit
/> />
<span>请用逗号隔开例如10,20.30.40</span> <span>{{ $t('pages.gameConfig.fruit.wagerTip') }}</span>
</el-form-item> </el-form-item>
<el-form-item label="开出蔬菜拼盘盈利" prop="vegetableLotteryProfit"> <el-form-item :label="$t('pages.gameConfig.fruit.vegetableLotteryProfit')" prop="vegetableLotteryProfit">
<el-input <el-input
v-model.trim="form.vegetableLotteryProfit" v-model.trim="form.vegetableLotteryProfit"
v-number v-number
@ -188,10 +188,10 @@
style="width: 250px;" style="width: 250px;"
:min="0" :min="0"
:max="99999999" :max="99999999"
placeholder="开出蔬菜拼盘盈利" :placeholder="$t('pages.gameConfig.fruit.vegetableLotteryProfit')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="开出蔬菜拼盘次数" prop="vegetableNumber"> <el-form-item :label="$t('pages.gameConfig.fruit.vegetableNumber')" prop="vegetableNumber">
<el-input <el-input
v-model.trim="form.vegetableNumber" v-model.trim="form.vegetableNumber"
v-number v-number
@ -199,10 +199,10 @@
style="width: 250px;" style="width: 250px;"
:min="0" :min="0"
:max="99999999" :max="99999999"
placeholder="开出蔬菜拼盘次数" :placeholder="$t('pages.gameConfig.fruit.vegetableNumber')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="开出披萨拼盘盈利" prop="pizzaLotteryProfit"> <el-form-item :label="$t('pages.gameConfig.fruit.pizzaLotteryProfit')" prop="pizzaLotteryProfit">
<el-input-number <el-input-number
v-model.trim="form.pizzaLotteryProfit" v-model.trim="form.pizzaLotteryProfit"
v-number v-number
@ -210,10 +210,10 @@
style="width: 250px;" style="width: 250px;"
:min="0" :min="0"
:max="99999999" :max="99999999"
placeholder="开出披萨拼盘盈利" :placeholder="$t('pages.gameConfig.fruit.pizzaLotteryProfit')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="开出披萨拼盘次数" prop="pizzaNumber"> <el-form-item :label="$t('pages.gameConfig.fruit.pizzaNumber')" prop="pizzaNumber">
<el-input <el-input
v-model.trim="form.pizzaNumber" v-model.trim="form.pizzaNumber"
v-number v-number
@ -221,10 +221,10 @@
style="width: 250px;" style="width: 250px;"
:min="0" :min="0"
:max="99999999" :max="99999999"
placeholder="开出披萨拼盘次数" :placeholder="$t('pages.gameConfig.fruit.pizzaNumber')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="幸运转盘返奖" prop="code"> <el-form-item :label="$t('pages.gameConfig.fruit.luckyWheelReturn')" prop="code">
<el-input-number <el-input-number
v-model="form.lossRatio" v-model="form.lossRatio"
controls-position="right" controls-position="right"
@ -232,7 +232,7 @@
:min="0" :min="0"
:max="9999" :max="9999"
:precision="2" :precision="2"
placeholder="最小值" :placeholder="$t('pages.gameConfig.placeholder.min')"
/>% - />% -
<el-input-number <el-input-number
v-model="form.profitRatio" v-model="form.profitRatio"
@ -241,11 +241,11 @@
:min="0" :min="0"
:max="9999" :max="9999"
:precision="2" :precision="2"
placeholder="最大值" :placeholder="$t('pages.gameConfig.placeholder.max')"
/>% <span> =/98-105%</span> />% <span> {{ $t('pages.gameConfig.fruit.returnRateTip') }}</span>
</el-form-item> </el-form-item>
<el-form-item label="当天亏损金额(充值榜补回)" prop="pizzaNumber"> <el-form-item :label="$t('pages.gameConfig.fruit.todayLossLottery')" prop="pizzaNumber">
<el-input <el-input
v-model="form.todayLossLottery" v-model="form.todayLossLottery"
v-number v-number
@ -253,10 +253,10 @@
style="width: 250px;" style="width: 250px;"
:min="0" :min="0"
:max="99999999" :max="99999999"
placeholder="当天亏损金额" :placeholder="$t('pages.gameConfig.fruit.todayLossLotteryPlaceholder')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="亏损率(充值榜补回)" prop="pizzaNumber"> <el-form-item :label="$t('pages.gameConfig.fruit.lossRatioLottery')" prop="pizzaNumber">
<el-input-number <el-input-number
v-model="form.lossRatioLottery" v-model="form.lossRatioLottery"
controls-position="right" controls-position="right"
@ -264,11 +264,11 @@
:precision="2" :precision="2"
:min="0" :min="0"
:max="9999" :max="9999"
placeholder="亏损率" :placeholder="$t('pages.gameConfig.fruit.lossRatioPlaceholder')"
/>%<span> 90%</span> />%<span> {{ $t('pages.gameConfig.fruit.defaultNinetyPercent') }}</span>
</el-form-item> </el-form-item>
<el-form-item label="奖项下注金额达到" prop="pizzaNumber"> <el-form-item :label="$t('pages.gameConfig.fruit.hotBetAmount')" prop="pizzaNumber">
<el-input <el-input
v-model.trim="form.hotBetAmount" v-model.trim="form.hotBetAmount"
v-number v-number
@ -276,14 +276,14 @@
style="width: 150px;" style="width: 150px;"
:min="0" :min="0"
:max="99999999" :max="99999999"
placeholder="奖项下注金额达到" :placeholder="$t('pages.gameConfig.fruit.hotBetAmount')"
/><span style="margin-left: 10px;"></span> /><span style="margin-left: 10px;">{{ $t('pages.gameConfig.fruit.showHot') }}</span>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div class="drawer-footer"> <div class="drawer-footer">
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('common.save') }}</el-button>
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
</div> </div>
</el-row></div> </el-row></div>
</el-dialog> </el-dialog>
@ -351,7 +351,7 @@ export default {
} }
}, },
data() { data() {
const commonRules = [{ required: true, message: '必填字段', trigger: 'blur' }] const commonRules = [{ required: true, message: this.$t('pages.gameConfig.validation.required'), trigger: 'blur' }]
return { return {
list: [], list: [],
listQuery: { listQuery: {
@ -490,7 +490,7 @@ export default {
checkSubmitData(configData) { checkSubmitData(configData) {
console.log(configData.wager) console.log(configData.wager)
if (!configData.wager || configData.wager.split(',').length !== 4) { if (!configData.wager || configData.wager.split(',').length !== 4) {
this.$opsMessage.fail('下注单位异常') this.$opsMessage.fail(this.$t('pages.gameConfig.fruit.message.invalidWagerUnit'))
return false return false
} }
const wagers = configData.wager.split(',') const wagers = configData.wager.split(',')
@ -503,17 +503,17 @@ export default {
} }
}) })
if (!isInt) { if (!isInt) {
this.$opsMessage.fail('下注单位只能为整数') this.$opsMessage.fail(this.$t('pages.gameConfig.fruit.message.wagerIntegerOnly'))
return false return false
} }
if (!configData.lossRatio || !configData.profitRatio) { if (!configData.lossRatio || !configData.profitRatio) {
this.$opsMessage.fail('返奖率不能为空') this.$opsMessage.fail(this.$t('pages.gameConfig.fruit.message.returnRateRequired'))
return false return false
} }
if (configData.lossRatio >= configData.profitRatio) { if (configData.lossRatio >= configData.profitRatio) {
this.$opsMessage.fail('返奖率最小值不能大于等于最大值') this.$opsMessage.fail(this.$t('pages.gameConfig.fruit.message.returnRateMinLessThanMax'))
return false return false
} }
return true return true

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane v-for="item in tables" :key="item.name" :label="item.title" :name="item.component" /> <el-tab-pane v-for="item in tables" :key="item.name" :label="$t(item.titleKey)" :name="item.component" />
<component :is="activeName" /> <component :is="activeName" />
</el-tabs> </el-tabs>
</div> </div>
@ -17,11 +17,11 @@ export default {
activeName: 'GameConfigRoom', activeName: 'GameConfigRoom',
tables: [ tables: [
{ {
title: '房间', titleKey: 'pages.gameConfig.tabs.room',
component: 'GameConfigRoom' component: 'GameConfigRoom'
} }
// { // {
// title: '', // titleKey: 'pages.gameConfig.tabs.match',
// component: 'GameConfigMatch' // component: 'GameConfigMatch'
// } // }
] ]

View File

@ -13,8 +13,8 @@
<div v-loading="submitLoading"> <div v-loading="submitLoading">
<div class="drawer-form"> <div class="drawer-form">
<el-form ref="form" :model="form" :rules="rules" label-width="50px"> <el-form ref="form" :model="form" :rules="rules" label-width="50px">
<div class="blockquote">基本信息</div> <div class="blockquote">{{ $t('pages.gameConfig.section.basicInfo') }}</div>
<el-form-item label="封面"> <el-form-item :label="$t('pages.gameConfig.common.cover')">
<el-col :span="12"> <el-col :span="12">
<el-form-item prop="cover" label-width="0"> <el-form-item prop="cover" label-width="0">
<el-upload <el-upload
@ -31,7 +31,7 @@
:on-change="changeUploadCover" :on-change="changeUploadCover"
> >
<i slot="default" v-loading="coverUploadLoading" class="el-icon-plus" /> <i slot="default" v-loading="coverUploadLoading" class="el-icon-plus" />
<div slot="tip" class="el-upload__tip">封面icon</div> <div slot="tip" class="el-upload__tip">{{ $t('pages.gameConfig.upload.coverIcon') }}</div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -51,16 +51,16 @@
:on-change="changeUploadBgCover" :on-change="changeUploadBgCover"
> >
<i slot="default" v-loading="bagCoverUploadLoading" class="el-icon-plus" /> <i slot="default" v-loading="bagCoverUploadLoading" class="el-icon-plus" />
<div slot="tip" class="el-upload__tip">背景图</div> <div slot="tip" class="el-upload__tip">{{ $t('pages.gameConfig.upload.backgroundImage') }}</div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label="系统" prop="sysOrigin"> <el-form-item :label="$t('pages.gameConfig.common.system')" prop="sysOrigin">
<el-select <el-select
v-model="form.sysOrigin" v-model="form.sysOrigin"
placeholder="选择系统" :placeholder="$t('pages.gameConfig.placeholder.selectSystem')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -75,31 +75,31 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="名称" prop="name"> <el-form-item :label="$t('pages.gameConfig.common.name')" prop="name">
<el-input v-model.trim="form.name" type="text" placeholder="请输入名称" minlength="1" maxlength="150" show-word-limit /> <el-input v-model.trim="form.name" type="text" :placeholder="$t('pages.gameConfig.placeholder.name')" minlength="1" maxlength="150" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="编号" prop="gameCode"> <el-form-item :label="$t('pages.gameConfig.common.code')" prop="gameCode">
<el-input v-model.trim="form.gameCode" type="text" placeholder="请输入编号" minlength="1" maxlength="150" show-word-limit /> <el-input v-model.trim="form.gameCode" type="text" :placeholder="$t('pages.gameConfig.placeholder.code')" minlength="1" maxlength="150" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="showcase"> <el-form-item :label="$t('pages.gameConfig.common.status')" prop="showcase">
<el-select <el-select
v-model="form.showcase" v-model="form.showcase"
placeholder="状态" :placeholder="$t('pages.gameConfig.common.status')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="下架" :value="false" /> <el-option :label="$t('pages.gameConfig.status.offShelf')" :value="false" />
<el-option label="上架" :value="true" /> <el-option :label="$t('pages.gameConfig.status.onShelf')" :value="true" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="排序" prop="sort"> <el-form-item :label="$t('pages.gameConfig.common.sort')" prop="sort">
<el-input-number v-model.trim="form.sort" v-number style="width: 100%;" :min="0" :max="99999" placeholder="降序排列(数字越大越靠前)" /> <el-input-number v-model.trim="form.sort" v-number style="width: 100%;" :min="0" :max="99999" :placeholder="$t('pages.gameConfig.placeholder.sort')" />
</el-form-item> </el-form-item>
<div class="blockquote">模式配置</div> <div class="blockquote">{{ $t('pages.gameConfig.section.modeConfig') }}</div>
<el-form-item label-width="0px"> <el-form-item label-width="0px">
<div v-for="(item, index) in form.models" :key="index" class="model-row"> <div v-for="(item, index) in form.models" :key="index" class="model-row">
<el-form-item label="封面"> <el-form-item :label="$t('pages.gameConfig.common.cover')">
<el-upload <el-upload
:ref="'modelBgCover_'+index" :ref="'modelBgCover_'+index"
:disabled="item.uploadLoading" :disabled="item.uploadLoading"
@ -118,11 +118,11 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="model-item" class="model-item"
label="玩家" :label="$t('pages.gameConfig.common.players')"
:prop="'models.' + index + '.players'" :prop="'models.' + index + '.players'"
:rules="commonRules" :rules="commonRules"
> >
<el-select v-model="item.players" placeholder="请选择" style="width: 100%;"> <el-select v-model="item.players" :placeholder="$t('pages.gameConfig.placeholder.select')" style="width: 100%;">
<el-option <el-option
v-for="(pItem, pIndex) in players" v-for="(pItem, pIndex) in players"
:key="pIndex" :key="pIndex"
@ -134,14 +134,14 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="model-item" class="model-item"
label="金额" :label="$t('pages.gameConfig.common.amount')"
:prop="'models.' + index + '.amounts'" :prop="'models.' + index + '.amounts'"
:rules="commonRules" :rules="commonRules"
> >
<el-input-number v-model.trim="item.amounts" v-number style="width: 100%;" :min="0" :max="99999" placeholder="降序排列(数字越大越靠前)" /> <el-input-number v-model.trim="item.amounts" v-number style="width: 100%;" :min="0" :max="99999" :placeholder="$t('pages.gameConfig.placeholder.sort')" />
</el-form-item> </el-form-item>
<div class="model-del font-danger" @click="clickRemoveModel(item, index)"> <div class="model-del font-danger" @click="clickRemoveModel(item, index)">
移除 <i class="el-icon-delete-solid" /> {{ $t('pages.gameConfig.action.remove') }} <i class="el-icon-delete-solid" />
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
@ -151,8 +151,8 @@
</el-form> </el-form>
</div> </div>
<div class="drawer-footer" style="text-align: right;"> <div class="drawer-footer" style="text-align: right;">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('common.save') }}</el-button>
</div> </div>
</div> </div>
</el-drawer> </el-drawer>
@ -171,7 +171,7 @@ export default {
} }
}, },
data() { data() {
const commonRules = [{ required: true, message: '必填字段', trigger: 'blur' }] const commonRules = [{ required: true, message: this.$t('pages.gameConfig.validation.required'), trigger: 'blur' }]
return { return {
commonRules, commonRules,
players: [2, 4, 6, 9], players: [2, 4, 6, 9],
@ -208,7 +208,7 @@ export default {
}, },
computed: { computed: {
textOptTitle() { textOptTitle() {
return this.row && this.row.id ? '修改' : '新增' return this.row && this.row.id ? this.$t('pages.gameConfig.dialog.edit') : this.$t('pages.gameConfig.dialog.add')
}, },
isShowCoverUpload() { isShowCoverUpload() {
return !this.form.cover return !this.form.cover
@ -241,12 +241,12 @@ export default {
const that = this const that = this
that.$refs.form.validate(valid => { that.$refs.form.validate(valid => {
if (!valid) { if (!valid) {
that.$opsMessage.warn('请先完善现有表单参数!') that.$opsMessage.warn(that.$t('pages.gameConfig.message.completeExistingMode'))
return return
} }
if (that.form.models.length === 3) { if (that.form.models.length === 3) {
that.$opsMessage.warn('一个游戏最多运行添加 3 种模式!') that.$opsMessage.warn(that.$t('pages.gameConfig.message.maxModeCount'))
return return
} }
that.form.models.push(that.createModel()) that.form.models.push(that.createModel())
@ -337,7 +337,7 @@ export default {
return return
} }
if (that.form.models.length <= 0) { if (that.form.models.length <= 0) {
that.$opsMessage.warn('最少,必须配置一种游戏模式!') that.$opsMessage.warn(that.$t('pages.gameConfig.message.minModeCount'))
return return
} }
const submitForm = Object.assign({}, that.form) const submitForm = Object.assign({}, that.form)

View File

@ -4,7 +4,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.gameConfig.common.system')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -21,13 +21,13 @@
</el-select> </el-select>
<el-select <el-select
v-model="listQuery.showcase" v-model="listQuery.showcase"
placeholder="状态" :placeholder="$t('pages.gameConfig.common.status')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
> >
<el-option label="上架" :value="true" /> <el-option :label="$t('pages.gameConfig.status.onShelf')" :value="true" />
<el-option label="下架" :value="false" /> <el-option :label="$t('pages.gameConfig.status.offShelf')" :value="false" />
</el-select> </el-select>
<el-button <el-button
class="filter-item" class="filter-item"
@ -35,7 +35,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
<el-button <el-button
class="filter-item" class="filter-item"
@ -43,13 +43,13 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.gameConfig.common.loading')"
fit fit
highlight-current-row highlight-current-row
@cell-mouse-enter="handleMouseEnter" @cell-mouse-enter="handleMouseEnter"
@ -72,15 +72,15 @@
</el-image> </el-image>
</div> </div>
<div class="info flex-c"> <div class="info flex-c">
<div style="margin: 10px"> 玩家: {{ item.players }}</div> <div style="margin: 10px"> {{ $t('pages.gameConfig.common.players') }}: {{ item.players }}</div>
<div style="margin: 10px">门票: {{ item.amounts }}</div> <div style="margin: 10px">{{ $t('pages.gameConfig.common.ticket') }}: {{ item.amounts }}</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="封面" align="center" width="60"> <el-table-column :label="$t('pages.gameConfig.common.cover')" align="center" width="60">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
:lazy="true" :lazy="true"
@ -90,7 +90,7 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="背景" align="center" width="110"> <el-table-column :label="$t('pages.gameConfig.common.background')" align="center" width="110">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
:lazy="true" :lazy="true"
@ -100,18 +100,18 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="名称" align="center" /> <el-table-column prop="name" :label="$t('pages.gameConfig.common.name')" align="center" />
<el-table-column prop="gameCode" label="游戏编号" align="center" /> <el-table-column prop="gameCode" :label="$t('pages.gameConfig.common.gameCode')" align="center" />
<el-table-column label="系统" align="center"> <el-table-column :label="$t('pages.gameConfig.common.system')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="sort" label="排序" align="center" /> <el-table-column prop="sort" :label="$t('pages.gameConfig.common.sort')" align="center" />
<el-table-column label="操作" align="center" width="200"> <el-table-column :label="$t('pages.gameConfig.common.actions')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click.native="handleUpdate()">修改</el-button> <el-button type="text" @click.native="handleUpdate()">{{ $t('pages.gameConfig.action.edit') }}</el-button>
<el-button type="text" @click.native="handlDel(scope.row)">删除</el-button> <el-button type="text" @click.native="handlDel(scope.row)">{{ $t('pages.gameConfig.action.delete') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -190,7 +190,7 @@ export default {
// //
handlDel(row) { handlDel(row) {
const that = this const that = this
that.$confirm('确认删除吗?', '提示', { that.$confirm(this.$t('pages.gameConfig.message.confirmDelete'), this.$t('pages.gameConfig.message.tip'), {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
that.listLoading = true that.listLoading = true

View File

@ -20,7 +20,7 @@
style="margin-right: 50px;" style="margin-right: 50px;"
> >
<!-- 封面 --> <!-- 封面 -->
<el-form-item label="封面" prop="cover"> <el-form-item :label="$t('pages.gameConfig.common.cover')" prop="cover">
<el-upload <el-upload
:disabled="coverUploadLoading" :disabled="coverUploadLoading"
:file-list="coverFileList" :file-list="coverFileList"
@ -41,10 +41,10 @@
</el-form-item> </el-form-item>
<!-- 系统 --> <!-- 系统 -->
<el-form-item label="系统"> <el-form-item :label="$t('pages.gameConfig.common.system')">
<el-select <el-select
v-model="form.sysOrigin" v-model="form.sysOrigin"
placeholder="选择系统" :placeholder="$t('pages.gameConfig.placeholder.selectSystem')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
disabled disabled
@ -67,10 +67,10 @@
</el-form-item> </el-form-item>
<!-- 游戏源 --> <!-- 游戏源 -->
<el-form-item label="游戏源" prop="gameOrigin"> <el-form-item :label="$t('pages.gameConfig.common.gameOrigin')" prop="gameOrigin">
<el-select <el-select
v-model="form.gameOrigin" v-model="form.gameOrigin"
placeholder="游戏源" :placeholder="$t('pages.gameConfig.common.gameOrigin')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -84,15 +84,15 @@
</el-form-item> </el-form-item>
<!-- 客户端 --> <!-- 客户端 -->
<el-form-item label="游戏源" prop="clientOrigin"> <el-form-item :label="$t('pages.gameConfig.common.client')" prop="clientOrigin">
<el-select <el-select
v-model="form.clientOrigin" v-model="form.clientOrigin"
placeholder="客户端" :placeholder="$t('pages.gameConfig.common.client')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option <el-option
v-for="item in clientOrigins" v-for="item in clientOriginOptions"
:key="item.value" :key="item.value"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -101,29 +101,29 @@
</el-form-item> </el-form-item>
<!-- 是否自研 --> <!-- 是否自研 -->
<el-form-item label="是否自研" prop="self"> <el-form-item :label="$t('pages.gameConfig.common.selfGame')" prop="self">
<el-select <el-select
v-model="form.self" v-model="form.self"
placeholder="是否自研" :placeholder="$t('pages.gameConfig.common.selfGame')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="是" :value="true" /> <el-option :label="$t('pages.gameConfig.common.yes')" :value="true" />
<el-option label="否" :value="false" /> </el-select <el-option :label="$t('pages.gameConfig.common.no')" :value="false" /> </el-select
>自研游戏下架会影响到其他系统 >{{ $t('pages.gameConfig.message.selfGameOffShelfTip') }}
</el-form-item> </el-form-item>
<!-- 自研游戏Code --> <!-- 自研游戏Code -->
<el-form-item <el-form-item
v-if="form.self" v-if="form.self"
label="自研游戏Code" :label="$t('pages.gameConfig.common.selfGameCode')"
prop="selfGameCode" prop="selfGameCode"
> >
<el-input <el-input
v-model.trim="form.selfGameCode" v-model.trim="form.selfGameCode"
type="text" type="text"
placeholder="请输入自研游戏Code" :placeholder="$t('pages.gameConfig.placeholder.selfGameCode')"
minlength="1" minlength="1"
maxlength="150" maxlength="150"
show-word-limit show-word-limit
@ -131,11 +131,11 @@
</el-form-item> </el-form-item>
<!-- 游戏ID --> <!-- 游戏ID -->
<el-form-item label="游戏ID" prop="gameId"> <el-form-item :label="$t('pages.gameConfig.common.gameId')" prop="gameId">
<el-input <el-input
v-model.trim="form.gameId" v-model.trim="form.gameId"
type="text" type="text"
placeholder="请输入游戏ID" :placeholder="$t('pages.gameConfig.placeholder.gameId')"
minlength="1" minlength="1"
maxlength="150" maxlength="150"
show-word-limit show-word-limit
@ -143,10 +143,10 @@
</el-form-item> </el-form-item>
<!-- 游戏分类 --> <!-- 游戏分类 -->
<el-form-item label="游戏分类" prop="category"> <el-form-item :label="$t('pages.gameConfig.common.category')" prop="category">
<el-select <el-select
v-model="form.category" v-model="form.category"
placeholder="游戏分类" :placeholder="$t('pages.gameConfig.common.category')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -160,11 +160,11 @@
</el-form-item> </el-form-item>
<!-- 名称 --> <!-- 名称 -->
<el-form-item label="名称" prop="name"> <el-form-item :label="$t('pages.gameConfig.common.name')" prop="name">
<el-input <el-input
v-model.trim="form.name" v-model.trim="form.name"
type="text" type="text"
placeholder="请输入名称" :placeholder="$t('pages.gameConfig.placeholder.name')"
minlength="1" minlength="1"
maxlength="150" maxlength="150"
show-word-limit show-word-limit
@ -172,11 +172,11 @@
</el-form-item> </el-form-item>
<!-- 编号 --> <!-- 编号 -->
<el-form-item label="编号" prop="gameCode"> <el-form-item :label="$t('pages.gameConfig.common.code')" prop="gameCode">
<el-input <el-input
v-model.trim="form.gameCode" v-model.trim="form.gameCode"
type="text" type="text"
placeholder="请输入编号" :placeholder="$t('pages.gameConfig.placeholder.code')"
minlength="1" minlength="1"
maxlength="150" maxlength="150"
show-word-limit show-word-limit
@ -184,11 +184,11 @@
</el-form-item> </el-form-item>
<!-- 金额 --> <!-- 金额 -->
<el-form-item label="金额" prop="gameCode"> <el-form-item :label="$t('pages.gameConfig.common.amount')" prop="gameCode">
<el-input <el-input
v-model.trim="form.amounts" v-model.trim="form.amounts"
type="text" type="text"
placeholder="金币必须是整数多个逗号隔改" :placeholder="$t('pages.gameConfig.placeholder.amounts')"
minlength="1" minlength="1"
maxlength="150" maxlength="150"
show-word-limit show-word-limit
@ -196,30 +196,30 @@
</el-form-item> </el-form-item>
<!-- 是否全屏 --> <!-- 是否全屏 -->
<el-form-item label="是否全屏" prop="fullScreen"> <el-form-item :label="$t('pages.gameConfig.common.fullScreen')" prop="fullScreen">
<el-select <el-select
v-model="form.fullScreen" v-model="form.fullScreen"
placeholder="是否全屏" :placeholder="$t('pages.gameConfig.common.fullScreen')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="是" :value="true" /> <el-option :label="$t('pages.gameConfig.common.yes')" :value="true" />
<el-option label="否" :value="false" /> <el-option :label="$t('pages.gameConfig.common.no')" :value="false" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 游戏模式 --> <!-- 游戏模式 -->
<el-form-item label="游戏模式" prop="gameMode"> <el-form-item :label="$t('pages.gameConfig.common.gameMode')" prop="gameMode">
<el-select <el-select
v-model="form.gameMode" v-model="form.gameMode"
placeholder="游戏模式" :placeholder="$t('pages.gameConfig.common.gameMode')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option <el-option
v-for="item in gameModeList" v-for="item in gameModeOptions"
:key="item.value" :key="item.value"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -228,57 +228,57 @@
</el-form-item> </el-form-item>
<!-- --> <!-- -->
<el-form-item label="宽" prop="width"> <el-form-item :label="$t('pages.gameConfig.common.width')" prop="width">
<el-input <el-input
v-model.trim="form.width" v-model.trim="form.width"
type="text" type="text"
placeholder="宽度" :placeholder="$t('pages.gameConfig.placeholder.width')"
/> />
</el-form-item> </el-form-item>
<!-- --> <!-- -->
<el-form-item label="高" prop="height"> <el-form-item :label="$t('pages.gameConfig.common.height')" prop="height">
<el-input <el-input
v-model.trim="form.height" v-model.trim="form.height"
type="text" type="text"
placeholder="高度" :placeholder="$t('pages.gameConfig.placeholder.height')"
/> />
</el-form-item> </el-form-item>
<!-- 状态 --> <!-- 状态 -->
<el-form-item label="状态" prop="showcase"> <el-form-item :label="$t('pages.gameConfig.common.status')" prop="showcase">
<el-select <el-select
v-model="form.showcase" v-model="form.showcase"
placeholder="状态" :placeholder="$t('pages.gameConfig.common.status')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
<el-option label="下架" :value="false" /> <el-option :label="$t('pages.gameConfig.status.offShelf')" :value="false" />
<el-option label="上架" :value="true" /> <el-option :label="$t('pages.gameConfig.status.onShelf')" :value="true" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 排序 --> <!-- 排序 -->
<el-form-item label="排序" prop="sort"> <el-form-item :label="$t('pages.gameConfig.common.sort')" prop="sort">
<el-input-number <el-input-number
v-model.trim="form.sort" v-model.trim="form.sort"
v-number v-number
style="width: 100%;" style="width: 100%;"
:min="0" :min="0"
:max="99999" :max="99999"
placeholder="降序排列(数字越大越靠前)" :placeholder="$t('pages.gameConfig.placeholder.sort')"
/> />
</el-form-item> </el-form-item>
<!-- 区域 --> <!-- 区域 -->
<el-form-item label="区域" prop="regionList"> <el-form-item :label="$t('pages.gameConfig.common.region')" prop="regionList">
<el-select <el-select
v-model="form.regionList" v-model="form.regionList"
v-loading="loading" v-loading="loading"
multiple multiple
clearable clearable
placeholder="请选择" :placeholder="$t('pages.gameConfig.placeholder.select')"
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
> >
@ -293,8 +293,8 @@
</el-form> </el-form>
</div> </div>
<div slot="footer" style="text-align: right;"> <div slot="footer" style="text-align: right;">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('common.save') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
@ -317,7 +317,7 @@ export default {
}, },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: "必填字段", trigger: "blur" } { required: true, message: this.$t("pages.gameConfig.validation.required"), trigger: "blur" }
]; ];
return { return {
gameOrigins: [ gameOrigins: [
@ -327,9 +327,9 @@ export default {
{ value: "YOMI", name: "YOMI" } { value: "YOMI", name: "YOMI" }
], ],
clientOrigins: [ clientOrigins: [
{ value: "ANDROID", name: "安卓" }, { value: "ANDROID", name: "Android" },
{ value: "IOS", name: "苹果" }, { value: "IOS", name: "iOS" },
{ value: "COMMON", name: "通用" } { value: "COMMON", name: "Common" }
], ],
// //
@ -344,7 +344,7 @@ export default {
], ],
// //
gameModeList: [{ value: "CHAT_ROOM", name: "语聊房" }], gameModeList: [{ value: "CHAT_ROOM", name: "Voice Room" }],
coverUploadLoading: false, coverUploadLoading: false,
coverFileList: [], coverFileList: [],
@ -392,7 +392,19 @@ export default {
}, },
computed: { computed: {
textOptTitle() { textOptTitle() {
return this.row && this.row.id ? "修改" : "新增"; return this.row && this.row.id ? this.$t("pages.gameConfig.dialog.edit") : this.$t("pages.gameConfig.dialog.add");
},
clientOriginOptions() {
return this.clientOrigins.map(item => ({
...item,
name: this.$t(`pages.gameConfig.clientOrigins.${item.value}`)
}));
},
gameModeOptions() {
return this.gameModeList.map(item => ({
...item,
name: this.$t(`pages.gameConfig.gameModes.${item.value}`)
}));
}, },
isShowCoverUpload() { isShowCoverUpload() {
return !this.form.cover; return !this.form.cover;
@ -466,7 +478,7 @@ export default {
return; return;
} }
if (that.form.self && !that.form.selfGameCode) { if (that.form.self && !that.form.selfGameCode) {
that.$opsMessage.info("必须填写自研游戏code"); that.$opsMessage.info(that.$t("pages.gameConfig.message.selfGameCodeRequired"));
} }
const submitForm = Object.assign({}, that.form); const submitForm = Object.assign({}, that.form);
that.submitLoading = true; that.submitLoading = true;

View File

@ -5,7 +5,7 @@
<!-- 系统源选择框 --> <!-- 系统源选择框 -->
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.gameConfig.common.system')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -26,7 +26,7 @@
<!-- 游戏源选择框 --> <!-- 游戏源选择框 -->
<el-select <el-select
v-model="listQuery.gameOrigin" v-model="listQuery.gameOrigin"
placeholder="游戏源" :placeholder="$t('pages.gameConfig.common.gameOrigin')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -42,13 +42,13 @@
<!-- 状态选择框 --> <!-- 状态选择框 -->
<el-select <el-select
v-model="listQuery.showcase" v-model="listQuery.showcase"
placeholder="状态" :placeholder="$t('pages.gameConfig.common.status')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
> >
<el-option label="上架" :value="true" /> <el-option :label="$t('pages.gameConfig.status.onShelf')" :value="true" />
<el-option label="下架" :value="false" /> <el-option :label="$t('pages.gameConfig.status.offShelf')" :value="false" />
</el-select> </el-select>
<!-- 搜索按钮 --> <!-- 搜索按钮 -->
@ -58,7 +58,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
<!-- 新增按钮 --> <!-- 新增按钮 -->
@ -68,7 +68,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
@ -76,13 +76,13 @@
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.gameConfig.common.loading')"
fit fit
highlight-current-row highlight-current-row
@cell-mouse-enter="handleMouseEnter" @cell-mouse-enter="handleMouseEnter"
> >
<!-- 系统 --> <!-- 系统 -->
<el-table-column label="系统" align="center"> <el-table-column :label="$t('pages.gameConfig.common.system')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon <sys-origin-icon
:icon="scope.row.sysOrigin" :icon="scope.row.sysOrigin"
@ -92,7 +92,7 @@
</el-table-column> </el-table-column>
<!-- 封面 --> <!-- 封面 -->
<el-table-column label="封面" align="center" width="60"> <el-table-column :label="$t('pages.gameConfig.common.cover')" align="center" width="60">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
:lazy="true" :lazy="true"
@ -104,18 +104,18 @@
</el-table-column> </el-table-column>
<!-- 名称 --> <!-- 名称 -->
<el-table-column prop="name" label="名称" align="center" /> <el-table-column prop="name" :label="$t('pages.gameConfig.common.name')" align="center" />
<!-- 游戏编号 --> <!-- 游戏编号 -->
<el-table-column prop="gameCode" label="游戏编号" align="center" /> <el-table-column prop="gameCode" :label="$t('pages.gameConfig.common.gameCode')" align="center" />
<!-- 金额 --> <!-- 金额 -->
<el-table-column prop="amounts" label="金额" align="center" /> <el-table-column prop="amounts" :label="$t('pages.gameConfig.common.amount')" align="center" />
<!-- 客户端 --> <!-- 客户端 -->
<el-table-column label="客户端" align="center"> <el-table-column :label="$t('pages.gameConfig.common.client')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-for="(item, index) in clientOrigins" :key="index"> <span v-for="(item, index) in clientOriginOptions" :key="index">
<el-tag v-if="item.value == scope.row.clientOrigin">{{ <el-tag v-if="item.value == scope.row.clientOrigin">{{
item.name item.name
}}</el-tag> }}</el-tag>
@ -124,34 +124,34 @@
</el-table-column> </el-table-column>
<!-- 全屏 --> <!-- 全屏 -->
<el-table-column label="是否全屏" align="center"> <el-table-column :label="$t('pages.gameConfig.common.fullScreen')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag type="success">{{ <el-tag type="success">{{
scope.row.fullScreen ? "是" : "否" scope.row.fullScreen ? $t('pages.gameConfig.common.yes') : $t('pages.gameConfig.common.no')
}}</el-tag> }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- 排序 --> <!-- 排序 -->
<el-table-column prop="sort" label="排序" align="center" /> <el-table-column prop="sort" :label="$t('pages.gameConfig.common.sort')" align="center" />
<!-- 操作 --> <!-- 操作 -->
<el-table-column fixed="right" label="操作" align="center" width="200"> <el-table-column fixed="right" :label="$t('pages.gameConfig.common.actions')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 数据配置 --> <!-- 数据配置 -->
<el-button <el-button
v-if="scope.row.selfGameCode == 'GAME_FRUIT'" v-if="scope.row.selfGameCode == 'GAME_FRUIT'"
type="text" type="text"
@click.native="dataSetting(scope.row)" @click.native="dataSetting(scope.row)"
>数据配置</el-button >{{ $t('pages.gameConfig.action.dataConfig') }}</el-button
> >
<!-- 修改 --> <!-- 修改 -->
<el-button type="text" @click.native="handleUpdate()">修改</el-button> <el-button type="text" @click.native="handleUpdate()">{{ $t('pages.gameConfig.action.edit') }}</el-button>
<!-- 删除 --> <!-- 删除 -->
<el-button type="text" @click.native="handlDel(scope.row)" <el-button type="text" @click.native="handlDel(scope.row)"
>删除</el-button >{{ $t('pages.gameConfig.action.delete') }}</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
@ -204,9 +204,9 @@ export default {
{ value: "YOMI", name: "YOMI" } { value: "YOMI", name: "YOMI" }
], ],
clientOrigins: [ clientOrigins: [
{ value: "ANDROID", name: "安卓" }, { value: "ANDROID", name: "Android" },
{ value: "IOS", name: "苹果" }, { value: "IOS", name: "iOS" },
{ value: "COMMON", name: "通用" } { value: "COMMON", name: "Common" }
], ],
thatRow: {}, thatRow: {},
configDataShow: false, configDataShow: false,
@ -228,6 +228,12 @@ export default {
}; };
}, },
computed: { computed: {
clientOriginOptions() {
return this.clientOrigins.map(item => ({
...item,
name: this.$t(`pages.gameConfig.clientOrigins.${item.value}`)
}));
},
...mapGetters(["permissionsSysOriginPlatforms"]) ...mapGetters(["permissionsSysOriginPlatforms"])
}, },
created() { created() {
@ -269,7 +275,7 @@ export default {
handlDel(row) { handlDel(row) {
const that = this; const that = this;
that that
.$confirm("确认删除吗?", "提示", { .$confirm(this.$t("pages.gameConfig.message.confirmDelete"), this.$t("pages.gameConfig.message.tip"), {
type: "warning" type: "warning"
}) })
.then(() => { .then(() => {

View File

@ -5,22 +5,22 @@
type="info" type="info"
:closable="false" :closable="false"
> >
<span>超过邀请时间{{ form.days }}则不发佣金</span> <span>{{ $t('pages.inviteUserRule.message.expiredCommission', { days: form.days }) }}</span>
</el-alert> </el-alert>
<el-form-item prop="days" label="有效天数"> <el-form-item :label="$t('pages.inviteUserRule.form.validDays')" prop="days">
<el-input v-model="form.days" type="number" /> <el-input v-model="form.days" type="number" />
</el-form-item> </el-form-item>
<el-alert <el-alert
type="info" type="info"
:closable="false" :closable="false"
> >
<span>赚取的佣金比例(单位:%)</span> <span>{{ $t('pages.inviteUserRule.message.commissionRatio') }}</span>
</el-alert> </el-alert>
<el-form-item prop="proportion" label="比例"> <el-form-item :label="$t('pages.inviteUserRule.form.proportion')" prop="proportion">
<el-input v-model="form.proportion" type="number" /> <el-input v-model="form.proportion" type="number" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="onSubmit">修改</el-button> <el-button type="primary" @click="onSubmit">{{ $t('pages.inviteUserRule.action.edit') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -60,15 +60,15 @@ export default {
console.error('error submit!!') console.error('error submit!!')
return false return false
} }
that.$confirm('是否确定修改配置值?', '提示', { that.$confirm(that.$t('pages.inviteUserRule.confirm.update'), that.$t('pages.inviteUserRule.confirm.title'), {
confirmButtonText: '确定', confirmButtonText: that.$t('pages.inviteUserRule.confirm.confirm'),
cancelButtonText: '取消', cancelButtonText: that.$t('pages.inviteUserRule.confirm.cancel'),
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
updateSysInviteUserConfig(that.form).then(res => { updateSysInviteUserConfig(that.form).then(res => {
that.$message({ that.$message({
type: 'success', type: 'success',
message: 'Successful' message: that.$t('pages.inviteUserRule.message.success')
}) })
that.renderData() that.renderData()
}).catch(er => { }).catch(er => {
@ -77,7 +77,7 @@ export default {
}).catch(() => { }).catch(() => {
that.$message({ that.$message({
type: 'info', type: 'info',
message: '已取消操作' message: that.$t('pages.inviteUserRule.message.cancelled')
}) })
}) })
}) })

View File

@ -12,63 +12,63 @@
> >
<div v-loading="submitLoading"> <div v-loading="submitLoading">
<div class="form-contetn"> <div class="form-contetn">
<el-form ref="form" :model="form" :rules="rules" label-width="110px" style="margin-right: 50px;"> <el-form ref="form" :model="form" :rules="localizedRules" label-width="110px" style="margin-right: 50px;">
<el-form-item v-if="!isUpdate" label="房间ID" prop="id"> <el-form-item v-if="!isUpdate" :label="$t('pages.pinnedRooms.form.roomId')" prop="id">
<search-room-input @success="searchRoomSuccess" @fail="searchRoomFail" @load="loadSearchRoom" /> <search-room-input @success="searchRoomSuccess" @fail="searchRoomFail" @load="loadSearchRoom" />
</el-form-item> </el-form-item>
<el-form-item label="置顶区域" prop="region"> <el-form-item :label="$t('pages.pinnedRooms.form.pinnedRegion')" prop="region">
<select-system-region <select-system-region
ref="regionSelectPolicy" ref="regionSelectPolicy"
v-model="form.region" v-model="form.region"
:sys-origin="form.sysOrigin" :sys-origin="form.sysOrigin"
placeholder="请选择区域" :placeholder="$t('pages.pinnedRooms.placeholder.region')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="是否永久"> <el-form-item :label="$t('pages.pinnedRooms.form.permanent')">
<el-radio-group v-model="permanent"> <el-radio-group v-model="permanent">
<el-radio :label="1"></el-radio> <el-radio :label="1">{{ $t('pages.pinnedRooms.word.yes') }}</el-radio>
<el-radio :label="0"></el-radio> <el-radio :label="0">{{ $t('pages.pinnedRooms.word.no') }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="永远展示"> <el-form-item :label="$t('pages.pinnedRooms.form.alwaysShow')">
<el-radio-group v-model="form.foreverOnline"> <el-radio-group v-model="form.foreverOnline">
<el-radio :label="true"></el-radio> <el-radio :label="true">{{ $t('pages.pinnedRooms.word.yes') }}</el-radio>
<el-radio :label="false"></el-radio> <el-radio :label="false">{{ $t('pages.pinnedRooms.word.no') }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="开始时间" prop="startTime"> <el-form-item :label="$t('pages.pinnedRooms.form.startTime')" prop="startTime">
<el-date-picker <el-date-picker
v-model="form.startTime" v-model="form.startTime"
:picker-options="pickerOptions" :picker-options="pickerOptions"
type="datetime" type="datetime"
value-format="timestamp" value-format="timestamp"
placeholder="选择日期时间" :placeholder="$t('pages.pinnedRooms.placeholder.dateTime')"
style="width:100%;" style="width:100%;"
/> />
</el-form-item> </el-form-item>
<el-form-item v-if="permanent === 0" label="过期时间" prop="expiredTime"> <el-form-item v-if="permanent === 0" :label="$t('pages.pinnedRooms.form.expiredTime')" prop="expiredTime">
<el-date-picker <el-date-picker
v-model="form.expiredTime" v-model="form.expiredTime"
:picker-options="pickerOptions" :picker-options="pickerOptions"
type="datetime" type="datetime"
value-format="timestamp" value-format="timestamp"
placeholder="选择日期时间" :placeholder="$t('pages.pinnedRooms.placeholder.dateTime')"
style="width:100%;" style="width:100%;"
/> />
</el-form-item> </el-form-item>
<el-form-item label="权重" prop="weights"> <el-form-item :label="$t('pages.pinnedRooms.form.weight')" prop="weights">
<el-input v-model.trim="form.weights" v-number type="text" placeholder="越大越靠前" /> <el-input v-model.trim="form.weights" v-number type="text" :placeholder="$t('pages.pinnedRooms.placeholder.weight')" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div slot="footer" style="text-align: right;"> <div slot="footer" style="text-align: right;">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('pages.pinnedRooms.action.cancel') }}</el-button>
<el-button type="primary" :disabled="searchDisabled" @click="submitForm()">保存</el-button> <el-button type="primary" :disabled="searchDisabled" @click="submitForm()">{{ $t('pages.pinnedRooms.action.save') }}</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
@ -86,7 +86,6 @@ export default {
} }
}, },
data() { data() {
const commonRules = [{ required: true, message: '必填字段', trigger: 'blur' }]
return { return {
permanent: 0, permanent: 0,
form: { form: {
@ -100,14 +99,6 @@ export default {
searchDisabled: false, searchDisabled: false,
submitLoading: false, submitLoading: false,
uploadLoading: false, uploadLoading: false,
rules: {
id: commonRules,
startTime: commonRules,
expiredTime: commonRules,
weights: commonRules,
region: commonRules,
foreverOnline: commonRules
},
pickerOptions: { pickerOptions: {
disabledDate(date) { disabledDate(date) {
return date.getTime() < Date.now() return date.getTime() < Date.now()
@ -120,7 +111,18 @@ export default {
return !!(this.row && this.row.id) return !!(this.row && this.row.id)
}, },
textOptTitle() { textOptTitle() {
return this.isUpdate ? '修改' : '添加' return this.isUpdate ? this.$t('pages.pinnedRooms.action.edit') : this.$t('pages.pinnedRooms.action.add')
},
localizedRules() {
const commonRules = [{ required: true, message: this.$t('pages.pinnedRooms.validation.requiredField'), trigger: 'blur' }]
return {
id: commonRules,
startTime: commonRules,
expiredTime: commonRules,
weights: commonRules,
region: commonRules,
foreverOnline: commonRules
}
} }
}, },
@ -152,7 +154,7 @@ export default {
const time = that.form.expiredTime - that.form.startTime const time = that.form.expiredTime - that.form.startTime
const minTimeRange = 1000 * 60 * 10 const minTimeRange = 1000 * 60 * 10
if (time < minTimeRange) { if (time < minTimeRange) {
that.$opsMessage.fail('开始时间~过期时间间隔必须>=10分钟以上!!!') that.$opsMessage.fail(that.$t('pages.pinnedRooms.message.minTimeRange'))
return return
} }
} }

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.pinnedRooms.placeholder.system')"
style="width:120px;" style="width:120px;"
class="filter-item" class="filter-item"
@change="changeSysOrigin" @change="changeSysOrigin"
@ -24,7 +24,7 @@
ref="regionSelectPolicy" ref="regionSelectPolicy"
v-model="listQuery.region" v-model="listQuery.region"
:sys-origin="listQuery.sysOrigin" :sys-origin="listQuery.sysOrigin"
placeholder="请选择区域" :placeholder="$t('pages.pinnedRooms.placeholder.region')"
/> />
</div> </div>
@ -38,7 +38,7 @@
:loading="searchDisabled" :loading="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.pinnedRooms.action.search') }}
</el-button> </el-button>
<el-button <el-button
class="filter-item" class="filter-item"
@ -46,31 +46,31 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('pages.pinnedRooms.action.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.pinnedRooms.word.loading')"
fit fit
highlight-current-row highlight-current-row
@cell-mouse-enter="handleMouseEnter" @cell-mouse-enter="handleMouseEnter"
> >
<el-table-column label="归属系统" align="center"> <el-table-column :label="$t('pages.pinnedRooms.table.system')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="区域" align="center" prop="regionName" /> <el-table-column :label="$t('pages.pinnedRooms.table.region')" align="center" prop="regionName" />
<el-table-column prop="roomProfile.roomName" label="房间名称" align="center"> <el-table-column prop="roomProfile.roomName" :label="$t('pages.pinnedRooms.table.roomName')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link v-if="scope.row.roomProfile.roomName" @click="queryRoomDetails(scope.row.roomProfile.id)"> <el-link v-if="scope.row.roomProfile.roomName" @click="queryRoomDetails(scope.row.roomProfile.id)">
{{ scope.row.roomProfile.roomName }} {{ scope.row.roomProfile.roomName }}
</el-link> </el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="房间封面" align="center" width="150"> <el-table-column :label="$t('pages.pinnedRooms.table.roomCover')" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
:lazy="true" :lazy="true"
@ -84,23 +84,23 @@
</el-image> </el-image>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="weights" label="权重" align="center" /> <el-table-column prop="weights" :label="$t('pages.pinnedRooms.table.weight')" align="center" />
<el-table-column label="时间" align="center" width="200"> <el-table-column :label="$t('pages.pinnedRooms.table.time')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.startTime | dateFormat('yyyy-MM-dd HH:mm:ss') }}</div> <div>{{ scope.row.startTime | dateFormat('yyyy-MM-dd HH:mm:ss') }}</div>
<div>{{ scope.row.expiredTime | dateFormat('yyyy-MM-dd HH:mm:ss') }}</div> <div>{{ scope.row.expiredTime | dateFormat('yyyy-MM-dd HH:mm:ss') }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="statusDesc" label="状态" align="center" /> <el-table-column prop="statusDesc" :label="$t('pages.pinnedRooms.table.status')" align="center" />
<el-table-column label="永远展示" align="center"> <el-table-column :label="$t('pages.pinnedRooms.table.alwaysShow')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.foreverOnline === true? '是':'否' }} {{ scope.row.foreverOnline === true ? $t('pages.pinnedRooms.word.yes') : $t('pages.pinnedRooms.word.no') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="200"> <el-table-column fixed="right" :label="$t('pages.pinnedRooms.table.actions')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click.native="handleUpdate()">编辑</el-button> <el-button type="text" @click.native="handleUpdate()">{{ $t('pages.pinnedRooms.action.edit') }}</el-button>
<el-button type="text" @click.native="handlDel(scope.row)">删除</el-button> <el-button type="text" @click.native="handlDel(scope.row)">{{ $t('pages.pinnedRooms.action.delete') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -203,9 +203,8 @@ export default {
this.userDeatilsDrawer = true this.userDeatilsDrawer = true
this.thatSelectedUserId = row.id this.thatSelectedUserId = row.id
}, },
//
handlDel(row) { handlDel(row) {
this.$confirm('确认删除吗?', '提示', { this.$confirm(this.$t('pages.pinnedRooms.confirm.delete'), this.$t('pages.pinnedRooms.confirm.title'), {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.listLoading = true this.listLoading = true

View File

@ -1,14 +1,14 @@
<template> <template>
<div> <div>
<div class="filter-container"> <div class="filter-container">
<account-input v-model="listQuery.userId" placeholder="用户ID" class="filter-item" /> <account-input v-model="listQuery.userId" :placeholder="$t('pages.badgeManagement.filter.userId')" class="filter-item" />
<el-button <el-button
class="filter-item" class="filter-item"
type="primary" type="primary"
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -18,8 +18,8 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="id" label="徽章规则ID" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.badgeRuleId')" prop="id" align="center" />
<el-table-column label="徽章图标" align="center"> <el-table-column :label="$t('pages.badgeManagement.common.badgeIcon')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
style="width: 50px; height: 50px" style="width: 50px; height: 50px"
@ -28,20 +28,20 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="badgeName" label="徽章名称" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.badgeName')" prop="badgeName" align="center" />
<el-table-column prop="typeName" label="徽章类型" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.badgeType')" prop="typeName" align="center" />
<el-table-column prop="badgeKey" label="徽章key" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.badgeKey')" prop="badgeKey" align="center" />
<el-table-column prop="badgeLevel" label="等级" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.level')" prop="badgeLevel" align="center" />
<el-table-column prop="milestone" label="可领取里程碑" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.milestone')" prop="milestone" align="center" />
<el-table-column prop="createTime" label="创建时间" align="center"> <el-table-column :label="$t('pages.badgeManagement.common.createdAt')" prop="createTime" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="200"> <el-table-column :label="$t('pages.badgeManagement.common.actions')" fixed="right" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.presented" type="text" @click.native="handleRetrieveBadge(scope.row.id)">收回</el-button> <el-button v-if="scope.row.presented" type="text" @click.native="handleRetrieveBadge(scope.row.id)">{{ $t('pages.badgeManagement.common.retrieve') }}</el-button>
<el-button v-else-if="!scope.row.presented" type="text" @click.native="handleGiveBadge(scope.row.id)">赠送</el-button> <el-button v-else-if="!scope.row.presented" type="text" @click.native="handleGiveBadge(scope.row.id)">{{ $t('pages.badgeManagement.common.give') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -81,14 +81,14 @@ export default {
const that = this const that = this
if (!that.listQuery.userId) { if (!that.listQuery.userId) {
that.$message({ that.$message({
message: '请输入用户id', message: that.$t('pages.badgeManagement.message.userIdRequired'),
type: 'warning' type: 'warning'
}) })
return return
} }
that.listLoading = true that.listLoading = true
that.$message({ that.$message({
message: '查询中,请等待结果', message: that.$t('pages.badgeManagement.message.querying'),
type: 'warning' type: 'warning'
}) })
giveBadgeTable(that.listQuery).then(res => { giveBadgeTable(that.listQuery).then(res => {
@ -102,7 +102,7 @@ export default {
}, },
renderDataSuccess() { renderDataSuccess() {
this.$message({ this.$message({
message: 'Successful', message: this.$t('pages.badgeManagement.message.retrieveSuccess'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()
@ -110,20 +110,19 @@ export default {
handleSearch() { handleSearch() {
this.renderData() this.renderData()
}, },
//
handleGiveBadge(badgeId) { handleGiveBadge(badgeId) {
this.$confirm('确定赠送徽章给当前用户吗?', '提示', { this.$confirm(this.$t('pages.badgeManagement.confirm.give'), this.$t('common.tip'), {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.$message({ this.$message({
message: '赠送中,请等待结果', message: this.$t('pages.badgeManagement.message.giving'),
type: 'warning' type: 'warning'
}) })
this.listLoading = true this.listLoading = true
giveBadge(badgeId, this.listQuery.userId).then((res) => { giveBadge(badgeId, this.listQuery.userId).then((res) => {
this.listLoading = false this.listLoading = false
this.$message({ this.$message({
message: '赠送成功', message: this.$t('pages.badgeManagement.message.giveSuccess'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()
@ -132,20 +131,19 @@ export default {
}) })
}, },
//
handleRetrieveBadge(badgeId) { handleRetrieveBadge(badgeId) {
this.$confirm('确定收回当前用户徽章吗?', '提示', { this.$confirm(this.$t('pages.badgeManagement.confirm.retrieve'), this.$t('common.tip'), {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.listLoading = true this.listLoading = true
this.$message({ this.$message({
message: '收回中,请等待结果', message: this.$t('pages.badgeManagement.message.retrieving'),
type: 'warning' type: 'warning'
}) })
retrieveBadge(badgeId, this.listQuery.userId).then((res) => { retrieveBadge(badgeId, this.listQuery.userId).then((res) => {
this.listLoading = false this.listLoading = false
this.$message({ this.$message({
message: '成功收回', message: this.$t('pages.badgeManagement.message.retrieveSuccess'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()

View File

@ -1,14 +1,14 @@
<template> <template>
<div> <div>
<div class="filter-container"> <div class="filter-container">
<account-input v-model="listQuery.userId" placeholder="用户ID" class="filter-item" /> <account-input v-model="listQuery.userId" :placeholder="$t('pages.badgeManagement.filter.userId')" class="filter-item" />
<el-button <el-button
class="filter-item" class="filter-item"
type="primary" type="primary"
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -18,8 +18,8 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="badgeConfigId" label="徽章ID" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.badgeId')" prop="badgeConfigId" align="center" />
<el-table-column label="徽章图标" align="center"> <el-table-column :label="$t('pages.badgeManagement.common.badgeIcon')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
style="width: 50px; height: 50px" style="width: 50px; height: 50px"
@ -28,16 +28,16 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="badgeName" label="徽章名称" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.badgeName')" prop="badgeName" align="center" />
<el-table-column prop="typeName" label="徽章类型" align="center" /> <el-table-column :label="$t('pages.badgeManagement.common.badgeType')" prop="typeName" align="center" />
<el-table-column prop="createTime" label="创建时间" align="center"> <el-table-column :label="$t('pages.badgeManagement.common.createdAt')" prop="createTime" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="200"> <el-table-column :label="$t('pages.badgeManagement.common.actions')" fixed="right" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click.native="handleRetrieveBadge(scope.row.badgeConfigId)">收回</el-button> <el-button type="text" @click.native="handleRetrieveBadge(scope.row.badgeConfigId)">{{ $t('pages.badgeManagement.common.retrieve') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -65,7 +65,7 @@ export default {
const that = this const that = this
that.listLoading = true that.listLoading = true
that.$message({ that.$message({
message: '查询中,请等待结果', message: that.$t('pages.badgeManagement.message.querying'),
type: 'warning' type: 'warning'
}) })
listUserNotAchieveBadge(that.listQuery.userId).then(res => { listUserNotAchieveBadge(that.listQuery.userId).then(res => {
@ -78,7 +78,7 @@ export default {
}, },
renderDataSuccess() { renderDataSuccess() {
this.$message({ this.$message({
message: 'Successful', message: this.$t('pages.badgeManagement.message.retrieveSuccess'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()
@ -86,20 +86,19 @@ export default {
handleSearch() { handleSearch() {
this.renderData() this.renderData()
}, },
//
handleRetrieveBadge(badgeId) { handleRetrieveBadge(badgeId) {
this.$confirm('确定收回当前用户的徽章吗?', '提示', { this.$confirm(this.$t('pages.badgeManagement.confirm.retrieveOwned'), this.$t('common.tip'), {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.listLoading = true this.listLoading = true
this.$message({ this.$message({
message: '收回中,请等待结果', message: this.$t('pages.badgeManagement.message.retrieving'),
type: 'warning' type: 'warning'
}) })
retrieveBadge(badgeId, this.listQuery.userId).then((res) => { retrieveBadge(badgeId, this.listQuery.userId).then((res) => {
this.listLoading = false this.listLoading = false
this.$message({ this.$message({
message: '成功收回', message: this.$t('pages.badgeManagement.message.retrieveSuccess'),
type: 'success' type: 'success'
}) })
this.renderData() this.renderData()

View File

@ -4,7 +4,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.type" v-model="listQuery.type"
placeholder="类型" :placeholder="$t('pages.badgeManagement.common.type')"
clearable clearable
style="width:200px;" style="width:200px;"
class="filter-item" class="filter-item"
@ -13,12 +13,12 @@
<el-option-group <el-option-group
v-for="(group, groupIndex) in badgeGroups" v-for="(group, groupIndex) in badgeGroups"
:key="groupIndex" :key="groupIndex"
:label="group.label" :label="$t(group.labelKey)"
> >
<el-option <el-option
v-for="item in group.options" v-for="item in group.options"
:key="item.value" :key="item.value"
:label="group.label + ' - ' + item.label" :label="$t(group.labelKey) + ' - ' + $t(item.labelKey)"
:value="item.value" :value="item.value"
/> />
</el-option-group> </el-option-group>
@ -32,14 +32,14 @@
/> />
<el-input <el-input
v-model="listQuery.badgeName" v-model="listQuery.badgeName"
placeholder="徽章名称" :placeholder="$t('pages.badgeManagement.filter.badgeName')"
clearable clearable
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<el-input <el-input
v-model="listQuery.badgeKey" v-model="listQuery.badgeKey"
placeholder="徽章Key" :placeholder="$t('pages.badgeManagement.filter.badgeKey')"
clearable clearable
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
@ -50,7 +50,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
<el-button <el-button
v-if="buttonPermissions.includes('content:manager:badge:add')" v-if="buttonPermissions.includes('content:manager:badge:add')"
@ -59,7 +59,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
新增 {{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
@ -81,7 +81,7 @@
> >
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
操作选项<i class="el-icon-arrow-down el-icon--right" /> {{ $t('pages.badgeManagement.action.operationOptions') }}<i class="el-icon-arrow-down el-icon--right" />
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item <el-dropdown-item
@ -91,7 +91,7 @@
) )
" "
@click.native="handleUpdate(item)" @click.native="handleUpdate(item)"
>编辑规则</el-dropdown-item >{{ $t('pages.badgeManagement.action.editRule') }}</el-dropdown-item
> >
<el-dropdown-item <el-dropdown-item
v-if=" v-if="
@ -100,34 +100,34 @@
) )
" "
@click.native="clickEditSource(item)" @click.native="clickEditSource(item)"
>编辑资源</el-dropdown-item >{{ $t('pages.badgeManagement.action.editResource') }}</el-dropdown-item
> >
<el-dropdown-item <el-dropdown-item
v-if=" v-if="
buttonPermissions.includes('content:manager:badge:del') buttonPermissions.includes('content:manager:badge:del')
" "
@click.native="handlDel(item.id)" @click.native="handlDel(item.id)"
>删除</el-dropdown-item >{{ $t('pages.badgeManagement.common.delete') }}</el-dropdown-item
> >
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
<div class="card-content"> <div class="card-content">
<div class="title">规则信息</div> <div class="title">{{ $t('pages.badgeManagement.common.ruleInfo') }}</div>
<div class="contetn"> <div class="contetn">
<el-row> <el-row>
<el-col :span="12"> ID{{ item.id }} </el-col> <el-col :span="12"> ID{{ item.id }} </el-col>
<el-col :span="12"> 徽章类型{{ item.typeName }} </el-col> <el-col :span="12"> {{ $t('pages.badgeManagement.common.badgeType') }}{{ item.typeName }} </el-col>
<el-col :span="12"> 徽章key{{ item.badgeKey }} </el-col> <el-col :span="12"> {{ $t('pages.badgeManagement.common.badgeKey') }}{{ item.badgeKey }} </el-col>
<el-col :span="12"> 等级{{ item.badgeLevel }} </el-col> <el-col :span="12"> {{ $t('pages.badgeManagement.common.level') }}{{ item.badgeLevel }} </el-col>
<el-col :span="12"> 里程碑{{ item.milestone }} </el-col> <el-col :span="12"> {{ $t('pages.badgeManagement.common.milestone') }}{{ item.milestone }} </el-col>
<el-col :span="12"> <el-col :span="12">
创建时间{{ item.createTime | dateFormat }} {{ $t('pages.badgeManagement.common.createdAt') }}{{ item.createTime | dateFormat }}
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
<div class="title">资源信息</div> <div class="title">{{ $t('pages.badgeManagement.common.resourceInfo') }}</div>
<div class="content flex-l"> <div class="content flex-l">
<div <div
v-for="(sItem, sIndex) in item.badgePictures" v-for="(sItem, sIndex) in item.badgePictures"
@ -178,10 +178,10 @@
label-width="110px" label-width="110px"
style="margin-right: 50px;" style="margin-right: 50px;"
> >
<el-form-item label="类型" prop="type"> <el-form-item :label="$t('pages.badgeManagement.common.type')" prop="type">
<el-select <el-select
v-model="form.type" v-model="form.type"
placeholder="类型" :placeholder="$t('pages.badgeManagement.common.type')"
clearable clearable
style="width:100%;" style="width:100%;"
class="filter-item" class="filter-item"
@ -189,32 +189,32 @@
<el-option-group <el-option-group
v-for="(group, groupIndex) in badgeGroups" v-for="(group, groupIndex) in badgeGroups"
:key="groupIndex" :key="groupIndex"
:label="group.label" :label="$t(group.labelKey)"
> >
<el-option <el-option
v-for="item in group.options" v-for="item in group.options"
:key="item.value" :key="item.value"
:label="group.label + '-' + item.label" :label="$t(group.labelKey) + '-' + $t(item.labelKey)"
:value="item.value" :value="item.value"
/> />
</el-option-group> </el-option-group>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="徽章名称" prop="badgeName"> <el-form-item :label="$t('pages.badgeManagement.common.badgeName')" prop="badgeName">
<el-input v-model.trim="form.badgeName" type="text" /> <el-input v-model.trim="form.badgeName" type="text" />
</el-form-item> </el-form-item>
<el-form-item label="徽章key" prop="badgeKey"> <el-form-item :label="$t('pages.badgeManagement.common.badgeKey')" prop="badgeKey">
<el-input v-model.trim="form.badgeKey" type="text" /> <el-input v-model.trim="form.badgeKey" type="text" />
</el-form-item> </el-form-item>
<el-form-item label="等级" prop="badgeLevel"> <el-form-item :label="$t('pages.badgeManagement.common.level')" prop="badgeLevel">
<el-input v-model.trim="form.badgeLevel" type="number" /> <el-input v-model.trim="form.badgeLevel" type="number" />
</el-form-item> </el-form-item>
<el-form-item label="里程碑进度" prop="milestone"> <el-form-item :label="$t('pages.badgeManagement.form.milestoneProgress')" prop="milestone">
<el-input v-model.trim="form.milestone" type="number" /> <el-input v-model.trim="form.milestone" type="number" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm()">保存</el-button> <el-button type="primary" @click="submitForm()">{{ $t('common.save') }}</el-button>
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -227,7 +227,7 @@
/> />
</div> </div>
<div v-else style="text-align: center;"> <div v-else style="text-align: center;">
抱歉您无权查看请联系管理员开通查看权限运营管理-数据配置-徽章配置管理:manager:badge:query {{ $t('pages.badgeManagement.message.noPermission') }}
</div> </div>
</div> </div>
</template> </template>
@ -256,18 +256,18 @@ export default {
sourceEditRow: null, sourceEditRow: null,
badgeGroups: [ badgeGroups: [
{ {
label: "用户", labelKey: "pages.badgeManagement.group.user",
options: [ options: [
{ label: "成就", value: "ACHIEVEMENT" }, { labelKey: "pages.badgeManagement.group.achievement", value: "ACHIEVEMENT" },
{ label: "管理员", value: "ADMINISTRATOR" }, { labelKey: "pages.badgeManagement.group.administrator", value: "ADMINISTRATOR" },
{ label: "活动", value: "ACTIVITY" } { labelKey: "pages.badgeManagement.group.activity", value: "ACTIVITY" }
] ]
}, },
{ {
label: "荣誉", labelKey: "pages.badgeManagement.group.honor",
options: [ options: [
{ label: "管理员", value: "HONOR_ADMIN" }, { labelKey: "pages.badgeManagement.group.administrator", value: "HONOR_ADMIN" },
{ label: "活动", value: "HONOR_ACTIVITY" } { labelKey: "pages.badgeManagement.group.activity", value: "HONOR_ACTIVITY" }
] ]
} }
// { // {
@ -294,18 +294,18 @@ export default {
form: getFormData(), form: getFormData(),
submitLoading: false, submitLoading: false,
rules: { rules: {
type: [{ required: true, message: "请选择类型", trigger: "blur" }], type: [{ required: true, message: this.$t('pages.badgeManagement.validation.selectType'), trigger: "blur" }],
badgeName: [ badgeName: [
{ required: true, message: "请填写徽章名称", trigger: "blur" } { required: true, message: this.$t('pages.badgeManagement.validation.badgeName'), trigger: "blur" }
], ],
badgeKey: [ badgeKey: [
{ required: true, message: "请填写徽章key", trigger: "blur" } { required: true, message: this.$t('pages.badgeManagement.validation.badgeKey'), trigger: "blur" }
], ],
badgeLevel: [ badgeLevel: [
{ required: true, message: "请填写等级", trigger: "blur" } { required: true, message: this.$t('pages.badgeManagement.validation.level'), trigger: "blur" }
], ],
milestone: [ milestone: [
{ required: true, message: "请填写可领取里程碑", trigger: "blur" } { required: true, message: this.$t('pages.badgeManagement.validation.milestone'), trigger: "blur" }
] ]
}, },
listLoading: true listLoading: true
@ -391,9 +391,8 @@ export default {
} }
}); });
}, },
//
handlDel(id) { handlDel(id) {
this.$confirm("确认删除吗?", "提示", { this.$confirm(this.$t('pages.badgeManagement.confirm.delete'), this.$t('common.tip'), {
type: "warning" type: "warning"
}) })
.then(() => { .then(() => {
@ -401,7 +400,7 @@ export default {
deleteBadge(id).then(res => { deleteBadge(id).then(res => {
this.listLoading = false; this.listLoading = false;
this.$message({ this.$message({
message: "删除成功", message: this.$t('pages.badgeManagement.message.deleteSuccess'),
type: "success" type: "success"
}); });
this.renderData(); this.renderData();
@ -410,18 +409,17 @@ export default {
.catch(() => {}); .catch(() => {});
}, },
handleClose() { handleClose() {
//
this.$refs.form.clearValidate(); this.$refs.form.clearValidate();
this.fileList = []; this.fileList = [];
this.formVisible = false; this.formVisible = false;
}, },
handleCreate() { handleCreate() {
this.formVisible = true; this.formVisible = true;
this.textOptTitle = "添加"; this.textOptTitle = this.$t('pages.badgeManagement.dialog.add');
this.form = getFormData(); this.form = getFormData();
}, },
handleUpdate(row) { handleUpdate(row) {
this.textOptTitle = "修改"; this.textOptTitle = this.$t('pages.badgeManagement.dialog.edit');
this.formVisible = true; this.formVisible = true;
this.form = Object.assign(this.form, row); this.form = Object.assign(this.form, row);
}, },

View File

@ -15,7 +15,7 @@
<div style="display: inline-block;"> <div style="display: inline-block;">
<div class="flex-l"> <div class="flex-l">
<div><sys-origin-icon :icon="item.sysOrigin.value" :desc="item.value" /></div> <div><sys-origin-icon :icon="item.sysOrigin.value" :desc="item.value" /></div>
<div style="padding: 0rem 10px;">{{ item.sysOrigin.value }} 徽章资源</div> <div style="padding: 0rem 10px;">{{ $t('pages.badgeManagement.message.sourceTitle', { origin: item.sysOrigin.value }) }}</div>
</div> </div>
</div> </div>
</div> </div>
@ -35,7 +35,7 @@
> >
<i slot="default" v-loading="item.selectUrlUpload.loading" class="el-icon-plus" /> <i slot="default" v-loading="item.selectUrlUpload.loading" class="el-icon-plus" />
</el-upload> </el-upload>
<div class="el-upload__tip">选中图</div> <div class="el-upload__tip">{{ $t('pages.badgeManagement.message.selectedImage') }}</div>
</el-form-item> </el-form-item>
<el-form-item prop="notSelectUrl"> <el-form-item prop="notSelectUrl">
<el-upload <el-upload
@ -51,7 +51,7 @@
> >
<i slot="default" v-loading="item.notSelectUrlUpload.loading" class="el-icon-plus" /> <i slot="default" v-loading="item.notSelectUrlUpload.loading" class="el-icon-plus" />
</el-upload> </el-upload>
<div class="el-upload__tip">没有选中图</div> <div class="el-upload__tip">{{ $t('pages.badgeManagement.message.notSelectedImage') }}</div>
</el-form-item> </el-form-item>
<el-form-item prop="animationUrl"> <el-form-item prop="animationUrl">
<el-upload <el-upload
@ -62,8 +62,8 @@
:limit="1" :limit="1"
:on-exceed="handleExceed" :on-exceed="handleExceed"
> >
<el-button size="small" type="primary">点击上传</el-button> <el-button size="small" type="primary">{{ $t('pages.badgeManagement.message.upload') }}</el-button>
<div slot="tip" class="el-upload__tip">svga资源文件</div> <div slot="tip" class="el-upload__tip">{{ $t('pages.badgeManagement.message.svgaSourceFile') }}</div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -123,10 +123,10 @@ export default {
submitLoading: false, submitLoading: false,
rules: { rules: {
selectUrl: [ selectUrl: [
{ required: true, message: '请上传选中的图片', trigger: 'change' } { required: true, message: this.$t('pages.badgeManagement.validation.selectImage'), trigger: 'change' }
], ],
notSelectUrl: [ notSelectUrl: [
{ required: true, message: '请上传没选中的图片', trigger: 'change' } { required: true, message: this.$t('pages.badgeManagement.validation.notSelectedImage'), trigger: 'change' }
] ]
}, },
listLoading: true, listLoading: true,
@ -279,7 +279,10 @@ export default {
this.$emit('close') this.$emit('close')
}, },
handleExceed(files, fileList) { handleExceed(files, fileList) {
this.$opsMessage.warn(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`) this.$opsMessage.warn(this.$t('pages.badgeManagement.message.fileLimit', {
selected: files.length,
total: files.length + fileList.length
}))
} }
} }
} }

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane v-for="item in tables" :key="item.name" :label="item.title" :name="item.component" /> <el-tab-pane v-for="item in tables" :key="item.name" :label="$t(item.titleKey)" :name="item.component" />
<component :is="activeName" /> <component :is="activeName" />
</el-tabs> </el-tabs>
</div> </div>
@ -19,7 +19,7 @@ export default {
activeName: 'BadgeRule', activeName: 'BadgeRule',
tables: [ tables: [
{ {
title: '徽章配置', titleKey: 'pages.badgeManagement.tabs.rule',
component: 'BadgeRule' component: 'BadgeRule'
} }
] ]
@ -31,11 +31,11 @@ export default {
created() { created() {
if (this.buttonPermissions.includes('content:manager:badge:send:or:revoke')) { if (this.buttonPermissions.includes('content:manager:badge:send:or:revoke')) {
this.tables.push({ this.tables.push({
title: '赠送or收回', titleKey: 'pages.badgeManagement.tabs.giveOrRetrieve',
component: 'BadgeGive' component: 'BadgeGive'
}) })
this.tables.push({ this.tables.push({
title: '收回', titleKey: 'pages.badgeManagement.tabs.retrieve',
component: 'BadgeRevoke' component: 'BadgeRevoke'
}) })
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<el-dialog <el-dialog
title="申请处理" :title="$t('pages.beautifulNumberApply.dialog.rejectTitle')"
:visible="true" :visible="true"
:modal-append-to-body="true" :modal-append-to-body="true"
:append-to-body="true" :append-to-body="true"
@ -14,18 +14,18 @@
:rules="formRules" :rules="formRules"
label-width="40px" label-width="40px"
> >
<el-form-item label="备注" prop="remark"> <el-form-item :label="$t('pages.beautifulNumberApply.form.remark')" prop="remark">
<el-input <el-input
v-model="form.remark" v-model="form.remark"
type="textarea" type="textarea"
placeholder="请输入驳回理由" :placeholder="$t('pages.beautifulNumberApply.placeholder.rejectReason')"
maxlength="300" maxlength="300"
show-word-limit show-word-limit
rows="9" rows="9"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submit()">提交</el-button> <el-button type="primary" @click="submit()">{{ $t('common.submit') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-dialog> </el-dialog>
@ -52,7 +52,7 @@ export default {
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: "必填字段不可为空", trigger: "blur" } { required: true, message: this.$t("pages.beautifulNumberApply.validation.requiredField"), trigger: "blur" }
]; ];
return { return {
loading: false, loading: false,

View File

@ -5,7 +5,7 @@
<!-- 系统选择框 --> <!-- 系统选择框 -->
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.beautifulNumberApply.filter.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -28,7 +28,7 @@
<account-input <account-input
v-model="listQuery.userId" v-model="listQuery.userId"
:sys-origin="listQuery.sysOrigin" :sys-origin="listQuery.sysOrigin"
placeholder="用户ID" :placeholder="$t('pages.beautifulNumberApply.filter.userId')"
/> />
</div> </div>
@ -40,7 +40,7 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
@ -48,12 +48,12 @@
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.beautifulNumberApply.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<!-- 来源系统 --> <!-- 来源系统 -->
<el-table-column prop="sysOrigin" label="来源系统" align="center"> <el-table-column prop="sysOrigin" :label="$t('pages.beautifulNumberApply.table.sourceSystem')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon <sys-origin-icon
:icon="scope.row.sysOrigin" :icon="scope.row.sysOrigin"
@ -66,10 +66,10 @@
<el-table-column prop="applyAccount" label="ID" align="center" /> <el-table-column prop="applyAccount" label="ID" align="center" />
<!-- 财富等级 --> <!-- 财富等级 -->
<el-table-column prop="wealthLevel" label="财富等级" align="center" /> <el-table-column prop="wealthLevel" :label="$t('pages.beautifulNumberApply.table.wealthLevel')" align="center" />
<!-- 申请人 --> <!-- 申请人 -->
<el-table-column label="申请人" align="center"> <el-table-column :label="$t('pages.beautifulNumberApply.table.applicant')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link <el-link
v-if="scope.row.userBaseInfo.id" v-if="scope.row.userBaseInfo.id"
@ -82,18 +82,18 @@
</el-table-column> </el-table-column>
<!-- 状态 --> <!-- 状态 -->
<el-table-column label="状态" align="center"> <el-table-column :label="$t('pages.beautifulNumberApply.table.status')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="0 == scope.row.state">待处理</span> <span v-if="0 == scope.row.state">{{ $t('pages.beautifulNumberApply.status.pending') }}</span>
<span v-if="1 == scope.row.state" style="color:#13ce66">同意</span> <span v-if="1 == scope.row.state" style="color:#13ce66">{{ $t('pages.beautifulNumberApply.status.approved') }}</span>
<span v-if="2 == scope.row.state" style="color:red">驳回</span> <span v-if="2 == scope.row.state" style="color:red">{{ $t('pages.beautifulNumberApply.status.rejected') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- 创建时间 --> <!-- 创建时间 -->
<el-table-column <el-table-column
prop="createTime" prop="createTime"
label="创建时间" :label="$t('pages.beautifulNumberApply.table.createdAt')"
width="200" width="200"
align="center" align="center"
> >
@ -103,19 +103,19 @@
</el-table-column> </el-table-column>
<!-- 操作 --> <!-- 操作 -->
<el-table-column fixed="right" label="操作" align="center"> <el-table-column fixed="right" :label="$t('pages.beautifulNumberApply.table.actions')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="text" type="text"
:disabled="scope.row.state != 0" :disabled="scope.row.state != 0"
@click.native="showAgreeWindow(scope.row.id)" @click.native="showAgreeWindow(scope.row.id)"
>同意</el-button >{{ $t('pages.beautifulNumberApply.action.approve') }}</el-button
> >
<el-button <el-button
type="text" type="text"
:disabled="scope.row.state != 0" :disabled="scope.row.state != 0"
@click.native="showRejectWindow(scope.row.id)" @click.native="showRejectWindow(scope.row.id)"
>驳回</el-button >{{ $t('pages.beautifulNumberApply.action.reject') }}</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
@ -138,7 +138,7 @@
<!-- 同意确认窗口 --> <!-- 同意确认窗口 -->
<el-dialog <el-dialog
title="是否同意该申请" :title="$t('pages.beautifulNumberApply.dialog.approveTitle')"
:visible="AgreeWindowVisible" :visible="AgreeWindowVisible"
:modal-append-to-body="true" :modal-append-to-body="true"
:append-to-body="true" :append-to-body="true"
@ -148,9 +148,9 @@
<div <div
style="width: 100%;display: flex;justify-content: space-around;align-items: center;" style="width: 100%;display: flex;justify-content: space-around;align-items: center;"
> >
<el-button type="danger" @click="handleClose">取消</el-button> <el-button type="danger" @click="handleClose">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="handleApply(AgreeTargetID, 1)" <el-button type="primary" @click="handleApply(AgreeTargetID, 1)"
>同意</el-button >{{ $t('pages.beautifulNumberApply.action.approve') }}</el-button
> >
</div> </div>
</el-dialog> </el-dialog>
@ -250,7 +250,7 @@ export default {
that.listLoading = false; that.listLoading = false;
that.handleClose(); // that.handleClose(); //
that.$message({ that.$message({
message: "Successful", message: that.$t("pages.beautifulNumberApply.message.success"),
type: "success" type: "success"
}); });
that.renderData(); that.renderData();
@ -289,7 +289,7 @@ export default {
const that = this; const that = this;
that.RejectWindowVisible = false; that.RejectWindowVisible = false;
this.$message({ this.$message({
message: "Successful", message: this.$t("pages.beautifulNumberApply.message.success"),
type: "success" type: "success"
}); });
this.renderData(); this.renderData();

View File

@ -3,7 +3,7 @@
<div class="app-container"> <div class="app-container">
<div class="filter-containers"> <div class="filter-containers">
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.userId" placeholder="用户ID" /> <account-input v-model="listQuery.userId" :placeholder="$t('pages.userCheckIns.placeholder.userId')" />
</div> </div>
<div class="filter-item"> <div class="filter-item">
<el-date-picker <el-date-picker
@ -11,9 +11,9 @@
value-format="timestamp" value-format="timestamp"
type="datetimerange" type="datetimerange"
:picker-options="pickerOptions" :picker-options="pickerOptions"
range-separator="" :range-separator="$t('pages.userCheckIns.word.to')"
start-placeholder="发送日期开始" :start-placeholder="$t('pages.userCheckIns.placeholder.startDate')"
end-placeholder="发送日期结束" :end-placeholder="$t('pages.userCheckIns.placeholder.endDate')"
/> />
</div> </div>
<el-button <el-button
@ -24,25 +24,25 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.userCheckIns.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="userId" label="用户ID" align="center" /> <el-table-column prop="userId" :label="$t('pages.userCheckIns.table.userId')" align="center" />
<el-table-column label="昵称" align="center"> <el-table-column :label="$t('pages.userCheckIns.table.nickname')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link v-if="scope.row.userNickname" @click="queryUserDetails(scope.row.userId)">{{ scope.row.userNickname }}</el-link> <el-link v-if="scope.row.userNickname" @click="queryUserDetails(scope.row.userId)">{{ scope.row.userNickname }}</el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userSexName" label="性别" align="center" /> <el-table-column prop="userSexName" :label="$t('pages.userCheckIns.table.gender')" align="center" />
<el-table-column prop="checkInNumber" label="连续签到天数" align="center" /> <el-table-column prop="checkInNumber" :label="$t('pages.userCheckIns.table.consecutiveCheckInDays')" align="center" min-width="160" />
<el-table-column label="签到奖励(道具/糖果数)" align="center"> <el-table-column :label="$t('pages.userCheckIns.table.checkInReward')" align="center" min-width="220">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
v-if="scope.row.propsId" v-if="scope.row.propsId"
@ -52,7 +52,7 @@
<span v-else>{{ scope.row.quantity }}</span> <span v-else>{{ scope.row.quantity }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="签到时间" align="center"> <el-table-column prop="createTime" :label="$t('pages.userCheckIns.table.checkInTime')" align="center" min-width="160">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.giftHistory.placeholder.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -19,45 +19,45 @@
</el-option> </el-option>
</el-select> </el-select>
<div class="filter-item"> <div class="filter-item">
<div><account-input v-model="listQuery.sendUserId" placeholder="发送用户" type="USER" :sys-origin="listQuery.sysOrigin" /></div> <div><account-input v-model="listQuery.sendUserId" :placeholder="$t('pages.giftHistory.placeholder.sender')" type="USER" :sys-origin="listQuery.sysOrigin" /></div>
</div> </div>
<div class="filter-item"> <div class="filter-item">
<div><account-input v-model="listQuery.acceptUserId" placeholder="接收用户" type="USER" :sys-origin="listQuery.sysOrigin" /></div> <div><account-input v-model="listQuery.acceptUserId" :placeholder="$t('pages.giftHistory.placeholder.receiver')" type="USER" :sys-origin="listQuery.sysOrigin" /></div>
</div> </div>
<el-input <el-input
v-model.trim="listQuery.giftId" v-model.trim="listQuery.giftId"
v-number v-number
placeholder="礼物ID" :placeholder="$t('pages.giftHistory.placeholder.giftId')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<el-select <el-select
v-if="showAllCondition" v-if="showAllCondition"
v-model="listQuery.giftValueType" v-model="listQuery.giftValueType"
placeholder="礼物类型" :placeholder="$t('pages.giftHistory.placeholder.giftType')"
style="width:200px" style="width:200px"
class="filter-item" class="filter-item"
clearable clearable
@change="handleSearch" @change="handleSearch"
> >
<el-option v-for="(item) in giftConfigTabs" :key="item.value" :label="item.name" :value="item.value" /> <el-option v-for="(item) in giftConfigTabs" :key="item.value" :label="giftTypeLabel(item.value)" :value="item.value" />
</el-select> </el-select>
<div class="filter-item"> <div class="filter-item">
<el-date-picker <el-date-picker
v-model="rangeDate" v-model="rangeDate"
value-format="timestamp" value-format="timestamp"
type="daterange" type="daterange"
range-separator="" :range-separator="$t('pages.giftHistory.word.to')"
start-placeholder="开始日期" :start-placeholder="$t('pages.giftHistory.placeholder.startDate')"
end-placeholder="结束日期" :end-placeholder="$t('pages.giftHistory.placeholder.endDate')"
/> />
</div> </div>
<el-input <el-input
v-if="showAllCondition" v-if="showAllCondition"
v-model.trim="listQuery.trackId" v-model.trim="listQuery.trackId"
v-number v-number
placeholder="跟踪ID" :placeholder="$t('pages.giftHistory.placeholder.trackId')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
@ -68,36 +68,36 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.giftHistory.action.search') }}
</el-button> </el-button>
<el-checkbox v-model="showAllCondition" class="filter-item">显示所有条件</el-checkbox> <el-checkbox v-model="showAllCondition" class="filter-item">{{ $t('pages.giftHistory.action.showAllConditions') }}</el-checkbox>
</div> </div>
<el-alert type="warning" :closable="false"> <el-alert type="warning" :closable="false">
<div slot="title" class="filter-item"> <div slot="title" class="filter-item">
<el-tooltip class="item" effect="dark"> <el-tooltip class="item" effect="dark">
<div slot="content"> <div slot="content">
<p>什么时候会触发 礼物总价值 统计?</p> <p>{{ $t('pages.giftHistory.tooltip.totalValueTrigger') }}</p>
<p>* 用户ID && 接受人ID && 日期范围 <strong>不为空触发</strong></p> <p>* {{ $t('pages.giftHistory.tooltip.totalValueCondition') }} <strong>{{ $t('pages.giftHistory.tooltip.notEmpty') }}</strong></p>
<p>礼物总价值是赠送后当礼物当前单价*数量=金币消耗总额 </p> <p>{{ $t('pages.giftHistory.tooltip.totalValueDesc') }}</p>
</div> </div>
<i class="el-icon-question"> <i class="el-icon-question">
<strong v-loading="totalCountLoading" element-loading-spinner="el-icon-loading"> 礼物总价值: {{ totalCount || '-' }}</strong> <strong v-loading="totalCountLoading" element-loading-spinner="el-icon-loading"> {{ $t('pages.giftHistory.stat.totalGiftValue') }}: {{ totalCount || '-' }}</strong>
</i> </i>
</el-tooltip> </el-tooltip>
{{ $t('pages.giftHistory.word.separator') }}
<el-tooltip class="item" effect="dark"> <el-tooltip class="item" effect="dark">
<div slot="content"> <div slot="content">
<p>什么时候会触发 接收礼物数量 统计?</p> <p>{{ $t('pages.giftHistory.tooltip.acceptQuantityTrigger') }}</p>
<p>* 接受人ID && 礼物ID && 日期范围 <strong>不为空触发</strong></p> <p>* {{ $t('pages.giftHistory.tooltip.acceptQuantityCondition') }} <strong>{{ $t('pages.giftHistory.tooltip.notEmpty') }}</strong></p>
<p>用户接收了 </p> <p>{{ $t('pages.giftHistory.tooltip.acceptQuantityDesc') }}</p>
</div> </div>
<i class="el-icon-question"> <i class="el-icon-question">
<strong v-loading="giftAcceptQuantityLoading" element-loading-spinner="el-icon-loading"> 接收礼物数量: {{ giftAcceptQuantity || '-' }}</strong> <strong v-loading="giftAcceptQuantityLoading" element-loading-spinner="el-icon-loading"> {{ $t('pages.giftHistory.stat.acceptGiftQuantity') }}: {{ giftAcceptQuantity || '-' }}</strong>
</i> </i>
</el-tooltip> </el-tooltip>
</div> </div>
<strong>注意:</strong> 每条数据的生命周期30天, 30天后记录将会清理 <strong>{{ $t('pages.giftHistory.word.notice') }}:</strong> {{ $t('pages.giftHistory.notice.retention') }}
</el-alert> </el-alert>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
@ -106,7 +106,7 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="发送人" align="center" min-width="200"> <el-table-column :label="$t('pages.giftHistory.table.sender')" align="center" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" :show-sys-origin="true" /> <user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" :show-sys-origin="true" />
<div class="associate-block"> <div class="associate-block">
@ -140,7 +140,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="giftValue.quantity" label="礼物数量" align="center" min-width="80"> <el-table-column prop="giftValue.quantity" :label="$t('pages.giftHistory.table.giftQuantity')" align="center" min-width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="flex-c"> <div class="flex-c">
<el-image <el-image
@ -154,22 +154,22 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="giftValue.userSize" label="接收人数" align="center" min-width="80" /> <el-table-column prop="giftValue.userSize" :label="$t('pages.giftHistory.table.receiverCount')" align="center" min-width="80" />
<el-table-column prop="giftValue.actualAmount" label="消费金额" align="center" min-width="100" /> <el-table-column prop="giftValue.actualAmount" :label="$t('pages.giftHistory.table.consumedAmount')" align="center" min-width="100" />
<el-table-column prop="createTime" label="创建时间" align="center" width="200"> <el-table-column prop="createTime" :label="$t('pages.giftHistory.table.createTime')" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="60"> <el-table-column fixed="right" :label="$t('pages.giftHistory.table.operation')" align="center" width="60">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="clickQueryDetails(scope.row)">详情</el-button> <el-button type="text" @click="clickQueryDetails(scope.row)">{{ $t('pages.giftHistory.action.details') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div v-if="list && list.length > 0" style="text-align: center; margin-top:20px;"> <div v-if="list && list.length > 0" style="text-align: center; margin-top:20px;">
<el-button v-if="!notMore " size="mini" :disabled="listLoading" @click="clickLoadMore">加载更多</el-button> <el-button v-if="!notMore " size="mini" :disabled="listLoading" @click="clickLoadMore">{{ $t('pages.giftHistory.action.loadMore') }}</el-button>
<span v-else>已加载全部</span> <span v-else>{{ $t('pages.giftHistory.message.allLoaded') }}</span>
</div> </div>
<gift-history-details-drawer <gift-history-details-drawer
@ -263,9 +263,12 @@ export default {
} }
that.listQuery.sysOrigin = querySystem.value that.listQuery.sysOrigin = querySystem.value
that.renderData(true) that.renderData(true)
that.giftConfigTabs.push({ value: 'STAR', name: '周星礼物' }) that.giftConfigTabs.push({ value: 'STAR', name: 'STAR' })
}, },
methods: { methods: {
giftTypeLabel(value) {
return this.$t(`pages.giftHistory.giftType.${value}`)
},
renderData(isReset) { renderData(isReset) {
const that = this const that = this
that.listLoading = true that.listLoading = true

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.goldBalanceLeaderboard.filter.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -19,7 +19,7 @@
</el-option> </el-option>
</el-select> </el-select>
<div class="filter-item"> <div class="filter-item">
<div><account-input v-model="listQuery.userId" placeholder="用户ID" type="USER" :sys-origin="listQuery.sysOrigin" /></div> <div><account-input v-model="listQuery.userId" :placeholder="$t('pages.goldBalanceLeaderboard.filter.userId')" type="USER" :sys-origin="listQuery.sysOrigin" /></div>
</div> </div>
<el-button <el-button
@ -28,7 +28,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.goldBalanceLeaderboard.action.search') }}
</el-button> </el-button>
</div> </div>
@ -39,12 +39,12 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column label="用户" align="center" min-width="200"> <el-table-column :label="$t('pages.goldBalanceLeaderboard.table.user')" align="center" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" :show-sys-origin="true" /> <user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" :show-sys-origin="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="balance" label="余额" align="center" min-width="100" /> <el-table-column prop="balance" :label="$t('pages.goldBalanceLeaderboard.table.balance')" align="center" min-width="100" />
<!-- <el-table-column fixed="right" label="操作" align="center" width="60"> <!-- <el-table-column fixed="right" label="操作" align="center" width="60">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="clickQueryDetails(scope.row)">详情</el-button> <el-button type="text" @click="clickQueryDetails(scope.row)">详情</el-button>

View File

@ -1,8 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane v-if="buttonPermissions.includes('user:special:table:query:list')" label="靓号管理" name="SpecialSetting" /> <el-tab-pane v-if="buttonPermissions.includes('user:special:table:query:list')" :label="$t('pages.specialIdRoleManagement.tabs.specialSetting')" name="SpecialSetting" />
<el-tab-pane v-if="buttonPermissions.includes('user:special:log:table:query:list')" label="靓号操作日志" name="SpecialLogInfo" /> <el-tab-pane v-if="buttonPermissions.includes('user:special:log:table:query:list')" :label="$t('pages.specialIdRoleManagement.tabs.specialLogInfo')" name="SpecialLogInfo" />
<component :is="activeName" /> <component :is="activeName" />
</el-tabs> </el-tabs>
</div> </div>
@ -24,11 +24,11 @@ export default {
activeName: 'SpecialSetting', activeName: 'SpecialSetting',
tables: [ tables: [
{ {
title: '靓号管理', title: this.$t('pages.specialIdRoleManagement.tabs.specialSetting'),
component: 'SpecialSetting' component: 'SpecialSetting'
}, },
{ {
title: '靓号操作日志', title: this.$t('pages.specialIdRoleManagement.tabs.specialLogInfo'),
component: 'SpecialLogInfo' component: 'SpecialLogInfo'
} }
] ]

View File

@ -2,7 +2,7 @@
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <div class="filter-container">
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.userId" placeholder="用户ID" /> <account-input v-model="listQuery.userId" :placeholder="$t('pages.specialIdRoleManagement.filter.userId')" />
</div> </div>
<el-button <el-button
class="filter-item" class="filter-item"
@ -11,7 +11,7 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -21,19 +21,19 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="sysOrigin" label="系统" align="center" width="150"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.system')" prop="sysOrigin" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户" align="center" min-width="120"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.user')" align="center" min-width="120">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userBaseInfo" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.userBaseInfo" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="eventDesc" label="系统" align="center" width="780" /> <el-table-column :label="$t('pages.specialIdRoleManagement.table.eventDescription')" prop="eventDesc" align="center" width="780" />
<el-table-column prop="optUserNickname" label="操作用户" align="center" width="100" /> <el-table-column :label="$t('pages.specialIdRoleManagement.table.operatorUser')" prop="optUserNickname" align="center" width="100" />
<el-table-column prop="createTime" label="创建时间" width="200" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.createdAt')" prop="createTime" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="customize-field-dialog"> <div class="customize-field-dialog">
<el-dialog <el-dialog
title="自定义属性" :title="$t('pages.specialIdRoleManagement.customizeField.dialogTitle')"
:visible="true" :visible="true"
:modal-append-to-body="true" :modal-append-to-body="true"
:append-to-body="true" :append-to-body="true"
@ -12,12 +12,12 @@
<el-row v-for="(item, index) in addAttributeForm.attributes" :key="index" :gutter="10"> <el-row v-for="(item, index) in addAttributeForm.attributes" :key="index" :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="键"> <el-form-item :label="$t('pages.specialIdRoleManagement.customizeField.key')">
<el-input v-model="item.key" /> <el-input v-model="item.key" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="值"> <el-form-item :label="$t('pages.specialIdRoleManagement.customizeField.value')">
<el-input v-model="item.value" /> <el-input v-model="item.value" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -25,10 +25,10 @@
</el-form> </el-form>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="cleanSingAttribute">清空属性</el-button> <el-button @click="cleanSingAttribute">{{ $t('pages.specialIdRoleManagement.customizeField.clear') }}</el-button>
<el-button @click="addAttribute">新增属性</el-button> <el-button @click="addAttribute">{{ $t('pages.specialIdRoleManagement.customizeField.add') }}</el-button>
<el-button @click="recommendAttribute">推荐属性</el-button> <el-button @click="recommendAttribute">{{ $t('pages.specialIdRoleManagement.customizeField.recommend') }}</el-button>
<el-button type="primary" @click="submitAddSingAttribute"> </el-button> <el-button type="primary" @click="submitAddSingAttribute">{{ $t('common.submit') }}</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>

View File

@ -13,36 +13,36 @@
<div class="drawer-form"> <div class="drawer-form">
<el-form ref="form" :model="form" :rules="formRules" label-width="100px"> <el-form ref="form" :model="form" :rules="formRules" label-width="100px">
<el-form-item label="系统" prop="sysOrigin"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.system')" prop="sysOrigin">
{{ sysOrigin }} {{ sysOrigin }}
</el-form-item> </el-form-item>
<el-form-item label="用户" prop="userId"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.user')" prop="userId">
<account-input v-model="form.userId" :sys-origin="sysOrigin" class="filter-item" placeholder="用户ID" /> <account-input v-model="form.userId" :sys-origin="sysOrigin" class="filter-item" :placeholder="$t('pages.specialIdRoleManagement.filter.userId')" />
</el-form-item> </el-form-item>
<el-form-item label="新账号" prop="account"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.newAccount')" prop="account">
<el-input v-model.trim="form.account" placeholder="请输入新账号" class="input-with-select" maxlength="10" /> <el-input v-model.trim="form.account" :placeholder="$t('pages.specialIdRoleManagement.placeholder.newAccount')" class="input-with-select" maxlength="10" />
</el-form-item> </el-form-item>
<el-form-item prop="expiredDays"> <el-form-item prop="expiredDays">
<el-tooltip slot="label" class="item" effect="dark" placement="top-start"> <el-tooltip slot="label" class="item" effect="dark" placement="top-start">
<div slot="content"> <div slot="content">
<div>0.代表永久, 其他.有效范围1~3650; 更新方式:覆盖</div> <div>{{ $t('pages.specialIdRoleManagement.tooltip.expiredDays') }}</div>
</div> </div>
<i class="el-icon-question">有效天</i> <i class="el-icon-question">{{ $t('pages.specialIdRoleManagement.form.expiredDays') }}</i>
</el-tooltip> </el-tooltip>
<el-input v-model.trim="form.expiredDays" v-number min="0" max="3650" placeholder="请输入有效天数" class="input-with-select" maxlength="4" /> <el-input v-model.trim="form.expiredDays" v-number min="0" max="3650" :placeholder="$t('pages.specialIdRoleManagement.placeholder.expiredDays')" class="input-with-select" maxlength="4" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.remark')" prop="remark">
<el-input v-model.trim="form.remark" type="textarea" resize="none" :rows="3" placeholder="请输入备注" maxlength="100" show-word-limit /> <el-input v-model.trim="form.remark" type="textarea" resize="none" :rows="3" :placeholder="$t('pages.specialIdRoleManagement.placeholder.remark')" maxlength="100" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="自定义属性"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.customizeField')">
<el-button type="text" @click="clickCustomizeField()">点击查看/设置</el-button> <el-button type="text" @click="clickCustomizeField()">{{ $t('pages.specialIdRoleManagement.action.viewOrSetCustomField') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div class="drawer-footer"> <div class="drawer-footer">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" :loading="submitLoading" :disabled="searchDisabled" @click="submitForm()">保存</el-button> <el-button type="primary" :loading="submitLoading" :disabled="searchDisabled" @click="submitForm()">{{ $t('common.save') }}</el-button>
</div> </div>
</el-drawer> </el-drawer>
@ -75,7 +75,7 @@ export default {
}, },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: '必填字段', trigger: 'blur' } { required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredField'), trigger: 'blur' }
] ]
return { return {
@ -95,18 +95,18 @@ export default {
formRules: { formRules: {
userId: commonRules, userId: commonRules,
account: commonRules, account: commonRules,
expiredDays: { required: true, message: '有效值0~3650', trigger: 'blur' } expiredDays: { required: true, message: this.$t('pages.specialIdRoleManagement.validation.expiredDays'), trigger: 'blur' }
}, },
sourceTypeList: [], sourceTypeList: [],
selectType: {}, selectType: {},
isLoadSourceTypeList: false, isLoadSourceTypeList: false,
listTypeLoading: false, listTypeLoading: false,
badgeRestaurants: [{ 'value': '0', 'label': '永久' }] badgeRestaurants: [{ 'value': '0', 'label': this.$t('pages.specialIdRoleManagement.word.permanent') }]
} }
}, },
computed: { computed: {
textOptTitle() { textOptTitle() {
return this.row && this.row.id ? '修改' : '添加' return this.row && this.row.id ? this.$t('pages.specialIdRoleManagement.dialog.edit') : this.$t('pages.specialIdRoleManagement.dialog.add')
}, },
isUpdate() { isUpdate() {
return this.row != null && this.row.userSpecialId != null return this.row != null && this.row.userSpecialId != null
@ -147,7 +147,7 @@ export default {
that.form.sysOrigin = that.sysOrigin that.form.sysOrigin = that.sysOrigin
} }
saveOrUpdate(that.form).then(res => { saveOrUpdate(that.form).then(res => {
that.$message.success('操作成功') that.$message.success(that.$t('pages.specialIdRoleManagement.message.operationSuccess'))
that.submitLoading = false that.submitLoading = false
that.$emit('success') that.$emit('success')
}).catch(er => { }).catch(er => {

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.specialIdRoleManagement.filter.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -18,10 +18,10 @@
<span style="float: left;margin-left:10px">{{ item.label }}</span> <span style="float: left;margin-left:10px">{{ item.label }}</span>
</el-option> </el-option>
</el-select> </el-select>
<account-input v-model="listQuery.userId" :sys-origin="listQuery.sysOrigin" class="filter-item" placeholder="用户ID" /> <account-input v-model="listQuery.userId" :sys-origin="listQuery.sysOrigin" class="filter-item" :placeholder="$t('pages.specialIdRoleManagement.filter.userId')" />
<el-input <el-input
v-model.trim="listQuery.account" v-model.trim="listQuery.account"
placeholder="靓号Account" :placeholder="$t('pages.specialIdRoleManagement.filter.specialAccount')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
@ -33,7 +33,7 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
<el-button <el-button
v-if="buttonPermissions.includes('user:special:add')" v-if="buttonPermissions.includes('user:special:add')"
@ -42,7 +42,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
添加 {{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -56,12 +56,12 @@
> >
<el-table-column type="index" width="50" label="No" /> <el-table-column type="index" width="50" label="No" />
<el-table-column prop="userSpecialId.sysOrigin" label="系统" align="center" width="150"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.system')" prop="userSpecialId.sysOrigin" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.userSpecialId.sysOrigin" :desc="scope.row.userSpecialId.sysOrigin" /> <sys-origin-icon :icon="scope.row.userSpecialId.sysOrigin" :desc="scope.row.userSpecialId.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.user')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="box-header flex-l"> <div class="box-header flex-l">
@ -76,35 +76,35 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userSpecialId.account" label="靓号" align="center" /> <el-table-column :label="$t('pages.specialIdRoleManagement.table.specialId')" prop="userSpecialId.account" align="center" />
<el-table-column prop="userSpecialId.expiredTime" label="过期时间" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.expiredAt')" prop="userSpecialId.expiredTime" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.userSpecialId.expiredTime | dateFormat }} {{ scope.row.userSpecialId.expiredTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userSpecialId.createTime" label="创建时间" width="200" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.createdAt')" prop="userSpecialId.createTime" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.userSpecialId.createTime | dateFormat }} {{ scope.row.userSpecialId.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userSpecialId.updateTime" label="修改时间" width="200" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.updatedAt')" prop="userSpecialId.updateTime" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.userSpecialId.updateTime | dateFormat }} {{ scope.row.userSpecialId.updateTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="optUserNickname" label="操作人" align="center" width="80" /> <el-table-column :label="$t('pages.specialIdRoleManagement.table.operator')" prop="optUserNickname" align="center" width="80" />
<el-table-column fixed="right" label="操作" align="center" width="50"> <el-table-column fixed="right" :label="$t('pages.specialIdRoleManagement.table.actions')" align="center" width="50">
<template slot-scope="scope"> <template slot-scope="scope">
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<i class="el-icon-more" /> <i class="el-icon-more" />
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="buttonPermissions.includes('user:special:log:table:query:list')" @click.native="clickQueryLog(scope.row)">查看日志</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:log:table:query:list')" @click.native="clickQueryLog(scope.row)">{{ $t('pages.specialIdRoleManagement.action.viewLog') }}</el-dropdown-item>
<el-dropdown-item v-if="buttonPermissions.includes('user:special:update')" @click.native="clickUpdateAccount(scope.row)">修改靓号</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:update')" @click.native="clickUpdateAccount(scope.row)">{{ $t('pages.specialIdRoleManagement.action.editSpecialId') }}</el-dropdown-item>
<el-dropdown-item v-if="buttonPermissions.includes('user:special:editTime')" @click.native="clickEditTime(scope.row)">编辑时间</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:editTime')" @click.native="clickEditTime(scope.row)">{{ $t('pages.specialIdRoleManagement.action.editTime') }}</el-dropdown-item>
<el-dropdown-item v-if="buttonPermissions.includes('user:special:custom')" @click.native="clickEditField(scope.row)">自定义属性</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:custom')" @click.native="clickEditField(scope.row)">{{ $t('pages.specialIdRoleManagement.action.customizeField') }}</el-dropdown-item>
<el-dropdown-item v-if="buttonPermissions.includes('user:special:del')" @click.native="clickRemove(scope.row)">删除靓号</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:del')" @click.native="clickRemove(scope.row)">{{ $t('pages.specialIdRoleManagement.action.deleteSpecialId') }}</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
@ -112,8 +112,8 @@
</el-table> </el-table>
<div v-if="listQuery.lastId" class="load-more"> <div v-if="listQuery.lastId" class="load-more">
<span v-if="notData">已加载全部</span> <span v-if="notData">{{ $t('pages.specialIdRoleManagement.message.loadedAll') }}</span>
<el-button v-else size="mini" :disabled="loadMoreLoading" :loading="loadMoreLoading" @click="clickLoadMore">加载更多</el-button> <el-button v-else size="mini" :disabled="loadMoreLoading" :loading="loadMoreLoading" @click="clickLoadMore">{{ $t('common.loadMore') }}</el-button>
</div> </div>
<user-deatils-drawer <user-deatils-drawer
@ -144,7 +144,7 @@
/> />
<el-dialog <el-dialog
v-loading="submitLoading" v-loading="submitLoading"
title="修改靓号" :title="$t('pages.specialIdRoleManagement.dialog.editSpecialId')"
width="450px" width="450px"
:visible.sync="dialogFormVisible" :visible.sync="dialogFormVisible"
:modal-append-to-body="true" :modal-append-to-body="true"
@ -160,32 +160,32 @@
label-position="right" label-position="right"
label-width="100px" label-width="100px"
> >
<el-form-item label="靓号" prop="newAccount"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.specialId')" prop="newAccount">
<el-input <el-input
v-model.trim="editAccountData.newAccount" v-model.trim="editAccountData.newAccount"
placeholder="请输入靓号" :placeholder="$t('pages.specialIdRoleManagement.placeholder.specialId')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="有效期(天)" prop="expiredDays"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.expiredPeriodDays')" prop="expiredDays">
<el-input <el-input
v-model="editAccountData.expiredDays" v-model="editAccountData.expiredDays"
v-number v-number
placeholder="请输入有效期" :placeholder="$t('pages.specialIdRoleManagement.placeholder.expiredPeriodDays')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.remark')" prop="remark">
<el-input v-model.trim="editAccountData.remark" type="textarea" resize="none" :rows="3" placeholder="请输入备注" maxlength="100" show-word-limit /> <el-input v-model.trim="editAccountData.remark" type="textarea" resize="none" :rows="3" :placeholder="$t('pages.specialIdRoleManagement.placeholder.remark')" maxlength="100" show-word-limit />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="editAccountClose()"> <el-button @click="editAccountClose()">
取消 {{ $t('common.cancel') }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
@click="editSubmit()" @click="editSubmit()"
> >
提交 {{ $t('common.submit') }}
</el-button> </el-button>
</div> </div>
</el-dialog> </el-dialog>
@ -206,7 +206,7 @@ export default {
components: { FormEdit, SpecialLog, CustomizeFieldDialog }, components: { FormEdit, SpecialLog, CustomizeFieldDialog },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: '必填字段', trigger: 'blur' } { required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredField'), trigger: 'blur' }
] ]
return { return {
@ -244,7 +244,7 @@ export default {
}, },
formRules: { formRules: {
userId: commonRules, userId: commonRules,
earnPoints: { required: true, message: '必填字段不可为空', trigger: 'blur' }, earnPoints: { required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredFieldNotEmpty'), trigger: 'blur' },
sysOrigin: commonRules sysOrigin: commonRules
}, },
formEditVisable: false, formEditVisable: false,
@ -255,8 +255,8 @@ export default {
remark: '' remark: ''
}, },
rules: { rules: {
newAccount: [{ required: true, message: '必填参数不可为空', trigger: 'blur' }], newAccount: [{ required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredParamNotEmpty'), trigger: 'blur' }],
expiredDays: [{ required: true, message: '必填参数不可为空', trigger: 'blur' }] expiredDays: [{ required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredParamNotEmpty'), trigger: 'blur' }]
} }
} }
}, },
@ -316,25 +316,25 @@ export default {
}, },
clickRemove(row) { clickRemove(row) {
const that = this const that = this
that.$confirm('是否确认删除?', '提示', { that.$confirm(that.$t('pages.specialIdRoleManagement.confirm.delete'), that.$t('common.tip'), {
confirmButtonText: '确定', confirmButtonText: that.$t('common.confirm'),
cancelButtonText: '取消', cancelButtonText: that.$t('common.cancel'),
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
remove(row.userSpecialId).then(res => { remove(row.userSpecialId).then(res => {
that.renderData(true, true) that.renderData(true, true)
}).catch(er => { }).catch(er => {
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
}) })
}).catch(() => {}) }).catch(() => {})
}, },
clickEditTime(row) { clickEditTime(row) {
const that = this const that = this
that.$prompt('请输入天数,负数表示在原有基础上减去天(0.永久)', '提示', { that.$prompt(that.$t('pages.specialIdRoleManagement.prompt.editExpiredDaysMessage'), that.$t('common.tip'), {
confirmButtonText: '确定', confirmButtonText: that.$t('common.confirm'),
cancelButtonText: '取消', cancelButtonText: that.$t('common.cancel'),
inputPattern: /^-?\d{1,4}$/, inputPattern: /^-?\d{1,4}$/,
inputErrorMessage: '请输入有效数字-9999~9999' inputErrorMessage: that.$t('pages.specialIdRoleManagement.validation.validNumberRange')
}).then(({ value }) => { }).then(({ value }) => {
updateExpiredTime({ updateExpiredTime({
id: row.userSpecialId.id, id: row.userSpecialId.id,
@ -342,7 +342,7 @@ export default {
}).then(res => { }).then(res => {
that.renderData() that.renderData()
}).catch(er => { }).catch(er => {
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
}) })
}).catch(() => {}) }).catch(() => {})
}, },
@ -382,9 +382,9 @@ export default {
that.submitLoading = true that.submitLoading = true
that.thatRow.userSpecialId.customizeField = fieldObj that.thatRow.userSpecialId.customizeField = fieldObj
saveOrUpdate(that.thatRow.userSpecialId).then(res => { saveOrUpdate(that.thatRow.userSpecialId).then(res => {
that.$message.success('操作成功') that.$message.success(that.$t('pages.specialIdRoleManagement.message.operationSuccess'))
}).catch(er => { }).catch(er => {
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
}) })
}, },
handleMouseEnter(row) { handleMouseEnter(row) {
@ -453,26 +453,26 @@ export default {
that.listLoading = true that.listLoading = true
if (that.type) { if (that.type) {
shipFreight(that.formData).then(res => { shipFreight(that.formData).then(res => {
that.$message.success('操作成功') that.$message.success(that.$t('pages.specialIdRoleManagement.message.operationSuccess'))
that.goldInputBoxVisible = false that.goldInputBoxVisible = false
that.listLoading = false that.listLoading = false
that.renderData() that.renderData()
}).catch(er => { }).catch(er => {
that.listLoading = false that.listLoading = false
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
console.error(er) console.error(er)
}) })
return return
} }
deductionFreight(that.formData).then(res => { deductionFreight(that.formData).then(res => {
that.$message.success('操作成功') that.$message.success(that.$t('pages.specialIdRoleManagement.message.operationSuccess'))
that.goldInputBoxVisible = false that.goldInputBoxVisible = false
that.listLoading = false that.listLoading = false
that.renderData() that.renderData()
}).catch(er => { }).catch(er => {
that.listLoading = false that.listLoading = false
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
console.error(er) console.error(er)
}) })
}) })

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="special-log"> <div class="special-log">
<el-drawer <el-drawer
title="账号日志" :title="$t('pages.specialIdRoleManagement.dialog.accountLog')"
:visible="true" :visible="true"
:append-to-body="true" :append-to-body="true"
:before-close="handleClose" :before-close="handleClose"
@ -21,8 +21,8 @@
<div slot="dot"> <div slot="dot">
<el-tooltip class="item" effect="dark"> <el-tooltip class="item" effect="dark">
<div slot="content"> <div slot="content">
<div>用户ID:{{ item.userBaseInfo.id }}</div> <div>{{ $t('pages.specialIdRoleManagement.label.userId') }}:{{ item.userBaseInfo.id }}</div>
<div>用户昵称:{{ item.userBaseInfo.userNickname }}</div> <div>{{ $t('pages.specialIdRoleManagement.label.userNickname') }}:{{ item.userBaseInfo.userNickname }}</div>
</div> </div>
<el-image <el-image
style="width: 30px; height: 30px; border-radius: 100%;position: absolute;left: -10px;z-index: 9;" style="width: 30px; height: 30px; border-radius: 100%;position: absolute;left: -10px;z-index: 9;"

View File

@ -1,8 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane v-if="buttonPermissions.includes('user:special:table:query:list')" label="靓号管理" name="SpecialSetting" /> <el-tab-pane v-if="buttonPermissions.includes('user:special:table:query:list')" :label="$t('pages.specialIdRoleManagement.tabs.specialSetting')" name="SpecialSetting" />
<el-tab-pane v-if="buttonPermissions.includes('user:special:log:table:query:list')" label="靓号操作日志" name="SpecialLogInfo" /> <el-tab-pane v-if="buttonPermissions.includes('user:special:log:table:query:list')" :label="$t('pages.specialIdRoleManagement.tabs.specialLogInfo')" name="SpecialLogInfo" />
<component :is="activeName" /> <component :is="activeName" />
</el-tabs> </el-tabs>
</div> </div>
@ -24,11 +24,11 @@ export default {
activeName: 'SpecialSetting', activeName: 'SpecialSetting',
tables: [ tables: [
{ {
title: '靓号管理', title: this.$t('pages.specialIdRoleManagement.tabs.specialSetting'),
component: 'SpecialSetting' component: 'SpecialSetting'
}, },
{ {
title: '靓号操作日志', title: this.$t('pages.specialIdRoleManagement.tabs.specialLogInfo'),
component: 'SpecialLogInfo' component: 'SpecialLogInfo'
} }
] ]

View File

@ -2,7 +2,7 @@
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <div class="filter-container">
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.userId" placeholder="用户ID" /> <account-input v-model="listQuery.userId" :placeholder="$t('pages.specialIdRoleManagement.filter.userId')" />
</div> </div>
<el-button <el-button
class="filter-item" class="filter-item"
@ -11,7 +11,7 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -21,19 +21,19 @@
fit fit
highlight-current-row highlight-current-row
> >
<el-table-column prop="sysOrigin" label="系统" align="center" width="150"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.system')" prop="sysOrigin" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" /> <sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户" align="center" min-width="120"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.user')" align="center" min-width="120">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit :user-profile="scope.row.userBaseInfo" :query-details="true" /> <user-table-exhibit :user-profile="scope.row.userBaseInfo" :query-details="true" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="eventDesc" label="系统" align="center" width="780" /> <el-table-column :label="$t('pages.specialIdRoleManagement.table.eventDescription')" prop="eventDesc" align="center" width="780" />
<el-table-column prop="optUserNickname" label="操作用户" align="center" width="100" /> <el-table-column :label="$t('pages.specialIdRoleManagement.table.operatorUser')" prop="optUserNickname" align="center" width="100" />
<el-table-column prop="createTime" label="创建时间" width="200" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.createdAt')" prop="createTime" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.createTime | dateFormat }} {{ scope.row.createTime | dateFormat }}
</template> </template>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="customize-field-dialog"> <div class="customize-field-dialog">
<el-dialog <el-dialog
title="自定义属性" :title="$t('pages.specialIdRoleManagement.customizeField.dialogTitle')"
:visible="true" :visible="true"
:modal-append-to-body="true" :modal-append-to-body="true"
:append-to-body="true" :append-to-body="true"
@ -12,12 +12,12 @@
<el-row v-for="(item, index) in addAttributeForm.attributes" :key="index" :gutter="10"> <el-row v-for="(item, index) in addAttributeForm.attributes" :key="index" :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="键"> <el-form-item :label="$t('pages.specialIdRoleManagement.customizeField.key')">
<el-input v-model="item.key" /> <el-input v-model="item.key" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="值"> <el-form-item :label="$t('pages.specialIdRoleManagement.customizeField.value')">
<el-input v-model="item.value" /> <el-input v-model="item.value" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -25,10 +25,10 @@
</el-form> </el-form>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="cleanSingAttribute">清空属性</el-button> <el-button @click="cleanSingAttribute">{{ $t('pages.specialIdRoleManagement.customizeField.clear') }}</el-button>
<el-button @click="addAttribute">新增属性</el-button> <el-button @click="addAttribute">{{ $t('pages.specialIdRoleManagement.customizeField.add') }}</el-button>
<el-button @click="recommendAttribute">推荐属性</el-button> <el-button @click="recommendAttribute">{{ $t('pages.specialIdRoleManagement.customizeField.recommend') }}</el-button>
<el-button type="primary" @click="submitAddSingAttribute"> </el-button> <el-button type="primary" @click="submitAddSingAttribute">{{ $t('common.submit') }}</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>

View File

@ -13,36 +13,36 @@
<div class="drawer-form"> <div class="drawer-form">
<el-form ref="form" :model="form" :rules="formRules" label-width="100px"> <el-form ref="form" :model="form" :rules="formRules" label-width="100px">
<el-form-item label="系统" prop="sysOrigin"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.system')" prop="sysOrigin">
{{ sysOrigin }} {{ sysOrigin }}
</el-form-item> </el-form-item>
<el-form-item label="用户" prop="userId"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.user')" prop="userId">
<account-input v-model="form.userId" :sys-origin="sysOrigin" class="filter-item" placeholder="用户ID" /> <account-input v-model="form.userId" :sys-origin="sysOrigin" class="filter-item" :placeholder="$t('pages.specialIdRoleManagement.filter.userId')" />
</el-form-item> </el-form-item>
<el-form-item label="新账号" prop="account"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.newAccount')" prop="account">
<el-input v-model.trim="form.account" placeholder="请输入新账号" class="input-with-select" maxlength="10" /> <el-input v-model.trim="form.account" :placeholder="$t('pages.specialIdRoleManagement.placeholder.newAccount')" class="input-with-select" maxlength="10" />
</el-form-item> </el-form-item>
<el-form-item prop="expiredDays"> <el-form-item prop="expiredDays">
<el-tooltip slot="label" class="item" effect="dark" placement="top-start"> <el-tooltip slot="label" class="item" effect="dark" placement="top-start">
<div slot="content"> <div slot="content">
<div>0.代表永久, 其他.有效范围1~3650; 更新方式:覆盖</div> <div>{{ $t('pages.specialIdRoleManagement.tooltip.expiredDays') }}</div>
</div> </div>
<i class="el-icon-question">有效天</i> <i class="el-icon-question">{{ $t('pages.specialIdRoleManagement.form.expiredDays') }}</i>
</el-tooltip> </el-tooltip>
<el-input v-model.trim="form.expiredDays" v-number min="0" max="3650" placeholder="请输入有效天数" class="input-with-select" maxlength="4" /> <el-input v-model.trim="form.expiredDays" v-number min="0" max="3650" :placeholder="$t('pages.specialIdRoleManagement.placeholder.expiredDays')" class="input-with-select" maxlength="4" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.remark')" prop="remark">
<el-input v-model.trim="form.remark" type="textarea" resize="none" :rows="3" placeholder="请输入备注" maxlength="100" show-word-limit /> <el-input v-model.trim="form.remark" type="textarea" resize="none" :rows="3" :placeholder="$t('pages.specialIdRoleManagement.placeholder.remark')" maxlength="100" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="自定义属性"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.customizeField')">
<el-button type="text" @click="clickCustomizeField()">点击查看/设置</el-button> <el-button type="text" @click="clickCustomizeField()">{{ $t('pages.specialIdRoleManagement.action.viewOrSetCustomField') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div class="drawer-footer"> <div class="drawer-footer">
<el-button @click="handleClose()">取消</el-button> <el-button @click="handleClose()">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" :loading="submitLoading" :disabled="searchDisabled" @click="submitForm()">保存</el-button> <el-button type="primary" :loading="submitLoading" :disabled="searchDisabled" @click="submitForm()">{{ $t('common.save') }}</el-button>
</div> </div>
</el-drawer> </el-drawer>
@ -75,7 +75,7 @@ export default {
}, },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: '必填字段', trigger: 'blur' } { required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredField'), trigger: 'blur' }
] ]
return { return {
@ -95,18 +95,18 @@ export default {
formRules: { formRules: {
userId: commonRules, userId: commonRules,
account: commonRules, account: commonRules,
expiredDays: { required: true, message: '有效值0~3650', trigger: 'blur' } expiredDays: { required: true, message: this.$t('pages.specialIdRoleManagement.validation.expiredDays'), trigger: 'blur' }
}, },
sourceTypeList: [], sourceTypeList: [],
selectType: {}, selectType: {},
isLoadSourceTypeList: false, isLoadSourceTypeList: false,
listTypeLoading: false, listTypeLoading: false,
badgeRestaurants: [{ 'value': '0', 'label': '永久' }] badgeRestaurants: [{ 'value': '0', 'label': this.$t('pages.specialIdRoleManagement.word.permanent') }]
} }
}, },
computed: { computed: {
textOptTitle() { textOptTitle() {
return this.row && this.row.id ? '修改' : '添加' return this.row && this.row.id ? this.$t('pages.specialIdRoleManagement.dialog.edit') : this.$t('pages.specialIdRoleManagement.dialog.add')
}, },
isUpdate() { isUpdate() {
return this.row != null && this.row.userSpecialId != null return this.row != null && this.row.userSpecialId != null
@ -147,7 +147,7 @@ export default {
that.form.sysOrigin = that.sysOrigin that.form.sysOrigin = that.sysOrigin
} }
saveOrUpdate(that.form).then(res => { saveOrUpdate(that.form).then(res => {
that.$message.success('操作成功') that.$message.success(that.$t('pages.specialIdRoleManagement.message.operationSuccess'))
that.submitLoading = false that.submitLoading = false
that.$emit('success') that.$emit('success')
}).catch(er => { }).catch(er => {

View File

@ -3,7 +3,7 @@
<div class="filter-container"> <div class="filter-container">
<el-select <el-select
v-model="listQuery.sysOrigin" v-model="listQuery.sysOrigin"
placeholder="系统" :placeholder="$t('pages.specialIdRoleManagement.filter.system')"
style="width: 120px" style="width: 120px"
class="filter-item" class="filter-item"
@change="handleSearch" @change="handleSearch"
@ -18,10 +18,10 @@
<span style="float: left;margin-left:10px">{{ item.label }}</span> <span style="float: left;margin-left:10px">{{ item.label }}</span>
</el-option> </el-option>
</el-select> </el-select>
<account-input v-model="listQuery.userId" :sys-origin="listQuery.sysOrigin" class="filter-item" placeholder="用户ID" /> <account-input v-model="listQuery.userId" :sys-origin="listQuery.sysOrigin" class="filter-item" :placeholder="$t('pages.specialIdRoleManagement.filter.userId')" />
<el-input <el-input
v-model.trim="listQuery.account" v-model.trim="listQuery.account"
placeholder="靓号Account" :placeholder="$t('pages.specialIdRoleManagement.filter.specialAccount')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
@ -33,7 +33,7 @@
:disabled="searchDisabled" :disabled="searchDisabled"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('common.search') }}
</el-button> </el-button>
<el-button <el-button
v-if="buttonPermissions.includes('user:special:add')" v-if="buttonPermissions.includes('user:special:add')"
@ -42,7 +42,7 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleCreate" @click="handleCreate"
> >
添加 {{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@ -56,12 +56,12 @@
> >
<el-table-column type="index" width="50" label="No" /> <el-table-column type="index" width="50" label="No" />
<el-table-column prop="userSpecialId.sysOrigin" label="系统" align="center" width="150"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.system')" prop="userSpecialId.sysOrigin" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<sys-origin-icon :icon="scope.row.userSpecialId.sysOrigin" :desc="scope.row.userSpecialId.sysOrigin" /> <sys-origin-icon :icon="scope.row.userSpecialId.sysOrigin" :desc="scope.row.userSpecialId.sysOrigin" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.user')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="box-header flex-l"> <div class="box-header flex-l">
@ -76,35 +76,35 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userSpecialId.account" label="靓号" align="center" /> <el-table-column :label="$t('pages.specialIdRoleManagement.table.specialId')" prop="userSpecialId.account" align="center" />
<el-table-column prop="userSpecialId.expiredTime" label="过期时间" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.expiredAt')" prop="userSpecialId.expiredTime" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.userSpecialId.expiredTime | dateFormat }} {{ scope.row.userSpecialId.expiredTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userSpecialId.createTime" label="创建时间" width="200" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.createdAt')" prop="userSpecialId.createTime" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.userSpecialId.createTime | dateFormat }} {{ scope.row.userSpecialId.createTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userSpecialId.updateTime" label="修改时间" width="200" align="center"> <el-table-column :label="$t('pages.specialIdRoleManagement.table.updatedAt')" prop="userSpecialId.updateTime" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.userSpecialId.updateTime | dateFormat }} {{ scope.row.userSpecialId.updateTime | dateFormat }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="optUserNickname" label="操作人" align="center" width="80" /> <el-table-column :label="$t('pages.specialIdRoleManagement.table.operator')" prop="optUserNickname" align="center" width="80" />
<el-table-column fixed="right" label="操作" align="center" width="50"> <el-table-column fixed="right" :label="$t('pages.specialIdRoleManagement.table.actions')" align="center" width="50">
<template slot-scope="scope"> <template slot-scope="scope">
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<i class="el-icon-more" /> <i class="el-icon-more" />
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="buttonPermissions.includes('user:special:log:table:query:list')" @click.native="clickQueryLog(scope.row)">查看日志</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:log:table:query:list')" @click.native="clickQueryLog(scope.row)">{{ $t('pages.specialIdRoleManagement.action.viewLog') }}</el-dropdown-item>
<el-dropdown-item v-if="buttonPermissions.includes('user:special:update')" @click.native="clickUpdateAccount(scope.row)">修改靓号</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:update')" @click.native="clickUpdateAccount(scope.row)">{{ $t('pages.specialIdRoleManagement.action.editSpecialId') }}</el-dropdown-item>
<el-dropdown-item v-if="buttonPermissions.includes('user:special:editTime')" @click.native="clickEditTime(scope.row)">编辑时间</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:editTime')" @click.native="clickEditTime(scope.row)">{{ $t('pages.specialIdRoleManagement.action.editTime') }}</el-dropdown-item>
<el-dropdown-item v-if="buttonPermissions.includes('user:special:custom')" @click.native="clickEditField(scope.row)">自定义属性</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:custom')" @click.native="clickEditField(scope.row)">{{ $t('pages.specialIdRoleManagement.action.customizeField') }}</el-dropdown-item>
<el-dropdown-item v-if="buttonPermissions.includes('user:special:del')" @click.native="clickRemove(scope.row)">删除靓号</el-dropdown-item> <el-dropdown-item v-if="buttonPermissions.includes('user:special:del')" @click.native="clickRemove(scope.row)">{{ $t('pages.specialIdRoleManagement.action.deleteSpecialId') }}</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
@ -112,8 +112,8 @@
</el-table> </el-table>
<div v-if="listQuery.lastId" class="load-more"> <div v-if="listQuery.lastId" class="load-more">
<span v-if="notData">已加载全部</span> <span v-if="notData">{{ $t('pages.specialIdRoleManagement.message.loadedAll') }}</span>
<el-button v-else size="mini" :disabled="loadMoreLoading" :loading="loadMoreLoading" @click="clickLoadMore">加载更多</el-button> <el-button v-else size="mini" :disabled="loadMoreLoading" :loading="loadMoreLoading" @click="clickLoadMore">{{ $t('common.loadMore') }}</el-button>
</div> </div>
<user-deatils-drawer <user-deatils-drawer
@ -144,7 +144,7 @@
/> />
<el-dialog <el-dialog
v-loading="submitLoading" v-loading="submitLoading"
title="修改靓号" :title="$t('pages.specialIdRoleManagement.dialog.editSpecialId')"
width="450px" width="450px"
:visible.sync="dialogFormVisible" :visible.sync="dialogFormVisible"
:modal-append-to-body="true" :modal-append-to-body="true"
@ -160,32 +160,32 @@
label-position="right" label-position="right"
label-width="100px" label-width="100px"
> >
<el-form-item label="靓号" prop="newAccount"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.specialId')" prop="newAccount">
<el-input <el-input
v-model.trim="editAccountData.newAccount" v-model.trim="editAccountData.newAccount"
placeholder="请输入靓号" :placeholder="$t('pages.specialIdRoleManagement.placeholder.specialId')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="有效期(天)" prop="expiredDays"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.expiredPeriodDays')" prop="expiredDays">
<el-input <el-input
v-model="editAccountData.expiredDays" v-model="editAccountData.expiredDays"
v-number v-number
placeholder="请输入有效期" :placeholder="$t('pages.specialIdRoleManagement.placeholder.expiredPeriodDays')"
/> />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item :label="$t('pages.specialIdRoleManagement.form.remark')" prop="remark">
<el-input v-model.trim="editAccountData.remark" type="textarea" resize="none" :rows="3" placeholder="请输入备注" maxlength="100" show-word-limit /> <el-input v-model.trim="editAccountData.remark" type="textarea" resize="none" :rows="3" :placeholder="$t('pages.specialIdRoleManagement.placeholder.remark')" maxlength="100" show-word-limit />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="editAccountClose()"> <el-button @click="editAccountClose()">
取消 {{ $t('common.cancel') }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
@click="editSubmit()" @click="editSubmit()"
> >
提交 {{ $t('common.submit') }}
</el-button> </el-button>
</div> </div>
</el-dialog> </el-dialog>
@ -206,7 +206,7 @@ export default {
components: { FormEdit, SpecialLog, CustomizeFieldDialog }, components: { FormEdit, SpecialLog, CustomizeFieldDialog },
data() { data() {
const commonRules = [ const commonRules = [
{ required: true, message: '必填字段', trigger: 'blur' } { required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredField'), trigger: 'blur' }
] ]
return { return {
@ -244,7 +244,7 @@ export default {
}, },
formRules: { formRules: {
userId: commonRules, userId: commonRules,
earnPoints: { required: true, message: '必填字段不可为空', trigger: 'blur' }, earnPoints: { required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredFieldNotEmpty'), trigger: 'blur' },
sysOrigin: commonRules sysOrigin: commonRules
}, },
formEditVisable: false, formEditVisable: false,
@ -255,8 +255,8 @@ export default {
remark: '' remark: ''
}, },
rules: { rules: {
newAccount: [{ required: true, message: '必填参数不可为空', trigger: 'blur' }], newAccount: [{ required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredParamNotEmpty'), trigger: 'blur' }],
expiredDays: [{ required: true, message: '必填参数不可为空', trigger: 'blur' }] expiredDays: [{ required: true, message: this.$t('pages.specialIdRoleManagement.validation.requiredParamNotEmpty'), trigger: 'blur' }]
} }
} }
}, },
@ -312,25 +312,25 @@ export default {
}, },
clickRemove(row) { clickRemove(row) {
const that = this const that = this
that.$confirm('是否确认删除?', '提示', { that.$confirm(that.$t('pages.specialIdRoleManagement.confirm.delete'), that.$t('common.tip'), {
confirmButtonText: '确定', confirmButtonText: that.$t('common.confirm'),
cancelButtonText: '取消', cancelButtonText: that.$t('common.cancel'),
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
remove(row.userSpecialId).then(res => { remove(row.userSpecialId).then(res => {
that.renderData(true, true) that.renderData(true, true)
}).catch(er => { }).catch(er => {
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
}) })
}).catch(() => {}) }).catch(() => {})
}, },
clickEditTime(row) { clickEditTime(row) {
const that = this const that = this
that.$prompt('请输入天数,负数表示在原有基础上减去天(0.永久)', '提示', { that.$prompt(that.$t('pages.specialIdRoleManagement.prompt.editExpiredDaysMessage'), that.$t('common.tip'), {
confirmButtonText: '确定', confirmButtonText: that.$t('common.confirm'),
cancelButtonText: '取消', cancelButtonText: that.$t('common.cancel'),
inputPattern: /^-?\d{1,4}$/, inputPattern: /^-?\d{1,4}$/,
inputErrorMessage: '请输入有效数字-9999~9999' inputErrorMessage: that.$t('pages.specialIdRoleManagement.validation.validNumberRange')
}).then(({ value }) => { }).then(({ value }) => {
updateExpiredTime({ updateExpiredTime({
id: row.userSpecialId.id, id: row.userSpecialId.id,
@ -338,7 +338,7 @@ export default {
}).then(res => { }).then(res => {
that.renderData() that.renderData()
}).catch(er => { }).catch(er => {
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
}) })
}).catch(() => {}) }).catch(() => {})
}, },
@ -378,9 +378,9 @@ export default {
that.submitLoading = true that.submitLoading = true
that.thatRow.userSpecialId.customizeField = fieldObj that.thatRow.userSpecialId.customizeField = fieldObj
saveOrUpdate(that.thatRow.userSpecialId).then(res => { saveOrUpdate(that.thatRow.userSpecialId).then(res => {
that.$message.success('操作成功') that.$message.success(that.$t('pages.specialIdRoleManagement.message.operationSuccess'))
}).catch(er => { }).catch(er => {
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
}) })
}, },
handleMouseEnter(row) { handleMouseEnter(row) {
@ -449,26 +449,26 @@ export default {
that.listLoading = true that.listLoading = true
if (that.type) { if (that.type) {
shipFreight(that.formData).then(res => { shipFreight(that.formData).then(res => {
that.$message.success('操作成功') that.$message.success(that.$t('pages.specialIdRoleManagement.message.operationSuccess'))
that.goldInputBoxVisible = false that.goldInputBoxVisible = false
that.listLoading = false that.listLoading = false
that.renderData() that.renderData()
}).catch(er => { }).catch(er => {
that.listLoading = false that.listLoading = false
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
console.error(er) console.error(er)
}) })
return return
} }
deductionFreight(that.formData).then(res => { deductionFreight(that.formData).then(res => {
that.$message.success('操作成功') that.$message.success(that.$t('pages.specialIdRoleManagement.message.operationSuccess'))
that.goldInputBoxVisible = false that.goldInputBoxVisible = false
that.listLoading = false that.listLoading = false
that.renderData() that.renderData()
}).catch(er => { }).catch(er => {
that.listLoading = false that.listLoading = false
that.$message.error('操作失败') that.$message.error(that.$t('pages.specialIdRoleManagement.message.operationFailed'))
console.error(er) console.error(er)
}) })
}) })

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="special-log"> <div class="special-log">
<el-drawer <el-drawer
title="账号日志" :title="$t('pages.specialIdRoleManagement.dialog.accountLog')"
:visible="true" :visible="true"
:append-to-body="true" :append-to-body="true"
:before-close="handleClose" :before-close="handleClose"
@ -21,8 +21,8 @@
<div slot="dot"> <div slot="dot">
<el-tooltip class="item" effect="dark"> <el-tooltip class="item" effect="dark">
<div slot="content"> <div slot="content">
<div>用户ID:{{ item.userBaseInfo.id }}</div> <div>{{ $t('pages.specialIdRoleManagement.label.userId') }}:{{ item.userBaseInfo.id }}</div>
<div>用户昵称:{{ item.userBaseInfo.userNickname }}</div> <div>{{ $t('pages.specialIdRoleManagement.label.userNickname') }}:{{ item.userBaseInfo.userNickname }}</div>
</div> </div>
<el-image <el-image
style="width: 30px; height: 30px; border-radius: 100%;position: absolute;left: -10px;z-index: 9;" style="width: 30px; height: 30px; border-radius: 100%;position: absolute;left: -10px;z-index: 9;"

View File

@ -7,7 +7,7 @@
v-model="listQuery.origin" v-model="listQuery.origin"
popper-class="my-autocomplete" popper-class="my-autocomplete"
:fetch-suggestions="querySearch" :fetch-suggestions="querySearch"
placeholder="请输入或选择内容" :placeholder="$t('pages.userPropTransactions.placeholder.origin')"
clearable clearable
@select="handleSelect" @select="handleSelect"
@clear="handleSelect" @clear="handleSelect"
@ -30,19 +30,19 @@
<el-input <el-input
v-model.trim="listQuery.propsId" v-model.trim="listQuery.propsId"
v-number v-number
placeholder="道具ID" :placeholder="$t('pages.userPropTransactions.placeholder.propsId')"
style="width: 200px;" style="width: 200px;"
class="filter-item" class="filter-item"
/> />
<!-- 购买人ID --> <!-- 购买人ID -->
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.buyerId" placeholder="购买人ID" /> <account-input v-model="listQuery.buyerId" :placeholder="$t('pages.userPropTransactions.placeholder.buyerId')" />
</div> </div>
<!-- 接收人ID --> <!-- 接收人ID -->
<div class="filter-item"> <div class="filter-item">
<account-input v-model="listQuery.receiverId" placeholder="接收人ID" /> <account-input v-model="listQuery.receiverId" :placeholder="$t('pages.userPropTransactions.placeholder.receiverId')" />
</div> </div>
<!-- 时间范围 --> <!-- 时间范围 -->
@ -52,9 +52,9 @@
value-format="timestamp" value-format="timestamp"
type="datetimerange" type="datetimerange"
:picker-options="pickerOptions" :picker-options="pickerOptions"
range-separator="" :range-separator="$t('pages.userPropTransactions.word.to')"
start-placeholder="创建日期开始" :start-placeholder="$t('pages.userPropTransactions.placeholder.startDate')"
end-placeholder="创建日期结束" :end-placeholder="$t('pages.userPropTransactions.placeholder.endDate')"
/> />
</div> </div>
@ -65,7 +65,7 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleSearch" @click="handleSearch"
> >
搜索 {{ $t('pages.userPropTransactions.action.search') }}
</el-button> </el-button>
</div> </div>
@ -73,7 +73,7 @@
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
element-loading-text="Loading" :element-loading-text="$t('pages.userPropTransactions.word.loading')"
fit fit
highlight-current-row highlight-current-row
> >
@ -81,7 +81,7 @@
<!-- <el-table-column prop="id" label="流水ID" align="center" /> --> <!-- <el-table-column prop="id" label="流水ID" align="center" /> -->
<!-- 购买人 --> <!-- 购买人 -->
<el-table-column label="购买人" align="center" min-width="200"> <el-table-column :label="$t('pages.userPropTransactions.table.buyer')" align="center" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit <user-table-exhibit
:user-profile="scope.row.buyerUserProfile" :user-profile="scope.row.buyerUserProfile"
@ -93,13 +93,13 @@
<!-- 金额 --> <!-- 金额 -->
<el-table-column <el-table-column
prop="propsCandy" prop="propsCandy"
label="金额" :label="$t('pages.userPropTransactions.table.amount')"
align="center" align="center"
min-width="100" min-width="100"
/> />
<!-- 接收人信息 --> <!-- 接收人信息 -->
<el-table-column label="接收人" align="center" min-width="200"> <el-table-column :label="$t('pages.userPropTransactions.table.receiver')" align="center" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<user-table-exhibit <user-table-exhibit
:user-profile="scope.row.receiverUserProfile" :user-profile="scope.row.receiverUserProfile"
@ -111,13 +111,13 @@
<!-- 来源 --> <!-- 来源 -->
<el-table-column <el-table-column
prop="propsOriginDesc" prop="propsOriginDesc"
label="来源描述" :label="$t('pages.userPropTransactions.table.originDesc')"
align="center" align="center"
min-width="200" min-width="200"
/> />
<!-- 封面 --> <!-- 封面 -->
<el-table-column label="封面" align="center" min-width="80"> <el-table-column :label="$t('pages.userPropTransactions.table.cover')" align="center" min-width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<el-image <el-image
:src="handleImageUrl(scope.row)" :src="handleImageUrl(scope.row)"
@ -129,7 +129,7 @@
<!-- 道具ID --> <!-- 道具ID -->
<el-table-column <el-table-column
prop="propsId" prop="propsId"
label="道具ID" :label="$t('pages.userPropTransactions.table.propsId')"
align="center" align="center"
min-width="200" min-width="200"
/> />
@ -137,7 +137,7 @@
<!-- 道具名称 --> <!-- 道具名称 -->
<el-table-column <el-table-column
prop="propsName" prop="propsName"
label="道具名称" :label="$t('pages.userPropTransactions.table.propsName')"
align="center" align="center"
min-width="200" min-width="200"
/> />
@ -145,7 +145,7 @@
<!-- 创建时间 --> <!-- 创建时间 -->
<el-table-column <el-table-column
prop="createTime" prop="createTime"
label="创建时间" :label="$t('pages.userPropTransactions.table.createTime')"
align="center" align="center"
width="200" width="200"
> >
@ -204,6 +204,14 @@ export default {
rangeDate: "" rangeDate: ""
}; };
}, },
computed: {
localizedPropsOrigins() {
return this.propsOrigins.map(item => ({
...item,
name: this.propOriginLabel(item.value)
}));
}
},
watch: { watch: {
rangeDate: { rangeDate: {
immediate: true, immediate: true,
@ -245,7 +253,7 @@ export default {
}, },
handleSearch() { handleSearch() {
if (this.listQuery.origin !== "") { if (this.listQuery.origin !== "") {
const origins = this.propsOrigins.filter( const origins = this.localizedPropsOrigins.filter(
this.createFilter(this.listQuery.origin) this.createFilter(this.listQuery.origin)
); );
this.listQuery.origin = this.listQuery.origin =
@ -254,7 +262,7 @@ export default {
this.renderData(true); this.renderData(true);
}, },
querySearch(queryString, cb) { querySearch(queryString, cb) {
var restaurants = this.propsOrigins; var restaurants = this.localizedPropsOrigins;
var results = queryString var results = queryString
? restaurants.filter(this.createFilter(queryString)) ? restaurants.filter(this.createFilter(queryString))
: restaurants; : restaurants;
@ -271,6 +279,9 @@ export default {
restaurant.name.toLowerCase().indexOf(queryString.toLowerCase()) >= 0 restaurant.name.toLowerCase().indexOf(queryString.toLowerCase()) >= 0
); );
}; };
},
propOriginLabel(value) {
return this.$t(`pages.userPropTransactions.propsOrigin.${value}`);
} }
} }
}; };