qa-kangzai-vue/src/views/reservoir_info/components/add.vue

210 lines
5.7 KiB
Vue

<template>
<el-dialog
v-model="visible"
:title="type === 'edit' ? '修改' : '新增'"
:before-close="fnClose"
>
<el-form
ref="formRef"
:model="form"
:rules="data.rules"
label-width="200px"
style="margin-top: 20px"
>
<el-row>
<el-col :span="24">
<el-form-item label="水库名称" prop="reservoirName">
<el-input
v-model="form.reservoirName"
placeholder="请输入水库名称"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="水库类型" prop="reservoirType">
<el-select
v-model="form.reservoirType"
placeholder="请选择水库类型"
>
<el-option
v-for="item in reservoirTypeList"
:key="item.bianma"
:label="item.name"
:value="item.bianma"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="工程规模" prop="reservoirLevel">
<el-select
v-model="form.reservoirLevel"
placeholder="请选择工程规模"
>
<el-option
v-for="item in reservoirLevelList"
:key="item.bianma"
:label="item.name"
:value="item.bianma"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="极限库容(万立方米)" prop="maxCapacity">
<el-input v-model="form.maxCapacity" placeholder="请输入极限库容" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="当前库容(万立方米)" prop="currentCapacity">
<el-input
v-model="form.currentCapacity"
placeholder="请输入当前库容"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<div style="display: flex">
<el-form-item label="经度" prop="longitude" style="flex: 1">
<el-input v-model="form.longitude" placeholder="请选择经度" />
</el-form-item>
<el-form-item label="纬度" prop="latitude" style="flex: 1">
<el-input v-model="form.latitude" placeholder="请选择纬度" />
</el-form-item>
<el-form-item label-width="10px">
<el-button
class="ml-10"
type="primary"
@click="fnSelectedPosition"
>点击定位</el-button
>
</el-form-item>
</div>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="fnClose">取 消</el-button>
<el-button type="primary" @click="fnSubmit"> </el-button>
</template>
<app-map
v-model:visible="mapDialog.visible"
v-model:longitude="mapDialog.longitude"
v-model:latitude="mapDialog.latitude"
@submit="fnMapSubmit"
/>
</el-dialog>
</template>
<script setup>
import { debounce } from "throttle-debounce";
import useFormValidate from "@/hooks/useFormValidate.js";
import { ElMessage } from "element-plus";
import { reactive, ref } from "vue";
import { useVModels } from "@vueuse/core";
import AppMap from "@/components/map/map.vue";
import {
setReservoirBasicAdd,
setReservoirBasicUpdate,
} from "@/request/kangzai.js";
import { getDataDictionary } from "@/request/data_dictionary.js";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
type: {
type: String,
required: true,
default: "",
},
form: {
type: Object,
required: true,
default: () => ({}),
},
});
const { validate, formRef } = useFormValidate();
const emits = defineEmits(["update:visible", "update:form", "getData"]);
const { visible, form } = useVModels(props, emits);
// 字典数据
const reservoirTypeList = ref([]);
const reservoirLevelList = ref([]);
const fnGetDictData = async () => {
const [typeRes, levelRes] = await Promise.all([
getDataDictionary({ parentId: "848f91ce29ee1f2d078bc6ec69d440df" }),
getDataDictionary({ parentId: "a8b7c6d5e4f3g2h1i0j9k8l7m6n5o4p" }),
]);
reservoirTypeList.value = typeRes.dictionariesList;
reservoirLevelList.value = levelRes.dictionariesList;
};
fnGetDictData();
const data = reactive({
rules: {
reservoirName: [
{ required: true, message: "请输入水库名称", trigger: "blur" },
],
reservoirLevel: [
{ required: true, message: "请选择水库等级", trigger: "change" },
],
longitude: [{ required: true, message: "请输入经度", trigger: "blur" }],
latitude: [{ required: true, message: "请输入纬度", trigger: "blur" }],
},
});
const mapDialog = ref({
visible: false,
longitude: "",
latitude: "",
});
const fnSelectedPosition = () => {
mapDialog.value.visible = true;
mapDialog.value.longitude = form.value.longitude;
mapDialog.value.latitude = form.value.latitude;
};
const fnMapSubmit = ({ longitude, latitude }) => {
form.value.longitude = longitude;
form.value.latitude = latitude;
};
const fnClose = () => {
visible.value = false;
};
const fnSubmit = debounce(
1000,
async () => {
await validate();
const param = {
...form.value,
};
if (props.type === "add") {
await setReservoirBasicAdd(param);
} else if (props.type === "edit") {
await setReservoirBasicUpdate(param);
}
ElMessage.success("操作成功");
fnClose();
emits("getData");
},
{ atBegin: true }
);
</script>
<style lang="scss" scoped></style>