Deploy.jsx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. import React, {Component} from 'react';
  2. import {FormattedMessage} from 'react-intl';
  3. import {Card, Spin} from 'antd';
  4. import TencentConfig from './tencent/TencentConfig';
  5. import AliConfig from './ali/AliConfig';
  6. import AmazonConfig from './amazon/AmazonConfig';
  7. import './index.css';
  8. import {SHOW_FC_SCHEMA, SHOW_FC_CONFIG, SEARCH_SCHEMA, SHOW_CLOUD, SHOW_WXCONTENT} from "../../../gql";
  9. import {request} from 'graphql-request'
  10. import {graphqlUrl} from "../../../config";
  11. const tabListNoTitle = [{
  12. key: 'tencent',
  13. tab: <FormattedMessage id='Tencent'/>,
  14. }];
  15. // [{
  16. // key: 'tencent',
  17. // tab: 'Tencent',
  18. // }, {
  19. // key: 'aliyun',
  20. // tab: 'Aliyun',
  21. // }, {
  22. // key: 'amazon',
  23. // tab: 'AWS',
  24. // }];
  25. class Deploy extends Component {
  26. constructor(props) {
  27. super(props);
  28. this.state = {
  29. show: false,
  30. cloud: 'tencent',
  31. tencentCloudID: '',
  32. aliyunCloudID: '',
  33. amazonCloudID: '',
  34. defalutName: '',
  35. tencentFC: '',
  36. aliyunFC: '',
  37. amazonFC: '',
  38. schemaID: props.schemaID,
  39. configID: props.configID,
  40. kind: ''
  41. };
  42. this.fetch();
  43. }
  44. componentWillReceiveProps(next) {
  45. this.setState({
  46. schemaID: next.schemaID,
  47. configID: next.configID
  48. }, this.fetch)
  49. }
  50. fetch = () => {
  51. if (this.state.schemaID !== '' && this.state.schemaID !== undefined) {
  52. request(graphqlUrl, SHOW_FC_SCHEMA, {schema_id: this.state.schemaID}).then(
  53. // 根据 schemaID 查询 fc 是否成功
  54. data => {
  55. request(graphqlUrl, SEARCH_SCHEMA, {id: this.state.schemaID}).then(
  56. // 根据 schemaID 查询 schemaName
  57. _data => {
  58. if (data.fc_by_props.length === 0) {
  59. // 如果没有 fc,根据 userID 查 cloudId
  60. request(graphqlUrl, SHOW_CLOUD, {user_id: this.props.userID}).then(
  61. __data => {
  62. // 如果 user 未设置 cloudID
  63. if(__data.cloud_by_props.length === 0) {
  64. this.setState({
  65. tencentFC: false,
  66. aliyunFC: false,
  67. amazonFC: false,
  68. defalutName: _data.schema_by_id.schemaName,
  69. show: true,
  70. kind: 'graphql'
  71. });
  72. } else {
  73. __data.cloud_by_props.forEach(cloud => {
  74. switch (cloud.cloudName) {
  75. case 'tencent':
  76. this.setState({
  77. tencentFC: false,
  78. tencentCloudID: cloud.id,
  79. defalutName: _data.schema_by_id.schemaName,
  80. show: true,
  81. kind: 'graphql'
  82. });
  83. break;
  84. case 'aliyun':
  85. this.setState({
  86. aliyunFC: false,
  87. aliyunCloudID: cloud.id,
  88. defalutName: _data.schema_by_id.schemaName,
  89. show: true,
  90. kind: 'graphql'
  91. });
  92. break;
  93. case 'amazon':
  94. this.setState({
  95. amazonFC: false,
  96. amazonCloudID: cloud.id,
  97. defalutName: _data.schema_by_id.schemaName,
  98. show: true,
  99. kind: 'graphql'
  100. });
  101. break;
  102. default:
  103. break;
  104. }
  105. })
  106. }
  107. }
  108. );
  109. } else {
  110. // 如果有 fc, 则获取 cloudID
  111. data.fc_by_props.forEach(cloud => {
  112. switch (cloud.cloud_id.cloudName) {
  113. case 'tencent':
  114. this.setState({
  115. tencentFC: true,
  116. tencentCloudID: cloud.cloud_id.id,
  117. show: true,
  118. kind: 'graphql'
  119. });
  120. break;
  121. case 'aliyun':
  122. this.setState({
  123. aliyunFC: true,
  124. aliyunCloudID: cloud.cloud_id.id,
  125. show: true,
  126. kind: 'graphql'
  127. });
  128. break;
  129. case 'amazon':
  130. this.setState({
  131. amazonFC: true,
  132. amazonCloudID: cloud.cloud_id.id,
  133. show: true,
  134. kind: 'graphql'
  135. });
  136. break;
  137. default:
  138. break;
  139. }
  140. })
  141. }
  142. }
  143. );
  144. }
  145. );
  146. } else {
  147. request(graphqlUrl, SHOW_FC_CONFIG, {wxConfig_id: this.state.configID}).then(
  148. // 根据 configID 查询 fc 是否成功
  149. data => {
  150. request(graphqlUrl, SHOW_WXCONTENT, {id: this.state.configID}).then(
  151. // 根据 configID 查询 appName
  152. _data => {
  153. if (data.fc_by_props.length === 0) {
  154. // 如果没有 fc,根据 userID 查 cloudId
  155. request(graphqlUrl, SHOW_CLOUD, {user_id: this.props.userID}).then(
  156. __data => {
  157. // 如果 user 未设置 cloudID
  158. if(__data.cloud_by_props.length === 0) {
  159. this.setState({
  160. tencentFC: false,
  161. aliyunFC: false,
  162. amazonFC: false,
  163. defalutName: _data.wxConfig_by_id.appName,
  164. show: true,
  165. kind: 'wx'
  166. });
  167. } else {
  168. __data.cloud_by_props.forEach(cloud => {
  169. switch (cloud.cloudName) {
  170. case 'tencent':
  171. this.setState({
  172. tencentFC: false,
  173. tencentCloudID: cloud.id,
  174. defalutName: _data.wxConfig_by_id.appName,
  175. show: true,
  176. kind: 'wx'
  177. });
  178. break;
  179. case 'aliyun':
  180. this.setState({
  181. aliyunFC: false,
  182. aliyunCloudID: cloud.id,
  183. defalutName: _data.wxConfig_by_id.appName,
  184. show: true,
  185. kind: 'wx'
  186. });
  187. break;
  188. case 'amazon':
  189. this.setState({
  190. amazonFC: false,
  191. amazonCloudID: cloud.id,
  192. defalutName: _data.wxConfig_by_id.appName,
  193. show: true,
  194. kind: 'wx'
  195. });
  196. break;
  197. default:
  198. break;
  199. }
  200. })
  201. }
  202. }
  203. );
  204. } else {
  205. // 如果有 fc, 则获取 cloudID
  206. data.fc_by_props.forEach(cloud => {
  207. switch (cloud.cloud_id.cloudName) {
  208. case 'tencent':
  209. this.setState({
  210. tencentFC: true,
  211. tencentCloudID: cloud.cloud_id.id,
  212. show: true,
  213. kind: 'wx'
  214. });
  215. break;
  216. case 'aliyun':
  217. this.setState({
  218. aliyunFC: true,
  219. aliyunCloudID: cloud.cloud_id.id,
  220. show: true,
  221. kind: 'wx'
  222. });
  223. break;
  224. case 'amazon':
  225. this.setState({
  226. amazonFC: true,
  227. amazonCloudID: cloud.cloud_id.id,
  228. show: true,
  229. kind: 'wx'
  230. });
  231. break;
  232. default:
  233. break;
  234. }
  235. })
  236. }
  237. }
  238. );
  239. }
  240. );
  241. }
  242. };
  243. render() {
  244. const contentListNoTitle = {
  245. tencent: <TencentConfig cloudID={this.state.tencentCloudID} fc={this.state.tencentFC} defalutName={this.state.defalutName} userID={this.props.userID} kind={this.state.kind} trialcase={this.props.trialcase}/>,
  246. aliyun: <AliConfig/>,
  247. amazon: <AmazonConfig/>,
  248. };
  249. return (
  250. <div>
  251. <div>
  252. <Card
  253. style={{width: '100%'}}
  254. tabList={tabListNoTitle}
  255. activeTabKey={this.state.cloud}
  256. onTabChange={(cloud) => {
  257. this.setState({
  258. cloud
  259. })
  260. }}
  261. >
  262. {
  263. this.state.show ?
  264. contentListNoTitle[this.state.cloud]
  265. :
  266. <Spin/>
  267. }
  268. </Card>
  269. </div>
  270. </div>
  271. )
  272. }
  273. }
  274. export default Deploy;