This commit is contained in:
2023-05-30 17:33:25 +08:00
parent 0474ca3578
commit 46be066199
12 changed files with 668 additions and 344 deletions

View File

@ -33,3 +33,11 @@ export function updateHandleOrder(data) {
data: data,
});
}
// 提交告警工单审核
export function commitHandleOrder(orderIds) {
return request({
url: `/maintenance/handle-order/commit/${orderIds}`,
method: "put",
});
}

View File

@ -49,3 +49,12 @@ export function publishOrder(orderIds) {
method: "put",
});
}
/*审核工单*/
export function commitExamine(data) {
return request({
url: `/maintenance/order/commitExamine`,
method: "put",
data,
});
}

View File

@ -0,0 +1,75 @@
<script setup>
import { ref } from "vue";
import InfiniteLoading from "v3-infinite-loading";
import "v3-infinite-loading/lib/style.css"; //required if you're not going to override default slots
const props = defineProps({
modelValue: {
type: Object,
},
remoteMethod: {
type: Function,
},
prop: {
type: Object,
required: true,
},
});
const emit = defineEmits(["update:modelValue"]);
const placeholder = ref();
const loadMore = () => {
console.log("load more");
};
</script>
<template>
<div class="app-container">
<el-popover
:popper-style="{
padding: 0,
}"
:width="320"
placement="bottom"
trigger="click"
>
<template #reference>
<div style="width: 320px">
<el-input :placeholder="placeholder" />
</div>
</template>
<el-scrollbar class="options-wrap" height="300">
<ul class="options">
<li v-for="i in 32" :key="i" class="option-item">option</li>
</ul>
<infinite-loading @infinite="loadMore"> </infinite-loading>
</el-scrollbar>
</el-popover>
</div>
</template>
<style lang="scss" scoped>
.options-wrap {
//height: 300px;
.options {
list-style: none;
margin: 0;
padding: 0;
.option-item {
color: #409eff;
height: 32px;
cursor: pointer;
font-size: 14px;
display: flex;
align-items: center;
padding: 0 32px 0 20px;
&:hover {
background-color: #f5f7fa;
}
}
}
}
</style>

View File

