From fbf25a99e0bc643be89b0f9dd0efed7867f1490e Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 27 七月 2022 18:08:02 +0800 Subject: [PATCH] 2022-07-27 --- src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx | 1 src/views/design/header/editfirstmenu/dragelement/index.scss | 6 src/views/design/sidemenu/editsecmenu/index.scss | 81 - src/menu/sysinterface/settingform/simplescript/index.jsx | 2 src/views/design/header/index.jsx | 48 src/views/design/sidemenu/menuform/index.scss | 18 src/menu/components/table/edit-table/columns/tableIn/index.jsx | 4 src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx | 2 src/components/thawmenu/index.jsx | 1 src/templates/comtableconfig/index.jsx | 3 src/views/design/header/editfirstmenu/index.jsx | 30 src/views/design/header/editfirstmenu/dragelement/index.jsx | 2 src/views/design/sidemenu/thdmenuform/index.jsx | 170 +++ src/locales/zh-CN/model.js | 2 src/views/design/sidemenu/editthdmenu/menuform/index.jsx | 34 src/views/design/sidemenu/menuelement/index.scss | 2 src/api/index.js | 7 src/locales/en-US/model.js | 2 src/views/design/sidemenu/index.jsx | 377 ++++--- src/views/design/sidemenu/editthdmenu/index.jsx | 725 ++------------ src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx | 4 src/views/design/sidemenu/menuform/index.jsx | 22 src/menu/datasource/verifycard/index.jsx | 2 src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx | 2 src/views/design/sidemenu/thdmenuform/index.scss | 0 src/views/design/sidemenu/thdmenuplus/preview/index.jsx | 0 src/views/design/index.scss | 8 src/views/design/sidemenu/menuelement/card.jsx | 47 src/views/design/sidemenu/editsecmenu/index.jsx | 385 +------ src/locales/zh-CN/mob.js | 1 src/menu/components/carousel/data-card/options.jsx | 7 src/views/design/sidemenu/editthdmenu/index.scss | 177 --- src/templates/zshare/verifycard/index.jsx | 14 src/views/design/header/editfirstmenu/index.scss | 79 - src/views/design/sidemenu/thdmenuplus/index.scss | 137 ++ src/views/design/sidemenu/thdmenuplus/preview/index.scss | 0 src/templates/zshare/customscript/index.jsx | 2 src/utils/option.js | 18 src/views/design/sidemenu/thdmenuplus/index.jsx | 309 ++++++ src/locales/en-US/mob.js | 1 40 files changed, 1,183 insertions(+), 1,549 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index 574fa7a..3fce8f4 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -140,12 +140,9 @@ * @description 寰俊涓氬姟璇锋眰 */ wxNginxRequest (url, method, param) { - let _url = window.GLOB.location + ':8080/' + url + let _url = window.GLOB.location + '/' + url if (process.env.NODE_ENV === 'production') { - _url = document.location.origin + ':8080/' + url - } - if (/https/.test(_url)) { - _url = _url.replace(/:8080/g, ':8443') + _url = document.location.origin + '/' + url } if (param) { diff --git a/src/components/thawmenu/index.jsx b/src/components/thawmenu/index.jsx index 3513d13..843b8da 100644 --- a/src/components/thawmenu/index.jsx +++ b/src/components/thawmenu/index.jsx @@ -53,7 +53,6 @@ }) } }) - this.setState({visible: true}) } submit = () => { diff --git a/src/locales/en-US/mob.js b/src/locales/en-US/mob.js index f01e7e8..a284d0c 100644 --- a/src/locales/en-US/mob.js +++ b/src/locales/en-US/mob.js @@ -20,7 +20,6 @@ 'mob.component': '缁勪欢', 'mob.status.open': '鍚敤', 'mob.status.change': '鍒囨崲', - 'mob.status.forbidden': '绂佺敤', 'mob.basemsg': '鍩烘湰淇℃伅', 'mob.query.delete': '纭畾鍒犻櫎鍚楋紵', 'mob.logout.hint': '鎮ㄧ‘瀹氳閫�鍑哄悧?', diff --git a/src/locales/en-US/model.js b/src/locales/en-US/model.js index fc3ed20..e8c73bb 100644 --- a/src/locales/en-US/model.js +++ b/src/locales/en-US/model.js @@ -41,7 +41,6 @@ 'model.menu.level1': 'Level 1 menu', 'model.menu.level2': 'Level 2 menu', 'model.menu.level3': 'Level 3 menu', - 'model.menu.resetorder': 'Are you sure to adjust the menu sequence ?', 'model.menu.basemsg': 'Please complete the basic information !', 'header.menu.basedata': 'The basic information', 'header.menu.table.add': 'Add tables', @@ -150,7 +149,6 @@ 'model.form.color': 'Color', 'model.query.delete': '纭畾鍒犻櫎鍚�?', 'header.form.status.change': '鐘舵�佸垏鎹�', - 'model.status.forbidden': '绂佺敤', 'model.status.open': '鍚敤', 'model.form.funcbutton': 'Function button', 'model.form.execMode': 'Mode', diff --git a/src/locales/zh-CN/mob.js b/src/locales/zh-CN/mob.js index 414cea3..b7f44ec 100644 --- a/src/locales/zh-CN/mob.js +++ b/src/locales/zh-CN/mob.js @@ -20,7 +20,6 @@ 'mob.component': '缁勪欢', 'mob.status.open': '鍚敤', 'mob.status.change': '鍒囨崲', - 'mob.status.forbidden': '绂佺敤', 'mob.basemsg': '鍩烘湰淇℃伅', 'mob.query.delete': '纭畾鍒犻櫎鍚楋紵', 'mob.logout.hint': '鎮ㄧ‘瀹氳閫�鍑哄悧?', diff --git a/src/locales/zh-CN/model.js b/src/locales/zh-CN/model.js index c7d9736..57af105 100644 --- a/src/locales/zh-CN/model.js +++ b/src/locales/zh-CN/model.js @@ -41,7 +41,6 @@ 'model.menu.level1': '涓�绾ц彍鍗�', 'model.menu.level2': '浜岀骇鑿滃崟', 'model.menu.level3': '涓夌骇鑿滃崟', - 'model.menu.resetorder': '纭璋冩暣鑿滃崟椤哄簭鍚楋紵', 'model.menu.basemsg': '璇峰畬鍠勮彍鍗曞熀鏈俊鎭紒', 'header.menu.basedata': '鍩烘湰淇℃伅', 'header.menu.table.add': '娣诲姞琛ㄥ悕', @@ -150,7 +149,6 @@ 'model.form.color': '棰滆壊', 'model.query.delete': '纭畾鍒犻櫎鍚�?', 'header.form.status.change': '鐘舵�佸垏鎹�', - 'model.status.forbidden': '绂佺敤', 'model.status.open': '鍚敤', 'model.form.funcbutton': '鍔熻兘鎸夐挳', 'model.form.execMode': '鎵ц鏂瑰紡', diff --git a/src/menu/components/carousel/data-card/options.jsx b/src/menu/components/carousel/data-card/options.jsx index 36441fe..37104ad 100644 --- a/src/menu/components/carousel/data-card/options.jsx +++ b/src/menu/components/carousel/data-card/options.jsx @@ -59,7 +59,10 @@ required: false, options: [ {value: 'false', label: '鍚�'}, - {value: 'true', label: '鏄�'}, + {value: 'true', label: '鏄�'} + ], + controlFields: [ + {field: 'speed', values: ['true']} ] }, { @@ -67,7 +70,7 @@ field: 'speed', label: '鏃堕棿闂撮殧', initval: wrap.speed || 3, - tooltip: '浣跨敤鑷姩鍒囨崲鏃舵湁鏁堬紝榛樿涓�3绉�', + tooltip: '榛樿涓�3绉�', min: 1, max: 100, precision: 0, diff --git a/src/menu/components/table/edit-table/columns/tableIn/index.jsx b/src/menu/components/table/edit-table/columns/tableIn/index.jsx index 9e83517..61698fb 100644 --- a/src/menu/components/table/edit-table/columns/tableIn/index.jsx +++ b/src/menu/components/table/edit-table/columns/tableIn/index.jsx @@ -80,7 +80,7 @@ render: (text, record) => record.status === 'false' ? ( <div> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopTwoTone style={{marginLeft: '5px'}} twoToneColor="#ff4d4f" /> </div> ) : @@ -133,7 +133,7 @@ render: (text, record) => record.status === 'false' ? ( <div> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopTwoTone style={{marginLeft: '5px'}} twoToneColor="#ff4d4f" /> </div> ) : diff --git a/src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx b/src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx index ba62d69..0c76b5f 100644 --- a/src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx +++ b/src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx @@ -154,7 +154,6 @@ label: Formdict['model.sort'], initVal: card.IsSort || (card.isSub ? 'false' : 'true'), required: true, - // forbidden: card.isSub, options: [{ value: 'true', text: Formdict['model.true'] diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx index 16a205d..ea96ce5 100644 --- a/src/menu/datasource/verifycard/index.jsx +++ b/src/menu/datasource/verifycard/index.jsx @@ -127,7 +127,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : diff --git a/src/menu/sysinterface/settingform/simplescript/index.jsx b/src/menu/sysinterface/settingform/simplescript/index.jsx index 49a666f..42a4ba4 100644 --- a/src/menu/sysinterface/settingform/simplescript/index.jsx +++ b/src/menu/sysinterface/settingform/simplescript/index.jsx @@ -66,7 +66,7 @@ render: (text, record) => record.status === 'false' ? ( <div> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopTwoTone style={{marginLeft: '5px'}} twoToneColor="#ff4d4f" /> </div> ) : diff --git a/src/templates/comtableconfig/index.jsx b/src/templates/comtableconfig/index.jsx index cfcc56e..19d51d2 100644 --- a/src/templates/comtableconfig/index.jsx +++ b/src/templates/comtableconfig/index.jsx @@ -79,9 +79,6 @@ if (!_LongParam) { _config = fromJS(Source.baseConfig).toJS() - if (!menu.isSubtable) { // 涓嶆槸閫夋嫨涓诲瓙琛ㄦ椂锛岄殣钘忔爣绛鹃〉 - _config.tabgroups = [{ uuid: 'tabs', sublist: [] }] - } _config.isAdd = true } else { _config = _LongParam diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx index 9e5fcf7..50df4a3 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx @@ -155,7 +155,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : @@ -206,7 +206,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx index e94f798..fa8b86d 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx @@ -155,7 +155,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : diff --git a/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx b/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx index d882c99..4dad8fb 100644 --- a/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx +++ b/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx @@ -70,7 +70,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : diff --git a/src/templates/zshare/customscript/index.jsx b/src/templates/zshare/customscript/index.jsx index 0a63489..f68cca2 100644 --- a/src/templates/zshare/customscript/index.jsx +++ b/src/templates/zshare/customscript/index.jsx @@ -58,7 +58,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : diff --git a/src/templates/zshare/verifycard/index.jsx b/src/templates/zshare/verifycard/index.jsx index 1bfb556..0ae5a3a 100644 --- a/src/templates/zshare/verifycard/index.jsx +++ b/src/templates/zshare/verifycard/index.jsx @@ -108,7 +108,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : @@ -144,7 +144,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : @@ -218,7 +218,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : @@ -270,7 +270,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : @@ -339,7 +339,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : @@ -406,7 +406,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : @@ -507,7 +507,7 @@ render: (text, record) => record.status === 'false' ? ( <div style={{color: '#ff4d4f'}}> - {this.props.dict['model.status.forbidden']} + 绂佺敤 <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : diff --git a/src/utils/option.js b/src/utils/option.js index 3a893d3..820030e 100644 --- a/src/utils/option.js +++ b/src/utils/option.js @@ -1,7 +1,7 @@ import zhCN from '@/locales/zh-CN/model.js' import enUS from '@/locales/en-US/model.js' import nortable from '@/assets/img/normaltable.jpg' -import mainsubtable from '@/assets/img/mainsubtable.jpg' +// import mainsubtable from '@/assets/img/mainsubtable.jpg' import treepage from '@/assets/img/treepage.jpg' import calendar from '@/assets/img/calendar.jpg' import customImg from '@/assets/img/custom.jpg' @@ -55,14 +55,14 @@ baseconfig: '', isSystem: true }, - { - title: '涓诲瓙琛ㄨ〃鏍�', - type: 'CommonTable', - url: mainsubtable, - baseconfig: '', - isSystem: true, - isSubtable: true - }, + // { + // title: '涓诲瓙琛ㄨ〃鏍�', + // type: 'CommonTable', + // url: mainsubtable, + // baseconfig: '', + // isSystem: true, + // isSubtable: true + // }, { title: '鑷畾涔�', type: 'CustomPage', diff --git a/src/views/design/header/editfirstmenu/dragelement/index.jsx b/src/views/design/header/editfirstmenu/dragelement/index.jsx index bb32453..d707e8b 100644 --- a/src/views/design/header/editfirstmenu/dragelement/index.jsx +++ b/src/views/design/header/editfirstmenu/dragelement/index.jsx @@ -64,7 +64,7 @@ findCard={findCard} /> ))} - <Button type="primary" disabled={!change} onClick={confirm}>淇濆瓨</Button> + <Button type="primary" className="mk-save-menu" disabled={!change} onClick={confirm}>淇濆瓨</Button> <Button onClick={cancel}>鍏抽棴</Button> </div> ) diff --git a/src/views/design/header/editfirstmenu/dragelement/index.scss b/src/views/design/header/editfirstmenu/dragelement/index.scss index 624f645..458e6ad 100644 --- a/src/views/design/header/editfirstmenu/dragelement/index.scss +++ b/src/views/design/header/editfirstmenu/dragelement/index.scss @@ -12,11 +12,7 @@ padding: 0 10px; height: 26px; } - .ant-btn-primary[disabled] { - background-color: #f5f5f5 !important; - border-color: #d9d9d9 !important; - color: rgba(0, 0, 0, 0.35) !important; - } + .btn-group { display: inline-block; } diff --git a/src/views/design/header/editfirstmenu/index.jsx b/src/views/design/header/editfirstmenu/index.jsx index f167ddb..c565b22 100644 --- a/src/views/design/header/editfirstmenu/index.jsx +++ b/src/views/design/header/editfirstmenu/index.jsx @@ -10,7 +10,7 @@ import MenuForm from './menuform' import Utils from '@/utils/utils.js' import Api from '@/api' -import './index.scss' +// import './index.scss' const { confirm } = Modal @@ -37,19 +37,20 @@ editMenuModal = (Menu) => { // 鑿滃崟缂栬緫锛氫慨鏀� const menu = fromJS(Menu).toJS() - if (!is(fromJS(this.state.menulist), fromJS(this.props.menulist))) { + if (this.state.change) { notification.warning({ top: 92, message: '鑿滃崟椤哄簭宸茶皟鏁达紝璇蜂繚瀛橈紒', duration: 5 }) - } else { - this.setState({ - visible: true, - editMenu: menu.card, - loading: false - }) + return } + + this.setState({ + visible: true, + editMenu: menu.card, + loading: false + }) } editMemuSubmit = () => { @@ -82,6 +83,15 @@ } deleteMemu = (item) => { + if (this.state.change) { + notification.warning({ + top: 92, + message: '鑿滃崟椤哄簭宸茶皟鏁达紝璇蜂繚瀛橈紒', + duration: 5 + }) + return + } + let _this = this confirm({ title: `纭畾鍒犻櫎鑿滃崟銆�${item.MenuName}銆嬪悧锛焋, @@ -173,7 +183,7 @@ const { menulist, change } = this.state return ( - <div className="header-edit-box"> + <> <DndProvider backend={HTML5Backend}> <DragElement change={change} @@ -199,7 +209,7 @@ wrappedComponentRef={(inst) => this.editMenuFormRef = inst} /> </Modal> - </div> + </> ) } } diff --git a/src/views/design/header/editfirstmenu/index.scss b/src/views/design/header/editfirstmenu/index.scss index ac8a533..e69de29 100644 --- a/src/views/design/header/editfirstmenu/index.scss +++ b/src/views/design/header/editfirstmenu/index.scss @@ -1,79 +0,0 @@ -.header-edit-box { - .mask { - position: fixed; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - .tipcard { - position: absolute; - min-height: 100px; - font-size: 16px; - border-radius: 6px; - background-size: 100% 100%; - background-repeat: no-repeat; - padding: 15px; - } - .card1 { - left: 30%; - top: 20vh; - width: 230px; - min-height: 100px; - color: #000000; - font-style: oblique; - } - .card2 { - left: 60%; - top: 20vh; - width: 230px; - min-height: 100px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card3 { - left: 30%; - top: 50vh; - width: 230px; - min-height: 140px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card4 { - left: 60%; - top: 50vh; - width: 230px; - min-height: 140px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card5 { - right: 5%; - top: 20vh; - width: 130px; - min-height: 240px; - color: #000000; - padding: 40px 15px 10px; - p { - margin: 0 0 5px; - } - div { - text-align: center; - .new-view { - display: inline-block; - cursor: pointer; - color: #fff; - padding: 2px 10px; - border-radius: 4px; - background-color: #1890ff; - border-color: #1890ff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12); - -webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045); - box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045); - } - } - } - } -} \ No newline at end of file diff --git a/src/views/design/header/index.jsx b/src/views/design/header/index.jsx index 7324d56..eabf65e 100644 --- a/src/views/design/header/index.jsx +++ b/src/views/design/header/index.jsx @@ -1,7 +1,6 @@ import React, {Component} from 'react' import { withRouter } from 'react-router-dom' import {connect} from 'react-redux' -import { is, fromJS } from 'immutable' import { Dropdown, Menu, Modal, notification, Switch, Button, Popover } from 'antd' import { MenuFoldOutlined, SettingOutlined, AppstoreOutlined, DownOutlined, HomeOutlined, ApiOutlined, PlusOutlined, SwapOutlined } from '@ant-design/icons' @@ -53,10 +52,6 @@ changeMenu (value) { // 涓昏彍鍗曞垏鎹� - if (this.props.editLevel) { - // 缂栬緫鐘舵�佷笅锛屼笉鍙垏鎹㈣彍鍗� - return - } if (value.PageParam.OpenType === 'menu') { this.props.modifyMainMenu(value) } else if (value.PageParam.OpenType === 'outpage') { @@ -79,12 +74,21 @@ this.setState({ menulist }) - this.props.modifyMenuTree(menulist) - if (window.GLOB.systemType !== 'production') { // 闈炴寮忕郴缁熼�夋嫨绗竴椤� - this.props.modifyMainMenu(menulist[0] || null) - } else { + let mainMenu = menulist[0] || null + if (this.props.editLevel === 'level1') { + mainMenu = null + } else if (this.props.mainMenu && this.props.mainMenu.MenuID) { + let _menu = menulist.filter(item => item.MenuID === this.props.mainMenu.MenuID)[0] + mainMenu = _menu || mainMenu + + if (!_menu && (this.props.editLevel === 'level2' || this.props.editLevel === 'level3')) { + this.props.resetEditLevel(false) + } } + + this.props.modifyMenuTree(menulist) + this.props.modifyMainMenu(mainMenu) } else { notification.error({ top: 92, @@ -120,7 +124,8 @@ MenuID: snd.MenuID, MenuName: snd.MenuName, PageParam: {Icon: 'folder'}, - children: [] + children: [], + level: 'second' } if (snd.PageParam) { @@ -141,7 +146,8 @@ MenuNo: trd.MenuNo, EasyCode: trd.EasyCode, type: 'CommonTable', // 榛樿鍊间负甯哥敤琛� - OpenType: 'newtab' // 鎵撳紑鏂瑰紡 + OpenType: 'newtab', // 鎵撳紑鏂瑰紡 + level: 'third' } if (trd.LinkUrl && iframes.includes(trd.LinkUrl.split('?')[0])) { @@ -192,11 +198,13 @@ enterEdit = () => { // 杩涘叆缂栬緫鐘舵�� this.props.resetEditLevel('level1') + this.props.modifyMainMenu(null) } exitEdit = () => { // 閫�鍑虹紪杈戠姸鎬� this.props.resetEditLevel(false) + this.props.modifyMainMenu(this.state.menulist[0] || null) } @@ -239,14 +247,6 @@ this.loadmenu() } - UNSAFE_componentWillReceiveProps (nextProps) { - if (!is(fromJS(this.props.menuTree), fromJS(nextProps.menuTree)) && !is(fromJS(this.state.menulist), fromJS(nextProps.menuTree))) { - this.setState({ - menulist: nextProps.menuTree - }) - } - } - componentDidMount () { if (window.GLOB.systemType !== 'production') { setTimeout(() => { @@ -287,10 +287,6 @@ this.reload() }) MKEmitter.addListener('mkUpdateMenuList', this.reload) - } - - shouldComponentUpdate (nextProps, nextState) { - return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) } /** @@ -343,9 +339,9 @@ {/* 杩涘叆缂栬緫鎸夐挳 */} {!editLevel && window.GLOB.systemType !== 'production' && menulist ? <Popover overlayClassName="mk-popover-control-wrap mk-menu-control" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ <div className="mk-popover-control"> - <PlusOutlined onClick={() => this.setState({visible: true, loading: false})} className="mk-edit-menu"/> - <SwapOutlined onClick={this.enterEdit} className="mk-edit-menu"/> - <div style={{display: 'inline-block', minWidth: '32px'}}><ThawMenu ParentId="0" Type="10" className="mk-edit-menu"/></div> + <PlusOutlined onClick={() => this.setState({visible: true, loading: false})}/> + <SwapOutlined onClick={this.enterEdit}/> + <div style={{display: 'inline-block', minWidth: '32px'}}><ThawMenu ParentId="0" Type="10"/></div> </div> } trigger="hover"> <SettingOutlined className="edit-check"/> diff --git a/src/views/design/index.scss b/src/views/design/index.scss index 9d05353..1c544d6 100644 --- a/src/views/design/index.scss +++ b/src/views/design/index.scss @@ -2,6 +2,10 @@ display: flex; flex: auto; min-height: 100%; + + .mk-save-menu[disabled] { + background: #ffffff!important; + } } .mk-design-view { #mk-tabview-wrap { @@ -29,6 +33,10 @@ .mk-swap { transform: rotate(90deg); } + .mk-swap.disabled { + cursor: not-allowed!important; + color: #959595; + } } .mk-menu-control.mk-popover-control-wrap { padding-bottom: 0px; diff --git a/src/views/design/sidemenu/editsecmenu/index.jsx b/src/views/design/sidemenu/editsecmenu/index.jsx index f76f779..c76db28 100644 --- a/src/views/design/sidemenu/editsecmenu/index.jsx +++ b/src/views/design/sidemenu/editsecmenu/index.jsx @@ -3,23 +3,15 @@ import { is, fromJS } from 'immutable' import { DndProvider } from 'react-dnd' import HTML5Backend from 'react-dnd-html5-backend' -import { notification, Modal, Button, Spin } from 'antd' -import { PlusOutlined } from '@ant-design/icons' +import { notification, Modal, Button } from 'antd' import moment from 'moment' -import TransferForm from '@/templates/zshare/basetransferform' + import Utils from '@/utils/utils.js' import DragElement from '../menuelement' import MenuForm from '../menuform' import Api from '@/api' -import zhCN from '@/locales/zh-CN/model.js' -import enUS from '@/locales/en-US/model.js' +import MKEmitter from '@/utils/events.js' import './index.scss' - -import card1 from '@/assets/img/card-bg2.jpg' -import card2 from '@/assets/img/card-bg5.jpg' -import card3 from '@/assets/img/card-bg8.jpg' -import card4 from '@/assets/img/card-bg7.jpg' -import card5 from '@/assets/img/card-bg6.jpg' const { confirm } = Modal @@ -28,42 +20,36 @@ menulist: PropTypes.any, // 浜岀骇鑿滃崟鍒楄〃 menuTree: PropTypes.array, // 涓�绾ц彍鍗曞垪琛� supMenu: PropTypes.object, // 浜岀骇鑿滃崟鎵�瀵瑰簲鐨勪竴绾ц彍鍗� - reload: PropTypes.func, // 鍒锋柊浜岀骇鑿滃崟鏁版嵁 exitEdit: PropTypes.func // 閫�鍑虹紪杈� } state = { - dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, menulist: null, // 鑿滃崟鍒楄〃 - type: '', // 缂栬緫绫诲瀷锛宎dd or edit - title: '', // 妯℃�佹鏍囬 visible: null, // 妯℃�佹鏄惁鍙 formlist: null, // 琛ㄥ崟淇℃伅 editMenu: null, // 缂栬緫鑿滃崟 - thawmenulist: null, // 宸插喕缁撶殑浜岀骇鑿滃崟 - thawMvisible: false, // 瑙i櫎鍐荤粨妯℃�佹 - confirmLoading: false, // 鎻愪氦涓�傘�傘�� - targetKeys: [] // 瑙e喕鑿滃崟鍒楄〃 + loading: false, // 鎻愪氦涓�傘�傘�� + change: false } handlePreviewList = (List) => { this.setState({ - menulist: List + menulist: List, + change: !is(fromJS(List), fromJS(this.props.menulist)) }) } handleMenu = (menu) => { - const { dict } = this.state - // 鑿滃崟缂栬緫锛氫慨鏀广�佸垹闄わ紝濡傝彍鍗曢『搴忓凡鏀瑰彉锛屾彁绀轰繚瀛樿彍鍗曢『搴� - const _this = this - if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { + if (this.state.change) { notification.warning({ top: 92, - message: dict['model.menu.presave'], + message: '鑿滃崟椤哄簭宸茶皟鏁达紝璇蜂繚瀛橈紒', duration: 5 }) - } else if (menu.type === 'close') { + return + } + if (menu.type === 'close') { confirm({ title: `纭畾鍒犻櫎鑿滃崟銆�${menu.card.MenuName}銆嬪悧锛焋, content: '', @@ -74,7 +60,7 @@ } return Api.getSystemConfig(param).then(res => { if (res.status) { - _this.props.reload() + MKEmitter.emit('mkUpdateMenuList') } else { notification.warning({ top: 92, @@ -89,14 +75,12 @@ } else if (menu.type === 'edit') { this.setState({ visible: true, - title: dict['model.edit'] + dict['model.menu'], - type: 'edit', editMenu: menu.card, formlist: [ { // 鐖剁骇鑿滃崟 type: 'select', key: 'parentId', - label: dict['model.super'] + dict['model.menu'], + label: '涓婄骇鑿滃崟', initVal: this.props.supMenu.MenuID, required: true, options: this.props.menuTree @@ -104,7 +88,7 @@ { // 鑿滃崟鍚嶇О type: 'text', key: 'menuName', - label: dict['model.menu'] + dict['model.name'], + label: '鑿滃崟鍚嶇О', initVal: menu.card.MenuName, required: true, readonly: false @@ -112,7 +96,7 @@ { // 鑿滃崟鍥炬爣 type: 'icon', key: 'icon', - label: dict['model.icon'], + label: '鍥炬爣', initVal: menu.card.PageParam.Icon || 'folder', required: true } @@ -122,105 +106,39 @@ } handleSubBtn = (type) => { - const { dict } = this.state - - // 鎿嶄綔鎸夐挳 - if (type === 'add') { // 娣诲姞鏂拌彍鍗� - this.setState({ - visible: true, - title: dict['model.add'] + dict['model.menu'], - type: 'add', - formlist: [ - { // 鐖剁骇鑿滃崟 - type: 'select', - key: 'parentId', - label: dict['model.super'] + dict['model.menu'], - initVal: this.props.supMenu.MenuID, - required: true, - options: this.props.menuTree - }, - { // 鑿滃崟鍚嶇О - type: 'text', - key: 'menuName', - label: dict['model.menu'] + dict['model.name'], - initVal: '', - required: true, - readonly: false - }, - { // 鑿滃崟鍥炬爣 - type: 'icon', - key: 'icon', - label: dict['model.icon'], - initVal: 'folder', - required: true - } - ] - }) - } else if (type === 'thaw') { // 瑙e喕宸叉湁鑿滃崟 - this.setState({ - thawMvisible: true, - targetKeys: [] - }) - Api.getSystemConfig({ - func: 'sPC_Get_FrozenMenu', - ParentID: this.props.supMenu.MenuID, - TYPE: 20 - }).then(res => { - if (res.status) { - this.setState({ - thawmenulist: res.data.map(menu => { - return { - key: menu.MenuID, - title: menu.MenuName - } - }) - }) - } else { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) - } - }) - } else if (type === 'confirm') { // 纭畾鏃跺叆椤哄簭鏀瑰彉锛屽垯鎻愮ず淇濆瓨锛屽惁鍒欓��鍑虹紪杈� - if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { - let _this = this - let param = { - func: 'sPC_Menu_SortUpt', - LText: this.state.menulist.map((item, index) => { - return 'select \'' + item.MenuID + '\' as Menuid,' + (index + 1) * 10 + ' as sort' - }) - } - - param.LText = param.LText.join(' union ') // sql鎷兼帴 - param.LText = Utils.formatOptions(param.LText) // 鍏抽敭瀛楃鏇挎崲锛宐ase64鍔犲瘑 - param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') // 鏃堕棿鎴� - param.secretkey = Utils.encrypt(param.LText, param.timestamp) // md5瀵嗛挜 - - confirm({ - title: this.state.dict['model.menu.resetorder'], - content: '', - onOk() { - return Api.getSystemConfig(param).then(res => { - if (res.status) { - _this.props.reload() - } else { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) - } - }) - }, - onCancel() {} + if (type === 'confirm') { // 淇濆瓨璋冩暣鍚庣殑椤哄簭 + let param = { + func: 'sPC_Menu_SortUpt', + LText: this.state.menulist.map((item, index) => { + return 'select \'' + item.MenuID + '\' as Menuid,' + (index + 1) * 10 + ' as sort' }) - } else { - this.props.exitEdit() } + + param.LText = param.LText.join(' union ') // sql鎷兼帴 + param.LText = Utils.formatOptions(param.LText) // 鍏抽敭瀛楃鏇挎崲锛宐ase64鍔犲瘑 + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') // 鏃堕棿鎴� + param.secretkey = Utils.encrypt(param.LText, param.timestamp) // md5瀵嗛挜 + + confirm({ + title: '纭璋冩暣鑿滃崟椤哄簭鍚楋紵', + content: '', + onOk() { + return Api.getSystemConfig(param).then(res => { + if (res.status) { + MKEmitter.emit('mkUpdateMenuList') + } else { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + }) + }, + onCancel() {} + }) } else if (type === 'close') { // 閫�鍑虹紪杈� - if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { + if (this.state.change) { let _this = this confirm({ @@ -238,138 +156,45 @@ } memuHandleSubmit = () => { - if (this.state.type === 'add') { // 鏂板缓鑿滃崟锛氭彁浜� - this.menuFormRef.handleConfirm().then(values => { - let param = { - ParentID: values.parentId, - MenuID: Utils.getuuid(), - MenuName: values.menuName, - PageParam: JSON.stringify({ - Icon: values.icon + this.menuFormRef.handleConfirm().then(values => { + let param = { + func: 'sPC_SndMenu_Upt', + ParentID: values.parentId, + MenuID: this.state.editMenu.MenuID, + MenuName: values.menuName, + PageParam: JSON.stringify({ + Icon: values.icon + }) + } + this.setState({ + loading: true + }) + Api.getSystemConfig(param).then(res => { + if (res.status) { + this.setState({ + loading: false, + visible: false + }) + MKEmitter.emit('mkUpdateMenuList') + } else { + this.setState({ + loading: false + }) + notification.warning({ + top: 92, + message: res.message, + duration: 5 }) } - param.func = 'sPC_SndMenu_Add' - param.Sort = (this.props.menulist.length + 1) * 10 - this.setState({ - confirmLoading: true - }) - Api.getSystemConfig(param).then(res => { - if (res.status) { - this.setState({ - confirmLoading: false, - visible: false - }) - this.props.reload() - } else { - this.setState({ - confirmLoading: false - }) - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) - } - }) - }, () => {}) - } else if (this.state.type === 'edit') { // 缂栬緫鑿滃崟锛氭彁浜� - this.menuFormRef.handleConfirm().then(values => { - let param = { - func: 'sPC_SndMenu_Upt', - ParentID: values.parentId, - MenuID: this.state.editMenu.MenuID, - MenuName: values.menuName, - PageParam: JSON.stringify({ - Icon: values.icon - }) - } - this.setState({ - confirmLoading: true - }) - Api.getSystemConfig(param).then(res => { - if (res.status) { - this.setState({ - confirmLoading: false, - visible: false - }) - this.props.reload() - } else { - this.setState({ - confirmLoading: false - }) - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) - } - }) - }, () => {}) - } + }) + }, () => {}) } memuHandleCancel = () => { // 鍙栨秷鎿嶄綔锛屽叧闂ā鎬佹 this.setState({ visible: false, - type: '', formlist: null, editMenu: null - }) - } - - thawMemuSubmit = () => { // 瑙e喕鑿滃崟锛屾彁浜わ紝瀛樺湪澶氫釜鏃讹紝寰幆鎻愪氦 - const { targetKeys } = this.state - - if (targetKeys.length === 0) { - notification.warning({ - top: 92, - message: this.state.dict['form.required.select'] + this.state.dict['model.menu'], - duration: 5 - }) - } else { - this.setState({ - confirmLoading: true - }) - let defers = targetKeys.map(item => { - return new Promise((resolve) => { - Api.getSystemConfig({ - func: 'sPC_MainMenu_ReDel', - MenuID: item - }).then(res => { - if (res.status) { - resolve('') - } else { - resolve(res.message) - } - }) - }) - }) - Promise.all(defers).then(res => { - let msg = res.filter(Boolean)[0] - if (msg) { - notification.error({ - top: 92, - message: msg, - duration: 10 - }) - } else { - this.setState({ - confirmLoading: false, - thawMvisible: false, - targetKeys: [], - thawmenulist: null - }) - this.props.reload() - } - }) - } - } - - thawMemuCancel = () => { // 瑙e喕鑿滃崟鍙栨秷 - this.setState({ - thawMvisible: false, - targetKeys: [], - thawmenulist: null }) } @@ -382,80 +207,44 @@ UNSAFE_componentWillReceiveProps (nextProps) { if (!is(fromJS(this.props.menulist), fromJS(nextProps.menulist))) { this.setState({ - menulist: nextProps.menulist + menulist: nextProps.menulist, + change: false }) } } render () { - const { dict } = this.state + const { change, loading } = this.state return ( - <div className="second-edit-box"> - <div className="mask"> - <div className="tipcard card1" style={{backgroundImage: 'url(' + card1 + ')'}}> - 鎷栧姩浜岀骇鑿滃崟鍙皟鏁撮『搴忥紝椤哄簭璋冩暣鍚庯紝璇风偣鍑荤‘瀹氭寜閽繚瀛樸�� - </div> - <div className="tipcard card2" style={{backgroundImage: 'url(' + card2 + ')'}}> - 鐐瑰嚮缂栬緫鍥炬爣鍙慨鏀硅彍鍗曞睘鎬э紝鐐瑰嚮鍒犻櫎鍥炬爣鍙垹闄よ彍鍗曘�� - </div> - <div className="tipcard card3" style={{backgroundImage: 'url(' + card3 + ')'}}> - 鐐瑰嚮瑙i櫎鍐荤粨鎸夐挳锛屽彲杩樺師宸插垹闄ょ殑浜岀骇鑿滃崟銆� - </div> - <div className="tipcard card4" style={{backgroundImage: 'url(' + card4 + ')'}}> - 鐐瑰嚮娣诲姞鍥炬爣锛屽彲鏂板浜岀骇鑿滃崟銆� - </div> - <div className="tipcard card5" style={{backgroundImage: 'url(' + card5 + ')'}}> - <p>缂栬緫鐘舵�佷腑锛岃彍鍗曚箣澶栧尯鍩熶細閿佸畾锛屾煡鐪嬬郴缁熸暟鎹鐐瑰嚮銆�</p> - <div> - <span className="new-view" onClick={() => {window.open('#/main')}} >鏂伴〉闈�</span> - </div> - </div> - </div> + <> <DndProvider backend={HTML5Backend}> - {this.state.menulist && this.state.menulist.length > 0 ? <DragElement + <DragElement list={this.state.menulist} handlePreviewList={this.handlePreviewList} handleMenu={this.handleMenu} - /> : null} + /> </DndProvider> - <div className="menu-add" onClick={() => {this.handleSubBtn('add')}}> - <PlusOutlined /> - </div> <div className="menu-btn"> - <Button type="primary" onClick={() => {this.handleSubBtn('thaw')}}>{dict['model.thaw'] + dict['model.menu']}</Button> - <Button type="primary" onClick={() => {this.handleSubBtn('confirm')}}>{dict['model.confirm']}</Button> - <Button onClick={() => {this.handleSubBtn('close')}}>{dict['model.close']}</Button> + <Button type="primary" className="mk-save-menu" disabled={!change} onClick={() => {this.handleSubBtn('confirm')}}>淇濆瓨</Button> + <Button onClick={() => {this.handleSubBtn('close')}}>鍏抽棴</Button> </div> <Modal - title={this.state.title} + title="淇敼鑿滃崟" visible={this.state.visible} onOk={this.memuHandleSubmit} - confirmLoading={this.state.confirmLoading} + confirmLoading={loading} onCancel={this.memuHandleCancel} destroyOnClose > {this.state.formlist ? <MenuForm - dict={dict} inputSubmit={this.memuHandleSubmit} formlist={this.state.formlist} wrappedComponentRef={(inst) => this.menuFormRef = inst} /> : null} </Modal> - <Modal - title={dict['model.thaw'] + dict['model.menu']} - width={600} - visible={this.state.thawMvisible} - onOk={this.thawMemuSubmit} - confirmLoading={this.state.confirmLoading} - onCancel={this.thawMemuCancel} - destroyOnClose - > - {!this.state.thawmenulist && <Spin style={{marginLeft: 'calc(50% - 22px)', marginTop: '70px', marginBottom: '70px'}} size="large" />} - {this.state.thawmenulist && <TransferForm onChange={(vals) => this.setState({targetKeys: vals})} menulist={this.state.thawmenulist}/>} - </Modal> - </div> + </> ) } } diff --git a/src/views/design/sidemenu/editsecmenu/index.scss b/src/views/design/sidemenu/editsecmenu/index.scss index 59277cb..e69de29 100644 --- a/src/views/design/sidemenu/editsecmenu/index.scss +++ b/src/views/design/sidemenu/editsecmenu/index.scss @@ -1,81 +0,0 @@ -.second-edit-box { - position: relative; - z-index: 10; - .mask { - position: fixed; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - .tipcard { - position: absolute; - min-height: 100px; - font-size: 16px; - border-radius: 6px; - background-size: 100% 100%; - background-repeat: no-repeat; - padding: 15px; - } - .card1 { - left: 30%; - top: 20vh; - width: 230px; - min-height: 100px; - color: #000000; - font-style: oblique; - } - .card2 { - left: 60%; - top: 20vh; - width: 230px; - min-height: 100px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card3 { - left: 30%; - top: 50vh; - width: 230px; - min-height: 140px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card4 { - left: 60%; - top: 50vh; - width: 230px; - min-height: 140px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card5 { - right: 5%; - top: 20vh; - width: 130px; - min-height: 240px; - color: #000000; - padding: 40px 15px 10px; - p { - margin: 0 0 5px; - } - div { - text-align: center; - .new-view { - display: inline-block; - cursor: pointer; - color: #fff; - padding: 2px 10px; - border-radius: 4px; - background-color: #1890ff; - border-color: #1890ff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12); - -webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045); - box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045); - } - } - } - } -} \ No newline at end of file diff --git a/src/views/design/sidemenu/editthdmenu/index.jsx b/src/views/design/sidemenu/editthdmenu/index.jsx index ae97e33..5a6d731 100644 --- a/src/views/design/sidemenu/editthdmenu/index.jsx +++ b/src/views/design/sidemenu/editthdmenu/index.jsx @@ -5,34 +5,21 @@ import { DndProvider } from 'react-dnd' import { withRouter } from 'react-router-dom' import HTML5Backend from 'react-dnd-html5-backend' -import { notification, Modal, Button, Spin, Col, Card, Tabs, Row, Input } from 'antd' -import { PlusOutlined } from '@ant-design/icons' +import { notification, Modal, Button } from 'antd' import moment from 'moment' import Api from '@/api' -import { sysTemps } from '@/utils/option.js' +import MKEmitter from '@/utils/events.js' import zhCN from '@/locales/zh-CN/model.js' import enUS from '@/locales/en-US/model.js' -import mainsubtable from '@/assets/img/mainsubtable.jpg' -import treepage from '@/assets/img/treepage.jpg' -import calendar from '@/assets/img/calendar.jpg' -import customImg from '@/assets/img/custom.jpg' import MkIcon from '@/components/mk-icon' -import Preview from './preview' -import MenuForm from './menuform' -import TransferForm from '@/templates/zshare/basetransferform' import Utils from '@/utils/utils.js' import MenuUtils from '@/utils/utils-custom.js' import DragElement from '../menuelement' import asyncLoadComponent from '@/utils/asyncLoadComponent' import './index.scss' -import card1 from '@/assets/img/card-bg2.jpg' -import card2 from '@/assets/img/card-bg5.jpg' -import card3 from '@/assets/img/card-bg8.jpg' -import card4 from '@/assets/img/card-bg7.jpg' -import card5 from '@/assets/img/card-bg6.jpg' - +const MenuForm = asyncLoadComponent(() => import('../thdmenuform')) const ComTableConfig = asyncLoadComponent(() => import('@/templates/comtableconfig')) const TreePageConfig = asyncLoadComponent(() => import('@/templates/treepageconfig')) const CalendarPageConfig = asyncLoadComponent(() => import('@/templates/calendarconfig')) @@ -41,12 +28,9 @@ const SubTable = asyncLoadComponent(() => import('@/templates/subtableconfig')) const { confirm } = Modal -const { TabPane } = Tabs -const { Search } = Input class EditMenu extends Component { static propTpyes = { - reload: PropTypes.func, // 鑿滃崟淇敼鍚庡埛鏂� menulist: PropTypes.any, // 涓夌骇鑿滃崟鍒楄〃 exitEdit: PropTypes.func, // 閫�鍑虹紪杈戠姸鎬� supMenu: PropTypes.object, // 瀵瑰簲鐨勪笂绾ц彍鍗� @@ -55,19 +39,10 @@ state = { dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, - thawmenulist: null, // 宸插喕缁撶殑浜岀骇鑿滃崟 - type: '', // 鎿嶄綔绫诲瀷锛屾柊寤烘垨缂栬緫鑿滃崟 - thawMvisible: false, // 瑙i櫎鍐荤粨妯℃�佹 confirmLoading: false, // 鎻愪氦涓�傘�傘�� - selectTemp: '', // 閫夋嫨妯℃澘 - usedTemplates: null, // 宸蹭娇鐢ㄦā鏉垮垪琛� - tempSearchKey: '', // 鑿滃崟鍚嶇О杩囨护鍊� loading: false, // 缂栬緫鑿滃崟鎴栦娇鐢ㄥ凡浣跨敤妯℃澘鏃讹紝鑾峰彇閰嶇疆淇℃伅 - preview: null, // 鍥剧墖棰勮url - pretemplate: null, // 棰勮妯℃澘 btnParam: null, // 缂栬緫鎸夐挳鐨勯厤缃俊鎭� menulist: null, // 缂栬緫涓殑鑿滃崟 - sysTemplates: sysTemps, // 绯荤粺妯℃澘 tabview: '', // 閫夋嫨妯℃澘绐楀彛锛坱emplate锛夈�佸熀纭�琛ㄦ牸閰嶇疆锛圕ommonTable锛夈�佽〃鍗曪紙Modal锛夈�佸瓙琛紙SubTable锛� editMenu: null, // 缂栬緫鑿滃崟 editAction: null, // 缂栬緫鎸夐挳 @@ -79,8 +54,8 @@ btnTab: null, // 鎵撳紑鏂版爣绛炬垨褰撳墠椤甸潰鍒锋柊鐨勬寜閽� btnTabConfig: null, // 鎵撳紑鏂版爣绛炬寜閽厤缃� handleMVisible: false, // 娣诲姞鎴栦慨鏀硅彍鍗曟ā鎬佹锛堣鑹叉潈闄愬垎閰嶇瓑锛� - sysMenu: false, // 娣诲姞鎴栫紪杈戣彍鍗曪紙瑙掕壊鏉冮檺鍒嗛厤绛夛級 - targetKeys: [] // 瑙e喕鑿滃崟鍒楄〃 + sysMenu: null, // 娣诲姞鎴栫紪杈戣彍鍗曪紙瑙掕壊鏉冮檺鍒嗛厤绛夛級 + change: false } /** @@ -97,7 +72,8 @@ */ handlePreviewList = (List) => { this.setState({ - menulist: List + menulist: List, + change: !is(fromJS(List), fromJS(this.props.menulist)) }) } @@ -108,15 +84,16 @@ * 3銆佽彍鍗曠紪杈戯紝鏌ヨ鑿滃崟閰嶇疆淇℃伅锛屼俊鎭纭紝杩涘叆瀵瑰簲缂栬緫椤甸潰 */ handleMenu = (menu) => { - const _this = this - - if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { + if (this.state.change) { notification.warning({ top: 92, message: this.state.dict['model.menu.presave'], duration: 5 }) - } else if (menu.type === 'close') { + return + } + + if (menu.type === 'close') { confirm({ title: `纭畾鍒犻櫎鑿滃崟銆�${menu.card.MenuName}銆嬪悧锛焋, content: '', @@ -127,7 +104,7 @@ } return Api.getSystemConfig(param).then(res => { if (res.status) { - _this.props.reload() + MKEmitter.emit('mkUpdateMenuList') } else { notification.warning({ top: 92, @@ -142,9 +119,9 @@ } else if (menu.type === 'edit') { let _menu = fromJS(menu.card).toJS() - if (_menu.PageParam && (_menu.PageParam.Template === 'RolePermission' || _menu.PageParam.Template === 'NewPage')) { // 鍗曢〉闈慨鏀� + if (['RolePermission', 'NewPage'].includes(_menu.PageParam.Template)) { // 鍗曢〉闈慨鏀� _menu.Template = _menu.PageParam.Template - _menu.url = _menu.PageParam.url + _menu.url = _menu.PageParam.url || '' _menu.fstMenuId = _menu.FstId _menu.supMenuList = this.props.supMenuList @@ -158,181 +135,103 @@ return } + // let _param = '' + // if (card.type === 'CustomPage') { + // _param = { + // MenuType: 'custom', + // MenuId: card.MenuID, + // ParentId: card.ParentId, + // MenuName: card.MenuName, + // MenuNo: card.MenuNo + // } + // _param = window.btoa(window.encodeURIComponent(JSON.stringify(_param))) + // } + // window.open(`#/menudesign/${_param}`)} - let param = { - func: 'sPC_Get_LongParam', - MenuID: _menu.MenuID - } + // let param = { + // func: 'sPC_Get_LongParam', + // MenuID: _menu.MenuID + // } - this.setState({ - loading: true - }) + // this.setState({ + // loading: true + // }) - Api.getSystemConfig(param).then(res => { - if (res.status) { - let _LongParam = '' - if (res.LongParam) { - try { - _LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam))) - } catch (e) { - console.warn('Parse Failure') - _LongParam = '' - } - } + // Api.getSystemConfig(param).then(res => { + // if (res.status) { + // let _LongParam = '' + // if (res.LongParam) { + // try { + // _LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam))) + // } catch (e) { + // console.warn('Parse Failure') + // _LongParam = '' + // } + // } - _menu.LongParam = _LongParam - _menu.fstMenuId = _menu.FstId - _menu.supMenuList = this.props.supMenuList - _menu.fstMenuList = this.props.menuTree - _menu.open_edition = res.open_edition || '' + // _menu.LongParam = _LongParam + // _menu.fstMenuId = _menu.FstId + // _menu.supMenuList = this.props.supMenuList + // _menu.fstMenuList = this.props.menuTree + // _menu.open_edition = res.open_edition || '' - // 妫�娴嬫ā鏉挎槸鍚﹀瓨鍦� - let _Template = this.state.sysTemplates.filter(temp => temp.type === _menu.PageParam.Template) - - // 妯℃澘涓嶅瓨鍦ㄦ椂閿欒鎻愮ず - if (_Template.length === 0) { - notification.warning({ - top: 92, - message: '鑿滃崟妯℃澘涓㈠け锛岃閲嶆柊閫夋嫨妯℃澘锛�', - duration: 5 - }) - - this.setState({ - type: 'edit', - editMenu: _menu, - loading: false, - tabview: 'template' - }, () => { - document.getElementById('root').style.overflowY = 'hidden' - }) - } else { - this.setState({ - type: 'edit', - editMenu: _menu, - loading: false, - tabview: _menu.PageParam.Template - }, () => { - document.getElementById('root').style.overflowY = 'hidden' - }) - } - } else { - this.setState({ - loading: false - }) - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) - } - }) + + // this.setState({ + // editMenu: _menu, + // loading: false, + // tabview: _menu.PageParam.Template + // }, () => { + // document.getElementById('root').style.overflowY = 'hidden' + // }) + // } else { + // this.setState({ + // loading: false + // }) + // notification.warning({ + // top: 92, + // message: res.message, + // duration: 5 + // }) + // } + // }) } } handleSubBtn = (type) => { // 鎿嶄綔鎸夐挳锛氭坊鍔犮�佽В闄ゅ喕缁撱�佺‘璁ゅ強鍏抽棴 - if (type === 'add') { // 鐐瑰嚮娣诲姞鏃讹紝灞曞紑妯℃澘 - if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { - notification.warning({ - top: 92, - message: this.state.dict['model.menu.presave'], - duration: 5 + if (type === 'confirm') { + let param = { + func: 'sPC_Menu_SortUpt', + LText: this.state.menulist.map((item, index) => { + return 'select \'' + item.MenuID + '\' as Menuid,' + (index + 1) * 10 + ' as sort' }) - return } - this.setState({ - tabview: 'template', - editMenu: { - MenuID: Utils.getuuid(), - MenuName: '', - MenuNo: '', - type: '', - PageParam: '', - LongParam: '', - isSubtable: '', // 鏄惁涓轰富瀛愯〃 - ParentId: this.props.supMenu.MenuID, - supMenuList: this.props.supMenuList, - fstMenuId: this.props.mainMenu.MenuID, - fstMenuList: this.props.menuTree, - menuSort: (this.props.menulist.length + 1) * 10 // 鏂板缓鑿滃崟璁剧疆鎺掑簭 - } - }, () => { - document.getElementById('root').style.overflowY = 'hidden' - }) - } else if (type === 'thaw') { - if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { - notification.warning({ - top: 92, - message: this.state.dict['model.menu.presave'], - duration: 5 - }) - return - } - this.setState({ - thawMvisible: true, - targetKeys: [] - }) - Api.getSystemConfig({ - func: 'sPC_Get_FrozenMenu', - ParentID: this.props.supMenu.MenuID, - TYPE: 30 - }).then(res => { - if (res.status) { - this.setState({ - thawmenulist: res.data.map(menu => { - return { - key: menu.MenuID, - title: menu.MenuName - } - }) - }) - } else { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) - } - }) - } else if (type === 'confirm') { - if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { - let _this = this - let param = { - func: 'sPC_Menu_SortUpt', - LText: this.state.menulist.map((item, index) => { - return 'select \'' + item.MenuID + '\' as Menuid,' + (index + 1) * 10 + ' as sort' - }) - } + param.LText = param.LText.join(' union ') // sql鎷兼帴 + param.LText = Utils.formatOptions(param.LText) // 鍏抽敭瀛楃鏇挎崲锛宐ase64鍔犲瘑 + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') // 鏃堕棿鎴� + param.secretkey = Utils.encrypt(param.LText, param.timestamp) // md5瀵嗛挜 - param.LText = param.LText.join(' union ') // sql鎷兼帴 - param.LText = Utils.formatOptions(param.LText) // 鍏抽敭瀛楃鏇挎崲锛宐ase64鍔犲瘑 - param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') // 鏃堕棿鎴� - param.secretkey = Utils.encrypt(param.LText, param.timestamp) // md5瀵嗛挜 - - confirm({ - title: this.state.dict['model.menu.resetorder'], - content: '', - onOk() { - return Api.getSystemConfig(param).then(res => { - if (res.status) { - _this.props.reload() - } else { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) - } - }) - }, - onCancel() {} - }) - } else { - this.props.exitEdit() - } + confirm({ + title: '纭璋冩暣鑿滃崟椤哄簭鍚楋紵', + content: '', + onOk() { + return Api.getSystemConfig(param).then(res => { + if (res.status) { + MKEmitter.emit('mkUpdateMenuList') + } else { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + }) + }, + onCancel() {} + }) } else if (type === 'close') { - if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { + if (this.state.change) { let _this = this confirm({ @@ -347,248 +246,6 @@ this.props.exitEdit() } } - } - - thawMemuSubmit = () => { - const { targetKeys } = this.state - // 涓夌骇鑿滃崟瑙i櫎鍐荤粨 - if (targetKeys.length === 0) { - notification.warning({ - top: 92, - message: this.state.dict['form.required.select'] + this.state.dict['model.menu'], - duration: 5 - }) - } else { - this.setState({ - confirmLoading: true - }) - let defers = targetKeys.map(item => { - return new Promise((resolve) => { - Api.getSystemConfig({ - func: 'sPC_MainMenu_ReDel', - MenuID: item - }).then(res => { - if (res.status) { - resolve('') - } else { - resolve(res.message) - } - }) - }) - }) - Promise.all(defers).then(res => { - let msg = res.filter(Boolean)[0] - if (msg) { - notification.error({ - top: 92, - message: msg, - duration: 10 - }) - } else { - this.setState({ - confirmLoading: false, - thawMvisible: false, - targetKeys: [], - thawmenulist: null - }) - this.props.reload() - } - }) - } - } - - thawMemuCancel = () => { - // 瑙i櫎鍐荤粨-鍙栨秷 - this.setState({ - thawMvisible: false, - thawmenulist: null, - targetKeys: [] - }) - } - - previewPicture = (template) => { - if (template.disabled) return - // 鍥剧墖棰勮 - this.setState({ - preview: template.url, - pretemplate: template - }) - } - - cancelPrePicture = () => { - // 鍏抽棴鍥剧墖棰勮 - this.setState({ - preview: null - }) - } - - /** - * @description 浣跨敤妯℃澘 - * 1銆佷娇鐢ㄧ郴缁熸ā鏉挎椂锛屼娇鐢ㄧ郴缁熼厤缃� - * 2銆佷娇鐢ㄥ凡鏈夎彍鍗曟ā鏉挎椂锛岃幏鍙栬彍鍗曢厤缃俊鎭紝鏍囪涓簎ser锛堝鍒惰彍鍗曟寜閽級 - */ - useTemplate = (template, useType) => { - let editMenu = fromJS(this.state.editMenu).toJS() - - editMenu.fstMenuId = this.props.mainMenu.MenuID - editMenu.fstMenuList = this.props.menuTree - - if (useType === 'sys' && (template.type === 'RolePermission' || template.type === 'NewPage')) { // 鐙珛椤甸潰 - let _menu = { - ...editMenu, - MenuID: Utils.getuuid(), - MenuName: template.title, - Template: template.type, - ParentId: this.props.supMenu.MenuID, - menuSort: (this.props.menulist.length + 1) * 10, - isSystem: true - } - - this.setState({ - handleMVisible: true, - sysMenu: _menu - }) - return - } else if (template.type === 'CustomPage') { - let _menu = { - ...editMenu, - MenuID: Utils.getuuid(), - MenuName: template.title, - Template: template.type, - ParentId: this.props.supMenu.MenuID, - OriginMenuId: template.uuid || '', - menuSort: (this.props.menulist.length + 1) * 10, - isSystem: true - } - - this.setState({ - handleMVisible: true, - sysMenu: _menu - }) - return - } - - new Promise(resolve => { - if (useType === 'sys') { - resolve(true) - } else { - let param = { - func: 'sPC_Get_LongParam', - MenuID: template.uuid - } - this.setState({ - loading: true - }) - - Api.getSystemConfig(param).then(result => { - if (!result.status) { - notification.warning({ - top: 92, - message: result.message, - duration: 5 - }) - resolve(false) - } else { - let _config = '' - if (result.LongParam) { - try { - _config = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam))) - _config.type = 'user' - } catch (e) { - console.warn('Parse Failure') - _config = '' - } - } - - if (_config) { - template.baseconfig = _config - resolve(true) - } else { - notification.warning({ - top: 92, - message: '妯℃澘淇℃伅鑾峰彇澶辫触锛�', - duration: 5 - }) - resolve(false) - } - } - }) - } - }).then(res => { - if (!res) { // 閿欒鏃讹紝閲嶇疆鐘舵�� - this.setState({ - loading: false - }) - return - } - - // 閫夋嫨妯℃澘锛氭坊鍔犺彍鍗曟椂(涓嶅瓨鍦╩enuId) - let _PageParam = { - OpenType: editMenu.PageParam ? editMenu.PageParam.OpenType : 'newtab', - Template: template.type - } - - this.setState({ - loading: false, - tabview: template.type, - editMenu: { - ...editMenu, - type: template.type, - PageParam: _PageParam, - LongParam: template.baseconfig, - isSubtable: template.isSubtable - } - }) - - document.getElementById('root').style.overflowY = 'hidden' - }) - } - - getUsedTemplate = () => { - let { sysTemplates } = this.state - let memberLevel = Utils.getMemberLevel() - const illust = { // 妯℃澘鍥剧墖锛岀敤浜庡凡浣跨敤妯℃澘 - CommonTable: mainsubtable, - TreePage: treepage, - CalendarPage: calendar, - CustomPage: customImg - } - - Api.getSystemConfig({func: 'sPC_Get_UserTemp', TypeCharTwo: 'menu'}).then(res => { - let _templates = [] - - res.UserTemp.forEach(temp => { - if (temp.Template === 'NewPage' || temp.Template === 'RolePermission') { - return - } else if (temp.Template === 'CustomPage' && memberLevel < 20) { - temp.disabled = true - temp.disTitle = '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��' - } - - _templates.push({ - uuid: temp.MenuID, - title: temp.MenuName, - type: temp.Template, - url: illust[temp.Template], - disabled: temp.disabled || false, - disTitle: temp.disTitle || '' - }) - }) - - sysTemplates = sysTemplates.map(temp => { - if (temp.type === 'CustomPage' && memberLevel < 20) { - temp.disabled = true - temp.disTitle = '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��' - } - - return temp - }) - - this.setState({ - usedTemplates: _templates, - sysTemplates: sysTemplates - }) - }) } exittabview = () => { @@ -616,17 +273,6 @@ const { sysMenu } = this.state let sysTemplates = fromJS(this.state.sysTemplates).toJS() - // 瑙掕壊鏉冮檺鍒嗛厤妯℃澘锛屽彧鍙互娣诲姞涓�娆� - // if (sysMenu.isSystem && (sysMenu.Template === 'RolePermission')) { - // sysTemplates = sysTemplates.map(temp => { - // if (temp.type === sysMenu.type) { - // temp.hidden = true - // } - - // return temp - // }) - // } - this.menuFormRef.handleConfirm().then(res => { let PageParam = { Template: sysMenu.Template, @@ -653,10 +299,6 @@ LTexttb: '' } - if (sysMenu.menuSort) { // 鑿滃崟鏂板缓鏃惰缃帓搴� - param.Sort = sysMenu.menuSort - } - param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt(param.LText, param.timestamp) @@ -664,33 +306,29 @@ confirmLoading: true }) - if (sysMenu.Template === 'CustomPage' && sysMenu.OriginMenuId) { - this.copyMenu(param, sysMenu.OriginMenuId) - } else { - Api.getSystemConfig(param).then(response => { - if (response.status) { - this.setState({ - sysTemplates: sysTemplates, - confirmLoading: false, - handleMVisible: false, - sysMenu: '', - tabview: '' - }) - - this.props.reload() - document.getElementById('root').style.overflowY = 'unset' - } else { - this.setState({ - confirmLoading: false - }) - notification.warning({ - top: 92, - message: response.message, - duration: 5 - }) - } - }) - } + Api.getSystemConfig(param).then(response => { + if (response.status) { + this.setState({ + sysTemplates: sysTemplates, + confirmLoading: false, + handleMVisible: false, + sysMenu: '', + tabview: '' + }) + + MKEmitter.emit('mkUpdateMenuList') + document.getElementById('root').style.overflowY = 'unset' + } else { + this.setState({ + confirmLoading: false + }) + notification.warning({ + top: 92, + message: response.message, + duration: 5 + }) + } + }) }) } @@ -731,7 +369,7 @@ tabview: '' }) - this.props.reload() + MKEmitter.emit('mkUpdateMenuList') document.getElementById('root').style.overflowY = 'unset' } else { this.setState({ @@ -758,8 +396,6 @@ } UNSAFE_componentWillMount () { - this.getUsedTemplate() - this.setState({ menulist: this.props.menulist }) @@ -768,37 +404,17 @@ UNSAFE_componentWillReceiveProps (nextProps) { if (!is(fromJS(this.props.menulist), fromJS(nextProps.menulist))) { this.setState({ - menulist: nextProps.menulist + menulist: nextProps.menulist, + change: false }) } } render () { - const { dict } = this.state + const { change } = this.state + return ( <div className="third-edit-box"> - {!this.state.tabview ? - <div className="mask"> - <div className="tipcard card1" style={{backgroundImage: 'url(' + card1 + ')'}}> - 鎷栧姩涓夌骇鑿滃崟鍙皟鏁撮『搴忥紝椤哄簭璋冩暣鍚庯紝璇风偣鍑荤‘瀹氭寜閽繚瀛樸�� - </div> - <div className="tipcard card2" style={{backgroundImage: 'url(' + card2 + ')'}}> - 鐐瑰嚮缂栬緫鍥炬爣浼氭牴鎹彍鍗曟ā鏉匡紝杩涘叆鐩稿簲鐨勬ā鏉跨紪杈戦〉闈紝鐐瑰嚮鍒犻櫎鍥炬爣鍙垹闄よ彍鍗曘�� - </div> - <div className="tipcard card3" style={{backgroundImage: 'url(' + card3 + ')'}}> - 鐐瑰嚮瑙i櫎鍐荤粨鎸夐挳锛屽彲杩樺師宸插垹闄ょ殑涓夌骇鑿滃崟銆� - </div> - <div className="tipcard card4" style={{backgroundImage: 'url(' + card4 + ')'}}> - 鐐瑰嚮娣诲姞鍥炬爣锛屼細鏄剧ず绯荤粺妯℃澘鍜屽凡浣跨敤妯℃澘锛岄�夋嫨宸蹭娇鐢ㄦā鏉挎椂锛屼細澶嶅埗宸叉坊鍔犺彍鍗曠殑閰嶇疆淇℃伅銆� - </div> - <div className="tipcard card5" style={{backgroundImage: 'url(' + card5 + ')'}}> - <p>缂栬緫鐘舵�佷腑锛岃彍鍗曚箣澶栧尯鍩熶細閿佸畾锛屾煡鐪嬬郴缁熸暟鎹鐐瑰嚮銆�</p> - <div> - <span className="new-view" onClick={() => {window.open('#/main')}} >鏂伴〉闈�</span> - </div> - </div> - </div> : null - } <div className="cus-submenu-title"> <MkIcon type={this.props.supMenu.PageParam.Icon} /> <span>{this.props.supMenu.MenuName}</span> @@ -810,86 +426,29 @@ handleMenu={this.handleMenu} /> </DndProvider> - <div className="menu-add" onClick={() => {this.handleSubBtn('add')}}> - <PlusOutlined /> - </div> <div className="menu-btn"> - <Button type="primary" onClick={() => {this.handleSubBtn('thaw')}}>{dict['model.thaw'] + dict['model.menu']}</Button> - <Button type="primary" onClick={() => {this.handleSubBtn('confirm')}}>{dict['model.confirm']}</Button> - <Button onClick={() => {this.handleSubBtn('close')}}>{dict['model.close']}</Button> + <Button type="primary" className="mk-save-menu" disabled={!change} onClick={() => {this.handleSubBtn('confirm')}}>淇濆瓨</Button> + <Button onClick={() => {this.handleSubBtn('close')}}>鍏抽棴</Button> </div> - {this.state.tabview === 'template' ? - <div className="editboard"> - <div className="workplace"> - <Button className="top-btn mk-yellow" onClick={this.exittabview}>{dict['model.cancel']}</Button> - {this.state.tabview === 'template' && <Tabs defaultActiveKey="1"> - <TabPane tab="绯荤粺妯℃澘" key="1"> - <Row> - {this.state.sysTemplates.map((template, index) => { - // if (template.hidden) return null - - return ( - <Col key={`${index}`} className={template.disabled ? 'disabled' : ''} title={template.disTitle || ''} span={8}> - <Card - title={template.title}> - <img onClick={() => {this.previewPicture(template)}} src={template.url} alt=""/> - <div className="card-operation"> - <Button type="primary" onClick={() => {this.useTemplate(template, 'sys')}}>浣跨敤妯℃澘</Button> - </div> - </Card> - </Col> - ) - })} - </Row> - </TabPane> - <TabPane tab="宸蹭娇鐢ㄦā鏉�" key="2"> - <Row> - <Col span={8}> - <Search placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�" defaultValue={this.state.tempSearchKey} onSearch={value => {this.setState({tempSearchKey: value})}} enterButton /> - </Col> - </Row> - <Row> - {this.state.usedTemplates && this.state.usedTemplates.map((template, index) => { - if (template.title.toLowerCase().indexOf(this.state.tempSearchKey.toLowerCase()) >= 0) { - return ( - <Col key={template.type + index} className={template.disabled ? 'disabled' : ''} title={template.disTitle || ''} span={6}> - <Card - title={template.title}> - <img onClick={() => {this.previewPicture(template)}} src={template.url} alt=""/> - <div className="card-operation"> - <Button type="primary" onClick={() => {this.useTemplate(template, 'user')}}>浣跨敤妯℃澘</Button> - </div> - </Card> - </Col> - ) - } else { - return '' - } - })} - </Row> - </TabPane> - </Tabs>} - </div> - </div> : null - } + {this.state.tabview === 'TreePage' ? <TreePageConfig menu={this.state.editMenu} - reloadmenu={() => {this.props.reload()}} + reloadmenu={() => {MKEmitter.emit('mkUpdateMenuList')}} handleView={this.handleView} /> : null } {this.state.tabview === 'CalendarPage' ? <CalendarPageConfig menu={this.state.editMenu} - reloadmenu={() => {this.props.reload()}} + reloadmenu={() => {MKEmitter.emit('mkUpdateMenuList')}} handleView={this.handleView} /> : null } {this.state.tabview === 'CommonTable' ? <ComTableConfig menu={this.state.editMenu} - reloadmenu={() => {this.props.reload()}} + reloadmenu={() => {MKEmitter.emit('mkUpdateMenuList')}} handleView={this.handleView} /> : null } @@ -927,38 +486,22 @@ handleView={this.handleView} /> : null } - {/* 鍥剧墖棰勮 */} - <Preview cancel={this.cancelPrePicture} preview={this.state.preview} template={this.state.pretemplate} confirm={this.useTemplate}/> - {/* 瑙e喕鑿滃崟妯℃�佹 */} - <Modal - title={dict['model.thaw'] + dict['model.menu']} - width={600} - visible={this.state.thawMvisible} - onOk={this.thawMemuSubmit} - confirmLoading={this.state.confirmLoading} - onCancel={this.thawMemuCancel} - destroyOnClose - > - {!this.state.thawmenulist && <Spin style={{marginLeft: 'calc(50% - 22px)', marginTop: '70px', marginBottom: '70px'}} size="large" />} - {this.state.thawmenulist && <TransferForm onChange={(vals) => this.setState({targetKeys: vals})} menulist={this.state.thawmenulist}/>} - </Modal> {/* 娣诲姞绯荤粺鑿滃崟 */} <Modal - title={this.state.sysMenu && this.state.sysMenu.isSystem ? dict['model.add'] + dict['model.menu'] : dict['model.update'] + dict['model.menu']} + title="淇敼鑿滃崟" visible={this.state.handleMVisible} + width={600} onOk={this.memuSubmit} - confirmLoading={this.state.confirmLoading} + confirmLoading={this.state.loading} onCancel={() => {this.setState({handleMVisible: false})}} destroyOnClose > <MenuForm menu={this.state.sysMenu} - dict={dict} inputSubmit={this.memuSubmit} wrappedComponentRef={(inst) => this.menuFormRef = inst} /> </Modal> - {this.state.loading && <Spin className="loading-thdmenu" size="large" />} </div> ) } diff --git a/src/views/design/sidemenu/editthdmenu/index.scss b/src/views/design/sidemenu/editthdmenu/index.scss index 83a9525..dcf0ae3 100644 --- a/src/views/design/sidemenu/editthdmenu/index.scss +++ b/src/views/design/sidemenu/editthdmenu/index.scss @@ -1,83 +1,6 @@ .third-edit-box { position: relative; z-index: 10; - .mask { - position: fixed; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - .tipcard { - position: absolute; - min-height: 100px; - font-size: 16px; - border-radius: 6px; - background-size: 100% 100%; - background-repeat: no-repeat; - padding: 15px; - } - .card1 { - left: 30%; - top: 20vh; - width: 250px; - min-height: 100px; - color: #000000; - font-style: oblique; - } - .card2 { - left: 60%; - top: 20vh; - width: 250px; - min-height: 100px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card3 { - left: 30%; - top: 50vh; - width: 250px; - min-height: 150px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card4 { - left: 60%; - top: 50vh; - width: 250px; - min-height: 150px; - color: #000000; - padding: 20px 30px; - font-style: oblique; - } - .card5 { - right: 5%; - top: 20vh; - width: 130px; - min-height: 240px; - color: #000000; - padding: 40px 15px 10px; - p { - margin: 0 0 5px; - } - div { - text-align: center; - .new-view { - display: inline-block; - cursor: pointer; - color: #fff; - padding: 2px 10px; - border-radius: 4px; - background-color: #1890ff; - border-color: #1890ff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12); - -webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045); - box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045); - } - } - } - } .cus-submenu-title { padding: 0px 24px; background: #364150; @@ -92,105 +15,5 @@ .anticon { margin-right: 10px; } - } - .editboard { - position: fixed; - z-index: 1070; - padding-top: 48px; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - background: rgba(0, 0, 0, 0.35); - .workplace { - position: relative; - width: calc(100vw - 235px); - height: 100%; - overflow-y: auto; - left: 235px; - background: #ffffff; - - .top-btn { - position: absolute; - z-index: 1; - top: 12px; - right: 20px; - cursor: pointer; - } - .top-btn.submit { - right: 100px; - } - .ant-col { - padding: 10px; - } - .ant-col.disabled { - cursor: not-allowed; - .ant-card-head-title { - color: #959595; - } - .card-operation { - display: none; - } - img { - cursor: not-allowed; - } - } - .ant-card-head-title { - text-align: center; - } - .ant-card-body { - padding: 2px; - position: relative; - text-align: center; - overflow: hidden; - .card-operation { - position: absolute; - right: 0px; - top: 0; - height: 0px; - overflow: hidden; - transition: height 0.3s; - button { - height: 30px; - padding: 0 10px; - margin-top: 5px; - margin-right: 10px; - display: none; - } - } - } - .ant-card-body:hover { - .card-operation { - height: 40px; - button { - display: inline-block; - } - } - } - img { - max-width: 100%; - cursor: zoom-in; - } - } - .workplace::-webkit-scrollbar { - width: 7px; - } - .workplace::-webkit-scrollbar-thumb { - border-radius: 5px; - box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13); - background: rgba(0, 0, 0, 0.13); - } - .workplace::-webkit-scrollbar-track { - box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); - border-radius: 3px; - border: 1px solid rgba(0, 0, 0, 0.07); - background: rgba(0, 0, 0, 0); - } - } - > .loading-thdmenu { - position: fixed; - left: calc(50vw - 22px); - top: calc(50vh - 70px); - z-index: 1100; } } diff --git a/src/views/design/sidemenu/editthdmenu/menuform/index.jsx b/src/views/design/sidemenu/editthdmenu/menuform/index.jsx index c86cde8..5e09244 100644 --- a/src/views/design/sidemenu/editthdmenu/menuform/index.jsx +++ b/src/views/design/sidemenu/editthdmenu/menuform/index.jsx @@ -8,18 +8,16 @@ class MainSearch extends Component { static propTpyes = { menu: PropTypes.object, // 鑿滃崟淇℃伅 - dict: PropTypes.object, // 瀛楀吀椤� - supMenuList: PropTypes.any, // 琛ㄦ牸鏁版嵁 inputSubmit: PropTypes.func // 鍥炶溅鎻愪氦 } state = { - menu: null + supMenuList: [] } UNSAFE_componentWillMount () { this.setState({ - menu: this.props.menu + supMenuList: this.props.menu.supMenuList }) } @@ -30,9 +28,15 @@ if (submenu) { this.setState({ - menu: {...menu, supMenuList: submenu.children} + supMenuList: submenu.children }, () => { this.props.form.setFieldsValue({ParentID: submenu.children[0] ? submenu.children[0].MenuID : ''}) + }) + } else { + this.setState({ + supMenuList: [] + }, () => { + this.props.form.setFieldsValue({ParentID: ''}) }) } } @@ -74,14 +78,14 @@ return ( <Form {...formItemLayout} style={{paddingRight: '20px'}} onKeyDown={this.onEnterSubmit}> <Row gutter={24}> - <Col span={24}> + <Col span={22}> <Form.Item label={'涓�绾ц彍鍗�'}> {getFieldDecorator('fstMenuId', { initialValue: menu.fstMenuId, rules: [ { required: true, - message: this.props.dict['form.required.select'] + '涓婄骇鑿滃崟!' + message: '璇烽�夋嫨涓婄骇鑿滃崟!' } ] })( @@ -97,14 +101,14 @@ )} </Form.Item> </Col> - <Col span={24}> + <Col span={22}> <Form.Item label={'浜岀骇鑿滃崟'}> {getFieldDecorator('ParentID', { initialValue: menu.ParentId, rules: [ { required: true, - message: this.props.dict['form.required.select'] + '涓婄骇鑿滃崟!' + message: '璇烽�夋嫨涓婄骇鑿滃崟!' } ] })( @@ -119,40 +123,40 @@ )} </Form.Item> </Col> - <Col span={24}> + <Col span={22}> <Form.Item label={'鑿滃崟鍚嶇О'}> {getFieldDecorator('MenuName', { initialValue: menu.MenuName || '', rules: [ { required: true, - message: this.props.dict['form.required.input'] + '鑿滃崟鍚嶇О!' + message: '璇疯緭鍏ヨ彍鍗曞悕绉�!' } ] })(<Input placeholder="" autoFocus autoComplete="off" />)} </Form.Item> </Col> - <Col span={24}> + <Col span={22}> <Form.Item label={'鑿滃崟鍙傛暟'}> {getFieldDecorator('MenuNo', { initialValue: menu.MenuNo || '', rules: [ { required: true, - message: this.props.dict['form.required.input'] + '鑿滃崟鍙傛暟!' + message: '璇疯緭鍏ヨ彍鍗曞弬鏁�!' } ] })(<Input placeholder="" autoComplete="off" />)} </Form.Item> </Col> - {menu.Template === 'NewPage' ? <Col span={24}> + {menu.Template === 'NewPage' ? <Col span={22}> <Form.Item label={'閾炬帴鍦板潃'}> {getFieldDecorator('url', { initialValue: menu.url || '', rules: [ { required: true, - message: this.props.dict['form.required.input'] + '椤甸潰鍦板潃!' + message: '璇疯緭鍏ラ〉闈㈠湴鍧�!' }, { max: 1024, diff --git a/src/views/design/sidemenu/index.jsx b/src/views/design/sidemenu/index.jsx index 9e0e8bb..e41d70d 100644 --- a/src/views/design/sidemenu/index.jsx +++ b/src/views/design/sidemenu/index.jsx @@ -1,12 +1,13 @@ import React, {Component} from 'react' import { connect } from 'react-redux' import { is, fromJS } from 'immutable' -import { Menu, notification, Popover, Modal, Spin } from 'antd' -import { EditOutlined, SwapOutlined, PlusOutlined, UnlockOutlined, SettingOutlined } from '@ant-design/icons' +import { Menu, Popover, Modal, notification } from 'antd' +import { SwapOutlined, PlusOutlined, SettingOutlined } from '@ant-design/icons' +import moment from 'moment' import asyncComponent from '@/utils/asyncComponent' -import { resetEditLevel, modifyMenuTree, modifyMainMenu } from '@/store/action' -import options from '@/store/options.js' +import { resetEditLevel } from '@/store/action' +import Utils from '@/utils/utils.js' import Api from '@/api' import MKEmitter from '@/utils/events.js' import MkIcon from '@/components/mk-icon' @@ -14,22 +15,27 @@ const EditSecMenu = asyncComponent(() => import('./editsecmenu')) const EditThdMenu = asyncComponent(() => import('./editthdmenu')) -const TransferForm = asyncComponent(() => import('@/templates/zshare/basetransferform')) +const ThawMenu = asyncComponent(() => import('@/components/thawmenu')) +const AddThdMenu = asyncComponent(() => import('./thdmenuplus')) +const ThdMenuForm = asyncComponent(() => import('./thdmenuform')) +const MenuForm = asyncComponent(() => import('./menuform')) const { SubMenu } = Menu class Sidemenu extends Component { state = { - subMenulist: [], // 浜岀骇鑿滃崟 editMenu: null, // 缂栬緫涓夌骇鑿滃崟鏃惰缃� rootSubmenuKeys: null, openKeys: null, - preview: null + preview: null, + loading: false, + thdVisible: false, + sysMenu: null, + formlist: [] } async loadsubmenu (menu) { if (!menu || !menu.MenuID) { // 娌℃湁涓昏彍鍗曟椂锛屾竻绌轰笅绾ц彍鍗� this.setState({ - subMenulist: [], rootSubmenuKeys: [], openKeys: [], editMenu: null @@ -45,28 +51,14 @@ } this.setState({ - subMenulist: menu.children, rootSubmenuKeys: menu.children.map(item => item.MenuID), openKeys: openKey ? [openKey] : [], editMenu: this.props.editLevel === 'level3' ? menu.children.filter(_menu => _menu.MenuID === this.state.editMenu.MenuID)[0] : null }) } - changemenu(e, menu) { - e.preventDefault() - if (this.props.editLevel !== 'HS') { - return - } - - MKEmitter.emit('modifyTabs', menu, 'plus') - } - - componentDidMount () { - window.addEventListener('storage', (e) => { - if (e.key !== 'menuUpdate') return - - this.reload() - }) + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) } UNSAFE_componentWillReceiveProps (nextProps) { @@ -74,10 +66,6 @@ // 涓昏彍鍗曞垏鎹紝璇锋眰2銆�3绾ц彍鍗曟暟鎹� this.loadsubmenu(nextProps.mainMenu) } - } - - shouldComponentUpdate(nextProps, nextState) { - return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) } onOpenChange = openKeys => { @@ -94,6 +82,9 @@ enterSubEdit = (e) => { // 缂栬緫浜岀骇鑿滃崟 e.stopPropagation() + + if (this.props.mainMenu.children.length === 0) return + this.props.resetEditLevel('level2') } @@ -102,110 +93,6 @@ e.stopPropagation() this.props.resetEditLevel('level3') this.setState({editMenu: menu}) - } - - reload = () => { - const { mainMenu } = this.props - let _param = {func: 's_get_pc_menus', systemType: options.sysType, debug: 'Y'} - _param.pro_sys = window.GLOB.systemType === 'production' ? 'Y' : '' - - Api.getSystemConfig(_param).then(result => { - // 鐧诲綍瓒呮椂 - if (!result) return - - if (result.status) { - let res = this.getMenulist(result) - let _mainMenu = res.menulist.filter(item => item.MenuID === mainMenu.MenuID)[0] - - this.props.modifyMenuTree(res.menulist) - this.props.modifyMainMenu(_mainMenu || null) - } else { - notification.error({ - top: 92, - message: result.message, - duration: 10 - }) - } - this.loadsubmenu(this.props.mainMenu) - }) - } - - getMenulist = (result) => { - let iframes = ['Main/Index', 'bda/rdt', 'Home/rdt'] - let menulist = result.fst_menu.map(fst => { - let fstItem = { - MenuID: fst.MenuID, - MenuName: fst.MenuName, - PageParam: {OpenType: 'menu', linkUrl: ''}, - children: [] - } - if (fst.PageParam) { - try { - fstItem.PageParam = JSON.parse(fst.PageParam) - } catch (e) { - fstItem.PageParam = {OpenType: 'menu', linkUrl: ''} - } - } - - if (fst.snd_menu) { - fstItem.children = fst.snd_menu.map(snd => { - let sndItem = { - ParentId: fst.MenuID, - MenuID: snd.MenuID, - MenuName: snd.MenuName, - PageParam: {Icon: 'folder'}, - children: [] - } - - if (snd.PageParam) { - try { - sndItem.PageParam = JSON.parse(snd.PageParam) - } catch (e) { - sndItem.PageParam = {Icon: 'folder'} - } - } - - if (snd.trd_menu) { - sndItem.children = snd.trd_menu.map(trd => { - let trdItem = { - FstId: fst.MenuID, - ParentId: snd.MenuID, - MenuID: trd.MenuID, - MenuName: trd.MenuName, - MenuNo: trd.MenuNo, - EasyCode: trd.EasyCode, - type: 'CommonTable', // 榛樿鍊间负甯哥敤琛� - OpenType: 'newtab' // 鎵撳紑鏂瑰紡 - } - - if (trd.LinkUrl && iframes.includes(trd.LinkUrl.split('?')[0])) { - trdItem.type = 'iframe' - trdItem.LinkUrl = trd.LinkUrl.replace('&', '&') - trdItem.forbidden = true - } else { - try { - trdItem.PageParam = trd.PageParam ? JSON.parse(trd.PageParam) : {OpenType: 'newtab'} - } catch (e) { - trdItem.PageParam = {OpenType: 'newtab'} - } - - trdItem.type = trdItem.PageParam.Template || trdItem.type - trdItem.OpenType = trdItem.PageParam.OpenType || trdItem.OpenType - - if (trdItem.type === 'CustomPage' && this.props.memberLevel < 20) { // 浼氬憳绛夌骇澶т簬绛変簬20鏃讹紝鏈夌紪杈戞潈闄� - trdItem.forbidden = true - } - } - return trdItem - }) - } - return sndItem - }) - } - return fstItem - }) - - return { menulist } } exitEdit = () => { @@ -226,23 +113,172 @@ } _param = window.btoa(window.encodeURIComponent(JSON.stringify(_param))) window.open(`#/menudesign/${_param}`) - } else { + } else if (['RolePermission', 'NewPage'].includes(cell.type)) { + cell.Template = cell.PageParam.Template + cell.url = cell.PageParam.url || '' + cell.fstMenuId = cell.FstId + cell.supMenuList = this.props.mainMenu.children + cell.fstMenuList = this.props.menuTree + + this.setState({ + thdVisible: true, + loading: false, + sysMenu: cell + }) } + } + + addSecMenu = () => { + this.setState({ + visible: true, + loading: false, + formlist: [ + { // 鐖剁骇鑿滃崟 + type: 'select', + key: 'parentId', + label: '涓婄骇鑿滃崟', + initVal: this.props.mainMenu.MenuID, + required: true, + options: this.props.menuTree + }, + { // 鑿滃崟鍚嶇О + type: 'text', + key: 'menuName', + label: '鑿滃崟鍚嶇О', + initVal: '', + required: true, + readonly: false + }, + { // 鑿滃崟鍥炬爣 + type: 'icon', + key: 'icon', + label: '鍥炬爣', + initVal: 'folder', + required: true + } + ] + }) + } + + secSubmit = () => { + this.menuFormRef.handleConfirm().then(values => { + let param = { + ParentID: values.parentId, + MenuID: Utils.getuuid(), + MenuName: values.menuName, + PageParam: JSON.stringify({ + Icon: values.icon + }) + } + param.func = 'sPC_SndMenu_Add' + param.Sort = (this.props.mainMenu.children.length + 1) * 10 + + this.setState({ + loading: true + }) + Api.getSystemConfig(param).then(res => { + if (res.status) { + this.setState({ + loading: false, + visible: false + }) + MKEmitter.emit('mkUpdateMenuList') + } else { + this.setState({ + loading: false + }) + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + }) + }) + } + + /** + * @description 涓夌骇鑿滃崟淇敼 + */ + thdSubmit = () => { + const { sysMenu } = this.state + + this.menuThdFormRef.handleConfirm().then(res => { + let PageParam = { + Template: sysMenu.Template, + OpenType: 'newtab' + } + + if (sysMenu.Template === 'NewPage') { + PageParam.OpenType = 'NewPage' + PageParam.url = res.url + } + + let param = { + func: 'sPC_TrdMenu_AddUpt', + FstID: res.fstMenuId, + SndID: res.ParentID, + ParentID: res.ParentID, + MenuID: sysMenu.MenuID, + MenuNo: res.MenuNo, + Template: sysMenu.Template, + MenuName: res.MenuName, + PageParam: JSON.stringify(PageParam), + LongParam: '', + LText: '', + LTexttb: '' + } + + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + + this.setState({ + loading: true + }) + + Api.getSystemConfig(param).then(response => { + if (response.status) { + this.setState({ + loading: false, + thdVisible: false, + sysMenu: null + }) + MKEmitter.emit('mkUpdateMenuList') + } else { + this.setState({ + loading: false + }) + notification.warning({ + top: 92, + message: response.message, + duration: 5 + }) + } + }) + }) } render () { const { mainMenu, editLevel } = this.props - const { visible } = this.state - - let isnew = true + const { visible, loading, thdVisible } = this.state return ( <aside className="mk-sys-side-menu ant-menu-dark mk-edit"> - {!(editLevel === 'level2' || editLevel === 'level3') && + {editLevel !== 'level2' && editLevel !== 'level3' && mainMenu ? <Menu openKeys={this.state.openKeys} onOpenChange={this.onOpenChange} mode="inline" theme="dark"> - {!editLevel && mainMenu ? <li className="sup-menu"><EditOutlined onClick={this.enterSubEdit} className="edit-check"/></li> : null} - {this.state.subMenulist && this.state.subMenulist.map((item, index) => { + <li className="sup-menu"> + <Popover overlayClassName="mk-popover-control-wrap mk-menu-control" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ + <div className="mk-popover-control"> + <PlusOutlined onClick={this.addSecMenu}/> + <SwapOutlined onClick={this.enterSubEdit} className={'mk-swap' + (mainMenu.children.length === 0 ? ' disabled' : '')}/> + <div style={{display: 'inline-block', minWidth: '32px'}}><ThawMenu ParentId={mainMenu.MenuID} Type="20"/></div> + </div> + } trigger="hover" placement="top"> + <SettingOutlined className="edit-check"/> + </Popover> + </li> + {mainMenu.children.map((item, index) => { return ( <SubMenu key={item.MenuID} @@ -253,61 +289,72 @@ </span> } > - {!editLevel ? <li className={'ant-menu-item ' + (item.children.length > 0 ? 'sub-menu' : '')}> - {!isnew ? <EditOutlined onClick={(e) => {this.enterThrEdit(e, item)}} className="edit-check"/> : + <li className={'ant-menu-item ' + (item.children.length > 0 ? 'sub-menu' : '')}> <Popover overlayClassName="mk-popover-control-wrap mk-menu-control" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ <div className="mk-popover-control"> - <PlusOutlined onClick={(e) => {this.enterThrEdit(e, item)}} className="mk-edit-menu"/> - <SwapOutlined onClick={(e) => {this.enterThrEdit(e, item)}} className="mk-edit-menu mk-swap"/> - <UnlockOutlined onClick={(e) => {this.enterThrEdit(e, item)}} className="mk-edit-menu"/> + <div style={{display: 'inline-block', minWidth: '32px'}}><AddThdMenu mainMenu={mainMenu} supMenu={item} menuTree={this.props.menuTree}/></div> + <SwapOutlined onClick={(e) => {this.enterThrEdit(e, item)}} className="mk-swap"/> + <div style={{display: 'inline-block', minWidth: '32px'}}><ThawMenu ParentId={item.MenuID} Type="30"/></div> </div> } trigger="hover" placement="top"> <SettingOutlined className="edit-check"/> - </Popover>} - </li> : null} + </Popover> + </li> {item.children.map(cell => { return ( <Menu.Item key={cell.MenuID}> - {editLevel !== 'HS' ? - <span className="editable-menu-item" onDoubleClick={() => this.editmenu(cell)}>{cell.MenuName}</span> : - <a href={cell.src} id={cell.MenuID} onClick={(e) => this.changemenu(e, cell)}>{cell.MenuName}</a> - } + <span className="editable-menu-item" onDoubleClick={(e) => {e.stopPropagation();this.editmenu(cell)}}>{cell.MenuName}</span> </Menu.Item> ) })} </SubMenu> ) })} - </Menu>} - {editLevel === 'level2' ? + </Menu> : null} + {editLevel === 'level2' && mainMenu ? <EditSecMenu - menulist={this.state.subMenulist} + menulist={mainMenu.children} menuTree={this.props.menuTree} supMenu={this.props.mainMenu} - reload={this.reload} exitEdit={this.exitEdit} /> : null } - {editLevel === 'level3' && this.state.editMenu ? + {editLevel === 'level3' && mainMenu && this.state.editMenu ? <EditThdMenu menulist={this.state.editMenu.children} - supMenuList={this.state.subMenulist} + supMenuList={mainMenu.children} supMenu={this.state.editMenu} - reload={this.reload} exitEdit={this.exitEdit} /> : null } <Modal - title="瑙e喕鑿滃崟" - width={600} + title="娣诲姞鑿滃崟" visible={visible} - onOk={this.thawMemuSubmit} - confirmLoading={this.state.confirmLoading} - onCancel={this.thawMemuCancel} + onOk={this.secSubmit} + // confirmLoading={loading} + onCancel={() => this.setState({visible: false})} destroyOnClose > - {!this.state.thawmenulist ? <Spin style={{marginLeft: 'calc(50% - 22px)', marginTop: '70px', marginBottom: '70px'}} size="large" /> : - <TransferForm onChange={(vals) => this.setState({targetKeys: vals})} menulist={this.state.thawmenulist}/>} + <MenuForm + inputSubmit={this.secSubmit} + formlist={this.state.formlist} + wrappedComponentRef={(inst) => this.menuFormRef = inst} + /> + </Modal> + <Modal + title="淇敼鑿滃崟" + visible={thdVisible} + width={600} + onOk={this.thdSubmit} + confirmLoading={loading} + onCancel={() => {this.setState({thdVisible: false})}} + destroyOnClose + > + <ThdMenuForm + menu={this.state.sysMenu} + inputSubmit={this.thdSubmit} + wrappedComponentRef={(inst) => this.menuThdFormRef = inst} + /> </Modal> </aside> ) @@ -324,8 +371,6 @@ const mapDispatchToProps = (dispatch) => { return { - modifyMenuTree: (menuTree) => dispatch(modifyMenuTree(menuTree)), - modifyMainMenu: (mainMenu) => dispatch(modifyMainMenu(mainMenu)), resetEditLevel: (level) => dispatch(resetEditLevel(level)) } } diff --git a/src/views/design/sidemenu/menuelement/card.jsx b/src/views/design/sidemenu/menuelement/card.jsx index fd2aa26..b9133a4 100644 --- a/src/views/design/sidemenu/menuelement/card.jsx +++ b/src/views/design/sidemenu/menuelement/card.jsx @@ -33,30 +33,29 @@ closeCard(id) } - let _param = '' - if (card.type === 'CustomPage') { - _param = { - MenuType: 'custom', - MenuId: card.MenuID, - ParentId: card.ParentId, - MenuName: card.MenuName, - MenuNo: card.MenuNo - } - _param = window.btoa(window.encodeURIComponent(JSON.stringify(_param))) - } - - return ( - <div className="side-card" style={{ opacity }}> - <div ref={node => drag(drop(node))}> - {card.PageParam && card.PageParam.Icon && <MkIcon type={card.PageParam.Icon} />} - {card.MenuName} + if (card.level === 'second') { + return ( + <div className="side-card" style={{ opacity }}> + <div ref={node => drag(drop(node))}> + {card.PageParam && card.PageParam.Icon && <MkIcon type={card.PageParam.Icon} />} + {card.MenuName} + </div> + <EditOutlined className="edit" onClick={edit} /> + <CloseOutlined className="close" onClick={close} /> </div> - {/* 鑷畾涔夋ā鏉匡紝鍦ㄦ柊椤甸潰缂栬緫 */} - {!card.forbidden && card.type !== 'CustomPage' ? <EditOutlined className="edit" onClick={edit} /> : null} - {!card.forbidden && card.type === 'CustomPage' ? <EditOutlined className="edit" onClick={() => {window.open(`#/menudesign/${_param}`)}}/> : null} - {card.forbidden && card.type === 'CustomPage' ? <EditOutlined className="edit" style={{color: '#959595', cursor: 'not-allowed'}} title="浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��"/> : null} - <CloseOutlined className="close" onClick={close} /> - </div> - ) + ) + } else { + return ( + <div className="side-card" style={{ opacity }}> + <div ref={node => drag(drop(node))}> + {card.MenuName} + </div> + {/* 鑷畾涔夋ā鏉匡紝鍦ㄦ柊椤甸潰缂栬緫 */} + {!card.forbidden ? <EditOutlined className="edit" onClick={edit} /> : null} + {card.forbidden && card.type === 'CustomPage' ? <EditOutlined className="edit" style={{color: '#959595', cursor: 'not-allowed'}} title="浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��"/> : null} + <CloseOutlined className="close" onClick={close} /> + </div> + ) + } } export default Card diff --git a/src/views/design/sidemenu/menuelement/index.scss b/src/views/design/sidemenu/menuelement/index.scss index e685eec..2ec4117 100644 --- a/src/views/design/sidemenu/menuelement/index.scss +++ b/src/views/design/sidemenu/menuelement/index.scss @@ -15,7 +15,7 @@ } .side-card { position: relative; - border: 1px dashed gray; + border: 1px dashed #535353; margin-top: 8px; height: 40px; width: 98%; diff --git a/src/views/design/sidemenu/menuform/index.jsx b/src/views/design/sidemenu/menuform/index.jsx index 8a1ae15..92bfbd2 100644 --- a/src/views/design/sidemenu/menuform/index.jsx +++ b/src/views/design/sidemenu/menuform/index.jsx @@ -7,9 +7,8 @@ const MkEditIcon = asyncComponent(() => import('@/components/mkIcon')) -class MainSearch extends Component { +class MainForm extends Component { static propTpyes = { - dict: PropTypes.object, // 瀛楀吀椤� formlist: PropTypes.array, inputSubmit: PropTypes.func } @@ -48,10 +47,10 @@ rules: [ { required: !!item.required, - message: this.props.dict['form.required.input'] + item.label + '!' + message: '璇疯緭鍏�' + item.label + '!' } ] - })(<Input placeholder="" autoFocus={item.key.toLowerCase() === 'menuname'} autoComplete="off" disabled={item.readonly} />)} + })(<Input placeholder="" autoFocus={item.key.toLowerCase() === 'menuname'} autoComplete="off" disabled={item.readonly} onPressEnter={() => this.props.inputSubmit()}/>)} </Form.Item> </Col> ) @@ -64,7 +63,7 @@ rules: [ { required: !!item.required, - message: this.props.dict['form.required.select'] + item.label + '!' + message: '璇烽�夋嫨' + item.label + '!' } ] })( @@ -93,7 +92,7 @@ rules: [ { required: !!item.required, - message: this.props.dict['form.required.select'] + item.label + '!' + message: '璇烽�夋嫨' + item.label + '!' } ] })( @@ -120,13 +119,6 @@ }) } - onEnterSubmit = (e) => { - // 琛ㄥ崟鍥炶溅鎻愪氦 - if (e.key !== 'Enter') return - - this.props.inputSubmit && this.props.inputSubmit() - } - render() { const formItemLayout = { labelCol: { @@ -139,11 +131,11 @@ } } return ( - <Form {...formItemLayout} className="ant-advanced-search-form" id="form-box" onKeyDown={this.onEnterSubmit}> + <Form {...formItemLayout} id="form-box"> <Row gutter={24}>{this.getFields()}</Row> </Form> ) } } -export default Form.create()(MainSearch) \ No newline at end of file +export default Form.create()(MainForm) \ No newline at end of file diff --git a/src/views/design/sidemenu/menuform/index.scss b/src/views/design/sidemenu/menuform/index.scss index 9914d8e..8b13789 100644 --- a/src/views/design/sidemenu/menuform/index.scss +++ b/src/views/design/sidemenu/menuform/index.scss @@ -1,17 +1 @@ -.ant-advanced-search-form.main-search { - padding: 0px 24px 20px; - border-bottom: 1px solid #d9d9d9; - .ant-form-item { - display: flex; - margin-bottom: 10px; - } - .ant-form-item-control-wrapper { - flex: 1; - } - .ant-form-item-label { - width: 100px; - } -} -.ant-advanced-search-form { - position: relative; -} + diff --git a/src/views/design/sidemenu/thdmenuform/index.jsx b/src/views/design/sidemenu/thdmenuform/index.jsx new file mode 100644 index 0000000..1d68f35 --- /dev/null +++ b/src/views/design/sidemenu/thdmenuform/index.jsx @@ -0,0 +1,170 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { fromJS } from 'immutable' +import { Form, Row, Col, Input, Select } from 'antd' +// import './index.scss' + +const { TextArea } = Input + +class MainSearch extends Component { + static propTpyes = { + menu: PropTypes.object, // 鑿滃崟淇℃伅 + inputSubmit: PropTypes.func // 鍥炶溅鎻愪氦 + } + + state = { + supMenuList: [] + } + + UNSAFE_componentWillMount () { + this.setState({ + supMenuList: fromJS(this.props.menu.supMenuList).toJS() + }) + } + + changeMenu = (val) => { + const { menu } = this.props + + let submenu = menu.fstMenuList.filter(item => item.MenuID === val)[0] + + if (submenu) { + this.setState({ + supMenuList: submenu.children + }, () => { + this.props.form.setFieldsValue({ParentID: submenu.children[0] ? submenu.children[0].MenuID : ''}) + }) + } else { + this.setState({ + supMenuList: [] + }, () => { + this.props.form.setFieldsValue({ParentID: ''}) + }) + } + } + + handleConfirm = () => { + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� + return new Promise((resolve, reject) => { + this.props.form.validateFieldsAndScroll((err, values) => { + if (!err) { + resolve(values) + } else { + reject(err) + } + }) + }) + } + + render() { + const { menu } = this.props + const { getFieldDecorator } = this.props.form + const { supMenuList } = this.state + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 8 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + } + } + + return ( + <Form {...formItemLayout} style={{paddingRight: '20px'}}> + <Row gutter={24}> + <Col span={22}> + <Form.Item label={'涓�绾ц彍鍗�'}> + {getFieldDecorator('fstMenuId', { + initialValue: menu.fstMenuId, + rules: [ + { + required: true, + message: '璇烽�夋嫨涓婄骇鑿滃崟!' + } + ] + })( + <Select + showSearch + filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} + onChange={this.changeMenu} + > + {menu.fstMenuList.map(option => + <Select.Option key={option.MenuID} value={option.MenuID}>{option.text || option.MenuName}</Select.Option> + )} + </Select> + )} + </Form.Item> + </Col> + <Col span={22}> + <Form.Item label={'浜岀骇鑿滃崟'}> + {getFieldDecorator('ParentID', { + initialValue: menu.ParentId, + rules: [ + { + required: true, + message: '璇烽�夋嫨涓婄骇鑿滃崟!' + } + ] + })( + <Select + showSearch + filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} + > + {supMenuList.map(option => + <Select.Option key={option.MenuID} value={option.MenuID}>{option.text || option.MenuName}</Select.Option> + )} + </Select> + )} + </Form.Item> + </Col> + <Col span={22}> + <Form.Item label={'鑿滃崟鍚嶇О'}> + {getFieldDecorator('MenuName', { + initialValue: menu.MenuName || '', + rules: [ + { + required: true, + message: '璇疯緭鍏ヨ彍鍗曞悕绉�!' + } + ] + })(<Input placeholder="" autoFocus autoComplete="off" onPressEnter={() => this.props.inputSubmit()}/>)} + </Form.Item> + </Col> + <Col span={22}> + <Form.Item label={'鑿滃崟鍙傛暟'}> + {getFieldDecorator('MenuNo', { + initialValue: menu.MenuNo || '', + rules: [ + { + required: true, + message: '璇疯緭鍏ヨ彍鍗曞弬鏁�!' + } + ] + })(<Input placeholder="" autoComplete="off" onPressEnter={() => this.props.inputSubmit()}/>)} + </Form.Item> + </Col> + {menu.Template === 'NewPage' ? <Col span={22}> + <Form.Item label={'閾炬帴鍦板潃'}> + {getFieldDecorator('url', { + initialValue: menu.url || '', + rules: [ + { + required: true, + message: '璇疯緭鍏ラ〉闈㈠湴鍧�!' + }, + { + max: 1024, + message: '鍦板潃鏈�闀夸负1024涓瓧绗�!' + } + ] + })(<TextArea rows={2} />)} + </Form.Item> + </Col> : null} + </Row> + </Form> + ) + } +} + +export default Form.create()(MainSearch) \ No newline at end of file diff --git a/src/views/design/sidemenu/thdmenuform/index.scss b/src/views/design/sidemenu/thdmenuform/index.scss new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/views/design/sidemenu/thdmenuform/index.scss diff --git a/src/views/design/sidemenu/thdmenuplus/index.jsx b/src/views/design/sidemenu/thdmenuplus/index.jsx new file mode 100644 index 0000000..499fa29 --- /dev/null +++ b/src/views/design/sidemenu/thdmenuplus/index.jsx @@ -0,0 +1,309 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { Modal, notification, Col, Card, Tabs, Row, Input, Button } from 'antd' +import { PlusOutlined } from '@ant-design/icons' +import moment from 'moment' + +import Api from '@/api' +import { sysTemps } from '@/utils/option.js' +import MKEmitter from '@/utils/events.js' +import Utils from '@/utils/utils.js' +import Preview from './preview' +import asyncComponent from '@/utils/asyncComponent' + +import mainsubtable from '@/assets/img/mainsubtable.jpg' +import treepage from '@/assets/img/treepage.jpg' +import calendar from '@/assets/img/calendar.jpg' +import customImg from '@/assets/img/custom.jpg' + +import './index.scss' + +const MenuForm = asyncComponent(() => import('../thdmenuform')) +const { TabPane } = Tabs +const { Search } = Input + +class ThdMenuAdd extends Component { + static propTpyes = { + mainMenu: PropTypes.object, + supMenu: PropTypes.object, + menuTree: PropTypes.array, + Type: PropTypes.string + } + + state = { + sysTemplates: [], + usedTemplates: [], + tempSearchKey: '', + addVisible: false, + preview: null, + visible: false, + sysMenu: null, + loading: false + } + + UNSAFE_componentWillMount() { + this.getUsedTemplate() + } + + getUsedTemplate = () => { + let { sysTemplates } = this.state + let memberLevel = Utils.getMemberLevel() + const illust = { // 妯℃澘鍥剧墖锛岀敤浜庡凡浣跨敤妯℃澘 + CommonTable: mainsubtable, + TreePage: treepage, + CalendarPage: calendar, + CustomPage: customImg + } + + Api.getSystemConfig({func: 'sPC_Get_UserTemp', TypeCharTwo: 'menu'}).then(res => { + let _templates = [] + + res.UserTemp.forEach(temp => { + if (!['CommonTable', 'TreePage', 'CalendarPage', 'CustomPage'].includes(temp.Template)) { + return + } else if (temp.Template === 'CustomPage' && memberLevel < 20) { + temp.disabled = true + temp.disTitle = '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��' + } + + _templates.push({ + uuid: temp.MenuID, + title: temp.MenuName, + type: temp.Template, + url: illust[temp.Template], + disabled: temp.disabled || false, + disTitle: temp.disTitle || '' + }) + }) + + sysTemplates = sysTemps.map(temp => { + if (temp.type === 'CustomPage' && memberLevel < 20) { + temp.disabled = true + temp.disTitle = '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��' + } + + return temp + }) + + this.setState({ + usedTemplates: _templates, + sysTemplates: sysTemplates + }) + }) + } + + trigger = () => { + this.setState({ + visible: true + }) + document.getElementById('root').style.overflowY = 'hidden' + } + + previewPicture = (template) => { + if (template.disabled) return + // 鍥剧墖棰勮 + this.setState({ + preview: template.url, + pretemplate: template + }) + } + + cancelPrePicture = () => { + // 鍏抽棴鍥剧墖棰勮 + this.setState({ + preview: null + }) + } + // this.setState({ + // tabview: 'template', + // editMenu: { + // MenuID: Utils.getuuid(), + // MenuName: '', + // MenuNo: '', + // type: '', + // PageParam: '', + // LongParam: '', + // isSubtable: '', // 鏄惁涓轰富瀛愯〃 + // ParentId: this.props.supMenu.MenuID, + // supMenuList: this.props.supMenuList, + // fstMenuId: this.props.mainMenu.MenuID, + // fstMenuList: this.props.menuTree, + // menuSort: (this.props.menulist.length + 1) * 10 // 鏂板缓鑿滃崟璁剧疆鎺掑簭 + // } + // }, () => { + // document.getElementById('root').style.overflowY = 'hidden' + // }) + + useTemplate = (template) => { + const { mainMenu, supMenu, menuTree } = this.props + + let sysMenu = { + MenuID: Utils.getuuid(), + MenuName: template.title, + Template: template.type, + fstMenuId: mainMenu.MenuID, + ParentId: supMenu.MenuID, + menuSort: (supMenu.children.length + 1) * 10, + copyId: template.uuid || '', + fstMenuList: menuTree, + supMenuList: mainMenu.children + } + + this.setState({ + visible: false + }, () => { + this.setState({ + addVisible: true, + sysMenu: sysMenu + }) + document.getElementById('root').style.overflowY = 'unset' + }) + } + + memuSubmit = () => { + const { sysMenu } = this.state + + this.menuFormRef.handleConfirm().then(values => { + let PageParam = { + Template: sysMenu.Template, + OpenType: 'newtab' + } + + if (sysMenu.Template === 'NewPage') { + PageParam.OpenType = 'NewPage' + PageParam.url = values.url + } + + if (sysMenu.copyId) { + PageParam.copyMenuId = sysMenu.copyId + } + + let param = { + func: 'sPC_TrdMenu_AddUpt', + FstID: values.fstMenuId, + SndID: values.ParentID, + ParentID: values.ParentID, + MenuID: sysMenu.MenuID, + MenuNo: values.MenuNo, + Template: sysMenu.Template, + MenuName: values.MenuName, + PageParam: JSON.stringify(PageParam), + LongParam: '', + LText: '', + LTexttb: '', + Sort: sysMenu.menuSort + } + + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + + this.setState({ + loading: true + }) + + Api.getSystemConfig(param).then(response => { + if (response.status) { + this.setState({ + loading: false, + addVisible: false, + sysMenu: null + }) + + MKEmitter.emit('mkUpdateMenuList') + } else { + this.setState({ + loading: false + }) + notification.warning({ + top: 92, + message: response.message, + duration: 5 + }) + } + }) + }) + } + + render() { + const { visible, loading, tempSearchKey } = this.state + + return ( + <> + <PlusOutlined onClick={this.trigger}/> + <Modal + className="mk-template-modal" + visible={visible} + onOk={this.submit} + onCancel={() => this.setState({visible: false}, () => {document.getElementById('root').style.overflowY = 'unset'})} + destroyOnClose + > + <Tabs defaultActiveKey="1"> + <TabPane tab="绯荤粺妯℃澘" key="1"> + <Row> + {this.state.sysTemplates.map((template, index) => { + return ( + <Col key={`${index}`} className={template.disabled ? 'disabled' : ''} title={template.disTitle || ''} span={8}> + <Card + title={template.title}> + <img onClick={() => {this.previewPicture(template)}} src={template.url} alt=""/> + <div className="card-operation"> + <Button type="primary" onClick={() => {this.useTemplate(template, 'sys')}}>浣跨敤妯℃澘</Button> + </div> + </Card> + </Col> + ) + })} + </Row> + </TabPane> + <TabPane tab="宸蹭娇鐢ㄦā鏉�" key="2"> + <Row> + <Col span={8}> + <Search placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�" defaultValue={''} onSearch={value => {this.setState({tempSearchKey: value})}} enterButton /> + </Col> + </Row> + <Row> + {this.state.usedTemplates.map((template, index) => { + if (!tempSearchKey || template.title.toLowerCase().indexOf(tempSearchKey.toLowerCase()) >= 0) { + return ( + <Col key={template.type + index} className={template.disabled ? 'disabled' : ''} title={template.disTitle || ''} span={6}> + <Card + title={template.title}> + <img onClick={() => {this.previewPicture(template)}} src={template.url} alt=""/> + <div className="card-operation"> + <Button type="primary" onClick={() => {this.useTemplate(template, 'user')}}>浣跨敤妯℃澘</Button> + </div> + </Card> + </Col> + ) + } else { + return null + } + })} + </Row> + </TabPane> + </Tabs> + {/* 鍥剧墖棰勮 */} + <Preview cancel={this.cancelPrePicture} preview={this.state.preview} template={this.state.pretemplate} confirm={this.useTemplate}/> + </Modal> + {/* 娣诲姞绯荤粺鑿滃崟 */} + <Modal + title="娣诲姞鑿滃崟" + visible={this.state.addVisible} + width={600} + onOk={this.memuSubmit} + confirmLoading={loading} + onCancel={() => {this.setState({addVisible: false})}} + destroyOnClose + > + <MenuForm + menu={this.state.sysMenu} + inputSubmit={this.memuSubmit} + wrappedComponentRef={(inst) => this.menuFormRef = inst} + /> + </Modal> + </> + ) + } +} + +export default ThdMenuAdd \ No newline at end of file diff --git a/src/views/design/sidemenu/thdmenuplus/index.scss b/src/views/design/sidemenu/thdmenuplus/index.scss new file mode 100644 index 0000000..86c37fa --- /dev/null +++ b/src/views/design/sidemenu/thdmenuplus/index.scss @@ -0,0 +1,137 @@ +.editboard { + position: fixed; + z-index: 1070; + padding-top: 48px; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + background: rgba(0, 0, 0, 0.35); + .workplace { + position: relative; + width: calc(100vw - 235px); + height: 100%; + overflow-y: auto; + left: 235px; + background: #ffffff; + + .top-btn { + position: absolute; + z-index: 1; + top: 12px; + right: 20px; + cursor: pointer; + } + .top-btn.submit { + right: 100px; + } + + } + .workplace::-webkit-scrollbar { + width: 7px; + } + .workplace::-webkit-scrollbar-thumb { + border-radius: 5px; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13); + background: rgba(0, 0, 0, 0.13); + } + .workplace::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); + border-radius: 3px; + border: 1px solid rgba(0, 0, 0, 0.07); + background: rgba(0, 0, 0, 0); + } +} +.mk-template-modal { + width: calc(100vw - 235px)!important; + left: 117px; + top: 48px; + padding-bottom: 0px; + .ant-modal-close { + .ant-modal-close-x { + height: 50px; + line-height: 50px; + } + } + .ant-modal-header { + display: none; + } + .ant-modal-footer { + display: none; + } + .ant-modal-body { + padding: 0px; + + .ant-tabs-tabpane { + height: calc(100vh - 110px); + overflow-y: auto; + padding: 0 15px 20px 15px; + + .ant-col { + padding: 10px; + } + .ant-col.disabled { + cursor: not-allowed; + .ant-card-head-title { + color: #959595; + } + .card-operation { + display: none; + } + img { + cursor: not-allowed; + } + } + .ant-card-head-title { + text-align: center; + } + .ant-card-body { + padding: 2px; + position: relative; + text-align: center; + overflow: hidden; + .card-operation { + position: absolute; + right: 0px; + top: 0; + height: 0px; + overflow: hidden; + transition: height 0.3s; + button { + height: 30px; + padding: 0 10px; + margin-top: 5px; + margin-right: 10px; + display: none; + } + } + } + .ant-card-body:hover { + .card-operation { + height: 40px; + button { + display: inline-block; + } + } + } + img { + max-width: 100%; + cursor: zoom-in; + } + } + .ant-tabs-tabpane::-webkit-scrollbar { + width: 7px; + } + .ant-tabs-tabpane::-webkit-scrollbar-thumb { + border-radius: 5px; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13); + background: rgba(0, 0, 0, 0.13); + } + .ant-tabs-tabpane::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); + border-radius: 3px; + border: 1px solid rgba(0, 0, 0, 0.07); + background: rgba(0, 0, 0, 0); + } + } +} \ No newline at end of file diff --git a/src/views/design/sidemenu/editthdmenu/preview/index.jsx b/src/views/design/sidemenu/thdmenuplus/preview/index.jsx similarity index 100% rename from src/views/design/sidemenu/editthdmenu/preview/index.jsx rename to src/views/design/sidemenu/thdmenuplus/preview/index.jsx diff --git a/src/views/design/sidemenu/editthdmenu/preview/index.scss b/src/views/design/sidemenu/thdmenuplus/preview/index.scss similarity index 100% rename from src/views/design/sidemenu/editthdmenu/preview/index.scss rename to src/views/design/sidemenu/thdmenuplus/preview/index.scss -- Gitblit v1.8.0