Merge branch 'dev' of http://222.212.85.86:8222/bdzl2/bxztApp into dev
This commit is contained in:
commit
b786647378
@ -46,6 +46,11 @@ const routes = [
|
|||||||
name: 'IceEventAdd',
|
name: 'IceEventAdd',
|
||||||
component: () => import('../views/IceEvent/IceEventAdd.vue')
|
component: () => import('../views/IceEvent/IceEventAdd.vue')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/iceEventDetail/:data',
|
||||||
|
name: 'IceEventDetail',
|
||||||
|
component: () => import('../views/IceEvent/IceEventDetails.vue')
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
|
|||||||
@ -663,7 +663,7 @@ const getEquipmentDetailInfo = async () => {
|
|||||||
method: "GET",
|
method: "GET",
|
||||||
});
|
});
|
||||||
if (res.code && res.code === "00000") {
|
if (res.code && res.code === "00000") {
|
||||||
equipmentDetailInfo.value = res.data;
|
equipmentDetailInfo.value = res.data.equipment;
|
||||||
console.log("设备详情", toRaw(equipmentDetailInfo.value));
|
console.log("设备详情", toRaw(equipmentDetailInfo.value));
|
||||||
} else {
|
} else {
|
||||||
throw new Error(res.data.message);
|
throw new Error(res.data.message);
|
||||||
|
|||||||
@ -49,6 +49,7 @@
|
|||||||
v-model="form.event.disasterMileage"
|
v-model="form.event.disasterMileage"
|
||||||
label="受灾里程"
|
label="受灾里程"
|
||||||
center
|
center
|
||||||
|
type="number"
|
||||||
placeholder="请填写"
|
placeholder="请填写"
|
||||||
/>
|
/>
|
||||||
</van-form>
|
</van-form>
|
||||||
@ -101,53 +102,23 @@
|
|||||||
close-on-click-overlay
|
close-on-click-overlay
|
||||||
@close="showExpectPicker = false"
|
@close="showExpectPicker = false"
|
||||||
>
|
>
|
||||||
<van-date-picker
|
<van-picker-group
|
||||||
type="datetime"
|
title="选择日期时间"
|
||||||
:min-date="minDate"
|
:tabs="['选择日期', '选择时间']"
|
||||||
:max-date="maxDate"
|
|
||||||
@confirm="handleConfirmExpectTime"
|
@confirm="handleConfirmExpectTime"
|
||||||
@cancel="showExpectPicker = false"
|
@cancel="showExpectPicker = false"
|
||||||
/>
|
>
|
||||||
|
<van-date-picker
|
||||||
|
v-model="expectDate"
|
||||||
|
:min-date="minDate"
|
||||||
|
:max-date="maxDate"
|
||||||
|
/>
|
||||||
|
<van-time-picker v-model="expectTime" />
|
||||||
|
</van-picker-group>
|
||||||
</van-popup>
|
</van-popup>
|
||||||
</van-form>
|
</van-form>
|
||||||
<h3>实施情况</h3>
|
<h3>实施情况</h3>
|
||||||
<van-form class="IceEventAddForm" label-align="left" colon>
|
<van-form class="IceEventAddForm" label-align="left" colon>
|
||||||
<van-field
|
|
||||||
v-model="form.material.snowMeltingAgent"
|
|
||||||
type="number"
|
|
||||||
label="融雪剂"
|
|
||||||
center
|
|
||||||
placeholder="请填写"
|
|
||||||
>
|
|
||||||
<template #extra> 吨 </template>
|
|
||||||
</van-field>
|
|
||||||
<van-field
|
|
||||||
v-model="form.material.antiSlipSand"
|
|
||||||
type="number"
|
|
||||||
label="防滑沙"
|
|
||||||
center
|
|
||||||
placeholder="请填写"
|
|
||||||
>
|
|
||||||
<template #extra> 吨 </template>
|
|
||||||
</van-field>
|
|
||||||
<van-field
|
|
||||||
v-model="form.material.antiSlipChains"
|
|
||||||
type="number"
|
|
||||||
label="防滑链"
|
|
||||||
center
|
|
||||||
placeholder="请填写"
|
|
||||||
>
|
|
||||||
<template #extra> 副 </template>
|
|
||||||
</van-field>
|
|
||||||
<van-field
|
|
||||||
v-model="form.material.sandbags"
|
|
||||||
type="number"
|
|
||||||
label="麻袋"
|
|
||||||
center
|
|
||||||
placeholder="请填写"
|
|
||||||
>
|
|
||||||
<template #extra> 条 </template>
|
|
||||||
</van-field>
|
|
||||||
<van-field
|
<van-field
|
||||||
v-model="form.material.inputManpower"
|
v-model="form.material.inputManpower"
|
||||||
type="number"
|
type="number"
|
||||||
@ -175,6 +146,102 @@
|
|||||||
>
|
>
|
||||||
<template #extra> 台班 </template>
|
<template #extra> 台班 </template>
|
||||||
</van-field>
|
</van-field>
|
||||||
|
|
||||||
|
<!-- 选择物资列表 -->
|
||||||
|
<van-field
|
||||||
|
v-for="(material, index) in form.yhzMaterialList"
|
||||||
|
:key="material.rid"
|
||||||
|
v-model="material.usageAmount"
|
||||||
|
type="number"
|
||||||
|
:label="material.wzmc"
|
||||||
|
center
|
||||||
|
placeholder="请输入数量"
|
||||||
|
>
|
||||||
|
<template #extra>
|
||||||
|
<span style="margin-right: 10px">{{ material.dw }}</span>
|
||||||
|
<van-button
|
||||||
|
size="small"
|
||||||
|
type="danger"
|
||||||
|
@click.stop="form.yhzMaterialList.splice(index, 1)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</van-button>
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
|
||||||
|
<van-button
|
||||||
|
class="add-wzbtn"
|
||||||
|
type="primary"
|
||||||
|
icon="plus"
|
||||||
|
plain
|
||||||
|
@click="handleOpenAddMaterial"
|
||||||
|
>添加物资
|
||||||
|
</van-button>
|
||||||
|
<van-popup
|
||||||
|
:show="showAddMaterialPopup"
|
||||||
|
position="bottom"
|
||||||
|
close-on-click-overlay
|
||||||
|
@close="showAddMaterialPopup = false"
|
||||||
|
>
|
||||||
|
<div style="padding: 16px">
|
||||||
|
<h3 style="text-align: center; margin-bottom: 16px">添加物资</h3>
|
||||||
|
|
||||||
|
<!-- 搜索框 -->
|
||||||
|
<van-field
|
||||||
|
v-model="searchText"
|
||||||
|
placeholder="输入物资名称搜索"
|
||||||
|
clearable
|
||||||
|
@update:model-value="handleSearch"
|
||||||
|
>
|
||||||
|
</van-field>
|
||||||
|
|
||||||
|
<van-checkbox-group v-model="checked">
|
||||||
|
<van-cell-group inset style="margin: 16px 0">
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 8px 16px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<span>共 {{ materialList.length }} 项</span>
|
||||||
|
<van-button
|
||||||
|
size="mini"
|
||||||
|
@click="toggleSelectAll"
|
||||||
|
:type="isAllSelected ? 'primary' : 'default'"
|
||||||
|
>
|
||||||
|
{{ isAllSelected ? "取消全选" : "全选" }}
|
||||||
|
</van-button>
|
||||||
|
</div>
|
||||||
|
<van-cell
|
||||||
|
v-for="(item, index) in materialList"
|
||||||
|
clickable
|
||||||
|
:key="item.rid"
|
||||||
|
:title="item.wzmc"
|
||||||
|
@click="toggle(index)"
|
||||||
|
>
|
||||||
|
<template #right-icon>
|
||||||
|
<van-checkbox
|
||||||
|
:name="item.rid"
|
||||||
|
:ref="(el) => (checkboxRefs[index] = el)"
|
||||||
|
@click.stop
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</van-cell>
|
||||||
|
</van-cell-group>
|
||||||
|
</van-checkbox-group>
|
||||||
|
|
||||||
|
<van-button
|
||||||
|
type="primary"
|
||||||
|
block
|
||||||
|
@click="addSelectedMaterials"
|
||||||
|
style="margin-top: 10px"
|
||||||
|
>
|
||||||
|
确认添加
|
||||||
|
</van-button>
|
||||||
|
</div>
|
||||||
|
</van-popup>
|
||||||
|
|
||||||
<van-field label="当前通行情况" center>
|
<van-field label="当前通行情况" center>
|
||||||
<template #input>
|
<template #input>
|
||||||
<div class="disposal-buttons">
|
<div class="disposal-buttons">
|
||||||
@ -225,7 +292,10 @@
|
|||||||
form.traffic.hasStrandedVehicles === 0 ? 'primary' : 'default'
|
form.traffic.hasStrandedVehicles === 0 ? 'primary' : 'default'
|
||||||
"
|
"
|
||||||
size="small"
|
size="small"
|
||||||
@click="form.traffic.hasStrandedVehicles = 0"
|
@click="
|
||||||
|
form.traffic.hasStrandedVehicles = 0;
|
||||||
|
form.traffic.strandedVehicleCount = null;
|
||||||
|
"
|
||||||
class="last-button"
|
class="last-button"
|
||||||
>
|
>
|
||||||
无滞留
|
无滞留
|
||||||
@ -234,6 +304,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</van-field>
|
</van-field>
|
||||||
<van-field
|
<van-field
|
||||||
|
v-if="form.traffic.hasStrandedVehicles === 1"
|
||||||
v-model="form.traffic.strandedVehicleCount"
|
v-model="form.traffic.strandedVehicleCount"
|
||||||
type="number"
|
type="number"
|
||||||
label="滞留车辆数"
|
label="滞留车辆数"
|
||||||
@ -257,13 +328,19 @@
|
|||||||
close-on-click-overlay
|
close-on-click-overlay
|
||||||
@close="showActualPicker = false"
|
@close="showActualPicker = false"
|
||||||
>
|
>
|
||||||
<van-date-picker
|
<van-picker-group
|
||||||
type="datetime"
|
title="选择日期时间"
|
||||||
:min-date="minDate"
|
:tabs="['选择日期', '选择时间']"
|
||||||
:max-date="maxDate"
|
|
||||||
@confirm="handleConfirmActualTime"
|
@confirm="handleConfirmActualTime"
|
||||||
@cancel="showActualPicker = false"
|
@cancel="showActualPicker = false"
|
||||||
/>
|
>
|
||||||
|
<van-date-picker
|
||||||
|
v-model="actualDate"
|
||||||
|
:min-date="minDate"
|
||||||
|
:max-date="maxDate"
|
||||||
|
/>
|
||||||
|
<van-time-picker v-model="actualTime" />
|
||||||
|
</van-picker-group>
|
||||||
</van-popup>
|
</van-popup>
|
||||||
|
|
||||||
<van-field label="附件" center>
|
<van-field label="附件" center>
|
||||||
@ -292,13 +369,14 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import "vant/es/toast/style";
|
import "vant/es/toast/style";
|
||||||
import "vant/es/popup/style";
|
import "vant/es/popup/style";
|
||||||
import { ref, onMounted, reactive, toRaw, watch } from "vue";
|
import { ref, onMounted, reactive, toRaw, watch, computed } from "vue";
|
||||||
import { useRouter, useRoute } from "vue-router";
|
import { useRouter, useRoute } from "vue-router";
|
||||||
import { showToast, showLoadingToast } from "vant";
|
import { showToast, showLoadingToast } from "vant";
|
||||||
import { request } from "../../../../shared/utils/request";
|
import { request } from "../../../../shared/utils/request";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
// 组件挂载时获取数据
|
||||||
const yhzDetail = ref({}); // 养护站详情数据
|
const yhzDetail = ref({}); // 养护站详情数据
|
||||||
const INIT_FORM = reactive({
|
const INIT_FORM = reactive({
|
||||||
event: {
|
event: {
|
||||||
@ -323,10 +401,6 @@ const INIT_FORM = reactive({
|
|||||||
inputManpower: null, // 投入人力
|
inputManpower: null, // 投入人力
|
||||||
inputFunds: null, // 投入资金
|
inputFunds: null, // 投入资金
|
||||||
inputEquipment: null, // 投入设备
|
inputEquipment: null, // 投入设备
|
||||||
snowMeltingAgent: null, // 融雪剂
|
|
||||||
sandbags: null, // 麻袋
|
|
||||||
antiSlipSand: null, // 防滑沙
|
|
||||||
antiSlipChains: null, // 防滑链
|
|
||||||
createTime: "", // 创建时间
|
createTime: "", // 创建时间
|
||||||
updateTime: "", // 更新时间
|
updateTime: "", // 更新时间
|
||||||
},
|
},
|
||||||
@ -338,6 +412,7 @@ const INIT_FORM = reactive({
|
|||||||
createTime: "", // 创建时间
|
createTime: "", // 创建时间
|
||||||
updateTime: "", // 更新时间
|
updateTime: "", // 更新时间
|
||||||
},
|
},
|
||||||
|
yhzMaterialList: [], // 养护站物资列表
|
||||||
photos: [],
|
photos: [],
|
||||||
});
|
});
|
||||||
const form = reactive({ ...INIT_FORM });
|
const form = reactive({ ...INIT_FORM });
|
||||||
@ -379,25 +454,187 @@ const onClickLeft = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleAdd = () => {
|
// 添加物资相关
|
||||||
console.log("form", toRaw(form));
|
const showAddMaterialPopup = ref(false);
|
||||||
|
const materialList = ref([]);
|
||||||
|
const checkboxRefs = ref([]);
|
||||||
|
const checked = ref([]);
|
||||||
|
const toggle = (index) => {
|
||||||
|
checkboxRefs.value[index].toggle();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const searchText = ref("");
|
||||||
|
const handleSearch = () => {
|
||||||
|
getMaterialList(searchText.value);
|
||||||
|
};
|
||||||
|
// 全选功能
|
||||||
|
const toggleSelectAll = () => {
|
||||||
|
if (isAllSelected.value) {
|
||||||
|
checked.value = [];
|
||||||
|
} else {
|
||||||
|
checked.value = materialList.value.map((item) => item.rid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// 计算是否全选
|
||||||
|
const isAllSelected = computed(() => {
|
||||||
|
return (
|
||||||
|
materialList.value.length > 0 &&
|
||||||
|
materialList.value.every((item) => checked.value.includes(item.rid))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 添加物资到表单
|
||||||
|
const addSelectedMaterials = () => {
|
||||||
|
checked.value.forEach((rid) => {
|
||||||
|
const material = materialList.value.find((m) => m.rid === rid);
|
||||||
|
if (material && !form.yhzMaterialList.some((m) => m.rid === rid)) {
|
||||||
|
form.yhzMaterialList.push({
|
||||||
|
rid: rid,
|
||||||
|
wzmc: material.wzmc,
|
||||||
|
usageAmount: null,
|
||||||
|
dw: material.dw,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
showAddMaterialPopup.value = false;
|
||||||
|
checked.value = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
// 查询物资列表
|
||||||
|
const getMaterialList = async (wzmc) => {
|
||||||
|
try {
|
||||||
|
const data = {
|
||||||
|
yhzid: yhzDetail.value.id,
|
||||||
|
wzmc,
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 9999,
|
||||||
|
};
|
||||||
|
const res = await request({
|
||||||
|
url: "/snow-ops-platform/yjwz/list",
|
||||||
|
method: "GET",
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
if (res.code === "00000") {
|
||||||
|
materialList.value = res.data.records;
|
||||||
|
} else {
|
||||||
|
throw new Error(res.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
showToast({
|
||||||
|
type: "fail",
|
||||||
|
message: error.message,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 打开添加物资弹窗
|
||||||
|
const handleOpenAddMaterial = async () => {
|
||||||
|
await getMaterialList();
|
||||||
|
showAddMaterialPopup.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleAdd = async () => {
|
||||||
|
try {
|
||||||
|
const toast = showLoadingToast({
|
||||||
|
message: "上报中...",
|
||||||
|
forbidClick: true,
|
||||||
|
duration: 0, // 设置为0表示不会自动关闭
|
||||||
|
});
|
||||||
|
form.event.serviceStationId = yhzDetail.value.id;
|
||||||
|
form.event.district = yhzDetail.value.qxmc;
|
||||||
|
console.log("yhzDetail", toRaw(yhzDetail.value));
|
||||||
|
console.log("form", toRaw(form));
|
||||||
|
const res = await request({
|
||||||
|
url: "/snow-ops-platform/event/add",
|
||||||
|
method: "POST",
|
||||||
|
data: form,
|
||||||
|
});
|
||||||
|
if (res.code === "00000") {
|
||||||
|
toast.close();
|
||||||
|
showToast({
|
||||||
|
type: "success",
|
||||||
|
message: "上报成功",
|
||||||
|
});
|
||||||
|
router.push({
|
||||||
|
name: "IceEventManage",
|
||||||
|
params: { data: encodeURIComponent(JSON.stringify(yhzDetail.value)) },
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
throw new Error(res.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
toast.close();
|
||||||
|
showToast({
|
||||||
|
type: "fail",
|
||||||
|
message: error.message,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const expectDate = ref([]);
|
||||||
|
const expectTime = ref([]);
|
||||||
|
const actualDate = ref([]);
|
||||||
|
const actualTime = ref([]);
|
||||||
|
|
||||||
// 预计恢复时间相关
|
// 预计恢复时间相关
|
||||||
const showExpectPicker = ref(false);
|
const showExpectPicker = ref(false);
|
||||||
const minDate = new Date();
|
const minDate = new Date();
|
||||||
const maxDate = new Date(2050, 11, 31);
|
const maxDate = new Date(2050, 11, 31);
|
||||||
const handleConfirmExpectTime = ({ selectedValues }) => {
|
const handleConfirmExpectTime = () => {
|
||||||
form.event.expectRecoverTime = selectedValues.join("-");
|
const [year, month, day] = expectDate.value;
|
||||||
|
const [hour, minute] = expectTime.value;
|
||||||
|
form.event.expectRecoverTime = `${year}-${month.padStart(
|
||||||
|
2,
|
||||||
|
"0"
|
||||||
|
)}-${day.padStart(2, "0")} ${hour.padStart(2, "0")}:${minute.padStart(
|
||||||
|
2,
|
||||||
|
"0"
|
||||||
|
)}:00`;
|
||||||
showExpectPicker.value = false;
|
showExpectPicker.value = false;
|
||||||
};
|
};
|
||||||
// 实际恢复时间相关
|
// 实际恢复时间相关
|
||||||
const showActualPicker = ref(false);
|
const showActualPicker = ref(false);
|
||||||
const handleConfirmActualTime = ({ selectedValues }) => {
|
const handleConfirmActualTime = () => {
|
||||||
form.traffic.actualRecoverTime = selectedValues.join("-");
|
const [year, month, day] = actualDate.value;
|
||||||
|
const [hour, minute] = actualTime.value;
|
||||||
|
form.traffic.actualRecoverTime = `${year}-${month.padStart(
|
||||||
|
2,
|
||||||
|
"0"
|
||||||
|
)}-${day.padStart(2, "0")} ${hour.padStart(2, "0")}:${minute.padStart(
|
||||||
|
2,
|
||||||
|
"0"
|
||||||
|
)}:00`;
|
||||||
showActualPicker.value = false;
|
showActualPicker.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 在打开选择器时设置初始值
|
||||||
|
watch(showExpectPicker, (val) => {
|
||||||
|
if (val) {
|
||||||
|
const current = form.event.expectRecoverTime
|
||||||
|
? new Date(form.event.expectRecoverTime)
|
||||||
|
: new Date();
|
||||||
|
expectDate.value = [
|
||||||
|
current.getFullYear(),
|
||||||
|
current.getMonth() + 1,
|
||||||
|
current.getDate(),
|
||||||
|
];
|
||||||
|
expectTime.value = [current.getHours(), current.getMinutes()];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
watch(showActualPicker, (val) => {
|
||||||
|
if (val) {
|
||||||
|
const current = form.traffic.actualRecoverTime
|
||||||
|
? new Date(form.traffic.actualRecoverTime)
|
||||||
|
: new Date();
|
||||||
|
actualDate.value = [
|
||||||
|
current.getFullYear(),
|
||||||
|
current.getMonth() + 1,
|
||||||
|
current.getDate(),
|
||||||
|
];
|
||||||
|
actualTime.value = [current.getHours(), current.getMinutes()];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// 文件上传
|
// 文件上传
|
||||||
const afterRead = async (file) => {
|
const afterRead = async (file) => {
|
||||||
try {
|
try {
|
||||||
@ -460,6 +697,11 @@ const handleDelete = (file) => {
|
|||||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.add-wzbtn {
|
||||||
|
width: calc(100% - 32px);
|
||||||
|
margin: 10px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
.add-btn {
|
.add-btn {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 20px;
|
bottom: 20px;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="home">
|
<div class="home">
|
||||||
<van-nav-bar title="物资管理" fixed left-arrow @click-left="onClickLeft" />
|
<van-nav-bar title="冰雪灾害" fixed left-arrow @click-left="onClickLeft" />
|
||||||
|
|
||||||
<van-cell-group>
|
<van-cell-group>
|
||||||
<van-cell title="当前站点" :value="yhzDetail.mc" />
|
<van-cell title="当前站点" :value="yhzDetail.mc" />
|
||||||
@ -9,19 +9,36 @@
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
<van-cell-group>
|
<van-cell-group>
|
||||||
<van-cell
|
<van-cell
|
||||||
title="物资信息"
|
title="基本信息"
|
||||||
style="font-size: 18px; font-weight: bold; line-height: inherit"
|
style="font-size: 18px; font-weight: bold; line-height: inherit"
|
||||||
>
|
>
|
||||||
</van-cell>
|
</van-cell>
|
||||||
<van-cell :title="'物资名称: ' + wzDetailData.wzmc"> </van-cell>
|
<van-cell :title="'发生时间: ' + eventDetailData?.event?.occurTime"> </van-cell>
|
||||||
<van-cell :title="'数量: ' + wzDetailData.sl"> </van-cell>
|
<van-cell :title="'发生地点: ' + eventDetailData?.event?.occurLocation"> </van-cell>
|
||||||
<van-cell :title="'余量: ' + wzDetailData.ye"> </van-cell>
|
<van-cell :title="'起点桩号: ' + eventDetailData?.event?.startStakeNo"> </van-cell>
|
||||||
<van-cell :title="'单位: ' + wzDetailData.dw"> </van-cell>
|
<van-cell :title="'止点桩号: ' + eventDetailData?.event?.endStakeNo"> </van-cell>
|
||||||
<van-cell :title="'存放地点: ' + wzDetailData.cfdd"> </van-cell>
|
<van-cell :title="'受灾里程: ' + eventDetailData?.event?.disasterMileage"> </van-cell>
|
||||||
<van-cell :title="'区县名称: ' + wzDetailData.qxmc"> </van-cell>
|
<van-cell :title="'填报人: ' + eventDetailData?.event?.reporterName"> </van-cell>
|
||||||
<van-cell :title="'负责人: ' + wzDetailData.fzr"> </van-cell>
|
<van-cell :title="'填报时间: ' + eventDetailData?.event?.reportTime"> </van-cell>
|
||||||
<van-cell :title="'联系电话: ' + wzDetailData.lxdh"> </van-cell>
|
</van-cell-group>
|
||||||
<van-cell :title="'入库日期: ' + wzDetailData.rkrq"> </van-cell>
|
<van-cell-group>
|
||||||
|
<van-cell
|
||||||
|
title="处置情况"
|
||||||
|
style="font-size: 18px; font-weight: bold; line-height: inherit"
|
||||||
|
>
|
||||||
|
</van-cell>
|
||||||
|
<van-cell :title="'处置措施: ' + eventDetailData?.event?.disposalMeasures"> </van-cell>
|
||||||
|
<van-cell :title="'预计恢复时间: ' + eventDetailData?.event?.expectRecoverTime"> </van-cell>
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-cell
|
||||||
|
title="实施情况"
|
||||||
|
style="font-size: 18px; font-weight: bold; line-height: inherit"
|
||||||
|
>
|
||||||
|
</van-cell>
|
||||||
|
<van-cell :title="'投入人力: ' + eventDetailData?.material?.inputManpower"> </van-cell>
|
||||||
|
<van-cell :title="'投入资金: ' + eventDetailData?.material?.inputFunds"> </van-cell>
|
||||||
|
<van-cell :title="'投入设备: ' + eventDetailData?.material?.inputEquipment"> </van-cell>
|
||||||
</van-cell-group>
|
</van-cell-group>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -39,41 +56,39 @@ const router = useRouter();
|
|||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|
||||||
const yhzDetail = ref({});
|
const yhzDetail = ref({});
|
||||||
const wzData = ref([]);
|
const event = ref();
|
||||||
const wzDetailData = ref({}); // 物资详情数据
|
const eventDetailData = ref({}); // 冰雪事件详情数据
|
||||||
|
|
||||||
onMounted(() => {
|
// 获取冰雪事件详情数据
|
||||||
const data = JSON.parse(decodeURIComponent(route.params.data));
|
const getEventDetailData = async () => {
|
||||||
yhzDetail.value = data.yhzDetail;
|
|
||||||
wzData.value = data.material;
|
|
||||||
console.log("传递过来的参数:", data);
|
|
||||||
getwzDetail();
|
|
||||||
});
|
|
||||||
|
|
||||||
// 获取物资详情
|
|
||||||
const getwzDetail = async () => {
|
|
||||||
try {
|
try {
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: `/snow-ops-platform/yjwz/getById?rid=${wzData.value.rid}`,
|
url: `/snow-ops-platform/event/getById?id=${event.value.id}`,
|
||||||
method: "GET",
|
method: "GET",
|
||||||
});
|
});
|
||||||
if (res.code && res.code === "00000") {
|
if (res.code === "00000") {
|
||||||
wzDetailData.value = res.data;
|
eventDetailData.value = res.data;
|
||||||
} else {
|
} else {
|
||||||
throw new Error(res.message);
|
throw new Error(res.message);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
showToast({
|
showToast({
|
||||||
message: error.message,
|
message: error.message,
|
||||||
type: "error",
|
type: "fail",
|
||||||
});
|
});
|
||||||
console.log("error", error);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
const data = JSON.parse(decodeURIComponent(route.params.data));
|
||||||
|
yhzDetail.value = data.yhzDetail;
|
||||||
|
event.value = data.event;
|
||||||
|
getEventDetailData();
|
||||||
|
});
|
||||||
|
|
||||||
const onClickLeft = () => {
|
const onClickLeft = () => {
|
||||||
router.push({
|
router.push({
|
||||||
name: "MaterialManage",
|
name: "IceEventManage",
|
||||||
params: { data: encodeURIComponent(JSON.stringify(yhzDetail.value)) },
|
params: { data: encodeURIComponent(JSON.stringify(yhzDetail.value)) },
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@ -16,17 +16,19 @@
|
|||||||
<van-cell-group>
|
<van-cell-group>
|
||||||
<van-cell
|
<van-cell
|
||||||
v-for="(item, index) in eventList"
|
v-for="(item, index) in eventList"
|
||||||
|
center
|
||||||
:key="index"
|
:key="index"
|
||||||
:title="item.wzmc"
|
:title="item.occurLocation"
|
||||||
is-link
|
is-link
|
||||||
:label="`填报时间:${item.sl} (${item.dw})`"
|
:label="`填报时间:${item.reportTime}`"
|
||||||
|
:value="`填报人:${item.reporterName}`"
|
||||||
:to="{
|
:to="{
|
||||||
name: 'MaterialDetail',
|
name: 'IceEventDetail',
|
||||||
params: {
|
params: {
|
||||||
data: encodeURIComponent(
|
data: encodeURIComponent(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
yhzDetail: yhzDetail,
|
yhzDetail: yhzDetail,
|
||||||
material: item,
|
event: item,
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
|||||||
@ -58,7 +58,7 @@ const getwzDetail = async () => {
|
|||||||
method: "GET",
|
method: "GET",
|
||||||
});
|
});
|
||||||
if (res.code && res.code === "00000") {
|
if (res.code && res.code === "00000") {
|
||||||
wzDetailData.value = res.data;
|
wzDetailData.value = res.data.material;
|
||||||
} else {
|
} else {
|
||||||
throw new Error(res.message);
|
throw new Error(res.message);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue";
|
import { h, ref, onMounted, reactive, watch, toRaw, nextTick, onUnmounted } from "vue";
|
||||||
import { request } from "@/utils/request";
|
import { request } from "@/utils/request";
|
||||||
import { Search } from "@element-plus/icons-vue";
|
import { Search } from "@element-plus/icons-vue";
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
@ -29,7 +29,6 @@ const getMenuList = async () => {
|
|||||||
export default () => {
|
export default () => {
|
||||||
|
|
||||||
// 点击菜单处理
|
// 点击菜单处理
|
||||||
const router = useRouter();
|
|
||||||
const handleMenuClick = (menu) => {
|
const handleMenuClick = (menu) => {
|
||||||
console.log('menu', menu)
|
console.log('menu', menu)
|
||||||
if (menu.path) {
|
if (menu.path) {
|
||||||
@ -39,18 +38,31 @@ export default () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(async () => {
|
const router = useRouter();
|
||||||
await getMenuList();
|
const tokenRef = ref(localStorage.getItem('token'));
|
||||||
const firstMenuItem = menuList.value[0]?.children?.[0];
|
watch(tokenRef, async (newVal) => {
|
||||||
if (firstMenuItem) {
|
if (newVal) {
|
||||||
handleMenuClick(firstMenuItem);
|
await getMenuList();
|
||||||
|
const firstMenuItem = menuList.value[0]?.children?.[0];
|
||||||
|
if (firstMenuItem) {
|
||||||
|
handleMenuClick(firstMenuItem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
}, { immediate: true });
|
||||||
|
const handleStorageChange = (e) => {
|
||||||
|
if (e.key === 'token') {
|
||||||
|
tokenRef.value = e.newValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
onMounted(() => {
|
||||||
|
window.addEventListener('storage', handleStorageChange);
|
||||||
|
});
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('storage', handleStorageChange);
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
menuList,
|
menuList,
|
||||||
handleMenuClick,
|
handleMenuClick,
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -27,11 +27,6 @@ const routes = [
|
|||||||
name: 'yhzwz',
|
name: 'yhzwz',
|
||||||
component: () => import('../views/MaterialManagement/index.vue')
|
component: () => import('../views/MaterialManagement/index.vue')
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/yhzry/:data?',
|
|
||||||
name: 'yhzry',
|
|
||||||
component: () => import('../views/PersonManagement/index.vue')
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/yhzevent',
|
path: '/yhzevent',
|
||||||
name: 'yhzevent',
|
name: 'yhzevent',
|
||||||
|
|||||||
@ -7,9 +7,7 @@ const service = axios.create({
|
|||||||
|
|
||||||
// 请求拦截器
|
// 请求拦截器
|
||||||
service.interceptors.request.use(config => {
|
service.interceptors.request.use(config => {
|
||||||
// 暂时先写死token 实际项目中再调整token的获取位置
|
const token = localStorage.getItem('token');
|
||||||
const token = 'eyJhbGciOiJIUzUxMiJ9.eyJ1c2VySWQiOjE5ODY2ODgzMjY1MjAwNTc4NTcsImFjY291bnQiOiJieHp0IiwidXVpZCI6ImMyY2E5OGU4LTIyYzItNGZmZi1hZWE0LTBiNWNiZmE4YjNlMSIsInJlbWVtYmVyTWUiOnRydWUsImV4cGlyYXRpb25EYXRlIjoxNzYyNzgzOTkwMzUxLCJvdGhlcnMiOm51bGwsInN1YiI6IjE5ODY2ODgzMjY1MjAwNTc4NTciLCJpYXQiOjE3NjI3NTUxOTAsImV4cCI6MTc2Mjc4Mzk5MH0.zqQcAE08fr2jQd7HcQ9Y3i-gWb2TrCWuUxSzl1kXOoJe2rp1Yly0ffrY6_1jY0ybHJwihONChqiSc-8jRTKYKw'
|
|
||||||
// const token = localStorage.getItem('token');
|
|
||||||
if (token) {
|
if (token) {
|
||||||
config.headers.Authorization = `${token}`;
|
config.headers.Authorization = `${token}`;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,7 +53,11 @@
|
|||||||
<el-input v-model="form.sbxh" />
|
<el-input v-model="form.sbxh" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备状态:">
|
<el-form-item label="设备状态:">
|
||||||
<el-input v-model="form.sbzt" />
|
<el-select v-model="form.sbzt" placeholder="请选择" clearable>
|
||||||
|
<el-option label="完好" value="完好" />
|
||||||
|
<el-option label="损坏" value="损坏" />
|
||||||
|
<el-option label="报废" value="报废" />
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="生产厂家:">
|
<el-form-item label="生产厂家:">
|
||||||
<el-input v-model="form.sccj" />
|
<el-input v-model="form.sccj" />
|
||||||
|
|||||||
@ -8,60 +8,60 @@
|
|||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="操作员:">
|
<el-form-item label="操作员:">
|
||||||
<el-input disabled v-model="detailData.equipment.czy" />
|
<el-input disabled v-model="detailData.czy" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="辐射范围:">
|
<el-form-item label="辐射范围:">
|
||||||
<el-input disabled v-model="detailData.equipment.fsfw" />
|
<el-input disabled v-model="detailData.fsfw" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="管理人员:">
|
<el-form-item label="管理人员:">
|
||||||
<el-input disabled v-model="detailData.equipment.glry" />
|
<el-input disabled v-model="detailData.glry" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="购买费用(万元):">
|
<el-form-item label="购买费用(万元):">
|
||||||
<el-input disabled v-model="detailData.equipment.gmfy" />
|
<el-input disabled v-model="detailData.gmfy" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="购置日期:">
|
<el-form-item label="购置日期:">
|
||||||
<el-input disabled v-model="detailData.equipment.gzrq" />
|
<el-input disabled v-model="detailData.gzrq" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="区县名称:">
|
<el-form-item label="区县名称:">
|
||||||
<el-input disabled v-model="detailData.equipment.qxmc" />
|
<el-input disabled v-model="detailData.qxmc" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备编号:">
|
<el-form-item label="设备编号:">
|
||||||
<el-input disabled v-model="detailData.equipment.sbbh" />
|
<el-input disabled v-model="detailData.sbbh" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备大类:">
|
<el-form-item label="设备大类:">
|
||||||
<el-input disabled v-model="detailData.equipment.sbdl" />
|
<el-input disabled v-model="detailData.sbdl" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备小类:">
|
<el-form-item label="设备小类:">
|
||||||
<el-input disabled v-model="detailData.equipment.sbxl" />
|
<el-input disabled v-model="detailData.sbxl" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="设备名称:">
|
<el-form-item label="设备名称:">
|
||||||
<el-input disabled v-model="detailData.equipment.sbmc" />
|
<el-input disabled v-model="detailData.sbmc" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备位置:">
|
<el-form-item label="设备位置:">
|
||||||
<el-input disabled v-model="detailData.equipment.sbwz" />
|
<el-input disabled v-model="detailData.sbwz" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备经度:">
|
<el-form-item label="设备经度:">
|
||||||
<el-input disabled v-model="detailData.equipment.jd" />
|
<el-input disabled v-model="detailData.jd" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备纬度:">
|
<el-form-item label="设备纬度:">
|
||||||
<el-input disabled v-model="detailData.equipment.wd" />
|
<el-input disabled v-model="detailData.wd" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备型号:">
|
<el-form-item label="设备型号:">
|
||||||
<el-input disabled v-model="detailData.equipment.sbxh" />
|
<el-input disabled v-model="detailData.sbxh" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备状态:">
|
<el-form-item label="设备状态:">
|
||||||
<el-input disabled v-model="detailData.equipmentsbzt" />
|
<el-input disabled v-model="detailData.sbzt" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="生产厂家:">
|
<el-form-item label="生产厂家:">
|
||||||
<el-input disabled v-model="detailData.equipment.sccj" />
|
<el-input disabled v-model="detailData.sccj" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否应急设备:">
|
<el-form-item label="是否应急设备:">
|
||||||
<el-input disabled v-model="detailData.equipment.sfyjsb" />
|
<el-input disabled v-model="detailData.sfyjsb" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否纳入市级补助范围:">
|
<el-form-item label="是否纳入市级补助范围:">
|
||||||
<el-input disabled v-model="detailData.equipment.sfnrsjbz" />
|
<el-input disabled v-model="detailData.sfnrsjbz" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|||||||
@ -53,7 +53,11 @@
|
|||||||
<el-input v-model="form.sbxh" />
|
<el-input v-model="form.sbxh" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备状态:">
|
<el-form-item label="设备状态:">
|
||||||
<el-input v-model="form.sbzt" />
|
<el-select v-model="form.sbzt" placeholder="请选择" clearable>
|
||||||
|
<el-option label="完好" value="完好" />
|
||||||
|
<el-option label="损坏" value="损坏" />
|
||||||
|
<el-option label="报废" value="报废" />
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="生产厂家:">
|
<el-form-item label="生产厂家:">
|
||||||
<el-input v-model="form.sccj" />
|
<el-input v-model="form.sccj" />
|
||||||
|
|||||||
@ -320,7 +320,7 @@ const getDetailData = async (row) => {
|
|||||||
model.title = `设备详情`;
|
model.title = `设备详情`;
|
||||||
model.content = DetailDialog;
|
model.content = DetailDialog;
|
||||||
model.props = {
|
model.props = {
|
||||||
detailData: res.data,
|
detailData: res.data.equipment,
|
||||||
};
|
};
|
||||||
model.onCancel = () => {
|
model.onCancel = () => {
|
||||||
dialogType.value = '';
|
dialogType.value = '';
|
||||||
@ -335,9 +335,9 @@ const getDetailData = async (row) => {
|
|||||||
if (dialogType.value === 'edit') {
|
if (dialogType.value === 'edit') {
|
||||||
model.title = `编辑设备`;
|
model.title = `编辑设备`;
|
||||||
model.content = EditDialog;
|
model.content = EditDialog;
|
||||||
Object.assign(form, res.data);
|
Object.assign(form, res.data.equipment);
|
||||||
model.props = {
|
model.props = {
|
||||||
detailData: res.data,
|
detailData: res.data.equipment,
|
||||||
form: form,
|
form: form,
|
||||||
};
|
};
|
||||||
model.onCancel = () => {
|
model.onCancel = () => {
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
>
|
>
|
||||||
<el-option label="完好" value="完好" />
|
<el-option label="完好" value="完好" />
|
||||||
<el-option label="损坏" value="损坏" />
|
<el-option label="损坏" value="损坏" />
|
||||||
|
<el-option label="报废" value="报废" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,101 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="screen-container">
|
<div></div>
|
||||||
<header class="screen-header">
|
|
||||||
<h1>数据大屏</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="screen-content">
|
|
||||||
<div class="screen-left">
|
|
||||||
<div class="chart-box">
|
|
||||||
<h3>左侧图表1</h3>
|
|
||||||
</div>
|
|
||||||
<div class="chart-box">
|
|
||||||
<h3>左侧图表2</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="screen-center">
|
|
||||||
<div class="chart-box center-main">
|
|
||||||
<h3>中间主图表</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="screen-right">
|
|
||||||
<div class="chart-box">
|
|
||||||
<h3>右侧图表1</h3>
|
|
||||||
</div>
|
|
||||||
<div class="chart-box">
|
|
||||||
<h3>右侧图表2</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script setup>
|
||||||
export default {
|
import { useRoute, useRouter } from "vue-router";
|
||||||
name: 'Home',
|
const route = useRoute();
|
||||||
setup() {
|
const token = route.query.token;
|
||||||
return {}
|
const router = useRouter();
|
||||||
}
|
if (token) {
|
||||||
|
localStorage.setItem("token", token);
|
||||||
|
router.replace({ path: route.path }).then(() => {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.screen-container {
|
|
||||||
width: 100%;
|
|
||||||
height: 100vh;
|
|
||||||
background: #0a1e3e;
|
|
||||||
color: #fff;
|
|
||||||
padding: 20px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
.screen-header {
|
|
||||||
text-align: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 36px;
|
|
||||||
font-weight: bold;
|
|
||||||
background: linear-gradient(to right, #4facfe, #00f2fe);
|
|
||||||
-webkit-background-clip: text;
|
|
||||||
-webkit-text-fill-color: transparent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.screen-content {
|
|
||||||
display: flex;
|
|
||||||
gap: 20px;
|
|
||||||
height: calc(100% - 80px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.screen-left,
|
|
||||||
.screen-right {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.screen-center {
|
|
||||||
flex: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-box {
|
|
||||||
background: rgba(255, 255, 255, 0.05);
|
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 20px;
|
|
||||||
flex: 1;
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin: 0 0 15px 0;
|
|
||||||
font-size: 18px;
|
|
||||||
color: #4facfe;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.center-main {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -8,41 +8,41 @@
|
|||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="物资名称:">
|
<el-form-item label="物资名称:">
|
||||||
<el-input disabled v-model="detailData.material.wzmc" />
|
<el-input disabled v-model="detailData.wzmc" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="余量:">
|
<el-form-item label="余量:">
|
||||||
<el-input disabled v-model="detailData.material.ye" />
|
<el-input disabled v-model="detailData.ye" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="入库日期:">
|
<el-form-item label="入库日期:">
|
||||||
<el-input disabled v-model="detailData.material.rkrq" />
|
<el-input disabled v-model="detailData.rkrq" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="入库单位:">
|
<el-form-item label="入库单位:">
|
||||||
<el-input disabled v-model="detailData.material.rkdw" />
|
<el-input disabled v-model="detailData.rkdw" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="数量:">
|
<el-form-item label="数量:">
|
||||||
<el-input disabled v-model="detailData.material.sl"/>
|
<el-input disabled v-model="detailData.sl"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="单位:">
|
<el-form-item label="单位:">
|
||||||
<el-input disabled v-model="detailData.material.dw" /> </el-form-item
|
<el-input disabled v-model="detailData.dw" /> </el-form-item
|
||||||
></el-col>
|
></el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="存放地点:">
|
<el-form-item label="存放地点:">
|
||||||
<el-input disabled v-model="detailData.material.cfdd" />
|
<el-input disabled v-model="detailData.cfdd" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="负责人:">
|
<el-form-item label="负责人:">
|
||||||
<el-input disabled v-model="detailData.material.fzr" />
|
<el-input disabled v-model="detailData.fzr" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="联系电话:">
|
<el-form-item label="联系电话:">
|
||||||
<el-input disabled v-model="detailData.material.lxdh" />
|
<el-input disabled v-model="detailData.lxdh" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="区县名称:">
|
<el-form-item label="区县名称:">
|
||||||
<el-input disabled v-model="detailData.materialqxmc" />
|
<el-input disabled v-model="detailData.qxmc" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|||||||
@ -308,7 +308,7 @@ const getDetailData = async (row) => {
|
|||||||
model.title = `物资详情`;
|
model.title = `物资详情`;
|
||||||
model.content = DetailDialog;
|
model.content = DetailDialog;
|
||||||
model.props = {
|
model.props = {
|
||||||
detailData: res.data,
|
detailData: res.data.material,
|
||||||
};
|
};
|
||||||
model.onCancel = () => {
|
model.onCancel = () => {
|
||||||
dialogType.value = '';
|
dialogType.value = '';
|
||||||
@ -323,9 +323,9 @@ const getDetailData = async (row) => {
|
|||||||
if (dialogType.value === 'edit') {
|
if (dialogType.value === 'edit') {
|
||||||
model.title = `编辑物资`;
|
model.title = `编辑物资`;
|
||||||
model.content = EditDialog;
|
model.content = EditDialog;
|
||||||
Object.assign(form, res.data);
|
Object.assign(form, res.data.material);
|
||||||
model.props = {
|
model.props = {
|
||||||
detailData: res.data,
|
detailData: res.data.material,
|
||||||
form: form,
|
form: form,
|
||||||
};
|
};
|
||||||
model.onCancel = () => {
|
model.onCancel = () => {
|
||||||
|
|||||||
@ -0,0 +1,97 @@
|
|||||||
|
<template>
|
||||||
|
<div class="detail-container">
|
||||||
|
<el-form
|
||||||
|
ref="formRef"
|
||||||
|
label-position="right"
|
||||||
|
label-width="150px"
|
||||||
|
style="max-height: 60vh; overflow-y: auto; padding-right: 50px"
|
||||||
|
>
|
||||||
|
<el-form-item label="人员:">
|
||||||
|
<el-select
|
||||||
|
v-model="ryxx"
|
||||||
|
filterable
|
||||||
|
remote
|
||||||
|
reserve-keyword
|
||||||
|
placeholder="输入人员名称 / 联系方式 查询"
|
||||||
|
:remote-method="remoteMethod"
|
||||||
|
:loading="loading"
|
||||||
|
@change="handleSelect"
|
||||||
|
value-key="userId"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in selectOptions"
|
||||||
|
:key="item.userId"
|
||||||
|
:label="item.realName"
|
||||||
|
:value="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="岗位:">
|
||||||
|
<el-input v-model="form.gw" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="养护站:">
|
||||||
|
<el-input disabled v-model="yhzdata.mc" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="人员角色:">
|
||||||
|
<el-select v-model="form.ryjs" placeholder="请选择人员角色">
|
||||||
|
<el-option label="负责人" value="1"></el-option>
|
||||||
|
<el-option label="普通工作人员" value="2"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, watch } from "vue";
|
||||||
|
const formRef = ref(null);
|
||||||
|
defineExpose({ formRef });
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
form: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
getUserList: {
|
||||||
|
type: Function,
|
||||||
|
default: () => () => {},
|
||||||
|
},
|
||||||
|
yhzdata: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const ryxx = ref("");
|
||||||
|
const loading = ref(false);
|
||||||
|
const selectOptions = ref([]);
|
||||||
|
// 选择人员筛选
|
||||||
|
const remoteMethod = async (query) => {
|
||||||
|
if (query === "") {
|
||||||
|
selectOptions.value = [];
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
loading.value = true;
|
||||||
|
const res = await props.getUserList(query);
|
||||||
|
if (res) {
|
||||||
|
selectOptions.value = res;
|
||||||
|
}
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 选择人员
|
||||||
|
const handleSelect = (value) => {
|
||||||
|
props.form.xm = value.realName;
|
||||||
|
props.form.sjhm = value.phone;
|
||||||
|
props.form.userId = value.userId;
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
props.form.yhzid = props.yhzdata.id;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
<template>
|
||||||
|
<div class="detail-container">
|
||||||
|
<el-form
|
||||||
|
label-position="right"
|
||||||
|
label-width="150px"
|
||||||
|
style="max-height: 60vh; overflow-y: auto; padding-right: 50px"
|
||||||
|
>
|
||||||
|
<el-form-item label="人员名称:">
|
||||||
|
<el-input disabled v-model="detailData.xm" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="岗位:">
|
||||||
|
<el-input disabled v-model="detailData.gw" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="手机号码:">
|
||||||
|
<el-input disabled v-model="detailData.sjhm" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="人员角色:">
|
||||||
|
<el-input disabled :value="detailData.ryjs === 1 ? '管理员' : '普通用户'" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间:">
|
||||||
|
<el-input disabled v-model="detailData.cjsj" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
const props = defineProps({
|
||||||
|
detailData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
<template>
|
||||||
|
<div class="detail-container">
|
||||||
|
<el-form
|
||||||
|
ref="formRef"
|
||||||
|
label-position="right"
|
||||||
|
label-width="150px"
|
||||||
|
style="max-height: 60vh; overflow-y: auto; padding-right: 50px"
|
||||||
|
>
|
||||||
|
<el-form-item label="人员名称:">
|
||||||
|
<el-input disabled v-model="form.xm" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="岗位:">
|
||||||
|
<el-input v-model="form.gw" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="手机号码:">
|
||||||
|
<el-input disabled v-model="form.sjhm" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="人员角色:" prop="ryjs">
|
||||||
|
<el-select v-model="form.ryjs" placeholder="请选择角色">
|
||||||
|
<el-option label="负责人" :value="1" />
|
||||||
|
<el-option label="普通工作人员" :value="2" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间:">
|
||||||
|
<el-input disabled v-model="form.cjsj" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from "vue";
|
||||||
|
const formRef = ref(null);
|
||||||
|
defineExpose({ formRef });
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
form: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
@ -39,69 +39,89 @@
|
|||||||
:onCancel="handleCancel"
|
:onCancel="handleCancel"
|
||||||
width="60%"
|
width="60%"
|
||||||
>
|
>
|
||||||
<el-form
|
<el-tabs
|
||||||
label-position="right"
|
v-model="activeName"
|
||||||
label-width="auto"
|
class="demo-tabs"
|
||||||
style="overflow-y: auto; max-height: 60vh; padding-right: 50px"
|
@tab-click="handleClick"
|
||||||
>
|
>
|
||||||
<el-row :gutter="20">
|
<el-tab-pane label="基本信息" name="Basic">
|
||||||
<el-col :span="12">
|
<el-form
|
||||||
<el-form-item label="区县名称:" prop="qxmc">
|
label-position="right"
|
||||||
<el-input disabled v-model="detailData.qxmc" />
|
label-width="auto"
|
||||||
</el-form-item>
|
style="overflow-y: auto; max-height: 60vh; padding-right: 50px"
|
||||||
<el-form-item label="站点类型:" prop="zdlx">
|
>
|
||||||
<el-select
|
<el-row :gutter="20">
|
||||||
disabled
|
<el-col :span="12">
|
||||||
v-model="detailData.zdlx"
|
<el-form-item label="区县名称:" prop="qxmc">
|
||||||
placeholder="请选择站点类型"
|
<el-input disabled v-model="detailData.qxmc" />
|
||||||
:options="zdlxOptions"
|
</el-form-item>
|
||||||
/>
|
<el-form-item label="站点类型:" prop="zdlx">
|
||||||
</el-form-item>
|
<el-select
|
||||||
<el-form-item label="路线编码:" prop="lxbm">
|
disabled
|
||||||
<el-input disabled v-model="detailData.lxbm" />
|
v-model="detailData.zdlx"
|
||||||
</el-form-item>
|
placeholder="请选择站点类型"
|
||||||
<el-form-item label="里程桩号:" prop="lczh">
|
:options="zdlxOptions"
|
||||||
<el-input disabled v-model="detailData.lczh" />
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="行政等级:" prop="xzdj">
|
<el-form-item label="路线编码:" prop="lxbm">
|
||||||
<el-input disabled v-model="detailData.xzdj" />
|
<el-input disabled v-model="detailData.lxbm" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="机动车月交通流量:" prop="yjtll">
|
<el-form-item label="里程桩号:" prop="lczh">
|
||||||
<el-input disabled v-model="detailData.yjtll" />
|
<el-input disabled v-model="detailData.lczh" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="技术等级:" prop="jsdj">
|
<el-form-item label="行政等级:" prop="xzdj">
|
||||||
<el-input disabled v-model="detailData.jsdj" />
|
<el-input disabled v-model="detailData.xzdj" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="备注:" prop="bz">
|
<el-form-item label="机动车月交通流量:" prop="yjtll">
|
||||||
<el-input disabled v-model="detailData.bz" type="textarea" />
|
<el-input disabled v-model="detailData.yjtll" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
<el-form-item label="技术等级:" prop="jsdj">
|
||||||
|
<el-input disabled v-model="detailData.jsdj" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注:" prop="bz">
|
||||||
|
<el-input
|
||||||
|
disabled
|
||||||
|
v-model="detailData.bz"
|
||||||
|
type="textarea"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="服务保障点具体名称:" prop="mc">
|
<el-form-item label="服务保障点具体名称:" prop="mc">
|
||||||
<el-input disabled v-model="detailData.mc" />
|
<el-input disabled v-model="detailData.mc" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="产权隶属单位:" prop="ssdw">
|
<el-form-item label="产权隶属单位:" prop="ssdw">
|
||||||
<el-input disabled v-model="detailData.ssdw" />
|
<el-input disabled v-model="detailData.ssdw" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="经度:" prop="jd">
|
<el-form-item label="经度:" prop="jd">
|
||||||
<el-input disabled v-model="detailData.jd" />
|
<el-input disabled v-model="detailData.jd" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="纬度:" prop="wd">
|
<el-form-item label="纬度:" prop="wd">
|
||||||
<el-input disabled v-model="detailData.wd" />
|
<el-input disabled v-model="detailData.wd" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="充电桩根数:" prop="cdzgs">
|
<el-form-item label="充电桩根数:" prop="cdzgs">
|
||||||
<el-input disabled v-model="detailData.cdzgs" />
|
<el-input disabled v-model="detailData.cdzgs" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否对外开放:" prop="sfdwkf">
|
<el-form-item label="是否对外开放:" prop="sfdwkf">
|
||||||
<el-input disabled v-model="detailData.sfdwkf" />
|
<el-input disabled v-model="detailData.sfdwkf" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="对外开放的是否有如厕功能:" prop="sfdwkfrc">
|
<el-form-item
|
||||||
<el-input disabled v-model="detailData.sfdwkfrc" />
|
label="对外开放的是否有如厕功能:"
|
||||||
</el-form-item>
|
prop="sfdwkfrc"
|
||||||
</el-col>
|
>
|
||||||
</el-row>
|
<el-input disabled v-model="detailData.sfdwkfrc" />
|
||||||
</el-form>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row> </el-form
|
||||||
|
></el-tab-pane>
|
||||||
|
<el-tab-pane label="人员信息" name="Person">
|
||||||
|
<PersonData
|
||||||
|
:yhzData="detailData"
|
||||||
|
>
|
||||||
|
</PersonData>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
</MyDialog>
|
</MyDialog>
|
||||||
<MyDialog
|
<MyDialog
|
||||||
v-model="editDialogVisible"
|
v-model="editDialogVisible"
|
||||||
@ -187,6 +207,7 @@ import { useRouter, useRoute } from "vue-router";
|
|||||||
import { request } from "@/utils/request";
|
import { request } from "@/utils/request";
|
||||||
import { Search } from "@element-plus/icons-vue";
|
import { Search } from "@element-plus/icons-vue";
|
||||||
import MyDialog from "../../component/MyDialog";
|
import MyDialog from "../../component/MyDialog";
|
||||||
|
import PersonData from "./personData.vue";
|
||||||
|
|
||||||
const tableData = ref([]);
|
const tableData = ref([]);
|
||||||
const detailData = ref({});
|
const detailData = ref({});
|
||||||
@ -541,6 +562,9 @@ const handleClickWz = (row) => {
|
|||||||
path: `/yhzwz/${encodeURIComponent(JSON.stringify(row))}`,
|
path: `/yhzwz/${encodeURIComponent(JSON.stringify(row))}`,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 当前标签
|
||||||
|
const activeName = ref("Basic");
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
@ -0,0 +1,462 @@
|
|||||||
|
<template>
|
||||||
|
<div class="root">
|
||||||
|
<div class="event-box">
|
||||||
|
<div class="inline-flex">
|
||||||
|
<label>人员姓名:</label>
|
||||||
|
<el-input v-model="filterData.xm"></el-input>
|
||||||
|
</div>
|
||||||
|
<div class="inline-flex">
|
||||||
|
<el-button type="primary" size="large" @click="openAddModel"
|
||||||
|
>新增人员</el-button
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-box">
|
||||||
|
<div class="form-content">
|
||||||
|
<DynamicTable
|
||||||
|
:dataSource="yhzryList"
|
||||||
|
:columns="columns"
|
||||||
|
:autoHeight="true"
|
||||||
|
:pagination="pagination"
|
||||||
|
></DynamicTable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="model-box">
|
||||||
|
<MyDialog
|
||||||
|
v-model="modelVisible"
|
||||||
|
:title="model?.title"
|
||||||
|
:dynamicComponent="model?.content"
|
||||||
|
:component-props="model?.props"
|
||||||
|
:onConfirm="model?.onConfirm"
|
||||||
|
:onCancel="model?.onCancel"
|
||||||
|
ref="dialogRef"
|
||||||
|
:width="model?.width"
|
||||||
|
>
|
||||||
|
</MyDialog>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { h, ref, onMounted, reactive, watch, toRaw } from "vue";
|
||||||
|
import DynamicTable from "../../component/DynamicTable";
|
||||||
|
import { request } from "@/utils/request";
|
||||||
|
import MyDialog from "../../component/MyDialog";
|
||||||
|
import AddDialog from "./component/addDialog.vue";
|
||||||
|
import EditDialog from "./component/editDialog.vue";
|
||||||
|
import DetailDialog from "./component/detailDialog.vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
yhzData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// 养护站ID
|
||||||
|
const yhzId = ref(props.yhzData.id);
|
||||||
|
// 表格过滤条件
|
||||||
|
const filterData = reactive({
|
||||||
|
xm: "", // 姓名
|
||||||
|
});
|
||||||
|
const pagination = reactive({
|
||||||
|
current: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
total: 0,
|
||||||
|
pageSizes: [10, 20, 50],
|
||||||
|
layout: "prev, pager, next, jumper",
|
||||||
|
onChange: (page, pageSize) => {
|
||||||
|
pagination.current = page;
|
||||||
|
pagination.pageSize = pageSize;
|
||||||
|
getyhzryList(filterData);
|
||||||
|
},
|
||||||
|
}); // 表格分页
|
||||||
|
|
||||||
|
// 养护站人员列表
|
||||||
|
const yhzryList = ref([]);
|
||||||
|
|
||||||
|
// 获取养护站人员详情
|
||||||
|
const getDetailData = async (row) => {
|
||||||
|
try {
|
||||||
|
const res = await request({
|
||||||
|
url: `/snow-ops-platform/yhzry/getById?id=${row.id}`,
|
||||||
|
method: "GET",
|
||||||
|
});
|
||||||
|
if (!res || res.code !== "00000") {
|
||||||
|
throw new Error("获取人员详情失败");
|
||||||
|
}
|
||||||
|
if (res.code === "00000") {
|
||||||
|
if (dialogType.value === "detail") {
|
||||||
|
model.title = `人员详情`;
|
||||||
|
model.content = DetailDialog;
|
||||||
|
model.props = {
|
||||||
|
detailData: res.data,
|
||||||
|
};
|
||||||
|
model.onCancel = () => {
|
||||||
|
dialogType.value = "";
|
||||||
|
modelVisible.value = false;
|
||||||
|
};
|
||||||
|
model.onConfirm = () => {
|
||||||
|
dialogType.value = "";
|
||||||
|
modelVisible.value = false;
|
||||||
|
};
|
||||||
|
model.width = "30%";
|
||||||
|
modelVisible.value = true;
|
||||||
|
}
|
||||||
|
if (dialogType.value === "edit") {
|
||||||
|
model.title = `编辑人员`;
|
||||||
|
model.content = EditDialog;
|
||||||
|
Object.assign(form, res.data);
|
||||||
|
model.props = {
|
||||||
|
detailData: res.data,
|
||||||
|
form: form,
|
||||||
|
};
|
||||||
|
model.onCancel = () => {
|
||||||
|
dialogType.value = "";
|
||||||
|
modelVisible.value = false;
|
||||||
|
};
|
||||||
|
model.onConfirm = async () => {
|
||||||
|
await handleEdit();
|
||||||
|
};
|
||||||
|
model.width = "30%";
|
||||||
|
modelVisible.value = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new Error(res.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error(error.message);
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEdit = async () => {
|
||||||
|
try {
|
||||||
|
await dialogRef?.value?.dynamicComponentRef?.formRef.validate();
|
||||||
|
console.log("form", toRaw(form));
|
||||||
|
const res = await request({
|
||||||
|
url: "/snow-ops-platform/yhzry/update",
|
||||||
|
method: "POST",
|
||||||
|
data: toRaw(form),
|
||||||
|
});
|
||||||
|
if (res.code === "00000") {
|
||||||
|
ElMessage.success("编辑成功");
|
||||||
|
dialogType.value = "";
|
||||||
|
modelVisible.value = false;
|
||||||
|
getyhzryList(filterData);
|
||||||
|
} else {
|
||||||
|
throw new Error(res.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error(error.message);
|
||||||
|
console.log("error", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
prop: "xm",
|
||||||
|
label: "姓名",
|
||||||
|
width: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: "gw",
|
||||||
|
label: "岗位",
|
||||||
|
width: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: "sjhm",
|
||||||
|
label: "手机号码",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: "cjsj",
|
||||||
|
label: "创建时间",
|
||||||
|
render: (row) => () => {
|
||||||
|
// 解析 ISO 时间字符串
|
||||||
|
const date = new Date(row.cjsj);
|
||||||
|
|
||||||
|
// 格式化为 YYYY-MM-DD HH:mm:ss
|
||||||
|
const format = (n) => n.toString().padStart(2, "0");
|
||||||
|
return h(
|
||||||
|
"div",
|
||||||
|
`${date.getFullYear()}-${format(date.getMonth() + 1)}-${format(
|
||||||
|
date.getDate()
|
||||||
|
)}
|
||||||
|
${format(date.getHours())}:${format(
|
||||||
|
date.getMinutes()
|
||||||
|
)}:${format(date.getSeconds())}`
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: "ryjs",
|
||||||
|
label: "人员角色",
|
||||||
|
width: 150,
|
||||||
|
render: (row) => () => {
|
||||||
|
const roleConfig = {
|
||||||
|
1: { label: "负责人", color: "#f56c6c" },
|
||||||
|
2: { label: "普通工作人员", color: "#409eff" },
|
||||||
|
};
|
||||||
|
|
||||||
|
const config = roleConfig[row.ryjs] || {
|
||||||
|
label: "未知角色",
|
||||||
|
color: "#909399",
|
||||||
|
};
|
||||||
|
|
||||||
|
return h(
|
||||||
|
ElTag,
|
||||||
|
{
|
||||||
|
style: { "margin-right": "5px" },
|
||||||
|
effect: "dark",
|
||||||
|
type: row.ryjs === 1 ? "danger" : "primary",
|
||||||
|
},
|
||||||
|
() => config.label
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
label: "操作",
|
||||||
|
fixed: "right",
|
||||||
|
width: 150,
|
||||||
|
render: (row) => () =>
|
||||||
|
h("div", { class: "action-btns" }, [
|
||||||
|
h(
|
||||||
|
ElButton,
|
||||||
|
{
|
||||||
|
type: "primary",
|
||||||
|
link: true,
|
||||||
|
onClick: async () => {
|
||||||
|
dialogType.value = "detail";
|
||||||
|
await getDetailData(row);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
() => "详情"
|
||||||
|
),
|
||||||
|
h(
|
||||||
|
ElButton,
|
||||||
|
{
|
||||||
|
type: "primary",
|
||||||
|
link: true,
|
||||||
|
onClick: async () => {
|
||||||
|
dialogType.value = "edit";
|
||||||
|
await getDetailData(row);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
() => "编辑"
|
||||||
|
),
|
||||||
|
h(
|
||||||
|
ElButton,
|
||||||
|
{
|
||||||
|
type: "danger",
|
||||||
|
link: true,
|
||||||
|
onClick: async () => {
|
||||||
|
try {
|
||||||
|
await ElMessageBox.confirm("确定要删除该人员吗?", "删除确认", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning",
|
||||||
|
});
|
||||||
|
const res = await request({
|
||||||
|
url: `/snow-ops-platform/yhzry/delete`,
|
||||||
|
method: "POST",
|
||||||
|
data: {
|
||||||
|
id: row.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if (res.code === "00000") {
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
getyhzryList(filterData);
|
||||||
|
} else {
|
||||||
|
throw new Error(res.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error(error.message);
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
() => "删除"
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// 获取养护站人员列表
|
||||||
|
const getyhzryList = async (filterData) => {
|
||||||
|
try {
|
||||||
|
const data = {
|
||||||
|
yhzid: yhzId.value,
|
||||||
|
xm: filterData?.xm || "",
|
||||||
|
pageNum: pagination.current,
|
||||||
|
pageSize: pagination.pageSize,
|
||||||
|
};
|
||||||
|
const res = await request({
|
||||||
|
url: "/snow-ops-platform/yhzry/list",
|
||||||
|
method: "GET",
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
if (res.code === "00000") {
|
||||||
|
yhzryList.value = res.data.records;
|
||||||
|
pagination.total = res.data.total;
|
||||||
|
} else {
|
||||||
|
throw new Error(res.msg);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error(error.message);
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 分页查询养护站
|
||||||
|
onMounted(async () => {
|
||||||
|
await getyhzryList();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 监听过滤条件
|
||||||
|
watch(
|
||||||
|
[() => filterData],
|
||||||
|
([newFilterData]) => {
|
||||||
|
getyhzryList(newFilterData);
|
||||||
|
},
|
||||||
|
{ deep: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
// 弹窗显示状态
|
||||||
|
const modelVisible = ref(false);
|
||||||
|
const dialogType = ref(""); // 弹窗类型
|
||||||
|
const dialogRef = ref(null); // 弹窗实例
|
||||||
|
|
||||||
|
// 弹窗
|
||||||
|
const model = reactive({
|
||||||
|
title: "",
|
||||||
|
content: null,
|
||||||
|
props: {},
|
||||||
|
onConfirm: () => {},
|
||||||
|
onCancel: () => {},
|
||||||
|
width: "30%",
|
||||||
|
});
|
||||||
|
|
||||||
|
const INIT_FORM = {
|
||||||
|
xm: "",
|
||||||
|
sjhm: "",
|
||||||
|
gw: "",
|
||||||
|
cjsj: "",
|
||||||
|
yhzid: "",
|
||||||
|
ryjs: null, // 人员角色 1-负责人 2-普通工作人员
|
||||||
|
userId: "",
|
||||||
|
}; // 表单初始值
|
||||||
|
const form = reactive({ ...INIT_FORM }); // 表单
|
||||||
|
|
||||||
|
// 根据用户信息 查询角色列表
|
||||||
|
const getUserList = async (key) => {
|
||||||
|
try {
|
||||||
|
const keyword = key;
|
||||||
|
let url = "";
|
||||||
|
if (keyword) {
|
||||||
|
url = `/snow-ops-platform/yhzry/getUserByKey?key=${keyword}`;
|
||||||
|
} else {
|
||||||
|
url = `/snow-ops-platform/yhzry/getUserByKey?key=`;
|
||||||
|
}
|
||||||
|
const res = await request({
|
||||||
|
url: url,
|
||||||
|
method: "GET",
|
||||||
|
});
|
||||||
|
if (res.code === "00000") {
|
||||||
|
return res.data;
|
||||||
|
} else {
|
||||||
|
throw new Error(res.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error(error.message);
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 打开新增人员弹窗
|
||||||
|
const openAddModel = () => {
|
||||||
|
model.title = `新增人员`;
|
||||||
|
model.content = AddDialog;
|
||||||
|
model.width = "30%";
|
||||||
|
Object.assign(form, INIT_FORM);
|
||||||
|
model.props = {
|
||||||
|
form: form,
|
||||||
|
getUserList: getUserList,
|
||||||
|
yhzdata: props.yhzData,
|
||||||
|
};
|
||||||
|
model.onCancel = () => {
|
||||||
|
dialogType.value = "";
|
||||||
|
modelVisible.value = false;
|
||||||
|
};
|
||||||
|
model.onConfirm = async () => {
|
||||||
|
try {
|
||||||
|
form.cjsj = new Date()
|
||||||
|
.toLocaleString("sv-SE", { hour12: false })
|
||||||
|
.replace("T", " ");
|
||||||
|
console.log("form", toRaw(form));
|
||||||
|
const res = await request({
|
||||||
|
url: "/snow-ops-platform/yhzry/add",
|
||||||
|
method: "POST",
|
||||||
|
data: toRaw(form),
|
||||||
|
});
|
||||||
|
if (res.code === "00000") {
|
||||||
|
ElMessage.success("新增人员成功");
|
||||||
|
dialogType.value = "";
|
||||||
|
modelVisible.value = false;
|
||||||
|
getyhzryList(filterData);
|
||||||
|
} else {
|
||||||
|
throw new Error(res.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error(error.message);
|
||||||
|
console.log("error", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
modelVisible.value = true;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.root {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 10px;
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.inline-flex {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
.inline-flex label {
|
||||||
|
white-space: nowrap; /* 禁止换行 */
|
||||||
|
}
|
||||||
|
.form-box {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 60px);
|
||||||
|
overflow: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.event-box {
|
||||||
|
width: 100%;
|
||||||
|
height: 60px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.form-content {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 60px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.model-box {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
x
Reference in New Issue
Block a user