Commit 139fd963 by pangchong

feat: 待办接口对接

parent 37efb866
import { http } from 'mocp/utils/http'
//布置工作
export const getArrangeWorkListForAppApi = (data, config) => {
return http({
method: 'POST',
url: '/technical-support/getArrangeWorkListForApp',
data,
config
})
}
//考核记录
export const getRqmListForMobileApi = (data, config) => {
return http({
method: 'POST',
url: '/RepairControl/getRqmListForMobile',
data,
config
})
}
//运行决策
export const getDecisiongetDecisionToDoApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/getDecisiongetDecisionToDo',
data,
config
})
}
//技术评估
export const getTechnicalEvaluationToDoApi = (data, config) => {
return http({
method: 'POST',
url: '/workbench/getTechnicalEvaluationToDo',
data,
config
})
}
......@@ -79,7 +79,7 @@ import { filterEmptyValues } from 'mocp/utils/tool'
import { computed, nextTick, onUnmounted, ref, watch } from 'vue'
const dataList = ref([])
const es = defineEmits(['query', 'handleLeftClick', 'handleRightClick', 'handleFooterClick', 'handleChooseData'])
const es = defineEmits(['handleQuery', 'handleLeftClick', 'handleRightClick', 'handleFooterClick', 'handleChooseData'])
const paging = ref()
const ps = defineProps({
background: {
......@@ -326,6 +326,7 @@ const queryList = (pageIndex, pageSize) => {
} else {
paging.value?.complete(data)
}
es('handleQuery', { pageIndex, pageSize, res })
} else {
paging.value?.complete(false)
uni.$mocpMessage.error(res.message)
......@@ -341,8 +342,8 @@ const queryList = (pageIndex, pageSize) => {
if (ps.localData) {
paging.value?.complete(ps.localData || [])
}
es('handleQuery', { pageIndex, pageSize })
}
es('query', { pageIndex, pageSize })
}
//点击左边插槽
const handleLeftClick = () => {
......
import { defineStore } from 'pinia'
import useUserStore from 'mocp/store/user'
import { getArrangeWorkListForAppApi, getDecisiongetDecisionToDoApi, getRqmListForMobileApi, getTechnicalEvaluationToDoApi } from 'mocp/api/my-toDo'
const useMyToDoStore = defineStore('myToDo', {
state: () => {
return {
assignWorkNum: 0, //布置工作
appraisalRecordNum: 0, //考核记录
moveDecisionNum: 0, //运行决策
technologyEvaluationNum: 0 //技术评估
}
},
getters: {
getTotal(state) {
const total = state.assignWorkNum + state.appraisalRecordNum + state.moveDecisionNum + state.technologyEvaluationNum
if (total > 0) {
if (total > 99) {
return '99+'
} else {
return total
}
} else {
return '-'
}
},
getAssignWorkNum(state) {
if (state.assignWorkNum > 0) {
if (state.assignWorkNum > 99) {
return '99+'
} else {
return state.assignWorkNum
}
} else {
return '暂无待办'
}
},
getAppraisalRecordNum(state) {
if (state.appraisalRecordNum > 0) {
if (state.appraisalRecordNum > 99) {
return '99+'
} else {
return state.appraisalRecordNum
}
} else {
return '暂无待办'
}
},
getMoveDecisionNum(state) {
if (state.moveDecisionNum > 0) {
if (state.moveDecisionNum > 99) {
return '99+'
} else {
return state.moveDecisionNum
}
} else {
return '暂无待办'
}
},
getTechnologyEvaluationNum(state) {
if (state.technologyEvaluationNum > 0) {
if (state.technologyEvaluationNum > 99) {
return '99+'
} else {
return state.technologyEvaluationNum
}
} else {
return '暂无待办'
}
}
},
actions: {
async getArrangeWorkListForApp() {
const userStore = useUserStore()
const res = await getArrangeWorkListForAppApi({ pageIndex: 1, pageSize: 10, userId: userStore.userInfo?.id })
if (res.code == 200) {
this.assignWorkNum = res.total || 0
}
},
async getRqmListForMobile() {
const userStore = useUserStore()
const res = await getRqmListForMobileApi({ pageIndex: 1, pageSize: 10, userId: userStore.userInfo?.id })
if (res.code == 200) {
this.appraisalRecordNum = res.total || 0
}
},
async getDecisiongetDecisionToDo() {
const res = await getDecisiongetDecisionToDoApi({ pageIndex: 1, pageSize: 10 })
if (res.code == 200) {
this.moveDecisionNum = res.total || 0
}
},
async getTechnicalEvaluationToDo() {
const res = await getTechnicalEvaluationToDoApi({ pageIndex: 1, pageSize: 10 })
if (res.code == 200) {
this.technologyEvaluationNum = res.total || 0
}
},
initData() {
this.getArrangeWorkListForApp()
this.getRqmListForMobile()
this.getDecisiongetDecisionToDo()
this.getTechnicalEvaluationToDo()
},
setState(...args) {
this.$patch({ [args[0]]: args[1] })
}
},
// 配置持久化
persist: false
})
export default useMyToDoStore
import { defineStore } from 'pinia'
import { ref } from 'vue'
//默认default最多显示15个
const menuList = ref([
{id: 15, name: '我的跟机', icon: 'khjl', group: '运行品质', count: 0, url: '/panel/supported-task/list'},
{id: 1, name: '信息通报', icon: 'xxtb', group: '技术支援', count: 12, url: '/panel/inforDisclosure/search'},
{id: 2, name: '机队状态', icon: 'jdzt', group: '技术支援', count: 0, url: '/panel/fleet/search'},
{id: 3, name: '支援申请', icon: 'zysq', group: '技术支援', count: 0, url: '/panel/support-application/search'},
{id: 4, name: '工作指令', icon: 'gzzl', group: '技术支援', count: 0, url: '/panel/work-assignment/search'},
{id: 5, name: '技术评估', icon: 'jspg', group: '技术支援', count: 0, url: '/panel/technology-evaluation/list'},
{id: 6, name: '运行调查', icon: 'yxdc', group: '维修控制', count: 0},
{id: 7, name: '运行决策', icon: 'yxjc', group: '维修控制', count: 0, url: '/panel/move-decision/list'},
{id: 8, name: '布置工作', icon: 'bzgz', group: '维修控制', count: 0, url: '/panel/assign-work/search'},
{id: 9, name: '航站管理', icon: 'hzgl', group: '航站管理', count: 0},
{id: 10, name: '协议单位', icon: 'xydw', group: '航站管理', count: 0},
{id: 11, name: '不正常事件', icon: 'bzcsj', group: '运行品质', count: 0},
{id: 12, name: '考核记录', icon: 'khjl', group: '运行品质', count: 0, url: '/panel/appraisal-record/list'},
{id: 13, name: 'AOG任务', icon: 'AOG', group: '运行品质', count: 0, url: '/panel/aog/search'},
{id: 14, name: 'MCO', icon: 'MCO', group: '运行品质', count: 0, url: '/panel/mco/search'},
{id: 15, name: '航班保障', icon: 'hbbz', group: '运行品质', count: 0, url: '/panel/flight-support/list'}
{ id: 1, name: '信息通报', icon: 'xxtb', group: '技术支援', default: true, count: 0, url: '/panel/inforDisclosure/search' },
{ id: 2, name: '机队状态', icon: 'jdzt', group: '技术支援', default: true, count: 0, url: '/panel/fleet/search' },
{ id: 3, name: '支援申请', icon: 'zysq', group: '技术支援', default: true, count: 0, url: '/panel/support-application/search' },
{ id: 4, name: '工作指令', icon: 'gzzl', group: '技术支援', default: true, count: 0, url: '/panel/work-assignment/search' },
{ id: 5, name: '技术评估', icon: 'jspg', group: '技术支援', default: true, count: 0, url: '/panel/technology-evaluation/list' },
{ id: 6, name: '运行调查', icon: 'yxdc', group: '维修控制', default: true, count: 0 },
{ id: 7, name: '运行决策', icon: 'yxjc', group: '维修控制', default: true, count: 0, url: '/panel/move-decision/list' },
{ id: 8, name: '布置工作', icon: 'bzgz', group: '维修控制', default: true, count: 0, url: '/panel/assign-work/search' },
{ id: 9, name: '航站管理', icon: 'hzgl', group: '航站管理', default: true, count: 0 },
{ id: 10, name: '协议单位', icon: 'xydw', group: '航站管理', default: true, count: 0 },
{ id: 11, name: '不正常事件', icon: 'bzcsj', group: '运行品质', default: true, count: 0 },
{ id: 12, name: '考核记录', icon: 'khjl', group: '运行品质', default: true, count: 0, url: '/panel/appraisal-record/list' },
{ id: 13, name: 'AOG任务', icon: 'AOG', group: '运行品质', default: true, count: 0, url: '/panel/aog/search' },
{ id: 14, name: 'MCO', icon: 'MCO', group: '运行品质', default: true, count: 0, url: '/panel/mco/search' },
{ id: 15, name: '航班保障', icon: 'hbbz', group: '运行品质', default: true, count: 0, url: '/panel/flight-support/list' },
{ id: 16, name: '我的跟机', icon: 'khjl', group: '运行品质', default: false, count: 0, url: '/panel/supported-task/list' }
])
const useUserStore = defineStore('user', {
state: () => {
return {
token: '',
userInfo: undefined, //用户信息
allMenuItem: {id: 999, name: '全部菜单', icon: 'all', group: '', count: 0},
allMenuItem: { id: 999, name: '全部菜单', icon: 'all', group: '', count: 0 },
allHomeMenuList: [] //所有登录用户的首页菜单信息
}
},
getters: {
//获取全部菜单
getMenuList () {
getMenuList() {
return menuList.value
},
//获取分组菜单
getGroupMenuList (state) {
getGroupMenuList(state) {
return state.getMenuList.reduce((groups, item) => {
// 如果该组不存在,则创建一个新组
if (!groups[item.group]) {
......@@ -46,7 +47,7 @@ const useUserStore = defineStore('user', {
}, {})
},
//获取当前登录用户的首页菜单
getHomeMenuList (state) {
getHomeMenuList(state) {
const homeMenuList = state.allHomeMenuList.find((item) => item.userId == state.userInfo?.id)?.homeMenuList
const ids = []
homeMenuList.forEach((item) => {
......@@ -57,7 +58,7 @@ const useUserStore = defineStore('user', {
},
actions: {
//用户登录
setUserInfo (data) {
setUserInfo(data) {
this.token = data.token
this.userInfo = data
//加入用户首页菜单信息
......@@ -65,23 +66,25 @@ const useUserStore = defineStore('user', {
//记录菜单id
this.allHomeMenuList.push({
userId: this.userInfo.id,
homeMenuList: this.getMenuList.map((item) => {
return {id: item.id}
})
homeMenuList: this.getMenuList
.filter((item) => item.default)
.map((item) => {
return { id: item.id }
})
})
}
//跳转工作台
uni.$mocpJump.redirectTo('/tab/index')
},
//退出登录
handleLogOut () {
handleLogOut() {
this.token = ''
this.userInfo = undefined
//返回登录页面
uni.$mocpJump.redirectTo('/login/index')
},
//修改用户首页菜单
changeHomeMenuList (menuList) {
changeHomeMenuList(menuList) {
const index = this.allHomeMenuList.findIndex((item) => item.userId == this.userInfo.id)
this.allHomeMenuList[index].homeMenuList = menuList
}
......@@ -90,10 +93,10 @@ const useUserStore = defineStore('user', {
persist: {
// 调整为兼容多端的API
storage: {
setItem (key, value) {
setItem(key, value) {
uni.setStorageSync(key, value)
},
getItem (key) {
getItem(key) {
return uni.getStorageSync(key)
}
}
......
......@@ -68,10 +68,18 @@ const handleLeftClick = () => {
}
//保存
const handleRightClick = () => {
isEdit.value = false
navLeftType.value = 'icon'
userStore.changeHomeMenuList(cloneDeep(homeMenuList.value))
uni.$mocpMessage.success('保存菜单成功')
if (homeMenuList.value.length > 0) {
if (homeMenuList.value.length > 15) {
uni.$mocpMessage.warning('最多设置15个首页菜单')
} else {
isEdit.value = false
userStore.changeHomeMenuList(cloneDeep(homeMenuList.value))
uni.$mocpMessage.success('保存菜单成功')
}
} else {
uni.$mocpMessage.warning('请设置首页菜单')
}
}
//编辑
const handleChange = () => {
......
......@@ -20,7 +20,7 @@
<image class="list-item-image" src="/static/mocp/image/panel/wddb.png" />
<view class="list-item-msg">
<view class="list-item-title">我的待办</view>
<view class="list-item-txt">24</view>
<view class="list-item-txt">{{ getTotal }}</view>
</view>
</view>
<view class="list-item-line"></view>
......@@ -28,7 +28,7 @@
<image class="list-item-image" src="/static/mocp/image/panel/wdxx.png" />
<view class="list-item-msg">
<view class="list-item-title">我的消息</view>
<view class="list-item-txt">24</view>
<view class="list-item-txt">-</view>
</view>
</view>
</view>
......@@ -36,9 +36,11 @@
</template>
<script setup>
import { ref } from 'vue'
import { onMounted, ref } from 'vue'
import useUserStore from 'mocp/store/user'
import useBaseStore from 'mocp/store/base'
import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia'
const userStore = useUserStore()
const baseStore = useBaseStore()
......@@ -47,6 +49,12 @@ const weatherInfo = ref()
uni.$on('sendWeatherInfo', (info) => {
weatherInfo.value = info
})
//我的待办
const myToDoStore = useMyToDoStore()
onMounted(() => {
myToDoStore.initData()
})
const { getTotal } = storeToRefs(myToDoStore)
//跳转我的待办
const goMyToDo = () => {
uni.$mocpJump.navigateTo('/panel/my-toDo/index')
......
<template>
<up-collapse-item title="考核记录(2)">
<up-collapse-item :title="`考核记录(${getAppraisalRecordNum})`">
<global-page
:fixed="false"
:height="height"
......@@ -8,7 +8,11 @@
isDataList
refresherEnabled
loadingMoreEnabled
:api="getRqmListApi"
:params="{
userId: userStore.userInfo?.id
}"
:api="getRqmListForMobileApi"
@handleQuery="handleQuery"
auto
>
<template #default="{ item }">
......@@ -31,8 +35,14 @@
</template>
<script setup>
import { getRqmListApi } from 'mocp/api/appraisal-record'
import { getRqmListForMobileApi } from 'mocp/api/my-toDo'
import useUserStore from 'mocp/store/user'
import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia'
const userStore = useUserStore()
const myToDoStore = useMyToDoStore()
const { getAppraisalRecordNum } = storeToRefs(myToDoStore)
const ps = defineProps({
height: {
type: String,
......@@ -45,5 +55,8 @@ const goDetails = (data) => {
id: data.id
})
}
const handleQuery = ({ res }) => {
myToDoStore.setState('appraisalRecordNum', res.total || 0)
}
</script>
<style lang="scss" scoped></style>
<template>
<up-collapse-item title="布置工作(2)">
<up-collapse-item :title="`布置工作(${getAssignWorkNum})`">
<global-page
:fixed="false"
:height="height"
......@@ -8,7 +8,11 @@
isDataList
refresherEnabled
loadingMoreEnabled
:api="getArrangeWorkListApi"
:params="{
userId: userStore.userInfo?.id
}"
:api="getArrangeWorkListForAppApi"
@handleQuery="handleQuery"
auto
>
<template #default="{ item }">
......@@ -45,18 +49,26 @@
<script setup>
import { timeStampFormat } from 'mocp/utils/tool'
import { getArrangeWorkListApi } from 'mocp/api/assign-work'
import { getParamNameByValue } from 'mocp/hooks/use-params/useParams'
import { getArrangeWorkListForAppApi } from 'mocp/api/my-toDo'
import useUserStore from 'mocp/store/user'
import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia'
const userStore = useUserStore()
const myToDoStore = useMyToDoStore()
const { getAssignWorkNum } = storeToRefs(myToDoStore)
const ps = defineProps({
height: {
type: String,
default: ''
}
})
const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/assign-work/details', { id: data.id })
}
const handleQuery = ({ res }) => {
myToDoStore.setState('assignWorkNum', res.total || 0)
}
</script>
<style lang="scss" scoped></style>
<template>
<up-collapse-item title="运行决策(2)">
<up-collapse-item :title="`运行决策(${getMoveDecisionNum})`">
<global-page
:fixed="false"
:height="height"
......@@ -8,7 +8,8 @@
isDataList
refresherEnabled
loadingMoreEnabled
:api="getDecisionApi"
:api="getDecisiongetDecisionToDoApi"
@handleQuery="handleQuery"
auto
>
<template #default="{ item }">
......@@ -42,20 +43,28 @@
<script setup>
import { timeStampFormat } from 'mocp/utils/tool'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import { getDecisionApi } from 'mocp/api/move-decision'
import useMoveDecisionStore from 'mocp/store/move-decision'
import { getDecisiongetDecisionToDoApi } from 'mocp/api/my-toDo'
import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia'
const myToDoStore = useMyToDoStore()
const { getMoveDecisionNum } = storeToRefs(myToDoStore)
const ps = defineProps({
height: {
type: String,
default: ''
}
})
//跳转
const moveDecisionStore = useMoveDecisionStore()
const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/move-decision/details', { id: data.id }).then(() => {
moveDecisionStore.setState('details', data)
})
}
const handleQuery = ({ res }) => {
myToDoStore.setState('moveDecisionNum', res.total || 0)
}
</script>
<style lang="scss" scoped></style>
<template>
<up-collapse-item title="技术评估(2)">
<up-collapse-item :title="`技术评估(${getTechnologyEvaluationNum})`">
<global-page
:fixed="false"
:height="height"
......@@ -8,7 +8,8 @@
isDataList
refresherEnabled
loadingMoreEnabled
:api="getTechnicalEvaluationApi"
:api="getTechnicalEvaluationToDoApi"
@handleQuery="handleQuery"
auto
>
<template #default="{ item }">
......@@ -46,8 +47,13 @@
import useBaseStore from 'mocp/store/base'
import { useGetDictByValue } from 'mocp/hooks/use-dict/useDict'
import Day from 'mocp/utils/dayjs'
import { getTechnicalEvaluationApi } from 'mocp/api/technology-evaluation'
import useTechnologyEvaluationStore from 'mocp/store/technology-evaluation'
import { getTechnicalEvaluationToDoApi } from 'mocp/api/my-toDo'
import useMyToDoStore from 'mocp/store/my-toDo'
import { storeToRefs } from 'pinia'
const myToDoStore = useMyToDoStore()
const { getTechnologyEvaluationNum } = storeToRefs(myToDoStore)
const baseStore = useBaseStore()
const ps = defineProps({
......@@ -56,11 +62,15 @@ const ps = defineProps({
default: ''
}
})
//跳转
const technologyEvaluationStore = useTechnologyEvaluationStore()
const goDetails = (data) => {
uni.$mocpJump.navigateTo('/panel/technology-evaluation/details', { id: data.id }).then(() => {
technologyEvaluationStore.setState('details', data)
})
}
const handleQuery = ({ res }) => {
myToDoStore.setState('technologyEvaluationNum', res.total || 0)
}
</script>
<style lang="scss" scoped></style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment