From 675de8166eba668c30fd1587a8ffbc11ddc2f919 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期一, 17 六月 2024 11:38:00 +0800 Subject: [PATCH] 2024-06-17 --- src/views/design/header/transmenu/index.jsx | 376 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 366 insertions(+), 10 deletions(-) diff --git a/src/views/design/header/transmenu/index.jsx b/src/views/design/header/transmenu/index.jsx index 67cba4f..3d3e7be 100644 --- a/src/views/design/header/transmenu/index.jsx +++ b/src/views/design/header/transmenu/index.jsx @@ -1,6 +1,6 @@ import React, { Component } from 'react' import { is, fromJS } from 'immutable' -import { Modal, notification, Button, Spin, Cascader } from 'antd' +import { Modal, Radio, notification, Button, Spin, Select, Cascader } from 'antd' // import { ClockCircleOutlined, SyncOutlined, WarningOutlined, CheckCircleOutlined } from '@ant-design/icons' import moment from 'moment' import md5 from 'md5' @@ -18,9 +18,13 @@ loading: false, saveing: false, lang: '', + type: '', dicts: [], menus: [], - values: [] + billMenus: [], + tabMenus: [], + values: '', + images: '', } shouldComponentUpdate (nextProps, nextState) { @@ -36,7 +40,9 @@ loading: true, visible: true, saveing: false, - values: [] + type: 'menu', + images: '', + values: '' }) this.getDicts() @@ -74,6 +80,11 @@ } getMenus = (lang) => { + if (this.state.menus.length > 0) { + this.setState({loading: false}) + return + } + let _param = { func: 's_get_pc_menus', systemType: window.GLOB.sysType, @@ -151,9 +162,26 @@ } submit = () => { - const { values } = this.state + const { values, type } = this.state - if (!values || (values.length !== 3 && values[0] !== 'home_page_id')) { + if (!values) { + notification.warning({ + top: 92, + message: type === 'menu' ? '璇烽�夋嫨鑿滃崟锛�' : '璇烽�夋嫨妯℃澘锛�', + duration: 5 + }) + return + } + + if (type === 'bill') { + this.billSubmit() + return + } else if (type === 'tab') { + this.tabSubmit() + return + } + + if (values.length !== 3 && values[0] !== 'home_page_id') { notification.warning({ top: 92, message: '璇烽�夋嫨鑿滃崟锛�', @@ -395,6 +423,7 @@ config.style = config.style || {} } + config.enabled = false config.MenuName = menu.label config.fstMenuId = menu.fstMenuId || '' config.parentId = menu.parentId || '' @@ -498,19 +527,322 @@ }) } + onChange = (e) => { + this.setState({ + type: e.target.value, + images: '', + values: '' + }) + + if (e.target.value === 'bill') { + this.getBillMenus() + } else if (e.target.value === 'tab') { + this.getTabMenus() + } + } + + getBillMenus = () => { + const { billMenus } = this.state + + if (billMenus.length) return + + let _param = { + func: 's_get_sPrintTemplate_web', + OrderCol: 'ID desc', + lang_s: sessionStorage.getItem('lang'), + dataM: 'Y', + PageIndex: 1, + PageSize: 1000 + } + + Api.getCloudConfig(_param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + this.setState({billMenus: res.data || []}) + }) + } + + getTabMenus = () => { + const { tabMenus } = this.state + + if (tabMenus.length) return + + let _param = { + func: 's_get_sPrintTemplate', + OrderCol: 'ID desc', + lang_s: sessionStorage.getItem('lang'), + dataM: 'Y', + PageIndex: 1, + PageSize: 1000 + } + + Api.getCloudConfig(_param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + return + } + + this.setState({tabMenus: res.data || []}) + }) + } + + billSubmit = () => { + const { dicts, values, billMenus } = this.state + + let _param = { + func: 'sPC_Get_LongParam', + MenuID: values + } + + this.setState({saveing: true}) + + let temp = billMenus.filter(item => item.ID === values)[0] + + Api.getCloudConfig(_param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + this.setState({saveing: false}) + return + } + + let config = null + if (res.LongParam) { + try { + config = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam))) + } catch (e) { + console.warn('Parse Failure') + config = '' + } + } + + if (!config) { + notification.warning({ + top: 92, + message: '鏈幏鍙栧埌妯℃澘閰嶇疆淇℃伅', + duration: 5 + }) + this.setState({saveing: false}) + return + } + + let btnDict = {} + let titDict = {} + let lisDict = {} + let regs = [] + + dicts.forEach(item => { + if (item.type === 'button') { + btnDict[item.reg] = item.value + } else if (item.type === 'title') { + titDict[item.reg] = item.value + } else if (item.type === 'list') { + lisDict[item.reg] = item.value + } else if (item.type === 'text') { + regs.push({reg: new RegExp(item.reg, 'g'), value: item.value, sort: item.reg.length}) + } + }) + + regs.sort((a, b) => b.sort - a.sort) + + let tail = md5(window.GLOB.appkey + sessionStorage.getItem('lang')).toLowerCase() + + tail = tail.slice(-8) + + setLangTrans(config, btnDict, titDict, lisDict, regs, tail) + + if (config.components) { + let commonId = Utils.getuuid() + if (config.interfaces && config.interfaces.length > 0) { + config.interfaces = config.interfaces.map(inter => { + inter.uuid = md5(commonId + inter.uuid) + return inter + }) + } + config.components = MenuUtils.resetConfig(config.components, commonId, false) + config.tables = config.tables || [] + config.style = config.style || {} + } + + config.enabled = false + config.MenuNo = temp.PrintTempNO || '' + config.MenuName = temp.PrintTempName || '' + config.fstMenuId = 'BillPrintTemp' + config.parentId = 'BillPrintTemp' + config.uuid = values + config.MenuID = config.uuid + + config.open_edition = res.open_edition || '' + + let param = { + func: 'sPC_TrdMenu_AddUpt', + FstID: config.fstMenuId, + SndID: config.parentId, + ParentID: config.parentId, + MenuID: config.uuid, + MenuNo: config.MenuNo || '', + EasyCode: config.easyCode || '', + Template: config.Template, + MenuName: config.MenuName || '', + open_edition: config.open_edition, + PageParam: JSON.stringify({Template: config.Template, OpenType: config.OpenType || 'newtab'}) + } + + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + param.secretkey = Utils.encrypt('', param.timestamp) + + Api.getCloudConfig(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + this.setState({saveing: false}) + return + } + + notification.success({ + top: 92, + message: '杞崲鎴愬姛銆�', + duration: 5 + }) + + this.setState({ + saveing: false, + visible: false + }) + }) + }) + } + + tabSubmit = () => { + const { values, dicts, tabMenus } = this.state + + let param = { + func: 's_PrintTemplateMGetData', + Type: 'Y', + ID: values + } + + this.setState({saveing: true}) + + let temp = tabMenus.filter(item => item.ID === values)[0] + + Api.getCloudConfig(param).then(result => { + if (!result.status) { + notification.warning({ + top: 92, + message: result.message, + duration: 5 + }) + this.setState({saveing: false}) + } else if (!result.ConfigParam) { + notification.warning({ + top: 92, + message: '鏈幏鍙栧埌鎵撳嵃妯℃澘淇℃伅锛�', + duration: 5 + }) + this.setState({saveing: false}) + } else { + let config = '' + try { + config = JSON.parse(window.decodeURIComponent(window.atob(result.ConfigParam))) + } catch (e) { + config = '' + } + + if (!config) { + notification.warning({ + top: 92, + message: '鏈幏鍙栧埌鎵撳嵃妯℃澘淇℃伅锛�', + duration: 5 + }) + this.setState({saveing: false}) + return + } + + let titDict = {} + + dicts.forEach(item => { + if (item.type === 'title') { + titDict[item.reg] = item.value + } + }) + + config.elements.forEach(item => { + if (item.type === 'text' && item.value && titDict[item.value]) { + item.value = titDict[item.value] + } + }) + + config.name = temp.PrintTempName || '' + config.remark = temp.Remark || '' + config.PrintTempNO = temp.PrintTempNO || '' + + let _param = { + func: 's_PrintTemplateMSub', + ID: values, + ConfigParam: window.btoa(window.encodeURIComponent(JSON.stringify(config))), + Images: temp.Images || '', + PrintTempName: config.name, + Remark: config.remark, + PrintTempNO: config.PrintTempNO + } + + Api.getCloudConfig(_param).then(result => { + if (!result.status) { + notification.warning({ + top: 92, + message: result.message, + duration: 5 + }) + this.setState({saveing: false}) + return + } + + notification.success({ + top: 92, + message: '杞崲鎴愬姛銆�', + duration: 5 + }) + + this.setState({ + saveing: false, + visible: false + }) + }) + } + }) + } + render () { - const { visible, loading, saveing, menus } = this.state + const { visible, loading, saveing, menus, type, billMenus, tabMenus, images } = this.state return ( <> <Button type="primary" onClick={this.trigger}> - 娣诲姞 + 杞崲 </Button> <Modal wrapClassName="sync-menu-modal" - title="娣诲姞鑿滃崟" + title="鑿滃崟杞崲" visible={visible} - width={800} + width={600} closable={false} maskClosable={false} onOk={this.submit} @@ -519,7 +851,31 @@ destroyOnClose > {loading ? <Spin /> : <div> - <Cascader onChange={(val) => this.setState({values: val})} options={menus} expandTrigger="hover" placeholder="璇烽�夋嫨妯℃澘鑿滃崟"/> + <Radio.Group defaultValue="menu" onChange={this.onChange}> + <Radio.Button value="menu">鑿滃崟</Radio.Button> + <Radio.Button value="bill">鍗曟嵁鎵撳嵃妯℃澘</Radio.Button> + <Radio.Button value="tab">鏍囩鎵撳嵃妯℃澘</Radio.Button> + </Radio.Group> + {type === 'menu' ? <Cascader popupClassName="sync-cascader" onChange={(val) => this.setState({values: val})} options={menus} expandTrigger="hover" placeholder="璇烽�夋嫨鑿滃崟"/> : null} + {type === 'bill' ? <Select + showSearch + placeholder="璇烽�夋嫨鍗曟嵁妯℃澘" + dropdownMatchSelectWidth={false} + onChange={(val, option) => this.setState({values: val, images: option.props.images || ''})} + filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} + > + {billMenus.map((item, i) => (<Select.Option key={i} images={item.Images || ''} value={item.ID}>{`${item.PrintTempName}锛�${item.PrintTempNO}锛塦}</Select.Option>))} + </Select> : null} + {type === 'tab' ? <Select + showSearch + placeholder="璇烽�夋嫨鏍囩妯℃澘" + dropdownMatchSelectWidth={false} + onChange={(val, option) => this.setState({values: val, images: option.props.images || ''})} + filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} + > + {tabMenus.map((item, i) => (<Select.Option key={i} images={item.Images || ''} value={item.ID}>{`${item.PrintTempName}锛�${item.PrintTempNO}锛塦}</Select.Option>))} + </Select> : null} + {images ? <img src={images} alt=""/> : null} </div>} </Modal> </> -- Gitblit v1.8.0