|
@@ -0,0 +1,901 @@
|
|
|
+<!-- 新增、编辑事件 -->
|
|
|
+<template>
|
|
|
+ <base-dialog
|
|
|
+ class="alarm-transfer-event-add-box"
|
|
|
+ v-model="dialogShow"
|
|
|
+ :title="isEdit ? '编辑事件' : '新增事件'"
|
|
|
+ :width="860"
|
|
|
+ :height="852"
|
|
|
+ v-loading="dialogLoading"
|
|
|
+ >
|
|
|
+ <div class="popup-form-box">
|
|
|
+ <el-form
|
|
|
+ class="emergency-event-form"
|
|
|
+ :label-width="pxToRem(80)"
|
|
|
+ ref="addEventForm"
|
|
|
+ :rules="rules"
|
|
|
+ :model="eventForm"
|
|
|
+ :inline-message="true"
|
|
|
+ >
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="事件名称" prop="eventName">
|
|
|
+ <base-input
|
|
|
+ class="event-input-margin-jp"
|
|
|
+ v-model="eventForm.eventName"
|
|
|
+ placeholder="请输入"
|
|
|
+ :maxlength="20"
|
|
|
+ ></base-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="8">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="事件等级" prop="eventGrade">
|
|
|
+ <base-select
|
|
|
+ class="event-level-select-jp"
|
|
|
+ v-model="eventForm.eventGrade"
|
|
|
+ :configs="{
|
|
|
+ optionKey: 'dictValue',
|
|
|
+ optionLabel: 'dictLabel'
|
|
|
+ }"
|
|
|
+ :options="enumeration.evenLevelList"
|
|
|
+ :popperToBody="true"
|
|
|
+ ></base-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="事发时间" prop="eventTime">
|
|
|
+ <base-datepicker
|
|
|
+ class="event-time-margin-jp"
|
|
|
+ type="datetime"
|
|
|
+ selfClass="event-time"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="请选择"
|
|
|
+ v-model="eventForm.eventTime"
|
|
|
+ :clearable="false"
|
|
|
+ disabledDate="future"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="事件类型" prop="eventType">
|
|
|
+ <base-select
|
|
|
+ class="event-type-select-jp"
|
|
|
+ popperClass="event-address-popper"
|
|
|
+ v-model="eventForm.eventTypeOne"
|
|
|
+ :configs="{
|
|
|
+ optionKey: 'id',
|
|
|
+ optionLabel: 'typeName'
|
|
|
+ }"
|
|
|
+ :options="enumeration.eventTypeOneList"
|
|
|
+ :popperToBody="true"
|
|
|
+ ></base-select>
|
|
|
+ <base-select
|
|
|
+ class="event-type-select-jp"
|
|
|
+ popperClass="event-address-popper"
|
|
|
+ v-model="eventForm.eventTypeTwo"
|
|
|
+ :configs="{
|
|
|
+ optionKey: 'id',
|
|
|
+ optionLabel: 'typeName'
|
|
|
+ }"
|
|
|
+ :options="enumeration.eventTypeTwoList"
|
|
|
+ :disabled="enumeration.eventTypeTwoList.length === 0"
|
|
|
+ :popperToBody="true"
|
|
|
+ ></base-select>
|
|
|
+ <base-select
|
|
|
+ class="event-type-select-right-jp"
|
|
|
+ popperClass="event-address-popper"
|
|
|
+ v-model="eventForm.eventTypeThree"
|
|
|
+ :configs="{
|
|
|
+ optionKey: 'id',
|
|
|
+ optionLabel: 'typeName'
|
|
|
+ }"
|
|
|
+ :options="enumeration.eventTypeThreeList"
|
|
|
+ :disabled="enumeration.eventTypeThreeList.length === 0"
|
|
|
+ :popperToBody="true"
|
|
|
+ ></base-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="事发地点" prop="eventAddress">
|
|
|
+ <base-select
|
|
|
+ class="event-address-select-jp"
|
|
|
+ v-model="province"
|
|
|
+ :configs="{
|
|
|
+ optionKey: 'areaCode',
|
|
|
+ optionLabel: 'areaName'
|
|
|
+ }"
|
|
|
+ :options="provinceList"
|
|
|
+ :popperToBody="true"
|
|
|
+ ></base-select>
|
|
|
+ <base-select
|
|
|
+ class="event-address-select-jp"
|
|
|
+ v-model="city"
|
|
|
+ :configs="{
|
|
|
+ optionKey: 'areaCode',
|
|
|
+ optionLabel: 'areaName'
|
|
|
+ }"
|
|
|
+ :options="cityList"
|
|
|
+ :popperToBody="true"
|
|
|
+ ></base-select>
|
|
|
+ <base-select
|
|
|
+ class="event-address-select-jp"
|
|
|
+ v-model="district"
|
|
|
+ :configs="{
|
|
|
+ optionKey: 'areaCode',
|
|
|
+ optionLabel: 'areaName'
|
|
|
+ }"
|
|
|
+ :options="districtList"
|
|
|
+ :popperToBody="true"
|
|
|
+ ></base-select>
|
|
|
+ <base-input
|
|
|
+ v-model="address"
|
|
|
+ placeholder="请输入"
|
|
|
+ class="event-address-input-jp"
|
|
|
+ v-c-tip="address"
|
|
|
+ ></base-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="经纬度" prop="eventPosition">
|
|
|
+ <base-input
|
|
|
+ class="event-position-input-jp"
|
|
|
+ v-model="longitude"
|
|
|
+ placeholder="经度"
|
|
|
+ @input="handleInput($event, 'longitude')"
|
|
|
+ @blur="getAddress"
|
|
|
+ ></base-input>
|
|
|
+ <base-input
|
|
|
+ class="event-position-input-jp"
|
|
|
+ v-model="latitude"
|
|
|
+ placeholder="纬度"
|
|
|
+ @input="handleInput($event, 'latitude')"
|
|
|
+ @blur="getAddress"
|
|
|
+ ></base-input>
|
|
|
+ <div class="event-position-btn">
|
|
|
+ <ct-icon
|
|
|
+ name="location-active"
|
|
|
+ color="inherit"
|
|
|
+ size="18"
|
|
|
+ @click="doMapShow"
|
|
|
+ ></ct-icon>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="事件描述" prop="eventDescribe">
|
|
|
+ <el-input
|
|
|
+ size="medium"
|
|
|
+ class="c-input c-textarea"
|
|
|
+ type="textarea"
|
|
|
+ maxlength="200"
|
|
|
+ show-word-limit
|
|
|
+ placeholder="请输入"
|
|
|
+ v-model="eventForm.eventDescribe"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="备注">
|
|
|
+ <el-input
|
|
|
+ size="medium"
|
|
|
+ class="c-input c-textarea"
|
|
|
+ type="textarea"
|
|
|
+ maxlength="200"
|
|
|
+ show-word-limit
|
|
|
+ placeholder="请输入"
|
|
|
+ v-model="eventForm.remark"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24" v-for="(item, index) in fileItems" :key="index">
|
|
|
+ <el-form-item
|
|
|
+ :label="item.label"
|
|
|
+ :prop="item.prop"
|
|
|
+ :class="item.class"
|
|
|
+ >
|
|
|
+ <template v-slot:label>
|
|
|
+ <i :class="item.iconClass" v-c-tip:top="item.tooltipContent" />
|
|
|
+ <span
|
|
|
+ class="item-label"
|
|
|
+ style="font-weight: 400"
|
|
|
+ :style="item.labelStyle"
|
|
|
+ >{{ item.label }}</span
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ <div :class="item.contentClass">
|
|
|
+ <base-upload
|
|
|
+ :ref="item.ref"
|
|
|
+ :fileType="item.fileType"
|
|
|
+ :fileTypeMessage="item.fileTypeMessage"
|
|
|
+ :limit="item.limit"
|
|
|
+ v-model="eventForm[item.prop]"
|
|
|
+ ></base-upload>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ <div class="event-submit-btns">
|
|
|
+ <base-button
|
|
|
+ class="event-sub-btn-jp"
|
|
|
+ type="primary"
|
|
|
+ :height="32"
|
|
|
+ :width="108"
|
|
|
+ @click="confirm"
|
|
|
+ >
|
|
|
+ 确定
|
|
|
+ </base-button>
|
|
|
+ <base-button :height="32" :width="108" @click="closeClick(false)">
|
|
|
+ 取消
|
|
|
+ </base-button>
|
|
|
+ </div>
|
|
|
+ <!-- 地图选点 -->
|
|
|
+ <map-selection
|
|
|
+ v-show="mapShow"
|
|
|
+ ref="mapSelection"
|
|
|
+ :show="mapShow"
|
|
|
+ :lng="longitude ? longitude : defaultCenter[1]"
|
|
|
+ :lat="latitude ? latitude : defaultCenter[0]"
|
|
|
+ @doMapOk="closeMapShow"
|
|
|
+ @mapBack="getMapBackData"
|
|
|
+ />
|
|
|
+ </base-dialog>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import MapSelection from '../components/map/MapSelection.vue'
|
|
|
+import {
|
|
|
+ getMultipleDicts,
|
|
|
+ getRegion,
|
|
|
+ saveEvent,
|
|
|
+ updateEvent,
|
|
|
+ getEventType,
|
|
|
+ getEventDetail
|
|
|
+} from '../service/index'
|
|
|
+import { getNowDate } from '../utils/index'
|
|
|
+import { Input } from 'element-ui'
|
|
|
+import BaseDialog from '@component-gallery/base-components/base-dialog/BaseDialog.vue'
|
|
|
+import BaseInput from '@component-gallery/base-components/base-form-inner/base-input/BaseInput.vue'
|
|
|
+import BaseDatepicker from '@component-gallery/base-components/base-form-inner/base-datepicker/BaseDatepicker.vue'
|
|
|
+import BaseSelect from '@component-gallery/base-components/base-form-inner/base-select/BaseSelect.vue'
|
|
|
+import BaseButton from '@component-gallery/base-components/base-button/BaseButton.vue'
|
|
|
+import BaseUpload from '@component-gallery/base-components/base-form-inner/base-upload/BaseUpload.vue'
|
|
|
+import CommonMessage from '@component-gallery/utils/funCommon/message/common-message'
|
|
|
+import '@component-gallery/utils/funCommon/tooltip/directive'
|
|
|
+import { fileItems } from '../utils/data'
|
|
|
+export default {
|
|
|
+ name: 'add-or-edit-emergency-event',
|
|
|
+ components: {
|
|
|
+ [Input.name]: Input,
|
|
|
+ BaseDialog,
|
|
|
+ BaseInput,
|
|
|
+ BaseDatepicker,
|
|
|
+ BaseSelect,
|
|
|
+ BaseButton,
|
|
|
+ BaseUpload,
|
|
|
+ MapSelection
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ isEdit: {
|
|
|
+ type: Boolean, // 告警信息
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ eventCode: {
|
|
|
+ type: String, // 告警信息
|
|
|
+ default: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ //表单校验规则
|
|
|
+ rules() {
|
|
|
+ return {
|
|
|
+ eventName: [
|
|
|
+ { required: true, message: '事件名称不能为空', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ eventGrade: [
|
|
|
+ { required: true, message: '事件等级不能为空', trigger: 'change' }
|
|
|
+ ],
|
|
|
+ eventTime: [
|
|
|
+ { required: true, message: '事发时间不能为空', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ eventType: [
|
|
|
+ {
|
|
|
+ validator: (r, v, clb) => {
|
|
|
+ let cond1 =
|
|
|
+ !this.eventForm.eventTypeOne &&
|
|
|
+ this.enumeration.eventTypeOneList.length > 0
|
|
|
+ let cond2 =
|
|
|
+ !this.eventForm.eventTypeTwo &&
|
|
|
+ this.enumeration.eventTypeTwoList.length > 0
|
|
|
+ let cond3 =
|
|
|
+ !this.eventForm.eventTypeThree &&
|
|
|
+ this.enumeration.eventTypeThreeList.length > 0
|
|
|
+ if (cond1 || cond2 || cond3) {
|
|
|
+ clb('事件类型不能为空')
|
|
|
+ }
|
|
|
+ clb()
|
|
|
+ },
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ required: true
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ eventAddress: [
|
|
|
+ {
|
|
|
+ validator: (r, v, clb) => {
|
|
|
+ if (!this.address) {
|
|
|
+ clb('事件地址不能为空')
|
|
|
+ }
|
|
|
+ clb()
|
|
|
+ },
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ required: true
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ eventPosition: [
|
|
|
+ {
|
|
|
+ validator: (r, v, clb) => {
|
|
|
+ if (!this.longitude || !this.latitude) {
|
|
|
+ clb('经纬度不能为空')
|
|
|
+ }
|
|
|
+ const latitudeReg =
|
|
|
+ /^([-+])?([0-8]?\d\.\d{0,6}|90\.0{0,6}|[0-8]?\d|90)$/
|
|
|
+ if (!latitudeReg.test(this.latitude)) {
|
|
|
+ clb('纬度范围为-90到90,最多6位小数')
|
|
|
+ }
|
|
|
+ const longitudeReg =
|
|
|
+ /^([-+])?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/
|
|
|
+ if (!longitudeReg.test(this.longitude)) {
|
|
|
+ clb('经度范围为-180到180,最多6位小数')
|
|
|
+ }
|
|
|
+ clb()
|
|
|
+ },
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ required: true
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ eventDescribe: [
|
|
|
+ { required: true, message: '事件描述不能为空', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ imgList: [{ message: '请上传图片', required: true }],
|
|
|
+ videoList: [{ message: '请上传视频', required: true }]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ dialogLoading: false,
|
|
|
+ dialogShow: true,
|
|
|
+ //附件数据
|
|
|
+ fileItems: fileItems,
|
|
|
+ // 新增事件表单数据
|
|
|
+ eventForm: {
|
|
|
+ eventName: '', //事件名称
|
|
|
+ eventGrade: '', //事件等级
|
|
|
+ eventTime: '', //发生时间
|
|
|
+ eventTypeOne: '', //事件类型1
|
|
|
+ eventTypeTwo: '', //事件类型2
|
|
|
+ eventTypeThree: '', //事件类型3
|
|
|
+ eventDescribe: '', //事件描述
|
|
|
+ remark: '', //备注
|
|
|
+ imgList: [], //图片
|
|
|
+ videoList: [], //视频
|
|
|
+ audioList: [], //音频
|
|
|
+ fileList: [] //文档
|
|
|
+ },
|
|
|
+ eventTypeTree: [], //类型树
|
|
|
+ //事件等级枚举
|
|
|
+ enumeration: {
|
|
|
+ //事件等级
|
|
|
+ evenLevelList: [],
|
|
|
+ //事件类型1
|
|
|
+ eventTypeOneList: [],
|
|
|
+ //事件类型2
|
|
|
+ eventTypeTwoList: [],
|
|
|
+ //事件类型3
|
|
|
+ eventTypeThreeList: []
|
|
|
+ },
|
|
|
+ //地址
|
|
|
+ areaCodes: [],
|
|
|
+ provinceList: [], //省份列表
|
|
|
+ province: '', //选择的省份
|
|
|
+ provinceBack: '', //回填的省份
|
|
|
+ cityList: [], //地市列表
|
|
|
+ city: '', //选择的地市
|
|
|
+ cityBack: '', //回填的地市
|
|
|
+ districtList: [], //区县列表
|
|
|
+ district: '', //选择的区县
|
|
|
+ districtBack: '', //回填的区县
|
|
|
+ longitude: '',
|
|
|
+ latitude: '',
|
|
|
+ address: '', //详细地址
|
|
|
+ defaultCenter: [39.907759, 116.391185],
|
|
|
+ mapShow: false,
|
|
|
+ detailInfo: null, // 用于保存事件详情数据
|
|
|
+ eventTypeTwoback: '', //事件类型2回显数据
|
|
|
+ eventTypeThreeback: '' //事件类型3回显数据
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ /**
|
|
|
+ * 监听dialog关闭
|
|
|
+ */
|
|
|
+ 'dialogShow'(val) {
|
|
|
+ if (!val) {
|
|
|
+ this.closeClick()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 监听选择省份
|
|
|
+ */
|
|
|
+ 'province'(val) {
|
|
|
+ this.cityList = []
|
|
|
+ this.city = ''
|
|
|
+ this.districtList = []
|
|
|
+ this.district = ''
|
|
|
+ if (val) {
|
|
|
+ this.getCity(val)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 监听选择地市
|
|
|
+ */
|
|
|
+ 'city'(val) {
|
|
|
+ this.districtList = []
|
|
|
+ this.district = ''
|
|
|
+ if (val) {
|
|
|
+ this.getdistrict(val)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ 'eventForm.eventTypeOne': {
|
|
|
+ handler(val) {
|
|
|
+ if (val) {
|
|
|
+ this.eventForm.eventTypeTwo = ''
|
|
|
+ this.eventForm.eventTypeThree = ''
|
|
|
+ this.enumeration.eventTypeTwoList = []
|
|
|
+ this.enumeration.eventTypeThreeList = []
|
|
|
+ this.getEventTypeList(1, val)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deep: true,
|
|
|
+ immediate: true
|
|
|
+ },
|
|
|
+ 'eventForm.eventTypeTwo': {
|
|
|
+ handler(val) {
|
|
|
+ if (val) {
|
|
|
+ this.eventForm.eventTypeThree = ''
|
|
|
+ this.enumeration.eventTypeThreeList = []
|
|
|
+ this.getEventTypeList(2, val)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deep: true,
|
|
|
+ immediate: true
|
|
|
+ },
|
|
|
+ 'eventForm.imgList': {
|
|
|
+ handler(val) {
|
|
|
+ if (val) {
|
|
|
+ this.$refs.addEventForm.validateField('imgList')
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deep: true // 深度监听
|
|
|
+ },
|
|
|
+ 'eventForm.videoList': {
|
|
|
+ handler(val) {
|
|
|
+ if (val) {
|
|
|
+ this.$refs.addEventForm.validateField('videoList')
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deep: true // 深度监听
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.eventForm.eventTime = getNowDate()
|
|
|
+ this.getEventLevel() //获取事件等级
|
|
|
+ this.getProvince() //获取省份
|
|
|
+ if (this.isEdit && this.eventCode) {
|
|
|
+ this.dialogLoading = true
|
|
|
+ }
|
|
|
+ this.getEventTypeTree() //获取事件类型树
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ /**
|
|
|
+ * 获取事件详情(编辑事件时使用)
|
|
|
+ */
|
|
|
+ getEventDetail() {
|
|
|
+ getEventDetail(this.eventCode)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200 && res.data) {
|
|
|
+ this.detailInfo = res.data
|
|
|
+ // 处理事件详情数据回显
|
|
|
+ this.getEventData(res.data)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ CommonMessage.error(err?.msg || '请求失败')
|
|
|
+ this.dialogLoading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 获取事件等级
|
|
|
+ */
|
|
|
+ getEventLevel() {
|
|
|
+ getMultipleDicts(['emergency_event_grade']).then((res) => {
|
|
|
+ this.enumeration.evenLevelList = res.data['emergency_event_grade']
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 获取事件类型
|
|
|
+ */
|
|
|
+ getEventTypeTree() {
|
|
|
+ let type = 2
|
|
|
+ getEventType(type)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.eventTypeTree = res.data
|
|
|
+ this.enumeration.eventTypeOneList = []
|
|
|
+ this.enumeration.eventTypeTwoList = []
|
|
|
+ this.enumeration.eventTypeThreeList = []
|
|
|
+ this.getEventTypeList(0)
|
|
|
+ if (this.isEdit && this.eventCode) {
|
|
|
+ //编辑获取详情
|
|
|
+ this.getEventDetail()
|
|
|
+ } else {
|
|
|
+ this.eventTypeTwoback = ''
|
|
|
+ this.eventTypeThreeback = ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ CommonMessage.error(err?.msg || '请求失败')
|
|
|
+ this.dialogLoading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 经纬度输入限制
|
|
|
+ * 经度:-180~180 纬度 -90~90
|
|
|
+ * 小数点后六位校验
|
|
|
+ */
|
|
|
+ handleInput(value, type) {
|
|
|
+ let reg = /^([-+])?([0-8]?\d\.\d{0,6}|90\.0{0,6}|[0-8]?\d|90)$/
|
|
|
+ if (type === 'longitude') {
|
|
|
+ reg =
|
|
|
+ /^([-+])?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/
|
|
|
+ }
|
|
|
+ if (reg.test(value) || value === '' || value === '-') {
|
|
|
+ //符合正则校验
|
|
|
+ this.$data[type] = value
|
|
|
+ this.$data[`${type}_old`] = value
|
|
|
+ } else {
|
|
|
+ // 本次输入不符合正则校验,则还原为上一次输入正确的值
|
|
|
+ this.$data[type] = this.$data[`${type}_old`] || ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 获取三层级联事件类型
|
|
|
+ * todo 优化使用switch
|
|
|
+ */
|
|
|
+ getEventTypeList(index, parentId) {
|
|
|
+ let list = this.dealLevelTreeToList(this.eventTypeTree)[index]
|
|
|
+ const filteredList = list.filter((item) => item.parentId === parentId)
|
|
|
+ switch (index) {
|
|
|
+ case 0:
|
|
|
+ //第一层级联
|
|
|
+ this.enumeration.eventTypeOneList = list
|
|
|
+ break
|
|
|
+ case 1:
|
|
|
+ //第二层级联
|
|
|
+ this.enumeration.eventTypeTwoList = filteredList
|
|
|
+ this.eventTypeTwoBackFun()
|
|
|
+ break
|
|
|
+ case 2:
|
|
|
+ //第三层级联
|
|
|
+ this.enumeration.eventTypeThreeList = filteredList
|
|
|
+ this.eventTypeThreeBackFun()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 二级类型编辑回显
|
|
|
+ */
|
|
|
+ eventTypeTwoBackFun() {
|
|
|
+ if (this.eventTypeTwoback !== '') {
|
|
|
+ this.eventForm.eventTypeTwo = this.detailInfo?.eventTypeMiddleCategory
|
|
|
+ this.eventTypeTwoback = ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 三级类型编辑回显
|
|
|
+ */
|
|
|
+ eventTypeThreeBackFun() {
|
|
|
+ if (this.eventTypeThreeback !== '') {
|
|
|
+ this.eventForm.eventTypeThree = this.detailInfo?.eventTypeSmallCategory
|
|
|
+ this.eventTypeThreeback = ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 处理树型结构数据 tree => {[],[],[]}
|
|
|
+ */
|
|
|
+ dealLevelTreeToList(tree, levels = [], level = 0) {
|
|
|
+ if (!levels[level]) {
|
|
|
+ levels[level] = []
|
|
|
+ }
|
|
|
+ for (const node of tree) {
|
|
|
+ levels[level].push(node)
|
|
|
+ if (node.children?.length > 0) {
|
|
|
+ this.dealLevelTreeToList(node.children, levels, level + 1)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return levels
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 查询行政区划 省份
|
|
|
+ */
|
|
|
+ getProvince() {
|
|
|
+ this.province = ''
|
|
|
+ getRegion({ areaLevel: '2' }).then((resp) => {
|
|
|
+ if (resp.code !== 200) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.provinceList = resp.data || []
|
|
|
+ if (this.provinceBack) {
|
|
|
+ for (let i in this.provinceList) {
|
|
|
+ if (this.provinceList[i].areaName === this.provinceBack) {
|
|
|
+ this.province = this.provinceList[i].areaCode
|
|
|
+ this.areaCodes = []
|
|
|
+ this.areaCodes.push(this.province)
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 查询行政区划 地市
|
|
|
+ */
|
|
|
+ getCity(parentCode) {
|
|
|
+ getRegion({ areaLevel: '3', areaParentCode: parentCode }).then((resp) => {
|
|
|
+ if (resp.code !== 200) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.cityList = resp.data || []
|
|
|
+ if (this.cityBack) {
|
|
|
+ for (let i in this.cityList) {
|
|
|
+ if (this.cityList[i].areaName === this.cityBack) {
|
|
|
+ this.city = this.cityList[i].areaCode
|
|
|
+ this.areaCodes.push(this.city)
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 查询行政区划 区县
|
|
|
+ */
|
|
|
+ getdistrict(parentCode) {
|
|
|
+ getRegion({ areaLevel: '4', areaParentCode: parentCode }).then((resp) => {
|
|
|
+ if (resp.code !== 200) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.districtList = resp.data || []
|
|
|
+ if (this.districtBack) {
|
|
|
+ for (let i in this.districtList) {
|
|
|
+ if (this.districtList[i].areaName === this.districtBack) {
|
|
|
+ this.district = this.districtList[i].areaCode
|
|
|
+ this.areaCodes.push(this.district)
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 处理事件详情数据
|
|
|
+ */
|
|
|
+ getEventData(data) {
|
|
|
+ this.eventForm.eventName = data.eventName
|
|
|
+ this.eventForm.eventTime = data.eventTime
|
|
|
+ this.eventForm.eventGrade = data.eventGradeDict.toString()
|
|
|
+ this.eventForm.eventDescribe = data.eventDescribe
|
|
|
+ this.eventForm.eventTypeOne = data.eventTypeLargeCategory
|
|
|
+ // 用于类别2、3回显
|
|
|
+ this.eventTypeTwoback = data.eventTypeMiddleCategory
|
|
|
+ this.eventTypeThreeback = data.eventTypeSmallCategory
|
|
|
+ this.eventForm.remark = data.remark
|
|
|
+ this.province = data.provinceCode
|
|
|
+ this.city = data.cityCode
|
|
|
+ this.district = data.countryCode
|
|
|
+ // 用于省市区回显
|
|
|
+ this.provinceBack = data.province
|
|
|
+ this.cityBack = data.city
|
|
|
+ this.districtBack = data.country
|
|
|
+ this.address = data.specificLocation
|
|
|
+ this.longitude = data.longitude
|
|
|
+ this.latitude = data.latitude
|
|
|
+ // 处理附件回显
|
|
|
+ this.eventForm.imgList = this.getAccessoryList(data.imgUrlList || [])
|
|
|
+ this.eventForm.videoList = this.getAccessoryList(data.videoUrlList || [])
|
|
|
+ this.eventForm.audioList = this.getAccessoryList(data.audioUrlList || [])
|
|
|
+ this.eventForm.fileList = this.getAccessoryList(data.fileUrlList || [])
|
|
|
+ this.dialogLoading = false
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 获取附件数据(图片、视频、音频、文档)
|
|
|
+ */
|
|
|
+ getAccessoryList(list) {
|
|
|
+ let arr = []
|
|
|
+ list.forEach((item) => {
|
|
|
+ let it = {
|
|
|
+ fileUrl: item.originUrl,
|
|
|
+ fileName: item.fileName,
|
|
|
+ fileSuffix: item.fileSuffix,
|
|
|
+ originUrl: item.originUrl
|
|
|
+ }
|
|
|
+ arr.push(it)
|
|
|
+ })
|
|
|
+ return arr
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 显示地图
|
|
|
+ */
|
|
|
+ doMapShow() {
|
|
|
+ this.mapShow = true
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 经纬度失焦获取地址信息
|
|
|
+ */
|
|
|
+ getAddress() {
|
|
|
+ if (this.longitude && this.latitude) {
|
|
|
+ this.$refs.mapSelection.getAddress(this.longitude, this.latitude, true)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 接收地图返回信息
|
|
|
+ */
|
|
|
+ getMapBackData(backData) {
|
|
|
+ this.provinceBack = backData.provinceBack
|
|
|
+ this.cityBack = backData.cityBack
|
|
|
+ this.districtBack = backData.districtBack
|
|
|
+ this.address = backData.address
|
|
|
+ this.longitude = backData.longitude
|
|
|
+ this.latitude = backData.latitude
|
|
|
+ this.getProvince()
|
|
|
+ this.closeMapShow()
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 关闭地图
|
|
|
+ */
|
|
|
+ closeMapShow() {
|
|
|
+ this.mapShow = false
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 新增事件弹窗关闭,取消
|
|
|
+ */
|
|
|
+ closeClick() {
|
|
|
+ this.$emit('closeDialog')
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 提交表单
|
|
|
+ */
|
|
|
+ confirm() {
|
|
|
+ let params = {
|
|
|
+ eventName: this.eventForm.eventName,
|
|
|
+ eventGradeDict: this.eventForm.eventGrade,
|
|
|
+ eventTime: this.eventForm.eventTime,
|
|
|
+ eventTypeLargeCategory: this.eventForm.eventTypeOne,
|
|
|
+ eventTypeMiddleCategory: this.eventForm.eventTypeTwo,
|
|
|
+ eventTypeSmallCategory: this.eventForm.eventTypeThree,
|
|
|
+ eventDescribe: this.eventForm.eventDescribe,
|
|
|
+ remark: this.eventForm.remark,
|
|
|
+ imgUrlList: this.eventForm.imgList,
|
|
|
+ videoUrlList: this.eventForm.videoList,
|
|
|
+ audioUrlList: this.eventForm.audioList,
|
|
|
+ fileUrlList: this.eventForm.fileList,
|
|
|
+ provinceCode: this.province,
|
|
|
+ cityCode: this.city,
|
|
|
+ countryCode: this.district,
|
|
|
+ specificLocation: this.address,
|
|
|
+ longitude: this.longitude,
|
|
|
+ latitude: this.latitude,
|
|
|
+ status: 1 // 默认1 未处置
|
|
|
+ }
|
|
|
+ if (this.isEdit) {
|
|
|
+ params.eventCode = this.eventCode
|
|
|
+ }
|
|
|
+ let isUploading = false
|
|
|
+ const hasFileUrl = (list) => list.some((item) => !item.fileUrl)
|
|
|
+ isUploading =
|
|
|
+ hasFileUrl(this.eventForm.imgList) ||
|
|
|
+ hasFileUrl(this.eventForm.videoList) ||
|
|
|
+ hasFileUrl(this.eventForm.audioList) ||
|
|
|
+ hasFileUrl(this.eventForm.fileList)
|
|
|
+ // 校验附件是否全部上传完成
|
|
|
+ if (isUploading) {
|
|
|
+ CommonMessage.error('附件上传中,请稍后再试')
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ // todo 优化
|
|
|
+ this.$refs.addEventForm.validate((valid) => {
|
|
|
+ if (!valid) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.isEdit ? this.uploadSubmit(params) : this.saveSubmit(params)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 新增事件
|
|
|
+ */
|
|
|
+ saveSubmit(params) {
|
|
|
+ saveEvent(params)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ CommonMessage.success(res.msg)
|
|
|
+ this.$emit('updateTableData')
|
|
|
+ this.closeClick()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ CommonMessage.error(err?.msg)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 编辑事件
|
|
|
+ */
|
|
|
+ uploadSubmit(params) {
|
|
|
+ updateEvent(params)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ CommonMessage.success(res.msg)
|
|
|
+ this.$emit('updateTableData')
|
|
|
+ this.closeClick()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ CommonMessage.error(err?.msg)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style lang="scss" scoped>
|
|
|
+@import '~@component-gallery/theme-chalk/src/emergency-events-inquiry/add-or-edit-emergency-event.scss';
|
|
|
+</style>
|
|
|
+<style lang="scss">
|
|
|
+@import '~@component-gallery/theme-chalk/src/mixins/px-to-rem';
|
|
|
+
|
|
|
+.common-iw-s.event-time.el-date-picker.el-picker-panel.el-popper[x-placement^='top'] {
|
|
|
+ width: px-to-rem(248) !important;
|
|
|
+ .el-date-picker__time-header {
|
|
|
+ border-bottom: px-to-rem(1) solid
|
|
|
+ var(--common-base-data-picker__border-bottom-color) !important;
|
|
|
+ }
|
|
|
+}
|
|
|
+.event-time {
|
|
|
+ .el-time-spinner__item {
|
|
|
+ height: 32px !important;
|
|
|
+ line-height: 32px !important;
|
|
|
+ }
|
|
|
+ .el-time-panel__content::after,
|
|
|
+ .el-time-panel__content::before {
|
|
|
+ height: 32px !important;
|
|
|
+ }
|
|
|
+}
|
|
|
+.event-address-popper.el-select-dropdown {
|
|
|
+ .iclass-text-ellipsis {
|
|
|
+ max-width: px-to-rem(230);
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|