UNPKG

tfp

Version:

A Web UI framework for TaskBuilder

462 lines (385 loc) 14.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _controller = require("../controller.js"); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var _status = Symbol("status"); /** * 后台服务组件 * @param {[type]} dataModel [description] */ var Service = /*#__PURE__*/function (_InvisibleComponent) { (0, _inherits2["default"])(Service, _InvisibleComponent); var _super = _createSuper(Service); function Service(__tfp, dataModel, parent) { var _this; (0, _classCallCheck2["default"])(this, Service); _this = _super.call(this, __tfp, "Service", dataModel, parent); _this[_status] = 0; _this.cbFuncs = []; //回调函数 return _this; } //服务请求状态,0:未请求,1:正在请求,2:请求完毕 (0, _createClass2["default"])(Service, [{ key: "status", get: function get() { return this[_status]; }, set: function set(value) {} //服务路径 }, { key: "path", get: function get() { return this.dataModel.path; }, set: function set(value) { this.dataModel.path = value; } //请求参数 }, { key: "args", get: function get() { return this.dataModel.args; }, set: function set(value) { this.dataModel.args = value; } //请求参数设置 }, { key: "argSettings", get: function get() { return this.dataModel.argSettings; }, set: function set(value) { this.dataModel.argSettings = value; } //参数变化时自动重载 }, { key: "autoReload", get: function get() { return this.dataModel.autoReload ? true : false; }, set: function set(value) { this.dataModel.autoReload = value ? true : false; } //是否自动显示错误提示 }, { key: "autoShowError", get: function get() { return this.dataModel.autoShowError ? true : false; }, set: function set(value) { this.dataModel.autoShowError = value ? true : false; } /** * 设置请求参数 * @param {[type]} name [description] * @param {[type]} value [description] * @param {[type]} type [description] */ }, { key: "setArg", value: function setArg(name, value, type) { if (!name) { this._tfp.showMsg("请提供参数名称!"); return; } if (!this.dataModel.argSettings) this.dataModel.argSettings = []; var arg = { name: name }; arg.type = "Default"; if (type) arg.type = type; if (value) arg.value = value; var isExists = false; for (var i = 0; i < this.dataModel.argSettings.length; i++) { if (this.dataModel.argSettings[i].name == arg.name) { isExists = true; if (type) this.dataModel.argSettings[i].type = type; if (value) this.dataModel.argSettings[i].value = value; break; } } if (!isExists) this.dataModel.argSettings.push(arg); } /** * 删除请求参数 * @param {[type]} name [description] * @return {[type]} [description] */ }, { key: "removeArg", value: function removeArg(name) { if (!name || !this.dataModel.argSettings) return; for (var i = 0; i < this.dataModel.argSettings.length; i++) { if (this.dataModel.argSettings[i].name == name) { this.dataModel.argSettings.splice(i, 1); return; } } } /** * 显示错误信息 * @param {[type]} msg [description] * @return {[type]} [description] */ }, { key: "showError", value: function showError(msg) { console.error(msg); if (this.dataModel.autoShowError && typeof window != "undefined") { this._tfp.showMsg(msg); } if (this.onError) { this.onError(msg); } else if (this.dataModel.onError) { eval(this.dataModel.onError); } } /** * 获取HTTP请求对象 * @return {[type]} [description] */ }, { key: "getHttpRequest", value: function getHttpRequest() { var httpRequest; if (window.XMLHttpRequest) { httpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); if (!httpRequest) { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } } if (!httpRequest) { this.showError("您的浏览器不支持Ajax,无法执行该操作!"); return null; } return httpRequest; } /** * 请求服务 * @param {[type]} args 请求参数 * @param {Function} cb 回调函数 */ }, { key: "request", value: function request(args, cb) { if (!this.path) { this.showError("请提供服务路径!"); return; } if (cb) this.cbFuncs.push(cb); //如果当前服务对象正在发送请求,则不重复请求 if (this[_status] == 1) return; this[_status] = 1; //设置请求参数 if (!args) args = {}; args.service = this.path; if (this.dataModel.args) { for (var p in this.dataModel.args) { args[p] = this.dataModel.args[p]; } } if (this.dataModel.argSettings) { for (var i = 0; i < this.dataModel.argSettings.length; i++) { var arg = this.dataModel.argSettings[i]; if (arg.type == "QueryString") { if (arg.value) { args[arg.name] = this._tfp.getUrlArg(arg.value); } else { args[arg.name] = this._tfp.getUrlArg(arg.name); } } else if (arg.type == "ComponentVal") { var cpt = null; if (arg.value) { cpt = this._tfp.get(arg.value); } else { cpt = this._tfp.get(arg.name); } if (cpt) args[arg.name] = cpt.value; } else if (arg.type == "ComponentAttr") { if (arg.value && arg.value.indexOf(".") > 0) { var cptInfo = arg.value.split("."); var _cpt = this._tfp.get(cptInfo[0]); if (_cpt && cptInfo[1] != "") args[arg.name] = _cpt[cptInfo[1]]; } } else if (arg.type == "DialogArg") { if (arg.value) { var dialogArgs = null; try { dialogArgs = JSON.parse(this._tfp.getDialogArgs()); args[arg.name] = dialogArgs[arg.value]; } catch (e) { this._tfp.showMsg(e.message); } } else { args[arg.name] = this._tfp.getDialogArgs(); } } else if (arg.type == "Expression") { if (args.value) { try { args[arg.name] = eval(arg.value); } catch (err) { console.log(err); } } } else { args[arg.name] = arg.value; } } } //是否终止请求,如果服务请求有关的事件处理函数返回true //则表示终止请求,不再执行后续代码 var endRequest = false; this.exeEventHandler("onRequest"); //如果设置了请求前需要执行的事件处理函数,则执行该函数 /*if(this.onRequest && typeof this.onRequest == "function") { endRequest = this.onRequest(args); } else if(this.dataModel.onRequest) { endRequest = eval(this.dataModel.onRequest); if(endRequest) return; }*/ //设置身份验证信息 //如果嵌入到第三方系统,会出现跨域错误,需要捕获一下,否则无法执行后续代码 try { if (typeof top != "undefined" && top.taskMsgAuthObj) { var authObj = { args: {} }; top.taskMsgAuthObj.setAuthData(authObj); for (var _arg in authObj.args) { args[_arg] = authObj.args[_arg]; } } } catch (err) { try { if (typeof window.parent != "undefined" && window.parent.taskMsgAuthObj) { var _authObj = { args: {} }; window.parent.taskMsgAuthObj.setAuthData(_authObj); for (var _arg2 in _authObj.args) { args[_arg2] = _authObj.args[_arg2]; } } } catch (err2) { if (typeof tmClient != "undefined" && (tmClient.clientOSType == "iOS" && typeof TMiOSClient != "undefined" || tmClient.clientOSType == "Android" && typeof TMAndroidClient != "undefined")) { var authData = JSON.parse(tmClient.getAuthData()); args._auth_org = authData._auth_org; args._auth_ts = authData._auth_ts; args._auth_data = authData._auth_data; } else { if (this._tfp.getUrlArg("_auth_org")) args._auth_org = this._tfp.getUrlArg("_auth_org"); if (this._tfp.getUrlArg("_auth_ts")) args._auth_ts = this._tfp.getUrlArg("_auth_ts"); if (this._tfp.getUrlArg("_auth_data")) args._auth_data = this._tfp.getUrlArg("_auth_data"); } } } //console.log(args); //如果嵌入到第三方系统,会出现跨域错误,需要捕获一下,否则无法执行后续代码 var topTBObj = false; try { topTBObj = typeof top != "undefined" && top.taskBuilder; } catch (err) {} if (topTBObj) { var that = this; top.taskBuilder.requestByIPC(this.path, args, function (req, res) { that.onResponse(req, res); }); } else { this.sendRequest(args); } } }, { key: "exeResponseFunc", value: function exeResponseFunc(req, res, responseFuncStr) { if (responseFuncStr.indexOf(".") < 0 && responseFuncStr.indexOf(" ") < 0 && responseFuncStr.indexOf("=") < 0 && responseFuncStr.indexOf("(") < 0 && responseFuncStr.indexOf(")") < 0) { eval(responseFuncStr + "(req, res)"); } else { eval(responseFuncStr); } } }, { key: "onResponse", value: function onResponse(req, res) { if (res.code == 0) { if (this.srcElement) req.srcElement = this.srcElement; if (this.cbFuncs.length > 0) { for (var i = 0; i < this.cbFuncs.length; i++) { this.cbFuncs[i](req, res); } //执行完响应回调函数之后,要清空回调函数数组,否则再次请求时,会重复执行 this.cbFuncs = []; } if (this.dataModel.onResponse && typeof this.dataModel.onResponse == "string") { this.exeResponseFunc(req, res, this.dataModel.onResponse); } } else { //出错时,要清空回调函数数组,否则再次请求时,会重复执行 this.cbFuncs = []; //如果是身份验证失败 if (res.code == 501) { try { if (this._tfp.isMobile()) { top.location = "/mobile/login.html"; } else { top.location = "/"; } } catch (err) {//嵌入到第三方系统时可能会出现跨域错误 } return; } this.showError(res.message); } } }, { key: "sendRequest", value: function sendRequest(args) { var that = this; var httpRequest = this.getHttpRequest(); try { httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4) { that[_status] = 2; if (httpRequest.status == 200) { var response = JSON.parse(httpRequest.responseText); that.onResponse(args, response); } else if (httpRequest.status == 404) { that.showError("请求的服务不存在!"); } else { if (httpRequest.status !== 0) that.showError("向服务器发送请求时发生意外错误!\r\n错误代码:" + httpRequest.status); } } }; var serverPath = location.toString(); serverPath = serverPath.substr(0, serverPath.indexOf("/", 8) + 1); httpRequest.open("POST", serverPath + "Service", true); //httpRequest.open("POST", serverPath+this.path, true); httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); httpRequest.send(JSON.stringify(args)); } catch (e) { this.showError("向服务器发送请求时发生意外错误!\r\n错误描述:" + e.message); } } }, { key: "initRuntime", value: function initRuntime() { var that = this; if (this.dataModel.argSettings && this.dataModel.autoReload) { for (var i = 0; i < this.dataModel.argSettings.length; i++) { var arg = this.dataModel.argSettings[i]; if (arg.type == "ComponentVal") { var cpt = null; if (arg.value) { cpt = this._tfp.get(arg.value); } else { cpt = this._tfp.get(arg.name); } if (!cpt) continue; if (!cpt.formulaIpts) cpt.formulaIpts = []; if (!cpt.formulaIpts.contains(that.id)) cpt.formulaIpts.push(that.id); } } } } }]); return Service; }(_controller.InvisibleComponent); exports["default"] = Service;