import md5 from 'md5' import moment from 'moment' import options from '@/store/options.js' import Utils from './utils.js' export default class DataUtils { /** * @description 数据源名称,用于统一查询 * @param {Object} setting 数据源设置 * @param {String} arrFields 查询字段 * @param {Array} search 搜索条件 * @param {String} orderBy 排序方式 * @param {Number} pageIndex 页码 * @param {Number} pageSize 每页数量 * @param {String} BID 上级ID * @return {Object} param */ static getQueryDataParams (setting, arrFields, search = [], orderBy = '', pageIndex = 1, pageSize = 10, BID, id) { let param = null if (setting.interType === 'system' || (setting.interType === 'custom' && setting.requestMode === 'system')) { param = this.getDefaultQueryParam(setting, arrFields, search, orderBy, pageIndex, pageSize, id, BID) } else { param = this.getCustomQueryParam(setting, search, orderBy, pageIndex, pageSize, id) } if (BID) { param.BID = BID } // 数据管理权限 if (sessionStorage.getItem('dataM') === 'true') { param.dataM = 'Y' } return param } /** * @description 获取用户自定义存储过程传参 */ static getCustomQueryParam (setting, search, orderBy, pageIndex, pageSize, id) { let param = Utils.formatCustomMainSearch(search) if (orderBy) { param.OrderCol = orderBy } if (id) { param.ID = id } else if (setting.laypage) { param.PageIndex = pageIndex param.PageSize = pageSize } if (setting.interType === 'inner' || (setting.interType === 'custom' && setting.requestMode === 'inner')) { param.func = setting.innerFunc } else { if (window.GLOB.mkHS) { if (setting.sysInterface === 'true' && options.cloudServiceApi) { param.rduri = options.cloudServiceApi param.userid = sessionStorage.getItem('CloudUserID') || '' param.LoginUID = sessionStorage.getItem('CloudLoginUID') || '' } else if (setting.sysInterface !== 'true') { param.rduri = setting.interface } } else { if (setting.sysInterface === 'true' && window.GLOB.mainSystemApi) { param.rduri = window.GLOB.mainSystemApi } else if (setting.sysInterface !== 'true') { if (window.GLOB.systemType === 'production' && setting.proInterface) { param.rduri = setting.proInterface } else { param.rduri = setting.interface } let host = window.GLOB.baseurl.replace(/http(s):\/\//, '') if (param.rduri.indexOf(host) === -1 && /\/dostars/.test(param.rduri)) { param.$login = true } } } if (setting.outerFunc) { param.func = setting.outerFunc } } return param } /** * @description 获取系统存储过程的参数 */ static getDefaultQueryParam (setting, arrFields, search, orderBy, pageIndex, pageSize, id, BID) { let param = { func: 'sPC_Get_TableData', obj_name: 'data', exec_type: 'y', arr_field: arrFields, default_sql: setting.execute ? 'true' : 'false' } // if (setting.transaction === 'true') { // param.func = 'sPC_Get_TableData_try' // } 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') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } let _dataresource = setting.dataresource let _customScript = '' if (setting.customScript) { _customScript = `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='${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}' ${setting.customScript} ` } _dataresource = _dataresource.replace(/@select\$|\$select@/ig, '') _customScript = _customScript.replace(/@select\$|\$select@/ig, '') _dataresource = _dataresource.replace(/\$sum@/ig, '/*') _dataresource = _dataresource.replace(/@sum\$/ig, '*/') _customScript = _customScript.replace(/\$sum@/ig, '/*') _customScript = _customScript.replace(/@sum\$/ig, '*/') _dataresource = _dataresource.replace(/@ID@/ig, `''`) _customScript = _customScript.replace(/@ID@/ig, `''`) _dataresource = _dataresource.replace(/@BID@/ig, `'${BID || ''}'`) _customScript = _customScript.replace(/@BID@/ig, `'${BID || ''}'`) _dataresource = _dataresource.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`) _customScript = _customScript.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`) _dataresource = _dataresource.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) _customScript = _customScript.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) _dataresource = _dataresource.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) _customScript = _customScript.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) _dataresource = _dataresource.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) _customScript = _customScript.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) let regoptions = null if (setting.queryType === 'statistics' || _customScript) { let allSearch = Utils.getAllSearchOptions(search) regoptions = allSearch.map(item => { return { reg: new RegExp('@' + item.key + '@', 'ig'), value: `'${item.value}'` } }) regoptions.push({ reg: new RegExp('@orderBy@', 'ig'), value: orderBy }, { reg: new RegExp('@pageSize@', 'ig'), value: setting.laypage ? pageSize : '9999' }, { reg: new RegExp('@pageIndex@', 'ig'), value: pageIndex }) } let _search = '' if (_dataresource) { if (setting.queryType === 'statistics') { // 统计数据源,内容替换 regoptions.forEach(item => { _dataresource = _dataresource.replace(item.reg, item.value) }) if (id) { _dataresource = _dataresource + ` where ${setting.primaryKey || 'ID'}='${id}'` } } else if (!id) { _search = Utils.joinMainSearchkey(search) if (_search) { _search = 'where ' + _search } } else if (id) { _search = Utils.joinMainSearchkey(search) _search = `where ${_search ? _search + ' AND ' : ''} ${setting.primaryKey || 'ID'}='${id}'` } } if (_customScript) { regoptions.forEach(item => { _customScript = _customScript.replace(item.reg, item.value) }) if (window.GLOB.breakpoint) { _customScript = _customScript.replace(/\$breakpoint_proc@/ig, window.GLOB.breakpoint) param.func = 'sPC_Get_TableData_debug' } } let LText = '' let DateCount = '' if (_dataresource && setting.laypage && orderBy && !id) { LText = ` select top ${pageSize} ${arrFields} from (select ${arrFields} ,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 (_dataresource && orderBy) { LText = ` select ${arrFields} from (select ${arrFields} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows ` } else if (_dataresource) { LText = ` select ${arrFields} from ${_dataresource} ${_search} ` } if (_customScript) { if (LText) { LText = `${LText} aaa: if @ErrorCode!='' insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ ` } else { _customScript = `${_customScript} aaa: if @ErrorCode!='' insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ ` } } else { LText = `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='${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}' ${LText} ` } // 测试系统打印查询语句 if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { _customScript && console.info(`${setting.$name ? `/*${setting.$name} 自定义脚本*/\n` : ''}${LText ? '' : '/*不执行默认sql*/\n'}${_customScript}`) LText && console.info(`${setting.$name ? `/*${setting.$name} 数据源*/\n` : ''}` + LText.replace(/\n\s{8}/ig, '\n')) } if (setting.$name) { param.menuname = setting.$name } param.custom_script = Utils.formatOptions(_customScript) param.LText = Utils.formatOptions(LText) param.DateCount = Utils.formatOptions(DateCount) // 多层结构数据 // LText = `SELECT a.id as bid,a.ID,a.workerCode,a.workerName,a.jobName,a.Initials,case when isnull(m.friend_id ,'') ='' then '' // when isnull(m.status,0)=10 then '已添加' else '待通过' end as friend_text // ,case when images='' then 'http://epc.mk9h.cn/Content/images/upload/img/kane.jpg' else images end as icon FROM // (select friend_id,status from oa_mail_list where userid='sso202004100959326131C0805998B6745F886F9' and Initials=case when right('0',1)='0' then Initials else '0' end // and status=10 and deleted=0) m // inner join (select * from BD_workers where // Initials=case when right('0',1)='0' then Initials else '0' end and deleted=0 ) a // on a.id=m.friend_id ` // param.custom_script = '' // param.LText = Utils.formatOptions(LText) // param.DateCount = '' // param.prm_field = 'workerCode' // param.arr_field = 'workerName,jobName' // param.tabid = 'ID' // param.parid = 'BID' // param.sub_name = 'sub_data' // param.sub_field = 'BID,friend_text,icon,Initials' // exec_type: 'y' 解码字段:LText、LText1、LText2、custom_script、DateCount param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt('', param.timestamp) if (window.GLOB.mkHS) { // 云端数据验证 param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) // special HS自定义函数查询 if (setting.tableName === 's_custom_script' && options.cloudServiceApi) { param.rduri = options.cloudServiceApi param.userid = sessionStorage.getItem('CloudUserID') || '' param.LoginUID = sessionStorage.getItem('CloudLoginUID') || '' } } return param } /** * @description 获取系统存储过程合计值的参数 */ static getStatQueryDataParams (setting, statFields, search, orderBy, BID) { let param = { func: 'sPC_Get_TableData', obj_name: 'data', exec_type: 'y', arr_field: statFields.map(col => col.field).join(','), default_sql: setting.execute ? 'true' : 'false' } // if (setting.transaction === 'true') { // param.func = 'sPC_Get_TableData_try' // } let _dataresource = setting.dataresource let _customScript = '' 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') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } if (setting.customScript) { _customScript = `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='${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}' ${setting.customScript} ` } _dataresource = _dataresource.replace(/@sum\$|\$sum@/ig, '') _customScript = _customScript.replace(/@sum\$|\$sum@/ig, '') _dataresource = _dataresource.replace(/\$select@/ig, '/*') _dataresource = _dataresource.replace(/@select\$/ig, '*/') _customScript = _customScript.replace(/\$select@/ig, '/*') _customScript = _customScript.replace(/@select\$/ig, '*/') _dataresource = _dataresource.replace(/@ID@/ig, `''`) _customScript = _customScript.replace(/@ID@/ig, `''`) _dataresource = _dataresource.replace(/@BID@/ig, `'${BID || ''}'`) _customScript = _customScript.replace(/@BID@/ig, `'${BID || ''}'`) _dataresource = _dataresource.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`) _customScript = _customScript.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`) _dataresource = _dataresource.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) _customScript = _customScript.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) _dataresource = _dataresource.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) _customScript = _customScript.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) _dataresource = _dataresource.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) _customScript = _customScript.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) let regoptions = null if (setting.queryType === 'statistics' || _customScript) { let allSearch = Utils.getAllSearchOptions(search) regoptions = allSearch.map(item => { return { reg: new RegExp('@' + item.key + '@', 'ig'), value: `'${item.value}'` } }) regoptions.push({ reg: new RegExp('@orderBy@', 'ig'), value: orderBy }, { reg: new RegExp('@pageSize@', 'ig'), value: 999999 }, { reg: new RegExp('@pageIndex@', 'ig'), value: 1 }) } let _search = Utils.joinMainSearchkey(search) if (_search) { _search = 'where ' + _search } if (setting.queryType === 'statistics') { // 统计数据源,内容替换 regoptions.forEach(item => { _dataresource = _dataresource.replace(item.reg, item.value) }) _search = '' } if (_customScript) { regoptions.forEach(item => { _customScript = _customScript.replace(item.reg, item.value) }) } let LText = ` select ${statFields.map(col => `isnull(sum(${col.field}),0) as ${col.field}`).join(',')} from ${_dataresource} ${_search} ` if (_customScript) { LText = `${LText} aaa: if @ErrorCode!='' insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ ` } else { LText = `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='${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}' ${LText} ` } // 测试系统打印查询语句 if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { _customScript && console.info(`${setting.$name ? `/*${setting.$name} 自定义脚本 统计查询*/\n` : ''}${LText ? '' : '/*不执行默认sql*/\n'}${_customScript}`) LText && console.info(`${setting.$name ? `/*${setting.$name} 数据源 统计查询*/\n` : ''}` + LText.replace(/\n\s{8}/ig, '\n')) } if (setting.$name) { param.menuname = setting.$name } param.custom_script = Utils.formatOptions(_customScript) param.LText = Utils.formatOptions(LText) param.DateCount = '' param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt('', param.timestamp) if (window.GLOB.mkHS) { // 云端数据验证 param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) } if (BID) { param.BID = BID } // 数据管理权限 if (sessionStorage.getItem('dataM') === 'true') { param.dataM = 'Y' } return param } /** * @description 数据源名称,用于统一查询 * @param {Object} setting 数据源设置 * @param {String} arrFields 查询字段 * @param {Array} search 搜索条件 * @param {String} orderBy 排序方式 * @param {Number} pageIndex 页码 * @param {Number} pageSize 每页数量 * @param {String} BID 上级ID * @return {Object} param */ static getPrevQueryParams (setting, search = [], BID) { let param = null if (setting.procMode !== 'inner') { param = this.getDefaultPrevQueryParam(setting, search, BID) } else { param = Utils.formatCustomMainSearch(search) param.func = setting.prevFunc || '' } if (BID) { param.BID = BID } return param } /** * @description 获取系统前置脚本 */ static getDefaultPrevQueryParam (setting, search, BID) { let param = { func: 'sPC_TableData_InUpDe', exec_type: 'y', script_type: 'Y' } let sql = '' 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') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } setting.preScripts.forEach(item => { if (item.status === 'false') return sql += `${item.sql} ` }) if (sql) { 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='${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}' ${sql} aaa: if @ErrorCode!='' insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ ` let allSearch = Utils.getAllSearchOptions(search) allSearch.forEach(item => { sql = sql.replace(new RegExp('@' + item.key + '@', 'ig'), `'${item.value}'`) }) if (sessionStorage.getItem('dataM') === 'true') { // 数据权限 sql = sql.replace(/\$@/ig, '/*') sql = sql.replace(/@\$/ig, '*/') } else { sql = sql.replace(/@\$|\$@/ig, '') } sql = sql.replace(/@userName@/ig, `'${userName}'`) sql = sql.replace(/@fullName@/ig, `'${fullName}'`) sql = sql.replace(/@ID@/ig, `''`) sql = sql.replace(/@BID@/ig, `'${BID || ''}'`) sql = sql.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`) sql = sql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) sql = sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) sql = sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) // 测试系统打印查询语句 if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { console.info(sql.replace(/\n\s{8}/ig, '\n')) } } param.LText = Utils.formatOptions(sql) param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt('', param.timestamp) if (window.GLOB.mkHS) { // 函数 sPC_TableData_InUpDe 云端验证 param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) } if (setting.$name) { param.menuname = setting.$name } return param } /** * @description 获取系统回调脚本 */ static getCallBackQueryParams (setting, sql, errSql, BID) { let param = { func: 'sPC_TableData_InUpDe', exec_type: 'y', } 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') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } let _prevCustomScript = `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='${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}' ${errSql} ` let _backCustomScript = ` ` setting.cbScripts.forEach(script => { if (script.status === 'false') return if (script.position === 'front') { _prevCustomScript += ` /* 自定义脚本 */ ${script.sql} ` } else { _backCustomScript += ` /* 自定义脚本 */ ${script.sql} ` } }) _backCustomScript += ` aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` sql = _prevCustomScript + sql sql = sql + _backCustomScript if (sessionStorage.getItem('dataM') === 'true') { // 数据权限 sql = sql.replace(/\$@/ig, '/*') sql = sql.replace(/@\$/ig, '*/') } else { sql = sql.replace(/@\$|\$@/ig, '') } sql = sql.replace(/@ID@/ig, `''`) sql = sql.replace(/@BID@/ig, `'${BID || ''}'`) sql = sql.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`) sql = sql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) sql = sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) sql = sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { console.info(sql.replace(/\n\s{8}/ig, '\n')) } param.LText = sql param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt('', param.timestamp) param.LText = Utils.formatOptions(param.LText) if (setting.$name) { param.menuname = setting.$name } if (BID) { param.BID = BID } if (window.GLOB.mkHS) { // 系统函数云端验证 param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) } return param } /** * @description 获取回调sql */ static getCallBackSql (setting, result) { let lines = [] let pre = setting.callbackType === 'script' ? '@' : '' let getDefaultSql = (obj, tb, bid, level) => { let keys = [] let vals = [] let subObjs = [] let id = Utils.getuuid() delete obj.$$key Object.keys(obj).forEach(key => { let val = obj[key] if (val === null || val === undefined) return if (typeof(val) === 'object') { if (Array.isArray(val)) { val.forEach(item => { if (typeof(item) !== 'object' || Array.isArray(item)) return if (Object.keys(item).length > 0) { item.$$key = tb + '_' + key subObjs.push(item) } }) } else if (Object.keys(val).length > 0) { val.$$key = tb + '_' + key subObjs.push(val) } } else { if (typeof(val) === 'string') { val = val.replace(/'/ig, '"') } keys.push(key) vals.push(`'${val}'`) } }) lines.push({ table: tb, insert: `Insert into ${pre}${tb} (${keys.join(',')},mk_level,mk_id,mk_bid)`, select: `Select ${vals.join(',')},'${level}','${id}','${bid}'` }) subObjs.forEach(item => { getDefaultSql(item, item.$$key, id, level + 1) }) } getDefaultSql(result, setting.cbTable, '', 1) let lineMap = new Map() lines.forEach(line => { if (lineMap.has(line.table)) { let _line = lineMap.get(line.table) _line.selects.push(line.select) lineMap.set(line.table, _line) } else { lineMap.set(line.table, { table: line.table, insert: line.insert, selects: [line.select] }) } }) return [...lineMap.values()] } } /** * @description 生成单个组件sPC_Get_structured_data请求参数 */ export function getStructDefaultParam (component, searchlist, first) { const { columns, setting, dataName, format } = component let arr_field = columns.map(col => col.field) let _dataresource = setting.dataresource let _customScript = setting.customScript if (setting.queryType === 'statistics' || _customScript) { let allSearch = Utils.getAllSearchOptions(searchlist) let regoptions = allSearch.map(item => { return { reg: new RegExp('@' + item.key + '@', 'ig'), value: `'${item.value}'` } }) regoptions.forEach(item => { if (_dataresource && setting.queryType === 'statistics') { _dataresource = _dataresource.replace(item.reg, item.value) } _customScript = _customScript.replace(item.reg, item.value) }) } _dataresource = _dataresource.replace(/@select\$|\$select@/ig, '') _customScript = _customScript.replace(/@select\$|\$select@/ig, '') _dataresource = _dataresource.replace(/\$sum@/ig, '/*') _dataresource = _dataresource.replace(/@sum\$/ig, '*/') _customScript = _customScript.replace(/\$sum@/ig, '/*') _customScript = _customScript.replace(/@sum\$/ig, '*/') let _search = '' if (setting.queryType !== 'statistics' && _dataresource) { _search = Utils.joinMainSearchkey(searchlist) _search = _search ? 'where ' + _search : '' } if (setting.order && _dataresource) { _dataresource = `select top 1000 ${arr_field.join(',')} from (select ${arr_field.join(',')} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows ` } else if (_dataresource) { _dataresource = `select top 1000 ${arr_field.join(',')} from ${_dataresource} ${_search} ` } if (first) { 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') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } _customScript = `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='${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}' ${_customScript} ` } return { name: dataName, $name: setting.$name, columns: columns, par_tablename: '', type: format === 'array' ? format : '', primaryKey: setting.primaryKey || '', foreign_key: '', sql: _dataresource, script: _customScript, // transaction: setting.transaction === 'true' } } /** * @description 生成sPC_Get_structured_data请求参数 * 1、把大接口sPC_Get_structured_data的ltext拆成三份,第一段:@LText1,第二段@LText,第三段@LText2 */ export function getStructuredParams (params, config, BID) { let LText_field = [] let diffUser = false // let transaction = false let loginId = `'${sessionStorage.getItem('LoginUID') || ''}'` let sessionId = `'${localStorage.getItem('SessionUid') || ''}'` let userId = `'${sessionStorage.getItem('UserID') || ''}'` let _LText = params.map((item, index) => { let _script = item.script let _sql = item.sql if (!diffUser && (/@userid@/ig.test(item.sql) || /@userid@/ig.test(_script))) { diffUser = true } // if (item.transaction) { // transaction = true // } _sql = _sql.replace(/@ID@/ig, `''`) _script = _script.replace(/@ID@/ig, `''`) _sql = _sql.replace(/@BID@/ig, `'${BID || ''}'`) _script = _script.replace(/@BID@/ig, `'${BID || ''}'`) _sql = _sql.replace(/@LoginUID@/ig, loginId) _script = _script.replace(/@LoginUID@/ig, loginId) _sql = _sql.replace(/@SessionUid@/ig, sessionId) _script = _script.replace(/@SessionUid@/ig, sessionId) _sql = _sql.replace(/@UserID@/ig, userId) _script = _script.replace(/@UserID@/ig, userId) _sql = _sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) _script = _script.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) // 测试系统打印查询语句 if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { _script && console.info(`${item.$name ? `/*${item.$name} 自定义脚本(同步查询)*/\n` : ''}${_sql ? '' : '/*不执行默认sql*/\n'}${_script}`) _sql && console.info(`${item.$name ? `/*${item.$name} 数据源(同步查询)*/\n` : ''}` + _sql) } item.columns.forEach(cell => { LText_field.push(`Select '${item.name}' as tablename,'${cell.field}' as fieldname,'${cell.datatype}' as field_type`) }) return `Select '${item.name}' as tablename,'${window.btoa(window.encodeURIComponent(_sql))}' as LText,'${window.btoa(window.encodeURIComponent(_script))}' as Lcustomize,'${item.type}' as table_type,'${item.primaryKey}' as primary_key,'${item.par_tablename}' as par_tablename,'${item.foreign_key}' as foreign_key,'${index}' as Sort` }) let param = { func: 'sPC_Get_structured_data', LText: _LText.join(' union all '), LText_field: LText_field.join(' union all '), BID: BID } // if (transaction) { // param.func = 'sPC_Get_structured_data_try' // } let { LText, LText1, LText2 } = Utils.sPCInUpDeFormatOptions(param.LText) param.LText1 = LText1 param.LText = LText param.LText2 = LText2 param.LText_field = Utils.formatOptions(param.LText_field) if (config.cacheUseful === 'true') { param.time_type = config.timeUnit param.time_limit = config.cacheTime if (diffUser) { param.userid = sessionStorage.getItem('UserID') } param.data_md5 = md5(JSON.stringify(param)) } param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt(param.LText, param.timestamp) return param }