Переглянути джерело

Merge branch 'master' of http://gogs.ioobot.com:6680/xy/online

wly 7 роки тому
батько
коміт
48b4adc1e7

+ 88 - 11
src/app/App.jsx

@@ -1,5 +1,5 @@
 import React, {Component} from 'react';
-import {Layout, Menu, Button, Spin, Icon, LocaleProvider} from 'antd';
+import {Layout, Menu, Button, Spin, Icon, LocaleProvider, Dropdown} from 'antd';
 import {BrowserRouter as Router, Route, Link, Switch, Redirect} from "react-router-dom";
 import {Query} from "react-apollo";
 import gql from "graphql-tag";
@@ -20,7 +20,7 @@ import './index.css'
 import Create from "./graphqlService/component/schema/Create";
 import WxCreate from "./wechatService/wxCreate/WxCreate";
 
-import {SHOW_ALL_SCHEMA, SHOW_CASE_SCHEMA, SHOW_PROJECT, CASE_AND_PROJECT} from "../gql";
+import {SHOW_ALL_SCHEMA, SHOW_CASE_SCHEMA, SHOW_PROJECT, CASE_AND_PROJECT, GET_USER} from "../gql";
 import axios from 'axios';
 import {getCookie, setCookie} from "../cookie";
 
@@ -42,7 +42,8 @@ class App extends Component {
             locale: props.language === "中文" ? zhCN : undefined,
             languageButton: props.language === "中文" ? "English" : "中文",
             visible: false,
-            wxVisible: false
+            wxVisible: false,
+            userID: ''
         };
     }
 
@@ -62,11 +63,18 @@ class App extends Component {
                 .then((res) => {
                     if (res.data !== '') {
                         setCookie("user_id", res.data);
+                        this.setState({
+                            userID: res.data
+                        })
                     }
                 })
                 .catch(function (err) {
                     console.log(err);
                 });
+        } else {
+            this.setState({
+                userID
+            })
         }
     }
 
@@ -180,15 +188,22 @@ class App extends Component {
                             </Menu.Item>
                         </Menu>
 
-                        <Link to="/login">
-                            <Button className='login-button' type='primary'
-                                    onClick={() => this.switchMenuLevel('menuLevel1', 'user')}>
-                                <FormattedMessage id="Login"/></Button>
-                        </Link>
+                        {
+                            this.state.userID === '' ?
+                                <Link to="/login">
+                                    <Button className='login-button' type='primary'
+                                            onClick={() => this.switchMenuLevel('menuLevel1', 'user')}>
+                                        <FormattedMessage id="Login"/></Button>
+                                </Link>
+                                :
+                                <User
+                                    userID={this.state.userID}
+                                    languageButton={this.state.languageButton}
+                                    changeLocale={this.changeLocale}
+                                    switchMenuLevel={this.switchMenuLevel}
+                                />
+                        }
 
-                        <div className="change-locale">
-                            <Button size="small" onClick={(e) => this.changeLocale(e)}>{languageButton}</Button>
-                        </div>
                     </Header>
 
 
@@ -580,4 +595,66 @@ class WxConfigSiderbar extends Component {
             </Query>
         )
     }
+}
+
+class User extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            show: false
+        }
+    }
+
+    render() {
+        return (
+            <Query query={gql(GET_USER)} variables={{id: this.props.userID}}>
+                {
+                    ({loading, error, data}) => {
+                        if (loading) {
+                            return <Spin style={{marginLeft: 3}}/>
+                        }
+                        if (error) {
+                            return 'error!';
+                        }
+                        let user = data.user_by_id;
+                        if (user !== null) {
+                            const menu = (
+                                <Menu className={'user-detail'}>
+                                    <Menu.Item className={'user-info'}>
+                                        <p className={'user-info-nickname'}>{user.nickname}</p>
+                                        <p className={'user-info-email'}>{user.email}</p>
+                                    </Menu.Item>
+                                    <Menu.Item>
+                                        <a href='https://www.ioobot.com' onClick={(e) => {
+                                            e.preventDefault();
+                                            this.props.changeLocale(e)
+                                        }}>{this.props.languageButton}</a>
+                                    </Menu.Item>
+                                    <Menu.Item>
+                                        <Link to="/login">
+                                            <div onClick={() => this.props.switchMenuLevel('menuLevel1', 'user')}><FormattedMessage id="Account center"/></div>
+                                        </Link>
+                                    </Menu.Item>
+                                    <Menu.Item className={'login-out'}>
+                                        <a href='https://www.ioobot.com' onClick={(e) => {
+                                            e.preventDefault();
+                                        }}><FormattedMessage id="exit"/></a>
+                                    </Menu.Item>
+                                </Menu>
+                            );
+                            return (
+                                <div className='login-nickname' onClick={()=>{}}>
+                                    <Dropdown overlay={menu} placement="bottomRight" trigger={['click']}>
+                                        <div>
+                                            {user.nickname} <Icon type="down" />
+                                        </div>
+                                    </Dropdown>
+                                </div>
+                            )
+                        }
+                    }
+                }
+            </Query>
+        )
+    }
 }

+ 1 - 0
src/app/common/deploy/index.css

