import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import moment from 'moment'
|
import {connect} from 'react-redux'
|
import { is, fromJS } from 'immutable'
|
import { Button, Modal, notification, message, Icon } from 'antd'
|
import * as XLSX from 'xlsx'
|
|
import Utils from '@/utils/utils.js'
|
import options from '@/store/options.js'
|
import Api from '@/api'
|
import zhCN from '@/locales/zh-CN/main.js'
|
import enUS from '@/locales/en-US/main.js'
|
import MKEmitter from '@/utils/events.js'
|
import './index.scss'
|
|
class ExcelOutButton extends Component {
|
static propTpyes = {
|
BID: PropTypes.string, // 主表ID
|
position: PropTypes.any, // 按钮位置,工具栏为toolbar
|
show: PropTypes.any, // 显示样式
|
Tab: PropTypes.any, // 如果当前元素为标签时,tab为标签信息
|
btn: PropTypes.object, // 按钮
|
setting: PropTypes.any, // 页面通用设置
|
updateStatus: PropTypes.func, // 按钮状态更新
|
}
|
|
state = {
|
dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
|
excelName: '', // 文件名
|
search: '', // 搜索条件
|
loading: false // 导出中
|
}
|
|
shouldComponentUpdate (nextProps, nextState) {
|
return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
|
}
|
|
componentDidMount () {
|
const { position } = this.props
|
|
if (position === 'toolbar') {
|
MKEmitter.addListener('triggerBtnId', this.actionTrigger)
|
}
|
MKEmitter.addListener('returnModuleParam', this.triggerExcelout)
|
}
|
|
componentWillUnmount () {
|
this.setState = () => {
|
return
|
}
|
MKEmitter.removeListener('triggerBtnId', this.actionTrigger)
|
MKEmitter.removeListener('returnModuleParam', this.triggerExcelout)
|
}
|
|
/**
|
* @description 按钮状态改变
|
*/
|
updateStatus = (type, name) => {
|
if (type === 'start') {
|
this.setState({
|
loading: true,
|
excelName: name
|
})
|
} else if (type === 'over') {
|
this.setState({
|
loading: false
|
})
|
}
|
}
|
|
/**
|
* @description 触发按钮操作
|
*/
|
actionTrigger = (triggerId) => {
|
const { setting, Tab, BID, btn } = this.props
|
const { loading } = this.state
|
|
if ((triggerId && btn.uuid !== triggerId) || loading) return
|
|
if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
|
notification.warning({
|
top: 92,
|
message: '需要上级主键值!',
|
duration: 5
|
})
|
return
|
}
|
|
if (btn.intertype === 'system' && setting.interType !== 'system') {
|
notification.warning({
|
top: 92,
|
message: '导出按钮配置错误!',
|
duration: 5
|
})
|
return
|
} else if (btn.intertype === 'inner' && !btn.innerFunc) {
|
notification.warning({
|
top: 92,
|
message: '导出按钮配置错误!',
|
duration: 5
|
})
|
return
|
} else if (!btn.verify || !btn.verify.columns || btn.verify.columns.length === 0) {
|
notification.warning({
|
top: 92,
|
message: '请设置导出列!',
|
duration: 5
|
})
|
return
|
}
|
|
MKEmitter.emit('queryModuleParam', btn.$menuId, btn.uuid)
|
if (window.GLOB.systemType === 'production') {
|
MKEmitter.emit('queryTrigger', {menuId: btn.uuid, name: '导出Excel'})
|
}
|
}
|
|
/**
|
* @description Excel 导出
|
*/
|
triggerExcelout = (menuId, btnId, viewParam) => {
|
const { btn } = this.props
|
|
if (btn.$menuId !== menuId || btn.uuid !== btnId || !viewParam) return
|
|
let name = `${viewParam.menuName}${moment().format('YYYYMMDDHHmmss')}.xlsx`
|
let pageSize = 1000
|
|
if (btn.search === 'true' && viewParam.search && viewParam.search.length > 0) {
|
let valid = false
|
viewParam.search.forEach(item => {
|
if (item.value || item.value === 0) {
|
valid = true
|
}
|
})
|
|
if (!valid) {
|
notification.warning({
|
top: 92,
|
message: '搜索条件不可为空!',
|
duration: 5
|
})
|
return
|
}
|
}
|
|
if (btn.intertype === 'system' && !viewParam.arr_field) { // 使用系统函数
|
notification.warning({
|
top: 92,
|
message: '未设置显示列!',
|
duration: 5
|
})
|
return
|
} else if (btn.intertype === 'system' && btn.verify && btn.verify.enable === 'true') {
|
this.setState({search: fromJS(viewParam.search).toJS()})
|
}
|
|
this.updateStatus('start', name)
|
|
if (btn.pagination !== 'true') {
|
if (btn.intertype === 'system') { // 使用系统函数
|
let param = this.getExcelDefaultParam(viewParam.arr_field, viewParam.orderBy, viewParam.search)
|
|
Api.genericInterface(param).then(result => {
|
if (result.status) {
|
this.exportExcel(result.data)
|
} else {
|
this.execError(result)
|
}
|
}, () => {
|
this.execError({})
|
})
|
} else if (btn.intertype === 'inner') { // 使用内部函数
|
let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search)
|
param.func = btn.innerFunc
|
|
Api.genericInterface(param).then(result => {
|
if (result.status) {
|
this.exportExcel(result.data)
|
} else {
|
this.execError(result)
|
}
|
}, () => {
|
this.execError({})
|
})
|
} else if (btn.intertype === 'outer' && !btn.innerFunc) { // 使用外部函数
|
let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search)
|
|
if (this.props.menuType === 'HS') {
|
if (btn.sysInterface === 'true' && options.cloudServiceApi) {
|
param.rduri = options.cloudServiceApi
|
} else if (btn.sysInterface !== 'true') {
|
if (window.GLOB.systemType === 'production' && btn.proInterface) {
|
param.rduri = btn.proInterface
|
} else {
|
param.rduri = btn.interface
|
}
|
}
|
} else {
|
if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) {
|
param.rduri = window.GLOB.mainSystemApi
|
} else if (btn.sysInterface !== 'true') {
|
if (window.GLOB.systemType === 'production' && btn.proInterface) {
|
param.rduri = btn.proInterface
|
} else {
|
param.rduri = btn.interface
|
}
|
}
|
}
|
|
if (btn.outerFunc) {
|
param.func = btn.outerFunc
|
}
|
|
Api.genericInterface(param).then(result => {
|
if (result.status) {
|
this.exportExcel(result.data)
|
} else {
|
this.execError(result)
|
}
|
}, () => {
|
this.execError({})
|
})
|
} else if (btn.intertype === 'outer' && btn.innerFunc) {
|
let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search)
|
param.func = btn.innerFunc
|
|
Api.genericInterface(param).then(res => {
|
if (res.status) {
|
delete res.ErrCode
|
delete res.ErrMesg
|
delete res.message
|
delete res.status
|
|
if (this.props.menuType === 'HS') {
|
if (btn.sysInterface === 'true' && options.cloudServiceApi) {
|
res.rduri = options.cloudServiceApi
|
} else if (btn.sysInterface !== 'true') {
|
if (window.GLOB.systemType === 'production' && btn.proInterface) {
|
res.rduri = btn.proInterface
|
} else {
|
res.rduri = btn.interface
|
}
|
}
|
} else {
|
if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) {
|
res.rduri = window.GLOB.mainSystemApi
|
} else if (btn.sysInterface !== 'true') {
|
if (window.GLOB.systemType === 'production' && btn.proInterface) {
|
res.rduri = btn.proInterface
|
} else {
|
res.rduri = btn.interface
|
}
|
}
|
}
|
|
if (btn.outerFunc) {
|
res.func = btn.outerFunc
|
}
|
|
Api.genericInterface(res).then(result => {
|
if (result.status) {
|
this.exportExcel(result.data)
|
} else {
|
this.execError(result)
|
}
|
})
|
} else {
|
this.execError(res)
|
}
|
}, () => {
|
this.execError({})
|
})
|
} else {
|
notification.warning({
|
top: 92,
|
message: '导出按钮设置错误!',
|
duration: 5
|
})
|
this.updateStatus('over')
|
}
|
} else if (btn.intertype === 'outer' && btn.innerFunc) { // 分页,且两步请求
|
this.getExcelOutDoubleData(viewParam, 1, pageSize, [])
|
} else { // 分页,一步请求
|
this.getExcelOutData(viewParam, 1, pageSize, [])
|
}
|
}
|
|
/**
|
* @description 两步分页请求
|
*/
|
getExcelOutDoubleData = (viewParam, pageIndex, pageSize, data) => {
|
const { btn } = this.props
|
let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search, true, pageIndex, pageSize)
|
param.func = btn.innerFunc
|
|
Api.genericInterface(param).then(res => {
|
if (res.status) {
|
delete res.ErrCode
|
delete res.ErrMesg
|
delete res.message
|
delete res.status
|
|
if (this.props.menuType === 'HS') {
|
if (btn.sysInterface === 'true' && options.cloudServiceApi) {
|
res.rduri = options.cloudServiceApi
|
} else if (btn.sysInterface !== 'true') {
|
if (window.GLOB.systemType === 'production' && btn.proInterface) {
|
res.rduri = btn.proInterface
|
} else {
|
res.rduri = btn.interface
|
}
|
}
|
} else {
|
if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) {
|
res.rduri = window.GLOB.mainSystemApi
|
} else if (btn.sysInterface !== 'true') {
|
if (window.GLOB.systemType === 'production' && btn.proInterface) {
|
res.rduri = btn.proInterface
|
} else {
|
res.rduri = btn.interface
|
}
|
}
|
}
|
|
if (btn.outerFunc) {
|
res.func = btn.outerFunc
|
}
|
|
Api.genericInterface(res).then(result => {
|
if (result.status) {
|
if (!result.data) {
|
this.execError({ErrCode: 'N', message: '未获取到数据信息!'})
|
} else if (result.data.length >= pageSize) {
|
data = data.concat(result.data)
|
pageIndex++
|
this.getExcelOutDoubleData(viewParam, pageIndex, pageSize, data)
|
} else {
|
data = data.concat(result.data)
|
this.exportExcel(data)
|
}
|
} else {
|
this.execError(result)
|
}
|
}, () => {
|
this.execError({})
|
})
|
} else {
|
this.execError(res)
|
}
|
}, () => {
|
this.execError({})
|
})
|
}
|
|
/**
|
* @description 一步分页请求
|
*/
|
getExcelOutData = (viewParam, pageIndex, pageSize, data) => {
|
const { btn } = this.props
|
let param = null
|
if (btn.intertype === 'system') { // 使用系统函数
|
if (!viewParam.arr_field) {
|
this.execError({ErrCode: 'N', message: '未设置显示列!'})
|
return
|
}
|
|
param = this.getExcelDefaultParam(viewParam.arr_field, viewParam.orderBy, viewParam.search, true, pageIndex, pageSize)
|
} else if (btn.intertype === 'inner') { // 使用内部函数
|
param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search, true, pageIndex, pageSize)
|
param.func = btn.innerFunc
|
|
} else if (btn.intertype === 'outer' && !btn.innerFunc) { // 使用外部函数
|
param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search, true, pageIndex, pageSize)
|
|
if (this.props.menuType === 'HS') {
|
if (btn.sysInterface === 'true' && options.cloudServiceApi) {
|
param.rduri = options.cloudServiceApi
|
} else if (btn.sysInterface !== 'true') {
|
if (window.GLOB.systemType === 'production' && btn.proInterface) {
|
param.rduri = btn.proInterface
|
} else {
|
param.rduri = btn.interface
|
}
|
}
|
} else {
|
if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) {
|
param.rduri = window.GLOB.mainSystemApi
|
} else if (btn.sysInterface !== 'true') {
|
if (window.GLOB.systemType === 'production' && btn.proInterface) {
|
param.rduri = btn.proInterface
|
} else {
|
param.rduri = btn.interface
|
}
|
}
|
}
|
|
if (btn.outerFunc) {
|
param.func = btn.outerFunc
|
}
|
}
|
|
Api.genericInterface(param).then(result => {
|
if (result.status) {
|
if (!result.data) {
|
this.execError({ErrCode: 'N', message: '未获取到数据信息!'})
|
} else if (result.data.length >= pageSize) {
|
data = data.concat(result.data)
|
pageIndex++
|
this.getExcelOutData(viewParam, pageIndex, pageSize, data)
|
} else {
|
data = data.concat(result.data)
|
this.exportExcel(data)
|
}
|
} else {
|
this.execError(result)
|
}
|
}, () => {
|
this.execError({})
|
})
|
}
|
|
/**
|
* @description Excel 生成
|
*/
|
exportExcel = (data) => {
|
const { btn } = this.props
|
|
try {
|
let imgCol = btn.verify.columns.filter(col => col.type === 'image')[0]
|
|
if (imgCol) {
|
const column = btn.verify.columns.map(item => {
|
let col = {
|
title: item.Text,
|
key: item.Column,
|
type: 'text',
|
width: (item.Width || 20) * 10
|
}
|
if (item.type === 'image') {
|
col.type = 'image'
|
col.height = col.width
|
}
|
return col
|
})
|
|
let table = []
|
|
data && data.forEach((item, index) => {
|
let _row = {}
|
|
item.$Index = index + 1 + ''
|
|
btn.verify.columns.forEach((col, i) => {
|
if (item[col.Column] && col.abs === 'true') {
|
_row[col.Column] = Math.abs(item[col.Column])
|
} else {
|
_row[col.Column] = item[col.Column]
|
}
|
})
|
|
table.push(_row)
|
})
|
|
this.table2excel(column, table, this.state.excelName.replace(/\.xlsx/ig, '.xls'))
|
|
if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) {
|
this.execCustomScript()
|
} else {
|
this.execSuccess({ErrCode: 'S', ErrMesg: '导出成功!'})
|
}
|
|
} else {
|
let _header = []
|
let _topRow = {}
|
let colwidth = []
|
let abses = []
|
|
btn.verify.columns.forEach(col => {
|
if (_topRow[col.Column]) return
|
|
_header.push(col.Column)
|
_topRow[col.Column] = col.Text
|
|
if (col.abs === 'true') {
|
abses.push(col.Column)
|
}
|
|
colwidth.push({width: col.Width || 20})
|
})
|
|
let table = []
|
|
table.push(_topRow)
|
|
data && data.forEach((item, index) => {
|
let _row = {}
|
|
item.$Index = index + 1 + ''
|
|
_header.forEach(field => {
|
if (item[field] && abses.includes(field)) {
|
_row[field] = Math.abs(item[field])
|
} else {
|
_row[field] = item[field]
|
}
|
})
|
|
table.push(_row)
|
})
|
|
const ws = XLSX.utils.json_to_sheet(table, {header: _header, skipHeader: true})
|
|
ws['!cols'] = colwidth
|
|
const wb = XLSX.utils.book_new()
|
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
|
|
XLSX.writeFile(wb, this.state.excelName)
|
|
if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) {
|
this.execCustomScript()
|
} else {
|
this.execSuccess({ErrCode: 'S', ErrMesg: '导出成功!'})
|
}
|
}
|
} catch (e) {
|
this.execError({ErrCode: 'N', message: 'Excel生成失败!'})
|
}
|
}
|
|
table2excel = (column, data, excelName) => {
|
let thead = column.reduce((result, item) => {
|
return result + `<th>${item.title}</th>`
|
}, '')
|
|
thead = `<thead><tr>${thead}</tr></thead>`
|
|
let tbody = data.reduce((result, row) => {
|
const temp = column.reduce((tds, col) => {
|
let cell = '<td></td>'
|
if (col.type !== 'image' || !row[col.key]) {
|
cell = `<td style="width: ${col.width}px;">${row[col.key]}</td>`
|
} else if (col.type === 'image') {
|
cell = `<td style="width: ${col.width}px;height: ${col.height}px;"><img src="${row[col.key]}" width="${col.width * 0.75}"></td>`
|
}
|
return tds + cell
|
}, '')
|
return result + `<tr>${temp}</tr>`
|
}, '')
|
|
tbody = `<tbody>${tbody}</tbody>`
|
|
const table = thead + tbody
|
|
let html = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>"
|
html += '<head><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">'
|
html += '<xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>Sheet1</x:Name><x:WorksheetOptions><x:Print><x:ValidPrinterInfo/></x:Print></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml></head>'
|
html += `<body><table>${table}</table></body>`
|
html += '</html>'
|
|
let url = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(html)
|
// let url = 'data:application/vnd.ms-excel;base64,' + window.btoa(unescape(encodeURIComponent(html)))
|
let link = document.createElement('a')
|
link.href = url
|
link.download = excelName
|
document.body.appendChild(link)
|
link.click()
|
document.body.removeChild(link)
|
}
|
|
|
/**
|
* @description 执行自定义脚本
|
*/
|
execCustomScript = () => {
|
const { btn } = this.props
|
const { search } = this.state
|
let script = btn.verify.script
|
|
if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
|
script = script.replace(/\$@/ig, '/*')
|
script = script.replace(/@\$/ig, '*/')
|
} else {
|
script = script.replace(/@\$|\$@/ig, '')
|
}
|
|
let allSearch = Utils.getAllSearchOptions(search)
|
let regoptions = allSearch.map(item => {
|
return {
|
reg: new RegExp('@' + item.key + '@', 'ig'),
|
value: `'${item.value}'`
|
}
|
})
|
|
regoptions.forEach(item => {
|
script = script.replace(item.reg, item.value)
|
})
|
|
let param = {
|
func: 'sPC_TableData_InUpDe',
|
menuname: btn.logLabel
|
}
|
|
if (this.props.BID) {
|
param.BID = this.props.BID
|
}
|
|
param.exec_type = 'y' // 后台解码
|
param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
param.secretkey = Utils.encrypt('', param.timestamp)
|
param.LText = Utils.formatOptions(param.LText)
|
|
if (this.props.menuType === 'HS') { // 函数 sPC_TableData_InUpDe 云端验证
|
param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
|
}
|
|
Api.genericInterface(param).then((res) => {
|
if (res.status) {
|
this.execSuccess({ErrCode: 'S', ErrMesg: '导出成功!'})
|
} else {
|
this.execError(res)
|
}
|
}, () => {
|
this.updateStatus('over')
|
})
|
}
|
|
/**
|
* @description 获取用户自定义存储过程传参
|
*/
|
getExcelCustomParam = (orderBy, search, pagination = false, pageIndex = 1, pageSize = 100) => {
|
let _search = Utils.formatCustomMainSearch(search)
|
|
let param = {
|
OrderCol: orderBy,
|
..._search
|
}
|
|
// 数据管理权限
|
if (sessionStorage.getItem('dataM') === 'true') {
|
param.dataM = 'Y'
|
}
|
|
if (this.props.BID) {
|
param.BID = this.props.BID
|
}
|
|
if (pagination) {
|
param.PageIndex = pageIndex
|
param.PageSize = pageSize
|
}
|
|
return param
|
}
|
|
/**
|
* @description 获取默认存储过程请求参数
|
*/
|
getExcelDefaultParam = (arr_field, orderBy, search, pagination = false, pageIndex = 1, pageSize = 100) => {
|
const { setting, btn } = this.props
|
|
let _search = Utils.joinMainSearchkey(search)
|
|
_search = _search ? 'where ' + _search : ''
|
|
let param = {
|
func: 'sPC_Get_TableData',
|
obj_name: 'data',
|
arr_field: arr_field,
|
custom_script: setting.customScript,
|
default_sql: setting.default || 'true',
|
menuname: btn.logLabel
|
}
|
|
// 数据管理权限
|
if (sessionStorage.getItem('dataM') === 'true') {
|
param.dataM = 'Y'
|
}
|
|
if (this.props.BID) {
|
param.BID = this.props.BID
|
}
|
|
let userName = sessionStorage.getItem('User_Name') || ''
|
let fullName = sessionStorage.getItem('Full_Name') || ''
|
let RoleID = sessionStorage.getItem('role_id') || ''
|
let departmentcode = sessionStorage.getItem('departmentcode') || ''
|
let organization = sessionStorage.getItem('organization') || ''
|
let city = sessionStorage.getItem('city') || ''
|
|
if (sessionStorage.getItem('isEditState') === 'true') {
|
userName = sessionStorage.getItem('CloudUserName') || ''
|
fullName = sessionStorage.getItem('CloudFullName') || ''
|
}
|
|
let _dataresource = setting.dataresource
|
|
let regoptions = null
|
if (setting.queryType === 'statistics' || param.custom_script) {
|
let allSearch = Utils.getAllSearchOptions(search)
|
|
regoptions = allSearch.map(item => {
|
return {
|
reg: new RegExp('@' + item.key + '@', 'ig'),
|
value: `'${item.value}'`
|
}
|
})
|
|
regoptions.push({
|
reg: new RegExp('@login_city@', 'ig'),
|
value: city
|
}, {
|
reg: new RegExp('@userName@', 'ig'),
|
value: userName
|
}, {
|
reg: new RegExp('@fullName@', 'ig'),
|
value: fullName
|
}, {
|
reg: new RegExp('@orderBy@', 'ig'),
|
value: orderBy
|
}, {
|
reg: new RegExp('@pageSize@', 'ig'),
|
value: pageSize
|
}, {
|
reg: new RegExp('@pageIndex@', 'ig'),
|
value: pageIndex
|
})
|
}
|
|
if (setting.queryType === 'statistics') { // 统计数据源,内容替换
|
regoptions.forEach(item => {
|
_dataresource = _dataresource.replace(item.reg, item.value)
|
})
|
_search = ''
|
}
|
|
let LText = ''
|
|
if (setting.default !== 'false' && !pagination) {
|
LText = ` select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows `
|
} else if (setting.default !== 'false') {
|
LText = ` select top ${pageSize} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable where rows > ${pageSize * (pageIndex - 1)} order by tmptable.rows `
|
}
|
|
if (param.custom_script) {
|
param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@departmentcode nvarchar(50),@organization nvarchar(50),@login_city nvarchar(50) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @departmentcode='${departmentcode}', @organization='${organization}', @login_city='${city}'
|
${param.custom_script}
|
`
|
regoptions.forEach(item => {
|
param.custom_script = param.custom_script.replace(item.reg, item.value)
|
})
|
|
if (LText) {
|
LText += `
|
aaa:
|
if @ErrorCode!=''
|
insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@
|
`
|
} else {
|
param.custom_script += `
|
aaa:
|
if @ErrorCode!=''
|
insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@
|
`
|
}
|
}
|
|
// 测试系统打印查询语句
|
if ((options.sysType === 'local' && !window.GLOB.systemType) || window.debugger === true) {
|
param.custom_script && console.info(`${LText ? '' : '/*不执行默认sql*/\n'}${param.custom_script}`)
|
LText && console.info(LText)
|
}
|
|
param.custom_script = Utils.formatOptions(param.custom_script)
|
param.LText = Utils.formatOptions(LText)
|
param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
param.secretkey = Utils.encrypt(param.LText, param.timestamp)
|
param.DateCount = ''
|
|
if (this.props.menuType === 'HS') { // 云端数据验证
|
param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
|
}
|
|
return param
|
}
|
|
/**
|
* @description 操作成功后处理
|
* 1、excel导出,成功后取消导出按钮加载中状态
|
* 2、状态码为 S 时,显示成功信息后系统默认信息
|
* 3、状态码为 -1 时,不显示任何信息
|
* 4、模态框执行成功后是否关闭
|
* 5、通知主列表刷新
|
*/
|
execSuccess = (res) => {
|
const { btn } = this.props
|
|
if (res && res.ErrCode === 'S') { // 执行成功
|
notification.success({
|
top: 92,
|
message: res.ErrMesg || this.state.dict['main.action.confirm.success'],
|
duration: btn.verify && btn.verify.stime ? btn.verify.stime : 2
|
})
|
} else if (res && res.ErrCode === 'Y') { // 执行成功
|
Modal.success({
|
title: res.ErrMesg || this.state.dict['main.action.confirm.success']
|
})
|
} else if (res && res.ErrCode === '-1') { // 完成后不提示
|
|
}
|
|
this.setState({
|
loading: false
|
})
|
|
if (btn.execSuccess !== 'never') {
|
MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execSuccess, btn)
|
}
|
}
|
|
/**
|
* @description 操作失败后处理
|
* 1、状态码为 E、N、F、NM 时,显示相应提示信息
|
* 2、excel导出,失败后取消导出按钮加载中状态
|
* 3、通知主列表刷新
|
*/
|
execError = (res) => {
|
const { btn } = this.props
|
|
if (res.ErrCode === 'E') {
|
Modal.error({
|
title: res.message || res.ErrMesg,
|
})
|
} else if (res.ErrCode === 'N') {
|
notification.error({
|
top: 92,
|
message: res.message || res.ErrMesg,
|
duration: btn.verify && btn.verify.ntime ? btn.verify.ntime : 10
|
})
|
} else if (res.ErrCode === 'F') {
|
notification.error({
|
className: 'notification-custom-error',
|
top: 92,
|
message: res.message || res.ErrMesg,
|
duration: btn.verify && btn.verify.ftime ? btn.verify.ftime : 10
|
})
|
} else if (res.ErrCode === 'NM') {
|
message.error(res.message || res.ErrMesg)
|
}
|
|
this.setState({
|
loading: false
|
})
|
|
if (btn.execError !== 'never') {
|
MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn)
|
}
|
}
|
|
render() {
|
const { btn, show } = this.props
|
const { loading } = this.state
|
|
if (show === 'actionList') {
|
return (
|
<Button
|
className={'mk-btn mk-' + btn.class}
|
icon={btn.icon}
|
onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
|
loading={loading}
|
>{btn.label}</Button>
|
)
|
} else { // icon、text、 all 卡片
|
let label = ''
|
let icon = ''
|
|
if (show === 'button') {
|
label = btn.label
|
icon = btn.icon || ''
|
} else if (show === 'link') {
|
label = <span>{btn.label}{btn.icon ? <Icon style={{marginLeft: '8px'}} type={btn.icon}/> : ''}</span>
|
icon = ''
|
} else if (show === 'icon') {
|
icon = btn.icon || 'download'
|
// } else if (show === 'text') {
|
} else {
|
label = btn.label
|
}
|
|
return (
|
<Button
|
type="link"
|
title={show === 'icon' ? btn.label : ''}
|
loading={loading}
|
style={btn.style}
|
icon={icon}
|
onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
|
>{label}</Button>
|
)
|
}
|
}
|
}
|
|
const mapStateToProps = (state) => {
|
return {
|
menuType: state.editLevel
|
}
|
}
|
|
const mapDispatchToProps = () => {
|
return {}
|
}
|
|
export default connect(mapStateToProps, mapDispatchToProps)(ExcelOutButton)
|