| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- import React, {Component} from 'react';
- import {Layout, Card, Button, Avatar, Spin, Icon, Row, Col, notification, Tabs, Select} from 'antd';
- import lo from '../../../images/lo.png'
- import './index.css'
- import {graphqlUrl} from "../../../config";
- import {SHOW_ALL_CASE, SHOW_CASE} from "../../../gql";
- import {FormattedMessage} from 'react-intl';
- import {request} from 'graphql-request'
- import UserCustom from "./UserCustom";
- import {Query} from "react-apollo";
- import gql from "graphql-tag";
- import {getCookie} from "../../../cookie";
- const TabPane = Tabs.TabPane;
- const {Content} = Layout;
- const {Meta} = Card;
- class CaseShow extends Component {
- constructor(props) {
- super(props);
- this.state = {
- examplesMP: [],
- examplesPublic: [],
- examplesH5: [],
- showCustom: false,
- chosenSchemaID: '',
- activeKey: '1',
- showCaseID: 'order-react-CaseID'
- }
- }
- componentWillMount() {
- this._isMounted = true;
- // 查询是否登录
- let userID = getCookie('user_id');
- if (userID !== undefined && userID !== '') {
- this.setState({
- userID
- });
- }
- request(graphqlUrl, SHOW_ALL_CASE, {}).then(data => {
- let cases = data.case_by_props;
- let examplesMP = cases.filter(case1 => case1.description === '小程序');
- let examplesPublic = cases.filter(case2 => case2.description === '公众号');
- let examplesH5 = cases.filter(case2 => case2.description === 'H5');
- if (this._isMounted) {
- this.setState({
- examplesMP,
- examplesPublic,
- examplesH5
- })
- }
- }
- )
- }
- componentWillUnmount() {
- this._isMounted = false;
- }
- schemaIDChangeBucket = (schemaID) => {
- if (this.props.location && this.props.location.state) {
- switch (schemaID) {
- case 'order_schemaID':
- return 'appointment';
- case 'ecommerce_schemaID':
- return 'e-commerce';
- case 'bills_schemaID':
- return 'bills';
- default:
- break;
- }
- }
- };
- backToMe = () => {
- this.setState({
- showCustom: false
- })
- };
- render() {
- let {userID, showCustom, chosenSchemaID, activeKey, showCaseID} = this.state;
- const tabStyle = {
- paddingTop: '50px',
- paddingBottom: '50px',
- height: '550px',
- display: 'inline-block',
- };
- return (
- <div id="example-show">
- <Layout style={{padding: '24px', minHeight: '300px'}}>
- <Content className="content">
- {
- !showCustom ?
- <div>
- <div className={'schema-name'} style={{fontSize: 25}}><FormattedMessage
- id='scan and use'/></div>
- <div>
- <Tabs tabPosition='left' size='large' tabBarStyle={tabStyle} tabBarGutter={100}>
- <TabPane tab="公众号" key="1">
- <div>
- <Row>
- <Col span={12}>
- <Row>
- <Query query={gql(SHOW_CASE)} variables={{id: showCaseID}}>
- {
- ({loading, error, data}) => {
- if (loading) {
- return <Spin/>
- }
- if (error) {
- return 'error!';
- }
- let thisCase = data.case_by_id;
- return (
- <div>
- <div>{thisCase.title}</div>
- <div className={'case-detail-description'}>{thisCase.detailDescription ? thisCase.detailDescription : '暂无简介'}</div>
- </div>
- )
- }
- }
- </Query>
- </Row>
- <Row>
- {
- this.state.examplesMP.map((item, index) => (
- <div
- className='cover-div'
- onMouseEnter={() => {
- this.setState({
- showCaseID: item.id
- })
- }}
- >
- <img
- className='cover-img'
- src={item.img}
- alt={item.title + '' + item.description}
- />
- <div>{item.title}</div>
- </div>
- ))
- }
- </Row>
- </Col>
- <Col span={6}>
- 这个地方是截图,可以放在 detailImage 里面
- </Col>
- </Row>
- {/*下面这串代码仅供参考,可以整体删除*/}
- {
- this.state.examplesMP.map((item, index) => (
- <Row key={index} className='case-item'>
- <Col span={12} style={{padding: '20px'}}>
- <Query query={gql(SHOW_CASE)}
- variables={{id: item.id}}>
- {
- ({loading, error, data}) => {
- if (loading) {
- return <Spin/>
- }
- if (error) {
- return 'error!';
- }
- let thisCase = data.case_by_id;
- return (
- <div>
- <div
- className={'case-detail-attention'}> {thisCase.detailAttention ?
- <div>
- <Icon
- type="alert"/>{thisCase.detailAttention}
- </div>
- :
- ''
- }
- </div>
- <div
- className={'case-detail-description'}>{thisCase.detailDescription ? thisCase.detailDescription : '暂无简介'}</div>
- <div
- className={'detail-images'}>
- <img
- key={thisCase.detailImages[0]}
- src={thisCase.detailImages[0]}
- alt=""
- height="500"/>
- </div>
- </div>
- )
- }
- }
- </Query>
- </Col>
- <Col span={4}>
- <div>
- <div
- className={'schema-name'}>想要定制化该案例
- </div>
- <div>
- <div>联系作者</div>
- <div>
- <Icon type="mail"/>
- {
- item.user_id.email ? item.user_id.email : '该作者未留下联系方式'
- }
- </div>
- </div>
- <div>
- <div>自行修改代码</div>
- <div>
- <Icon type="github"/>
- {
- item.codeAddress ? item.codeAddress : '该作者未留下代码仓库地址'
- }
- </div>
- </div>
- </div>
- </Col>
- <Col span={8}>
- <div style={{padding: '10px 0'}}>
- <Card
- key={index}
- style={{width: 300}}
- cover={<div className='cover-div'><img
- className='cover-img'
- src={item.img}
- alt={item.title + '' + item.description}/>
- </div>}
- actions={[
- <span>已部署: {item.deployedNum}</span>,
- <span><Icon
- type="like"/>: {item.like}</span>,
- <Button type="primary" onClick={() => {
- this.setState({
- showCustom: true,
- chosenSchemaID: item.schema_id.id
- })
- }}><FormattedMessage
- id='one more step'/></Button>
- ]}
- >
- <Meta
- avatar={<Avatar src={lo}/>}
- title={item.title}
- description={item.description}
- />
- </Card>
- </div>
- </Col>
- </Row>
- ))
- }
- </div>
- </TabPane>
- <TabPane onMouseEnter={() => {
- this.setState({activeKey: '2'})
- }} tab="小程序" key="2">Content of Tab 2</TabPane>
- <TabPane onMouseEnter={() => {
- this.setState({activeKey: '3'})
- }} tab="H5 网页" key="3">Content of Tab 3</TabPane>
- </Tabs>
- </div>
- </div>
- :
- <UserCustom
- userID={userID}
- bucketName={this.schemaIDChangeBucket(chosenSchemaID)}
- history={this.props.history}
- backToMe={this.backToMe}
- />
- }
- </Content>
- </Layout>
- </div>
- )
- }
- }
- export default CaseShow;
|