diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts index a140036..d1ffe1c 100644 --- a/src/api/system/user/index.ts +++ b/src/api/system/user/index.ts @@ -99,3 +99,18 @@ export const getSimpleUserList = (): Promise => { export const getSimpleUserListPage = (params: PageParam): Promise => { return request.get({ url: '/system/user/page', params }) } + + +// 获取国家 +export const getCountry = (country) => { + return request.get({ url: '/server/country-info/get?region='+ country }) +} +// 获取本人建联率 +export const getComplete = () => { + return request.get({ url: '/server/employee-hosts/self_complete'}) +} + +// 获取员工建联率 +export const getEmployeeComplete = (id) => { + return request.get({ url: '/server/employee-hosts/employeeComplete?userId='+id}) +} diff --git a/src/components/MobilePagination.vue b/src/components/MobilePagination.vue new file mode 100644 index 0000000..1db9ed6 --- /dev/null +++ b/src/components/MobilePagination.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/locales/en.ts b/src/locales/en.ts index 7c29482..2636e30 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -172,7 +172,7 @@ export default { transactionAmount: 'Transaction amount', totalShopping: 'Total Shopping', monthlySales: 'Monthly sales', - userAccessSource: 'User access source', + userAccessSource: 'Jianlian rate', january: 'January', february: 'February', march: 'March', @@ -194,6 +194,8 @@ export default { searchEngines: 'Search engines', weeklyUserActivity: 'Weekly user activity', activeQuantity: 'Active quantity', + alreadyJianlian:'Already alliance', + noAlliance:'No alliance', monday: 'Monday', tuesday: 'Tuesday', wednesday: 'Wednesday', @@ -476,7 +478,8 @@ export default { onlineFans: 'Online Viewers', fans: 'Followers', fllowernum: 'Following', - hostsCountry: 'Host Country', + hostsCountry: 'Host Area', + hostsCountryinfo: 'Host Country', placeHostsCountry: 'Please select host country', hostsKind: 'Host Type', placeHostsKind: 'Please enter live type, e.g., game', @@ -538,7 +541,10 @@ export default { delete: 'Delete', primaryKey: 'ID', action: 'Action', - remark: 'Remark' + remark: 'Remark', + loadNext:'Next', + previous:'上一页', + }, country: { greece: 'Greece Region', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 53c8d0a..bcea41a 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -179,7 +179,7 @@ export default { transactionAmount: '成交金额', totalShopping: '购物总量', monthlySales: '每月销售额', - userAccessSource: '用户访问来源', + userAccessSource: '建联率', january: '一月', february: '二月', march: '三月', @@ -201,6 +201,8 @@ export default { searchEngines: '搜索引擎', weeklyUserActivity: '每周用户活跃量', activeQuantity: '活跃量', + alreadyJianlian:'已建联', + noAlliance:'未建联', monday: '周一', tuesday: '周二', wednesday: '周三', @@ -476,7 +478,8 @@ export default { onlineFans: '在线人数', fans: '粉丝数量', fllowernum: '关注数量', - hostsCountry: '主播国家', + hostsCountry: '主播地区', + hostsCountryinfo: '主播国家', placeHostsCountry: '请选择主播国家', hostsKind: '主播类型', placeHostsKind: '请输入直播类型 如:游戏 ', @@ -538,7 +541,9 @@ export default { delete: '删除', primaryKey: '主键', action: '操作', - remark: '备注' + remark: '备注', + loadNext:'下一页', + previous:'上一页', }, country: { greece: '希腊大区', diff --git a/src/views/Home/Index.vue b/src/views/Home/Index.vue index 6d9ec88..cfc602e 100644 --- a/src/views/Home/Index.vue +++ b/src/views/Home/Index.vue @@ -71,7 +71,18 @@ - - --> + @@ -155,10 +166,20 @@ import { useUserStore } from '@/store/modules/user' import type { WorkplaceTotal, Project, Notice, Shortcut } from './types' import { pieOptions, barOptions } from './echarts-data' import { useRouter } from 'vue-router' +import { getComplete, getEmployeeComplete } from '@/api/system/user' +import { useCache } from '@/hooks/web/useCache' +import { getSimpleUserListPage, getSimpleUserList } from '@/api/system/user' // import { useGlobalWebSocket } from '@/components/useGlobalWebSocket' // let messageList = useGlobalWebSocket().messageList // console.log(messageList.value) - +const { wsCache } = useCache() +let allocationUser = ref('') //选中的分配用户 +let allocationUserList = ref([ + { + label: '分配用户1', + value: 1 + } +]) //选中的分配用户 // function test() { // console.log(messageList.value) @@ -324,13 +345,16 @@ const getShortcut = async () => { } // 用户来源 -const getUserAccessSource = async () => { +const getUserAccessSource = async (id) => { + const res = id ? await getEmployeeComplete(id) : await getComplete() + const completeData = res ?? { unfinishedNum: 0, finishedNum: 0 } + console.log('completeData', completeData) const data = [ - { value: 335, name: 'analysis.directAccess' }, - { value: 310, name: 'analysis.mailMarketing' }, - { value: 234, name: 'analysis.allianceAdvertising' }, - { value: 135, name: 'analysis.videoAdvertising' }, - { value: 1548, name: 'analysis.searchEngines' } + { value: completeData.unfinishedNum, name: 'analysis.noAlliance' }, + { value: completeData.finishedNum, name: 'analysis.alreadyJianlian' }, + // { value: 234, name: 'analysis.allianceAdvertising' }, + // { value: 135, name: 'analysis.videoAdvertising' }, + // { value: 1548, name: 'analysis.searchEngines' } ] set( pieOptionsData, @@ -377,7 +401,7 @@ const getAllApi = async () => { getProject(), getNotice(), getShortcut(), - getUserAccessSource(), + getUserAccessSource(null), getWeeklyUserActivity() ]) loading.value = false @@ -391,5 +415,30 @@ const handleShortcutClick = (url: string) => { router.push(url) } +/** 查询员工 */ +const getAllocationList = async () => { + loading.value = true + allocationUserList.value = [] + try { + const data = await getSimpleUserList() + console.log('data', data) + data.forEach((item) => { + if (wsCache.get('user').user.id == item.id) { + + } else { + allocationUserList.value.push({ + label: item.nickname, + value: item.id + }) + } + + + }) + console.log(allocationUserList.value) + } finally { + loading.value = false + } +} getAllApi() +getAllocationList() diff --git a/src/views/server/employeehosts/index.vue b/src/views/server/employeehosts/index.vue index 7460703..c11ac55 100644 --- a/src/views/server/employeehosts/index.vue +++ b/src/views/server/employeehosts/index.vue @@ -43,13 +43,20 @@ - - + + + + + + + @@ -155,7 +162,7 @@ -
+
{{ $t('employee.hostsId') }}:{{ $t('employee.operationStatus') }}:
-
{{ $t('employee.createTime') }}:{{ item.createTime }}
-
{{ $t('employee.updateTime') }}:{{ item.updateTime }}
+
{{ $t('employee.createTime') }}:{{ formatTimestamp(item.createTime) }}
+
{{ $t('employee.updateTime') }}:{{ formatTimestamp(item.updateTime) }}
{{ $t('employee.edit') }}
+ ([]) // 列表的数据 const total = ref(0) // 列表的总页数 const queryParams = reactive({ pageNo: 1, - pageSize: 10, + pageSize: 20, hostsId: undefined, hostsLevel: undefined, onlineFansMin: undefined, @@ -230,6 +240,7 @@ const queryParams = reactive({ invitationType: undefined, yesterdayCoins: undefined, country: undefined, + region: undefined, hostsKind: undefined, isAssigned: undefined, createTime: [], @@ -247,6 +258,7 @@ let allocationUserList = ref([ ]) //选中的分配用户 let selectHostList = ref([]) //选中的主播列表 let allocationUser = ref() //选中的分配用户 +let countryinfoList = ref([]) /** 查询列表pc直接赋值 */ const getList = async () => { loading.value = true @@ -361,13 +373,20 @@ function openHtml(item, id) { window.open(`https://www.tiktok.com/@${id}`) } - const loadList = () => { if (queryParams.pageNo < Math.ceil(total.value / queryParams.pageSize)) { queryParams.pageNo++ - getListPhone() + getList() } } + +const loadpreviousList = () => { + if (queryParams.pageNo > 1) { + queryParams.pageNo-- + getList() + } +} + function formSuccess(data, index) { if (isMobile.value) { console.log(data, index) @@ -378,6 +397,19 @@ function formSuccess(data, index) { } +function formatTimestamp(milliseconds) { + const date = new Date(milliseconds); // 直接使用毫秒级时间戳 + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; +} + + //分配按钮操作 const handleSelectionChange = (val) => { selectHostList.value = val @@ -475,7 +507,13 @@ onMounted(() => { }) +function changeCountry(region) { + console.log(region) + getCountry(region).then((res) => { + countryinfoList.value = res + }) +} // /** 初始化 **/ // onMounted(() => { // getList() diff --git a/src/views/server/manageemployeehosts/index.vue b/src/views/server/manageemployeehosts/index.vue index 5499e93..d35c817 100644 --- a/src/views/server/manageemployeehosts/index.vue +++ b/src/views/server/manageemployeehosts/index.vue @@ -43,13 +43,20 @@ - - + + + + + + + @@ -154,7 +161,7 @@ -
+
{{ $t('employee.hostsId') }}:
+ + ([]) // 列表的数据 const total = ref(0) // 列表的总页数 const queryParams = reactive({ pageNo: 1, - pageSize: 10, + pageSize: 20, hostsId: undefined, hostsLevel: undefined, onlineFansMin: undefined, @@ -244,6 +255,7 @@ const queryParams = reactive({ invitationType: undefined, yesterdayCoins: undefined, country: undefined, + region: undefined, hostsKind: undefined, isAssigned: undefined, createTime: [], @@ -262,6 +274,8 @@ let allocationUserList = ref([ ]) //选中的分配用户 let selectHostList = ref([]) //选中的主播列表 let allocationUser = ref() //选中的分配用户 +let countryinfoList = ref([]) + /** 查询列表pc直接赋值 */ const getList = async () => { loading.value = true @@ -380,7 +394,14 @@ function openHtml(item, id) { const loadList = () => { if (queryParams.pageNo < Math.ceil(total.value / queryParams.pageSize)) { queryParams.pageNo++ - getListPhone() + getList() + } +} + +const loadpreviousList = () => { + if (queryParams.pageNo > 1) { + queryParams.pageNo-- + getList() } } function formSuccess(data, index) { @@ -480,7 +501,13 @@ onMounted(() => { }) +function changeCountry(region) { + console.log(region) + getCountry(region).then((res) => { + countryinfoList.value = res + }) +} // /** 初始化 **/ // onMounted(() => { // getList() diff --git a/src/views/server/newhosts/index.vue b/src/views/server/newhosts/index.vue index addd24c..699b4a6 100644 --- a/src/views/server/newhosts/index.vue +++ b/src/views/server/newhosts/index.vue @@ -75,13 +75,20 @@ /> --> - - + + + + + + + @@ -230,10 +237,11 @@ import { getIntDictOptions, DICT_TYPE, getStrDictOptions } from '@/utils/dict' import { dateFormatter } from '@/utils/formatTime' import download from '@/utils/download' import { NewHostsApi, NewHostsVO } from '@/api/server/newhosts' -import { getAllocation, getSimpleUserList, getSimpleUserListPage } from '@/api/system/user' +import { getAllocation, getSimpleUserList, getSimpleUserListPage, getCountry } from '@/api/system/user' import NewHostsForm from './NewHostsForm.vue' import { useCache } from '@/hooks/web/useCache' import * as DeptApi from '@/api/system/dept' +import { ElMessageBox } from 'element-plus' import { func } from 'vue-types' const { wsCache } = useCache() @@ -262,11 +270,13 @@ const queryParams = reactive({ fllowernumMax: undefined, invitationType: undefined, yesterdayCoins: undefined, + region: undefined, country: undefined, hostsKind: undefined, isAssigned: undefined, createTime: new Date().toISOString().split('T')[0] + ' 00:00:00', userId: undefined, + deleteFlag: false //导出 是否删除 }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 @@ -286,7 +296,7 @@ let allocationdeptList = ref([ id: 1 } ]) //选中的分配部门 - +let countryinfoList = ref([]) /** 查询列表 */ const getList = async () => { loading.value = true @@ -407,13 +417,40 @@ const handleDeleteBatch = async () => { /** 导出按钮操作 */ const handleExport = async () => { try { - // 导出的二次确认 - await message.exportConfirm() + // 先确认是否删除导出的数据 + await ElMessageBox.confirm( + '导出后是否删除导出的数据?', + '删除确认', + { + distinguishCancelAndClose: true, + confirmButtonText: '删除并导出', + cancelButtonText: '仅导出', + type: 'warning', + } + ).then(async () => { + queryParams.deleteFlag = true + exportLoading.value = true + const data = await NewHostsApi.exportNewHosts(queryParams) + download.excel(data, '主播数据管理.xls') + }).catch(async (err) => { + if (err === 'cancel' || err?.action === 'cancel') { + exportLoading.value = true + const data = await NewHostsApi.exportNewHosts(queryParams) + download.excel(data, '主播数据管理.xls') + } + + }); + + // 原本的导出二次确认 + // await message.exportConfirm() + // 发起导出 - exportLoading.value = true - const data = await NewHostsApi.exportNewHosts(queryParams) - download.excel(data, '主播数据管理.xls') + + + // 这里可以根据需求执行删除逻辑 + // await NewHostsApi.deleteExportedData() } catch { + // 用户取消任意一个确认都会走这里 } finally { exportLoading.value = false } @@ -468,6 +505,14 @@ function handleCopy(text) { } } +function changeCountry(region) { + console.log(region) + getCountry(region).then((res) => { + countryinfoList.value = res + + }) +} + /** 初始化 **/ onMounted(() => { getList()