You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
6.3 KiB
222 lines
6.3 KiB
|
|
define(function (require, exports, module) {
|
|
var BaseWindow = require('system/views/pages/window');
|
|
var tpl = require('text!./scriptwin5.tpl');
|
|
require('css!./scriptwin5.css');
|
|
|
|
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);
|
|
|
|
this.scriptType = args.scriptType;
|
|
this.dsMaster = new DataSource();
|
|
this.dsMaster.uiObjCode = 'tFrmFuncMenu';
|
|
this.dsMaster.fixQuery['MenuGroup'] = args.dataRow['MenuGroup'];
|
|
}
|
|
|
|
inherits(Window, BaseWindow);
|
|
|
|
Window.prototype.init = function () {
|
|
var self = this;
|
|
}
|
|
|
|
Window.prototype.select = function () {
|
|
this.close();
|
|
};
|
|
|
|
Window.prototype.doOp = function (opCode) {
|
|
var isHandled = false;
|
|
switch (opCode) {
|
|
case 'ok':
|
|
this.select();
|
|
break;
|
|
case 'exit':
|
|
this.$txtScript.select();
|
|
break;
|
|
case 'refresh':
|
|
this.refresh();
|
|
break;
|
|
case 'export':
|
|
this.exportScript();
|
|
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 $btnOk = this.getElement('.btn-script-ok');
|
|
if ($btnOk) {
|
|
$btnOk.on('click', function () {
|
|
self.doOp('ok');
|
|
});
|
|
}
|
|
|
|
var $btnCancel = this.getElement('.btn-script-cancel');
|
|
if ($btnCancel) {
|
|
$btnCancel.click(function () {
|
|
self.doOp('exit');
|
|
});
|
|
}
|
|
var $btnExport = this.getElement('.btn-script-export');
|
|
if ($btnExport) {
|
|
$btnExport.click(function() {
|
|
self.doOp('export');
|
|
});
|
|
}
|
|
this.$scriptNameInput.val(this.scriptName);
|
|
|
|
self.loadScript();
|
|
};
|
|
|
|
|
|
Window.prototype.open = function () {
|
|
var self = this;
|
|
|
|
var code = self.dsMaster.uiObjCode;
|
|
var post_data = {
|
|
funcCode: '',
|
|
uiObjCodes: code
|
|
}
|
|
self.makeScriptName();
|
|
Store.services.getUiObjSchema(post_data, function (isOk, data) {
|
|
if (isOk) {
|
|
self.dsMaster.initUIObj(data[code]);
|
|
BaseWindow.prototype.open.call(self);
|
|
}
|
|
});
|
|
};
|
|
|
|
Window.prototype.makeScriptName = function() {
|
|
this.scriptName = Store.dbScriptsProjectNo + '07_XX' +
|
|
'_预置菜单组' + this.args.dataRow['MenuGroup'] + '.sql';
|
|
};
|
|
|
|
Window.prototype.exportScript = function() {
|
|
var self = this,
|
|
scriptContent = self.$txtScript.val(),
|
|
scriptName = self.$scriptNameInput.val(),
|
|
blob = new Blob(
|
|
[scriptContent],
|
|
{type: "text/plain;charset=" + document.characterSet}
|
|
),
|
|
url = window.URL.createObjectURL(blob),
|
|
download_link = $('.export-script')[0];
|
|
|
|
Store.services.fileExport({
|
|
filename: scriptName,
|
|
content: scriptContent
|
|
}, function (isok, data) {
|
|
if (isok) {
|
|
download_link.href = Store.host + data.path;
|
|
download_link.download = scriptName;
|
|
download_link.click();
|
|
window.URL.revokeObjectURL(url);
|
|
}
|
|
})
|
|
};
|
|
|
|
|
|
Window.prototype.loadScript = function () {
|
|
var self = this;
|
|
|
|
//数据脚本特殊处理
|
|
self.dsMaster.search(function (isOk, ds) {
|
|
if (isOk) {
|
|
self.createDictScript()
|
|
}
|
|
});
|
|
|
|
|
|
};
|
|
|
|
function getSpace(num) {
|
|
var str = '';
|
|
for (var i = 0; i < num; i++) {
|
|
str += ' ';
|
|
}
|
|
;
|
|
return str;
|
|
}
|
|
|
|
|
|
Window.prototype.createDictScript = function () {
|
|
var self = this;
|
|
var dictScriptTpl = require('text!./dictScript5.tpl');
|
|
var mysqlScriptTpl = require('text!./dictMysqlScript5.tpl');
|
|
var deleteSql = "DELETE FROM tFrmFuncMenu WHERE MenuId='" + this.args.dataRow['MenuId'] + "'";
|
|
//主表相关脚本
|
|
var sqlObj = [''];
|
|
var objRow = this.args.dataRow; ;
|
|
var sqlObjValues = [""];
|
|
appendStr(sqlObj, "INSERT INTO tFrmFuncMenu (", true);
|
|
for (var i = 0; i < objRow.dataSrc.columns.length; i++) {
|
|
var col = objRow.dataSrc.columns[i];
|
|
if (col.isCalc) {
|
|
continue;
|
|
}
|
|
var _value = getSqlValue(col, objRow);
|
|
appendStr(sqlObj, col.fieldName);
|
|
appendStr(sqlObjValues, _value);
|
|
}
|
|
removeComma(sqlObj);
|
|
removeComma(sqlObjValues);
|
|
appendStr(sqlObj, ") VALUES (", true);
|
|
appendStr(sqlObj, sqlObjValues[0], true);
|
|
appendStr(sqlObj, ");\n", true);
|
|
deleteSql += ";\n";
|
|
sqlObj = deleteSql + sqlObj;
|
|
//合成最后的脚本
|
|
var finalScript = (this.scriptType === 'oracle' ? dictScriptTpl : mysqlScriptTpl);
|
|
finalScript = finalScript.replace('#MASTER', sqlObj);
|
|
self.$txtScript.val(finalScript);
|
|
};
|
|
|
|
//获取数据库值的字符串
|
|
function getSqlValue(col, row) {
|
|
var value = row[col.fieldName];
|
|
if (col.dataType == Store.Enums.DataType.STRING || Store.Enums.DataType.TEXT) {
|
|
return value == null ? value : "'" + value + "'";
|
|
}
|
|
|
|
if (col.dataType == Store.Enums.DataType.DATETIME) {
|
|
return "sysdate";
|
|
}
|
|
|
|
return value == null ? value : '';
|
|
};
|
|
|
|
function removeComma(str) {
|
|
var len = str[0].length;
|
|
if (str[0][len - 1] == ',') {
|
|
str[0] = str[0].slice(0, -1);
|
|
}
|
|
};
|
|
|
|
|
|
function appendStr(src, str, noDot) {
|
|
src[0] = src[0] + str;
|
|
if (!noDot) {
|
|
src[0] += ',';
|
|
}
|
|
};
|
|
|
|
return Window;
|
|
}) |