king
2020-03-10 c39ea1f23d21b070188abcf5f4dd5bdd7b47c1f9
src/utils/utils.js
@@ -1,5 +1,6 @@
import moment from 'moment'
import md5 from 'md5'
import options from '@/store/options.js'
const service = window.GLOB.service ? (/\/$/.test(window.GLOB.service) ? window.GLOB.service : window.GLOB.service + '/') : ''
@@ -391,6 +392,7 @@
   */
  static getrealurl (url) {
    if (!url) return ''
    let baseurl = ''
    if (process.env.NODE_ENV === 'production') {
      baseurl = document.location.origin + '/' + service
@@ -402,6 +404,24 @@
    // }
    let realurl = url.match(/^http/) || url.match(/^\/\//) ? url : baseurl + url
    return realurl
  }
  /**
   * @description 获取云端图片真实路径
   * @return {String}    url 图片路径
   */
  static getcloudurl (url) {
    if (!url) return ''
    let baseurl = ''
    if (options.cloudServiceApi) {
      baseurl = options.cloudServiceApi.replace(/webapi(.*)$/, '')
    } else {
      baseurl = document.location.origin + '/' + service
    }
    return url.match(/^http/) || url.match(/^\/\//) ? url : baseurl + url
  }
  /**
@@ -451,6 +471,7 @@
    let errors = []
    let _topline = btn.range || 0
    let upId = this.getuuid()
    let _Ltext = data.map((item, lindex) => {
      let vals = btn.columns.map((col, cindex) => {
        let val = item[col.Column] !== undefined ? item[col.Column] : ''
@@ -463,12 +484,10 @@
          val = val.replace(/(^\s*$)|\t*|\v*/ig, '')
          let limitlen = col.type.match(/\d+/)[0]
          if (!val && col.required === 'true') { // 必填校验
            let _error =  _position + dict['main.excel.content.emptyerror']
            errors.push(_error)
          } else if (val.length > limitlen) {    // 长度校验
          } else if (val.length > col.limit) {    // 长度校验
            let _error =  _position + dict['main.excel.content.maxlimit']
            errors.push(_error)
          } else {                               // 关键字校验
@@ -481,45 +500,57 @@
            })
          }
        } else if (/^int/ig.test(col.type)) {
          if (typeof(val) !== 'number' || parseInt(val) < parseFloat(val)) { // 检验是否为整数
            let _error = _position + dict['main.excel.content.interror']
          if (!val) {
            let _error =  _position + dict['main.excel.content.emptyerror']
            errors.push(_error)
          } else if ((col.min || col.min === 0) && val < col.min) {          // 最小值检验
            let _error = _position + dict['main.excel.content.limitmin']
            errors.push(_error)
          } else if ((col.max || col.max === 0) && val > col.max) {          // 最大值检验
            let _error = _position + dict['main.excel.content.limitmax']
            errors.push(_error)
          } else {
            let _val = val + ''
            if (!/^(([^0][0-9]+|0)$)|^(([1-9]+)$)/.test(_val)) {               // 检验是否为整数
              let _error = _position + dict['main.excel.content.interror']
              errors.push(_error)
            } else if ((col.min || col.min === 0) && val < col.min) {          // 最小值检验
              let _error = _position + dict['main.excel.content.limitmin']
              errors.push(_error)
            } else if ((col.max || col.max === 0) && val > col.max) {          // 最大值检验
              let _error = _position + dict['main.excel.content.limitmax']
              errors.push(_error)
            }
          }
        } else if (/^Decimal/ig.test(col.type)) {
          let _val = val + ''
          _val = _val.split('.')
          let limitlen = col.type.match(/\d+/ig)[1]
          if (!val) {
            let _error =  _position + dict['main.excel.content.emptyerror']
            errors.push(_error)
          } else {
            let _val = val + ''
            let _vals = _val.split('.')
          if (typeof(val) !== 'number') {                           // 检验是否为浮点数
            let _error = _position + dict['main.excel.content.floaterror']
            errors.push(_error)
          } else if (_val[0].length > 18) {                         // 检验整数位
            let _error = _position + dict['main.excel.content.floatIntover']
            errors.push(_error)
          } else if (_val[1] && _val[1].length > limitlen) {        // 最小值检验
            let _error = _position + dict['main.excel.content.floatPointover']
            errors.push(_error)
          } else if ((col.min || col.min === 0) && val < col.min) { // 最小值检验
            let _error = _position + dict['main.excel.content.limitmin']
            errors.push(_error)
          } else if ((col.max || col.max === 0) && val > col.max) { // 最大值检验
            let _error = _position + dict['main.excel.content.limitmax']
            errors.push(_error)
            if (!/^(([^0][0-9]+|0)\.([0-9]+)$)|^(([^0][0-9]+|0)$)|^(([1-9]+)\.([0-9]+)$)|^(([1-9]+)$)/.test(_val)) {                           // 检验是否为浮点数
              let _error = _position + dict['main.excel.content.floaterror']
              errors.push(_error)
            } else if (_vals[0].length > 18) {                         // 检验整数位
              let _error = _position + dict['main.excel.content.floatIntover']
              errors.push(_error)
            } else if (_vals[1] && _vals[1].length > col.limit) {       // 最小值检验
              let _error = _position + dict['main.excel.content.floatPointover']
              errors.push(_error)
            } else if ((col.min || col.min === 0) && val < col.min) { // 最小值检验
              let _error = _position + dict['main.excel.content.limitmin']
              errors.push(_error)
            } else if ((col.max || col.max === 0) && val > col.max) { // 最大值检验
              let _error = _position + dict['main.excel.content.limitmax']
              errors.push(_error)
            }
          }
        }
        
        return `'${val}' as ${col.Column}`
      })
      if (!item.innerFunc) {
        vals.push(`@upid+'${this.getuuid()}' as jskey`)
      }
      let _lineIndex = '0000' + (lindex + 1) + '0'
      _lineIndex = _lineIndex.substring(_lineIndex.length - 6)
      vals.push(`'${upId + _lineIndex}' as jskey`)
      return `Select ${vals.join(',')}`
    })
