| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <template>
- <main class="safety-platform-container__main">
- <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
- <template #attachment>
- <UploadFiles
- label="上传附件"
- ref="uploadFilesRef"
- :fileList="ruleFormData.attachment"
- @uploadSuccess="handleUploadSuccess"
- />
- </template>
- <template #isPush>
- <el-radio-group v-model="ruleFormData.isPush">
- <el-radio :value="IS_PUSH.PUSH">是</el-radio>
- <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
- </el-radio-group>
- <SelectGroup
- v-if="ruleFormData.isPush === IS_PUSH.PUSH"
- ref="selectGroupRef"
- :userGroupList="ruleFormData.userGroupList || []"
- @userGroupListChange="handleUserGroupListChange"
- />
- </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>
- <script setup lang="ts">
- import BasicForm from '@/components/BasicForm.vue';
- import UploadFiles from '@/views/disaster/components/UploadFiles.vue';
- import SelectGroup from '@/components/PersonGroup/SelectGroup.vue';
- import { useFormConfigHook } from '@/hooks/useFormConfigHook';
- import { IS_PUSH } from '../constants';
- import { ElMessage } from 'element-plus';
- import { NOTICE_FORM_CONFIG, NOTICE_FORM_DATA, NOTICE_FORM_RULES } from '../configs/form';
- import { FileItem, CreateNoticeRuleForm, CreateNoticeQuery, UpdateNoticeQuery } from '../types';
- import { onMounted, ref } from 'vue';
- import UploadLoading from '@/components/UploadLoading.vue';
- import { useRouter } from 'vue-router';
- import { stringToArray, unformatAttachment, formatAttachmentList } from '../utils';
- import { getNoticeDetail, updateNotice } from '@/api/traffic-regulation/traffic-regulation';
- const props = defineProps<{
- id: number;
- }>();
- const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } =
- useFormConfigHook<CreateNoticeRuleForm>(NOTICE_FORM_CONFIG, NOTICE_FORM_DATA, NOTICE_FORM_RULES);
- const basicFormRef = ref<InstanceType<typeof BasicForm>>();
- const selectGroupRef = ref<InstanceType<typeof SelectGroup>>();
- const getDetail = async () => {
- const res = await getNoticeDetail(props.id);
- ruleFormData.name = res.name;
- ruleFormData.content = res.content;
- ruleFormData.attachment = unformatAttachment(res.attachment)!;
- ruleFormData.remark = res.remark;
- ruleFormData.realname = res.creatName;
- ruleFormData.isPush = res.isPush;
- ruleFormData.userGroupList = stringToArray(res.userGroupList);
- cloneRuleFormData();
- };
- const handleUserGroupListChange = (userGroupList: number[]) => {
- ruleFormData.userGroupList = userGroupList;
- };
- const handleUploadSuccess = (fileList: FileItem[]) => {
- ruleFormData.attachment = fileList;
- };
- const handleValidate = async () => {
- if (!basicFormRef.value) return;
- const parentValidateResult = await basicFormRef.value.validateForm();
- let childValidateResult = true;
- if (selectGroupRef.value) {
- childValidateResult = (await selectGroupRef.value.validateForm()) as boolean;
- }
- return parentValidateResult && childValidateResult;
- };
- const getFormData = async () => {
- if (!ruleFormData.isPush) {
- ruleFormData.userGroupList = [];
- }
- cloneRuleFormData();
- const res: UpdateNoticeQuery = {
- id: props.id,
- managementType: 2,
- name: ruleFormData.name,
- content: ruleFormData.content,
- attachment: JSON.stringify(await formatAttachmentList(ruleFormData.attachment)),
- isPush: ruleFormData.isPush,
- userGroupList: ruleFormData.userGroupList?.join(','),
- remark: ruleFormData.remark,
- effectState: 0,
- };
- 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 updateNotice(params);
- ElMessage.success('编辑成功');
- router.back();
- } catch (e) {
- console.log(e);
- } finally {
- formLoading.value = false;
- }
- };
- onMounted(() => {
- beforeRouteLeave();
- getDetail();
- });
- </script>
- <style scoped lang="scss">
- @use '@/styles/page-details-layout.scss' as *;
- </style>
|