From 26c6edf27f827c9645f3523edb0aadd7568fd1a0 Mon Sep 17 00:00:00 2001 From: smallchill Date: Thu, 24 Jan 2019 18:07:18 +0800 Subject: [PATCH] =?UTF-8?q?:tada:=20=E5=A2=9E=E5=8A=A0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E4=BB=A3=E7=A0=81=E5=8A=9F=E8=83=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../develop/support/BladeGenerator.java | 27 ++++++ .../resources/templates/sword/action.js.vm | 24 ++--- .../main/resources/templates/sword/add.js.vm | 73 ++++++++++++++ .../main/resources/templates/sword/edit.js.vm | 97 +++++++++++++++++++ .../main/resources/templates/sword/list.js.vm | 82 ++++++++++++++++ .../resources/templates/sword/model.js.vm | 8 +- .../main/resources/templates/sword/view.js.vm | 74 ++++++++++++++ 7 files changed, 370 insertions(+), 15 deletions(-) create mode 100644 blade-ops/blade-develop/src/main/resources/templates/sword/add.js.vm create mode 100644 blade-ops/blade-develop/src/main/resources/templates/sword/edit.js.vm create mode 100644 blade-ops/blade-develop/src/main/resources/templates/sword/list.js.vm create mode 100644 blade-ops/blade-develop/src/main/resources/templates/sword/view.js.vm diff --git a/blade-ops/blade-develop/src/main/java/org/springblade/develop/support/BladeGenerator.java b/blade-ops/blade-develop/src/main/java/org/springblade/develop/support/BladeGenerator.java index 60fdc592..0e6d40c7 100644 --- a/blade-ops/blade-develop/src/main/java/org/springblade/develop/support/BladeGenerator.java +++ b/blade-ops/blade-develop/src/main/java/org/springblade/develop/support/BladeGenerator.java @@ -205,12 +205,15 @@ public class BladeGenerator { pc.setXml("mapper"); mpg.setPackageInfo(pc); + String servicePackage = serviceName.split("-").length > 1 ? serviceName.split("-")[1] : serviceName; + // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { Map map = new HashMap<>(16); map.put("serviceName", serviceName); + map.put("servicePackage", servicePackage); this.setMap(map); } }; @@ -251,6 +254,30 @@ public class BladeGenerator { return getOutputWebDir() + "/services" + "/" + tableInfo.getEntityName().toLowerCase() + ".js"; } }); + focList.add(new FileOutConfig("/templates/sword/list.js.vm") { + @Override + public String outputFile(TableInfo tableInfo) { + return getOutputWebDir() + "/pages" + "/" + StringUtil.upperFirst(servicePackage) + "/" + tableInfo.getEntityName() + "/" + tableInfo.getEntityName() + ".js"; + } + }); + focList.add(new FileOutConfig("/templates/sword/add.js.vm") { + @Override + public String outputFile(TableInfo tableInfo) { + return getOutputWebDir() + "/pages" + "/" + StringUtil.upperFirst(servicePackage) + "/" + tableInfo.getEntityName() + "/" + tableInfo.getEntityName() + "Add.js"; + } + }); + focList.add(new FileOutConfig("/templates/sword/edit.js.vm") { + @Override + public String outputFile(TableInfo tableInfo) { + return getOutputWebDir() + "/pages" + "/" + StringUtil.upperFirst(servicePackage) + "/" + tableInfo.getEntityName() + "/" + tableInfo.getEntityName() + "Edit.js"; + } + }); + focList.add(new FileOutConfig("/templates/sword/view.js.vm") { + @Override + public String outputFile(TableInfo tableInfo) { + return getOutputWebDir() + "/pages" + "/" + StringUtil.upperFirst(servicePackage) + "/" + tableInfo.getEntityName() + "/" + tableInfo.getEntityName() + "View.js"; + } + }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); diff --git a/blade-ops/blade-develop/src/main/resources/templates/sword/action.js.vm b/blade-ops/blade-develop/src/main/resources/templates/sword/action.js.vm index c99a24bb..e0eb4768 100644 --- a/blade-ops/blade-develop/src/main/resources/templates/sword/action.js.vm +++ b/blade-ops/blade-develop/src/main/resources/templates/sword/action.js.vm @@ -1,37 +1,37 @@ -#set($moduleName=$table.entityPath.toUpperCase()) -export const $!{moduleName}_NAMESPACE = '$!{table.entityPath}'; +#set($upperEntityPath=$table.entityPath.toUpperCase()) +export const $!{upperEntityPath}_NAMESPACE = '$!{table.entityPath}'; -export function $!{moduleName}_LIST(payload) { +export function $!{upperEntityPath}_LIST(payload) { return { - type: `${$!{moduleName}_NAMESPACE}/fetchList`, + type: `${$!{upperEntityPath}_NAMESPACE}/fetchList`, payload, }; } -export function $!{moduleName}_DETAIL(id) { +export function $!{upperEntityPath}_DETAIL(id) { return { - type: `${$!{moduleName}_NAMESPACE}/fetchDetail`, + type: `${$!{upperEntityPath}_NAMESPACE}/fetchDetail`, payload: { id }, }; } -export function $!{moduleName}_CLEAR_DETAIL() { +export function $!{upperEntityPath}_CLEAR_DETAIL() { return { - type: `${$!{moduleName}_NAMESPACE}/clearDetail`, + type: `${$!{upperEntityPath}_NAMESPACE}/clearDetail`, payload: {}, }; } -export function $!{moduleName}_SUBMIT(payload) { +export function $!{upperEntityPath}_SUBMIT(payload) { return { - type: `${$!{moduleName}_NAMESPACE}/submit`, + type: `${$!{upperEntityPath}_NAMESPACE}/submit`, payload, }; } -export function $!{moduleName}_REMOVE(payload) { +export function $!{upperEntityPath}_REMOVE(payload) { return { - type: `${$!{moduleName}_NAMESPACE}/remove`, + type: `${$!{upperEntityPath}_NAMESPACE}/remove`, payload, }; } diff --git a/blade-ops/blade-develop/src/main/resources/templates/sword/add.js.vm b/blade-ops/blade-develop/src/main/resources/templates/sword/add.js.vm new file mode 100644 index 00000000..b1480a42 --- /dev/null +++ b/blade-ops/blade-develop/src/main/resources/templates/sword/add.js.vm @@ -0,0 +1,73 @@ +#set($upperEntityPath=$table.entityPath.toUpperCase()) +import React, { PureComponent } from 'react'; +import { Form, Input, Card, Button } from 'antd'; +import { connect } from 'dva'; +import Panel from '../../../components/Panel'; +import styles from '../../../layouts/Sword.less'; +import { $!{upperEntityPath}_SUBMIT } from '../../../actions/$!{table.entityPath}'; + +const FormItem = Form.Item; + +@connect(({ loading }) => ({ + submitting: loading.effects['$!{table.entityPath}/submit'], +})) +@Form.create() +class $!{entity}Add extends PureComponent { + handleSubmit = e => { + e.preventDefault(); + const { dispatch, form } = this.props; + form.validateFieldsAndScroll((err, values) => { + if (!err) { + dispatch($!{upperEntityPath}_SUBMIT(values)); + } + }); + }; + + render() { + const { + form: { getFieldDecorator }, + submitting, + } = this.props; + + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 7 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 12 }, + md: { span: 10 }, + }, + }; + + const action = ( + + ); + + return ( + +
+ +#foreach($field in $!{table.fields}) + + {getFieldDecorator('$!{field.propertyName}', { + rules: [ + { + required: true, + message: '请输入$!{field.comment}', + }, + ], + })()} + +#end + +
+
+ ); + } +} + +export default $!{entity}Add; diff --git a/blade-ops/blade-develop/src/main/resources/templates/sword/edit.js.vm b/blade-ops/blade-develop/src/main/resources/templates/sword/edit.js.vm new file mode 100644 index 00000000..87d9903e --- /dev/null +++ b/blade-ops/blade-develop/src/main/resources/templates/sword/edit.js.vm @@ -0,0 +1,97 @@ +#set($upperEntityPath=$table.entityPath.toUpperCase()) +import React, { PureComponent } from 'react'; +import { Form, Input, Card, Button } from 'antd'; +import { connect } from 'dva'; +import Panel from '../../../components/Panel'; +import styles from '../../../layouts/Sword.less'; +import { $!{upperEntityPath}_DETAIL, $!{upperEntityPath}_SUBMIT } from '../../../actions/$!{table.entityPath}'; + +const FormItem = Form.Item; + +@connect(({ $!{table.entityPath}, loading }) => ({ + $!{table.entityPath}, + submitting: loading.effects['code/submit'], +})) +@Form.create() +class $!{entity}Edit extends PureComponent { + componentWillMount() { + const { + dispatch, + match: { + params: { id }, + }, + } = this.props; + dispatch($!{upperEntityPath}_DETAIL(id)); + } + + handleSubmit = e => { + e.preventDefault(); + const { + dispatch, + match: { + params: { id }, + }, + form, + } = this.props; + form.validateFieldsAndScroll((err, values) => { + if (!err) { + const params = { + id, + ...values, + }; + console.log(params); + dispatch($!{upperEntityPath}_SUBMIT(params)); + } + }); + }; + + render() { + const { + form: { getFieldDecorator }, + $!{table.entityPath}: { detail }, + submitting, + } = this.props; + + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 7 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 12 }, + md: { span: 10 }, + }, + }; + + const action = ( + + ); + + return ( + +
+ +#foreach($field in $!{table.fields}) + + {getFieldDecorator('$!{field.propertyName}', { + rules: [ + { + required: true, + message: '请输入$!{field.comment}', + }, + ], + initialValue: detail.$!{field.propertyName}, + })()} + +#end + +
+
+ ); + } +} + +export default $!{entity}Edit; diff --git a/blade-ops/blade-develop/src/main/resources/templates/sword/list.js.vm b/blade-ops/blade-develop/src/main/resources/templates/sword/list.js.vm new file mode 100644 index 00000000..dd5604b1 --- /dev/null +++ b/blade-ops/blade-develop/src/main/resources/templates/sword/list.js.vm @@ -0,0 +1,82 @@ +#set($upperEntityPath=$table.entityPath.toUpperCase()) +import React, { PureComponent } from 'react'; +import { connect } from 'dva'; +import { Button, Col, Form, Input, Row } from 'antd'; +import Panel from '../../../components/Panel'; +import { $!{upperEntityPath}_LIST } from '../../../actions/$!{table.entityPath}'; +import Grid from '../../../components/Sword/Grid'; + +const FormItem = Form.Item; + +@connect(({ $!{table.entityPath}, loading }) => ({ + $!{table.entityPath}, + loading: loading.models.param, +})) +@Form.create() +class $!{entity} extends PureComponent { + // ============ 查询 =============== + handleSearch = params => { + const { dispatch } = this.props; + dispatch($!{upperEntityPath}_LIST(params)); + }; + + // ============ 查询表单 =============== + renderSearchForm = onReset => { + const { form } = this.props; + const { getFieldDecorator } = form; + + return ( + + + + {getFieldDecorator('name')()} + + + +
+ + +
+ +
+ ); + }; + + render() { + const code = '$!{table.entityPath}'; + + const { + form, + loading, + param: { data }, + } = this.props; + + const columns = [ +#foreach($field in $!{table.fields}) + { + title: '$!{field.comment}', + dataIndex: '$!{field.propertyName}', + }, +#end + ]; + + return ( + + + + ); + } +} +export default $!{entity}; diff --git a/blade-ops/blade-develop/src/main/resources/templates/sword/model.js.vm b/blade-ops/blade-develop/src/main/resources/templates/sword/model.js.vm index 954649de..54b40c1d 100644 --- a/blade-ops/blade-develop/src/main/resources/templates/sword/model.js.vm +++ b/blade-ops/blade-develop/src/main/resources/templates/sword/model.js.vm @@ -1,10 +1,11 @@ -#set($moduleName=$table.entityPath.toUpperCase()) +#set($upperEntityPath=$table.entityPath.toUpperCase()) import { message } from 'antd'; -import { $!{moduleName}_NAMESPACE } from '../actions/$!{table.entityPath}'; +import router from 'umi/router'; +import { $!{upperEntityPath}_NAMESPACE } from '../actions/$!{table.entityPath}'; import { list, submit, detail, remove } from '../services/$!{table.entityPath}'; export default { - namespace: $!{moduleName}_NAMESPACE, + namespace: $!{upperEntityPath}_NAMESPACE, state: { data: { list: [], @@ -46,6 +47,7 @@ export default { const response = yield call(submit, payload); if (response.success) { message.success('提交成功'); + router.push('/$!{cfg.servicePackage}/$!{table.entityPath}'); } }, *remove({ payload }, { call }) { diff --git a/blade-ops/blade-develop/src/main/resources/templates/sword/view.js.vm b/blade-ops/blade-develop/src/main/resources/templates/sword/view.js.vm new file mode 100644 index 00000000..43b17c82 --- /dev/null +++ b/blade-ops/blade-develop/src/main/resources/templates/sword/view.js.vm @@ -0,0 +1,74 @@ +#set($upperEntityPath=$table.entityPath.toUpperCase()) +import React, { PureComponent } from 'react'; +import router from 'umi/router'; +import { Form, Card, Button } from 'antd'; +import { connect } from 'dva'; +import Panel from '../../../components/Panel'; +import styles from '../../../layouts/Sword.less'; +import { $!{upperEntityPath}_DETAIL } from '../../../actions/$!{table.entityPath}'; + +const FormItem = Form.Item; + +@connect(({ code }) => ({ + code, +})) +@Form.create() +class $!{entity}View extends PureComponent { + componentWillMount() { + const { + dispatch, + match: { + params: { id }, + }, + } = this.props; + dispatch($!{upperEntityPath}_DETAIL(id)); + } + + handleEdit = () => { + const { + match: { + params: { id }, + }, + } = this.props; + router.push(`/$!{cfg.servicePackage}/$!{table.entityPath}/edit/${id}`); + }; + + render() { + const { + $!{table.entityPath}: { detail }, + } = this.props; + + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 7 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 12 }, + md: { span: 10 }, + }, + }; + + const action = ( + + ); + + return ( + +
+ +#foreach($field in $!{table.fields}) + + {detail.$!{field.propertyName}} + +#end + +
+
+ ); + } +} +export default $!{entity}View;