import React, { Component } from 'react'
|
import PropTypes from 'prop-types'
|
import { fromJS } from 'immutable'
|
import { Modal, Button, Tooltip, Table } from 'antd'
|
import { ClockCircleOutlined, CheckCircleOutlined, CloseCircleOutlined, LoadingOutlined } from '@ant-design/icons'
|
|
import Api from '@/api'
|
import Utils from '@/utils/utils.js'
|
import { formatSearch, joinMainSearchkey, getSearchRegs } from '@/utils/utils-custom.js'
|
import './index.scss'
|
|
class DebugSql extends Component {
|
static propTpyes = {
|
config: PropTypes.object
|
}
|
|
state = {
|
visible: false,
|
sqlList: [],
|
status: '',
|
successIds: [],
|
errorIds: [],
|
errorMsg: {},
|
execId: '',
|
columns: [
|
{
|
title: '组件名',
|
dataIndex: 'name',
|
width: '25%'
|
},
|
{
|
title: '名称',
|
dataIndex: 'label',
|
width: '25%'
|
},
|
{
|
title: '上级',
|
dataIndex: 'supName',
|
width: '20%',
|
render: (_, record) => {
|
if (record.supName) {
|
return `${record.supName}-${record.tabName}`
|
}
|
return ''
|
}
|
},
|
{
|
title: '状态',
|
dataIndex: 'status',
|
align: 'center',
|
width: '15%',
|
render: (_, record) => {
|
let status = <ClockCircleOutlined />
|
|
if (this.state.successIds.includes(record.uuid)) {
|
status = <CheckCircleOutlined />
|
} else if (this.state.errorIds.includes(record.uuid)) {
|
if (this.state.errorMsg[record.uuid]) {
|
status = <Tooltip placement="topLeft" title={this.state.errorMsg[record.uuid]}>
|
<CloseCircleOutlined />
|
</Tooltip>
|
} else {
|
status = <CloseCircleOutlined />
|
}
|
} else if (record.uuid === this.state.execId) {
|
status = <LoadingOutlined />
|
}
|
return status
|
}
|
},
|
{
|
title: 'DeepSeek',
|
dataIndex: 'DeepSeek',
|
align: 'center',
|
width: '15%',
|
render: (_, record) => {
|
return <span className="anticon anticon-deepseek" onClick={() => {
|
if (record.sql) {
|
sessionStorage.setItem('deepseek_sql', `请检查以下代码,指出其可优化的地方\n${record.sql}`)
|
|
window.open('#/ai')
|
|
setTimeout(() => {
|
sessionStorage.removeItem('deepseek_sql')
|
}, 0)
|
}
|
}}>
|
<svg viewBox="0 0 1391 1024" width="1.5em" height="1.5em" fill="currentColor">
|
<path d="M1361.92 83.136c-14.272-7.04-20.416 6.272-28.736 12.992-2.816 2.24-5.248 5.12-7.68 7.68-20.8 22.336-45.056 36.864-76.8 35.136-46.464-2.56-86.08 12.032-121.152 47.616-7.552-43.904-32.256-70.08-69.888-86.912-19.712-8.768-39.68-17.472-53.376-36.48-9.664-13.44-12.288-28.48-17.216-43.264-3.008-8.96-6.08-18.112-16.32-19.712-11.2-1.728-15.552 7.68-19.968 15.424-17.536 32.128-24.32 67.52-23.68 103.296 1.6 80.448 35.52 144.576 103.04 190.144 7.68 5.312 9.6 10.56 7.168 18.176-4.608 15.68-10.048 30.976-14.912 46.592-3.072 10.112-7.68 12.352-18.304 8a308.224 308.224 0 0 1-97.28-66.176c-48-46.4-91.392-97.664-145.472-137.792a655.36 655.36 0 0 0-38.528-26.432c-55.232-53.76 7.232-97.792 21.632-103.04 15.104-5.376 5.312-24.128-43.52-23.936C652.032 24.704 607.36 41.024 550.4 62.72a156.8 156.8 0 0 1-26.048 7.68 542.016 542.016 0 0 0-161.408-5.696c-105.6 11.904-189.888 61.824-251.904 147.2C36.608 314.24 19.072 430.848 40.512 552.32c22.528 128 87.808 234.048 188.16 316.992 104 85.888 223.808 128 360.512 120 82.944-4.864 175.424-16 279.68-104.32 26.368 13.056 53.888 18.24 99.712 22.272 35.2 3.328 69.184-1.792 95.424-7.232 41.216-8.704 38.4-46.848 23.424-53.888-120.576-56.32-94.208-33.408-118.272-51.84 61.376-72.768 153.792-148.224 189.952-392.768 2.816-19.392 0.384-31.552 0-47.36-0.256-9.536 1.92-13.312 12.8-14.4a231.04 231.04 0 0 0 86.592-26.56c78.272-42.88 109.696-113.024 117.184-197.184 1.088-12.928-0.256-26.24-13.76-32.96z m-681.408 757.76c-116.928-92.096-173.696-122.368-197.12-120.96-21.888 1.152-17.984 26.304-13.184 42.624 5.12 16.128 11.648 27.328 20.8 41.408 6.464 9.408 10.752 23.424-6.272 33.92-37.76 23.424-103.232-7.872-106.24-9.472-76.288-44.8-140.032-104.192-184.96-185.344-43.264-78.08-68.48-161.92-72.576-251.328-1.152-21.632 5.184-29.312 26.688-33.152a265.6 265.6 0 0 1 85.696-2.24c119.296 17.472 220.928 71.04 306.048 155.52 48.768 48.32 85.504 105.92 123.392 162.176 40.256 59.776 83.648 116.672 138.88 163.392 19.392 16.32 35.072 28.8 49.92 37.952-44.928 5.056-119.872 6.08-171.008-34.496z m56.064-361.024a17.152 17.152 0 1 1 2.752 9.6 16.896 16.896 0 0 1-2.752-9.664z m174.08 89.472a102.72 102.72 0 0 1-33.024 8.96 70.528 70.528 0 0 1-44.736-14.272c-15.296-12.8-26.176-19.968-30.848-42.496a99.264 99.264 0 0 1 0.832-32.96c4.032-18.368-0.384-30.08-13.248-40.768-10.624-8.768-23.872-11.072-38.592-11.072a31.168 31.168 0 0 1-14.272-4.416c-6.144-3.072-11.136-10.752-6.336-20.16 1.536-3.008 8.96-10.304 10.752-11.712 19.84-11.328 42.88-7.68 64.192 0.896 19.712 8.064 34.56 22.848 56 43.776 21.952 25.28 25.792 32.384 38.4 51.328 9.856 14.848 18.816 30.208 24.96 47.616 3.776 10.88-1.152 19.776-14.08 25.28z"></path>
|
</svg>
|
</span>
|
}
|
}
|
]
|
}
|
|
sqlList = []
|
verSqls = []
|
linkMain = null
|
modules = null
|
supError = null
|
|
trigger = () => {
|
let config = fromJS(this.props.config).toJS()
|
|
let error = ''
|
|
let check = (components) => {
|
components.forEach(item => {
|
if (error) return
|
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
check(tab.components)
|
})
|
return
|
} else if (item.type === 'group') {
|
check(item.components)
|
return
|
} else if (!item.errors || item.errors.length === 0) {
|
return
|
}
|
|
item.errors.forEach(err => {
|
if (err.level !== 0 || error) return
|
error = `组件《${item.name}》${err.detail}`
|
})
|
})
|
}
|
|
check(config.components)
|
|
if (error) {
|
Modal.warning({
|
title: error,
|
okText: '知道了'
|
})
|
return
|
}
|
|
this.modules = {}
|
this.supError = null
|
|
this.getModules(config.components, config.interfaces)
|
|
config.interfaces && config.interfaces.forEach(item => {
|
if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') {
|
let id = item.setting.supModule[item.setting.supModule.length - 1]
|
if (!this.modules[id]) {
|
this.supError = item.name + '(公共数据源)'
|
}
|
}
|
})
|
|
this.checklink(config.components)
|
|
if (this.supError) {
|
Modal.warning({
|
title: this.supError + ':上级组件不存在!',
|
okText: '知道了'
|
})
|
return
|
}
|
|
let getMsearch = (components) => {
|
let val = null
|
components.forEach(com => {
|
if (com.type !== 'search') return
|
|
if (com.wrap && com.wrap.supModule && com.wrap.supModule.length > 0) {
|
let supModule = com.wrap.supModule[com.wrap.supModule.length - 1];
|
|
(com.search || []).forEach(item => {
|
if (item.type === 'datemonth') {
|
if (item.initval && item.dateShift) {
|
val = {supModule: supModule, name: com.name}
|
}
|
} else if (item.type === 'daterange') {
|
if (item.initval && item.dateShift) {
|
val = {supModule: supModule, name: com.name}
|
}
|
} else if ((item.type === 'select' || item.type === 'link') && item.resourceType === '1') {
|
if (/@BID@/ig.test(item.dataSource)) {
|
val = {supModule: supModule, name: com.name}
|
}
|
}
|
})
|
}
|
})
|
|
return val
|
}
|
|
let checkSearch = (components, mSearch) => {
|
components.forEach(item => {
|
if (error) return
|
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
let _ms = getMsearch(tab.components)
|
|
if (_ms) {
|
checkSearch(tab.components, _ms)
|
} else {
|
checkSearch(tab.components, mSearch)
|
}
|
})
|
return
|
} else if (item.type === 'group') {
|
checkSearch(item.components, mSearch)
|
return
|
} else if (!mSearch || !item.setting) {
|
return
|
} else if (!(item.type === 'table' || (item.type === 'card' && ['datacard', 'dualdatacard'].includes(item.subtype)))) {
|
return
|
}
|
|
if (item.setting.useMSearch === 'true' && item.setting.supModule && item.setting.supModule[0] !== 'empty') {
|
let id = item.setting.supModule[item.setting.supModule.length - 1]
|
if (mSearch.supModule !== id) {
|
error = `${item.name} 使用了外部搜索,但与外部搜索(${mSearch.name})的上级组件不一致。`
|
}
|
}
|
})
|
}
|
|
checkSearch(config.components, getMsearch(config.components))
|
|
if (error) {
|
Modal.warning({
|
title: error,
|
okText: '知道了'
|
})
|
return
|
}
|
|
this.sqlList = []
|
this.linkMain = []
|
|
let regs = [
|
{ reg: /@userName@/ig, value: `'User_Name'` },
|
{ reg: /@fullName@/ig, value: `'Full_Name'` },
|
{ reg: /\$@/ig, value: '' },
|
{ reg: /@\$/ig, value: '' },
|
{ reg: /@datam@/ig, value: `''` },
|
]
|
|
if (config.urlFields) {
|
config.urlFields.forEach(field => {
|
regs.push({
|
reg: new RegExp('@' + field + '@', 'ig'),
|
value: `'mk'`
|
})
|
})
|
}
|
|
let process = config.process === 'true'
|
if (process) {
|
regs.push({ reg: /@works_flow_code@/ig, value: `'1949-10-01 15:00:00'` })
|
}
|
|
let _mainSearch = []
|
|
if (sessionStorage.getItem('appType') === 'mob') {
|
let search = []
|
let ms = null
|
config.components.forEach(item => {
|
if (item.type === 'topbar' && item.wrap.type !== 'navbar' && item.search) {
|
ms = item.search
|
} else if (item.type === 'search' && item.wrap.field) {
|
search.push({
|
type: 'text',
|
label: item.wrap.label,
|
field: item.wrap.field,
|
match: item.wrap.match,
|
required: item.wrap.required,
|
value: item.wrap.initval || ''
|
})
|
}
|
})
|
|
if (ms) {
|
if (ms.setting.type === 'search') {
|
search.push({
|
type: 'text',
|
label: '搜索栏',
|
field: ms.setting.field,
|
match: ms.setting.match,
|
required: ms.setting.required,
|
value: ms.setting.initval || ''
|
})
|
}
|
search.push(...ms.fields)
|
|
ms.groups.forEach(group => {
|
if (group.setting.type === 'search') {
|
search.push({
|
type: 'text',
|
label: group.wrap.name,
|
field: group.setting.field,
|
match: group.setting.match,
|
required: group.setting.required,
|
value: group.setting.initval || ''
|
})
|
}
|
search.push(...group.fields)
|
})
|
}
|
|
if (search.length > 0) {
|
_mainSearch = search
|
}
|
} else {
|
config.components.forEach(component => {
|
if (component.type !== 'search') return
|
|
_mainSearch = component.search || []
|
})
|
}
|
|
if (config.interfaces && config.interfaces.length > 0) {
|
config.interfaces.forEach(m => {
|
if (m.status !== 'true' || m.setting.interType !== 'system') return false
|
|
m.setting.laypage = 'false'
|
m.setting.$top = true
|
|
let sql = this.formatDataSource(m, regs, _mainSearch)
|
|
this.sqlList.push({label: m.setting.name, children: [{label: '数据源', sql: sql}]})
|
})
|
}
|
|
this.filterComponent(config.components, _mainSearch, regs, process)
|
|
let sqls = []
|
let foreachSql = (list, name, tabName = '', supName = '') => {
|
list.forEach(item => {
|
if (item.children) {
|
if (item.tabName) {
|
item.children.forEach(cell => {
|
if (cell.children) {
|
foreachSql(cell.children, cell.label, item.tabName, name)
|
}
|
})
|
} else {
|
foreachSql(item.children, name, tabName, supName)
|
}
|
} else if (item.sql) {
|
sqls.push({uuid: Utils.getuuid() ,label: item.label, name: name, tabName: tabName, supName: supName, sql: item.sql})
|
}
|
})
|
}
|
|
this.sqlList.forEach(item => {
|
if (item.children) {
|
foreachSql(item.children, item.label)
|
}
|
})
|
|
if (sqls.length === 0) {
|
Modal.warning({
|
title: '当前菜单无可验证脚本。',
|
okText: '知道了'
|
})
|
return
|
}
|
|
this.verSqls = sqls
|
let that = this
|
|
let formErrors = []
|
if (this.linkMain.length) {
|
let map = new Map()
|
if (config.interfaces) {
|
config.interfaces.forEach(m => {
|
if (m.status !== 'true' || !m.columns) return false
|
|
map.set(m.uuid, m.columns)
|
})
|
}
|
|
let forEachComs = (components) => {
|
components.forEach(item => {
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
forEachComs(tab.components)
|
})
|
} else if (item.type === 'group') {
|
forEachComs(item.components)
|
} else if (item.columns && item.columns.length) {
|
map.set(item.uuid, item.columns)
|
}
|
})
|
}
|
|
forEachComs(config.components)
|
|
this.linkMain.forEach(item => {
|
if (item.config.wrap && item.config.wrap.datatype === 'public') return
|
|
let supModule = ''
|
if (item.config.wrap && item.config.wrap.datatype === 'static') {
|
supModule = item.config.wrap.supModule ? item.config.wrap.supModule[item.config.wrap.supModule.length - 1] : ''
|
} else if (item.config.setting && item.config.setting.supModule) {
|
supModule = item.config.setting.supModule[item.config.setting.supModule.length - 1] || ''
|
if (supModule === 'empty') {
|
supModule = ''
|
}
|
}
|
|
if (!supModule) return
|
|
let cols = map.get(supModule)
|
|
if (!cols) {
|
formErrors.push(<div key={item.forms[0].uuid}>
|
组件<span style={{color: '#1890ff', margin: '0 2px 0 2px'}}>{item.config.name}{item.label ? '-' + item.label : ''}</span>中表单<span style={{color: 'orange', margin: '0 2px 0 2px'}}>{item.forms.map(c => c.label + ' (' + c.field + ')').join('、')}</span>无效
|
</div>)
|
} else {
|
let _forms = []
|
let _cols = cols.map(col => col.field.toLowerCase())
|
|
item.forms.forEach(m => {
|
if (_cols.includes(m.field.toLowerCase())) return
|
|
_forms.push(m.label + ' (' + m.field + ')')
|
})
|
|
if (_forms.length) {
|
formErrors.push(<div key={item.forms[0].uuid}>
|
组件<span style={{color: '#1890ff', margin: '0 2px 0 2px'}}>{item.config.name}{item.label ? '-' + item.label : ''}</span>中表单<span style={{color: 'orange', margin: '0 2px 0 2px'}}>{_forms.join('、')}</span>无效
|
</div>)
|
}
|
}
|
})
|
}
|
|
formErrors = formErrors.length ? formErrors : ''
|
|
Modal.confirm({
|
content: <div style={{paddingLeft: '38px'}}>
|
{`当前菜单共${this.sqlList.length}个组件,${sqls.length}项脚本需要检验${sqls.length > 20 ? ',时间大概需要' + parseInt(sqls.length / 2) + '秒' : ''}。`}
|
{formErrors}
|
</div>,
|
onOk() {
|
that.setState({visible: true, status: 'loading', sqlList: fromJS(sqls).toJS(), successIds: [], errorIds: [], errorMsg: {}, execId: ''}, () => {
|
that.roopSql()
|
})
|
},
|
onCancel() {}
|
})
|
|
this.sqlList = []
|
}
|
|
getModules = (components, interfaces, sups = []) => {
|
components.forEach(item => {
|
this.modules[item.uuid] = [...sups, item.uuid]
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(f_tab => {
|
this.getModules(f_tab.components, null, [...sups, item.uuid, f_tab.uuid])
|
})
|
} else if (item.type === 'group') {
|
item.components.forEach(cell => {
|
this.modules[cell.uuid] = [...sups, item.uuid, cell.uuid]
|
})
|
}
|
})
|
|
if (interfaces && interfaces.length > 0) {
|
interfaces.forEach(item => {
|
this.modules[item.uuid] = [item.uuid]
|
})
|
}
|
}
|
|
checklink = (components, suplabel = '') => {
|
if (this.supError) return
|
components.forEach(item => {
|
if (this.supError) return
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(f_tab => {
|
this.checklink(f_tab.components, suplabel)
|
})
|
} else if (item.type === 'group' ) {
|
item.components && this.checklink(item.components, suplabel)
|
} else {
|
if (item.wrap && item.wrap.supType === 'multi') {
|
if (item.setting && item.setting.supModule) {
|
item.setting.supModule = ''
|
}
|
if (item.supNodes) {
|
item.supNodes.forEach(cell => {
|
let id = cell.nodes[cell.nodes.length - 1]
|
if (!this.modules[id]) {
|
this.supError = suplabel + item.name
|
}
|
})
|
}
|
} else if ((item.wrap && item.wrap.datatype === 'static') || (['mainsearch', 'voucher'].includes(item.subtype))) {
|
if (item.wrap && item.wrap.supModule && item.wrap.supModule[0]) {
|
let id = item.wrap.supModule[item.wrap.supModule.length - 1]
|
if (!this.modules[id]) {
|
this.supError = suplabel + item.name
|
}
|
}
|
} else if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') {
|
let id = item.setting.supModule[item.setting.supModule.length - 1]
|
if (!this.modules[id]) {
|
this.supError = suplabel + item.name
|
}
|
}
|
|
if (this.supError) return
|
|
if (['card', 'carousel', 'timeline'].includes(item.type)) {
|
item.subcards.forEach(card => {
|
card.elements && card.elements.forEach(cell => {
|
if (cell.eleType === 'button' && cell.OpenType === 'popview') {
|
if (cell.config && cell.config.components && cell.config.enabled) {
|
this.checklink(cell.config.components, item.name + '-' + cell.label + '(弹窗标签)-')
|
}
|
}
|
})
|
card.backElements && card.backElements.forEach(cell => {
|
if (cell.eleType === 'button' && cell.OpenType === 'popview') {
|
if (cell.config && cell.config.components && cell.config.enabled) {
|
this.checklink(cell.config.components, item.name + '-' + cell.label + '(弹窗标签)-')
|
}
|
}
|
})
|
})
|
} else if (item.type === 'balcony') {
|
item.elements && item.elements.forEach(cell => {
|
if (cell.eleType === 'button' && cell.OpenType === 'popview') {
|
if (cell.config && cell.config.components && cell.config.enabled) {
|
this.checklink(cell.config.components, item.name + '-' + cell.label + '(弹窗标签)-')
|
}
|
}
|
})
|
} else if (item.type === 'table' && item.cols) {
|
let loopCol = (cols) => {
|
cols.forEach(col => {
|
if (col.type === 'colspan' && col.subcols) {
|
loopCol(col.subcols)
|
} else if (col.type === 'custom' && col.elements) {
|
col.elements.forEach(cell => {
|
if (cell.eleType === 'button' && cell.OpenType === 'popview') {
|
if (cell.config && cell.config.components && cell.config.enabled) {
|
this.checklink(cell.config.components, item.name + '-' + cell.label + '(弹窗标签)-')
|
}
|
}
|
})
|
}
|
})
|
}
|
|
loopCol(item.cols)
|
}
|
|
item.action && item.action.forEach(cell => {
|
if (cell.OpenType === 'popview') {
|
if (cell.config && cell.config.components && cell.config.enabled) {
|
this.checklink(cell.config.components, item.name + '-' + cell.label + '(弹窗标签)-')
|
}
|
}
|
})
|
}
|
})
|
}
|
|
filterComponent = (components, mainSearch, regs, process, ispop = false) => {
|
let appType = sessionStorage.getItem('appType')
|
|
components.forEach(item => {
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
if (tab.hide === 'true') return
|
|
let _mainSearch = mainSearch || []
|
|
if (appType !== 'mob') {
|
tab.components.forEach(com => {
|
if (com.type !== 'search') return
|
|
_mainSearch = com.search || []
|
})
|
}
|
this.filterComponent(tab.components, _mainSearch, regs, process)
|
})
|
} else if (item.type === 'group') {
|
this.filterComponent(item.components, mainSearch, regs, process)
|
} else {
|
let children = []
|
if (item.wrap && item.setting) {
|
if (item.wrap.datatype === 'public' || item.wrap.datatype === 'static') {
|
item.setting.interType = 'other'
|
}
|
}
|
|
if (appType === 'mob' && item.type !== 'search' && item.type !== 'topbar' && item.search && item.search.length > 0) {
|
item.search = []
|
}
|
|
if (item.subtype === 'tablecard') { // 兼容
|
item.type = 'card'
|
}
|
|
if (item.setting && item.setting.interType === 'system') {
|
if (item.format === 'object') {
|
item.setting.laypage = 'false'
|
item.setting.$top = true
|
}
|
|
let sql = this.formatDataSource(item, regs, mainSearch)
|
|
children.push({label: '数据源', sql: sql})
|
} else if (item.setting && item.setting.useMSearch === 'true') {
|
let searches = item.search || []
|
if (mainSearch.length > 0) {
|
searches = [...searches, ...mainSearch]
|
}
|
item.$searches = fromJS(searches).toJS()
|
}
|
|
item.action && item.action.forEach(cell => {
|
if (cell.hidden === 'true') return false
|
let res = this.resetButton(item, cell, process)
|
|
if (res) {
|
if (typeof(res) === 'string') {
|
children.push({label: cell.label, sql: res})
|
} else if (res.backSql) {
|
children.push({label: cell.label, sql: res.sql})
|
children.push({label: cell.label + '(回调)', sql: res.backSql})
|
} else {
|
children.push({label: cell.label, tabName: cell.label, sql: '', children: res})
|
}
|
}
|
})
|
|
if (item.type === 'table') {
|
let getCols = (cols) => {
|
cols.forEach(col => {
|
if (col.type === 'action') {
|
col.type = 'custom'
|
}
|
if (col.type === 'colspan') {
|
getCols(col.subcols || [])
|
} else if (col.type === 'custom') {
|
col.elements.forEach(cell => {
|
if (cell.eleType !== 'button' || cell.hidden === 'true') return
|
let res = this.resetButton(item, cell, process)
|
|
if (res) {
|
if (typeof(res) === 'string') {
|
children.push({label: cell.label, sql: res})
|
} else if (res.backSql) {
|
children.push({label: cell.label, sql: res.sql})
|
children.push({label: cell.label + '(回调)', sql: res.backSql})
|
} else {
|
children.push({label: cell.label, tabName: cell.label, sql: '', children: res})
|
}
|
}
|
})
|
}
|
})
|
}
|
|
getCols(item.cols)
|
|
if (item.subtype === 'editable' && item.submit.intertype === 'system') {
|
let sql = this.getEditTableSql(item.submit, item.cols, item.columns, item.setting)
|
children.push({label: '提交', sql: sql})
|
}
|
} else if (item.type === 'card' || item.type === 'carousel' || item.type === 'timeline') {
|
item.subcards && item.subcards.forEach(card => {
|
card.elements && card.elements.forEach(cell => {
|
if (cell.eleType !== 'button' || cell.hidden === 'true') return
|
let res = this.resetButton(item, cell, process)
|
|
if (res) {
|
if (typeof(res) === 'string') {
|
children.push({label: cell.label, sql: res})
|
} else if (res.backSql) {
|
children.push({label: cell.label, sql: res.sql})
|
children.push({label: cell.label + '(回调)', sql: res.backSql})
|
} else {
|
children.push({label: cell.label, tabName: cell.label, sql: '', children: res})
|
}
|
}
|
})
|
|
if (!card.backElements || card.backElements.length === 0) return
|
|
card.backElements.forEach(cell => {
|
if (cell.eleType !== 'button' || cell.hidden === 'true') return
|
let res = this.resetButton(item, cell, process, null, true)
|
|
if (res) {
|
if (typeof(res) === 'string') {
|
children.push({label: cell.label, sql: res})
|
} else if (res.backSql) {
|
children.push({label: cell.label, sql: res.sql})
|
children.push({label: cell.label + '(回调)', sql: res.backSql})
|
} else {
|
children.push({label: cell.label, tabName: cell.label, sql: '', children: res})
|
}
|
}
|
})
|
})
|
} else if (item.type === 'balcony') {
|
item.elements.forEach(cell => {
|
if (cell.eleType !== 'button' || cell.hidden === 'true') return
|
let res = this.resetButton(item, cell, process)
|
|
if (res) {
|
if (typeof(res) === 'string') {
|
children.push({label: cell.label, sql: res})
|
} else if (res.backSql) {
|
children.push({label: cell.label, sql: res.sql})
|
children.push({label: cell.label + '(回调)', sql: res.backSql})
|
} else {
|
children.push({label: cell.label, tabName: cell.label, sql: '', children: res})
|
}
|
}
|
})
|
} else if (item.type === 'form') {
|
item.subcards.forEach(group => {
|
group.subButton.OpenType = 'formSubmit'
|
if (!group.subButton.Ot) {
|
group.subButton.Ot = item.wrap.datatype === 'static' ? 'notRequired' : 'requiredSgl'
|
}
|
|
if (group.fields) {
|
let cells = group.fields.filter(cell => cell.type === 'linkMain')
|
|
if (cells.length) {
|
this.linkMain.push({
|
config: item,
|
forms: cells
|
})
|
}
|
}
|
|
let res = this.resetButton(item, group.subButton, process, group)
|
|
if (res) {
|
if (typeof(res) === 'string') {
|
children.push({label: group.subButton.label, sql: res})
|
} else if (res.backSql) {
|
children.push({label: group.subButton.label, sql: res.sql})
|
children.push({label: group.subButton.label + '(回调)', sql: res.backSql})
|
}
|
}
|
})
|
}
|
|
if (children.length) {
|
if (ispop) {
|
this.sqlPopList.push({label: item.name, children: children})
|
} else {
|
this.sqlList.push({label: item.name, children: children})
|
}
|
}
|
}
|
})
|
}
|
|
resetButton = (item, cell, process, group, isback) => {
|
let sql = ''
|
if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
|
if (cell.modal && cell.modal.fields.length) {
|
let cells = cell.modal.fields.filter(n => n.type === 'linkMain')
|
|
if (cells.length) {
|
this.linkMain.push({
|
config: item,
|
forms: cells,
|
label: cell.label
|
})
|
}
|
}
|
}
|
if (['exec', 'prompt', 'pop', 'form', 'formSubmit'].includes(cell.OpenType)) {
|
if (cell.intertype === 'system' || cell.procMode === 'system') { // 系统接口
|
if (item.subtype === 'dualdatacard' && isback) {
|
let _item = fromJS(item).toJS()
|
_item.columns = _item.subColumns || []
|
_item.setting.primaryKey = _item.setting.subKey
|
sql = this.getSysDefaultSql(cell, _item, process, group, false)
|
} else {
|
sql = this.getSysDefaultSql(cell, item, process, group, false)
|
}
|
}
|
if (cell.callbackType === 'script' && cell.verify && cell.verify.cbScripts) {
|
let defSql = ''
|
if (item.subtype === 'dualdatacard' && isback) {
|
let _item = fromJS(item).toJS()
|
_item.columns = _item.subColumns || []
|
_item.setting.primaryKey = _item.setting.subKey
|
defSql = this.getSysDefaultSql(cell, _item, process, group, true)
|
} else {
|
defSql = this.getSysDefaultSql(cell, item, process, group, true)
|
}
|
|
let backSql = this.getSysBackSql(cell.verify.cbScripts, cell.cbTable)
|
|
if (backSql) {
|
backSql = `${defSql}
|
${backSql}
|
`
|
|
if (cell.output) {
|
backSql += `
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg,${cell.output} as mk_b_id`
|
} else {
|
backSql += `
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
|
}
|
|
backSql = backSql.replace(/@typename@/ig, `'typename'`)
|
backSql = backSql.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, `''`)
|
}
|
|
if (backSql) {
|
return {
|
backSql,
|
sql
|
}
|
}
|
}
|
} else if (cell.OpenType === 'excelIn') {
|
if (cell.intertype === 'system') {
|
sql = this.getExcelInSql(cell, process)
|
}
|
} else if (cell.OpenType === 'excelOut') {
|
if (cell.intertype === 'system' && cell.verify && cell.verify.dataType === 'custom') {
|
sql = this.getExcelOutSql(cell, item)
|
}
|
} else if (cell.OpenType === 'funcbutton') {
|
if (cell.funcType === 'print') {
|
|
} else if ((cell.funcType === 'refund' || cell.funcType === 'pay') && cell.payMode === 'system') {
|
sql = this.getPaySql(cell, item)
|
}
|
} else if (cell.OpenType === 'innerpage' || cell.OpenType === 'outerpage') {
|
if (cell.pageTemplate === 'pay' && cell.payMode === 'system') {
|
sql = this.getPaySql(cell, item)
|
}
|
} else if (cell.OpenType === 'popview') {
|
if (cell.config && cell.config.components) {
|
this.sqlPopList = []
|
let regs = [
|
{ reg: /@userName@/ig, value: `'User_Name'` },
|
{ reg: /@fullName@/ig, value: `'Full_Name'` },
|
{ reg: /\$@/ig, value: '' },
|
{ reg: /@\$/ig, value: '' },
|
{ reg: /@datam@/ig, value: `''` },
|
]
|
|
if (process) {
|
regs.push({ reg: /@works_flow_code@/ig, value: `'1949-10-01 15:00:00'` })
|
}
|
|
let _mainSearch = []
|
|
if (sessionStorage.getItem('appType') === 'mob') {
|
cell.config.components.forEach(item => {
|
if (item.type === 'search' && item.wrap.field) {
|
_mainSearch.push({
|
type: 'text',
|
label: item.wrap.label,
|
field: item.wrap.field,
|
match: item.wrap.match,
|
required: item.wrap.required,
|
value: item.wrap.initval || ''
|
})
|
}
|
})
|
} else {
|
cell.config.components.forEach(component => {
|
if (component.type !== 'search') return
|
|
_mainSearch = component.search || []
|
})
|
}
|
|
this.filterComponent(cell.config.components, _mainSearch, regs, process, true)
|
|
if (this.sqlPopList.length) {
|
sql = fromJS(this.sqlPopList).toJS()
|
}
|
}
|
}
|
|
return sql
|
}
|
|
getSysBackSql = (scripts, cbTable) => {
|
let _prev = ''
|
let _back = ''
|
|
scripts.forEach(script => {
|
if (script.status === 'false') return
|
|
if (script.position === 'front') {
|
_prev += `
|
/* 自定义脚本 */
|
${script.sql}
|
`
|
} else {
|
_back += `
|
/* 自定义脚本 */
|
${script.sql}
|
`
|
}
|
})
|
|
if (!_prev) return _back
|
|
let tbs = []
|
_prev.replace(/\/\*[^/*]+\*\//g, '').replace(/\n|\r/g, ' ').split(/\sdeclare\s+|\screate\s+table\s+/ig).forEach(line => {
|
if (/^\s*(@|#)[a-zA-Z0-9_]+\s+table\s+\(/ig.test(line)) {
|
line = line.replace(/\s+table\s+\(/, '(')
|
}
|
if (!/^\s*(@|#)[a-zA-Z0-9_]+\s*\(/ig.test(line)) return
|
let tb = line.match(/(@|#)[a-zA-Z0-9_]+\s*\(.+(\)|date|datetime)\s*\)/ig)
|
|
if (tb && tb.length === 1) {
|
tbs.push(tb[0])
|
}
|
})
|
|
tbs.forEach(tb => {
|
let tbName = tb.match(/(@|#)[a-zA-Z0-9_]+/ig)[0]
|
|
if (!tbName) return
|
|
let content = tb.replace(/(@|#)[a-zA-Z0-9_]+\s*\(\s*/, '').replace(/\s*\)$/, '')
|
content = content.replace(/decimal\(\s*\d+\s*,\s*\d+\s*\)/ig, 'decimal')
|
|
let keys = []
|
let vals = []
|
let error = false
|
let istop = new RegExp(cbTable + '$', 'ig').test(tbName)
|
let id = tbName.replace(/@|#/, '')
|
|
content.split(/\s*,\s*/).forEach(m => {
|
let ms = m.split(/\s+/)
|
if (ms.length > 1) {
|
keys.push(ms[0])
|
if (/^mk_level$/i.test(ms[0])) {
|
vals.push(istop ? `'1'` : `'2'`)
|
} else if (/^mk_id$/i.test(ms[0])) {
|
vals.push(istop ? `'${cbTable}'` : `'${id}'`)
|
} else if (/^mk_bid$/i.test(ms[0])) {
|
vals.push(istop ? `''` : `'${cbTable}'`)
|
} else if (/nvarchar/i.test(ms[1])) {
|
vals.push(`'mk'`)
|
} else if (/date/i.test(ms[1])) {
|
vals.push(`'1949-10-01'`)
|
} else if (/int|decimal/i.test(ms[1])) {
|
vals.push('0')
|
} else {
|
error = true
|
}
|
} else {
|
error = true
|
}
|
})
|
|
if (error || vals.length === 0) return
|
|
_prev += `
|
Insert into ${tbName} (${keys.join(',')})
|
Select ${vals.join(',')}
|
`
|
})
|
|
return _prev + _back
|
}
|
|
getSysDefaultSql = (btn, component, process, group, retmsg) => {
|
let primaryId = Utils.getuuid()
|
let BID = Utils.getuuid()
|
let verify = btn.verify || {}
|
let _actionType = null
|
let setting = component.setting || {}
|
let columns = component.columns || []
|
|
if (verify.invalid === 'true') {
|
if (component.wrap && (component.wrap.datatype === 'static' || component.wrap.datatype === 'public')) {
|
verify.invalid = 'false'
|
} else if (setting.maxScript && setting.maxScript >= 300) {
|
verify.invalid = 'false'
|
} else if (!setting.dataresource) {
|
verify.invalid = 'false'
|
} else if (btn.intertype !== 'system' && btn.procMode !== 'system') {
|
verify.invalid = 'false'
|
} else if (btn.sqlType === 'insert') {
|
verify.invalid = 'false'
|
} else if (btn.Ot === 'notRequired') {
|
verify.invalid = 'false'
|
}
|
}
|
if (verify.uniques && verify.uniques.length > 0 && btn.Ot === 'requiredOnce') {
|
if (component.wrap && (component.wrap.datatype === 'static' || component.wrap.datatype === 'public')) {
|
verify.uniques = []
|
}
|
}
|
|
if (verify.default !== 'false') { // 判断是否使用默认sql
|
_actionType = btn.sqlType
|
}
|
|
let _initCustomScript = '' // 初始化脚本
|
let _prevCustomScript = '' // 默认sql前执行脚本
|
let _backCustomScript = '' // 默认sql后执行脚本
|
|
verify.scripts && verify.scripts.forEach(item => {
|
if (item.status === 'false') return
|
|
if (item.position === 'init') {
|
_initCustomScript += `
|
/* 自定义脚本 */
|
${item.sql}
|
`
|
} else if (item.position === 'front') {
|
_prevCustomScript += `
|
/* 自定义脚本 */
|
${item.sql}
|
`
|
} else {
|
_backCustomScript += `
|
/* 自定义脚本 */
|
${item.sql}
|
`
|
}
|
})
|
|
// 需要声明的变量集
|
let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'mk_deleted', 'bid', 'mk_submit_type']
|
|
// 主键字段
|
let primaryKey = setting.primaryKey || 'id'
|
|
// sql语句
|
let _sql = ''
|
|
let _initvars = [] // 已赋值字段集
|
let _initFormfields = []
|
let _initColfields = []
|
let _declarefields = []
|
|
let formdata = null
|
if (btn.OpenType === 'pop') {
|
formdata = []
|
if (btn.modal && btn.modal.fields) {
|
btn.modal.fields.forEach(item => {
|
if (!item.field) return
|
|
let _item = {
|
key: item.field,
|
fieldlen: item.fieldlength || 50,
|
writein: item.writein !== 'false',
|
type: item.type
|
}
|
|
if (item.type === 'linkMain' && item.verifyVal === 'true') {
|
_item.$verify = true
|
_item.label = item.label
|
}
|
|
if (_item.type === 'datemonth') {
|
_item.type = 'text'
|
} else if (_item.type === 'number' || _item.type === 'rate') {
|
_item.fieldlen = item.decimal || 0
|
} else if (_item.type === 'date') {
|
_item.type = item.declareType === 'nvarchar(50)' ? 'text' : 'date'
|
} else if (_item.type === 'datetime') {
|
_item.type = 'date'
|
} else if (item.declare === 'decimal') {
|
_item.type = 'number'
|
_item.fieldlen = item.decimal || 0
|
}
|
|
formdata.push(_item)
|
})
|
}
|
} else if (btn.OpenType === 'form') {
|
formdata = []
|
|
let item = {
|
type: 'text',
|
readin: true,
|
writein: true,
|
fieldlen: 50,
|
key: btn.field
|
}
|
if (btn.formType === 'counter') {
|
item.type = 'number'
|
item.fieldlen = 0
|
} else if (btn.formType === 'switch' || btn.formType === 'radio') {
|
if (typeof(btn.openVal) === 'number') {
|
item.type = 'number'
|
item.fieldlen = 0
|
}
|
}
|
formdata.push(item)
|
} else if (btn.OpenType === 'formSubmit') {
|
formdata = []
|
if (group.fields) {
|
group.fields.forEach(item => {
|
if (!item.field) return
|
|
let _item = {
|
key: item.field,
|
fieldlen: item.fieldlength || 50,
|
writein: item.writein !== 'false',
|
type: item.type
|
}
|
|
if (item.type === 'linkMain' && item.verifyVal === 'true') {
|
_item.$verify = true
|
_item.label = item.label
|
}
|
|
if (_item.type === 'datemonth') {
|
_item.type = 'text'
|
} else if (_item.type === 'number' || _item.type === 'rate') {
|
_item.fieldlen = item.decimal || 0
|
} else if (_item.type === 'date') {
|
_item.type = item.declareType === 'nvarchar(50)' ? 'text' : 'date'
|
} else if (_item.type === 'datetime') {
|
_item.type = 'date'
|
} else if (item.declare === 'decimal') {
|
_item.type = 'number'
|
_item.fieldlen = item.decimal || 0
|
}
|
|
formdata.push(_item)
|
})
|
}
|
}
|
|
if (formdata && formdata.findIndex(item => item.type === 'vercode') > -1) {
|
formdata.push({
|
type: 'text',
|
fieldlen: 50,
|
writein: false,
|
key: 'mk_timestamp'
|
}, {
|
type: 'text',
|
fieldlen: 50,
|
writein: false,
|
key: 'mk_send_type'
|
}, {
|
type: 'text',
|
fieldlen: 50,
|
writein: false,
|
key: 'mk_n_id'
|
})
|
}
|
|
let verifyValSql = ''
|
// 获取字段键值对
|
formdata && formdata.forEach(form => {
|
if (form.$verify) {
|
verifyValSql += `
|
if @${form.key}=${form.type === 'number' ? 0 : `''`}
|
begin
|
select @errorcode='E',@retmsg='${form.label},关联主表失效'
|
goto aaa
|
end
|
`
|
}
|
|
let _key = form.key.toLowerCase()
|
if (!_initvars.includes(_key)) {
|
_initvars.push(_key)
|
if (form.type === 'number' || form.type === 'rate') {
|
_initFormfields.push(`@${_key}=1`)
|
} else if (form.type === 'date') {
|
_initFormfields.push(`@${_key}='1949-10-01'`)
|
} else if (form.type === 'select' || form.type === 'link' || form.type === 'radio') {
|
_initFormfields.push(`@${_key}='1'`)
|
} else {
|
_initFormfields.push(`@${_key}='mk'`)
|
}
|
}
|
|
if (!_vars.includes(_key)) {
|
_vars.push(_key)
|
|
if (form.fieldlen && form.fieldlen > 4000) {
|
form.fieldlen = 'max'
|
}
|
|
let _type = `nvarchar(${form.fieldlen})`
|
|
if (form.type.match(/date/ig)) {
|
_type = 'datetime'
|
} else if (form.type === 'number') {
|
_type = `decimal(18,${form.fieldlen})`
|
} else if (form.type === 'rate') {
|
_type = `decimal(18,2)`
|
}
|
|
if (['appkey'].includes(_key)) return
|
|
_declarefields.push(`@${_key} ${_type}`)
|
}
|
})
|
|
// 添加数据中字段,表单值优先(按钮不选行或多行拼接时跳过)
|
if (btn.Ot !== 'notRequired' && columns.length > 0) {
|
columns.forEach(col => {
|
if (!col.field) return
|
let _key = col.field.toLowerCase()
|
|
if (!_initvars.includes(_key)) {
|
_initvars.push(_key)
|
|
if (col.datatype && /^date/ig.test(col.datatype)) {
|
_initColfields.push(`@${_key}='1949-10-01'`)
|
} else if (col.type === 'number') {
|
_initColfields.push(`@${_key}=1`)
|
} else {
|
_initColfields.push(`@${_key}='mk'`)
|
}
|
}
|
|
if (!_vars.includes(_key) && !['appkey'].includes(_key)) {
|
_vars.push(_key)
|
_declarefields.push(`@${_key} ${col.datatype || 'nvarchar(50)'}`)
|
}
|
})
|
}
|
|
// 变量声明
|
_declarefields = _declarefields.join(',')
|
if (_declarefields) {
|
_declarefields = ',' + _declarefields
|
}
|
_sql = `Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@mk_deleted int,@bid nvarchar(50),@mk_submit_type nvarchar(50)${_declarefields}
|
`
|
|
let userName = 'User_Name'
|
let fullName = 'Full_Name'
|
let RoleID = 'role_id'
|
let departmentcode = 'departmentcode'
|
let organization = 'organization'
|
let mk_user_type = 'mk_user_type'
|
let nation = 'nation'
|
let province = 'province'
|
let city = 'city'
|
let district = 'district'
|
let address = 'address'
|
|
// 初始化凭证及用户信息字段
|
_sql += `
|
/* 凭证及用户信息初始化赋值 */
|
select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @mk_deleted=1, @bid='${BID}', @mk_submit_type='', @BillCode='', @ModularDetailCode=''
|
`
|
|
// 表单变量赋值
|
if (_initFormfields.length > 0) {
|
_sql += `
|
/* 表单变量赋值 */
|
select ${_initFormfields.join(',')}
|
`
|
}
|
// 显示列变量赋值
|
if (_initColfields.length > 0) {
|
_sql += `
|
/* 显示列变量赋值 */
|
select ${_initColfields.join(',')}
|
`
|
}
|
|
if (retmsg) {
|
return _sql
|
}
|
|
// 去除禁用的验证
|
if (verify.contrasts) {
|
verify.contrasts = verify.contrasts.filter(item => item.status !== 'false')
|
}
|
if (verify.uniques) {
|
verify.uniques = verify.uniques.filter(item => item.status !== 'false')
|
}
|
if (verify.customverifys) {
|
verify.customverifys = verify.customverifys.filter(item => item.status !== 'false')
|
}
|
if (verify.billcodes) {
|
verify.billcodes = verify.billcodes.filter(item => item.status !== 'false')
|
}
|
|
if (_initCustomScript) {
|
_sql += _initCustomScript
|
}
|
|
// 启用账期验证
|
if (verify.accountdate === 'true') {
|
let orgcode = `''`
|
let date = `''`
|
if (verify.accountfield && _initvars.includes(verify.accountfield.toLowerCase())) {
|
orgcode = '@' + verify.accountfield
|
}
|
if (verify.voucherdate && _initvars.includes(verify.voucherdate.toLowerCase())) {
|
date = '@' + verify.voucherdate
|
}
|
|
_sql += `
|
/* 账期验证 */
|
exec s_FIBVoucherDateCheck @OrgCode=${orgcode},@FIBVoucherDate=${date},@ErrorCode=@ErrorCode OUTPUT,@retmsg=@retmsg OUTPUT
|
if @ErrorCode!=''
|
GOTO aaa
|
`
|
}
|
|
// 失效验证,添加数据时不用
|
if (verify.invalid === 'true') {
|
let datasource = setting.dataresource
|
let customScript = setting.customScript || ''
|
|
let regoptions = [{
|
reg: new RegExp('@userName@', 'ig'),
|
value: `'${userName}'`
|
}, {
|
reg: new RegExp('@fullName@', 'ig'),
|
value: `'${fullName}'`
|
}, {
|
reg: new RegExp('@orderBy@', 'ig'),
|
value: setting.order || primaryKey
|
}, {
|
reg: new RegExp('@pageSize@', 'ig'),
|
value: 1
|
}, {
|
reg: new RegExp('@pageIndex@', 'ig'),
|
value: 1
|
}]
|
|
regoptions.forEach(item => {
|
datasource = datasource.replace(item.reg, item.value)
|
customScript = customScript.replace(item.reg, item.value)
|
})
|
|
if (customScript) {
|
_sql += `
|
/* 数据源自定义脚本,请注意变量定义是否重复 */
|
${customScript}
|
`
|
}
|
|
if (btn.Ot === 'requiredOnce') {
|
_sql += `
|
/* 失效验证 */
|
select @tbid='', @ErrorCode='',@retmsg=''
|
select @tbid='X' from ${datasource} right join (select ID from dbo.SplitComma(@ID@)) sp
|
on tb.${primaryKey} =sp.id where tb.${primaryKey} is null
|
|
If @tbid!=''
|
Begin
|
select @ErrorCode='E',@retmsg='数据已失效'
|
goto aaa
|
end
|
`
|
} else {
|
_sql += `
|
/* 失效验证 */
|
select @tbid='', @ErrorCode='',@retmsg=''
|
select @tbid=${primaryKey} from ${datasource} where ${primaryKey}=@ID@
|
If @tbid=''
|
Begin
|
select @ErrorCode='E',@retmsg='数据已失效'
|
goto aaa
|
end
|
`
|
}
|
}
|
|
// 比较验证
|
if (verify.contrasts && verify.contrasts.length > 0) {
|
verify.contrasts.forEach(item => {
|
_sql += `
|
/* 比较验证 */
|
If ${item.frontfield} ${item.operator} ${item.backfield}
|
Begin
|
select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
|
goto aaa
|
end
|
`
|
})
|
}
|
|
// 自定义验证
|
verify.customverifys && verify.customverifys.forEach(item => {
|
_sql += `
|
/* 自定义验证 */
|
select @tbid='', @ErrorCode='',@retmsg=''
|
select top 1 @tbid='X' from (${item.sql}) a
|
If @tbid ${item.result === 'true' ? '!=' : '='}''
|
Begin
|
select @ErrorCode='${item.errorCode}',@retmsg='${item.errmsg}'
|
goto aaa
|
end
|
`
|
})
|
|
// 单号生成,使用上级id(BID)或列表数据,声明变量(检验)
|
let _billcodesSql = ''
|
if (formdata && verify.billcodes && verify.billcodes.length > 0) {
|
let keys = formdata.map(item => item.key.toLowerCase()) // 表单字段
|
|
verify.billcodes.forEach(item => {
|
let _key = item.field.toLowerCase()
|
|
if (!keys.includes(_key)) return // 表单中不含单号生成字段
|
|
let _lpline = ''
|
if (item.TypeCharOne === 'Lp') {
|
if (/^BID$/ig.test(item.linkField)) {
|
_lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@BID@,48)`
|
} else {
|
_lpline = `set @ModularDetailCode= 'Lp'+ right('${item.mark || btn.uuid}'+@${item.linkField},48)`
|
}
|
} else if (item.TypeCharOne === 'BN') {
|
if (/^BID$/ig.test(item.linkField)) {
|
_lpline = `set @ModularDetailCode= 'BN'+ right(@BID@,48)`
|
} else {
|
_lpline = `set @ModularDetailCode= 'BN'+ right(@${item.linkField},48)`
|
}
|
} else {
|
_lpline = `set @ModularDetailCode= right('${item.ModularDetailCode}',50)`
|
}
|
|
_billcodesSql += `
|
/* 单号生成 */
|
select @BillCode='', @${_key}='', @ModularDetailCode=''
|
${_lpline}
|
exec s_get_BillCode
|
@ModularDetailCode=@ModularDetailCode,
|
@Type=${item.Type},
|
@TypeCharOne='${item.TypeCharOne}',
|
@TypeCharTwo ='${item.TypeCharTwo}',
|
@BillCode =@BillCode output,
|
@ErrorCode =@ErrorCode output,
|
@retmsg=@retmsg output
|
if @ErrorCode!=''
|
goto aaa
|
set @${_key}=@BillCode
|
`
|
})
|
|
if (_actionType !== 'insertOrUpdate') {
|
_sql += _billcodesSql
|
}
|
}
|
|
// 唯一性验证,必须存在表单(表单存在时,主键均为单值),必须填写数据源,多行拼接时不可用
|
if (formdata && verify.uniques && verify.uniques.length > 0 && btn.Ot !== 'requiredOnce') {
|
verify.uniques.forEach(item => {
|
let _fieldValue = [] // 表单键值对field=value
|
let _value = [] // 表单值,用于错误提示
|
let _labels = item.fieldlabel.split(',') // 表单提示文字
|
let arr = [] // 验证主键
|
|
item.field.split(',').forEach((_field, index) => {
|
let _key = _field.toLowerCase()
|
let _val = ''
|
let _val2 = ''
|
|
arr.push(_key)
|
if (_key === 'bid') {
|
_val = `'${BID}'`
|
} else {
|
_val = `@${_field}`
|
}
|
|
if (_key === 'bid') {
|
_val2 = BID
|
} else {
|
_val2 = `' + @${_field} + '`
|
}
|
|
_fieldValue.push(`${_key}=${_val}`)
|
_value.push(`${_labels[index] || ''}:${_val2}`)
|
})
|
|
if (!arr.includes(primaryKey.toLowerCase()) && btn.Ot !== 'notRequired') {
|
_fieldValue.push(`${primaryKey} !='${primaryId}'`)
|
}
|
|
_sql += `
|
/* 唯一性验证 */
|
select @tbid='', @ErrorCode='',@retmsg=''
|
select @tbid='X' from ${btn.sql} where ${_fieldValue.join(' and ')}${item.verifyType === 'logic' ? ' and deleted=0' : ''}
|
If @tbid!=''
|
Begin
|
select @ErrorCode='${item.errorCode}',@retmsg='${_value.join(', ')} 已存在'
|
goto aaa
|
end
|
`
|
})
|
} else if (verify.uniques && verify.uniques.length > 0 && btn.Ot === 'requiredOnce' && setting.dataresource) {
|
let datasource = setting.dataresource
|
if (/\s/.test(datasource)) { // 拼接别名
|
if (!/tb$/.test(datasource)) {
|
datasource = '(' + datasource + ') tb'
|
}
|
} else {
|
datasource = datasource + ' tb'
|
}
|
|
if (setting.customScript) {
|
_sql += `
|
/* 数据源自定义脚本,请注意变量定义是否重复 */
|
${setting.customScript}
|
`
|
}
|
|
verify.uniques.forEach(item => {
|
_sql += `
|
/* 同类数据验证 */
|
Set @tbid=''
|
|
Select top 1 @tbid='X' from (select distinct ${item.field},1 as n from ${datasource} inner join (select ID from dbo.SplitComma(@ID@)) sp on tb.${primaryKey}=sp.ID ) a having sum(n)>1
|
|
If @tbid!=''
|
Begin
|
Set @ErrorCode='E' Set @retmsg='${item.fieldlabel} 值不唯一'
|
goto aaa
|
end
|
`
|
})
|
}
|
|
let hasvoucher = false
|
|
// 凭证-显示列中选取,必须选行
|
if (verify.voucher && verify.voucher.enabled) {
|
let _voucher = verify.voucher
|
let linkField = `@${_voucher.linkField}`
|
|
if (/^BID$/ig.test(_voucher.linkField)) {
|
linkField = `'${BID}'`
|
}
|
|
hasvoucher = true
|
|
_sql += `
|
/* 创建凭证 */
|
exec s_BVoucher_Create
|
@Bill = ${linkField},
|
@BVoucherType ='${_voucher.BVoucherType}',
|
@VoucherTypeOne ='${_voucher.VoucherTypeOne}',
|
@VoucherTypeTwo ='${_voucher.VoucherTypeTwo}',
|
@Type =${_voucher.Type},
|
@UserID=@UserID@,
|
@Username=@Username,
|
@FullName=@FullName,
|
@BVoucher =@BVoucher OUTPUT ,
|
@FIBVoucherDate =@FIBVoucherDate OUTPUT ,
|
@FiYear =@FiYear OUTPUT ,
|
@ErrorCode =@ErrorCode OUTPUT,
|
@retmsg=@retmsg OUTPUT
|
if @ErrorCode!=''
|
GOTO aaa
|
`
|
}
|
|
let _insertsql = ''
|
if (_actionType === 'insert' || _actionType === 'insertOrUpdate') { // 添加语句
|
let keys = []
|
let values = []
|
|
formdata.forEach(item => {
|
if (item.writein === false) return
|
let _key = item.key.toLowerCase()
|
|
keys.push(_key)
|
values.push('@' + _key)
|
})
|
|
if (!keys.includes(primaryKey.toLowerCase())) {
|
keys.push(primaryKey.toLowerCase())
|
values.push('\'' + primaryId + '\'')
|
}
|
if (!keys.includes('createuserid')) {
|
keys.push('createuserid')
|
values.push('@userid@')
|
}
|
if (!keys.includes('createuser')) {
|
keys.push('createuser')
|
values.push('@username')
|
}
|
if (!keys.includes('createstaff')) {
|
keys.push('createstaff')
|
values.push('@fullname')
|
}
|
if (!keys.includes('bid')) {
|
keys.push('bid')
|
values.push('@BID@')
|
}
|
|
if (!keys.includes('typename')) {
|
keys.push('typename')
|
values.push('@typename@')
|
}
|
|
keys = keys.join(',')
|
values = values.join(',')
|
_insertsql = `insert into ${btn.sql} (${keys}) select ${values};`
|
}
|
|
let _updatesql = ''
|
if (_actionType === 'update' || _actionType === 'audit' || _actionType === 'insertOrUpdate') { // 修改语句
|
let _form = []
|
let _arr = []
|
|
formdata.forEach(item => {
|
if (item.writein === false) return
|
let _key = item.key.toLowerCase()
|
|
_arr.push(_key)
|
_form.push(_key + '=@' + _key)
|
})
|
|
if (_actionType === 'audit') {
|
if (!_arr.includes('submitdate')) {
|
_form.push('submitdate=getdate()')
|
}
|
if (!_arr.includes('submituser')) {
|
_form.push('submituser=@username')
|
}
|
if (!_arr.includes('submitstaff')) {
|
_form.push('submitstaff=@fullname')
|
}
|
if (!_arr.includes('submituserid')) {
|
_form.push('submituserid=@userid@')
|
}
|
} else {
|
if (!_arr.includes('modifydate')) {
|
_form.push('modifydate=getdate()')
|
}
|
if (!_arr.includes('modifyuser')) {
|
_form.push('modifyuser=@username')
|
}
|
if (!_arr.includes('modifystaff')) {
|
_form.push('modifystaff=@fullname')
|
}
|
if (!_arr.includes('modifyuserid')) {
|
_form.push('modifyuserid=@userid@')
|
}
|
}
|
|
if (hasvoucher) {
|
if (!_arr.includes('bvoucher')) {
|
_form.push('BVoucher=@BVoucher')
|
}
|
if (!_arr.includes('fibvoucherdate')) {
|
_form.push('FIBVoucherDate=@FIBVoucherDate')
|
}
|
if (!_arr.includes('fiyear')) {
|
_form.push('FiYear=@FiYear')
|
}
|
}
|
if (!_arr.includes('typename')) {
|
_form.push('typename=@typename@')
|
}
|
_form = _form.join(',')
|
|
let _ID = '=@ID@'
|
if (btn.Ot === 'requiredOnce') {
|
_ID = ' in (select ID from dbo.SplitComma(@ID@))'
|
}
|
|
_updatesql = `update ${btn.sql} set ${_form} where ${primaryKey}${_ID};`
|
}
|
|
if (_prevCustomScript) {
|
_sql += _prevCustomScript
|
}
|
|
// 添加、修改、逻辑删除、物理删除
|
if (_actionType === 'insert') {
|
_sql += `
|
/* 默认sql */
|
${_insertsql}`
|
} else if (_actionType === 'update' || _actionType === 'audit') {
|
_sql += `
|
/* 默认sql */
|
${_updatesql}`
|
} else if (_actionType === 'LogicDelete') { // 逻辑删除
|
let _ID = '=@ID@'
|
if (btn.Ot === 'requiredOnce') {
|
_ID = ' in (select ID from dbo.SplitComma(@ID@))'
|
}
|
|
_sql += `
|
/* 默认sql */
|
update ${btn.sql} set deleted=@mk_deleted,modifydate=getdate(),modifyuser=@username,modifystaff=@fullname,modifyuserid=@userid@ where ${primaryKey}${_ID};`
|
|
} else if (_actionType === 'delete') { // 物理删除
|
let _msg = ''
|
if (columns && columns.length > 0 && btn.Ot !== 'notRequired') {
|
let _index = 0
|
columns.forEach(col => {
|
if (!col.field || col.Hide === 'true' || _index >= 4 || col.field === primaryKey) return
|
_msg += col.label + '=0,'
|
_index++
|
})
|
}
|
|
let _ID = '=@ID@'
|
if (btn.Ot === 'requiredOnce') {
|
_ID = ' in (select ID from dbo.SplitComma(@ID@))'
|
}
|
|
_sql += `
|
/* 默认sql */
|
insert into snote (remark,createuserid,CreateUser,CreateStaff,typename) select left('删除表:${btn.sql} 数据: ${_msg}${primaryKey}='+@ID@,200),@userid@,@username,@fullname,@typename@
|
delete ${btn.sql} where ${primaryKey}${_ID};`
|
} else if (_actionType === 'insertOrUpdate') {
|
_sql += `
|
/* 默认sql */
|
select @tbid=''
|
select @tbid='X' from ${btn.sql} where ${primaryKey}=@ID@
|
if @tbid=''
|
begin
|
${_billcodesSql}
|
${_insertsql}
|
end
|
else
|
begin
|
${_updatesql}
|
end
|
`
|
}
|
|
if (verify.workFlow === 'true' && process) {
|
let status = 888
|
let statusName = '结束'
|
let detailId = '0'
|
|
if (verify.flowSql === 'true') {
|
if (verify.flowType === 'start') {
|
_sql += `
|
/* 工作流默认sql */
|
insert into s_my_works_flow (works_flow_id,works_flow_code,works_flow_name,works_flow_param,status,statusname,work_group,works_flow_detail_id,work_grade,bid,createuserid,CreateUser,CreateStaff,upid)
|
select @ID@,@works_flow_code@,@works_flow_name@,@works_flow_param@,@status@,@statusname@,@work_group@,@works_flow_detail_id@,@work_grade@,@bid@,@UserID@,@UserName,@FullName,@time_id@
|
insert into s_my_works_flow_log (works_flow_id,works_flow_code,works_flow_name,works_flow_param,status,statusname,works_flow_detail_id,work_group,work_grade,bid,createuserid,CreateUser,CreateStaff,upid)
|
select @ID@,@works_flow_code@,@works_flow_name@ ,@works_flow_param@,@status@,@statusname@,@works_flow_detail_id@,@work_group@,@work_grade@,@bid@,@UserID@,@UserName,@FullName,@time_id@
|
insert into s_my_works_flow_notice (works_flow_id,works_flow_code,works_flow_detail_id,userid,notice_type,createuserid,CreateUser,CreateStaff,upid)
|
select @ID@,@works_flow_code@,@works_flow_detail_id@,@userid@,@start_type@,@userid@,@UserName,@FullName,@time_id@
|
insert into s_my_works_flow_role (works_flow_id,works_flow_code,userid,works_flow_detail_id,createuserid,CreateUser,CreateStaff,upid,typecharone)
|
select @ID@,@works_flow_code@,@userid@,@works_flow_detail_id@,@userid@,@UserName,@FullName,@time_id@,'begin'
|
`
|
} else {
|
_sql += `
|
/* 工作流默认sql */
|
update s_my_works_flow set status=@status@,statusname=@statusname@,works_flow_param=@works_flow_param@,works_flow_detail_id=@works_flow_detail_id@,modifydate=getdate(),upid=@time_id@,modifyuserid=@userid@,modifyuser=@username,modifystaff=@fullname${verify.flowRemark ? ',remark=@' + verify.flowRemark : ''}
|
where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0
|
insert into s_my_works_flow_log (works_flow_id,works_flow_code,works_flow_name,works_flow_param,status,statusname,works_flow_detail_id,work_group,work_grade,bid,createuserid,CreateUser,CreateStaff,upid${verify.flowRemark ? ',remark' : ''})
|
select @ID@,@works_flow_code@,@works_flow_name@ ,@works_flow_param@,@status@,@statusname@,@works_flow_detail_id@,@work_group@,@work_grade@,@bid@,@UserID@,@UserName,@FullName,@time_id@${verify.flowRemark ? ',@' + verify.flowRemark : ''}
|
|
update s_my_works_flow_role set deleted=10,modifydate=getdate(),upid=@time_id@,modifyuserid=@userid@,modifyuser=@username,modifystaff=@fullname
|
where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0
|
|
if @check_userids@ != ''
|
begin
|
insert into s_my_works_flow_role (works_flow_id,works_flow_code,userid,works_flow_detail_id,createuserid,CreateUser,CreateStaff,upid)
|
select @ID@,@works_flow_code@,ID,@works_flow_detail_id@,@userid@,@UserName,@FullName,@time_id@ from dbo.SplitComma(@check_userids@)
|
insert into s_my_works_flow_notice (works_flow_id,works_flow_code,works_flow_detail_id,userid,notice_type,createuserid,CreateUser,CreateStaff,upid)
|
select @ID@,@works_flow_code@,@works_flow_detail_id@,ID,@check_type@,@userid@,@UserName,@FullName,@time_id@ from dbo.SplitComma(@check_userids@)
|
end
|
if @notice_userids@ != ''
|
begin
|
update n
|
set deleted=10,modifydate=getdate(),upid=@time_id@,modifyuserid=@userid@,modifyuser=@username,modifystaff=@fullname
|
from (select * from s_my_works_flow_notice where works_flow_id=@ID@ and works_flow_code=@works_flow_code@ and deleted=0) n
|
inner join (select ID from dbo.SplitComma(@notice_userids@)) s
|
on n.userid = s.id
|
insert into s_my_works_flow_notice (works_flow_id,works_flow_code,works_flow_detail_id,userid,notice_type,createuserid,CreateUser,CreateStaff,upid)
|
select @ID@,@works_flow_code@,@works_flow_detail_id@,ID,@notice_type@,@userid@,@UserName,@FullName,@time_id@ from dbo.SplitComma(@notice_userids@)
|
end
|
`
|
}
|
}
|
|
if (_backCustomScript) {
|
_sql += _backCustomScript
|
}
|
|
_sql = _sql.replace(/@works_flow_code@/ig, `'mk'`)
|
_sql = _sql.replace(/@works_flow_name@/ig, `'mk'`)
|
_sql = _sql.replace(/@works_flow_param@/ig, `''`)
|
_sql = _sql.replace(/@works_flow_detail_id@/ig, `'${detailId}'`)
|
_sql = _sql.replace(/@status@/ig, `'${status}'`)
|
_sql = _sql.replace(/@statusname@/ig, `'${statusName}'`)
|
_sql = _sql.replace(/@work_group@/ig, `'mk'`)
|
_sql = _sql.replace(/@work_grade@/ig, `'0'`)
|
|
if (verify.flowType === 'start') {
|
_sql = _sql.replace(/@start_type@/ig, `'开始'`)
|
} else {
|
_sql = _sql.replace(/@check_type@/ig, `'审核'`)
|
_sql = _sql.replace(/@notice_type@/ig, `'抄送'`)
|
|
_sql = _sql.replace(/@check_userids@/ig, `''`)
|
_sql = _sql.replace(/@notice_userids@/ig, `''`)
|
|
_sql = _sql.replace(/@works_flow_sign@/ig, `''`)
|
}
|
} else if (_backCustomScript) {
|
_sql += _backCustomScript
|
}
|
|
if (verifyValSql) {
|
_sql += verifyValSql
|
}
|
|
if (btn.procMode === 'system') {
|
_sql += `
|
aaa: if @ErrorCode!=''
|
insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@`
|
} else if (btn.output) {
|
_sql += `
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg,${btn.output} as mk_b_id`
|
} else {
|
_sql += `
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
|
}
|
|
_sql = _sql.replace(/@ID@/ig, `'${primaryId || ''}'`)
|
_sql = _sql.replace(/@BID@/ig, `'${BID}'`)
|
_sql = _sql.replace(/@typename@/ig, `'typename'`)
|
_sql = _sql.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, `''`)
|
_sql = _sql.replace(/\$check@|@check\$/ig, '')
|
|
return _sql
|
}
|
|
getExcelInSql = (item) => {
|
let btn = item.verify
|
let userName = 'User_Name'
|
let fullName = 'Full_Name'
|
let RoleID = 'role_id'
|
let departmentcode = 'departmentcode'
|
let organization = 'organization'
|
let mk_user_type = 'mk_user_type'
|
let nation = 'nation'
|
let province = 'province'
|
let city = 'city'
|
let district = 'district'
|
let address = 'address'
|
let _sheet = item.sheet
|
|
if (window.GLOB.externalDatabase !== null) {
|
_sheet = _sheet.replace(/@db@/ig, window.GLOB.externalDatabase)
|
}
|
|
let database = _sheet.match(/(.*)\.(.*)\./ig)
|
let sheet = _sheet.replace(/(.*)\.(.*)\./ig, '')
|
|
database = database ? (database[0] || '') : ''
|
|
let upId = Utils.getuuid()
|
|
let vals = []
|
btn.columns.forEach(col => {
|
if (col.import === 'false') return
|
|
let val = ''
|
if (col.import === 'init') {
|
if (/^Nvarchar/ig.test(col.type)) {
|
val = ''
|
} else if (/^Decimal/ig.test(col.type) || /^int/ig.test(col.type)) {
|
val = 0
|
} else if (col.type === 'date') {
|
val = '1949-10-01'
|
} else if (col.type === 'datetime') {
|
val = '1949-10-01 00:00:00'
|
}
|
} else if (/^Nvarchar/ig.test(col.type)) {
|
val = 'mk'
|
} else if (/^Decimal/ig.test(col.type) || /^int/ig.test(col.type)) {
|
val = 1
|
} else if (col.type === 'date') {
|
val = '1949-10-01'
|
} else if (col.type === 'datetime') {
|
val = '1949-10-01 00:00:00'
|
}
|
|
vals.push(`'${val}'`)
|
})
|
|
vals.push(`'${upId}000010'`)
|
vals.push(`'bid'`)
|
|
vals = `Select ${vals.join(',')}`
|
|
let sql = ''
|
|
let _initCustomScript = '' // 初始化脚本
|
let _prevCustomScript = '' // 默认sql前执行脚本
|
let _backCustomScript = '' // 默认sql后执行脚本
|
let regs = [
|
{reg: new RegExp('(^|\\s)@' + sheet + '(\\s|$)', 'ig'), value: ` #${sheet} `},
|
{reg: new RegExp('(^|\\s)@' + sheet + '\\(', 'ig'), value: ` #${sheet}(`},
|
{reg: new RegExp('(^|\\s)@' + sheet + '\\)', 'ig'), value: ` #${sheet})`},
|
{reg: /@typename@/ig, value: `'admin'`},
|
{reg: /\$@/ig, value: ''},
|
{reg: /@\$/ig, value: ''},
|
{reg: /@datam@/ig, value: `''`},
|
]
|
|
btn.scripts && btn.scripts.forEach(script => {
|
if (script.status === 'false') return
|
|
let _sql = script.sql
|
|
regs.forEach(item => {
|
_sql = _sql.replace(item.reg, item.value)
|
})
|
|
if (script.position === 'init') {
|
_initCustomScript += `
|
/* 自定义脚本 */
|
${_sql}
|
`
|
} else if (script.position === 'front') {
|
_prevCustomScript += `
|
/* 自定义脚本 */
|
${_sql}
|
`
|
} else {
|
_backCustomScript += `
|
/* 自定义脚本 */
|
${_sql}
|
`
|
}
|
})
|
|
let _uniquesql = ''
|
if (btn.uniques && btn.uniques.length > 0) {
|
let textFields = []
|
let numberFields = []
|
let dateFields = []
|
btn.columns.forEach((col) => {
|
if (/Nvarchar/ig.test(col.type)) {
|
textFields.push(col.Column)
|
} else if (/Decimal|int/ig.test(col.type)) {
|
numberFields.push(col.Column)
|
} else if (/date/ig.test(col.type)) {
|
dateFields.push(col.Column)
|
}
|
})
|
btn.uniques.forEach(unique => {
|
if (unique.status === 'false' || !unique.verifyType) return
|
|
let _fields = unique.field.split(',')
|
let _fields_ = _fields.map(_field => `a.${_field}=b.${_field}`)
|
_fields_ = _fields_.join(' and ')
|
|
let _where = []
|
_fields.forEach(f => {
|
if (textFields.includes(f)) {
|
_where.push(`${f}!=''`)
|
} else if (numberFields.includes(f)) {
|
_where.push(`${f}!=0`)
|
} else if (dateFields.includes(f)) {
|
_where.push(`${f}>'1949-10-01'`)
|
}
|
})
|
_where = _where.length ? `where ${_where.join(' and ')} ` : ''
|
|
if (unique.verifyType === 'logic' || unique.verifyType === 'logic_temp') {
|
_fields_ += ' and b.deleted=0'
|
}
|
|
let _afields = []
|
_fields = _fields.map(f => {
|
if (numberFields.includes(f)) {
|
_afields.push(`cast(a.${f} as nvarchar(50))`)
|
return `cast(${f} as nvarchar(50))`
|
} else if (dateFields.includes(f)) {
|
_afields.push(`CONVERT(nvarchar(50), a.${f}, 21)`)
|
return `CONVERT(nvarchar(50), ${f}, 21)`
|
}
|
_afields.push(`a.${f}`)
|
|
return f
|
})
|
|
_uniquesql += `
|
/* 重复性验证 */
|
Set @tbid=''
|
Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from #${sheet} ) a group by ${unique.field} having sum(n)>1
|
|
If @tbid!=''
|
Begin
|
select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 重复'
|
goto aaa
|
end
|
|
${unique.verifyType.indexOf('temp') === -1 ? `Set @tbid=''
|
Select top 1 @tbid=${_afields.join('+\' \'+')} from ${_where ? `(select * from #${sheet} ${_where})` : `#${sheet}`} a Inner join ${sheet} b on ${_fields_}
|
|
If @tbid!=''
|
Begin
|
select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 与已有数据重复'
|
goto aaa
|
end` : ''}
|
`
|
})
|
}
|
|
let declarefields = []
|
let fields = []
|
|
btn.columns.forEach(col => {
|
if (col.import === 'false') return
|
|
if (col.type === 'date') {
|
declarefields.push(`${col.Column} Nvarchar(50)`)
|
} else {
|
declarefields.push(`${col.Column} ${col.type}`)
|
}
|
fields.push(col.Column)
|
})
|
|
fields = fields.join(',')
|
|
let _insert = ''
|
if (btn.default !== 'false') {
|
_insert = `
|
/* 默认sql */
|
Insert into ${database}${sheet} (${fields},createuserid,createuser,createstaff,bid)
|
Select ${fields},'${sessionStorage.getItem('UserID') || ''}',@username,@fullname,'bid' From #${sheet}
|
`
|
}
|
|
sql = `create table #${sheet} (${declarefields.join(',')},jskey nvarchar(50),BID nvarchar(50))
|
Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
|
|
Select @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
|
${_initCustomScript}
|
|
Insert into #${sheet} (${fields},jskey,BID)
|
|
/* excel数据*/
|
${vals}
|
|
${_uniquesql}
|
${_prevCustomScript}
|
${_insert}`
|
|
if (btn.workFlow === 'true' && process) {
|
if (btn.flowSql === 'true') {
|
sql += `
|
/* 工作流默认sql */
|
insert into s_my_works_flow (works_flow_id,works_flow_code,works_flow_name,works_flow_param,status,statusname,work_group,works_flow_detail_id,work_grade,bid,createuserid,CreateUser,CreateStaff,upid)
|
select jskey,@works_flow_code@,@works_flow_name@,@works_flow_param@,@status@,@statusname@,@work_group@,@works_flow_detail_id@,@work_grade@,@bid@,@UserID@,@UserName,@FullName,@time_id@
|
from #${sheet}
|
|
insert into s_my_works_flow_log (works_flow_id,works_flow_code,works_flow_name,works_flow_param,status,statusname,works_flow_detail_id,work_group,work_grade,bid,createuserid,CreateUser,CreateStaff,upid)
|
select jskey,@works_flow_code@,@works_flow_name@ ,@works_flow_param@,@status@,@statusname@,@works_flow_detail_id@,@work_group@,@work_grade@,@bid@,@UserID@,@UserName,@FullName,@time_id@
|
from #${sheet}
|
|
insert into s_my_works_flow_notice (works_flow_id,works_flow_code,works_flow_detail_id,userid,notice_type,createuserid,CreateUser,CreateStaff,upid)
|
select jskey,@works_flow_code@,@works_flow_detail_id@,@userid@,@start_type@,@userid@,@UserName,@FullName,@time_id@
|
from #${sheet}
|
|
insert into s_my_works_flow_role (works_flow_id,works_flow_code,userid,works_flow_detail_id,createuserid,CreateUser,CreateStaff,upid,typecharone)
|
select jskey,@works_flow_code@,@userid@,@works_flow_detail_id@,@userid@,@UserName,@FullName,@time_id@,'begin'
|
from #${sheet}
|
`
|
}
|
|
sql += `
|
${_backCustomScript}
|
|
drop table #${sheet}
|
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
|
|
sql = sql.replace(/@start_type@/ig, `'开始'`)
|
sql = sql.replace(/@works_flow_code@/ig, `'mk'`)
|
sql = sql.replace(/@works_flow_name@/ig, `'mk'`)
|
sql = sql.replace(/@works_flow_param@/ig, `''`)
|
sql = sql.replace(/@works_flow_detail_id@/ig, `'0'`)
|
sql = sql.replace(/@status@/ig, `'888'`)
|
sql = sql.replace(/@statusname@/ig, `'结束'`)
|
sql = sql.replace(/@work_group@/ig, `'mk'`)
|
sql = sql.replace(/@work_grade@/ig, `'0'`)
|
} else {
|
sql += `
|
${_backCustomScript}
|
|
drop table #${sheet}
|
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
|
}
|
|
sql = sql.replace(/\$check@|@check\$/ig, '')
|
|
return sql
|
}
|
|
getEditTableSql = (verify, cols, columns, setting) => {
|
let btn = verify
|
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 mk_user_type = sessionStorage.getItem('mk_user_type') || ''
|
let nation = sessionStorage.getItem('nation') || ''
|
let province = sessionStorage.getItem('province') || ''
|
let city = sessionStorage.getItem('city') || ''
|
let district = sessionStorage.getItem('district') || ''
|
let address = sessionStorage.getItem('address') || ''
|
|
let _sheet = btn.sheet
|
let BID = 'bid'
|
|
if (window.GLOB.externalDatabase !== null) {
|
_sheet = _sheet.replace(/@db@/ig, window.GLOB.externalDatabase)
|
}
|
|
let database = _sheet.match(/(.*)\.(.*)\./ig)
|
let sheet = _sheet.replace(/(.*)\.(.*)\./ig, '')
|
|
database = database ? (database[0] || '') : ''
|
|
let vals = []
|
let forms = []
|
let _forms = {}
|
let index = 0
|
|
let getColumns = (cols) => {
|
cols.forEach(item => {
|
if (item.type === 'colspan') {
|
getColumns(item.subcols)
|
} else if (item.editable === 'true') {
|
item.$sort = index
|
_forms[item.field] = item
|
index++
|
}
|
})
|
}
|
|
getColumns(cols)
|
|
columns.forEach(item => {
|
if (item.field === setting.primaryKey) return
|
|
if (_forms[item.field]) {
|
let _item = {..._forms[item.field]}
|
if (_item.editType === 'date') {
|
_item.datatype = _item.declareType || 'datetime'
|
} else {
|
_item.datatype = item.datatype
|
}
|
|
forms.push(_item)
|
} else {
|
forms.push({...item, $sort: 999})
|
}
|
})
|
|
forms.sort((a, b) => a.$sort - b.$sort)
|
|
forms.forEach(col => {
|
if (/date/.test(col.datatype)) {
|
vals.push(`'1949-10-01'`)
|
} else if (col.editType && ['select', 'popSelect'].includes(col.editType)) {
|
vals.push(`'0'`)
|
} else if (col.type === 'number') {
|
vals.push(`1`)
|
} else {
|
vals.push(`'mk'`)
|
}
|
})
|
|
vals.push(`'uuid'`)
|
vals.push(`'upt'`)
|
vals.push(`'${BID}'`)
|
|
vals = `Select ${vals.join(',')}`
|
|
let sql = ''
|
|
let _initCustomScript = '' // 初始化脚本
|
let _prevCustomScript = '' // 默认sql前执行脚本
|
let _backCustomScript = '' // 默认sql后执行脚本
|
let isDM = sessionStorage.getItem('dataM') === 'true'
|
let regs = [
|
{reg: new RegExp('(^|\\s)@' + sheet + '(\\s|$)', 'ig'), value: ` #${sheet} `},
|
{reg: new RegExp('(^|\\s)@' + sheet + '\\(', 'ig'), value: ` #${sheet}(`},
|
{reg: new RegExp('(^|\\s)@' + sheet + '\\)', 'ig'), value: ` #${sheet})`},
|
{reg: /@typename@/ig, value: `'admin'`},
|
{reg: /\$@/ig, value: isDM ? '/*' : ''},
|
{reg: /@\$/ig, value: isDM ? '*/' : ''},
|
{reg: /@datam@/ig, value: isDM ? `'Y'` : `''`},
|
]
|
|
btn.scripts && btn.scripts.forEach(script => {
|
if (script.status === 'false') return
|
|
let _sql = script.sql
|
|
regs.forEach(item => {
|
_sql = _sql.replace(item.reg, item.value)
|
})
|
|
if (script.position === 'init') {
|
_initCustomScript += `
|
/* 自定义脚本 */
|
${_sql}
|
`
|
} else if (script.position === 'front') {
|
_prevCustomScript += `
|
/* 自定义脚本 */
|
${_sql}
|
`
|
} else {
|
_backCustomScript += `
|
/* 自定义脚本 */
|
${_sql}
|
`
|
}
|
})
|
|
let _uniquesql = ''
|
if (btn.uniques && btn.uniques.length > 0) {
|
let textFields = []
|
let numberFields = []
|
let dateFields = []
|
columns.forEach((col) => {
|
if (/Nvarchar/ig.test(col.datatype)) {
|
textFields.push(col.field)
|
} else if (/Decimal|int/ig.test(col.datatype)) {
|
numberFields.push(col.field)
|
} else if (/date/ig.test(col.datatype)) {
|
dateFields.push(col.field)
|
}
|
})
|
btn.uniques.forEach(unique => {
|
if (unique.status === 'false' || !unique.verifyType) return
|
|
let _fields = unique.field.split(',')
|
let _fields_ = _fields.map(_field => `a.${_field}=b.${_field}`)
|
_fields_ = _fields_.join(' and ')
|
_fields_ += ` and a.jskey != b.${setting.primaryKey || 'id'}`
|
|
let _where = []
|
_fields.forEach(f => {
|
if (textFields.includes(f)) {
|
_where.push(`${f}!=''`)
|
} else if (numberFields.includes(f)) {
|
_where.push(`${f}!=0`)
|
} else if (dateFields.includes(f)) {
|
_where.push(`${f}>'1949-10-01'`)
|
}
|
})
|
_where = _where.length ? `where ${_where.join(' and ')} ` : ''
|
|
if (unique.verifyType === 'logic' || unique.verifyType === 'logic_temp') {
|
_fields_ += ' and b.deleted=0'
|
}
|
|
let _afields = []
|
_fields = _fields.map(f => {
|
if (numberFields.includes(f)) {
|
_afields.push(`cast(a.${f} as nvarchar(50))`)
|
return `cast(${f} as nvarchar(50))`
|
} else if (dateFields.includes(f)) {
|
_afields.push(`CONVERT(nvarchar(50), a.${f}, 21)`)
|
return `CONVERT(nvarchar(50), ${f}, 21)`
|
}
|
_afields.push(`a.${f}`)
|
|
return f
|
})
|
|
_uniquesql += `
|
/* 重复性验证 */
|
Set @tbid=''
|
Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from #${sheet} ) a group by ${unique.field} having sum(n)>1
|
|
If @tbid!=''
|
Begin
|
select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 重复'
|
goto aaa
|
end
|
|
${unique.verifyType.indexOf('temp') === -1 ? `Set @tbid=''
|
Select top 1 @tbid=${_afields.join('+\' \'+')} from ${_where ? `(select * from #${sheet} ${_where})` : `#${sheet}`} a Inner join ${sheet} b on ${_fields_}
|
|
If @tbid!=''
|
Begin
|
select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 与已有数据重复'
|
goto aaa
|
end` : ''}
|
`
|
})
|
}
|
|
let declarefields = []
|
let fields = []
|
let upFields = []
|
|
forms.forEach(col => {
|
let key = col.field.toLowerCase()
|
if (key === 'jskey' || key === 'bid' || key === 'data_type') return
|
|
declarefields.push(`${col.field} ${col.datatype}`)
|
fields.push(col.field)
|
upFields.push(`${col.field}=t.${col.field}`)
|
})
|
|
fields = fields.join(',')
|
upFields = upFields.join(',')
|
|
let _insert = ''
|
if (btn.default !== 'false') {
|
_insert = `
|
/* 默认sql */
|
update a set ${upFields},modifydate=getdate(),modifyuserid='${sessionStorage.getItem('UserID') || ''}',modifyuser=@username,modifystaff=@fullname,deleted=0
|
from (select * from #${sheet} where data_type='upt') t
|
inner join ${database}${sheet} a on t.jskey=a.${setting.primaryKey || 'id'}
|
|
update a set deleted=1,modifydate=getdate(),modifyuserid='${sessionStorage.getItem('UserID') || ''}',modifyuser=@username,modifystaff=@fullname
|
from (select * from #${sheet} where data_type='del') t
|
inner join ${database}${sheet} a on t.jskey=a.${setting.primaryKey || 'id'}
|
|
delete t from #${sheet} t inner join ${database}${sheet} a on t.jskey=a.${setting.primaryKey || 'id'}
|
|
Insert into ${database}${sheet} (${fields},createuserid,createuser,createstaff,bid)
|
Select ${fields},'${sessionStorage.getItem('UserID') || ''}',@username,@fullname,'${BID}' From #${sheet}
|
`
|
}
|
|
sql = `create table #${sheet} (${declarefields.join(',')},jskey nvarchar(50),data_type nvarchar(50),BID nvarchar(256))
|
Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
|
|
Select @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
|
${_initCustomScript}
|
Insert into #${sheet} (${fields},jskey,data_type,BID)
|
|
/* excel数据*/
|
${vals}
|
|
${_uniquesql}
|
${_prevCustomScript}
|
${_insert}
|
${_backCustomScript}
|
|
drop table #${sheet}
|
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
|
|
return sql
|
}
|
|
getExcelOutSql = (btn, component) => {
|
let item = {setting: {}, columns: [], search: []}
|
|
btn.verify.columns.forEach(col => {
|
if (col.output === 'false' || !col.Column || col.Column === '$Index') return
|
item.columns.push({
|
field: col.Column
|
})
|
})
|
|
if (btn.verify.useSearch !== 'false') {
|
item.search = component.$searches
|
}
|
|
item.setting.interType = 'system'
|
item.setting.execute = btn.verify.defaultSql || 'true'
|
item.setting.dataresource = btn.verify.dataresource || ''
|
item.setting.primaryKey = btn.verify.primaryKey || ''
|
item.setting.queryType = btn.verify.queryType
|
item.setting.laypage = btn.pagination
|
item.setting.order = btn.verify.order || ''
|
|
if (btn.Ot === 'requiredOnce') {
|
item.setting.primaryKey = btn.verify.primaryKey || component.setting.primaryKey || 'ID'
|
}
|
|
item.scripts = btn.verify.scripts || []
|
|
let regs = [
|
{ reg: /\$@/ig, value: '' },
|
{ reg: /@\$/ig, value: '' },
|
{ reg: /@datam@/ig, value: `''` },
|
]
|
|
let process = this.props.config.process === 'true'
|
if (process) {
|
regs.push({ reg: /@works_flow_code@/ig, value: `'1949-10-01 15:00:00'` })
|
}
|
|
let sql = this.formatDataSource(item, regs)
|
|
return sql
|
}
|
|
getPaySql = (btn, component) => {
|
let sysfields = ['username', 'fullname', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'tbid', 'bid']
|
let _declare = []
|
let _select = []
|
|
component.columns.forEach(_f => {
|
if (sysfields.includes(_f.field.toLowerCase())) return
|
|
if (/decimal|int/ig.test(_f.datatype)) {
|
_select.push(`@${_f.field}=1`)
|
} else if (/date/ig.test(_f.datatype)) {
|
_select.push(`@${_f.field}='1949-10-01'`)
|
} else {
|
_select.push(`@${_f.field}=''`)
|
}
|
|
_declare.push(`@${_f.field} ${_f.datatype}`)
|
})
|
|
_declare = _declare.join(', ')
|
_select = _select.join(', ')
|
|
let _sql = `Declare @UserName nvarchar(50), @FullName nvarchar(50), @RoleID nvarchar(512), @mk_departmentcode nvarchar(512), @mk_organization nvarchar(512), @mk_user_type nvarchar(20), @mk_nation nvarchar(50), @mk_province nvarchar(50), @mk_city nvarchar(50), @mk_district nvarchar(50), @mk_address nvarchar(100), @ErrorCode nvarchar(50), @retmsg nvarchar(4000), @bid nvarchar(50), @tbid nvarchar(50), ${_declare}
|
Select @UserName='', @FullName='', @RoleID='', @mk_departmentcode='', @mk_organization='', @mk_user_type='', @mk_nation='', @mk_province='', @mk_city='', @mk_district='', @mk_address='', @ErrorCode='', @retmsg='', @bid='', ${_select}
|
`
|
|
btn.verify.scripts.forEach(item => {
|
if (item.status === 'false') return
|
|
_sql += `
|
${item.sql}
|
`
|
})
|
|
if (btn.output) {
|
_sql += `
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg,${btn.output} as mk_b_id`
|
} else {
|
_sql += `
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
|
}
|
|
_sql = _sql.replace(/@typename@/ig, `'typename'`)
|
_sql = _sql.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, `''`)
|
|
return _sql
|
}
|
|
formatDataSource = (item, regs, mainSearch = []) => {
|
if (!item.setting || item.setting.interType !== 'system') return false
|
|
let searches = item.search || []
|
if (item.setting.useMSearch === 'true' && mainSearch.length > 0) {
|
searches = [...searches, ...mainSearch]
|
}
|
item.$searches = fromJS(searches).toJS()
|
searches = formatSearch(searches)
|
|
let _columns = []
|
if (item.subtype === 'dualdatacard' && item.setting.subdata !== 'sub_data_string') {
|
_columns = [...item.columns, ...item.subColumns]
|
} else if (item.columns) {
|
_columns = [...item.columns]
|
}
|
|
if (item.setting.primaryKey) {
|
let key = item.setting.primaryKey.toLowerCase()
|
if (_columns.findIndex(cell => cell.field.toLowerCase() === key) === -1) {
|
_columns.push({
|
field: item.setting.primaryKey
|
})
|
}
|
}
|
|
let arr_field = _columns.map(col => col.field).join(',')
|
|
let _customScript = ''
|
let _tailScript = ''
|
let _dataresource = ''
|
item.scripts && item.scripts.forEach(script => {
|
if (script.status === 'false') return
|
if (script.position !== 'back') {
|
_customScript += `
|
${script.sql}
|
`
|
} else {
|
_tailScript += `
|
${script.sql}
|
`
|
}
|
})
|
|
if (item.setting.execute !== 'false') {
|
_dataresource = item.setting.dataresource || ''
|
}
|
|
let _search = joinMainSearchkey(searches)
|
if (item.setting.queryType === 'statistics') {
|
_search = ''
|
}
|
|
let custompage = false
|
|
if (/order\s+by\s+sort_id\s*$/i.test(_dataresource)) {
|
custompage = true
|
} else if (/@pageSize@|@orderBy@|@mk_total/i.test(_dataresource + _customScript)) {
|
custompage = true
|
}
|
|
if (/\s/.test(_dataresource)) {
|
_dataresource = '(' + _dataresource + ') tb'
|
}
|
|
item.setting.dataresource = _dataresource
|
item.setting.customScript = _customScript
|
|
if (_dataresource) {
|
if (custompage) {
|
_dataresource = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search} `
|
} else if (item.setting.laypage === 'true' && item.setting.order) {
|
_dataresource = `/*system_query*/select top 10 ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${item.setting.order}) as rows from ${_dataresource} ${_search}) tmptable where rows > 0 order by tmptable.rows `
|
} else if (item.setting.$top) {
|
if (item.setting.order) {
|
_dataresource = `/*system_query*/select top 1 ${arr_field} from ${_dataresource} ${_search} order by ${item.setting.order} `
|
} else {
|
_dataresource = `/*system_query*/select top 1 ${arr_field} from ${_dataresource} ${_search} `
|
}
|
} else if (item.setting.order) {
|
_dataresource = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search} order by ${item.setting.order} `
|
} else {
|
_dataresource = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search} `
|
}
|
}
|
|
let sql = ''
|
if (_customScript) {
|
sql = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
|
select @ErrorCode='',@retmsg ='',@UserName='', @FullName='', @RoleID='', @mk_departmentcode='', @mk_organization='', @mk_user_type='', @mk_nation='', @mk_province='', @mk_city='', @mk_district='', @mk_address=''
|
${_customScript}
|
${_dataresource}
|
${_tailScript}
|
aaa:
|
if @ErrorCode!=''
|
insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,'1949-10-01 15:00:00'
|
`
|
} else if (_tailScript) {
|
sql = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
|
select @ErrorCode='',@retmsg ='',@UserName='', @FullName='', @RoleID='', @mk_departmentcode='', @mk_organization='', @mk_user_type='', @mk_nation='', @mk_province='', @mk_city='', @mk_district='', @mk_address=''
|
${_dataresource}
|
${_tailScript}
|
aaa:
|
if @ErrorCode!=''
|
insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,'1949-10-01 15:00:00'
|
`
|
} else {
|
sql = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
|
select @ErrorCode='',@retmsg ='',@UserName='', @FullName='', @RoleID='', @mk_departmentcode='', @mk_organization='', @mk_user_type='', @mk_nation='', @mk_province='', @mk_city='', @mk_district='', @mk_address=''
|
${_dataresource}`
|
}
|
|
regs.forEach(cell => {
|
sql = sql.replace(cell.reg, cell.value)
|
})
|
|
let regoptions = getSearchRegs(searches)
|
regoptions.push(
|
{ reg: /@orderBy@/ig, value: item.setting.order || '' },
|
{ reg: /@pageSize@/ig, value: 9999 },
|
{ reg: /@pageIndex@/ig, value: 1},
|
{ reg: /@typename@/ig, value: `'admin'`},
|
)
|
|
if (item.hasExtend) {
|
regoptions.push({reg: /@mk_time@/ig, value: `'2024-04-29 17:20:00'`})
|
}
|
if (item.type === 'calendar') {
|
regoptions.push({ reg: /@mk_year@/ig, value: `'2024'` })
|
}
|
if (window.GLOB.getLocation) {
|
regoptions.push(
|
{reg: /@mk_longitude@/ig, value: 0},
|
{reg: /@mk_latitude@/ig, value: 0}
|
)
|
}
|
|
regoptions.forEach(cell => {
|
sql = sql.replace(cell.reg, cell.value)
|
})
|
|
return sql
|
}
|
|
continue = () => {
|
this.setState({status: 'continue'}, () => {
|
this.roopSql()
|
})
|
}
|
|
roopSql = () => {
|
if (this.verSqls.length === 0) {
|
this.setState({status: 'over'})
|
return
|
}
|
|
if (this.state.status === 'stop') return
|
|
let item = this.verSqls.shift()
|
|
this.setState({status: this.verSqls.length > 0 ? 'loading' : 'over', execId: item.uuid})
|
|
window.mkInfo(`/* 组件:${item.name} 检验项:${item.label} */`)
|
|
Api.sDebug(item.sql).then(result => {
|
if (result.status || result.ErrCode === '-2') {
|
this.setState({successIds: [...this.state.successIds, item.uuid], execId: ''})
|
if (this.verSqls.length > 0) {
|
setTimeout(() => {
|
this.roopSql()
|
}, 100)
|
}
|
} else {
|
let errorMsg = fromJS(this.state.errorMsg).toJS()
|
errorMsg[item.uuid] = result.message
|
|
this.setState({
|
execId: '',
|
status: this.verSqls.length > 0 ? 'error' : 'over',
|
errorIds: [...this.state.errorIds, item.uuid],
|
errorMsg: errorMsg
|
})
|
|
Modal.error({
|
title: result.message
|
})
|
}
|
})
|
}
|
|
stop = () => {
|
this.setState({status: 'stop'})
|
}
|
|
over = () => {
|
this.verSqls = []
|
this.setState({status: 'over', visible: false})
|
}
|
|
render() {
|
const { visible, status, columns, sqlList } = this.state
|
|
return (
|
<>
|
<Button className="mk-border-yellow" icon="bug" onClick={this.trigger}>DeepSeek调试</Button>
|
<Modal
|
className="debug-modal"
|
title="DeepSeek调试"
|
width="60vw"
|
visible={visible}
|
closable={false}
|
centered={true}
|
footer={null}
|
destroyOnClose
|
>
|
<div className="mk-sql-wrap mk-scrollbar">
|
<Table
|
bordered
|
rowKey="uuid"
|
dataSource={sqlList}
|
columns={columns}
|
pagination={false}
|
/>
|
</div>
|
<div className="mk-footer">
|
{status === 'error' ? <Button key="skip" className="mk-border-green" onClick={this.roopSql}>
|
跳过
|
</Button> : null}
|
{status === 'loading' ? <Button key="stop" className="mk-border-orange" onClick={this.stop}>
|
暂停
|
</Button> : null}
|
{status === 'stop' ? <Button key="continue" className="mk-border-orange" onClick={this.continue}>
|
继续
|
</Button> : null}
|
<Button key="colse" className="mk-border-danger" onClick={this.over}>
|
关闭
|
</Button>
|
</div>
|
</Modal>
|
</>
|
)
|
}
|
}
|
|
export default DebugSql
|