Browse Source

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

wly 7 years ago
parent
commit
ea5812e1e2

+ 58 - 66
src/components/app/App.jsx

@@ -28,8 +28,6 @@ import OrderApp from '../../case/OrderApp/src/App'
 import BillApp from '../../case/BillApp/src/App'
 
 
-
-
 axios.defaults.withCredentials = true;
 
 const {SubMenu} = Menu;
@@ -39,20 +37,31 @@ moment.locale('en');
 class App extends Component {
     constructor(props) {
         super(props);
-        sessionStorage.setItem("language", "English");
         this.state = {
             menuLevel1: "graphql-service",
-            sideBar: "e-commerce",
+            sideBar: "ecommerce",
             collapsed: false,
             inlineCollapsed: false,
-            locale: undefined,
-            language: sessionStorage.getItem("language"),
-            visible: false,
-            userID: ''
-
+            language:props.language,
+            locale: props.language === "中文" ? zhCN : undefined,
+            languageButton:props.language === "中文" ? "English" : "中文",
+            visible: false
         };
     }
 
+    componentWillMount(){
+        console.log('window.location',window.location);
+        let urlList = window.location.pathname.split("/");
+        let urlListLength = urlList.length;
+        console.log('urlList',urlList,urlListLength);
+        if (urlListLength > 2) {
+            this.setState({menuLevel1:urlList[1]});
+            if(urlList[3] !== 'index'){
+                this.setState({sideBar:urlList[3]});
+            }
+        }
+    }
+
     onCollapse = (collapsed) => {
         // console.log(collapsed);
         this.setState({collapsed});
@@ -65,6 +74,12 @@ class App extends Component {
         });
     };
 
