| 1 |
- <html>
<head>
<css.ss file="/ss/treedata/zTreeStyle.css"/>
<js.ss file="/ss/jquery/jquery.js"/>
<js.ss file="/ss/treedata/jquery.ztree.all-3.5.js"/>
<!-- 依赖css与js start -->
<css.ss file="/ss/codemirror/docs.css"/>
<css.ss file="/ss/codemirror/codemirror.css"/>
<css.ss file="/ss/codemirror/show-hint.css"/>
<js.ss file="/ss/codemirror/codemirror.js"/>
<js.ss file="/ss/codemirror/anyword-hint.js"/>
<js.ss file="/ss/codemirror/css-hint.js"/>
<js.ss file="/ss/codemirror/show-hint.js"/>
<js.ss file="/ss/codemirror/xml-hint.js"/>
<js.ss file="/ss/codemirror/html-hint.js"/> <!-- 在此文件添加代码提示 -->
<js.ss file="/ss/codemirror/javascript-hint.js"/>
<js.ss file="/ss/codemirror/xml.js"/>
<js.ss file="/ss/codemirror/javascript.js"/>
<js.ss file="/ss/codemirror/css.js"/>
<js.ss file="/ss/codemirror/htmlmixed.js"/>
<js.ss file="/ss/codemirror/codemirror.init.js"/> <%-- 再增加,统一用 initCmEditor(mode)。Lin --%>
<!-- 依赖css与js end -->
</head>
<body>
<%-- 再改,增加文件名称、类别 和 业务名、对象名。Lin
<button onclick='<serv@ss dlg="true" name="pwjbb_cx" dest="pwjbb_list" parm="{pwjid:"${wj.pwjid}"}"/>'>i</button>
--%>
<span> ${wj.mc}</span> <span><cbTrans.ss cb="pwjlb" val="${wj.pwjlbm}"/></span>
<span>${ywmStr}</span> <span>${wj.dxm}(${objDesc})</span>
<input type="button" class="list-button" value="i"
onclick='<serv.ss dlg="true" name="pwjbb_search" dest="pwjbb_list" parm="{pwjid:"${wj.pwjid}"}"/>'/>
<input id="putFileUrl" type="hidden"
value="<serv.ss name='pwj_wrFile' parm='{gzjdid:"${gzjdid}",pwjid:"${wj.pwjid}",pwjbbid:"${wj.zxpwjbbid}"}'/>"/>
<input id="getFileUrl" type="hidden"
value="<serv.ss name='pwj_rdFile' parm='{gzjdid:"${gzjdid}",pwjid:"${wj.pwjid}",pwjbbid:"${wj.zxpwjbbid}"}'/>"/>
<%-- 新的 makeObjXml,这里的 ObjXml 是 对象 的 XML,不是 .obj.xml。Lin --%>
<input id="makeObjXmlUrl" type="hidden"
value="<serv.ss name='pwj_makeObjXml' parm='{pwjlbm:"${wj.pwjlbm}",pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/>
<%-- 再合并成一个,新的 makeObjXml。Lin
<input id="makeServXmlUrl" type="hidden"
value="<serv.ss name='pwj_makeServXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/>
<input id="makePageXmlUrl" type="hidden"
value="<serv.ss name='pwj_makePageXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/>
<input id="makeIchkXmlUrl" type="hidden"
value="<serv.ss name='pwj_makeIchkXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/>
<input id="makeCbXmlUrl" type="hidden"
value="<serv.ss name='pwj_makeCbXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/>
<input id="makeBpmXmlUrl" type="hidden"
value="<serv.ss name='pwj_makeBpmXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/>
--%>
<form id="form" method="post" >
<%-- 先去掉,老是最外层的出纵向滚动条。Lin
<div class='content-div' wdFitHeight="true,top:1"> --%>
<div >
<%-- 再去掉 <table,改用 <div。Lin
<table>
<tr>
<th></th>
<td>
--%><div style="margin:8px 0 16px;">
<%-- 再合并成一个,新的 makeObjXml。Lin
<equal.ss val="${wj.pwjlbm}" val2="110211">
<input id="makeObjXml" type="button" value="生成对象配置" class="bottom-button"/>
</equal.ss>
<equal.ss val="${wj.pwjlbm}" val2="110215">
<input id="makeServXml" type="button" value="生成服务配置" class="bottom-button"/>
</equal.ss>
<equal.ss val="${wj.pwjlbm}" val2="110221">
<input id="makePageXml" type="button" value="生成部件配置" class="bottom-button"/>
</equal.ss>
<equal.ss val="${wj.pwjlbm}" val2="110225">
<input id="makeIchkXml" type="button" value="生成录入校验配置" class="bottom-button"/>
</equal.ss>
<equal.ss val="${wj.pwjlbm}" val2="110235">
<input id="makeCbXml" type="button" value="生成码本配置" class="bottom-button"/>
</equal.ss>
<equal.ss val="${wj.pwjlbm}" val2="110251">
<input id="makeBpmXml" type="button" value="生成流程配置" class="bottom-button"/>
</equal.ss>
--%>
<equal.ss val="${isXml}" val2="true">
<input id="makeObjXml" type="button" value="生成配置文件" class="bottom-button"/>
</equal.ss>
<input id="hotSave" type="button" value="保存" class="bottom-button"/>
<input id="save" type="button" value="提交" class="bottom-button"/>
<%-- 再去掉 <table,改用 <div。Lin
</td>
</tr>
</table>
--%></div>
<div id="code" style="height:590px;width:100%;min-height:400px;max-width: 1024px;float: left;overflow-y:auto;"></div><!-- 代码编辑框 -->
</div>
</form>
</body>
<script>
function attributesCheck(){
var alertResult="";
var result="";
//检查可能属性
/* 改,重写。Lin
var DICTS=["URL","abstract","add","adminNo","agree","archiveName","asc","assignee","author","authorizable","batchField","body","business","button","bycslb","cService","cacheable","captchaLength","card","categoryNo","changeNo","check","child","class","code","codebook","content","date","default","definition","desc","dest","display","displayDesc","disturb","editable","enable","end","enrolDate","exportDesc","exportNo","field","file","fileName","filter","fkey","forEach","format","formula","function","height","hscslb","iService","icon","id","importCode","importKey","importName","key","keyword","keywordNo","lead","length","local","localDesc","longDistancePrefix","menu","miniDate","moreDesc","multiLine","name","necessary","next","no","nullable","number","objClass","object","objectId","objectName","order","outsidePrefix","param","parent","path","percent","print","printNo","process","public","recall","reject","rule","runonstartup","rycol","scope","scopeName","searchNo","searchable","seniority","service","sql","start","statsNo","subject","thumbnail","title","titlecolumn","token","type","validator","value","view","website","width"];
DICTS.push("primary");
DICTS.push("group");
DICTS.push("client");
DICTS.push("objectCode");
DICTS.push("scan");
DICTS.push("smallIcon");
DICTS.push("miniIcon");
DICTS.push("defaultValue");
DICTS.push("redirect");
DICTS.push("listMode");//hierarchical 升级 listMode
DICTS.push("hierarchical");
DICTS.push("defination");
DICTS.push("condition");
DICTS.push("remindNo");
DICTS.push("allowServer");
DICTS.push("setField");
*/
// obj.xml。Lin
/* 再改为动态针对不同的配置文件类型加载。Lin
var DICTS=["biz","name","desc","po","child","search","keyword","order","cat","chgFunc","rootFunc","cb","width","inp","objName","key","def","type"
];
*/ var DICTS=[${allAtr}];
//检查true or false
/* 再改为动态针对不同的配置文件类型加载。Lin
var BOOEANDIC=["racall","nullable","enable","pubilc","primary","cService","objectCode","scan","miniDate","recall","disturb","necessary","abstract","skippable","menu","token","asc","authorizable","body","view","hierarchical","enrolDate","add","thumbnail","check","multiLine","public","cacheable","iService","objectId","editable","forEach","importKey","print","objectName"];
*/ var BOOEANDIC=[${boolAtr}];
/// 再增加 uniqDict、mustField、numDict,不写死 -- 动态针对不同的配置文件类型加载。Lin
var uniqDict = ${uniqAtr};
var mustField=[${mustField}]; // "objName=true"。Lin
var numDict=[${numAtr}];
///
var boolean_result="";
var num_result = "";
var xmlDom=new DOMParser().parseFromString(codemirrorEditor.getValue(),"application/xml");
var aaa=xmlDom.querySelectorAll("*");
var lj='${wj.mc}';
/* 再完全重写,支持动态针对不同的配置文件类型加载。Lin
* 必须有的 Field -- objName=true
* 对 .obj.xml,不允许写 <field objectId="true" 了
* 先去掉 parm 值是否有 ""/'' 的判断,不好判断 -- {buttons:'meeting,scan'} -- 多了 "{"、"}",存在非分隔参数的 ","
* xmlDom.querySelector("field[objName=true]") 总是返回 null,不管写没写 objName="true"
if(/obj.xml$/i.test(lj)){ // (/object.xml$/。Lin
if(!xmlDom.querySelector("field[objectId=true]")){
alertResult+="缺少objectId \r\n";
}
if(!xmlDom.querySelector("field[objName=true]")){ // [objectName=true]。Lin
alertResult+="缺少 objName=\"true\"\r\n";
}
}else if(/serv.xml$/i.test(lj)){ // (/service.xml$/。Lin
var repeatService="";
var temp1={};
var services= xmlDom.querySelectorAll("serv"); // ("service")。Lin
for(var i=0;i<services.length;i++){
var n=services[i].getAttribute("name");
if(!temp1[n]){
temp1[n]=1;
}else{
temp1[n]++;
}
}
for(var key in temp1){
if(temp1[key]==1)continue;
repeatService+=key+" ";
}
if(repeatService){
alertResult+="存在重复服务名:"+ repeatService +"\r\n";
}
}
var names={};
var paramValue=[];
for(var i=0;i<aaa.length;i++){
var attributeNames=aaa[i].getAttributeNames();
for(var j=0;j<attributeNames.length;j++){
names[attributeNames[j]]=1;
var v=aaa[i].getAttribute(attributeNames[j]);
if(attributeNames[j]=="parm"){ // =="param")。Lin
paramValue.push(v);
}
if(v&&$.inArray(attributeNames[j],BOOEANDIC)>-1){ // >0)。应该是 > -1。Lin
if("true"==v||"false"==v){
}else{
boolean_result+=v+" ";
}
}
}
}
for(var key in names){
if($.inArray(key,DICTS)<0){
result+=key+" ";
}
}
if(result.length>0){
console.log(result);
alertResult+="属性名错误:"+ result +"\r\n";
}
if(boolean_result.length>0){
alertResult+="写错 true/false 值:"+ boolean_result +"\r\n";
}
if(paramValue.length>0){
var res="";
for(var i=0;i<paramValue.length;i++){
var v=paramValue[i];
var vv=v.split(",");
var testParam=true;
for(var j=0;j<vv.length;j++){
var vvv=vv[j].split(":")[1];
if(isNaN(vvv)&&!/^\".*\"$/.test(vvv)&&!/^\'.*\'$/.test(vvv)){
testParam=false;
}
}
if(!testParam)
res+=v+" ";
}
if(res.length>0)
alertResult+="parm 值没有加引号:"+ res +"\r\n";
}
*/
///// 完全重写。Lin
var names = {};
var uniqName = {}; // 原 .serv.xml 里的 temp1。Lin
var uniq_result = ""; // 原 .serv.xml 里的 repeatService。Lin
var must_result = "";
/// 初始化 mustAtr、mustVal。Lin
var mustAtr = {}
var mustVal = {}
for (var i = 0; i < mustField.length; i ++) {
var vv = mustField[i].split("=");
mustAtr[vv[0]] = 1;
mustVal[vv[0]] = vv[1];
}
///
for (i = 0; i < aaa.length; i ++) {
var attributeNames = aaa[i].getAttributeNames();
for(var j = 0; j < attributeNames.length; j ++) {
var atrN = attributeNames[j];
names[atrN] = 1;
var v = aaa[i].getAttribute(atrN);
// 检查 true/false 值。Lin
if ($.inArray(atrN, BOOEANDIC) > -1) { // >0)。应该是 > -1。Lin
if (v != "true" && v != "false") {
boolean_result += (atrN +"=\""+ v +"\" ");
}
}
// 检查 数字 值。Lin
if ($.inArray(atrN, numDict) > -1) {
if (!(/^\d+$/.test(v))) {
num_result += (atrN +"=\""+ v +"\" ");
}
}
// 收集 uniqAtr 值。Lin
if (v && atrN == uniqDict) {
if (!uniqName[v]) {
uniqName[v] = 1;
} else {
uniqName[v]++;
}
}
// 收集 mustField 值。Lin
if (v) {
for (var mustA in mustAtr) {
if (atrN == mustA) {
vv = mustVal[mustA].split(",");
for (var k = 0; k < vv.length; k ++) {
if (v == vv[k]) {
mustAtr[mustA] = 0;
break;
}
}
}
}
}
///
}
}
// 判断 allAtr。Lin
for (var key in names) {
if ($.inArray(key,DICTS) < 0) {
result += key +" ";
}
}
if (result.length > 0) {
alertResult += "属性名错误:"+ result +"\r\n";
}
// 判断 boolAtr。Lin
if (boolean_result.length > 0) {
alertResult += "写错 true/false 值:"+ boolean_result +"\r\n";
}
// 判断 numAtr。Lin
if (num_result.length > 0) {
alertResult += "写错 数字 值:"+ num_result +"\r\n";
}
// 判断 uniqAtr。Lin
for (var uniqKey in uniqName){
if (uniqName[uniqKey] == 1)
continue;
uniq_result += uniqKey +" ";
}
if (uniq_result.length > 0) {
alertResult+="存在重复名:"+ uniq_result +"\r\n";
}
// 判断 mustField。Lin
for (mustA in mustAtr) {
if (mustAtr[mustA] == 0)
continue;
must_result += mustA +"=\""+ mustVal[mustA] +"\" ";
}
if (must_result.length > 0) {
alertResult+="缺少属性值:"+ must_result +"\r\n";
}
/////
if (alertResult.length > 0)
return confirm(alertResult);
return true;
}
$(function(){
/* 再统一用 initCmEditor(mode)。Lin
* 改为 "xml"
codemirrorEditor = CodeMirror(document.getElementById("code"), {
mode: "text/html",
lineNumbers: true
});
*/ initCmEditor("xml");
var url=document.querySelector("#getFileUrl").value;
$.post(url,function(data){
if(data.type!=1){
alert(data.msg);
return ;
}
codemirrorEditor.setValue(data.content);
},"json")
$("#makeObjXml").on("click",function(){
var url = document.querySelector("#makeObjXmlUrl").value;
makeCont(url);
})
$("#makeServXml").on("click",function(){
var url = document.querySelector("#makeServXmlUrl").value;
makeCont(url);
})
$("#makePageXml").on("click",function(){
var url = document.querySelector("#makePageXmlUrl").value;
makeCont(url);
})
$("#makeIchkXml").on("click",function(){
var url = document.querySelector("#makeIchkXmlUrl").value;
makeCont(url);
})
$("#makeCbXml").on("click",function(){
var url = document.querySelector("#makeCbXmlUrl").value;
makeCont(url);
})
$("#makeBpmXml").on("click",function(){
var url = document.querySelector("#makeBpmXmlUrl").value;
makeCont(url);
})
function makeCont(url) {
$.post(url,function(data) {
if (data.type != 1) {
alert(data.msg);
return ;
}
codemirrorEditor.setValue("");
codemirrorEditor.clearHistory();
codemirrorEditor.setValue(data.content);
},"json");
}
$("#save").on("click",function(){
if(new DOMParser().parseFromString(codemirrorEditor.getValue(),"application/xml").getElementsByTagName("parsererror").length>0){
wd.display.fixationAlert("xml parse error");
return;
}
if(!attributesCheck()){
return;
}
// wd.display.fixationAlert(codemirrorEditor.getValue()); // 去掉,混淆了重要的信息。Lin
wd.display.fixationAlert("提交");
var url=document.querySelector("#putFileUrl").value;
var param={content:codemirrorEditor.getValue()};
$.post(url,param,function(data){
if(data.type==1){
wd.display.fixationAlert("提交成功!");
/* 去掉 check < wd.completeTask < wd.core.service.BpmService.completeTask() + sfty:"1",直接用 ss.agrTask。Lin
window.location.href='@service{name:"check",dest:"sys_info",param:{shid:"${shid}",sfty:"1"}}@';
*/ window.location.href="<serv.ss name='ss.agrTask' dest='info' parm='{shid:"${shid}"}'/>";
}else{
// alert(data.msg);
wd.display.confirm({width:400,height:300,title:"保存异常",msg:data.msg,callback:function(){wd.display.alert("got it!");}});
}
},"json");
})
$("#hotSave").on("click",function(){
if(new DOMParser().parseFromString(codemirrorEditor.getValue(),"application/xml").getElementsByTagName("parsererror").length>0){
wd.display.fixationAlert("xml parse error");
return;
}
if(!attributesCheck()){
return;
}
// wd.display.fixationAlert(codemirrorEditor.getValue()); // 去掉,混淆了重要的信息。Lin
wd.display.fixationAlert("保存");
var url=document.querySelector("#putFileUrl").value;
var param={content:codemirrorEditor.getValue()};
$.post(url,param,function(data){
if(data.type==1){
wd.display.fixationAlert("保存成功!");
wd.display.closeDialog();
}else{
// alert(data.msg);
wd.display.confirm({width:400,height:300,title:"保存异常",msg:data.msg,callback:function(){wd.display.alert("got it!");}});
}
},"json");
})
})
$.post("<serv.ss name='pwj_rdFileState' parm='{gzjdid:"${gzjdid}",pwjid:"${wj.pwjid}"}'/>",function(res){
if(res.length>0){
/* 去掉,多余的 -- 标题已有。Lin
var alertmsg="正在修改:\r\n";
*/ var alertmsg="";
for(var i=0;i<res.length;i++){
/* 再改 List<Map<String, Object>> 为 List<Object>,只返回一个字段值(mc) -- Db.doSelMapListByC( 改为 .doSelListByC(。Lin
alertmsg+="<h5>"+res[i]["mc"]+"</h5>";
*/
/* 再改回,去掉 to_char(sj,,直接输出 sj(Timestamp),在页面生成 -- SqlCmd.init( 里,去掉拆分 "'" -- SQL 的 '' 字符串里,不能有 :。Lin
alertmsg+="<h5>"+res[i]+"</h5>";
*/ alertmsg+="<h5>"+res[i]["mc"]+res[i]["sj"]+"</h5>";
}
// alert(alertmsg);
wd.display.confirm({width:400,height:300,title:"正在修改:",msg:alertmsg,callback:function(){wd.display.alert("got it!");}});
}
},"json");
</script>
</html>
|