From 86b366cac525ad676da3cfd65f67a551b9260aeb Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 28 一月 2021 18:57:03 +0800 Subject: [PATCH] 2021-01-28 --- src/menu/picturecontroller/index.jsx | 211 ++++++ src/menu/picturecontroller/editform/index.scss | 3 src/templates/zshare/formconfig.jsx | 16 src/components/Image/index.scss | 13 src/components/video/index.jsx | 2 src/menu/components/card/cardcellcomponent/elementform/index.jsx | 2 src/menu/picturecontroller/index.scss | 69 ++ src/menu/pastecontroller/index.jsx | 2 src/menu/pastecontroller/index.scss | 2 src/menu/picturecontroller/video/index.jsx | 35 + src/menu/picturecontroller/editform/index.jsx | 160 +++++ src/tabviews/zshare/fileupload/index.jsx | 7 src/menu/picturecontroller/video/index.scss | 1049 +++++++++++++++++++++++++++++++++++++ src/views/menudesign/index.jsx | 51 + src/components/Image/index.jsx | 49 + 15 files changed, 1,622 insertions(+), 49 deletions(-) diff --git a/src/components/Image/index.jsx b/src/components/Image/index.jsx new file mode 100644 index 0000000..e2a7989 --- /dev/null +++ b/src/components/Image/index.jsx @@ -0,0 +1,49 @@ +import React, {Component} from 'react' +import './index.scss' + +class ImageWrap extends Component { + componentDidMount () { + let Img = new Image() + Img.src = this.props.url + + if (Img.complete) { + this.setSize(Img.width, Img.height) + } else { + Img.onload = () => { + this.setSize(Img.width, Img.height) + } + } + } + + shouldComponentUpdate () { + return false + } + + setSize = (width, height) => { + const { clientWidth, clientHeight } = this.ImageWrapDom + + if (!clientWidth || !clientHeight || !width || !height) return + + let ratio = (width / height) / (clientWidth / clientHeight) + + if (ratio > 1) { + let _width = Math.floor(width / (height / clientHeight)) + this.ImageDom.style.width = _width + 'px' + this.ImageDom.style.left = '-' + ((_width - clientWidth) / 2) + 'px' + } else if (ratio < 1) { + let _height = Math.floor(height / (width / clientWidth)) + this.ImageDom.style.height = _height + 'px' + this.ImageDom.style.top = '-' + ((_height - clientHeight) / 2) + 'px' + } + } + + render() { + return ( + <div className="mk_image-wrap" ref={dom => { this.ImageWrapDom = dom }}> + <img src={this.props.url} ref={dom => { this.ImageDom = dom }} alt=""/> + </div> + ) + } +} + +export default ImageWrap \ No newline at end of file diff --git a/src/components/Image/index.scss b/src/components/Image/index.scss new file mode 100644 index 0000000..3e5b646 --- /dev/null +++ b/src/components/Image/index.scss @@ -0,0 +1,13 @@ +.mk_image-wrap { + display: inline-block; + position: relative; + overflow: hidden; + width: 100%; + height: 100%; + + img { + position: absolute; + width: 100%; + height: 100%; + } +} diff --git a/src/components/video/index.jsx b/src/components/video/index.jsx index d885278..fef570b 100644 --- a/src/components/video/index.jsx +++ b/src/components/video/index.jsx @@ -28,7 +28,7 @@ return ( <div style={{overflow: 'hidden'}}> - <Player poster="" autoPlay={card.autoPlay === 'true'} aspectRatio={card.aspectRatio || '16:9'}> + <Player poster="" autoPlay={card.autoPlay === 'true'} aspectRatio={card.aspectRatio || '16:9'} loop={card.loop === 'true'}> <source src={value} /> <BigPlayButton position="center" /> <ControlBar> diff --git a/src/menu/components/card/cardcellcomponent/elementform/index.jsx b/src/menu/components/card/cardcellcomponent/elementform/index.jsx index 16aca5c..4f1819e 100644 --- a/src/menu/components/card/cardcellcomponent/elementform/index.jsx +++ b/src/menu/components/card/cardcellcomponent/elementform/index.jsx @@ -379,7 +379,7 @@ } ] })( - <FileUpload maxFile={item.maxfile} fileType={'text'} /> + <FileUpload accept=".jpg,.png,.gif,.pjp,.pjpeg,.jpeg,.jfif,.webp,.mp4,.webm,.ogg" maxFile={item.maxfile} fileType={'text'} /> )} </Form.Item> </Col> diff --git a/src/menu/pastecontroller/index.jsx b/src/menu/pastecontroller/index.jsx index d7d3dc4..9df7a55 100644 --- a/src/menu/pastecontroller/index.jsx +++ b/src/menu/pastecontroller/index.jsx @@ -241,7 +241,7 @@ return ( <div style={{display: 'inline-block'}}> {type !== 'menu' ? <Icon type="snippets" style={{color: 'purple'}} onClick={() => {this.setState({visible: true})}} /> : null} - {type === 'menu' ? <Button className="Menu-config-paste" icon="snippets" onClick={() => {this.setState({visible: true})}}>绮樿创</Button> : null} + {type === 'menu' ? <Button className="menu-config-paste" icon="snippets" onClick={() => {this.setState({visible: true})}}>绮樿创</Button> : null} <Modal title="绮樿创" visible={visible} diff --git a/src/menu/pastecontroller/index.scss b/src/menu/pastecontroller/index.scss index 6fbba6f..384a820 100644 --- a/src/menu/pastecontroller/index.scss +++ b/src/menu/pastecontroller/index.scss @@ -1,4 +1,4 @@ -.Menu-config-paste { +.menu-config-paste { border-color: #40a9ff; color: #40a9ff; } \ No newline at end of file diff --git a/src/menu/picturecontroller/editform/index.jsx b/src/menu/picturecontroller/editform/index.jsx new file mode 100644 index 0000000..b764d35 --- /dev/null +++ b/src/menu/picturecontroller/editform/index.jsx @@ -0,0 +1,160 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { Form, Row, Col, Input, Radio, notification } from 'antd' + +import FileUpload from '@/tabviews/zshare/fileupload' +import './index.scss' + +const { TextArea } = Input + +class MainSearch extends Component { + static propTpyes = { + card: PropTypes.object, + inputSubmit: PropTypes.func // 鍥炶溅浜嬩欢 + } + + state = { + urls: [], + linkurl: '', + plusType: 'upload' + } + + handleConfirm = () => { + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� + return new Promise((resolve, reject) => { + this.props.form.validateFieldsAndScroll((err, values) => { + if (!err) { + if (values.urls && values.urls[0].status === 'error') { + notification.warning({ + top: 92, + message: '璇烽噸鏂颁笂浼犳枃浠讹紒', + duration: 5 + }) + return + } else if (values.urls && values.urls[0]) { + values.linkurl = values.urls[0].response + } + resolve(values) + } else { + reject(err) + } + }) + }) + } + + changeType = (val) => { + const { linkurl, urls } = this.state + let _urls = this.props.form.getFieldValue('urls') || '' + let _url = this.props.form.getFieldValue('linkurl') || '' + + if (val === 'input') { + if (_urls && _urls[0] && _urls[0].status === 'done' && (_urls[0].url || _urls[0].response)) { + _url = _urls[0].url || _urls[0].response + } else { + _url = linkurl || '' + } + } else { + _urls = urls.filter(item => item.status === 'done') + _url = linkurl + } + + this.setState({plusType: val, urls: _urls, linkurl: _url}) + } + + render() { + const { getFieldDecorator } = this.props.form + const { card } = this.props + const { urls, linkurl, plusType } = this.state + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 7 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + } + } + return ( + <Form {...formItemLayout} className="picture-edit-model-form"> + <Row gutter={24}> + {!card.id ? <Col span={24}> + <Form.Item label="娣诲姞鏂瑰紡"> + <Radio.Group value={plusType} onChange={(e) => {this.changeType(e.target.value)}} disabled={false}> + <Radio value="upload">涓婁紶</Radio> + <Radio value="input">鍦板潃杈撳叆</Radio> + </Radio.Group> + </Form.Item> + </Col> : null} + {!card.id && card.typecharone === 'image' && plusType === 'upload' ? <Col span={24}> + <Form.Item label="鍥剧墖涓婁紶"> + {getFieldDecorator('urls', { + initialValue: urls, + rules: [ + { + required: true, + message: '璇蜂笂浼犲浘鐗�!' + } + ] + })( + <FileUpload accept=".jpg,.png,.gif,.pjp,.pjpeg,.jpeg,.jfif,.webp" maxFile={1} fileType={'text'} /> + )} + </Form.Item> + </Col> : null} + {!card.id && card.typecharone === 'video' && plusType === 'upload' ? <Col span={24}> + <Form.Item label="瑙嗛涓婁紶"> + {getFieldDecorator('urls', { + initialValue: urls, + rules: [ + { + required: true, + message: '璇蜂笂浼犺棰�!' + } + ] + })( + <FileUpload accept=".mp4,.webm,.ogg" maxFile={1} fileType={'text'} /> + )} + </Form.Item> + </Col> : null} + {!card.id && plusType === 'input' ? <Col span={24}> + <Form.Item label="鍦板潃"> + {getFieldDecorator('linkurl', { + initialValue: linkurl, + rules: [ + { + required: true, + message: '璇锋坊鍔犲湴鍧�淇℃伅!' + }, + { + max: 1024, + message: '鍦板潃鏈�澶�1024涓瓧绗�!' + } + ] + })(<TextArea autoSize={{ minRows: 3 }} onPressEnter={() => this.props.inputSubmit()}/>)} + </Form.Item> + </Col> : null} + {card.id ? <Col span={24}> + <Form.Item label="鍦板潃"> + <TextArea value={card.linkurl} readOnly={true} autoSize={{ minRows: 3 }} /> + </Form.Item> + </Col> : null} + <Col span={24}> + <Form.Item label="澶囨敞"> + {getFieldDecorator('remark', { + initialValue: card.remark, + rules: [ + { + max: 50, + message: '澶囨敞鏈�澶�50涓瓧绗�!' + } + ] + })(<TextArea autoSize={{ minRows: 4 }} onPressEnter={() => this.props.inputSubmit()}/>)} + </Form.Item> + </Col> + </Row> + </Form> + ) + } +} + +export default Form.create()(MainSearch) \ No newline at end of file diff --git a/src/menu/picturecontroller/editform/index.scss b/src/menu/picturecontroller/editform/index.scss new file mode 100644 index 0000000..46604b7 --- /dev/null +++ b/src/menu/picturecontroller/editform/index.scss @@ -0,0 +1,3 @@ +.picture-edit-model-form { + min-height: 150px; +} \ No newline at end of file diff --git a/src/menu/picturecontroller/index.jsx b/src/menu/picturecontroller/index.jsx index 0e6b3b3..4582492 100644 --- a/src/menu/picturecontroller/index.jsx +++ b/src/menu/picturecontroller/index.jsx @@ -1,48 +1,227 @@ import React, {Component} from 'react' // import { fromJS } from 'immutable' -import { Modal, Button } from 'antd' +import { Modal, Button, Row, Col, Input, Icon, message, Tabs, Empty } from 'antd' -// import Utils from '@/utils/utils.js' -// import asyncComponent from '@/utils/asyncComponent' +import Api from '@/api' +import Utils from '@/utils/utils.js' +import asyncComponent from '@/utils/asyncComponent' import './index.scss' -// const PasteForm = asyncComponent(() => import('@/templates/zshare/pasteform')) +const { Search } = Input +const { confirm } = Modal +const { TabPane } = Tabs +const EditForm = asyncComponent(() => import('./editform')) +const Image = asyncComponent(() => import('@/components/Image')) class PasteController extends Component { state = { - visible: false + visible: false, + editvisible: false, + pictures: [], + imageKey: '', + videoKey: '', + videos: [], + card: null + } + + trigger = () => { + let pictures = sessionStorage.getItem('app_pictures') + let videos = sessionStorage.getItem('app_videos') + try { + pictures = JSON.parse(pictures) + videos = JSON.parse(videos) + } catch { + pictures = [] + videos = [] + } + + this.setState({visible: true, pictures, videos}) } - addSource = () => { + handleSource = (item) => { + this.setState({ + editvisible: true, + card: item || null + }) + } + save = () => { + const { card } = this.state + this.editFormRef.handleConfirm().then(res => { + res = {...card, ...res} + + if (!res.id) { + res.id = Utils.getuuid() + } + + Api.getSystemConfig({ + func: 's_url_db_adduptdel', + id: res.id, + PageIndex: 0, // 0 浠h〃鍏ㄩ儴 + PageSize: 0, // 0 浠h〃鍏ㄩ儴 + remark: res.remark || '', + linkurl: res.linkurl, + typecharone: card.typecharone, + type: card.id ? 'upt' : 'add' + }).then(result => { + if (result.status) { + if (card.typecharone === 'image') { + sessionStorage.setItem('app_pictures', JSON.stringify(result.data || [])) + this.setState({pictures: result.data || [], editvisible: false}) + } else { + sessionStorage.setItem('app_videos', JSON.stringify(result.data || [])) + this.setState({videos: result.data || [], editvisible: false}) + } + } + }) + }) + } + + copySource = (item) => { + if (item.linkurl) { + let oInput = document.createElement('input') + oInput.value = item.linkurl + document.body.appendChild(oInput) + oInput.select() + document.execCommand('Copy') + document.body.removeChild(oInput) + + message.success('澶嶅埗鎴愬姛銆�') + } + } + + deleteSource = (item) => { + const _this = this + + confirm({ + title: '纭畾鍒犻櫎鍚楋紵', + content: '', + onOk() { + return new Promise((resolve) => { + Api.getSystemConfig({ + func: 's_url_db_adduptdel', + id: item.id, + PageIndex: 0, // 0 浠h〃鍏ㄩ儴 + PageSize: 0, // 0 浠h〃鍏ㄩ儴 + remark: '', + linkurl: '', + typecharone: item.typecharone, + type: 'del' + }).then(res => { + if (res.status) { + if (item.typecharone === 'image') { + sessionStorage.setItem('app_pictures', JSON.stringify(res.data || [])) + _this.setState({pictures: res.data || []}) + } else { + sessionStorage.setItem('app_videos', JSON.stringify(res.data || [])) + _this.setState({videos: res.data || []}) + } + } + resolve() + }) + }) + }, + onCancel() {} + }) } render() { - const { visible } = this.state + const { visible, editvisible, card, imageKey, videoKey } = this.state + + const pictures = this.state.pictures.filter(item => !imageKey || item.remark.indexOf(imageKey) > -1) + const videos = this.state.videos.filter(item => !videoKey || item.remark.indexOf(videoKey) > -1) return ( <div style={{display: 'inline-block'}}> - <Button className="mk-border-purple" icon="picture" onClick={() => {this.setState({visible: true})}}>璧勬簮绠$悊</Button> + <Button className="mk-border-purple" icon="picture" onClick={this.trigger}>璧勬簮绠$悊</Button> <Modal title="绮樿创" + wrapClassName="picture-control-model" visible={visible} - width={600} + width={1200} maskClosable={false} - onOk={this.pasteSubmit} onCancel={() => {this.setState({visible: false})}} footer={[ - <Button key="back" type="link" icon="plus" onClick={this.addSource}> - 娣诲姞 - </Button>, <Button key="colse" onClick={() => {this.setState({visible: false})}}> 鍏抽棴 </Button> ]} destroyOnClose > - <div> - - </div> + <Tabs> + <TabPane tab="鍥剧墖绠$悊" key="picture"> + <Row style={{marginBottom: '15px'}}> + <Col span={8}> + <Search placeholder="" onSearch={value => this.setState({imageKey: value})} enterButton /> + </Col> + <Col span={16}> + <Button className="picture-plus" type="link" icon="plus" onClick={() => this.handleSource({typecharone: 'image'})}> + 娣诲姞 + </Button> + </Col> + </Row> + <Row gutter={16}> + {pictures.length && pictures.map(item => ( + <Col span={4} key={item.id}> + <div className="image-video-box"> + <div className="image-video-box-body"> + <Image url={item.linkurl} /> + </div> + <div className="image-video-control"> + <Icon type="copy" onClick={() => this.copySource(item)}/> + <Icon type="edit" onClick={() => this.handleSource(item)}/> + <Icon type="delete" onClick={() => this.deleteSource(item)}/> + </div> + </div> + <p className="image-video-remark">{item.remark}</p> + </Col> + ))} + {!pictures.length ? <Empty description={null}/> : null} + </Row> + </TabPane> + <TabPane tab="瑙嗛绠$悊" key="video"> + <Row style={{marginBottom: '15px'}}> + <Col span={8}> + <Search placeholder="" onSearch={value => this.setState({videoKey: value})} enterButton /> + </Col> + <Col span={16}> + <Button className="picture-plus" type="link" icon="plus" onClick={() => this.handleSource({typecharone: 'video'})}> + 娣诲姞 + </Button> + </Col> + </Row> + <Row gutter={16}> + {videos.length && videos.map(item => ( + <Col span={4} key={item.id}> + <div className="image-video-box"> + <div className="image-video-box-body"> + <Image url={item.linkurl} /> + </div> + <div className="image-video-control"> + <Icon type="copy" onClick={() => this.copySource(item)}/> + <Icon type="edit" onClick={() => this.handleSource(item)}/> + <Icon type="delete" onClick={() => this.deleteSource(item)}/> + </div> + </div> + <p className="image-video-remark">{item.remark}</p> + </Col> + ))} + {!videos.length ? <Empty description={null}/> : null} + </Row> + </TabPane> + </Tabs> + </Modal> + <Modal + title={card ? '缂栬緫' : '鏂板缓'} + wrapClassName="picture-edit-model" + visible={editvisible} + width={600} + maskClosable={false} + onOk={this.save} + onCancel={() => {this.setState({editvisible: false})}} + destroyOnClose + > + <EditForm card={card} wrappedComponentRef={(inst) => this.editFormRef = inst} inputSubmit={this.save}/> </Modal> </div> ) diff --git a/src/menu/picturecontroller/index.scss b/src/menu/picturecontroller/index.scss index 6fbba6f..6484f2a 100644 --- a/src/menu/picturecontroller/index.scss +++ b/src/menu/picturecontroller/index.scss @@ -1,4 +1,67 @@ -.Menu-config-paste { - border-color: #40a9ff; - color: #40a9ff; +.picture-control-model { + .ant-modal { + top: 60px; + .ant-modal-body { + max-height: calc(100vh - 120px); + min-height: 450px; + padding-top: 5px; + } + } + .picture-plus { + float: right; + font-size: 16px; + color: rgb(38, 194, 129); + } + .image-video-box { + position: relative; + padding-top: 75%; + .image-video-box-body { + position: absolute; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + } + .image-video-control { + position: absolute; + top: 0; + left: 0px; + right: 0px; + bottom: 0px; + background: rgba(255, 255, 255, 0.8); + padding-top: 30%; + text-align: center; + opacity: 0; + transition: all 0.3s; + i { + font-size: 18px; + cursor: pointer; + } + .anticon-copy { + color: rgb(38, 194, 129); + margin-right: 10px; + } + .anticon-edit { + color: #1890ff; + margin-right: 10px; + } + .anticon-delete { + color: #ff4d4f; + } + } + } + .image-video-box:hover { + .image-video-control { + opacity: 1; + } + } + .image-video-remark { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + word-break: break-all; + font-size: 13px; + margin-bottom: 0; + height: 35px; + } } \ No newline at end of file diff --git a/src/menu/picturecontroller/video/index.jsx b/src/menu/picturecontroller/video/index.jsx new file mode 100644 index 0000000..55be7dd --- /dev/null +++ b/src/menu/picturecontroller/video/index.jsx @@ -0,0 +1,35 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { is, fromJS } from 'immutable' +import { Player } from 'video-react' + +import './index.scss' + +class Video extends Component { + static propTpyes = { + card: PropTypes.object, // 鏉$爜璁剧疆 + value: PropTypes.any, // 鏉$爜鍊� + } + + componentDidMount () { + this.player.seek(1) + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.props), fromJS(nextProps)) + } + + render() { + const { value, card } = this.props + + return ( + <div style={{overflow: 'hidden'}}> + <Player poster="" ref={player => { this.player = player }} autoPlay={card.autoPlay === 'true'} aspectRatio={card.aspectRatio || '16:9'}> + <source src={value} /> + </Player> + </div> + ) + } +} + +export default Video \ No newline at end of file diff --git a/src/menu/picturecontroller/video/index.scss b/src/menu/picturecontroller/video/index.scss new file mode 100644 index 0000000..1c11bbc --- /dev/null +++ b/src/menu/picturecontroller/video/index.scss @@ -0,0 +1,1049 @@ +@charset "UTF-8"; +.video-react .video-react-control:before, .video-react .video-react-big-play-button:before { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.video-react .video-react-control:before, .video-react .video-react-big-play-button:before { + text-align: center; +} + +@font-face { + font-family: "video-react"; + src: url(data:application/vnd.ms-fontobject;base64,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?#iefix) format("eot"); +} +@font-face { + font-family: "video-react"; + src: url(data:application/font-woff;base64,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) format("woff"), url(data:application/x-font-ttf;base64,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) format("truetype"); + font-weight: normal; + font-style: normal; +} +.video-react-icon, .video-react .video-react-closed-caption, .video-react .video-react-bezel .video-react-bezel-icon, .video-react .video-react-volume-level, .video-react .video-react-mute-control, +.video-react .video-react-volume-menu-button, .video-react .video-react-play-control, .video-react .video-react-play-progress, .video-react .video-react-big-play-button { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: "video-react" !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.video-react-icon-play-arrow:before, .video-react .video-react-bezel .video-react-bezel-icon-play:before, .video-react .video-react-play-control:before, .video-react .video-react-big-play-button:before { + content: "飯�"; +} + +.video-react-icon-play-circle-filled:before { + content: "飯�"; +} + +.video-react-icon-play-circle-outline:before { + content: "飯�"; +} + +.video-react-icon-pause:before, .video-react .video-react-bezel .video-react-bezel-icon-pause:before, .video-react .video-react-play-control.video-react-playing:before { + content: "飯�"; +} + +.video-react-icon-pause-circle-filled:before { + content: "飯�"; +} + +.video-react-icon-pause-circle-outline:before { + content: "飯�"; +} + +.video-react-icon-stop:before { + content: "飯�"; +} + +.video-react-icon-fast-rewind:before, .video-react .video-react-bezel .video-react-bezel-icon-fast-rewind:before { + content: "飯�"; +} + +.video-react-icon-fast-forward:before, .video-react .video-react-bezel .video-react-bezel-icon-fast-forward:before { + content: "飯�"; +} + +.video-react-icon-skip-previous:before { + content: "飯�"; +} + +.video-react-icon-skip-next:before { + content: "飯�"; +} + +.video-react-icon-replay-5:before, .video-react .video-react-bezel .video-react-bezel-icon-replay-5:before { + content: "飯�"; +} + +.video-react-icon-replay-10:before, .video-react .video-react-bezel .video-react-bezel-icon-replay-10:before { + content: "飯�"; +} + +.video-react-icon-replay-30:before, .video-react .video-react-bezel .video-react-bezel-icon-replay-30:before { + content: "飯�"; +} + +.video-react-icon-forward-5:before, .video-react .video-react-bezel .video-react-bezel-icon-forward-5:before { + content: "飯�"; +} + +.video-react-icon-forward-10:before, .video-react .video-react-bezel .video-react-bezel-icon-forward-10:before { + content: "飯�"; +} + +.video-react-icon-forward-30:before, .video-react .video-react-bezel .video-react-bezel-icon-forward-30:before { + content: "飯�"; +} + +.video-react-icon-volume-off:before, .video-react .video-react-bezel .video-react-bezel-icon-volume-off:before, .video-react .video-react-mute-control.video-react-vol-muted:before, +.video-react .video-react-volume-menu-button.video-react-vol-muted:before { + content: "飯�"; +} + +.video-react-icon-volume-mute:before, .video-react .video-react-mute-control.video-react-vol-0:before, +.video-react .video-react-volume-menu-button.video-react-vol-0:before { + content: "飯�"; +} + +.video-react-icon-volume-down:before, .video-react .video-react-bezel .video-react-bezel-icon-volume-down:before, .video-react .video-react-mute-control.video-react-vol-2:before, +.video-react .video-react-volume-menu-button.video-react-vol-2:before, .video-react .video-react-mute-control.video-react-vol-1:before, +.video-react .video-react-volume-menu-button.video-react-vol-1:before { + content: "飯�"; +} + +.video-react-icon-volume-up:before, .video-react .video-react-bezel .video-react-bezel-icon-volume-up:before, .video-react .video-react-mute-control:before, +.video-react .video-react-volume-menu-button:before { + content: "飯�"; +} + +.video-react-icon-fullscreen:before { + content: "飯�"; +} + +.video-react-icon-fullscreen-exit:before { + content: "飯�"; +} + +.video-react-icon-closed-caption:before, .video-react .video-react-closed-caption:before { + content: "飯�"; +} + +.video-react-icon-hd:before { + content: "飯�"; +} + +.video-react-icon-settings:before { + content: "飯�"; +} + +.video-react-icon-share:before { + content: "飯�"; +} + +.video-react-icon-info:before { + content: "飯�"; +} + +.video-react-icon-info-outline:before { + content: "飯�"; +} + +.video-react-icon-close:before { + content: "飯�"; +} + +.video-react-icon-circle:before, .video-react .video-react-volume-level:before, .video-react .video-react-play-progress:before { + content: "飯�"; +} + +.video-react-icon-circle-outline:before { + content: "飯�"; +} + +.video-react-icon-circle-inner-circle:before { + content: "飯�"; +} + +.video-react { + display: block; + vertical-align: top; + box-sizing: border-box; + color: #fff; + background-color: #000; + position: relative; + font-size: 10px; + line-height: 1; + font-family: serif, Times, "Times New Roman"; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.video-react:-moz-full-screen { + position: absolute; +} +.video-react:-webkit-full-screen { + width: 100% !important; + height: 100% !important; +} +.video-react *, +.video-react *:before, +.video-react *:after { + box-sizing: inherit; +} +.video-react ul { + font-family: inherit; + font-size: inherit; + line-height: inherit; + list-style-position: outside; + margin-left: 0; + margin-right: 0; + margin-top: 0; + margin-bottom: 0; +} +.video-react.video-react-fluid, .video-react.video-react-16-9, .video-react.video-react-4-3 { + width: 100%; + max-width: 100%; + height: 0; +} +.video-react.video-react-16-9 { + padding-top: 56.25%; +} +.video-react.video-react-4-3 { + padding-top: 75%; +} +.video-react.video-react-fill { + width: 100%; + height: 100%; +} +.video-react .video-react-video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.video-react.video-react-fullscreen { + width: 100% !important; + height: 100% !important; + padding-top: 0 !important; +} +.video-react.video-react-fullscreen.video-react-user-inactive { + cursor: none; +} + +body.video-react-full-window { + padding: 0; + margin: 0; + height: 100%; + overflow-y: auto; +} +body.video-react-full-window .video-react-fullscreen { + position: fixed; + overflow: hidden; + z-index: 1000; + left: 0; + top: 0; + bottom: 0; + right: 0; +} + +.video-react button { + background: none; + border: none; + color: inherit; + display: inline-block; + cursor: pointer; + overflow: visible; + font-size: inherit; + line-height: inherit; + text-transform: none; + text-decoration: none; + transition: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.video-react .video-react-loading-spinner { + display: none; + position: absolute; + top: 50%; + left: 50%; + margin: -25px 0 0 -25px; + opacity: 0.85; + text-align: left; + border: 6px solid rgba(43, 51, 63, 0.7); + box-sizing: border-box; + background-clip: padding-box; + width: 50px; + height: 50px; + border-radius: 25px; +} +.video-react .video-react-loading-spinner:before, .video-react .video-react-loading-spinner:after { + content: ""; + position: absolute; + margin: -6px; + box-sizing: inherit; + width: inherit; + height: inherit; + border-radius: inherit; + opacity: 1; + border: inherit; + border-color: transparent; + border-top-color: white; + -webkit-animation: video-react-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, video-react-spinner-fade 1.1s linear infinite; + animation: video-react-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, video-react-spinner-fade 1.1s linear infinite; +} + +.video-react-seeking .video-react-loading-spinner, +.video-react-waiting .video-react-loading-spinner { + display: block; +} + +.video-react-seeking .video-react-loading-spinner:before, +.video-react-waiting .video-react-loading-spinner:before { + border-top-color: white; +} + +.video-react-seeking .video-react-loading-spinner:after, +.video-react-waiting .video-react-loading-spinner:after { + border-top-color: white; + -webkit-animation-delay: 0.44s; + animation-delay: 0.44s; +} + +@keyframes video-react-spinner-spin { + 100% { + transform: rotate(360deg); + } +} +@-webkit-keyframes video-react-spinner-spin { + 100% { + -webkit-transform: rotate(360deg); + } +} +@keyframes video-react-spinner-fade { + 0% { + border-top-color: #73859f; + } + 20% { + border-top-color: #73859f; + } + 35% { + border-top-color: white; + } + 60% { + border-top-color: #73859f; + } + 100% { + border-top-color: #73859f; + } +} +@-webkit-keyframes video-react-spinner-fade { + 0% { + border-top-color: #73859f; + } + 20% { + border-top-color: #73859f; + } + 35% { + border-top-color: white; + } + 60% { + border-top-color: #73859f; + } + 100% { + border-top-color: #73859f; + } +} +.video-react .video-react-big-play-button { + font-size: 26px; + line-height: 38px; + height: 40px; + width: 40px; + display: block; + position: absolute; + top: 10px; + left: 10px; + padding: 0; + cursor: pointer; + opacity: 1; + border: 0.06666em solid #fff; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); + -webkit-border-radius: 40px; + -moz-border-radius: 40px; + border-radius: 40px; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; +} +.video-react .video-react-big-play-button.video-react-big-play-button-center { + top: 50%; + left: 50%; + margin-top: -20px; + margin-left: -20px; +} +.video-react .video-react-big-play-button.big-play-button-hide { + display: none; +} +.video-react:hover .video-react-big-play-button, +.video-react .video-react-big-play-button:focus { + outline: 0; + border-color: #fff; + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); + -webkit-transition: all 0s; + -moz-transition: all 0s; + -o-transition: all 0s; + transition: all 0s; +} + +.video-react-menu-button { + cursor: pointer; +} +.video-react-menu-button.video-react-disabled { + cursor: default; +} + +.video-react-menu .video-react-menu-content { + display: block; + padding: 0; + margin: 0; + overflow: auto; + font-family: serif, Times, "Times New Roman"; +} +.video-react-menu li { + list-style: none; + margin: 0; + padding: 0.2em 0; + line-height: 1.4em; + font-size: 1.2em; + text-align: center; +} +.video-react-menu li:focus, .video-react-menu li:hover { + outline: 0; + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); +} +.video-react-menu li.video-react-selected, .video-react-menu li.video-react-selected:focus, .video-react-menu li.video-react-selected:hover { + background-color: #fff; + color: #2B333F; +} +.video-react-menu li.vjs-menu-title { + text-align: center; + text-transform: uppercase; + font-size: 1em; + line-height: 2em; + padding: 0; + margin: 0 0 0.3em 0; + font-weight: bold; + cursor: default; +} + +.video-react-scrubbing .vjs-menu-button:hover .video-react-menu { + display: none; +} + +.video-react .video-react-menu-button-popup .video-react-menu { + display: none; + position: absolute; + bottom: 0; + width: 10em; + left: -3em; + height: 0em; + margin-bottom: 1.5em; + border-top-color: rgba(43, 51, 63, 0.7); +} +.video-react .video-react-menu-button-popup .video-react-menu .video-react-menu-content { + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); + position: absolute; + width: 100%; + bottom: 1.5em; + max-height: 15em; +} + +.video-react-menu-button-popup .video-react-menu.video-react-lock-showing { + display: block; +} + +.video-react .video-react-menu-button-inline { + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; + overflow: hidden; +} +.video-react .video-react-menu-button-inline:before { + width: 2.222222222em; +} +.video-react .video-react-menu-button-inline:hover, .video-react .video-react-menu-button-inline:focus, .video-react .video-react-menu-button-inline.video-react-slider-active { + width: 12em; +} +.video-react .video-react-menu-button-inline:hover .video-react-menu, .video-react .video-react-menu-button-inline:focus .video-react-menu, .video-react .video-react-menu-button-inline.video-react-slider-active .video-react-menu { + display: block; + opacity: 1; +} +.video-react .video-react-menu-button-inline.video-react-slider-active { + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} +.video-react .video-react-menu-button-inline .video-react-menu { + opacity: 0; + height: 100%; + width: auto; + position: absolute; + left: 4em; + top: 0; + padding: 0; + margin: 0; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; +} +.video-react .video-react-menu-button-inline .video-react-menu-content { + width: auto; + height: 100%; + margin: 0; + overflow: hidden; +} + +.video-react-no-flex .video-react-menu-button-inline .video-react-menu { + display: block; + opacity: 1; + position: relative; + width: auto; +} +.video-react-no-flex .video-react-menu-button-inline:hover, .video-react-no-flex .video-react-menu-button-inline:focus, .video-react-no-flex .video-react-menu-button-inline.video-react-slider-active { + width: auto; +} + +.video-react .video-react-poster { + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-position: 50% 50%; + background-size: contain; + background-color: #000000; + cursor: pointer; + margin: 0; + padding: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 100%; +} +.video-react .video-react-poster img { + display: block; + vertical-align: middle; + margin: 0 auto; + max-height: 100%; + padding: 0; + width: 100%; +} + +.video-react .video-react-slider { + outline: 0; + position: relative; + cursor: pointer; + padding: 0; + margin: 0 0.45em 0 0.45em; + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); +} +.video-react .video-react-slider:focus { + -webkit-box-shadow: 0 0 1em #fff; + -moz-box-shadow: 0 0 1em #fff; + box-shadow: 0 0 1em #fff; +} + +.video-react .video-react-control { + outline: none; + position: relative; + text-align: center; + margin: 0; + padding: 0; + height: 100%; + width: 4em; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} +.video-react .video-react-control:before { + font-size: 1.8em; + line-height: 1.67; +} +.video-react .video-react-control:focus:before, .video-react .video-react-control:hover:before, .video-react .video-react-control:focus { + text-shadow: 0em 0em 1em #fff, 0em 0em 0.5em #fff; +} + +.video-react .video-react-control-text { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.video-react-no-flex .video-react-control { + display: table-cell; + vertical-align: middle; +} + +.video-react .video-react-control-bar { + display: none; + width: 100%; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 3em; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); +} + +.video-react-has-started .video-react-control-bar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + visibility: visible; + opacity: 1; + -webkit-transition: visibility 0.1s, opacity 0.1s; + -moz-transition: visibility 0.1s, opacity 0.1s; + -o-transition: visibility 0.1s, opacity 0.1s; + transition: visibility 0.1s, opacity 0.1s; +} + +.video-react-has-started.video-react-user-inactive.video-react-playing .video-react-control-bar.video-react-control-bar-auto-hide { + visibility: visible; + opacity: 0; + -webkit-transition: visibility 1s, opacity 1s; + -moz-transition: visibility 1s, opacity 1s; + -o-transition: visibility 1s, opacity 1s; + transition: visibility 1s, opacity 1s; +} + +.video-react-controls-disabled .video-react-control-bar, +.video-react-using-native-controls .video-react-control-bar, +.video-react-error .video-react-control-bar { + display: none !important; +} + +.video-react-audio.video-react-has-started.video-react-user-inactive.video-react-playing .video-react-control-bar { + opacity: 1; + visibility: visible; +} + +.video-react-has-started.video-react-no-flex .video-react-control-bar { + display: table; +} + +.video-react .video-react-progress-control { + -webkit-box-flex: auto; + -moz-box-flex: auto; + -webkit-flex: auto; + -ms-flex: auto; + flex: auto; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + min-width: 4em; +} + +.video-react-live .video-react-progress-control { + display: none; +} + +.video-react .video-react-progress-holder { + -webkit-box-flex: auto; + -moz-box-flex: auto; + -webkit-flex: auto; + -ms-flex: auto; + flex: auto; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + height: 0.3em; +} + +.video-react .video-react-progress-control:hover .video-react-progress-holder { + font-size: 1.6666666667em; +} + +/* If we let the font size grow as much as everything else, the current time tooltip ends up + ginormous. If you'd like to enable the current time tooltip all the time, this should be disabled + to avoid a weird hitch when you roll off the hover. */ +.video-react .video-react-progress-control:hover .video-react-time-tooltip, +.video-react .video-react-progress-control:hover .video-react-mouse-display:after, +.video-react .video-react-progress-control:hover .video-react-play-progress:after { + visibility: visible; + font-size: 0.6em; +} + +.video-react .video-react-progress-holder .video-react-play-progress, +.video-react .video-react-progress-holder .video-react-load-progress, +.video-react .video-react-progress-holder .video-react-tooltip-progress-bar, +.video-react .video-react-progress-holder .video-react-load-progress div { + position: absolute; + display: block; + height: 0.3em; + margin: 0; + padding: 0; + width: 0; + left: 0; + top: 0; +} + +.video-react .video-react-play-progress { + background-color: #fff; +} +.video-react .video-react-play-progress:before { + position: absolute; + top: -0.3333333333em; + right: -0.5em; + font-size: 0.9em; +} + +.video-react .video-react-time-tooltip, +.video-react .video-react-mouse-display:after, +.video-react .video-react-play-progress:after { + visibility: hidden; + pointer-events: none; + position: absolute; + top: -3.4em; + right: -1.9em; + font-size: 0.9em; + color: #000; + content: attr(data-current-time); + padding: 6px 8px 8px 8px; + background-color: #fff; + background-color: rgba(255, 255, 255, 0.8); + -webkit-border-radius: 0.3em; + -moz-border-radius: 0.3em; + border-radius: 0.3em; +} + +.video-react .video-react-time-tooltip, +.video-react .video-react-play-progress:before, +.video-react .video-react-play-progress:after { + z-index: 1; +} + +.video-react .video-react-progress-control .video-react-keep-tooltips-inside:after { + display: none; +} + +.video-react .video-react-load-progress { + background: #bfc7d3; + background: rgba(115, 133, 159, 0.5); +} + +.video-react .video-react-load-progress div { + background: white; + background: rgba(115, 133, 159, 0.75); +} + +.video-react.video-react-no-flex .video-react-progress-control { + width: auto; +} + +.video-react .video-react-time-tooltip { + display: inline-block; + height: 2.4em; + position: relative; + float: right; + right: -1.9em; +} + +.video-react .video-react-tooltip-progress-bar { + visibility: hidden; +} + +.video-react .video-react-progress-control .video-react-mouse-display { + display: none; + position: absolute; + width: 1px; + height: 100%; + background-color: #000; + z-index: 1; +} + +.video-react-no-flex .video-react-progress-control .video-react-mouse-display { + z-index: 0; +} + +.video-react .video-react-progress-control:hover .video-react-mouse-display { + display: block; +} + +.video-react.video-react-user-inactive .video-react-progress-control .video-react-mouse-display, +.video-react.video-react-user-inactive .video-react-progress-control .video-react-mouse-display:after { + visibility: hidden; + opacity: 0; + -webkit-transition: visibility 1s, opacity 1s; + -moz-transition: visibility 1s, opacity 1s; + -o-transition: visibility 1s, opacity 1s; + transition: visibility 1s, opacity 1s; +} + +.video-react.video-react-user-inactive.video-react-no-flex .video-react-progress-control .video-react-mouse-display, +.video-react.video-react-user-inactive.video-react-no-flex .video-react-progress-control .video-react-mouse-display:after { + display: none; +} + +.video-react .video-react-mouse-display .video-react-time-tooltip, +.video-react .video-react-progress-control .video-react-mouse-display:after { + color: #fff; + background-color: #000; + background-color: rgba(0, 0, 0, 0.8); +} + +.video-react .video-react-play-control { + cursor: pointer; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} +.video-react .video-react-fullscreen-control { + cursor: pointer; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} + +.video-react.video-react-fullscreen { + position: fixed; + left: 0; + top: 0; + bottom: 0; + right: 0; + z-index: 9999; +} + +.video-react .video-react-time-control { + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; + font-size: 1em; + line-height: 3em; + min-width: 2em; + width: auto; + padding-left: 1em; + padding-right: 1em; +} +.video-react .video-react-time-divider { + line-height: 3em; + min-width: initial; + padding: 0; +} + +.video-react .video-react-mute-control, +.video-react .video-react-volume-menu-button { + cursor: pointer; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} +.video-react .video-react-volume-control { + width: 5em; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} +.video-react .video-react-volume-bar { + margin: 1.35em 0.45em; +} +.video-react .video-react-volume-bar.video-react-slider-horizontal { + width: 5em; + height: 0.3em; +} +.video-react .video-react-volume-bar.video-react-slider-horizontal .video-react-volume-level { + width: 100%; +} +.video-react .video-react-volume-bar.video-react-slider-vertical { + width: 0.3em; + height: 5em; + margin: 1.35em auto; +} +.video-react .video-react-volume-bar.video-react-slider-vertical .video-react-volume-level { + height: 100%; +} +.video-react .video-react-volume-level { + position: absolute; + bottom: 0; + left: 0; + background-color: #fff; +} +.video-react .video-react-volume-level:before { + position: absolute; + font-size: 0.9em; +} +.video-react .video-react-slider-vertical .video-react-volume-level { + width: 0.3em; +} +.video-react .video-react-slider-vertical .video-react-volume-level:before { + top: -0.5em; + left: -0.3em; +} +.video-react .video-react-slider-horizontal .video-react-volume-level { + height: 0.3em; +} +.video-react .video-react-slider-horizontal .video-react-volume-level:before { + top: -0.3em; + right: -0.5em; +} +.video-react .video-react-menu-button-popup.video-react-volume-menu-button .video-react-menu { + display: block; + width: 0; + height: 0; + border-top-color: transparent; +} +.video-react .video-react-menu-button-popup.video-react-volume-menu-button-vertical .video-react-menu { + left: 0.5em; + height: 8em; +} +.video-react .video-react-menu-button-popup.video-react-volume-menu-button-horizontal .video-react-menu { + left: -2em; +} +.video-react .video-react-menu-button-popup.video-react-volume-menu-button .video-react-menu-content { + height: 0; + width: 0; + overflow-x: hidden; + overflow-y: hidden; +} +.video-react .video-react-volume-menu-button-vertical:hover .video-react-menu-content, +.video-react .video-react-volume-menu-button-vertical:focus .video-react-menu-content, +.video-react .video-react-volume-menu-button-vertical.video-react-slider-active .video-react-menu-content, +.video-react .video-react-volume-menu-button-vertical .video-react-lock-showing .video-react-menu-content { + height: 8em; + width: 2.9em; +} +.video-react .video-react-volume-menu-button-horizontal:hover .video-react-menu-content, +.video-react .video-react-volume-menu-button-horizontal:focus .video-react-menu-content, +.video-react .video-react-volume-menu-button-horizontal .video-react-slider-active .video-react-menu-content, +.video-react .video-react-volume-menu-button-horizontal .video-react-lock-showing .video-react-menu-content { + height: 2.9em; + width: 8em; +} +.video-react .video-react-volume-menu-button.video-react-menu-button-inline .video-react-menu-content { + background-color: transparent !important; +} + +.video-react .video-react-playback-rate .video-react-playback-rate-value { + line-height: 3em; + text-align: center; +} +.video-react .video-react-playback-rate .video-react-menu { + width: 4em; + left: 0em; +} + +.video-react .video-react-bezel { + position: absolute; + left: 50%; + top: 50%; + width: 52px; + height: 52px; + z-index: 17; + margin-left: -26px; + margin-top: -26px; + background: rgba(0, 0, 0, 0.5); + border-radius: 26px; +} +.video-react .video-react-bezel.video-react-bezel-animation { + -moz-animation: video-react-bezel-fadeout 0.5s linear 1 normal forwards; + -webkit-animation: video-react-bezel-fadeout 0.5s linear 1 normal forwards; + animation: video-react-bezel-fadeout 0.5s linear 1 normal forwards; + pointer-events: none; +} +.video-react .video-react-bezel.video-react-bezel-animation-alt { + -moz-animation: video-react-bezel-fadeout-alt 0.5s linear 1 normal forwards; + -webkit-animation: video-react-bezel-fadeout-alt 0.5s linear 1 normal forwards; + animation: video-react-bezel-fadeout-alt 0.5s linear 1 normal forwards; + pointer-events: none; +} +.video-react .video-react-bezel .video-react-bezel-icon { + width: 36px; + height: 36px; + margin: 8px; + font-size: 26px; + line-height: 36px; + text-align: center; +} +@keyframes video-react-bezel-fadeout { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: scale(2); + } +} +@keyframes video-react-bezel-fadeout-alt { + 0% { + opacity: 1; + } + to { + opacity: 0; + transform: scale(2); + } +} +.video-react .video-react-closed-caption { + cursor: pointer; + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none; + -ms-flex: none; + flex: none; +} +.video-react video::-webkit-media-text-track-container { + -webkit-transform: translateY(-30px); + transform: translateY(-30px); +} \ No newline at end of file diff --git a/src/tabviews/zshare/fileupload/index.jsx b/src/tabviews/zshare/fileupload/index.jsx index e42c173..428fa2b 100644 --- a/src/tabviews/zshare/fileupload/index.jsx +++ b/src/tabviews/zshare/fileupload/index.jsx @@ -30,6 +30,13 @@ onChange = ({ fileList }) => { const { onChange } = this.props + fileList = fileList.map(item => { + if (item.status === 'error' && /^<!DOCTYPE html>/.test(item.response)) { + item.response = '' + } + return item + }) + if (onChange) { onChange([...fileList]) } diff --git a/src/templates/zshare/formconfig.jsx b/src/templates/zshare/formconfig.jsx index 60ad33a..828532c 100644 --- a/src/templates/zshare/formconfig.jsx +++ b/src/templates/zshare/formconfig.jsx @@ -726,14 +726,6 @@ options: [] }, { - type: 'text', - key: 'label', - label: '鎸夐挳鍚嶇О', - initVal: card.label, - required: true, - readonly: false - }, - { type: 'radio', key: 'procMode', label: '鍙傛暟澶勭悊', @@ -757,6 +749,14 @@ }, { type: 'text', + key: 'label', + label: '鎸夐挳鍚嶇О', + initVal: card.label, + required: true, + readonly: false + }, + { + type: 'text', key: 'sql', label: Formdict['model.form.tablename'], initVal: card.sql || config.setting.tableName || '', diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx index 5c9d657..2d179a4 100644 --- a/src/views/menudesign/index.jsx +++ b/src/views/menudesign/index.jsx @@ -34,7 +34,7 @@ const PasteController = asyncComponent(() => import('@/menu/pastecontroller')) const PaddingController = asyncComponent(() => import('@/menu/padcontroller')) const StyleController = asyncComponent(() => import('@/menu/stylecontroller')) -// const PictureController = asyncComponent(() => import('@/menu/picturecontroller')) +const PictureController = asyncComponent(() => import('@/menu/picturecontroller')) const StyleCombController = asyncComponent(() => import('@/menu/stylecombcontroller')) const StyleCombControlButton = asyncComponent(() => import('@/menu/stylecombcontrolbutton')) const ModalController = asyncComponent(() => import('@/menu/modalconfig/controller')) @@ -101,8 +101,10 @@ MKEmitter.addListener('changePopview', this.initPopview) MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle) MKEmitter.addListener('updateCustomComponent', this.updateCustomComponent) - this.updateCustomComponent() - // this.getAppPictures() + setTimeout(() => { + this.updateCustomComponent() + this.getAppPictures() + }, 1000) } /** @@ -120,18 +122,31 @@ MKEmitter.removeListener('updateCustomComponent', this.updateCustomComponent) } - // getAppPictures = () => { - // Api.getSystemConfig({ - // func: 's_url_db_adduptdel', - // id: '', - // PageIndex: 0, // 0 浠h〃鍏ㄩ儴 - // PageSize: 0, // 0 浠h〃鍏ㄩ儴 - // typecharone: 'image', - // type: 'search' - // }).then(res => { + getAppPictures = () => { + Api.getSystemConfig({ + func: 's_url_db_adduptdel', + PageIndex: 0, // 0 浠h〃鍏ㄩ儴 + PageSize: 0, // 0 浠h〃鍏ㄩ儴 + typecharone: 'image', + type: 'search' + }).then(res => { + if (res.status) { + sessionStorage.setItem('app_pictures', JSON.stringify(res.data || [])) + } - // }) - // } + Api.getSystemConfig({ + func: 's_url_db_adduptdel', + PageIndex: 0, // 0 浠h〃鍏ㄩ儴 + PageSize: 0, // 0 浠h〃鍏ㄩ儴 + typecharone: 'video', + type: 'search' + }).then(res => { + if (res.status) { + sessionStorage.setItem('app_videos', JSON.stringify(res.data || [])) + } + }) + }) + } updateCustomComponent = () => { Api.getSystemConfig({ @@ -166,6 +181,7 @@ }) } this.setState({customComponents: coms}) + this.getRoleFields() }) } @@ -330,7 +346,6 @@ }) this.props.modifyCustomMenu(config) - this.getRoleFields() } else { notification.warning({ top: 92, @@ -794,7 +809,7 @@ onEnabledChange = () => { const { config } = this.state - if (!config.enabled && this.verifyConfig(true)) { + if (!config || (!config.enabled && this.verifyConfig(true))) { return } @@ -928,10 +943,10 @@ <div> {config && config.MenuName} </div> } bordered={false} extra={ <div> - {/* <PictureController/> */} + <PictureController/> <StyleCombControlButton menu={config} /> <PasteController type="menu" Tab={null} insert={this.insert} /> - {config ? <Switch className="big" checkedChildren={dict['mob.enable']} unCheckedChildren={dict['mob.disable']} checked={config.enabled} onChange={this.onEnabledChange} /> : null} + <Switch className="big" checkedChildren={dict['mob.enable']} unCheckedChildren={dict['mob.disable']} checked={config && config.enabled} onChange={this.onEnabledChange} /> <Button type="primary" onClick={this.submitConfig} loading={menuloading}>{dict['mob.save']}</Button> <Button type="default" onClick={this.closeView}>{dict['mob.return']}</Button> </div> -- Gitblit v1.8.0