@ -377,7 +377,7 @@ export const orderStatusDict = [
{
label: "进行中",
value: "1",
elTagType: "primary",
elTagType: "warning",
},
{
label: "已完成",
@ -389,6 +389,11 @@ export const orderStatusDict = [
value: "3",
elTagType: "danger",
},
{
label: "待审核",
value: "4",
elTagType: "primary",
},
];
export const alertHandleResultDict = [

View File

@ -49,6 +49,7 @@
/>
</el-select>
</el-form-item>
<!-- <el-form-item> </el-form-item>-->
<!-- <el-form-item label="建议完成时间" prop="suggestCompleteTime">-->
<!-- <el-date-picker-->
@ -206,6 +207,14 @@
@click="handleGoDetail(row.orderId)"
>详情
</el-button>
<el-button
v-if="row.status !== '4'"
icon="upload"
link
type="primary"
@click="handleCommitOrder(row)"
>提交审核
</el-button>
<!-- <el-button-->
<!-- v-if="row.status === '0'"-->
<!-- v-hasPermi="['maintenance:order:remove']"-->
@ -228,224 +237,224 @@
/>
<!-- 添加或修改告警工单对话框 -->
<el-dialog v-model="open" :title="title" append-to-body width="1200px">
<el-form
ref="orderRef"
:model="form"
:rules="rules"
label-position="left"
label-width="120px"
>
<!-- <el-form-item label="工单编号" prop="orderNumber">-->
<!-- <el-input v-model="form.orderNumber" placeholder="请输入工单编号" />-->
<!-- </el-form-item>-->
<el-form-item label="级别" prop="level">
<el-select v-model="form.level" placeholder="请选择级别">
<el-option
v-for="option in orderLevel"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</el-form-item>
<el-form-item label="负责工人" prop="workerId">
<!--<el-input v-model="form.workerId" placeholder="请输入负责工人ID" />-->
<el-select
v-model="form.workerId"
:remote-method="loadWorkOptions"
clearable
filterable
placeholder="请选择负责工人"
remote
remote-show-suffix
@change="
form.workerName = workerOptions.find(
(el) => el.userId === $event
)?.nickName
"
>
<el-option
v-for="option in workerOptions"
:key="option.userId"
:label="option.nickName"
:value="option.userId"
/>
</el-select>
</el-form-item>
<el-form-item label="建议完成时间" prop="suggestCompleteTime">
<el-date-picker
v-model="form.suggestCompleteTime"
clearable
placeholder="请选择建议完成时间"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
>
</el-date-picker>
</el-form-item>
<!-- <el-dialog v-model="open" :title="title" append-to-body width="1200px">-->
<!-- <el-form-->
<!-- ref="orderRef"-->
<!-- :model="form"-->
<!-- :rules="rules"-->
<!-- label-position="left"-->
<!-- label-width="120px"-->
<!-- >-->
<!-- &lt;!&ndash; <el-form-item label="工单编号" prop="orderNumber">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-input v-model="form.orderNumber" placeholder="请输入工单编号" />&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- <el-form-item label="级别" prop="level">-->
<!-- <el-select v-model="form.level" placeholder="请选择级别">-->
<!-- <el-option-->
<!-- v-for="option in orderLevel"-->
<!-- :key="option.value"-->
<!-- :label="option.label"-->
<!-- :value="option.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="负责工人" prop="workerId">-->
<!-- &lt;!&ndash;<el-input v-model="form.workerId" placeholder="请输入负责工人ID" />&ndash;&gt;-->
<!-- <el-select-->
<!-- v-model="form.workerId"-->
<!-- :remote-method="loadWorkOptions"-->
<!-- clearable-->
<!-- filterable-->
<!-- placeholder="请选择负责工人"-->
<!-- remote-->
<!-- remote-show-suffix-->
<!-- @change="-->
<!-- form.workerName = workerOptions.find(-->
<!-- (el) => el.userId === $event-->
<!-- )?.nickName-->
<!-- "-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="option in workerOptions"-->
<!-- :key="option.userId"-->
<!-- :label="option.nickName"-->
<!-- :value="option.userId"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="建议完成时间" prop="suggestCompleteTime">-->
<!-- <el-date-picker-->
<!-- v-model="form.suggestCompleteTime"-->
<!-- clearable-->
<!-- placeholder="请选择建议完成时间"-->
<!-- type="datetime"-->
<!-- value-format="YYYY-MM-DD HH:mm:ss"-->
<!-- >-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item label="备注" prop="remark">
<el-input
v-model="form.remark"
placeholder="请输入备注"
type="textarea"
></el-input>
</el-form-item>
<el-form-item label="告警" prop="alerts"></el-form-item>
<el-form-item label-width="0">
<template v-if="form.alerts?.length">
<el-table
:data="form.alerts"
class="custom-table-style"
max-height="400"
>
<el-table-column
align="center"
label="告警名称"
prop="alertName"
/>
<el-table-column align="center" label="告警级别">
<template #default="{ row }">
<dict-tag
:options="iot_alert_level"
:value="row.alertLevel"
/>
</template>
</el-table-column>
<el-table-column
align="center"
label="告警内容"
prop="alertContent"
/>
<el-table-column align="center" label="产品Sn" prop="productSn" />
<el-table-column
align="center"
label="设备名称"
prop="deviceName"
/>
<el-table-column align="center" label="设备Sn" prop="deviceSn" />
<el-table-column
align="center"
label="地址"
prop="networkAddress"
width="340"
/>
<!-- <el-form-item label="备注" prop="remark">-->
<!-- <el-input-->
<!-- v-model="form.remark"-->
<!-- placeholder="请输入备注"-->
<!-- type="textarea"-->
<!-- ></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="告警" prop="alerts"></el-form-item>-->
<!-- <el-form-item label-width="0">-->
<!-- <template v-if="form.alerts?.length">-->
<!-- <el-table-->
<!-- :data="form.alerts"-->
<!-- class="custom-table-style"-->
<!-- max-height="400"-->
<!-- >-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- label="告警名称"-->
<!-- prop="alertName"-->
<!-- />-->
<!-- <el-table-column align="center" label="告警级别">-->
<!-- <template #default="{ row }">-->
<!-- <dict-tag-->
<!-- :options="iot_alert_level"-->
<!-- :value="row.alertLevel"-->
<!-- />-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- label="告警内容"-->
<!-- prop="alertContent"-->
<!-- />-->
<!-- <el-table-column align="center" label="产品Sn" prop="productSn" />-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- label="设备名称"-->
<!-- prop="deviceName"-->
<!-- />-->
<!-- <el-table-column align="center" label="设备Sn" prop="deviceSn" />-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- label="地址"-->
<!-- prop="networkAddress"-->
<!-- width="340"-->
<!-- />-->
<el-table-column align="center" label="操作">
<template #default="{ row }">
<el-button
icon="finished"
link
type="primary"
@click="handleOrder(row)"
>处理
</el-button>
</template>
</el-table-column>
</el-table>
</template>
<!-- <el-button-->
<!-- v-if="!form.status || form.status === '0'"-->
<!-- :icon="form.alerts?.length ? `plus` : `pointer`"-->
<!-- size="small"-->
<!-- style="margin-top: 12px"-->
<!-- type="primary"-->
<!-- @click="handleOpenSelectAlert"-->
<!-- >{{ form.alerts?.length ? "添加告警" : "选择告警" }}-->
<!-- </el-button>-->
</el-form-item>
<!-- <el-form-item label="实际完成时间" prop="realCompleteTime">-->
<!-- <el-date-picker-->
<!-- v-model="form.realCompleteTime"-->
<!-- clearable-->
<!-- placeholder="请选择实际完成时间"-->
<!-- type="date"-->
<!-- value-format="YYYY-MM-DD"-->
<!-- >-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="驳回理由" prop="rejectReason">-->
<!-- <el-input-->
<!-- v-model="form.rejectReason"-->
<!-- placeholder="请输入内容"-->
<!-- type="textarea"-->
<!-- />-->
<!-- </el-form-item>-->
</el-form>
<template #footer>
<div class="dialog-footer">
<!-- <el-button-->
<!-- v-if="!form.status || form.status === '0'"-->
<!-- type="primary"-->
<!-- @click="submitForm"-->
<!-- >确 定-->
<!-- </el-button>-->
<el-button @click="cancel">关 闭</el-button>
</div>
</template>
</el-dialog>
<!-- <el-table-column align="center" label="操作">-->
<!-- <template #default="{ row }">-->
<!-- <el-button-->
<!-- icon="finished"-->
<!-- link-->
<!-- type="primary"-->
<!-- @click="handleOrder(row)"-->
<!-- >处理-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- </template>-->
<!-- &lt;!&ndash; <el-button&ndash;&gt;-->
<!-- &lt;!&ndash; v-if="!form.status || form.status === '0'"&ndash;&gt;-->
<!-- &lt;!&ndash; :icon="form.alerts?.length ? `plus` : `pointer`"&ndash;&gt;-->
<!-- &lt;!&ndash; size="small"&ndash;&gt;-->
<!-- &lt;!&ndash; style="margin-top: 12px"&ndash;&gt;-->
<!-- &lt;!&ndash; type="primary"&ndash;&gt;-->
<!-- &lt;!&ndash; @click="handleOpenSelectAlert"&ndash;&gt;-->
<!-- &lt;!&ndash; >{{ form.alerts?.length ? "添加告警" : "选择告警" }}&ndash;&gt;-->
<!-- &lt;!&ndash; </el-button>&ndash;&gt;-->
<!-- </el-form-item>-->
<!-- &lt;!&ndash; <el-form-item label="实际完成时间" prop="realCompleteTime">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-date-picker&ndash;&gt;-->
<!-- &lt;!&ndash; v-model="form.realCompleteTime"&ndash;&gt;-->
<!-- &lt;!&ndash; clearable&ndash;&gt;-->
<!-- &lt;!&ndash; placeholder="请选择实际完成时间"&ndash;&gt;-->
<!-- &lt;!&ndash; type="date"&ndash;&gt;-->
<!-- &lt;!&ndash; value-format="YYYY-MM-DD"&ndash;&gt;-->
<!-- &lt;!&ndash; >&ndash;&gt;-->
<!-- &lt;!&ndash; </el-date-picker>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- &lt;!&ndash; <el-form-item label="驳回理由" prop="rejectReason">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-input&ndash;&gt;-->
<!-- &lt;!&ndash; v-model="form.rejectReason"&ndash;&gt;-->
<!-- &lt;!&ndash; placeholder="请输入内容"&ndash;&gt;-->
<!-- &lt;!&ndash; type="textarea"&ndash;&gt;-->
<!-- &lt;!&ndash; />&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- </el-form>-->
<!-- <template #footer>-->
<!-- <div class="dialog-footer">-->
<!-- &lt;!&ndash; <el-button&ndash;&gt;-->
<!-- &lt;!&ndash; v-if="!form.status || form.status === '0'"&ndash;&gt;-->
<!-- &lt;!&ndash; type="primary"&ndash;&gt;-->
<!-- &lt;!&ndash; @click="submitForm"&ndash;&gt;-->
<!-- &lt;!&ndash; >确 定&ndash;&gt;-->
<!-- &lt;!&ndash; </el-button>&ndash;&gt;-->
<!-- <el-button @click="cancel">关 闭</el-button>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-dialog>-->
<el-dialog
v-model="showHandleAlert"
append-to-body
title="处理告警"
width="500px"
>
<el-form ref="handleAlertRef" :model="handleAlertForm">
<el-form-item label="处理结果" prop="handleResult">
<el-select v-model="handleAlertForm.handleResult">
<el-option
v-for="option in alertHandleResultDict"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</el-form-item>
<el-form-item label="是否修复" prop="fixResult">
<el-select v-model="handleAlertForm.fixResult">
<el-option
v-for="option in alertFixResultDict"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</el-form-item>
<el-form-item label="是否返厂" prop="isReturnFactory">
<el-select v-model="handleAlertForm.isReturnFactory">
<el-option
v-for="option in alertIsReturnFactoryDict"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</el-form-item>
<el-form-item
v-if="handleAlertForm.isReturnFactory === '1'"
label="返厂数量"
prop="returnTotal"
>
<el-input-number v-model="handleAlertForm.returnTotal" />
</el-form-item>
<el-form-item
v-if="handleAlertForm.isReturnFactory === '1'"
label="返厂单号"
prop="returnExpress"
>
<el-input
v-model="handleAlertForm.returnExpress"
placeholder="请输入返厂单号"
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitHandleAlert">处理</el-button>
</div>
</template>
</el-dialog>
<!-- <el-dialog-->
<!-- v-model="showHandleAlert"-->
<!-- append-to-body-->
<!-- title="处理告警"-->
<!-- width="500px"-->
<!-- >-->
<!-- <el-form ref="handleAlertRef" :model="handleAlertForm">-->
<!-- <el-form-item label="处理结果" prop="handleResult">-->
<!-- <el-select v-model="handleAlertForm.handleResult">-->
<!-- <el-option-->
<!-- v-for="option in alertHandleResultDict"-->
<!-- :key="option.value"-->
<!-- :label="option.label"-->
<!-- :value="option.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="是否修复" prop="fixResult">-->
<!-- <el-select v-model="handleAlertForm.fixResult">-->
<!-- <el-option-->
<!-- v-for="option in alertFixResultDict"-->
<!-- :key="option.value"-->
<!-- :label="option.label"-->
<!-- :value="option.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="是否返厂" prop="isReturnFactory">-->
<!-- <el-select v-model="handleAlertForm.isReturnFactory">-->
<!-- <el-option-->
<!-- v-for="option in alertIsReturnFactoryDict"-->
<!-- :key="option.value"-->
<!-- :label="option.label"-->
<!-- :value="option.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item-->
<!-- v-if="handleAlertForm.isReturnFactory === '1'"-->
<!-- label="返厂数量"-->
<!-- prop="returnTotal"-->
<!-- >-->
<!-- <el-input-number v-model="handleAlertForm.returnTotal" />-->
<!-- </el-form-item>-->
<!-- <el-form-item-->
<!-- v-if="handleAlertForm.isReturnFactory === '1'"-->
<!-- label="返厂单号"-->
<!-- prop="returnExpress"-->
<!-- >-->
<!-- <el-input-->
<!-- v-model="handleAlertForm.returnExpress"-->
<!-- placeholder="请输入返厂单号"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <template #footer>-->
<!-- <div class="dialog-footer">-->
<!-- <el-button type="primary" @click="submitHandleAlert">处理</el-button>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-dialog>-->
<alert-select
v-model="showSelectAlert"
:list="form.alerts ?? []"
@ -457,24 +466,16 @@
<script lang="jsx" setup>
import {
delHandleOrder,
getHandleOrder,
commitHandleOrder,
listHandleOrder,
updateHandleOrder,
} from "@/api/maintenance/handle_order";
import {
alertFixResultDict,
alertHandleResultDict,
alertIsReturnFactoryDict,
orderLevel,
orderStatusDict,
} from "@/constant/dict";
import { orderLevel, orderStatusDict } from "@/constant/dict";
import { getCurrentInstance, reactive, ref, toRefs } from "vue";
import { listUser } from "@/api/maintenance/user";
import AlertSelect from "../order/AlertSelect/index.vue";
import { parseTime } from "@/utils/ruoyi";
import DictTag from "@/components/DictTag/index.vue";
import { ElMessage } from "element-plus";
import { ElMessage, ElMessageBox } from "element-plus";
import { useDict } from "@/utils/dict";
import { useRouter } from "vue-router";
@ -485,6 +486,7 @@ const open = ref(false);
const loading = ref(true);
const orderRef = ref();
const handleAlertRef = ref(); /*告警处理表单ref*/
const showHandleAlert = ref(false); /*显示处理告警窗口*/
const showSearch = ref(true);
const ids = ref([]);
const orderNumbers = ref([]);
@ -493,7 +495,6 @@ const multiple = ref(true);
const total = ref(0);
const title = ref("");
const showSelectAlert = ref(false);
const showHandleAlert = ref(false); /*显示处理告警窗口*/
const workerOptions = ref([]); /*负责工人选项列表*/
const router = useRouter();
const data = reactive({
@ -536,45 +537,45 @@ function getList() {
}
// 取消按钮
function cancel() {
open.value = false;
reset();
}
// function cancel() {
// open.value = false;
// reset();
// }
// 表单重置
function reset() {
form.value = {
orderId: null,
orderNumber: null,
level: null,
workerId: null,
workerName: null,
suggestCompleteTime: null,
realCompleteTime: null,
status: null,
rejectReason: null,
remark: null,
createBy: null,
createTime: null,
alertIds: [],
alerts: [],
};
proxy.resetForm("orderRef");
}
// function reset() {
// form.value = {
// orderId: null,
// orderNumber: null,
// level: null,
// workerId: null,
// workerName: null,
// suggestCompleteTime: null,
// realCompleteTime: null,
// status: null,
// rejectReason: null,
// remark: null,
// createBy: null,
// createTime: null,
// alertIds: [],
// alerts: [],
// };
// proxy.resetForm("orderRef");
// }
const resetHandleAlertForm = () => {
handleAlertForm.value = {
handleId: null,
handleResult: null,
fixResult: null,
isReturnFactory: null,
returnTotal: null,
returnExpress: null,
};
if (handleAlertRef.value) {
handleAlertRef.value.resetFields();
}
};
// const resetHandleAlertForm = () => {
// handleAlertForm.value = {
// handleId: null,
// handleResult: null,
// fixResult: null,
// isReturnFactory: null,
// returnTotal: null,
// returnExpress: null,
// };
// if (handleAlertRef.value) {
// handleAlertRef.value.resetFields();
// }
// };
/** 搜索按钮操作 */
function handleQuery() {
@ -597,22 +598,22 @@ function handleSelectionChange(selection) {
}
/** 新增按钮操作 */
function handleAdd() {
reset();
open.value = true;
title.value = "添加告警工单";
}
// function handleAdd() {
// reset();
// open.value = true;
// title.value = "添加告警工单";
// }
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const _orderId = row.orderId || ids.value;
getHandleOrder(_orderId).then((response) => {
form.value = response.data;
open.value = true;
title.value = "查看告警工单";
});
}
// function handleUpdate(row) {
// reset();
// const _orderId = row.orderId || ids.value;
// getHandleOrder(_orderId).then((response) => {
// form.value = response.data;
// open.value = true;
// title.value = "查看告警工单";
// });
// }
const handleGoDetail = (orderId) => {
router.push({
@ -623,33 +624,33 @@ const handleGoDetail = (orderId) => {
});
};
/*处理告警*/
const handleOrder = (row) => {
resetHandleAlertForm();
handleAlertForm.value = {
handleId: row.handleId,
};
showHandleAlert.value = true;
};
// const handleOrder = (row) => {
// resetHandleAlertForm();
// handleAlertForm.value = {
// handleId: row.handleId,
// };
// showHandleAlert.value = true;
// };
/**
* 提交告警处理结果
*/
const submitHandleAlert = () => {
handleAlertRef.value.validate((valid) => {
if (valid) {
updateHandleOrder(handleAlertForm.value).then(() => {
ElMessage.success("处理成功");
showHandleAlert.value = false;
// reset();
getHandleOrder(form.value.orderId).then((response) => {
form.value = response.data;
open.value = true;
title.value = "查看告警工单";
});
});
}
});
};
// const submitHandleAlert = () => {
// handleAlertRef.value.validate((valid) => {
// if (valid) {
// updateHandleOrder(handleAlertForm.value).then(() => {
// ElMessage.success("处理成功");
// showHandleAlert.value = false;
// // reset();
// getHandleOrder(form.value.orderId).then((response) => {
// form.value = response.data;
// open.value = true;
// title.value = "查看告警工单";
// });
// });
// }
// });
// };
/** 提交按钮 */
// function submitForm() {
@ -685,25 +686,25 @@ const submitHandleAlert = () => {
// }
/** 删除按钮操作 */
function handleDelete(row) {
const _orderIds = row.orderId || ids.value;
const _orderNumbers = row.orderNumber || orderNumbers.value;
proxy.$modal
.confirm('是否确认删除告警工单编号为"' + _orderNumbers + '"的数据项?')
.then(function () {
return delHandleOrder(_orderIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
})
.catch(() => {});
}
// function handleDelete(row) {
// const _orderIds = row.orderId || ids.value;
// const _orderNumbers = row.orderNumber || orderNumbers.value;
// proxy.$modal
// .confirm('是否确认删除告警工单编号为"' + _orderNumbers + '"的数据项?')
// .then(function () {
// return delHandleOrder(_orderIds);
// })
// .then(() => {
// getList();
// proxy.$modal.msgSuccess("删除成功");
// })
// .catch(() => {});
// }
/** 导出按钮操作 */
function handleExport() {
proxy.download(
"maintenance/order/export",
"maintenance/handle-order/export",
{
...queryParams.value,
},
@ -724,6 +725,25 @@ const loadWorkOptions = (keyword) => {
const handleOpenSelectAlert = () => {
showSelectAlert.value = true;
};
/**
* 提交告警工单审核
* @param row
*/
const handleCommitOrder = (row) => {
const _orderIds = row.orderId || ids.value;
const messageVNode = () => <>是否确认提交审核</>;
ElMessageBox.confirm(messageVNode, "提交审核", {
confirmButtonText: "确定",
cancelButtonText: "取消",
})
.then(() => {
commitHandleOrder(_orderIds).then(() => {
ElMessage.success("提交审核成功");
getList();
});
})
.catch(() => {});
};
const handleConfirmAlertSelect = ({ list, regionId, regionName }) => {
// console.log(data);
form.value.alerts = list;

View File

@ -269,7 +269,7 @@ const handleSelect = (selection, row) => {
(el) => el[props.selectKey] === row[props.selectKey]
) === -1;
if (isIdNotExist) {
console.log(isIdNotExist);
// console.log(isIdNotExist);
selectedProperties.value.push(row);
}
} else {

View File

@ -11,12 +11,17 @@ import {
alertFixResultDict,
alertHandleResultDict,
alertIsReturnFactoryDict,
orderStatusDict,
} from "@/constant/dict";
import DictTag from "@/components/DictTag/index.vue";
import { ElMessage } from "element-plus";
import { cloneDeep } from "lodash-es";
import Review from "@/views/maintenance/order/review.vue";
const { iot_alert_level } = useDict("iot_alert_level");
const showReviewOrder = ref(false);
/*是否显示审核窗口*/
const underReviewOrderId = ref(); /*正在审核的order id*/
const defaultRowKeys = ref([]);
const router = useRouter();
@ -70,7 +75,7 @@ const loadDetail = (orderId) => {
`.alert-handle-info-table .alert-handle-info-row .el-table__expand-column .el-table__expand-icon`
);
response.data?.alerts.forEach((alert, index) => {
console.log(alert.handleResult);
// console.log(alert.handleResult);
const expandEl = expandEls[index];
if (!alert.handleResult) {
if (expandEl) expandEl.style.visibility = "hidden";
@ -82,6 +87,11 @@ const loadDetail = (orderId) => {
});
};
const handleReview = () => {
underReviewOrderId.value = parseInt(route.query.id);
showReviewOrder.value = true;
};
const resetHandleAlertForm = () => {
handleAlertForm.value = {
handleId: null,
@ -152,6 +162,18 @@ if (route.query.id) {
<template>
<div class="app-container">
<el-button
v-if="route.path === '/maintenance/order-detail' && detail.status === '4'"
icon="check"
type="primary"
@click="handleReview"
>审核
</el-button>
<el-alert
v-if="detail.status === '2' || detail.status === '3'"
:type="detail.status === '2' ? 'success' : 'error'"
>{{ orderStatusDict.find((el) => el.value === detail.status)?.label }}
</el-alert>
<el-table
:data="detail.alerts"
:expand-row-keys="defaultRowKeys"
@ -263,6 +285,7 @@ if (route.query.id) {
<template #default="{ row }">
<el-button
v-if="row.handleResult"
:disabled="detail.status === '4'"
icon="edit"
link
type="primary"
@ -271,6 +294,7 @@ if (route.query.id) {
</el-button>
<el-button
v-else
:disabled="detail.status === '4'"
icon="finished"
link
type="primary"
@ -282,7 +306,18 @@ if (route.query.id) {
</el-table-column>
</el-table-column>
</el-table>
<!-- <el-row justify="center" style="margin-top: 12px">-->
<!-- <el-col :span="1.5">-->
<!-- <el-button icon="check" type="primary">审核</el-button>-->
<!-- </el-col>-->
<!-- </el-row>-->
<review
v-model:show="showReviewOrder"
:order-id="underReviewOrderId"
@review="loadDetail(route.query.id)"
/>
<!--告警处理弹窗-->
<el-dialog
v-model="showHandleAlert"
:title="title"
@ -376,4 +411,8 @@ if (route.query.id) {
}
}
}
.alert-handle-info-table {
margin-top: 12px;
}
</style>

View File

@ -24,31 +24,35 @@
:value="option.value"
/>
</el-select>
<!-- <el-input-->
<!-- v-model="queryParams.level"-->
<!-- clearable-->
<!-- placeholder="请输入级别"-->
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
</el-form-item>
<el-form-item label="负责工人" prop="workerId">
<el-select
v-model="queryParams.workerId"
:remote-method="loadWorkOptions"
clearable
filterable
placeholder="请选择负责工人"
remote
remote-show-suffix
>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态">
<el-option
v-for="option in workerOptions"
:key="option.userId"
:label="option.nickName"
:value="option.userId"
v-for="option in orderStatusDict"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="负责工人" prop="workerId">-->
<!-- <el-select-->
<!-- v-model="queryParams.workerId"-->
<!-- :remote-method="loadWorkOptions"-->
<!-- clearable-->
<!-- filterable-->
<!-- placeholder="请选择负责工人"-->
<!-- remote-->
<!-- remote-show-suffix-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="option in workerOptions"-->
<!-- :key="option.userId"-->
<!-- :label="option.nickName"-->
<!-- :value="option.userId"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="建议完成时间" prop="suggestCompleteTime">-->
<!-- <el-date-picker-->
@ -190,6 +194,7 @@
width="220"
>
<template #default="{ row }">
<!--只有状态为待发布会显示-->
<el-button
v-if="row.status === '0'"
icon="share"
@ -198,6 +203,7 @@
@click="handlePublishOrder(row)"
>发布
</el-button>
<!--只有状态为待发布会显示-->
<el-button
v-if="row.status === '0'"
v-hasPermi="['maintenance:order:edit']"
@ -207,15 +213,25 @@
@click="handleUpdate(row)"
>修改
</el-button>
<!--只有状态为非待发布会显示-->
<el-button
v-else
v-hasPermi="['maintenance:order:edit']"
icon="document"
link
type="primary"
@click="handleGoDetail(row.orderId)"
>详情
</el-button>
<!--只有状态为待审核会显示-->
<el-button
v-if="row.status === '4'"
icon="upload"
link
type="primary"
@click="handleReview(row)"
>审核
</el-button>
<!--只有状态为待发布会显示-->
<el-button
v-if="row.status === '0'"
v-hasPermi="['maintenance:order:remove']"
@ -409,6 +425,12 @@
select-key="alertId"
@confirm-select="handleConfirmAlertSelect"
/>
<review
v-model:show="showReviewOrder"
:order-id="underReviewOrderId"
@review="getList()"
/>
</div>
</template>
@ -431,6 +453,7 @@ import { omit } from "lodash-es";
import { ElMessageBox } from "element-plus";
import { useDict } from "@/utils/dict";
import { useRouter } from "vue-router";
import Review from "@/views/maintenance/order/review.vue";
const { proxy } = getCurrentInstance();
@ -446,9 +469,10 @@ const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const showSelectAlert = ref(false);
const showSelectAlert = ref(false); /*是否显示选择告警窗口*/
const showReviewOrder = ref(false); /*是否显示审核窗口*/
const workerOptions = ref([]); /*负责工人选项列表*/
const underReviewOrderId = ref(); /*正在审核的order id*/
const data = reactive({
form: {},
@ -473,9 +497,11 @@ const data = reactive({
{ required: true, message: "请选择建议完成时间", trigger: "change" },
],
},
reviewForm: {},
reviewRules: {},
});
const { queryParams, form, rules } = toRefs(data);
const { queryParams, form, rules, reviewForm, reviewRules } = toRefs(data);
const { iot_alert_level } = useDict("iot_alert_level");
/** 查询告警工单列表 */
@ -562,6 +588,11 @@ const handleGoDetail = (orderId) => {
});
};
const handleReview = (row) => {
underReviewOrderId.value = row.orderId;
showReviewOrder.value = true;
};
/** 提交按钮 */
function submitForm() {
proxy.$refs["orderRef"].validate((valid) => {

View File

@ -0,0 +1,119 @@
<script setup>
import { reactive, ref, toRefs } from "vue";
import { commitExamine } from "@/api/maintenance/order";
import { ElMessage } from "element-plus";
import { orderStatusDict } from "@/constant/dict";
const props = defineProps({
show: {
type: Boolean,
required: true,
},
orderId: {
type: Number,
},
});
const emit = defineEmits(["update:show", "review"]);
const formRef = ref();
const data = reactive({
form: {},
rules: {
status: [
{
required: true,
message: "请选择处理结果",
trigger: "change",
},
],
reason: [
{
required: true,
message: "请输入驳回理由",
trigger: "blur",
},
],
},
});
const { form, rules } = toRefs(data);
/*重置表单*/
const reset = () => {
form.value = {
orderId: null,
status: null,
reason: null,
};
if (formRef.value) {
formRef.value.resetFields();
}
};
/*对话框关闭事件*/
const close = () => {
reset();
emit("update:show", false);
};
/*对话框打开事件*/
const handleOpen = () => {
reset();
form.value = {
orderId: props.orderId,
};
};
const submitForm = () => {
formRef.value.validate((valid) => {
if (valid) {
commitExamine(form.value).then((resp) => {
emit("review");
ElMessage.success(
`${
orderStatusDict.find((el) => el.value === form.value.status)
?.label ?? "已审核"
}`
);
close();
});
}
});
};
</script>
<template>
<!--工单审核窗口-->
<el-dialog
:model-value="props.show"
append-to-body
title="工单审核"
width="500"
@close="close"
@open="handleOpen"
>
<el-form
ref="formRef"
:model="form"
:rules="rules"
label-position="left"
label-width="120"
>
<el-form-item label="是否审核通过" prop="status">
<el-radio-group v-model="form.status">
<el-radio label="2">同意</el-radio>
<el-radio label="3">驳回</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.status === '3'" label="驳回理由" prop="reason">
<el-input v-model="form.reason" placeholder="请输入驳回理由" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="close"> </el-button>
</div>
</template>
</el-dialog>
</template>
<style lang="scss" scoped></style>

View File

@ -461,7 +461,7 @@ const handleProvinceChange = (val) => {
const getProvinceList = () => {
provinceList().then((resp) => {
console.log(resp);
// console.log(resp);
provinceOptions.value = resp.data;
});
};

18
src/views/ttest/index.vue Normal file
View File

@ -0,0 +1,18 @@
<script setup>
import PagedSelect from "@/components/PagedSelect.vue";
import { ref } from "vue";
const value = ref();
</script>
<template>
<PagedSelect
v-model="value"
:prop="{
label: 'alertName',
value: 'alertId',
}"
/>
</template>
<style lang="scss" scoped></style>

View File

@ -31,7 +31,7 @@ export default defineConfig(({ mode, command }) => {
proxy: {
// https://cn.vitejs.dev/config/#server-proxy
"/dev-api": {
target: "http://192.168.1.201:1615",
target: "http://192.168.0.201:1615",
// target: "http://117.72.16.89/api",
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, ""),