<template> <div class="ns-view"> <a-spin :spinning="isLoading"> <a-page-header class="ns-page-header" :title="title"> <template #extra> <!-- todo 隐藏取消--> <ns-button @click="navigateBack">返 回</ns-button> <ns-button style="margin-left: 10px" type="primary" @click="submit" :disabled="!nsFormElRef?.validateResult" >保 存</ns-button > </template> </a-page-header> <div class="ns-add-form"> <ns-form ref="nsFormElRef" v-bind="getBindValue" :model="formModel"> <template #[item]="data" v-for="item in Object.keys($slots)"> <slot :name="item" v-bind="data || {}"></slot> </template> </ns-form> </div> </a-spin> </div> </template> <script lang="ts"> import { computed, defineComponent, ref, watch } from 'vue'; import { http } from '/nerv-lib/util/http'; import { NsMessage } from '/nerv-lib/component/message'; import { formProps } from '/nerv-lib/component/form/form/props'; import { PropTypes } from '/nerv-lib/util/type'; import { useNavigate } from '/nerv-lib/use/use-navigate'; import { HttpRequestConfig, useApi } from '/nerv-lib/use/use-api'; import { useRoute } from 'vue-router'; export default defineComponent({ name: 'NsViewForm', props: { ...formProps, api: PropTypes.string, editApi: PropTypes.string, title: PropTypes.string, isEdit: { type: Boolean, default: false, }, }, setup(props, { attrs }) { const nsFormElRef = ref(); const { httpRequest } = useApi(); const isLoading = ref(false); const { navigateBack } = useNavigate(); const route = useRoute(); const formModel = ref<Recordable>(props.model || {}); const request = () => { const { api, editApi } = props; const { params, query } = route; const requestConfig: HttpRequestConfig = { method: 'get' }; httpRequest({ api: editApi ? editApi : api, params: query, pathParams: params, requestConfig, }).then((res: Recordable) => { formModel.value = res.data; }); }; watch( [() => props.api, () => props.editApi], () => { console.log('editApi', props.editApi); request(); }, { immediate: true, }, ); const getBindValue = computed(() => ({ ...attrs, ...props, })); function submit() { nsFormElRef.value .triggerSubmit() .then((data: any) => { isLoading.value = true; http .post(props.api, data) .then(() => { isLoading.value = false; NsMessage.success('操作成功', 1, () => { navigateBack(); }); }) .catch(() => { isLoading.value = false; }); }) .catch(() => {}); } return { nsFormElRef, submit, getBindValue, isLoading, navigateBack, formModel }; }, }); </script> <style lang="less" scoped> //.ns-page-header { // margin: 0px 16px 20px 0; // border-bottom: 1px solid #f0f2f5; //} .ns-add-form .ns-vertical-form { max-width: 600px; margin: 24px auto; } :deep(.ant-spin-nested-loading) { height: 100%; } .ant-spin-nested-loading { height: 100%; } :deep(.ant-spin-container) { height: 100%; overflow: hidden; } :deep(.ns-add-form) { height: calc(100% - 83px) !important; overflow: auto; } </style>