fcc-core
Version:
Fusion communication center.
300 lines (293 loc) • 8.77 kB
JavaScript
import njdf from './njdf.js'
import jsEncrypt from './des.js'
import { language, serverUrl as configApi } from '../../config'
import BaseException from '../../errors/base-exception'
import {hex_md5} from '../md5'
// 获取接口根路径
const isProd = process.env.NODE_ENV === 'production'
const BASE_PATH = isProd ? configApi.production : configApi.development
// let USERBASEINFO = {
// asign: "大家好,我是王勇",
// email: "asdfa@163.com",
// loginDate: "2018August6th 15:37:27",
// loginIp: "127.0.0.1",
// mobile: "13546587895",
// offTel: "075556895232",
// openDate: "2009-03-10 00:00:00.0",
// orgCode: "F10011",
// orgId: undefined,
// userCurrRole: "1107",
// userIcon: "1461728672869.jpeg",
// userId: "1",
// userLseId: undefined,
// userMinPost: "1112",
// userMinRole: "1107",
// userName: "王勇",
// userPass: "093b2d0e75223f44a061eefbc0d822bf",
// userPost: "1,61,1001,1004,1107,1111,1112,1113",
// userRole: "1107,1111",
// userTicket: "DODHK/35T/2DFAWSUU3HLFZFL69Y9CSJ"
// }
let NJSCONSTANTS = {
SERVICE: 'service',
PROGRAM: 'menuId'
}
let njs = {
sessionTimeoutFlag: false
}
njs.baseUrl = ''
njs.ipUrl = window.location.origin + njs.baseUrl
// 记录装载状态
njs.status = 'loaded'
const addProgramParam = function (req) {
var menuId, fsubsys
req.forEach(function (item) {
menuId = getUrlParam(NJSCONSTANTS.PROGRAM)
fsubsys = getUrlParam('F_SUBSYS')
if (menuId) {
item[NJSCONSTANTS.PROGRAM] = menuId
}
if (fsubsys) {
item['F_SUBSYS'] = fsubsys
}
})
}
const getUrlParam = function (param) {
var uri = window.location.search
var reg = new RegExp(param + '=([^&]*)', 'ig')
var paramStr = uri.match(reg)
if (paramStr && paramStr.length > 0) {
return paramStr[0].substr(param.length + 1)
} else {
return ''
}
}
const getKSDXReqMsgHead = function (request, xw) {
// 取 store 里面的 userBaseInfo,不取 storage 里面的
const USERBASEINFO = xw.userInfo
const CURR_ROLE = xw.userInfo.CURR_ROLE
var reqMsgHeader = {
LANGUAGE: language,
OP_CODE: USERBASEINFO.USER_CODE || '',
OP_ROLE: CURR_ROLE || '',
OP_BRANCH: USERBASEINFO.ORG_ID || '',
OP_SITE: USERBASEINFO.LOG_IP || '',
USER_TICKET_INFO: USERBASEINFO.USER_TICKET_INFO || '',
OP_WAY: '1',
OP_LANGUAGE: language,
OP_PROGRAM: request[NJSCONSTANTS.PROGRAM] || '',
SERVER_ID: request[NJSCONSTANTS.SERVICE] || '',
MSG_ID: request[NJSCONSTANTS.SERVICE],
OP_LOGINTYPE: USERBASEINFO.OP_LOGINTYPE || '',
OP_USER_TYPE: USERBASEINFO.USER_TYPE || ''
}
return reqMsgHeader
}
const makeJsonRequest = function (requests, xw) {
var jsonPack = []
for (var i = 0; i < requests.length; i++) {
jsonPack[i] = {}
jsonPack[i].REQ_MSG_HDR = getKSDXReqMsgHead(requests[i], xw)
if (requests[i].apiType) { // 不是通过接口号访问时
jsonPack[i].REQ_COMM_DATA = requests[i].data
} else {
jsonPack[i].REQ_COMM_DATA = requests[i]
}
/* for(var key in requests[i]){
} */
}
return jsonPack
}
/**
* 拼请求后台字符串
* @param json json对象
* @returns {String} xml格式请求字符串
*/
const makeXmlRequestStr = function (json) {
var xmlRequestStr =
'<?xml version="1.0" encoding="UTF-8"?><requests><![CDATA['
// json对象转json字符串
var paramJson = njs.jsonArryToString(json)
xmlRequestStr += paramJson
xmlRequestStr += ']]></requests>'
return xmlRequestStr
}
// json格式回调函数
const jsonResultCallback = function (data) {
let answers = [
{
ANS_MSG_HDR: {
MSG_CODE: '0',
MSG_TEXT: '',
RESULT_NUM: ''
},
ANS_COMM_DATA: []
}
]
if (data && data['ANSWERS']) {
answers = data['ANSWERS']
}
let retData = answers
let retCode = answers[0]['ANS_MSG_HDR']['MSG_CODE']
let retMsg = answers[0]['ANS_MSG_HDR']['MSG_TEXT']
let retHead = answers[0]['ANS_MSG_HDR']
// 100,-130011表示执行成功,没有返回结果
if (
retCode === '0' ||
retCode === '100' ||
retCode === '-130011' ||
retCode === '-404'
) {
retData = answers[0]['ANS_COMM_DATA'][0]
if (
answers[0]['ANS_COMM_DATA'].length === 3 &&
answers[0]['ANS_COMM_DATA'][2]['CONFIG']
) {
answers[0]['ANS_COMM_DATA'][2]['CONFIG'] = answers[0]['ANS_MSG_HDR']
}
} else if (retCode === '10069') {
throw new BaseException(410) // 融合通讯中台会话已过期!
} else if (retCode === '2011') {
throw new BaseException(408) // 融合通讯中台请求超时!
}
// 对retData做加工,数据转换
// retData = transformData(retData);
return {
code: retCode,
msg: retMsg,
data: retData,
head: retHead
}
}
const ajaxRequest = function (ajaxParam, xw) {
var requests = ajaxParam.req || [{}]
var serviceCode = '0'
var isHttp // 是否调用不需要校验登录状态的后台接口
// 获取第一个service的值,用于nginx路由
if (requests.length > 0) {
serviceCode = requests[0].service
isHttp = requests[0].isHttp
}
for (var i = 0; i < requests.length; i++) {
if (
typeof requests[i].service !== 'undefined' &&
requests[i].service == 'P9999999' &&
(typeof requests[i].bex_codes === 'undefined' ||
requests[i].bex_codes == '')
) {
// top.alert(top.$i18n.prop('reqSettingErr'));
return
}
if (
typeof requests[i].bex_codes === 'string' &&
typeof requests[i].service === 'undefined'
) {
requests[i].service = 'P9999999'
}
}
try {
if (requests[0] && requests[0].USER_CODE) {
var val = requests[0].USER_CODE
if (val && !$.isNumeric(val)) {
// USER_CODE不是数字,需要做处理
requests[0].USER_CODE = ''
}
}
if (requests[0] && requests[0].CUST_CODE) {
var val = requests[0].CUST_CODE
if (val && !$.isNumeric(val)) {
// CUST_CODE不是数字,需要做处理
requests[0].CUST_CODE = ''
}
}
} catch (ex) {}
addProgramParam(requests)
var reqType = 'json'
var requestStr = ''
if (reqType == 'json') {
requests = makeJsonRequest(requests, xw)
requestStr = '{"REQUESTS":' + JSON.stringify(requests) + '}'
} else if (reqType == 'xml') {
requestStr = makeXmlRequestStr(ajaxParam.req)
}
// 访问top属性就会报错,原因未知
// if (top && top.njs_debugger) {
// // top.njs_debugger.debug(top.$i18n.prop('njs.core.src.js.batch1'), requestStr);
// }
var encoderType = 'none' // 默认不加密
const USERBASEINFO = xw.userInfo
let timestamp = new Date().getTime()
let nonce
let sign
if (USERBASEINFO) {
nonce = hex_md5(USERBASEINFO.USER_CODE + '_' + timestamp + '_' + serviceCode)
sign = hex_md5(njdf.encKey + '_' + timestamp + '_' + nonce)
}
if (ajaxParam.encoderType) {
encoderType = ajaxParam.encoderType
}
// 加密方式
if (encoderType == 'des') {
requestStr = jsEncrypt.encrypt(
requestStr,
top.window.$kencKey ? top.window.$kencKey : null
)
} else if (encoderType == 'desNew') {
requestStr = encryptNew(
requestStr,
top.window.$kencKey ? top.window.$kencKey : null
)
} else if (encoderType == 'base64') {
requestStr = BASE64.encoder(requestStr)
}
var ajaxUrl =
njs.ipUrl +
BASE_PATH['UCC'] +
(isHttp ? '/njdf_http?returnType=' : '/njdf_ajax?timestamp=' + timestamp + '&nonce=' + nonce + '&sign=' + sign + '&returnType=') +
reqType +
'&service=' +
serviceCode +
'&encoderType=' +
encoderType +
'&loginType=' +
njdf['loginType']
if (ajaxParam.url) {
ajaxParam.url +=
'&service=' +
serviceCode +
'&encoderType=' +
encoderType +
'&loginType=' +
njdf['loginType']
}
let params = {
url: ajaxParam.url || ajaxUrl,
data: requestStr,
contentType: 'text/plain; charset=utf-8',
dataType: reqType
}
return params
}
const ImageUpload = function (req) {
let params = {
url:
njs.ipUrl +
'/njdf_upload?DIR=' +
req['DIR'] +
'&service=' +
req['service'] +
'&ATTA_CHNL=' +
req['ATTA_CHNL'],
data: req['data']
}
return params
}
const formateData = (req, xw) => {
let data = {
async: false,
req: req,
noProcess: true
}
return ajaxRequest(data, xw)
}
export { formateData, jsonResultCallback, ImageUpload }