king
2023-11-09 7bc44b8b3e88950fd2ff553f41dd0a01198f27ca
src/menu/components/share/sourcecomponent/inputform/index.jsx
@@ -2,6 +2,7 @@
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Input, Form, Row, Col, Pagination, Empty, Button, Modal, notification } from 'antd'
import { PlusOutlined } from '@ant-design/icons'
import Api from '@/api'
import Utils from '@/utils/utils.js'
@@ -17,9 +18,7 @@
class PopSource extends Component {
  static propTpyes = {
    btnlog: PropTypes.array,
    keyword: PropTypes.string,
    handlelog: PropTypes.func
    keyword: PropTypes.string
  }
  state = {
@@ -27,7 +26,6 @@
    originlist: [],
    list: [],
    pagelist: [],
    fileList: [],
    searchKey: '',
    pageSize: 12,
    pageIndex: 1,
@@ -38,7 +36,7 @@
  UNSAFE_componentWillMount () {
    if (this.props.keyword === 'system') {
      this.init()
      this.preInit()
    }
  }
@@ -49,37 +47,51 @@
      if (_form && _form.focus) {
        _form.focus()
      }
    } catch {}
    } catch (e) {}
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState))
  }
  init = () => {
  preInit = () => {
    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 _type = type === 'video' ? 'video' : 'image'
    let _sname = type === 'video' ? 'app_videos' : 'app_pictures'
    this.getSource(_type, _sname).then(res => {
      this.init(res)
    })
  }
  getSource = (type, sessionName) => {
    return new Promise(resolve => {
      if (window.GLOB[sessionName]) {
        resolve(window.GLOB[sessionName])
      } else {
        let param = {
          func: 's_url_db_adduptdel',
          PageIndex: 0,  // 0 代表全部
          PageSize: 0,   // 0 代表全部
          type: 'search',
          typecharone: type
        }
        Api.getCloudConfig(param).then(res => {
          let data = res.data || []
          window.GLOB[sessionName] = data
          resolve(data)
        })
      }
    })
  }
  init = (originlist) => {
    let list = originlist
    let pagelist = list.filter((item, index) => index < this.state.pageSize)
    this.setState({originlist, list, url: '', searchKey: '', pageIndex: 1, fileList: [], pagelist})
    this.setState({originlist, list, url: '', searchKey: '', pageIndex: 1, pagelist})
  }
  changeSearch = () => {
@@ -100,12 +112,8 @@
    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})
    }
  changeFile = (val) => {
    this.setState({url: val})
  }
  selectItem = (item) => {
@@ -130,7 +138,7 @@
        res.id = Utils.getuuid()
      }
      Api.getSystemConfig({
      Api.getCloudConfig({
        func: 's_url_db_adduptdel',
        id: res.id,
        PageIndex: 0, // 0 代表全部
@@ -142,11 +150,11 @@
      }).then(result => {
        if (result.status) {
          if (card.typecharone === 'image') {
            sessionStorage.setItem('app_pictures', JSON.stringify(result.data || []))
            this.init()
            window.GLOB.app_pictures = result.data || []
            this.init(result.data || [])
          } else {
            sessionStorage.setItem('app_videos', JSON.stringify(result.data || []))
            this.init()
            window.GLOB.app_videos = result.data || []
            this.init(result.data || [])
          }
          this.setState({editvisible: false})
        } else {
@@ -162,20 +170,25 @@
  render () {
    const { type, keyword } = this.props
    const { list, url, pagelist, fileList, searchKey, pageIndex, pageSize, selectId, editvisible, card } = this.state
    const { list, url, pagelist, searchKey, pageIndex, pageSize, selectId, editvisible, card } = this.state
    
    return (
      <div className="mk-source-pop-wrap">
        {keyword === 'input' ? <Form.Item label="地址" labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={{xs: { span: 24 }, sm: { span: 20 }}}>
        {keyword === 'input' ? <Form.Item label="地址" help="可使用@mywebsite@代替域名(含虚拟目录),如:@mywebsite@/Content/images/xxx.jpg" labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={{xs: { span: 24 }, sm: { span: 20 }}}>
          <TextArea id="source-input" value={url} rows={4} onChange={this.changeValue}/>
        </Form.Item> : null}
        {keyword === 'upload' ? <Form.Item label="上传" labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={{xs: { span: 24 }, sm: { span: 20 }}}>
          <FileUpload value={fileList} onChange={this.changeFile} accept={type === 'video' ? '.mp4,.webm,.ogg' : '.jpg,.png,.gif,.pjp,.pjpeg,.jpeg,.jfif,.webp'} maxFile={1} fileType={type === 'video' ? 'text' : 'picture'} />
          <FileUpload config={{
            initval: '',
            suffix: type === 'video' ? '.mp4,.webm,.ogg' : '.jpg,.png,.gif,.pjp,.pjpeg,.jpeg,.jfif,.webp,.ico',
            maxfile: 1,
            fileType: type === 'video' ? 'text' : 'picture'
          }} onChange={this.changeFile} />
        </Form.Item> : null}
        {keyword === 'system' ?
          <Search value={searchKey} placeholder="" onChange={(e) => this.setState({searchKey: e.target.value})} onSearch={this.changeSearch} enterButton/> : null}
        {keyword === 'system' ? <Button className="picture-plus mk-green" icon="plus" onClick={() => this.handleSource({typecharone: type})}>
          添加
        {keyword === 'system' ? <Button className="picture-plus mk-green" onClick={() => this.handleSource({typecharone: type})}>
          <PlusOutlined /> 添加
        </Button> : null}
        {keyword === 'system' && list.length ?
          <Row gutter={16} style={{minHeight: '250px'}}>