<template>
|
<view class="account-detail">
|
<PageHeader title="新增整改"
|
@back="goBack" />
|
<up-form ref="formRef"
|
:model="form"
|
label-width="110">
|
<up-form-item label="关联设备"
|
required>
|
<up-input v-model="equipmentText"
|
placeholder="请选择"
|
readonly
|
@click="showEquipmentSheet = true" />
|
<template #right>
|
<up-icon name="arrow-right"
|
@click="showEquipmentSheet = true"></up-icon>
|
</template>
|
</up-form-item>
|
<up-form-item label="风险等级"
|
required>
|
<up-input v-model="riskLevelText"
|
placeholder="请选择"
|
readonly
|
@click="showRiskLevelSheet = true" />
|
<template #right>
|
<up-icon name="arrow-right"
|
@click="showRiskLevelSheet = true"></up-icon>
|
</template>
|
</up-form-item>
|
<up-form-item label="发现日期"
|
required>
|
<up-input v-model="form.discoveredDate"
|
placeholder="请选择"
|
readonly
|
@click="showDiscoveredDatePicker = true" />
|
<template #right>
|
<up-icon name="arrow-right"
|
@click="showDiscoveredDatePicker = true"></up-icon>
|
</template>
|
</up-form-item>
|
<up-form-item label="整改期限"
|
required>
|
<up-input v-model="form.rectificationDeadline"
|
placeholder="请选择"
|
readonly
|
@click="showDeadlinePicker = true" />
|
<template #right>
|
<up-icon name="arrow-right"
|
@click="showDeadlinePicker = true"></up-icon>
|
</template>
|
</up-form-item>
|
<up-form-item label="整改责任人">
|
<up-input v-model="responsibleUserText"
|
placeholder="请选择"
|
readonly
|
@click="showResponsibleUserSheet = true" />
|
<template #right>
|
<up-icon name="arrow-right"
|
@click="showResponsibleUserSheet = true"></up-icon>
|
</template>
|
</up-form-item>
|
<up-form-item label="整改状态">
|
<up-input v-model="rectStatusText"
|
placeholder="请选择"
|
readonly
|
@click="showRectStatusSheet = true" />
|
<template #right>
|
<up-icon name="arrow-right"
|
@click="showRectStatusSheet = true"></up-icon>
|
</template>
|
</up-form-item>
|
<up-form-item label="隐患描述"
|
required>
|
<up-textarea v-model="form.hazardDescription"
|
placeholder="请输入"
|
auto-height />
|
</up-form-item>
|
<up-form-item label="整改措施">
|
<up-textarea v-model="form.rectificationMeasures"
|
placeholder="请输入"
|
auto-height />
|
</up-form-item>
|
<up-form-item label="整改结果">
|
<up-textarea v-model="form.rectificationResult"
|
placeholder="请输入"
|
auto-height />
|
</up-form-item>
|
<up-form-item label="备注">
|
<up-textarea v-model="form.remarks"
|
placeholder="请输入"
|
auto-height />
|
</up-form-item>
|
</up-form>
|
<FooterButtons :loading="loading"
|
confirmText="保存"
|
@cancel="goBack"
|
@confirm="handleSubmit" />
|
<up-action-sheet :show="showEquipmentSheet"
|
title="选择设备"
|
:actions="equipmentActions"
|
@select="onSelectEquipment"
|
@close="showEquipmentSheet = false" />
|
<up-action-sheet :show="showRiskLevelSheet"
|
title="选择风险等级"
|
:actions="riskLevelActions"
|
@select="onSelectRiskLevel"
|
@close="showRiskLevelSheet = false" />
|
<up-action-sheet :show="showResponsibleUserSheet"
|
title="选择整改责任人"
|
:actions="responsibleUserActions"
|
@select="onSelectResponsibleUser"
|
@close="showResponsibleUserSheet = false" />
|
<up-action-sheet :show="showRectStatusSheet"
|
title="选择整改状态"
|
:actions="rectStatusActions"
|
@select="onSelectRectStatus"
|
@close="showRectStatusSheet = false" />
|
<up-datetime-picker :show="showDiscoveredDatePicker"
|
v-model="discoveredDateValue"
|
mode="date"
|
@confirm="onDiscoveredDateConfirm"
|
@cancel="showDiscoveredDatePicker = false" />
|
<up-datetime-picker :show="showDeadlinePicker"
|
v-model="deadlineValue"
|
mode="date"
|
@confirm="onDeadlineConfirm"
|
@cancel="showDeadlinePicker = false" />
|
</view>
|
</template>
|
|
<script setup>
|
import { onMounted, ref } from "vue";
|
import FooterButtons from "@/components/FooterButtons.vue";
|
import PageHeader from "@/components/PageHeader.vue";
|
import { formatDateToYMD } from "@/utils/ruoyi";
|
import { userListNoPageByTenantId } from "@/api/system/user";
|
import {
|
specialEquipmentLedgerList,
|
specialEquipmentRectificationAdd,
|
} from "@/api/safeProduction/specialEquipmentManagement";
|
|
const formRef = ref();
|
const loading = ref(false);
|
|
const equipmentActions = ref([]);
|
const responsibleUserActions = ref([]);
|
|
const showEquipmentSheet = ref(false);
|
const showRiskLevelSheet = ref(false);
|
const showResponsibleUserSheet = ref(false);
|
const showRectStatusSheet = ref(false);
|
|
const showDiscoveredDatePicker = ref(false);
|
const showDeadlinePicker = ref(false);
|
const discoveredDateValue = ref(Date.now());
|
const deadlineValue = ref(Date.now());
|
|
const equipmentText = ref("");
|
const riskLevelText = ref("");
|
const responsibleUserText = ref("");
|
const rectStatusText = ref("待整改");
|
|
const riskLevelActions = [
|
{ name: "低", value: "低" },
|
{ name: "中", value: "中" },
|
{ name: "高", value: "高" },
|
];
|
const rectStatusActions = [
|
{ name: "待整改", value: 1 },
|
{ name: "整改中", value: 2 },
|
{ name: "待复核", value: 3 },
|
{ name: "已闭环", value: 4 },
|
];
|
|
const form = ref({
|
id: "",
|
equipmentId: "",
|
hazardDescription: "",
|
riskLevel: "",
|
discoveredDate: "",
|
responsibleUserId: "",
|
responsibleUserName: "",
|
rectificationDeadline: "",
|
rectificationStatus: 1,
|
rectificationMeasures: "",
|
rectificationResult: "",
|
remarks: "",
|
});
|
|
const goBack = () => {
|
uni.navigateBack();
|
};
|
|
const loadEquipmentOptions = () => {
|
specialEquipmentLedgerList({})
|
.then(res => {
|
const rows = Array.isArray(res?.data) ? res.data : [];
|
equipmentActions.value = rows.map(r => ({
|
name: r.equipmentName || "",
|
value: r.id,
|
equipmentNo: r.equipmentNo,
|
}));
|
})
|
.catch(() => {
|
equipmentActions.value = [];
|
});
|
};
|
|
const loadUsers = () => {
|
userListNoPageByTenantId()
|
.then(res => {
|
const rows = Array.isArray(res?.data) ? res.data : [];
|
responsibleUserActions.value = rows.map(u => ({
|
name: u.nickName || u.userName || "",
|
value: u.userId,
|
}));
|
})
|
.catch(() => {
|
responsibleUserActions.value = [];
|
});
|
};
|
|
const onSelectEquipment = action => {
|
form.value.equipmentId = action.value;
|
equipmentText.value = action.equipmentNo
|
? `${action.name}(${action.equipmentNo})`
|
: action.name;
|
showEquipmentSheet.value = false;
|
};
|
|
const onSelectRiskLevel = action => {
|
form.value.riskLevel = action.value;
|
riskLevelText.value = action.name;
|
showRiskLevelSheet.value = false;
|
};
|
|
const onSelectResponsibleUser = action => {
|
form.value.responsibleUserId = action.value;
|
form.value.responsibleUserName = action.name;
|
responsibleUserText.value = action.name;
|
showResponsibleUserSheet.value = false;
|
};
|
|
const onSelectRectStatus = action => {
|
form.value.rectificationStatus = action.value;
|
rectStatusText.value = action.name;
|
showRectStatusSheet.value = false;
|
};
|
|
const onDiscoveredDateConfirm = e => {
|
const value = e?.value ?? discoveredDateValue.value;
|
form.value.discoveredDate = formatDateToYMD(value);
|
showDiscoveredDatePicker.value = false;
|
};
|
|
const onDeadlineConfirm = e => {
|
const value = e?.value ?? deadlineValue.value;
|
form.value.rectificationDeadline = formatDateToYMD(value);
|
showDeadlinePicker.value = false;
|
};
|
|
const handleSubmit = async () => {
|
if (!form.value.equipmentId) {
|
uni.showToast({ title: "请选择关联设备", icon: "none" });
|
return;
|
}
|
if (!form.value.riskLevel) {
|
uni.showToast({ title: "请选择风险等级", icon: "none" });
|
return;
|
}
|
if (!form.value.discoveredDate) {
|
uni.showToast({ title: "请选择发现日期", icon: "none" });
|
return;
|
}
|
if (!form.value.rectificationDeadline) {
|
uni.showToast({ title: "请选择整改期限", icon: "none" });
|
return;
|
}
|
const hazardDescription = String(form.value.hazardDescription || "").trim();
|
if (!hazardDescription) {
|
uni.showToast({ title: "请输入隐患描述", icon: "none" });
|
return;
|
}
|
|
loading.value = true;
|
specialEquipmentRectificationAdd({ ...form.value, hazardDescription })
|
.then(() => {
|
uni.showToast({ title: "保存成功", icon: "success" });
|
uni.$emit("specialEquipmentManagement:refresh");
|
goBack();
|
})
|
.catch(() => {
|
uni.showToast({ title: "保存失败", icon: "none" });
|
})
|
.finally(() => {
|
loading.value = false;
|
});
|
};
|
|
onMounted(() => {
|
loadEquipmentOptions();
|
loadUsers();
|
rectStatusText.value = "待整改";
|
form.value.rectificationStatus = 1;
|
});
|
</script>
|
|
<style scoped lang="scss">
|
@import "@/static/scss/form-common.scss";
|
</style>
|