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