151 lines
4.0 KiB
Vue
151 lines
4.0 KiB
Vue
|
|
<template>
|
||
|
|
<view class="page-list">
|
||
|
|
<scroll-view
|
||
|
|
class="list-scroll"
|
||
|
|
scroll-y
|
||
|
|
refresher-enabled
|
||
|
|
:refresher-triggered="refreshing"
|
||
|
|
@refresherrefresh="handleRefresh"
|
||
|
|
>
|
||
|
|
<view class="list-wrap">
|
||
|
|
<view
|
||
|
|
v-for="(item, index) in listData"
|
||
|
|
:key="item.TaskCode || index"
|
||
|
|
class="card-item"
|
||
|
|
@click="handleItemClick(item)"
|
||
|
|
>
|
||
|
|
<view class="card-header">
|
||
|
|
<text class="card-code">{{ item.TaskCode || '--' }}</text>
|
||
|
|
<text class="card-tag status-1">焊口 {{ item.WeldJointCount ?? 0 }}</text>
|
||
|
|
</view>
|
||
|
|
<view class="card-body">
|
||
|
|
<view class="card-row">
|
||
|
|
<text class="row-label">任务日期</text>
|
||
|
|
<text class="row-value">{{ fmtDate(item.TaskDate) }}</text>
|
||
|
|
</view>
|
||
|
|
<view class="card-row">
|
||
|
|
<text class="row-label">单位工程</text>
|
||
|
|
<text class="row-value">{{ item.UnitWorkName || '--' }}</text>
|
||
|
|
</view>
|
||
|
|
<view class="card-row">
|
||
|
|
<text class="row-label">施工单位</text>
|
||
|
|
<text class="row-value">{{ item.UnitName || '--' }}</text>
|
||
|
|
</view>
|
||
|
|
<view class="card-row">
|
||
|
|
<text class="row-label">班组</text>
|
||
|
|
<text class="row-value">{{ item.TeamGroupName || '--' }}</text>
|
||
|
|
</view>
|
||
|
|
<view class="card-row">
|
||
|
|
<text class="row-label">流水号</text>
|
||
|
|
<text class="row-value">{{ item.SerialNumber || '--' }}</text>
|
||
|
|
</view>
|
||
|
|
</view>
|
||
|
|
</view>
|
||
|
|
|
||
|
|
<u-empty
|
||
|
|
v-if="!loading && listData.length === 0"
|
||
|
|
mode="list"
|
||
|
|
text="暂无焊接任务单"
|
||
|
|
/>
|
||
|
|
</view>
|
||
|
|
</scroll-view>
|
||
|
|
</view>
|
||
|
|
</template>
|
||
|
|
|
||
|
|
<script setup>
|
||
|
|
/**
|
||
|
|
* 焊接任务单列表:自动带入登录人 teamGroupId / unitWorkId + 当前项目查询
|
||
|
|
*/
|
||
|
|
import { ref } from 'vue'
|
||
|
|
import { onShow } from '@dcloudio/uni-app'
|
||
|
|
import { storeToRefs } from 'pinia'
|
||
|
|
import { useUserStore } from '@/store'
|
||
|
|
import { reqWeldTaskListByTeamGroup } from '@/api/hj.js'
|
||
|
|
|
||
|
|
const userStore = useUserStore()
|
||
|
|
const { currentProject, userInfo } = storeToRefs(userStore)
|
||
|
|
|
||
|
|
const listData = ref([])
|
||
|
|
const loading = ref(false)
|
||
|
|
const refreshing = ref(false)
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 登录人班组 ID
|
||
|
|
* @param {object|null} user
|
||
|
|
*/
|
||
|
|
const resolveTeamGroupId = (user) => {
|
||
|
|
if (!user) return ''
|
||
|
|
return user.teamGroupId || user.TeamGroupId || ''
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 登录人单位工程 ID
|
||
|
|
* @param {object|null} user
|
||
|
|
*/
|
||
|
|
const resolveUnitWorkId = (user) => {
|
||
|
|
if (!user) return ''
|
||
|
|
return user.unitWorkId || user.UnitWorkId || ''
|
||
|
|
}
|
||
|
|
|
||
|
|
const fmtDate = (val) => {
|
||
|
|
if (!val) return '--'
|
||
|
|
const d = new Date(val)
|
||
|
|
if (isNaN(d.getTime())) return String(val).slice(0, 10)
|
||
|
|
const y = d.getFullYear()
|
||
|
|
const m = String(d.getMonth() + 1).padStart(2, '0')
|
||
|
|
const day = String(d.getDate()).padStart(2, '0')
|
||
|
|
return `${y}-${m}-${day}`
|
||
|
|
}
|
||
|
|
|
||
|
|
const fetchList = async () => {
|
||
|
|
const projectId = currentProject.value?.ProjectId
|
||
|
|
if (!projectId) {
|
||
|
|
uni.showToast({ title: '请先选择项目', icon: 'none' })
|
||
|
|
listData.value = []
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if (loading.value) return
|
||
|
|
loading.value = true
|
||
|
|
|
||
|
|
try {
|
||
|
|
const res = await reqWeldTaskListByTeamGroup({
|
||
|
|
projectId,
|
||
|
|
teamGroupId: resolveTeamGroupId(userInfo.value) || undefined,
|
||
|
|
unitWorkId: resolveUnitWorkId(userInfo.value) || undefined,
|
||
|
|
})
|
||
|
|
const data = res?.data
|
||
|
|
listData.value = Array.isArray(data) ? data : []
|
||
|
|
} catch (e) {
|
||
|
|
console.error('任务单列表加载失败:', e)
|
||
|
|
listData.value = []
|
||
|
|
} finally {
|
||
|
|
loading.value = false
|
||
|
|
refreshing.value = false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const handleRefresh = () => {
|
||
|
|
refreshing.value = true
|
||
|
|
fetchList()
|
||
|
|
}
|
||
|
|
|
||
|
|
const handleItemClick = (item) => {
|
||
|
|
const projectId = item.ProjectId || currentProject.value?.ProjectId || ''
|
||
|
|
const taskCode = item.TaskCode || ''
|
||
|
|
const unitWorkId = item.UnitWorkId || item.unitWorkId || resolveUnitWorkId(userInfo.value) || ''
|
||
|
|
if (!projectId || !taskCode) {
|
||
|
|
uni.showToast({ title: '任务单信息不完整', icon: 'none' })
|
||
|
|
return
|
||
|
|
}
|
||
|
|
let url = `/scanpages/hj/weld_task_detail?projectId=${encodeURIComponent(projectId)}&taskCode=${encodeURIComponent(taskCode)}`
|
||
|
|
if (unitWorkId) {
|
||
|
|
url += `&unitWorkId=${encodeURIComponent(unitWorkId)}`
|
||
|
|
}
|
||
|
|
uni.navigateTo({ url })
|
||
|
|
}
|
||
|
|
|
||
|
|
onShow(() => {
|
||
|
|
fetchList()
|
||
|
|
})
|
||
|
|
</script>
|