<!-- 场景基本信息编辑 -->
|
<template>
|
<FYForm
|
:form-info="formInfo"
|
:rules="rules"
|
:useReset="true"
|
@submit="submit"
|
@cancel="cancel"
|
>
|
<template #form-item="{ formObj }">
|
<el-form-item label="场景名称" prop="name">
|
<el-input
|
clearable
|
show-word-limit
|
v-model="formObj.name"
|
placeholder="场景名称"
|
/>
|
</el-form-item>
|
<!-- 场景类型 -->
|
<FYOptionScene
|
:allOption="false"
|
:type="2"
|
:initValue="false"
|
v-model:value="formObj._scenetype"
|
></FYOptionScene>
|
<!-- 区县 -->
|
<FYOptionLocation
|
:allOption="false"
|
:level="4"
|
:initValue="false"
|
:checkStrictly="true"
|
v-model:value="formObj._locations"
|
></FYOptionLocation>
|
<el-form-item label="地址" prop="location">
|
<el-input
|
show-word-limit
|
clearable
|
v-model="formObj.location"
|
placeholder="地址"
|
/>
|
</el-form-item>
|
<el-form-item label="经度" prop="longitude">
|
<el-input-number
|
v-model="formObj.longitude"
|
:precision="6"
|
:step="0.1"
|
controls-position="right"
|
/>
|
</el-form-item>
|
<el-form-item label="纬度" prop="latitude">
|
<el-input-number
|
v-model="formObj.latitude"
|
:precision="6"
|
:step="0.1"
|
controls-position="right"
|
/>
|
</el-form-item>
|
<el-form-item label="联系人" prop="contacts">
|
<el-input
|
show-word-limit
|
clearable
|
v-model="formObj.contacts"
|
placeholder="联系人"
|
/>
|
</el-form-item>
|
<el-form-item label="联系电话" prop="contactst">
|
<el-input type="tel" v-model="formObj.contactst" placeholder="联系电话">
|
<template #prepend>
|
<el-icon>
|
<Iphone />
|
</el-icon>
|
</template>
|
</el-input>
|
</el-form-item>
|
<el-form-item label="状态" prop="online">
|
<el-switch v-model="formObj.online" />
|
<span style="margin-left: 16px">{{
|
formObj.online ? '在线' : '下线'
|
}}</span>
|
</el-form-item>
|
<el-form-item label="编号" prop="index">
|
<el-input-number readonly v-model="formObj.index" :step="1" :min="0" />
|
</el-form-item>
|
</template>
|
</FYForm>
|
</template>
|
|
<script setup>
|
import {
|
defineProps,
|
defineEmits,
|
reactive,
|
ref,
|
unref,
|
watch,
|
computed
|
} from 'vue';
|
import { enumScene } from '@/enum/scene';
|
import sceneApi from '@/api/fysp/sceneApi';
|
|
const props = defineProps({
|
//场景基本信息
|
model: {
|
type: Object
|
// default: () => {
|
// return {};
|
// }
|
},
|
//是创建或者更新场景
|
create: Boolean
|
});
|
|
// const formInfo = ref();
|
|
// 场景基本信息,做相应的数据格式化
|
const formInfo = computed(() => {
|
return parseSceneBaseInfo(props.model);
|
});
|
|
const emit = defineEmits(['onSubmit', 'onCancel']);
|
|
// watch(
|
// () => props.model,
|
// (nV, oV) => {
|
// if (nV != oV && nV) {
|
// formInfo.value = parseSceneBaseInfo(nV);
|
|
// }
|
// }
|
// );
|
|
const rules = reactive({
|
name: [
|
{
|
required: true,
|
message: '场景名称不能为空',
|
trigger: 'blur'
|
}
|
],
|
_scenetype: [
|
{
|
required: true,
|
message: '场景类型不能为空',
|
trigger: 'change'
|
}
|
],
|
_locations: [
|
{
|
required: true,
|
message: '行政区划不能为空',
|
trigger: 'change'
|
}
|
],
|
longitude: [
|
{
|
required: true,
|
message: '经度不能为空',
|
trigger: 'blur'
|
}
|
],
|
latitude: [
|
{
|
required: true,
|
message: '纬度不能为空',
|
trigger: 'blur'
|
}
|
]
|
});
|
|
/**
|
* 场景基本信息格式化
|
* 对场景类型、场景行政区划和场景可用状态进行格式化
|
* @param {*} s 场景信息
|
*/
|
function parseSceneBaseInfo(param) {
|
const s = unref(param);
|
if (s) {
|
s._scenetype = {
|
label: s.type,
|
value: s.typeid + ''
|
};
|
|
s._locations = {
|
pCode: s.provincecode,
|
pName: s.provincename,
|
cCode: s.citycode,
|
cName: s.cityname,
|
dCode: s.districtcode,
|
dName: s.districtname,
|
tCode: s.towncode,
|
tName: s.townname
|
};
|
|
s.online = s.extension1 != '0';
|
}
|
|
return s;
|
}
|
// 创建新场景
|
function createScene(v, success, fail) {
|
return sceneApi
|
.createScene(v)
|
.then(() => {
|
emit('onSubmit', v);
|
success();
|
})
|
.catch((err) => {
|
fail(err);
|
});
|
}
|
// 更新场景
|
function updateScene(v, success, fail) {
|
return sceneApi
|
.updateScene(v)
|
.then(() => {
|
emit('onSubmit', v);
|
success();
|
})
|
.catch((err) => {
|
fail(err);
|
});
|
}
|
function submit(v, success, fail) {
|
// 行政区划信息填充
|
const a = v.value._locations;
|
v.value.provincecode = a.pCode;
|
v.value.provincename = a.pName;
|
v.value.citycode = a.cCode;
|
v.value.cityname = a.cName;
|
v.value.districtcode = a.dCode;
|
v.value.districtname = a.dName;
|
v.value.towncode = a.tCode;
|
v.value.townname = a.tName;
|
|
// 场景类型信息填充
|
const b = v.value._scenetype;
|
v.value.typeid = b.value;
|
v.value.type = b.label;
|
|
// 是否在线信息填充
|
v.value.online ? (v.value.extension1 = '1') : (v.value.extension1 = '0');
|
|
v.value.updatedate = new Date().toISOString();
|
|
return props.create
|
? createScene(v.value, success, fail)
|
: updateScene(v.value, success, fail);
|
}
|
function cancel() {
|
emit('onCancel');
|
}
|
</script>
|
|
<style scoped></style>
|