feat: 语言切换功能完成
This commit is contained in:
parent
bbe82fe55a
commit
fdb278199b
@ -11,7 +11,7 @@
|
||||
- 路由是否记为独立菜单,先以原始接口返回为准;若入口页再直接引用同目录多个 `.vue` 文件,则这些文件记为页面内功能文件,不单独记成并列主路由
|
||||
- 后续所有线程领取新任务前,除了读取 `线程协作.md`、`翻译进度.md`、`翻译清单.md`,还应先读取本文件
|
||||
- 其他文档不再重复维护完整主路由树或已完成主要路由索引,最多保留引用本文件的说明
|
||||
- “当前已完成主要路由摘要”只在本文件维护;完成主要路由页面时必须同步更新本文件,不再去 `docs/i18n/翻译清单.md` 维护第二份主路由索引
|
||||
- “当前主要路由状态总览(完成 / 进行中 / 未完成)”只在本文件维护;认领或完成主要路由页面时必须同步更新本文件,不再去 `docs/i18n/翻译清单.md` 或 `docs/i18n/翻译进度.md` 维护第二份主路由索引
|
||||
- 下方保留原始接口返回,顶部摘要用于实际执行
|
||||
|
||||
### 全线程统一优先级
|
||||
@ -62,7 +62,7 @@
|
||||
|
||||
### 当前跨已完成页面的公共组件联动复查
|
||||
|
||||
- 状态:待处理
|
||||
- 状态:已完成(线程一,2026-05-08,最终收口)
|
||||
- 已完成:`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`)
|
||||
@ -86,9 +86,9 @@
|
||||
- 已完成:`src/components/IconsPanel/index.vue`(线程一,2026-04-28)
|
||||
- 已复核保留:`src/components/data/AccountHanle/index.vue`(线程一,2026-04-28,唯一中文为接口提交内容)
|
||||
- 已完成:`src/components/data/AddOtherRecharge/index.vue`(线程一,2026-04-29)
|
||||
- 说明:已发现不止 `用户列表 / User List` 使用仍需复核的 `src/components/**` 公共组件;所有已完成主要路由页面都需要按 `docs/i18n/翻译清单.md` 中“对已完成主要路由页面做直接公共组件联动复查”清单逐项确认
|
||||
- 说明:已发现不止单个页面使用仍需复核的 `src/components/**` 公共组件;所有已完成主要路由页面都需要按 `docs/i18n/翻译清单.md` 中“对已完成主要路由页面做直接公共组件联动复查”清单逐项确认
|
||||
- 优先建议:
|
||||
- 继续处理高频业务弹窗 / 抽屉,例如用户列表直接渲染的流水、充值、扣除、违规记录等组件
|
||||
- 继续按 `docs/i18n/翻译清单.md` 中的公共组件联动复查清单,优先处理被多个已完成主要路由页面复用的弹窗 / 抽屉 / 展示组件
|
||||
|
||||
### 当前接口返回的主要路由树(整理版)
|
||||
|
||||
@ -125,7 +125,7 @@
|
||||
- 状态:已完成
|
||||
- App系统 / App System
|
||||
- 路由别名:`app:sys:manager`
|
||||
- 状态:部分完成
|
||||
- 状态:已完成
|
||||
- 版本管理 / Version Management
|
||||
- 路由别名:`sugartime:version`
|
||||
- 路径:`version/app/index`
|
||||
@ -146,8 +146,9 @@
|
||||
- 路由别名:`AppUserList`
|
||||
- 路径:`user/user-table/index`
|
||||
- 文件:`src/views/user/user-table/index.vue`
|
||||
- 状态:页面本体已完成,直接公共组件待联动复核
|
||||
- 备注:该页面直接渲染多个 `src/components/**` 弹窗、抽屉、流水与表单组件;后续按公共组件联动复查规则逐个确认展示中文
|
||||
- 状态:已完成(线程一,2026-05-08,直接公共组件最终复核完成)
|
||||
- 备注:入口页及直接渲染的流水、充值、奖励、扣除、违规记录、账号处理、账号处理记录、认证信息、银行卡、注册概览与用户详情等公共组件已复核;可见静态中文无待处理项
|
||||
- 保留项:`src/components/data/AccountHanle/index.vue` 默认警告语属于提交给接口的业务内容,按规则保留;其他中文命中为注释或已注释代码
|
||||
- 用户专属礼物制作 / Custom User Gift Creation
|
||||
- 路由别名:`UserCustomGift`
|
||||
- 路径:`user/custom-gift/index`
|
||||
@ -169,7 +170,7 @@
|
||||
- 路由别名:`OperationManager`
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 路由别名:`AppRevenue`
|
||||
- 状态:部分完成
|
||||
- 状态:已完成
|
||||
- 消费商品订单 / Purchase Orders
|
||||
- 路由别名:`GoldPurchasing`
|
||||
- 路径:`order/candy/purchasing/index`
|
||||
@ -180,9 +181,65 @@
|
||||
- 路径:`order/candy/running-water/index`
|
||||
- 文件:`src/views/order/candy/running-water/index.vue`
|
||||
- 状态:已完成
|
||||
- 钻石流水列表 / Diamond Transaction List
|
||||
- 路由别名:`User:Diamond:Run:Water`
|
||||
- 路径:`user/diamond-run-water/index`
|
||||
- 文件:`src/views/user/diamond-run-water/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/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 页面私有组件状态:无私有组件
|
||||
- 直接公共组件状态:已复核,中文扫描无命中
|
||||
- 验证结果:`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 积分收支记录 / Points Transaction Records
|
||||
- 路由别名:`IntegralStream`
|
||||
- 路径:`user/integral-stream/index`
|
||||
- 文件:
|
||||
- `src/views/user/integral-stream/index.vue`
|
||||
- `src/views/user/integral-stream/timely/index.vue`
|
||||
- `src/views/user/integral-stream/history/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 页面私有组件状态:已随页面同步完成
|
||||
- 直接公共组件状态:已复核,中文扫描无命中
|
||||
- 保留项:`timely/index.vue` 与 `history/index.vue` 首行中文仅为注释,不参与页面展示
|
||||
- 验证结果:`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 金币代理流水 / Gold Agent Transactions
|
||||
- 路由别名:`UserFreightInfoList`
|
||||
- 路径:`user/freight-info-list/index`
|
||||
- 文件:`src/views/user/freight-info-list/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`
|
||||
- 页面私有组件状态:无私有组件
|
||||
- 直接公共组件状态:已复核,中文扫描无命中
|
||||
- 验证结果:`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 钻石余额列表 / Diamond Balance List
|
||||
- 路由别名:`User:Diamond:Balance`
|
||||
- 路径:`user/diamond-balance/index`
|
||||
- 文件:`src/views/user/diamond-balance/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 页面私有组件状态:无私有组件
|
||||
- 直接公共组件状态:已复核,中文扫描无命中
|
||||
- 验证结果:`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 数据配置 / Data Configuration
|
||||
- 路由别名:`data:conf`
|
||||
- 状态:部分完成
|
||||
- 状态:已完成
|
||||
- 参数配置 / Parameter Settings
|
||||
- 路由别名:`SysConfigSetting`
|
||||
- 路径:`cnf/enums/manager/index`
|
||||
@ -302,7 +359,7 @@
|
||||
- 状态:已完成(线程三,2026-05-06)
|
||||
- 运营日志 / Operations Logs
|
||||
- 路由别名:`operation:log`
|
||||
- 状态:部分完成
|
||||
- 状态:已完成
|
||||
- 礼物赠送记录 / Gift Sending Records
|
||||
- 路由别名:`ContentManagerGiftHistory`
|
||||
- 路径:`user/gift-history/index`
|
||||
@ -416,7 +473,7 @@
|
||||
- 状态:已完成(线程一,2026-05-06)
|
||||
- 内购配置 / In-App Purchase Configuration
|
||||
- 路由别名:`in:app:purchase:conf`
|
||||
- 状态:部分完成
|
||||
- 状态:已完成
|
||||
- 渠道管理 / Channel Management
|
||||
- 路由别名:`channel:manager`
|
||||
- 路径:`cnf/pay/channel/index`
|
||||
@ -494,7 +551,7 @@
|
||||
- 状态:已完成(线程一,2026-05-07)
|
||||
- 活动配置 / Activity Configuration
|
||||
- 路由别名:`Activity:Config`
|
||||
- 状态:部分完成
|
||||
- 状态:已完成
|
||||
- 活动管理 / Activity Management
|
||||
- 路由别名:`Activity:Manager`
|
||||
- 路径:`activity/template-cnf/index`
|
||||
@ -607,7 +664,7 @@
|
||||
- 状态:已完成
|
||||
- 用户银行 / User Bank
|
||||
- 路由别名:`UserBankBalance`
|
||||
- 状态:部分完成
|
||||
- 状态:已完成
|
||||
- 用户银行流水 / User Bank Transactions
|
||||
- 路由别名:`UserBankRunningWater`
|
||||
- 路径:`user/bank-balance/running-water/index`
|
||||
@ -795,10 +852,132 @@
|
||||
|
||||
- 审批管理 / Approval Management
|
||||
- 路由别名:`ApprovalManager`
|
||||
- 当前状态:待处理
|
||||
- 用户头像 / User Avatar
|
||||
- 路由别名:`AvatatPhotoApproval`
|
||||
- 路径:`approval/avatar-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/avatar-approval/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 直接公共组件状态:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/data/EditUserForm/index.vue`:复核通过
|
||||
- `src/components/data/AccountHanle/index.vue`:默认警告语属于接口业务内容,按规则保留
|
||||
- `src/components/data/AccountInput/index.vue`:复核通过
|
||||
- `src/components/SysOriginIcon/index.vue`:复核通过
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:复核完成
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 用户照片墙 / User Photo Wall
|
||||
- 路由别名:`PhotoWallApproval`
|
||||
- 路径:`approval/photo-wall-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/photo-wall-approval/index.vue`
|
||||
- 页面私有组件状态:无页面私有组件
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/data/AccountInput/index.vue`:复核通过
|
||||
- `src/components/data/EditUserForm/index.vue`:复核通过
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:复核通过
|
||||
- 验证结果:`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 用户昵称 / User Nickname
|
||||
- 路由别名:`NickNameApproval`
|
||||
- 路径:`approval/nickname-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/nickname-approval/index.vue`
|
||||
- 页面私有组件状态:无页面私有组件
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/data/AccountInput/index.vue`:复核通过
|
||||
- `src/components/SysOriginIcon/index.vue`:复核通过
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:复核通过
|
||||
- `src/components/data/AccountHanle/index.vue`:仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 验证结果:`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 举报信息 / Reports
|
||||
- 路由别名:`ReportManagerReport`
|
||||
- 路径:`approval/report/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/report/index.vue`
|
||||
- 页面私有组件状态:无页面私有组件
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/data/AccountInput/index.vue`:复核通过
|
||||
- `src/components/SysOriginIcon/index.vue`:复核通过
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:复核通过
|
||||
- `src/components/data/AccountHanle/index.vue`:仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 验证结果:`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程二,2026-05-08)
|
||||
- 意见反馈 / Feedback
|
||||
- 路由别名:`user:feedback`
|
||||
- 路径:`feedback/index`
|
||||
- 已完成文件:
|
||||
- `src/views/feedback/index.vue`
|
||||
- `src/components/data/Feedback/index.vue`
|
||||
- 页面私有组件状态:无页面私有组件
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/data/AccountInput/index.vue`:复核通过
|
||||
- `src/components/SysOriginIcon/index.vue`:复核通过
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:复核通过
|
||||
- `src/components/data/Feedback/index.vue`:已随页面同步完成
|
||||
- `src/components/videoPlayer/index.vue`:可见倍速文案已完成,剩余中文为注释
|
||||
- 保留项:`approvalRemarks: '感谢您的反馈意见'` 会作为批量处理备注提交给接口,按提交内容保留
|
||||
- 验证结果:`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 用户个性签名 / User Profile Signatures
|
||||
- 路由别名:`UserProfileDescApproval`
|
||||
- 路径:`approval/user-profile-desc-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/user-profile-desc-approval/index.vue`
|
||||
- 页面私有组件状态:无页面私有组件
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/data/AccountInput/index.vue`:复核通过
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:复核通过
|
||||
- 保留项:
|
||||
- 模板注释中的“数量”不可见,按注释保留
|
||||
- `approvalType: 'PROFILE_DESC'`、`approvalStatus: 'PASS' / 'NOT_PASS'`、`waitApprovalUser` 与 `content: item.profileDesc` 属于接口提交数据,保持原样
|
||||
- 验证结果:语言文件语法检查通过;`npm run build:prod` 第二次通过,仍保留项目既有 17 个 warning;第一次构建因输出目录 `dist\cdn` 偶发 `EEXIST` 失败,重跑后通过
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 房间封面 / Room Covers
|
||||
- 路由别名:`RoomCoverWallApproval`
|
||||
- 路径:`approval/room-cover-wall-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/room-cover-wall-approval/index.vue`
|
||||
- 页面私有组件状态:无页面私有组件
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/data/EditUserForm/index.vue`:复核通过
|
||||
- `src/components/data/AccountInput/index.vue`:复核通过
|
||||
- `src/components/SysOriginIcon/index.vue`:复核通过
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:复核通过
|
||||
- `src/components/data/AccountHanle/index.vue`:仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 保留项:目标页剩余中文仅为注释或注释掉的历史代码,不属于可见展示文案
|
||||
- 验证结果:语言文件语法校验通过;本轮未使用 `$te`;`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程二,2026-05-08)
|
||||
- 当前状态:已完成(线程二,2026-05-08)
|
||||
|
||||
- 道具管理 / Prop Management
|
||||
- 路由别名:`PropsManager`
|
||||
- 资源配置 / Resource Configuration
|
||||
- 路由别名:`props:config`
|
||||
- 路径:`props/props-resource-config/index`
|
||||
- 已完成文件:
|
||||
- `src/views/props/props-resource-config/index.vue`
|
||||
- `src/views/props/props-resource-config/form-edit.vue`
|
||||
- `src/views/props/props-resource-config/line-graph-charts.vue`
|
||||
- `src/views/props/props-resource-config/sales-mothly-charts-dialog.vue`
|
||||
- 页面私有组件状态:`form-edit.vue`、`line-graph-charts.vue`、`sales-mothly-charts-dialog.vue` 已随入口页同步完成
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/SysOriginIcon/index.vue`:复核通过
|
||||
- `src/components/svgaplayer/**`:复核通过
|
||||
- `src/components/data/PropsSalesOverviewCharts/**`:复核通过
|
||||
- 保留项:接口字段、接口参数、路由路径、权限码、表单提交值、枚举实际值与接口返回动态数据保持原样;`propsTypes`、`nobleVipTabs`、`showcaseTypes` 仅展示 label 映射翻译
|
||||
- 验证结果:目标文件中文扫描无命中;未使用 `$te`;语言文件语法检查通过;`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 资源组配置 / Resource Group Configuration
|
||||
- 路由别名:`PropsActivitySourceGroup`
|
||||
- 路径:`props/props-source-group/index`
|
||||
@ -880,7 +1059,21 @@
|
||||
- 代理列表 / Agent List
|
||||
- 路由别名:`team:list`
|
||||
- 路径:`team/team-list/index`
|
||||
- 状态:待处理
|
||||
- 文件:`src/views/team/team-list/index.vue`
|
||||
- 已完成文件:
|
||||
- `src/views/team/team-list/index.vue`
|
||||
- `src/views/team/team-list/bind-bd.vue`
|
||||
- `src/views/team/team-list/team-application-process-drawer.vue`
|
||||
- `src/views/team/team-list/team-contact.vue`
|
||||
- `src/views/team/team-list/team-edit.vue`
|
||||
- `src/views/team/team-list/team-notice-list-drawer.vue`
|
||||
- `src/views/team/team-list/team-notice-send-drawer.vue`
|
||||
- `src/views/team/team-list/team-remark.vue`
|
||||
- `src/views/team/team-list/team-status.vue`
|
||||
- `src/views/team/team-list/team-switch-own.vue`
|
||||
- `src/views/team/components/ProcessApprovalDrawer/index.vue`
|
||||
- 直接公共组件状态:`TeamCreate`、`TeamDetailsDrawer`、`SysOriginPermissionSelect` 历史已完成;`SelectSystemRegion`、`AccountInput`、`UserTableExhibit` 本轮复核未发现可见中文
|
||||
- 状态:已完成(线程二,2026-05-08)
|
||||
- 主播成员 / Broadcaster Members
|
||||
- 路由别名:`team:member`
|
||||
- 路径:`team/team-member/index`
|
||||
@ -902,7 +1095,21 @@
|
||||
- 账单列表 / Bill List
|
||||
- 路由别名:`team:bill`
|
||||
- 路径:`team/team-bill/index`
|
||||
- 状态:待处理
|
||||
- 已完成文件:
|
||||
- `src/views/team/team-bill/index.vue`
|
||||
- `src/views/team/team-bill/details-drawer.vue`
|
||||
- `src/views/team/team-bill/team-bill-internal-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-settle.vue`
|
||||
- `src/views/team/team-bill/team-bill-status.vue`
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`
|
||||
- 页面私有组件状态:同目录 5 个私有抽屉/弹窗与入口页直接引用的 `TeamDetailsDrawer/index.vue` 已随页面同步完成
|
||||
- 直接公共组件状态:
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`:复核完成,默认 placeholder 使用展示层 `$t('common.select')`
|
||||
- `src/components/data/SelectSystemRegion/index.vue`:复核通过
|
||||
- `src/components/data/AccountInput/index.vue`:复核通过
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:复核通过
|
||||
- 状态:已完成(线程一,2026-05-08)
|
||||
- 主播工作 / Broadcaster Work
|
||||
- 路由别名:`team:member:work`
|
||||
- 路径:`team/team-member-work/index`
|
||||
@ -923,8 +1130,11 @@
|
||||
- `src/components/SysOriginIcon/index.vue`:复核通过
|
||||
- 状态:已完成(线程二,2026-05-07)
|
||||
|
||||
### 当前已完成主要路由摘要
|
||||
### 当前主要路由状态总览
|
||||
|
||||
- 说明:本段是主要路由完成、进行中与未完成情况的唯一摘要;`翻译进度.md` 与 `翻译清单.md` 不再维护第二份主路由摘要。
|
||||
- 展示规则:完成项不额外标注;仅对 `部分完成`、`进行中`、`未完成` 等需要继续关注的项打标;父级标为 `部分完成` 时,必须在其子级中明确标出具体 `进行中` 或 `未完成` 页面,避免只看到父级状态而不知道待处理范围。
|
||||
- 首页 / Dashboard
|
||||
- 系统管理 / System Management
|
||||
- 用户管理 / User Management
|
||||
- 角色管理 / Role Management
|
||||
@ -934,7 +1144,7 @@
|
||||
- 版本管理 / Version Management
|
||||
- 请求黑名单 / Request Blacklist
|
||||
- 用户管理 / User Management
|
||||
- 用户列表 / User List(页面本体已完成,直接公共组件待联动复核)
|
||||
- 用户列表 / User List
|
||||
- 用户专属礼物制作 / Custom User Gift Creation
|
||||
- 封禁设备列表 / Blocked Device List
|
||||
- 最新登记设备 / Latest Registered Devices
|
||||
@ -942,6 +1152,10 @@
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 消费商品订单 / Purchase Orders
|
||||
- 金币收支记录 / Gold Transaction Records
|
||||
- 钻石流水列表 / Diamond Transaction List
|
||||
- 积分收支记录 / Points Transaction Records
|
||||
- 金币代理流水 / Gold Agent Transactions
|
||||
- 钻石余额列表 / Diamond Balance List
|
||||
- 数据配置 / Data Configuration
|
||||
- 参数配置 / Parameter Settings
|
||||
- 幸运礼物规则配置 / Lucky Gift Rule Configuration
|
||||
@ -1002,7 +1216,16 @@
|
||||
- 家族管理 / Family Management
|
||||
- 家族配置 / Family Configuration
|
||||
- 家族列表 / Family List
|
||||
- 审批管理 / Approval Management
|
||||
- 用户头像 / User Avatar
|
||||
- 用户照片墙 / User Photo Wall
|
||||
- 用户昵称 / User Nickname
|
||||
- 举报信息 / Reports
|
||||
- 意见反馈 / Feedback
|
||||
- 用户个性签名 / User Profile Signatures
|
||||
- 房间封面 / Room Covers
|
||||
- 道具管理 / Prop Management
|
||||
- 资源配置 / Resource Configuration
|
||||
- 资源组配置 / Resource Group Configuration
|
||||
- 道具赠送 / Prop Gift
|
||||
- 道具商店 / Prop Store
|
||||
@ -1012,7 +1235,9 @@
|
||||
- 代理政策 / Agent Policy
|
||||
- BD工作统计 / BD Work Statistics
|
||||
- BD列表 / BD List
|
||||
- 代理列表 / Agent List
|
||||
- 主播成员 / Broadcaster Members
|
||||
- 账单列表 / Bill List
|
||||
- 主播工作 / Broadcaster Work
|
||||
|
||||
### 已部分完成但入口页仍需复核的主要路由
|
||||
@ -1026,7 +1251,8 @@
|
||||
- 当前无
|
||||
3. 本文件中“模块部分完成,入口页仍需复核”的页面:
|
||||
- 当前无
|
||||
4. 本文件中其他待处理主要路由页面
|
||||
4. 本文件中其他待处理主要路由页面:
|
||||
- 当前无
|
||||
|
||||
## 主要路由
|
||||
|
||||
@ -2097,6 +2323,17 @@
|
||||
"id": 305,
|
||||
"parentId": 0,
|
||||
"childrens": [
|
||||
{
|
||||
"id": 307,
|
||||
"parentId": 305,
|
||||
"childrens": [],
|
||||
"menuName": "资源配置",
|
||||
"menuType": 2,
|
||||
"router": "props/config",
|
||||
"path": "props/props-resource-config/index",
|
||||
"icon": "sys_manager_2",
|
||||
"alias": "props:config"
|
||||
},
|
||||
{
|
||||
"id": 312,
|
||||
"parentId": 305,
|
||||
|
||||
@ -54,7 +54,7 @@
|
||||
- 每完成一轮修改后,必须同步更新:
|
||||
- `docs/i18n/翻译进度.md`
|
||||
- `docs/i18n/翻译清单.md`
|
||||
- 如果完成的是主要路由页面,还必须同步更新 `docs/i18n/主要路由.md` 中该路由的详细状态与“当前已完成主要路由摘要”
|
||||
- 如果完成的是主要路由页面,还必须同步更新 `docs/i18n/主要路由.md` 中该路由的详细状态与“当前主要路由状态总览”;总览中已完成项不额外标注,只对 `部分完成`、`进行中`、`未完成` 等需要继续关注的项打标
|
||||
- `docs/i18n/翻译清单.md` 不再重复维护“已完成主要路由索引”;清单只维护文件级平铺清单、进行中任务、完成记录和保留项,避免两份主路由摘要漂移
|
||||
- 判断“独立路由”还是“页面内功能文件”时,统一按以下顺序执行:
|
||||
- 先看原始接口返回中该菜单是否是独立菜单项
|
||||
@ -180,13 +180,686 @@
|
||||
|
||||
| 线程 | 当前状态 | 认领范围 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| 线程一 | 待分配 | 未认领 | 2026-05-07 已完成主要路由 `钻石提现申请 / Diamond Withdrawal Applications` 入口页、同目录私有抽屉与直接公共组件复核 |
|
||||
| 线程二 | 待分配 | 未认领 | 2026-05-07 已完成主要路由 `主播成员 / Broadcaster Members` 入口页、同目录私有组件与直接公共组件复核 |
|
||||
| 线程一 | 待分配 | 未认领 | 2026-05-08 已完成主要路由 `资源配置 / Resource Configuration` |
|
||||
| 线程二 | 待分配 | 未认领 | 2026-05-08 已完成主要路由 `房间封面 / Room Covers` |
|
||||
| 线程三 | 待分配 | 未认领 | 2026-05-07 已完成 `src/views/user/bank-balance/table/**` 用户银行账户页面国际化、同目录私有组件、直接公共组件复核、语言文件校验与构建验证 |
|
||||
| 线程四 | 待分配 | 未认领 | 避免和其他线程同时编辑同一语言模块 |
|
||||
|
||||
## 最新认领记录
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一完成:`src/views/props/props-resource-config/**`
|
||||
- 对应主要路由:
|
||||
- 道具管理 / Prop Management
|
||||
- 资源配置 / Resource Configuration
|
||||
- 已完成文件:
|
||||
- `src/views/props/props-resource-config/index.vue`
|
||||
- `src/views/props/props-resource-config/form-edit.vue`
|
||||
- `src/views/props/props-resource-config/line-graph-charts.vue`
|
||||
- `src/views/props/props-resource-config/sales-mothly-charts-dialog.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:复核通过
|
||||
- `src/components/SysOriginIcon/index.vue`:复核通过
|
||||
- `src/components/svgaplayer/**`:复核通过
|
||||
- `src/components/data/PropsSalesOverviewCharts/**`:复核通过
|
||||
- 保留项:
|
||||
- `propsTypes`、`nobleVipTabs`、`showcaseTypes` 的实际 value 保持原样,仅展示 label 映射翻译
|
||||
- 接口字段、接口参数、路由路径、权限码、表单提交值、枚举实际值与接口返回动态数据保持原样
|
||||
- 验证:
|
||||
- 目标文件中文扫描无命中
|
||||
- 未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/props/props-resource-config/**`
|
||||
- 对应主要路由:
|
||||
- 道具管理 / Prop Management
|
||||
- 资源配置 / Resource Configuration
|
||||
- 路由别名:`props:config`
|
||||
- 路径:`props/props-resource-config/index`
|
||||
- 范围:
|
||||
- `src/views/props/props-resource-config/index.vue`
|
||||
- `src/views/props/props-resource-config/form-edit.vue`
|
||||
- `src/views/props/props-resource-config/line-graph-charts.vue`
|
||||
- `src/views/props/props-resource-config/sales-mothly-charts-dialog.vue`
|
||||
- 约束:
|
||||
- 仅处理可见静态展示文本
|
||||
- 不修改接口字段、接口参数、路由路径、权限码、表单提交值、枚举实际值与接口返回动态数据
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一完成:`src/views/approval/user-profile-desc-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户个性签名 / User Profile Signatures
|
||||
- 本轮完成:
|
||||
- 页面可见静态文案国际化
|
||||
- 直接公共组件 `Pagination`、`AccountInput`、`UserDeatilsDrawer` 复核无中文命中
|
||||
- 审批状态仅翻译展示 label,`PASS / NOT_PASS / PENDING` 提交值保持原样
|
||||
- 验证:
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 第二次通过,仍保留项目既有 17 个 warning
|
||||
- 第一次构建曾因输出目录 `dist\cdn` 偶发 `EEXIST` 失败,重跑后通过,未发现源码编译错误
|
||||
|
||||
- 2026-05-08
|
||||
- 线程二新认领:`src/views/approval/room-cover-wall-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 房间封面 / Room Covers
|
||||
- 路由别名:`RoomCoverWallApproval`
|
||||
- 路径:`approval/room-cover-wall-approval/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已读取 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js`
|
||||
- 已确认线程一正在处理 `src/views/approval/user-profile-desc-approval/index.vue`,线程二主动避让
|
||||
- 已确认当前没有其他线程认领 `src/views/approval/room-cover-wall-approval/index.vue`
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`EditUserForm`、`AccountHanle`、`AccountInput`、`SysOriginIcon`、`UserDeatilsDrawer`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批类型实际值、审批状态实际值、表单提交值、图片地址、机器标签或接口返回动态数据
|
||||
- 领取时线程二状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成筛选区系统、房间账号、用户 ID、审批状态、日期范围、搜索按钮、卡片信息标签、性别与审批状态展示映射、选择数量、详情、编辑用户、账号处理、通过/拒绝按钮、确认提示与成功提示国际化
|
||||
- 新增 `pages.roomCoverApproval` 英文与中文语言 key
|
||||
- 审批状态与性别实际值保持原样,仅在展示层通过 `$t` 映射
|
||||
- 接口返回的房间封面、机器标签、用户资料、图片地址与动态数据保持原样
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:中文扫描无命中
|
||||
- `src/components/data/EditUserForm/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountInput/index.vue`:中文扫描无命中
|
||||
- `src/components/SysOriginIcon/index.vue`:中文扫描无命中
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountHanle/index.vue`:仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 验证结果:
|
||||
- 目标页中文扫描仅剩注释或注释掉的历史代码
|
||||
- 本轮未使用 `$te`
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
|
||||
- 完成后线程二状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/approval/user-profile-desc-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户个性签名 / User Profile Signatures
|
||||
- 路由别名:`UserProfileDescApproval`
|
||||
- 路径:`approval/user-profile-desc-approval/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已确认当前没有其他线程认领该文件
|
||||
- 约束:
|
||||
- 仅处理可见静态展示文本
|
||||
- 不修改接口字段、接口参数、路由路径、审批类型与提交内容
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/feedback/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 意见反馈 / Feedback
|
||||
- 路由别名:`user:feedback`
|
||||
- 路径:`feedback/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已读取 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js`
|
||||
- 已核对侧边栏英文名来自 `src/lang/messages/base/menu-en.js`
|
||||
- 已确认线程二当前认领 `src/views/approval/report/index.vue`,线程一主动避让
|
||||
- 已检查目录仅存在入口页 `index.vue`
|
||||
- 已确认当前没有其他线程认领该文件
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`SysOriginIcon`、`UserTableExhibit`、`UserDeatilsDrawer`、`Feedback`、`VideoPlayer`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审核状态实际值、批量处理提交内容、表单提交值或接口返回动态数据
|
||||
- 领取时线程一状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成入口页筛选区、表格展开详情标签、表格列头、状态展示、操作按钮、批量处理提示与成功提示国际化
|
||||
- 已完成直接公共组件 `src/components/data/Feedback/index.vue` 的抽屉标题、表单标签与提交按钮国际化
|
||||
- 已完成直接公共组件 `src/components/videoPlayer/index.vue` 可见倍速文案国际化
|
||||
- 已补充 `pages.feedback` 与 `pages.videoPlayer` 英文和中文语言 key
|
||||
- `approvalStatusArray`、接口查询字段、批量处理提交字段、接口返回动态数据保持原样,仅在展示层做翻译映射
|
||||
- 保留项:
|
||||
- `src/views/feedback/index.vue` 中 `approvalRemarks: '感谢您的反馈意见'` 会作为批量处理备注提交给接口,按提交内容保留
|
||||
- `src/components/videoPlayer/index.vue` 剩余中文均为注释,不属于可见展示文案
|
||||
- 验证结果:
|
||||
- 目标页中文扫描仅剩提交内容
|
||||
- 直接公共组件中文扫描仅剩注释
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程二新认领:`src/views/approval/report/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 举报信息 / Reports
|
||||
- 路由别名:`ReportManagerReport`
|
||||
- 路径:`approval/report/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已读取 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js`
|
||||
- 已核对侧边栏英文名来自 `src/lang/messages/base/menu-en.js`,本轮使用 `Reports`
|
||||
- 已发现线程一当前认领 `src/views/approval/nickname-approval/index.vue`,线程二主动避让
|
||||
- 已检查目录仅存在入口页 `index.vue`
|
||||
- 已确认当前没有其他线程认领 `src/views/approval/report/index.vue`
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountHanle`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 完成后按用户要求处理 `翻译进度.md` 中重复的主要路由完成摘要,将主路由完成摘要统一收口到 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批状态实际值、举报类型实际值、批量审批提交值、表单提交值或接口返回动态数据
|
||||
- 领取时线程二状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成筛选区系统/状态/举报类型/举报人/被举报人/日期/后台成员、搜索按钮、展开行标签、表格列头、操作按钮、操作说明、已勾选数量、有效/无效按钮、确认提示与复制提示国际化
|
||||
- 新增 `pages.userReportApproval` 英文与中文语言 key
|
||||
- 审批状态与举报类型实际值保持原样,仅在展示层通过 `$t` 映射
|
||||
- 接口返回的 `reportTypeName`、`reportedContent`、`updateNickname`、媒体 URL 与用户资料保持原样
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountInput/index.vue`:中文扫描无命中
|
||||
- `src/components/SysOriginIcon/index.vue`:中文扫描无命中
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:中文扫描无命中
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountHanle/index.vue`:仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- `npm run build:prod` 构建通过,仍为项目既有 `17` 条 warning
|
||||
- 完成后线程二状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/approval/nickname-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户昵称 / User Nickname
|
||||
- 路由别名:`NickNameApproval`
|
||||
- 路径:`approval/nickname-approval/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已读取 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js`
|
||||
- 已核对侧边栏英文名来自 `src/lang/messages/base/menu-en.js`
|
||||
- 已检查目录仅存在入口页 `index.vue`
|
||||
- 已确认当前没有其他线程认领该文件
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`SysOriginIcon`、`UserDeatilsDrawer`、`AccountHanle`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批状态实际值、表单提交值或接口返回动态数据
|
||||
- 领取时线程一状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成入口页筛选区、日期占位、审批状态下拉展示映射、搜索按钮、表格列头、操作按钮、批量审批按钮、确认提示与成功提示国际化
|
||||
- 已补充 `pages.userNicknameApproval` 英文与中文语言 key
|
||||
- 已对直接公共组件执行中文扫描复核;`AccountHanle` 仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- `commonApprovalStatus` 常量实际值、接口查询字段、审批提交字段与接口返回动态数据保持原样,仅在展示层做翻译映射
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描仅命中 `AccountHanle` 既有接口提交默认警告内容
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/approval/photo-wall-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户照片墙 / User Photo Wall
|
||||
- 路由别名:`PhotoWallApproval`
|
||||
- 路径:`approval/photo-wall-approval/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已读取 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js`
|
||||
- 已核对侧边栏英文名来自 `src/lang/messages/base/menu-en.js`
|
||||
- 已检查目录仅存在入口页 `index.vue`
|
||||
- 已确认当前没有其他线程认领该文件
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`EditUserForm`、`UserDeatilsDrawer`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批状态实际值、性别实际值、表单提交值或接口返回动态数据
|
||||
- 领取时线程一状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成入口页筛选区、日期占位、状态/性别下拉展示映射、搜索按钮、卡片信息标签、选择文案、编辑用户按钮、批量审批按钮、确认提示与成功提示国际化
|
||||
- 已补充 `pages.userPhotoWallApproval` 英文与中文语言 key
|
||||
- 已对直接公共组件执行中文扫描复核,未发现需处理中文展示文本
|
||||
- `approvalStatus`、`genders` 常量实际值、接口查询字段、审批提交字段与接口返回动态数据保持原样,仅在展示层做翻译映射
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/user/diamond-balance/index.vue`
|
||||
- 对应主要路由:
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 钻石余额列表 / Diamond Balance List
|
||||
- 路由别名:`User:Diamond:Balance`
|
||||
- 路径:`user/diamond-balance/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已核对侧边栏英文名来自 `src/lang/messages/base/menu-en.js`
|
||||
- 已检查目录仅存在入口页 `index.vue`
|
||||
- 已确认当前没有其他线程认领该文件
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`UserTableExhibit`、`UserDeatilsDrawer`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、提交值或接口返回动态数据
|
||||
- 领取时线程一状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成入口页用户 ID placeholder、搜索按钮、表格列头国际化
|
||||
- 已补充 `pages.userDiamondBalance` 英文与中文语言 key
|
||||
- 已将余额列 `min-width` 调整为 120,避免英文列名空间过窄
|
||||
- 已对直接公共组件执行中文扫描复核,未发现需处理中文展示文本
|
||||
- 接口查询字段、表格 `prop`、路由路径、权限码、提交值与接口返回动态数据保持原样
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/user/freight-info-list/index.vue`
|
||||
- 对应主要路由:
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 金币代理流水 / Gold Agent Transactions
|
||||
- 路由别名:`UserFreightInfoList`
|
||||
- 路径:`user/freight-info-list/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已核对侧边栏英文名来自 `src/lang/messages/base/menu-en.js`
|
||||
- 已检查目录仅存在入口页 `index.vue`
|
||||
- 已确认当前没有其他线程认领该文件
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`SysOriginIcon`、`AccountInput`、`UserTableExhibit`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、提交值、接口返回动态数据、导出文件名或 `freightBalanceOrigin` 常量实际值
|
||||
- 领取时线程一状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成入口页筛选区、表格列头、收支类型、导出抽屉、校验提示与导出提示国际化
|
||||
- 已补充 `pages.userFreightInfoList` 英文与中文语言 key
|
||||
- 已对直接公共组件执行中文扫描复核,未发现需处理中文展示文本
|
||||
- `freightBalanceOrigin` 常量实际值、接口查询字段、提交值与导出文件名保持原样,仅在下拉展示层做翻译映射
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/user/integral-stream/**`
|
||||
- 对应主要路由:
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 积分收支记录 / Points Transaction Records
|
||||
- 路由别名:`IntegralStream`
|
||||
- 路径:`user/integral-stream/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已检查 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 中暂无现成 `integralStream` 页面 key
|
||||
- 已确认当前没有其他线程认领该文件组
|
||||
- 本轮范围:
|
||||
- `src/views/user/integral-stream/index.vue`
|
||||
- `src/views/user/integral-stream/timely/index.vue`
|
||||
- `src/views/user/integral-stream/history/index.vue`
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`UserDeatilsDrawer`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、提交值、接口返回动态数据或 `videoOrigin` 常量实际值
|
||||
- 领取时线程一状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成入口 tab 页、当前积分流水页与历史积分流水页静态展示文本国际化
|
||||
- 已补充 `pages.integralStream` 英文与中文语言 key
|
||||
- 已对直接公共组件执行中文扫描复核,未发现需处理中文展示文本
|
||||
- `videoOrigin` 常量实际值、接口查询字段与提交值保持原样,仅在下拉展示层做翻译映射
|
||||
- 保留项:
|
||||
- `src/views/user/integral-stream/timely/index.vue` 与 `src/views/user/integral-stream/history/index.vue` 文件首行中文仅为注释,不参与页面展示,按规则保留
|
||||
- 验证结果:
|
||||
- 目标模块中文扫描仅剩注释中文
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一新认领:`src/views/user/diamond-run-water/index.vue`
|
||||
- 对应主要路由:
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 钻石流水列表 / Diamond Transaction List
|
||||
- 路由别名:`User:Diamond:Run:Water`
|
||||
- 路径:`user/diamond-run-water/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已读取 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js`
|
||||
- 已确认当前没有其他线程认领该文件
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`SysOriginIcon`、`AccountInput`、`UserTableExhibit`、`UserDeatilsDrawer`
|
||||
- 同步补充或复用 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语言 key
|
||||
- 完成后同步更新本文件、`翻译进度.md`、`翻译清单.md` 与 `主要路由.md`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、提交值、接口返回动态数据或 `diamondOrigins` 常量实际值
|
||||
- 领取时线程一状态:进行中
|
||||
- 完成结果:
|
||||
- 已完成入口页静态展示文本国际化
|
||||
- 已补充 `pages.userDiamondRunWater` 英文与中文语言 key
|
||||
- 已对直接公共组件执行中文扫描复核,未发现需处理中文展示文本
|
||||
- `diamondOrigins` 常量实际值、接口查询字段与提交值保持原样,仅在下拉展示层做翻译映射
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一已完成:已完成主要路由页面的直接公共组件联动复查最终收口
|
||||
- 任务类型:临时任务收口
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已确认 `docs/i18n/主要路由.md` 中当前没有页面级 `状态:待处理`
|
||||
- 已确认 `docs/i18n/翻译清单.md` 中“当前扫描到仍需复核的已完成页面 -> 直接公共组件”为空
|
||||
- 本轮目标:
|
||||
- 最终确认直接公共组件联动复查无剩余明确可处理项
|
||||
- 若确认无剩余项,将 `docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` 中该临时任务标记为已完成
|
||||
- 本轮不修改:
|
||||
- 源码逻辑、接口参数、查询字段、路由路径、权限码、表单提交值或接口返回动态数据
|
||||
- 最终复核结论:
|
||||
- `docs/i18n/翻译清单.md` 中“当前扫描到仍需复核的已完成页面 -> 直接公共组件”为空
|
||||
- `docs/i18n/主要路由.md` 中除本临时任务外没有页面级 `状态:待处理`
|
||||
- 对已登记完成的直接公共组件再次扫描后,中文命中仅剩注释、已注释代码,或 `src/components/data/AccountHanle/index.vue` 中提交给接口的默认警告内容
|
||||
- `src/components/data/UserRegistrationOverviewCharts/index.vue` 命中的“系统”位于已注释旧筛选代码中,不参与页面展示
|
||||
- 状态变更:
|
||||
- `docs/i18n/翻译清单.md` 中该临时任务已标记为已完成
|
||||
- `docs/i18n/主要路由.md` 中“当前跨已完成页面的公共组件联动复查”已标记为已完成
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程二已完成:`src/views/team/team-list/**`
|
||||
- 对应主要路由:
|
||||
- 主播中心 / Broadcaster Center
|
||||
- 代理列表 / Agent List
|
||||
- 路由别名:`team:list`
|
||||
- 路径:`team/team-list/index`
|
||||
- 领取与处理动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已确认当前没有其他线程认领 `src/views/team/team-list/index.vue`
|
||||
- 已完成文件:
|
||||
- `src/views/team/team-list/index.vue`
|
||||
- `src/views/team/team-list/bind-bd.vue`
|
||||
- `src/views/team/team-list/team-application-process-drawer.vue`
|
||||
- `src/views/team/team-list/team-contact.vue`
|
||||
- `src/views/team/team-list/team-edit.vue`
|
||||
- `src/views/team/team-list/team-notice-list-drawer.vue`
|
||||
- `src/views/team/team-list/team-notice-send-drawer.vue`
|
||||
- `src/views/team/team-list/team-remark.vue`
|
||||
- `src/views/team/team-list/team-status.vue`
|
||||
- `src/views/team/team-list/team-switch-own.vue`
|
||||
- `src/views/team/components/ProcessApprovalDrawer/index.vue`
|
||||
- 直接公共组件状态:
|
||||
- `src/views/team/components/TeamCreate/index.vue`:历史已完成,本轮复核引用
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`:历史已完成,本轮复核中文扫描无命中
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`:历史已完成
|
||||
- `src/components/data/SelectSystemRegion/index.vue`:本轮复核未发现可见中文
|
||||
- `src/components/data/AccountInput/index.vue`:本轮复核未发现可见中文
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:本轮复核未发现可见中文
|
||||
- 说明:
|
||||
- 仅处理可见静态展示文案,不改接口参数、查询字段、路由路径、权限码、枚举实际值、表单提交值或接口返回动态数据
|
||||
- 已完成内容:
|
||||
- 入口页筛选区、表格列头、状态展示、操作菜单、加载更多、无权限提示、删除确认与提交中提示已国际化
|
||||
- 绑定 BD、团队申请、联系方式、修改资料、通知记录、发送通知、备注、状态变更、更换团长、申请日志抽屉/弹窗已国际化
|
||||
- 新增 `pages.teamList`,所有状态、申请原因和审核日志原因均按原枚举 value 做展示层映射
|
||||
- 验证结果:
|
||||
- 目标范围中文扫描仅剩注释或已注释代码,不属于可见展示文案
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 带 `NODE_OPTIONS=--openssl-legacy-provider` 的构建在当前 Node 下被拒绝,已改用普通构建命令验证通过
|
||||
- 完成后线程二状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一已完成:`src/views/user/user-table/index.vue` 直接公共组件最终复核
|
||||
- 对应主要路由:
|
||||
- 用户管理 / User Management
|
||||
- 用户列表 / User List
|
||||
- 路由别名:`AppUserList`
|
||||
- 路径:`user/user-table/index`
|
||||
- 领取与复核动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已确认当前没有其他线程认领 `src/views/user/user-table/index.vue` 或其直接公共组件收口复核
|
||||
- 复核范围包括:
|
||||
- `src/views/user/user-table/index.vue`
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/PlatformSvgIcon/index.vue`
|
||||
- `src/components/SysOriginIcon/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`
|
||||
- `src/components/data/GoldRunningWaterDialog/index.vue`
|
||||
- `src/components/data/DiamondRunningWaterDialog/index.vue`
|
||||
- `src/components/data/DiamondSalaryRunningWaterDialog/index.vue`
|
||||
- `src/components/data/AccountHanle/index.vue`
|
||||
- `src/components/data/IpDeviceHandle/index.vue`
|
||||
- `src/components/data/UserVideoViolationTableDialog/index.vue`
|
||||
- `src/components/data/EditUserForm/index.vue`
|
||||
- `src/components/data/EditUserGoldCoinDeductionForm/index.vue`
|
||||
- `src/components/data/EditUserGoldCoinRewardForm/index.vue`
|
||||
- `src/components/data/EditDiamondCoinDeductionForm/index.vue`
|
||||
- `src/components/data/EditUserDiamondRewardForm/index.vue`
|
||||
- `src/components/data/EditUserGameCouponRewardForm/index.vue`
|
||||
- `src/components/data/EditUserGameCouponDeductionForm/index.vue`
|
||||
- `src/components/data/UserAccountStatusLogDrawer/index.vue`
|
||||
- `src/components/data/AddOtherRecharge/index.vue`
|
||||
- `src/components/data/AddOtherRechargeDialog/index.vue`
|
||||
- `src/components/data/UserAuthForm/index.vue`
|
||||
- `src/components/data/UserInfo/BankCardDrawer/index.vue`
|
||||
- `src/components/data/UserRegistrationOverviewCharts/dialog.vue`
|
||||
- `src/components/data/UserRegistrationOverviewCharts/index.vue`
|
||||
- `src/components/data/UserRegistrationOverviewCharts/bar-graph-charts.vue`
|
||||
- 说明:
|
||||
- 本轮目标是关闭 `用户列表 / User List` 在 `主要路由.md` 中“页面本体已完成,直接公共组件待联动复核”的状态
|
||||
- 仅复核/处理可见静态展示文案,不改接口参数、查询字段、路由路径、权限码、表单提交值或接口返回动态数据
|
||||
- 复核结论:
|
||||
- 入口页与直接公共组件没有需要继续处理的可见静态中文
|
||||
- `src/views/user/user-table/index.vue` 命中的中文为注释或已注释代码,不参与页面展示
|
||||
- `src/components/data/GoldRunningWaterDialog/index.vue`、`src/components/data/UserVideoViolationTableDialog/index.vue`、`src/components/data/EditUserGoldCoinRewardForm/index.vue` 命中的中文为注释,不参与页面展示
|
||||
- `src/components/data/UserRegistrationOverviewCharts/index.vue` 命中的“系统”位于已注释的旧筛选代码中,不参与页面展示
|
||||
- `src/components/data/AccountHanle/index.vue` 默认警告语属于提交给接口的业务内容,按“不要更改接口参数和提交值”规则保留
|
||||
- 验证结果:
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮未修改源码,仅更新协作文档状态
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一已完成:`src/views/approval/avatar-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户头像 / User Avatar
|
||||
- 路由别名:`AvatatPhotoApproval`
|
||||
- 路径:`approval/avatar-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/avatar-approval/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 已完成内容:
|
||||
- 筛选区、日期选择、性别/审批状态展示映射、选择文案、用户信息卡片按钮、批量审批按钮、确认提示、操作成功/失败提示等可见静态文案已国际化
|
||||
- 新增 `pages.userAvatarApproval`
|
||||
- 补充 `pages.userDetailsDrawer.title` 与无权限提示文案
|
||||
- 审批类型、审批状态、性别、权限码和提交给接口的实际值保持原样,仅在展示层通过 `$t` 映射
|
||||
- 直接公共组件状态:
|
||||
- `src/components/Pagination/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/data/EditUserForm/index.vue`:历史已完成,本轮复核中文扫描无命中
|
||||
- `src/components/data/AccountHanle/index.vue`:历史已完成;默认警告语属于提交给接口的业务内容,按规则保留
|
||||
- `src/components/data/AccountInput/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/SysOriginIcon/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:本轮补充抽屉标题、无权限提示与照片墙 tab 语言 key
|
||||
- 验证结果:
|
||||
- 目标范围中文残留仅剩 `src/components/data/AccountHanle/index.vue` 默认警告语,属于接口业务内容
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮改动未使用 `$te`
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 未修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批类型实际值、审批状态实际值、性别实际值、表单提交值或接口返回动态数据
|
||||
- 线程一本轮完成后切回待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一已新认领:`src/views/approval/avatar-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户头像 / User Avatar
|
||||
- 路由别名:`AvatatPhotoApproval`
|
||||
- 路径:`approval/avatar-approval/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已确认当前没有其他线程认领 `src/views/approval/avatar-approval/index.vue`
|
||||
- 认领范围包括:
|
||||
- `src/views/approval/avatar-approval/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/EditUserForm/index.vue`
|
||||
- `src/components/data/AccountHanle/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/SysOriginIcon/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 说明:
|
||||
- 仅处理可见静态展示文案,不改接口参数、查询字段、路由路径、权限码、审批类型实际值、审批状态实际值、性别实际值、表单提交值或接口返回动态数据
|
||||
- `src/components/data/AccountHanle/index.vue` 中默认警告内容属于提交给接口的业务内容,保持原值
|
||||
- 领取时线程一状态:进行中
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一已完成:`src/views/team/team-bill/**`
|
||||
- 对应主要路由:
|
||||
- 主播中心 / Broadcaster Center
|
||||
- 账单列表 / Bill List
|
||||
- 路由别名:`team:bill`
|
||||
- 路径:`team/team-bill/index`
|
||||
- 已完成文件:
|
||||
- `src/views/team/team-bill/index.vue`
|
||||
- `src/views/team/team-bill/details-drawer.vue`
|
||||
- `src/views/team/team-bill/team-bill-internal-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-settle.vue`
|
||||
- `src/views/team/team-bill/team-bill-status.vue`
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`
|
||||
- 已完成内容:
|
||||
- 筛选区、导出抽屉、表格列头、状态/结算类型展示映射、详情抽屉、备注抽屉、状态变更抽屉、结算抽屉、校验提示与操作提示等可见静态文案已国际化
|
||||
- 新增 `pages.teamBill`
|
||||
- 账单状态和结算类型仍使用原接口实际值,仅在展示层通过 `$t` 映射文案
|
||||
- 页面私有组件状态:
|
||||
- 同目录 5 个私有抽屉/弹窗已随入口页同步完成
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue` 历史已完成,本轮复核中文扫描无命中
|
||||
- 直接公共组件状态:
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`:默认 placeholder 改为展示层 `$t('common.select')`,未改传参逻辑
|
||||
- `src/components/data/SelectSystemRegion/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/data/AccountInput/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:本轮复核中文扫描无命中
|
||||
- 验证结果:
|
||||
- `src/views/team/team-bill/*.vue` 中文残留仅在已注释的历史模板块中,不属于可见展示文案
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮改动未使用 `$te`
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 未修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、账单状态实际值、结算类型实际值、工资计算值、表单提交值或接口返回动态数据
|
||||
- 线程一本轮完成后切回待分配
|
||||
|
||||
- 2026-05-08
|
||||
- 线程一已新认领:`src/views/team/team-bill/**`
|
||||
- 对应主要路由:
|
||||
- 主播中心 / Broadcaster Center
|
||||
- 账单列表 / Bill List
|
||||
- 路由别名:`team:bill`
|
||||
- 路径:`team/team-bill/index`
|
||||
- 领取前动作:
|
||||
- 已重新读取 `docs/i18n/线程协作.md`
|
||||
- 已重新读取 `docs/i18n/翻译进度.md`
|
||||
- 已重新读取 `docs/i18n/翻译清单.md`
|
||||
- 已重新读取 `docs/i18n/主要路由.md`
|
||||
- 已重新读取 `src/lang/messages/pages/en.js`
|
||||
- 已重新读取 `src/lang/messages/pages/zh.js`
|
||||
- 已确认当前没有其他线程认领 `src/views/team/team-bill/**`
|
||||
- 认领范围包括:
|
||||
- `src/views/team/team-bill/index.vue`
|
||||
- `src/views/team/team-bill/details-drawer.vue`
|
||||
- `src/views/team/team-bill/team-bill-internal-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-settle.vue`
|
||||
- `src/views/team/team-bill/team-bill-status.vue`
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`
|
||||
- `src/components/data/SelectSystemRegion/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`
|
||||
- 说明:
|
||||
- 仅处理可见静态展示文案,不改接口参数、查询字段、路由路径、权限码、账单状态实际值、结算状态实际值、工资计算值、表单提交值或接口返回动态数据
|
||||
- 领取时线程一状态:进行中
|
||||
|
||||
- 2026-05-07
|
||||
- 线程一已完成:`src/views/user/bank-balance/withdraw-diamond-apply/**`
|
||||
- 对应主要路由:
|
||||
@ -6177,7 +6850,7 @@
|
||||
8. 如果需要新增公共 key,优先使用已有命名体系,避免同义重复 key
|
||||
9. 修改完成后先本地构建验证
|
||||
10. 把结果同步写入 `翻译进度.md` 和 `翻译清单.md`
|
||||
11. 如果本轮完成主要路由页面,只更新 `主要路由.md` 的主路由详细状态与“当前已完成主要路由摘要”;不要在 `翻译清单.md` 里重复维护主路由索引
|
||||
11. 如果本轮完成主要路由页面,只更新 `主要路由.md` 的主路由详细状态与“当前主要路由状态总览”;总览中已完成项不额外标注,不要在 `翻译清单.md` 里重复维护主路由索引
|
||||
12. 在线程认领表里把状态改为“已完成”或“阻塞”
|
||||
13. 后续不要再新认领非主要路由页面;已经处理过的非主要路由保持现状即可
|
||||
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
## 文档定位
|
||||
|
||||
- 本文件只负责维护文件级待办、进行中、已完成与当前认领状态
|
||||
- 需要看主要路由的完整父子级结构、路由别名、路径、入口文件、完成状态与已完成主要路由摘要时,统一查看 `docs/i18n/主要路由.md`
|
||||
- 本文件不再重复维护“已完成主要路由索引”,避免和 `docs/i18n/主要路由.md` 的主路由摘要在多线程写入时漂移
|
||||
- 需要看主要路由的完整父子级结构、路由别名、路径、入口文件、完成状态、进行中项与未完成项时,统一查看 `docs/i18n/主要路由.md`
|
||||
- 本文件不再重复维护“主要路由状态总览”,避免和 `docs/i18n/主要路由.md` 的主路由摘要在多线程写入时漂移
|
||||
- 文档中的英文路由名需要与侧边栏实际语言包 `src/lang/messages/base/menu-en.js` 保持一致;如有差异,以 `menu-en.js` 为准
|
||||
- 注意 `src/lang/messages/en.js` 顶层旧中文 key 会在运行时覆盖 `menu-en.js` 的同名 key;统一路由英文名时需要同步检查并消除这类重复覆盖
|
||||
- 需要看阶段成果、构建验证与时间线时,统一查看 `docs/i18n/翻译进度.md`
|
||||
@ -65,8 +65,8 @@
|
||||
|
||||
### 已完成主要路由索引
|
||||
|
||||
- 本段不再重复维护主路由完成索引。
|
||||
- 已完成主要路由摘要、父子级结构、路由别名、路径、入口文件与完成状态,统一以 `docs/i18n/主要路由.md` 为准。
|
||||
- 本段不再重复维护主路由完成索引或状态总览。
|
||||
- 主要路由完成 / 进行中 / 未完成摘要、父子级结构、路由别名、路径、入口文件与完成状态,统一以 `docs/i18n/主要路由.md` 为准。
|
||||
- 本文件只继续维护下方“已完成文件平铺清单”、进行中任务、最新同步记录和文件级保留项。
|
||||
|
||||
### 已完成文件平铺清单
|
||||
@ -150,6 +150,12 @@
|
||||
- `src/views/game/lucky-gift/probability-config/index.vue`
|
||||
- `src/views/order/candy/purchasing/index.vue`
|
||||
- `src/views/order/candy/running-water/index.vue`
|
||||
- `src/views/user/diamond-run-water/index.vue`
|
||||
- `src/views/user/diamond-balance/index.vue`
|
||||
- `src/views/user/integral-stream/index.vue`
|
||||
- `src/views/user/integral-stream/timely/index.vue`
|
||||
- `src/views/user/integral-stream/history/index.vue`
|
||||
- `src/views/user/freight-info-list/index.vue`
|
||||
- `src/components/data/UserInfo/BaseInfo/index.vue`
|
||||
- `src/views/room/profile/index.vue`
|
||||
- `src/views/room/profile/room-active-charts.vue`
|
||||
@ -194,6 +200,17 @@
|
||||
- `src/views/team/team-member/team-member-target-reset.vue`
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`
|
||||
- `src/views/team/components/TeamCreate/index.vue`
|
||||
- `src/views/team/team-list/index.vue`
|
||||
- `src/views/team/team-list/bind-bd.vue`
|
||||
- `src/views/team/team-list/team-application-process-drawer.vue`
|
||||
- `src/views/team/team-list/team-contact.vue`
|
||||
- `src/views/team/team-list/team-edit.vue`
|
||||
- `src/views/team/team-list/team-notice-list-drawer.vue`
|
||||
- `src/views/team/team-list/team-notice-send-drawer.vue`
|
||||
- `src/views/team/team-list/team-remark.vue`
|
||||
- `src/views/team/team-list/team-status.vue`
|
||||
- `src/views/team/team-list/team-switch-own.vue`
|
||||
- `src/views/team/components/ProcessApprovalDrawer/index.vue`
|
||||
- `src/views/team/diamond-policy/index.vue`
|
||||
- `src/views/team/diamond-policy/props-form-edit.vue`
|
||||
- `src/components/data/AccountHanle/index.vue`
|
||||
@ -319,37 +336,379 @@
|
||||
- `src/views/user/bank-balance/withdraw-money-apply/index.vue`
|
||||
- `src/views/user/bank-balance/withdraw-money-apply/approval-drawer.vue`
|
||||
- `src/views/user/bank-balance/withdraw-money-apply/details-drawer.vue`
|
||||
- `src/views/approval/photo-wall-approval/index.vue`
|
||||
- `src/views/approval/nickname-approval/index.vue`
|
||||
- `src/views/feedback/index.vue`
|
||||
- `src/components/data/Feedback/index.vue`
|
||||
- `src/views/approval/room-cover-wall-approval/index.vue`
|
||||
- 表格展示适配:表头自动换行 + 默认最小宽度补齐
|
||||
- 表格展示适配:表头 `.cell` 高度自适应 + 纵向居中修正
|
||||
- 表单展示适配:标题纵向居中
|
||||
|
||||
## 进行中
|
||||
|
||||
- 线程一:待分配
|
||||
- 主要路由:钻石提现申请 / Diamond Withdrawal Applications
|
||||
- 路由别名:`UserBankWithdrawDiamondApply`
|
||||
- 路径:`user/bank-balance/withdraw-diamond-apply/index`
|
||||
- 已完成文件:
|
||||
- `src/views/user/bank-balance/withdraw-diamond-apply/index.vue`
|
||||
- `src/views/user/bank-balance/withdraw-diamond-apply/approval-drawer.vue`
|
||||
- `src/views/user/bank-balance/withdraw-diamond-apply/details-drawer.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/SysOriginIcon/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`
|
||||
- `src/components/upload-image/index.vue`
|
||||
- 验证结果:
|
||||
- 中文残留仅剩银行卡复制文本,不属于可见展示文案
|
||||
- 语言文件语法校验通过
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 说明:
|
||||
- 仅处理可见静态展示文案,不改接口参数、查询字段、路由路径、权限码、审核状态实际值、接收方式实际值、银行卡类型实际值、复制内容结构或接口返回动态数据
|
||||
- 线程一:当前无进行中任务,待分配
|
||||
- 上一轮已完成:主要路由页面 / 道具管理 / 资源配置 / Resource Configuration
|
||||
|
||||
- 线程二:当前无进行中任务,待分配
|
||||
|
||||
- 线程三:当前无进行中任务,待分配
|
||||
|
||||
## 2026-05-07 最新同步
|
||||
## 2026-05-08 最新同步
|
||||
|
||||
- 线程一已完成:主要路由页面 / 道具管理 / 资源配置
|
||||
- 文件:
|
||||
- `src/views/props/props-resource-config/index.vue`
|
||||
- `src/views/props/props-resource-config/form-edit.vue`
|
||||
- `src/views/props/props-resource-config/line-graph-charts.vue`
|
||||
- `src/views/props/props-resource-config/sales-mothly-charts-dialog.vue`
|
||||
- 语言 key:新增 `pages.propsResourceConfig`
|
||||
- 直接公共组件复核:`Pagination`、`SysOriginIcon`、`svgaplayer`、`PropsSalesOverviewCharts` 无中文命中
|
||||
- 保留:接口字段、接口参数、路由路径、权限码、表单提交值、枚举实际值与接口返回动态数据
|
||||
- 验证:目标文件中文扫描无命中;未使用 `$te`;语言文件语法检查通过;`npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
|
||||
- 线程一新认领:主要路由页面 / 道具管理 / 资源配置
|
||||
- 文件范围:`src/views/props/props-resource-config/**`
|
||||
- 目标:入口页、编辑表单、折线图、月销售弹窗的可见静态文本国际化
|
||||
- 保留:接口字段、接口参数、路由路径、权限码、表单提交值、枚举实际值与接口返回动态数据
|
||||
|
||||
- 线程一已完成:主要路由页面 / 审批管理 / 用户个性签名
|
||||
- 文件:`src/views/approval/user-profile-desc-approval/index.vue`
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`UserDeatilsDrawer` 无中文命中
|
||||
- 接口相关保留:`PROFILE_DESC`、`PASS`、`NOT_PASS`、`waitApprovalUser`、`content: item.profileDesc`
|
||||
- 验证:语言文件语法检查通过;`npm run build:prod` 第二次通过,仍保留项目既有 17 个 warning
|
||||
- 备注:第一次构建曾因输出目录 `dist\cdn` 偶发 `EEXIST` 失败,重跑后通过
|
||||
|
||||
- 线程二已完成:主要路由页面 / 审批管理 / 房间封面
|
||||
- 路由别名:`RoomCoverWallApproval`
|
||||
- 路径:`approval/room-cover-wall-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/room-cover-wall-approval/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:中文扫描无命中
|
||||
- `src/components/data/EditUserForm/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountInput/index.vue`:中文扫描无命中
|
||||
- `src/components/SysOriginIcon/index.vue`:中文扫描无命中
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountHanle/index.vue`:仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 已完成内容:
|
||||
- 筛选区、日期范围、搜索按钮、卡片信息标签、状态与性别展示映射、选择数量、详情、编辑用户、账号处理、通过/拒绝按钮、确认提示与成功提示已国际化
|
||||
- 新增 `pages.roomCoverApproval` 中英文语言 key
|
||||
- 审批状态与性别实际值保持原样,仅在展示层映射翻译
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批类型实际值、审批状态实际值、表单提交值、图片地址、机器标签或接口返回动态数据
|
||||
- 验证结果:
|
||||
- 目标页中文扫描仅剩注释或注释掉的历史代码
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法校验通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程二已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 审批管理 / 意见反馈
|
||||
- 路由别名:`user:feedback`
|
||||
- 路径:`feedback/index`
|
||||
- 已完成文件:
|
||||
- `src/views/feedback/index.vue`
|
||||
- `src/components/data/Feedback/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/SysOriginIcon/index.vue`
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- `src/components/data/Feedback/index.vue`:已随页面同步完成
|
||||
- `src/components/videoPlayer/index.vue`:可见倍速文案已完成,剩余中文为注释
|
||||
- 已完成内容:
|
||||
- 筛选区、表格展开详情标签、表格列头、状态展示、操作按钮、批量处理提示与成功提示已国际化
|
||||
- 新增 `pages.feedback` 与 `pages.videoPlayer` 中英文语言 key
|
||||
- 保留项:
|
||||
- `approvalRemarks: '感谢您的反馈意见'` 会作为批量处理备注提交给接口,按提交内容保留
|
||||
- `src/components/videoPlayer/index.vue` 剩余中文均为注释,不属于可见展示文案
|
||||
- 验证结果:
|
||||
- 目标页中文扫描仅剩提交内容
|
||||
- 直接公共组件中文扫描仅剩注释
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程二新认领:主要路由页面 / 审批管理 / 举报信息
|
||||
- 路由别名:`ReportManagerReport`
|
||||
- 路径:`approval/report/index`
|
||||
- 文件:`src/views/approval/report/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/AccountHanle/index.vue`
|
||||
- 说明:
|
||||
- 已发现线程一当前认领 `src/views/approval/nickname-approval/index.vue`,线程二主动避让
|
||||
- 本轮完成后已按用户要求处理 `翻译进度.md` 中重复的主要路由完成摘要,统一收口到 `docs/i18n/主要路由.md`
|
||||
- 状态:领取时进行中;本轮随后已完成,见下方完成记录
|
||||
|
||||
- 线程二已完成:主要路由页面 / 审批管理 / 举报信息
|
||||
- 路由别名:`ReportManagerReport`
|
||||
- 路径:`approval/report/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/report/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountInput/index.vue`:中文扫描无命中
|
||||
- `src/components/SysOriginIcon/index.vue`:中文扫描无命中
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:中文扫描无命中
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountHanle/index.vue`:仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 已完成内容:
|
||||
- 筛选区、日期占位、下拉展示、搜索按钮、展开行标签、表格列头、账号处理按钮、操作说明、批量有效/无效按钮、确认提示与复制提示已国际化
|
||||
- 新增 `pages.userReportApproval` 中英文语言 key
|
||||
- 审批状态与举报类型实际值保持原样,仅在展示层映射翻译
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法校验通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程二已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 审批管理 / 用户昵称
|
||||
- 路由别名:`NickNameApproval`
|
||||
- 路径:`approval/nickname-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/nickname-approval/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/SysOriginIcon/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- `src/components/data/AccountHanle/index.vue`:仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 已完成内容:
|
||||
- 筛选区、日期占位、审批状态下拉展示映射、搜索按钮、表格列头、操作按钮、批量审批按钮、确认提示与成功提示已国际化
|
||||
- 新增 `pages.userNicknameApproval` 中英文语言 key
|
||||
- 审批状态仅在展示层映射翻译,实际值保持原样
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描仅命中 `AccountHanle` 既有接口提交默认警告内容
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 审批管理 / 用户照片墙
|
||||
- 路由别名:`PhotoWallApproval`
|
||||
- 路径:`approval/photo-wall-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/photo-wall-approval/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/data/EditUserForm/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 已完成内容:
|
||||
- 筛选区、日期占位、状态/性别下拉展示映射、搜索按钮、卡片信息标签、选择文案、编辑用户按钮、批量审批按钮、确认提示与成功提示已国际化
|
||||
- 新增 `pages.userPhotoWallApproval` 中英文语言 key
|
||||
- 审批状态与性别常量仅在展示层映射翻译,实际值保持原样
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 运营管理 / 营收支出 / 钻石余额列表
|
||||
- 路由别名:`User:Diamond:Balance`
|
||||
- 路径:`user/diamond-balance/index`
|
||||
- 已完成文件:
|
||||
- `src/views/user/diamond-balance/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 已完成内容:
|
||||
- 用户 ID placeholder、搜索按钮、表格列头已国际化
|
||||
- 新增 `pages.userDiamondBalance` 中英文语言 key
|
||||
- 余额列 `min-width` 调整为 120,辅助英文列名展示
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 运营管理 / 营收支出 / 金币代理流水
|
||||
- 路由别名:`UserFreightInfoList`
|
||||
- 路径:`user/freight-info-list/index`
|
||||
- 已完成文件:
|
||||
- `src/views/user/freight-info-list/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`
|
||||
- 已完成内容:
|
||||
- 筛选区、日期占位、来源下拉、搜索 / 导出按钮、表格列头、收支类型、导出抽屉、校验提示与导出提示已国际化
|
||||
- 新增 `pages.userFreightInfoList` 中英文语言 key
|
||||
- 来源下拉仅翻译展示文本,`freightBalanceOrigin` 常量实际值与查询逻辑保持原样
|
||||
- 导出文件名 `FreightWaters ${monthDate}` 保持原样
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 运营管理 / 营收支出 / 积分收支记录
|
||||
- 路由别名:`IntegralStream`
|
||||
- 路径:`user/integral-stream/index`
|
||||
- 已完成文件:
|
||||
- `src/views/user/integral-stream/index.vue`
|
||||
- `src/views/user/integral-stream/timely/index.vue`
|
||||
- `src/views/user/integral-stream/history/index.vue`
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 已完成内容:
|
||||
- tab 标题、筛选区、日期占位、来源下拉、搜索按钮、提示条与表格列头已国际化
|
||||
- 新增 `pages.integralStream` 中英文语言 key
|
||||
- 来源下拉仅翻译展示文本,`videoOrigin` 常量实际值与查询逻辑保持原样
|
||||
- 保留项:
|
||||
- `timely/index.vue` 与 `history/index.vue` 首行中文仅为注释,不参与页面展示
|
||||
- 验证结果:
|
||||
- 目标模块中文扫描仅剩注释中文
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 运营管理 / 营收支出 / 钻石流水列表
|
||||
- 路由别名:`User:Diamond:Run:Water`
|
||||
- 路径:`user/diamond-run-water/index`
|
||||
- 已完成文件:
|
||||
- `src/views/user/diamond-run-water/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/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 已完成内容:
|
||||
- 筛选区、类型选项、来源下拉展示、搜索按钮与表格列头已国际化
|
||||
- 新增 `pages.userDiamondRunWater` 中英文语言 key
|
||||
- 来源下拉仅翻译展示文本,`diamondOrigins` 常量实际值与查询逻辑保持原样
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程一已完成:已完成主要路由页面的直接公共组件联动复查最终收口
|
||||
- 任务类型:临时任务收口
|
||||
- 本轮目标:
|
||||
- 确认“当前扫描到仍需复核的已完成页面 -> 直接公共组件”是否仍为空
|
||||
- 确认 `docs/i18n/主要路由.md` 是否仍存在页面级 `状态:待处理`
|
||||
- 若无剩余项,标记公共组件联动复查临时任务已完成
|
||||
- 最终复核结论:
|
||||
- “当前扫描到仍需复核的已完成页面 -> 直接公共组件”为空
|
||||
- `docs/i18n/主要路由.md` 中除本临时任务外没有页面级 `状态:待处理`
|
||||
- 已登记完成的直接公共组件中文命中仅剩注释、已注释代码,或 `src/components/data/AccountHanle/index.vue` 中提交给接口的默认警告内容
|
||||
- `src/components/data/UserRegistrationOverviewCharts/index.vue` 命中的“系统”位于已注释旧筛选代码中,不参与页面展示
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程二已完成:主要路由页面 / 主播中心 / 代理列表
|
||||
- 路由别名:`team:list`
|
||||
- 路径:`team/team-list/index`
|
||||
- 已完成文件:
|
||||
- `src/views/team/team-list/index.vue`
|
||||
- `src/views/team/team-list/bind-bd.vue`
|
||||
- `src/views/team/team-list/team-application-process-drawer.vue`
|
||||
- `src/views/team/team-list/team-contact.vue`
|
||||
- `src/views/team/team-list/team-edit.vue`
|
||||
- `src/views/team/team-list/team-notice-list-drawer.vue`
|
||||
- `src/views/team/team-list/team-notice-send-drawer.vue`
|
||||
- `src/views/team/team-list/team-remark.vue`
|
||||
- `src/views/team/team-list/team-status.vue`
|
||||
- `src/views/team/team-list/team-switch-own.vue`
|
||||
- `src/views/team/components/ProcessApprovalDrawer/index.vue`
|
||||
- 直接公共组件状态:
|
||||
- `src/views/team/components/TeamCreate/index.vue`:历史已完成,本轮复核引用
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`:历史已完成,本轮复核中文扫描无命中
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`:历史已完成
|
||||
- `src/components/data/SelectSystemRegion/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` 语法校验通过
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 状态:已完成,线程二已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 用户管理 / 用户列表
|
||||
- 路由别名:`AppUserList`
|
||||
- 路径:`user/user-table/index`
|
||||
- 本轮复核:
|
||||
- 用户列表入口页与其直接公共组件最终复核
|
||||
- 已关闭 `主要路由.md` 中“页面本体已完成,直接公共组件待联动复核”的状态
|
||||
- 直接公共组件复核结论:
|
||||
- 入口页与直接公共组件没有需要继续处理的可见静态中文
|
||||
- `src/views/user/user-table/index.vue` 命中的中文为注释或已注释代码
|
||||
- `src/components/data/GoldRunningWaterDialog/index.vue`、`src/components/data/UserVideoViolationTableDialog/index.vue`、`src/components/data/EditUserGoldCoinRewardForm/index.vue` 命中的中文为注释
|
||||
- `src/components/data/UserRegistrationOverviewCharts/index.vue` 命中的“系统”位于已注释旧筛选代码
|
||||
- `src/components/data/AccountHanle/index.vue` 默认警告语属于提交给接口的业务内容,按规则保留
|
||||
- 验证结果:
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮未修改源码,仅更新协作文档状态
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 审批管理 / 用户头像
|
||||
- 路由别名:`AvatatPhotoApproval`
|
||||
- 路径:`approval/avatar-approval/index`
|
||||
- 已完成文件:
|
||||
- `src/views/approval/avatar-approval/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 直接公共组件状态:
|
||||
- `src/components/Pagination/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/data/EditUserForm/index.vue`:历史已完成,本轮复核中文扫描无命中
|
||||
- `src/components/data/AccountHanle/index.vue`:默认警告语属于提交给接口的业务内容,按规则保留
|
||||
- `src/components/data/AccountInput/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/SysOriginIcon/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:已补充可见静态文案国际化
|
||||
- 验证结果:
|
||||
- 目标范围中文残留仅剩 `src/components/data/AccountHanle/index.vue` 默认警告语,属于接口业务内容
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮改动未使用 `$te`
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 本轮未修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批类型实际值、审批状态实际值、性别实际值、表单提交值或接口返回动态数据
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程一已完成:主要路由页面 / 主播中心 / 账单列表
|
||||
- 路由别名:`team:bill`
|
||||
- 路径:`team/team-bill/index`
|
||||
- 已完成文件:
|
||||
- `src/views/team/team-bill/index.vue`
|
||||
- `src/views/team/team-bill/details-drawer.vue`
|
||||
- `src/views/team/team-bill/team-bill-internal-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-settle.vue`
|
||||
- `src/views/team/team-bill/team-bill-status.vue`
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`
|
||||
- 页面私有组件状态:
|
||||
- 同目录 5 个私有抽屉/弹窗已随入口页同步完成
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue` 历史已完成,本轮复核中文扫描无命中
|
||||
- 直接公共组件状态:
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`:默认 placeholder 改为展示层 `$t('common.select')`,未改传参逻辑
|
||||
- `src/components/data/SelectSystemRegion/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/data/AccountInput/index.vue`:本轮复核中文扫描无命中
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:本轮复核中文扫描无命中
|
||||
- 验证结果:
|
||||
- `src/views/team/team-bill/*.vue` 中文残留仅在已注释的历史模板块中,不属于可见展示文案
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮改动未使用 `$te`
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 本轮未修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、账单状态实际值、结算类型实际值、工资计算值、表单提交值或接口返回动态数据
|
||||
- 状态:已完成,线程一已切回待分配
|
||||
|
||||
- 线程二已完成:主要路由页面 / 主播中心 / 主播成员
|
||||
- 路由别名:`team:member`
|
||||
@ -1228,7 +1587,7 @@
|
||||
- 原因:当前未被入口页或 `form-edit.vue` 引用,继续按既有排除项处理
|
||||
|
||||
- 临时任务:对已完成主要路由页面做直接公共组件联动复查
|
||||
- 状态:待处理
|
||||
- 状态:已完成(线程一,2026-05-08,最终收口)
|
||||
- 规则说明:
|
||||
- 对已经标记“已完成”的主要路由页面,补充检查入口页直接渲染的 `src/components/**` 公共组件
|
||||
- 如果公共组件已完成,补回完成记录;如果仍有中文展示文本,按公共组件任务单独认领或随页面补齐
|
||||
@ -1322,7 +1681,7 @@
|
||||
- 完成线程:线程三
|
||||
- 关联页面:用户列表页面
|
||||
- 说明:组件内用户工资钻石流水弹窗标题、表格加载文案与表格列名已国际化;分页查询字段、加载逻辑、接口返回工资钻石流水数据、来源、来源描述、类型名称与备注保持原样
|
||||
- 当前扫描到仍需复核的“已完成页面 -> 直接公共组件”:
|
||||
- 当前扫描到仍需复核的“已完成页面 -> 直接公共组件”:当前无
|
||||
- 当前未列入“仍需复核”的直接公共组件:
|
||||
- 直接组件文件不存在或未解析到本地 `.vue` 文件
|
||||
- 扫描无中文命中
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
## 文档定位
|
||||
|
||||
- 本文件只负责记录全局进展、阶段成果、构建验证结果与下一步目标
|
||||
- 主要路由的完整父子级结构、路由别名、路径、入口文件、完成状态、已完成主要路由摘要与主路由优先级,以 `docs/i18n/主要路由.md` 为准
|
||||
- 主要路由的完整父子级结构、路由别名、路径、入口文件、完成状态、进行中项、未完成项与主路由优先级,以 `docs/i18n/主要路由.md` 为准
|
||||
- `docs/i18n/翻译清单.md` 不再重复维护已完成主要路由索引,只维护文件级清单与任务状态
|
||||
- 文档中的英文路由名需要与侧边栏实际语言包 `src/lang/messages/base/menu-en.js` 保持一致;如有差异,以 `menu-en.js` 为准
|
||||
- 注意 `src/lang/messages/en.js` 顶层旧中文 key 会在运行时覆盖 `menu-en.js` 的同名 key;统一路由英文名时需要同步检查并消除这类重复覆盖
|
||||
@ -20,11 +20,458 @@
|
||||
|
||||
## 当前认领线程
|
||||
|
||||
- 线程一:待分配,上一轮已完成 `src/views/user/bank-balance/withdraw-diamond-apply/**` 钻石提现申请页面入口、同目录私有抽屉、直接公共组件复核、语言文件校验与构建验证
|
||||
- 线程二:待分配,上一轮已完成 `src/views/team/team-member/**` 主播成员页面入口、同目录私有组件、直接引用的团队详情抽屉与直接公共组件复核、语言文件校验与构建验证
|
||||
- 线程一:待分配,上一轮已完成 `src/views/props/props-resource-config/**`,对应主要路由 `资源配置 / Resource Configuration`
|
||||
- 线程二:待分配,上一轮已完成 `src/views/approval/room-cover-wall-approval/index.vue`,对应主要路由 `房间封面 / Room Covers`
|
||||
- 线程三:待分配,上一轮已完成 `src/views/user/bank-balance/table/**` 用户银行账户页面入口、同目录私有组件、直接公共组件复核、语言文件校验与构建验证
|
||||
|
||||
## 2026-05-07 最新同步
|
||||
## 2026-05-08 最新同步
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/props/props-resource-config/index.vue`
|
||||
- `src/views/props/props-resource-config/form-edit.vue`
|
||||
- `src/views/props/props-resource-config/line-graph-charts.vue`
|
||||
- `src/views/props/props-resource-config/sales-mothly-charts-dialog.vue`
|
||||
- 对应主要路由:
|
||||
- 道具管理 / Prop Management
|
||||
- 资源配置 / Resource Configuration
|
||||
- 本轮完成:
|
||||
- 入口筛选、表格列名、操作按钮、无权限提示、编辑弹窗、上传提示、销售报表弹窗、图表系列名国际化
|
||||
- 新增 `pages.propsResourceConfig` 中英文语言 key
|
||||
- 直接公共组件复核:`Pagination`、`SysOriginIcon`、`svgaplayer`、`PropsSalesOverviewCharts` 无中文命中
|
||||
- 保留项:
|
||||
- `propsTypes`、`nobleVipTabs`、`showcaseTypes` 的实际 value 保持原样,仅展示 label 映射翻译
|
||||
- 接口字段、接口参数、路由路径、权限码、表单提交值、枚举实际值与接口返回动态数据保持原样
|
||||
- 验证结果:
|
||||
- 目标文件中文扫描无命中
|
||||
- 未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
|
||||
- 2026-05-08 线程一新认领:
|
||||
- `src/views/props/props-resource-config/**`
|
||||
- 对应主要路由:
|
||||
- 道具管理 / Prop Management
|
||||
- 资源配置 / Resource Configuration
|
||||
- 范围:
|
||||
- `src/views/props/props-resource-config/index.vue`
|
||||
- `src/views/props/props-resource-config/form-edit.vue`
|
||||
- `src/views/props/props-resource-config/line-graph-charts.vue`
|
||||
- `src/views/props/props-resource-config/sales-mothly-charts-dialog.vue`
|
||||
- 约束:
|
||||
- 仅处理可见静态展示文本
|
||||
- 不修改接口字段、接口参数、路由路径、权限码、表单提交值、枚举实际值与接口返回动态数据
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/approval/user-profile-desc-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户个性签名 / User Profile Signatures
|
||||
- 本轮完成:
|
||||
- 页面日期占位、筛选项、表格列名、操作按钮、批量审批按钮、确认弹窗与提示消息国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`UserDeatilsDrawer` 无中文命中
|
||||
- 审批状态仅翻译展示 label,接口提交值 `PROFILE_DESC`、`PASS`、`NOT_PASS` 与 `waitApprovalUser` 保持原样
|
||||
- 验证结果:
|
||||
- 中文扫描仅剩不可见注释“数量”
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 第二次通过,仍保留项目既有 17 个 warning
|
||||
- 第一次构建因输出目录 `dist\cdn` 偶发 `EEXIST` 失败,重跑通过,未发现源码编译错误
|
||||
|
||||
- 2026-05-08 线程二已完成:
|
||||
- `src/views/approval/room-cover-wall-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 房间封面 / Room Covers
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`EditUserForm`、`AccountHanle`、`AccountInput`、`SysOriginIcon`、`UserDeatilsDrawer`
|
||||
- 语言文件补充或复用
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批类型实际值、审批状态实际值、表单提交值、图片地址、机器标签或接口返回动态数据
|
||||
- 领取时线程二状态:进行中
|
||||
- 已完成内容:
|
||||
- 筛选区、日期范围、搜索按钮、卡片信息标签、状态与性别展示映射、选择数量、详情、编辑用户、账号处理、通过/拒绝按钮、确认提示与成功提示已国际化
|
||||
- 新增 `pages.roomCoverApproval` 中英文语言 key
|
||||
- 审批状态与性别实际值保持原样,仅在展示层映射翻译
|
||||
- 接口返回的房间封面、机器标签、用户资料、图片地址与动态数据保持原样
|
||||
- 直接公共组件复核:
|
||||
- `Pagination`、`EditUserForm`、`AccountInput`、`SysOriginIcon`、`UserDeatilsDrawer` 中文扫描无命中
|
||||
- `AccountHanle` 仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 验证结果:
|
||||
- 目标页中文扫描仅剩注释或注释掉的历史代码
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法校验通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程二状态:待分配
|
||||
|
||||
- 2026-05-08 线程一新认领:
|
||||
- `src/views/approval/user-profile-desc-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户个性签名 / User Profile Signatures
|
||||
- 本轮约束:
|
||||
- 仅处理可见静态展示文本
|
||||
- 不修改接口字段、接口参数、路由路径、审批类型与提交内容
|
||||
- 直接公共组件按页面实际引用与全局标签进行复核并记录
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/feedback/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 意见反馈 / Feedback
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`SysOriginIcon`、`UserTableExhibit`、`UserDeatilsDrawer`、`Feedback`、`VideoPlayer`
|
||||
- 语言文件补充或复用
|
||||
- 已完成内容:
|
||||
- 筛选区、表格展开详情标签、表格列头、状态展示、操作按钮、批量处理提示与成功提示已国际化
|
||||
- 直接公共组件 `Feedback` 抽屉标题、表单标签、提交按钮已国际化
|
||||
- 直接公共组件 `VideoPlayer` 可见倍速文案已国际化
|
||||
- 新增 `pages.feedback` 与 `pages.videoPlayer` 中英文语言 key
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审核状态实际值、批量处理提交内容、表单提交值或接口返回动态数据
|
||||
- 保留项:
|
||||
- `approvalRemarks: '感谢您的反馈意见'` 会作为批量处理备注提交给接口,按提交内容保留
|
||||
- `src/components/videoPlayer/index.vue` 剩余中文均为注释,不属于可见展示文案
|
||||
- 验证结果:
|
||||
- 目标页中文扫描仅剩提交内容
|
||||
- 直接公共组件中文扫描仅剩注释
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程二新认领:
|
||||
- `src/views/approval/report/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 举报信息 / Reports
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountHanle`
|
||||
- 语言文件补充或复用
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批状态实际值、举报类型实际值、批量审批提交值、表单提交值或接口返回动态数据
|
||||
- 后续文档收口:
|
||||
- 已按用户要求将本文件中重复的主要路由完成摘要统一迁入 `docs/i18n/主要路由.md`,后续本文件只保留阶段进展、构建验证与必要时间线
|
||||
- 领取时线程二状态:进行中
|
||||
- 已完成内容:
|
||||
- 筛选区、日期占位、下拉展示、搜索按钮、展开行标签、表格列头、账号处理按钮、操作说明、批量有效/无效按钮、确认提示与复制提示已国际化
|
||||
- 新增 `pages.userReportApproval` 中英文语言 key
|
||||
- 审批状态与举报类型实际值保持原样,仅在展示层映射翻译
|
||||
- 接口返回的举报类型名称、举报内容、最近处理人、媒体 URL 与用户资料保持原样
|
||||
- 直接公共组件复核:
|
||||
- `Pagination`、`AccountInput`、`SysOriginIcon`、`UserTableExhibit`、`UserDeatilsDrawer` 中文扫描无命中
|
||||
- `AccountHanle` 仅命中既有接口提交默认警告内容,按保留项处理
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法校验通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程二状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/approval/nickname-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户昵称 / User Nickname
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`SysOriginIcon`、`UserDeatilsDrawer`、`AccountHanle`
|
||||
- 语言文件补充或复用
|
||||
- 已完成内容:
|
||||
- 筛选区、日期占位、审批状态下拉展示映射、搜索按钮、表格列头、操作按钮、批量审批按钮、确认提示与成功提示已国际化
|
||||
- 新增 `pages.userNicknameApproval` 中英文语言 key
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批状态实际值、表单提交值或接口返回动态数据
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描仅命中 `AccountHanle` 既有接口提交默认警告内容
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/approval/photo-wall-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户照片墙 / User Photo Wall
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`EditUserForm`、`UserDeatilsDrawer`
|
||||
- 语言文件补充或复用
|
||||
- 已完成内容:
|
||||
- 筛选区、日期占位、状态/性别下拉展示映射、搜索按钮、卡片信息标签、选择文案、编辑用户按钮、批量审批按钮、确认提示与成功提示已国际化
|
||||
- 新增 `pages.userPhotoWallApproval` 中英文语言 key
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批状态实际值、性别实际值、表单提交值或接口返回动态数据
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/user/diamond-balance/index.vue`
|
||||
- 对应主要路由:
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 钻石余额列表 / Diamond Balance List
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`UserTableExhibit`、`UserDeatilsDrawer`
|
||||
- 语言文件补充或复用
|
||||
- 已完成内容:
|
||||
- 用户 ID placeholder、搜索按钮、表格列头已国际化
|
||||
- 新增 `pages.userDiamondBalance` 中英文语言 key
|
||||
- 余额列 `min-width` 调整为 120,辅助英文列名展示
|
||||
- 本轮未修改:
|
||||
- 接口参数、查询字段、表格 `prop`、路由路径、权限码、提交值或接口返回动态数据
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 本轮未使用 `$te`
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/user/freight-info-list/index.vue`
|
||||
- 对应主要路由:
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 金币代理流水 / Gold Agent Transactions
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`SysOriginIcon`、`AccountInput`、`UserTableExhibit`
|
||||
- 语言文件补充:`pages.userFreightInfoList`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、提交值、接口返回动态数据、导出文件名或 `freightBalanceOrigin` 常量实际值
|
||||
- 已完成内容:
|
||||
- 筛选区、日期占位、来源下拉、搜索 / 导出按钮、表格列头、收支类型、导出抽屉、校验提示与导出提示已国际化
|
||||
- 来源下拉仅将 `freightBalanceOrigin.value` 映射为展示文案,筛选逻辑仍保留原 `value/name` 匹配
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/user/integral-stream/index.vue`
|
||||
- `src/views/user/integral-stream/timely/index.vue`
|
||||
- `src/views/user/integral-stream/history/index.vue`
|
||||
- 对应主要路由:
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 积分收支记录 / Points Transaction Records
|
||||
- 本轮范围:
|
||||
- 入口 tab 页、当前可见积分流水页、同目录历史积分流水页
|
||||
- 直接公共组件复核:`Pagination`、`AccountInput`、`UserDeatilsDrawer`
|
||||
- 语言文件补充:`pages.integralStream`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、提交值、接口返回动态数据或 `videoOrigin` 常量实际值
|
||||
- 已完成内容:
|
||||
- tab 标题、筛选区、日期占位、来源下拉、搜索按钮、提示条与表格列头已国际化
|
||||
- 来源下拉仅将 `videoOrigin.value` 映射为展示文案,筛选逻辑仍保留原 `value/name` 匹配
|
||||
- 保留项:
|
||||
- `timely/index.vue` 与 `history/index.vue` 首行中文仅为注释,不参与页面展示
|
||||
- 验证结果:
|
||||
- 目标模块中文扫描仅剩注释中文
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/user/diamond-run-water/index.vue`
|
||||
- 对应主要路由:
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 钻石流水列表 / Diamond Transaction List
|
||||
- 本轮范围:
|
||||
- 入口页静态展示文本国际化
|
||||
- 直接公共组件复核:`Pagination`、`SysOriginIcon`、`AccountInput`、`UserTableExhibit`、`UserDeatilsDrawer`
|
||||
- 语言文件补充:`pages.userDiamondRunWater`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、提交值、接口返回动态数据或 `diamondOrigins` 常量实际值
|
||||
- 已完成内容:
|
||||
- 筛选区、类型选项、来源下拉展示、搜索按钮与表格列头已国际化
|
||||
- 来源下拉仅将 `diamondOrigins.value` 映射为展示文案,筛选逻辑仍保留原 `value/name` 匹配
|
||||
- 验证结果:
|
||||
- 目标页中文扫描无命中
|
||||
- 直接公共组件中文扫描无命中
|
||||
- 语言文件语法检查通过
|
||||
- `npm run build:prod` 通过,仍保留项目既有 17 个 warning
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- 已完成主要路由页面的直接公共组件联动复查最终收口
|
||||
- 本轮目标:
|
||||
- 复核 `docs/i18n/翻译清单.md` 中“当前扫描到仍需复核的已完成页面 -> 直接公共组件”是否仍为空
|
||||
- 复核 `docs/i18n/主要路由.md` 中是否仍存在页面级 `状态:待处理`
|
||||
- 如无剩余明确可处理项,将公共组件联动复查临时任务标记为已完成
|
||||
- 本轮不修改:
|
||||
- 源码逻辑、接口参数、查询字段、路由路径、权限码、表单提交值或接口返回动态数据
|
||||
- 最终复核结论:
|
||||
- `docs/i18n/翻译清单.md` 中“当前扫描到仍需复核的已完成页面 -> 直接公共组件”为空
|
||||
- `docs/i18n/主要路由.md` 中除本临时任务外没有页面级 `状态:待处理`
|
||||
- 已登记完成的直接公共组件中文命中仅剩注释、已注释代码,或 `src/components/data/AccountHanle/index.vue` 中提交给接口的默认警告内容
|
||||
- `src/components/data/UserRegistrationOverviewCharts/index.vue` 命中的“系统”位于已注释旧筛选代码中,不参与页面展示
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程二已完成:
|
||||
- `src/views/team/team-list/index.vue`
|
||||
- `src/views/team/team-list/bind-bd.vue`
|
||||
- `src/views/team/team-list/team-application-process-drawer.vue`
|
||||
- `src/views/team/team-list/team-contact.vue`
|
||||
- `src/views/team/team-list/team-edit.vue`
|
||||
- `src/views/team/team-list/team-notice-list-drawer.vue`
|
||||
- `src/views/team/team-list/team-notice-send-drawer.vue`
|
||||
- `src/views/team/team-list/team-remark.vue`
|
||||
- `src/views/team/team-list/team-status.vue`
|
||||
- `src/views/team/team-list/team-switch-own.vue`
|
||||
- `src/views/team/components/ProcessApprovalDrawer/index.vue`
|
||||
- 对应主要路由:
|
||||
- 主播中心 / Broadcaster Center
|
||||
- 代理列表 / Agent List
|
||||
- 本轮范围:
|
||||
- 入口页、同目录页面内组件 / 私有组件、页面直接渲染的 `src/components/**` 公共组件
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、枚举实际值、表单提交值或接口返回动态数据
|
||||
- 已完成内容:
|
||||
- 入口页筛选区、表格列头、状态展示、操作菜单、加载更多、无权限提示、删除确认与提交中提示已国际化
|
||||
- 绑定 BD、团队申请、联系方式、修改资料、通知记录、发送通知、备注、状态变更、更换团长、申请日志抽屉/弹窗已国际化
|
||||
- 新增 `pages.teamList`,状态、申请原因、审核日志原因均保留原枚举 value,仅在展示层通过 `$t` 映射
|
||||
- 直接公共组件状态:
|
||||
- `src/views/team/components/TeamCreate/index.vue`:历史已完成,本轮复核引用
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`:历史已完成,本轮复核中文扫描无命中
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`:历史已完成
|
||||
- `src/components/data/SelectSystemRegion/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` 语法校验通过
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 带 `NODE_OPTIONS=--openssl-legacy-provider` 的构建在当前 Node 下被拒绝,已改用普通构建命令验证通过
|
||||
- 完成后线程二状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/user/user-table/index.vue`
|
||||
- 对应主要路由:
|
||||
- 用户管理 / User Management
|
||||
- 用户列表 / User List
|
||||
- 本轮复核范围:
|
||||
- 用户列表入口页与其直接渲染/注册的公共组件,包括流水、奖励、扣除、违规记录、账号处理、账号处理记录、认证信息、银行卡、充值记录、注册概览、用户详情等弹窗/抽屉组件
|
||||
- 本轮目标:
|
||||
- 收口 `主要路由.md` 中 `用户列表 / User List` 的“页面本体已完成,直接公共组件待联动复核”状态
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、表单提交值或接口返回动态数据
|
||||
- 直接公共组件复核结论:
|
||||
- 入口页与直接公共组件没有需要继续处理的可见静态中文
|
||||
- `src/views/user/user-table/index.vue` 命中的中文为注释或已注释代码
|
||||
- `src/components/data/GoldRunningWaterDialog/index.vue`、`src/components/data/UserVideoViolationTableDialog/index.vue`、`src/components/data/EditUserGoldCoinRewardForm/index.vue` 命中的中文为注释
|
||||
- `src/components/data/UserRegistrationOverviewCharts/index.vue` 命中的“系统”位于已注释旧筛选代码
|
||||
- `src/components/data/AccountHanle/index.vue` 默认警告语属于提交给接口的业务内容,按规则保留
|
||||
- 已完成验证:
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮未修改源码,仅更新协作文档状态
|
||||
- 完成后线程一状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/approval/avatar-approval/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户头像 / User Avatar
|
||||
- 已完成内容:
|
||||
- 筛选区、日期选择、性别/审批状态展示映射、选择文案、用户信息卡片按钮、批量审批按钮、确认提示、操作成功/失败提示等可见静态文案已国际化
|
||||
- 新增 `pages.userAvatarApproval`
|
||||
- 补充 `pages.userDetailsDrawer.title` 与无权限提示文案
|
||||
- 直接公共组件状态:
|
||||
- `src/components/Pagination/index.vue`:中文扫描无命中
|
||||
- `src/components/data/EditUserForm/index.vue`:历史已完成,本轮复核中文扫描无命中
|
||||
- `src/components/data/AccountHanle/index.vue`:默认警告语属于提交给接口的业务内容,按规则保留
|
||||
- `src/components/data/AccountInput/index.vue`:中文扫描无命中
|
||||
- `src/components/SysOriginIcon/index.vue`:中文扫描无命中
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`:已补充可见静态文案国际化
|
||||
- 已完成验证:
|
||||
- 目标范围中文残留仅剩 `src/components/data/AccountHanle/index.vue` 默认警告语,属于接口业务内容
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮改动未使用 `$te`
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 本轮未修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批类型实际值、审批状态实际值、性别实际值、表单提交值或接口返回动态数据
|
||||
- 线程一当前状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已新认领:
|
||||
- `src/views/approval/avatar-approval/index.vue`
|
||||
- 对应主要路由:
|
||||
- 审批管理 / Approval Management
|
||||
- 用户头像 / User Avatar
|
||||
- 直接公共组件复核:
|
||||
- `src/components/Pagination/index.vue`
|
||||
- `src/components/data/EditUserForm/index.vue`
|
||||
- `src/components/data/AccountHanle/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/SysOriginIcon/index.vue`
|
||||
- `src/components/data/UserDeatilsDrawer/index.vue`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、审批类型实际值、审批状态实际值、性别实际值、表单提交值或接口返回动态数据
|
||||
- `src/components/data/AccountHanle/index.vue` 中默认警告内容属于提交给接口的业务内容,保持原值
|
||||
- 领取时线程一状态:进行中
|
||||
|
||||
- 2026-05-08 线程一已完成:
|
||||
- `src/views/team/team-bill/index.vue`
|
||||
- `src/views/team/team-bill/details-drawer.vue`
|
||||
- `src/views/team/team-bill/team-bill-internal-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-settle.vue`
|
||||
- `src/views/team/team-bill/team-bill-status.vue`
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`
|
||||
- 对应主要路由:
|
||||
- 主播中心 / Broadcaster Center
|
||||
- 账单列表 / Bill List
|
||||
- 已完成内容:
|
||||
- 筛选区、导出抽屉、表格列头、状态/结算类型展示映射、详情抽屉、备注抽屉、状态变更抽屉、结算抽屉、校验提示与操作提示等可见静态文案已国际化
|
||||
- 新增 `pages.teamBill`
|
||||
- 账单状态和结算类型仍使用原接口实际值,仅在展示层通过 `$t` 映射文案
|
||||
- 直接公共组件状态:
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`:默认 placeholder 改为展示层 `$t('common.select')`,未改传参逻辑
|
||||
- `src/components/data/SelectSystemRegion/index.vue`:中文扫描无命中
|
||||
- `src/components/data/AccountInput/index.vue`:中文扫描无命中
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`:中文扫描无命中
|
||||
- 已完成验证:
|
||||
- `src/views/team/team-bill/*.vue` 中文残留仅在已注释的历史模板块中,不属于可见展示文案
|
||||
- `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` 语法校验通过
|
||||
- 本轮改动未使用 `$te`
|
||||
- `npm run build:prod` 通过,仍为项目既有 `17` 条 warning
|
||||
- 本轮未修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、账单状态实际值、结算类型实际值、工资计算值、表单提交值或接口返回动态数据
|
||||
- 线程一当前状态:待分配
|
||||
|
||||
- 2026-05-08 线程一已新认领:
|
||||
- `src/views/team/team-bill/index.vue`
|
||||
- `src/views/team/team-bill/details-drawer.vue`
|
||||
- `src/views/team/team-bill/team-bill-internal-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-remark.vue`
|
||||
- `src/views/team/team-bill/team-bill-settle.vue`
|
||||
- `src/views/team/team-bill/team-bill-status.vue`
|
||||
- `src/views/team/components/TeamDetailsDrawer/index.vue`
|
||||
- 对应主要路由:
|
||||
- 主播中心 / Broadcaster Center
|
||||
- 账单列表 / Bill List
|
||||
- 直接公共组件复核:
|
||||
- `src/components/data/SysOriginPermissionSelect/index.vue`
|
||||
- `src/components/data/SelectSystemRegion/index.vue`
|
||||
- `src/components/data/AccountInput/index.vue`
|
||||
- `src/components/data/UserInfo/UserTableExhibit/index.vue`
|
||||
- 本轮不修改:
|
||||
- 接口参数、查询字段、路由路径、权限码、账单状态实际值、结算状态实际值、工资计算值、表单提交值或接口返回动态数据
|
||||
- 领取时线程一状态:进行中
|
||||
|
||||
- 线程二已完成:
|
||||
- `src/views/team/team-member/index.vue`
|
||||
@ -1186,57 +1633,11 @@
|
||||
|
||||
## 已完成
|
||||
|
||||
### 主要路由完成摘要
|
||||
### 主要路由状态总览
|
||||
|
||||
- 详细父子级结构、路由别名、路径与验收入口统一见 `docs/i18n/主要路由.md`
|
||||
- 以下摘要已按 `docs/i18n/主要路由.md` 当前父子级顺序同步更新
|
||||
- 已完成主路由摘要:
|
||||
- 系统管理 / System Management
|
||||
- 用户管理 / User Management
|
||||
- 角色管理 / Role Management
|
||||
- 菜单管理 / Menu Management
|
||||
- App系统 / App System
|
||||
- 版本管理 / Version Management
|
||||
- 请求黑名单 / Request Blacklist
|
||||
- 用户管理 / User Management
|
||||
- 用户列表 / User List(页面本体已完成,直接公共组件待联动复核)
|
||||
- 封禁设备列表 / Blocked Device List
|
||||
- 最新登记设备 / Latest Registered Devices
|
||||
- 运营管理 / Operations Management
|
||||
- 营收支出 / Revenue and Expenses
|
||||
- 消费商品订单 / Purchase Orders
|
||||
- 金币收支记录 / Gold Transaction Records
|
||||
- 数据配置 / Data Configuration
|
||||
- 参数配置 / Parameter Settings
|
||||
- 幸运礼物规则配置 / Lucky Gift Rule Configuration
|
||||
- 幸运礼物规格配置 / Lucky Gift Specification Configuration
|
||||
- 靓号管理(角色) / Special ID Management (Role)
|
||||
- 游戏列表 / Game List
|
||||
- 房间主题管理 / Room Theme Management
|
||||
- 国家管理 / Country Management
|
||||
- IM账号管理 / IM Account Management
|
||||
- 活动配置 / Activity Configuration
|
||||
- 活动管理 / Activity Management
|
||||
- 活动模版 / Activity Templates
|
||||
- 消息推送 / Message Push
|
||||
- APP管理员 / App Administrators
|
||||
- App启动页 / App Launch Page
|
||||
- 客服列表 / Customer Service List
|
||||
- 系统公告管理 / System Notice Management
|
||||
- 金币代理 / Gold Agents
|
||||
- 区域配置 / Region Configuration
|
||||
- 语音房间 / Voice Rooms
|
||||
- 房间资料列表 / Room Profile List
|
||||
- 道具管理 / Prop Management
|
||||
- 资源组配置 / Resource Group Configuration
|
||||
- 主播中心 / Broadcaster Center
|
||||
- 代理钻石政策 / Agent Diamond Policy
|
||||
- BD Lead / BD Lead
|
||||
- 代理政策 / Agent Policy
|
||||
- BD列表 / BD List
|
||||
- 家族管理 / Family Management
|
||||
- 家族配置 / Family Configuration
|
||||
- 家族列表 / Family List
|
||||
- 完整父子级结构、路由别名、路径、入口文件、完成状态、进行中项与未完成项,统一查看 `docs/i18n/主要路由.md` 的“当前主要路由状态总览(完成 / 进行中 / 未完成)”。
|
||||
- 本文件不再维护第二份主要路由完成摘要,避免多线程写入时和 `主要路由.md` 漂移。
|
||||
- 后续完成或认领主要路由时,只同步更新 `docs/i18n/主要路由.md` 的状态总览;本文件只记录阶段进展、构建验证与必要时间线。
|
||||
### 基础能力
|
||||
|
||||
- 已接入项目国际化基础能力
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="反馈处理"
|
||||
:title="$t('pages.feedback.drawer.title')"
|
||||
:visible="true"
|
||||
:modal-append-to-body="true"
|
||||
:append-to-body="true"
|
||||
@ -8,11 +8,11 @@
|
||||
:before-close="handleClose"
|
||||
>
|
||||
<el-form ref="form" v-loading="loading" :model="form" label-width="80px">
|
||||
<el-form-item label="处理结果">
|
||||
<el-form-item :label="$t('pages.feedback.drawer.result')">
|
||||
<el-input v-model="form.remarks" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submit()">提交</el-button>
|
||||
<el-button type="primary" @click="submit()">{{ $t('pages.feedback.drawer.submit') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
:multiple-limit="multipleLimit"
|
||||
:filterable="filterable"
|
||||
:clearable="clearable"
|
||||
:placeholder="placeholder"
|
||||
:placeholder="displayPlaceholder"
|
||||
collapse-tags
|
||||
@change="selectChanged"
|
||||
>
|
||||
@ -41,7 +41,7 @@ export default {
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择'
|
||||
default: ''
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
@ -72,6 +72,9 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissionsSysOriginPlatforms', 'permissionsSysOriginPlatformAlls']),
|
||||
displayPlaceholder() {
|
||||
return this.placeholder || this.$t('common.select')
|
||||
},
|
||||
permissionsSysOrigins() {
|
||||
const that = this
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="user-details-drawer">
|
||||
<el-drawer
|
||||
title="用户详情"
|
||||
:title="$t('pages.userDetailsDrawer.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -21,7 +21,7 @@
|
||||
</el-tabs>
|
||||
</div> -->
|
||||
</div>
|
||||
<div v-else style="padding: 20px;">权限不足,请联系管理员授权: 组件权限/用户资料面板/查看(user:profile:panel:query)</div>
|
||||
<div v-else style="padding: 20px;">{{ $t('pages.userDetailsDrawer.message.permissionDenied') }}</div>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</template>
|
||||
@ -46,7 +46,7 @@ export default {
|
||||
baseInfo: {},
|
||||
shortVideoVisiable: false,
|
||||
tabs: [
|
||||
{ component: 'PhotoWall', label: '照片墙' }
|
||||
{ component: 'PhotoWall', label: this.$t('pages.userDetailsDrawer.section.photoWall') }
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@ -96,7 +96,7 @@ export default {
|
||||
computed: {
|
||||
ratedisplay() {
|
||||
if (this.rate === 1) {
|
||||
return '倍速'
|
||||
return this.$t('pages.videoPlayer.playbackSpeed')
|
||||
} else {
|
||||
return this.rate + 'x'
|
||||
}
|
||||
|
||||
@ -553,6 +553,7 @@ export default {
|
||||
}
|
||||
},
|
||||
userDetailsDrawer: {
|
||||
title: 'User Details',
|
||||
section: {
|
||||
photoWall: 'Photo Wall'
|
||||
},
|
||||
@ -560,6 +561,9 @@ export default {
|
||||
candy: 'Candy',
|
||||
vip: 'VIP',
|
||||
mobileNumber: 'Mobile Number'
|
||||
},
|
||||
message: {
|
||||
permissionDenied: 'Insufficient permission. Please contact an administrator to grant: Component Permission / User Profile Panel / View (user:profile:panel:query)'
|
||||
}
|
||||
},
|
||||
accountHandle: {
|
||||
@ -604,6 +608,353 @@ export default {
|
||||
dayPlural: '{days} days'
|
||||
}
|
||||
},
|
||||
userAvatarApproval: {
|
||||
filter: {
|
||||
system: 'System',
|
||||
approvalStatus: 'Review Status',
|
||||
userId: 'User ID',
|
||||
gender: 'Gender'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
editUser: 'Edit User',
|
||||
accountHandle: 'Account Handling',
|
||||
pass: 'Approve',
|
||||
reject: 'Reject'
|
||||
},
|
||||
selection: {
|
||||
all: 'Select All',
|
||||
selected: 'Selected'
|
||||
},
|
||||
label: {
|
||||
nickname: 'Nickname',
|
||||
gender: 'Gender',
|
||||
age: 'Age',
|
||||
selectedCount: 'Selected'
|
||||
},
|
||||
approvalStatus: {
|
||||
PASS: 'Approved',
|
||||
NOT_PASS: 'Rejected',
|
||||
PENDING: 'Pending Review'
|
||||
},
|
||||
gender: {
|
||||
male: 'Male',
|
||||
female: 'Female'
|
||||
},
|
||||
confirm: {
|
||||
title: 'Prompt'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: 'Please select review items',
|
||||
confirmApproval: 'Are you sure you want to review the selected records?',
|
||||
success: 'Successful',
|
||||
failure: 'Failed',
|
||||
genderChangeSuccess: "{nickname}'s gender was changed to '{gender}'",
|
||||
genderChangeFailed: "Failed to change {nickname}'s gender"
|
||||
}
|
||||
},
|
||||
userPhotoWallApproval: {
|
||||
filter: {
|
||||
status: 'Status',
|
||||
userId: 'User ID',
|
||||
nickname: 'Nickname',
|
||||
gender: 'Gender'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
editUser: 'Edit User',
|
||||
pass: 'Approve',
|
||||
reject: 'Reject as Violation'
|
||||
},
|
||||
selection: {
|
||||
all: 'Select All',
|
||||
selected: 'Selected'
|
||||
},
|
||||
label: {
|
||||
nickname: 'Nickname',
|
||||
gender: 'Gender',
|
||||
age: 'Age',
|
||||
tags: 'Tags',
|
||||
selectedCount: 'Selected'
|
||||
},
|
||||
approvalStatus: {
|
||||
NORMAL: 'Normal',
|
||||
VIOLATION: 'Violation',
|
||||
SUSPECTED: 'Pending Manual Review'
|
||||
},
|
||||
gender: {
|
||||
male: 'Male',
|
||||
female: 'Female'
|
||||
},
|
||||
confirm: {
|
||||
title: 'Prompt'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: 'Please select review items',
|
||||
confirmApproval: 'Are you sure you want to review the selected records?',
|
||||
success: 'Successful'
|
||||
}
|
||||
},
|
||||
roomCoverApproval: {
|
||||
filter: {
|
||||
system: 'System',
|
||||
roomAccount: 'Room Account',
|
||||
userId: 'User ID',
|
||||
approvalStatus: 'Review Status'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
editUser: 'Edit User',
|
||||
accountHandle: 'Account Handling',
|
||||
pass: 'Approve',
|
||||
reject: 'Reject as Violation'
|
||||
},
|
||||
selection: {
|
||||
all: 'Select All',
|
||||
selected: 'Selected'
|
||||
},
|
||||
popover: {
|
||||
details: 'Details'
|
||||
},
|
||||
label: {
|
||||
roomId: 'Room ID',
|
||||
userId: 'User ID',
|
||||
nickname: 'Nickname',
|
||||
gender: 'Gender',
|
||||
age: 'Age',
|
||||
selectedCount: 'Selected'
|
||||
},
|
||||
approvalStatus: {
|
||||
PASS: 'Approved',
|
||||
NOT_PASS: 'Rejected',
|
||||
PENDING: 'Pending Review'
|
||||
},
|
||||
gender: {
|
||||
male: 'Male',
|
||||
female: 'Female'
|
||||
},
|
||||
confirm: {
|
||||
title: 'Prompt'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: 'Please select review items',
|
||||
confirmApproval: 'Are you sure you want to review the selected records?',
|
||||
success: 'Successful'
|
||||
}
|
||||
},
|
||||
userNicknameApproval: {
|
||||
filter: {
|
||||
system: 'System',
|
||||
userId: 'User ID',
|
||||
approvalStatus: 'Review Status'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
userDetails: 'User Details',
|
||||
accountHandle: 'Account Handling',
|
||||
pass: 'Approve',
|
||||
reject: 'Reject as Violation'
|
||||
},
|
||||
table: {
|
||||
userId: 'User ID',
|
||||
nickname: 'Nickname',
|
||||
updateTime: 'Updated At',
|
||||
actions: 'Actions'
|
||||
},
|
||||
label: {
|
||||
selectedCount: 'Selected'
|
||||
},
|
||||
approvalStatus: {
|
||||
PASS: 'Approved',
|
||||
NOT_PASS: 'Rejected',
|
||||
PENDING: 'Pending Review'
|
||||
},
|
||||
confirm: {
|
||||
title: 'Prompt'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: 'Please select review items',
|
||||
confirmApproval: 'Are you sure you want to review the selected records?',
|
||||
success: 'Successful'
|
||||
}
|
||||
},
|
||||
userProfileDescApproval: {
|
||||
filter: {
|
||||
userId: 'User ID',
|
||||
approvalStatus: 'Review Status'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
userDetails: 'User Details',
|
||||
pass: 'Approve',
|
||||
reject: 'Reject as Violation'
|
||||
},
|
||||
table: {
|
||||
nickname: 'Nickname',
|
||||
signature: 'Signature',
|
||||
updateTime: 'Updated At',
|
||||
actions: 'Actions'
|
||||
},
|
||||
label: {
|
||||
selectedCount: 'Selected'
|
||||
},
|
||||
approvalStatus: {
|
||||
PASS: 'Approved',
|
||||
NOT_PASS: 'Rejected',
|
||||
PENDING: 'Pending Review'
|
||||
},
|
||||
confirm: {
|
||||
title: 'Prompt'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: 'Please select review items',
|
||||
confirmApproval: 'Are you sure you want to review the selected records?'
|
||||
}
|
||||
},
|
||||
feedback: {
|
||||
filter: {
|
||||
system: 'System',
|
||||
userId: 'Feedback User ID',
|
||||
approvalStatus: 'Review Status',
|
||||
backendMember: 'Backend Member'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
batchProcess: 'Batch Process',
|
||||
process: 'Process'
|
||||
},
|
||||
detail: {
|
||||
phoneModel: 'Phone Model',
|
||||
appVersion: 'App Version',
|
||||
deviceId: 'Device ID',
|
||||
content: 'Feedback Content',
|
||||
remarks: 'Remarks',
|
||||
latestProcessor: 'Latest Processor'
|
||||
},
|
||||
table: {
|
||||
system: 'System',
|
||||
feedbackUser: 'Feedback User',
|
||||
processStatus: 'Process Status',
|
||||
createdAt: 'Created At',
|
||||
updatedAt: 'Updated At',
|
||||
actions: 'Actions'
|
||||
},
|
||||
status: {
|
||||
notLoggedIn: 'Not Logged In'
|
||||
},
|
||||
approvalStatus: {
|
||||
unprocessed: 'Unprocessed',
|
||||
processed: 'Processed',
|
||||
pending: 'Pending'
|
||||
},
|
||||
confirm: {
|
||||
title: 'Prompt'
|
||||
},
|
||||
message: {
|
||||
selectUnprocessedFirst: 'Please select "{status}" in review status before operating',
|
||||
selectApprovalItem: 'Please select review items',
|
||||
confirmApproval: 'Are you sure you want to review the selected records?',
|
||||
batchProcessSuccess: 'Batch processing successful'
|
||||
},
|
||||
drawer: {
|
||||
title: 'Feedback Processing',
|
||||
result: 'Result',
|
||||
submit: 'Submit'
|
||||
}
|
||||
},
|
||||
videoPlayer: {
|
||||
playbackSpeed: 'Speed'
|
||||
},
|
||||
userReportApproval: {
|
||||
filter: {
|
||||
system: 'System',
|
||||
status: 'Status',
|
||||
reportType: 'Report Type',
|
||||
reporterId: 'Reporter ID',
|
||||
reportedUserId: 'Reported User ID',
|
||||
adminMember: 'Admin Member'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
accountHandle: 'Account Handling',
|
||||
valid: 'Valid',
|
||||
invalid: 'Invalid'
|
||||
},
|
||||
tag: {
|
||||
report: 'Reported',
|
||||
suspected: 'Suspected'
|
||||
},
|
||||
label: {
|
||||
reportContent: 'Report Content',
|
||||
latestHandler: 'Latest Handler',
|
||||
selectedCount: 'Selected'
|
||||
},
|
||||
table: {
|
||||
reportType: 'Report Type',
|
||||
createTime: 'Created At',
|
||||
updateTime: 'Updated At',
|
||||
actions: 'Actions'
|
||||
},
|
||||
description: {
|
||||
title: 'Action Description',
|
||||
noDirectAction: 'Report review does not directly change user information or resources. Any handling must be done in the corresponding resource module.',
|
||||
valid: '* Valid: the report is valid, and the system will issue the candy reward configured in Parameter Settings to the reporting user.',
|
||||
invalid: '* Invalid: the report is invalid.'
|
||||
},
|
||||
reportStatus: {
|
||||
0: 'Pending Review',
|
||||
1: 'Valid Report',
|
||||
2: 'Invalid Report'
|
||||
},
|
||||
reportType: {
|
||||
0: 'Illegal Information',
|
||||
1: 'Personal Attack',
|
||||
2: 'Inappropriate Content',
|
||||
3: 'Spam',
|
||||
4: 'Fraud',
|
||||
5: 'Sexual Content'
|
||||
},
|
||||
confirm: {
|
||||
title: 'Prompt'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: 'Please select review items',
|
||||
confirmApproval: 'Are you sure you want to review the selected records?',
|
||||
success: 'Successful',
|
||||
copySuccess: 'Copied successfully',
|
||||
copyFailed: 'Copy failed'
|
||||
}
|
||||
},
|
||||
accountInput: {
|
||||
placeholder: {
|
||||
type: 'Type',
|
||||
@ -1541,6 +1892,178 @@ export default {
|
||||
createdAt: 'Created At'
|
||||
}
|
||||
},
|
||||
userDiamondRunWater: {
|
||||
loading: 'Loading',
|
||||
filter: {
|
||||
system: 'System',
|
||||
userId: 'User ID',
|
||||
type: 'Type',
|
||||
origin: 'Please enter or select content'
|
||||
},
|
||||
action: {
|
||||
search: 'Search'
|
||||
},
|
||||
type: {
|
||||
income: 'Income',
|
||||
expense: 'Expense'
|
||||
},
|
||||
table: {
|
||||
user: 'User',
|
||||
diamondBalance: 'Diamond Balance',
|
||||
diamond: 'Diamond',
|
||||
source: 'Source',
|
||||
sourceDescription: 'Source Description',
|
||||
type: 'Type',
|
||||
remarks: 'Remarks',
|
||||
createdAt: 'Created At'
|
||||
},
|
||||
origin: {
|
||||
ACTIVITY_REWARD: 'Activity Reward',
|
||||
ROOM_SUPPORT_REWARD: 'Room Support Reward',
|
||||
ROOM_HOMEOWNER_SUPPORT_REWARD: 'Room Support Reward - Room Owner Reward',
|
||||
CP_REWARD: 'CP Reward',
|
||||
GAME_BURST_CRYSTAL: 'Crystal Burst Game',
|
||||
ROOM_REWARD: 'Room Reward',
|
||||
WEEK_STAR: 'Weekly Star',
|
||||
INVITED_NEW_USER_REWARD: 'Invited New User Registration Reward',
|
||||
INVITED_USER_FIRST_RECHARGE_REWARD: 'Invited User First Recharge Reward',
|
||||
INVITE_REGISTER: 'Invite User Registration',
|
||||
INVITE_FIRST_RECHARGE: 'Invited User First Recharge',
|
||||
INVITED_USER_EACH_RECHARGE: 'Invited User Recharge Percentage Reward',
|
||||
PURCHASE_NOBLE_VIP: 'Purchase Noble VIP',
|
||||
PURCHASE_NOBLE_VIP_GIVEAWAY: 'Purchase Gifted Noble VIP - Diamond',
|
||||
PURCHASING_AVATAR_FRAME: 'Purchase Avatar Frame - Diamond',
|
||||
PURCHASING_DATA_CARD: 'Purchase Profile Card - Diamond',
|
||||
PURCHASING_CHAT_BUBBLE: 'Purchase Chat Bubble - Diamond',
|
||||
PURCHASING_CAR: 'Purchase Vehicle - Diamond',
|
||||
PURCHASING_LAYOUT: 'Purchase Outfit - Diamond',
|
||||
PURCHASING_AVATAR_FRAME_GIVEAWAY: 'Gift Avatar Frame - Diamond',
|
||||
PURCHASING_DATA_CARD_GIVEAWAY: 'Purchase Profile Card - Diamond',
|
||||
PURCHASING_CHAT_BUBBLE_GIVEAWAY: 'Gift Chat Bubble - Diamond',
|
||||
PURCHASING_THEME: 'Purchase Theme - Diamond',
|
||||
PURCHASING_THEME_GIVEAWAY: 'Gift Theme - Diamond',
|
||||
PURCHASING_CAR_GIVEAWAY: 'Gift Vehicle',
|
||||
PURCHASING_LAYOUT_GIVEAWAY: 'Gift Outfit',
|
||||
GIVE_GIFT: 'Send Gift',
|
||||
ACCEPT_GIFT: 'Receive Gift',
|
||||
COMPENSATE: 'Compensation',
|
||||
REMOVE: 'Violation Deduction',
|
||||
WEEK_USER_CONSUME: 'King and Queen Ranking',
|
||||
DIAMOND_EXCHANGE_GOLD: 'Diamond-to-Gold Exchange',
|
||||
LIVE_BROADCAST_INTEGRAL: 'Live Stream Points',
|
||||
DAILY_TASK: 'Daily Task',
|
||||
CHECK_IN_DIAMOND: 'Diamond Check-in',
|
||||
CUMULATIVE_RECHARGE_REWARDS: 'Cumulative Recharge Reward',
|
||||
OFFICIAL_GIFT: 'Official Gift',
|
||||
EXPIRED: 'Expired',
|
||||
INVITE_USER_RED_PACKET_LOTTERY: 'Invite User Red Packet Draw',
|
||||
REWARD_DIAMOND: 'Backend Diamond Reward',
|
||||
DEDUCT_DIAMOND: 'Backend Diamond Deduction'
|
||||
}
|
||||
},
|
||||
userDiamondBalance: {
|
||||
filter: {
|
||||
userId: 'User ID'
|
||||
},
|
||||
action: {
|
||||
search: 'Search'
|
||||
},
|
||||
table: {
|
||||
user: 'User',
|
||||
balance: 'Balance',
|
||||
createdAt: 'Created At'
|
||||
}
|
||||
},
|
||||
integralStream: {
|
||||
tab: {
|
||||
current: 'Points Transactions',
|
||||
history: 'Historical Points Transactions'
|
||||
},
|
||||
filter: {
|
||||
userId: 'User ID',
|
||||
origin: 'Points Source'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search'
|
||||
},
|
||||
alert: {
|
||||
title: 'Notice',
|
||||
retention: 'Data is retained for only 30 days.'
|
||||
},
|
||||
table: {
|
||||
nickname: 'Nickname',
|
||||
sourceObject: 'Source Object',
|
||||
pointsOrigin: 'Points Source',
|
||||
points: 'Points Earned',
|
||||
createdAt: 'Created At'
|
||||
},
|
||||
origin: {
|
||||
CLUB: 'Club Chat',
|
||||
VIDEO_ACTIVE_CALL: 'Video Call',
|
||||
VIDEO_MATCH_ALL: 'Match All',
|
||||
VIDEO_CONDITION_FEMALE: 'Match Female Users',
|
||||
VIDEO_CONDITION_GODDESS: 'Match Goddess Users',
|
||||
CHAT_CONSUME_CANDY: 'Text Chat',
|
||||
GIFT: 'Send Gift',
|
||||
SHORT_VIDEO_WATCH_AD_SETTLE_ACCOUNTS: 'Short Video Ad Settlement'
|
||||
}
|
||||
},
|
||||
userFreightInfoList: {
|
||||
filter: {
|
||||
system: 'System',
|
||||
sender: 'Sender',
|
||||
receiver: 'Receiver',
|
||||
origin: 'Source'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
export: 'Export',
|
||||
close: 'Close'
|
||||
},
|
||||
table: {
|
||||
system: 'System',
|
||||
user: 'User',
|
||||
receiver: 'Receiver',
|
||||
type: 'Type',
|
||||
quantity: 'Quantity',
|
||||
balance: 'Balance',
|
||||
origin: 'Source',
|
||||
remark: 'Remark',
|
||||
createdAt: 'Created At'
|
||||
},
|
||||
type: {
|
||||
income: 'Income',
|
||||
expense: 'Expense'
|
||||
},
|
||||
origin: {
|
||||
SHIPMENT: 'Shipment',
|
||||
PURCHASE: 'Purchase',
|
||||
DEDUCTION: 'Deduction'
|
||||
},
|
||||
exportDialog: {
|
||||
title: 'Export Conditions',
|
||||
system: 'System',
|
||||
month: 'Month',
|
||||
selectMonth: 'Select Month'
|
||||
},
|
||||
validation: {
|
||||
requiredField: 'Required field cannot be empty'
|
||||
},
|
||||
message: {
|
||||
exporting: 'Export in progress, please wait',
|
||||
downloadFailed: 'Download failed'
|
||||
}
|
||||
},
|
||||
salaryDiamondRunningWaterDialog: {
|
||||
loading: 'Loading',
|
||||
dialog: {
|
||||
@ -2367,6 +2890,178 @@ export default {
|
||||
success: 'Successful'
|
||||
}
|
||||
},
|
||||
teamList: {
|
||||
filter: {
|
||||
region: 'Region',
|
||||
status: 'Status',
|
||||
agentId: 'Agent ID',
|
||||
memberQuantityRange: 'Start~End Member Count',
|
||||
dateRangeSeparator: 'To',
|
||||
startDate: 'Start Date',
|
||||
endDate: 'End Date',
|
||||
backendMember: 'Backend Member'
|
||||
},
|
||||
table: {
|
||||
agent: 'Agent',
|
||||
info: 'Info',
|
||||
member: 'Members',
|
||||
status: 'Status',
|
||||
available: 'Active',
|
||||
close: 'Closed',
|
||||
region: 'Region',
|
||||
remark: 'Remarks',
|
||||
createdBy: 'Created By',
|
||||
updatedBy: 'Updated By',
|
||||
time: 'Time',
|
||||
createdAt: 'Created',
|
||||
updatedAt: 'Updated',
|
||||
actions: 'Actions'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
add: 'Add',
|
||||
delete: 'Delete',
|
||||
details: 'Details',
|
||||
editProfile: 'Edit Profile',
|
||||
bindBd: 'Bind BD',
|
||||
remarks: 'Remarks',
|
||||
contact: 'Contact',
|
||||
sendNotice: 'Send Notice',
|
||||
noticeRecords: 'Notice Records',
|
||||
teamApplications: 'Team Applications',
|
||||
query: 'Search',
|
||||
loadMore: 'Load More',
|
||||
allLoaded: 'All loaded',
|
||||
close: 'Close',
|
||||
save: 'Save',
|
||||
cancel: 'Cancel',
|
||||
confirm: 'Confirm',
|
||||
submit: 'Submit'
|
||||
},
|
||||
confirm: {
|
||||
deleteTitle: 'Reminder',
|
||||
deleteMessage: 'The system will remove all team data. This action cannot be undone. (Host work, bills, team information, team members, BD relationships, and more.)',
|
||||
confirmDeleteNotice: 'Are you sure you want to delete this notice?',
|
||||
sendNotice: 'Are you sure you want to send this notice?',
|
||||
changeRegionMessage: 'Changing the agent team region will clear all host targets under this agent. Continue?'
|
||||
},
|
||||
permission: {
|
||||
validating: 'Validating permissions...',
|
||||
deniedPrefix: 'Sorry, you do not have permission to view this page. Please contact the administrator to grant access.',
|
||||
deniedCode: '[Broadcaster Center / Agent List: (team:list:query:all/team:list:query:self)]'
|
||||
},
|
||||
validation: {
|
||||
requiredField: 'Required fields cannot be empty',
|
||||
titleRequired: 'Please enter a title',
|
||||
contentRequired: 'Please enter content'
|
||||
},
|
||||
message: {
|
||||
submitting: 'Submitting!',
|
||||
maxRemarks: 'You can add up to 20 remarks. Please delete unnecessary remarks before adding more.'
|
||||
},
|
||||
statusMap: {
|
||||
AVAILABLE: 'Active',
|
||||
CLOSE: 'Closed'
|
||||
},
|
||||
processStatusMap: {
|
||||
WAIT: 'Pending',
|
||||
AGREE: 'Approved',
|
||||
REJECT: 'Rejected'
|
||||
},
|
||||
reasonMap: {
|
||||
JOIN: 'Join',
|
||||
QUIT: 'Leave',
|
||||
EXIT: 'Leave'
|
||||
},
|
||||
approvalReasonMap: {
|
||||
MEMBER_JOIN: 'Member Joined',
|
||||
MEMBER_QUIT: 'Member Left',
|
||||
MEMBER_OWN_REMOVE: 'Agent Removed Member',
|
||||
MEMBER_ADMIN_REMOVE: 'Admin Removed Member',
|
||||
MEMBER_APPLY_TIME_OUT: 'Application timed out and user left automatically',
|
||||
REMOVE_MEMBER_NOT_ACTIVE: 'Removed inactive member',
|
||||
SYSTEM_MEMBER_REMOVE: 'Removed automatically by system check',
|
||||
SWITCH_TEAM_OWN: 'Changed team owner',
|
||||
SWITCH_TEAM_REMOVE: 'Removed during team switch'
|
||||
},
|
||||
bindBd: {
|
||||
title: 'Bind BD',
|
||||
bdAccount: 'Enter BD account'
|
||||
},
|
||||
applicationProcess: {
|
||||
title: 'Team Member Applications',
|
||||
status: 'Review Status',
|
||||
reason: 'Reason',
|
||||
applicationType: 'Application Type',
|
||||
reviewStatus: 'Review Status',
|
||||
createdBy: 'Created By',
|
||||
updatedBy: 'Updated By'
|
||||
},
|
||||
contact: {
|
||||
title: 'Contact',
|
||||
emptyTip: 'Click the button below to add contact information.',
|
||||
type: 'Type',
|
||||
contact: 'Contact',
|
||||
remark: 'Remark',
|
||||
dialogTitle: 'Contact',
|
||||
selectType: 'Select a type',
|
||||
contactPlaceholder: 'Enter contact information',
|
||||
remarkPlaceholder: 'Enter a remark'
|
||||
},
|
||||
edit: {
|
||||
title: 'Team Profile',
|
||||
regionChangeWarning: 'Notice: Changing the agent team region will clear all host targets under this agent. Please proceed carefully.',
|
||||
region: 'Region',
|
||||
country: 'Country',
|
||||
settingInfo: 'Settings',
|
||||
memberQuantity: 'Member Quantity',
|
||||
maxMember: 'Maximum member quantity',
|
||||
hostSalaryToAgent: 'Agent Receives Host Salary',
|
||||
withdrawalEnabled: 'Allow Withdrawal'
|
||||
},
|
||||
noticeList: {
|
||||
title: 'Team Notice Records',
|
||||
titleLabel: 'Title',
|
||||
contentLabel: 'Content',
|
||||
sender: 'Sender'
|
||||
},
|
||||
noticeSend: {
|
||||
title: 'Send Team Notice',
|
||||
titleLabel: 'Title',
|
||||
content: 'Content',
|
||||
link: 'Link',
|
||||
cover: 'Cover'
|
||||
},
|
||||
remark: {
|
||||
title: 'Remarks',
|
||||
emptyTip: 'Click the button below to add a remark.',
|
||||
placeholder: 'Enter a remark'
|
||||
},
|
||||
teamStatus: {
|
||||
title: 'Status Change',
|
||||
warning: 'Closing the team will remove all team data. This action cannot be undone. (Host work, bills, team information, team members, BD relationships, and more.)',
|
||||
status: 'Status',
|
||||
close: 'Close',
|
||||
available: 'Start',
|
||||
remarks: 'Remarks'
|
||||
},
|
||||
switchOwn: {
|
||||
title: 'Change Team Owner',
|
||||
warning: 'Historical team work data may be cleared. BD relationships will remain if the team has not been dissolved.',
|
||||
agent: 'Agent',
|
||||
agentPlaceholder: 'Enter agent ID'
|
||||
},
|
||||
processApproval: {
|
||||
title: 'Team Application Logs',
|
||||
processedUserId: 'Processed User ID',
|
||||
reason: 'Reason',
|
||||
reasonLabel: 'Reason',
|
||||
processedUser: 'Processed User',
|
||||
operator: 'Operator',
|
||||
creator: 'Creator',
|
||||
createdAt: 'Created At'
|
||||
}
|
||||
},
|
||||
teamCreate: {
|
||||
dialog: {
|
||||
title: 'Create Agent'
|
||||
@ -5862,6 +6557,102 @@ export default {
|
||||
GAME_FRUIT_BOX_REWARD_TIMES: 'Fruit Game Box Draw Count Reward'
|
||||
}
|
||||
},
|
||||
propsResourceConfig: {
|
||||
filter: {
|
||||
system: 'System',
|
||||
type: 'Type',
|
||||
shelfStatus: 'Shelf Status',
|
||||
name: 'Name'
|
||||
},
|
||||
table: {
|
||||
code: 'Code',
|
||||
type: 'Type',
|
||||
name: 'Name',
|
||||
resource: 'Resource',
|
||||
shelfStatus: 'Shelf Status',
|
||||
basePrice: 'Base Price',
|
||||
actions: 'Actions'
|
||||
},
|
||||
form: {
|
||||
system: 'System',
|
||||
type: 'Type',
|
||||
cover: 'Cover',
|
||||
coverPreview: 'Cover Preview',
|
||||
roomSendCover: 'Room Send Image',
|
||||
roomNotOpened: 'Room Unopened Red Packet Image',
|
||||
roomOpened: 'Room Opened Red Packet Image',
|
||||
imSendCover: 'IM Send Image',
|
||||
imNotOpened: 'IM/Room Unopened Thumbnail',
|
||||
imOpened: 'IM/Room Opened Thumbnail',
|
||||
imOpenedTwo: 'IM/Room Opened Thumbnail 2',
|
||||
iosResource: 'iOS Resource',
|
||||
androidResource: 'Android Resource',
|
||||
roomBackground: 'Room Decoration Background',
|
||||
name: 'Name',
|
||||
code: 'Code',
|
||||
basePrice: 'Base Price'
|
||||
},
|
||||
placeholder: {
|
||||
nobleType: 'Noble Type',
|
||||
codeReadonly: 'Code cannot be modified after it is added',
|
||||
month: 'Select Month'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
add: 'Add',
|
||||
edit: 'Edit',
|
||||
sales: 'Sales',
|
||||
upload: 'Upload',
|
||||
save: 'Save',
|
||||
cancel: 'Cancel'
|
||||
},
|
||||
status: {
|
||||
onShelf: 'On Shelf',
|
||||
offShelf: 'Off Shelf',
|
||||
yes: 'Yes',
|
||||
no: 'No'
|
||||
},
|
||||
propsTypes: {
|
||||
AVATAR_FRAME: 'Avatar Frame',
|
||||
RIDE: 'Ride',
|
||||
NOBLE_VIP: 'Noble',
|
||||
THEME: 'Theme',
|
||||
LAYOUT: 'Decoration',
|
||||
CHAT_BUBBLE: 'Chat Bubble',
|
||||
FLOAT_PICTURE: 'Floating Image',
|
||||
FRAGMENTS: 'Fragments',
|
||||
DATA_CARD: 'Profile Card',
|
||||
SPECIAL_ID: 'Special ID',
|
||||
CUSTOMIZE: 'Custom (Read-only)',
|
||||
RED_PACKET: 'Red Packet Cover'
|
||||
},
|
||||
nobleVipTypes: {
|
||||
VISCOUNT: 'Viscount',
|
||||
EARL: 'Earl',
|
||||
MARQUIS: 'Marquis',
|
||||
DUKE: 'Duke',
|
||||
KING: 'King',
|
||||
EMPEROR: 'Emperor'
|
||||
},
|
||||
dialog: {
|
||||
salesReport: 'Sales Report'
|
||||
},
|
||||
summary: {
|
||||
monthTotal: 'Monthly Sales Total',
|
||||
yearTotal: 'Yearly Sales Total',
|
||||
separator: ', '
|
||||
},
|
||||
chart: {
|
||||
dailySales: 'Daily Sales'
|
||||
},
|
||||
message: {
|
||||
noPermission: 'Sorry, you do not have permission to view this page. Please contact an administrator to enable View permission for Prop Management - Resource Configuration, props:config:query',
|
||||
uploadSvgaTip: 'Only svga/pag/mp4 files can be uploaded'
|
||||
},
|
||||
validation: {
|
||||
required: 'Required field cannot be empty'
|
||||
}
|
||||
},
|
||||
propsStore: {
|
||||
filter: {
|
||||
system: 'System',
|
||||
@ -6746,6 +7537,142 @@ export default {
|
||||
roomTransactions: 'Room Transactions'
|
||||
}
|
||||
},
|
||||
teamBill: {
|
||||
loading: 'Loading',
|
||||
placeholder: {
|
||||
region: 'Region',
|
||||
billStatus: 'Bill Status',
|
||||
agentId: 'Agent ID',
|
||||
billId: 'Bill ID',
|
||||
selectMonth: 'Select Month',
|
||||
remarks: 'Please enter remarks',
|
||||
selectRegion: 'Please select a region',
|
||||
selectPolicy: 'Please select a policy',
|
||||
selectSettleType: 'Please select a settlement type',
|
||||
goldQuantity: 'Please enter the gold amount. The system will not send it automatically.',
|
||||
salaryQuantity: 'Please enter salary USD'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: 'To',
|
||||
start: 'Start Date',
|
||||
end: 'End Date'
|
||||
},
|
||||
action: {
|
||||
search: 'Search',
|
||||
export: 'Export',
|
||||
details: 'Details',
|
||||
loadMore: 'Load More',
|
||||
loadedAll: 'All Loaded',
|
||||
cancel: 'Cancel',
|
||||
confirm: 'Confirm',
|
||||
close: 'Close',
|
||||
save: 'Save',
|
||||
add: 'Add'
|
||||
},
|
||||
table: {
|
||||
agent: 'Agent',
|
||||
region: 'Region',
|
||||
belong: 'Belonging',
|
||||
salary: 'Salary',
|
||||
updatedBy: 'Updated By',
|
||||
time: 'Time',
|
||||
actions: 'Actions'
|
||||
},
|
||||
label: {
|
||||
memberAgent: 'Member/Agent',
|
||||
total: 'Total',
|
||||
created: 'Created',
|
||||
updated: 'Updated',
|
||||
region: 'Region',
|
||||
billBelong: 'Bill Belonging',
|
||||
billTitle: 'Bill Title',
|
||||
status: 'Status',
|
||||
workMembers: 'Working Members',
|
||||
finishMembers: 'Completed Members',
|
||||
memberSalary: 'Member Salary',
|
||||
agentSalary: 'Agent Salary',
|
||||
deductSalary: 'Deducted Salary',
|
||||
totalSalary: 'Total Salary',
|
||||
memberSalaryUsd: 'Member Salary USD',
|
||||
agentSalaryUsd: 'Agent Salary USD',
|
||||
totalSalaryUsd: 'Total Salary USD',
|
||||
externalRemarks: 'External Remarks',
|
||||
remarks: 'Remarks',
|
||||
policy: 'Policy',
|
||||
type: 'Type',
|
||||
gold: 'Gold',
|
||||
salaryUsd: 'Salary USD',
|
||||
voucherUpload: 'Voucher Upload'
|
||||
},
|
||||
status: {
|
||||
UNPAID: 'Unbilled',
|
||||
PAY_OUT: 'Issued',
|
||||
SETTLED: 'Settled',
|
||||
HANG_UP: 'On Hold',
|
||||
PRE_CREATION: 'Pre-created',
|
||||
CLOSE: 'Closed'
|
||||
},
|
||||
settleType: {
|
||||
MONEY: 'USD',
|
||||
GOLD: 'Gold',
|
||||
MONEY_GOLD: 'USD + Gold'
|
||||
},
|
||||
exportDialog: {
|
||||
title: 'Export Conditions',
|
||||
region: 'Region',
|
||||
status: 'Status',
|
||||
time: 'Time'
|
||||
},
|
||||
detailsDrawer: {
|
||||
title: 'Details'
|
||||
},
|
||||
section: {
|
||||
agent: 'Agent',
|
||||
billInfo: 'Bill Information',
|
||||
internalRemarks: 'Internal Remarks',
|
||||
bankCard: 'Bank Card'
|
||||
},
|
||||
internalRemarkDrawer: {
|
||||
title: 'Remarks',
|
||||
empty: 'Click the button below to add remarks.'
|
||||
},
|
||||
remarkDrawer: {
|
||||
title: 'Edit Remarks'
|
||||
},
|
||||
statusDrawer: {
|
||||
title: 'Status Change'
|
||||
},
|
||||
settleDrawer: {
|
||||
title: 'Settle Bill',
|
||||
policyCalculation: 'Policy Calculation',
|
||||
settlement: 'Settlement',
|
||||
policyTips: {
|
||||
calculate: '* Calculate team member salary based on the selected region and policy.',
|
||||
workMembers: '* Users counted as working members include online activity, room transactions, sent gifts, and received gifts recorded in the work bill.',
|
||||
policyBasis: '* The policy calculation uses the target gift data in the selected region and policy.'
|
||||
},
|
||||
settleTips: {
|
||||
region: '* Region: select the settlement region. Switching regions affects the policy used for this settlement.',
|
||||
policy: '* Policy: the policy used for team settlement.',
|
||||
payee: '* Payee: bank card information for settlement. Settlement staff should match it with the transfer voucher screenshot.',
|
||||
type: '* Type: USD sends USD; Gold converts salary to gold and requires manual gold quantity input; USD + Gold splits the salary into gold and USD for offline coordination.',
|
||||
voucher: '* Transfer Voucher: screenshot record after settlement staff send gold or USD.',
|
||||
remarks: '* Remarks: external note shown for this bill.'
|
||||
}
|
||||
},
|
||||
validation: {
|
||||
requiredField: 'Required field cannot be empty',
|
||||
uploadVoucherFirst: 'Please upload at least one voucher'
|
||||
},
|
||||
message: {
|
||||
notImplemented: 'Not implemented yet',
|
||||
exporting: 'Export in progress, please wait',
|
||||
downloadFailed: 'Download failed',
|
||||
submitting: 'Submitting, please wait',
|
||||
maxRemarks: 'You can add up to 20 remarks. Delete unnecessary remarks before adding more.',
|
||||
calculatingSalary: 'Calculating policy salary, please wait'
|
||||
}
|
||||
},
|
||||
teamDetailsDrawer: {
|
||||
title: 'Details',
|
||||
section: {
|
||||
|
||||
@ -552,6 +552,7 @@ export default {
|
||||
}
|
||||
},
|
||||
userDetailsDrawer: {
|
||||
title: '用户详情',
|
||||
section: {
|
||||
photoWall: '照片墙'
|
||||
},
|
||||
@ -559,6 +560,9 @@ export default {
|
||||
candy: '糖果',
|
||||
vip: '会员',
|
||||
mobileNumber: '手机号码'
|
||||
},
|
||||
message: {
|
||||
permissionDenied: '权限不足,请联系管理员授权:组件权限/用户资料面板/查看(user:profile:panel:query)'
|
||||
}
|
||||
},
|
||||
accountHandle: {
|
||||
@ -603,6 +607,353 @@ export default {
|
||||
dayPlural: '{days}天'
|
||||
}
|
||||
},
|
||||
userAvatarApproval: {
|
||||
filter: {
|
||||
system: '归属系统',
|
||||
approvalStatus: '审批状态',
|
||||
userId: '用户ID',
|
||||
gender: '性别'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '开始日期',
|
||||
end: '结束日期'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
editUser: '编辑用户',
|
||||
accountHandle: '账号处理',
|
||||
pass: '鉴定通过',
|
||||
reject: '鉴定违规'
|
||||
},
|
||||
selection: {
|
||||
all: '全选',
|
||||
selected: '选中'
|
||||
},
|
||||
label: {
|
||||
nickname: '昵称',
|
||||
gender: '性别',
|
||||
age: '年龄',
|
||||
selectedCount: '已勾选'
|
||||
},
|
||||
approvalStatus: {
|
||||
PASS: '通过',
|
||||
NOT_PASS: '不通过',
|
||||
PENDING: '等待审核'
|
||||
},
|
||||
gender: {
|
||||
male: '男',
|
||||
female: '女'
|
||||
},
|
||||
confirm: {
|
||||
title: '提示'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: '请勾选审批项',
|
||||
confirmApproval: '确认审核选中记录吗?',
|
||||
success: '成功',
|
||||
failure: '失败',
|
||||
genderChangeSuccess: "{nickname} 性别变更 '{gender}'",
|
||||
genderChangeFailed: '{nickname} 性别变更失败!'
|
||||
}
|
||||
},
|
||||
userPhotoWallApproval: {
|
||||
filter: {
|
||||
status: '状态',
|
||||
userId: '用户ID',
|
||||
nickname: '昵称',
|
||||
gender: '性别'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '开始日期',
|
||||
end: '结束日期'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
editUser: '编辑用户',
|
||||
pass: '鉴定通过',
|
||||
reject: '鉴定违规'
|
||||
},
|
||||
selection: {
|
||||
all: '全选',
|
||||
selected: '选中'
|
||||
},
|
||||
label: {
|
||||
nickname: '昵称',
|
||||
gender: '性别',
|
||||
age: '年龄',
|
||||
tags: '标签',
|
||||
selectedCount: '已勾选'
|
||||
},
|
||||
approvalStatus: {
|
||||
NORMAL: '正常的',
|
||||
VIOLATION: '违规的',
|
||||
SUSPECTED: '等待人工复审的'
|
||||
},
|
||||
gender: {
|
||||
male: '男',
|
||||
female: '女'
|
||||
},
|
||||
confirm: {
|
||||
title: '提示'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: '请勾选审批项',
|
||||
confirmApproval: '确认审核选中记录吗?',
|
||||
success: '成功'
|
||||
}
|
||||
},
|
||||
roomCoverApproval: {
|
||||
filter: {
|
||||
system: '归属系统',
|
||||
roomAccount: '房间账号',
|
||||
userId: '用户ID',
|
||||
approvalStatus: '审批状态'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '开始日期',
|
||||
end: '结束日期'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
editUser: '编辑用户',
|
||||
accountHandle: '账号处理',
|
||||
pass: '鉴定通过',
|
||||
reject: '鉴定违规'
|
||||
},
|
||||
selection: {
|
||||
all: '全选',
|
||||
selected: '选中'
|
||||
},
|
||||
popover: {
|
||||
details: '详情'
|
||||
},
|
||||
label: {
|
||||
roomId: '房间ID',
|
||||
userId: '用户ID',
|
||||
nickname: '昵称',
|
||||
gender: '性别',
|
||||
age: '年龄',
|
||||
selectedCount: '已勾选了'
|
||||
},
|
||||
approvalStatus: {
|
||||
PASS: '通过',
|
||||
NOT_PASS: '不通过',
|
||||
PENDING: '等待审核'
|
||||
},
|
||||
gender: {
|
||||
male: '男',
|
||||
female: '女'
|
||||
},
|
||||
confirm: {
|
||||
title: '提示'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: '请勾选审批项',
|
||||
confirmApproval: '确认审核选中记录吗?',
|
||||
success: '成功'
|
||||
}
|
||||
},
|
||||
userNicknameApproval: {
|
||||
filter: {
|
||||
system: '归属系统',
|
||||
userId: '用户ID',
|
||||
approvalStatus: '审批状态'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '开始日期',
|
||||
end: '结束日期'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
userDetails: '用户详情',
|
||||
accountHandle: '账号处理',
|
||||
pass: '鉴定通过',
|
||||
reject: '鉴定违规'
|
||||
},
|
||||
table: {
|
||||
userId: '用户ID',
|
||||
nickname: '昵称',
|
||||
updateTime: '修改时间',
|
||||
actions: '操作'
|
||||
},
|
||||
label: {
|
||||
selectedCount: '已勾选'
|
||||
},
|
||||
approvalStatus: {
|
||||
PASS: '通过',
|
||||
NOT_PASS: '不通过',
|
||||
PENDING: '等待审核'
|
||||
},
|
||||
confirm: {
|
||||
title: '提示'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: '请勾选审批项',
|
||||
confirmApproval: '确认审核选中记录吗?',
|
||||
success: '成功'
|
||||
}
|
||||
},
|
||||
userProfileDescApproval: {
|
||||
filter: {
|
||||
userId: '用户ID',
|
||||
approvalStatus: '审批状态'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '开始日期',
|
||||
end: '结束日期'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
userDetails: '用户详情',
|
||||
pass: '鉴定通过',
|
||||
reject: '鉴定违规'
|
||||
},
|
||||
table: {
|
||||
nickname: '昵称',
|
||||
signature: '签名',
|
||||
updateTime: '修改时间',
|
||||
actions: '操作'
|
||||
},
|
||||
label: {
|
||||
selectedCount: '已勾选了'
|
||||
},
|
||||
approvalStatus: {
|
||||
PASS: '通过',
|
||||
NOT_PASS: '不通过',
|
||||
PENDING: '等待审核'
|
||||
},
|
||||
confirm: {
|
||||
title: '提示'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: '请勾选审批项',
|
||||
confirmApproval: '确认审核选中记录吗?'
|
||||
}
|
||||
},
|
||||
feedback: {
|
||||
filter: {
|
||||
system: '归属系统',
|
||||
userId: '反馈用户ID',
|
||||
approvalStatus: '审核状态',
|
||||
backendMember: '后台成员'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
batchProcess: '批量处理',
|
||||
process: '处理'
|
||||
},
|
||||
detail: {
|
||||
phoneModel: '手机型号',
|
||||
appVersion: 'App版本',
|
||||
deviceId: '设备号',
|
||||
content: '反馈内容',
|
||||
remarks: '备注',
|
||||
latestProcessor: '最近处理人'
|
||||
},
|
||||
table: {
|
||||
system: '系统',
|
||||
feedbackUser: '反馈用户',
|
||||
processStatus: '处理状态',
|
||||
createdAt: '创建时间',
|
||||
updatedAt: '修改时间',
|
||||
actions: '操作'
|
||||
},
|
||||
status: {
|
||||
notLoggedIn: '未登录'
|
||||
},
|
||||
approvalStatus: {
|
||||
unprocessed: '未处理',
|
||||
processed: '已处理',
|
||||
pending: '待处理'
|
||||
},
|
||||
confirm: {
|
||||
title: '提示'
|
||||
},
|
||||
message: {
|
||||
selectUnprocessedFirst: '选择审核状态下拉框为【{status}】,再操作',
|
||||
selectApprovalItem: '请勾选审批项',
|
||||
confirmApproval: '确认审核选中记录吗?',
|
||||
batchProcessSuccess: '批量处理成功'
|
||||
},
|
||||
drawer: {
|
||||
title: '反馈处理',
|
||||
result: '处理结果',
|
||||
submit: '提交'
|
||||
}
|
||||
},
|
||||
videoPlayer: {
|
||||
playbackSpeed: '倍速'
|
||||
},
|
||||
userReportApproval: {
|
||||
filter: {
|
||||
system: '归属系统',
|
||||
status: '状态',
|
||||
reportType: '举报类型',
|
||||
reporterId: '举报人ID',
|
||||
reportedUserId: '被举报人ID',
|
||||
adminMember: '后台成员'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '开始日期',
|
||||
end: '结束日期'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
accountHandle: '账号处理',
|
||||
valid: '有效',
|
||||
invalid: '无效'
|
||||
},
|
||||
tag: {
|
||||
report: '举报',
|
||||
suspected: '涉嫌'
|
||||
},
|
||||
label: {
|
||||
reportContent: '举报内容',
|
||||
latestHandler: '最近处理人',
|
||||
selectedCount: '已勾选了'
|
||||
},
|
||||
table: {
|
||||
reportType: '举报类型',
|
||||
createTime: '创建时间',
|
||||
updateTime: '修改时间',
|
||||
actions: '操作'
|
||||
},
|
||||
description: {
|
||||
title: '操作描述',
|
||||
noDirectAction: '举报审批不会对用户信息及资源做“任何处理”,处理需要到对应的资源模块进行审批',
|
||||
valid: '* 有效:表示举报有效,系统将发放“参数配置”中指定糖果数量奖励给举报提交用户',
|
||||
invalid: '* 无效:表示举报无效'
|
||||
},
|
||||
reportStatus: {
|
||||
0: '待审核',
|
||||
1: '有效举报',
|
||||
2: '无效举报'
|
||||
},
|
||||
reportType: {
|
||||
0: '非法信息',
|
||||
1: '人身攻击',
|
||||
2: '不适当的内容',
|
||||
3: '发送垃圾邮件',
|
||||
4: '诈骗',
|
||||
5: '涉及色情'
|
||||
},
|
||||
confirm: {
|
||||
title: '提示'
|
||||
},
|
||||
message: {
|
||||
selectApprovalItem: '请勾选审批项',
|
||||
confirmApproval: '确认审核选中记录吗?',
|
||||
success: '成功',
|
||||
copySuccess: '复制成功',
|
||||
copyFailed: '复制失败'
|
||||
}
|
||||
},
|
||||
accountInput: {
|
||||
placeholder: {
|
||||
type: '类型',
|
||||
@ -1540,6 +1891,178 @@ export default {
|
||||
createdAt: '创建时间'
|
||||
}
|
||||
},
|
||||
userDiamondRunWater: {
|
||||
loading: '加载中',
|
||||
filter: {
|
||||
system: '系统',
|
||||
userId: '用户ID',
|
||||
type: '类型',
|
||||
origin: '请输入或选择内容'
|
||||
},
|
||||
action: {
|
||||
search: '搜索'
|
||||
},
|
||||
type: {
|
||||
income: '收入',
|
||||
expense: '支出'
|
||||
},
|
||||
table: {
|
||||
user: '用户',
|
||||
diamondBalance: '钻石余额',
|
||||
diamond: '钻石',
|
||||
source: '来源',
|
||||
sourceDescription: '来源描述',
|
||||
type: '类型',
|
||||
remarks: '备注',
|
||||
createdAt: '创建时间'
|
||||
},
|
||||
origin: {
|
||||
ACTIVITY_REWARD: '活动奖励',
|
||||
ROOM_SUPPORT_REWARD: '房间扶持奖励',
|
||||
ROOM_HOMEOWNER_SUPPORT_REWARD: '房间扶持奖励 - 房主奖励',
|
||||
CP_REWARD: 'CP奖励',
|
||||
GAME_BURST_CRYSTAL: '爆水晶游戏',
|
||||
ROOM_REWARD: '房间奖励',
|
||||
WEEK_STAR: '周星',
|
||||
INVITED_NEW_USER_REWARD: '邀请新用户注册奖励',
|
||||
INVITED_USER_FIRST_RECHARGE_REWARD: '邀请用户首次充值奖励',
|
||||
INVITE_REGISTER: '邀请用户注册',
|
||||
INVITE_FIRST_RECHARGE: '邀请的用户首次充值',
|
||||
INVITED_USER_EACH_RECHARGE: '邀请用户每笔充值奖励百分比',
|
||||
PURCHASE_NOBLE_VIP: '购买贵族VIP',
|
||||
PURCHASE_NOBLE_VIP_GIVEAWAY: '购买赠送贵族VIP-钻石',
|
||||
PURCHASING_AVATAR_FRAME: '购买头像框-钻石',
|
||||
PURCHASING_DATA_CARD: '购买资料卡-钻石',
|
||||
PURCHASING_CHAT_BUBBLE: '购买聊天气泡-钻石',
|
||||
PURCHASING_CAR: '购买车辆-钻石',
|
||||
PURCHASING_LAYOUT: '购买装扮-钻石',
|
||||
PURCHASING_AVATAR_FRAME_GIVEAWAY: '赠送头像框-钻石',
|
||||
PURCHASING_DATA_CARD_GIVEAWAY: '购买资料卡-钻石',
|
||||
PURCHASING_CHAT_BUBBLE_GIVEAWAY: '赠送聊天气泡-钻石',
|
||||
PURCHASING_THEME: '购买主题-钻石',
|
||||
PURCHASING_THEME_GIVEAWAY: '赠送主题-钻石',
|
||||
PURCHASING_CAR_GIVEAWAY: '赠送车辆',
|
||||
PURCHASING_LAYOUT_GIVEAWAY: '赠送装扮',
|
||||
GIVE_GIFT: '赠送礼物',
|
||||
ACCEPT_GIFT: '接收礼物',
|
||||
COMPENSATE: '补给',
|
||||
REMOVE: '违规扣除',
|
||||
WEEK_USER_CONSUME: '国王王后King',
|
||||
DIAMOND_EXCHANGE_GOLD: '钻石兑换金币',
|
||||
LIVE_BROADCAST_INTEGRAL: '直播积分',
|
||||
DAILY_TASK: '每日任务',
|
||||
CHECK_IN_DIAMOND: '钻石打卡',
|
||||
CUMULATIVE_RECHARGE_REWARDS: '累计充值奖励',
|
||||
OFFICIAL_GIFT: '官方赠送',
|
||||
EXPIRED: '过期',
|
||||
INVITE_USER_RED_PACKET_LOTTERY: '邀请用户红包抽奖',
|
||||
REWARD_DIAMOND: '后台奖励钻石',
|
||||
DEDUCT_DIAMOND: '后台扣除钻石'
|
||||
}
|
||||
},
|
||||
userDiamondBalance: {
|
||||
filter: {
|
||||
userId: '用户ID'
|
||||
},
|
||||
action: {
|
||||
search: '搜索'
|
||||
},
|
||||
table: {
|
||||
user: '用户',
|
||||
balance: '余额',
|
||||
createdAt: '创建时间'
|
||||
}
|
||||
},
|
||||
integralStream: {
|
||||
tab: {
|
||||
current: '积分流水',
|
||||
history: '历史积分流水'
|
||||
},
|
||||
filter: {
|
||||
userId: '用户ID',
|
||||
origin: '积分来源'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '开始日期',
|
||||
end: '结束日期'
|
||||
},
|
||||
action: {
|
||||
search: '搜索'
|
||||
},
|
||||
alert: {
|
||||
title: '注意',
|
||||
retention: '数据只会保留30天。'
|
||||
},
|
||||
table: {
|
||||
nickname: '昵称',
|
||||
sourceObject: '来源对象',
|
||||
pointsOrigin: '积分来源',
|
||||
points: '获得积分',
|
||||
createdAt: '创建时间'
|
||||
},
|
||||
origin: {
|
||||
CLUB: 'Club聊天',
|
||||
VIDEO_ACTIVE_CALL: '视频电话',
|
||||
VIDEO_MATCH_ALL: '匹配所有',
|
||||
VIDEO_CONDITION_FEMALE: '匹配女生',
|
||||
VIDEO_CONDITION_GODDESS: '匹配女神',
|
||||
CHAT_CONSUME_CANDY: '文本聊天',
|
||||
GIFT: '赠送礼物',
|
||||
SHORT_VIDEO_WATCH_AD_SETTLE_ACCOUNTS: '短视频广告结算'
|
||||
}
|
||||
},
|
||||
userFreightInfoList: {
|
||||
filter: {
|
||||
system: '系统',
|
||||
sender: '发送用户',
|
||||
receiver: '接收用户',
|
||||
origin: '来源'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '日期开始',
|
||||
end: '日期结束'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
export: '导出',
|
||||
close: '关闭'
|
||||
},
|
||||
table: {
|
||||
system: '系统',
|
||||
user: '用户',
|
||||
receiver: '接收人',
|
||||
type: '类型',
|
||||
quantity: '数量',
|
||||
balance: '余额',
|
||||
origin: '来源',
|
||||
remark: '备注',
|
||||
createdAt: '创建时间'
|
||||
},
|
||||
type: {
|
||||
income: '收入',
|
||||
expense: '支出'
|
||||
},
|
||||
origin: {
|
||||
SHIPMENT: '出货',
|
||||
PURCHASE: '进货',
|
||||
DEDUCTION: '扣除'
|
||||
},
|
||||
exportDialog: {
|
||||
title: '导出条件',
|
||||
system: '系统',
|
||||
month: '月份',
|
||||
selectMonth: '选择月'
|
||||
},
|
||||
validation: {
|
||||
requiredField: '必填字段不可为空'
|
||||
},
|
||||
message: {
|
||||
exporting: '正在执行导出,请稍等',
|
||||
downloadFailed: '下载失败'
|
||||
}
|
||||
},
|
||||
salaryDiamondRunningWaterDialog: {
|
||||
loading: '加载中',
|
||||
dialog: {
|
||||
@ -2366,6 +2889,178 @@ export default {
|
||||
success: '成功'
|
||||
}
|
||||
},
|
||||
teamList: {
|
||||
filter: {
|
||||
region: '区域',
|
||||
status: '状态',
|
||||
agentId: '代理ID',
|
||||
memberQuantityRange: '开始~结束成员数量',
|
||||
dateRangeSeparator: '至',
|
||||
startDate: '开始日期',
|
||||
endDate: '结束日期',
|
||||
backendMember: '后台成员'
|
||||
},
|
||||
table: {
|
||||
agent: '代理',
|
||||
info: '信息',
|
||||
member: '成员',
|
||||
status: '状态',
|
||||
available: '正常',
|
||||
close: '关闭',
|
||||
region: '区域',
|
||||
remark: '备注',
|
||||
createdBy: '创建人',
|
||||
updatedBy: '修改人',
|
||||
time: '时间',
|
||||
createdAt: '创建',
|
||||
updatedAt: '修改',
|
||||
actions: '操作'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
add: '新增',
|
||||
delete: '删除',
|
||||
details: '资料详情',
|
||||
editProfile: '修改资料',
|
||||
bindBd: '绑定BD',
|
||||
remarks: '备注信息',
|
||||
contact: '联系方式',
|
||||
sendNotice: '发送通知',
|
||||
noticeRecords: '通知记录',
|
||||
teamApplications: '团队申请',
|
||||
query: '查询',
|
||||
loadMore: '加载更多',
|
||||
allLoaded: '已加载全部',
|
||||
close: '关闭',
|
||||
save: '保存',
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
submit: '提交'
|
||||
},
|
||||
confirm: {
|
||||
deleteTitle: '提示',
|
||||
deleteMessage: '系统将移除团队所有数据,操作不可逆!(主播工作/账单/团队信息/团队成员/BD关系等所有)',
|
||||
confirmDeleteNotice: '确认删除吗?',
|
||||
sendNotice: '确认发送通知吗?',
|
||||
changeRegionMessage: '变更代理团队区域将清空该代理名下所有主播目标,你确定继续吗?'
|
||||
},
|
||||
permission: {
|
||||
validating: '权限验证中...',
|
||||
deniedPrefix: '抱歉您无权查看,请联系管理员开通查看权限',
|
||||
deniedCode: '【主播中心/代理列表:(team:list:query:all/team:list:query:self)】'
|
||||
},
|
||||
validation: {
|
||||
requiredField: '必填字段不可为空',
|
||||
titleRequired: '请输入标题',
|
||||
contentRequired: '请输入内容'
|
||||
},
|
||||
message: {
|
||||
submitting: '正在提交!',
|
||||
maxRemarks: '最多添加20条备注,请删除不必要的备注后重新添加'
|
||||
},
|
||||
statusMap: {
|
||||
AVAILABLE: '正常',
|
||||
CLOSE: '关闭'
|
||||
},
|
||||
processStatusMap: {
|
||||
WAIT: '待审核',
|
||||
AGREE: '同意',
|
||||
REJECT: '驳回'
|
||||
},
|
||||
reasonMap: {
|
||||
JOIN: '加入',
|
||||
QUIT: '退出',
|
||||
EXIT: '退出'
|
||||
},
|
||||
approvalReasonMap: {
|
||||
MEMBER_JOIN: '成员加入',
|
||||
MEMBER_QUIT: '成员主动退出',
|
||||
MEMBER_OWN_REMOVE: '代理主动删除成员',
|
||||
MEMBER_ADMIN_REMOVE: '管理员主动删除成员',
|
||||
MEMBER_APPLY_TIME_OUT: '长时间未处理申请消息,自动退出',
|
||||
REMOVE_MEMBER_NOT_ACTIVE: '移除不活跃成员',
|
||||
SYSTEM_MEMBER_REMOVE: '系统检测自动移除',
|
||||
SWITCH_TEAM_OWN: '更换团长',
|
||||
SWITCH_TEAM_REMOVE: '切换团队移除'
|
||||
},
|
||||
bindBd: {
|
||||
title: '绑定BD',
|
||||
bdAccount: '请输入BD账号'
|
||||
},
|
||||
applicationProcess: {
|
||||
title: '申请团队成员列表',
|
||||
status: '审核状态',
|
||||
reason: '原因',
|
||||
applicationType: '申请类型',
|
||||
reviewStatus: '审核状态',
|
||||
createdBy: '创建人',
|
||||
updatedBy: '修改人'
|
||||
},
|
||||
contact: {
|
||||
title: '联系方式',
|
||||
emptyTip: '点击下方按钮添加“联系方式”',
|
||||
type: '类型',
|
||||
contact: '联系',
|
||||
remark: '备注',
|
||||
dialogTitle: '联系方式',
|
||||
selectType: '选择类型',
|
||||
contactPlaceholder: '请输入联系方式',
|
||||
remarkPlaceholder: '请输入备注'
|
||||
},
|
||||
edit: {
|
||||
title: '团队资料',
|
||||
regionChangeWarning: '注意:变更代理团队区域将清空该代理名下所有主播目标,请谨慎操作',
|
||||
region: '区域',
|
||||
country: '国家',
|
||||
settingInfo: '设置信息',
|
||||
memberQuantity: '成员数量',
|
||||
maxMember: '最大成员数量',
|
||||
hostSalaryToAgent: '代理接收主播工资',
|
||||
withdrawalEnabled: '允许提现'
|
||||
},
|
||||
noticeList: {
|
||||
title: '团队通知记录',
|
||||
titleLabel: '标题',
|
||||
contentLabel: '内容',
|
||||
sender: '发送人'
|
||||
},
|
||||
noticeSend: {
|
||||
title: '发送团队通知',
|
||||
titleLabel: '标题',
|
||||
content: '内容',
|
||||
link: '链接',
|
||||
cover: '封面'
|
||||
},
|
||||
remark: {
|
||||
title: '备注',
|
||||
emptyTip: '点击下方按钮添加“备注”',
|
||||
placeholder: '请输入备注'
|
||||
},
|
||||
teamStatus: {
|
||||
title: '状态变更',
|
||||
warning: '关闭系统将移除团队所有数据,操作不可逆!(主播工作/账单/团队信息/团队成员/BD关系等所有)',
|
||||
status: '状态',
|
||||
close: '关闭',
|
||||
available: '启动',
|
||||
remarks: '备注'
|
||||
},
|
||||
switchOwn: {
|
||||
title: '更换团长',
|
||||
warning: '历史团队如果存在工作数据将会被清理!团队未解散BD关系将继续维持',
|
||||
agent: '代理',
|
||||
agentPlaceholder: '请输入代理ID'
|
||||
},
|
||||
processApproval: {
|
||||
title: '申请团队日志列表',
|
||||
processedUserId: '被处理人ID',
|
||||
reason: '原因',
|
||||
reasonLabel: '原因',
|
||||
processedUser: '被处理人',
|
||||
operator: '操作人',
|
||||
creator: '创建人',
|
||||
createdAt: '创建时间'
|
||||
}
|
||||
},
|
||||
teamCreate: {
|
||||
dialog: {
|
||||
title: '创建代理'
|
||||
@ -5859,6 +6554,102 @@ export default {
|
||||
GAME_FRUIT_BOX_REWARD_TIMES: '水果游戏宝箱次数奖励'
|
||||
}
|
||||
},
|
||||
propsResourceConfig: {
|
||||
filter: {
|
||||
system: '归属系统',
|
||||
type: '类型',
|
||||
shelfStatus: '上/下架',
|
||||
name: '名称'
|
||||
},
|
||||
table: {
|
||||
code: '编号',
|
||||
type: '类型',
|
||||
name: '名称',
|
||||
resource: '资源',
|
||||
shelfStatus: '上/下架',
|
||||
basePrice: '底价',
|
||||
actions: '操作'
|
||||
},
|
||||
form: {
|
||||
system: '系统',
|
||||
type: '类型',
|
||||
cover: '封面',
|
||||
coverPreview: '封面预览图',
|
||||
roomSendCover: '房间发送页图',
|
||||
roomNotOpened: '房间拆红包大图',
|
||||
roomOpened: '房间红包已打开大图',
|
||||
imSendCover: 'IM发送页图',
|
||||
imNotOpened: 'IM/房间封面未打开小图',
|
||||
imOpened: 'IM/房间封面已打开小图',
|
||||
imOpenedTwo: 'IM/房间封面已打开小图2',
|
||||
iosResource: 'iOS 资源',
|
||||
androidResource: 'Android 资源',
|
||||
roomBackground: '房间装扮背景',
|
||||
name: '名称',
|
||||
code: '编码',
|
||||
basePrice: '底价'
|
||||
},
|
||||
placeholder: {
|
||||
nobleType: '贵族类型',
|
||||
codeReadonly: '编码添加后不能修改',
|
||||
month: '选择月'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
add: '添加',
|
||||
edit: '修改',
|
||||
sales: '销售情况',
|
||||
upload: '点击上传',
|
||||
save: '保存',
|
||||
cancel: '取消'
|
||||
},
|
||||
status: {
|
||||
onShelf: '上架',
|
||||
offShelf: '下架',
|
||||
yes: '是',
|
||||
no: '否'
|
||||
},
|
||||
propsTypes: {
|
||||
AVATAR_FRAME: '头像框',
|
||||
RIDE: '座驾',
|
||||
NOBLE_VIP: '贵族',
|
||||
THEME: '主题',
|
||||
LAYOUT: '装扮',
|
||||
CHAT_BUBBLE: '聊天气泡',
|
||||
FLOAT_PICTURE: '飘窗',
|
||||
FRAGMENTS: '碎片',
|
||||
DATA_CARD: '资料卡',
|
||||
SPECIAL_ID: '靓号',
|
||||
CUSTOMIZE: '自定义(只读)',
|
||||
RED_PACKET: '红包封面'
|
||||
},
|
||||
nobleVipTypes: {
|
||||
VISCOUNT: '子爵',
|
||||
EARL: '伯爵',
|
||||
MARQUIS: '侯爵',
|
||||
DUKE: '公爵',
|
||||
KING: '国王',
|
||||
EMPEROR: '皇帝'
|
||||
},
|
||||
dialog: {
|
||||
salesReport: '销售报表'
|
||||
},
|
||||
summary: {
|
||||
monthTotal: '月销售总额',
|
||||
yearTotal: '年售额',
|
||||
separator: '、'
|
||||
},
|
||||
chart: {
|
||||
dailySales: '每日销售情况'
|
||||
},
|
||||
message: {
|
||||
noPermission: '抱歉您无权查看,请联系管理员开通查看权限【道具管理-资源配置-查看,props:config:query】',
|
||||
uploadSvgaTip: '只能上传svga/pag/mp4文件'
|
||||
},
|
||||
validation: {
|
||||
required: '必填字段不可为空'
|
||||
}
|
||||
},
|
||||
propsStore: {
|
||||
filter: {
|
||||
system: '归属系统',
|
||||
@ -6743,6 +7534,142 @@ export default {
|
||||
roomTransactions: '房间流水'
|
||||
}
|
||||
},
|
||||
teamBill: {
|
||||
loading: '加载中',
|
||||
placeholder: {
|
||||
region: '区域',
|
||||
billStatus: '账单状态',
|
||||
agentId: '代理ID',
|
||||
billId: '账单ID',
|
||||
selectMonth: '选择月',
|
||||
remarks: '请输入备注',
|
||||
selectRegion: '请选择区域',
|
||||
selectPolicy: '请选择政策',
|
||||
selectSettleType: '请选择结算类型',
|
||||
goldQuantity: '请输入金币数量,系统不会自动发送',
|
||||
salaryQuantity: '请输入工资$'
|
||||
},
|
||||
date: {
|
||||
rangeSeparator: '至',
|
||||
start: '开始日期',
|
||||
end: '结束日期'
|
||||
},
|
||||
action: {
|
||||
search: '搜索',
|
||||
export: '导出',
|
||||
details: '详情',
|
||||
loadMore: '加载更多',
|
||||
loadedAll: '已加载全部',
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
close: '关闭',
|
||||
save: '保存',
|
||||
add: '新增'
|
||||
},
|
||||
table: {
|
||||
agent: '代理',
|
||||
region: '区域',
|
||||
belong: '归属',
|
||||
salary: '工资',
|
||||
updatedBy: '修改人',
|
||||
time: '时间',
|
||||
actions: '操作'
|
||||
},
|
||||
label: {
|
||||
memberAgent: '成员/代理',
|
||||
total: '合计',
|
||||
created: '创建',
|
||||
updated: '修改',
|
||||
region: '区域',
|
||||
billBelong: '账单归属',
|
||||
billTitle: '账单标题',
|
||||
status: '状态',
|
||||
workMembers: '工作人数',
|
||||
finishMembers: '完成人数',
|
||||
memberSalary: '成员工资',
|
||||
agentSalary: '团长工资',
|
||||
deductSalary: '扣除工资',
|
||||
totalSalary: '合计工资',
|
||||
memberSalaryUsd: '成员工资$',
|
||||
agentSalaryUsd: '团长工资$',
|
||||
totalSalaryUsd: '合计工资$',
|
||||
externalRemarks: '对外备注',
|
||||
remarks: '备注',
|
||||
policy: '政策',
|
||||
type: '类型',
|
||||
gold: '金币',
|
||||
salaryUsd: '工资$',
|
||||
voucherUpload: '凭证上传'
|
||||
},
|
||||
status: {
|
||||
UNPAID: '未出账',
|
||||
PAY_OUT: '已出账',
|
||||
SETTLED: '已结算',
|
||||
HANG_UP: '挂起',
|
||||
PRE_CREATION: '预创建',
|
||||
CLOSE: '已关闭'
|
||||
},
|
||||
settleType: {
|
||||
MONEY: '美元',
|
||||
GOLD: '金币',
|
||||
MONEY_GOLD: '美元+金币'
|
||||
},
|
||||
exportDialog: {
|
||||
title: '导出条件',
|
||||
region: '区域',
|
||||
status: '状态',
|
||||
time: '时间'
|
||||
},
|
||||
detailsDrawer: {
|
||||
title: '详情'
|
||||
},
|
||||
section: {
|
||||
agent: '代理',
|
||||
billInfo: '账单信息',
|
||||
internalRemarks: '内部备注',
|
||||
bankCard: '银行卡'
|
||||
},
|
||||
internalRemarkDrawer: {
|
||||
title: '备注',
|
||||
empty: '点击下方按钮添加“备注”'
|
||||
},
|
||||
remarkDrawer: {
|
||||
title: '编辑备注'
|
||||
},
|
||||
statusDrawer: {
|
||||
title: '状态变更'
|
||||
},
|
||||
settleDrawer: {
|
||||
title: '结算账单',
|
||||
policyCalculation: '政策计算',
|
||||
settlement: '结算',
|
||||
policyTips: {
|
||||
calculate: '* 根据选择“区域+政策”计算团队成员工资情况',
|
||||
workMembers: '* 在线、房间流水、发送礼物、收礼物都会记录到工作账单并计入工作人数',
|
||||
policyBasis: '* 政策计算会使用所选“区域+政策”中政策数据的收礼目标'
|
||||
},
|
||||
settleTips: {
|
||||
region: '* 区域:选择本次团队结算区域,切换区域会影响本次结算政策',
|
||||
policy: '* 政策:团队结算对应的政策',
|
||||
payee: '* 收款:结算到用户的银行卡信息,结算人员需与转账凭证截图对应',
|
||||
type: '* 类型:美元会发送美元;金币会将工资折算金币并需手动输入金币数量;美元+金币会拆分为部分金币和部分美元',
|
||||
voucher: '* 转账凭证:结算人员发送金币或美元后的记录凭证截图',
|
||||
remarks: '* 备注:本次账单对外显示的备注'
|
||||
}
|
||||
},
|
||||
validation: {
|
||||
requiredField: '必填字段不可为空',
|
||||
uploadVoucherFirst: '最少上传1张凭证'
|
||||
},
|
||||
message: {
|
||||
notImplemented: '还没有实现',
|
||||
exporting: '正在执行导出,请稍等',
|
||||
downloadFailed: '下载失败',
|
||||
submitting: '正在提交,请稍等',
|
||||
maxRemarks: '最多添加20条备注,请删除不必要的备注后重新添加',
|
||||
calculatingSalary: '正在计算政策工资,请稍等'
|
||||
}
|
||||
},
|
||||
teamDetailsDrawer: {
|
||||
title: '详情',
|
||||
section: {
|
||||
|
||||
@ -1,11 +1,10 @@
|
||||
<!--房间封面审批-->
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="归属系统"
|
||||
:placeholder="$t('pages.userAvatarApproval.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -22,7 +21,7 @@
|
||||
</el-select>
|
||||
<el-select
|
||||
v-model="listQuery.approveStatus"
|
||||
placeholder="审批状态"
|
||||
:placeholder="$t('pages.userAvatarApproval.filter.approvalStatus')"
|
||||
style="width: 240px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -30,7 +29,7 @@
|
||||
<el-option
|
||||
v-for="item in commonApprovalStatus"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="approvalStatusName(item.value)"
|
||||
:value="item.value"
|
||||
:disabled="item.value == 'NOT_PASS'"
|
||||
/>
|
||||
@ -41,18 +40,18 @@
|
||||
type="datetimerange"
|
||||
value-format="timestamp"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:range-separator="$t('pages.userAvatarApproval.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.userAvatarApproval.date.start')"
|
||||
:end-placeholder="$t('pages.userAvatarApproval.date.end')"
|
||||
align="right"
|
||||
/>
|
||||
</div>
|
||||
<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.userAvatarApproval.filter.userId')" />
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.userSex"
|
||||
placeholder="性别"
|
||||
:placeholder="$t('pages.userAvatarApproval.filter.gender')"
|
||||
clearable
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@ -60,7 +59,7 @@
|
||||
<el-option
|
||||
v-for="item in genders"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="genderName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -71,10 +70,10 @@
|
||||
:disabled="searchDisabled"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.userAvatarApproval.action.search') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">全选</el-checkbox>
|
||||
<el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">{{ $t('pages.userAvatarApproval.selection.all') }}</el-checkbox>
|
||||
<div style="margin: 15px 0;" />
|
||||
<el-row v-loading="listLoading" :gutter="10">
|
||||
<el-col v-for="(item, index) in list" :key="index" :span="4" style="margin-bottom: 10px;">
|
||||
@ -97,36 +96,36 @@
|
||||
<div style="padding: 14px">
|
||||
<div class="bottom">
|
||||
<el-checkbox-group v-model="checkList">
|
||||
<el-checkbox :key="item.userId" :label="index">选中</el-checkbox>
|
||||
<el-checkbox :key="item.userId" :label="index">{{ $t('pages.userAvatarApproval.selection.selected') }}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
<!--<el-table-column type="radio" width="55" />-->
|
||||
<div class="info" @click="handleClickCard(index)">
|
||||
<div>昵称: <a class="underline" @click.stop="queryUserDetails(item.userId)">{{ item.userNickname }}</a></div>
|
||||
<div>{{ $t('pages.userAvatarApproval.label.nickname') }}: <a class="underline" @click.stop="queryUserDetails(item.userId)">{{ item.userNickname }}</a></div>
|
||||
<div class="line">
|
||||
<div>性别:
|
||||
<div>{{ $t('pages.userAvatarApproval.label.gender') }}:
|
||||
<el-dropdown v-loading="item.loading">
|
||||
<span class="el-dropdown-link">
|
||||
{{ item.userSexName }}<i class="el-icon-arrow-down el-icon--right" />
|
||||
{{ genderName(item.userSex, item.userSexName) }}<i class="el-icon-arrow-down el-icon--right" />
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item v-if="item.userSex === 0" @click.native="changeGender(item, 1)">男</el-dropdown-item>
|
||||
<el-dropdown-item v-if="item.userSex === 1" @click.native="changeGender(item, 0)">女</el-dropdown-item>
|
||||
<el-dropdown-item v-if="item.userSex === 0" @click.native="changeGender(item, 1)">{{ $t('pages.userAvatarApproval.gender.male') }}</el-dropdown-item>
|
||||
<el-dropdown-item v-if="item.userSex === 1" @click.native="changeGender(item, 0)">{{ $t('pages.userAvatarApproval.gender.female') }}</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
<div>年龄:{{ item.age }} </div>
|
||||
<div>{{ $t('pages.userAvatarApproval.label.age') }}: {{ item.age }} </div>
|
||||
</div>
|
||||
<div v-if="item.approvalUserName" class="seal-block seal-danger approval-user">{{ item.approvalUserName }}</div>
|
||||
</div>
|
||||
<el-button type="text" class="button" @click="editUserForm(item.userId)">编辑用户</el-button>
|
||||
<el-button type="text" class="button" @click="accountHanle(item.userId)">账号处理</el-button>
|
||||
<el-button type="text" class="button" @click="editUserForm(item.userId)">{{ $t('pages.userAvatarApproval.action.editUser') }}</el-button>
|
||||
<el-button type="text" class="button" @click="accountHanle(item.userId)">{{ $t('pages.userAvatarApproval.action.accountHandle') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="text-align:center;">
|
||||
<div style="padding:5px;font-size:14px;color:#909399">已勾选了:<span style="color:#F00">{{ checkList.length }}</span></div>
|
||||
<div style="padding:5px;font-size:14px;color:#909399">{{ $t('pages.userAvatarApproval.label.selectedCount') }}: <span style="color:#F00">{{ checkList.length }}</span></div>
|
||||
<el-button
|
||||
v-if="isAllowApproval"
|
||||
class="filter-item"
|
||||
@ -134,7 +133,7 @@
|
||||
icon="el-icon-folder-checked"
|
||||
@click="pass"
|
||||
>
|
||||
鉴定通过
|
||||
{{ $t('pages.userAvatarApproval.action.pass') }}
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
@ -143,7 +142,7 @@
|
||||
icon="el-icon-folder-delete"
|
||||
@click="notpass"
|
||||
>
|
||||
鉴定违规
|
||||
{{ $t('pages.userAvatarApproval.action.reject') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<pagination
|
||||
@ -270,7 +269,6 @@ export default {
|
||||
handleSearch() {
|
||||
this.renderData(true)
|
||||
},
|
||||
// 截取数据
|
||||
cutout(cellValue) {
|
||||
if (cellValue != null) {
|
||||
return cellValue.replace(/\,/g, '</br>')
|
||||
@ -290,13 +288,25 @@ export default {
|
||||
}
|
||||
this.isIndeterminate = false
|
||||
},
|
||||
approvalStatusName(status) {
|
||||
return this.$t(`pages.userAvatarApproval.approvalStatus.${status}`)
|
||||
},
|
||||
genderName(gender, fallback = '') {
|
||||
if (gender === 0) {
|
||||
return this.$t('pages.userAvatarApproval.gender.female')
|
||||
}
|
||||
if (gender === 1) {
|
||||
return this.$t('pages.userAvatarApproval.gender.male')
|
||||
}
|
||||
return fallback
|
||||
},
|
||||
pass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userAvatarApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.userAvatarApproval.message.confirmApproval'), that.$t('pages.userAvatarApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
@ -314,10 +324,10 @@ export default {
|
||||
notpass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userAvatarApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.userAvatarApproval.message.confirmApproval'), that.$t('pages.userAvatarApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
@ -339,7 +349,7 @@ export default {
|
||||
|
||||
renderDataSuccess() {
|
||||
this.$message({
|
||||
message: 'Successful',
|
||||
message: this.$t('pages.userAvatarApproval.message.success'),
|
||||
type: 'success'
|
||||
})
|
||||
this.renderData()
|
||||
@ -375,18 +385,18 @@ export default {
|
||||
item.loading = true
|
||||
updateBaseInfo({ id: item.userId, userSex }).then(res => {
|
||||
item.loading = false
|
||||
const userSexName = userSex === 0 ? '女' : '男'
|
||||
const userSexName = that.genderName(userSex)
|
||||
that.$notify.success({
|
||||
title: '成功',
|
||||
message: `${item.userNickname} 性别变更 '${userSexName}'`
|
||||
title: that.$t('pages.userAvatarApproval.message.success'),
|
||||
message: that.$t('pages.userAvatarApproval.message.genderChangeSuccess', { nickname: item.userNickname, gender: userSexName })
|
||||
})
|
||||
item.userSex = userSex
|
||||
item.userSexName = userSexName
|
||||
}).catch(er => {
|
||||
item.loading = false
|
||||
that.$notify.error({
|
||||
title: '失败',
|
||||
message: `${item.userNickname} 性别变更失败!`
|
||||
title: that.$t('pages.userAvatarApproval.message.failure'),
|
||||
message: that.$t('pages.userAvatarApproval.message.genderChangeFailed', { nickname: item.userNickname })
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="归属系统"
|
||||
:placeholder="$t('pages.userNicknameApproval.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -25,18 +25,18 @@
|
||||
type="datetimerange"
|
||||
value-format="timestamp"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:range-separator="$t('pages.userNicknameApproval.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.userNicknameApproval.date.start')"
|
||||
:end-placeholder="$t('pages.userNicknameApproval.date.end')"
|
||||
align="right"
|
||||
/>
|
||||
</div>
|
||||
<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.userNicknameApproval.filter.userId')" />
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.approveStatus"
|
||||
placeholder="审批状态"
|
||||
:placeholder="$t('pages.userNicknameApproval.filter.approvalStatus')"
|
||||
style="width: 240px"
|
||||
class="filter-item"
|
||||
:disabled="searchDisabled"
|
||||
@ -45,19 +45,19 @@
|
||||
<el-option
|
||||
v-for="item in commonApprovalStatus"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="approvalStatusName(item.value)"
|
||||
:value="item.value"
|
||||
:disabled="item.value == 'NOT_PASS'"
|
||||
/>
|
||||
</el-select>
|
||||
<!-- <span class="text-item" style="width: 120px;color:#F00;">数量:{{ total }}</span> -->
|
||||
<!-- <span class="text-item" style="width: 120px;color:#F00;">Count: {{ total }}</span> -->
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.userNicknameApproval.action.search') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
@ -70,33 +70,33 @@
|
||||
@selection-change="selsUserChange"
|
||||
>
|
||||
<el-table-column v-if="isAllowApproval" type="selection" width="55" />
|
||||
<el-table-column prop="userId" label="用户id" align="center" width="200" />
|
||||
<el-table-column prop="userNickname" label="昵称" align="center" />
|
||||
<el-table-column prop="updateTime" label="修改时间" align="center" width="200">
|
||||
<el-table-column prop="userId" :label="$t('pages.userNicknameApproval.table.userId')" align="center" width="200" />
|
||||
<el-table-column prop="userNickname" :label="$t('pages.userNicknameApproval.table.nickname')" align="center" />
|
||||
<el-table-column prop="updateTime" :label="$t('pages.userNicknameApproval.table.updateTime')" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.updateTime | dateFormat }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" align="center" width="100">
|
||||
<el-table-column fixed="right" :label="$t('pages.userNicknameApproval.table.actions')" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<el-button type="text" @click="queryUserDetails(scope.row)">用户详情</el-button>
|
||||
<el-button type="text" @click="queryUserDetails(scope.row)">{{ $t('pages.userNicknameApproval.action.userDetails') }}</el-button>
|
||||
</div>
|
||||
<div>
|
||||
<el-button type="text" @click="accountHanle(scope.row)">账号处理</el-button>
|
||||
<el-button type="text" @click="accountHanle(scope.row)">{{ $t('pages.userNicknameApproval.action.accountHandle') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-if="isAllowApproval" style="text-align:center;padding: 20px;">
|
||||
<div style="padding:5px;font-size:14px;color:#909399">已勾选了:<span style="color:#F00">{{ checkList.length }}</span></div>
|
||||
<div style="padding:5px;font-size:14px;color:#909399">{{ $t('pages.userNicknameApproval.label.selectedCount') }}:<span style="color:#F00">{{ checkList.length }}</span></div>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-folder-checked"
|
||||
@click="pass"
|
||||
>
|
||||
鉴定通过
|
||||
{{ $t('pages.userNicknameApproval.action.pass') }}
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
@ -105,7 +105,7 @@
|
||||
icon="el-icon-folder-delete"
|
||||
@click="notpass"
|
||||
>
|
||||
鉴定违规
|
||||
{{ $t('pages.userNicknameApproval.action.reject') }}
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
@ -221,7 +221,7 @@ export default {
|
||||
},
|
||||
renderDataSuccess() {
|
||||
this.$message({
|
||||
message: 'Successful',
|
||||
message: this.$t('pages.userNicknameApproval.message.success'),
|
||||
type: 'success'
|
||||
})
|
||||
this.renderData()
|
||||
@ -232,6 +232,9 @@ export default {
|
||||
selsUserChange(checkList) {
|
||||
this.checkList = checkList
|
||||
},
|
||||
approvalStatusName(status) {
|
||||
return this.$t(`pages.userNicknameApproval.approvalStatus.${status}`)
|
||||
},
|
||||
queryUserDetails(row) {
|
||||
this.userDeatilsDrawer = true
|
||||
this.thatSelectedUserId = row.userId
|
||||
@ -239,10 +242,10 @@ export default {
|
||||
pass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userNicknameApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.userNicknameApproval.message.confirmApproval'), that.$t('pages.userNicknameApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
@ -260,10 +263,10 @@ export default {
|
||||
notpass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userNicknameApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.userNicknameApproval.message.confirmApproval'), that.$t('pages.userNicknameApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.status"
|
||||
placeholder="状态"
|
||||
:placeholder="$t('pages.userPhotoWallApproval.filter.status')"
|
||||
style="width: 240px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -11,7 +11,7 @@
|
||||
<el-option
|
||||
v-for="item in approvalStatus"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="approvalStatusName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -21,24 +21,24 @@
|
||||
type="datetimerange"
|
||||
value-format="timestamp"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:range-separator="$t('pages.userPhotoWallApproval.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.userPhotoWallApproval.date.start')"
|
||||
:end-placeholder="$t('pages.userPhotoWallApproval.date.end')"
|
||||
align="right"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<account-input v-model="listQuery.userId" placeholder="用户ID" />
|
||||
<account-input v-model="listQuery.userId" :placeholder="$t('pages.userPhotoWallApproval.filter.userId')" />
|
||||
</div>
|
||||
<el-input
|
||||
v-model.trim="listQuery.userNickname"
|
||||
placeholder="昵称"
|
||||
:placeholder="$t('pages.userPhotoWallApproval.filter.nickname')"
|
||||
style="width: 200px;"
|
||||
class="filter-item"
|
||||
/>
|
||||
<el-select
|
||||
v-model="listQuery.userSex"
|
||||
placeholder="性别"
|
||||
:placeholder="$t('pages.userPhotoWallApproval.filter.gender')"
|
||||
clearable
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@ -46,7 +46,7 @@
|
||||
<el-option
|
||||
v-for="item in genders"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="genderName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -57,14 +57,14 @@
|
||||
:disabled="searchDisabled"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.userPhotoWallApproval.action.search') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-checkbox
|
||||
v-model="checkAll"
|
||||
:indeterminate="isIndeterminate"
|
||||
@change="handleCheckAllChange"
|
||||
>全选</el-checkbox>
|
||||
>{{ $t('pages.userPhotoWallApproval.selection.all') }}</el-checkbox>
|
||||
<div style="margin: 15px 0;" />
|
||||
<el-row v-loading="listLoading" :gutter="10">
|
||||
<el-col
|
||||
@ -88,23 +88,23 @@
|
||||
v-if="listQuery.status === 'SUSPECTED'"
|
||||
:key="item.id"
|
||||
:label="index"
|
||||
>选中</el-checkbox>
|
||||
>{{ $t('pages.userPhotoWallApproval.selection.selected') }}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
<!--<el-table-column type="radio" width="55" />-->
|
||||
<div class="info" @click="handleClickCard(index)">
|
||||
<div>
|
||||
昵称:
|
||||
{{ $t('pages.userPhotoWallApproval.label.nickname') }}:
|
||||
<a
|
||||
class="underline"
|
||||
@click.stop="queryUserDetails(item.userId)"
|
||||
>{{ item.userNickname }}</a>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div>性别:{{ item.userSexName }}</div>
|
||||
<div>年龄:{{ item.age }}</div>
|
||||
<div>{{ $t('pages.userPhotoWallApproval.label.gender') }}: {{ genderName(item.userSex, item.userSexName) }}</div>
|
||||
<div>{{ $t('pages.userPhotoWallApproval.label.age') }}: {{ item.age }}</div>
|
||||
</div>
|
||||
<div>
|
||||
标签:
|
||||
{{ $t('pages.userPhotoWallApproval.label.tags') }}:
|
||||
<el-tooltip placement="top-start">
|
||||
<div slot="content">
|
||||
<span v-html="cutout(item.labelNames)" />
|
||||
@ -117,7 +117,7 @@
|
||||
type="text"
|
||||
class="button"
|
||||
@click="editUserForm(item.userId)"
|
||||
>编辑用户</el-button>
|
||||
>{{ $t('pages.userPhotoWallApproval.action.editUser') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
@ -125,7 +125,7 @@
|
||||
</el-row>
|
||||
<div v-if="listQuery.status === 'SUSPECTED'" style="text-align:center;">
|
||||
<div style="padding:5px;font-size:14px;color:#909399">
|
||||
已勾选了:<span style="color:#F00">{{ checkList.length }}</span>
|
||||
{{ $t('pages.userPhotoWallApproval.label.selectedCount') }}:<span style="color:#F00">{{ checkList.length }}</span>
|
||||
</div>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
@ -133,7 +133,7 @@
|
||||
icon="el-icon-folder-checked"
|
||||
@click="pass"
|
||||
>
|
||||
鉴定通过
|
||||
{{ $t('pages.userPhotoWallApproval.action.pass') }}
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
@ -142,7 +142,7 @@
|
||||
icon="el-icon-folder-delete"
|
||||
@click="notpass"
|
||||
>
|
||||
鉴定违规
|
||||
{{ $t('pages.userPhotoWallApproval.action.reject') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<pagination
|
||||
@ -246,7 +246,7 @@ export default {
|
||||
handleSearch() {
|
||||
this.renderData(true)
|
||||
},
|
||||
// 截取数据
|
||||
// Format comma-separated labels for tooltip display.
|
||||
cutout(cellValue) {
|
||||
if (cellValue != null) {
|
||||
return cellValue.replace(/\,/g, '</br>')
|
||||
@ -265,11 +265,11 @@ export default {
|
||||
pass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userPhotoWallApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that
|
||||
.$confirm('确认审核选中记录吗?', '提示', {
|
||||
.$confirm(that.$t('pages.userPhotoWallApproval.message.confirmApproval'), that.$t('pages.userPhotoWallApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
@ -289,11 +289,11 @@ export default {
|
||||
notpass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userPhotoWallApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that
|
||||
.$confirm('确认审核选中记录吗?', '提示', {
|
||||
.$confirm(that.$t('pages.userPhotoWallApproval.message.confirmApproval'), that.$t('pages.userPhotoWallApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
@ -316,7 +316,7 @@ export default {
|
||||
},
|
||||
renderDataSuccess() {
|
||||
this.$message({
|
||||
message: 'Successful',
|
||||
message: this.$t('pages.userPhotoWallApproval.message.success'),
|
||||
type: 'success'
|
||||
})
|
||||
this.renderData()
|
||||
@ -333,6 +333,18 @@ export default {
|
||||
}
|
||||
this.checkList.push(id)
|
||||
},
|
||||
approvalStatusName(status) {
|
||||
return this.$t(`pages.userPhotoWallApproval.approvalStatus.${status}`)
|
||||
},
|
||||
genderName(gender, fallback = '') {
|
||||
if (gender === 0) {
|
||||
return this.$t('pages.userPhotoWallApproval.gender.female')
|
||||
}
|
||||
if (gender === 1) {
|
||||
return this.$t('pages.userPhotoWallApproval.gender.male')
|
||||
}
|
||||
return fallback
|
||||
},
|
||||
getApprovalParams() {
|
||||
const that = this
|
||||
const approvalParams = []
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="系统"
|
||||
:placeholder="$t('pages.userReportApproval.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -24,7 +24,7 @@
|
||||
</el-select>
|
||||
<el-select
|
||||
v-model="listQuery.approvalStatus"
|
||||
placeholder="状态"
|
||||
:placeholder="$t('pages.userReportApproval.filter.status')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -32,13 +32,13 @@
|
||||
<el-option
|
||||
v-for="item in reportStatus"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="reportStatusName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-select
|
||||
v-model="listQuery.reportType"
|
||||
placeholder="举报类型"
|
||||
:placeholder="$t('pages.userReportApproval.filter.reportType')"
|
||||
clearable
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@ -46,7 +46,7 @@
|
||||
<el-option
|
||||
v-for="item in reportTypes"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="reportTypeName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -54,14 +54,14 @@
|
||||
<account-input
|
||||
v-model="listQuery.reportUserId"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
placeholder="举报人ID"
|
||||
:placeholder="$t('pages.userReportApproval.filter.reporterId')"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<account-input
|
||||
v-model="listQuery.reportedUserId"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
placeholder="被举报人ID"
|
||||
:placeholder="$t('pages.userReportApproval.filter.reportedUserId')"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
@ -70,14 +70,14 @@
|
||||
value-format="timestamp"
|
||||
:picker-options="pickerOptions"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:range-separator="$t('pages.userReportApproval.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.userReportApproval.date.start')"
|
||||
:end-placeholder="$t('pages.userReportApproval.date.end')"
|
||||
/>
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.updateUserId"
|
||||
placeholder="后台成员"
|
||||
:placeholder="$t('pages.userReportApproval.filter.adminMember')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
clearable
|
||||
@ -97,7 +97,7 @@
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.userReportApproval.action.search') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
@ -117,11 +117,11 @@
|
||||
<div>
|
||||
<user-table-exhibit :user-profile="scope.row.reportUser" />
|
||||
</div>
|
||||
<div style="margin: 0px 20px;"><el-tag>举报</el-tag></div>
|
||||
<div style="margin: 0px 20px;"><el-tag>{{ $t('pages.userReportApproval.tag.report') }}</el-tag></div>
|
||||
<div>
|
||||
<user-table-exhibit :user-profile="scope.row.reportedUser" />
|
||||
</div>
|
||||
<div style="margin: 0px 20px;"><el-tag>涉嫌</el-tag></div>
|
||||
<div style="margin: 0px 20px;"><el-tag>{{ $t('pages.userReportApproval.tag.suspected') }}</el-tag></div>
|
||||
<div>{{ scope.row.reportTypeName }}</div>
|
||||
</div>
|
||||
</el-col>
|
||||
@ -177,10 +177,10 @@
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24" class="expand-col">
|
||||
举报内容: {{ scope.row.reportedContent }}
|
||||
{{ $t('pages.userReportApproval.label.reportContent') }}: {{ scope.row.reportedContent }}
|
||||
</el-col>
|
||||
<el-col v-if="scope.row.updateNickname" :span="24">
|
||||
最近处理人: {{ scope.row.updateNickname }}
|
||||
{{ $t('pages.userReportApproval.label.latestHandler') }}: {{ scope.row.updateNickname }}
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
@ -193,13 +193,13 @@
|
||||
|
||||
<el-table-column
|
||||
prop="reportTypeName"
|
||||
label="举报类型"
|
||||
:label="$t('pages.userReportApproval.table.reportType')"
|
||||
align="center"
|
||||
min-width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="创建时间"
|
||||
:label="$t('pages.userReportApproval.table.createTime')"
|
||||
align="center"
|
||||
width="200"
|
||||
>
|
||||
@ -209,7 +209,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="updateTime"
|
||||
label="修改时间"
|
||||
:label="$t('pages.userReportApproval.table.updateTime')"
|
||||
align="center"
|
||||
width="200"
|
||||
>
|
||||
@ -217,12 +217,12 @@
|
||||
{{ scope.row.updateTime | dateFormat }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="100">
|
||||
<el-table-column :label="$t('pages.userReportApproval.table.actions')" align="center" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="text"
|
||||
@click="accountHanle(scope.row)"
|
||||
>账号处理</el-button>
|
||||
>{{ $t('pages.userReportApproval.action.accountHandle') }}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -233,23 +233,21 @@
|
||||
<el-collapse>
|
||||
<el-collapse-item>
|
||||
<template slot="title">
|
||||
操作描述 <i class="header-icon el-icon-info" />
|
||||
{{ $t('pages.userReportApproval.description.title') }} <i class="header-icon el-icon-info" />
|
||||
</template>
|
||||
<div style="text-align:left;">
|
||||
<p>
|
||||
举报审批不会对用户信息及资源做
|
||||
“任何处理”,处理需要到对应的资源模块进行审批
|
||||
{{ $t('pages.userReportApproval.description.noDirectAction') }}
|
||||
</p>
|
||||
<p>
|
||||
* 有效:表示举报有效,系统将发放 “参数配置”
|
||||
中指定糖果数量奖励给举报提交用户
|
||||
{{ $t('pages.userReportApproval.description.valid') }}
|
||||
</p>
|
||||
<p>* 无效: 表示举报无效</p>
|
||||
<p>{{ $t('pages.userReportApproval.description.invalid') }}</p>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
<div style="padding:5px;font-size:14px;color:#909399">
|
||||
已勾选了:<span style="color:#F00">{{ checkList.length }}</span>
|
||||
{{ $t('pages.userReportApproval.label.selectedCount') }}:<span style="color:#F00">{{ checkList.length }}</span>
|
||||
</div>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
@ -257,7 +255,7 @@
|
||||
icon="el-icon-folder-checked"
|
||||
@click="pass"
|
||||
>
|
||||
有效
|
||||
{{ $t('pages.userReportApproval.action.valid') }}
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
@ -266,7 +264,7 @@
|
||||
icon="el-icon-folder-delete"
|
||||
@click="notpass"
|
||||
>
|
||||
无效
|
||||
{{ $t('pages.userReportApproval.action.invalid') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<pagination
|
||||
@ -310,27 +308,27 @@ export default {
|
||||
sysOriginPlatforms,
|
||||
pickerOptions,
|
||||
reportStatus: [
|
||||
{ value: 0, name: '待审核' },
|
||||
{ value: 1, name: '有效举报' },
|
||||
{ value: 2, name: '无效举报' }
|
||||
{ value: 0 },
|
||||
{ value: 1 },
|
||||
{ value: 2 }
|
||||
],
|
||||
thatSelectedUserId: '',
|
||||
userDeatilsDrawer: false,
|
||||
accountHandleVisible: false,
|
||||
reportOrigins: [
|
||||
{ value: 'VIDEO', name: '视频' },
|
||||
{ value: 'CARD', name: '卡片' },
|
||||
{ value: 'IM', name: 'IM聊天' },
|
||||
{ value: 'SHORT_VIDEO', name: '短视频' },
|
||||
{ value: 'PROFILE', name: '个人资料' }
|
||||
{ value: 'VIDEO' },
|
||||
{ value: 'CARD' },
|
||||
{ value: 'IM' },
|
||||
{ value: 'SHORT_VIDEO' },
|
||||
{ value: 'PROFILE' }
|
||||
],
|
||||
reportTypes: [
|
||||
{ value: 0, name: '非法信息' },
|
||||
{ value: 1, name: '人身攻击' },
|
||||
{ value: 2, name: '不适当的内容' },
|
||||
{ value: 3, name: '发送垃圾邮件' },
|
||||
{ value: 4, name: '诈骗' },
|
||||
{ value: 5, name: '涉及色情' }
|
||||
{ value: 0 },
|
||||
{ value: 1 },
|
||||
{ value: 2 },
|
||||
{ value: 3 },
|
||||
{ value: 4 },
|
||||
{ value: 5 }
|
||||
],
|
||||
list: [],
|
||||
checkList: [],
|
||||
@ -417,9 +415,15 @@ export default {
|
||||
this.accountHandleVisible = true
|
||||
this.thatSelectedUserId = row.reportedUser.id
|
||||
},
|
||||
reportStatusName(status) {
|
||||
return this.$t(`pages.userReportApproval.reportStatus.${status}`)
|
||||
},
|
||||
reportTypeName(type) {
|
||||
return this.$t(`pages.userReportApproval.reportType.${type}`)
|
||||
},
|
||||
renderDataSuccess() {
|
||||
this.$message({
|
||||
message: 'Successful',
|
||||
message: this.$t('pages.userReportApproval.message.success'),
|
||||
type: 'success'
|
||||
})
|
||||
this.renderData()
|
||||
@ -434,11 +438,11 @@ export default {
|
||||
pass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userReportApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that
|
||||
.$confirm('确认审核选中记录吗?', '提示', {
|
||||
.$confirm(that.$t('pages.userReportApproval.message.confirmApproval'), that.$t('pages.userReportApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
@ -458,11 +462,11 @@ export default {
|
||||
notpass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userReportApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that
|
||||
.$confirm('确认审核选中记录吗?', '提示', {
|
||||
.$confirm(that.$t('pages.userReportApproval.message.confirmApproval'), that.$t('pages.userReportApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
@ -523,13 +527,13 @@ export default {
|
||||
copyText(text)
|
||||
.then(() => {
|
||||
that.$message({
|
||||
message: '复制成功',
|
||||
message: that.$t('pages.userReportApproval.message.copySuccess'),
|
||||
type: 'success'
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
that.$message({
|
||||
message: '复制失败',
|
||||
message: that.$t('pages.userReportApproval.message.copyFailed'),
|
||||
type: 'error'
|
||||
})
|
||||
})
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="归属系统"
|
||||
:placeholder="$t('pages.roomCoverApproval.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -26,25 +26,25 @@
|
||||
type="datetimerange"
|
||||
value-format="timestamp"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:range-separator="$t('pages.roomCoverApproval.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.roomCoverApproval.date.start')"
|
||||
:end-placeholder="$t('pages.roomCoverApproval.date.end')"
|
||||
align="right"
|
||||
/>
|
||||
</div>
|
||||
<el-input
|
||||
v-model="listQuery.roomAccount"
|
||||
v-number
|
||||
placeholder="房间账号"
|
||||
:placeholder="$t('pages.roomCoverApproval.filter.roomAccount')"
|
||||
style="width: 200px;"
|
||||
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.roomCoverApproval.filter.userId')" />
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.approveStatus"
|
||||
placeholder="审批状态"
|
||||
:placeholder="$t('pages.roomCoverApproval.filter.approvalStatus')"
|
||||
style="width: 240px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -52,7 +52,7 @@
|
||||
<el-option
|
||||
v-for="item in commonApprovalStatus"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="approvalStatusName(item.value)"
|
||||
:value="item.value"
|
||||
:disabled="item.value == 'NOT_PASS'"
|
||||
/>
|
||||
@ -65,10 +65,10 @@
|
||||
:disabled="searchDisabled"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.roomCoverApproval.action.search') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">全选</el-checkbox>
|
||||
<el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">{{ $t('pages.roomCoverApproval.selection.all') }}</el-checkbox>
|
||||
<div style="margin: 15px 0;" />
|
||||
<el-row v-loading="listLoading" :gutter="10">
|
||||
<el-col v-for="(item, index) in list" :key="index" :span="4" style="margin-bottom: 10px;">
|
||||
@ -77,12 +77,12 @@
|
||||
<div class="details">
|
||||
<el-popover
|
||||
placement="top-start"
|
||||
title="详情"
|
||||
:title="$t('pages.roomCoverApproval.popover.details')"
|
||||
trigger="hover"
|
||||
>
|
||||
<div>
|
||||
<div>房间ID:{{ item.roomId }} </div>
|
||||
<div>用户ID:{{ item.userId }} </div>
|
||||
<div>{{ $t('pages.roomCoverApproval.label.roomId') }}: {{ item.roomId }} </div>
|
||||
<div>{{ $t('pages.roomCoverApproval.label.userId') }}: {{ item.userId }} </div>
|
||||
</div>
|
||||
<i slot="reference" class="el-icon-info" />
|
||||
</el-popover>
|
||||
@ -104,25 +104,25 @@
|
||||
<div style="padding: 14px">
|
||||
<div class="bottom">
|
||||
<el-checkbox-group v-model="checkList">
|
||||
<el-checkbox :key="item.id" :label="index">选中</el-checkbox>
|
||||
<el-checkbox :key="item.id" :label="index">{{ $t('pages.roomCoverApproval.selection.selected') }}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
<!--<el-table-column type="radio" width="55" />-->
|
||||
<div class="info" @click="handleClickCard(index)">
|
||||
<div>昵称: <a class="underline" @click.stop="queryUserDetails(item.userId)">{{ item.userBaseInfo.userNickname }}</a></div>
|
||||
<div>{{ $t('pages.roomCoverApproval.label.nickname') }}: <a class="underline" @click.stop="queryUserDetails(item.userId)">{{ item.userBaseInfo.userNickname }}</a></div>
|
||||
<div class="line">
|
||||
<div>性别:{{ item.userBaseInfo.userSexName }} </div>
|
||||
<div>年龄:{{ item.userBaseInfo.age }} </div>
|
||||
<div>{{ $t('pages.roomCoverApproval.label.gender') }}: {{ genderName(item.userBaseInfo.userSex, item.userBaseInfo.userSexName) }} </div>
|
||||
<div>{{ $t('pages.roomCoverApproval.label.age') }}: {{ item.userBaseInfo.age }} </div>
|
||||
</div>
|
||||
</div>
|
||||
<el-button type="text" class="button" @click="editUserForm(item.userId)">编辑用户</el-button>
|
||||
<el-button type="text" class="button" @click="accountHanle(item.userId)">账号处理</el-button>
|
||||
<el-button type="text" class="button" @click="editUserForm(item.userId)">{{ $t('pages.roomCoverApproval.action.editUser') }}</el-button>
|
||||
<el-button type="text" class="button" @click="accountHanle(item.userId)">{{ $t('pages.roomCoverApproval.action.accountHandle') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="text-align:center;">
|
||||
<div style="padding:5px;font-size:14px;color:#909399">已勾选了:<span style="color:#F00">{{ checkList.length }}</span></div>
|
||||
<div style="padding:5px;font-size:14px;color:#909399">{{ $t('pages.roomCoverApproval.label.selectedCount') }}:<span style="color:#F00">{{ checkList.length }}</span></div>
|
||||
<el-button
|
||||
v-if="isAllowApproval"
|
||||
class="filter-item"
|
||||
@ -130,7 +130,7 @@
|
||||
icon="el-icon-folder-checked"
|
||||
@click="pass"
|
||||
>
|
||||
鉴定通过
|
||||
{{ $t('pages.roomCoverApproval.action.pass') }}
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
@ -139,7 +139,7 @@
|
||||
icon="el-icon-folder-delete"
|
||||
@click="notpass"
|
||||
>
|
||||
鉴定违规
|
||||
{{ $t('pages.roomCoverApproval.action.reject') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<pagination
|
||||
@ -285,13 +285,25 @@ export default {
|
||||
}
|
||||
this.isIndeterminate = false
|
||||
},
|
||||
approvalStatusName(status) {
|
||||
return this.$t(`pages.roomCoverApproval.approvalStatus.${status}`)
|
||||
},
|
||||
genderName(gender, fallback = '') {
|
||||
if (gender === 0) {
|
||||
return this.$t('pages.roomCoverApproval.gender.female')
|
||||
}
|
||||
if (gender === 1) {
|
||||
return this.$t('pages.roomCoverApproval.gender.male')
|
||||
}
|
||||
return fallback
|
||||
},
|
||||
pass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.roomCoverApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.roomCoverApproval.message.confirmApproval'), that.$t('pages.roomCoverApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
@ -309,10 +321,10 @@ export default {
|
||||
notpass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.roomCoverApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.roomCoverApproval.message.confirmApproval'), that.$t('pages.roomCoverApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
@ -333,7 +345,7 @@ export default {
|
||||
},
|
||||
renderDataSuccess() {
|
||||
this.$message({
|
||||
message: 'Successful',
|
||||
message: this.$t('pages.roomCoverApproval.message.success'),
|
||||
type: 'success'
|
||||
})
|
||||
this.renderData()
|
||||
|
||||
@ -8,18 +8,18 @@
|
||||
type="datetimerange"
|
||||
value-format="timestamp"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:range-separator="$t('pages.userProfileDescApproval.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.userProfileDescApproval.date.start')"
|
||||
:end-placeholder="$t('pages.userProfileDescApproval.date.end')"
|
||||
align="right"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<account-input v-model="listQuery.userId" placeholder="用户ID" />
|
||||
<account-input v-model="listQuery.userId" :placeholder="$t('pages.userProfileDescApproval.filter.userId')" />
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.approveStatus"
|
||||
placeholder="审批状态"
|
||||
:placeholder="$t('pages.userProfileDescApproval.filter.approvalStatus')"
|
||||
style="width: 240px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -27,7 +27,7 @@
|
||||
<el-option
|
||||
v-for="item in commonApprovalStatus"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="$t(`pages.userProfileDescApproval.approvalStatus.${item.value}`)"
|
||||
:value="item.value"
|
||||
:disabled="item.value == 'NOT_PASS'"
|
||||
/>
|
||||
@ -40,7 +40,7 @@
|
||||
:disabled="searchDisabled"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.userProfileDescApproval.action.search') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
@ -53,28 +53,28 @@
|
||||
@selection-change="selsUserChange"
|
||||
>
|
||||
<el-table-column v-if="isAllowApproval" type="selection" width="55" />
|
||||
<el-table-column prop="userBaseInfo.userNickname" label="昵称" align="center" />
|
||||
<el-table-column prop="profileDesc" label="签名" align="center" />
|
||||
<el-table-column prop="updateTime" label="修改时间" align="center" width="200">
|
||||
<el-table-column prop="userBaseInfo.userNickname" :label="$t('pages.userProfileDescApproval.table.nickname')" align="center" />
|
||||
<el-table-column prop="profileDesc" :label="$t('pages.userProfileDescApproval.table.signature')" align="center" />
|
||||
<el-table-column prop="updateTime" :label="$t('pages.userProfileDescApproval.table.updateTime')" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.updateTime | dateFormat }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" align="center" width="100">
|
||||
<el-table-column fixed="right" :label="$t('pages.userProfileDescApproval.table.actions')" align="center" width="100">
|
||||
<template slot-scope="scope">
|
||||
<div><el-button type="text" @click="queryUserDetails(scope.row)">用户详情</el-button></div>
|
||||
<div><el-button type="text" @click="queryUserDetails(scope.row)">{{ $t('pages.userProfileDescApproval.action.userDetails') }}</el-button></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-if="isAllowApproval" style="text-align:center;padding: 20px;">
|
||||
<div style="padding:5px;font-size:14px;color:#909399">已勾选了:<span style="color:#F00">{{ checkList.length }}</span></div>
|
||||
<div style="padding:5px;font-size:14px;color:#909399">{{ $t('pages.userProfileDescApproval.label.selectedCount') }}:<span style="color:#F00">{{ checkList.length }}</span></div>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
icon="el-icon-folder-checked"
|
||||
@click="pass"
|
||||
>
|
||||
鉴定通过
|
||||
{{ $t('pages.userProfileDescApproval.action.pass') }}
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
@ -83,7 +83,7 @@
|
||||
icon="el-icon-folder-delete"
|
||||
@click="notpass"
|
||||
>
|
||||
鉴定违规
|
||||
{{ $t('pages.userProfileDescApproval.action.reject') }}
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
@ -184,10 +184,10 @@ export default {
|
||||
pass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userProfileDescApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.userProfileDescApproval.message.confirmApproval'), that.$t('pages.userProfileDescApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
@ -205,10 +205,10 @@ export default {
|
||||
notpass() {
|
||||
const that = this
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.userProfileDescApproval.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.userProfileDescApproval.message.confirmApproval'), that.$t('pages.userProfileDescApproval.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="归属系统"
|
||||
:placeholder="$t('pages.feedback.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -19,11 +19,11 @@
|
||||
</el-option>
|
||||
</el-select>
|
||||
<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.feedback.filter.userId')" />
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.approvalStatus"
|
||||
placeholder="审核状态"
|
||||
:placeholder="$t('pages.feedback.filter.approvalStatus')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
clearable
|
||||
@ -32,13 +32,13 @@
|
||||
<el-option
|
||||
v-for="(item, index) in approvalStatusArray"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:label="approvalStatusName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-select
|
||||
v-model="listQuery.updateUserId"
|
||||
placeholder="后台成员"
|
||||
:placeholder="$t('pages.feedback.filter.backendMember')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
clearable
|
||||
@ -58,7 +58,7 @@
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.feedback.action.search') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
@ -66,7 +66,7 @@
|
||||
icon="el-icon-edit"
|
||||
@click="batchProcessing"
|
||||
>
|
||||
批量处理
|
||||
{{ $t('pages.feedback.action.batchProcess') }}
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
@ -111,62 +111,62 @@
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12" class="expand-col">
|
||||
手机型号: <span>{{ scope.row.originPhoneModel }}</span>
|
||||
{{ $t('pages.feedback.detail.phoneModel') }}: <span>{{ scope.row.originPhoneModel }}</span>
|
||||
</el-col>
|
||||
<el-col :span="12" class="expand-col">
|
||||
App版本: <span>{{ scope.row.appVersion }}</span>
|
||||
{{ $t('pages.feedback.detail.appVersion') }}: <span>{{ scope.row.appVersion }}</span>
|
||||
</el-col>
|
||||
<el-col :span="24" class="expand-col">
|
||||
设备号: <span>{{ scope.row.imei }}</span>
|
||||
{{ $t('pages.feedback.detail.deviceId') }}: <span>{{ scope.row.imei }}</span>
|
||||
</el-col>
|
||||
<el-col :span="24" class="expand-col">
|
||||
反馈内容: {{ scope.row.content }}
|
||||
{{ $t('pages.feedback.detail.content') }}: {{ scope.row.content }}
|
||||
</el-col>
|
||||
<el-col v-if="scope.row.approvalRemarks" :span="24" class="expand-col">
|
||||
备注: <span class="font-danger">{{ scope.row.approvalRemarks }}</span>
|
||||
{{ $t('pages.feedback.detail.remarks') }}: <span class="font-danger">{{ scope.row.approvalRemarks }}</span>
|
||||
</el-col>
|
||||
<el-col v-if="scope.row.updateNickname" :span="24" class="expand-col">
|
||||
最近处理人: {{ scope.row.updateNickname }}
|
||||
{{ $t('pages.feedback.detail.latestProcessor') }}: {{ scope.row.updateNickname }}
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="isAllowApproval" type="selection" width="55" />
|
||||
<el-table-column prop="sysOrigin" label="系统" align="center" width="60">
|
||||
<el-table-column prop="sysOrigin" :label="$t('pages.feedback.table.system')" align="center" width="80">
|
||||
<template slot-scope="scope">
|
||||
<sys-origin-icon :icon="scope.row.sysOrigin" :desc="scope.row.sysOrigin" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="反馈用户" align="center" min-width="200">
|
||||
<el-table-column :label="$t('pages.feedback.table.feedbackUser')" align="center" min-width="200">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.userProfile">
|
||||
<user-table-exhibit :user-profile="scope.row.userProfile" />
|
||||
</div>
|
||||
<span v-else style="color:rgb(216 157 116)">未登录</span>
|
||||
<span v-else style="color:rgb(216 157 116)">{{ $t('pages.feedback.status.notLoggedIn') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="level" label="处理状态" align="center" min-width="100">
|
||||
<el-table-column prop="level" :label="$t('pages.feedback.table.processStatus')" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.approvalStatus === 0">未处理</span>
|
||||
<span v-else-if="scope.row.approvalStatus === 1" style="color:rgb(72 196 104)"> 已处理 </span>
|
||||
<span v-else>待处理</span>
|
||||
<span v-if="scope.row.approvalStatus === 0">{{ $t('pages.feedback.approvalStatus.unprocessed') }}</span>
|
||||
<span v-else-if="scope.row.approvalStatus === 1" style="color:rgb(72 196 104)"> {{ $t('pages.feedback.approvalStatus.processed') }} </span>
|
||||
<span v-else>{{ $t('pages.feedback.approvalStatus.pending') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" align="center" width="200">
|
||||
<el-table-column prop="createTime" :label="$t('pages.feedback.table.createdAt')" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.createTime | dateFormat }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="updateTime" label="修改时间" align="center" width="200">
|
||||
<el-table-column prop="updateTime" :label="$t('pages.feedback.table.updatedAt')" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.updateTime | dateFormat }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center">
|
||||
<el-table-column :label="$t('pages.feedback.table.actions')" align="center" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.approvalStatus === 0">
|
||||
<!-- <el-button type="text" @click.native="handlDel(scope.row.id)">删除</el-button> -->
|
||||
<el-button type="text" @click="feedback(scope.row)">处理</el-button>
|
||||
<!-- <el-button type="text" @click.native="handlDel(scope.row.id)">Delete</el-button> -->
|
||||
<el-button type="text" @click="feedback(scope.row)">{{ $t('pages.feedback.action.process') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -337,6 +337,13 @@ export default {
|
||||
selsUserChange(checkList) {
|
||||
this.checkList = checkList
|
||||
},
|
||||
approvalStatusName(status) {
|
||||
const statusMap = {
|
||||
0: this.$t('pages.feedback.approvalStatus.unprocessed'),
|
||||
1: this.$t('pages.feedback.approvalStatus.processed')
|
||||
}
|
||||
return statusMap[status] || this.$t('pages.feedback.approvalStatus.pending')
|
||||
},
|
||||
getApprovalParams() {
|
||||
const that = this
|
||||
const approvalParams = []
|
||||
@ -353,21 +360,21 @@ export default {
|
||||
batchProcessing() {
|
||||
const that = this
|
||||
if (that.listQuery.approvalStatus !== 0) {
|
||||
that.$opsMessage.warn('选择审核状态下拉框为【未处理】,再操作')
|
||||
that.$opsMessage.warn(that.$t('pages.feedback.message.selectUnprocessedFirst', { status: that.$t('pages.feedback.approvalStatus.unprocessed') }))
|
||||
return
|
||||
}
|
||||
if (that.checkList.length === 0) {
|
||||
that.$opsMessage.warn('请勾选审批项')
|
||||
that.$opsMessage.warn(that.$t('pages.feedback.message.selectApprovalItem'))
|
||||
return
|
||||
}
|
||||
that.$confirm('确认审核选中记录吗?', '提示', {
|
||||
that.$confirm(that.$t('pages.feedback.message.confirmApproval'), that.$t('pages.feedback.confirm.title'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
batchProcessFeedback({ processFeedbacks: that.getApprovalParams() }).then(res => {
|
||||
this.listLoading = false
|
||||
this.$message({
|
||||
message: '批量处理成功',
|
||||
message: this.$t('pages.feedback.message.batchProcessSuccess'),
|
||||
type: 'success'
|
||||
})
|
||||
this.renderData()
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
label-width="110px"
|
||||
style="margin-right:50px;"
|
||||
>
|
||||
<el-form-item label="系统" prop="sysOrigin">
|
||||
<el-form-item :label="$t('pages.propsResourceConfig.form.system')" prop="sysOrigin">
|
||||
<el-select
|
||||
v-model="form.sysOrigin"
|
||||
placeholder="归属系统"
|
||||
:placeholder="$t('pages.propsResourceConfig.filter.system')"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-option
|
||||
@ -38,10 +38,10 @@
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="type">
|
||||
<el-form-item :label="$t('pages.propsResourceConfig.form.type')" prop="type">
|
||||
<el-select
|
||||
v-model="form.type"
|
||||
placeholder="类型"
|
||||
:placeholder="$t('pages.propsResourceConfig.filter.type')"
|
||||
style="width:100%;"
|
||||
class="filter-item"
|
||||
@change="selectdTheme"
|
||||
@ -49,12 +49,12 @@
|
||||
<el-option
|
||||
v-for="item in propsTypes"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="$t(`pages.propsResourceConfig.propsTypes.${item.value}`)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="封面" prop="cover">
|
||||
<el-form-item :label="$t('pages.propsResourceConfig.form.cover')" prop="cover">
|
||||
<el-upload
|
||||
:disabled="coverUploadLoading"
|
||||
:file-list="coverFileList"
|
||||
@ -75,7 +75,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'RED_PACKET'"
|
||||
label="封面预览图"
|
||||
:label="$t('pages.propsResourceConfig.form.coverPreview')"
|
||||
prop="sourceUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -98,7 +98,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'RED_PACKET'"
|
||||
label="房间发送页图"
|
||||
:label="$t('pages.propsResourceConfig.form.roomSendCover')"
|
||||
prop="roomSendCoverUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -121,7 +121,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'RED_PACKET'"
|
||||
label=" 房间拆红包大图"
|
||||
:label="$t('pages.propsResourceConfig.form.roomNotOpened')"
|
||||
prop="roomNotOpenedUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -144,7 +144,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'RED_PACKET'"
|
||||
label="房间红包已打开大图"
|
||||
:label="$t('pages.propsResourceConfig.form.roomOpened')"
|
||||
prop="roomOpenedUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -167,7 +167,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'RED_PACKET'"
|
||||
label="IM发送页图"
|
||||
:label="$t('pages.propsResourceConfig.form.imSendCover')"
|
||||
prop="imSendCoverUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -190,7 +190,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'RED_PACKET'"
|
||||
label="IM/房间封面未打开小图"
|
||||
:label="$t('pages.propsResourceConfig.form.imNotOpened')"
|
||||
prop="imNotOpenedUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -213,7 +213,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'RED_PACKET'"
|
||||
label="IM/房间封面已打开小图"
|
||||
:label="$t('pages.propsResourceConfig.form.imOpened')"
|
||||
prop="imOpenedUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -237,7 +237,7 @@
|
||||
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'RED_PACKET'"
|
||||
label="IM/房间封面已打开小图2"
|
||||
:label="$t('pages.propsResourceConfig.form.imOpenedTwo')"
|
||||
prop="imOpenedUrlTwo"
|
||||
>
|
||||
<el-upload
|
||||
@ -279,10 +279,10 @@
|
||||
:loading="sourceUploadLoading"
|
||||
size="small"
|
||||
type="primary"
|
||||
>点击上传</el-button
|
||||
>{{ $t('pages.propsResourceConfig.action.upload') }}</el-button
|
||||
>
|
||||
<div slot="tip" class="el-upload__tip">
|
||||
只能上传svga/pag/mp4文件
|
||||
{{ $t('pages.propsResourceConfig.message.uploadSvgaTip') }}
|
||||
</div>
|
||||
</div>
|
||||
</el-upload>
|
||||
@ -290,7 +290,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'CHAT_BUBBLE'"
|
||||
label="iOS 资源 "
|
||||
:label="$t('pages.propsResourceConfig.form.iosResource')"
|
||||
prop="sourceUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -313,7 +313,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-show="selectedTypeName === 'CHAT_BUBBLE'"
|
||||
label="Android 资源 "
|
||||
:label="$t('pages.propsResourceConfig.form.androidResource')"
|
||||
prop="expand"
|
||||
>
|
||||
<el-upload
|
||||
@ -336,7 +336,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="isBackground"
|
||||
label="房间装扮背景"
|
||||
:label="$t('pages.propsResourceConfig.form.roomBackground')"
|
||||
prop="sourceUrl"
|
||||
>
|
||||
<el-upload
|
||||
@ -357,50 +357,50 @@
|
||||
/>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-form-item :label="$t('pages.propsResourceConfig.form.name')" prop="name">
|
||||
<el-select
|
||||
v-if="form.type === 'NOBLE_VIP'"
|
||||
v-model="form.name"
|
||||
placeholder="贵族类型"
|
||||
:placeholder="$t('pages.propsResourceConfig.placeholder.nobleType')"
|
||||
style="width: 100%"
|
||||
class="filter-item"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in nobleVipTabs"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="$t(`pages.propsResourceConfig.nobleVipTypes.${item.value}`)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input v-else v-model.trim="form.name" type="text" />
|
||||
</el-form-item>
|
||||
<el-form-item v-if="!isUpdate" label="编码" prop="code">
|
||||
<el-form-item v-if="!isUpdate" :label="$t('pages.propsResourceConfig.form.code')" prop="code">
|
||||
<el-input
|
||||
v-model.trim="form.code"
|
||||
type="text"
|
||||
placeholder="编码添加后不能修改"
|
||||
:placeholder="$t('pages.propsResourceConfig.placeholder.codeReadonly')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isPrice" label="底价" prop="amount">
|
||||
<el-form-item v-if="isPrice" :label="$t('pages.propsResourceConfig.form.basePrice')" prop="amount">
|
||||
<el-input v-model.trim="form.amount" v-number type="text" />
|
||||
</el-form-item>
|
||||
<el-form-item label="admin free" prop="adminFree">
|
||||
<el-switch
|
||||
v-model="form.adminFree"
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
:active-text="$t('pages.propsResourceConfig.status.yes')"
|
||||
:inactive-text="$t('pages.propsResourceConfig.status.no')"
|
||||
></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="bd free" prop="bdFree">
|
||||
<el-switch
|
||||
v-model="form.bdFree"
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
:active-text="$t('pages.propsResourceConfig.status.yes')"
|
||||
:inactive-text="$t('pages.propsResourceConfig.status.no')"
|
||||
></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submitForm()">保存</el-button>
|
||||
<el-button @click="handleClose()">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm()">{{ $t('pages.propsResourceConfig.action.save') }}</el-button>
|
||||
<el-button @click="handleClose()">{{ $t('pages.propsResourceConfig.action.cancel') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
@ -423,7 +423,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
const commonRules = [
|
||||
{ required: true, message: "必填字段不可为空", trigger: "blur" }
|
||||
{ required: true, message: this.$t("pages.propsResourceConfig.validation.required"), trigger: "blur" }
|
||||
];
|
||||
return {
|
||||
nobleVipTabs,
|
||||
@ -550,7 +550,9 @@ export default {
|
||||
return this.form.type === "CHAT_BUBBLE" && !this.form.expand;
|
||||
},
|
||||
textOptTitle() {
|
||||
return this.row && this.row.id ? "修改" : "添加";
|
||||
return this.row && this.row.id
|
||||
? this.$t("pages.propsResourceConfig.action.edit")
|
||||
: this.$t("pages.propsResourceConfig.action.add");
|
||||
},
|
||||
isUpdate() {
|
||||
return this.row && this.row.id;
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="归属系统"
|
||||
:placeholder="$t('pages.propsResourceConfig.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -23,23 +23,33 @@
|
||||
|
||||
<el-select
|
||||
v-model="listQuery.type"
|
||||
placeholder="类型"
|
||||
:placeholder="$t('pages.propsResourceConfig.filter.type')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
>
|
||||
<el-option v-for="item in propsTypes" :key="item.value" :label="item.name" :value="item.value" />
|
||||
<el-option
|
||||
v-for="item in propsTypes"
|
||||
:key="item.value"
|
||||
:label="$t(`pages.propsResourceConfig.propsTypes.${item.value}`)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
|
||||
<el-select
|
||||
v-model="listQuery.del"
|
||||
placeholder="上/下架"
|
||||
:placeholder="$t('pages.propsResourceConfig.filter.shelfStatus')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
clearable
|
||||
@change="handleSearch"
|
||||
>
|
||||
<el-option v-for="item in showcaseTypes" :key="item.value" :label="item.name" :value="item.value" />
|
||||
<el-option
|
||||
v-for="item in showcaseTypes"
|
||||
:key="item.value"
|
||||
:label="$t(`pages.propsResourceConfig.status.${item.value ? 'offShelf' : 'onShelf'}`)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
|
||||
<el-input
|
||||
@ -53,7 +63,7 @@
|
||||
|
||||
<el-input
|
||||
v-model.trim="listQuery.name"
|
||||
placeholder="名称"
|
||||
:placeholder="$t('pages.propsResourceConfig.filter.name')"
|
||||
clearable
|
||||
style="width: 200px;"
|
||||
class="filter-item"
|
||||
@ -65,7 +75,7 @@
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.propsResourceConfig.action.search') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="buttonPermissions.includes('props:config:add')"
|
||||
@ -74,7 +84,7 @@
|
||||
icon="el-icon-edit"
|
||||
@click="handleCreate"
|
||||
>
|
||||
添加
|
||||
{{ $t('pages.propsResourceConfig.action.add') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="buttonPermissions.includes('props:config:sales:total')"
|
||||
@ -83,7 +93,7 @@
|
||||
icon="el-icon-monitor"
|
||||
@click="clickQuerySalesOverview"
|
||||
>
|
||||
销售情况
|
||||
{{ $t('pages.propsResourceConfig.action.sales') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
@ -95,10 +105,14 @@
|
||||
@cell-mouse-enter="handleMouseEnter"
|
||||
>
|
||||
<el-table-column prop="id" width="200" label="ID" align="center" />
|
||||
<el-table-column prop="code" width="150" label="编号" align="center" />
|
||||
<el-table-column prop="typeName" width="80" label="类型" align="center" />
|
||||
<el-table-column prop="name" label="名称" align="center" />
|
||||
<el-table-column label="资源" width="80" align="center">
|
||||
<el-table-column prop="code" width="150" :label="$t('pages.propsResourceConfig.table.code')" align="center" />
|
||||
<el-table-column prop="typeName" width="80" :label="$t('pages.propsResourceConfig.table.type')" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.type ? $t(`pages.propsResourceConfig.propsTypes.${scope.row.type}`) : scope.row.typeName }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" :label="$t('pages.propsResourceConfig.table.name')" align="center" />
|
||||
<el-table-column :label="$t('pages.propsResourceConfig.table.resource')" width="80" align="center">
|
||||
<template slot-scope="scope">
|
||||
<div class="preview-img">
|
||||
<el-image
|
||||
@ -115,7 +129,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="200" label="上/下架" align="center">
|
||||
<el-table-column width="200" :label="$t('pages.propsResourceConfig.table.shelfStatus')" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.del"
|
||||
@ -125,17 +139,17 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="amount" width="80" label="底价" align="center" />
|
||||
<el-table-column v-if="buttonPermissions.includes('props:config:edit') || buttonPermissions.includes('props:config:sales:single')" fixed="right" label="操作" align="center" width="200">
|
||||
<el-table-column prop="amount" width="80" :label="$t('pages.propsResourceConfig.table.basePrice')" align="center" />
|
||||
<el-table-column v-if="buttonPermissions.includes('props:config:edit') || buttonPermissions.includes('props:config:sales:single')" fixed="right" :label="$t('pages.propsResourceConfig.table.actions')" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-if="buttonPermissions.includes('props:config:edit')" type="text" @click.native="handleUpdate(scope.row)">编辑</el-button>
|
||||
<el-button v-if="buttonPermissions.includes('props:config:sales:single')" type="text" @click.native="clickQuerySales(scope.row)">销售情况</el-button>
|
||||
<el-button v-if="buttonPermissions.includes('props:config:edit')" type="text" @click.native="handleUpdate(scope.row)">{{ $t('pages.propsResourceConfig.action.edit') }}</el-button>
|
||||
<el-button v-if="buttonPermissions.includes('props:config:sales:single')" type="text" @click.native="clickQuerySales(scope.row)">{{ $t('pages.propsResourceConfig.action.sales') }}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<template>
|
||||
<el-table-column prop="adminFree" label="admin free" align="center">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.row.adminFree ? '是' : '否' }}</span>
|
||||
<span>{{ scope.row.adminFree ? $t('pages.propsResourceConfig.status.yes') : $t('pages.propsResourceConfig.status.no') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
@ -166,7 +180,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div v-else style="text-align: center;">
|
||||
抱歉您无权查看,请联系管理员开通查看权限 【道具管理-资源配置-查看,props:config:query】
|
||||
{{ $t('pages.propsResourceConfig.message.noPermission') }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -187,8 +201,8 @@ export default {
|
||||
salesOverviewChartsDialogVisible: false,
|
||||
salesMothlyChartsDialogVisible: false,
|
||||
showcaseTypes: [
|
||||
{ value: true, name: '下架' },
|
||||
{ value: false, name: '上架' }
|
||||
{ value: true, name: 'offShelf' },
|
||||
{ value: false, name: 'onShelf' }
|
||||
],
|
||||
formEditVisable: false,
|
||||
thisRow: {},
|
||||
|
||||
@ -31,6 +31,12 @@ export default {
|
||||
this.renderCharts()
|
||||
}
|
||||
}
|
||||
},
|
||||
$locale() {
|
||||
if (this.charts) {
|
||||
this.charts.clear()
|
||||
this.renderCharts()
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
@ -111,9 +117,9 @@ export default {
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '每日销售情况',
|
||||
name: that.$t('pages.propsResourceConfig.chart.dailySales'),
|
||||
type: 'line',
|
||||
stack: '每日销售情况',
|
||||
stack: that.$t('pages.propsResourceConfig.chart.dailySales'),
|
||||
smooth: 0.6,
|
||||
symbol: 'none',
|
||||
symbolSize: 10,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="props-config-edit">
|
||||
<el-dialog
|
||||
title="销售报表"
|
||||
:title="$t('pages.propsResourceConfig.dialog.salesReport')"
|
||||
:visible="true"
|
||||
:modal-append-to-body="true"
|
||||
:append-to-body="true"
|
||||
@ -13,7 +13,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="系统"
|
||||
:placeholder="$t('pages.propsResourceConfig.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="renderData"
|
||||
@ -34,13 +34,13 @@
|
||||
:clearable="false"
|
||||
value-format="yyyyMM"
|
||||
type="month"
|
||||
placeholder="选择月"
|
||||
:placeholder="$t('pages.propsResourceConfig.placeholder.month')"
|
||||
:editable="false"
|
||||
@change="renderData"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
月销售总额: {{ sale.monthTotal || '-' }}、年售额: {{ sale.yearTotal || '-' }}
|
||||
{{ $t('pages.propsResourceConfig.summary.monthTotal') }}: {{ sale.monthTotal || '-' }}{{ $t('pages.propsResourceConfig.summary.separator') }}{{ $t('pages.propsResourceConfig.summary.yearTotal') }}: {{ sale.yearTotal || '-' }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-loading="loading">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-application-process-approval-list">
|
||||
<el-drawer
|
||||
title="申请团队日志列表"
|
||||
:title="$t('pages.teamList.processApproval.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -13,11 +13,11 @@
|
||||
<div class="filter-container" style="margin: 10px;">
|
||||
|
||||
<div class="filter-item">
|
||||
<account-input v-model="listQuery.beProcessUserId" :sys-origin="sysOrigin" placeholder="被处理人ID" />
|
||||
<account-input v-model="listQuery.beProcessUserId" :sys-origin="sysOrigin" :placeholder="$t('pages.teamList.processApproval.processedUserId')" />
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.reason"
|
||||
placeholder="原因"
|
||||
:placeholder="$t('pages.teamList.processApproval.reason')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -25,7 +25,7 @@
|
||||
<el-option
|
||||
v-for="(item, index) in teamApprovalReasons"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:label="getTeamApprovalReasonName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -34,26 +34,26 @@
|
||||
type="primary"
|
||||
@click="handleSearch"
|
||||
>
|
||||
查询
|
||||
{{ $t('pages.teamList.action.query') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<div v-loading="listLoading">
|
||||
<el-row v-for="(item, index) in list" :key="index">
|
||||
<el-card style="margin: 10px;">
|
||||
<div>
|
||||
<el-tag type="warning">原因: {{ getTeamApprovalReasonName(item.reason) }}</el-tag>
|
||||
<el-tag type="warning" @click.native="queryUserDetails(item.beProcessUser.id)">被处理人: {{ item.beProcessUser.userNickname }}</el-tag>
|
||||
<el-tag v-if="item.createUserOrigin == 1 && item.createSysUser != null" type="info">操作人: {{ item.createSysUser.nickname }}</el-tag>
|
||||
<el-tag v-if="item.createUserOrigin == 0 && item.createUserProfile != null" type="info" @click.native="queryUserDetails(item.createUserProfile.id)">创建人: {{ item.createUserProfile.userNickname }}</el-tag>
|
||||
<el-tag type="warning">{{ $t('pages.teamList.processApproval.reasonLabel') }}: {{ getTeamApprovalReasonName(item.reason) }}</el-tag>
|
||||
<el-tag type="warning" @click.native="queryUserDetails(item.beProcessUser.id)">{{ $t('pages.teamList.processApproval.processedUser') }}: {{ item.beProcessUser.userNickname }}</el-tag>
|
||||
<el-tag v-if="item.createUserOrigin == 1 && item.createSysUser != null" type="info">{{ $t('pages.teamList.processApproval.operator') }}: {{ item.createSysUser.nickname }}</el-tag>
|
||||
<el-tag v-if="item.createUserOrigin == 0 && item.createUserProfile != null" type="info" @click.native="queryUserDetails(item.createUserProfile.id)">{{ $t('pages.teamList.processApproval.creator') }}: {{ item.createUserProfile.userNickname }}</el-tag>
|
||||
</div>
|
||||
<div class="bottom clearfix">
|
||||
<time class="time">创建时间:{{ item.createTime }}</time>
|
||||
<time class="time">{{ $t('pages.teamList.processApproval.createdAt') }}: {{ item.createTime }}</time>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-row>
|
||||
<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>
|
||||
<span v-else>已加载全部</span>
|
||||
<el-button v-if="!notMore " size="mini" :disabled="listLoading" @click="clickLoadMore">{{ $t('pages.teamList.action.loadMore') }}</el-button>
|
||||
<span v-else>{{ $t('pages.teamList.action.allLoaded') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -128,14 +128,7 @@ export default {
|
||||
this.renderData(true)
|
||||
},
|
||||
getTeamApprovalReasonName(_reason) {
|
||||
var _name = ''
|
||||
this.teamApprovalReasons.forEach(function(v, i) {
|
||||
if (v.value === _reason) {
|
||||
_name = v.name
|
||||
return
|
||||
}
|
||||
})
|
||||
return _name
|
||||
return this.$t(`pages.teamList.approvalReasonMap.${_reason}`)
|
||||
},
|
||||
handleClose() {
|
||||
this.$emit('close')
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-bill-drawer">
|
||||
<el-drawer
|
||||
title="详情"
|
||||
:title="$t('pages.teamBill.detailsDrawer.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -11,7 +11,7 @@
|
||||
custom-class="drawer-auto-layout"
|
||||
>
|
||||
<div class="team-bill-content">
|
||||
<div class="blockquote">代理</div>
|
||||
<div class="blockquote">{{ $t('pages.teamBill.section.agent') }}</div>
|
||||
<div class="content">
|
||||
<user-table-exhibit
|
||||
:user-profile="row.ownUserProfile"
|
||||
@ -19,54 +19,54 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="blockquote">账单信息</div>
|
||||
<div class="blockquote">{{ $t('pages.teamBill.section.billInfo') }}</div>
|
||||
<div class="content">
|
||||
<div class="flex-b bill-row">
|
||||
<div class="left bill-col nowrap-ellipsis">ID: {{ row.id }}</div>
|
||||
<div class="right bill-col nowrap-ellipsis">
|
||||
区域: {{ row.regionName }}
|
||||
{{ $t('pages.teamBill.label.region') }}: {{ row.regionName }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-b bill-row">
|
||||
<div class="left bill-col nowrap-ellipsis">
|
||||
账单归属: {{ row.billBelong }}
|
||||
{{ $t('pages.teamBill.label.billBelong') }}: {{ row.billBelong }}
|
||||
</div>
|
||||
<div class="left bill-col nowrap-ellipsis">
|
||||
账单标题: {{ row.billTitle }}
|
||||
{{ $t('pages.teamBill.label.billTitle') }}: {{ row.billTitle }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex-b bill-row">
|
||||
<div class="left bill-col nowrap-ellipsis">
|
||||
状态: {{ teamBillStatusMap[row.status].name }}
|
||||
{{ $t('pages.teamBill.label.status') }}: {{ teamBillStatusName(row.status) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="row.settleResult">
|
||||
<div class="flex-b bill-row">
|
||||
<div class="left bill-col nowrap-ellipsis">
|
||||
工作人数: {{ row.settleResult.workMembers }}
|
||||
{{ $t('pages.teamBill.label.workMembers') }}: {{ row.settleResult.workMembers }}
|
||||
</div>
|
||||
<div class="right bill-col nowrap-ellipsis">
|
||||
完成人数: {{ row.settleResult.finishMembers }}
|
||||
{{ $t('pages.teamBill.label.finishMembers') }}: {{ row.settleResult.finishMembers }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex-b bill-row">
|
||||
<div class="left bill-col nowrap-ellipsis">
|
||||
成员工资: {{ row.settleResult.memberSalary || 0 }}
|
||||
{{ $t('pages.teamBill.label.memberSalary') }}: {{ row.settleResult.memberSalary || 0 }}
|
||||
</div>
|
||||
<div class="right bill-col nowrap-ellipsis">
|
||||
团长工资: {{ row.settleResult.ownSalary || 0 }}
|
||||
{{ $t('pages.teamBill.label.agentSalary') }}: {{ row.settleResult.ownSalary || 0 }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex-b bill-row">
|
||||
<div class="left bill-col nowrap-ellipsis">
|
||||
扣除工资: {{ row.settleResult.deductSalary || 0 }}
|
||||
{{ $t('pages.teamBill.label.deductSalary') }}: {{ row.settleResult.deductSalary || 0 }}
|
||||
</div>
|
||||
<div class="right bill-col nowrap-ellipsis">
|
||||
合计工资: {{ row.settleResult.totalSalary || 0 }}
|
||||
{{ $t('pages.teamBill.label.totalSalary') }}: {{ row.settleResult.totalSalary || 0 }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -86,12 +86,12 @@
|
||||
</div>
|
||||
|
||||
<div v-if="row.remarks" class="bill-row">
|
||||
对外备注: {{ row.remarks }}
|
||||
{{ $t('pages.teamBill.label.externalRemarks') }}: {{ row.remarks }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="row.internalRemarks && row.internalRemarks.length > 0">
|
||||
<div class="blockquote">内部备注</div>
|
||||
<div class="blockquote">{{ $t('pages.teamBill.section.internalRemarks') }}</div>
|
||||
<div class="content">
|
||||
<el-timeline :reverse="true">
|
||||
<el-timeline-item
|
||||
@ -109,7 +109,7 @@
|
||||
</div>
|
||||
|
||||
<div v-if="row.settleResult && row.settleResult.bankCardArchives">
|
||||
<div class="blockquote">银行卡</div>
|
||||
<div class="blockquote">{{ $t('pages.teamBill.section.bankCard') }}</div>
|
||||
<div class="content">
|
||||
<div class="bank-card-list">
|
||||
<div class="bank-card-item back-blue">
|
||||
@ -179,7 +179,6 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { teamBillStatusMap } from "@/constant/team-type";
|
||||
export default {
|
||||
name: "TeamBillDetailsDrawer",
|
||||
props: {
|
||||
@ -188,12 +187,10 @@ export default {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
teamBillStatusMap: teamBillStatusMap()
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
teamBillStatusName(status) {
|
||||
return this.$t(`pages.teamBill.status.${status}`);
|
||||
},
|
||||
handleClose() {
|
||||
this.$emit("close");
|
||||
}
|
||||
|
||||
@ -15,14 +15,14 @@
|
||||
v-model="listQuery.region"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
clearable
|
||||
placeholder="区域"
|
||||
:placeholder="$t('pages.teamBill.placeholder.region')"
|
||||
@change="handleSearch"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<el-select
|
||||
v-model="listQuery.status"
|
||||
placeholder="账单状态"
|
||||
:placeholder="$t('pages.teamBill.placeholder.billStatus')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -31,7 +31,7 @@
|
||||
v-for="(item, index) in teamBillStatus"
|
||||
:key="index"
|
||||
:dis="item.value === 'UNPAID'"
|
||||
:label="item.name"
|
||||
:label="teamBillStatusName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -56,12 +56,12 @@
|
||||
<account-input
|
||||
v-model="listQuery.ownUserId"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
placeholder="代理ID"
|
||||
:placeholder="$t('pages.teamBill.placeholder.agentId')"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="filter-item">
|
||||
<el-input v-model="listQuery.id" placeholder="账单ID" />
|
||||
<el-input v-model="listQuery.id" :placeholder="$t('pages.teamBill.placeholder.billId')" />
|
||||
</div>
|
||||
|
||||
<div class="filter-item">
|
||||
@ -71,9 +71,9 @@
|
||||
value-format="timestamp"
|
||||
type="datetimerange"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期开始"
|
||||
end-placeholder="结束日期结束"
|
||||
:range-separator="$t('pages.teamBill.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.teamBill.date.start')"
|
||||
:end-placeholder="$t('pages.teamBill.date.end')"
|
||||
/>
|
||||
</div>
|
||||
<el-button
|
||||
@ -82,7 +82,7 @@
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.teamBill.action.search') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
:loading="importLoading"
|
||||
@ -91,7 +91,7 @@
|
||||
icon="el-icon-download"
|
||||
@click="clickExcel"
|
||||
>
|
||||
导出
|
||||
{{ $t('pages.teamBill.action.export') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
@ -105,7 +105,7 @@
|
||||
>
|
||||
<el-table-column type="index" width="50" label="No" />
|
||||
<el-table-column
|
||||
label="代理"
|
||||
:label="$t('pages.teamBill.table.agent')"
|
||||
align="left"
|
||||
show-overflow-tooltip
|
||||
min-width="220"
|
||||
@ -119,14 +119,14 @@
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
label="区域"
|
||||
:label="$t('pages.teamBill.table.region')"
|
||||
align="left"
|
||||
prop="regionName"
|
||||
show-overflow-tooltip
|
||||
min-width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="归属"
|
||||
:label="$t('pages.teamBill.table.belong')"
|
||||
prop="billBelong"
|
||||
align="center"
|
||||
show-overflow-tooltip
|
||||
@ -142,7 +142,7 @@
|
||||
v-if="
|
||||
listQuery.status === 'SETTLED' && listQuery.status !== 'PRE_CREATION'
|
||||
"
|
||||
label="工资"
|
||||
:label="$t('pages.teamBill.table.salary')"
|
||||
align="left"
|
||||
show-overflow-tooltip
|
||||
min-width="220"
|
||||
@ -150,12 +150,12 @@
|
||||
<template slot-scope="scope">
|
||||
<div class="settled-row">
|
||||
<div class="col ">
|
||||
成员/代理: {{ scope.row.settleResult.memberSalary }}/{{
|
||||
{{ $t('pages.teamBill.label.memberAgent') }}: {{ scope.row.settleResult.memberSalary }}/{{
|
||||
scope.row.settleResult.ownSalary
|
||||
}}
|
||||
</div>
|
||||
<div class="col">
|
||||
合计: {{ scope.row.settleResult.totalSalary }}
|
||||
{{ $t('pages.teamBill.label.total') }}: {{ scope.row.settleResult.totalSalary }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -192,7 +192,7 @@
|
||||
</el-table-column> -->
|
||||
|
||||
<el-table-column
|
||||
label="修改人"
|
||||
:label="$t('pages.teamBill.table.updatedBy')"
|
||||
prop="updateUserNickname"
|
||||
align="center"
|
||||
show-overflow-tooltip
|
||||
@ -200,18 +200,18 @@
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
label="时间"
|
||||
:label="$t('pages.teamBill.table.time')"
|
||||
align="center"
|
||||
show-overflow-tooltip
|
||||
min-width="200"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div>创建: {{ scope.row.createTime | dateFormat }}</div>
|
||||
<div>修改: {{ scope.row.updateTime | dateFormat }}</div>
|
||||
<div>{{ $t('pages.teamBill.label.created') }}: {{ scope.row.createTime | dateFormat }}</div>
|
||||
<div>{{ $t('pages.teamBill.label.updated') }}: {{ scope.row.updateTime | dateFormat }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column fixed="right" label="操作" align="center" width="100">
|
||||
<el-table-column fixed="right" :label="$t('pages.teamBill.table.actions')" align="center" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown>
|
||||
<span class="el-dropdown-link">
|
||||
@ -219,7 +219,7 @@
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item @click.native="clickQueryDetails(scope.row)"
|
||||
>详情</el-dropdown-item
|
||||
>{{ $t('pages.teamBill.action.details') }}</el-dropdown-item
|
||||
>
|
||||
<!-- <el-dropdown-item
|
||||
:disabled="scope.row.status === 'PRE_CREATION'"
|
||||
@ -237,19 +237,19 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-if="listQuery.lastId" class="load-more">
|
||||
<span v-if="notData">已加载全部</span>
|
||||
<span v-if="notData">{{ $t('pages.teamBill.action.loadedAll') }}</span>
|
||||
<el-button
|
||||
v-else
|
||||
size="mini"
|
||||
:disabled="loadMoreLoading"
|
||||
:loading="loadMoreLoading"
|
||||
@click="clickLoadMore"
|
||||
>加载更多</el-button
|
||||
>{{ $t('pages.teamBill.action.loadMore') }}</el-button
|
||||
>
|
||||
</div>
|
||||
|
||||
<el-drawer
|
||||
title="导出条件"
|
||||
:title="$t('pages.teamBill.exportDialog.title')"
|
||||
:visible="dialogExcelVisible"
|
||||
:before-close="exportConditionClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -267,35 +267,35 @@
|
||||
label-position="left"
|
||||
label-width="70px"
|
||||
>
|
||||
<el-form-item label="区域" prop="region">
|
||||
<el-form-item :label="$t('pages.teamBill.exportDialog.region')" prop="region">
|
||||
<select-system-region
|
||||
v-model="excelQuery.region"
|
||||
:sys-origin="excelQuery.sysOrigin"
|
||||
placeholder="区域"
|
||||
:placeholder="$t('pages.teamBill.placeholder.region')"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="状态" prop="billStatusList">
|
||||
<el-form-item :label="$t('pages.teamBill.exportDialog.status')" prop="billStatusList">
|
||||
<el-select
|
||||
v-model="excelQuery.billStatusList"
|
||||
multiple
|
||||
placeholder="账单状态"
|
||||
:placeholder="$t('pages.teamBill.placeholder.billStatus')"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in teamBillStatus"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:label="teamBillStatusName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="时间" prop="monthDate">
|
||||
<el-form-item :label="$t('pages.teamBill.exportDialog.time')" prop="monthDate">
|
||||
<el-date-picker
|
||||
v-model="excelQuery.monthDate"
|
||||
value-format="yyyyMM"
|
||||
type="month"
|
||||
placeholder="选择月"
|
||||
:placeholder="$t('pages.teamBill.placeholder.selectMonth')"
|
||||
style="width: 100%;"
|
||||
/>
|
||||
</el-form-item>
|
||||
@ -303,14 +303,14 @@
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button :disabled="importLoading" @click="exportConditionClose"
|
||||
>取 消</el-button
|
||||
>{{ $t('pages.teamBill.action.cancel') }}</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="importLoading"
|
||||
:disabled="importLoading"
|
||||
@click="handleExcel()"
|
||||
>确 定</el-button
|
||||
>{{ $t('pages.teamBill.action.confirm') }}</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@ -365,8 +365,7 @@ import { listTeamBillTable, excelAnchorBill } from "@/api/team";
|
||||
import { pickerOptions } from "@/constant/el-const";
|
||||
import {
|
||||
billCyclePolicyTypes,
|
||||
teamBillStatus,
|
||||
teamBillStatusMap
|
||||
teamBillStatus
|
||||
} from "@/constant/team-type";
|
||||
|
||||
import TeamBillRemark from "./team-bill-remark";
|
||||
@ -387,7 +386,11 @@ export default {
|
||||
},
|
||||
data() {
|
||||
const commonRules = [
|
||||
{ required: true, message: "必填字段不可为空", trigger: "blur" }
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("pages.teamBill.validation.requiredField"),
|
||||
trigger: "blur"
|
||||
}
|
||||
];
|
||||
return {
|
||||
importLoading: false,
|
||||
@ -401,7 +404,6 @@ export default {
|
||||
teamBillRemarkVisible: false,
|
||||
teamBillInternalRemarkVisible: false,
|
||||
billDetailsVisible: false,
|
||||
teamBillStatusMap: teamBillStatusMap(),
|
||||
teamBillStatus,
|
||||
dialogExcelVisible: false,
|
||||
billCyclePolicyTypes,
|
||||
@ -498,6 +500,9 @@ export default {
|
||||
this.thatRow = row;
|
||||
this.teamEditVisible = true;
|
||||
},
|
||||
teamBillStatusName(status) {
|
||||
return this.$t(`pages.teamBill.status.${status}`);
|
||||
},
|
||||
tableSelectable(row) {
|
||||
return row.role !== "OWN";
|
||||
},
|
||||
@ -552,7 +557,7 @@ export default {
|
||||
this.thatRow.status = form.status;
|
||||
},
|
||||
clickBillShare(row) {
|
||||
this.$opsMessage.fail("还没有实现");
|
||||
this.$opsMessage.fail(this.$t("pages.teamBill.message.notImplemented"));
|
||||
},
|
||||
clickQueryTeamDetails(row) {
|
||||
this.thatRow = row;
|
||||
@ -569,7 +574,7 @@ export default {
|
||||
},
|
||||
exportConditionClose() {
|
||||
if (this.importLoading) {
|
||||
this.$opsMessage.warn("正在执行导出, 请稍等~");
|
||||
this.$opsMessage.warn(this.$t("pages.teamBill.message.exporting"));
|
||||
return;
|
||||
}
|
||||
this.dialogExcelVisible = false;
|
||||
@ -592,7 +597,7 @@ export default {
|
||||
.catch(er => {
|
||||
that.importLoading = false;
|
||||
this.dialogExcelVisible = false;
|
||||
this.$opsMessage.fail("下载失败!");
|
||||
this.$opsMessage.fail(this.$t("pages.teamBill.message.downloadFailed"));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-bill-remark-drawer">
|
||||
<el-drawer
|
||||
title="备注"
|
||||
:title="$t('pages.teamBill.internalRemarkDrawer.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -12,7 +12,7 @@
|
||||
>
|
||||
<div class="team-bill-remark">
|
||||
|
||||
<p v-if="!remarks || remarks.length === 0">点击下方按钮添加 ”备注“</p>
|
||||
<p v-if="!remarks || remarks.length === 0">{{ $t('pages.teamBill.internalRemarkDrawer.empty') }}</p>
|
||||
<el-timeline v-else :reverse="true">
|
||||
<el-timeline-item
|
||||
v-for="(item, index) in remarks"
|
||||
@ -28,14 +28,14 @@
|
||||
</el-timeline>
|
||||
|
||||
<div class="drawer-footer">
|
||||
<el-button @click="handleClose()">关闭</el-button>
|
||||
<el-button type="primary" @click="clickAddRemarks">新增</el-button>
|
||||
<el-button @click="handleClose()">{{ $t('pages.teamBill.action.close') }}</el-button>
|
||||
<el-button type="primary" @click="clickAddRemarks">{{ $t('pages.teamBill.action.add') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
||||
<el-dialog
|
||||
title="备注"
|
||||
:title="$t('pages.teamBill.internalRemarkDrawer.title')"
|
||||
:visible.sync="remarkVisible"
|
||||
:modal-append-to-body="true"
|
||||
:append-to-body="true"
|
||||
@ -47,7 +47,7 @@
|
||||
<el-input
|
||||
v-model="form.remarks"
|
||||
type="textarea"
|
||||
placeholder="请输入备注"
|
||||
:placeholder="$t('pages.teamBill.placeholder.remarks')"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
resize="none"
|
||||
@ -56,8 +56,8 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button :disabled="submitLoading" @click="remarkVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitAddRemarks">确 定</el-button>
|
||||
<el-button :disabled="submitLoading" @click="remarkVisible = false">{{ $t('pages.teamBill.action.cancel') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitAddRemarks">{{ $t('pages.teamBill.action.confirm') }}</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
@ -85,7 +85,7 @@ export default {
|
||||
},
|
||||
formRules: {
|
||||
remarks: [
|
||||
{ required: true, message: '必填字段不可为空', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamBill.validation.requiredField'), trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
delForm: {
|
||||
@ -111,7 +111,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamBill.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
@ -151,7 +151,7 @@ export default {
|
||||
},
|
||||
clickAddRemarks() {
|
||||
if (this.remarks && this.remarks.length >= 20) {
|
||||
this.$opsMessage.warn('最多添加20条备注, 清删除不必要的备注后重新添加')
|
||||
this.$opsMessage.warn(this.$t('pages.teamBill.message.maxRemarks'))
|
||||
return
|
||||
}
|
||||
this.remarkVisible = true
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-bill-remarks-drawer">
|
||||
<el-drawer
|
||||
title="编辑备注"
|
||||
:title="$t('pages.teamBill.remarkDrawer.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -13,11 +13,11 @@
|
||||
<div class="team-bill-remarks">
|
||||
<div class="drawer-form">
|
||||
<el-form ref="form" :model="form" :rules="formRules" label-width="80px" style="margin-right: 15px;">
|
||||
<el-form-item prop="remarks" label="备注">
|
||||
<el-form-item prop="remarks" :label="$t('pages.teamBill.label.remarks')">
|
||||
<el-input
|
||||
v-model="form.remarks"
|
||||
type="textarea"
|
||||
placeholder="请输入备注"
|
||||
:placeholder="$t('pages.teamBill.placeholder.remarks')"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
resize="none"
|
||||
@ -27,8 +27,8 @@
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">关闭</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submit">保存</el-button>
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">{{ $t('pages.teamBill.action.close') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submit">{{ $t('pages.teamBill.action.save') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
@ -73,7 +73,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamBill.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
|
||||
@ -10,17 +10,17 @@
|
||||
custom-class="drawer-auto-layout"
|
||||
>
|
||||
<div slot="title" class="flex-l">
|
||||
<sys-origin-icon :icon="row.sysOrigin" size="18px" /> 结算账单 <el-button :loading="calculatorLoading" type="text" @click="reloadCalculator"><i v-if="!calculatorLoading" class="el-icon-refresh cursor-pointer" /></el-button>
|
||||
<sys-origin-icon :icon="row.sysOrigin" size="18px" /> {{ $t('pages.teamBill.settleDrawer.title') }} <el-button :loading="calculatorLoading" type="text" @click="reloadCalculator"><i v-if="!calculatorLoading" class="el-icon-refresh cursor-pointer" /></el-button>
|
||||
</div>
|
||||
<div class="team-bill-settle">
|
||||
<div class="drawer-form">
|
||||
<!-- <div v-if="row.details"> -->
|
||||
<div class="blockquote">政策计算
|
||||
<div class="blockquote">{{ $t('pages.teamBill.settleDrawer.policyCalculation') }}
|
||||
<el-tooltip class="item" effect="dark">
|
||||
<div slot="content">
|
||||
<p>* 根据选择 “区域+政策” 计算团队成员工资情况</p>
|
||||
<p>* 哪些用会被计算到工作人数中? <br> 在线/房间流水/发送礼物/收礼物 都将会记录到工作账单中</p>
|
||||
<p>* 政策根据什么计算的? <br> 根据选择的 “区域+政策” 中 ”政策“ 数据中的接受礼物作为 ”目标“ 进行计算</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.policyTips.calculate') }}</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.policyTips.workMembers') }}</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.policyTips.policyBasis') }}</p>
|
||||
</div>
|
||||
<i class="el-icon-info" />
|
||||
</el-tooltip>
|
||||
@ -28,68 +28,64 @@
|
||||
<div class="content">
|
||||
<div class="flex-b bill-row">
|
||||
<div class="left bill-col nowrap-ellipsis">
|
||||
工作人数: {{ calculatorRes.workMembers }}
|
||||
{{ $t('pages.teamBill.label.workMembers') }}: {{ calculatorRes.workMembers }}
|
||||
</div>
|
||||
<div class="right bill-col nowrap-ellipsis">
|
||||
完成人数: {{ calculatorRes.finishMembers }}
|
||||
{{ $t('pages.teamBill.label.finishMembers') }}: {{ calculatorRes.finishMembers }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex-b bill-row">
|
||||
<div class="left bill-col nowrap-ellipsis">
|
||||
成员工资$: {{ calculatorRes.memberSalary }}
|
||||
{{ $t('pages.teamBill.label.memberSalaryUsd') }}: {{ calculatorRes.memberSalary }}
|
||||
</div>
|
||||
<div class="right bill-col nowrap-ellipsis">
|
||||
团长工资$: {{ calculatorRes.ownSalary }}
|
||||
{{ $t('pages.teamBill.label.agentSalaryUsd') }}: {{ calculatorRes.ownSalary }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex-b bill-row">
|
||||
<div class="right bill-col nowrap-ellipsis">
|
||||
合计工资$: {{ calculatorRes.totalSalary }}
|
||||
{{ $t('pages.teamBill.label.totalSalaryUsd') }}: {{ calculatorRes.totalSalary }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
|
||||
<div class="blockquote">结算
|
||||
<div class="blockquote">{{ $t('pages.teamBill.settleDrawer.settlement') }}
|
||||
<el-tooltip class="item" effect="dark">
|
||||
<div slot="content">
|
||||
<p>* 区域: 选择本次团队结算区域, 切换区域将会对应影响到 “本次结算” 政策</p>
|
||||
<p>* 政策: 团队结算对应的政策</p>
|
||||
<p>* 收款: 结算到用户的银行卡信息, 结算人员注意跟转账凭证截图中的对应起来</p>
|
||||
<p>* 类型: 本次账单结算类型
|
||||
<br> 美元: 发送美元
|
||||
<br> 金币: 结算人员将对应的工资折算金币, 需要输入金币数量(结算系统不会自动发送金币)
|
||||
<br> 美元+金币: 结算人员将部分工资折算成金币 + 部分美元 (线下协调: 主播看到的还是他的实际工资, 代理看到的是更详细的: 金币 + 美元)
|
||||
</p>
|
||||
<p>* 转账凭证: 结算人员发送金币/美元 后的记录凭证截图</p>
|
||||
<p>* 备注: 本次账单备注, 对外显示</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.settleTips.region') }}</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.settleTips.policy') }}</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.settleTips.payee') }}</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.settleTips.type') }}</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.settleTips.voucher') }}</p>
|
||||
<p>{{ $t('pages.teamBill.settleDrawer.settleTips.remarks') }}</p>
|
||||
</div>
|
||||
<i class="el-icon-info" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<el-form ref="form" :model="form" :rules="formRules" label-width="80px" style="margin-right: 15px;">
|
||||
|
||||
<el-form-item prop="region" label="区域">
|
||||
<el-form-item prop="region" :label="$t('pages.teamBill.label.region')">
|
||||
<select-system-region
|
||||
ref="regionSelectPolicy"
|
||||
v-model="form.region"
|
||||
:sys-origin="row.sysOrigin"
|
||||
placeholder="请选择区域"
|
||||
:placeholder="$t('pages.teamBill.placeholder.selectRegion')"
|
||||
:disabled="calculatorLoading"
|
||||
@change="changeRegion"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="policyId" label="政策">
|
||||
<el-form-item prop="policyId" :label="$t('pages.teamBill.label.policy')">
|
||||
<policy-select-sys-region
|
||||
ref="PolicySelectedSysRegion"
|
||||
v-model="form.policyId"
|
||||
:sys-origin="nativeRow.sysOrigin"
|
||||
:region="region"
|
||||
placeholder="请选择政策"
|
||||
:placeholder="$t('pages.teamBill.placeholder.selectPolicy')"
|
||||
:disabled="calculatorLoading"
|
||||
@change="cahngePolicy"
|
||||
/>
|
||||
@ -105,31 +101,31 @@
|
||||
/>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item prop="settleType" label="类型">
|
||||
<el-form-item prop="settleType" :label="$t('pages.teamBill.label.type')">
|
||||
<el-select
|
||||
v-model="form.settleType"
|
||||
placeholder="请选择结算类型"
|
||||
:placeholder="$t('pages.teamBill.placeholder.selectSettleType')"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in teamBillSettleTypes"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:label="teamBillSettleTypeName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="form.settleType === 'GOLD' || form.settleType === 'MONEY_GOLD'" prop="goldQuantity" label="金币">
|
||||
<el-input v-model="form.goldQuantity" v-number placeholder="请输入金币数量,系统不会自动发送" />
|
||||
<el-form-item v-if="form.settleType === 'GOLD' || form.settleType === 'MONEY_GOLD'" prop="goldQuantity" :label="$t('pages.teamBill.label.gold')">
|
||||
<el-input v-model="form.goldQuantity" v-number :placeholder="$t('pages.teamBill.placeholder.goldQuantity')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="form.settleType === 'MONEY_GOLD'" prop="salaryQuantity" label="工资$">
|
||||
<el-input v-model="form.salaryQuantity" v-double placeholder="请输入工资$" />
|
||||
<el-form-item v-if="form.settleType === 'MONEY_GOLD'" prop="salaryQuantity" :label="$t('pages.teamBill.label.salaryUsd')">
|
||||
<el-input v-model="form.salaryQuantity" v-double :placeholder="$t('pages.teamBill.placeholder.salaryQuantity')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="tmpExistsCertificate" label="凭证上传">
|
||||
<el-form-item prop="tmpExistsCertificate" :label="$t('pages.teamBill.label.voucherUpload')">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<upload-image
|
||||
@ -152,11 +148,11 @@
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="备注">
|
||||
<el-form-item :label="$t('pages.teamBill.label.remarks')">
|
||||
<el-input
|
||||
v-model="form.remarks"
|
||||
type="textarea"
|
||||
placeholder="请输入备注"
|
||||
:placeholder="$t('pages.teamBill.placeholder.remarks')"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
resize="none"
|
||||
@ -167,8 +163,8 @@
|
||||
</div>
|
||||
|
||||
<div v-if="!calculatorLoading" class="drawer-footer">
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">关闭</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submit">保存</el-button>
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">{{ $t('pages.teamBill.action.close') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submit">{{ $t('pages.teamBill.action.save') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
@ -194,7 +190,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
const commonRules = [
|
||||
{ required: true, message: '必填字段不可为空', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamBill.validation.requiredField'), trigger: 'blur' }
|
||||
]
|
||||
return {
|
||||
calculatorLoading: false,
|
||||
@ -238,7 +234,7 @@ export default {
|
||||
goldQuantity: commonRules,
|
||||
salaryQuantity: commonRules,
|
||||
tmpExistsCertificate: [
|
||||
{ required: true, message: '最少上传1张凭证', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamBill.validation.uploadVoucherFirst'), trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
nativeRow: {}
|
||||
@ -268,6 +264,9 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
teamBillSettleTypeName(type) {
|
||||
return this.$t(`pages.teamBill.settleType.${type}`)
|
||||
},
|
||||
changeRegion(id, val) {
|
||||
this.region = id
|
||||
this.$refs.PolicySelectedSysRegion.clearValue()
|
||||
@ -276,7 +275,7 @@ export default {
|
||||
},
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamBill.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
@ -291,7 +290,7 @@ export default {
|
||||
submit() {
|
||||
const that = this
|
||||
if (that.calculatorLoading) {
|
||||
this.$opsMessage.warn('正在计算政策工资, 请稍等!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamBill.message.calculatingSalary'))
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-status-drawer">
|
||||
<el-drawer
|
||||
title="状态变更"
|
||||
:title="$t('pages.teamBill.statusDrawer.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -13,11 +13,11 @@
|
||||
<div class="team-status">
|
||||
<div class="drawer-form">
|
||||
<el-form ref="form" :model="form" :rules="formRules" label-width="80px" style="margin-right: 15px;">
|
||||
<el-form-item prop="remarks" label="备注">
|
||||
<el-form-item prop="remarks" :label="$t('pages.teamBill.label.remarks')">
|
||||
<el-input
|
||||
v-model="form.remarks"
|
||||
type="textarea"
|
||||
placeholder="请输入备注"
|
||||
:placeholder="$t('pages.teamBill.placeholder.remarks')"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
resize="none"
|
||||
@ -27,8 +27,8 @@
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">关闭</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submit">保存</el-button>
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">{{ $t('pages.teamBill.action.close') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submit">{{ $t('pages.teamBill.action.save') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
@ -82,7 +82,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamBill.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="bind-team-drawer">
|
||||
<el-drawer
|
||||
title="绑定BD"
|
||||
:title="$t('pages.teamList.bindBd.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -15,13 +15,13 @@
|
||||
<div class="drawer-form">
|
||||
<el-form ref="form" :model="form" :rules="formRules" label-width="80px">
|
||||
<el-form-item prop="bdUserId" label="BD">
|
||||
<account-input v-model="form.bdUserId" :sys-origin="sysOrigin" placeholder="请输入BD账号" />
|
||||
<account-input v-model="form.bdUserId" :sys-origin="sysOrigin" :placeholder="$t('pages.teamList.bindBd.bdAccount')" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button @click="handleClose()">关闭</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitForm">保存</el-button>
|
||||
<el-button @click="handleClose()">{{ $t('pages.teamList.action.close') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitForm">{{ $t('pages.teamList.action.save') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
@ -44,7 +44,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
const commonRules = [
|
||||
{ required: true, message: '必填字段不可为空', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamList.validation.requiredField'), trigger: 'blur' }
|
||||
]
|
||||
return {
|
||||
billCyclePolicyTypes,
|
||||
@ -61,7 +61,7 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
textOptTitle() {
|
||||
return '绑定BD'
|
||||
return this.$t('pages.teamList.bindBd.title')
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@ -77,7 +77,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamList.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div v-if="isQueryPermissions">
|
||||
<!-- 搜索栏 -->
|
||||
<!-- Filters -->
|
||||
<div class="filter-container">
|
||||
<div class="filter-item" style="width: 120px;">
|
||||
<sys-origin-permission-select
|
||||
@ -17,7 +17,7 @@
|
||||
v-model="listQuery.region"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
clearable
|
||||
placeholder="区域"
|
||||
:placeholder="$t('pages.teamList.filter.region')"
|
||||
@change="changeRegionSelectPolicy"
|
||||
/>
|
||||
</div>
|
||||
@ -25,14 +25,14 @@
|
||||
<div class="filter-item" style="width: 120px;">
|
||||
<el-select
|
||||
v-model="listQuery.status"
|
||||
placeholder="状态"
|
||||
:placeholder="$t('pages.teamList.filter.status')"
|
||||
clearable
|
||||
@change="handleSearch"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in teamStatus"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:label="getTeamStatusName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -42,14 +42,14 @@
|
||||
<account-input
|
||||
v-model="listQuery.ownUserId"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
placeholder="代理ID"
|
||||
:placeholder="$t('pages.teamList.filter.agentId')"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="filter-item">
|
||||
<el-input
|
||||
v-model="listQuery.memberQuantityRange"
|
||||
placeholder="开始~结束成员数量"
|
||||
:placeholder="$t('pages.teamList.filter.memberQuantityRange')"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
@ -59,16 +59,16 @@
|
||||
value-format="timestamp"
|
||||
type="datetimerange"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期开始"
|
||||
end-placeholder="结束日期结束"
|
||||
:range-separator="$t('pages.teamList.filter.dateRangeSeparator')"
|
||||
:start-placeholder="$t('pages.teamList.filter.startDate')"
|
||||
:end-placeholder="$t('pages.teamList.filter.endDate')"
|
||||
/>
|
||||
</div>
|
||||
<el-select
|
||||
v-if="backUserConditionVisible"
|
||||
v-model="listQuery.createUser"
|
||||
v-loading="listMemberLoading"
|
||||
placeholder="后台成员"
|
||||
:placeholder="$t('pages.teamList.filter.backendMember')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
clearable
|
||||
@ -88,7 +88,7 @@
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t("pages.teamList.action.search") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="buttonPermissions.includes('team:list:add')"
|
||||
@ -97,7 +97,7 @@
|
||||
icon="el-icon-edit"
|
||||
@click="teamCreateVisible = true"
|
||||
>
|
||||
新增
|
||||
{{ $t("pages.teamList.action.add") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="
|
||||
@ -111,11 +111,11 @@
|
||||
:disabled="statusChangeLoading"
|
||||
@click="clickCloseTeamBatch"
|
||||
>
|
||||
删除
|
||||
{{ $t("pages.teamList.action.delete") }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 表单 -->
|
||||
<!-- Table -->
|
||||
<el-table
|
||||
ref="teamTable"
|
||||
v-loading="listLoading"
|
||||
@ -128,7 +128,7 @@
|
||||
<el-table-column type="index" width="50" label="No" />
|
||||
<el-table-column type="selection" width="50" show-overflow-tooltip />
|
||||
<el-table-column
|
||||
label="代理"
|
||||
:label="$t('pages.teamList.table.agent')"
|
||||
align="left"
|
||||
min-width="220"
|
||||
show-overflow-tooltip
|
||||
@ -150,31 +150,31 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="信息"
|
||||
:label="$t('pages.teamList.table.info')"
|
||||
align="left"
|
||||
show-overflow-tooltip
|
||||
min-width="150"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
成员:
|
||||
{{ $t("pages.teamList.table.member") }}:
|
||||
{{ (scope.row.teamProfile.counter || {}).memberQuantity }}/{{
|
||||
(scope.row.teamProfile.setting || {}).maxMember
|
||||
}}
|
||||
</div>
|
||||
<div>
|
||||
状态:
|
||||
{{ $t("pages.teamList.table.status") }}:
|
||||
<el-tag
|
||||
v-if="scope.row.teamProfile.status === 'AVAILABLE'"
|
||||
size="mini"
|
||||
type="success"
|
||||
>正常</el-tag
|
||||
>{{ getTeamStatusName("AVAILABLE") }}</el-tag
|
||||
>
|
||||
<el-tag
|
||||
v-if="scope.row.teamProfile.status === 'CLOSE'"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>关闭</el-tag
|
||||
>{{ getTeamStatusName("CLOSE") }}</el-tag
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
@ -185,14 +185,14 @@
|
||||
show-overflow-tooltip
|
||||
min-width="100"
|
||||
prop="regionName"
|
||||
label="区域"
|
||||
:label="$t('pages.teamList.table.region')"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
align="left"
|
||||
show-overflow-tooltip
|
||||
min-width="80"
|
||||
label="备注"
|
||||
:label="$t('pages.teamList.table.remark')"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
@ -204,7 +204,7 @@
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
label="创建人"
|
||||
:label="$t('pages.teamList.table.createdBy')"
|
||||
align="left"
|
||||
show-overflow-tooltip
|
||||
min-width="220"
|
||||
@ -226,7 +226,7 @@
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
label="修改人"
|
||||
:label="$t('pages.teamList.table.updatedBy')"
|
||||
align="left"
|
||||
show-overflow-tooltip
|
||||
min-width="220"
|
||||
@ -248,19 +248,19 @@
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
label="时间"
|
||||
:label="$t('pages.teamList.table.time')"
|
||||
align="center"
|
||||
show-overflow-tooltip
|
||||
min-width="220"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div>创建: {{ scope.row.teamProfile.createTime | dateFormat }}</div>
|
||||
<div>修改: {{ scope.row.teamProfile.updateTime | dateFormat }}</div>
|
||||
<div>{{ $t("pages.teamList.table.createdAt") }}: {{ scope.row.teamProfile.createTime | dateFormat }}</div>
|
||||
<div>{{ $t("pages.teamList.table.updatedAt") }}: {{ scope.row.teamProfile.updateTime | dateFormat }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 操作 -->
|
||||
<el-table-column fixed="right" label="操作" align="center" width="100">
|
||||
<!-- Actions -->
|
||||
<el-table-column fixed="right" :label="$t('pages.teamList.table.actions')" align="center" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown>
|
||||
<span class="el-dropdown-link">
|
||||
@ -269,64 +269,64 @@
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item
|
||||
@click.native="clickQueryTeamDetails(scope.row)"
|
||||
>资料详情</el-dropdown-item
|
||||
>{{ $t("pages.teamList.action.details") }}</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item
|
||||
v-if="buttonPermissions.includes('team:list:edit')"
|
||||
@click.native="editTeamProfile(scope.row)"
|
||||
>修改资料</el-dropdown-item
|
||||
>{{ $t("pages.teamList.action.editProfile") }}</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item
|
||||
v-if="buttonPermissions.includes('team:list:bind:bd')"
|
||||
@click.native="clickBindBd(scope.row)"
|
||||
>绑定BD</el-dropdown-item
|
||||
>{{ $t("pages.teamList.action.bindBd") }}</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item
|
||||
v-if="buttonPermissions.includes('team:list:edit')"
|
||||
@click.native="editTeamRemark(scope.row)"
|
||||
>备注信息</el-dropdown-item
|
||||
>{{ $t("pages.teamList.action.remarks") }}</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item
|
||||
v-if="buttonPermissions.includes('team:list:edit')"
|
||||
@click.native="editTeamContact(scope.row)"
|
||||
>联系方式</el-dropdown-item
|
||||
>{{ $t("pages.teamList.action.contact") }}</el-dropdown-item
|
||||
>
|
||||
<!-- <el-dropdown-item :disabled="statusChangeLoading" @click.native="clickChangeTeamStatus(scope.row)">状态变更</el-dropdown-item> -->
|
||||
<!-- <el-dropdown-item :disabled="statusChangeLoading" @click.native="clickChangeTeamStatus(scope.row)">Status Change</el-dropdown-item> -->
|
||||
<el-dropdown-item
|
||||
v-if="buttonPermissions.includes('team:list:send:notice')"
|
||||
@click.native="handleNoticeSend(scope.row)"
|
||||
>发送通知</el-dropdown-item
|
||||
>{{ $t("pages.teamList.action.sendNotice") }}</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item
|
||||
v-if="
|
||||
buttonPermissions.includes('team:list:query:send:notice')
|
||||
"
|
||||
@click.native="handleNoticeList(scope.row)"
|
||||
>通知记录</el-dropdown-item
|
||||
>{{ $t("pages.teamList.action.noticeRecords") }}</el-dropdown-item
|
||||
>
|
||||
<!-- <el-dropdown-item>账单信息-未实现</el-dropdown-item> -->
|
||||
<!-- <el-dropdown-item>Bill Info - not implemented</el-dropdown-item> -->
|
||||
<el-dropdown-item
|
||||
v-if="buttonPermissions.includes('team:list:query:apply')"
|
||||
@click.native="handleApplicationProcess(scope.row)"
|
||||
>团队申请</el-dropdown-item
|
||||
>{{ $t("pages.teamList.action.teamApplications") }}</el-dropdown-item
|
||||
>
|
||||
<!-- <el-dropdown-item v-if="buttonPermissions.includes('team:list:query:approval')" @click.native="handleApplicationProcessApprova(scope.row)">审核日志</el-dropdown-item> -->
|
||||
<!-- <el-dropdown-item v-if="buttonPermissions.includes('team:list:query:approval')" @click.native="handleApplicationProcessApprova(scope.row)">Approval Logs</el-dropdown-item> -->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 加载更多 -->
|
||||
<!-- Load more -->
|
||||
<div v-if="listQuery.lastId" class="load-more">
|
||||
<span v-if="notData">已加载全部</span>
|
||||
<span v-if="notData">{{ $t("pages.teamList.action.allLoaded") }}</span>
|
||||
<el-button
|
||||
v-else
|
||||
size="mini"
|
||||
:disabled="loadMoreLoading"
|
||||
:loading="loadMoreLoading"
|
||||
@click="clickLoadMore"
|
||||
>加载更多</el-button
|
||||
>{{ $t("pages.teamList.action.loadMore") }}</el-button
|
||||
>
|
||||
</div>
|
||||
|
||||
@ -337,7 +337,7 @@
|
||||
@close="teamCreateVisible = false"
|
||||
/>
|
||||
|
||||
<!-- 修改资料组件 -->
|
||||
<!-- Edit profile drawer -->
|
||||
<team-edit
|
||||
v-if="teamEditVisible"
|
||||
:profile="thatRow.teamProfile"
|
||||
@ -417,11 +417,11 @@
|
||||
v-else
|
||||
v-loading.lock="listLoading"
|
||||
element-loading-background="#FFFFFF"
|
||||
element-loading-text="权限验证中..."
|
||||
:element-loading-text="$t('pages.teamList.permission.validating')"
|
||||
style="text-align: center;"
|
||||
>
|
||||
抱歉您无权查看,请联系管理员开通查看权限
|
||||
【主播中心/代理列表:(team:list:query:all/team:list:query:self)】
|
||||
{{ $t("pages.teamList.permission.deniedPrefix") }}
|
||||
{{ $t("pages.teamList.permission.deniedCode") }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -602,7 +602,7 @@ export default {
|
||||
clickCloseTeamBatch() {
|
||||
const that = this;
|
||||
if (this.statusChangeLoading) {
|
||||
this.$opsMessage.warn("正在提交中!");
|
||||
this.$opsMessage.warn(this.$t("pages.teamList.message.submitting"));
|
||||
return;
|
||||
}
|
||||
that.changeTeamIds = that.selectTableRow.map(item => item.teamProfile.id);
|
||||
@ -610,11 +610,11 @@ export default {
|
||||
// that.teamStatusVisible = true
|
||||
that
|
||||
.$confirm(
|
||||
"系统将移除团队所有数据, 操作不可逆!!!! (主播工作/账单/团队信息/团队成员/BD关系等所有)",
|
||||
"提示",
|
||||
this.$t("pages.teamList.confirm.deleteMessage"),
|
||||
this.$t("pages.teamList.confirm.deleteTitle"),
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
confirmButtonText: this.$t("pages.teamList.action.confirm"),
|
||||
cancelButtonText: this.$t("pages.teamList.action.cancel"),
|
||||
type: "warning"
|
||||
}
|
||||
)
|
||||
@ -649,7 +649,7 @@ export default {
|
||||
this.teamDetailsDrawerVisible = true;
|
||||
},
|
||||
|
||||
// 修改资料
|
||||
// Edit profile
|
||||
editTeamProfile(row) {
|
||||
this.thatRow = row;
|
||||
this.teamEditVisible = true;
|
||||
@ -715,7 +715,7 @@ export default {
|
||||
},
|
||||
clickChangeTeamStatus(row) {
|
||||
if (this.statusChangeLoading) {
|
||||
this.$opsMessage.warn("正在提交中!");
|
||||
this.$opsMessage.warn(this.$t("pages.teamList.message.submitting"));
|
||||
return;
|
||||
}
|
||||
this.thatRow = row;
|
||||
@ -750,6 +750,9 @@ export default {
|
||||
.catch(er => {
|
||||
that.listMemberLoading = false;
|
||||
});
|
||||
},
|
||||
getTeamStatusName(status) {
|
||||
return this.$t(`pages.teamList.statusMap.${status}`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-application-process-list">
|
||||
<el-drawer
|
||||
title="申请团队成员列表"
|
||||
:title="$t('pages.teamList.applicationProcess.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -13,7 +13,7 @@
|
||||
<div class="filter-container" style="margin: 10px;">
|
||||
<el-select
|
||||
v-model="listQuery.status"
|
||||
placeholder="审核状态"
|
||||
:placeholder="$t('pages.teamList.applicationProcess.status')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -21,13 +21,13 @@
|
||||
<el-option
|
||||
v-for="(item, index) in teamApplicationProcessStatusList"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:label="getProcessStatusName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-select
|
||||
v-model="listQuery.reason"
|
||||
placeholder="原因"
|
||||
:placeholder="$t('pages.teamList.applicationProcess.reason')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -35,7 +35,7 @@
|
||||
<el-option
|
||||
v-for="(item, index) in teamReasons"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:label="getReasonName(item.value)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -44,33 +44,33 @@
|
||||
type="primary"
|
||||
@click="handleSearch"
|
||||
>
|
||||
查询
|
||||
{{ $t('pages.teamList.action.query') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<div v-loading="listLoading">
|
||||
<el-row v-for="(item, index) in list" :key="index">
|
||||
<el-card style="margin: 10px;">
|
||||
<div>
|
||||
<el-tag>申请类型: {{ item.reason == 'JOIN' ? '加入' : '退出' }}</el-tag>
|
||||
<el-tag v-if="item.status === 'WAIT'" type="warning">审核状态: 待审核</el-tag>
|
||||
<el-tag v-if="item.status === 'AGREE'" type="success">审核状态: 同意</el-tag>
|
||||
<el-tag v-if="item.status === 'REJECT'" type="danger">审核状态: 驳回</el-tag>
|
||||
<el-tag>{{ $t('pages.teamList.applicationProcess.applicationType') }}: {{ getReasonName(item.reason) }}</el-tag>
|
||||
<el-tag v-if="item.status === 'WAIT'" type="warning">{{ $t('pages.teamList.applicationProcess.reviewStatus') }}: {{ getProcessStatusName(item.status) }}</el-tag>
|
||||
<el-tag v-if="item.status === 'AGREE'" type="success">{{ $t('pages.teamList.applicationProcess.reviewStatus') }}: {{ getProcessStatusName(item.status) }}</el-tag>
|
||||
<el-tag v-if="item.status === 'REJECT'" type="danger">{{ $t('pages.teamList.applicationProcess.reviewStatus') }}: {{ getProcessStatusName(item.status) }}</el-tag>
|
||||
</div>
|
||||
<div class="bottom clearfix">
|
||||
<el-tag v-if="item.createUserOrigin == 1 && item.createSysUser != null" type="info">创建人: <span style="color: black;">{{ item.createSysUser.nickname }}</span> {{ item.createTime }}</el-tag>
|
||||
<el-tag v-if="item.createUserOrigin == 0 && item.createUserProfile != null" type="info" @click.native="queryUserDetails(item.createUserProfile.id)">创建人: <span style="color: black;">{{ item.createUserProfile.userNickname }}</span> {{ item.createTime }}</el-tag>
|
||||
<el-tag v-if="item.updateUserOrigin == 1 && item.updateSysUser != null" type="info">修改人: <span style="color: black;">{{ item.updateSysUser.nickname }}</span> {{ item.updateTime }}</el-tag>
|
||||
<el-tag v-if="item.updateUserOrigin == 0 && item.updateUserProfile != null" type="info" @click.native="queryUserDetails(item.updateUserProfile.id)">修改人: <span style="color: black;">{{ item.updateUserProfile.userNickname }}</span> {{ item.updateTime }}</el-tag>
|
||||
<el-tag v-if="item.createUserOrigin == 1 && item.createSysUser != null" type="info">{{ $t('pages.teamList.applicationProcess.createdBy') }}: <span style="color: black;">{{ item.createSysUser.nickname }}</span> {{ item.createTime }}</el-tag>
|
||||
<el-tag v-if="item.createUserOrigin == 0 && item.createUserProfile != null" type="info" @click.native="queryUserDetails(item.createUserProfile.id)">{{ $t('pages.teamList.applicationProcess.createdBy') }}: <span style="color: black;">{{ item.createUserProfile.userNickname }}</span> {{ item.createTime }}</el-tag>
|
||||
<el-tag v-if="item.updateUserOrigin == 1 && item.updateSysUser != null" type="info">{{ $t('pages.teamList.applicationProcess.updatedBy') }}: <span style="color: black;">{{ item.updateSysUser.nickname }}</span> {{ item.updateTime }}</el-tag>
|
||||
<el-tag v-if="item.updateUserOrigin == 0 && item.updateUserProfile != null" type="info" @click.native="queryUserDetails(item.updateUserProfile.id)">{{ $t('pages.teamList.applicationProcess.updatedBy') }}: <span style="color: black;">{{ item.updateUserProfile.userNickname }}</span> {{ item.updateTime }}</el-tag>
|
||||
</div>
|
||||
<!-- <div v-if="item.status === 'WAIT'" class="clearfix">
|
||||
<el-button type="text" @click.native="handleStatus(item.id, 'AGREE')">同意</el-button>
|
||||
<el-button type="text" @click.native="handleStatus(item.id, 'REJECT')">拒绝</el-button>
|
||||
<el-button type="text" @click.native="handleStatus(item.id, 'AGREE')">Agree</el-button>
|
||||
<el-button type="text" @click.native="handleStatus(item.id, 'REJECT')">Reject</el-button>
|
||||
</div> -->
|
||||
</el-card>
|
||||
</el-row>
|
||||
<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>
|
||||
<span v-else>已加载全部</span>
|
||||
<el-button v-if="!notMore " size="mini" :disabled="listLoading" @click="clickLoadMore">{{ $t('pages.teamList.action.loadMore') }}</el-button>
|
||||
<span v-else>{{ $t('pages.teamList.action.allLoaded') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -162,6 +162,12 @@ export default {
|
||||
},
|
||||
clickLoadMore() {
|
||||
this.renderData()
|
||||
},
|
||||
getProcessStatusName(status) {
|
||||
return this.$t(`pages.teamList.processStatusMap.${status}`)
|
||||
},
|
||||
getReasonName(reason) {
|
||||
return this.$t(`pages.teamList.reasonMap.${reason}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-contact-drawer">
|
||||
<el-drawer
|
||||
title="联系方式"
|
||||
:title="$t('pages.teamList.contact.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -12,7 +12,7 @@
|
||||
>
|
||||
<div class="team-contact">
|
||||
<div class="drawer-form">
|
||||
<p v-if="!contacts || contacts.length === 0">点击下方按钮添加 ”联系方式“</p>
|
||||
<p v-if="!contacts || contacts.length === 0">{{ $t('pages.teamList.contact.emptyTip') }}</p>
|
||||
<el-timeline v-else :reverse="true">
|
||||
<el-timeline-item
|
||||
v-for="(item, index) in contacts"
|
||||
@ -23,23 +23,23 @@
|
||||
<div class="contact">
|
||||
<p> {{ item.createBackUserName }} <i class="el-icon-delete font-danger cursor-pointer" @click="clickDelContact(item, index)" /></p>
|
||||
<div>
|
||||
<p>类型: {{ contactTypeMap[item.type].name }}</p>
|
||||
<p>联系: {{ item.contact }}</p>
|
||||
<p v-if="item.remarks">备注: {{ item.remarks }}</p>
|
||||
<p>{{ $t('pages.teamList.contact.type') }}: {{ contactTypeMap[item.type].name }}</p>
|
||||
<p>{{ $t('pages.teamList.contact.contact') }}: {{ item.contact }}</p>
|
||||
<p v-if="item.remarks">{{ $t('pages.teamList.contact.remark') }}: {{ item.remarks }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button @click="handleClose()">关闭</el-button>
|
||||
<el-button type="primary" @click="(contactVisible=true)">新增</el-button>
|
||||
<el-button @click="handleClose()">{{ $t('pages.teamList.action.close') }}</el-button>
|
||||
<el-button type="primary" @click="(contactVisible=true)">{{ $t('pages.teamList.action.add') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
||||
<el-dialog
|
||||
title="备注"
|
||||
:title="$t('pages.teamList.contact.dialogTitle')"
|
||||
:visible.sync="contactVisible"
|
||||
:modal-append-to-body="true"
|
||||
:append-to-body="true"
|
||||
@ -47,19 +47,19 @@
|
||||
:before-close="handleCloseContactFrom"
|
||||
>
|
||||
<el-form ref="formContact" :model="form" :rules="formRules" label-width="80px" style="margin-right: 15px;">
|
||||
<el-form-item prop="type" label="类型">
|
||||
<el-select v-model="form.type" placeholder="选择类型" style="width: 100%;">
|
||||
<el-form-item prop="type" :label="$t('pages.teamList.contact.type')">
|
||||
<el-select v-model="form.type" :placeholder="$t('pages.teamList.contact.selectType')" style="width: 100%;">
|
||||
<el-option v-for="(item, index) in contactTypes" :key="index" :label="item.name" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item prop="contact" label="联系">
|
||||
<el-input v-model="form.contact" placeholder="请输入联系方式" maxlength="100" show-word-limit />
|
||||
<el-form-item prop="contact" :label="$t('pages.teamList.contact.contact')">
|
||||
<el-input v-model="form.contact" :placeholder="$t('pages.teamList.contact.contactPlaceholder')" maxlength="100" show-word-limit />
|
||||
</el-form-item>
|
||||
<el-form-item prop="remarks" label="备注">
|
||||
<el-form-item prop="remarks" :label="$t('pages.teamList.contact.remark')">
|
||||
<el-input
|
||||
v-model="form.remarks"
|
||||
type="textarea"
|
||||
placeholder="请输入备注"
|
||||
:placeholder="$t('pages.teamList.contact.remarkPlaceholder')"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
resize="none"
|
||||
@ -68,8 +68,8 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button :disabled="submitLoading" @click="contactVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitAddContact">确 定</el-button>
|
||||
<el-button :disabled="submitLoading" @click="contactVisible = false">{{ $t('pages.teamList.action.cancel') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitAddContact">{{ $t('pages.teamList.action.confirm') }}</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
@ -103,10 +103,10 @@ export default {
|
||||
},
|
||||
formRules: {
|
||||
type: [
|
||||
{ required: true, message: '必填字段不可为空', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamList.validation.requiredField'), trigger: 'blur' }
|
||||
],
|
||||
contact: [
|
||||
{ required: true, message: '必填字段不可为空', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamList.validation.requiredField'), trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
delForm: {
|
||||
@ -132,7 +132,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamList.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
|
||||
@ -9,15 +9,15 @@
|
||||
:append-to-body="true"
|
||||
custom-class="drawer-auto-layout"
|
||||
>
|
||||
<!-- 标题 -->
|
||||
<!-- Title -->
|
||||
<div slot="title" class="flex-l">
|
||||
<sys-origin-icon :icon="profile.sysOrigin" size="18px" /> 团队资料
|
||||
<sys-origin-icon :icon="profile.sysOrigin" size="18px" /> {{ $t('pages.teamList.edit.title') }}
|
||||
</div>
|
||||
<div class="edit-team">
|
||||
<div class="drawer-form">
|
||||
<el-alert
|
||||
v-if="tmpRegion !== form.region && form.id !== ''"
|
||||
title="!!注意: 【变更代理团队区域】将清空该代理名下所有主播目标,请谨慎操作"
|
||||
:title="$t('pages.teamList.edit.regionChangeWarning')"
|
||||
type="warning"
|
||||
effect="dark"
|
||||
:closable="false"
|
||||
@ -29,25 +29,25 @@
|
||||
:rules="formRules"
|
||||
label-width="80px"
|
||||
>
|
||||
<!-- 区域 -->
|
||||
<el-form-item prop="region" label="区域">
|
||||
<!-- Region -->
|
||||
<el-form-item prop="region" :label="$t('pages.teamList.edit.region')">
|
||||
<select-system-region
|
||||
ref="regionSelectPolicy"
|
||||
v-model="form.region"
|
||||
:sys-origin="profile.sysOrigin"
|
||||
clearable
|
||||
placeholder="区域"
|
||||
:placeholder="$t('pages.teamList.edit.region')"
|
||||
@change="changeRegionSelectPolicy"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 昵称 -->
|
||||
<!-- <el-form-item prop="nickname" label="昵称">
|
||||
<el-input v-model="form.nickname" placeholder="请输入团队昵称" maxlength="24" show-word-limit />
|
||||
<!-- Nickname -->
|
||||
<!-- <el-form-item prop="nickname" label="Nickname">
|
||||
<el-input v-model="form.nickname" placeholder="Enter team nickname" maxlength="24" show-word-limit />
|
||||
</el-form-item> -->
|
||||
|
||||
<!-- 封面 -->
|
||||
<!-- <el-form-item label="封面">
|
||||
<!-- Cover -->
|
||||
<!-- <el-form-item label="Cover">
|
||||
<el-form-item prop="cover">
|
||||
<upload-image
|
||||
v-model="form.avatar"
|
||||
@ -56,8 +56,8 @@
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
|
||||
<!-- 国家 -->
|
||||
<el-form-item label="国家" prop="country.countryId">
|
||||
<!-- Country -->
|
||||
<el-form-item :label="$t('pages.teamList.edit.country')" prop="country.countryId">
|
||||
<contry-select
|
||||
v-model="form.country.countryId"
|
||||
@change="contrySelectChange"
|
||||
@ -65,23 +65,23 @@
|
||||
</el-form-item>
|
||||
|
||||
<div style="padding: 10px 0px;">
|
||||
<!-- 小标题 -->
|
||||
<el-divider content-position="left">设置信息</el-divider>
|
||||
<!-- Section title -->
|
||||
<el-divider content-position="left">{{ $t('pages.teamList.edit.settingInfo') }}</el-divider>
|
||||
|
||||
<!-- 成员数量 -->
|
||||
<el-form-item prop="setting.maxMember" label="成员数量">
|
||||
<!-- Member quantity -->
|
||||
<el-form-item prop="setting.maxMember" :label="$t('pages.teamList.edit.memberQuantity')">
|
||||
<el-input
|
||||
v-model="form.setting.maxMember"
|
||||
placeholder="最大成员数量"
|
||||
:placeholder="$t('pages.teamList.edit.maxMember')"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 开关(代理接收主播工资) -->
|
||||
<!-- Switch: agent receives host salary -->
|
||||
<el-form-item
|
||||
prop="setting.hostSalaryToAgent"
|
||||
label="代理接收主播工资"
|
||||
:label="$t('pages.teamList.edit.hostSalaryToAgent')"
|
||||
>
|
||||
<el-switch
|
||||
v-model="form.setting.hostSalaryToAgent"
|
||||
@ -90,8 +90,8 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 开关(允许提现) -->
|
||||
<el-form-item prop="withdrawalEnabled" label="允许提现">
|
||||
<!-- Switch: withdrawal enabled -->
|
||||
<el-form-item prop="withdrawalEnabled" :label="$t('pages.teamList.edit.withdrawalEnabled')">
|
||||
<el-switch
|
||||
v-model="form.withdrawalEnabled"
|
||||
:active-value="true"
|
||||
@ -103,14 +103,14 @@
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button :disabled="submitLoading" @click="handleClose()"
|
||||
>取消</el-button
|
||||
>{{ $t('pages.teamList.action.cancel') }}</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="submitLoading"
|
||||
:loading="submitLoading"
|
||||
@click="submitForm()"
|
||||
>保存</el-button
|
||||
>{{ $t('pages.teamList.action.save') }}</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@ -135,7 +135,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
const commonRules = [
|
||||
{ required: true, message: "必填字段不可为空", trigger: "blur" }
|
||||
{ required: true, message: this.$t("pages.teamList.validation.requiredField"), trigger: "blur" }
|
||||
];
|
||||
return {
|
||||
billCyclePolicyTypes,
|
||||
@ -189,7 +189,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn("正在提交!");
|
||||
this.$opsMessage.warn(this.$t("pages.teamList.message.submitting"));
|
||||
return;
|
||||
}
|
||||
this.$emit("close");
|
||||
@ -231,11 +231,11 @@ export default {
|
||||
|
||||
that
|
||||
.$confirm(
|
||||
"变更代理团队区域将清空该代理名下所有主播目标,你确定继续吗?",
|
||||
"提示",
|
||||
this.$t("pages.teamList.confirm.changeRegionMessage"),
|
||||
this.$t("pages.teamList.confirm.deleteTitle"),
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
confirmButtonText: this.$t("pages.teamList.action.confirm"),
|
||||
cancelButtonText: this.$t("pages.teamList.action.cancel"),
|
||||
type: "warning"
|
||||
}
|
||||
)
|
||||
@ -259,7 +259,7 @@ export default {
|
||||
.catch(() => {});
|
||||
// <el-alert
|
||||
// :v-if="tmpRegion !== form.region"
|
||||
// title="变更代理区域将清空所有主播目标,你确定继续吗?"
|
||||
// title="Changing the agent region will clear all host targets. Continue?"
|
||||
// type="warning"
|
||||
// effect="dark"
|
||||
// :closable="false"
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-notice-list">
|
||||
<el-drawer
|
||||
title="团队通知记录"
|
||||
:title="$t('pages.teamList.noticeList.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -14,8 +14,8 @@
|
||||
<el-row v-for="(item, index) in list" :key="index">
|
||||
<el-card style="margin: 20px;">
|
||||
<div style="padding: 0px; word-wrap: break-word;">
|
||||
<div><span style="font-weight: 600;color:#FF9326">标题: </span>{{ item.title }}</div>
|
||||
<div style="margin-top: 10px;"><span style="font-weight: 600;color:#FF9326">内容: </span>{{ item.content }}
|
||||
<div><span style="font-weight: 600;color:#FF9326">{{ $t('pages.teamList.noticeList.titleLabel') }}: </span>{{ item.title }}</div>
|
||||
<div style="margin-top: 10px;"><span style="font-weight: 600;color:#FF9326">{{ $t('pages.teamList.noticeList.contentLabel') }}: </span>{{ item.content }}
|
||||
<el-image
|
||||
v-if="item.cover"
|
||||
class="image"
|
||||
@ -24,8 +24,8 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="bottom clearfix">
|
||||
<time class="time">发送人: {{ item.createUser.nickname }} / {{ item.createTime }}</time>
|
||||
<el-button type="text" class="button" @click.native="handleDelete(item)">删除</el-button>
|
||||
<time class="time">{{ $t('pages.teamList.noticeList.sender') }}: {{ item.createUser.nickname }} / {{ item.createTime }}</time>
|
||||
<el-button type="text" class="button" @click.native="handleDelete(item)">{{ $t('pages.teamList.action.delete') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
@ -67,12 +67,12 @@ export default {
|
||||
},
|
||||
handleDelete(row) {
|
||||
const that = this
|
||||
that.$confirm('确认删除吗?', '提示', {
|
||||
that.$confirm(this.$t('pages.teamList.confirm.confirmDeleteNotice'), this.$t('pages.teamList.confirm.deleteTitle'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.listLoading = true
|
||||
deleteTeamNoticeById(row.id).then((res) => {
|
||||
// 过滤
|
||||
// Filter out the deleted notice locally.
|
||||
that.list = that.list.filter(function(obj) {
|
||||
return obj.id !== row.id
|
||||
})
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-notice-send">
|
||||
<el-drawer
|
||||
title="发送团队通知"
|
||||
:title="$t('pages.teamList.noticeSend.title')"
|
||||
:visible="true"
|
||||
:modal-append-to-body="true"
|
||||
:append-to-body="true"
|
||||
@ -18,31 +18,31 @@
|
||||
label-width="70px"
|
||||
style="width: 450px; margin-left:50px;"
|
||||
>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-form-item :label="$t('pages.teamList.noticeSend.titleLabel')" prop="title">
|
||||
<el-input
|
||||
v-model.trim="dataForm.title"
|
||||
placeholder="标题"
|
||||
:placeholder="$t('pages.teamList.noticeSend.titleLabel')"
|
||||
maxlength="60"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-form-item :label="$t('pages.teamList.noticeSend.content')" prop="content">
|
||||
<el-input
|
||||
v-model.trim="dataForm.content"
|
||||
placeholder="内容"
|
||||
:placeholder="$t('pages.teamList.noticeSend.content')"
|
||||
type="textarea"
|
||||
:rows="5"
|
||||
maxlength="200"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="链接">
|
||||
<el-form-item :label="$t('pages.teamList.noticeSend.link')">
|
||||
<el-input
|
||||
v-model.trim="dataForm.link"
|
||||
placeholder="链接"
|
||||
:placeholder="$t('pages.teamList.noticeSend.link')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="封面">
|
||||
<el-form-item :label="$t('pages.teamList.noticeSend.cover')">
|
||||
<el-form-item>
|
||||
<upload-image
|
||||
v-model="dataForm.cover"
|
||||
@ -53,14 +53,14 @@
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="handleClose">
|
||||
取消
|
||||
{{ $t('pages.teamList.action.cancel') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-loading="submitLoading"
|
||||
type="primary"
|
||||
@click="handleSubmit()"
|
||||
>
|
||||
提交
|
||||
{{ $t('pages.teamList.action.submit') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@ -92,10 +92,10 @@ export default {
|
||||
submitLoading: false,
|
||||
rules: {
|
||||
title: [
|
||||
{ required: true, message: '请输入标题', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamList.validation.titleRequired'), trigger: 'blur' }
|
||||
],
|
||||
content: [
|
||||
{ required: true, message: '请输入内容', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamList.validation.contentRequired'), trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
dataForm: {
|
||||
@ -113,7 +113,7 @@ export default {
|
||||
that.$refs.dataForm.validate(valid => {
|
||||
if (valid) {
|
||||
that.dataForm.teamId = that.teamId
|
||||
that.$confirm('确认发送通知吗?', '提示', {
|
||||
that.$confirm(this.$t('pages.teamList.confirm.sendNotice'), this.$t('pages.teamList.confirm.deleteTitle'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
that.submitLoading = true
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="team-remark-drawer">
|
||||
<el-drawer
|
||||
title="备注"
|
||||
:title="$t('pages.teamList.remark.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -12,7 +12,7 @@
|
||||
>
|
||||
<div class="team-remark">
|
||||
<div class="drawer-form">
|
||||
<p v-if="!remarks || remarks.length === 0">点击下方按钮添加 ”备注“</p>
|
||||
<p v-if="!remarks || remarks.length === 0">{{ $t('pages.teamList.remark.emptyTip') }}</p>
|
||||
<el-timeline v-else :reverse="true">
|
||||
<el-timeline-item
|
||||
v-for="(item, index) in remarks"
|
||||
@ -29,14 +29,14 @@
|
||||
</div>
|
||||
|
||||
<div class="drawer-footer">
|
||||
<el-button @click="handleClose()">关闭</el-button>
|
||||
<el-button type="primary" @click="clickAddRemarks">新增</el-button>
|
||||
<el-button @click="handleClose()">{{ $t('pages.teamList.action.close') }}</el-button>
|
||||
<el-button type="primary" @click="clickAddRemarks">{{ $t('pages.teamList.action.add') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
||||
<el-dialog
|
||||
title="备注"
|
||||
:title="$t('pages.teamList.remark.title')"
|
||||
:visible.sync="remarkVisible"
|
||||
:modal-append-to-body="true"
|
||||
:append-to-body="true"
|
||||
@ -48,7 +48,7 @@
|
||||
<el-input
|
||||
v-model="form.remarks"
|
||||
type="textarea"
|
||||
placeholder="请输入备注"
|
||||
:placeholder="$t('pages.teamList.remark.placeholder')"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
resize="none"
|
||||
@ -57,8 +57,8 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button :disabled="submitLoading" @click="remarkVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitAddRemarks">确 定</el-button>
|
||||
<el-button :disabled="submitLoading" @click="remarkVisible = false">{{ $t('pages.teamList.action.cancel') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitAddRemarks">{{ $t('pages.teamList.action.confirm') }}</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
@ -86,7 +86,7 @@ export default {
|
||||
},
|
||||
formRules: {
|
||||
remarks: [
|
||||
{ required: true, message: '必填字段不可为空', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamList.validation.requiredField'), trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
delForm: {
|
||||
@ -112,7 +112,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamList.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
@ -152,7 +152,7 @@ export default {
|
||||
},
|
||||
clickAddRemarks() {
|
||||
if (this.remarks && this.remarks.length >= 20) {
|
||||
this.$opsMessage.warn('最多添加20条备注, 清删除不必要的备注后重新添加')
|
||||
this.$opsMessage.warn(this.$t('pages.teamList.message.maxRemarks'))
|
||||
return
|
||||
}
|
||||
this.remarkVisible = true
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<!-- 状态变更废弃, 不保留数据; 将团队全部删除清理;-->
|
||||
<!-- Deprecated status change: closing clears all team data. -->
|
||||
<div class="team-status-drawer">
|
||||
<el-drawer
|
||||
title="状态变更"
|
||||
:title="$t('pages.teamList.teamStatus.title')"
|
||||
:visible="true"
|
||||
:before-close="handleClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -15,22 +15,22 @@
|
||||
<div class="drawer-form">
|
||||
<el-alert
|
||||
v-if="form.status === 'CLOSE'"
|
||||
title="关闭系统将移除团队所有数据, 操作不可逆!!!! (主播工作/账单/团队信息/团队成员/BD关系等所有)"
|
||||
:title="$t('pages.teamList.teamStatus.warning')"
|
||||
type="error"
|
||||
:closable="false"
|
||||
/>
|
||||
<el-form ref="form" :model="form" :rules="formRules" label-width="80px" style="margin-right: 15px;">
|
||||
<el-form-item prop="status" label="状态">
|
||||
<el-form-item prop="status" :label="$t('pages.teamList.teamStatus.status')">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio label="CLOSE">关闭</el-radio>
|
||||
<el-radio label="AVAILABLE">启动</el-radio>
|
||||
<el-radio label="CLOSE">{{ $t('pages.teamList.teamStatus.close') }}</el-radio>
|
||||
<el-radio label="AVAILABLE">{{ $t('pages.teamList.teamStatus.available') }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="remarks" label="备注">
|
||||
<el-form-item prop="remarks" :label="$t('pages.teamList.teamStatus.remarks')">
|
||||
<el-input
|
||||
v-model="form.remarks"
|
||||
type="textarea"
|
||||
placeholder="请输入备注"
|
||||
:placeholder="$t('pages.teamList.remark.placeholder')"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
resize="none"
|
||||
@ -40,8 +40,8 @@
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">关闭</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submit">保存</el-button>
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">{{ $t('pages.teamList.action.close') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submit">{{ $t('pages.teamList.action.save') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
@ -95,7 +95,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamList.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
|
||||
@ -10,25 +10,25 @@
|
||||
custom-class="drawer-auto-layout"
|
||||
>
|
||||
<div slot="title" class="flex-l">
|
||||
<sys-origin-icon :icon="profile.sysOrigin" size="18px" /> 更换团长
|
||||
<sys-origin-icon :icon="profile.sysOrigin" size="18px" /> {{ $t('pages.teamList.switchOwn.title') }}
|
||||
</div>
|
||||
<div class="edit-team">
|
||||
<el-alert
|
||||
title="历史团队如果存在工作数据将会被清理!!! 团队未解散BD关系将继续维持"
|
||||
:title="$t('pages.teamList.switchOwn.warning')"
|
||||
type="info"
|
||||
:closable="false"
|
||||
style="margin-bottom: 10px;"
|
||||
/>
|
||||
<div class="drawer-form">
|
||||
<el-form ref="form" :model="form" :rules="formRules" label-width="80px">
|
||||
<el-form-item prop="ownUserId" label="代理">
|
||||
<account-input v-model="form.ownUserId" :sys-origin="profile.sysOrigin" placeholder="请输入代理ID" />
|
||||
<el-form-item prop="ownUserId" :label="$t('pages.teamList.switchOwn.agent')">
|
||||
<account-input v-model="form.ownUserId" :sys-origin="profile.sysOrigin" :placeholder="$t('pages.teamList.switchOwn.agentPlaceholder')" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">取消</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitForm()">保存</el-button>
|
||||
<el-button :disabled="submitLoading" @click="handleClose()">{{ $t('pages.teamList.action.cancel') }}</el-button>
|
||||
<el-button type="primary" :disabled="submitLoading" :loading="submitLoading" @click="submitForm()">{{ $t('pages.teamList.action.save') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
@ -49,7 +49,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
const commonRules = [
|
||||
{ required: true, message: '必填字段不可为空', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.teamList.validation.requiredField'), trigger: 'blur' }
|
||||
]
|
||||
return {
|
||||
submitLoading: false,
|
||||
@ -78,7 +78,7 @@ export default {
|
||||
methods: {
|
||||
handleClose() {
|
||||
if (this.submitLoading) {
|
||||
this.$opsMessage.warn('正在提交!')
|
||||
this.$opsMessage.warn(this.$t('pages.teamList.message.submitting'))
|
||||
return
|
||||
}
|
||||
this.$emit('close')
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="app-container">
|
||||
<div class="filter-container">
|
||||
<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.userDiamondBalance.filter.userId')" type="USER" :sys-origin="listQuery.sysOrigin" /></div>
|
||||
</div>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
@ -10,7 +10,7 @@
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.userDiamondBalance.action.search') }}
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
@ -21,15 +21,15 @@
|
||||
fit
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column label="用户" align="center" min-width="100">
|
||||
<el-table-column :label="$t('pages.userDiamondBalance.table.user')" align="center" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="balance" label="余额" align="center" min-width="100" />
|
||||
<el-table-column prop="balance" :label="$t('pages.userDiamondBalance.table.balance')" align="center" min-width="120" />
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="创建时间"
|
||||
:label="$t('pages.userDiamondBalance.table.createdAt')"
|
||||
align="center"
|
||||
width="200"
|
||||
>
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="系统"
|
||||
:placeholder="$t('pages.userDiamondRunWater.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="changeSysOrigin"
|
||||
@ -19,25 +19,25 @@
|
||||
</el-option>
|
||||
</el-select>
|
||||
<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.userDiamondRunWater.filter.userId')" type="USER" :sys-origin="listQuery.sysOrigin" /></div>
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.type"
|
||||
placeholder="类型"
|
||||
:placeholder="$t('pages.userDiamondRunWater.filter.type')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
clearable
|
||||
@change="handleSearch"
|
||||
>
|
||||
<el-option label="收入" :value="false" />
|
||||
<el-option label="支出" :value="true" />
|
||||
<el-option :label="$t('pages.userDiamondRunWater.type.income')" :value="false" />
|
||||
<el-option :label="$t('pages.userDiamondRunWater.type.expense')" :value="true" />
|
||||
</el-select>
|
||||
<div class="filter-item">
|
||||
<el-autocomplete
|
||||
v-model="listQuery.origin"
|
||||
popper-class="my-autocomplete"
|
||||
:fetch-suggestions="querySearch"
|
||||
placeholder="请输入或选择内容"
|
||||
:placeholder="$t('pages.userDiamondRunWater.filter.origin')"
|
||||
clearable
|
||||
@select="handleSelect"
|
||||
@clear="handleSelect"
|
||||
@ -47,7 +47,7 @@
|
||||
class="el-icon-edit el-input__icon"
|
||||
/>
|
||||
<template slot-scope="{ item }">
|
||||
<span :label="item.name">{{ item.name }}</span>
|
||||
<span :label="getDiamondOriginName(item)">{{ getDiamondOriginName(item) }}</span>
|
||||
<div :key="item.value" :value="item.value" style="font-size:12px; color:#d8d0d0">{{ item.value }}</div>
|
||||
</template>
|
||||
</el-autocomplete>
|
||||
@ -58,7 +58,7 @@
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.userDiamondRunWater.action.search') }}
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
@ -69,20 +69,20 @@
|
||||
fit
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column label="用户" align="center" min-width="100">
|
||||
<el-table-column :label="$t('pages.userDiamondRunWater.table.user')" align="center" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<user-table-exhibit :user-profile="scope.row.userProfile" :query-details="true" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="balance" label="钻石余额" align="center" min-width="100" />
|
||||
<el-table-column prop="quantity" label="钻石" align="center" min-width="100" />
|
||||
<el-table-column prop="origin" label="来源" align="center" min-width="100" />
|
||||
<el-table-column prop="originDesc" label="来源描述" align="center" min-width="100" />
|
||||
<el-table-column prop="typeDesc" label="类型" align="center" min-width="100" />
|
||||
<el-table-column prop="remarks" label="备注" align="center" min-width="100" />
|
||||
<el-table-column prop="balance" :label="$t('pages.userDiamondRunWater.table.diamondBalance')" align="center" min-width="120" />
|
||||
<el-table-column prop="quantity" :label="$t('pages.userDiamondRunWater.table.diamond')" align="center" min-width="100" />
|
||||
<el-table-column prop="origin" :label="$t('pages.userDiamondRunWater.table.source')" align="center" min-width="120" />
|
||||
<el-table-column prop="originDesc" :label="$t('pages.userDiamondRunWater.table.sourceDescription')" align="center" min-width="150" />
|
||||
<el-table-column prop="typeDesc" :label="$t('pages.userDiamondRunWater.table.type')" align="center" min-width="100" />
|
||||
<el-table-column prop="remarks" :label="$t('pages.userDiamondRunWater.table.remarks')" align="center" min-width="120" />
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="创建时间"
|
||||
:label="$t('pages.userDiamondRunWater.table.createdAt')"
|
||||
align="center"
|
||||
width="200"
|
||||
>
|
||||
@ -187,6 +187,13 @@ export default {
|
||||
var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants
|
||||
cb(results)
|
||||
},
|
||||
getDiamondOriginName(origin) {
|
||||
const value = origin && origin.value ? origin.value : origin
|
||||
const fallback = origin && origin.name ? origin.name : value
|
||||
const key = `pages.userDiamondRunWater.origin.${value}`
|
||||
const label = this.$t(key)
|
||||
return label === key ? fallback : label
|
||||
},
|
||||
createFilter(queryString) {
|
||||
return (restaurant) => {
|
||||
return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) >= 0) || (restaurant.name.toLowerCase().indexOf(queryString.toLowerCase()) >= 0)
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<div class="filter-container">
|
||||
<el-select
|
||||
v-model="listQuery.sysOrigin"
|
||||
placeholder="系统"
|
||||
:placeholder="$t('pages.userFreightInfoList.filter.system')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -26,19 +26,19 @@
|
||||
<account-input
|
||||
v-model="listQuery.userId"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
placeholder="发送用户"
|
||||
:placeholder="$t('pages.userFreightInfoList.filter.sender')"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
<account-input
|
||||
v-model="listQuery.acceptUserId"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
placeholder="接收用户"
|
||||
:placeholder="$t('pages.userFreightInfoList.filter.receiver')"
|
||||
/>
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.origin"
|
||||
placeholder="来源"
|
||||
:placeholder="$t('pages.userFreightInfoList.filter.origin')"
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@change="handleSearch"
|
||||
@ -46,7 +46,7 @@
|
||||
<el-option
|
||||
v-for="item in freightBalanceOrigin"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="getFreightBalanceOriginName(item)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -57,9 +57,9 @@
|
||||
value-format="timestamp"
|
||||
type="datetimerange"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="日期开始"
|
||||
end-placeholder="日期结束"
|
||||
:range-separator="$t('pages.userFreightInfoList.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.userFreightInfoList.date.start')"
|
||||
:end-placeholder="$t('pages.userFreightInfoList.date.end')"
|
||||
/>
|
||||
</div>
|
||||
<el-button
|
||||
@ -69,7 +69,7 @@
|
||||
:disabled="searchDisabled"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.userFreightInfoList.action.search') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="buttonPermissions.includes('user:table:freightwarter:export')"
|
||||
@ -78,7 +78,7 @@
|
||||
icon="el-icon-download"
|
||||
@click="exprotOrder"
|
||||
>
|
||||
导出
|
||||
{{ $t('pages.userFreightInfoList.action.export') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
@ -88,7 +88,7 @@
|
||||
fit
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column prop="sysOrigin" label="系统" align="center" width="80">
|
||||
<el-table-column prop="sysOrigin" :label="$t('pages.userFreightInfoList.table.system')" align="center" width="80">
|
||||
<template slot-scope="scope">
|
||||
<sys-origin-icon
|
||||
:icon="scope.row.sysOrigin"
|
||||
@ -96,7 +96,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="用户" align="center" min-width="240">
|
||||
<el-table-column :label="$t('pages.userFreightInfoList.table.user')" align="center" min-width="240">
|
||||
<template slot-scope="scope">
|
||||
<user-table-exhibit
|
||||
:user-profile="scope.row.userBaseInfo"
|
||||
@ -105,7 +105,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="接收人" align="center" min-width="240">
|
||||
<el-table-column :label="$t('pages.userFreightInfoList.table.receiver')" align="center" min-width="240">
|
||||
<template slot-scope="scope">
|
||||
<user-table-exhibit
|
||||
:user-profile="scope.row.acceptUser"
|
||||
@ -113,15 +113,15 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" align="center" width="60">
|
||||
<el-table-column :label="$t('pages.userFreightInfoList.table.type')" align="center" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<span v-if="scope.row.type === 0">收入</span>
|
||||
<span v-if="scope.row.type === 1">支出</span>
|
||||
<span v-if="scope.row.type === 0">{{ $t('pages.userFreightInfoList.type.income') }}</span>
|
||||
<span v-if="scope.row.type === 1">{{ $t('pages.userFreightInfoList.type.expense') }}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数量" align="center" min-width="100">
|
||||
<el-table-column :label="$t('pages.userFreightInfoList.table.quantity')" align="center" min-width="100">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<span
|
||||
@ -134,25 +134,25 @@
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="balance"
|
||||
label="余额"
|
||||
:label="$t('pages.userFreightInfoList.table.balance')"
|
||||
align="center"
|
||||
min-width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="originName"
|
||||
label="来源"
|
||||
:label="$t('pages.userFreightInfoList.table.origin')"
|
||||
align="center"
|
||||
min-width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="remark"
|
||||
label="备注"
|
||||
:label="$t('pages.userFreightInfoList.table.remark')"
|
||||
align="center"
|
||||
min-width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="创建时间"
|
||||
:label="$t('pages.userFreightInfoList.table.createdAt')"
|
||||
align="center"
|
||||
width="200"
|
||||
>
|
||||
@ -170,7 +170,7 @@
|
||||
/>
|
||||
|
||||
<el-drawer
|
||||
title="导出条件"
|
||||
:title="$t('pages.userFreightInfoList.exportDialog.title')"
|
||||
:visible="exportConditionVisible"
|
||||
:before-close="exportConditionClose"
|
||||
:close-on-press-escape="false"
|
||||
@ -188,10 +188,10 @@
|
||||
label-position="left"
|
||||
label-width="70px"
|
||||
>
|
||||
<el-form-item label="系统" prop="sysOrigin">
|
||||
<el-form-item :label="$t('pages.userFreightInfoList.exportDialog.system')" prop="sysOrigin">
|
||||
<el-select
|
||||
v-model="exportQuery.sysOrigin"
|
||||
placeholder="系统"
|
||||
:placeholder="$t('pages.userFreightInfoList.exportDialog.system')"
|
||||
style="width: 100%;"
|
||||
class="filter-item"
|
||||
>
|
||||
@ -213,25 +213,25 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="月份" prop="monthDate">
|
||||
<el-form-item :label="$t('pages.userFreightInfoList.exportDialog.month')" prop="monthDate">
|
||||
<el-date-picker
|
||||
v-model="exportQuery.monthDate"
|
||||
type="month"
|
||||
value-format="yyyyMM"
|
||||
placeholder="选择月"
|
||||
:placeholder="$t('pages.userFreightInfoList.exportDialog.selectMonth')"
|
||||
style="width: 100%;"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="drawer-footer">
|
||||
<el-button @click="exportConditionClose()">关闭</el-button>
|
||||
<el-button @click="exportConditionClose()">{{ $t('pages.userFreightInfoList.action.close') }}</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="exportLoading"
|
||||
:loading="exportLoading"
|
||||
@click="exportConditionSubmit()"
|
||||
>导出</el-button>
|
||||
>{{ $t('pages.userFreightInfoList.action.export') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
@ -255,7 +255,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
const commonRules = [
|
||||
{ required: true, message: '必填字段不可为空', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('pages.userFreightInfoList.validation.requiredField'), trigger: 'blur' }
|
||||
]
|
||||
return {
|
||||
list: [],
|
||||
@ -341,9 +341,16 @@ export default {
|
||||
handleSearch() {
|
||||
this.renderData(true)
|
||||
},
|
||||
getFreightBalanceOriginName(origin) {
|
||||
const value = origin && origin.value ? origin.value : origin
|
||||
const fallback = origin && origin.name ? origin.name : value
|
||||
const key = `pages.userFreightInfoList.origin.${value}`
|
||||
const label = this.$t(key)
|
||||
return label === key ? fallback : label
|
||||
},
|
||||
exportConditionClose() {
|
||||
if (this.exportLoading) {
|
||||
this.$opsMessage.warn('正在执行导出, 请稍等~')
|
||||
this.$opsMessage.warn(this.$t('pages.userFreightInfoList.message.exporting'))
|
||||
return
|
||||
}
|
||||
this.exportConditionVisible = false
|
||||
@ -369,7 +376,7 @@ export default {
|
||||
})
|
||||
.catch(er => {
|
||||
that.exportLoading = false
|
||||
this.$opsMessage.fail('下载失败!')
|
||||
this.$opsMessage.fail(this.$t('pages.userFreightInfoList.message.downloadFailed'))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
v-model="listQuery.userId"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
class="filter-item"
|
||||
placeholder="用户ID"
|
||||
:placeholder="$t('pages.integralStream.filter.userId')"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
@ -16,14 +16,14 @@
|
||||
value-format="timestamp"
|
||||
:picker-options="pickerOptions"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:range-separator="$t('pages.integralStream.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.integralStream.date.start')"
|
||||
:end-placeholder="$t('pages.integralStream.date.end')"
|
||||
/>
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.origin"
|
||||
placeholder="积分来源"
|
||||
:placeholder="$t('pages.integralStream.filter.origin')"
|
||||
clearable
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@ -31,7 +31,7 @@
|
||||
<el-option
|
||||
v-for="item in videoOrigin"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="getVideoOriginName(item)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -43,7 +43,7 @@
|
||||
:disabled="searchDisabled"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.integralStream.action.search') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
@ -53,7 +53,7 @@
|
||||
fit
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column label="昵称" align="center">
|
||||
<el-table-column :label="$t('pages.integralStream.table.nickname')" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-link
|
||||
v-if="scope.row.userBaseInfo && scope.row.userBaseInfo.userNickname"
|
||||
@ -63,16 +63,16 @@
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="title" label="来源对象" align="center" />
|
||||
<el-table-column prop="originName" label="积分来源" align="center" />
|
||||
<el-table-column prop="quantity" label="获得积分" align="center">
|
||||
<el-table-column prop="title" :label="$t('pages.integralStream.table.sourceObject')" align="center" min-width="140" />
|
||||
<el-table-column prop="originName" :label="$t('pages.integralStream.table.pointsOrigin')" align="center" min-width="140" />
|
||||
<el-table-column prop="quantity" :label="$t('pages.integralStream.table.points')" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<div :class="{ 'font-danger': scope.row.type === 0 }">
|
||||
{{ scope.row.type === 0 ? "+" : "-" }}{{ scope.row.quantity || 0 }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" align="center">
|
||||
<el-table-column prop="createTime" :label="$t('pages.integralStream.table.createdAt')" align="center" min-width="160">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.createTime | dateFormat }}
|
||||
</template>
|
||||
@ -164,6 +164,13 @@ export default {
|
||||
this.searchLoading = true;
|
||||
this.renderData();
|
||||
},
|
||||
getVideoOriginName(origin) {
|
||||
const value = origin && origin.value ? origin.value : origin;
|
||||
const fallback = origin && origin.name ? origin.name : value;
|
||||
const key = `pages.integralStream.origin.${value}`;
|
||||
const label = this.$t(key);
|
||||
return label === key ? fallback : label;
|
||||
},
|
||||
queryUserDetails(id) {
|
||||
this.userDeatilsDrawerVisible = true;
|
||||
this.thatSelectedUserId = id;
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<el-tab-pane
|
||||
v-for="item in tables"
|
||||
:key="item.name"
|
||||
:label="item.title"
|
||||
:label="$t(item.titleKey)"
|
||||
:name="item.component"
|
||||
/>
|
||||
<component :is="activeName" />
|
||||
@ -25,11 +25,11 @@ export default {
|
||||
activeName: "IntegralStreamTimelyPreview",
|
||||
tables: [
|
||||
{
|
||||
title: "积分流水",
|
||||
titleKey: "pages.integralStream.tab.current",
|
||||
component: "IntegralStreamTimelyPreview"
|
||||
} /* ,
|
||||
{
|
||||
title: '历史积分流水',
|
||||
titleKey: 'pages.integralStream.tab.history',
|
||||
component: 'IntegralStreamHistoryTimelyPreview'
|
||||
} */
|
||||
]
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<account-input
|
||||
v-model="listQuery.userId"
|
||||
:sys-origin="listQuery.sysOrigin"
|
||||
placeholder="用户ID"
|
||||
:placeholder="$t('pages.integralStream.filter.userId')"
|
||||
/>
|
||||
</div>
|
||||
<div class="filter-item">
|
||||
@ -15,14 +15,14 @@
|
||||
value-format="timestamp"
|
||||
:picker-options="pickerOptions"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:range-separator="$t('pages.integralStream.date.rangeSeparator')"
|
||||
:start-placeholder="$t('pages.integralStream.date.start')"
|
||||
:end-placeholder="$t('pages.integralStream.date.end')"
|
||||
/>
|
||||
</div>
|
||||
<el-select
|
||||
v-model="listQuery.origin"
|
||||
placeholder="积分来源"
|
||||
:placeholder="$t('pages.integralStream.filter.origin')"
|
||||
clearable
|
||||
style="width: 120px"
|
||||
class="filter-item"
|
||||
@ -30,7 +30,7 @@
|
||||
<el-option
|
||||
v-for="item in videoOrigin"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:label="getVideoOriginName(item)"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
@ -42,11 +42,11 @@
|
||||
:disabled="searchDisabled"
|
||||
@click="handleSearch"
|
||||
>
|
||||
搜索
|
||||
{{ $t('pages.integralStream.action.search') }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-alert title="注意" type="warning" :closable="false">
|
||||
数据只会保留30天;
|
||||
<el-alert :title="$t('pages.integralStream.alert.title')" type="warning" :closable="false">
|
||||
{{ $t('pages.integralStream.alert.retention') }}
|
||||
</el-alert>
|
||||
<el-table
|
||||
v-loading="listLoading"
|
||||
@ -55,7 +55,7 @@
|
||||
fit
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column label="昵称" align="center">
|
||||
<el-table-column :label="$t('pages.integralStream.table.nickname')" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-link
|
||||
v-if="scope.row.userBaseInfo && scope.row.userBaseInfo.userNickname"
|
||||
@ -65,16 +65,16 @@
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="title" label="来源对象" align="center" />
|
||||
<el-table-column prop="originName" label="积分来源" align="center" />
|
||||
<el-table-column prop="quantity" label="获得积分" align="center">
|
||||
<el-table-column prop="title" :label="$t('pages.integralStream.table.sourceObject')" align="center" min-width="140" />
|
||||
<el-table-column prop="originName" :label="$t('pages.integralStream.table.pointsOrigin')" align="center" min-width="140" />
|
||||
<el-table-column prop="quantity" :label="$t('pages.integralStream.table.points')" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<div :class="{ 'font-danger': scope.row.type === 0 }">
|
||||
{{ scope.row.type === 0 ? "+" : "-" }}{{ scope.row.quantity || 0 }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" align="center">
|
||||
<el-table-column prop="createTime" :label="$t('pages.integralStream.table.createdAt')" align="center" min-width="160">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.createTime | dateFormat }}
|
||||
</template>
|
||||
@ -166,6 +166,13 @@ export default {
|
||||
this.searchLoading = true
|
||||
this.renderData()
|
||||
},
|
||||
getVideoOriginName(origin) {
|
||||
const value = origin && origin.value ? origin.value : origin
|
||||
const fallback = origin && origin.name ? origin.name : value
|
||||
const key = `pages.integralStream.origin.${value}`
|
||||
const label = this.$t(key)
|
||||
return label === key ? fallback : label
|
||||
},
|
||||
queryUserDetails(id) {
|
||||
this.userDeatilsDrawerVisible = true
|
||||
this.thatSelectedUserId = id
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user