|
@@ -1,7 +1,124 @@
|
|
|
<template>
|
|
<template>
|
|
|
- <div> </div>
|
|
|
|
|
|
|
+ <main class="safety-platform-container__main">
|
|
|
|
|
+ <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
|
|
|
|
|
+ <template #violateType>
|
|
|
|
|
+ <el-select v-model="ruleFormData.violateType" placeholder="请选择违规类型">
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ v-for="item in ACT_VIOLATION_TYPE_OPTIONS"
|
|
|
|
|
+ :key="item.value"
|
|
|
|
|
+ :label="item.label"
|
|
|
|
|
+ :value="item.value"
|
|
|
|
|
+ ></el-option>
|
|
|
|
|
+ </el-select>
|
|
|
|
|
+ <div v-if="ruleFormData.violateType === ACT_VIOLATION_TYPE.SPEEDING" style="margin-top: 10px; width: 100%">
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ label-width="auto"
|
|
|
|
|
+ label="车速:"
|
|
|
|
|
+ prop="speed"
|
|
|
|
|
+ :rules="[
|
|
|
|
|
+ {
|
|
|
|
|
+ required: true,
|
|
|
|
|
+ validator: (_rule, value, callback) => {
|
|
|
|
|
+ if (!value) return callback(new Error('请输入车速'));
|
|
|
|
|
+ if (value > 999) {
|
|
|
|
|
+ callback(new Error('超过车速时速上限'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: 'blur',
|
|
|
|
|
+ },
|
|
|
|
|
+ ]"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-input v-model.number="ruleFormData.speed" placeholder="请输入车速" type="number" min="0">
|
|
|
|
|
+ <template #suffix>km/h</template>
|
|
|
|
|
+ </el-input>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <template #capturePhotos>
|
|
|
|
|
+ <UploadImages :maxCount="9" ref="uploadImagesRef" @upload-success="handleUploadChange" />
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </BasicForm>
|
|
|
|
|
+ </main>
|
|
|
|
|
+ <footer class="safety-platform-container__footer">
|
|
|
|
|
+ <el-button @click="router.back()">取消</el-button>
|
|
|
|
|
+ <el-button type="primary" @click="handleSubmit">提交</el-button>
|
|
|
|
|
+ </footer>
|
|
|
|
|
+ <UploadLoading :form-loading="formLoading" v-if="formLoading" />
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
-<script setup lang="ts"></script>
|
|
|
|
|
|
|
+<script setup lang="ts">
|
|
|
|
|
+ import { onMounted, ref } from 'vue';
|
|
|
|
|
+ import { useRouter } from 'vue-router';
|
|
|
|
|
+ import { ElMessage } from 'element-plus';
|
|
|
|
|
+ import BasicForm from '@/components/BasicForm.vue';
|
|
|
|
|
+ import UploadLoading from '@/components/UploadLoading.vue';
|
|
|
|
|
+ import UploadImages from '@/views/disaster/disaster-control/src/components/UploadImages.vue';
|
|
|
|
|
+ import { useFormConfigHook } from '@/hooks/useFormConfigHook';
|
|
|
|
|
+ import { useUserInfoHook } from '@/views/disaster/hooks';
|
|
|
|
|
+ import { createActData } from '@/api/traffic-violation/traffic-act';
|
|
|
|
|
+ import { CreateActRuleForm, CreateActQuery } from '../types';
|
|
|
|
|
+ import { ACT_FORM_CONFIG, ACT_FORM_DATA, ACT_FORM_RULES } from '../configs/form';
|
|
|
|
|
+ import { ACT_VIOLATION_TYPE, ACT_VIOLATION_TYPE_OPTIONS } from '../constants';
|
|
|
|
|
+ import { formatImageList } from '../utils';
|
|
|
|
|
|
|
|
-<style scoped></style>
|
|
|
|
|
|
|
+ const { realname } = useUserInfoHook();
|
|
|
|
|
+
|
|
|
|
|
+ const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } =
|
|
|
|
|
+ useFormConfigHook<CreateActRuleForm>(ACT_FORM_CONFIG, ACT_FORM_DATA, ACT_FORM_RULES);
|
|
|
|
|
+
|
|
|
|
|
+ const basicFormRef = ref<InstanceType<typeof BasicForm>>();
|
|
|
|
|
+ const uploadImagesRef = ref<InstanceType<typeof UploadImages>>();
|
|
|
|
|
+ const handleValidate = async () => {
|
|
|
|
|
+ if (!basicFormRef.value) return;
|
|
|
|
|
+ const res = await basicFormRef.value.validateForm();
|
|
|
|
|
+ return res;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const getFormData = async () => {
|
|
|
|
|
+ if (ruleFormData.violateType !== ACT_VIOLATION_TYPE.SPEEDING) {
|
|
|
|
|
+ ruleFormData.speed = null;
|
|
|
|
|
+ }
|
|
|
|
|
+ cloneRuleFormData();
|
|
|
|
|
+ const res: CreateActQuery = {
|
|
|
|
|
+ createSource: 1,
|
|
|
|
|
+ ...ruleFormData,
|
|
|
|
|
+ violateType: ruleFormData.violateType!,
|
|
|
|
|
+ capturePhotos: JSON.stringify(await formatImageList(ruleFormData.capturePhotos)),
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ return res;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const formLoading = ref(false);
|
|
|
|
|
+ const router = useRouter();
|
|
|
|
|
+ const handleSubmit = async () => {
|
|
|
|
|
+ const res = await handleValidate();
|
|
|
|
|
+ if (!res) return;
|
|
|
|
|
+ try {
|
|
|
|
|
+ formLoading.value = true;
|
|
|
|
|
+ const params = await getFormData();
|
|
|
|
|
+ await createActData(params);
|
|
|
|
|
+ ElMessage.success('创建成功');
|
|
|
|
|
+ router.back();
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.log(e);
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ formLoading.value = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ const handleUploadChange = () => {
|
|
|
|
|
+ ruleFormData.capturePhotos = uploadImagesRef.value!.getUploadedImages();
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ onMounted(() => {
|
|
|
|
|
+ ruleFormData.creatName = realname;
|
|
|
|
|
+ cloneRuleFormData();
|
|
|
|
|
+ beforeRouteLeave();
|
|
|
|
|
+ });
|
|
|
|
|
+</script>
|
|
|
|
|
+
|
|
|
|
|
+<style scoped lang="scss">
|
|
|
|
|
+ @use '@/styles/page-details-layout.scss' as *;
|
|
|
|
|
+</style>
|