diff --git a/.env.local b/.env.local index 3406c71..6004804 100644 --- a/.env.local +++ b/.env.local @@ -4,10 +4,9 @@ NODE_ENV=development VITE_DEV=true # 请求路径 -# VITE_BASE_URL='http://172.16.214.222:48080' -VITE_BASE_URL='http://192.168.1.144:48080' -# VITE_BASE_URL='http://47.79.98.113:48080' -# VITE_BASE_URL='https://backstageapi.yolozs.com' +# VITE_BASE_URL='http://192.168.2.21:48080' +VITE_BASE_URL='https://backstageapi.yolozs.com' +# VITE_BASE_URL='https://testapi.tknb.net' # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务 VITE_UPLOAD_TYPE=server diff --git a/.env.prod b/.env.prod index 124d83e..0ed6703 100644 --- a/.env.prod +++ b/.env.prod @@ -5,6 +5,7 @@ VITE_DEV=false # 请求路径 VITE_BASE_URL='https://backstageapi.yolozs.com' +# VITE_BASE_URL='https://testapi.tknb.net' # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 VITE_UPLOAD_TYPE=server diff --git a/.env.test b/.env.test index 2252e14..7bc5014 100644 --- a/.env.test +++ b/.env.test @@ -4,7 +4,7 @@ NODE_ENV=production VITE_DEV=false # 请求路径 -VITE_BASE_URL='http://localhost:48080' +VITE_BASE_URL='http://testapi.tknb.net' # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 VITE_UPLOAD_TYPE=server diff --git a/src/api/server/bigbrother/index.ts b/src/api/server/bigbrother/index.ts index e81a659..83ecdf3 100644 --- a/src/api/server/bigbrother/index.ts +++ b/src/api/server/bigbrother/index.ts @@ -49,7 +49,11 @@ export const BigBrotherApi = { deleteBigBrother: async (id: number) => { return await request.delete({ url: `/server/big-brother/delete?id=` + id }) }, - +// 批量删除大哥数据 + deleteBigBrotherList: async (ids: number[]) => { + return await request.delete({ url: `/server/big-brother/delete-list` , params: { ids: ids.join(',') } }) + }, + // 导出大哥数据 Excel exportBigBrother: async (params) => { return await request.download({ url: `/server/big-brother/export-excel`, params }) diff --git a/src/api/server/employeebigbrother/index.ts b/src/api/server/employeebigbrother/index.ts index 8110b6c..957e3f0 100644 --- a/src/api/server/employeebigbrother/index.ts +++ b/src/api/server/employeebigbrother/index.ts @@ -52,7 +52,11 @@ export const EmployeeBigBrotherApi = { deleteEmployeeBigBrother: async (id: number) => { return await request.delete({ url: `/server/employee-big-brother/delete?id=` + id }) }, - + // 批量删除大哥数据员工业务 + deleteEmployeeBigBrotherList: async (ids: number[]) => { + return await request.delete({ url: `/server/employee-big-brother/delete-list` , params: { ids: ids.join(',') } }) + }, + // 导出大哥数据员工业务 Excel exportEmployeeBigBrother: async (params) => { return await request.download({ url: `/server/employee-big-brother/export-excel`, params }) diff --git a/src/api/server/employeehosts/index.ts b/src/api/server/employeehosts/index.ts index 74f7837..665ee81 100644 --- a/src/api/server/employeehosts/index.ts +++ b/src/api/server/employeehosts/index.ts @@ -36,14 +36,14 @@ export const EmployeeHostsApi = { getEmployeeHostsPageDsec: async (params: any) => { return await request.get({ url: `/server/employee-big-brother/self_complete` }) }, - // 查询员工分配主播分页 + // 查询爬大哥建联 employeeCompleteBarChart: async (params: number[], days: number) => { return await request.post({ url: `/server/employee-hosts/employeeCompleteBarChart`, data: { userId: params, days: days } }) }, - // 查询员工分配大哥分页 + // 查询爬大哥建联 employeeCompleteBarChartDsec: async (params: number[], days: number) => { return await request.post({ url: `/server/employee-big-brother/employeeCompleteBarChart`, diff --git a/src/api/system/tenant/index.ts b/src/api/system/tenant/index.ts index c51ec7e..b3f5e79 100644 --- a/src/api/system/tenant/index.ts +++ b/src/api/system/tenant/index.ts @@ -35,6 +35,14 @@ export interface TenantExportReqVO { export const getTenantPage = (params: TenantPageReqVO) => { return request.get({ url: '/system/tenant/page', params }) } +// 查询租户列表(代理) +export const getTenantPageSelf = (params: TenantPageReqVO) => { + return request.get({ url: '/system/tenant/page_self', params }) +} +// 查询下级租户列表(代理) +export const getTenantChildren = (params: TenantPageReqVO) => { + return request.get({ url: '/system/tenant/get-children', params }) +} // 查询租户详情 export const getTenant = (id: number) => { @@ -70,3 +78,12 @@ export const deleteTenantList = (ids: number[]) => { export const exportTenant = (params: TenantExportReqVO) => { return request.download({ url: '/system/tenant/export-excel', params }) } +// 获取租户等级 +export const getSelfTenantLevel = () => { + return request.get({ url: '/system/tenant/getSelfTenantLevel' }) +} + +// 续费 +export const renewal = (data) => { + return request.put({ url: '/system/tenant/renewal',data}) +} diff --git a/src/api/system/tenantPackage/index.ts b/src/api/system/tenantPackage/index.ts index 49d9d40..35581b6 100644 --- a/src/api/system/tenantPackage/index.ts +++ b/src/api/system/tenantPackage/index.ts @@ -10,6 +10,8 @@ export interface TenantPackageVO { updateTime: string menuIds: number[] createTime: Date + packageType: number + days: number } // 查询租户套餐列表 @@ -46,3 +48,7 @@ export const deleteTenantPackageList = (ids: number[]) => { export const getTenantPackageList = () => { return request.get({ url: '/system/tenant-package/simple-list' }) } +// 获取非总后台租户套餐精简信息列表 +export const getTenantPackageListagency = () => { + return request.get({ url: '/system/tenant-agency-package/get-simple-list' }) +} diff --git a/src/api/system/tenantagencypackage/index.ts b/src/api/system/tenantagencypackage/index.ts new file mode 100644 index 0000000..8c54146 --- /dev/null +++ b/src/api/system/tenantagencypackage/index.ts @@ -0,0 +1,49 @@ +import request from '@/config/axios' + +// 代理租户套餐 VO +export interface TenantAgencyPackageVO { + id: number // 套餐编号 + name: string // 套餐名 + status: number // 租户状态(0正常 1停用) + remark: string // 备注 + menuIds: string // 关联的菜单编号 + days: number // 套餐天数 + price: number // 套餐价格 + hostslClient: number // 爬主播客户端 0 关闭 1 开启 + brotherClient: number // 爬大哥客户端 0 关闭 1 开启 + aiClient: number // AI 客户端 0 关闭 1 开启 + packageType: number // 套餐类型 +} + +// 代理租户套餐 API +export const TenantAgencyPackageApi = { + // 查询代理租户套餐分页 + getTenantAgencyPackagePage: async (params: any) => { + return await request.get({ url: `/system/tenant-agency-package/page`, params }) + }, + + // 查询代理租户套餐详情 + getTenantAgencyPackage: async (id: number) => { + return await request.get({ url: `/system/tenant-agency-package/get?id=` + id }) + }, + + // 新增代理租户套餐 + createTenantAgencyPackage: async (data: TenantAgencyPackageVO) => { + return await request.post({ url: `/system/tenant-agency-package/create`, data }) + }, + + // 修改代理租户套餐 + updateTenantAgencyPackage: async (data: TenantAgencyPackageVO) => { + return await request.put({ url: `/system/tenant-agency-package/update`, data }) + }, + + // 删除代理租户套餐 + deleteTenantAgencyPackage: async (id: number) => { + return await request.delete({ url: `/system/tenant-agency-package/delete?id=` + id }) + }, + + // 导出代理租户套餐 Excel + exportTenantAgencyPackage: async (params) => { + return await request.download({ url: `/system/tenant-agency-package/export-excel`, params }) + } +} \ No newline at end of file diff --git a/src/api/system/tenantbalance/index.ts b/src/api/system/tenantbalance/index.ts new file mode 100644 index 0000000..f1e01cc --- /dev/null +++ b/src/api/system/tenantbalance/index.ts @@ -0,0 +1,83 @@ +import request from '@/config/axios' + +// 租户余额 VO +export interface TenantBalanceVO { + id: number // 租户 Id + balance: number // 当前积分余额 + version: number // 乐观锁版本号 + updatedAt: Date // 更新时间 +} + +// 租户余额 API +export const TenantBalanceApi = { + // 查询租户余额分页 + getTenantBalancePage: async (params: any) => { + return await request.get({ url: `/system/tenant-balance/page`, params }) + }, + // 查询下级租户余额分页 + getSubordinateaMountPage: async (params: any) => { + return await request.get({ url: `/system/tenant-balance/get-self-subordinate-amount-page`, params }) + }, + + //查看当前余额 + getselfamount: async () => { + return await request.get({ url: `/system/tenant-balance/get-self-amount` }) + }, + + // 查询租户余额详情 + getTenantBalance: async (id: number) => { + return await request.get({ url: `/system/tenant-balance/get?id=` + id }) + }, + + // 新增租户余额 + createTenantBalance: async (data: TenantBalanceVO) => { + return await request.post({ url: `/system/tenant-balance/create`, data }) + }, + + // 修改租户余额 + updateTenantBalance: async (data: TenantBalanceVO) => { + return await request.put({ url: `/system/tenant-balance/update`, data }) + }, + + // 删除租户余额 + deleteTenantBalance: async (id: number) => { + return await request.delete({ url: `/system/tenant-balance/delete?id=` + id }) + }, + // 转账租户余额 + tenantTransfer: async (data: TenantBalanceVO) => { + return await request.post({ url: `/system/tenant-balance/transfer`, data }) + }, + addAmount: async (data: TenantBalanceVO) => { + return await request.post({ url: `/system/tenant-balance/addAmount`, data }) + }, + // 导出租户余额 Excel + exportTenantBalance: async (params) => { + return await request.download({ url: `/system/tenant-balance/export-excel`, params }) + }, + +// ==================== 子表(租户余额) ==================== + + // 获得租户余额分页 + getTenantPointsPage: async (params) => { + return await request.get({ url: `/system/tenant-points/transaction-history/page`, params }) + }, + // 新增租户余额 + createTenantPoints: async (data) => { + return await request.post({ url: `/system/tenant-balance/tenant-points/create`, data }) + }, + + // 修改租户余额 + updateTenantPoints: async (data) => { + return await request.put({ url: `/system/tenant-balance/tenant-points/update`, data }) + }, + + // 删除租户余额 + deleteTenantPoints: async (id: number) => { + return await request.delete({ url: `/system/tenant-balance/tenant-points/delete?id=` + id }) + }, + + // 获得租户余额 + getTenantPoints: async (id: number) => { + return await request.get({ url: `/system/tenant-balance/tenant-points/get?id=` + id }) + } +} \ No newline at end of file diff --git a/src/api/system/tenantpoints/index.ts b/src/api/system/tenantpoints/index.ts new file mode 100644 index 0000000..4765294 --- /dev/null +++ b/src/api/system/tenantpoints/index.ts @@ -0,0 +1,48 @@ +import request from '@/config/axios' + +// 租户积分记录 VO +export interface TenantPointsVO { + id: number // 主键 + points: number // 本次变动点数,正加负减 + balance: number // 变动后余额快照(冗余) + type: string // 变动类型,如 RECHARGE, CONSUME, TRANSFER_OUT, TRANSFER_IN + remark: string // 备注 + orderId: number // 订单 Id/业务单号 + bizNo: string // 业务流水号(转账、订单等唯一标识) + operatorId: number // 操作人 Id + targetTenantId: number // 目标租户 Id(转账使用) + createdAt: Date // 创建时间 +} + +// 租户积分记录 API +export const TenantPointsApi = { + // 查询租户积分记录分页 + getTenantPointsPage: async (params: any) => { + return await request.get({ url: `/system/tenant-points/page`, params }) + }, + + // 查询租户积分记录详情 + getTenantPoints: async (id: number) => { + return await request.get({ url: `/system/tenant-points/get?id=` + id }) + }, + + // 新增租户积分记录 + createTenantPoints: async (data: TenantPointsVO) => { + return await request.post({ url: `/system/tenant-points/create`, data }) + }, + + // 修改租户积分记录 + updateTenantPoints: async (data: TenantPointsVO) => { + return await request.put({ url: `/system/tenant-points/update`, data }) + }, + + // 删除租户积分记录 + deleteTenantPoints: async (id: number) => { + return await request.delete({ url: `/system/tenant-points/delete?id=` + id }) + }, + + // 导出租户积分记录 Excel + exportTenantPoints: async (params) => { + return await request.download({ url: `/system/tenant-points/export-excel`, params }) + } +} \ No newline at end of file diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts index 1617cdf..c143134 100644 --- a/src/api/system/user/index.ts +++ b/src/api/system/user/index.ts @@ -20,6 +20,7 @@ export interface UserVO { tenantId: number aiChat: number aiReplay: number + webAi: number } // 查询用户管理列表 diff --git a/src/locales/en.ts b/src/locales/en.ts index 54339a9..dbfe48d 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -491,6 +491,7 @@ export default { aiOperation: 'Ai Operation', sortType: 'Sort Type', sortName: 'Sort Name', + isDelete: 'Is Delete', placeIsAssigned: 'Please select assignment status', placeaiOperation: 'Please select Ai operation', createTime: 'Created Time', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index d837247..7389d90 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -489,6 +489,7 @@ export default { aiOperation: '是否AI介入', sortType: '排序类型', sortName: '排序名字', + isDelete: '是否删除', placeIsAssigned: '请选择是否已经分配给员工', placeaiOperation: '请筛选是否AI介入', createTime: '创建时间', diff --git a/src/utils/dict.ts b/src/utils/dict.ts index c2f6b94..f9d3fc8 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -255,5 +255,7 @@ export enum DICT_TYPE { SORT_STATE = 'sort_state', // 升序降序 SORT_TYPE = 'sort_type', // 排序类型 FLAG_TYPE = 'flag_type', // 旗帜 - HOSTS_KIND = 'hosts_type' // 直播类型 + HOSTS_KIND = 'hosts_type', // 直播类型 + + PAY_TYPE = 'pay_type', // 支付类型 } diff --git a/src/views/Home/Index.vue b/src/views/Home/Index.vue index b81920d..f6bbf3a 100644 --- a/src/views/Home/Index.vue +++ b/src/views/Home/Index.vue @@ -74,7 +74,7 @@ @@ -106,7 +106,7 @@ - +
当日建联主播数量
{{ HostsOperationNum }} @@ -121,7 +121,7 @@ @@ -136,7 +136,7 @@ - +
当日建联大哥数量
@@ -217,7 +217,7 @@ import { getSimpleUserListPage, getSimpleUserList } from '@/api/system/user' import { EmployeeHostsApi } from '@/api/server/employeehosts' import { ref, reactive, onMounted, onActivated } from 'vue' import WxMusic from '../mp/components/wx-music' - +import * as TenantApi from '@/api/system/tenant' let HostsOperationNum = ref(0)//当日建联主播数量 @@ -226,19 +226,28 @@ let HostsOperationNumDsec = ref(0)//当日建联大哥数量 let days = ref(1)//当日 let daysDsec = ref(1)//当日 - +let tenantLevel = ref()//租户等级 //初始 onMounted(async () => { + await TenantApi.getSelfTenantLevel().then(res => { + tenantLevel.value = res.tenantLevel + console.log(res.tenantLevel) + }) + if (tenantLevel.value == 1) { + loading.value = false + return + } + console.log(1321231) await getAllApi() await getAllocationList() - - if (wsCache.get('roleRouters').find(item => item.id === 1)?.children.find(item => item.id === 100)) { + //用户id == 1 且 + if (wsCache.get('roleRouters').find(item => item.id === 5019)?.children.find(item => item.id === 5020)) { await fetchAllHostsCount(1) await fetchAllHostsCountDesc(1) } else { - await fetchDailyHostsCount() + // await fetchDailyHostsCount() await fetchDailyHostsCountDesc() } @@ -246,13 +255,23 @@ onMounted(async () => { // 每次页面“再次显示”时都会触发(前提:该路由组件被 keep-alive 缓存) onActivated(async () => { - await fetchDailyHostsCount() + console.log(wsCache.get('user')) + console.log(tenantLevel.value) + await TenantApi.getSelfTenantLevel().then(res => { + tenantLevel.value = res.tenantLevel + console.log(res.tenantLevel) + }) + if (tenantLevel.value == 1) { + loading.value = false + return + } + await fetchDailyHostsCount() //爬主播建联率 - await fetchDailyHostsCountDesc() + await fetchDailyHostsCountDesc()//爬主播建联率 指定员工 - await fetchAllHostsCount(1) + await fetchAllHostsCount(1) //爬大哥建联率 - await fetchAllHostsCountDesc(1) + await fetchAllHostsCountDesc(1) //爬大哥建联率 指定员工 }) // 天数切换 @@ -644,7 +663,7 @@ const getAllApi = async () => { getProject(), getNotice(), getShortcut(), - getUserAccessSource(null), + wsCache.get('roleRouters').find(item => item.id === 5019)?.children.find(item => item.id === 5020) ? getUserAccessSource(null) : null, getWeeklyUserActivity() ]) @@ -719,7 +738,7 @@ async function fetchDailyHostsCountDesc() { // 如果柱状图依赖这个值,顺便刷新一次图表数据 } -// ✅ 抽成函数:每天所有员工数量(用于多人柱状图) +// ✅ 爬大哥建联率 async function fetchAllHostsCount(val) { // 以“传入的用户 id”为准展示(顺序也按这里来) const ids = allocationUserList.value.map(item => item.value) diff --git a/src/views/server/bigbrother/index.vue b/src/views/server/bigbrother/index.vue index e2c2d8f..b607c7e 100644 --- a/src/views/server/bigbrother/index.vue +++ b/src/views/server/bigbrother/index.vue @@ -125,6 +125,10 @@ {{ t('newHosts.allocation') }} + + 批量删除 + @@ -179,13 +183,17 @@ - +
+ + + - - - + + + +