feat: new api

This commit is contained in:
2025-12-10 18:05:25 +08:00
parent f9eaa441a3
commit ab86729e33
11 changed files with 753 additions and 25 deletions

View File

@@ -107,7 +107,13 @@
</el-col>
<el-col :span="12">
<el-form-item label="区域" prop="regionId">
<el-select v-model="form.regionId" placeholder="请选择区域" filterable style="width: 100%">
<el-select
v-model="form.regionId"
placeholder="请选择任务模板后自动填充"
filterable
style="width: 100%"
:disabled="!!form.taskId && !form.id"
>
<el-option v-for="region in regionOptions" :key="region.id" :label="region.regionName" :value="region.id" />
</el-select>
</el-form-item>
@@ -121,7 +127,8 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<!-- 仅编辑时显示状态字段 -->
<el-col v-if="form.id" :span="12">
<el-form-item label="执行状态" prop="status">
<el-select v-model="form.status" placeholder="请选择状态" style="width: 100%">
<el-option label="待执行" value="pending" />
@@ -134,34 +141,90 @@
</el-row>
<el-divider content-position="left">执行角色</el-divider>
<!-- 操作人和监护人 -->
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="操作人" prop="operatorName">
<el-input v-model="form.operatorName" placeholder="请输入操作人姓名" />
<el-input
v-model="form.operatorName"
placeholder="请选择操作人"
readonly
style="width: 100%"
>
<template #append>
<el-button icon="User" @click="operatorSelectRef.open()" />
<el-button v-if="form.operatorName" icon="Close" @click="clearUser('operator')" />
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="监护人" prop="custodianName">
<el-input v-model="form.custodianName" placeholder="请输入监护人姓名" />
<el-input
v-model="form.custodianName"
placeholder="请选择监护人"
readonly
style="width: 100%"
>
<template #append>
<el-button icon="User" @click="custodianSelectRef.open()" />
<el-button v-if="form.custodianName" icon="Close" @click="clearUser('custodian')" />
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<!-- 送电人和受电人 -->
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="送电人" prop="senderName">
<el-input v-model="form.senderName" placeholder="请输入送电人姓名" />
<el-input
v-model="form.senderName"
placeholder="请选择送电人"
readonly
style="width: 100%"
>
<template #append>
<el-button icon="User" @click="senderSelectRef.open()" />
<el-button v-if="form.senderName" icon="Close" @click="clearUser('sender')" />
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="受电人" prop="recipientName">
<el-input v-model="form.recipientName" placeholder="请输入受电人姓名" />
<el-input
v-model="form.recipientName"
placeholder="请选择受电人"
readonly
style="width: 100%"
>
<template #append>
<el-button icon="User" @click="recipientSelectRef.open()" />
<el-button v-if="form.recipientName" icon="Close" @click="clearUser('recipient')" />
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<!-- 指挥人 -->
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="指挥人" prop="commanderName">
<el-input v-model="form.commanderName" placeholder="请输入指挥人姓名" />
<el-input
v-model="form.commanderName"
placeholder="请选择指挥人"
readonly
style="width: 100%"
>
<template #append>
<el-button icon="User" @click="commanderSelectRef.open()" />
<el-button v-if="form.commanderName" icon="Close" @click="clearUser('commander')" />
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
@@ -173,18 +236,27 @@
</div>
</template>
</el-dialog>
<!-- 用户选择组件 -->
<UserSelect ref="operatorSelectRef" :multiple="false" @confirmCallBack="handleOperatorSelect" />
<UserSelect ref="custodianSelectRef" :multiple="false" @confirmCallBack="handleCustodianSelect" />
<UserSelect ref="senderSelectRef" :multiple="false" @confirmCallBack="handleSenderSelect" />
<UserSelect ref="recipientSelectRef" :multiple="false" @confirmCallBack="handleRecipientSelect" />
<UserSelect ref="commanderSelectRef" :multiple="false" @confirmCallBack="handleCommanderSelect" />
</div>
</template>
<script setup name="ArExecution" lang="ts">
import { listArExecution, getArExecution, delArExecution, addArExecution, updateArExecution } from '@/api/inspection/execution';
import { ArExecutionVO, ArExecutionQuery, ArExecutionForm } from '@/api/inspection/execution/types';
import { listArTask } from '@/api/inspection/task';
import { listArTask, getArTask } from '@/api/inspection/task';
import { ArTaskVO } from '@/api/inspection/task/types';
import { listArRegion } from '@/api/inspection/region';
import { ArRegionVO } from '@/api/inspection/region/types';
import { listArDevice } from '@/api/inspection/device';
import { ArDeviceVO } from '@/api/inspection/device/types';
import { UserVO } from '@/api/system/user/types';
import UserSelect from '@/components/UserSelect/index.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -203,6 +275,12 @@ const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const executionFormRef = ref<ElFormInstance>();
const operatorSelectRef = ref();
const custodianSelectRef = ref();
const senderSelectRef = ref();
const recipientSelectRef = ref();
const commanderSelectRef = ref();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
@@ -369,6 +447,90 @@ const handleExport = () => {
);
};
/** 监听任务模板变化,自动填充区域 */
watch(() => form.value.taskId, async (newTaskId) => {
if (newTaskId && !form.value.id) { // 仅新增时自动填充
try {
const res = await getArTask(newTaskId);
if (res.data && res.data.regionId) {
form.value.regionId = res.data.regionId;
const region = regionOptions.value.find(r => r.id === res.data.regionId);
if (region) {
proxy?.$modal.msgSuccess(`已自动填充区域:${region.regionName}`);
}
}
} catch (error) {
console.error('获取任务模板详情失败', error);
}
}
});
/** 操作人选择回调 */
const handleOperatorSelect = (users: UserVO[]) => {
if (users && users.length > 0) {
form.value.operatorId = users[0].userId;
form.value.operatorName = users[0].nickName;
}
};
/** 监护人选择回调 */
const handleCustodianSelect = (users: UserVO[]) => {
if (users && users.length > 0) {
form.value.custodianId = users[0].userId;
form.value.custodianName = users[0].nickName;
}
};
/** 送电人选择回调 */
const handleSenderSelect = (users: UserVO[]) => {
if (users && users.length > 0) {
form.value.senderId = users[0].userId;
form.value.senderName = users[0].nickName;
}
};
/** 受电人选择回调 */
const handleRecipientSelect = (users: UserVO[]) => {
if (users && users.length > 0) {
form.value.recipientId = users[0].userId;
form.value.recipientName = users[0].nickName;
}
};
/** 指挥人选择回调 */
const handleCommanderSelect = (users: UserVO[]) => {
if (users && users.length > 0) {
form.value.commanderId = users[0].userId;
form.value.commanderName = users[0].nickName;
}
};
/** 清空人员选择 */
const clearUser = (role: 'operator' | 'custodian' | 'sender' | 'recipient' | 'commander') => {
switch (role) {
case 'operator':
form.value.operatorId = undefined;
form.value.operatorName = undefined;
break;
case 'custodian':
form.value.custodianId = undefined;
form.value.custodianName = undefined;
break;
case 'sender':
form.value.senderId = undefined;
form.value.senderName = undefined;
break;
case 'recipient':
form.value.recipientId = undefined;
form.value.recipientName = undefined;
break;
case 'commander':
form.value.commanderId = undefined;
form.value.commanderName = undefined;
break;
}
};
onMounted(() => {
getOptions();
getList();