张含笑
2025-10-15 d73e13e5bfbec03f0b4a09f7b07735722e1d45df
Merge branch 'refs/heads/事件工单'
1 files modified
179 ■■■■■ changed files
src/pages/work/index.vue 179 ●●●●● patch | view | raw | blame | history
src/pages/work/index.vue
@@ -30,189 +30,12 @@
<script setup>
    import {getWebViewUrl} from "@/utils/index.js";
import { useUserStore } from '@/store/index.js'
import {getList,getstatusCount} from '/src/api/work/index.js'
    import dayjs from 'dayjs';
    const userStore = useUserStore()
    const userInfo = userStore.userInfo
const sWebViewRef = ref(null);
const viewUrl = getWebViewUrl('/work', {})
// const viewUrl = `http://192.168.1.157:5173/drone-app-web-view/#/webViewWrapper/work?params=${JSON.stringify(userStore?.userInfo)}`;
    const dataList = ref([])
    const keyword = ref('')
    const currentTab=ref('myTickets')
    const tabList = ref([{
            name: '我的工单',
            key: 'myTickets',
            badge: {
                value: 1
            }
        },
        {
            name: '全部状态',
            key: 'all',
            badge: {
                value: 2
            },
            status: null
        },
        {
            name: '待审核',
            key: 'pending',
            badge: {
                value: 3
            },
            status: '2'
        },
        {
            name: '待处理',
            key: 'processing',
            badge: {
                value: 4
            },
            status: '0'
        },
        {
            name: '处理中',
            key: 'inProgress',
            badge: {
                value: 5
            },
            status: '3'
        },
        {
            name: '已完成',
            key: 'completed',
            badge: {
                value: 6
            },
            status: '4'
        }
    ])
    const formatDate = (dateString) => {
        return dayjs(dateString).format('MM/DD HH:mm');
    };
    const listParams = ref({
        status: null,
        current: 1,
        size: 9999,
        source: 1,
        department:'',
        keyword:''
    })
    const getDataList = () => {
        const params = {
            current: 1,
            size: 9999,
            source: 1,
            status:listParams.value.status,
            event_name:listParams.value.keyword,
            user_id:currentTab.value=== 'myTickets' ?userInfo.user_id : undefined
        }
        getList(params).then(res => {
            const response = res.data.data.records
            dataList.value = response
        })
    }
        const getstatusCountData=()=>{
            getstatusCount().then(res=>{
                const response = res.data.data
                 const { statusCount, totalCount, userCount } = response
                tabList.value.forEach(tab=>{
                    if(tab.key === 'all'){
                        tab.badge.value = totalCount || 0
                    }else if(tab.key === 'myTickets'){
                        tab.badge.value = userCount || 0
                    }else{
                        tab.badge.value=statusCount[String(tab.status)] || 0
                    }
                })
            })
        }
    const handleClick = (item) => {
        currentTab.value = item.key
    listParams.value.status = item.status
        getDataList()
    }
    const detailHandle = (val) => {
        uni.navigateTo({
            url: `/subPackages/workDetail/index?eventNum=${val.event_num}`,
        })
    }
    onShow(() => {
        getDataList()
        getstatusCountData()
    })
</script>
<style scoped lang="scss">
    .eventTickets {
        padding: 0 10px;
        .searchTop {
            display: flex;
            align-items: center;
            margin-top: 10px;
        }
        :deep(.u-badge) {
            background-color: #1d6fe9 !important;
        }
        .eventBox {
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
            padding: 10px 0;
            background-color: #ebeff2;
            .eventItem {
                width: calc(50% - 5px);
                background-color: #fff;
                border-radius: 5px;
                overflow: hidden;
                img {
                    width: 100%;
                    height: 100px;
                    border-radius: 5px;
                    overflow: hidden;
                }
                .itemTitle {
                    padding: 0 5px;
                     white-space: nowrap;
                    overflow: hidden;
                    text-overflow: ellipsis;
                }
                .itemContent {
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    padding: 5px;
                    .itemStatus {
                        display: flex;
                        align-items: center;
                        span {
                            display: inline-block;
                            width: 10px;
                            height: 10px;
                            border-radius: 50%;
                            margin-right: 5px;
                        }
                    }
                }
            }
        }
    }
</style>