import { computed, defineComponent, onMounted, reactive, ref } from "vue";
import { CurdAction, CurdSubAction, CurdCurrentMode } from "@vue-start/pro";
import {
pageEnergyEquNodeCal,
saveEquMtrl,
getEquNodeCalById,
deleteEquNodeCal,
reportBasicMtrlGetPages,
qhGetPage,
} from "@/request/srv-energy";
import { useFetch } from "@vue-start/request";
import { ElDialog } from "element-plus";
export default defineComponent(() => {
const curdRef = ref();
const state = reactive({
realDepartOptions: [
{ label: "是", value: 1 },
{ label: "否", value: 2 }
],
mtrlTypeOption: [
{ label: "生产", value: 1 },
{ label: "外购", value: 2 },
{ label: "消耗", value: 3 },
{ label: "外卖", value: 4 },
],
zzOptions: [],
jzOptions: [],
// 新增:节点弹框相关状态
nodeModalVisible: false, // 弹框显示状态
currentRecord: null // 当前点击的记录
});
const curdState = reactive({
mode: CurdCurrentMode.LIST,
detailData: {
equName: "",
equCode: "",
mtrlName: "",
mtrlTypeName: "",
mtrlUnit: "",
mtrlTypeId: "",
factor: "",
summaryType: "",
calRule: "",
nodes: ""
},
});
// 新增:打开节点弹框
const openNodeModal = (record) => {
console.log("打开节点弹框,当前记录:", record);
state.currentRecord = record; // 保存当前记录
state.nodeModalVisible = true; // 显示弹框
};
// 新增:关闭节点弹框
const closeNodeModal = () => {
state.nodeModalVisible = false; // 隐藏弹框
state.currentRecord = null; // 清空当前记录
};
// 定义所有列配置
const allColumns = [
{
title: "装置名称",
dataIndex: "equName",
valueType: "select",
formItemProps: { required: true },
search: true,
formFieldProps: {
options: state.zzOptions,
labelField: "label",
valueField: "value",
onChange: (value) => {
const selected = state.zzOptions.find(option => option.value === value);
if (selected) {
curdState.detailData.equName = selected.label;
curdState.detailData.equCode = selected.value;
}
}
},
alwaysShow: true
},
{
title: "介质名称",
dataIndex: "mtrlName",
valueType: "select",
formItemProps: { required: true },
search: true,
formFieldProps: {
options: state.jzOptions,
labelField: "label",
valueField: "value",
onChange: (value) => {
const selected = state.jzOptions.find(option => option.value === value);
if (selected) {
curdState.detailData.mtrlName = selected.label;
curdState.detailData.mtrlCode = selected.value;
}
}
},
alwaysShow: true
},
{
title: "介质类型",
dataIndex: "mtrlTypeName",
valueType: "select",
formItemProps: { required: true },
search: true,
formFieldProps: {
options: state.mtrlTypeOption,
labelField: "label",
valueField: "value",
onChange: (value) => {
const selected = state.mtrlTypeOption.find(option => option.value === value);
if (selected) {
curdState.detailData.mtrlTypeName = selected.label;
curdState.detailData.mtrlTypeId = selected.value;
}
}
},
alwaysShow: true
},
{
title: "计量单位",
dataIndex: "mtrlUnit",
formItemProps: { required: true },
search: false,
alwaysShow: true
},
{
title: "计算规则",
dataIndex: "summaryType",
formItemProps: { required: false },
search: false,
showInEditAdd: false
},
{
title: "计算表达式",
dataIndex: "calRule",
formItemProps: { required: false },
search: false,
showInEditAdd: false
},
{
title: "节点信息",
dataIndex: "nodesDisplay",
formItemProps: { required: false },
search: false,
showInEditAdd: false,
customRender: ({ record }) => {
// 点击事件绑定openNodeModal
if (Array.isArray(record.nodes) && record.nodes.length === 0) {
return <span style="color: #1890ff; cursor: pointer;" onClick={() => openNodeModal(record)}>添加节点</span>;
}
if (Array.isArray(record.nodes) && record.nodes.length > 0) {
return <span style="color: #1890ff; cursor: pointer;" onClick={() => openNodeModal(record)}>{record.nodes.map(node => node.nodeName).join(",")}</span>;
}
return <span style="color: #1890ff; cursor: pointer;" onClick={() => openNodeModal(record)}>-</span>;
}
},
{
title: "系数",
dataIndex: "factor",
formItemProps: { required: false },
search: false,
showInEditAdd: false
},
];
const columns = computed(() => {
const isEditOrAdd = [CurdCurrentMode.EDIT, CurdCurrentMode.ADD].includes(curdState.mode);
return allColumns.filter(column => {
if (column.alwaysShow) return true;
if (column.showInEditAdd !== undefined) {
return isEditOrAdd ? column.showInEditAdd : true;
}
return true;
});
});
const searchModel = reactive({});
const operates = [
{
action: CurdAction.LIST,
actor: pageEnergyEquNodeCal,
convertParams: (params) => {
const { mtrlTypeName, ...restParams } = params;
return {
body: {
...restParams,
...(mtrlTypeName !== undefined && { mtrlTypeId: mtrlTypeName }),
pageSize: params.pageSize,
pageNum: params.page,
},
};
},
onSuccess: (response) => {
// 原有逻辑保持不变
const data = response.res?.data?.data;
if (data?.records && Array.isArray(data.records)) {
data.records = data.records.map(item => {
if (Array.isArray(item.nodes)) {
item.nodesDisplay = item.nodes.map(node => node.nodeName).join(",");
} else {
item.nodesDisplay = "-";
}
return item;
});
}
return data;
}
},
{
action: CurdAction.ADD,
actor: saveEquMtrl,
onClick: () => {
curdState.mode = CurdCurrentMode.ADD;
curdState.detailData = {};
},
label: "新增",
show: true,
convertParams: (params) => {
return {
body: {
...params,
...curdState.detailData,
},
};
},
},
{
action: CurdAction.EDIT,
actor: saveEquMtrl,
show: true,
convertParams: (params) => {
return {
body: {
...params,
...curdState.detailData,
},
};
},
},
{
action: CurdAction.DETAIL,
actor: getEquNodeCalById,
convertParams: (params) => {
return {
id: params.cId,
};
},
show: false,
},
{
action: CurdAction.DELETE,
actor: deleteEquNodeCal,
convertParams: (params) => {
return {
cId: params.cId,
};
},
},
];
const listProps = {
searchProps: {
model: searchModel,
},
tableProps: {
serialNumber: true,
operate: {
column: {
width: 300,
},
},
},
};
const handleFinish = (values) => {
if (curdState.mode === CurdCurrentMode.EDIT) {
curdRef.value.sendCurdEvent({
action: CurdAction.EDIT,
type: CurdSubAction.EXECUTE,
values
});
} else {
curdRef.value.sendCurdEvent({
action: CurdAction.ADD,
type: CurdSubAction.EXECUTE,
values
});
}
};
// const { request: fetchJztList } = useFetch(reportBasicMtrlGetPages, {
// onSuccess: (response) => {
// const data = response.res?.data?.data.records;
// if (Array.isArray(data) && data.length > 0) {
// state.jzOptions = data.map(item => ({
// label: item.mtrlName,
// value: item.mtrlCode
// }));
// }
// },
// onError: (error) => {
// console.error("获取介质列表失败:", error);
// }
// });
const { request: fetchZztList } = useFetch(qhGetPage, {
onSuccess: (response) => {
const data = response.res?.data?.data?.records || [];
console.log("装置列表数据:", data);
if (Array.isArray(data) && data.length > 0) {
state.zzOptions = data.map(item => ({
label: item.equName,
value: item.equCode
}));
console.log(state.zzOptions,'state.zzOptions')
} else {
state.zzOptions = [];
}
},
onError: (error) => {
console.error("获取装置列表失败:", error);
}
});
onMounted(() => {
fetchZztList({
body: { pageSize: 100, pageNum: 1 }
});
// fetchJztList({
// body: { pageSize: 100, pageNum: 1 }
// });
});
return () => {
return (
<pro-page>
<pro-modal-curd
ref={curdRef}
columns={columns.value}
operates={operates}
listProps={listProps}
curdState={curdState}
formProps={{
labelWidth: "120px",
onFinish: handleFinish,
}}
modalProps={{ width: 800 }}
>
<pro-curd-list-connect />
<pro-curd-modal-form-connect />
</pro-modal-curd>
{/* 仅调起空弹框 */}
<ElDialog
title="节点信息" // 弹框标题(可自定义)
visible={state.nodeModalVisible} // 绑定显示状态
onClose={closeNodeModal} // 关闭时触发的方法
width="500px" // 弹框宽度(可按需调整)
>
{/* 弹框内部留空(无需内容) */}
</ElDialog>
</pro-page>
);
};
});
{
"code": 0,
"msg": null,
"data": {
"records": [
{
"equCode": "Z4QZ2111",
"equName": "常减压蒸馏装置 ",
"equType": 1,
"equReal": 1,
"departCode": "1001",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:21"
},
{
"equCode": "Z4QZ2112",
"equName": "轻烃回收装置 ",
"equType": 1,
"equReal": 1,
"departCode": "1001",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:21"
},
{
"equCode": "Z4QZ2411",
"equName": "催化裂化装置 ",
"equType": 1,
"equReal": 1,
"departCode": "1001",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:00"
},
{
"equCode": "Z4QZ2611",
"equName": "延迟焦化装置 ",
"equType": 1,
"equReal": 1,
"departCode": "1001",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:21"
},
{
"equCode": "Z4QZ2414",
"equName": "汽油加氢装置 ",
"equType": 1,
"equReal": 1,
"departCode": "1001",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:21"
},
{
"equCode": "Z4QZ2413",
"equName": "产品精制装置 ",
"equType": 1,
"equReal": 1,
"departCode": "1001",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:00"
},
{
"equCode": "Z4QZ2211",
"equName": "重整预加氢装置 ",
"equType": 1,
"equReal": 1,
"departCode": "",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:21"
},
{
"equCode": "Z5QZ2211",
"equName": "连续重整装置 ",
"equType": 1,
"equReal": 1,
"departCode": "1002",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:21"
},
{
"equCode": "Z5QZ2212",
"equName": "芳烃抽提装置 ",
"equType": 2,
"equReal": 1,
"departCode": "1002",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:21"
},
{
"equCode": "Z4QZ2311",
"equName": "煤油加氢装置 ",
"equType": 1,
"equReal": 1,
"departCode": "1002",
"processLine": null,
"equStatus": 1,
"createDate": "2013-07-04 10:15:00"
}
],
"total": 61,
"size": 10,
"current": 1,
"pages": 7
},
"ok": true
}
装置名称下拉列表没有数据 不改变原代码 对代码优化解决一下