diff --git a/src/api/admin.ts b/src/api/admin.ts index da65ad9..55eda00 100644 --- a/src/api/admin.ts +++ b/src/api/admin.ts @@ -18,7 +18,7 @@ export function apiOrganizationAllList() { } // 岗位列表 export function postLists(params?: any) { - return request.get({ url: '/system/post/list', data: params }) + return request.get({ url: '/system/post/list', data: params }, { ignoreCancel: true }) } // 数据简报 @@ -45,3 +45,12 @@ export function rankListApi(params?: any) { export function rankMoreListApi(params?: any) { return request.get({ url: '/control/topAll', data: params }) } + +// 具体某个成员的数据 +export function personalListApi(params?: any) { + return request.get({ url: '/personageControl/personageControlList', data: params }) +} +// 具体某个成员的详情 +export function personalDetailApi(params?: any) { + return request.get({ url: '/personageControl/detail', data: params }) +} diff --git a/src/bundle/pages/clue-list/components/clue-card.vue b/src/bundle/pages/clue-list/components/clue-card.vue index 922d7d1..0e2192b 100644 --- a/src/bundle/pages/clue-list/components/clue-card.vue +++ b/src/bundle/pages/clue-list/components/clue-card.vue @@ -11,18 +11,25 @@ + + 未领取 + @@ -70,6 +77,9 @@ export interface IClue { recruitTeacherId: number telemarketingTeacherId: number updateTime: string + followUpTime: string //跟进时间 + accomplishTime: string //成交时间 + getTime: string //领取时间 } const props = defineProps({ item: { @@ -77,12 +87,6 @@ const props = defineProps({ default: () => ({}) } }) -const ellipsisDesc = computed( - () => (item: IClue) => - item.basicInformation?.length >= 14 - ? item.basicInformation?.slice(0, 14) + '...' - : item.basicInformation -) const stateMap: Record = { [stateEnum.ADD_RELATION]: '账号已添加', [stateEnum.NO_EXIST]: '账号不存在', diff --git a/src/bundle/pages/clue-list/index.vue b/src/bundle/pages/clue-list/index.vue index e1c737d..c951646 100644 --- a/src/bundle/pages/clue-list/index.vue +++ b/src/bundle/pages/clue-list/index.vue @@ -47,64 +47,91 @@ import { ref, shallowRef } from 'vue' import clueCard from './components/clue-card.vue' import datePopup from './components/date-popup.vue' import { useZPaging } from '@/hooks/useZPaging' -import { apiTeleClueList } from '@/api/clue' import { computed } from 'vue' import { debounce } from 'lodash-es' import { nextTick } from 'vue' import { formatDate, formateDate, getCurDate } from '@/utils/util' +import { personalDetailApi } from '@/api/admin' +import { converStatusEnum } from '@/enums' const queryParams = ref({ - likeWork: '' + likeWork: '', + userId: '', + teachedType: null, + status: null, + startTime: '', + endTime: '' }) + const dataList = ref([]) -const { paging, queryList, refresh, changeApi, setParams } = useZPaging( - queryParams.value, - apiTeleClueList -) const activeTab = ref(0) const tabOptions: Record = { telesale: [ { name: '全部', value: 0 }, - { name: '未领取', value: 1 }, - { name: '已领取', value: 2 }, - { name: '异常待处理', value: 3 } + { name: '未领取', value: converStatusEnum.UN_RECEIVED }, + { name: '已领取', value: converStatusEnum.CONVERTED_PROCESS }, + { name: '异常待处理', value: converStatusEnum.EXCEPTION } ], recruitsale: [ - { name: '转化中', value: 0 }, - { name: '已添加', value: 1 }, - { name: '异常待处理', value: 2 }, - { name: '已成交', value: 3 }, - { name: '已战败', value: 4 } + { name: '转化中', value: converStatusEnum.CONVERTED_PROCESS }, + { name: '已添加', value: converStatusEnum.ADD_RELATION }, + { name: '异常待处理', value: converStatusEnum.EXCEPTION }, + { name: '已成交', value: converStatusEnum.CONVERTED }, + { name: '已战败', value: converStatusEnum.FAILED } ] } const tabs = computed(() => tabOptions[type.value]) const isScrollable = computed(() => tabs.value?.length >= 5) const handleChangeTab = item => { activeTab.value = item.value + queryParams.value.status = activeTab.value + queryList() } const searchChange = debounce(() => { - refresh(queryParams.value) + queryList() }, 300) const type = ref('') -const dateTagFlag = ref('') +const paging = ref() + +const queryList = async (pageNo = 1, pageSize = 10) => { + try { + uni.showLoading({ + title: '加载中...' + }) + const params = { + ...queryParams.value, + pageNo, + pageSize + } + const result = await personalDetailApi(params) + paging.value.complete(result.lists) + } catch (e) { + paging.value.complete(false) + } + uni.hideLoading() +} + +// const dateTagFlag = ref('') onLoad(async options => { setFormData(options) - dateTagFlag.value = options?.dateTag ?? '' - await nextTick() - datePopupRef.value?.setDefaultValue({ ...form.value, dateTag: dateTagFlag.value }) + // dateTagFlag.value = options?.dateTag ?? '' + // await nextTick() + // datePopupRef.value?.setDefaultValue({ ...form.value, dateTag: dateTagFlag.value }) + // datePopupRef.value?.setDefaultValue({ ...form.value }) // if (option.id) { - // uni.setNavigationBarTitle({ - // title: '张三' - // }) - type.value = options.type ?? '' + uni.setNavigationBarTitle({ + title: + options.postIds == 5 ? '电销老师:' + options.username : '招生老师:' + options.username + }) + type.value = options.postIds == 5 ? 'telesale' : 'recruitsale' // } }) const form = ref() // 设置表单数据 const setFormData = options => { - form.value = Object.keys(options).reduce((acc, key) => { - if (key == 'id' || key == 'dateTag' || key == 'type') { + queryParams.value = Object.keys(options).reduce((acc, key) => { + if (key == 'username') { return acc } acc[key] = decodeURIComponent(options[key]) @@ -118,16 +145,16 @@ const handleShowPopup = () => { } const handleConfirmDate = (date: { [key: string]: string }) => { const { start, end } = date - form.value.createTimeStart = formateDate(start, 'start', 'YYYY-MM-DD') - form.value.createTimeEnd = formateDate(end, 'end', 'YYYY-MM-DD') + queryParams.value.startTime = formateDate(start, 'start') + queryParams.value.endTime = formateDate(end, 'end') datePopupRef.value?.handleToggle(true) + queryList() } const handleResetDate = () => { - form.value.createTimeStart = getCurDate('start', 'YYYY-MM-DD') - form.value.createTimeEnd = getCurDate('end', 'YYYY-MM-DD') - console.log(form.value) - + queryParams.value.startTime = getCurDate('start') + queryParams.value.endTime = getCurDate('end') datePopupRef.value?.handleToggle(true) + queryList() } diff --git a/src/bundle/pages/login/login.vue b/src/bundle/pages/login/login.vue index 30c5acc..2a15f19 100644 --- a/src/bundle/pages/login/login.vue +++ b/src/bundle/pages/login/login.vue @@ -239,7 +239,7 @@ async function loginHandle(data: any) { cache.set(ROLEINDEX, 2) setNextRoute() } else { - if (userInfo.roles?.length > 1) { + if (userInfo.roles?.length >= 1) { uni.redirectTo({ url: '/bundle/pages/select-role/index' }) diff --git a/src/components/widgets/admin/filter-value.vue b/src/components/widgets/admin/filter-value.vue index 973fdec..a9dceea 100644 --- a/src/components/widgets/admin/filter-value.vue +++ b/src/components/widgets/admin/filter-value.vue @@ -11,11 +11,21 @@ {{ form.createTimeStart }} - {{ form.createTimeEnd }} + @@ -27,6 +37,7 @@ import { PropType } from 'vue' import { IForm } from './team/index.vue' import { computed } from 'vue' import { AdminTabEnum } from '@/enums' +import { usePositions } from '@/hooks/useCommon' const formMap: Record = { [AdminTabEnum.TEAM]: { @@ -36,7 +47,7 @@ const formMap: Record = { [AdminTabEnum.PERSONALLY]: { postId: '岗位', userId: '用户', - createTimeRange: '日期' + timeRange: '日期' } } const props = defineProps({ @@ -51,10 +62,18 @@ const props = defineProps({ organizationList: { type: Array as PropType, default: () => [] + }, + positionList: { + type: Array as PropType, + default: () => [] + }, + memberList: { + type: Array as PropType, + default: () => [] } }) const filteredForm = computed(() => { - const { createTimeStart, createTimeEnd, ...rest } = props.form + const { createTimeStart, createTimeEnd, startTime = '', endTime = '', ...rest } = props.form const activeTabMap = formMap[props.activeTab] const filtered = Object.keys(rest).reduce((acc, key) => { if (activeTabMap[key]) { @@ -66,6 +85,10 @@ const filteredForm = computed(() => { if (createTimeStart && createTimeEnd) { filtered['createTimeRange'] = 'createTimeRange' } + if (startTime && endTime) { + filtered['timeRange'] = 'timeRange' + } + console.log(filtered) return filtered }) @@ -98,5 +121,14 @@ const findTargetNode = computed(() => (id: number) => { } return nodeInfo?.name || '' }) +const findTargetPosition = computed(() => (id: number) => { + if (!id) return + return props.positionList.find(item => item.id == id).label ?? '' +}) +const findTargetMember = computed(() => (id: number) => { + if (!id) return + const nodeInfo = findNodeById(props.memberList, id) + if (nodeInfo && nodeInfo.id) return nodeInfo.username +}) diff --git a/src/components/widgets/admin/orga-picker.vue b/src/components/widgets/admin/orga-picker.vue index 8a315a5..c224252 100644 --- a/src/components/widgets/admin/orga-picker.vue +++ b/src/components/widgets/admin/orga-picker.vue @@ -198,7 +198,7 @@ export default defineComponent({ &-item { display: flex; - align-items: center; + // align-items: center; justify-content: space-between; padding: 24rpx; // font-size: 24rpx; diff --git a/src/components/widgets/admin/personally/components/dropdown-picker.vue b/src/components/widgets/admin/personally/components/dropdown-picker.vue index e1da958..ad2d02c 100644 --- a/src/components/widgets/admin/personally/components/dropdown-picker.vue +++ b/src/components/widgets/admin/personally/components/dropdown-picker.vue @@ -48,7 +48,7 @@ const props = defineProps({ default: () => ({}) } }) -const emit = defineEmits(['update:modelValue', 'refreshPage', 'confirm', 'reset']) +const emit = defineEmits(['update:modelValue', 'refreshPage', 'confirm', 'reset', 'getData']) const localValue = computed({ get() { @@ -81,8 +81,8 @@ const handleConfirm = (type: string, item, dateTag?: string) => { case 'date': localValue.value = { ...localValue.value, - createTimeStart: formateDate(item.start, 'start'), - createTimeEnd: formateDate(item.end, 'end') + startTime: formateDate(item.start, 'start'), + endTime: formateDate(item.end, 'end') } break case 'position': @@ -94,7 +94,6 @@ const handleConfirm = (type: string, item, dateTag?: string) => { default: break } - emit('refreshPage') emit('confirm', dateTag) closeDropDown() } @@ -110,21 +109,20 @@ const handleReset = (type: string) => { case 'date': localValue.value = { ...localValue.value, - createTimeStart: getCurDate('start'), - createTimeEnd: getCurDate('end') + startTime: getCurDate('start'), + endTime: getCurDate('end') } break case 'position': localValue.value = { ...localValue.value, - postId: 0 + postId: '' } break default: break } - emit('refreshPage') emit('reset') closeDropDown() } @@ -137,6 +135,7 @@ const fetchAllOrganizationList = async () => { try { const result = await apiOrganizationAllList() dropdownMenuOrgList.value = renameFields(result) + emit('getData', dropdownMenuOrgList.value) } catch (error) {} } const renameFields = (data: any[]): any[] => { diff --git a/src/components/widgets/admin/personally/components/telesale-card.vue b/src/components/widgets/admin/personally/components/telesale-card.vue index b50c3e5..2d88df3 100644 --- a/src/components/widgets/admin/personally/components/telesale-card.vue +++ b/src/components/widgets/admin/personally/components/telesale-card.vue @@ -5,11 +5,13 @@ - 张三 + {{ item.username }} - 张三 - 湛江团队-A组 . {{ parsePostionText }} + {{ item.username }} + + {{ item.organizationName }} . {{ parsePostionText }} + @@ -25,7 +27,7 @@ @@ -53,25 +55,37 @@ diff --git a/src/components/widgets/admin/personally/index.vue b/src/components/widgets/admin/personally/index.vue index 1acaafa..3c6d39f 100644 --- a/src/components/widgets/admin/personally/index.vue +++ b/src/components/widgets/admin/personally/index.vue @@ -1,77 +1,108 @@ diff --git a/src/components/widgets/admin/team/components/converted-overview.vue b/src/components/widgets/admin/team/components/converted-overview.vue index 7d8e2d7..188b03e 100644 --- a/src/components/widgets/admin/team/components/converted-overview.vue +++ b/src/components/widgets/admin/team/components/converted-overview.vue @@ -1,5 +1,5 @@