From d62c168d0656fac4242581609c3c5c0d88cf6a48 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 29 一月 2021 18:03:47 +0800 Subject: [PATCH] 2021-01-29 --- src/menu/bgcontroller/index.scss | 6 src/menu/modulesource/index.scss | 0 src/menu/picturecontroller/index.jsx | 119 +++ src/menu/components/card/cardcellcomponent/elementform/index.jsx | 37 - src/menu/picturecontroller/index.scss | 23 src/menu/components/share/sourcecomponent/popsource/index.jsx | 131 ++++ src/menu/modulesource/dragsource/index.jsx | 0 src/menu/stylecontroller/index.scss | 12 src/api/index.js | 3 src/menu/components/share/sourcecomponent/index.scss | 41 + src/tabviews/zshare/actionList/normalbutton/index.jsx | 3 src/menu/bgcontroller/index.jsx | 51 - src/menu/picturecontroller/video/index.scss | 999 ----------------------------------- src/views/menudesign/index.jsx | 8 src/menu/modulesource/option.jsx | 0 src/utils/utils.js | 8 src/menu/stylecontroller/index.jsx | 50 - src/menu/components/share/sourcecomponent/index.jsx | 62 ++ src/menu/components/share/sourcecomponent/popsource/index.scss | 49 + src/menu/modulesource/dragsource/index.scss | 0 src/menu/components/card/cardcellcomponent/formconfig.jsx | 11 src/menu/picturecontroller/video/index.jsx | 18 src/menu/picturecontroller/editform/index.jsx | 4 src/menu/popview/index.jsx | 2 src/components/Image/index.jsx | 6 src/menu/modulesource/index.jsx | 0 26 files changed, 490 insertions(+), 1,153 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index e260816..a5350e0 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -133,7 +133,8 @@ params.data = param } - _url = window.btoa(_url) + _url = _url.replace(/&/ig, '%26') + // _url = window.btoa(_url) params.url = '/trans/redirect?rd=' + _url + '&method=' + method return axios(params) diff --git a/src/components/Image/index.jsx b/src/components/Image/index.jsx index e2a7989..01bd23e 100644 --- a/src/components/Image/index.jsx +++ b/src/components/Image/index.jsx @@ -26,7 +26,11 @@ let ratio = (width / height) / (clientWidth / clientHeight) - if (ratio > 1) { + if (ratio > 1.5) { + let _height = Math.floor(height * (clientWidth / width)) + this.ImageDom.style.height = 'auto' + this.ImageDom.style.top = ((clientHeight - _height) / 2) + 'px' + } else if (ratio > 1 && ratio < 1.5) { let _width = Math.floor(width / (height / clientHeight)) this.ImageDom.style.width = _width + 'px' this.ImageDom.style.left = '-' + ((_width - clientWidth) / 2) + 'px' diff --git a/src/menu/bgcontroller/index.jsx b/src/menu/bgcontroller/index.jsx index bb8b043..ab2155c 100644 --- a/src/menu/bgcontroller/index.jsx +++ b/src/menu/bgcontroller/index.jsx @@ -1,13 +1,15 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Form, Input } from 'antd' +import { Form } from 'antd' import zhCN from '@/locales/zh-CN/mob.js' import enUS from '@/locales/en-US/mob.js' -import ColorSketch from '@/mob/colorsketch' -import FileUpload from '@/tabviews/zshare/fileupload' +import asyncComponent from '@/utils/asyncComponent' import './index.scss' + +const ColorSketch = asyncComponent(() => import('@/mob/colorsketch')) +const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent')) class MobController extends Component { static propTpyes = { @@ -19,7 +21,6 @@ dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, backgroundColor: '', backgroundImage: '', - bgimages: [], } UNSAFE_componentWillMount () { @@ -27,10 +28,7 @@ let bgImg = config.style.backgroundImage || '' - if (bgImg && /^linear-gradient/.test(bgImg)) { - bgImg = bgImg.replace('linear-gradient(', '') - bgImg = bgImg.replace(')', '') - } else if (bgImg && /^url/.test(bgImg)) { + if (bgImg && /^url/.test(bgImg)) { bgImg = bgImg.replace('url(', '') bgImg = bgImg.replace(')', '') } @@ -59,45 +57,23 @@ this.props.updateConfig(config) } - /** - * @description 鎵嬪姩淇敼璺緞 - */ - changeImage = (e) => { - let val = e.target.value + imgChange = (val) => { this.setState({ backgroundImage: val }) let config = fromJS(this.props.config).toJS() - val = val.replace(/^\s*|\s*$/ig, '') - if (/^http|^\/\//.test(val)) { - val = `url(${val})` - } else if (/,/ig.test(val) && !/^(radial-gradient|linear-gradient)/ig.test(val)) { - val = `linear-gradient(${val})` + if (val) { + config.style.backgroundImage = `url(${val})` + } else { + delete config.style.backgroundImage } - - config.style.backgroundImage = val this.props.updateConfig(config) } - imgChange = (list) => { - if (list[0] && list[0].response) { - this.setState({ - bgimages: [], - backgroundImage: list[0].response - }) - - let config = fromJS(this.props.config).toJS() - config.style.backgroundImage = `url(${list[0].response})` - this.props.updateConfig(config) - } else { - this.setState({bgimages: list}) - } - } - render () { - const { backgroundColor, backgroundImage, bgimages } = this.state + const { backgroundColor, backgroundImage } = this.state const formItemLayout = { labelCol: { xs: { span: 24 }, @@ -116,8 +92,7 @@ <ColorSketch value={backgroundColor} onChange={this.changeBackgroundColor} /> </Form.Item> <Form.Item colon={false} label="鍥剧墖"> - <FileUpload accept=".jpg,.png,.gif,.svg" value={bgimages} maxFile={2} fileType="text" onChange={this.imgChange}/> - <Input placeholder="" value={backgroundImage} autoComplete="off" onChange={this.changeImage}/> + <SourceComponent value={backgroundImage} type="" placement="right" onChange={this.imgChange}/> </Form.Item> </Form> </div> diff --git a/src/menu/bgcontroller/index.scss b/src/menu/bgcontroller/index.scss index cccd02f..0d6ed73 100644 --- a/src/menu/bgcontroller/index.scss +++ b/src/menu/bgcontroller/index.scss @@ -6,6 +6,12 @@ padding-top: 10px; line-height: 35px; } + .mk-source-wrap { + height: 32px; + .mk-source-item-info { + top: 5px; + } + } } .margin-popover { diff --git a/src/menu/components/card/cardcellcomponent/elementform/index.jsx b/src/menu/components/card/cardcellcomponent/elementform/index.jsx index 4f1819e..7ffdfb7 100644 --- a/src/menu/components/card/cardcellcomponent/elementform/index.jsx +++ b/src/menu/components/card/cardcellcomponent/elementform/index.jsx @@ -4,16 +4,18 @@ import { Form, Row, Col, Input, Select, Icon, Radio, Tooltip, InputNumber, notification } from 'antd' import { formRule } from '@/utils/option.js' -import FileUpload from '@/tabviews/zshare/fileupload' -import ColorSketch from '@/mob/colorsketch' +import asyncComponent from '@/utils/asyncComponent' import './index.scss' + +const ColorSketch = asyncComponent(() => import('@/mob/colorsketch')) +const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent')) const cardTypeOptions = { sequence: ['eleType', 'width'], text: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'link'], number: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix'], picture: ['eleType', 'datatype', 'width', 'lenWidRadio', 'link'], - video: ['eleType', 'datatype', 'width', 'aspectRatio', 'autoPlay'], + video: ['eleType', 'datatype', 'width', 'aspectRatio', 'autoPlay', 'loop'], icon: ['eleType', 'icon', 'datatype', 'width'], slider: ['eleType', 'datatype', 'width', 'color', 'maxValue'], splitline: ['eleType', 'color', 'width', 'borderWidth'], @@ -356,22 +358,11 @@ </Col> ) } else if (item.type === 'file') { - let filelist = [] - if (item.initVal) { - filelist = [{ - uid: `1`, - name: item.initVal.slice(item.initVal.lastIndexOf('/') + 1), - status: 'done', - url: item.initVal, - origin: true - }] - } - fields.push( <Col span={12} key={index}> <Form.Item label={item.label}> {getFieldDecorator(item.key, { - initialValue: filelist, + initialValue: item.initVal, rules: [ { required: !!item.required, @@ -379,7 +370,7 @@ } ] })( - <FileUpload accept=".jpg,.png,.gif,.pjp,.pjpeg,.jpeg,.jfif,.webp,.mp4,.webm,.ogg" maxFile={item.maxfile} fileType={'text'} /> + <SourceComponent type={this.state.eleType} /> )} </Form.Item> </Col> @@ -396,20 +387,6 @@ if (!err) { values.uuid = this.props.card.uuid values.marks = this.props.card.marks || null - - if (values.url) { - if (values.url.length > 0) { - if (values.url[0].origin && values.url[0].url) { - values.url = values.url[0].url - } else if (!values.url[0].origin && values.url[0].status === 'done' && values.url[0].response) { - values.url = values.url[0].response - } else { - values.url = '' - } - } else { - values.url = '' - } - } if (values.eleType === 'picture' && values.datatype === 'static' && !values.url) { notification.warning({ diff --git a/src/menu/components/card/cardcellcomponent/formconfig.jsx b/src/menu/components/card/cardcellcomponent/formconfig.jsx index 39b0ab3..189bab3 100644 --- a/src/menu/components/card/cardcellcomponent/formconfig.jsx +++ b/src/menu/components/card/cardcellcomponent/formconfig.jsx @@ -124,6 +124,17 @@ }, { type: 'radio', + key: 'loop', + label: '寰幆鎾斁', + initVal: card.loop || 'false', + required: false, + options: [ + { value: 'true', text: '鏄�' }, + { value: 'false', text: '鍚�' } + ] + }, + { + type: 'radio', key: 'link', label: '閾炬帴', initVal: card.link || '', diff --git a/src/menu/components/share/sourcecomponent/index.jsx b/src/menu/components/share/sourcecomponent/index.jsx new file mode 100644 index 0000000..8f1f40c --- /dev/null +++ b/src/menu/components/share/sourcecomponent/index.jsx @@ -0,0 +1,62 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { is, fromJS } from 'immutable' +import { Popover, Button, Icon } from 'antd' + +import PopSource from './popsource' +import './index.scss' + +class CopyComponent extends Component { + static propTpyes = { + type: PropTypes.string, + placement: PropTypes.any, + onChange: PropTypes.func + } + + state = { + url: this.props.value + } + + UNSAFE_componentWillMount () { + + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) + } + + deleteUrl = () => { + this.setState({url: ''}) + this.props.onChange('') + } + + changePopover = (visible) => { + if (!visible && this.SourceWrap.state.url) { + this.setState({url: this.SourceWrap.state.url}) + this.props.onChange(this.SourceWrap.state.url) + } else if (visible && this.SourceWrap) { + this.SourceWrap.init() + } + } + + render () { + const { url } = this.state + const { type, placement } = this.props + let name = url ? url.slice(url.lastIndexOf('/') + 1) : '' + + return ( + <div className="mk-source-wrap"> + {!url ? <Popover overlayClassName="mk-source-manage" placement={placement || 'top'} content={<PopSource type={type} ref={dom => { this.SourceWrap = dom }} />} trigger="click" onVisibleChange={this.changePopover}> + <Button icon="upload">鐐瑰嚮娣诲姞</Button> + </Popover> : null} + {url ? <div className="mk-source-item-info"> + <Icon type="paper-clip" /> + <a target="_blank" rel="noopener noreferrer" href={url}>{name}</a> + <Icon title="鍒犻櫎鏂囦欢" type="delete" onClick={this.deleteUrl}/> + </div> : null} + </div> + ) + } +} + +export default CopyComponent \ No newline at end of file diff --git a/src/menu/components/share/sourcecomponent/index.scss b/src/menu/components/share/sourcecomponent/index.scss new file mode 100644 index 0000000..6a2b87f --- /dev/null +++ b/src/menu/components/share/sourcecomponent/index.scss @@ -0,0 +1,41 @@ +.mk-source-wrap { + .mk-source-item-info { + position: relative; + line-height: 1.3; + top: 3px; + .anticon-paper-clip { + position: absolute; + top: 3px; + color: rgba(0,0,0,.45); + font-size: 14px; + } + .anticon-delete { + position: absolute; + top: 3px; + right: 0px; + padding-right: 6px; + color: rgba(0,0,0,.45); + cursor: pointer; + display: none; + } + a { + display: inline-block; + width: 100%; + padding-left: 22px; + padding-right: 14px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + .mk-source-item-info:hover { + background-color: #e6f7ff; + .anticon-delete { + display: inline-block; + } + } +} + +.mk-source-manage { + z-index: 1170 !important; +} diff --git a/src/menu/components/share/sourcecomponent/popsource/index.jsx b/src/menu/components/share/sourcecomponent/popsource/index.jsx new file mode 100644 index 0000000..812da24 --- /dev/null +++ b/src/menu/components/share/sourcecomponent/popsource/index.jsx @@ -0,0 +1,131 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { is, fromJS } from 'immutable' +import { Input, Form, Row, Col, Pagination } from 'antd' + +import asyncComponent from '@/utils/asyncComponent' +import './index.scss' + +const { TextArea } = Input +const { Search } = Input +const FileUpload = asyncComponent(() => import('@/tabviews/zshare/fileupload')) +const Video = asyncComponent(() => import('@/menu/picturecontroller/video')) +const Image = asyncComponent(() => import('@/components/Image')) + +class PopSource extends Component { + static propTpyes = { + btnlog: PropTypes.array, + handlelog: PropTypes.func + } + + state = { + url: '', + originlist: [], + list: [], + pagelist: [], + fileList: [], + searchKey: '', + pageSize: 12, + pageIndex: 1 + } + + UNSAFE_componentWillMount () { + this.init() + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) + } + + init = () => { + const { type } = this.props + + let originlist = [] + if (type === 'video') { + let videos = sessionStorage.getItem('app_videos') + try { + originlist = JSON.parse(videos) + } catch { + originlist = [] + } + } else { + let pictures = sessionStorage.getItem('app_pictures') + try { + originlist = JSON.parse(pictures) + } catch { + originlist = [] + } + } + + let list = originlist + let pagelist = list.filter((item, index) => index < this.state.pageSize) + + this.setState({originlist, list, url: '', searchKey: '', pageIndex: 1, fileList: [], pagelist}) + } + + changeSearch = () => { + const { originlist, pageSize, searchKey } = this.state + let list = originlist.filter(item => item.remark.indexOf(searchKey) > -1) + let pagelist = list.filter((item, index) => index < pageSize) + + this.setState({list, pagelist, pageIndex: 1}) + } + + changeValue = (e) => { + this.setState({url: e.target.value}) + } + + changeSize = (page) => { + const { list, pageSize } = this.state + let pagelist = list.filter((item, index) => index < pageSize * page && index >= pageSize * (page - 1)) + this.setState({pageIndex: page, pagelist}) + } + + changeFile = (vals) => { + this.setState({fileList: vals}) + + if (vals && vals[0] && vals[0].status === 'done' && vals[0].response) { + this.setState({url: vals[0].response}) + } + } + + selectItem = (item) => { + if (item.linkurl) { + this.setState({url: item.linkurl}) + } + } + + render () { + const { type } = this.props + const { list, url, pagelist, fileList, searchKey, pageIndex, pageSize } = this.state + + return ( + <div className="mk-source-pop-wrap"> + <Form.Item label="鍦板潃" labelCol={{xs: { span: 24 }, sm: { span: 3 }}} wrapperCol={{xs: { span: 24 }, sm: { span: 21 }}}> + <TextArea value={url} rows={2} onChange={this.changeValue}/> + </Form.Item> + <Form.Item label="涓婁紶" labelCol={{xs: { span: 24 }, sm: { span: 3 }}} wrapperCol={{xs: { span: 24 }, sm: { span: 21 }}}> + <FileUpload value={fileList} onChange={this.changeFile} accept={type === 'video' ? '.mp4,.webm,.ogg' : '.jpg,.png,.gif,.pjp,.pjpeg,.jpeg,.jfif,.webp'} maxFile={1} fileType={'text'} /> + </Form.Item> + {list.length ? <Form.Item label="绯荤粺" labelCol={{xs: { span: 24 }, sm: { span: 3 }}} wrapperCol={{xs: { span: 24 }, sm: { span: 21 }}}> + <Search value={searchKey} placeholder="" onChange={(e) => this.setState({searchKey: e.target.value})} onSearch={this.changeSearch}/> + <Row gutter={10}> + {pagelist.map(item => ( + <Col span={4} key={item.id}> + <div className="image-video-box" onClick={() => this.selectItem(item)}> + <div className="image-video-box-body"> + {type !== 'video' ? <Image url={item.linkurl} /> : null} + {type === 'video' ? <Video value={item.linkurl} /> : null} + </div> + </div> + </Col> + ))} + </Row> + {list.length > pageSize ? <Pagination size="small" current={pageIndex} pageSize={pageSize} onChange={this.changeSize} total={list.length} /> : null} + </Form.Item> : null} + </div> + ) + } +} + +export default PopSource \ No newline at end of file diff --git a/src/menu/components/share/sourcecomponent/popsource/index.scss b/src/menu/components/share/sourcecomponent/popsource/index.scss new file mode 100644 index 0000000..3ff92bd --- /dev/null +++ b/src/menu/components/share/sourcecomponent/popsource/index.scss @@ -0,0 +1,49 @@ +.mk-source-pop-wrap { + width: 500px; + padding: 15px 10px; + + .image-video-box { + position: relative; + padding-top: 75%; + cursor: pointer; + margin-bottom: 10px; + .image-video-box-body { + position: absolute; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + .video-react-big-play-button { + display: none; + } + .video-react-control-bar { + display: none; + } + } + .image-video-box-body::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + } + .fileupload-form-container { + display: inline-block; + width: 50%; + } + .ant-input-search { + position: absolute; + width: 150px; + right: 0px; + top: -40px; + input.ant-input { + height: 25px; + border-color: #eeeeee; + } + } + .ant-pagination { + text-align: right; + } +} \ No newline at end of file diff --git a/src/menu/modelsource/dragsource/index.jsx b/src/menu/modulesource/dragsource/index.jsx similarity index 100% rename from src/menu/modelsource/dragsource/index.jsx rename to src/menu/modulesource/dragsource/index.jsx diff --git a/src/menu/modelsource/dragsource/index.scss b/src/menu/modulesource/dragsource/index.scss similarity index 100% rename from src/menu/modelsource/dragsource/index.scss rename to src/menu/modulesource/dragsource/index.scss diff --git a/src/menu/modelsource/index.jsx b/src/menu/modulesource/index.jsx similarity index 100% rename from src/menu/modelsource/index.jsx rename to src/menu/modulesource/index.jsx diff --git a/src/menu/modelsource/index.scss b/src/menu/modulesource/index.scss similarity index 100% rename from src/menu/modelsource/index.scss rename to src/menu/modulesource/index.scss diff --git a/src/menu/modelsource/option.jsx b/src/menu/modulesource/option.jsx similarity index 100% rename from src/menu/modelsource/option.jsx rename to src/menu/modulesource/option.jsx diff --git a/src/menu/picturecontroller/editform/index.jsx b/src/menu/picturecontroller/editform/index.jsx index b764d35..b0671af 100644 --- a/src/menu/picturecontroller/editform/index.jsx +++ b/src/menu/picturecontroller/editform/index.jsx @@ -68,11 +68,11 @@ const formItemLayout = { labelCol: { xs: { span: 24 }, - sm: { span: 7 } + sm: { span: 5 } }, wrapperCol: { xs: { span: 24 }, - sm: { span: 16 } + sm: { span: 18 } } } return ( diff --git a/src/menu/picturecontroller/index.jsx b/src/menu/picturecontroller/index.jsx index 4582492..12cabfa 100644 --- a/src/menu/picturecontroller/index.jsx +++ b/src/menu/picturecontroller/index.jsx @@ -1,6 +1,5 @@ import React, {Component} from 'react' -// import { fromJS } from 'immutable' -import { Modal, Button, Row, Col, Input, Icon, message, Tabs, Empty } from 'antd' +import { Modal, Button, Row, Col, Input, Icon, message, Tabs, Empty, Pagination } from 'antd' import Api from '@/api' import Utils from '@/utils/utils.js' @@ -10,7 +9,9 @@ const { Search } = Input const { confirm } = Modal const { TabPane } = Tabs + const EditForm = asyncComponent(() => import('./editform')) +const Video = asyncComponent(() => import('./video')) const Image = asyncComponent(() => import('@/components/Image')) class PasteController extends Component { @@ -21,12 +22,20 @@ imageKey: '', videoKey: '', videos: [], - card: null + card: null, + pageSize: 12, + filpictures: [], + filvideos: [], + piclist: [], + vidlist: [], + picIndex: 1, + vidIndex: 1, } trigger = () => { let pictures = sessionStorage.getItem('app_pictures') let videos = sessionStorage.getItem('app_videos') + try { pictures = JSON.parse(pictures) videos = JSON.parse(videos) @@ -35,7 +44,25 @@ videos = [] } - this.setState({visible: true, pictures, videos}) + let filpictures = pictures + let filvideos = videos + + let piclist = filpictures.filter((item, index) => index < this.state.pageSize) + let vidlist = filvideos.filter((item, index) => index < this.state.pageSize) + + this.setState({ + visible: true, + filpictures, + filvideos, + pictures, + picIndex: 1, + vidIndex: 1, + imageKey: '', + videoKey: '', + piclist, + vidlist, + videos + }) } handleSource = (item) => { @@ -67,11 +94,12 @@ if (result.status) { if (card.typecharone === 'image') { sessionStorage.setItem('app_pictures', JSON.stringify(result.data || [])) - this.setState({pictures: result.data || [], editvisible: false}) + this.resetPicture(result.data || []) } else { sessionStorage.setItem('app_videos', JSON.stringify(result.data || [])) - this.setState({videos: result.data || [], editvisible: false}) + this.resetVideo(result.data || []) } + this.setState({editvisible: false}) } }) }) @@ -111,10 +139,10 @@ if (res.status) { if (item.typecharone === 'image') { sessionStorage.setItem('app_pictures', JSON.stringify(res.data || [])) - _this.setState({pictures: res.data || []}) + _this.resetPicture(res.data || []) } else { sessionStorage.setItem('app_videos', JSON.stringify(res.data || [])) - _this.setState({videos: res.data || []}) + _this.resetVideo(res.data || []) } } resolve() @@ -124,12 +152,59 @@ onCancel() {} }) } + + resetPicture = (data) => { + const { imageKey, pageSize } = this.state + + let filpictures = data.filter(item => !imageKey || item.remark.indexOf(imageKey) > -1) + let piclist = filpictures.filter((item, index) => index < pageSize) + + this.setState({picIndex: 1, filpictures, piclist, pictures: data}) + } + + resetVideo = (data) => { + const { videoKey, pageSize } = this.state + + let filvideos = data.filter(item => !videoKey || item.remark.indexOf(videoKey) > -1) + let vidlist = filvideos.filter((item, index) => index < pageSize) + + this.setState({vidIndex: 1, filvideos, vidlist, videos: data}) + } + + filterPicture = () => { + const { imageKey, pictures, pageSize } = this.state + + let filpictures = pictures.filter(item => !imageKey || item.remark.indexOf(imageKey) > -1) + let piclist = filpictures.filter((item, index) => index < pageSize) + + this.setState({picIndex: 1, filpictures, piclist}) + } + + filterVideo = () => { + const { videoKey, videos, pageSize } = this.state + + let filvideos = videos.filter(item => !videoKey || item.remark.indexOf(videoKey) > -1) + let vidlist = filvideos.filter((item, index) => index < pageSize) + + this.setState({vidIndex: 1, filvideos, vidlist}) + } + + changePicSize = (page) => { + const { filpictures, pageSize } = this.state + let piclist = filpictures.filter((item, index) => index < pageSize * page && index >= pageSize * (page - 1)) + + this.setState({picIndex: page, piclist}) + } + + changeVidSize = (page) => { + const { filvideos, pageSize } = this.state + let vidlist = filvideos.filter((item, index) => index < pageSize * page && index >= pageSize * (page - 1)) + + this.setState({vidIndex: page, vidlist}) + } render() { - 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) + const { visible, editvisible, card, filpictures, filvideos, piclist, vidlist, imageKey, videoKey, pageSize, picIndex, vidIndex } = this.state return ( <div style={{display: 'inline-block'}}> @@ -152,7 +227,7 @@ <TabPane tab="鍥剧墖绠$悊" key="picture"> <Row style={{marginBottom: '15px'}}> <Col span={8}> - <Search placeholder="" onSearch={value => this.setState({imageKey: value})} enterButton /> + <Search placeholder="" value={imageKey} onChange={(e) => this.setState({imageKey: e.target.value})} onSearch={this.filterPicture} enterButton /> </Col> <Col span={16}> <Button className="picture-plus" type="link" icon="plus" onClick={() => this.handleSource({typecharone: 'image'})}> @@ -160,8 +235,8 @@ </Button> </Col> </Row> - <Row gutter={16}> - {pictures.length && pictures.map(item => ( + <Row gutter={16} style={{height: '340px'}}> + {piclist.length && piclist.map(item => ( <Col span={4} key={item.id}> <div className="image-video-box"> <div className="image-video-box-body"> @@ -176,13 +251,14 @@ <p className="image-video-remark">{item.remark}</p> </Col> ))} - {!pictures.length ? <Empty description={null}/> : null} + {!piclist.length ? <Empty description={null}/> : null} </Row> + {filpictures.length > pageSize ? <Pagination size="small" current={picIndex} pageSize={pageSize} onChange={this.changePicSize} total={filpictures.length} /> : null} </TabPane> <TabPane tab="瑙嗛绠$悊" key="video"> <Row style={{marginBottom: '15px'}}> <Col span={8}> - <Search placeholder="" onSearch={value => this.setState({videoKey: value})} enterButton /> + <Search placeholder="" value={videoKey} onChange={e => this.setState({videoKey: e.target.value})} onSearch={this.filterVideo} enterButton /> </Col> <Col span={16}> <Button className="picture-plus" type="link" icon="plus" onClick={() => this.handleSource({typecharone: 'video'})}> @@ -190,12 +266,12 @@ </Button> </Col> </Row> - <Row gutter={16}> - {videos.length && videos.map(item => ( + <Row gutter={16} style={{height: '340px'}}> + {vidlist.length && vidlist.map(item => ( <Col span={4} key={item.id}> <div className="image-video-box"> <div className="image-video-box-body"> - <Image url={item.linkurl} /> + <Video value={item.linkurl} /> </div> <div className="image-video-control"> <Icon type="copy" onClick={() => this.copySource(item)}/> @@ -206,8 +282,9 @@ <p className="image-video-remark">{item.remark}</p> </Col> ))} - {!videos.length ? <Empty description={null}/> : null} + {!vidlist.length ? <Empty description={null}/> : null} </Row> + {filvideos.length > pageSize ? <Pagination size="small" current={vidIndex} pageSize={pageSize} onChange={this.changeVidSize} total={filvideos.length} /> : null} </TabPane> </Tabs> </Modal> diff --git a/src/menu/picturecontroller/index.scss b/src/menu/picturecontroller/index.scss index 6484f2a..86430f0 100644 --- a/src/menu/picturecontroller/index.scss +++ b/src/menu/picturecontroller/index.scss @@ -3,9 +3,13 @@ top: 60px; .ant-modal-body { max-height: calc(100vh - 120px); - min-height: 450px; + min-height: 510px; padding-top: 5px; } + } + .ant-tabs-tabpane { + padding-left: 3px; + padding-right: 3px; } .picture-plus { float: right; @@ -15,12 +19,19 @@ .image-video-box { position: relative; padding-top: 75%; + box-shadow: 0 0 2px #bcbcbc; .image-video-box-body { position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px; + .video-react-big-play-button { + display: none; + } + .video-react-control-bar { + display: none; + } } .image-video-control { position: absolute; @@ -34,16 +45,16 @@ opacity: 0; transition: all 0.3s; i { - font-size: 18px; + font-size: 20px; cursor: pointer; } .anticon-copy { color: rgb(38, 194, 129); - margin-right: 10px; + margin-right: 15px; } .anticon-edit { color: #1890ff; - margin-right: 10px; + margin-right: 15px; } .anticon-delete { color: #ff4d4f; @@ -62,6 +73,10 @@ word-break: break-all; font-size: 13px; margin-bottom: 0; + margin-top: 2px; height: 35px; } + .ant-pagination { + text-align: right; + } } \ No newline at end of file diff --git a/src/menu/picturecontroller/video/index.jsx b/src/menu/picturecontroller/video/index.jsx index 55be7dd..1ac5f18 100644 --- a/src/menu/picturecontroller/video/index.jsx +++ b/src/menu/picturecontroller/video/index.jsx @@ -1,33 +1,27 @@ 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, // 鏉$爜鍊� + value: PropTypes.string, // 瑙嗛鍦板潃 } componentDidMount () { this.player.seek(1) } - shouldComponentUpdate (nextProps, nextState) { - return !is(fromJS(this.props), fromJS(nextProps)) + shouldComponentUpdate () { + return false } 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> + <Player ref={player => { this.player = player }} aspectRatio={'4:3'}> + <source src={this.props.value} /> + </Player> ) } } diff --git a/src/menu/picturecontroller/video/index.scss b/src/menu/picturecontroller/video/index.scss index 1c11bbc..0acabae 100644 --- a/src/menu/picturecontroller/video/index.scss +++ b/src/menu/picturecontroller/video/index.scss @@ -1,181 +1,5 @@ -@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; @@ -188,13 +12,7 @@ -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 { @@ -232,818 +50,3 @@ 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/menu/popview/index.jsx b/src/menu/popview/index.jsx index 93b026c..18d2fb6 100644 --- a/src/menu/popview/index.jsx +++ b/src/menu/popview/index.jsx @@ -21,7 +21,7 @@ const { confirm } = Modal const MenuForm = asyncComponent(() => import('./menuform')) -const SourceWrap = asyncComponent(() => import('@/menu/modelsource')) +const SourceWrap = asyncComponent(() => import('@/menu/modulesource')) const MenuShell = asyncComponent(() => import('@/menu/menushell')) const BgController = asyncComponent(() => import('@/menu/bgcontroller')) const PasteController = asyncComponent(() => import('@/menu/pastecontroller')) diff --git a/src/menu/stylecontroller/index.jsx b/src/menu/stylecontroller/index.jsx index 1185818..ee460b5 100644 --- a/src/menu/stylecontroller/index.jsx +++ b/src/menu/stylecontroller/index.jsx @@ -1,18 +1,19 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Collapse, Form, Input, Col, Icon, InputNumber, Select, Radio, Drawer, Button } from 'antd' +import { Collapse, Form, Col, Icon, InputNumber, Select, Radio, Drawer, Button } from 'antd' import MKEmitter from '@/utils/events.js' import zhCN from '@/locales/zh-CN/mob.js' import enUS from '@/locales/en-US/mob.js' -import ColorSketch from '@/mob/colorsketch' +import asyncComponent from '@/utils/asyncComponent' import StyleInput from './styleInput' -import FileUpload from '@/tabviews/zshare/fileupload' import './index.scss' const { Panel } = Collapse const { Option } = Select +const ColorSketch = asyncComponent(() => import('@/mob/colorsketch')) +const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent')) class MobController extends Component { static propTpyes = { @@ -24,7 +25,6 @@ dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, card: null, comIds: [], - bgimages: [], backgroundImage: '', options: [], borposition: 'outer' @@ -50,12 +50,8 @@ initStyle = (comIds, options, style = {}) => { let backgroundImage = '' - if (style.backgroundImage) { - if (/^url/ig.test(style.backgroundImage)) { - backgroundImage = style.backgroundImage.replace(/^url\(/ig, '').replace(/\)$/ig, '') - } else if (/^linear-gradient/ig.test(style.backgroundImage)) { - backgroundImage = style.backgroundImage.replace(/^linear-gradient\(/ig, '').replace(/\)$/ig, '') - } + if (style.backgroundImage && /^url/ig.test(style.backgroundImage)) { + backgroundImage = style.backgroundImage.replace(/^url\(/ig, '').replace(/\)$/ig, '') } this.setState({ @@ -204,30 +200,15 @@ this.updateStyle({shadow: val}) } - imgChange = (list) => { - if (list[0] && list[0].response) { - this.setState({ - bgimages: [], - backgroundImage: list[0].response - }) - this.updateStyle({backgroundImage: `url(${list[0].response})`}) + imgChange = (val) => { + this.setState({ + backgroundImage: val + }) + if (val) { + this.updateStyle({backgroundImage: `url(${val})`}) } else { - this.setState({bgimages: list}) + this.updateStyle({backgroundImage: ''}) } - } - - changeBackgroundImageInput = (e) => { - let val = e.target.value - val = val.replace(/^\s*|\s*$/ig, '') - - if (/^http|^\/\//.test(val)) { - val = `url(${val})` - } else if (/,/ig.test(val) && !/^(radial-gradient|linear-gradient)/ig.test(val)) { - val = `linear-gradient(${val})` - } - - this.setState({backgroundImage: e.target.value}) - this.updateStyle({backgroundImage: val}) } changeBorderStyle = (val) => { @@ -301,7 +282,7 @@ } render () { - const { card, options, backgroundImage, bgimages, borposition } = this.state + const { card, options, backgroundImage, borposition } = this.state const formItemLayout = { labelCol: { xs: { span: 24 }, @@ -444,8 +425,7 @@ label={<Icon title="鑳屾櫙鍥剧墖" type="picture" />} labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > - <FileUpload accept=".jpg,.png,.gif,.svg" value={bgimages} maxFile={2} fileType="text" onChange={this.imgChange}/> - <Input placeholder="" value={backgroundImage} autoComplete="off" onChange={this.changeBackgroundImageInput} /> + <SourceComponent value={backgroundImage} type="" placement="right" onChange={this.imgChange}/> </Form.Item> </Col> : null} </Panel> : null} diff --git a/src/menu/stylecontroller/index.scss b/src/menu/stylecontroller/index.scss index e17070f..082735e 100644 --- a/src/menu/stylecontroller/index.scss +++ b/src/menu/stylecontroller/index.scss @@ -28,6 +28,18 @@ .ant-input-number { width: 100%; } + .mk-source-wrap { + height: 32px; + .anticon-paper-clip { + color:rgba(255, 255, 255, 0.7); + } + .anticon-delete { + color:rgba(255, 255, 255, 0.7); + } + .mk-source-item-info:hover { + background-color: transparent; + } + } .ant-form-item { margin-bottom: 2px; diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx index 7eda245..aa503fb 100644 --- a/src/tabviews/zshare/actionList/normalbutton/index.jsx +++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx @@ -885,8 +885,7 @@ param.ID = record.ID } - let _prevCustomScript = `${record.callbacksql || 'declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000)'} - Select @ErrorCode='',@retmsg='' + let _prevCustomScript = `${record.callbacksql} ${errSql} ` let _backCustomScript = '' diff --git a/src/utils/utils.js b/src/utils/utils.js index ba6cfde..ce58c46 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -1202,10 +1202,6 @@ ` } - if (retmsg) { - _callbacksql = _sql - } - // 鍘婚櫎绂佺敤鐨勯獙璇� if (verify.contrasts) { verify.contrasts = verify.contrasts.filter(item => item.status !== 'false') @@ -1234,6 +1230,10 @@ select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @BillCode='', @ModularDetailCode='' ` + if (retmsg) { + _callbacksql = _sql + } + if (_initCustomScript) { _sql += _initCustomScript } diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx index 2d179a4..b1371d0 100644 --- a/src/views/menudesign/index.jsx +++ b/src/views/menudesign/index.jsx @@ -26,19 +26,19 @@ const MenuForm = asyncComponent(() => import('./menuform')) const HomeForm = asyncComponent(() => import('./homeform')) -const PrintMenuForm = asyncComponent(() => import('./printmenuform')) const Header = asyncComponent(() => import('@/menu/header')) -const SourceWrap = asyncComponent(() => import('@/menu/modelsource')) const MenuShell = asyncComponent(() => import('@/menu/menushell')) +const PrintMenuForm = asyncComponent(() => import('./printmenuform')) +const SourceWrap = asyncComponent(() => import('@/menu/modulesource')) +const PopviewController = asyncComponent(() => import('@/menu/popview')) const BgController = asyncComponent(() => import('@/menu/bgcontroller')) 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 ModalController = asyncComponent(() => import('@/menu/modalconfig/controller')) const StyleCombController = asyncComponent(() => import('@/menu/stylecombcontroller')) const StyleCombControlButton = asyncComponent(() => import('@/menu/stylecombcontrolbutton')) -const ModalController = asyncComponent(() => import('@/menu/modalconfig/controller')) -const PopviewController = asyncComponent(() => import('@/menu/popview')) const TableComponent = asyncComponent(() => import('@/templates/sharecomponent/tablecomponent')) sessionStorage.setItem('isEditState', 'true') -- Gitblit v1.8.0