SearchResult.47878037.chunk.js.map 17.9 KB
Newer Older
zhanghaozhe committed
1
{"version":3,"sources":["components/search/recommendation/index.js","components/search/search-result.js","components/search/searchHead.js"],"names":["Recommendation","connect","state","courses","toCourseDetail","id","_this$props","_this","props","dispatch","history","push","concat","_this2","this","http","get","API","then","res","data","errno","setState","info","toast_default","a","msg","_this3","react_default","createElement","className","length","map","item","Bottom","common","key","img","title","bottom","toDetail","Component","withRouter","ForwardRefSearchHead","React","forwardRef","ref","searchHead","Object","assign","forwardedRef","_ref","price1","price0","SearchResult","prevScrollY","createRef","swipeUp","swipeDown","courseList","value","decodeURIComponent","getParam","searchHistory","JSON","parse","localStorage","getItem","fixedHeader","searchHeadStyle","top","swipeDirection","isHide","basicTop","getCourses","word","course","handleClick","handleSearch","handleChange","handleScroll","throttle","y","window","scrollY","h","current","offsetTop","offsetHeight","document","addEventListener","removeEventListener","_this$state","style","Info","course_title","simpledescription","search_result_Bottom","status","VList","image_name","course_id","search_recommendation","PureComponent","SearchHead","isFocus","returnPage","go","search","storeKeyword","_this$props$searchHis","some","setItem","stringify","changeFontColor","refs","focus","cls","classnames","submit-btn--active","react__WEBPACK_IMPORTED_MODULE_7___default","onClick","antd_mobile_lib_search_bar__WEBPACK_IMPORTED_MODULE_1___default","showCancelButton","cancelText","onChange","placeholder","onFocus","onBlur","onSubmit"],"mappings":"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","file":"mrstatic/js/SearchResult.47878037.chunk.js","sourcesContent":["import React, { Component } from \"react\";\nimport {connect} from 'react-redux';\nimport './recommendation.scss'\nimport { Course } from \"@/common\";\nimport { http } from \"@/utils\";\nimport { Toast } from 'antd-mobile'\nimport {withRouter} from 'react-router-dom'\nimport {getCourses} from './../../detail/actions';\n\n@connect()\nclass Recommendation extends Component {\n\n    state = {\n        courses: []\n    }\n\n    componentDidMount() {\n        http.get(`${API['search-api']}/search_hot_word`)\n            .then(res => {\n                if (res.data.errno === 0) {\n                    this.setState({\n                        courses: res.data.data.info.courses\n                    })\n                } else {\n                    Toast.info(res.data.msg)\n                }\n\n            })\n\n    }\n\n    // handleClick = (id) => {\n    //     this.props.history.push(`/detail?id=${id}`)\n    // }\n\n    toCourseDetail = (id) => {\n        const { dispatch, history } = this.props;\n        // dispatch(getCourses(id, () => {\n            history.push(`/detail?id=${id}`)\n        // }));\n    }\n\n    render() {\n        const {courses} = this.state\n        return (\n            <div className=\"recommendation\">\n                <div className=\"title\">推荐课程</div>\n                <div className=\"courses\">\n                    {\n                        courses.length > 0 &&\n                        courses.map((item) => {\n                            const Bottom = (\n                                <div className='bottom'>\n                                    <span className='price'>{item['price1']}</span>\n                                    <span className='old-price'>{item['price0']}</span>\n                                </div>\n                            )\n                            return (\n                                <Course\n                                    className={'text-overflow-2'}\n                                    key={item['course_id']}\n                                    id={item['course_id']}\n                                    img={item['image_name']}\n                                    title={item['course_title']}\n                                    bottom={Bottom}\n                                    toDetail={this.toCourseDetail}\n                                />\n                            )\n                        })\n                    }\n\n                </div>\n            </div>\n        )\n    }\n}\n\nexport default withRouter(Recommendation)\n","import React, { PureComponent } from 'react';\nimport SearchHeader from './searchHead'\nimport VList from '@/common/VList'\nimport { http, getParam } from '@/utils'\nimport './search-result.scss'\nimport Recommendation from './recommendation'\nimport throttle from 'lodash/throttle'\n\n\nconst ForwardRefSearchHead = React.forwardRef((props, ref) => {\n    return <SearchHeader {...props} forwardedRef={ref}/>\n})\n\nconst Bottom = ({item}) => {\n    return (\n        <div className='bottom'>\n            <span className='price'>¥{item.price1}</span>\n            <span className='stale-price'>¥{item.price0}</span>\n        </div>\n    )\n}\n\nclass SearchResult extends PureComponent {\n    prevScrollY = 0\n    searchHead = React.createRef()\n    swipeUp = 'up'\n    swipeDown = 'down'\n\n    state = {\n        courseList: [],\n        value: decodeURIComponent(getParam('word')) || '',\n        searchHistory: JSON.parse(localStorage.getItem('searchHistory')) || [],\n        fixedHeader: false,\n        searchHeadStyle: {top: 0},\n        swipeDirection: this.swipeUp,\n        isHide: false,\n        basicTop: 0\n    }\n\n    componentDidMount() {\n        this.getCourses(getParam('word'))\n        document.addEventListener('scroll', this.handleScroll)\n    }\n\n    componentWillUnmount() {\n        document.removeEventListener('scroll', this.handleScroll)\n    }\n\n\n    getCourses = (word) => {\n        http.get(`${API['search-api']}/search/${word}?type=course&page=1`)\n            .then(res => {\n                const data = res.data\n\n                if (data.errno === 0) {\n                    this.setState({\n                        courseList: data.data.info['search_data'].course\n                    });\n                }\n            })\n    }\n\n    handleClick = id => {\n        this.props.history.push(`/detail?id=${id}`)\n    }\n\n    handleSearch = () => {\n        this.state.value && this.getCourses(this.state.value)\n    }\n\n    handleChange = value => {\n        this.setState({value})\n    }\n\n    toCourseDetail = (id) => {\n        const {history} = this.props;\n        history.push(`/detail?id=${id}`)\n    }\n\n    handleScroll = throttle(() => {\n        let y = window.scrollY < 0? 0 : window.scrollY, \n            headY = this.searchHead.current.offsetTop,\n            h = this.searchHead.current.offsetHeight;\n        if(y > this.prevScrollY) {\n            this.setState({\n                searchHeadStyle: {\n                    top : `${-h}px`\n                }\n            });\n        }\n        if(y < this.prevScrollY) {\n            this.setState({\n                searchHeadStyle: {\n                    top: 0\n                }\n            });\n        }\n        // if (y < this.prevScrollY) {\n        //     if (this.state.swipeDirection === this.swipeDown) {\n        //         y <= headY && this.state.searchHeadStyle.position !== 'fixed' && \n        //         this.setState({\n        //             searchHeadStyle: {\n        //                 top: `0`,\n        //                 position: 'fixed'\n        //             }\n        //         })\n        //     } else {\n        //         this.setState({\n        //             swipeDirection: this.swipeDown\n        //         }, () => {\n        //             if (this.state.swipeDirection === this.swipeDown) {\n        //                 let h = y > document.querySelector('body').offsetHeight? document.querySelector('body').offsetHeight: y;\n        //                 let h1 = this.searchHead.current.offsetHeight\n        //                     this.setState({\n        //                         searchHeadStyle: {\n        //                             // top: `${h > headY ? h - h1 : h}px`\n        //                             top: `${y}px`\n        //                         }\n        //                     })\n                        \n                        \n        //             }\n        //         })\n        //     }\n        // } else {\n        //     this.state.swipeDirection !== this.swipeUp &&\n        //     this.setState({\n        //         swipeDirection: this.swipeUp,\n        //         searchHeadStyle: {\n        //             position: 'absolute',\n        //             top: `${y}px`\n        //         }\n        //     })\n        // }\n        this.prevScrollY = y;\n    }, 0)\n\n    render() {\n        const { courseList, isHide } = this.state;\n\n        return (\n            <div\n                className={'search-result'}>\n                <ForwardRefSearchHead\n                    handleSearch={this.handleSearch}\n                    value={this.state.value}\n                    handleChange={this.handleChange}\n                    searchHistory={this.state.searchHistory}\n                    style={this.state.searchHeadStyle}\n                    ref={this.searchHead}\n                    isHide={isHide}\n                />\n                {\n\n                    courseList && courseList.length > 0 ?\n                        <ul>\n                            {\n                                courseList.map(item => {\n                                    const Info = (\n                                        <div className=\"info\">\n                                            <p className='title'>{item.course_title}</p>\n                                            <p className='des'>{item.simpledescription}</p>\n                                            <Bottom\n                                                item={item}\n                                            />\n                                        </div>\n                                    )\n                                    const status = (\n                                        (item['bargain_num'] || item['groupon_num']) ?\n                                            <div\n                                                className='status'>\n                                                {\n                                                    item['bargain_num'] === 0 ? `砍价减${item['groupon_num']}元` : `拼团减${item['bargain_num']}元`\n                                                }\n                                            </div>\n                                            : null\n                                    )\n                                    return (\n                                        <VList\n                                            img={item.image_name}\n                                            toDetail={this.toCourseDetail}\n                                            key={item.course_id}\n                                            info={Info}\n                                            id={item['course_id']}\n                                            status={status}\n                                        />\n                                    )\n                                })\n                            }\n                        </ul>\n                        : <div className=\"empty\">\n                            抱歉!没有搜到相关内容\n                        </div>\n                }\n                <Recommendation/>\n\n            </div>\n        );\n    }\n}\n\n\nexport default SearchResult;","import React, { PureComponent } from 'react'\nimport { SearchBar } from 'antd-mobile'\nimport { withRouter } from 'react-router-dom'\nimport classnames from 'classnames';\n\nimport './search_header.scss'\n\nclass SearchHead extends PureComponent {\n    \n    state = {\n        isFocus: false\n    }\n\n    returnPage = () => {\n        this.props.history.go(-1)\n    }\n\n    componentDidMount() {\n        this.refs.search.focus();\n    }\n\n    search = () => {\n        this.storeKeyword()\n        this.props.handleSearch()\n    }\n\n    storeKeyword = () => {\n        const {searchHistory = [], value} = this.props;\n        const data = searchHistory.some(item =>item === value)? searchHistory : searchHistory.concat([value]);\n        // value && localStorage.setItem('searchHistory', JSON.stringify([...searchHistory, value]))\n        localStorage.setItem('searchHistory', JSON.stringify(data));\n    }\n\n    changeFontColor = (isFocus) => {\n        this.setState({\n            isFocus\n        });\n    }\n\n    render() {\n        const { isFocus } = this.state;\n        const cls = classnames('submit-btn', {'submit-btn--active': isFocus})\n        return (\n            \n            <div className=\"search-head\" style={this.props.style} ref={this.props.forwardedRef}>\n\n                <div className=\"left\" onClick={this.returnPage}>\n                    <i className=\"iconfont iconiconfront-68\"/>\n                </div>\n\n                <div className=\"center\">\n                    <SearchBar\n                        value={this.props.value}\n                        showCancelButton\n                        cancelText={\" \"}\n                        ref=\"search\"\n                        focus={true}\n                        onChange={this.props.handleChange}\n                        placeholder=\"搜索课程\"\n                        onFocus={() => this.changeFontColor(true)}\n                        onBlur={() => this.changeFontColor(false)}\n                        onSubmit={ this.search }\n                    />\n                </div>\n                <div className=\"right right-btn\" onClick={this.search}>\n                    <div className={cls}>搜索</div>\n                </div>\n            </div>\n\n        )\n    }\n}\n\nexport default withRouter(SearchHead)"],"sourceRoot":""}