Merge branch 'master' into bms
7 文件已重命名
47个文件已修改
6个文件已添加
| | |
| | | "terser-webpack-plugin": "1.4.1", |
| | | "ts-pnp": "1.1.2", |
| | | "url-loader": "2.1.0", |
| | | "video-react": "^0.14.1", |
| | | "webpack": "4.39.1", |
| | | "webpack-dev-server": "3.2.1", |
| | | "webpack-manifest-plugin": "2.0.4", |
| | |
| | | return Promise.resolve(response.data) |
| | | } |
| | | }, (error) => { |
| | | notification.error({ |
| | | className: 'notification-custom-error', |
| | | bottom: 0, |
| | | message: '状态码-' + error.response.status + ',请联系管理员', |
| | | placement: 'bottomRight', |
| | | duration: 15 |
| | | }) |
| | | if (error && error.response) { |
| | | notification.error({ |
| | | className: 'notification-custom-error', |
| | | bottom: 0, |
| | | message: '状态码-' + error.response.status + ',请联系管理员', |
| | | placement: 'bottomRight', |
| | | duration: 15 |
| | | }) |
| | | } |
| | | return Promise.reject(error) |
| | | }) |
| | | |
| | |
| | | .login-container { |
| | | background-color: $bg1; |
| | | .logo { |
| | | border-color: transparent; |
| | | border-color: $color6; |
| | | .plat-name { |
| | | color: $font1; |
| | | } |
| | | } |
| | | .login-middle { |
| | | border-color: transparent; |
| | | border-color: $color6; |
| | | .login-form-button { |
| | | background-color: $color6; |
| | | border-color: $color6; |
| | |
| | | .ant-tabs-tab:hover { |
| | | color: $color6; |
| | | } |
| | | } |
| | | .anticon-eye { |
| | | color: $color6; |
| | | } |
| | | } |
| | | .login-bottom { |
| | |
| | | } |
| | | } |
| | | } |
| | | .normal-group-wrap { |
| | | .print-button:hover, .print-button:focus, .print-button:active { |
| | | color: $color5; |
| | | } |
| | | } |
| | | |
| | | // 系统样式修改 |
| | | // .ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled) { |
| | | // background-color: $color1; |
| | | // } |
| | | // .ant-select-dropdown-menu-item-active:not(.ant-select-dropdown-menu-item-disabled) { |
| | | // background-color: $color1; |
| | | // } |
| | | // // 复选框 |
| | | // .ant-checkbox-checked .ant-checkbox-inner { |
| | | // background-color: $color6; |
| | | // border-color: $color6; |
| | | // } |
| | | // .ant-checkbox-checked::after { |
| | | // border: 1px solid $color6; |
| | | // } |
| | | // .ant-checkbox-indeterminate .ant-checkbox-inner::after { |
| | | // background-color: $color6; |
| | | // } |
| | | // .ant-checkbox-wrapper:hover .ant-checkbox-inner, .ant-checkbox:hover .ant-checkbox-inner, .ant-checkbox-input:focus + .ant-checkbox-inner { |
| | | // border-color: $color6; |
| | | // } |
| | | // // 下拉框 |
| | | // .ant-select-selection:hover { |
| | | // border-color: $color5; |
| | | // } |
| | | // .ant-select-focused .ant-select-selection, .ant-select-selection:focus, .ant-select-selection:active { |
| | | // border-color: $color5; |
| | | // box-shadow: 0 0 0 2px $color2; |
| | | // } |
| | | // // 切换 |
| | | // .ant-switch-checked { |
| | | // background-color: $color6; |
| | | // } |
| | | // // 输入框 |
| | | // .ant-input:hover { |
| | | // border-color: $color5; |
| | | // } |
| | | // .ant-input:focus, .ant-input:active { |
| | | // border-color: $color5; |
| | | // box-shadow: 0 0 0 2px $color2; |
| | | // } |
| | | // .ant-input-number-focused { |
| | | // border-color: $color5; |
| | | // box-shadow: 0 0 0 2px $color2; |
| | | // } |
| | | // .ant-input-number:hover, .ant-input-number:focus, .ant-input-number:active, .ant-input-number-input:hover, .ant-input-number-input:focus, .ant-input-number-input:active, .ant-input-number-focused:hover, .ant-input-number-focused:focus, .ant-input-number-focused:active { |
| | | // border-color: $color5; |
| | | // } |
| | | // .ant-input-number:focus, .ant-input-number:active { |
| | | // box-shadow: 0 0 0 2px $color2; |
| | | // } |
| | | // // 日历 |
| | | // .ant-calendar-picker:hover .ant-calendar-picker-input:not(.ant-input-disabled) { |
| | | // border-color: $color5; |
| | | // } |
| | | .ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled) { |
| | | background-color: $color1; |
| | | } |
| | | .ant-select-dropdown-menu-item-active:not(.ant-select-dropdown-menu-item-disabled) { |
| | | background-color: $color1; |
| | | } |
| | | // 复选框 |
| | | .ant-checkbox-checked .ant-checkbox-inner { |
| | | background-color: $color6; |
| | | border-color: $color6; |
| | | } |
| | | .ant-checkbox-checked::after { |
| | | border: 1px solid $color6; |
| | | } |
| | | .ant-checkbox-indeterminate .ant-checkbox-inner::after { |
| | | background-color: $color6; |
| | | } |
| | | .ant-checkbox-wrapper:hover .ant-checkbox-inner, .ant-checkbox:hover .ant-checkbox-inner, .ant-checkbox-input:focus + .ant-checkbox-inner { |
| | | border-color: $color6; |
| | | } |
| | | // 下拉框 |
| | | .ant-select-selection:hover { |
| | | border-color: $color5; |
| | | } |
| | | .ant-select-focused .ant-select-selection, .ant-select-selection:focus, .ant-select-selection:active { |
| | | border-color: $color5; |
| | | box-shadow: 0 0 0 2px $color2; |
| | | } |
| | | // 切换 |
| | | .ant-switch-checked { |
| | | background-color: $color6; |
| | | } |
| | | // 输入框 |
| | | .ant-input:hover { |
| | | border-color: $color5; |
| | | } |
| | | .ant-input:focus, .ant-input:active { |
| | | border-color: $color5; |
| | | box-shadow: 0 0 0 2px $color2; |
| | | } |
| | | .ant-input-number-focused { |
| | | border-color: $color5; |
| | | box-shadow: 0 0 0 2px $color2; |
| | | } |
| | | .ant-input-number:hover, .ant-input-number:focus, .ant-input-number:active, .ant-input-number-input:hover, .ant-input-number-input:focus, .ant-input-number-input:active, .ant-input-number-focused:hover, .ant-input-number-focused:focus, .ant-input-number-focused:active { |
| | | border-color: $color5; |
| | | } |
| | | .ant-input-number:focus, .ant-input-number:active { |
| | | box-shadow: 0 0 0 2px $color2; |
| | | } |
| | | .ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled) { |
| | | border-color: $color5; |
| | | } |
| | | // 日历 |
| | | .ant-calendar-picker:hover .ant-calendar-picker-input:not(.ant-input-disabled) { |
| | | border-color: $color5; |
| | | } |
| | | } |
| | | |
| | | body.hidden-split-line #root { // 去除登录页分割线 |
| | | .login-container { |
| | | .logo { |
| | | border-color: transparent; |
| | | } |
| | | .login-middle { |
| | | border-color: transparent; |
| | | } |
| | | } |
| | | } |
| | | |
| | | @mixin bgblack() { |
New file |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { |
| | | Player, |
| | | ControlBar, |
| | | CurrentTimeDisplay, |
| | | TimeDivider, |
| | | BigPlayButton, |
| | | PlaybackRateMenuButton, |
| | | VolumeMenuButton |
| | | } from 'video-react' |
| | | |
| | | import './index.scss' |
| | | |
| | | class Video extends Component { |
| | | static propTpyes = { |
| | | card: PropTypes.object, // 条码设置 |
| | | value: PropTypes.any, // 条码值 |
| | | } |
| | | |
| | | shouldComponentUpdate (nextProps, nextState) { |
| | | return !is(fromJS(this.props), fromJS(nextProps)) |
| | | } |
| | | |
| | | render() { |
| | | const { value, card } = this.props |
| | | |
| | | return ( |
| | | <div style={{overflow: 'hidden'}}> |
| | | <Player poster="" autoPlay={card.autoPlay === 'true'} aspectRatio={card.aspectRatio || '16:9'}> |
| | | <source src={value} /> |
| | | <BigPlayButton position="center" /> |
| | | <ControlBar> |
| | | <VolumeMenuButton /> |
| | | <CurrentTimeDisplay /> |
| | | <TimeDivider /> |
| | | <PlaybackRateMenuButton rates={[5, 2, 1, 0.5, 0.1]} order={7.1} /> |
| | | </ControlBar> |
| | | </Player> |
| | | </div> |
| | | ) |
| | | } |
| | | } |
| | | |
| | | export default Video |
New file |
| | |
| | | @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,AAEAAAALAIAAAwAwT1MvMg7RD8oAAAC8AAAAYGNtYXAOVuSnAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zsdb3FIAAAF4AAAS0GhlYWQLMledAAAUSAAAADZoaGVhB6wEJgAAFIAAAAAkaG10eIgAFM8AABSkAAAAlGxvY2FLllAoAAAVOAAAAExtYXhwACoAyQAAFYQAAAAgbmFtZVtqyukAABWkAAABtnBvc3QAAwAAAAAXXAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADyIAQAAAAAAAQAAAAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg8iD//f//AAAAAAAg8gD//f//AAH/4w4EAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAVYA1gMqAyoAAgAACQIBVgHU/iwDKv7W/tYAAgBWAFYDqgOqAAIAFgAAAS0BNzIeAhUUDgIjIi4CNTQ+AgGqAQD/AFZYnHNDQ3ObWVicc0NDc5sBQMDA6kNzm1lYnHNDQ3ObWVicc0MAAAADAFYAVgOqA6oAEwAnACoAACUyPgI1NC4CIyIOAhUUHgITMh4CFRQOAiMiLgI1ND4CExEFAgBGfV02Nl18R0Z9XTY2XXxHWJxzQ0Nzm1lYnHNDQ3ObAwEAqjZdfEdGfV02Nl18R0Z9XTYDAENzm1lYnHNDQ3ObWVicc0P9lgGAwAAAAAACAQAA1gMAAyoAAwAHAAABMxEjIREzEQJWqqr+qqoDKv2sAlT9rAAAAwBWAFYDqgOqAAMABwAbAAABESMRIxEjERMyHgIVFA4CIyIuAjU0PgICgFZUVoBYnHNDQ3ObWVicc0NDc5sBVgFU/qwBVP6sAlRDc5tZWJxzQ0Nzm1lYnHNDAAAEAFYAVgOqA6oAAwAXACsALwAAAREzEQcyPgI1NC4CIyIOAhUUHgITMh4CFRQOAiMiLgI1ND4CAxEzEQIqVoBGfV02Nl18R0Z9XTY2XXxHWJxzQ0Nzm1lYnHNDQ3ObJ1YBVgFU/qysNl18R0Z9XTY2XXxHRn1dNgMAQ3ObWVicc0NDc5tZWJxzQ/2sAVT+rAABAQABAAMAAwAAAwAAASERIQEAAgD+AAMA/gAAAgBqAQADVgMAAAIABQAACQERIQkBAeoBbP6A/pQBbAIAAQD+AAEAAQAAAAACAKoBAAOWAwAAAgAFAAAJAiERAQIqAWz+lP6AAWwDAP8A/wACAP8AAAAAAAIBAAEAAwADAAACAAYAAAkBEQEzESMBlgFq/gBWVgIAAQD+AAIA/gAAAAAAAgEAAQADAAMAAAMABgAAATMRIyERAQKqVlb+VgFqAwD+AAIA/wAAAAIAqgCAA1YD1gBFAGgAAAEOARUUBjEjNzMVIwcwNjU0MjU0FjsBMhYXHgEXHgEVFAYHDgEHDgEHDgEjIiYnLgEnLgE1MxQWMzI2PwEwNj0BLwEwJiMRMh4CFRQOAiMiLgI1MxQeAjMyPgI1NC4CIxUnNwH4AwsEHgpmSgQEBgUDCAYNAwMKAwcLAQMDBQYGBwMDEQYGDQMDCwYICiIODAMGAwoEBAoJA0Z9XTY2XXxHRn1dNlYpRV01NF5FKSlFXTXW1gG8AQUCAwNeHiYBAwMDAwMDAwMGAwcZDgYNAwMNBgYDAwMBAQMDAgMEFgwLCQEDCAkDGggKBAFuNV17R0Z9XTY2XXxHNF5FKSlFXTU0XkUprNbWAAAEAKoAgANWA9YAGwBGAE0AcAAAARQWMzI2PwEwNj0BMCY1NCYjIgYPATAGHQEwFjcUBg8BMAYjIgYjIiYnLgEnLgE9ATQ2PwEwNjMyNjMyFhceARceARceARUHIzUHNTczEzIeAhUUDgIjIi4CNTMUHgIzMj4CNTQuAiMVJzcCNA4GAwgDCAQEEgQDBgMIBgZUAQMMEAYGDgYGDgYGCAYKCAEDDg4GBg4GBg4GBgoGBgMDAwG2KCpMBi5GfV02Nl18R0Z9XTZWKUVdNTReRSkpRV011tYBeAUJAQMKCQNWCQMECgMDCAkDVgknCRMGGgwEAQMDBgMFKA8eCRMGGgwEAQMDBgMDDgkJEAlqjAweGAEeNV17R0Z9XTY2XXxHNF5FKSlFXTU0XkUprNbWAAAABACqAIADVgPWABsARgCjAMYAAAEUFjMyNj8BMDY9ATQmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVIzI2PQEwJjU0JisBMAYjIgYdASM0NjMyNjMyFhceAR0BMAYVFAYjIgYHHgEXHgEVFAYHDgEHDgEjIgYjIiYnLgEnLgE1MxUwFhUUFjsBMDYzMjY9ATAmNTQmKwE1EzIeAhUUDgIjIi4CNTMUHgIzMj4CNTQuAiMVJzcCPBAGAwYDCAQEEAQDCAMIBARQAQMMEAYGDgYPFQoGAwMDAwMDDBAGBgwGBg4GBgoGBgMDAwHiDBIEBQMWBQMDASwWDgMOAw0ZCggIBAUDAwgDBg0DAwUBAwMGAwMNBgYOBgYLAwMNBggKJAQFAxYFAwMBBAUDGmZGfV02Nl18R0Z9XTZWKUVdNTReRSkpRV011tYBeAYIAQMKCQNWAwYDBAoDAwgJA1YJJwkTBhoMBAsFAw4JCRAJHgkTBhoMBAEDAwYDAw4JCRAJDgwIBQMDAQQFAwgPHwQHBQQYCg4JAwMFBwMDBwYGDgYGDQMDCgMDBQQBAwMCAwQbCwgFAwMBBAUDFgUDAwEeAWo1XXtHRn1dNjZdfEc0XkUpKUVdNTReRSms1tYAAAIAqgCAA1YD1gBCAGUAAAEOARUUBjEjNzMVIwcwNjU0MjU0FjsBMhYXHgEXHgEVFAYHDgEHDgEjIiYnLgEnLgE1MxQWMzI2PwEwNj0BLwEwJiMlND4CMzUXBzUiDgIVFB4CMzI+AjUzFA4CIyIuAgH0AwsEGgpmSgQEBgUDCAYNAwMKAwcLAQMDBQYIFw8GDQMDCwYICiIODAMGAwoEBAoJA/6uNl18R9bWNF5FKSlFXTU0XkUpVjZdfEdGfV02AbwBBQIDA14eJgEDAwMDAwMDAwYDBxkOBg0DAw0GCAgBAwMCAwQWDAsJAQMICQMaCAoEGkZ8XTWs1tasKUVdNTReRSkpRV01Rn1dNjZdfAAABACqAIADVgPWABsARgBNAHAAAAEUFjMyNj8BMDY9ATAmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVByM1BzU3MwU0PgIzNRcHNSIOAhUUHgIzMj4CNTMUDgIjIi4CAjQOBgMIAwgEBBIEAwYDCAYGUAEDDBAGBg4GBg4GBggGCggBAw4OBgYOBgYOBgYKBgYDAwMBsigqTAb+2DZdfEfW1jReRSkpRV01NF5FKVY2XXxHRn1dNgF4BQkBAwoJA1YJAwQKAwMICQNWCScJEwYaDAQBAwMGAwUoDx4JEwYaDAQBAwMGAwMOCQkQCWqMDB4YNkZ8XTWs1tasKUVdNTReRSkpRV01Rn1dNjZdfAAAAAQAqgCAA1YD1gAiAD4AaQDGAAATND4CMzUXBzUiDgIVFB4CMzI+AjUzFA4CIyIuAgUUFjMyNj8BMDY9ATAmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVIzI2PQEwJjU0JisBMAYjIgYdASM0NjMyNjMyFhceAR0BMAYVFAYjIgYHHgEXHgEVFAYHDgEHDgEjIgYjIiYnLgEnLgE1MxUwFhUUFjsBMDYzMjY9ATAmNTQmKwE1qjZdfEfW1jReRSkpRV01NF5FKVY2XXxHRn1dNgGODgYDCAMIBAQSBAMGAwgEBFQBAwwQBgYOBg8VCgYDAwMDAwMMEAYGDAYGDgYGCgYGAwMDAeIMEgQFAxYFAwMBLBYOAw4DDRkKCAgEBQMDCAMGDQMDBQEDAwYDAw0GBg4GBgsDAw0GCAokBAUDFgUDAwEEBQMaAdZGfF01rNbWrClFXTU0XkUpKUVdNUZ9XTY2XXwXBQkBAwoJA1YJAwQKAwMICQNWCScJEwYaDAQLBQMOCQkQCR4JEwYaDAQBAwMGAwMOCQkQCQ4MCAUDAwEEBQMIDx8EBwUEGAoOCQMDBQcDAwcGBg4GBg0DAwoDAwUEAQMDAgMEGwsIBQMDAQQFAxYFAwMBHgAAAAAEAIAAgAOAA4AAAgAUACYALgAAARUnJwEHJw4BBzU+ATcnEScjETMnATQuAic1HgMVFAYHJz4BJxwBByc1HgECAFrwAso2WCJOLBswFbbWqsrKAqofOU0vQG5PLRcVQAoMagJoMDoDVrRahP02NlgbKAtYBxoRtv7g1gEAyv62M1xLNg5YDkVjfEQwWydCGTkeBw0GaF4YWwAAAAABASoAqgKqA1YABQAAATM3EScjASqs1NSsAoDW/VTWAAIA1gCqAxYDVgAFAAwAABMzNxEnIyUUBgcRHgHWqtbWqgJAPDAwPAKA1v1U1oA5WxgBWBhbAAAAAwCAAIoDgAN2ABUAHAAiAAABHgMVFA4CBzU+AzU0LgInExQGBxEeASUzNxEnIwJWQG5PLS1PbUEuTjkfHzlNL2o6MDA6/cCq1taqA3YORWN8RER7Y0YOWA03S1wzM1xLNg7+4jlbGAFYGFtH1v1U1gAAAAAEANYA1gMqAyoABQALABEAFwAAATMVIzUjEzUzFSM1ATUzFSMVHQEzFSM1AlbUVICAVNT+gNSAgNQDKtSA/lSA1FQBLNRUgKyAVNQABADWANYDKgMqAAUACwARABcAAAEzFSM1MwM1MxUjFQE1MxUjNRE1MxUjNQKqgNRUVNSA/qxU1NRUAqpU1P2s1FSAAdSA1FT+rFTUgAAAAAADAIAAqgOAA1YAFwAvAD8AAAE1NCYrASIGHQEUFjsBMjY9ASMVIzUzFSM1NCYrASIGHQEUFjsBMjY9ASMVIzUzFQEyFhURFAYjISImNRE0NjMDABgSgBIaGhKAEhhAVlbqGhKAEhgYEoASGkBWVgGUIjQzI/2sJDIyJAIqLBIYGBKsEhgYEiwWgBYsEhgYEqwSGBgSLBaAFgEsMyP+ACI0MyMCACI0AAAEAIAAgAOAA4AAAwANABkAKQAAATUzFScRMzI2PQE0JiMBESMVIzUjETM1MxUBMhYVERQGIyEiJjURNDYzAmpWlqwSGBgS/wBAVkBAVgGUIjQzI/2sJDIyJAHAgIDA/wAYEqwSGP8AAQBqav8AVlYCADMj/awiNDMjAlQiNAAAAAIAZABWA5wDqgALAFkAAAEyNjU0JiMiBhUUFiUXHgEPAQ4BLwEOAQ8BDgErASImLwEuAScHBiYvASY2PwEuATU8ATcnLgE/AT4BHwE+AT8BPgE7ATIWHwEeARc3NhYfARYGDwEeARUcAQIAPVlYPj1ZWAF8WgYCBFYEDghqECQUEAELCKwHCwIQEyQRagcOBVYEAgZaAQECWgYCBFYEDghqECQUEAELCKwHCwIQEyQRagcOBVYEAgZaAQEBalg+PVlYPj1ZbEYEEAiUBwQDKgwWCHAHCwoIcAcVDioDAwiUBxAFRgoVCwoVC0YEEAiUBwQDKgwWCHAHCwoIcAcVDioDAwiUBxAFRgoVCwoVAAAAAQCAAFgDgAOqADMAAAEyFhUUBiMiJjU8ATclDgEjIiY1NDYzMhYXJS4BNTQ2MzIWFRQGIyImJwUeARUUBgcFPgEDADNJSTMzSQL+0hIsGjRMSzUZLRIBLAEDSzU0TEs1GS0S/tQBAwICATAQLAFSSTMzS0szBw8GsBASSzU0TBERrgcPCDRMSzU0TBMRsAcPCAcPCLAPEQADAFYAVgOqA6oAAwAHABsAAAE1IxUTESMREzIeAhUUDgIjIi4CNTQ+AgIqVFRUKlicc0NDc5tZWJxzQ0NzmwKAVlb+qgEA/wACgENzm1lYnHNDQ3ObWVicc0MAAAQAVgBWA6oDqgADABcAKwAvAAABNTMVAzI+AjU0LgIjIg4CFRQeAhMyHgIVFA4CIyIuAjU0PgITETMRAdZUKkZ9XTY2XXxHRn1dNjZdfEdYnHNDQ3ObWVicc0NDc5svVAKAVlb+KjZdfEdGfV02Nl18R0Z9XTYDAENzm1lYnHNDQ3ObWVicc0P9gAEA/wAAAAEA1gDWAyoDKgALAAABBxcHJwcnNyc3FzcDKu7uPO7uPO7uPO7uAu7u7jzu7jzu7jzu7gABAFUAVQOrA6sAFAAAExQeAjMyPgI1NC4CIyIOAhVVQ3ScWFicdENDdJxYWJx0QwIAWJx0Q0N0nFhYnHRDQ3ScWAAAAAIAVQBVA6sDqwAUACgAAAEiDgIVFB4CMzI+AjU0LgIjESIuAjU0PgIzMh4CFRQOAgIAWJx0Q0N0nFhYnHRDQ3ScWEd8XTU1XXxHR3xdNTVdfAOrQ3ScWFicdENDdJxYWJx0Q/0ANV18R0d8XTU1XXxHR3xdNQAAAAMAVQBVA6sDqwAUACgANAAAASIOAhUUHgIzMj4CNTQuAiMRIi4CNTQ+AjMyHgIVFA4CExQGIyImNTQ2MzIWAgBYnHRDQ3ScWFicdENDdJxYR3xdNTVdfEdHfF01NV18OUs1NUtLNTVLA6tDdJxYWJx0Q0N0nFhYnHRD/QA1XXxHR3xdNTVdfEdHfF01AVU1S0s1NUtLAAAAAQAAAAEAAPEUzolfDzz1AAsEAAAAAADUNIllAAAAANQ0iWUAAAAAA6sD1gAAAAgAAgAAAAAAAAABAAAEAAAAAAAEAAAAAAADqwABAAAAAAAAAAAAAAAAAAAAJQQAAAAAAAAAAAAAAAAAAAAEAAFWBAAAVgQAAFYEAAEABAAAVgQAAFYEAAEABAAAagQAAKoEAAEABAABAAQAAKoEAACqBAAAqgQAAKoEAACqBAAAqgQAAIAEAAEqBAAA1gQAAIAEAADWBAAA1gQAAIAEAACABAAAZAQAAIAEAABWBAAAVgQAANYEAABVBAAAVQQAAFUAAAAAAAoAFAAeACwAVACWAKoA2AEgAS4BRAFaAXABhAIQAqgDpgQuBMYFxAYSBiIGPgZ4Bp4GxgcaB1oH4gguCFwIpAi+COAJHAloAAEAAAAlAMcABAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQALAAAAAQAAAAAAAgAHAIQAAQAAAAAAAwALAEIAAQAAAAAABAALAJkAAQAAAAAABQALACEAAQAAAAAABgALAGMAAQAAAAAACgAaALoAAwABBAkAAQAWAAsAAwABBAkAAgAOAIsAAwABBAkAAwAWAE0AAwABBAkABAAWAKQAAwABBAkABQAWACwAAwABBAkABgAWAG4AAwABBAkACgA0ANR2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRWZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADB2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHR2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRSZWd1bGFyAFIAZQBnAHUAbABhAHJ2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) 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); |
| | | } |
| | |
| | | GLOB.doclogo = _systemMsg.doclogo |
| | | GLOB.webSite = _systemMsg.webSite |
| | | GLOB.style = _systemMsg.style |
| | | GLOB.showline = _systemMsg.showline || '' |
| | | |
| | | if (GLOB.favicon) { |
| | | let link = document.querySelector("link[rel*='icon']") || document.createElement('link') |
| | |
| | | document.getElementsByTagName('head')[0].appendChild(link) |
| | | } |
| | | if (GLOB.style && options.styles[GLOB.style]) { |
| | | document.body.className = options.styles[GLOB.style] |
| | | document.body.className = options.styles[GLOB.style] + ' ' + (GLOB.showline === 'false' ? 'hidden-split-line' : '') |
| | | } |
| | | } catch { |
| | | console.warn('Parse Failure') |
| | |
| | | |
| | | const BarCode = asyncComponent(() => import('@/components/barcode')) |
| | | const QrCode = asyncComponent(() => import('@/components/qrcode')) |
| | | const Video = asyncComponent(() => import('@/components/video')) |
| | | const MarkColumn = asyncIconComponent(() => import('@/menu/components/table/normal-table/columns/markcolumn')) |
| | | |
| | | const Card = ({ id, fields, card, moveCard, findCard, editCard, delCard, copyCard, changeStyle, updateMarks }) => { |
| | |
| | | <QrCode card={card} value={card.value || 'mksoft'}/> |
| | | </div> |
| | | ) |
| | | } else if (card.eleType === 'video') { |
| | | return ( |
| | | <div> |
| | | <Video card={card} value={card.url || 'http://qingqiumarket.cn/mkwms/Content/images/upload/20210104/trailer.mp4'}/> |
| | | </div> |
| | | ) |
| | | } else if (card.eleType === 'currentDate') { |
| | | return ( |
| | | <div className="ant-mk-date"> |
| | |
| | | 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', 'url', 'link'], |
| | | picture: ['eleType', 'datatype', 'width', 'lenWidRadio', 'link'], |
| | | video: ['eleType', 'datatype', 'width', 'aspectRatio', 'autoPlay'], |
| | | icon: ['eleType', 'icon', 'datatype', 'width'], |
| | | slider: ['eleType', 'datatype', 'width', 'color', 'maxValue'], |
| | | splitline: ['eleType', 'color', 'width', 'borderWidth'], |
| | |
| | | getOptions = (eleType, datatype, link) => { |
| | | let _options = fromJS(cardTypeOptions[eleType]).toJS() // 选项列表 |
| | | |
| | | if (['text', 'number', 'picture', 'link', 'slider', 'barcode', 'qrcode'].includes(eleType)) { |
| | | if (['text', 'number', 'picture', 'link', 'slider', 'barcode', 'qrcode', 'video'].includes(eleType)) { |
| | | if (datatype === 'dynamic') { |
| | | _options.push('field') |
| | | } else if (eleType !== 'picture') { |
| | | } else if (eleType === 'picture' || eleType === 'video') { |
| | | _options.push('url') |
| | | } else { |
| | | _options.push('value') |
| | | } |
| | | |
| | |
| | | { value: 'text', text: '文本'}, |
| | | { value: 'number', text: '数值'}, |
| | | { value: 'picture', text: '图片'}, |
| | | { value: 'video', text: '视频'}, |
| | | { value: 'icon', text: '图标'}, |
| | | { value: 'slider', text: '进度条'}, |
| | | { value: 'splitline', text: '分割线'}, |
| | |
| | | { |
| | | type: 'file', |
| | | key: 'url', |
| | | label: '图片', |
| | | label: '图片/文件', |
| | | initVal: card.url || '', |
| | | maxfile: 1, |
| | | required: false |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'autoPlay', |
| | | label: '自动播放', |
| | | initVal: card.autoPlay || 'false', |
| | | required: false, |
| | | options: [ |
| | | { value: 'true', text: '是' }, |
| | | { value: 'false', text: '否' } |
| | | ] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | |
| | | ] |
| | | }, |
| | | { |
| | | type: 'select', |
| | | key: 'aspectRatio', |
| | | label: '长宽比', |
| | | initVal: card.aspectRatio || '16:9', |
| | | required: true, |
| | | options: [ |
| | | { value: '4:3', text: '4:3' }, |
| | | { value: '16:9', text: '16:9' } |
| | | ] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'joint', |
| | | label: Formdict['model.form.paramJoint'], |
| | |
| | | import { getActionForm } from '@/menu/components/share/actioncomponent/formconfig' |
| | | |
| | | import MKEmitter from '@/utils/events.js' |
| | | import MenuUtils from '@/menu/utils/menuUtils.js' |
| | | import ElementForm from './elementform' |
| | | import DragElement from './dragaction' |
| | | import './index.scss' |
| | |
| | | menulist = [] |
| | | } |
| | | |
| | | let modules = this.getModules(menu.components, cards.uuid) |
| | | let modules = MenuUtils.getSubModules(menu.components, cards.uuid) |
| | | |
| | | this.setState({ |
| | | actvisible: true, |
| | | card: card, |
| | | formlist: getActionForm(card, functip, cards.setting, usefulFields, 'card', menulist, modules) |
| | | }) |
| | | } |
| | | |
| | | getModules = (components, selfId) => { |
| | | let modules = components.map(item => { |
| | | if (item.uuid === selfId) { |
| | | return { |
| | | children: null |
| | | } |
| | | } else if (item.format) { |
| | | return { |
| | | value: item.uuid, |
| | | label: item.name |
| | | } |
| | | } else if (item.type === 'tabs') { |
| | | let _item = { |
| | | value: item.uuid, |
| | | label: item.name, |
| | | children: item.subtabs.map(f_tab => { |
| | | let subItem = { |
| | | value: f_tab.uuid, |
| | | label: f_tab.label, |
| | | children: this.getModules(f_tab.components, selfId) |
| | | } |
| | | |
| | | if (!subItem.children || subItem.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | return subItem |
| | | }) |
| | | } |
| | | |
| | | _item.children = _item.children.filter(t => t.children !== null) |
| | | |
| | | if (_item.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | |
| | | return _item |
| | | } else { |
| | | return { |
| | | children: null |
| | | } |
| | | } |
| | | }) |
| | | |
| | | modules = modules.filter(mod => mod.children !== null) |
| | | |
| | | if (modules.length === 0) { |
| | | return null |
| | | } |
| | | return modules |
| | | } |
| | | |
| | | /** |
File was renamed from src/menu/components/group/tabcomponents/index.jsx |
| | |
| | | } |
| | | i++ |
| | | } |
| | | |
| | | let dataName = '' |
| | | while (!dataName) { |
| | | let _dataName = Utils.getdataName() |
| | | if (config.components.filter(com => com.dataName === _dataName).length === 0) { |
| | | dataName = _dataName |
| | | } |
| | | } |
| | | |
| | | let newcard = { |
| | | uuid: Utils.getuuid(), |
| | |
| | | subtype: item.subtype, |
| | | config: item.config, |
| | | width: item.width || 24, |
| | | dataName: dataName, |
| | | dataName: Utils.getdataName(), |
| | | name: name, |
| | | floor: config.floor || 1, // 组件的层级 |
| | | isNew: true // 新添加标志,用于初始化 |
File was renamed from src/menu/components/group/tabsetting/settingform/index.jsx |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { Form, Row, Col, Input, Tooltip, Icon, InputNumber, Select } from 'antd' |
| | | import { Form, Row, Col, Input, Tooltip, Icon, InputNumber, Select, Radio } from 'antd' |
| | | |
| | | import './index.scss' |
| | | |
| | |
| | | } |
| | | |
| | | state = { |
| | | roleList: [] |
| | | roleList: [], |
| | | print: this.props.setting.print || 'false' |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | |
| | | } |
| | | |
| | | render() { |
| | | const { setting } = this.props |
| | | const { setting, dict } = this.props |
| | | const { getFieldDecorator } = this.props.form |
| | | const { roleList } = this.state |
| | | const { roleList, print } = this.state |
| | | |
| | | const formItemLayout = { |
| | | labelCol: { |
| | |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={12}> |
| | | <Form.Item label="打印按钮"> |
| | | {getFieldDecorator('print', { |
| | | initialValue: print |
| | | })( |
| | | <Radio.Group style={{whiteSpace: 'nowrap'}} onChange={(e) => {this.setState({print: e.target.value})}}> |
| | | <Radio key="true" value="true"> 显示 </Radio> |
| | | <Radio key="false" value="false"> 隐藏 </Radio> |
| | | </Radio.Group> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | | {print === 'true' ? <Col span={12}> |
| | | <Form.Item label="打印尺寸"> |
| | | {getFieldDecorator('pageSize', { |
| | | initialValue: setting.pageSize || 'A4', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择打印尺寸!' |
| | | } |
| | | ] |
| | | })( |
| | | <Select> |
| | | <Select.Option value="A3">A3</Select.Option> |
| | | <Select.Option value="A4">A4</Select.Option> |
| | | <Select.Option value="A5">A5</Select.Option> |
| | | </Select> |
| | | )} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {print === 'true' ? <Col span={12}> |
| | | <Form.Item label="打印布局"> |
| | | {getFieldDecorator('pageLayout', { |
| | | initialValue: setting.pageLayout || 'vertical', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: dict['mob.required.select'] + '打印布局!' |
| | | } |
| | | ] |
| | | })( |
| | | <Radio.Group> |
| | | <Radio value="vertical">纵向</Radio> |
| | | <Radio value="horizontal">横向</Radio> |
| | | </Radio.Group> |
| | | )} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | <Col span={12}> |
| | | <Form.Item label="黑名单"> |
| | | {getFieldDecorator('blacklist', { |
| | | initialValue: setting.blacklist || [] |
| | |
| | | import PropTypes from 'prop-types' |
| | | import { connect } from 'react-redux' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Icon, Popover } from 'antd' |
| | | import { Icon, Popover, Button } from 'antd' |
| | | |
| | | import MKEmitter from '@/utils/events.js' |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | |
| | | import enUS from '@/locales/en-US/model.js' |
| | | import './index.scss' |
| | | |
| | | const SettingComponent = asyncIconComponent(() => import('../tabsetting')) |
| | | const SettingComponent = asyncIconComponent(() => import('../groupsetting')) |
| | | const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent')) |
| | | const PasteController = asyncIconComponent(() => import('@/menu/pastecontroller')) |
| | | const TabComponents = asyncComponent(() => import('../tabcomponents')) |
| | | const GroupComponents = asyncComponent(() => import('../groupcomponents')) |
| | | |
| | | class NormalGroup extends Component { |
| | | static propTpyes = { |
| | |
| | | this.props.updateConfig(component) |
| | | } |
| | | |
| | | insert = (item, cell) => { |
| | | insert = (item) => { |
| | | let group = fromJS(this.state.group).toJS() |
| | | |
| | | group.components.forEach(stab => { |
| | | if (stab.uuid === cell.uuid) { |
| | | stab.components.push(item) |
| | | } |
| | | }) |
| | | group.components.push(item) |
| | | |
| | | this.setState({group}) |
| | | this.props.updateConfig(group) |
| | |
| | | } trigger="hover"> |
| | | <Icon type="tool" /> |
| | | </Popover> |
| | | <TabComponents config={group} handleList={this.updateComponent} deleteCard={this.deleteCard} /> |
| | | |
| | | {group.setting && group.setting.print === 'true' ? <Button className="print-button" icon="printer" onClick={this.print}></Button> : null} |
| | | <GroupComponents config={group} handleList={this.updateComponent} deleteCard={this.deleteCard} /> |
| | | </div> |
| | | ) |
| | | } |
| | |
| | | padding: 5px; |
| | | background: rgba(255, 255, 255, 0.55); |
| | | } |
| | | .print-button, .print-button:hover, .print-button:focus, .print-button:active { |
| | | position: absolute; |
| | | right: 40px; |
| | | top: 0px; |
| | | border: 0; |
| | | background: transparent; |
| | | color: #bcbcbc; |
| | | } |
| | | } |
| | | .menu-group-edit-box::before { |
| | | content: ' '; |
| | |
| | | let _opentype = card.OpenType // 打开方式 |
| | | let _intertype = card.intertype || 'system' // 接口类型 |
| | | let _funcType = card.funcType || 'print' // 功能按钮默认类型 |
| | | |
| | | if (card.execMode) { // 转换打印时打开方式 |
| | | _opentype = 'funcbutton' |
| | | } |
| | | |
| | | let _options = this.getOptions(_opentype, _intertype, _funcType, card.pageTemplate) |
| | | |
| | |
| | | } |
| | | } else if (_opentype === 'funcbutton') { |
| | | if (_funcType === 'print') { |
| | | _options.push('execMode', 'intertype', 'Ot', 'execSuccess', 'execError') |
| | | if (_intertype === 'outer') { |
| | | _options.push('execMode', 'intertype', 'innerFunc', 'sysInterface', 'interface', 'outerFunc', 'callbackFunc', 'Ot', 'execSuccess', 'execError') |
| | | _options.push('innerFunc', 'sysInterface', 'interface', 'outerFunc', 'callbackFunc') |
| | | } else if (_intertype === 'inner') { |
| | | _options.push('execMode', 'intertype', 'innerFunc', 'Ot', 'execSuccess', 'execError') |
| | | _options.push('innerFunc') |
| | | } |
| | | } |
| | | } else if (_opentype !== 'popview' && _opentype !== 'tab') { |
| | |
| | | } |
| | | |
| | | values.Ot = 'notRequired' |
| | | } else if (values.OpenType === 'funcbutton') { // 转换打印时打开方式 |
| | | if (values.funcType === 'print') { |
| | | values.OpenType = values.execMode |
| | | } |
| | | } else if (['pop', 'prompt', 'exec'].includes(values.OpenType) && values.verify) { |
| | | if ((values.Ot === 'requiredOnce' || this.props.card.Ot === 'requiredOnce') && this.props.card.Ot !== values.Ot) { |
| | | values.verify.uniques = [] |
| | |
| | | initVal: card.funcType || 'print', |
| | | required: true, |
| | | options: [{ |
| | | value: 'changeuser', |
| | | text: Formdict['header.form.func.changeuser'] |
| | | }, { |
| | | value: 'print', |
| | | text: Formdict['header.form.func.print'] |
| | | text: '标签打印' |
| | | }] |
| | | }, |
| | | { |
| | |
| | | initVal: card.linkmenu || [], |
| | | required: true, |
| | | options: menulist |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'afterExecSuccess', |
| | | label: Formdict['header.form.afterExecSuccess'], |
| | | initVal: card.afterExecSuccess || 'close', |
| | | required: true, |
| | | options: [{ |
| | | value: 'close', |
| | | text: Formdict['model.close'] |
| | | }, { |
| | | value: 'notclose', |
| | | text: Formdict['model.notclose'] |
| | | }] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'afterExecError', |
| | | label: Formdict['header.form.afterExecError'], |
| | | initVal: card.afterExecError || 'notclose', |
| | | required: true, |
| | | options: [{ |
| | | value: 'close', |
| | | text: Formdict['model.close'] |
| | | }, { |
| | | value: 'notclose', |
| | | text: Formdict['model.notclose'] |
| | | }] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | |
| | | import zhCN from '@/locales/zh-CN/model.js' |
| | | import enUS from '@/locales/en-US/model.js' |
| | | import { getActionForm } from './formconfig' |
| | | import asyncSpinComponent from '@/utils/asyncSpinComponent' |
| | | |
| | | import MKEmitter from '@/utils/events.js' |
| | | import ActionForm from './actionform' |
| | | import VerifyCard from '@/templates/zshare/verifycard' |
| | | import MenuUtils from '@/menu/utils/menuUtils.js' |
| | | import CreateFunc from '@/templates/zshare/createfunc' |
| | | import VerifyPrint from '@/templates/sharecomponent/actioncomponent/verifyprint' |
| | | import VerifyExcelIn from '@/templates/sharecomponent/actioncomponent/verifyexcelin' |
| | | import VerifyExcelOut from '@/templates/sharecomponent/actioncomponent/verifyexcelout' |
| | | import DragElement from './dragaction' |
| | | import './index.scss' |
| | | |
| | | const { confirm } = Modal |
| | | const VerifyCard = asyncSpinComponent(() => import('@/templates/zshare/verifycard')) |
| | | const VerifyPrint = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyprint')) |
| | | const VerifyExcelIn = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelin')) |
| | | const VerifyExcelOut = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelout')) |
| | | |
| | | class ActionComponent extends Component { |
| | | static propTpyes = { |
| | |
| | | } |
| | | } |
| | | |
| | | getModules = (components, selfId) => { |
| | | let modules = components.map(item => { |
| | | if (item.uuid === selfId) { |
| | | return { |
| | | children: null |
| | | } |
| | | } else if (item.format) { |
| | | return { |
| | | value: item.uuid, |
| | | label: item.name |
| | | } |
| | | } else if (item.type === 'tabs') { |
| | | let _item = { |
| | | value: item.uuid, |
| | | label: item.name, |
| | | children: item.subtabs.map(f_tab => { |
| | | let subItem = { |
| | | value: f_tab.uuid, |
| | | label: f_tab.label, |
| | | children: this.getModules(f_tab.components, selfId) |
| | | } |
| | | |
| | | if (!subItem.children || subItem.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | return subItem |
| | | }) |
| | | } |
| | | |
| | | _item.children = _item.children.filter(t => t.children !== null) |
| | | |
| | | if (_item.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | |
| | | return _item |
| | | } else { |
| | | return { |
| | | children: null |
| | | } |
| | | } |
| | | }) |
| | | |
| | | modules = modules.filter(mod => mod.children !== null) |
| | | |
| | | if (modules.length === 0) { |
| | | return null |
| | | } |
| | | return modules |
| | | } |
| | | |
| | | /** |
| | | * @description 按钮编辑,获取按钮表单信息 |
| | | */ |
| | |
| | | menulist = [] |
| | | } |
| | | |
| | | let modules = this.getModules(menu.components, config.uuid) |
| | | let modules = MenuUtils.getSubModules(menu.components, config.uuid) |
| | | |
| | | this.setState({ |
| | | visible: true, |
| | |
| | | padding-bottom: 5px; |
| | | .ant-modal-body { |
| | | max-height: calc(100vh - 190px); |
| | | min-height: calc(100vh - 300px); |
| | | overflow-y: auto; |
| | | .ant-empty { |
| | | margin: 15vh 8px; |
| | |
| | | const PropCard = asyncComponent(() => import('@/menu/components/card/prop-card')) |
| | | const TableCard = asyncComponent(() => import('@/menu/components/card/table-card')) |
| | | const NormalTable = asyncComponent(() => import('@/menu/components/table/normal-table')) |
| | | const NormalGroup = asyncComponent(() => import('@/menu/components/group/normal-group')) |
| | | |
| | | const Card = ({ id, card, moveCard, findCard, delCard, updateConfig }) => { |
| | | const originalIndex = findCard(id).index |
| | |
| | | return (<TableCard card={card} updateConfig={updateConfig} deletecomponent={delCard}/>) |
| | | } else if (card.type === 'table' && card.subtype === 'normaltable') { |
| | | return (<NormalTable card={card} updateConfig={updateConfig} deletecomponent={delCard}/>) |
| | | } else if (card.type === 'group' && card.subtype === 'normalgroup') { |
| | | return (<NormalGroup group={card} updateConfig={updateConfig} deletecomponent={delCard}/>) |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | import Utils from '@/utils/utils.js' |
| | | import MKEmitter from '@/utils/events.js' |
| | | import MenuUtils from '@/menu/utils/menuUtils.js' |
| | | import Card from './card' |
| | | import './index.scss' |
| | | |
| | |
| | | }) |
| | | } |
| | | |
| | | let uuids = [] |
| | | const getUuids = (item) => { |
| | | if (item.type === 'tabs') { |
| | | item.subtabs.forEach(tab => { |
| | | tab.components.forEach(c => { |
| | | getUuids(c) |
| | | }) |
| | | }) |
| | | } else { |
| | | if (item.action && item.action.length) { |
| | | item.action.forEach(act => { |
| | | if (!act.origin) { |
| | | uuids.push(act.uuid) |
| | | } |
| | | }) |
| | | } |
| | | if (item.type === 'card') { |
| | | item.subcards.forEach(_card => { |
| | | _card.elements && _card.elements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | _card.backElements && _card.backElements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | }) |
| | | } else if (item.type === 'table' && item.subtype === 'tablecard') { |
| | | item.subcards.forEach(_card => { |
| | | _card.elements && _card.elements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | }) |
| | | } else if (item.type === 'table' && item.subtype === 'normaltable') { |
| | | item.cols && item.cols.forEach(col => { |
| | | if (col.type !== 'action') return |
| | | col.elements && col.elements.forEach(cell => { |
| | | uuids.push(cell.uuid) |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | |
| | | getUuids(card) |
| | | let uuids = MenuUtils.getDelButtonIds(card) |
| | | |
| | | confirm({ |
| | | title: `确定删除《${card.name}》吗?`, |
| | |
| | | } |
| | | i++ |
| | | } |
| | | |
| | | let dataName = '' |
| | | while (!dataName) { |
| | | let _dataName = Utils.getdataName() |
| | | if (config.components.filter(com => com.dataName === _dataName).length === 0) { |
| | | dataName = _dataName |
| | | } |
| | | } |
| | | |
| | | let newcard = { |
| | | uuid: Utils.getuuid(), |
| | |
| | | subtype: item.subtype, |
| | | config: item.config, |
| | | width: item.width || 24, |
| | | dataName: dataName, |
| | | dataName: Utils.getdataName(), |
| | | name: name, |
| | | floor: config.floor ? (config.floor + 1) : 2, // 组件的层级 |
| | | isNew: true // 新添加标志,用于初始化 |
| | |
| | | let getcomponentmarks = (box, conf) => { |
| | | if (!conf.parentId && box.Template === 'CustomPage') { |
| | | box.components.forEach(item => { |
| | | if (item.uuid !== conf.uuid && item.setting && item.setting.varMark) { |
| | | if (item.type === 'group') { |
| | | item.components.forEach(cell => { |
| | | if (cell.uuid !== conf.uuid && cell.setting && cell.setting.varMark) { |
| | | Marks.push(cell.setting.varMark.toLowerCase()) |
| | | } |
| | | }) |
| | | } else if (item.uuid !== conf.uuid && item.setting && item.setting.varMark) { |
| | | Marks.push(item.setting.varMark.toLowerCase()) |
| | | } |
| | | }) |
| | | } else if (conf.parentId === box.parentId && conf.tabId === box.uuid) { |
| | | box.components.forEach(item => { |
| | | if (item.uuid !== conf.uuid && item.setting && item.setting.varMark) { |
| | | if (item.type === 'group') { |
| | | item.components.forEach(cell => { |
| | | if (cell.uuid !== conf.uuid && cell.setting && cell.setting.varMark) { |
| | | Marks.push(cell.setting.varMark.toLowerCase()) |
| | | } |
| | | }) |
| | | } else if (item.uuid !== conf.uuid && item.setting && item.setting.varMark) { |
| | | Marks.push(item.setting.varMark.toLowerCase()) |
| | | } |
| | | }) |
| | |
| | | |
| | | import { formRule } from '@/utils/option.js' |
| | | import Utils from '@/utils/utils.js' |
| | | import MenuUtils from '@/menu/utils/menuUtils.js' |
| | | import CodeMirror from '@/templates/zshare/codemirror' |
| | | import './index.scss' |
| | | |
| | |
| | | UNSAFE_componentWillMount () { |
| | | const { menu, config } = this.props |
| | | |
| | | let modules = this.getModules(menu.components, config.uuid) |
| | | let modules = MenuUtils.getSupModules(menu.components, config.uuid) |
| | | if (!modules) { |
| | | modules = [] |
| | | } |
| | |
| | | } |
| | | |
| | | this.setState({modules, usefulFields}) |
| | | } |
| | | |
| | | getModules = (components, selfId) => { |
| | | let modules = components.map(item => { |
| | | if (item.uuid === selfId) { |
| | | return { |
| | | children: null |
| | | } |
| | | } else if (item.switchable) { |
| | | return { |
| | | value: item.uuid, |
| | | label: item.name |
| | | } |
| | | } else if (item.type === 'tabs') { |
| | | let _item = { |
| | | value: item.uuid, |
| | | label: item.name, |
| | | children: item.subtabs.map(f_tab => { |
| | | let subItem = { |
| | | value: f_tab.uuid, |
| | | label: f_tab.label, |
| | | children: this.getModules(f_tab.components, selfId) |
| | | } |
| | | |
| | | if (!subItem.children || subItem.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | return subItem |
| | | }) |
| | | } |
| | | |
| | | _item.children = _item.children.filter(t => t.children !== null) |
| | | |
| | | if (_item.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | |
| | | return _item |
| | | } else { |
| | | return { |
| | | children: null |
| | | } |
| | | } |
| | | }) |
| | | |
| | | modules = modules.filter(mod => mod.children !== null) |
| | | |
| | | if (modules.length === 0) { |
| | | return null |
| | | } |
| | | return modules |
| | | } |
| | | |
| | | handleConfirm = () => { |
| | |
| | | |
| | | import Utils from '@/utils/utils.js' |
| | | import MKEmitter from '@/utils/events.js' |
| | | import MenuUtils from '@/menu/utils/menuUtils.js' |
| | | import Card from './card' |
| | | import './index.scss' |
| | | |
| | |
| | | }) |
| | | } |
| | | |
| | | let uuids = [] |
| | | const getUuids = (item) => { |
| | | if (item.type === 'tabs') { |
| | | item.subtabs.forEach(tab => { |
| | | tab.components.forEach(c => { |
| | | getUuids(c) |
| | | }) |
| | | }) |
| | | } else { |
| | | if (item.action && item.action.length) { |
| | | item.action.forEach(act => { |
| | | if (!act.origin) { |
| | | uuids.push(act.uuid) |
| | | } |
| | | }) |
| | | } |
| | | if (item.type === 'card') { |
| | | item.subcards.forEach(_card => { |
| | | _card.elements && _card.elements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | _card.backElements && _card.backElements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | }) |
| | | } else if (item.type === 'table' && item.subtype === 'tablecard') { |
| | | item.subcards.forEach(_card => { |
| | | _card.elements && _card.elements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | }) |
| | | } else if (item.type === 'table' && item.subtype === 'normaltable') { |
| | | item.cols && item.cols.forEach(col => { |
| | | if (col.type !== 'action') return |
| | | col.elements && col.elements.forEach(cell => { |
| | | uuids.push(cell.uuid) |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | |
| | | getUuids(card) |
| | | let uuids = MenuUtils.getDelButtonIds(card) |
| | | |
| | | confirm({ |
| | | title: `确定删除《${card.name}》吗?`, |
| | |
| | | i++ |
| | | } |
| | | |
| | | let dataName = '' |
| | | while (!dataName) { |
| | | let _dataName = Utils.getdataName() |
| | | if (menu.components.filter(com => com.dataName === _dataName).length === 0) { |
| | | dataName = _dataName |
| | | } |
| | | } |
| | | |
| | | let newcard = { |
| | | uuid: Utils.getuuid(), |
| | | type: item.component, |
| | | subtype: item.subtype, |
| | | config: item.config, |
| | | width: item.width || 24, |
| | | dataName: dataName, |
| | | dataName: Utils.getdataName(), |
| | | name: name, |
| | | floor: 1, // 组件的层级 |
| | | isNew: true // 新添加标志,用于初始化 |
| | |
| | | this.setState({visible: true}) |
| | | } |
| | | |
| | | resetconfig = (item, Tab) => { |
| | | resetconfig = (item, Tab, isgroup) => { |
| | | item.uuid = Utils.getuuid() |
| | | item.floor = Tab ? (Tab.floor + 1) : 1 |
| | | |
| | | if (Tab) { |
| | | if (Tab && !isgroup) { |
| | | item.tabId = Tab.uuid |
| | | item.parentId = Tab.parentId |
| | | } else if (Tab) { |
| | | item.floor = Tab.floor || 1 |
| | | item.parentId = Tab.parentId |
| | | } |
| | | |
| | | if (item.dataName) { |
| | | item.dataName = Utils.getdataName() |
| | | } |
| | | |
| | | if (item.type === 'tabs') { |
| | |
| | | |
| | | pasteSubmit = () => { |
| | | const { Tab } = this.props |
| | | |
| | | let isgroup = Tab && Tab.type === 'group' ? true : false |
| | | |
| | | this.pasteFormRef.handleConfirm().then(res => { |
| | | if (!['tabs', 'datacard', 'propcard', 'mainsearch', 'normaltable', 'tablecard', 'line', 'bar', 'pie'].includes(res.copyType)) { |
| | | if (!isgroup && !['tabs', 'datacard', 'propcard', 'mainsearch', 'group', 'normaltable', 'tablecard', 'line', 'bar', 'pie'].includes(res.copyType)) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '配置信息格式错误!', |
| | | duration: 5 |
| | | }) |
| | | return |
| | | } else if (isgroup && !['datacard', 'propcard', 'normaltable', 'tablecard', 'line', 'bar', 'pie'].includes(res.copyType)) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '配置信息格式错误!', |
| | |
| | | return |
| | | } |
| | | |
| | | res = this.resetconfig(res, Tab) |
| | | res = this.resetconfig(res, Tab, isgroup) |
| | | |
| | | delete res.copyType |
| | | |
| | |
| | | item.subtabs.forEach(tab => { |
| | | traversal(tab.components) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | traversal(item.components) |
| | | } else if (item.type === 'card' || (item.type === 'table' && item.subtype === 'tablecard')) { |
| | | item.action && item.action.forEach(btn => { |
| | | buttons.push(`select '${btn.uuid}' as menuid, '${item.name + '-' + btn.label}' as menuname, '${_sort * 10}' as Sort`) |
| | |
| | | item.subtabs.forEach(tab => { |
| | | tab.components = this.filterConfig(tab.components) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | item.components = this.filterConfig(item.components) |
| | | } else if (item.type === 'table' && item.subtype === 'normaltable') { |
| | | item.search = item.search.filter(a => !a.origin) |
| | | item.action = item.action.filter(a => !a.origin) |
New file |
| | |
| | | export default class MenuUtils { |
| | | /** |
| | | * @description 获取下级模块 |
| | | * @return {String} selfId 当前组件id |
| | | */ |
| | | static getSubModules (components, selfId) { |
| | | let modules = components.map(item => { |
| | | if (item.uuid === selfId) { |
| | | return { |
| | | children: null |
| | | } |
| | | } else if (item.format) { // 数据格式,存在数据源 |
| | | return { |
| | | value: item.uuid, |
| | | label: item.name |
| | | } |
| | | } else if (item.type === 'tabs') { |
| | | let _item = { |
| | | value: item.uuid, |
| | | label: item.name, |
| | | children: item.subtabs.map(f_tab => { |
| | | let subItem = { |
| | | value: f_tab.uuid, |
| | | label: f_tab.label, |
| | | children: this.getSubModules(f_tab.components, selfId) |
| | | } |
| | | |
| | | if (!subItem.children || subItem.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | return subItem |
| | | }) |
| | | } |
| | | |
| | | _item.children = _item.children.filter(t => t.children !== null) |
| | | |
| | | if (_item.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | |
| | | return _item |
| | | } else if (item.type === 'group') { |
| | | let _item = { |
| | | value: item.uuid, |
| | | label: item.name, |
| | | children: item.components.map(f_tab => { |
| | | if (f_tab.uuid === selfId) { |
| | | return { |
| | | children: null |
| | | } |
| | | } else if (f_tab.format) { |
| | | return { |
| | | value: f_tab.uuid, |
| | | label: f_tab.name |
| | | } |
| | | } |
| | | return { |
| | | children: null |
| | | } |
| | | }) |
| | | } |
| | | |
| | | _item.children = _item.children.filter(t => t.children !== null) |
| | | |
| | | if (_item.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | |
| | | return _item |
| | | } else { |
| | | return { |
| | | children: null |
| | | } |
| | | } |
| | | }) |
| | | |
| | | modules = modules.filter(mod => mod.children !== null) |
| | | |
| | | if (modules.length === 0) { |
| | | return null |
| | | } |
| | | return modules |
| | | } |
| | | |
| | | /** |
| | | * @description 获取上级模块 |
| | | * @return {String} selfId 当前组件id |
| | | */ |
| | | static getSupModules (components, selfId) { |
| | | let modules = components.map(item => { |
| | | if (item.uuid === selfId) { |
| | | return { |
| | | children: null |
| | | } |
| | | } else if (item.switchable) { // 数据可切换 |
| | | return { |
| | | value: item.uuid, |
| | | label: item.name |
| | | } |
| | | } else if (item.type === 'tabs') { |
| | | let _item = { |
| | | value: item.uuid, |
| | | label: item.name, |
| | | children: item.subtabs.map(f_tab => { |
| | | let subItem = { |
| | | value: f_tab.uuid, |
| | | label: f_tab.label, |
| | | children: this.getSupModules(f_tab.components, selfId) |
| | | } |
| | | |
| | | if (!subItem.children || subItem.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | return subItem |
| | | }) |
| | | } |
| | | |
| | | _item.children = _item.children.filter(t => t.children !== null) |
| | | |
| | | if (_item.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | |
| | | return _item |
| | | } else if (item.type === 'group') { |
| | | let _item = { |
| | | value: item.uuid, |
| | | label: item.name, |
| | | children: item.components.map(f_tab => { |
| | | if (f_tab.uuid === selfId) { |
| | | return { |
| | | children: null |
| | | } |
| | | } else if (f_tab.switchable) { |
| | | return { |
| | | value: f_tab.uuid, |
| | | label: f_tab.name |
| | | } |
| | | } |
| | | return { |
| | | children: null |
| | | } |
| | | }) |
| | | } |
| | | |
| | | _item.children = _item.children.filter(t => t.children !== null) |
| | | |
| | | if (_item.children.length === 0) { |
| | | return {children: null} |
| | | } |
| | | |
| | | return _item |
| | | } else { |
| | | return { |
| | | children: null |
| | | } |
| | | } |
| | | }) |
| | | |
| | | modules = modules.filter(mod => mod.children !== null) |
| | | |
| | | if (modules.length === 0) { |
| | | return null |
| | | } |
| | | return modules |
| | | } |
| | | |
| | | /** |
| | | * @description 获取删除按钮Id |
| | | * @return {String} name |
| | | */ |
| | | static getDelButtonIds (card) { |
| | | let uuids = [] |
| | | const getUuids = (item) => { |
| | | if (item.type === 'tabs') { |
| | | item.subtabs.forEach(tab => { |
| | | tab.components.forEach(c => { |
| | | getUuids(c) |
| | | }) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | item.components.forEach(c => { |
| | | getUuids(c) |
| | | }) |
| | | } else { |
| | | if (item.action && item.action.length) { |
| | | item.action.forEach(act => { |
| | | if (!act.origin) { |
| | | uuids.push(act.uuid) |
| | | } |
| | | }) |
| | | } |
| | | if (item.type === 'card') { |
| | | item.subcards.forEach(_card => { |
| | | _card.elements && _card.elements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | _card.backElements && _card.backElements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | }) |
| | | } else if (item.type === 'table' && item.subtype === 'tablecard') { |
| | | item.subcards.forEach(_card => { |
| | | _card.elements && _card.elements.forEach(cell => { |
| | | if (cell.eleType === 'button') { |
| | | uuids.push(cell.uuid) |
| | | } |
| | | }) |
| | | }) |
| | | } else if (item.type === 'table' && item.subtype === 'normaltable') { |
| | | item.cols && item.cols.forEach(col => { |
| | | if (col.type !== 'action') return |
| | | col.elements && col.elements.forEach(cell => { |
| | | uuids.push(cell.uuid) |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | |
| | | getUuids(card) |
| | | |
| | | return uuids |
| | | } |
| | | } |
| | |
| | | config.easyCode = _curUserConfig.easyCode || config.easyCode || '' |
| | | |
| | | config.action = config.action.map(item => { |
| | | if (item.execMode) { |
| | | item.OpenType = 'funcbutton' |
| | | } |
| | | |
| | | if (_curUserConfig.action[item.uuid]) { |
| | | delete _curUserConfig.action[item.uuid].label |
| | | item = {...item, ..._curUserConfig.action[item.uuid]} |
| | |
| | | |
| | | config.action.forEach(item => { |
| | | item.logLabel = MenuName + '-' + item.label // 用于sPC_TableData_InUpDe记录操作按钮 |
| | | if (item.execMode) { |
| | | item.OpenType = 'funcbutton' |
| | | } |
| | | |
| | | item.$menuId = this.props.MenuID |
| | | |
| | | if (item.position === 'toolbar') { |
| | | _actions.push(item) |
| | | } else if (item.position === 'grid') { |
| | |
| | | /** |
| | | * @description 导出Excel时,获取页面搜索排序等参数 |
| | | */ |
| | | getexceloutparam = () => { |
| | | const { MenuName } = this.props |
| | | getexceloutparam = (menuId, btnId) => { |
| | | const { MenuName, MenuID } = this.props |
| | | const { arr_field, orderBy, search, setting} = this.state |
| | | |
| | | return { |
| | | if (MenuID !== menuId) return |
| | | |
| | | MKEmitter.emit('execExcelout', MenuID, btnId, { |
| | | arr_field: arr_field, |
| | | orderBy: orderBy || setting.order, |
| | | search: search, |
| | | menuName: MenuName |
| | | } |
| | | }) |
| | | } |
| | | |
| | | /** |
| | |
| | | MKEmitter.addListener('reloadData', this.reloadData) |
| | | MKEmitter.addListener('reloadMenuView', this.reloadMenuView) |
| | | MKEmitter.addListener('resetActiveMenu', this.resetActiveMenu) |
| | | MKEmitter.addListener('getexceloutparam', this.getexceloutparam) |
| | | } |
| | | |
| | | /** |
| | |
| | | MKEmitter.removeListener('reloadData', this.reloadData) |
| | | MKEmitter.removeListener('reloadMenuView', this.reloadMenuView) |
| | | MKEmitter.removeListener('resetActiveMenu', this.resetActiveMenu) |
| | | MKEmitter.removeListener('getexceloutparam', this.getexceloutparam) |
| | | } |
| | | |
| | | render() { |
| | |
| | | selectedData={selectedData} |
| | | ContainerId={this.state.ContainerId} |
| | | refreshdata={this.refreshbyaction} |
| | | getexceloutparam={this.getexceloutparam} |
| | | /> |
| | | </div> |
| | | <div className="main-table-box"> |
| | |
| | | loading={this.state.loading} |
| | | ContainerId={this.state.ContainerId} |
| | | refreshdata={this.refreshbyaction} |
| | | getexceloutparam={this.getexceloutparam} |
| | | handleTableId={this.handleTableId} |
| | | /> |
| | | </Col> |
| | |
| | | plot={item} |
| | | config={config} |
| | | data={this.state.data} |
| | | getexceloutparam={this.getexceloutparam} |
| | | loading={this.state.loading} |
| | | /> |
| | | </Col> |
| | |
| | | const PrintButton = asyncComponent(() => import('@/tabviews/zshare/actionList/printbutton')) |
| | | const BarCode = asyncElementComponent(() => import('@/components/barcode')) |
| | | const QrCode = asyncElementComponent(() => import('@/components/qrcode')) |
| | | const Video = asyncComponent(() => import('@/components/video')) |
| | | |
| | | class CardCellComponent extends Component { |
| | | static propTpyes = { |
| | |
| | | </div> |
| | | </Col> |
| | | ) |
| | | } else if (card.eleType === 'video') { |
| | | let url = '' |
| | | |
| | | if (card.datatype === 'static') { |
| | | url = card.url |
| | | } else { |
| | | url = data[card.field] || '' |
| | | } |
| | | |
| | | return ( |
| | | <Col key={card.uuid} span={card.width}> |
| | | <div style={card.style}> |
| | | <Video card={card} value={url}/> |
| | | </div> |
| | | </Col> |
| | | ) |
| | | } else if (card.eleType === 'qrcode') { |
| | | let val = '' |
| | | |
| | |
| | | show={card.show} |
| | | style={card.btnstyle} |
| | | setting={cards.setting} |
| | | // getexceloutparam={getexceloutparam} |
| | | updateStatus={this.props.updateStatus} |
| | | /> |
| | | </div> |
| | |
| | | columns={config.columns} |
| | | selectedData={selectedData} |
| | | refreshdata={this.refreshbyaction} |
| | | getexceloutparam={this.getexceloutparam} |
| | | /> : null |
| | | } |
| | | <div className={`data-zoom ${config.wrap.cardType || ''} ${config.wrap.scale || ''}`}> |
| | |
| | | btn={item} |
| | | show="icon" |
| | | setting={config.setting} |
| | | getexceloutparam={this.props.getexceloutparam} |
| | | updateStatus={() => {}} |
| | | /> |
| | | ) |
New file |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { connect } from 'react-redux' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Col, Empty, notification, Button } from 'antd' |
| | | import moment from 'moment' |
| | | import md5 from 'md5' |
| | | |
| | | import Api from '@/api' |
| | | import options from '@/store/options.js' |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | | import Utils from '@/utils/utils.js' |
| | | import './index.scss' |
| | | |
| | | // 通用组件 |
| | | const AntvBarAndLine = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-bar-line')) |
| | | const AntvPie = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-pie')) |
| | | const DataCard = asyncComponent(() => import('@/tabviews/custom/components/card/data-card')) |
| | | const TableCard = asyncComponent(() => import('@/tabviews/custom/components/card/table-card')) |
| | | const PropCard = asyncComponent(() => import('@/tabviews/custom/components/card/prop-card')) |
| | | |
| | | class TabTransfer extends Component { |
| | | static propTpyes = { |
| | | BID: PropTypes.any, // 父级Id |
| | | bids: PropTypes.any, // 父级Id集 |
| | | config: PropTypes.object, // 组件配置信息 |
| | | mainSearch: PropTypes.any, // 全局搜索条件 |
| | | menuType: PropTypes.any, // 菜单类型 |
| | | } |
| | | |
| | | state = { |
| | | mainSearch: [], |
| | | printing: false, |
| | | data: null |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | | const { config, mainSearch } = this.props |
| | | |
| | | // 获取主搜索条件 |
| | | let _mainSearch = mainSearch ? fromJS(mainSearch).toJS() : [] |
| | | |
| | | let params = [] |
| | | config.components.forEach(item => { |
| | | if (item.type === 'tabs') return |
| | | |
| | | if (!item.setting || item.setting.interType !== 'system') return |
| | | if (!item.format || (item.subtype === 'propcard' && item.wrap.datatype === 'static')) return |
| | | |
| | | if (item.dataName && (!item.pageable || (item.pageable && !item.setting.laypage)) && item.setting.onload === 'true' && item.setting.sync === 'true') { |
| | | let param = this.getDefaultParam(item, _mainSearch) |
| | | params.push(param) |
| | | } else { |
| | | item.setting.sync = 'false' |
| | | } |
| | | }) |
| | | |
| | | this.setState({mainSearch: _mainSearch}) |
| | | |
| | | if (params.length > 0) { |
| | | this.loadmaindata(params) |
| | | } |
| | | } |
| | | |
| | | UNSAFE_componentWillReceiveProps(nextProps) { |
| | | if (nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) { |
| | | this.setState({mainSearch: fromJS(nextProps.mainSearch).toJS()}) |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 获取系统存储过程 sPC_Get_TableData 的参数 |
| | | */ |
| | | getDefaultParam = (component, mainSearch) => { |
| | | const { columns, search, setting, dataName, format } = component |
| | | |
| | | let searchlist = [] |
| | | if (search && search.length > 0) { |
| | | searchlist = Utils.initMainSearch(search) |
| | | } |
| | | |
| | | if (setting.useMSearch === 'true') { |
| | | let keys = searchlist.map(item => item.key) |
| | | mainSearch.forEach(item => { |
| | | if (!keys.includes(item.key)) { |
| | | searchlist.push(item) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | let arr_field = columns.map(col => col.field) |
| | | let _dataresource = setting.dataresource |
| | | let _customScript = setting.customScript |
| | | |
| | | if (setting.queryType === 'statistics' || _customScript) { |
| | | let allSearch = Utils.getAllSearchOptions(searchlist) |
| | | let regoptions = allSearch.map(item => { |
| | | return { |
| | | reg: new RegExp('@' + item.key + '@', 'ig'), |
| | | value: `'${item.value}'` |
| | | } |
| | | }) |
| | | |
| | | regoptions.forEach(item => { |
| | | if (_dataresource && setting.queryType === 'statistics') { |
| | | _dataresource = _dataresource.replace(item.reg, item.value) |
| | | } |
| | | if (_customScript) { |
| | | _customScript = _customScript.replace(item.reg, item.value) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | let _search = '' |
| | | if (setting.queryType !== 'statistics' && _dataresource) { |
| | | _search = Utils.joinMainSearchkey(searchlist) |
| | | _search = _search ? 'where ' + _search : '' |
| | | } |
| | | |
| | | if (setting.order && _dataresource) { |
| | | _dataresource = `select top 1000 ${arr_field.join(',')} from (select ${arr_field.join(',')} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows ` |
| | | } else if (_dataresource) { |
| | | _dataresource = `select top 1000 ${arr_field.join(',')} from ${_dataresource} ${_search} ` |
| | | } |
| | | |
| | | // 测试系统打印查询语句 |
| | | if ((options.sysType === 'local' && !window.GLOB.systemType) || window.debugger === true) { |
| | | _customScript && console.info(`${_dataresource ? '' : '/*不执行默认sql*/\n'}${_customScript}`) |
| | | _dataresource && console.info(_dataresource) |
| | | } |
| | | |
| | | return { |
| | | name: dataName, |
| | | columns: columns, |
| | | par_tablename: '', |
| | | type: format === 'array' ? format : '', |
| | | primaryKey: setting.primaryKey || '', |
| | | foreign_key: '', |
| | | sql: _dataresource, |
| | | script: _customScript |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 主表数据加载 |
| | | */ |
| | | loadmaindata = (params) => { |
| | | const { config } = this.props |
| | | let LText_field = [] |
| | | let diffUser = false |
| | | let userName = sessionStorage.getItem('User_Name') || '' |
| | | let fullName = sessionStorage.getItem('Full_Name') || '' |
| | | |
| | | if (sessionStorage.getItem('isEditState') === 'true') { |
| | | userName = sessionStorage.getItem('CloudUserName') || '' |
| | | fullName = sessionStorage.getItem('CloudFullName') || '' |
| | | } |
| | | |
| | | let _LText = params.map((item, index) => { |
| | | let _script = item.script |
| | | |
| | | if (index === 0) { |
| | | _script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50) |
| | | select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}' |
| | | ${_script} |
| | | ` |
| | | } |
| | | if (!diffUser && (/@userid@/ig.test(item.sql) || /@userid@/ig.test(_script))) { |
| | | diffUser = true |
| | | } |
| | | |
| | | item.columns.forEach(cell => { |
| | | LText_field.push(`Select '${item.name}' as tablename,'${cell.field}' as fieldname,'${cell.datatype}' as field_type`) |
| | | }) |
| | | return `Select '${item.name}' as tablename,'${window.btoa(window.encodeURIComponent(item.sql))}' as LText,'${window.btoa(window.encodeURIComponent(_script))}' as Lcustomize,'${item.type}' as table_type,'${item.primaryKey}' as primary_key,'${item.par_tablename}' as par_tablename,'${item.foreign_key}' as foreign_key,'${index}' as Sort` |
| | | }) |
| | | |
| | | let param = { |
| | | func: 'sPC_Get_structured_data', |
| | | LText: _LText.join(' union all '), |
| | | LText_field: LText_field.join(' union all ') |
| | | } |
| | | |
| | | let { LText, LText1, LText2 } = Utils.sPCInUpDeFormatOptions(param.LText) |
| | | |
| | | param.LText1 = LText1 |
| | | param.LText = LText |
| | | param.LText2 = LText2 |
| | | param.LText_field = Utils.formatOptions(param.LText_field) |
| | | |
| | | if (config.cacheUseful === 'true') { |
| | | param.time_type = config.timeUnit |
| | | param.time_limit = config.cacheTime |
| | | if (diffUser) { |
| | | param.userid = sessionStorage.getItem('UserID') |
| | | } |
| | | param.data_md5 = md5(JSON.stringify(param)) |
| | | } |
| | | |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt(param.LText, param.timestamp) |
| | | |
| | | Api.getLocalConfig(param).then(result => { |
| | | if (result.status) { |
| | | delete result.status |
| | | delete result.message |
| | | delete result.ErrMesg |
| | | delete result.ErrCode |
| | | |
| | | this.setState({ |
| | | data: result |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | | data: '' |
| | | }) |
| | | notification.error({ |
| | | top: 92, |
| | | message: result.message, |
| | | duration: 10 |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | getComponents = () => { |
| | | const { menuType, BID, bids, config } = this.props |
| | | const { mainSearch, data } = this.state |
| | | |
| | | if (!config || !config.components || config.components.length === 0) return (<Empty description={false} />) |
| | | |
| | | return config.components.map(item => { |
| | | let _bid = '' |
| | | if (bids && item.setting && item.setting.supModule) { |
| | | _bid = bids[item.setting.supModule] || '' |
| | | } else if (!bids && BID && (!item.setting || !item.setting.supModule)) { |
| | | _bid = BID |
| | | } |
| | | |
| | | if (item.type === 'bar' || item.type === 'line') { |
| | | return ( |
| | | <Col span={item.width} key={item.uuid}> |
| | | <AntvBarAndLine data={data} config={item} BID={_bid} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'pie') { |
| | | return ( |
| | | <Col span={item.width} key={item.uuid}> |
| | | <AntvPie data={data} config={item} BID={_bid} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'card' && item.subtype === 'datacard') { |
| | | return ( |
| | | <Col span={item.width} key={item.uuid}> |
| | | <DataCard config={item} data={data} BID={_bid} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'card' && item.subtype === 'propcard') { |
| | | return ( |
| | | <Col span={item.width} key={item.uuid}> |
| | | <PropCard config={item} data={data} BID={_bid} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'table' && item.subtype === 'tablecard') { |
| | | return ( |
| | | <Col span={item.width} key={item.uuid}> |
| | | <TableCard config={item} data={data} BID={_bid} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else { |
| | | return null |
| | | } |
| | | }) |
| | | } |
| | | |
| | | print = () => { |
| | | const { config } = this.props |
| | | const { printing } = this.state |
| | | |
| | | if (printing) return |
| | | this.setState({printing: true}) |
| | | |
| | | let pageSize = ['A4', 'A3', 'A5'].includes(config.setting.pageSize) ? config.setting.pageSize : 'A4' |
| | | let pageLayout = config.setting.pageLayout !== 'horizontal' ? 'vertical' : 'horizontal' |
| | | |
| | | let pageParam = { |
| | | A4: { |
| | | vertical: 980, |
| | | horizontal: 1200, |
| | | }, |
| | | A3: { |
| | | vertical: 1200, |
| | | horizontal: 1600, |
| | | }, |
| | | A5: { |
| | | vertical: 700, |
| | | horizontal: 1000, |
| | | } |
| | | } |
| | | |
| | | let width = pageParam[pageSize][pageLayout] |
| | | |
| | | try { |
| | | let jubuData = document.getElementById(config.uuid).innerHTML |
| | | |
| | | let iframe = document.createElement('IFRAME') |
| | | let linkList = document.getElementsByTagName('link') // 获取父窗口link标签对象列表 |
| | | let styleList = document.getElementsByTagName('style') // 获取父窗口style标签对象列表 |
| | | |
| | | document.body.appendChild(iframe) |
| | | let doc = iframe.contentWindow.document |
| | | |
| | | doc.open() |
| | | doc.write(`<!DOCTYPE html><html lang="en"><head>`) |
| | | for (let i = 0;i < linkList.length;i++) { |
| | | if (linkList[i].type === 'text/css') { |
| | | doc.write(`<LINK rel="stylesheet" type="text/css" href="${linkList[i].href}">`) |
| | | } |
| | | } |
| | | doc.write(`<style>body{width: ${width}px!important;}*{border-style: solid;border-width: 0;}.print-button, .top-search{display: none!important;}</style>`) |
| | | for (let i = 0;i < styleList.length;i++) { |
| | | doc.write('<style>' + styleList[i].innerHTML + '</style>') |
| | | } |
| | | doc.write(`</head><body>`) |
| | | doc.write(jubuData) |
| | | doc.write(`</body></html>`) |
| | | doc.close() |
| | | |
| | | setTimeout(() => { |
| | | iframe.contentWindow.focus() |
| | | iframe.contentWindow.print() |
| | | |
| | | document.body.removeChild(iframe) |
| | | |
| | | this.setState({printing: false}) |
| | | }, 500) |
| | | } catch (e) { |
| | | this.setState({printing: false}) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '打印异常!', |
| | | duration: 5 |
| | | }) |
| | | } |
| | | } |
| | | |
| | | render() { |
| | | const { config } = this.props |
| | | const { printing } = this.state |
| | | |
| | | return ( |
| | | <div className="normal-group-wrap" id={config.uuid} style={config.style}> |
| | | {config.setting && config.setting.print === 'true' ? <Button className="print-button" icon="printer" loading={printing} onClick={this.print}></Button> : null} |
| | | {this.getComponents()} |
| | | </div> |
| | | ) |
| | | } |
| | | } |
| | | |
| | | const mapStateToProps = (state) => { |
| | | return { |
| | | menuType: state.editLevel |
| | | } |
| | | } |
| | | |
| | | const mapDispatchToProps = () => { |
| | | return {} |
| | | } |
| | | |
| | | export default connect(mapStateToProps, mapDispatchToProps)(TabTransfer) |
New file |
| | |
| | | .normal-group-wrap { |
| | | .print-button, .print-button:hover, .print-button:focus, .print-button:active { |
| | | position: absolute; |
| | | right: 0px; |
| | | top: 0px; |
| | | z-index: 2; |
| | | border: 0; |
| | | background: transparent; |
| | | } |
| | | } |
| | | |
| | | .normal-group-wrap::after { |
| | | content: ' '; |
| | | display: block; |
| | | clear: both; |
| | | } |
| | |
| | | const DataCard = asyncComponent(() => import('@/tabviews/custom/components/card/data-card')) |
| | | const TableCard = asyncComponent(() => import('@/tabviews/custom/components/card/table-card')) |
| | | const PropCard = asyncComponent(() => import('@/tabviews/custom/components/card/prop-card')) |
| | | const NormalGroup = asyncComponent(() => import('@/tabviews/custom/components/group/normal-group')) |
| | | |
| | | class TabTransfer extends Component { |
| | | static propTpyes = { |
| | |
| | | |
| | | let params = [] |
| | | config.components.forEach(item => { |
| | | if (item.type === 'tabs') return |
| | | if (item.type === 'tabs' || item.type === 'group') return |
| | | |
| | | if (!item.setting || item.setting.interType !== 'system') return |
| | | if (!item.format || (item.subtype === 'propcard' && item.wrap.datatype === 'static')) return |
| | |
| | | <TableCard config={item} data={data} BID={BID} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'group' && item.subtype === 'normalgroup') { |
| | | return ( |
| | | <Col span={item.width} key={item.uuid}> |
| | | <NormalGroup config={item} bids={bids} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else { |
| | | return null |
| | | } |
| | |
| | | /** |
| | | * @description 导出Excel时,获取页面搜索排序等参数 |
| | | */ |
| | | getexceloutparam = () => { |
| | | getexceloutparam = (menuId, btnId) => { |
| | | const { arr_field, config, orderBy, search, setting} = this.state |
| | | |
| | | return { |
| | | if (config.uuid !== menuId) return |
| | | |
| | | MKEmitter.emit('execExcelout', config.uuid, btnId, { |
| | | arr_field: arr_field, |
| | | orderBy: orderBy || setting.order, |
| | | search: search, |
| | | menuName: config.name |
| | | } |
| | | }) |
| | | } |
| | | |
| | | reloadData = (menuId, id, btn) => { |
| | |
| | | componentDidMount () { |
| | | MKEmitter.addListener('reloadData', this.reloadData) |
| | | MKEmitter.addListener('resetSelectLine', this.resetParentParam) |
| | | MKEmitter.addListener('getexceloutparam', this.getexceloutparam) |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | MKEmitter.removeListener('reloadData', this.reloadData) |
| | | MKEmitter.removeListener('resetSelectLine', this.resetParentParam) |
| | | MKEmitter.removeListener('getexceloutparam', this.getexceloutparam) |
| | | } |
| | | |
| | | render() { |
| | | const { BID, setting, searchlist, actions, config, columns, selectedData } = this.state |
| | | |
| | | return ( |
| | | <div className="custom-normal-table"> |
| | | <div className="custom-normal-table" style={config.style}> |
| | | <NormalHeader config={config}/> |
| | | {searchlist && searchlist.length ? |
| | | <MainSearch BID={BID} searchlist={searchlist} menuType={this.props.menuType} refreshdata={this.refreshbysearch}/> : null |
| | |
| | | columns={config.columns} |
| | | selectedData={selectedData} |
| | | refreshdata={this.refreshbyaction} |
| | | getexceloutparam={this.getexceloutparam} |
| | | /> |
| | | <div className="main-table-box"> |
| | | <div className={'main-table-box ' + (!actions || actions.length === 0 ? 'no-action' : '')}> |
| | | <MainTable |
| | | setting={setting} |
| | | columns={columns} |
| | |
| | | position: absolute; |
| | | right: 5px; |
| | | top: -22px; |
| | | z-index: 1; |
| | | z-index: 2; |
| | | } |
| | | .custom-control { |
| | | position: absolute; |
| | |
| | | line-height: 150px!important; |
| | | } |
| | | } |
| | | .no-action.main-table-box { |
| | | .main-pickup { |
| | | position: relative; |
| | | right: 0px; |
| | | top: 0px; |
| | | z-index: 2; |
| | | float: right; |
| | | } |
| | | } |
| | | } |
| | |
| | | const TableCard = asyncComponent(() => import('./components/card/table-card')) |
| | | const MainSearch = asyncComponent(() => import('@/tabviews/zshare/topSearch')) |
| | | const NormalTable = asyncComponent(() => import('./components/table/normal-table')) |
| | | const NormalGroup = asyncComponent(() => import('./components/group/normal-group')) |
| | | |
| | | class CustomPage extends Component { |
| | | static propTpyes = { |
| | |
| | | }) |
| | | }) |
| | | item.parentIds = supIds |
| | | } else if (item.type === 'group') { |
| | | if ( |
| | | item.setting.blacklist && item.setting.blacklist.length > 0 && |
| | | item.setting.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0 |
| | | ) { |
| | | return false |
| | | } |
| | | |
| | | item.components = this.filterComponent(item.components, roleId, permAction, permMenus) |
| | | } else if (item.type === 'pie' || item.type === 'bar' || item.type === 'line') { |
| | | if ( |
| | | item.plot.blacklist && item.plot.blacklist.length > 0 && |
| | |
| | | item.action = item.action.filter(cell => { |
| | | cell.logLabel = item.name + '-' + cell.label |
| | | cell.ContainerId = this.state.ContainerId |
| | | cell.$menuId = item.uuid |
| | | |
| | | return permAction[cell.uuid] |
| | | }) |
| | |
| | | cell.logLabel = item.name + '-' + cell.label |
| | | cell.Ot = 'requiredSgl' |
| | | cell.ContainerId = this.state.ContainerId |
| | | cell.$menuId = item.uuid |
| | | } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) { |
| | | cell.innerHeight = 'auto' |
| | | } |
| | |
| | | cell.logLabel = item.name + '-' + cell.label |
| | | cell.Ot = 'requiredSgl' |
| | | cell.ContainerId = this.state.ContainerId |
| | | cell.$menuId = item.uuid |
| | | } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) { |
| | | cell.innerHeight = 'auto' |
| | | } |
| | |
| | | cell.logLabel = item.name + '-' + cell.label |
| | | cell.Ot = 'requiredSgl' |
| | | cell.ContainerId = this.state.ContainerId |
| | | cell.$menuId = item.uuid |
| | | } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) { |
| | | cell.innerHeight = 'auto' |
| | | } |
| | |
| | | cell.logLabel = item.name + '-' + cell.label |
| | | cell.Ot = 'requiredSgl' |
| | | cell.ContainerId = this.state.ContainerId |
| | | cell.$menuId = item.uuid |
| | | |
| | | return permAction[cell.uuid] |
| | | }) |
| | | return col.elements.length !== 0 |
| | |
| | | if (item.action && item.action.length > 0) { |
| | | item.action = item.action.map(cell => { |
| | | cell.logLabel = item.name + '-' + cell.label |
| | | cell.$menuId = item.uuid |
| | | return cell |
| | | }) |
| | | } |
| | |
| | | tab = {...tab, ...inherit} |
| | | return tab |
| | | }) |
| | | return component |
| | | } else if (component.type === 'group') { |
| | | component.components = this.formatSetting(component.components, [], [], inherit) |
| | | component = {...component, ...inherit} |
| | | return component |
| | | } |
| | | |
| | | if (!component.setting) return component // 不使用系统函数时 |
| | |
| | | <NormalTable config={item} data={data} BID={_bid} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'group' && item.subtype === 'normalgroup') { |
| | | return ( |
| | | <Col span={item.width} key={item.uuid}> |
| | | <NormalGroup config={item} BID={_bid} mainSearch={mainSearch} menuType={menuType} /> |
| | | </Col> |
| | | ) |
| | | } else { |
| | | return null |
| | | } |
| | |
| | | item = {...item, ...userConfig.action[item.uuid]} |
| | | } |
| | | |
| | | if (item.execMode) { |
| | | item.OpenType = 'funcbutton' |
| | | } |
| | | |
| | | if (item.OpenType === 'funcbutton' && item.funcType === 'print' && item.verify && item.printer) { |
| | | item.verify.defaultPrinter = item.printer.defaultPrinter || '' |
| | | if (item.verify.printerTypeList && item.printer.printerList) { |
| | |
| | | |
| | | config.action.forEach(item => { |
| | | item.logLabel = Tab.label + '-' + item.label // 用于sPC_TableData_InUpDe记录操作按钮 |
| | | if (item.execMode) { |
| | | item.OpenType = 'funcbutton' |
| | | } |
| | | item.$menuId = this.props.MenuID |
| | | |
| | | if (item.position === 'toolbar') { |
| | | _actions.push(item) |
| | |
| | | /** |
| | | * @description 导出Excel时,获取页面搜索排序等参数 |
| | | */ |
| | | getexceloutparam = () => { |
| | | const { Tab, mainSearch } = this.props |
| | | getexceloutparam = (menuId, btnId) => { |
| | | const { Tab, mainSearch, MenuID } = this.props |
| | | const { arr_field, orderBy, search, setting} = this.state |
| | | |
| | | if (MenuID !== menuId) return |
| | | |
| | | let searches = search |
| | | if (mainSearch && mainSearch.length > 0) { // 主表搜索条件 |
| | | searches = [...mainSearch, ...search] |
| | | } |
| | | |
| | | return { |
| | | MKEmitter.emit('execExcelout', MenuID, btnId, { |
| | | arr_field: arr_field, |
| | | orderBy: orderBy || setting.order, |
| | | search: searches, |
| | | menuName: Tab.label |
| | | } |
| | | }) |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | componentDidMount () { |
| | | MKEmitter.addListener('reloadData', this.reloadData) |
| | | MKEmitter.addListener('getexceloutparam', this.getexceloutparam) |
| | | } |
| | | |
| | | /** |
| | |
| | | return |
| | | } |
| | | MKEmitter.removeListener('reloadData', this.reloadData) |
| | | MKEmitter.removeListener('getexceloutparam', this.getexceloutparam) |
| | | } |
| | | |
| | | render() { |
| | |
| | | selectedData={selectedData} |
| | | refreshdata={this.refreshbyaction} |
| | | ContainerId={this.props.ContainerId} |
| | | getexceloutparam={this.getexceloutparam} |
| | | /> |
| | | </div> |
| | | <div className="subtable-box"> |
| | |
| | | tableId={this.props.Tab.uuid} |
| | | refreshdata={this.refreshbyaction} |
| | | handleTableId={this.handleTableId} |
| | | getexceloutparam={this.getexceloutparam} |
| | | /> |
| | | </Col> |
| | | ) |
| | |
| | | BID={this.props.BID} |
| | | Tab={this.props.Tab} |
| | | data={this.state.data} |
| | | getexceloutparam={this.getexceloutparam} |
| | | loading={this.state.loading} |
| | | /> |
| | | </Col> |
| | |
| | | |
| | | config.action.forEach(item => { |
| | | item.logLabel = Tab.label + '-' + item.label // 用于sPC_TableData_InUpDe记录操作按钮 |
| | | if (item.execMode) { |
| | | item.OpenType = 'funcbutton' |
| | | } |
| | | item.$menuId = this.props.MenuID |
| | | |
| | | if (item.position === 'toolbar') { |
| | | _actions.push(item) |
| | |
| | | /** |
| | | * @description 导出Excel时,获取页面搜索排序等参数 |
| | | */ |
| | | getexceloutparam = () => { |
| | | const { Tab, mainSearch } = this.props |
| | | getexceloutparam = (menuId, btnId) => { |
| | | const { Tab, mainSearch, MenuID } = this.props |
| | | const { arr_field, orderBy, search, setting} = this.state |
| | | |
| | | if (MenuID !== menuId) return |
| | | |
| | | let searches = search |
| | | if (mainSearch && mainSearch.length > 0) { // 主表搜索条件 |
| | | searches = [...mainSearch, ...search] |
| | | } |
| | | |
| | | return { |
| | | MKEmitter.emit('execExcelout', MenuID, btnId, { |
| | | arr_field: arr_field, |
| | | orderBy: orderBy || setting.order, |
| | | search: searches, |
| | | menuName: Tab.label |
| | | } |
| | | }) |
| | | } |
| | | |
| | | /** |
| | |
| | | return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) |
| | | } |
| | | |
| | | componentDidMount () { |
| | | MKEmitter.addListener('getexceloutparam', this.getexceloutparam) |
| | | } |
| | | |
| | | /** |
| | | * @description 组件销毁,清除state更新 |
| | | */ |
| | |
| | | this.setState = () => { |
| | | return |
| | | } |
| | | MKEmitter.removeListener('getexceloutparam', this.getexceloutparam) |
| | | } |
| | | |
| | | render() { |
| | |
| | | selectedData={selectedData} |
| | | MenuID={this.props.SupMenuID} |
| | | refreshdata={this.refreshbyaction} |
| | | getexceloutparam={this.getexceloutparam} |
| | | /> |
| | | </div> |
| | | <SubTable |
| | |
| | | setting: config.setting, |
| | | searchlist: config.search, |
| | | actions: config.action.map(item => { |
| | | item.$menuId = this.props.MenuID |
| | | |
| | | if (buttonConfig[item.uuid]) { |
| | | item = {...buttonConfig[item.uuid], ...item} |
| | | } |
| | |
| | | MenuID={this.props.SupMenuID} |
| | | refreshdata={this.refreshbyaction} |
| | | ContainerId={this.props.ContainerId} |
| | | getexceloutparam={this.getexceloutparam} |
| | | /> |
| | | </div> : null |
| | | } |
| | |
| | | btn: PropTypes.object, // 按钮 |
| | | setting: PropTypes.any, // 页面通用设置 |
| | | updateStatus: PropTypes.func, // 按钮状态更新 |
| | | getexceloutparam: PropTypes.func, // 获取表格中参数 |
| | | } |
| | | |
| | | state = { |
| | |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | MKEmitter.addListener('execExcelout', this.triggerExcelout) |
| | | } |
| | | |
| | | componentWillUnmount () { |
| | |
| | | return |
| | | } |
| | | MKEmitter.removeListener('triggerBtnId', this.actionTrigger) |
| | | MKEmitter.removeListener('execExcelout', this.triggerExcelout) |
| | | } |
| | | |
| | | /** |
| | |
| | | return |
| | | } |
| | | |
| | | this.triggerExcelout() |
| | | MKEmitter.emit('getexceloutparam', btn.$menuId, btn.uuid) |
| | | } |
| | | |
| | | /** |
| | | * @description Excel 导出 |
| | | */ |
| | | triggerExcelout = () => { |
| | | triggerExcelout = (menuId, btnId, viewParam) => { |
| | | const { btn } = this.props |
| | | let viewParam = this.props.getexceloutparam() |
| | | |
| | | if (btn.$menuId !== menuId || btn.uuid !== btnId || !viewParam) return |
| | | |
| | | let name = `${viewParam.menuName}${moment().format('YYYYMMDDHHmmss')}.xlsx` |
| | | let pageSize = 1000 |
| | | |
| | |
| | | setting: PropTypes.any, // 页面通用设置 |
| | | ContainerId: PropTypes.any, // tab页面ID,用于弹窗控制 |
| | | refreshdata: PropTypes.func, // 执行完成后数据刷新 |
| | | getexceloutparam: PropTypes.func, // 获取excel导出数据 |
| | | } |
| | | |
| | | state = { |
| | |
| | | } |
| | | |
| | | getButtonList = (actions) => { |
| | | const { BID, BData, MenuID, Tab, columns, setting, ContainerId, selectedData, getexceloutparam } = this.props |
| | | const { BID, BData, MenuID, Tab, columns, setting, ContainerId, selectedData } = this.props |
| | | |
| | | return actions.map(item => { |
| | | if (['exec', 'prompt', 'pop'].includes(item.OpenType)) { |
| | |
| | | btn={item} |
| | | setting={setting} |
| | | position="toolbar" |
| | | getexceloutparam={getexceloutparam} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | | ) |
| | |
| | | |
| | | let data = record || selectedData || [] |
| | | |
| | | if (btn.Ot === 'requiredSgl' && data.length !== 1) { |
| | | if (btn.Ot && btn.Ot !== 'notRequired' && data.length === 0) { |
| | | // 需要选择行时,校验数据 |
| | | notification.warning({ |
| | | top: 92, |
| | | message: this.state.dict['main.action.confirm.selectline'], |
| | | duration: 5 |
| | | }) |
| | | return |
| | | } else if (btn.Ot === 'requiredSgl' && data.length !== 1) { |
| | | // 需要选择单行时,校验数据 |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | duration: 5 |
| | | }) |
| | | this.updateStatus('over') |
| | | } else if (!_LongParam || (btn.OpenType === 'pop' && _LongParam.type !== 'Modal')) { |
| | | } else if (!_LongParam || (btn.execMode === 'pop' && _LongParam.type !== 'Modal')) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '未获取到按钮配置信息!', |
| | |
| | | loading: PropTypes.bool, |
| | | data: PropTypes.array, |
| | | refreshdata: PropTypes.func, |
| | | getexceloutparam: PropTypes.func, |
| | | handleTableId: PropTypes.func |
| | | } |
| | | |
| | |
| | | key={action.uuid} |
| | | BID={BID} |
| | | Tab={Tab} |
| | | btn={action} |
| | | show="icon" |
| | | btn={action} |
| | | setting={config.setting} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | |
| | | key={action.uuid} |
| | | BID={BID} |
| | | Tab={Tab} |
| | | btn={action} |
| | | show="icon" |
| | | btn={action} |
| | | setting={config.setting} |
| | | getexceloutparam={this.props.getexceloutparam} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | | ) |
| | |
| | | data: PropTypes.array, // 图表传入数据 |
| | | loading: PropTypes.bool, // 数据加载中 |
| | | config: PropTypes.object, // 页面配置信息 |
| | | getexceloutparam: PropTypes.func // 获取excel导出参数 |
| | | } |
| | | |
| | | state = { |
| | |
| | | btn={item} |
| | | show="icon" |
| | | setting={config.setting} |
| | | getexceloutparam={this.props.getexceloutparam} |
| | | updateStatus={() => {}} |
| | | /> |
| | | ) |
| | |
| | | let _tabTemplate = card.tabTemplate // 按钮为标签页时,标签类型:三级菜单或表单标签页 |
| | | let _pageTemplate = card.pageTemplate // 新页面类型 |
| | | |
| | | if (card.execMode) { // 转换打印时打开方式 |
| | | _opentype = 'funcbutton' |
| | | } else if (_opentype === 'outerpage') { |
| | | if (_opentype === 'outerpage') { |
| | | card.pageTemplate = 'custom' |
| | | _opentype = 'innerpage' |
| | | } else if (_opentype === 'blank') { |
| | |
| | | } |
| | | } else if (_opentype === 'funcbutton') { |
| | | if (_funcType === 'print') { |
| | | _options.push('execMode', 'intertype', 'Ot', 'execSuccess', 'execError') |
| | | if (_intertype === 'outer') { |
| | | _options.push('execMode', 'intertype', 'innerFunc', 'sysInterface', 'interface', 'outerFunc', 'callbackFunc', 'Ot', 'execSuccess', 'execError') |
| | | _options.push('innerFunc', 'sysInterface', 'interface', 'outerFunc', 'callbackFunc') |
| | | } else if (_intertype === 'inner') { |
| | | _options.push('execMode', 'intertype', 'innerFunc', 'Ot', 'execSuccess', 'execError') |
| | | } else if (_intertype === 'system') { |
| | | _options.push('execMode', 'intertype', 'Ot', 'execSuccess', 'execError') |
| | | _options.push('innerFunc') |
| | | } |
| | | } |
| | | } else if (_opentype !== 'popview') { // 打开方式不是弹窗页面时 |
| | |
| | | values.createTab = true // 用于标记按钮复制时,是否复制原有标签 |
| | | } else if (values.OpenType === 'funcbutton') { // 转换打印时打开方式 |
| | | values.position = 'toolbar' |
| | | if (values.funcType === 'print') { |
| | | values.OpenType = values.execMode |
| | | } |
| | | } else if (['pop', 'prompt', 'exec'].includes(values.OpenType) && values.verify) { |
| | | if (values.Ot === 'requiredOnce' && ['notRequired', 'requiredSgl', 'required'].includes(this.props.card.Ot)) { |
| | | values.verify.uniques = [] |
| | |
| | | import zhCN from '@/locales/zh-CN/model.js' |
| | | import enUS from '@/locales/en-US/model.js' |
| | | import { getActionForm } from '@/templates/zshare/formconfig' |
| | | import asyncSpinComponent from '@/utils/asyncSpinComponent' |
| | | |
| | | import ActionForm from './actionform' |
| | | import VerifyCard from '@/templates/zshare/verifycard' |
| | | import CreateFunc from '@/templates/zshare/createfunc' |
| | | import CreateInterface from '@/templates/zshare/createinterface' |
| | | import VerifyPrint from './verifyprint' |
| | | import VerifyExcelIn from './verifyexcelin' |
| | | import VerifyExcelOut from './verifyexcelout' |
| | | import DragElement from './dragaction' |
| | | import './index.scss' |
| | | |
| | | const { confirm } = Modal |
| | | const VerifyCard = asyncSpinComponent(() => import('@/templates/zshare/verifycard')) |
| | | const VerifyPrint = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyprint')) |
| | | const VerifyExcelIn = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelin')) |
| | | const VerifyExcelOut = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelout')) |
| | | |
| | | class ActionComponent extends Component { |
| | | static propTpyes = { |
| | |
| | | padding-bottom: 5px; |
| | | .ant-modal-body { |
| | | max-height: calc(100vh - 190px); |
| | | min-height: calc(100vh - 300px); |
| | | overflow-y: auto; |
| | | .ant-empty { |
| | | margin: 15vh 8px; |
| | |
| | | } |
| | | |
| | | if (config.version < '1.1') { |
| | | config.version = '1.1' |
| | | if (config.setting.interType === 'inner' && !config.setting.innerFunc) { |
| | | config.setting.interType = 'system' |
| | | } |
| | |
| | | }) |
| | | } |
| | | |
| | | config.version = '1.1' |
| | | if (config.version < '1.2') { |
| | | config.version = '1.2' |
| | | // 兼容功能按钮 |
| | | config.action = config.action.map(item => { |
| | | if (item.execMode) { |
| | | item.OpenType = 'funcbutton' |
| | | } |
| | | return item |
| | | }) |
| | | } |
| | | |
| | | config.Template = 'CommonTable' |
| | | |
| | | return config |
| | |
| | | } |
| | | |
| | | if (config.version < '1.1') { |
| | | config.version = '1.1' |
| | | if (config.setting.interType === 'inner' && !config.setting.innerFunc) { |
| | | config.setting.interType = 'system' |
| | | } |
| | |
| | | }) |
| | | } |
| | | |
| | | config.version = '1.1' |
| | | if (config.version < '1.2') { |
| | | config.version = '1.2' |
| | | // 兼容功能按钮 |
| | | config.action = config.action.map(item => { |
| | | if (item.execMode) { |
| | | item.OpenType = 'funcbutton' |
| | | } |
| | | return item |
| | | }) |
| | | } |
| | | |
| | | config.Template = 'SubTable' |
| | | |
| | | return config |
| | |
| | | for (let i = 0; i < 6; i++) { |
| | | name.push(_options.substr(Math.floor(Math.random() * 26), 1)) |
| | | } |
| | | name.splice(3, 0, new Date().getTime()) |
| | | return name.join('') |
| | | } |
| | | |
| | |
| | | mainlogo: res.indexlogo || '', |
| | | doclogo: res.doclogo || '', |
| | | style: res.CSS || '', |
| | | showline: res.split_line_show || 'true', |
| | | webSite: res.WebSite || '' |
| | | } |
| | | |
| | |
| | | window.GLOB.style = systemMsg.style |
| | | |
| | | if (window.GLOB.style && options.styles[window.GLOB.style]) { |
| | | document.body.className = options.styles[window.GLOB.style] |
| | | document.body.className = options.styles[window.GLOB.style] + ' ' + (res.split_line_show === 'false' ? 'hidden-split-line' : '') |
| | | } |
| | | |
| | | if (res.titlelogo && window.GLOB.favicon !== res.titlelogo) { |
| | |
| | | const TableComponent = asyncComponent(() => import('@/templates/sharecomponent/tablecomponent')) |
| | | |
| | | sessionStorage.setItem('isEditState', 'true') |
| | | document.body.className = '' |
| | | |
| | | class MenuDesign extends Component { |
| | | state = { |
| | |
| | | config.parentId = 'BillPrintTemp' |
| | | config.MenuName = MenuName |
| | | config.MenuNo = MenuNo |
| | | config.firstCount = config.firstCount || 5 |
| | | config.everyPCount = config.everyPCount || 5 |
| | | config.firstCount = config.firstCount || 15 |
| | | config.everyPCount = config.everyPCount || 15 |
| | | config.lastCount = config.lastCount || '' |
| | | } |
| | | |
| | |
| | | item.subtabs.forEach(tab => { |
| | | traversal(tab.components) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | traversal(item.components) |
| | | } else if (item.type === 'card' || (item.type === 'table' && item.subtype === 'tablecard')) { |
| | | item.action && item.action.forEach(btn => { |
| | | buttons.push(`select '${btn.uuid}' as menuid, '${item.name + '-' + btn.label}' as menuname, '${_sort * 10}' as Sort`) |
| | |
| | | item.subtabs.forEach(tab => { |
| | | tab.components = this.filterConfig(tab.components) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | item.components = this.filterConfig(item.components) |
| | | } else if (item.type === 'table' && item.subtype === 'normaltable') { |
| | | item.search = item.search.filter(a => !a.origin) |
| | | item.action = item.action.filter(a => !a.origin) |