吉安感知网项目-前端
shuishen
2026-01-30 d3bee20db417da51a33a420bf5436bd67e599543
Merge branch 'master' of http://139.196.74.78:10010/r/jagzwxm/ja_web
1 files modified
133 ■■■■ changed files
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue 133 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue
@@ -28,30 +28,40 @@
            </div>
            <!-- 工单信息展示 -->
            <div class="work-order-info" v-if="selectedWorkOrder">
            <div class="work-order-info">
                <el-row class="detail-row-view">
                    <el-col :span="12">
                        <div class="info-item">
                            <span class="label">工单类型</span>
                            <span class="val">{{ getDictLabel(selectedWorkOrder.workOrderType, dictObj.workOrderType) }}</span>
                            <span class="val" v-if="selectedWorkOrder">
                                {{ getDictLabel(selectedWorkOrder.workOrderType, dictObj.workOrderType) }}
                            </span>
                            <span class="val grayText" v-else>选择工单后自动带出</span>
                        </div>
                    </el-col>
                    <el-col :span="12">
                        <div class="info-item">
                            <span class="label">执行时间范围</span>
                            <span class="val">{{ selectedWorkOrder.executeStartTime }} ~ {{ selectedWorkOrder.executeEndTime }}</span>
                            <span class="val" v-if="selectedWorkOrder">
                                {{ selectedWorkOrder.executeStartTime }} ~ {{ selectedWorkOrder.executeEndTime }}
                            </span>
                            <span class="val grayText" v-else>选择工单后自动带出</span>
                        </div>
                    </el-col>
                    <el-col :span="12">
                        <div class="info-item">
                            <span class="label">设备需求</span>
                            <span class="val">{{ getDictLabel(selectedWorkOrder.deviceLoadDemand, dictObj.deviceLoadDemand) }}</span>
                            <span class="val" v-if="selectedWorkOrder">
                                {{ getDictLabel(selectedWorkOrder.deviceLoadDemand, dictObj.deviceLoadDemand) }}
                            </span>
                            <span class="val grayText" v-else>选择工单后自动带出</span>
                        </div>
                    </el-col>
                    <el-col :span="12">
                        <div class="info-item">
                            <span class="label">工单备注</span>
                            <span class="val">{{ selectedWorkOrder.remark }}</span>
                            <span class="val" v-if="selectedWorkOrder">{{ selectedWorkOrder.remark }}</span>
                            <span class="val grayText" v-else>选择工单后自动带出</span>
                        </div>
                    </el-col>
                </el-row>
@@ -65,7 +75,11 @@
                        <el-table-column width="50" label="">
                            <template v-slot="{ $index }">{{ $index + 1 }}</template>
                        </el-table-column>
                        <el-table-column prop="patrolTaskName" label="巡查任务名称" min-width="120">
                        <el-table-column prop="patrolTaskName" min-width="120">
                            <template #header>
                                <span class="required-star">*</span>
                                巡查任务名称
                            </template>
                            <template v-slot="{ row }">
                                <el-input
                                    class="gd-input"
@@ -75,15 +89,18 @@
                                />
                            </template>
                        </el-table-column>
                        <el-table-column prop="patrolTaskType" label="巡查任务类型" min-width="140">
                            <template v-slot="{ row, $index }">
                        <el-table-column prop="patrolTaskType" min-width="140">
                            <template #header>
                                <span class="required-star">*</span>
                                巡查任务类型
                            </template>
                            <template v-slot="{ row }">
                                <el-select
                                    class="gd-select"
                                    popper-class="gd-select-popper"
                                    v-model="row.patrolTaskType"
                                    placeholder="请选择"
                                    :disabled="dialogReadonly"
                                    @change="handlePatrolTaskTypeChange($index, $event)"
                                    disabled
                                >
                                    <el-option
                                        v-for="item in dictObj.workOrderType"
@@ -94,7 +111,11 @@
                                </el-select>
                            </template>
                        </el-table-column>
                        <el-table-column prop="executeTime" label="任务执行时间" min-width="180">
                        <el-table-column prop="executeTime" min-width="180">
                            <template #header>
                                <span class="required-star">*</span>
                                任务执行时间
                            </template>
                            <template v-slot="{ row }">
                                <el-date-picker
                                    class="gd-date-picker"
@@ -107,7 +128,11 @@
                                />
                            </template>
                        </el-table-column>
                        <el-table-column prop="patrolRouteUrl" label="巡查任务航线" min-width="120">
                        <el-table-column prop="patrolRouteUrl" min-width="120">
                            <template #header>
                                <span class="required-star">*</span>
                                巡查任务航线
                            </template>
                            <template v-slot="{ row }">
                                <el-select
                                    class="gd-select"
@@ -120,7 +145,11 @@
                                </el-select>
                            </template>
                        </el-table-column>
                        <el-table-column prop="recommendFlyerName" label="推荐飞手" min-width="120">
                        <el-table-column prop="recommendFlyerName" min-width="120">
                            <template #header>
                                <span class="required-star">*</span>
                                推荐飞手
                            </template>
                            <template v-slot="{ row, $index }">
                                <el-select
                                    class="gd-select"
