| | |
| | | <!-- 场景基本信息编辑 --> |
| | | <template> |
| | | <el-form |
| | | :inline="false" |
| | | :model="formObj" |
| | | ref="formRef" |
| | | <FYForm |
| | | :form-info="_formInfo" |
| | | :rules="rules" |
| | | label-position="right" |
| | | label-width="150px" |
| | | :useReset="true" |
| | | @submit="submit" |
| | | @cancel="cancel" |
| | | > |
| | | <el-form-item label="场景名称" prop="name"> |
| | | <el-input |
| | | clearable |
| | | show-word-limit |
| | | v-model="formObj.name" |
| | | placeholder="场景名称" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="场景类型" prop="_typeObj"> |
| | | <el-select v-model="formObj._typeObj" placeholder="场景类型"> |
| | | <el-option |
| | | v-for="s in sceneTypes" |
| | | :key="s.value" |
| | | :label="s.label" |
| | | :value="s" |
| | | <template #form-item="{ formObj }"> |
| | | <el-form-item label="场景名称" prop="name"> |
| | | <el-input |
| | | clearable |
| | | show-word-limit |
| | | v-model="formObj.name" |
| | | placeholder="场景名称" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="省/市/区/镇" prop="_locations"> |
| | | <el-cascader |
| | | v-model="formObj._locations" |
| | | :options="locations" |
| | | placeholder="省/市/区/镇" |
| | | style="width: 300px" |
| | | :props="cascaderProps" |
| | | /> |
| | | </el-form-item> |
| | | <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 type="number" v-model="formObj.longitude" placeholder="经度" /> --> |
| | | <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 type="number" v-model="formObj.latitude" placeholder="纬度" /> --> |
| | | <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> |
| | | |
| | | <el-form-item> |
| | | <el-button |
| | | :disabled="!edit" |
| | | type="primary" |
| | | @click="onSubmit" |
| | | :loading="loading" |
| | | >提交</el-button |
| | | > |
| | | <el-button :disabled="!edit" @click="onReset">重置</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-form-item> |
| | | <el-form-item label="场景类型" prop="_typeObj"> |
| | | <el-select v-model="formObj._typeObj" placeholder="场景类型"> |
| | | <el-option |
| | | v-for="s in sceneTypes" |
| | | :key="s.value" |
| | | :label="s.label" |
| | | :value="s" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="省/市/区/镇" prop="_locations"> |
| | | <el-cascader |
| | | v-model="formObj._locations" |
| | | :options="locations" |
| | | placeholder="省/市/区/镇" |
| | | style="width: 300px" |
| | | :props="cascaderProps" |
| | | /> |
| | | </el-form-item> |
| | | <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 type="number" v-model="formObj.longitude" placeholder="经度" /> --> |
| | | <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 type="number" v-model="formObj.latitude" placeholder="纬度" /> --> |
| | | <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, watch } from 'vue'; |
| | | import { enumScene_2NA } from '@/enum/scene'; |
| | | import { enumLocationNA } from '@/enum/location'; |
| | | import { enumScene } from '@/enum/scene'; |
| | | import { enumLocation } from '@/enum/location'; |
| | | import sceneApi from '@/api/fysp/sceneApi'; |
| | | import { useFormConfirm } from '@/composables/formConfirm'; |
| | | |
| | | const props = defineProps({ |
| | | //场景基本信息 |
| | |
| | | |
| | | const emit = defineEmits(['onSubmit', 'onCancel']); |
| | | |
| | | const { formObj, formRef, edit, onSubmit, onReset } = useFormConfirm({ |
| | | submit: { |
| | | do: submit, |
| | | }, |
| | | cancel: { |
| | | do: cancel, |
| | | }, |
| | | }); |
| | | const loading = ref(false); |
| | | const sceneTypes = reactive(enumScene_2NA()); |
| | | const locations = reactive(enumLocationNA()); |
| | | const _formInfo = ref({}); |
| | | const sceneTypes = reactive(enumScene(2, false)); |
| | | const locations = reactive(enumLocation(false)); |
| | | const cascaderProps = reactive({ |
| | | checkStrictly: true, |
| | | }); |
| | |
| | | ], |
| | | }); |
| | | |
| | | // 场景基本信息格式化 |
| | | /** |
| | | * 场景基本信息格式化 |
| | | * 对场景类型、场景行政区划和场景可用状态进行格式化 |
| | | * @param {*} s 场景信息 |
| | | */ |
| | | function parseSceneBaseInfo(s) { |
| | | s._typeObj = { |
| | | label: s.type, |
| | |
| | | return s; |
| | | } |
| | | // 创建新场景 |
| | | function createScene() { |
| | | loading.value = true; |
| | | function createScene(formObj, func) { |
| | | return sceneApi |
| | | .createScene(formObj.value) |
| | | .then((res) => { |
| | | console.log(res); |
| | | .then(() => { |
| | | emit('onSubmit', formObj); |
| | | }) |
| | | .finally(() => { |
| | | loading.value = false; |
| | | func(); |
| | | }); |
| | | } |
| | | // 更新场景 |
| | | function updateScene() { |
| | | loading.value = true; |
| | | function updateScene(formObj, func) { |
| | | return sceneApi |
| | | .updateScene(formObj.value) |
| | | .then((res) => { |
| | | console.log(res); |
| | | .then(() => { |
| | | emit('onSubmit', formObj); |
| | | }) |
| | | .finally(() => { |
| | | loading.value = false; |
| | | func(); |
| | | }); |
| | | } |
| | | function submit() { |
| | | function submit(formObj, func) { |
| | | // 行政区划信息填充 |
| | | const a = formObj.value._locations; |
| | | if (a[0]) { |
| | |
| | | |
| | | emit('onSubmit', formObj); |
| | | |
| | | return props.create ? createScene() : updateScene(); |
| | | return props.create ? createScene(formObj, func) : updateScene(formObj, func); |
| | | } |
| | | function cancel() { |
| | | emit('onCancel'); |
| | | } |
| | | |
| | | // 监听传入的场景基本信息,做相应的数据格式化 |
| | | watch( |
| | | () => props.formInfo, |
| | | (nValue) => { |
| | | formObj.value = parseSceneBaseInfo(nValue); |
| | | _formInfo.value = parseSceneBaseInfo(nValue); |
| | | } |
| | | ); |
| | | </script> |