| | |
| | | }) |
| | | } |
| | | |
| | | if (setting.queryType === 'statistics') { // 统计数据源,内容替换 |
| | | if (setting.queryType === 'statistics' && setting.default !== 'false') { // 统计数据源,内容替换 |
| | | regoptions.forEach(item => { |
| | | _dataresource = _dataresource.replace(item.reg, item.value) |
| | | }) |
| | | _search = '' |
| | | } |
| | | |
| | | let 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` |
| | | let DateCount = `select count(1) as total from ${_dataresource} ${_search}` |
| | | let LText = '' |
| | | let DateCount = '' |
| | | |
| | | if (setting.laypage === 'false') { |
| | | if (setting.default !== 'false' && setting.laypage !== '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` |
| | | DateCount = `select count(1) as total from ${_dataresource} ${_search}` |
| | | } else if (setting.default !== 'false') { |
| | | LText = `select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${_orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows` |
| | | DateCount = '' |
| | | } |
| | |
| | | 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@ |
| | | ` |
| | | } |
| | | |
| | | param.custom_script = Utils.formatOptions(param.custom_script) |
| | | } |
| | | |
| | |
| | | const { Search } = Input |
| | | const { TabPane } = Tabs |
| | | const { TreeNode, DirectoryTree } = Tree |
| | | let checkedKeysMap = null |
| | | let linkMap = null |
| | | |
| | | let linkMap = new Map() |
| | | let selectMap = null |
| | | |
| | | export default class RoleManage extends Component { |
| | |
| | | state = { |
| | | dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, |
| | | loading: true, |
| | | loadingTree: false, |
| | | roleList: null, |
| | | selectRoleId: '', |
| | | mainMenus: null, |
| | |
| | | initCheckKeys: null |
| | | } |
| | | |
| | | /** |
| | | * @description 获取角色列表 |
| | | */ |
| | | getRoleList = async () => { |
| | | let param = { |
| | | func: 's_rolemenu_get_list' |
| | |
| | | |
| | | if (result.status) { |
| | | this.setState({ |
| | | roleList: result.data, |
| | | loading: false |
| | | roleList: result.data |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: result.message, |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 获取一级菜单,用于构建结构树 |
| | | */ |
| | | getMainMenuList = async () => { |
| | | let param = { |
| | | func: 's_rolemenu_get_FstMenu' |
| | |
| | | |
| | | if (result.status) { |
| | | this.setState({ |
| | | loadingTree: true, |
| | | loading: false, |
| | | mainMenus: result.data.map(item => { |
| | | return { |
| | | title: item.MenuName, |
| | |
| | | this.getAllMenuList() |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: result.message, |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 获取所有菜单节点,形成权限树 |
| | | */ |
| | | getAllMenuList = async () => { |
| | | const { selectRoleId, mainMenus, tabKey } = this.state |
| | | |
| | |
| | | let result = await Api.getSystemConfig(param) |
| | | |
| | | if (result.status) { |
| | | let _tree = null |
| | | let _openKeys = [] |
| | | |
| | | let _state = { |
| | | loading: false |
| | | // MenuID(菜单Id)、MenuName(菜单名称)、OnlySelf(值为true,表示三级菜单,增加-仅页面)、Type(菜单级别) |
| | | // ParentID(父级Id)、Selected(是否选中-已失效)、Tabs( 标签类型)、TypeCharOne 菜单类型PC或其他 |
| | | let _tree = this.getTree(fromJS(mainMenus).toJS(), result.data) |
| | | if (_tree[0]) { |
| | | this.getOpenNode(_tree[0], _openKeys) |
| | | } |
| | | |
| | | if (tabKey === '') { |
| | | let _initCheckKeys = [] // 初始选中的菜单id |
| | | checkedKeysMap = new Map() |
| | | linkMap = new Map() |
| | | selectMap = new Map() |
| | | |
| | | result.data.forEach(item => { |
| | | if (item.Selected !== 'true') return |
| | | |
| | | checkedKeysMap.set(item.MenuID, true) |
| | | _initCheckKeys.push(item.MenuID) |
| | | }) |
| | | |
| | | _initCheckKeys = Array.from(new Set(_initCheckKeys)) |
| | | |
| | | _tree = this.getTree(JSON.parse(JSON.stringify(mainMenus)), result.data) |
| | | |
| | | if (_tree[0]) { |
| | | this.getOpenNode(_tree[0], _openKeys) |
| | | } |
| | | |
| | | _state.menuTrees = _tree |
| | | _state.initCheckKeys = _initCheckKeys |
| | | _state.checkedKeys = Array.from(checkedKeysMap.keys()) |
| | | _state.menuOpenKeys = _openKeys |
| | | } else { |
| | | _tree = this.getSelectTree(JSON.parse(JSON.stringify(mainMenus)), result.data) |
| | | _tree = _tree.filter(node => node.children) |
| | | |
| | | if (_tree[0]) { |
| | | this.getOpenNode(_tree[0], _openKeys) |
| | | } |
| | | |
| | | _state.selectMenuTrees = _tree |
| | | _state.selectMenuOpenKeys = _openKeys |
| | | } |
| | | |
| | | this.setState(_state) |
| | | this.setState({ |
| | | loadingTree: false, |
| | | menuTrees: _tree, |
| | | menuOpenKeys: _openKeys |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | | loading: false |
| | | loadingTree: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 选择角色且存在权限树时,获取已分配结构 |
| | | */ |
| | | getSelectMenuList = async () => { |
| | | const { selectRoleId, menuTrees, tabKey } = this.state |
| | | if (!menuTrees) return |
| | | |
| | | let param = { |
| | | func: 's_rolemenu_get_Menulist', |
| | | RoleID: selectRoleId |
| | | } |
| | | |
| | | let result = await Api.getSystemConfig(param) |
| | | |
| | | if (result.status) { |
| | | let _openKeys = [] |
| | | |
| | | if (tabKey === '') { |
| | | let _initKeys = result.data.map(item => item.MenuID) |
| | | _initKeys = Array.from(new Set(_initKeys)) |
| | | |
| | | selectMap = new Map() |
| | | this.getCheckedKeys(fromJS(menuTrees).toJS(), _initKeys) |
| | | |
| | | if (menuTrees[0]) { |
| | | this.getOpenNode(menuTrees[0], _openKeys) |
| | | } |
| | | |
| | | this.setState({ |
| | | loadingTree: false, |
| | | initCheckKeys: _initKeys, |
| | | checkedKeys: Array.from(selectMap.keys()), |
| | | menuOpenKeys: _openKeys |
| | | }) |
| | | } else { |
| | | let Keys = result.data.map(item => item.MenuID) |
| | | let _tree = this.getSelectTree(fromJS(menuTrees).toJS(), Keys) |
| | | |
| | | if (_tree[0]) { |
| | | this.getOpenNode(_tree[0], _openKeys) |
| | | } |
| | | |
| | | this.setState({ |
| | | loadingTree: false, |
| | | selectMenuTrees: _tree, |
| | | selectMenuOpenKeys: _openKeys |
| | | }) |
| | | } |
| | | } else { |
| | | this.setState({ |
| | | loadingTree: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: result.message, |
| | | duration: 5 |
| | | }) |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 获取展开节点 |
| | | */ |
| | | getOpenNode = (parentNode, keys) => { |
| | | if (parentNode.children) { |
| | | keys.push(parentNode.key) |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 获取权限分配树 |
| | | */ |
| | | getTree = (parents, options) => { |
| | | parents.forEach(parent => { |
| | | parent.children = [] |
| | | |
| | | // 添加菜单的子元素 |
| | | options.forEach(option => { |
| | | if (option.ParentID === parent.key) { |
| | | parent.children.push({ |
| | | title: option.MenuName, |
| | | key: option.MenuID, |
| | | selected: parent.selected && option.Selected === 'true', |
| | | addSelf: option.OnlySelf === 'true', |
| | | tabs: option.Tabs |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | |
| | | if (parent.children.length === 0) { |
| | | parent.children = null |
| | | // 针对标签,生成新的id,并保存关联关系(标签不唯一) |
| | | if (parent.tabs) { |
| | | let _uuid = Utils.getuuid() |
| | | linkMap.set(_uuid, parent.key) |
| | | |
| | | if (parent.selected) { |
| | | checkedKeysMap.set(_uuid, true) |
| | | checkedKeysMap.delete(parent.key) |
| | | |
| | | selectMap.set(_uuid, parent.key) |
| | | } |
| | | |
| | | parent.originKey = parent.key |
| | | parent.key = _uuid |
| | | } |
| | | } else { |
| | | if (parent.selected) { |
| | | checkedKeysMap.delete(parent.key) |
| | | } |
| | | // 三级菜单创建子项 |
| | | if (parent.addSelf) { |
| | | let _uuid = Utils.getuuid() |
| | | linkMap.set(_uuid, parent.key) |
| | | |
| | | if (parent.selected) { |
| | | checkedKeysMap.set(_uuid, true) |
| | | } |
| | | parent.subKey = _uuid |
| | | |
| | | parent.children.unshift({ |
| | | title: parent.title + '(仅页面)', |
| | | key: _uuid, |
| | | isSubView: true |
| | | }) |
| | | } |
| | | |
| | | // 针对标签,生成新的id,并保存关联关系(标签不唯一) |
| | | if (parent.tabs) { |
| | | let _uuid = Utils.getuuid() |
| | | linkMap.set(_uuid, parent.key) |
| | | |
| | | if (parent.selected) { |
| | | selectMap.set(_uuid, parent.key) |
| | | } |
| | | |
| | | |
| | | parent.originKey = parent.key |
| | | parent.key = _uuid |
| | | } |
| | | |
| | | parent.children = this.getTree(parent.children, options) |
| | | } |
| | | }) |
| | | |
| | | return parents |
| | | } |
| | | |
| | | getSelectTree = (parents, options) => { |
| | | /** |
| | | * @description 获取已选择的节点 |
| | | */ |
| | | getCheckedKeys = (parents, initKeys) => { |
| | | parents.forEach(parent => { |
| | | parent.children = [] |
| | | |
| | | options.forEach(option => { |
| | | if (option.ParentID === parent.key) { |
| | | parent.children.push({ |
| | | title: option.MenuName, |
| | | key: option.MenuID, |
| | | tabs: option.Tabs |
| | | }) |
| | | if ((parent.originKey && initKeys.indexOf(parent.originKey) > -1) || initKeys.indexOf(parent.key) > -1) { |
| | | if (parent.children) { |
| | | if (parent.subKey) { |
| | | selectMap.set(parent.subKey, true) |
| | | } |
| | | this.getCheckedKeys(parent.children, initKeys) |
| | | } else { |
| | | selectMap.set(parent.key, true) |
| | | } |
| | | }) |
| | | |
| | | |
| | | parent.key = Utils.getuuid() |
| | | if (parent.children.length === 0) { |
| | | parent.children = null |
| | | } else { |
| | | parent.children = this.getSelectTree(parent.children, options) |
| | | } |
| | | }) |
| | | |
| | | return parents |
| | | } |
| | | |
| | | /** |
| | | * @description 生成已分配权限的结构树 |
| | | */ |
| | | getSelectTree = (parents, options) => { |
| | | return parents.filter(parent => { |
| | | if ((parent.originKey && options.indexOf(parent.originKey) > -1) || options.indexOf(parent.key) > -1) { |
| | | if (parent.children) { |
| | | parent.children = this.getSelectTree(parent.children, options) |
| | | if (parent.children.length === 0) { |
| | | parent.children = null |
| | | } |
| | | } |
| | | return true |
| | | } else if (parent.isSubView) { |
| | | return true |
| | | } |
| | | return false |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 角色切换 |
| | | */ |
| | | changeRole = (role) => { |
| | | const { selectRoleId } = this.state |
| | | |
| | |
| | | |
| | | this.setState({ |
| | | selectRoleId: role.RoleID, |
| | | menuTrees: null, |
| | | checkedKeys: [], |
| | | menuOpenKeys: [], |
| | | selectMenuTrees: null, |
| | | selectMenuOpenKeys: [] |
| | | loadingTree: true |
| | | }, () => { |
| | | this.getAllMenuList() |
| | | this.getSelectMenuList() |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 获取树节点 |
| | | */ |
| | | renderTreeNodes = (data) => { |
| | | return data.map(item => { |
| | | if (item.children) { |
| | |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 节点选择事件 |
| | | */ |
| | | onCheck = (checkedKeys, info) => { |
| | | this.setState({ |
| | | checkedKeys: checkedKeys, |
| | |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 已分配与未分配切换 |
| | | */ |
| | | changeTab = (key) => { |
| | | const { menuTrees, selectMenuTrees } = this.state |
| | | const { selectRoleId } = this.state |
| | | |
| | | this.setState({ |
| | | tabKey: key === 'selected' ? key : '' |
| | | tabKey: key === 'selected' ? key : '', |
| | | loadingTree: true |
| | | }, () => { |
| | | if ((key === 'selected' && !selectMenuTrees) || (key === 'all' && !menuTrees)) { |
| | | this.getAllMenuList() |
| | | if (selectRoleId) { |
| | | this.getSelectMenuList() |
| | | } else { |
| | | this.setState({ |
| | | selectMenuTrees: [], |
| | | loadingTree: false |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 提交已选的权限 |
| | | */ |
| | | roleSubmit = async () => { |
| | | const { checkedKeys, halfCheckedKeys, selectRoleId, initCheckKeys } = this.state |
| | | |
| | |
| | | _keys.push(key) |
| | | } |
| | | }) |
| | | _cKeys = new Map(_cKeys.map(key => [key, true])) |
| | | _keys = new Map(_keys.map(key => [key, true])) |
| | | |
| | | Array.from(selectMap.keys()).forEach(key => { |
| | | if (!_cKeys.has(key)) { |
| | | _keys.delete(selectMap.get(key)) |
| | | } |
| | | }) |
| | | |
| | | _keys = Array.from(_keys.keys()) |
| | | _keys = Array.from(new Set(_keys)) |
| | | } |
| | | |
| | | // let _LText = _keys.map(key => `select '${key}' as MenuID`) |
| | | // _LText = _LText.join(' union all ') |
| | | |
| | | let param = { |
| | | func: 's_rolemenu_sub', |
| | | RoleID: selectRoleId, |
| | | // LText: Utils.formatOptions(_LText) |
| | | RoleMenu: _keys.map(key => { |
| | | return {MenuID: key} |
| | | }) |
| | |
| | | }) |
| | | this.setState({ |
| | | submitloading: false, |
| | | menuTrees: null, |
| | | checkedKeys: [], |
| | | menuOpenKeys: [], |
| | | selectMenuTrees: null, |
| | | selectMenuOpenKeys: [] |
| | | loadingTree: true |
| | | }, () => { |
| | | this.getAllMenuList() |
| | | this.getSelectMenuList() |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | | submitloading: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: result.message, |
| | | duration: 5 |
| | | }) |
| | | this.setState({ |
| | | submitloading: false |
| | | }) |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | render() { |
| | | const { roleList, loading, primarykey, menuTrees, checkedKeys, menuOpenKeys, selectMenuTrees, tabKey, selectRoleId, selectMenuOpenKeys, submitloading } = this.state |
| | | const { roleList, loading, loadingTree, primarykey, menuTrees, checkedKeys, menuOpenKeys, selectMenuTrees, tabKey, selectRoleId, selectMenuOpenKeys, submitloading } = this.state |
| | | |
| | | let _roleList = [] |
| | | |
| | |
| | | <Col span={19}> |
| | | <Tabs defaultActiveKey="all" tabBarExtraContent={!tabKey && selectRoleId ? <Button type="primary" loading={submitloading} onClick={this.roleSubmit}>提交</Button> : null} onChange={this.changeTab}> |
| | | <TabPane tab="菜单列表" key="all"> |
| | | {menuTrees && menuTrees.length > 0 ? <Tree |
| | | {!loadingTree && menuTrees && menuTrees.length > 0 ? <Tree |
| | | checkable |
| | | selectable={false} |
| | | defaultExpandedKeys={menuOpenKeys} |
| | |
| | | > |
| | | {this.renderTreeNodes(menuTrees)} |
| | | </Tree> : null} |
| | | {menuTrees && menuTrees.length === 0 ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null} |
| | | {!loading && !menuTrees ? <Spin className="load-tree" /> : null} |
| | | {!loadingTree && (!menuTrees || menuTrees.length === 0) ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null} |
| | | {loadingTree ? <Spin className="load-tree" /> : null} |
| | | </TabPane> |
| | | <TabPane tab="已授权菜单" key="selected"> |
| | | {selectMenuTrees && selectMenuTrees.length > 0 ? <DirectoryTree multiple defaultExpandedKeys={selectMenuOpenKeys}> |
| | | {!loadingTree && selectMenuTrees && selectMenuTrees.length > 0 ? <DirectoryTree multiple defaultExpandedKeys={selectMenuOpenKeys}> |
| | | {this.renderTreeNodes(selectMenuTrees)} |
| | | </DirectoryTree> : null} |
| | | {selectMenuTrees && selectMenuTrees.length === 0 ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null} |
| | | {!loading && !selectMenuTrees ? <Spin className="load-tree" /> : null} |
| | | {!loadingTree && (!selectMenuTrees || selectMenuTrees.length === 0) ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null} |
| | | {loadingTree ? <Spin className="load-tree" /> : null} |
| | | </TabPane> |
| | | </Tabs> |
| | | </Col> |
| | |
| | | }) |
| | | } |
| | | |
| | | if (setting.queryType === 'statistics') { // 统计数据源,内容替换 |
| | | if (setting.queryType === 'statistics' && setting.default !== 'false') { // 统计数据源,内容替换 |
| | | regoptions.forEach(item => { |
| | | _dataresource = _dataresource.replace(item.reg, item.value) |
| | | }) |
| | | _search = '' |
| | | } |
| | | |
| | | let 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` |
| | | let DateCount = `select count(1) as total from ${_dataresource} ${_search}` |
| | | let LText = '' |
| | | let DateCount = '' |
| | | |
| | | if (setting.laypage === 'false') { |
| | | if (setting.default !== 'false' && setting.laypage !== '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` |
| | | DateCount = `select count(1) as total from ${_dataresource} ${_search}` |
| | | } else if (setting.default !== 'false') { |
| | | LText = `select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${_orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows` |
| | | DateCount = '' |
| | | } |
| | |
| | | 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@ |
| | | ` |
| | | } |
| | | |
| | | param.custom_script = Utils.formatOptions(param.custom_script) |
| | | } |
| | | |
| | |
| | | }) |
| | | } |
| | | |
| | | if (setting.queryType === 'statistics') { // 统计数据源,内容替换 |
| | | if (setting.queryType === 'statistics' && setting.default !== 'false') { // 统计数据源,内容替换 |
| | | regoptions.forEach(item => { |
| | | _dataresource = _dataresource.replace(item.reg, item.value) |
| | | }) |
| | | _search = '' |
| | | } |
| | | |
| | | let 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` |
| | | let DateCount = `select count(1) as total from ${_dataresource} ${_search}` |
| | | let LText = '' |
| | | let DateCount = '' |
| | | |
| | | if (setting.laypage === 'false') { |
| | | if (setting.default !== 'false' && setting.laypage !== '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` |
| | | DateCount = `select count(1) as total from ${_dataresource} ${_search}` |
| | | } else if (setting.default !== 'false') { |
| | | LText = `select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${_orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows` |
| | | DateCount = '' |
| | | } |
| | |
| | | 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@ |
| | | ` |
| | | } |
| | | |
| | | param.custom_script = Utils.formatOptions(param.custom_script) |
| | | } |
| | | |
| | |
| | | param.BID = this.props.BID |
| | | } |
| | | |
| | | let primaryId = setting.primaryKey ? cell[setting.primaryKey] : '' |
| | | let primaryId = setting.primaryKey ? cell[setting.primaryKey] || '' : '' |
| | | |
| | | if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { // 是否弹框或直接执行 |
| | | |
| | |
| | | } |
| | | |
| | | if (plot.adjust !== 'stack') { |
| | | chart |
| | | let _chart = chart |
| | | .interval() |
| | | .position(`${plot.Xaxis}*${_valfield}`) |
| | | .color(_typefield) |
| | |
| | | } |
| | | ]) |
| | | .shape(plot.shape || 'rect') |
| | | |
| | | if (plot.label === 'true') { |
| | | _chart.label(_valfield) |
| | | } |
| | | } else if (plot.adjust === 'stack') { |
| | | chart |
| | | let _chart = chart |
| | | .interval() |
| | | .position(`${plot.Xaxis}*${_valfield}`) |
| | | .color(_typefield) |
| | | .adjust('stack') |
| | | .shape(plot.shape || 'rect') |
| | | |
| | | if (plot.label === 'true') { |
| | | _chart.label(_valfield) |
| | | } |
| | | } |
| | | |
| | | chart.render() |
| | |
| | | if (!err) { |
| | | let _plot = {...plot, ...values} |
| | | |
| | | if (_plot.enabled !== 'true') { |
| | | if (_plot.enabled !== 'true' || _plot.customs.map(_cell => _cell.field).sort().toString() !== _plot.Yaxis.sort().toString()) { |
| | | _plot.enabled = 'false' |
| | | _plot.customs = _plot.Yaxis.map((field, i) => { |
| | | let _item = {field: field} |
| | |
| | | } |
| | | |
| | | this.setState({ |
| | | enabled: _plot.enabled || 'false', |
| | | plot: _plot, |
| | | view: _view |
| | | }) |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { Form, Row, Col, Input, Button, notification, Modal, Select, Radio } from 'antd' |
| | | import { Form, Row, Col, Input, Button, notification, Modal, Select } from 'antd' |
| | | import moment from 'moment' |
| | | |
| | | import Utils from '@/utils/utils.js' |
| | | import SettingUtils from '../utils.jsx' |
| | | import Api from '@/api' |
| | | import './index.scss' |
| | | |
| | |
| | | dict: PropTypes.object, // 字典项 |
| | | setting: PropTypes.object, // 设置 |
| | | searches: PropTypes.array, // 搜索条件 |
| | | swhere: PropTypes.string, // where条件 |
| | | arr_field: PropTypes.string, // 列字段 |
| | | regoptions: PropTypes.array, // 正则替换 |
| | | systemScripts: PropTypes.array, // 系统脚本 |
| | | customScripts: PropTypes.array, // 自定义脚本 |
| | | scriptsChange: PropTypes.func // 表单 |
| | | } |
| | | |
| | |
| | | }) |
| | | |
| | | this.props.form.setFieldsValue({ |
| | | sql: record.sql, |
| | | initsql: record.initsql || 'false' |
| | | sql: record.sql |
| | | }) |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | handleConfirm = () => { |
| | | const { searches, setting } = this.props |
| | | |
| | | const { setting, arr_field, regoptions, swhere } = this.props |
| | | |
| | | // 表单提交时检查输入值是否正确 |
| | | this.props.form.validateFieldsAndScroll((err, values) => { |
| | | if (!err) { |
| | |
| | | return |
| | | } |
| | | |
| | | let tail = ` |
| | | aaa: |
| | | ` |
| | | |
| | | let _initsql = '' |
| | | this.props.customScripts.forEach(script => { |
| | | if (this.state.editItem && this.state.editItem.uuid === script.uuid) return |
| | | if (script.status === 'false' || script.initsql !== 'true') return |
| | | |
| | | _initsql += ` |
| | | let _customScript = '' |
| | | setting.scripts && setting.scripts.forEach(script => { |
| | | if (this.state.editItem && this.state.editItem.uuid === script.uuid) { |
| | | _customScript += ` |
| | | ${values.sql} |
| | | ` |
| | | } else if (script.status !== 'false') { |
| | | _customScript += ` |
| | | ${script.sql} |
| | | ` |
| | | }) |
| | | |
| | | let param = { |
| | | func: 's_debug_sql', |
| | | LText: _initsql + values.sql + tail |
| | | } |
| | | |
| | | param.LText = param.LText.replace(/@\$|\$@/ig, '') |
| | | |
| | | let allSearch = Utils.initMainSearch(searches) |
| | | allSearch = Utils.getAllSearchOptions(allSearch) |
| | | |
| | | let regoptions = allSearch.map(item => { |
| | | return { |
| | | reg: new RegExp('@' + item.key + '@', 'ig'), |
| | | value: `'${item.value}'` |
| | | } |
| | | }) |
| | | |
| | | regoptions.push({ |
| | | reg: new RegExp('@orderBy@', 'ig'), |
| | | value: setting.order |
| | | }) |
| | | if (setting.laypage !== 'false') { |
| | | regoptions.push({ |
| | | reg: new RegExp('@pageSize@', 'ig'), |
| | | value: 10 |
| | | }, { |
| | | reg: new RegExp('@pageIndex@', 'ig'), |
| | | value: 1 |
| | | }) |
| | | if (!this.state.editItem) { |
| | | _customScript += ` |
| | | ${values.sql} |
| | | ` |
| | | } |
| | | |
| | | regoptions.forEach(item => { |
| | | param.LText = param.LText.replace(item.reg, item.value) |
| | | }) |
| | | |
| | | if (_customScript) { |
| | | _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode='',@retmsg ='' |
| | | ${_customScript} |
| | | ` |
| | | } |
| | | |
| | | let _setting = {...setting, customScript: _customScript} |
| | | |
| | | |
| | | let param = { |
| | | func: 's_debug_sql', |
| | | LText: SettingUtils.getDebugSql(_setting, arr_field, regoptions, swhere) |
| | | } |
| | | |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' |
| | |
| | | <Col span={24} className="sqlfield"> |
| | | <Form.Item label={'可用字段'}> |
| | | id, bid, loginuid, sessionuid, userid, appkey, {type === 'main' ? 'out_id, ' : '' }time_id, orderBy{setting.laypage !== 'false' ? ', pageSize, pageIndex': ''}{usefulFields ? ', ' + usefulFields : ''} |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={8} style={{whiteSpace: 'nowrap'}}> |
| | | <Form.Item style={{marginBottom: 0}} label="初始化sql"> |
| | | {getFieldDecorator('initsql', { |
| | | initialValue: 'false' |
| | | })( |
| | | <Radio.Group> |
| | | <Radio value="true">是</Radio> |
| | | <Radio value="false">否</Radio> |
| | | </Radio.Group> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={10}> |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { fromJS } from 'immutable' |
| | | import { Form, Row, Col, Input, Radio, Select, Tooltip, Icon, notification, InputNumber, Modal, Table, Popconfirm, Typography } from 'antd' |
| | | import { Form, Row, Col, Input, Radio, Select, Tooltip, Icon, notification, InputNumber, Modal, Table, Popconfirm, Typography, Button } from 'antd' |
| | | import moment from 'moment' |
| | | |
| | | import Api from '@/api' |
| | | import Utils from '@/utils/utils.js' |
| | | import SettingUtils from './utils.jsx' |
| | | import CustomScript from './customscript' |
| | | import './index.scss' |
| | | |
| | |
| | | |
| | | state = { |
| | | formlist: [], |
| | | btnloading: false, |
| | | search: '', |
| | | arr_field: '', |
| | | regoptions: [], |
| | | setting: null, |
| | | view: 'normal', |
| | | systemScripts: [{ |
| | |
| | | { |
| | | title: 'SQL', |
| | | dataIndex: 'sql', |
| | | width: '60%', |
| | | width: '70%', |
| | | render: (text) => ( |
| | | <Paragraph copyable ellipsis={{ rows: 5, expandable: true }}>{text}</Paragraph> |
| | | ) |
| | | }, |
| | | { |
| | | title: '初始化sql', |
| | | dataIndex: 'initsql', |
| | | width: '12%', |
| | | render: (text, record) => { |
| | | if (record.initsql === 'true') { |
| | | return '是' |
| | | } else { |
| | | return '否' |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | title: '状态', |
| | | dataIndex: 'status', |
| | | width: '8%', |
| | | width: '10%', |
| | | render: (text, record) => record.status === 'false' ? |
| | | ( |
| | | <div> |
| | |
| | | } |
| | | |
| | | UNSAFE_componentWillMount() { |
| | | const { config } = this.props |
| | | |
| | | let _formlist = fromJS(this.props.formlist).toJS() |
| | | let interType = 'inner' |
| | | |
| | |
| | | |
| | | delete _setting.subtabs |
| | | |
| | | // 搜索条件 |
| | | let allSearch = Utils.initMainSearch(config.search) |
| | | allSearch = Utils.getAllSearchOptions(allSearch) |
| | | |
| | | // 显示列字段,用于查询 |
| | | let arr_field = [] |
| | | config.columns.forEach(col => { |
| | | if (col.field) { |
| | | arr_field.push(col.field) |
| | | } |
| | | }) |
| | | arr_field = arr_field.join(',') |
| | | |
| | | // 正则替换 |
| | | let regoptions = allSearch.map(item => { |
| | | return { |
| | | reg: new RegExp('@' + item.key + '@', 'ig'), |
| | | value: `'${item.value}'` |
| | | } |
| | | }) |
| | | |
| | | let _search = this.formatSearch(config.search) |
| | | _search = Utils.joinMainSearchkey(_search) |
| | | |
| | | _search = _search.replace(/@\$@/ig, '') |
| | | _search = _search ? 'where ' + _search : '' |
| | | |
| | | this.setState({ |
| | | setting: _setting, |
| | | search: _search, |
| | | arr_field: arr_field, |
| | | regoptions: regoptions, |
| | | formlist: _formlist.map(item => { |
| | | if (interType === 'inner' && ['sysInterface', 'interface', 'outerFunc'].includes(item.key)) { |
| | | item.hidden = true |
| | |
| | | }) |
| | | reject() |
| | | return |
| | | } else if (values.interType === 'inner') { |
| | | } else if (values.interType === 'inner' && !values.innerFunc && values.default !== 'false' && values.dataresource) { |
| | | let error = Utils.verifySql(values.dataresource) |
| | | |
| | | if (error) { |
| | |
| | | // 数据源保存 |
| | | if ( |
| | | values.interType === 'inner' && !values.innerFunc && |
| | | values.default !== 'false' && |
| | | /[^\s]+\s+[^\s]+/ig.test(values.dataresource) && |
| | | this.props.config.setting.dataresource !== values.dataresource |
| | | ) { |
| | |
| | | resolve() |
| | | }) |
| | | } else { |
| | | if (values.scripts && values.scripts.length > 0) { |
| | | let _customScript = 'declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode=\'\',@retmsg =\'\'' |
| | | values.scripts.forEach(item => { |
| | | if (item.status === 'false' || item.initsql !== 'true') return |
| | | _customScript += ` |
| | | ${item.sql} |
| | | ` |
| | | }) |
| | | values.scripts.forEach(item => { |
| | | if (item.status === 'false' || item.initsql === 'true') return |
| | | _customScript += ` |
| | | ${item.sql} |
| | | ` |
| | | }) |
| | | |
| | | values.customScript = _customScript |
| | | } else { |
| | | values.customScript = '' |
| | | } |
| | | values.customScript = this.getCustomScript(values) |
| | | |
| | | this.sqlverify(values, resolve, reject) |
| | | } |
| | |
| | | }) |
| | | }) |
| | | } else { |
| | | let _loading = false |
| | | let _setting = fromJS(this.state.setting).toJS() |
| | | |
| | | if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql')) { |
| | | _loading = true |
| | | } |
| | | |
| | | if (_setting.scripts && _setting.scripts.length > 0) { |
| | | let _customScript = 'declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode=\'\',@retmsg =\'\'' |
| | | _setting.scripts.forEach(item => { |
| | | if (item.status === 'false' || item.initsql !== 'true') return |
| | | _customScript += ` |
| | | ${item.sql} |
| | | ` |
| | | }) |
| | | _setting.scripts.forEach(item => { |
| | | if (item.status === 'false' || item.initsql === 'true') return |
| | | _customScript += ` |
| | | ${item.sql} |
| | | ` |
| | | }) |
| | | |
| | | _setting.customScript = _customScript |
| | | } else { |
| | | _setting.customScript = '' |
| | | } |
| | | _setting.customScript = this.getCustomScript(_setting) |
| | | |
| | | let _this = this |
| | | |
| | | return new Promise((resolve, reject) => { |
| | | if (_loading) { |
| | | if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql')) { |
| | | confirm({ |
| | | content: `存在未保存项,确定提交吗?`, |
| | | okText: this.props.dict['model.confirm'], |
| | |
| | | } |
| | | } |
| | | |
| | | sqlverify = (_setting, _resolve, _reject) => { |
| | | const { config } = this.props |
| | | |
| | | if (_setting.interType === 'inner' && !_setting.innerFunc && _setting.default !== 'false' && /\s/.test(_setting.dataresource)) { |
| | | let _dataresource = _setting.dataresource |
| | | let _customScript = _setting.customScript |
| | | |
| | | // 搜索条件 |
| | | let allSearch = Utils.initMainSearch(config.search) |
| | | allSearch = Utils.getAllSearchOptions(allSearch) |
| | | |
| | | // 显示列字段,用于查询 |
| | | let arr_field = [] |
| | | config.columns.forEach(col => { |
| | | if (col.field) { |
| | | arr_field.push(col.field) |
| | | } |
| | | }) |
| | | arr_field = arr_field.join(',') |
| | | |
| | | // 正则替换 |
| | | let regoptions = allSearch.map(item => { |
| | | return { |
| | | reg: new RegExp('@' + item.key + '@', 'ig'), |
| | | value: `'${item.value}'` |
| | | } |
| | | }) |
| | | regoptions.push({ |
| | | reg: new RegExp('@orderBy@', 'ig'), |
| | | value: _setting.order |
| | | }) |
| | | if (_setting.laypage !== 'false') { |
| | | regoptions.push({ |
| | | reg: new RegExp('@pageSize@', 'ig'), |
| | | value: 10 |
| | | }, { |
| | | reg: new RegExp('@pageIndex@', 'ig'), |
| | | value: 1 |
| | | }) |
| | | } |
| | | |
| | | // 数据源处理, 存在显示列时 |
| | | if (arr_field) { |
| | | if (/\s/.test(_dataresource)) { |
| | | _dataresource = '(' + _dataresource + ') tb' |
| | | } |
| | | |
| | | _dataresource = `select ${_setting.laypage !== 'false' ? 'top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${_setting.order}) as rows from ${_dataresource}) tmptable ${_setting.laypage !== 'false' ? 'where rows > 0' : ''} order by tmptable.rows` |
| | | } |
| | | |
| | | if (_setting.queryType === 'statistics') { |
| | | regoptions.forEach(item => { |
| | | _dataresource = _dataresource.replace(item.reg, item.value) |
| | | }) |
| | | } |
| | | |
| | | if (_customScript) { |
| | | regoptions.forEach(item => { |
| | | _customScript = _customScript.replace(item.reg, item.value) |
| | | }) |
| | | |
| | | _dataresource = `${_customScript} |
| | | ${_dataresource} |
| | | getCustomScript = (setting) => { |
| | | let _customScript = '' |
| | | if (setting.scripts && setting.scripts.length > 0) { |
| | | setting.scripts.forEach(item => { |
| | | if (item.status === 'false') return |
| | | _customScript += ` |
| | | ${item.sql} |
| | | ` |
| | | } |
| | | }) |
| | | } |
| | | |
| | | _dataresource = _dataresource.replace(/@\$|\$@/ig, '') |
| | | if (_customScript) { |
| | | _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode='',@retmsg ='' |
| | | ${_customScript} |
| | | ` |
| | | } |
| | | |
| | | return _customScript |
| | | } |
| | | |
| | | sqlverify = (_setting, _resolve, _reject, isChange = false) => { |
| | | const { arr_field, regoptions, search } = this.state |
| | | |
| | | if (!isChange && _setting.interType === 'inner' && !_setting.innerFunc && _setting.default === 'false' && !_setting.customScript) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '不执行默认sql时,请添加自定义脚本!', |
| | | duration: 5 |
| | | }) |
| | | _reject() |
| | | return |
| | | } |
| | | |
| | | if (_setting.interType === 'inner' && !_setting.innerFunc && _setting.default !== 'false') { |
| | | let param = { |
| | | func: 's_debug_sql', |
| | | LText: _dataresource |
| | | LText: SettingUtils.getDebugSql(_setting, arr_field, regoptions, search) |
| | | } |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' |
| | |
| | | } |
| | | |
| | | changeView = () => { |
| | | const { view } = this.state |
| | | const { view, arr_field, regoptions, search } = this.state |
| | | let _this = this |
| | | |
| | | if (view === 'normal') { |
| | | this.handleConfirm('change').then(() => { |
| | | const { config } = this.props |
| | | const { setting } = this.state |
| | | |
| | | if (setting.interType !== 'inner' || (setting.interType === 'inner' && setting.innerFunc)) { |
| | |
| | | return |
| | | } |
| | | |
| | | let _search = this.formatSearch(config.search) |
| | | _search = Utils.joinMainSearchkey(_search) |
| | | |
| | | _search = _search.replace(/@\$@/ig, '') |
| | | _search = _search ? 'where ' + _search : '' |
| | | |
| | | let arr_field = [] |
| | | config.columns.forEach(col => { |
| | | if (col.field) { |
| | | arr_field.push(col.field) |
| | | } |
| | | }) |
| | | |
| | | arr_field = arr_field.join(',') |
| | | let _search = search |
| | | |
| | | let _dataresource = setting.dataresource |
| | | |
| | |
| | | } |
| | | |
| | | if (setting.queryType === 'statistics') { // 统计数据源,内容替换 |
| | | let allSearch = Utils.initMainSearch(config.search) |
| | | allSearch = Utils.getAllSearchOptions(allSearch) |
| | | |
| | | let options = allSearch.map(item => { |
| | | return { |
| | | reg: new RegExp('@' + item.key + '@', 'ig'), |
| | | value: item.value |
| | | } |
| | | }) |
| | | |
| | | options.forEach(item => { |
| | | _dataresource = _dataresource.replace(item.reg, `'${item.value}'`) |
| | | regoptions.forEach(item => { |
| | | _dataresource = _dataresource.replace(item.reg, item.value) |
| | | }) |
| | | |
| | | _search = '' |
| | |
| | | let _scripts = fromJS(this.state.systemScripts).toJS() |
| | | _scripts[0].value = LText |
| | | |
| | | this.setState({ |
| | | view: 'custom', |
| | | systemScripts: _scripts |
| | | }) |
| | | |
| | | this.scrolltop() |
| | | if (setting.default === 'false') { |
| | | this.setState({ |
| | | view: 'custom', |
| | | btnloading: false, |
| | | systemScripts: _scripts |
| | | }) |
| | | this.scrolltop() |
| | | } else { |
| | | this.setState({ |
| | | btnloading: true |
| | | }) |
| | | new Promise((resolve, reject) => { |
| | | this.sqlverify(setting, resolve, reject, true) |
| | | }).then(() => { |
| | | this.setState({ |
| | | view: 'custom', |
| | | btnloading: false, |
| | | systemScripts: _scripts |
| | | }) |
| | | this.scrolltop() |
| | | }, () => { |
| | | this.setState({ |
| | | btnloading: false |
| | | }) |
| | | }) |
| | | } |
| | | }) |
| | | } else { |
| | | let _loading = false |
| | |
| | | |
| | | render() { |
| | | const { config, type } = this.props |
| | | const { formlist, view, setting, scriptsColumns, systemScripts } = this.state |
| | | const { formlist, view, setting, scriptsColumns, systemScripts, arr_field, regoptions, search, btnloading } = this.state |
| | | const formItemLayout = { |
| | | labelCol: { |
| | | xs: { span: 24 }, |
| | |
| | | <CustomScript |
| | | type={type} |
| | | setting={setting} |
| | | swhere={search} |
| | | arr_field={arr_field} |
| | | regoptions={regoptions} |
| | | dict={this.props.dict} |
| | | customScripts={setting.scripts} |
| | | searches={config.search} |
| | | systemScripts={systemScripts} |
| | | scriptsChange={this.scriptsChange} |
| | |
| | | <Form {...formItemLayout} className="model-table-setting-form" id="model-table-setting-form"> |
| | | {view !=='custom' ? <Row gutter={24}>{this.getFields(formlist)}</Row> : null} |
| | | <Row gutter={24}> |
| | | {view !=='custom' ? <span onClick={this.changeView} style={{float: 'right', color: '#1890ff', marginRight: 12, marginTop: 15, cursor: 'pointer'}}>自定义设置<Icon style={{marginLeft: 5}} type="right" /></span> : null} |
| | | {view !=='custom' ? <Button onClick={this.changeView} className="to-custom-script" loading={btnloading}>自定义设置<Icon style={{marginLeft: 5}} type="right" /></Button> : null} |
| | | {view ==='custom' ? <span onClick={this.changeView} style={{float: 'left', color: '#1890ff', marginLeft: 12, marginTop: 15, cursor: 'pointer'}}><Icon style={{marginRight: 5}} type="left" />基础设置</span> : null} |
| | | </Row> |
| | | </Form> |
| | |
| | | padding: 10px; |
| | | color: rgb(24, 144, 255); |
| | | } |
| | | .to-custom-script { |
| | | float: right; |
| | | color: #1890ff; |
| | | margin-right: 12px; |
| | | margin-top: 15px; |
| | | cursor: pointer; |
| | | border: 0; |
| | | box-shadow: unset; |
| | | } |
| | | } |
New file |
| | |
| | | |
| | | export default class SettingUtils { |
| | | /** |
| | | * @description 生成页面查询语句 |
| | | * @return {String} arr_field 显示列字段 |
| | | * @return {String} search 搜索条件 |
| | | * @return {Object} setting 页面设置 |
| | | * @return {Array} regoptions 搜索条件正则替换 |
| | | */ |
| | | static getDebugSql (setting, arr_field, regoptions, search) { |
| | | let sql = '' |
| | | let _dataresource = setting.dataresource |
| | | let _customScript = setting.customScript |
| | | |
| | | if (setting.interType === 'inner' && !setting.innerFunc && setting.default === 'false') { |
| | | _dataresource = '' |
| | | } |
| | | |
| | | if (_dataresource) { |
| | | _dataresource = _dataresource.replace(/@\$|\$@/ig, '') |
| | | } |
| | | if (_customScript) { |
| | | _customScript = _customScript.replace(/@\$|\$@/ig, '') |
| | | } |
| | | |
| | | // 正则替换 |
| | | let _regoptions = JSON.parse(JSON.stringify(regoptions)) |
| | | let _search = search |
| | | |
| | | if (setting.queryType === 'statistics' && _dataresource) { |
| | | _regoptions.forEach(item => { |
| | | _dataresource = _dataresource.replace(item.reg, item.value) |
| | | }) |
| | | |
| | | _search = '' |
| | | } |
| | | |
| | | if (_customScript) { |
| | | _regoptions.push({ |
| | | reg: new RegExp('@orderBy@', 'ig'), |
| | | value: setting.order |
| | | }) |
| | | if (setting.laypage !== 'false') { |
| | | _regoptions.push({ |
| | | reg: new RegExp('@pageSize@', 'ig'), |
| | | value: 10 |
| | | }, { |
| | | reg: new RegExp('@pageIndex@', 'ig'), |
| | | value: 1 |
| | | }) |
| | | } |
| | | _regoptions.forEach(item => { |
| | | _customScript = _customScript.replace(item.reg, item.value) |
| | | }) |
| | | } |
| | | |
| | | // 数据源处理, 存在显示列时 |
| | | if (arr_field && _dataresource) { |
| | | if (/\s/.test(_dataresource)) { |
| | | _dataresource = '(' + _dataresource + ') tb' |
| | | } |
| | | |
| | | _dataresource = `select ${setting.laypage !== 'false' ? 'top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage !== 'false' ? 'where rows > 0' : ''} order by tmptable.rows` |
| | | } |
| | | |
| | | if (_customScript) { |
| | | sql = `${_customScript} |
| | | ${_dataresource} |
| | | aaa: |
| | | if @ErrorCode!='' |
| | | insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ |
| | | ` |
| | | } else { |
| | | sql = _dataresource |
| | | } |
| | | |
| | | return sql |
| | | } |
| | | } |