define(function (require, exports, module) { var BaseWindow = require('system/views/pages/window'); require('css!./funcscriptwin.css'); var tpl = require('text!apps/edp/frs/frs004/funcscriptwin.tpl'); var COVERSCRIPT = 'COVER'; function Window(args) { this.options = { title: '脚本查看器', content: tpl, width: 800, height: 600, modal: true, closed: true, closable: true, data: null }; this.args = args; BaseWindow.call(this, this.options); } inherits(Window, BaseWindow); Window.prototype.init = function () { var self = this; this.setTree(); this.setSqlPreAndSuf(); }; Window.prototype.select = function () { this.close(); }; Window.prototype.doOp = function (opCode) { var isHandled = false; switch (opCode) { case 'getCoverSql': this.getSql('0'); break; case 'getCheckSql': this.getSql('1'); break; case 'export': this.exportScript(); break; case 'backtosql': this.showSelectBlock(); break; } }; Window.prototype.refresh = function () { var self = this; this.dsMaster.search(); }; Window.prototype.customerize = function ($container) { var self = this; this.$txtScript = this.getElement('.txtscript'); this.$scriptNameInput = this.getElement('.edp-frd-script-name-input'); var $getCoverSql = this.getElement('.get-cover-sql'); if ($getCoverSql) { $getCoverSql.click(function () { self.doOp('getCoverSql'); }); } var $getCheckSql = this.getElement('.get-check-sql'); if ($getCheckSql) { $getCheckSql.click(function () { self.doOp('getCheckSql'); }); } var $exportBtn = this.getElement('.btn-export'); if ($exportBtn) { $exportBtn.click(function () { self.doOp('export'); }); } var $closeExport = this.getElement('.btn-close-export'); if ($closeExport) { $closeExport.click(function () { self.doOp('backtosql'); }); } var $closeWindow = this.getElement('.window-close-btn'); if ($closeWindow) { $closeWindow.click(function () { self.close(); }); } }; Window.prototype.getSql = function (type) { this.generateSql(type); }; Window.prototype.showSql = function () { var titleElement = this.getElement('.sql-title'); var sqlElement = this.getElement('.sql-content'); var selectBlockElement = this.getElement('.select-data-block'); var showBlockElement = this.getElement('.show-sql-text-block'); titleElement.text(this.sqltitle); sqlElement.text(this.sqltext); selectBlockElement.hide(); showBlockElement.show(); }; Window.prototype.showSelectBlock = function () { var titleElement = this.getElement('.sql-title'); var sqlElement = this.getElement('.sql-content'); var selectBlockElement = this.getElement('.select-data-block'); var showBlockElement = this.getElement('.show-sql-text-block'); titleElement.text(''); sqlElement.text(''); selectBlockElement.show(); showBlockElement.hide(); }; Window.prototype.exportScript = function () { var self = this, blob = new Blob( [this.sqltext], { type: "text/plain;charset=" + document.characterSet } ), url = window.URL.createObjectURL(blob), download_link = this.getElement('.export-script')[0]; Store.services.fileExport({ filename: this.sqltitle, content: this.sqltext }, function (isok, data) { if (isok) { download_link.href = Store.host + data.path; download_link.download = self.sqltitle; download_link.click(); window.URL.revokeObjectURL(url); } }) }; Window.prototype.generateSql = function (type) { var nodes = this.getSelectedNodes(); if (nodes.length === 0) { Store.messager.tip('请至少选中一个有效节点'); return; } var funccodes = ''; for (var i = 0 ; i < nodes.length; i++) { funccodes = funccodes + "'" + nodes[i].value + "'"; if (i !== nodes.length - 1) { funccodes += ','; } } var params = { plugin: 'etpSqlPlugin', sync: true, pluginData: { funccodes: funccodes, } }; var resultData = Store.services.executeplugin(params); if (resultData.success === false ) { Store.messager.err('获取数据错误,请稍后重试!'); return; } if (resultData.propRows.length === 0 && resultData.langRows.length === 0) { Store.messager.tip('所选功能无企业模板数据!'); return; } this.generateTitle(funccodes, nodes); let sqltext; switch (type) { case '0': //覆盖型 sqltext = this.generateCoverSql(resultData, funccodes, nodes); break; case '1': // 校验型 sqltext = this.generateCheckSql(resultData, funccodes, nodes); break; } this.sqltext = sqltext; this.showSql(); }; Window.prototype.generateTitle = function (funccodes, nodes) { var tsqltext = '3207_FRS_预置('; var sqltext = ''; var funcArray = funccodes.split(","); for (var i = 0, length = funcArray.length; i < length; i++) { var funccode = funcArray[i].replace(/\'/g, ''); var _funcname = _.where(nodes, { value: funccode })[0].name; (i !== length - 1) ? tsqltext += funccode + '-' + _funcname + ',' : tsqltext += funccode + '-' + _funcname; } tsqltext += ')等功能的企业字典数据脚本.sql'; this.sqltitle = tsqltext; }; /** * 生成funccode-uiobjcode关联对象 * @param {func-uiobj关联行} funcUIReRows * @param {所有的功能编码} funccodes */ Window.prototype.createFuncUIObject = function (funcUIReRows, funccodes) { var codesArray = funccodes.split(','); var funcUI = {}; for (var i = 0, length = codesArray.length; i < length; i++) { var cCode = codesArray[i].replace(/\'/g, ''); funcUI[cCode] = []; for (var j = 0, jlength = funcUIReRows.length; j < jlength; j++) { var fcRow = funcUIReRows[j]; if (fcRow.concatcode.indexOf(cCode) > -1) { funcUI[cCode].push("'" + fcRow.concatcode.substr(cCode.length + 1) + "'"); } } } return funcUI; }; Window.prototype.generateCheckSql = function (data, funccodes, nodes) { var funcUI = this.createFuncUIObject(data.funcUIReRows, funccodes); var sqltext = '/*=============================================*/\n'; sqltext += this.checkPreSql; for (var key in funcUI) { var _funcname = _.where(nodes, { value: key})[0].name; // prop表数据 var temRows = data.propRows.filter(function(item) { return funcUI[key].indexOf("'" + item.uiobjcode + "'") > -1; }); if (temRows.length > 0) { sqltext += '/* 生成' + key + '-' + _funcname + '的企业字典对象明细表(tEtpUIProp)表数据脚本 */\n'; sqltext += this.generateSelectCountSql('tEtpUIProp', funcUI[key]); data.dataRows = temRows; sqltext += this.generateInsertSql(data, 'tEtpUIProp'); sqltext += 'Commit;\n' + 'end if;\n'; } // lang表数据 var temLangRows = data.langRows.filter(function (item) { return funcUI[key].indexOf("'" + item.uiobjcode + "'") > -1; }); if (temLangRows.length > 0) { sqltext += '/* 生成' + key + '-' + _funcname + '的界面对象多语言明细表(tEtpUIPropLang)表数据脚本 */\n'; sqltext += this.generateSelectCountSql('tEtpUIPropLang', funcUI[key]); data.dataRows = temLangRows; sqltext += this.generateInsertSql(data, 'tEtpUIPropLang'); sqltext += 'Commit;\n' + 'end if;\n'; } } sqltext += 'End;\n' + '/\n'; return sqltext; }; Window.prototype.generateCoverSql = function (data, funccodes, nodes) { var sqltext = '/*=============================================*/\n'; var title = '3207_FRS_预置企业模板数据'; sqltext += this.coverPreSql; sqltext += '/* 生成数据对象:tEtpUIProp-企业字典对象明细表的数据脚本 */\n'; sqltext += this.generateDeleteSql('tEtpUIProp', data.uiobjRows); data.dataRows = data.propRows; sqltext += this.generateInsertSql(data, 'tEtpUIProp'); sqltext += '/* 生成数据对象:tEtpUIPropLang-界面对象多语言明细表的数据脚本 */\n'; sqltext += this.generateDeleteSql('tEtpUIPropLang', data.uiobjRows); data.dataRows = data.langRows; sqltext += this.generateInsertSql(data, 'tEtpUIPropLang'); sqltext += this.suffixSql; return sqltext; }; Window.prototype.generateSelectCountSql = function (uiobjname, uiobjnames) { var sqltext = "Select count(1) into vi_num from " + uiobjname + " Where uiobjcode in ( " + uiobjnames + " ) ; " + "if( vi_num = 0 ) then \n"; return sqltext; } Window.prototype.generateDeleteSql = function (uiobjname, objRows) { var uiobjnames = ''; for (var i = 0, length = objRows.length; i < length; i++) { uiobjnames += "'" + objRows[i].funcobjcode + "'"; i !== length -1 ? uiobjnames += ',' : ''; } var sqltext = 'Delete from ' + uiobjname + ' where uiobjcode in ( ' + uiobjnames + ' ); \n'; return sqltext; }; Window.prototype.generateInsertSql = function (data, uiobjname, scriptType) { var dataRows = data.dataRows; if (dataRows.length === 0) return ''; var uiobjRows = data.uiobjRows; var notQuoteRows = uiobjname === 'tEtpUIProp' ? data.propNotQuoteRows : data.langNotQuoteRows; var propKeys = Object.keys(dataRows[0]); var cols = propKeys.join(', '); var sqltext = ''; for (var i = 0, plength = dataRows.length; i < plength; i++) { var cProw = dataRows[i]; var sqlValues = ''; for (var k = 0, klength = propKeys.length; k < klength; k++) { var cpkey = propKeys[k]; var value = cProw[cpkey] if (sqlValues.length > 0) { sqlValues += ','; } var tempArray = notQuoteRows.filter(function (item) { return item.fieldname.toLowerCase() === cpkey; }); if (tempArray.length === 0) { sqlValues += getStrValue(value); } else { sqlValues += value; } } sqltext += 'Insert into ' + uiobjname + ' ( ' + cols + ' ) values ( ' + sqlValues + ' ); \n'; } return sqltext; }; Window.prototype.generateLangSql = function (data) { var langRows = data.langRows; }; Window.prototype.open = function () { var self = this; // self.makeScriptName(); BaseWindow.prototype.open.call(self); }; Window.prototype.setTree = function () { var self = this, treeName = 'tree_etp_window'; //注册树组件 var treeArgs = { actions: { onClick: function (event, treeNode) { // self.biz.treeSelected(moduleCode, colName, treeNode); } }, opts: { selectedMulti: true }, data: this.args.treedata }; self.register('tree', treeName, treeArgs); }; Window.prototype.getSelectedNodes = function () { var ztree = this.widgets["tree_etp_window"].vmodel.$tree; var nodes = ztree.getSelectedNodes(); var newNodes = []; while (nodes.length) { var item = nodes.shift(); if (item.children) { nodes = nodes.concat(item.children); } else { newNodes.push(item); } } return _.uniq(newNodes); }; Window.prototype.setSqlPreAndSuf = function () { this.beginPreSql = '/* PUR */\n'+ '/* 日期: */\n'+ '/* 建立者:系统管理员 */\n'+ '/*=============================================*/\n'; this.checkPreSql = this.beginPreSql + 'Declare\n'+ 'vi_num integer;\n' + 'Begin\n'; this.coverPreSql = this.beginPreSql + 'Begin\n'; this.suffixSql = 'Commit;\n'+ 'End;\n'+ '/\n'; } function getStrValue(value) { if (value) { value = value.replace(/'/g, "''"); return "'" + value + "'"; } else { return value === null ? value : ''; } } return Window; });