TencentResult.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. import React, {Component} from 'react';
  2. import {Switch, Input, Icon, Spin, Row, Col, message} from 'antd';
  3. import {GET_PROJECT, SHOW_APIGWPATH, UPDATE_APIGROUP} from "../../../gql";
  4. import gql from "graphql-tag";
  5. import {Query, Mutation} from "react-apollo";
  6. import copy from 'copy-to-clipboard';
  7. class TencentResult extends Component {
  8. constructor(props) {
  9. super(props);
  10. this.state = {}
  11. }
  12. render() {
  13. let projectID = this.props.projectID ? this.props.projectID : 'ecommerce_projectID';
  14. return (
  15. <Query query={gql(GET_PROJECT)} variables={{id: projectID}}>
  16. {
  17. ({loading, error, data}) => {
  18. if (loading) {
  19. return <Spin style={{marginLeft: 3}}/>
  20. }
  21. if (error) {
  22. return 'error!';
  23. }
  24. let group = data.project_by_id.apiGWGroup_id || {};
  25. return (
  26. <div>
  27. {
  28. Object.keys(group).length !== 0 ?
  29. <div>
  30. <div className={'schema-name'}>服务管理</div>
  31. <div className={'schema-table-list-title'}>
  32. <Row>
  33. <Col span={4}><span className={'schema-table-title'}>服务名</span></Col>
  34. <Col span={10}><span className={'schema-table-title'}>默认域名</span></Col>
  35. <Col span={3}><span className={'schema-table-title'}>前端类型</span></Col>
  36. <Col span={4}><span className={'schema-table-title'}>发布状态</span></Col>
  37. <Col span={3}><span className={'schema-table-title'}>操作</span></Col>
  38. </Row>
  39. </div>
  40. <div className={'schema-table-list-content'}>
  41. <Row>
  42. <Col span={4}>
  43. <span className={'schema-table-content'}>{group.serviceId}</span>
  44. </Col>
  45. <Col span={10}>
  46. <span className={'schema-table-content'}>{group.defaultDomain} </span>
  47. <Icon type="copy" theme="twoTone" onClick={() => {
  48. copy(group.defaultDomain);
  49. message.success('复制成功.');
  50. }}/>
  51. </Col>
  52. <Col span={3}>
  53. <span className={'schema-table-content'}>{group.frontType}</span>
  54. </Col>
  55. <Col span={4}>
  56. <span className={'schema-table-content'}>{group.environmentName}</span>
  57. </Col>
  58. <Col span={3}>
  59. <span className={'schema-table-content'}>
  60. <SwitchStatus group={group}/>
  61. {/*<span className={'schema-table-content name'}>删除</span>*/}
  62. </span>
  63. </Col>
  64. </Row>
  65. </div>
  66. <div style={{marginTop: 30}}>
  67. <div className={'schema-name'}>API 管理</div>
  68. <APIGWPathResult
  69. group={group}
  70. switchMenu={this.props.switchMenu}
  71. switchAPI={this.props.switchAPI}
  72. />
  73. </div>
  74. </div>
  75. :
  76. '尚未部署'
  77. }
  78. </div>
  79. )
  80. }
  81. }
  82. </Query>
  83. )
  84. }
  85. }
  86. export default TencentResult;
  87. class SwitchStatus extends Component {
  88. constructor(props) {
  89. super(props);
  90. this.state = {
  91. checked: props.group.userStatus === 'open'
  92. }
  93. }
  94. componentWillReceiveProps(next) {
  95. this.setState({
  96. checked: next.group.userStatus === 'open'
  97. })
  98. }
  99. render() {
  100. let {group} = this.props;
  101. let {id, userDomain, groupName, frontType, region, environmentName} = group;
  102. return (
  103. <div style={{display: 'inline', marginRight: '10px'}}>
  104. <Mutation
  105. mutation={gql(UPDATE_APIGROUP)}
  106. onCompleted={(data) => {
  107. this.setState({
  108. checked: data.update_apiGWGroup.userStatus === 'open'
  109. })
  110. }}
  111. >
  112. {(update_apiGWGroup, {loading, error}) => {
  113. if (loading)
  114. return <Spin style={{marginLeft: 30, marginTop: 10}}/>;
  115. if (error)
  116. return 'error';
  117. return (
  118. <Switch checked={this.state.checked} onChange={(checked) => {
  119. update_apiGWGroup({
  120. variables: {
  121. id,
  122. userStatus: checked ? 'open' : 'close',
  123. userDomain,
  124. groupName,
  125. frontType,
  126. region,
  127. environmentName,
  128. updatedAt: new Date().getTime()
  129. }
  130. })
  131. }}/>
  132. )
  133. }}
  134. </Mutation>
  135. </div>
  136. )
  137. }
  138. }
  139. class APIGWPathResult extends Component {
  140. constructor(props) {
  141. super(props);
  142. this.state = {}
  143. }
  144. render() {
  145. let {group} = this.props;
  146. let {id, frontType, defaultDomain} = group;
  147. return (
  148. <Query query={gql(SHOW_APIGWPATH)} variables={{apiGWGroup_id: id}}>
  149. {
  150. ({loading, error, data}) => {
  151. if (loading) {
  152. return <Spin style={{marginLeft: 3}}/>
  153. }
  154. if (error) {
  155. return 'error!';
  156. }
  157. let paths = data.apiGWPath_by_props || [];
  158. return (
  159. <div>
  160. {
  161. Object.keys(paths).length !== 0 ?
  162. <div>
  163. <div className={'schema-table-list-title'}>
  164. <Row>
  165. <Col span={6}><span className={'schema-table-title'}>名称</span></Col>
  166. <Col span={6}><span className={'schema-table-title'}>路径</span></Col>
  167. <Col span={3}><span className={'schema-table-title'}>方法</span></Col>
  168. <Col span={6}><span className={'schema-table-title'}>描述</span></Col>
  169. <Col span={3}><span className={'schema-table-title'}>操作</span></Col>
  170. </Row>
  171. </div>
  172. {
  173. paths.map(path => (
  174. <div key={path.apiGWPath} className={'schema-table-list-content'}>
  175. <Row>
  176. <Col span={6}>
  177. <span className={'schema-table-content'}>{path.apiGWName}</span>
  178. </Col>
  179. <Col span={6}>
  180. <span className={'schema-table-content'}>{path.apiGWPath}</span>
  181. </Col>
  182. <Col span={3}>
  183. <span className={'schema-table-content'}>{path.requestMethod}</span>
  184. </Col>
  185. <Col span={6}>
  186. <span className={'schema-table-content'}>{path.apiGWDesc}</span>
  187. </Col>
  188. <Col span={3}>
  189. {/*<span className={'schema-table-content name'}>删除</span>*/}
  190. {/*<span> </span>*/}
  191. <span className={'schema-table-content name'}
  192. onClick={() => {
  193. this.props.switchMenu('menuLevel2', {key: 'graphiql'});
  194. this.props.switchAPI(frontType.slice(0, 4) + '://' + defaultDomain + path.apiGWPath)
  195. }}>
  196. 调试
  197. </span>
  198. </Col>
  199. </Row>
  200. </div>
  201. ))
  202. }
  203. </div>
  204. :
  205. '路径不存在'
  206. }
  207. </div>
  208. )
  209. }
  210. }
  211. </Query>
  212. )
  213. }
  214. }