;
+}
diff --git a/ruoyi-fastapi-backend/module_generator/templates/react/view.jsx.jinja2 b/ruoyi-fastapi-backend/module_generator/templates/react/view.jsx.jinja2
new file mode 100644
index 000000000..7e66fc13d
--- /dev/null
+++ b/ruoyi-fastapi-backend/module_generator/templates/react/view.jsx.jinja2
@@ -0,0 +1,33 @@
+{% from 'react/controls.jinja2' import display %}
+import { useEffect, useState } from 'react';
+import { Descriptions, Drawer, Spin, Table } from 'antd';
+import DOMPurify from 'dompurify';
+import { get{{ BusinessName }} } from '@/api/{{ moduleName }}/{{ businessName }}';
+import { useDict } from '@/utils/dict';
+import { formatBusinessTime } from '@/utils/time';
+import DictTag from '@/components/DictTag';
+import ImagePreview from '@/components/ImagePreview';
+import FileUpload from '@/components/FileUpload';
+export default function {{ BusinessName }}View({ id, onClose }) {
+ const dicts = useDict({{ dicts }});
+ const [data, setData] = useState({}), [loading, setLoading] = useState(false);
+ useEffect(() => { let active = true; if (id == null) return; setData({}); setLoading(true);
+ get{{ BusinessName }}(id).then(response => { if (active) setData(response.data || {}); }).catch(() => {}).finally(() => { if (active) setLoading(false); });
+ return () => { active = false; };
+ }, [id]);
+ return