+    switchSidebar = (value) => {
+        this.setState({
+            sideBar:value,
+        });
+    };
+
     switchMenuLevel = (menuName, value) => {
         this.setState({
             [menuName]: value,
@@ -85,19 +100,18 @@ class App extends Component {
 
     changeLocale = (e) => {
         e.stopPropagation();
-        let language = sessionStorage.getItem("language");
+        let {language} = this.state;
         // console.log('app language',language);
-        let local = language === "中文" ? zhCN : undefined;
-        // console.log('app local',local);
         let changeLanguage = language === "中文" ? "English" : "中文";
-        // console.log('app changeLanguage',changeLanguage);
-        let nowLanguage = language === "中文" ? 'zh' : 'en';
-        // console.log('app nowLanguage',nowLanguage);
+        let local = language === "中文" ? undefined : zhCN;
+        let languageButton = language === "中文" ?  "中文" : "English";
+
         sessionStorage.setItem("language", changeLanguage);
-        this.props.changeLanguage(nowLanguage);
+        this.props.changeLanguage(changeLanguage);
         this.setState({
             language: changeLanguage,
-            locale: local
+            locale: local,
+            languageButton:languageButton
         });
         if (!local) {
             moment.locale('en');
@@ -107,7 +121,7 @@ class App extends Component {
     };
 
     render() {
-        const {locale, language, visible} = this.state;
+        const {locale, languageButton, visible} = this.state;
 
         return (
             <Router>
@@ -122,6 +136,7 @@ class App extends Component {
                             theme="dark"
                             mode="horizontal"
                             // defaultSelectedKeys={['graphql-service']}
+                            selectedKeys={[this.state.menuLevel1]}
                             style={{lineHeight: '64px'}}
                             onClick={(e) => this.switchMenu('menuLevel1', e)}
                         >
@@ -132,8 +147,8 @@ class App extends Component {
                                 <Link to="/wechat-service/trial-case/index"><FormattedMessage
                                     id="Wechat Service"/></Link>
                             </Menu.Item>
-                            <Menu.Item key="quantization-service">
-                                <Link to="/quant-service/"><FormattedMessage id="Quantization Service"/></Link>
+                            <Menu.Item key="quant-service">
+                                <Link to="/quant-service/trial-case/index"><FormattedMessage id="Quantization Service"/></Link>
                             </Menu.Item>
                         </Menu>
 
@@ -142,7 +157,7 @@ class App extends Component {
                         </Link>
 
                         <div className="change-locale">
-                            <Button size="small" onClick={(e) => this.changeLocale(e)}>{language}</Button>
+                            <Button size="small" onClick={(e) => this.changeLocale(e)}>{languageButton}</Button>
                         </div>
                     </Header>
 
@@ -160,7 +175,7 @@ class App extends Component {
                                     >
                                         <GraphqlSidebar inlineCollapsed={this.state.inlineCollapsed}
                                                         sideBar={this.state.sideBar} switchMenu={this.switchMenu}
-                                                        userID={this.state.userID} showModal={this.showModal}/>
+                                                        showModal={this.showModal}/>
 
                                     </Sider>
                                 );
@@ -177,8 +192,8 @@ class App extends Component {
                                             theme="dark"
                                             mode="inline"
                                             inlineCollapsed={this.state.inlineCollapsed}
-                                            defaultSelectedKeys={['wechat']}
-                                            defaultOpenKeys={['trial-case']}
+                                            defaultSelectedKeys={['my-wechat']}
+                                            defaultOpenKeys={['my-create']}
                                             // openKeys={['cloud-function']}
                                             onClick={(e) => this.switchMenu('sideBar', e)}
                                             selectedKeys={[this.state.sideBar]}
@@ -191,19 +206,9 @@ class App extends Component {
                                                 position: 'fixed'
                                             }}
                                         >
-                                            {/*<SubMenu key="trial-case"*/}
-                                                     {/*title={<span><Icon type="appstore" theme="twoTone"/><span>Trial Case</span></span>}>*/}
-                                                {/*<Menu.Item key="wechat"><Link*/}
-                                                    {/*to="/wechat-service/trial-case/wechat case">wechat*/}
-                                                    {/*case</Link></Menu.Item>*/}
-                                            {/*</SubMenu>*/}
-
-                                            <SubMenu key="my-create"
-                                                     title={<span><Icon type="user"
-                                                                        theme="outlined"/><span>My Create</span></span>}>
-                                                <Menu.Item key="my wechat"><Link
-                                                    to="/wechat-service/my-create/my wechat">my
-                                                    wechat</Link></Menu.Item>
+                                            <SubMenu key="my-create" title={<span><Icon type="user" theme="outlined"/><span>My Create</span></span>}>
+                                                <Menu.Item key="my-wechat">
+                                                    <Link to="/wechat-service/my-create/my wechat">my wechat</Link></Menu.Item>
                                             </SubMenu>
 
                                             <Menu.Item key="instructions" >
@@ -215,7 +220,7 @@ class App extends Component {
                                         </Menu>
                                     </Sider>
                                 );
-                            case 'quantization-service':
+                            case 'quant-service':
                                 return (
                                     <Sider
                                         width={200}
@@ -242,19 +247,12 @@ class App extends Component {
                                                 position: 'fixed'
                                             }}
                                         >
-                                            <SubMenu key="trial-case"
-                                                     title={<span><Icon type="appstore" theme="twoTone"/><span>Case Show</span></span>}>
-                                                <Menu.Item key="quant-service"><Link to="/quant-service/">quant
-                                                    case</Link></Menu.Item>
+                                            <SubMenu key="trial-case" title={<span><Icon type="appstore" theme="twoTone"/><span>Case Show</span></span>}>
+                                                <Menu.Item key="quant-service">
+                                                    <Link to="/quant-service/trial-case/quant case">quant case</Link>
+                                                </Menu.Item>
                                             </SubMenu>
 
-                                            {/*<SubMenu key="my-create"*/}
-                                                     {/*title={<span><Icon type="user"*/}
-                                                                        {/*theme="outlined"/><span>My Create</span></span>}>*/}
-                                                {/*<Menu.Item key="my quant"><Link to="/quant-service/">my*/}
-                                                    {/*quant</Link></Menu.Item>*/}
-                                            {/*</SubMenu>*/}
-
                                             <Menu.Item key="instructions" >
                                                 <a href="https://ioobot-document.netlify.com/" title="instructions" target="instructions">
                                                     <Icon type="file-text" theme="twoTone" />
@@ -312,14 +310,12 @@ class App extends Component {
                                     >
                                         <GraphqlSidebar inlineCollapsed={this.state.inlineCollapsed}
                                                         sideBar={this.state.sideBar} switchMenu={this.switchMenu}
-                                                        userID={this.state.userID} showModal={this.showModal}/>
+                                                        showModal={this.showModal}/>
                                     </Sider>
                                 );
                         }
                     })()}
-
-                    <Create visible={visible} hideModal={this.hideModal}/>
-
+                    <Create visible={visible} hideModal={this.hideModal} switchSidebar={this.switchSidebar}/>
 
                     <LocaleProvider locale={locale}>
                         <Layout style={{marginTop: '64px', zIndex: '0'}}
@@ -329,7 +325,7 @@ class App extends Component {
                                 <Route path="/graphql-service/trial-case/:case" component={TrialCase}/>
                                 <Route path="/graphql-service/my-create/:case" component={UserCreate}/>
                                 <Route path="/wechat-service/:sidebar/:case" component={WechatService}/>
-                                <Route path="/quant-service/" component={QuantService}/>
+                                <Route path="/quant-service/:sidebar/:case" component={QuantService}/>
                                 <Route path="/login" component={Login}/>
                                 <Redirect path="*" to="/"/>
                             </Switch>
@@ -348,7 +344,6 @@ class GraphqlSidebar extends Component {
         super(props);
         this.state = {
             userID: getCookie('user_id'),
-            show: false
         }
     }
 
@@ -360,17 +355,17 @@ class GraphqlSidebar extends Component {
                         // console.log('user schema data',data);
                         if (loading) return <Spin style={{marginLeft: 3}}/>;
                         if (error) return 'error!';
-                        localStorage.setItem('ecommerce', data.caseSchema[2].schemaData);
-                        localStorage.setItem('subscribe', data.caseSchema[0].schemaData);
-                        localStorage.setItem('bills', data.caseSchema[1].schemaData);
+                        localStorage.setItem('ecommerce', data.caseSchema.find(obj=>obj.schemaName==='ecommerce').schemaData);
+                        localStorage.setItem('subscribe', data.caseSchema.find(obj=>obj.schemaName==='subscribe').schemaData);
+                        localStorage.setItem('bills', data.caseSchema.find(obj=>obj.schemaName==='bills').schemaData);
                         return (
                             <Menu
                                 theme="dark"
                                 mode="inline"
                                 inlineCollapsed={this.props.inlineCollapsed}
-                                defaultSelectedKeys={['e-commerce']}
+                                defaultSelectedKeys={['ecommerce']}
                                 defaultOpenKeys={['trial-case', 'my-create']}
-                                // openKeys={['cloud-function']}
+                                // openKeys={['trial-case', 'my-create']}
                                 onClick={(e) => this.props.switchMenu('sideBar', e)}
                                 selectedKeys={[this.props.sideBar]}
                                 style={{
@@ -423,8 +418,8 @@ class GraphqlSidebar extends Component {
                                     }
                                 </SubMenu>
 
-                                <Menu.Item key="instructions" >
-                                    <a href="https://ioobot-document.netlify.com/" title="instructions" target="instructions">
+                                <Menu.Item key="instructions">
+                                    <a href="https://ioobot-document.netlify.com/" title="instructions" target="_blank" rel="noopener noreferrer">
                                         <Icon type="file-text" theme="twoTone" />
                                         <span>Instructions</span>
                                     </a>
@@ -438,7 +433,4 @@ class GraphqlSidebar extends Component {
             </Query>
         )
     }
-}
-
-// this.state.show ?
-// :''
+}

+ 6 - 4
src/components/common/schema/Create.js

@@ -41,6 +41,7 @@ class Create extends Component {
             schemaData: JSON.stringify([]),
             reference: ''
         };
+        let schemaName = this.state.schemaName;
 
         this.setState({
             confirmLoading: true,
@@ -49,7 +50,7 @@ class Create extends Component {
         create_schema({
             variables: {
                 ...varobj,
-                schemaName: this.state.schemaName
+                schemaName
             }
         });
         setTimeout(() => {
@@ -59,10 +60,11 @@ class Create extends Component {
             });
         }, 1000);
         this.props.hideModal();
+        this.props.switchSidebar(schemaName);
         this.props.history.push({
-            pathname: `/graphql-service/my-create/${this.state.schemaName}`,
+            pathname: `/graphql-service/my-create/${schemaName}`,
             state:{
-                schemaName:this.state.schemaName,
+                schemaName,
                 schemaID:varobj.id,
                 create: true
             }
@@ -91,7 +93,7 @@ class Create extends Component {
                                    visible={visible}
                                    onOk={() => this.handleOk(userID, create_schema)}
                                    confirmLoading={confirmLoading}
-                                   onCancel={() => this.props.hideModal()}
+                                   onCancel={() => {this.props.hideModal();}}
                             >
                                 <div>
                                     <p>schema name</p>

+ 21 - 6
src/components/common/schema/Schema.jsx

@@ -108,10 +108,11 @@ class Schema extends Component {
             return new Promise((resolve, reject) => {
                 request('http://123.206.193.98:3000/graphql', SEARCH_SCHEMA, {id: referenceID}).then(
                     data => {
+                        console.log(data);
                         if (data.schema_by_id !== null) {
-                            localStorage.setItem('ecommerce', data.caseSchema[2].schemaData);
-                            localStorage.setItem('subscribe', data.caseSchema[0].schemaData);
-                            localStorage.setItem('bills', data.caseSchema[1].schemaData);
+                            localStorage.setItem('ecommerce', data.caseSchema.find(obj=>obj.schemaName==='ecommerce').schemaData);
+                            localStorage.setItem('subscribe', data.caseSchema.find(obj=>obj.schemaName==='subscribe').schemaData);
+                            localStorage.setItem('bills', data.caseSchema.find(obj=>obj.schemaName==='bills').schemaData);
                             resolve(data.schema_by_id.schemaData);
                         }
                     }
@@ -332,6 +333,7 @@ class Schema extends Component {
                                                                     <DeleteSchemaButton
                                                                         userID={userID}
                                                                         schemaName={this.state.schemaName}
+                                                                        history={this.props.history}
                                                                     />
                                                                 </div>
                                                         }
@@ -357,6 +359,7 @@ class Schema extends Component {
                                         this.state.currentTable === 'add' ?
                                             <Table
                                                 currentTable={''}
+                                                schemaData={data}
                                                 columns={[]}
                                                 remark=''
                                                 schemaID={this.state.schemaID}
@@ -364,6 +367,12 @@ class Schema extends Component {
                                                 userID={userID}
                                                 goBack={this.goBack}
                                                 trialcase={trialcase}
+                                                fetchData={this.fetchData}
+                                                showTablePagination={this.showTablePagination}
+                                                page={this.state.page}
+                                                pageSize={this.state.pageSize}
+                                                history={this.props.history}
+                                                add={'add'}
                                             /> :
                                             <Table
                                                 currentTable={this.state.currentTable}
@@ -379,6 +388,8 @@ class Schema extends Component {
                                                 showTablePagination={this.showTablePagination}
                                                 page={this.state.page}
                                                 pageSize={this.state.pageSize}
+                                                history={this.props.history}
+                                                add={'whatever but not add'}
                                             />
                                 }
 
@@ -427,7 +438,7 @@ class CopySchemaButton extends Component {
                             schemaState: 'copy',
                             schemaData: JSON.stringify([]),
                             reference: schemaID,
-                            schemaName: schemaName + '_copy'
+                            schemaName: schemaName + '_' + Math.random().toString().slice(-3) + Math.random().toString().slice(-4)
                         };
 
                         return (
@@ -461,12 +472,16 @@ class DeleteSchemaButton extends Component {
         }
     }
 
-    showConfirm = (delete_schema, schemaName) => {
+    showConfirm = (delete_schema, schemaName, userID) => {
+        let _this = this;
         confirm({
             title: 'Do you want to delete this schema?',
             content: 'It cannot be found back!',
             onOk() {
-                delete_schema({variables: {schemaName}});
+                delete_schema({variables: {schemaName, user_id: userID}});
+                _this.props.history.push({
+                    pathname: '/graphql-service',
+                });
             },
             onCancel() {
             },

+ 43 - 11
src/components/common/schema/Table.js

@@ -20,7 +20,8 @@ class Table extends Component {
             newColName: '',
             newColType: 'type',
             types: ['ID', 'String', 'Int', 'Float', 'Boolean', 'DateTime'],
-            descriptions: ['description', 'key', 'non-null', 'non-null-list', 'list']
+            descriptions: ['description', 'key', 'non-null', 'non-null-list', 'list'],
+            characterTips: false
         }
     }
 
@@ -39,10 +40,21 @@ class Table extends Component {
     };
 
     handleNameNew = (e) => {
-        this.setState({
-            newColName: e.target.value,
-            showNewColumn: false
-        })
+        let r = /^[^\u4e00-\u9fa5]*$/;
+        if(r.test(e.target.value)){
+            this.setState({
+                newColName: e.target.value,
+            })
+        } else {
+            this.setState({
+                characterTips: true
+            });
+            setTimeout(()=>{
+                this.setState({
+                    characterTips: false
+                })
+            }, 2000)
+        }
     };
 
     handleTypeChange = (index) => {
@@ -216,7 +228,6 @@ class Table extends Component {
                                         currentTable={this.state.currentTable}
                                         columns={this.state.columns}
                                         remark={this.state.remark}
-                                        currentTableIndex={this.props.currentTableIndex}
                                         schemaID={schemaID}
                                         userID={userID}
                                         schemaData={this.props.schemaData}
@@ -224,6 +235,9 @@ class Table extends Component {
                                         showTablePagination={this.props.showTablePagination}
                                         page={this.props.page}
                                         pageSize={this.props.pageSize}
+                                        history={this.props.history}
+                                        schemaName={schemaName}
+                                        add={this.props.add}
                                     />
                                 </div>
                         }
@@ -268,12 +282,14 @@ class UpdateTableButton extends Component {
                             return 'error';
 
                         let schemaData = data;
-                        let referenceID = data.schema_by_id.reference;
+                        let referenceID;
+                        if(data.schema_by_id)
+                            referenceID = data.schema_by_id.reference;
 
                         return (
                             <Mutation
                                 mutation={gql(UPDATE_SCHEMA)}
-                                refetchQueries={[{query: gql(SHOW_TABLE), variables: {schema_id: this.props.schemaID}}]}
+                                refetchQueries={[{query: gql(SHOW_TABLE), variables: {schema_id: schemaID}}]}
                             >
 
                                 {(update_schema, {loading, error}) => {
@@ -302,11 +318,18 @@ class UpdateTableButton extends Component {
                                         cols
                                     };
 
-                                    const index = this.state.originTableName === '' ? -2 : this.props.schemaData.findIndex(obj => obj.name === this.state.originTableName)
+                                    const index = this.state.originTableName === '' ? -2 : this.props.schemaData.findIndex(obj => obj.name === this.state.originTableName);
                                     if (index === -2) {
-                                        schemaCols.push(newTable);
+                                        if(referenceID !== '' && schemaCols.length === 0) {
+                                            this.props.fetchData(referenceID).then(value => {
+                                                schemaCols = JSON.parse(value);
+                                                schemaCols.push(newTable);
+                                            });
+                                        } else {
+                                            schemaCols.push(newTable);
+                                        }
+
                                     } else if (index === -1) {
-                                        console.log('进行了一次删除操作 或 未知错误,数据库信息不匹配');
                                         // 先取数据,然后替换,然后填充
                                         this.props.fetchData(referenceID).then(value => {
                                             schemaCols = JSON.parse(value);
@@ -327,6 +350,15 @@ class UpdateTableButton extends Component {
                                                     }
                                                 });
                                                 this.props.showTablePagination(this.props.page, this.props.pageSize, schemaCols)
+                                                if(this.props.add !== 'add') {
+                                                    this.props.history.push({
+                                                        pathname: `/graphql-service/my-create/${this.props.schemaName}`,
+                                                        state:{
+                                                            schemaName:this.props.schemaName,
+                                                            schemaID:this.props.schemaID
+                                                        }
+                                                    });
+                                                }
                                             }}>
                                                 save
                                             </Button>

+ 9 - 8
src/index.js

@@ -24,32 +24,33 @@ const client = new ApolloClient({
 });
 
 let browserLanguage = (navigator.language || navigator.browserLanguage).toLowerCase().split('-')[0];
+let language = browserLanguage === 'zh'? "中文" : "English";
 
 class MainApp extends Component {
     constructor() {
         super();
-        sessionStorage.setItem("language", browserLanguage);
+        sessionStorage.setItem("language", language);
         this.state = {
-            nowLanguage: sessionStorage.getItem("language")
+            language: sessionStorage.getItem("language")
         };
     }
 
     changeLanguage = (language) => {
         // console.log("index changeLanguage",language);
         this.setState({
-            nowLanguage: language
+            language: language
         });
     };
 
     chooseLocale = (language) => {
         let locale, messages;
         switch (language) {
-            case 'en':
+            case "English":
                 locale = 'en';
                 messages = en_US;
                 return {locale, messages};
 
-            case 'zh':
+            case "中文":
                 locale = 'zh';
                 messages = zh_CN;
                 return {locale, messages};
@@ -62,12 +63,12 @@ class MainApp extends Component {
     };
 
     render() {
-        let {nowLanguage} = this.state;
-        let {locale, messages} = this.chooseLocale(nowLanguage);
+        let {language} = this.state;
+        let {locale, messages} = this.chooseLocale(language);
         return (
             <ApolloProvider client={client}>
                 <IntlProvider locale={locale} messages={messages}>
-                    <App changeLanguage={this.changeLanguage}/>
+                    <App language={language} changeLanguage={this.changeLanguage}/>
                 </IntlProvider>
             </ApolloProvider>
         )