From eb50ad480e54e49179d5fc11f4589e60f3a1fc20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BE=E5=87=A0=E6=B5=B7?= Date: Sat, 13 Jul 2024 12:29:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF=E6=8C=81=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=96=87=E4=BB=B6=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/codeTemplate.js | 215 ++++++++++++++---- .../controller.js | 11 +- package.json | 4 +- 3 files changed, 178 insertions(+), 52 deletions(-) diff --git a/exts/yapi-plugin-gen-java-services/Services/codeTemplate.js b/exts/yapi-plugin-gen-java-services/Services/codeTemplate.js index 1d6cd56..ccf182d 100644 --- a/exts/yapi-plugin-gen-java-services/Services/codeTemplate.js +++ b/exts/yapi-plugin-gen-java-services/Services/codeTemplate.js @@ -1,23 +1,27 @@ -import React, {Component} from 'react'; +import React, {Component, Fragment} from 'react'; import {connect} from 'react-redux'; import PropTypes from 'prop-types'; -import {Form, Button, message} from 'antd'; +import {Form, Button, message, Tabs, Modal, Input} from 'antd'; import {handleSwaggerUrlData} from 'client/reducer/modules/project'; + +const {TabPane} = Tabs; const FormItem = Form.Item; +const {confirm} = Modal; + import axios from 'axios'; import AceEditor from "../../../client/components/AceEditor/AceEditor"; -// layout + const formItemLayout = { labelCol: { - lg: {span: 5}, - xs: {span: 24}, - sm: {span: 10} + lg: {span: 1}, + xs: {span: 3}, + sm: {span: 2} }, wrapperCol: { - lg: {span: 16}, - xs: {span: 24}, - sm: {span: 12} + lg: {span: 22}, + xs: {span: 18}, + sm: {span: 20} }, className: 'form-item' }; @@ -50,22 +54,35 @@ export default class CodeGenTemplate extends Component { handleSwaggerUrlData: PropTypes.func }; + getAddTemplate(isDefault = false) { + let data = {tag_desc: "新增模板", tag: 'add'} + if (isDefault) { + data['tag_desc_t'] = '默认' + data['tag_t'] = 'default' + } + return data; + } + constructor(props) { super(props); this.state = { - config_data: {template_data: "", _id: null} + config_data: {template_data: "", _id: null}, + templateList: [], + activeKey: "default" }; } - handleSubmit = async () => { + handleSubmit = async (data) => { const {form, projectId} = this.props; let params = { project_id: projectId, - template_data: this.state.config_data.template_data, + tag: data.tag_t || data.tag, + tag_desc: data.tag_desc_t || data.tag_desc, + template_data: data.template_data, uid: this.props.projectMsg.uid }; - if (this.state.config_data._id) { - params.id = this.state.config_data._id; + if (data._id) { + params.id = data._id; } form.validateFields(async (err, values) => { if (!err) { @@ -73,6 +90,7 @@ export default class CodeGenTemplate extends Component { await axios.post('/api/plugin/template/save', assignValue).then(res => { if (res.data.errcode === 0) { message.success('保存成功'); + this.getSyncData(); } else { message.error(res.data.errmsg); } @@ -86,7 +104,8 @@ export default class CodeGenTemplate extends Component { UNSAFE_componentWillMount() { //查询同步任务 this.setState({ - config_data: {} + config_data: {template_data: "", _id: null}, + templateList: [] }); this.getSyncData(); } @@ -95,50 +114,158 @@ export default class CodeGenTemplate extends Component { let projectId = this.props.projectMsg._id; let result = await axios.get('/api/plugin/template/get?projectId=' + projectId); if (result.data.errcode === 0) { - if (result.data.data) { - let templateData = result.data.data.find(it => it.tag === "default") - if (templateData == null) { - templateData = result.data.data[0] + if (result.data.data && result.data.data.length) { + let defaultTemplate = result.data.data.find(it => it.tag === "default") + if (defaultTemplate == null) { + defaultTemplate = result.data.data[0] || {} } this.setState({ - config_data: templateData + defaultTemplate, + activeKey: defaultTemplate.tag, + templateList: result.data.data + }); + } else { + this.setState({ + activeKey: "add", + templateList: [this.getAddTemplate(true)] }); } } } - handleTemplateInput = e => { - let config_data = this.state.config_data; - config_data.template_data = e.text; - this.setState({ - config_data: config_data - }); + handleTemplateInput = (e, data) => { + data.template_data = e.text; + this.setState() }; + onTabChange(key) { + this.setState({ + activeKey: key + }) + } + + async onTabEdit(targetKey, action) { + // this[action](targetKey); + let templateData = this.state.templateList.find(it => it.tag === targetKey) + console.log(targetKey, action, templateData) + confirm({ + title: '是否要删除此模板?', + content: '删除后将无法找回,是否继续', + onOk: async () => { + await axios.delete('/api/plugin/template/' + templateData._id); + message.success("删除成功") + this.getSyncData(); + }, + onCancel() { + } + }); + } + + addNewTemplate() { + if (this.state.templateList.find(it => it.tag === 'add')) { + message.info("请先保存新增的模板") + this.setState({ + activeKey: 'add' + }) + return; + } + let data = [...this.state.templateList, this.getAddTemplate()]; + console.log(data) + this.setState({ + templateList: data, + activeKey: 'add' + }) + } + render() { - const templateEditor = ( - - + const {getFieldDecorator} = this.props.form; - + let panes = []; + console.log("this.state.templateList", this.state.templateList) + + if (this.state.templateList) { + panes = this.state.templateList.map(it => { + return { + title: it.tag_desc, + key: it.tag, + content: it.tag, + data: it + } + }) + } + + let newTemplateData = this.state.templateList.find(it => it.tag === 'add'); + let onFieldChange = (e, field) => { + newTemplateData[field] = e.text + } + + const addContent = this.state.activeKey === 'add' && newTemplateData.tag_t !== 'default' && ( + + + {getFieldDecorator('tag', { + rules: [ + { + required: true, + message: '文件名必填哦,用来标识你的每个不同的模板' + } + ], + initialValue: newTemplateData.tag_t + })( onFieldChange(e, "tag_t")}/>)} + + + {getFieldDecorator('tag_desc', { + rules: [ + { + required: true, + message: '文件描述必填哦' + } + ], + initialValue: newTemplateData.tag_desc_t + })( onFieldChange(e, "tag_desc_t")}/>)} + + ) + + return (
-
-
- {templateEditor} -
- - - -
+ this.onTabChange(key)} + activeKey={this.state.activeKey} + type="card" + tabBarExtraContent={} + onEdit={(t, e) => this.onTabEdit(t, e)} + > + {panes.map(pane => ( + +
+
+ {addContent} + + this.handleTemplateInput(e, pane.data)} + style={{minHeight: '500px'}} + /> + +
+ + + +
+
+ ))} +
+ +
); } diff --git a/exts/yapi-plugin-gen-java-services/controller.js b/exts/yapi-plugin-gen-java-services/controller.js index 1af3be9..1ca0dbd 100644 --- a/exts/yapi-plugin-gen-java-services/controller.js +++ b/exts/yapi-plugin-gen-java-services/controller.js @@ -90,16 +90,15 @@ class exportController extends baseController { if ((await this.checkAuth(projectId, 'project', 'edit')) !== true) { return (ctx.body = yapi.commons.resReturn(null, 405, '没有权限')); } - let existData = await this.genCodeModel.listByProjectId(projectId); - - if (existData.find(templ => templ.tag === requestBody.tag)){ - return (ctx.body = yapi.commons.resReturn(null, 502, 'tag已存在')); - } - let result; if (requestBody.id) { result = await this.genCodeModel.up(requestBody); } else { + let existData = await this.genCodeModel.listByProjectId(projectId); + + if (existData.find(templ => templ.tag === requestBody.tag)){ + return (ctx.body = yapi.commons.resReturn(null, 502, 'tag已存在')); + } result = await this.genCodeModel.save(requestBody); } diff --git a/package.json b/package.json index e639bb1..0a3f630 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,10 @@ "description": "YAPI", "main": "server/app.js", "scripts": { - "dev-copy-icon": "cp -r static/iconfont ./", + "dev-copy-icon": "copy static\\iconfont .\\", "dev-server": " nodemon server/app.js dev -L", "install-server": " node server/install.js", - "dev-client": "npm run dev-copy-icon && ykit s -p 4000", + "dev-client": "ykit s -p 4000", "dev": "npm run dev-server & npm run dev-client", "start": " node server/app.js", "test": "ava",