@@ -528,10 +559,9 @@
    let _sql = ''
    if (!item.innerFunc) {
    if (item.intertype === 'inner' && !item.innerFunc) {
      let declarefields = []
      let fields = []
      let timestamp = new Date().getTime()
      btn.columns.forEach(col => {
        declarefields.push(`${col.Column} ${col.type}`)
@@ -540,19 +570,38 @@
      fields = fields.join(',')
      _sql = `declare @${btn.sheet} table (${declarefields.join(',')},jskey nvarchar(50) )
      Declare @UserName nvarchar(50),@FullName nvarchar(50) ,@upid nvarchar(50)
      let _insert = ''
      if (btn.default !== 'false') {
        _insert = `
        Insert into ${item.sheet} (${fields},createuserid,createuser,createstaff,bid)
        Select ${fields},@userid@,@username,@fullname,@BID@ From @${item.sheet}
        `
      }
      if (btn.scripts && btn.scripts.length > 0) {
        btn.scripts.forEach(script => {
          if (script.status === 'false') return
          _insert += `
          ${script.sql}
          `
        })
      }
      _sql = `declare @${item.sheet} table (${declarefields.join(',')},jskey nvarchar(50) )
      Declare @UserName nvarchar(50),@FullName nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000)
      Select  @ErrorCode='', @retmsg=''
      select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID@
      
      set @upid='${timestamp}'
      Insert into  @${btn.sheet} (${fields},jskey)
      Insert into  @${item.sheet} (${fields},jskey)
      ${_Ltext}
      ${_insert}
      Delete @${item.sheet}
      Insert into ${btn.sheet} (${fields},createuserid,createuser,createstaff,bid,upid)
      Select ${fields},@userid@,@username,@fullname,@BID@,@upid From @${btn.sheet}
      Delete @${btn.sheet}`
      aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
    } else {
      _sql = _Ltext
@@ -578,13 +627,13 @@
    // 需要声明的变量集
    // let _vars = ['tbid', 'ErrorCode', 'retmsg', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'UserName', 'FullName', 'ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey']
    // let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'id', 'bid', 'loginuid', 'sessionuid', 'userid', 'appkey']
    let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname']
    let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode']
    // 主键字段
    let primaryKey = setting.primaryKey || 'id'
    // 系统变量声明与设置初始值
    let _sql = `Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50)
    let _sql = `Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@ModularDetailCode nvarchar(50)
      `
    // let _initvars = ['ID', 'BID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey'] // 已赋值字段集
@@ -799,16 +848,24 @@
    if (verify.billcodes && verify.billcodes.length > 0) {
      verify.billcodes.forEach(item => {
        let _ModularDetailCode = ''
        if (item.TypeCharOne === 'Lp' || item.TypeCharOne === 'BN') {
        let _lpline = ''
        if (item.TypeCharOne === 'Lp') {
          if (item.linkField === 'BID' && BID) { // 替换bid
            _lpline = `set @ModularDetailCode= 'Lp'+ right('${btn.uuid}'+@BID@,48)`
          } else {
            _lpline = `set @ModularDetailCode= 'Lp'+ right('${btn.uuid}'+@${item.linkField},48)`
          }
          _ModularDetailCode = '@ModularDetailCode'
        } else if (item.TypeCharOne === 'BN') {
          let _val = ''
          if (item.linkField === 'BID' && BID) { // 替换bid
            _val = BID
          } else if (data && data.hasOwnProperty(item.linkField)) {
            _val = data[item.linkField]
          }
          _ModularDetailCode = item.TypeCharOne + _val
          _ModularDetailCode = `'${item.TypeCharOne + _val}'`
        } else {
          _ModularDetailCode = item.ModularDetailCode
          _ModularDetailCode = `'${item.ModularDetailCode}'`
        }
        let _declare = ''
@@ -820,9 +877,10 @@
        }
        _sql += `${_declare}
          select @BillCode='', @${_key}=''
          select @BillCode='', @${_key}='', @ModularDetailCode=''
          ${_lpline}
          exec s_get_BillCode
            @ModularDetailCode='${_ModularDetailCode}',
            @ModularDetailCode=${_ModularDetailCode},
            @Type=${item.Type},
            @TypeCharOne='${item.TypeCharOne}',
            @TypeCharTwo ='${item.TypeCharTwo}',
@@ -866,8 +924,14 @@
    let primaryKeyName = ['id', 'bid', 'loginuid', 'sessionuid', 'userid', 'appkey'].includes(primaryKey.toLowerCase()) ? primaryKey + '@' : primaryKey
    let _actionType = null
    if (verify.default !== 'false') { // 判断是否使用默认sql
      _actionType = btn.sqlType
    }
    // 添加、修改、逻辑删除、物理删除
    if (btn.OpenType === 'pop' && btn.sqlType === 'insert' && verify.default !== 'false') {
    if (_actionType === 'insert') {
      let keys = []
      let values = []
@@ -909,7 +973,7 @@
      values = values.join(',')
      _sql += _user
      _sql += `insert into ${btn.sql} (${keys}) select ${values};`
    } else if (btn.OpenType === 'pop' && btn.sqlType === 'update' && verify.default !== 'false') {
    } else if (_actionType === 'update') {
      let _form = []
      let _arr = []
@@ -945,9 +1009,10 @@
      _form = _form.join(',')
      _sql += `update ${btn.sql} set ${_form} where ${primaryKey}=@${primaryKeyName};`
    } else if ((btn.OpenType === 'prompt' || btn.OpenType === 'exec') && btn.sqlType === 'LogicDelete' && verify.default !== 'false') { // 逻辑删除
    } else if (_actionType === 'LogicDelete') { // 逻辑删除
      _sql += `update ${btn.sql} set deleted=1,modifydate=getdate(),modifyuserid=@userid@ where ${primaryKey}=@${primaryKeyName};`
    } else if ((btn.OpenType === 'prompt' || btn.OpenType === 'exec') && btn.sqlType === 'delete' && verify.default !== 'false') {      // 物理删除
    } else if (_actionType === 'delete') {      // 物理删除
      let _msg = ''
      if (data && logcolumns && logcolumns.length > 0) {
        let _index = 0
@@ -993,15 +1058,20 @@
  static getTableFunc (param, menu, config) {
    let form = ''
    let formParam = ''
    let _vars = ['bid', 'pageindex', 'pagesize', 'ordercol', 'ordertype', 'exceltype', 'septmenuno', 'lang', 'debug', 'loginuid', 'sessionuid', 'userid', 'errorcode', 'retmsg']
    let _columns = []
    let primaryKey = config.setting.primaryKey || 'ID'
    if (!_vars.includes(primaryKey.toLowerCase())) {
      _vars.push(primaryKey.toLowerCase())
      formParam = `mchr13k@${primaryKey} nvarchar(50)='',`
    }
    if (config.search && config.search.length > 0) {
      let _fields = new Map()
      config.search.forEach(item => {
        if (item.field) {
          let type = ''
          let _f = item.field
          if (item.type.match(/date/ig)) {
            type = 'datetime=null'
@@ -1009,12 +1079,19 @@
            type = 'nvarchar(50)=\'\''
          }
          if (_fields.has(item.field)) {
            _f = _f + '1'
          }
          item.field.split(',').forEach(cell => {
            let _f = cell
            if (_fields.has(cell)) {
              _f = _f + '1'
            }
            _fields.set(cell, true)
          _fields.set(item.field, true)
          formParam = formParam + `mchr13k@${_f} ${type},`
            if (!_vars.includes(_f.toLowerCase())) {
              _vars.push(_f.toLowerCase())
              formParam = formParam + `mchr13k@${_f} ${type},`
            }
          })
        }
      })
    }
@@ -1035,8 +1112,7 @@
    let Ltext = `create proc ${param.innerFunc}
    ( /*${menu.MenuName}*/
    @BID nvarchar(50)='',
    @${primaryKey} nvarchar(50)='',${formParam}
    @BID nvarchar(50)='',${formParam}
    @PageIndex nvarchar(50)='',
    @PageSize nvarchar(50)='',
    @OrderCol nvarchar(50)='',
@@ -1121,8 +1197,14 @@
  static getfunc (param, btn, menu, config) {
    let form = ''
    let formParam = ''
    let _vars = ['bid', 'septmenuno', 'lang', 'debug', 'loginuid', 'sessionuid', 'userid', 'errorcode', 'retmsg']
    let columns = config.columns
    let primaryKey = config.setting.primaryKey || 'ID'
    if (!_vars.includes(primaryKey.toLowerCase())) {
      _vars.push(primaryKey.toLowerCase())
      formParam = `mchr13k@${primaryKey} nvarchar(50)='',`
    }
    if (param.fields && param.fields.length > 0) {
      let _fields = []
@@ -1136,7 +1218,11 @@
          } else {
            type = 'nvarchar(50)=\'\''
          }
          formParam = formParam + `mchr13k@${item.field} ${type},`
          if (!_vars.includes(item.field.toLowerCase())) {
            _vars.push(item.field.toLowerCase())
            formParam = formParam + `mchr13k@${item.field} ${type},`
          }
          _fields.push(item.field)
        }
@@ -1185,8 +1271,7 @@
    let Ltext = `create proc ${param.funcName}
    ( /*${menu.MenuName}  ${btn.label}*/
    @BID nvarchar(50)='',
    @${primaryKey} nvarchar(50)='',${formParam}
    @BID nvarchar(50)='',${formParam}
    @sEPTMenuNo nvarchar(50)='${param.menuNo}',
    @lang nvarchar(50)='',
    @debug nvarchar(50)='',
@@ -1258,4 +1343,98 @@
    return Ltext
  }
  /**
   * @description 创建导入存储过程
   * @return {String}
   */
  static getexcelInfunc (param, btn, menu) {
    let _verify = btn.verify
    let declarefields = []
    let fields = []
    _verify.columns.forEach(col => {
      declarefields.push(`${col.Column} ${col.type}`)
      fields.push(col.Column)
    })
    fields = fields.join(',')
    let _sql = `declare @${btn.sheet} table (${declarefields.join(',')},jskey nvarchar(50))
      Declare @UserName nvarchar(50),@FullName nvarchar(50)
      select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID
      Insert into @${btn.sheet} (${fields},jskey)
      exec s_KeyWords_Replace
      @LText=@LText, @BID=@BID,@LoginUID=@LoginUID,@SessionUid=@SessionUid,@UserID=@UserID,@ID=@ID
      Insert into ${btn.sheet} (${fields},createuserid,createuser,createstaff,bid)
      Select ${fields},@userid,@username,@fullname,@BID From @${btn.sheet}
      Delete @${btn.sheet}`
    let Ltext = `create proc ${param.funcName}
    ( /*${menu.MenuName}  ${btn.label}*/
      @ID nvarchar(50)='',
      @BID nvarchar(50)='',
      @Ltext nvarchar(max)='',
      @sEPTMenuNo nvarchar(50)='${param.menuNo}',
      @lang nvarchar(50)='',
      @LoginUID nvarchar(50)='',
      @SessionUid nvarchar(50)='',
      @UserID nvarchar(50),
      @ErrorCode nvarchar(50) out,
      @retmsg nvarchar(4000) out
    )
    as
    begin
    declare @BegindateTest datetime,@EnddateTest datetime
    select @BegindateTest=getdate()
    set @ErrorCode=''
    set @retmsg=''
    BEGIN TRY
      /*事务操作*/
      BEGIN TRAN
        /*具体业务操作*/
        /*
        ${_sql}
        */
      COMMIT TRAN
      SET NOCOUNT ON
      RETURN
    END TRY
    BEGIN CATCH
      /*错误处理*/
      ROLLBACK TRAN
      DECLARE @ErrorMessage NVARCHAR(4000);
      DECLARE @ErrorSeverity INT;
      DECLARE @ErrorState INT;
      /*把自定义的友好的错误信息提示加上*/
      set @ErrorCode=cast(ERROR_NUMBER() as nvarchar(50))
      SET @retmsg=ERROR_MESSAGE();
      SELECT @ErrorMessage=ERROR_MESSAGE(),
        @ErrorSeverity=ERROR_SEVERITY(),
        @ErrorState=ERROR_STATE();
      RAISERROR(@ErrorMessage, /*-- Message text.*/
        @ErrorSeverity, /*-- Severity.*/
        @ErrorState  /*-- State.*/
      );
    END CATCH
    GOTO_RETURN:
      ROLLBACK TRAN
    END`
    Ltext = Ltext.replace(/\n\s{4}/ig, 'mchr13k')
    return Ltext
  }
}