@@ -139,7 +168,11 @@
                                </el-select>
                            </template>
                        </el-table-column>
                        <el-table-column prop="deviceId" label="选择设备" min-width="120">
                        <el-table-column prop="deviceId" min-width="120">
                            <template #header>
                                <span class="required-star">*</span>
                                选择设备
                            </template>
                            <template v-slot="{ row }">
                                <el-select
                                    class="gd-select"
@@ -234,12 +267,21 @@
const routeOptions = inject('routeOptions')
// 子任务列表
const taskList = ref([initTaskRow()])
const taskList = ref([initTaskRow(), initTaskRow(), initTaskRow(), initTaskRow(), initTaskRow()])
// 处理工单选择变化
function handleWorkOrderChange(val) {
    if (val) {
        selectedWorkOrder.value = workOrderList.value.find(item => item.id === val)
        // 将工单类型赋值给所有子任务行
        const workOrderType = selectedWorkOrder.value?.workOrderType
        if (workOrderType) {
            taskList.value.forEach((task, index) => {
                task.patrolTaskType = workOrderType
                // 获取对应的飞手列表
                getFlyerList(index, workOrderType)
            })
        }
    } else {
        selectedWorkOrder.value = null
    }
@@ -247,7 +289,17 @@
// 添加任务行
function addTaskRow() {
    taskList.value.push(initTaskRow())
    const newTask = initTaskRow()
    // 如果已选择工单,自动填充工单类型
    if (selectedWorkOrder.value?.workOrderType) {
        newTask.patrolTaskType = selectedWorkOrder.value.workOrderType
    }
    const newIndex = taskList.value.length
    taskList.value.push(newTask)
    // 获取对应的飞手列表
    if (newTask.patrolTaskType) {
        getFlyerList(newIndex, newTask.patrolTaskType)
    }
}
// 删除任务行
@@ -270,7 +322,7 @@
// 获取工单列表
async function getWorkOrderList() {
    const res = await gdWorkOrderPageApi({ size: 999, workOrderStatus: dialogMode.value ==='add' ?  '20' : '' })
    const res = await gdWorkOrderPageApi({ size: 999, workOrderStatus: dialogMode.value === 'add' ? '20' : '' })
    workOrderList.value = res?.data?.data?.records ?? []
}
@@ -308,19 +360,41 @@
    }
)
// 判断一行是否已填写(至少填写了任务名称)
function isTaskRowFilled(task) {
    return !!(task.patrolTaskName || task.executeTime || task.patrolRouteUrl || task.recommendFlyerName || task.deviceId)
}
// 判断一行是否完整填写(所有必填项都有值)
function isTaskRowComplete(task) {
    return !!(
        task.patrolTaskName &&
        task.patrolTaskType &&
        task.executeTime &&
        task.patrolRouteUrl &&
        task.recommendFlyerName &&
        task.deviceId
    )
}
// 提交新增
async function handleSubmit() {
    if (!selectedWorkOrderId.value) {
        ElMessage.warning('请选择关联工单')
        return
    }
    if (!taskList.value.length) {
        ElMessage.warning('请添加至少一个子任务')
    // 过滤出已填写的任务行
    const filledTasks = taskList.value.filter(task => isTaskRowFilled(task))
    if (!filledTasks.length) {
        ElMessage.warning('请至少填写一个子任务')
        return
    }
    // 校验子任务
    // 只校验已填写的子任务
    for (let i = 0; i < taskList.value.length; i++) {
        const task = taskList.value[i]
        // 跳过未填写的行
        if (!isTaskRowFilled(task)) continue
        // 已填写的行需要校验完整性
        if (!task.patrolTaskName) {
            ElMessage.warning(`第${i + 1}行: 请输入巡查任务名称`)
            return
@@ -348,8 +422,9 @@
    }
    submitting.value = true
    try {
        const preID = taskList.value[0].id
        const dataList = taskList.value.map(item => ({
        const preID = filledTasks[0]?.id
        // 只提交已填写的任务行
        const dataList = filledTasks.map(item => ({
            ...item,
            workOrderId: selectedWorkOrderId.value,
            id: undefined,
@@ -371,7 +446,7 @@
    if (dialogMode.value === 'add') {
        selectedWorkOrderId.value = null
        selectedWorkOrder.value = null
        taskList.value = [initTaskRow()]
        taskList.value = [initTaskRow(), initTaskRow(), initTaskRow(), initTaskRow(), initTaskRow()]
        flyerListMap.value = {}
    } else {
        // 编辑/查看模式 - 加载已有数据
@@ -386,9 +461,7 @@
    }
}
onMounted(() => {
})
onMounted(() => {})
defineExpose({ open })
</script>
@@ -401,4 +474,12 @@
    display: flex;
    align-items: center;
}
.required-star {
    color: #f56c6c;
    margin-right: 4px;
}
.grayText {
    color: #9f9f9f;
}
</style>