@@ -36,6 +36,7 @@ p.show {
 .vice-title {
     width: 150px;
     display: inline-block;
+    font-size: 14px;
 }
 
 .cloud-name {

+ 66 - 59
src/app/common/deploy/tencent/TencentConfig.js

@@ -37,7 +37,7 @@ class TencentConfig extends Component {
                 let dataProject = data.project_by_id;
                 if (dataProject !== null) {
                     this.setState({
-                        schemaState: dataProject.schema_id? dataProject.schema_id.schemaState : '',
+                        schemaState: dataProject.schema_id ? dataProject.schema_id.schemaState : '',
                         projectType: dataProject.projectType
                     });
                     switch (dataProject.projectStatus) {
@@ -45,7 +45,7 @@ class TencentConfig extends Component {
                             this.setState({
                                 currentStep: 5,
                                 stepAllShow: true,
-                                deploying: 'finished'
+                                deploying: 'deployed'
                             });
                             break;
                         case 'notificationed':
@@ -77,6 +77,7 @@ class TencentConfig extends Component {
                             this.setState({
                                 stepUpdated: true,
                                 stepAllShow: true,
+                                deploying: 'updated'
                             });
                             break;
                         case 'deploying':
@@ -116,13 +117,13 @@ class TencentConfig extends Component {
                 let dataProject = data.project_by_id;
                 if (dataProject !== null) {
                     this.setState({
-                        schemaState: dataProject.schema_id? dataProject.schema_id.schemaState : '',
+                        schemaState: dataProject.schema_id ? dataProject.schema_id.schemaState : '',
                         projectType: dataProject.projectType
                     });
                     switch (dataProject.projectStatus) {
                         case 'deployed':
                             this.setState({
-                                deploying: 'finished',
+                                deploying: 'deployed',
                                 currentStep: 5,
                                 stepAllShow: true
                             });
@@ -156,6 +157,7 @@ class TencentConfig extends Component {
                             this.setState({
                                 stepUpdated: true,
                                 stepAllShow: true,
+                                deploying: 'updated'
                             });
                             break;
                         case 'deploying':
@@ -193,7 +195,7 @@ class TencentConfig extends Component {
                     let group = dataProject.apiGWGroup_id.id;
                     request(graphqlUrl, SHOW_APIGWPATH, {apiGWGroup_id: group}).then(
                         data => {
-                            if(data.apiGWPath_by_props !== null) {
+                            if (data.apiGWPath_by_props !== null) {
 
                                 // 给 project 加 deploying 状态
                                 request(graphqlUrl, UPDATE_PROJECT_ONLY_STATUS, {
@@ -227,7 +229,7 @@ class TencentConfig extends Component {
                                         .then((res) => {
                                             console.log('deploy res', res);
                                             this.setState({
-                                                deploying: 'finished'
+                                                deploying: 'deployed'
                                             });
 
                                             // 给 project 加 deployed 状态
@@ -300,30 +302,26 @@ class TencentConfig extends Component {
                         :
                         ''
                 }
-                {
-                    this.state.stepUpdated ?
-
-                            this.props.trialcase ?
-                                ''
-                                :
-                                <div style={{marginBottom: 10}}>
-                                    <Alert message="进行了一次修改,未能确认是否完成" type="warning"
-                                           banner closable/>
-                                </div>
-                        :
-                        ''
-                }
                 <div style={{padding: '30px'}}>
                     <Row gutter={16}>
                         <Col span={14}>
 
                             {
-                                this.state.currentStep !== '' ?
-                                    <Steps current={this.state.currentStep} style={{marginBottom: 30}}>
-                                        <Step title={this.stepStatus(0)} description="云函数配置"/>
-                                        <Step title={this.stepStatus(1)} description="服务配置"/>
-                                        <Step title={this.stepStatus(2)} description="API 配置"/>
-                                        <Step title={this.stepStatus(3)} description="通知配置"/>
+                                this.state.currentStep !== '' || this.state.deploying === 'deploying' || this.state.deploying === 'deployed' ?
+                                    <Steps current={this.state.deploying !== 'deploying' ? this.state.currentStep : 4}
+                                           style={{marginBottom: 30}}>
+                                        <Step onClick={() => {
+                                            this.stepByStep(0)
+                                        }} title={this.stepStatus(0)} description="云函数配置"/>
+                                        <Step onClick={() => {
+                                            this.stepByStep(1)
+                                        }} title={this.stepStatus(1)} description="服务配置"/>
+                                        <Step onClick={() => {
+                                            this.stepByStep(2)
+                                        }} title={this.stepStatus(2)} description="API 配置"/>
+                                        <Step onClick={() => {
+                                            this.stepByStep(3)
+                                        }} title={this.stepStatus(3)} description="通知配置"/>
                                     </Steps>
                                     :
                                     ''
@@ -363,6 +361,7 @@ class TencentConfig extends Component {
                                                         stepByStep={this.stepByStep}
                                                         userID={this.props.userID}
                                                         projectID={projectID}
+                                                        stepAllShow={this.state.stepAllShow}
                                                     />
                                                 </Card>
                                         }
@@ -381,6 +380,7 @@ class TencentConfig extends Component {
                                                         stepByStep={this.stepByStep}
                                                         userID={this.props.userID}
                                                         projectID={projectID}
+                                                        stepAllShow={this.state.stepAllShow}
                                                     />
                                                 </Card>
                                         }
@@ -400,6 +400,7 @@ class TencentConfig extends Component {
                                                         trialcase={this.props.trialcase}
                                                         stepByStep={this.stepByStep}
                                                         projectID={projectID}
+                                                        stepAllShow={this.state.stepAllShow}
                                                     />
                                                 </Card>
                                         }
@@ -409,50 +410,56 @@ class TencentConfig extends Component {
                             }
 
                         </Col>
+                        <Col span={8} offset={2}>
+                            {
+                                this.state.currentStep === 4 || this.state.stepAllShow ?
+                                    this.props.trialcase ?
+                                        ''
+                                        :
+                                        this.state.projectType === 'graphql' ?
 
-                        {
-                            this.state.currentStep === 4 || this.state.stepAllShow ?
-                                <Col offset={2} span={6}>
-                                    {
-                                        this.props.trialcase ?
-                                            ''
-                                            :
-
-                                            this.state.projectType === 'graphql' ?
-
-                                                this.state.schemaState === 'ok' ?
+                                            this.state.schemaState === 'ok' ?
 
-                                                    this.state.deploying === '' ?
-                                                        <Button type='primary' onClick={this.deployFC}><FormattedMessage id="deploy"/>!</Button>
-                                                        :
-                                                        ''
-                                                    :
-                                                    <Button type='primary'
-                                                            disabled><FormattedMessage
+                                                this.state.deploying === '' ?
+                                                    <Button type='primary' onClick={this.deployFC}><FormattedMessage
                                                         id="deploy"/>!</Button>
+                                                    :
+                                                    ''
                                                 :
-                                                <Button type='primary' onClick={() => {
-                                                }}><FormattedMessage id="deploy"/>!</Button>
+                                                <Button type='primary'
+                                                        disabled><FormattedMessage
+                                                    id="deploy"/>!</Button>
+                                            :
+                                            <Button type='primary' onClick={() => {
+                                            }}><FormattedMessage id="deploy"/>!</Button>
+                                    :
+                                    ''
+                            }
 
-                                    }
-                                    {
-                                        this.state.deploying === 'deploying' ?
+                            {
+                                this.props.trialcase ?
+                                    <Progress type="circle" percent={100}/>
+                                    :
+                                    this.state.deploying === 'deploying' ?
+                                        <div>
                                             <Spin size="large"/>
+                                            &nbsp;&nbsp;
+                                            <span><b>大约需要等待 30s</b></span>
+                                        </div>
+                                        :
+                                        this.state.deploying === 'deployed' ?
+                                            <Progress type="circle" percent={100}/>
                                             :
-                                            this.state.deploying === 'finished' ?
-                                                <Progress type="circle" percent={100}/>
+                                            this.state.deploying === 'error' ?
+                                                <Progress type="circle" percent={99} status="exception"/>
                                                 :
-                                                this.state.deploying === 'error' ?
-                                                    <Progress type="circle" percent={99}
-                                                              status="exception"/>
+                                                this.state.deploying === 'updated' ?
+                                                    <Button type='primary' onClick={this.deployFC}><FormattedMessage
+                                                        id="redeploy"/>!</Button>
                                                     :
                                                     ''
-                                    }
-                                </Col>
-                                :
-                                ''
-                        }
-
+                            }
+                        </Col>
                     </Row>
                 </div>
             </div>

+ 3 - 1
src/app/common/deploy/tencent/apiGroupCard/APIGroupCardFetch.js

@@ -30,7 +30,7 @@ class APIGroupCardFetch extends Component {
                             cloudID = 'tencent_CloudID';
 
                         let dataProject = data.project_by_id;
-                        let {cloud_id, apiGWGroup_id, projectName} = dataProject;
+                        let {cloud_id, apiGWGroup_id, projectName, projectStatus} = dataProject;
 
                         if (cloud_id !== null && cloud_id.cloudName === 'tencent') {
                             group = apiGWGroup_id;
@@ -46,6 +46,7 @@ class APIGroupCardFetch extends Component {
                                 stepByStep={this.props.stepByStep}
                                 userID={this.props.userID}
                                 projectID={this.props.projectID}
+                                stepAllShow={this.props.stepAllShow}
 
                                 // this
                                 switchConfig={this.switchConfig}
@@ -55,6 +56,7 @@ class APIGroupCardFetch extends Component {
                                 defalutName={removeSpace(projectName)}
                                 group={group}
                                 cloudID={cloudID}
+                                projectStatus={projectStatus}
                             />
                         )
                     }

+ 56 - 38
src/app/common/deploy/tencent/apiGroupCard/APIGroupCardRender.js

@@ -104,7 +104,7 @@ class APIGroupCardRender extends Component {
         };
     };
 
-    ok = (id, userID, projectID, cloudID, group) => {
+    ok = (id, userID, projectID, cloudID, group, projectStatus) => {
         let {userStatus, userDomain, groupName, groupRegion, frontType, environmentName} = this.state;
         let region = shiftPrefix('ap-', groupRegion);
         let varObj = {
@@ -123,7 +123,7 @@ class APIGroupCardRender extends Component {
             createdAt: new Date().getTime(),
             updatedAt: ''
         };
-        if (group === '') {
+        if (group === '' || group === null) {
             request(graphqlUrl, ADD_APIGROUP, varObj).then(
                 data => {
                     if (data.create_apiGWGroup !== null) {
@@ -170,7 +170,7 @@ class APIGroupCardRender extends Component {
                         request(graphqlUrl, UPDATE_PROJECT_ONLY_STATUS, {
                             id: projectID,
                             updatedAt: new Date().getTime(),
-                            projectStatus: 'updated'
+                            projectStatus: projectStatus === 'deployed' ? 'updated': 'grouped'
                         }).then(data => {
                             if(data.update_project !== null)
                                 this.props.stepByStep(2);
@@ -243,6 +243,33 @@ class APIGroupCardRender extends Component {
                     </Radio.Group>
                 </div>
 
+                <div style={{marginBottom: 10}}>
+                            <span className='vice-title'>
+                                {
+                                    youMustFill['frontType'] ?
+                                        <span style={{
+                                            color: 'red',
+                                            display: 'inline',
+                                            marginRight: 10
+                                        }}>*</span>
+                                        :
+                                        ''
+                                }
+                                <FormattedMessage id={valueToKey['frontType']}/>
+                                &nbsp;
+                                <Tooltip placement="top" title={toolTipTitle['frontType']}>
+                                    <Icon type="question-circle"/>
+                                </Tooltip>
+                            </span>
+                    <Radio.Group onChange={this.switchConfig('frontType')}
+                                 defaultValue={this.state.frontType}
+                                 buttonStyle="solid">
+                        <Radio.Button value="http">http</Radio.Button>
+                        <Radio.Button value="https">https</Radio.Button>
+                        <Radio.Button value="http&https">http&https</Radio.Button>
+                    </Radio.Group>
+                </div>
+
                 <div style={{marginBottom: 10}}>
                     <span className='vice-title'>
                         {
@@ -269,33 +296,6 @@ class APIGroupCardRender extends Component {
                 <Collapse bordered={false}>
                     <Panel header={<FormattedMessage id="Want more options?"/>}
                            style={customPanelStyle}>
-
-                        <div style={{marginBottom: 10}}>
-                            <span className='vice-title'>
-                                {
-                                    youMustFill['frontType'] ?
-                                        <span style={{
-                                            color: 'red',
-                                            display: 'inline',
-                                            marginRight: 10
-                                        }}>*</span>
-                                        :
-                                        ''
-                                }
-                                <FormattedMessage id={valueToKey['frontType']}/>
-                                &nbsp;
-                                <Tooltip placement="top" title={toolTipTitle['frontType']}>
-                                    <Icon type="question-circle"/>
-                                </Tooltip>
-                            </span>
-                            <Radio.Group onChange={this.switchConfig('frontType')}
-                                         defaultValue={this.state.frontType}
-                                         buttonStyle="solid">
-                                <Radio.Button value="http">http</Radio.Button>
-                                <Radio.Button value="https">https</Radio.Button>
-                                <Radio.Button value="http&https">http&https</Radio.Button>
-                            </Radio.Group>
-                        </div>
                         {/*<div style={{marginBottom: 10}}>*/}
                         {/*<span className='vice-title'>{valueToKey['defaultDomain']}*/}
                         {/*&nbsp;*/}
@@ -341,10 +341,19 @@ class APIGroupCardRender extends Component {
                 {
                     manageUsers.includes(this.props.userID) ?
                         <div>
-                            <Button onClick={() => {
-                                const id = idGen('group');
-                                this.ok(id, this.props.userID, this.props.projectID, this.props.cloudID, this.props.group);
-                            }} type='primary'><FormattedMessage id="save"/></Button>
+                            <div>
+                                {
+                                    this.props.stepAllShow ? '' :
+                                        <Button onClick={() => {
+                                            this.props.stepByStep(0)
+                                        }}><FormattedMessage id="previous-step"/></Button>
+
+                                }
+                                <Button onClick={() => {
+                                    const id = idGen('group');
+                                    this.ok(id, this.props.userID, this.props.projectID, this.props.cloudID, this.props.group, this.props.projectStatus);
+                                }} type='primary'><FormattedMessage id="save"/></Button>
+                            </div>
                             {
                                 this.state.showOK === true ?
                                     <Icon type="check-circle" theme="twoTone" twoToneColor="#52c41a"/>
@@ -357,10 +366,19 @@ class APIGroupCardRender extends Component {
                             ''
                             :
                             <div>
-                                <Button onClick={() => {
-                                    const id = idGen('group');
-                                    this.ok(id, this.props.userID, this.props.projectID, this.props.cloudID, this.props.group);
-                                }} type='primary'><FormattedMessage id="save"/></Button>
+                                <div>
+                                    {
+                                        this.props.stepAllShow ? '' :
+                                            <Button onClick={() => {
+                                                this.props.stepByStep(0)
+                                            }}><FormattedMessage id="previous-step"/></Button>
+
+                                    }
+                                    <Button onClick={() => {
+                                        const id = idGen('group');
+                                        this.ok(id, this.props.userID, this.props.projectID, this.props.cloudID, this.props.group, this.props.projectStatus);
+                                    }} type='primary'><FormattedMessage id="save"/></Button>
+                                </div>
                                 {
                                     this.state.showOK === true ?
                                         <Icon type="check-circle" theme="twoTone"

+ 5 - 3
src/app/common/deploy/tencent/apiPathCard/APIPathCardFetch.js

@@ -31,7 +31,7 @@ class APIPathCardFetch extends Component {
                             path = '';
 
                         let dataProject = data.project_by_id;
-                        let {cloud_id, apiGWGroup_id, deploy_id, projectName} = dataProject;
+                        let {cloud_id, apiGWGroup_id, deploy_id, projectName, projectStatus} = dataProject;
 
                         if (cloud_id !== null && cloud_id.cloudName === 'tencent') {
                             group = apiGWGroup_id;
@@ -39,7 +39,7 @@ class APIPathCardFetch extends Component {
                         }
 
                         return (
-                            <Query query={gql(SHOW_APIGWPATH)} variables={{apiGWGroup_id: group.id}}>
+                            <Query query={gql(SHOW_APIGWPATH)} variables={{apiGWGroup_id: group? group.id : ''}}>
                                 {
                                     ({loading, error, data}) => {
                                         if (loading) {
@@ -59,14 +59,16 @@ class APIPathCardFetch extends Component {
                                                 stepByStep={this.props.stepByStep}
                                                 userID={this.props.userID}
                                                 projectID={this.props.projectID}
+                                                stepAllShow={this.props.stepAllShow}
 
                                                 // query1
                                                 deployID={deploy.id}
-                                                groupID={group.id}
+                                                groupID={group? group.id : ''}
 
                                                 // query2
                                                 defalutName={removeSpace(projectName)}
                                                 path={path}
+                                                projectStatus={projectStatus}
                                             />
                                         )
                                     }

+ 69 - 35
src/app/common/deploy/tencent/apiPathCard/APIPathCardRender.js

@@ -35,7 +35,7 @@ class APIPathCardRender extends Component {
         if(props.path !== '' && props.path !== null) {
             let {apiGWName, apiGWDesc, requestMethod} = props.path;
             this.state = {
-                configs: ['apiGWName', 'apiGWDesc'],
+                configs: ['apiGWDesc'],
                 showOK: false,
                 apiGWName,
                 apiGWDesc,
@@ -43,7 +43,7 @@ class APIPathCardRender extends Component {
             }
         } else {
             this.state = {
-                configs: ['apiGWName', 'apiGWDesc'],
+                configs: ['apiGWDesc'],
                 showOK: false,
                 apiGWName: props.defalutName,
                 apiGWDesc: '',
@@ -78,7 +78,7 @@ class APIPathCardRender extends Component {
         };
     };
 
-    ok = (id, userID, projectID, groupID, deployID, path) => {
+    ok = (id, userID, projectID, groupID, deployID, path, projectStatus) => {
         let {apiGWName, apiGWDesc, requestMethod} = this.state;
         let varObj = {
             id,
@@ -95,7 +95,7 @@ class APIPathCardRender extends Component {
             createdAt: new Date().getTime(),
             updatedAt: ''
         };
-        if (path === '') {
+        if (path === '' || path === null) {
             if (deployID !== '' && groupID !== '' && deployID !== null && groupID !== null) {
                 request(graphqlUrl, ADD_APIGWPATH, varObj).then(
                     data => {
@@ -140,7 +140,7 @@ class APIPathCardRender extends Component {
                         request(graphqlUrl, UPDATE_PROJECT_ONLY_STATUS, {
                             id: projectID,
                             updatedAt: new Date().getTime(),
-                            projectStatus: 'updated'
+                            projectStatus: projectStatus === 'deployed' ? 'updated': 'pathed'
                         }).then(data => {
                             if(data.update_project !== null)
                                 this.props.stepByStep(3);
@@ -167,6 +167,44 @@ class APIPathCardRender extends Component {
 
         return (
             <div>
+                <div key={'apiGWName'} style={{marginBottom: 10}}>
+                    <span className='vice-title'>
+                        {
+                            youMustFill['apiGWName']?
+                                <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
+                                :
+                                ''
+                        }
+                        <FormattedMessage id={valueToKey['apiGWName']}/>
+                        &nbsp;
+                        <Tooltip placement="top" title={toolTipTitle['apiGWName']}>
+                            <Icon type="question-circle"/>
+                        </Tooltip>
+                    </span>
+                    <Input value={this.state.apiGWName} style={{width: 400}}
+                           onChange={this.switchConfig('apiGWName')}/>
+                </div>
+                <div style={{marginBottom: 10}}>
+                            <span className='vice-title'>
+                                {
+                                    youMustFill['requestMethod']?
+                                        <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
+                                        :
+                                        ''
+                                }
+                                <FormattedMessage id={valueToKey['requestMethod']}/>
+                                &nbsp;
+                                <Tooltip placement="top" title={toolTipTitle['requestMethod']}>
+                                    <Icon type="question-circle"/>
+                                </Tooltip>
+                            </span>
+                    <Radio.Group onChange={this.switchConfig('requestMethod')}
+                                 defaultValue={this.state.requestMethod}
+                                 buttonStyle="solid">
+                        <Radio.Button value="GET">get</Radio.Button>
+                        <Radio.Button value="POST">post</Radio.Button>
+                    </Radio.Group>
+                </div>
                 <Collapse bordered={false}>
                     <Panel header={<FormattedMessage id="Want more options?"/>} style={customPanelStyle}>
                         {
@@ -185,41 +223,29 @@ class APIPathCardRender extends Component {
                                             <Icon type="question-circle"/>
                                         </Tooltip>
                                     </span>
-                                    <Input value={this.state[config]} style={{width: 200}}
+                                    <Input value={this.state[config]} style={{width: 400}}
                                            onChange={this.switchConfig(config)}/>
                                 </div>
                             ))
                         }
-                        <div style={{marginBottom: 10}}>
-                            <span className='vice-title'>
-                                {
-                                    youMustFill['requestMethod']?
-                                        <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
-                                        :
-                                        ''
-                                }
-                                <FormattedMessage id={valueToKey['requestMethod']}/>
-                                &nbsp;
-                                <Tooltip placement="top" title={toolTipTitle['requestMethod']}>
-                                    <Icon type="question-circle"/>
-                                </Tooltip>
-                            </span>
-                            <Radio.Group onChange={this.switchConfig('requestMethod')}
-                                         defaultValue={this.state.requestMethod}
-                                         buttonStyle="solid">
-                                <Radio.Button value="GET">get</Radio.Button>
-                                <Radio.Button value="POST">post</Radio.Button>
-                            </Radio.Group>
-                        </div>
+
                     </Panel>
                 </Collapse>
                 {
                     manageUsers.includes(this.props.userID) ?
                         <div>
-                            <Button onClick={()=>{
-                                const id = idGen('path');
-                                this.ok(id, this.props.userID, this.props.projectID, this.props.groupID, this.props.deployID, this.props.path);
-                            }} type='primary'><FormattedMessage id="save"/></Button>
+                            <div>
+                                {
+                                    this.props.stepAllShow? '' :
+                                        <Button onClick={()=>{
+                                            this.props.stepByStep(1)
+                                        }}><FormattedMessage id="previous-step"/></Button>
+                                }
+                                <Button onClick={()=>{
+                                    const id = idGen('path');
+                                    this.ok(id, this.props.userID, this.props.projectID, this.props.groupID, this.props.deployID, this.props.path, this.props.projectStatus);
+                                }} type='primary'><FormattedMessage id="save"/></Button>
+                            </div>
                             {
                                 this.state.showOK === true?
                                     <Icon type="check-circle" theme="twoTone" twoToneColor="#52c41a"/>
@@ -232,10 +258,18 @@ class APIPathCardRender extends Component {
                             ''
                             :
                             <div>
-                                <Button onClick={()=>{
-                                    const id = idGen('path');
-                                    this.ok(id, this.props.userID, this.props.projectID, this.props.groupID, this.props.deployID, this.props.path);
-                                }} type='primary'><FormattedMessage id="save"/></Button>
+                                <div>
+                                    {
+                                        this.props.stepAllShow? '' :
+                                            <Button onClick={()=>{
+                                                this.props.stepByStep(1)
+                                            }}><FormattedMessage id="previous-step"/></Button>
+                                    }
+                                    <Button onClick={()=>{
+                                        const id = idGen('path');
+                                        this.ok(id, this.props.userID, this.props.projectID, this.props.groupID, this.props.deployID, this.props.path, this.props.projectStatus);
+                                    }} type='primary'><FormattedMessage id="save"/></Button>
+                                </div>
                                 {
                                     this.state.showOK === true?
                                         <Icon type="check-circle" theme="twoTone" twoToneColor="#52c41a"/>

+ 2 - 1
src/app/common/deploy/tencent/deployCard/DeployCardFetch.js

@@ -40,7 +40,7 @@ class DeployCardFetch extends Component {
                             cloudID = 'tencent_CloudID';
 
                         let dataProject = data.project_by_id;
-                        let {cloud_id, deploy_id, projectName} = dataProject;
+                        let {cloud_id, deploy_id, projectName, projectStatus} = dataProject;
 
                         if (cloud_id !== null && cloud_id.cloudName === 'tencent') {
                             deploy = deploy_id;
@@ -61,6 +61,7 @@ class DeployCardFetch extends Component {
                                 defalutName={removeSpace(projectName)}
                                 deploy={deploy}
                                 cloudID={cloudID}
+                                projectStatus={projectStatus}
                             />
                         )
                     }

+ 71 - 38
src/app/common/deploy/tencent/deployCard/DeployCardRender.js

@@ -10,7 +10,7 @@ import {
     UPDATE_PROJECT_ONLY_STATUS
 } from "../../../../../gql";
 import {request} from 'graphql-request'
-import {removePrefix, shiftPrefix} from "../../../../../func";
+import {removePrefix, shiftPrefix, pushPostfix} from "../../../../../func";
 
 const Panel = Collapse.Panel;
 
@@ -59,13 +59,13 @@ class DeployCardRender extends Component {
         if(props.deploy !== '' && props.deploy !== null) {
             let {functionName, cosBucketName, cosObjectName, cosBucketRegion, serviceName, vpcId, subnetId, region, description} = props.deploy;
             this.state = {
-                configs: ['cosBucketName', 'cosObjectName', 'description', 'vpcId', 'subnetId'],
+                configs: ['description', 'vpcId', 'subnetId'],
                 description,
                 showOK: false,
                 functionName,
                 region,
                 cosBucketName,
-                cosObjectName,
+                cosObjectName: removePrefix('.jar', cosObjectName),
                 cosBucketRegion,
                 serviceName,
                 vpcId,
@@ -73,7 +73,7 @@ class DeployCardRender extends Component {
             }
         } else {
             this.state = {
-                configs: ['cosBucketName', 'cosObjectName', 'description', 'vpcId', 'subnetId'],
+                configs: ['description', 'vpcId', 'subnetId'],
                 description: '',
                 showOK: false,
                 functionName: props.defalutName,
@@ -96,7 +96,7 @@ class DeployCardRender extends Component {
                 functionName,
                 region: next.region === '' ? region : next.region,
                 cosBucketName,
-                cosObjectName,
+                cosObjectName: removePrefix('.jar', cosObjectName),
                 cosBucketRegion: next.region === '' ? cosBucketRegion : next.region,
                 serviceName,
                 vpcId,
@@ -124,21 +124,19 @@ class DeployCardRender extends Component {
         };
     };
 
-    ok = (id, userID, projectID, cloudID, deploy) => {
+    ok = (id, userID, projectID, cloudID, deploy, projectStatus) => {
         let {description, cosBucketName, subnetId, cosObjectName, region, vpcId, cosBucketRegion, functionName} = this.state;
-        region = shiftPrefix('ap-', region);
-        cosBucketRegion = shiftPrefix('ap-', cosBucketRegion);
         let varObj = {
             id,
             cloud_id: cloudID,
             user_id: userID,
+            cosObjectName: pushPostfix('.jar', cosObjectName),
+            region: shiftPrefix('ap-', region),
+            cosBucketRegion: shiftPrefix('ap-', cosBucketRegion),
             description,
             cosBucketName,
-            subnetId,
-            cosObjectName,
-            region,
             vpcId,
-            cosBucketRegion,
+            subnetId,
             functionName,
             memorySize: 512,
             timeout: 300,
@@ -148,7 +146,7 @@ class DeployCardRender extends Component {
             createdAt: new Date().getTime(),
             updatedAt: ''
         };
-        if (deploy === '') {
+        if (deploy === '' || deploy === null) {
             request(graphqlUrl, ADD_DEPLOY, varObj).then(
                 data => {
                     if (data.create_deploy !== null) {
@@ -176,17 +174,15 @@ class DeployCardRender extends Component {
             )
         } else {
             let {description, cosBucketName, subnetId, cosObjectName, region, vpcId, cosBucketRegion, functionName} = this.state;
-            region = shiftPrefix('ap-', region);
-            cosBucketRegion = shiftPrefix('ap-', cosBucketRegion);
             let varObj = {
                 id: deploy.id,
+                cosObjectName: pushPostfix('.jar', cosObjectName),
+                region: shiftPrefix('ap-', region),
+                cosBucketRegion: shiftPrefix('ap-', cosBucketRegion),
                 description,
                 subnetId,
                 cosBucketName,
-                cosObjectName,
-                region,
                 vpcId,
-                cosBucketRegion,
                 functionName,
                 updatedAt: new Date().getTime()
             };
@@ -199,7 +195,7 @@ class DeployCardRender extends Component {
                         request(graphqlUrl, UPDATE_PROJECT_ONLY_STATUS, {
                             id: projectID,
                             updatedAt: new Date().getTime(),
-                            projectStatus: 'updated'
+                            projectStatus: projectStatus === 'deployed' ? 'updated': 'functioned'
                         }).then(data => {
                             if(data.update_project !== null)
                                 this.props.stepByStep(1);
@@ -274,9 +270,7 @@ class DeployCardRender extends Component {
                         <Radio.Button value="chengdu"><FormattedMessage id="Chengdu"/></Radio.Button>
                     </Radio.Group>
                 </div>
-                <Collapse bordered={false}>
-                    <Panel header={<FormattedMessage id="Want more options?"/>} style={customPanelStyle}>
-                        <div style={{marginBottom: 10}}>
+                <div style={{marginBottom: 10}}>
                                     <span className='vice-title'>
                                 {
                                     youMustFill['cosBucketRegion']?
@@ -290,18 +284,57 @@ class DeployCardRender extends Component {
                                     <Icon type="question-circle"/>
                                 </Tooltip>
                             </span>
-                            <Radio.Group onChange={(e) => {
-                                // 如果不想一变所有都变,就将 onchange 改成
-                                // onChange={this.switchConfig('cosBucketRegion')}
-                                this.props.switchRegion(e);
-                            }} defaultValue={this.state.region}
-                                         value={removePrefix('ap-', this.state.cosBucketRegion)} buttonStyle="solid">
-                                <Radio.Button value="guangzhou"><FormattedMessage id="Guangzhou"/></Radio.Button>
-                                <Radio.Button value="shanghai"><FormattedMessage id="Shanghai"/></Radio.Button>
-                                <Radio.Button value="beijing"><FormattedMessage id="Beijing"/></Radio.Button>
-                                <Radio.Button value="chengdu"><FormattedMessage id="Chengdu"/></Radio.Button>
-                            </Radio.Group>
-                        </div>
+                    <Radio.Group onChange={(e) => {
+                        // 如果不想一变所有都变,就将 onchange 改成
+                        // onChange={this.switchConfig('cosBucketRegion')}
+                        this.props.switchRegion(e);
+                    }} defaultValue={this.state.region}
+                                 value={removePrefix('ap-', this.state.cosBucketRegion)} buttonStyle="solid">
+                        <Radio.Button value="guangzhou"><FormattedMessage id="Guangzhou"/></Radio.Button>
+                        <Radio.Button value="shanghai"><FormattedMessage id="Shanghai"/></Radio.Button>
+                        <Radio.Button value="beijing"><FormattedMessage id="Beijing"/></Radio.Button>
+                        <Radio.Button value="chengdu"><FormattedMessage id="Chengdu"/></Radio.Button>
+                    </Radio.Group>
+                </div>
+                <div key={'cosBucketName'} style={{marginBottom: 10}}>
+                                    <span className='vice-title'>
+                                        {
+                                            youMustFill['cosBucketName']?
+                                                <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
+                                                :
+                                                ''
+                                        }
+                                        <FormattedMessage id={valueToKey['cosBucketName']}/>
+                                        &nbsp;
+                                        <Tooltip placement="top" title={toolTipTitle['cosBucketName']}>
+                                            <Icon type="question-circle"/>
+                                        </Tooltip>
+                                    </span>
+                    <Input value={this.state.cosBucketName} style={{width: 400}}
+                           disabled={disable['cosBucketName'] === true}
+                           onChange={this.switchConfig('cosBucketName')}/>
+                </div>
+                <div key={'cosObjectName'} style={{marginBottom: 10}}>
+                                    <span className='vice-title'>
+                                        {
+                                            youMustFill['cosObjectName']?
+                                                <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
+                                                :
+                                                ''
+                                        }
+                                        <FormattedMessage id={valueToKey['cosObjectName']}/>
+                                        &nbsp;
+                                        <Tooltip placement="top" title={toolTipTitle['cosObjectName']}>
+                                            <Icon type="question-circle"/>
+                                        </Tooltip>
+                                    </span>
+                    <Input value={this.state.cosObjectName} style={{width: 400}}
+                           disabled={disable['cosObjectName'] === true} addonAfter=".jar"
+                           onChange={this.switchConfig('cosObjectName')}/>
+                </div>
+                <Collapse bordered={false}>
+                    <Panel header={<FormattedMessage id="Want more options?"/>} style={customPanelStyle}>
+
                         {/*腾讯云为空字符串,不显示,这里未作区分*/}
                         {/*<div style={{marginBottom: 10}}>*/}
                         {/*<span className='vice-title'>{valueToKey['serviceName']}*/}
@@ -310,7 +343,7 @@ class DeployCardRender extends Component {
                         {/*<Icon type="question-circle"/>*/}
                         {/*</Tooltip>*/}
                         {/*</span>*/}
-                        {/*<Input value={this.state.serviceName} style={{width: 200}} disabled*/}
+                        {/*<Input value={this.state.serviceName} style={{width: 400}} disabled*/}
                         {/*onChange={this.switchConfig('serviceName')}/>*/}
                         {/*</div>*/}
                         {
@@ -329,7 +362,7 @@ class DeployCardRender extends Component {
                                             <Icon type="question-circle"/>
                                         </Tooltip>
                                     </span>
-                                    <Input value={this.state[config]} style={{width: 200}}
+                                    <Input value={this.state[config]} style={{width: 400}}
                                            disabled={disable[config] === true}
                                            onChange={this.switchConfig(config)}/>
                                 </div>
@@ -343,7 +376,7 @@ class DeployCardRender extends Component {
                             <div>
                                 <Button onClick={() => {
                                     const id = idGen('deploy');
-                                    this.ok(id, this.props.userID, this.props.projectID, this.props.cloudID, this.props.deploy);
+                                    this.ok(id, this.props.userID, this.props.projectID, this.props.cloudID, this.props.deploy, this.props.projectStatus);
                                 }} type='primary'><FormattedMessage id="save"/></Button>
                                 {
                                     this.state.showOK === true ?
@@ -359,7 +392,7 @@ class DeployCardRender extends Component {
                                 <div>
                                     <Button onClick={() => {
                                         const id = idGen('deploy');
-                                        this.ok(id, this.props.userID, this.props.projectID, this.props.cloudID, this.props.deploy);
+                                        this.ok(id, this.props.userID, this.props.projectID, this.props.cloudID, this.props.deploy, this.props.projectStatus);
                                     }} type='primary'><FormattedMessage id="save"/></Button>
                                     {
                                         this.state.showOK === true ?

+ 4 - 1
src/app/common/deploy/tencent/notificationCard/NotificationCardFetch.js

@@ -5,6 +5,7 @@ import {Query} from "react-apollo";
 import gql from "graphql-tag";
 import {removeSpace} from "../../../../../func";
 import NotificationCardRender from './NotificationCardRender';
+import DeployCardRender from "../deployCard/DeployCardRender";
 
 class NotificationCardFetch extends Component {
     render() {
@@ -21,7 +22,7 @@ class NotificationCardFetch extends Component {
 
 
                         let dataProject = data.project_by_id;
-                        let {projectName} = dataProject;
+                        let {projectName, projectStatus} = dataProject;
 
                         let notification = dataProject.notification_id || '';
 
@@ -32,10 +33,12 @@ class NotificationCardFetch extends Component {
                                 stepByStep={this.props.stepByStep}
                                 userID={this.props.userID}
                                 projectID={this.props.projectID}
+                                stepAllShow={this.props.stepAllShow}
 
                                 // query
                                 notification={notification}
                                 defaultName={removeSpace(projectName)}
+                                projectStatus={projectStatus}
                             />
                         )
                     }

+ 48 - 35
src/app/common/deploy/tencent/notificationCard/NotificationCardRender.js

@@ -58,7 +58,7 @@ class NotificationCardFetch extends Component {
         }
     }
 
-    ok = (id, userID, projectID, notification) => {
+    ok = (id, userID, projectID, notification, projectStatus) => {
         let {type, webhook, name} = this.state;
         let varObj = {
             id,
@@ -69,7 +69,7 @@ class NotificationCardFetch extends Component {
             createdAt: new Date().getTime(),
             updatedAt: ''
         };
-        if (notification === '') {
+        if (notification === '' || notification === null) {
             request(graphqlUrl, ADD_NOTIFICATION, varObj).then(
                 data => {
                     if (data.create_notification !== null) {
@@ -112,7 +112,7 @@ class NotificationCardFetch extends Component {
                         request(graphqlUrl, UPDATE_PROJECT_ONLY_STATUS, {
                             id: projectID,
                             updatedAt: new Date().getTime(),
-                            projectStatus: 'updated'
+                            projectStatus: projectStatus === 'deployed' ? 'updated': 'notificationed'
                         }).then(data => {
                             if (data.update_project !== null)
                                 this.props.stepByStep(4);
@@ -131,21 +131,19 @@ class NotificationCardFetch extends Component {
     render() {
         return (
             <div>
-                <div className='kind'>
+                <div>
                     <p style={{marginBottom: 10}}><b><FormattedMessage id="Ding Talk"/></b></p>
-                    <div className='item'>
+                    <div>
                         <p style={{marginBottom: 10}}>
-                            <span className='item-title'>
-                                <span>
-                                    {
-                                        youMustFill['dingding webhook'] ?
-                                            <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
-                                            :
-                                            ''
-                                    }
-                                    <FormattedMessage id="Web hook"/>
-                                    &nbsp;
-                                </span>
+                            <span className='vice-title'>
+                                {
+                                    youMustFill['dingding webhook'] ?
+                                        <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
+                                        :
+                                        ''
+                                }
+                                <FormattedMessage id="Web hook"/>
+                                &nbsp;
                                 <Tooltip placement="top" title={toolTipTitle['dingding webhook']}>
                                     <Icon type="question-circle"/>
                                 </Tooltip>
@@ -157,17 +155,15 @@ class NotificationCardFetch extends Component {
                             }}/>
                         </p>
                         <p style={{marginBottom: 10}}>
-                            <span className='item-title'>
-                                <span>
-                                    {
-                                        youMustFill['notification name'] ?
-                                            <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
-                                            :
-                                            ''
-                                    }
-                                    <FormattedMessage id="Notification Name"/>
-                                    &nbsp;
-                                </span>
+                            <span className='vice-title'>
+                                {
+                                    youMustFill['notification name'] ?
+                                        <span style={{color: 'red', display: 'inline', marginRight: 10}}>*</span>
+                                        :
+                                        ''
+                                }
+                                <FormattedMessage id="Notification Name"/>
+                                &nbsp;
                                 <Tooltip placement="top" title={toolTipTitle['notification name']}>
                                     <Icon type="question-circle"/>
                                 </Tooltip>
@@ -206,18 +202,35 @@ class NotificationCardFetch extends Component {
                 <div>
                     {
                         manageUsers.includes(this.props.userID) ?
-                            <Button type="primary" onClick={() => {
-                                const id = idGen('notification');
-                                this.ok(id, this.props.userID, this.props.projectID, this.props.notification);
-                            }}><FormattedMessage id="save"/></Button>
+                            <div>
+                                {
+                                    this.props.stepAllShow? '' :
+                                        <Button onClick={()=>{
+                                            this.props.stepByStep(2)
+                                        }}><FormattedMessage id="previous-step"/></Button>
+                                }
+                                <Button type="primary" onClick={() => {
+                                    const id = idGen('notification');
+                                    this.ok(id, this.props.userID, this.props.projectID, this.props.notification, this.props.projectStatus);
+                                }}><FormattedMessage id="save"/></Button>
+                            </div>
+
                             :
                             this.props.trialcase ?
                                 ''
                                 :
-                                <Button type="primary" onClick={() => {
-                                    const id = idGen('notification');
-                                    this.ok(id, this.props.userID, this.props.projectID, this.props.notification);
-                                }}><FormattedMessage id="save"/></Button>
+                                <div>
+                                    {
+                                        this.props.stepAllShow? '' :
+                                            <Button onClick={()=>{
+                                                this.props.stepByStep(2)
+                                            }}><FormattedMessage id="previous-step"/></Button>
+                                    }
+                                    <Button type="primary" onClick={() => {
+                                        const id = idGen('notification');
+                                        this.ok(id, this.props.userID, this.props.projectID, this.props.notification, this.props.projectStatus);
+                                    }}><FormattedMessage id="save1"/></Button>
+                                </div>
                     }
                 </div>
             </div>

+ 4 - 4
src/app/graphqlService/component/application/Application.js

@@ -5,15 +5,15 @@ import OrderApp from '../../../../case/OrderApp/src/App'
 class Application extends Component {
 
     render() {
-        let schemaName = this.props.location.state ? this.props.location.state.schemaName : 'ecommerce';
+        let schemaName = this.props.location.state ? this.props.location.state.schemaName : 'e-commerce';
         return (
             <div>
                 {
-                    schemaName === "e-commerce" ?
-                        <ShopApp/> :
+                    schemaName === "appointment template" ?
+                        <OrderApp/> :
                         schemaName === 'account template'?
                             <BillApp /> :
-                                <OrderApp />
+                                <ShopApp />
 
                 }
             </div>

+ 2 - 2
src/app/graphqlService/component/schema/Schema.jsx

@@ -556,9 +556,9 @@ class CopySchemaButton extends Component {
         });
 
         history.push({
-            pathname: `/graphql-service/my-create/${schemaName}`,
+            pathname: `/graphql-service/my-create/${projectName}`,
             state: {
-                schemaName,
+                schemaName:projectName,
                 schemaID:schemaId,
                 projectID: projectId,
                 copy: true,

+ 43 - 4
src/app/index.css

@@ -18,11 +18,13 @@
     float: right;
 }
 
-.login-button {
+.login-nickname {
     position: absolute;
-    top: 15px;
-    right: 100px;
+    top: 0;
+    right: 20px;
     float: right;
+    font-size: 20px;
+    color: white;
 }
 
 .layout-content {
@@ -34,4 +36,41 @@
 
 .layout-content-deploy {
     padding: 0;
-}
+}
+
+.user-detail{
+    width: 200px;
+    height: 350px;
+    background-color: #fff;
+    border-radius: 4px;
+    box-shadow: 0 4px 8px 0 #c5d9e8;
+}
+
+.user-info {
+    background-color: #fff !important;
+    padding: 28px 16px 12px !important;
+    font-size: 14px;
+    height: 86px!important;
+    color: #3f536e;
+}
+
+.user-info-nickname {
+    color: #3f536e;
+    font-size: 16px;
+    line-height: 20px;
+    font-weight: 700;
+    margin-bottom: 5px;
+}
+
+.user-info-email {
+    color: #8dabc4;
+    font-size: 15px;
+    min-height: 30px;
+    line-height: 15px;
+    word-break: break-all;
+    white-space: normal;
+}
+
+.login-out {
+    margin-top: 20px;
+}

+ 1 - 0
src/app/wechatService/wxConfig/index.css

@@ -1,4 +1,5 @@
 .vice-title {
   width: 150px;
   display: inline-block;
+  font-size: 14px;
 }

+ 7 - 1
src/func.js

@@ -16,4 +16,10 @@ const shiftPrefix = (prefix, value) => {
     return prefix + value;
 };
 
-export {shiftPrefix, removePrefix, removeSpace, idGen}
+const pushPostfix = (postfix, value) => {
+    value = removePrefix(postfix, value);
+    return  value + postfix;
+};
+
+
+export {shiftPrefix, removePrefix, removeSpace, idGen, pushPostfix}

+ 10 - 0
src/language/en_US.js

@@ -8,6 +8,7 @@ const en_US = {
     "Monitor Notification":"Monitor Notification",
     "schema":"schema",
     "deploy":"deploy",
+    "redeploy":"re-deploy",
     "graphql IDE":"graphql IDE",
     "template":"template",
     "preview":"preview",
@@ -91,6 +92,8 @@ const en_US = {
     "user setting":"user setting",
     "cloud setting":"cloud setting",
     "save":"save",
+    "save1":"complete",
+    "save2":"next",
     "cancel":"cancel",
     "modify":"modify",
     "exit":"exit",
@@ -143,5 +146,12 @@ const en_US = {
     'body': 'body',
     'spbill_create_ip': 'spbill_create ip',
     'notify_url': 'notify url',
+
+    'e-commerce': 'e-commerce',
+    'appointment template': 'appointment template',
+    'account template': 'account template',
+
+    'previous-step': 'previous',
+    "next-step":"next",
 };
 export default en_US;

+ 6 - 0
src/language/zh_CN.js

@@ -8,6 +8,7 @@ const zh_CN = {
     "Monitor Notification":"监控通知",
     "schema":"表结构",
     "deploy":"一键部署",
+    "redeploy":"重新部署",
     "graphql IDE":"编辑器",
     "template":"模板语句",
     "preview":"展示",
@@ -91,6 +92,8 @@ const zh_CN = {
     "user setting":"用户设置",
     "cloud setting":"云授权设置",
     "save":"保存",
+    "save1":"完成",
+    "save2":"下一步",
     "cancel":"取消",
     "modify":"修改",
     "exit":"退出",
@@ -148,5 +151,8 @@ const zh_CN = {
     'e-commerce': '标准电商',
     'appointment template': '预约模板',
     'account template': '记账模板',
+
+    'previous-step': '上一步',
+    "next-step":"下一步",
 };
 export default zh_CN;