From 3dfe7d4be26b4b57e9848320caa8697e1f31b8e7 Mon Sep 17 00:00:00 2001
From: zhangyanpeng <bob.zhang@highdatas.com>
Date: 星期一, 26 八月 2024 15:32:13 +0800
Subject: [PATCH] 调整

---
 module/config/page/sys_menu_edit.html    |  428 +++++++++++++++++++++++-----
 module/model/page/popup_form_simple.html |  434 ++++++++++++++++++++++++++++
 module/model/model_iframe.html           |    8 
 module/model/page/table_simple.html      |   24 +
 4 files changed, 804 insertions(+), 90 deletions(-)

diff --git a/module/config/page/sys_menu_edit.html b/module/config/page/sys_menu_edit.html
index 72bbaf7..6d1abf3 100644
--- a/module/config/page/sys_menu_edit.html
+++ b/module/config/page/sys_menu_edit.html
@@ -22,7 +22,15 @@
 						isTreeReadonly: false,
 						
 						form_dataname: "sys_menu",
-						// formAttr: {},
+						formAttr: {
+							istitle: false,
+							title: "琛ㄥ崟鍚嶇О",
+							columnnumber: 3,
+							labelwidth: "80px",
+							labelposition: "left",//"left",// right//top
+							size: "mini",
+							border: "0px solid #c6c6c600"
+						},
 						formFields: [],
 						formData: {
 							parent_id: []
@@ -41,9 +49,17 @@
 								label:"name",//鏄笅鎷夐�夐」鏃惰缃�
 							},
 							{
-								name: "sys_model",
+								name: "modelByPage",
 								dataname: "sys_model",
-								filter: "",
+								filter: "is_detail='F'",
+								isnotoption: false, //true:涓嶆槸閫夐」
+								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+								label:"name",//鏄笅鎷夐�夐」鏃惰缃�
+							},
+							{
+								name: "modelBydetail",
+								dataname: "sys_model",
+								filter: "is_detail='T'",
 								isnotoption: false, //true:涓嶆槸閫夐」
 								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
 								label:"name",//鏄笅鎷夐�夐」鏃惰缃�
@@ -53,8 +69,10 @@
 						options_menutree: [],
 						options_menumap: {},
 						options_model: [],
+						options_model_detail: [],
 						options_buttons: [],
 						pagebuttonmap: {},
+						modelbuttonmap: {},
 						
 						pagesize_p: 10,
 						pagenum_p: 1,
@@ -70,40 +88,41 @@
 							{isshow: "T", field: "icon", labelchinese: "鑿滃崟鍥炬爣", inputtype: "popup", optionsgroup: "", group_name: "鑿滃崟淇℃伅"},
 							{isshow: "T", field: "url", labelchinese: "鍦板潃", inputtype: "", optionsgroup: "", group_name: "鑿滃崟淇℃伅"},
 							
-							{isshow: "T", field: "model_id", labelchinese: "妯″瀷閫夋嫨", inputtype: "select", optionsgroup: "", colspan: 2, group_name: "椤甸潰閰嶇疆"},
 							{isshow: "T", field: "page_title", labelchinese: "椤甸潰鏍囬", inputtype: "", optionsgroup: "", group_name: "椤甸潰閰嶇疆"},
-							{isshow: "T", field: "dataname", labelchinese: "鏁版嵁瀵硅薄", inputtype: "", optionsgroup: "", group_name: "椤甸潰閰嶇疆"},
-							{isshow: "T", field: "buttons", labelchinese: "閫夋嫨鍔熻兘", inputtype: "checkboxobj", optionsgroup: "", group_name: "椤甸潰閰嶇疆"},
+							{isshow: "T", field: "model_id", labelchinese: "妯″瀷閫夋嫨", inputtype: "select", optionsgroup: "", colspan: 1, group_name: "椤甸潰閰嶇疆", buttonarrayname: [{type: "", buttonname:"妯″瀷缁存姢", icon: "", code:"showfile", classname: "form_showfile"}]},
+							{isshow: "T", field: "dataname", labelchinese: "鏁版嵁瀵硅薄", inputtype: "", optionsgroup: "", group_name: "椤甸潰閰嶇疆", buttonarrayname: [{type: "", buttonname:"瀵硅薄缁存姢", icon: "", code:"showfile", classname: "form_showfile"}]},
+							{isshow: "T", field: "buttons", labelchinese: "鍔熻兘閫夋嫨", inputtype: "checkboxobj", optionsgroup: "", colspan: 2, group_name: "椤甸潰閰嶇疆"},
+							{isshow: "T", field: "detail_model_id", labelchinese: "璇︽儏妯″瀷閫夋嫨", inputtype: "select", optionsgroup: "", colspan: 2, group_name: "椤甸潰閰嶇疆", labelwidth: "120", visiblefilterrule: "buttons锛欰dd銆丒dit銆丗ormDetail"},
 						],
 						
 						tableFields_table: [
-							{isshow: "T", field: "field", labelchinese: "瀛楁", width: "130", isfixed: "left", align: "left"},
-							{isshow: "T", field: "labelchinese", labelchinese: "涓枃鍚嶇О",inputtype: "input", width: "130", isfixed: "left"},
+							{isshow: "T", field: "field_name", labelchinese: "瀛楁", width: "130", isfixed: "left", align: "left"},
+							{isshow: "T", field: "label_chinese", labelchinese: "涓枃鍚嶇О",inputtype: "input", width: "130", isfixed: "left"},
 							{isshow: "T", field: "is_list", labelchinese: "鏄惁鏄剧ず",inputtype: "ischeckbox"},
-							{isshow: "T", field: "isfilter", labelchinese: "鏄惁鏌ヨ",inputtype: "ischeckbox"},
+							{isshow: "T", field: "is_filter", labelchinese: "鏄惁鏌ヨ",inputtype: "ischeckbox"},
 							{isshow: "T", field: "list_order_no", labelchinese: "椤哄簭",inputtype: "number"},
 							{isshow: "T", field: "width", labelchinese: "瀹藉害",inputtype: "input"},
-							{isshow: "T", field: "isminwidth", labelchinese: "鏄惁鏈�灏忓搴�",inputtype: "ischeckbox", width: "100"},
+							{isshow: "T", field: "is_min_width", labelchinese: "鏄惁鏈�灏忓搴�",inputtype: "ischeckbox", width: "100"},
 							{isshow: "T", field: "formatter", labelchinese: "鏍煎紡鍖�",inputtype: "select", optionsgroup: "formatterEvent", width: "150"},
-							{isshow: "T", field: "formatpattern", labelchinese: "鏍煎紡鍖栧弬鏁�",inputtype: "input", width: "150"},
+							{isshow: "T", field: "format_pattern", labelchinese: "鏍煎紡鍖栧弬鏁�",inputtype: "input", width: "150"},
 							{isshow: "T", field: "align", labelchinese: "瀵归綈鏂瑰紡",inputtype: "select", optionsgroup: "dataAlign", width: "150"},
 							{isshow: "F", field: "last_update_time", labelchinese: "鏇存柊鏃堕棿"},
-							{isshow: "T", field: "tablegroupname", labelchinese: "琛ㄥご鍒嗙粍鍚�",inputtype: "input"},
+							{isshow: "T", field: "table_group_name", labelchinese: "琛ㄥご鍒嗙粍鍚�",inputtype: "input", width: "150"},
 							
 						],
 						tableFields_form: [
-							{isshow: "T", field: "field", labelchinese: "瀛楁", width: "130", isfixed: "left", align: "left"},
-							{isshow: "T", field: "labelchinese", labelchinese: "涓枃鍚嶇О",inputtype: "input", width: "130", isfixed: "left"},
+							{isshow: "T", field: "field_name", labelchinese: "瀛楁", width: "130", isfixed: "left", align: "left"},
+							{isshow: "T", field: "label_chinese", labelchinese: "涓枃鍚嶇О",inputtype: "input", width: "130", isfixed: "left"},
 							{isshow: "T", field: "is_form", labelchinese: "鏄惁鏄剧ず", inputtype: "ischeckbox"},
-							{isshow: "T", field: "inputtype", labelchinese: "杈撳叆绫诲瀷", inputtype: "select", optionsgroup: "inputType", width: "150"},
-							{isshow: "T", field: "optionsgroup", labelchinese: "閫夐」瀛楀吀", inputtype: "select", optionsgroup: "dictionary"},
+							{isshow: "T", field: "input_type", labelchinese: "杈撳叆绫诲瀷", inputtype: "select", optionsgroup: "inputType", width: "150"},
+							{isshow: "T", field: "options_key", labelchinese: "閫夐」瀛楀吀", inputtype: "select", optionsgroup: "dictionary"},
 							{isshow: "T", field: "list_order_no", labelchinese: "椤哄簭",inputtype: "number"},
-							{isshow: "T", field: "required", labelchinese: "鏄惁蹇呭~",inputtype: "ischeckbox"},
+							{isshow: "T", field: "is_required", labelchinese: "鏄惁蹇呭~",inputtype: "ischeckbox"},
 							{isshow: "T", field: "colspan", labelchinese: "鍚堝苟鍒楁暟",inputtype: "input"},
 							{isshow: "T", field: "formatter", labelchinese: "鏍煎紡鍖�",inputtype: "select", optionsgroup: "formatterEvent", width: "150"},
-							{isshow: "T", field: "formatpattern", labelchinese: "鏍煎紡鍖栧弬鏁�",inputtype: "input", width: "150"},
+							{isshow: "T", field: "format_pattern", labelchinese: "鏍煎紡鍖栧弬鏁�",inputtype: "input", width: "150"},
 							{isshow: "F", field: "last_update_time", labelchinese: "鏇存柊鏃堕棿"},
-							{isshow: "T", field: "group_name", labelchinese: "琛ㄥご鍒嗙粍鍚�"},
+							{isshow: "T", field: "form_group_name", labelchinese: "瀛楁鍒嗙粍鍚�",inputtype: "input", width: "150"},
 						],
 						tableFields: [],
 						tableData: [],
@@ -135,11 +154,14 @@
 									var sys_menunotpagetree = ArrayToTree(clone(sys_menunotpage_), "title", "parent_id");
 									me.options_menutree = clone(sys_menunotpagetree);
 								}
-								if (me.dataRequestObj.sys_model) {
-									var sys_model_ = clone(me.dataRequestObj.sys_model);
+								if (me.dataRequestObj.modelByPage) {
+									var sys_model_ = clone(me.dataRequestObj.modelByPage);
 									me.options_model = clone(sys_model_);
 								}
-								
+								if (me.dataRequestObj.modelBydetail) {
+									var sys_model_ = clone(me.dataRequestObj.modelBydetail);
+									me.options_model_detail = clone(sys_model_);
+								}
 								
 								me.initData();
 							});
@@ -174,7 +196,9 @@
 								var row = me.treeData[0];
 								// me.$refs.table1.setCurrentRow(row)
 								me.selectNodeData = clone(row);
-								me.formData = row;
+								let row_ = clone(row);
+								row_.buttons = []
+								me.formData = row_;
 								me.isRefresh = false;
 								me.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
 									me.defaultexpandedkeys = [me.formData.id];
@@ -212,17 +236,6 @@
 							var me = this;
 							var metas = clone(me.page_metas);
 							var formFields_ = [];
-							/* 
-							page_metas: [
-								{isshow: "T", field: "title", labelchinese: "鑿滃崟鍚嶇О", inputtype: "", optionsgroup: "", group_name: "鑿滃崟淇℃伅"},
-								{isshow: "T", field: "url", labelchinese: "璺緞", inputtype: "", optionsgroup: "", group_name: "鑿滃崟淇℃伅"},
-								
-								{isshow: "T", field: "model_id", labelchinese: "妯″瀷閫夋嫨", inputtype: "select", optionsgroup: "", colspan: 2, group_name: "椤甸潰閰嶇疆"},
-								{isshow: "T", field: "page_title", labelchinese: "椤甸潰鏍囬", inputtype: "", optionsgroup: "", group_name: "椤甸潰閰嶇疆"},
-								{isshow: "T", field: "dataname", labelchinese: "鏁版嵁瀵硅薄", inputtype: "", optionsgroup: "", group_name: "椤甸潰閰嶇疆"},
-								{isshow: "T", field: "buttons", labelchinese: "閫夋嫨鍔熻兘", inputtype: "checkbox", optionsgroup: "", group_name: "椤甸潰閰嶇疆"},
-							] 
-							*/
 							metas.map(f=>{
 								f.isshow = "T";
 								if (f.field == "parent_id") {
@@ -233,27 +246,36 @@
 									// f.props = {value: "id", label: "title", checkStrictly: true};
 									f.options = me.options_model;
 								}
+								if (f.field == "detail_model_id") {
+									f.options = me.options_model_detail;
+								}
 								if (f.field == "buttons") {
 									f.options = clone(me.options_buttons);
 								}
 								
 								formFields_.push(clone(f));
 							})
-							// if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
 							me.formFields = clone(formFields_);
-							// }
 							me.formFieldClick();
 						},
 						getPageData(page_id) {
+							var me = this;
+							// 鑾峰彇椤甸潰鎸夐敭
+							this.getPageButtons(page_id, function() {
+								me.doGetPageData(page_id);
+							});
+						},
+						doGetPageData(page_id) {
 							var me = this;
 							// 鑾峰彇椤甸潰瀵瑰簲妯″瀷
 							this.getPageData_model(page_id, function(pagemodel) {
 								if (pagemodel && pagemodel.model_id) {
 									var formData_ = clone(me.formData);
+									formData_.page_model_id = pagemodel.id
 									formData_.model_id = pagemodel.model_id
-									formData_.page_title = pagemodel.title
+									formData_.detail_model_id = pagemodel.detail_model_id
+									formData_.page_title = pagemodel.title ? pagemodel.title : formData_.title
 									formData_.dataname = pagemodel.dataname
-									formData_.buttons = []
 									
 									me.formData = clone(formData_);
 									me.scene_type = pagemodel.sys_model__scene_type;
@@ -263,7 +285,7 @@
 										me.getPageMeta();
 									});
 									if (formData_.dataname) {
-										me.getTableData(formData_.dataname, pagemodel.sys_model__scene_type);
+										me.getTableData(formData_.dataname, me.scene_type);
 									}
 									else {
 										me.tableFields = [];
@@ -273,7 +295,7 @@
 								else {
 									var formData_ = clone(me.formData);
 									formData_.model_id = ""
-									formData_.page_title = ""
+									formData_.page_title = formData_.title
 									formData_.dataname = ""
 									formData_.buttons = []
 									
@@ -285,10 +307,8 @@
 								}
 								
 							});
-							// 鑾峰彇椤甸潰鎸夐敭
-							me.getPageButtons(page_id);
 						},
-						getPageButtons(page_id) {
+						getPageButtons(page_id, callback) {
 							var me = this;
 							let param_ = {
 								dataname: "sys_page_button",//鑾峰彇缁忛攢鍟嗗搴旀敹璐у湴鍧�
@@ -297,20 +317,22 @@
 							Server.call("root/data/getEntitySet", param_, function(result) {
 								var pagebuttons = []
 								var pagebuttonmap = {}
+								if (!pagebuttonmap[page_id]) {
+									pagebuttonmap[page_id] = {}
+								}
 								if (result && result.data && result.data.entityset && result.data.entityset.length) {
 									result.data.entityset.map(r=>{
-										if (!pagebuttonmap[page_id]) {
-											pagebuttonmap[page_id] = {}
-										}
 										pagebuttonmap[page_id][r.code] = r.id;
-										
 										pagebuttons.push(r.code)
 									})
-									
-									me.pagebuttonmap = clone(pagebuttonmap);
-									var formData_ = clone(me.formData)
-									formData_.buttons = pagebuttons
-									me.formData = clone(formData_);
+								}
+								me.pagebuttonmap = clone(pagebuttonmap);
+								var formData_ = clone(me.formData)
+								formData_.buttons = pagebuttons
+								me.formData = clone(formData_);
+								
+								if (callback) {
+									callback()
 								}
 							});
 						},
@@ -339,21 +361,23 @@
 							}
 							Server.call("root/data/getEntitySet", param_, function(result) {
 								var modelbuttons = []
+								var modelbuttonmap = {};
 								if (result && result.data && result.data.entityset && result.data.entityset.length) {
 									result.data.entityset.map(r=>{
 										let b_ = {
 											code: r.parameter_code,
 											value: r.parameter_name,
 										}
+										modelbuttonmap[b_.code] = b_.value
 										modelbuttons.push(b_)
 									})
 								}
-								
+								me.modelbuttonmap = clone(modelbuttonmap);
 								callback(modelbuttons);
 							});
 						},
 						
-						getTableData(dataname, scene_type) {
+						getTableData_mate(dataname, scene_type) {
 							var me = this;
 							var interface_ = "getEntitySet"
 							if (scene_type == "table") {
@@ -380,6 +404,63 @@
 								me.tableData = clone(tableData)
 							});
 						},
+						getTableData(dataname, scene_type) {
+							var me = this;
+							if (scene_type == "table") {
+								interface_ = "getEntitySet"
+								this.tableFields = clone(this.tableFields_table)
+							}
+							else {
+								interface_ = "getEntity"
+								this.tableFields = clone(this.tableFields_form)
+							}
+							
+							this.tableloading = true;
+							let param_p = {
+								dataname: "sys_data_property",//鑾峰彇缁忛攢鍟嗗搴旀敹璐у湴鍧�
+								filter: "dataname='" + dataname + "'",
+								orderby: "is_list desc, list_order_no"
+							}
+							Server.call("root/data/getEntitySet", param_p, function(result_p) {
+								let param_f = {
+									dataname: "sys_data_field",//鑾峰彇缁忛攢鍟嗗搴旀敹璐у湴鍧�
+									filter: "dataname='" + dataname + "'",
+								}
+								Server.call("root/data/getEntitySet", param_f, function(result_f) {
+									let table_p = []
+									let table_f_map = {}
+									if (result_p && result_p.data && result_p.data.entityset) {
+										table_p = result_p.data.entityset;
+									}
+									if (result_f && result_f.data && result_f.data.entityset) {
+										let table_f = result_f.data.entityset;
+										table_f.map(tf=> {
+											table_f_map[tf.field_name] = tf
+										})
+									}
+									table_p.map(tp=>{
+										if (table_f_map[tp.field_name]) {
+											let tf_ = table_f_map[tp.field_name];
+											
+											tp.field_id = tf_.id;
+											tp.input_type = tf_.input_type;
+											tp.options_key = tf_.options_key;
+											tp.formatter = tf_.formatter;
+											tp.format_pattern = tf_.format_pattern;
+											tp.align = tf_.align;
+											tp.label_chinese = tp.label_chinese ? tp.label_chinese : tf_.label_chinese;
+											tp.label_english = tp.label_english ? tp.label_english : tf_.label_english;
+										}
+										else {
+											tp.label_chinese = tp.label_chinese ? tp.label_chinese : tp.field_name;
+											tp.label_english = tp.label_english ? tp.label_english : tp.field_name;
+										}
+									})
+									me.tableloading = false;
+									me.tableData = clone(table_p)
+								})
+							});
+						},
 						
 						//鑺傜偣鐐瑰嚮锛岀粰鍙宠竟璧嬪��
 						onNodeClick(obj) {
@@ -392,6 +473,9 @@
 								
 								data_.parent_id = parent_ids
 							}
+							data_.buttons = []
+							data_.detail_model_id = ""
+							
 							this.formData = data_;
 							
 							this.options_buttons = []
@@ -532,6 +616,37 @@
 								},
 								
 								model_id: {
+									buttonarray: {
+										onclick: function(obj) {
+											
+										},
+									},
+									visible: {
+										onchange: function(obj,row,callback) { //涓嬫媺灞曞紑浜嬩欢
+											let param_ = {
+												dataname: "sys_model",//鑾峰彇缁忛攢鍟嗗搴旀敹璐у湴鍧�
+												filter:"is_detail='F'",
+											}
+											Server.call("root/data/getEntitySet", param_, function(result) {
+												if (result && result.data && result.data.entityset) {
+													var options_ = []
+													result.data.entityset.map(r=>{
+														var option_ = clone(r);
+														option_.code = r.id;
+														option_.value = r.name;
+														options_.push(option_)
+													})
+													var formFields_ = clone(me.formFields)
+													formFields_.map(f=>{
+														if(f.field == "model_id") {
+															f.options = options_
+														}
+													})
+													me.formFields = clone(formFields_)
+												}
+											});
+										}
+									},
 									select: {
 										onchange: function(obj,refreshCallback) {//涓嬫媺灞曞紑浜嬩欢
 											console.log("model_id 閫夋嫨");
@@ -652,50 +767,196 @@
 						
 						saveRowTable() {
 							var me = this;
-							var operator_ = "save";//淇濆瓨
-							
 							var entity_ = clone(this.formData);
-							var entity = {};
-							for (var r in entity_) {
-								if (r == "parent_id") {
-									if (entity_[r] && entity_[r].length) {
-										entity[r] = entity_[r][entity_[r].length - 1];
+							var entity_menu = {
+								id: entity_.id,
+								parent_id: entity_.parent_id,
+								icon: entity_.icon,
+								title: entity_.title
+							};
+							var entity_page = {
+								id: entity_.page_id,
+								url: entity_.url,
+							};
+							var entity_page_model = {
+								id: entity_.page_model_id ? entity_.page_model_id : null,
+								page_id: entity_.page_id,
+								model_id: entity_.model_id,
+								title: entity_.page_title,
+								dataname: entity_.dataname,
+								detail_model_id: entity_.detail_model_id
+							};
+							
+							var entity_page_button_add = [];
+							var entity_page_button_del = [];
+							if (entity_.buttons && entity_.buttons.length) {
+								entity_.buttons.map(b=>{
+									if (me.pagebuttonmap[entity_.page_id] && !me.pagebuttonmap[entity_.page_id][b]) {
+										let page_button_ = {
+											page_id: entity_.page_id,
+											code: b,
+											title: me.modelbuttonmap[b],
+											is_active: "T"
+										}
+										entity_page_button_add.push(page_button_)
+									}
+									else if(!me.pagebuttonmap[entity_.page_id]) {
+										let page_button_ = {
+											page_id: entity_.page_id,
+											code: b,
+											title: me.modelbuttonmap[b],
+											is_active: "T"
+										}
+										entity_page_button_add.push(page_button_)
+									}
+								})
+							}
+							if(this.pagebuttonmap[entity_.page_id]) {
+								for (var b_code in this.pagebuttonmap[entity_.page_id]) {
+									if (entity_.buttons && entity_.buttons.includes(b_code)) {
+										
 									}
 									else {
-										entity[r] = null;
+										let id = this.pagebuttonmap[entity_.page_id][b_code];
+										entity_page_button_del.push(id)
 									}
 								}
-								else if (entity_[r] || entity_[r] ==  "" || entity_[r] == false || entity_[r] == 0) {
-									entity[r] = entity_[r];
-								}
 							}
 							
+							var entity_data_field = [];
+							var entity_data_property = [];
+							var datetime_ = dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss")
+							this.tableData.map(r=>{
+								if (r.field_id) {
+									var field_ = {
+										id: r.field_id ? r.field_id : null,
+										formatter: r.formatter ? r.formatter : null,
+										format_pattern: r.format_pattern ? r.format_pattern : null,
+										align: r.align ? r.align : null,
+										last_update_time: datetime_,
+										input_type: r.input_type ? r.input_type : null,
+										options_key: r.options_key ? r.options_key : null,
+									}
+									entity_data_field.push(field_);
+								}
+								
+								var property_ = {
+									id: r.id ? r.id : null,
+									last_update_time: datetime_,
+									label_chinese: r.label_chinese,
+									is_list: r.is_list ? r.is_list : false,
+									is_filter: r.is_filter ? r.is_filter : false,
+									list_order_no: r.list_order_no ? r.list_order_no : 0,
+									form_order_no: r.form_order_no ? r.form_order_no : 0,
+									width: r.width ? r.width : 100,
+									is_min_width: r.is_min_width ? r.is_min_width : false,
+									table_group_name: r.table_group_name ? r.table_group_name : null,
+									form_group_name: r.form_group_name ? r.form_group_name : null,
+									is_required: r.is_required ? r.is_required : false,
+									colspan: r.colspan ? r.colspan : null,
+								}
+								
+								entity_data_property.push(property_);
+							})
+							
+							
+							/*
+							 sys_menu
+							 sys_page
+							 sys_page_model
+							 */
+							this.saveData("sys_menu", entity_menu, function() {
+								me.saveData("sys_page", entity_page, function() {
+									me.onRefreshCacheByPageId(entity_page.id, function(){
+										if (entity_page_model.model_id) {
+											me.saveData("sys_page_model", entity_page_model, function() {
+												Root.message({
+													type: 'success',
+													message: '淇濆瓨鎴愬姛'
+												});
+												me.getMenuAll();
+											});
+										}
+										else {
+											Root.message({
+												type: 'success',
+												message: '淇濆瓨鎴愬姛'
+											});
+											me.getMenuAll();
+										}
+									})
+								});
+							});
+							
+							/* 
+							sys_page_button
+							sys_data_field
+							sys_data_property
+							var entity_page_button_add = [];
+							var entity_page_button_del = [];
+							var entity_data_field = [];
+							var entity_data_property = [];
+							 */
+							entity_page_button_add.map(ba=>{
+								me.saveData("sys_page_button", ba, function() {
+								})
+							})
+							entity_data_field.map(df=>{
+								me.saveData("sys_data_field", df, function() {
+								})
+							})
+							entity_data_property.map(dp=>{
+								me.saveData("sys_data_property", dp, function() {
+								})
+							})
+							
+							entity_page_button_del.map(bd=>{
+								me.delData("sys_page_button", bd, function() {
+								})
+							})
+						},
+						 
+						saveData(dataname, data, callback) {
+							var me = this;
 							let param = {
-								dataname: this.dataname,
-								// operator: operator_,
+								dataname: dataname,
 								data: {},
 							}
-							param.data[this.dataname] = entity;
-							
+							param.data[dataname] = data;
+							if (data.id) {
+								param.id = data.id
+							}
 							Server.call("root/data/saveEntity", param, function(result) {
 								console.log(result);
 								if (result.success) {
-									if (me.iscommit) {
-										me.iscommit = false;
-										Root.message({
-											type: 'success',
-											message: '鎻愪氦鎴愬姛'
-										}); 
-									}
-									else {
-										Root.message({
-											type: 'success',
-											message: '淇濆瓨鎴愬姛'
-										}); 
+									if (callback) {
+										callback()
 									}
 								}
-								
-								me.getMenuAll();
+							});
+						},
+						
+						delData(dataname, id) {
+							let param = {
+								id: id,
+								dataname: dataname,
+							}
+							Server.call("root/data/deleteEntity", param, function(result) {
+							});
+						},
+						
+						// 鍒锋柊缂撳瓨
+						onRefreshCacheByPageId(PageId, callback) {
+							var me = this;
+							let param_ = {
+								page_id: PageId
+							}
+							Server.call("root/system/reloadMenuByPage", param_, function(result) {
+								if (result.success) {
+									if (callback) {
+										callback()
+									}
+								}
 							});
 						},
 
@@ -704,6 +965,7 @@
 								this.$refs[data.id].style.display = isShow ? '' : 'none';
 							}
 						},
+						
 					}
 				});
 			};
diff --git a/module/model/model_iframe.html b/module/model/model_iframe.html
index 8a5ba66..b5d8b00 100644
--- a/module/model/model_iframe.html
+++ b/module/model/model_iframe.html
@@ -86,8 +86,11 @@
 					
 					methods:{
 						initData() {
-							if (this.sys_page_model.sys_model__url.substring(0, 18) == "module/model/page/") {
-								this.iframe_url = "./page/" + this.sys_page_model.sys_model__url.substring(18);
+							// if (this.sys_page_model.sys_model__url.substring(0, 18) == "module/model/page/") {
+							// 	this.iframe_url = "./page/" + this.sys_page_model.sys_model__url.substring(18);
+							// }
+							if(this.sys_page_model.sys_model__url.substring(0, 7) == "module/") {
+								this.iframe_url = window.top.config.url_page + this.sys_page_model.sys_model__url;
 							}
 							else {
 								this.iframe_url = this.sys_page_model.sys_model__url
@@ -154,7 +157,6 @@
 	<body style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;">
 		<div v-cloak id="vbody">
 			<div id="page_root">
-				<div>aaa</div>
 				<div style="position: absolute; top: 0px; bottom: 5px; left: 0; right: 0;">
 					<iframe :src="iframe_url" style="width: 100%; height: 100%;" frameborder="0"></iframe>
 				</div>
diff --git a/module/model/page/popup_form_simple.html b/module/model/page/popup_form_simple.html
new file mode 100644
index 0000000..15c7a82
--- /dev/null
+++ b/module/model/page/popup_form_simple.html
@@ -0,0 +1,434 @@
+<!doctype html>
+<html>
+	<head>
+		<meta charset="utf-8"><meta http-equiv="Expires" content="0"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-control" content="no-cache"><meta http-equiv="Cache" content="no-cache">
+		<title>绠�鍗曡鎯呮ā鍨�</title>
+		
+		<script type="text/javascript">
+			var pageVue = null;
+			function loadJsCss(callback) {
+				var jscss_urls = [];
+				window.top.initJsCss(document, jscss_urls, callback);
+			};
+			
+			function initVue() {
+				new FormVue({
+					el: "#vbody",
+					data: {
+						dataname: "",
+						title: "绠�鍗曡鎯呮ā鍨�",
+						dataRequest: [],
+						formAttr: {
+							istitle: false,
+							title: "琛ㄥ崟鍚嶇О",
+							columnnumber: 2,
+							labelwidth: "100px",
+							labelposition: "left",//"left",// right//top
+							size: "mini",
+							border: "10px solid #c6c6c600",
+							borderleft: "0px"
+						},
+						formFields: [],
+						
+						newformData: {},
+						formData: {},
+						
+						//鎸夐敭鏉冮檺璁剧疆
+						isedit: false,//鎻愪氦鍓嶇紪杈戯紝淇濆瓨/鎻愪氦
+						isrefuseedit: false,//鎷掔粷鍚庣紪杈戯紝淇濆瓨/鍐嶆鎻愪氦
+						isapproval: false,//瀹℃壒锛屽悓鎰�/鎷掔粷/杞姙/閫�鍥�
+						
+						iscommit: false,//鎻愪氦鏍囪
+						
+						//寮圭獥鍙傛暟
+						popupParames: {},
+						//瀛楁璁剧疆
+						tablefieldClick: {},
+						formfieldClick: {},
+						dheight: null,
+						
+						//瀹℃壒鐩稿叧鍙橀噺
+						reasonvisible:false,//瀹℃壒閫氳繃鎴栨嫆缁濆~鍐欏師鍥�
+						approveremark: '',//濉啓鐞嗙敱
+						passOrRefuse:false,
+						loading_pass: false,
+					},
+					created() {
+						this.popupParames = clone(Root.popupParames);
+						this.title = this.popupParames.title || this.popupParames.text
+						if (this.popupParames.data) {
+							this.formData = clone(this.popupParames.data);
+						}
+						if (this.popupParames.dataname) {
+							this.dataname = clone(this.popupParames.dataname);
+						}
+						if (this.popupParames.delta && this.popupParames.delta.dataname) {
+							this.dataname = clone(this.popupParames.delta.dataname);
+						}
+						
+						if (this.popupParames.sceneCode) {
+							if (this.popupParames.sceneCode == "add") {//鏂板
+								var newEntity_ = {
+									name: "newEntity",
+									url: "root/data/newEntity",
+									paramsobj: {dataname: this.dataname},
+									isnotoption: true, //true:涓嶆槸閫夐」
+								}
+								this.dataRequest.push(newEntity_);
+								for (var k in this.popupParames.data) {
+									this.newformData[k] = this.popupParames.data[k]
+								}
+								this.isedit = true;
+							}
+							else if (this.popupParames.sceneCode == "browse") { //鍙
+								this.formAttr.disabled = true;
+							}
+							else if (this.popupParames.sceneCode == "edit") {//缂栬緫
+								this.isedit = true;
+							}
+							else if (this.popupParames.sceneCode == "approval") {//瀹℃壒
+								this.formAttr.disabled = true;
+								this.isapproval = true;
+							}
+						}
+					},
+					
+					mounted() {
+						var me = this;
+						var title_h = 0;
+						if (me.popupParames.totab) {
+							title_h = 42;
+						}
+						me.dheight = document.documentElement.clientHeight - 50 - title_h;
+						//棰勫姞杞芥暟鎹�
+						if (this.dataRequest && this.dataRequest.length) {
+							var result = {};
+							this.loadRequestData(this.dataRequest, result, function(data) {
+								me.dataRequestObj = data;
+								//棰勫姞杞芥暟鎹悗缁欏摢浜涘瓧娈佃缃畂ptions鎴杅ormatterjson
+								if (me.dataRequestObj.newEntity) {
+									var formData = clone(me.dataRequestObj.newEntity.data[me.dataname]);
+									if (me.newformData) {
+										let formData_ = clone(formData);
+										
+										for (var k in me.newformData) {
+											if (!formData_[k]) {
+												formData_[k] = me.newformData[k];
+											}
+										}
+								
+										me.formData = formData_;
+									}
+								}
+								me.initData();
+							});
+						}
+						else {
+							this.initData();
+						}
+						
+						// 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+						this.$nextTick(() => { 
+							hideLoading();
+						});
+					},
+					
+					methods:{
+						//鍏抽棴寮圭獥
+						closeDialog() {
+							var me = this;
+							if (me.popupParames.totab){
+								Root.tab.removeItem(Root.tab.selected);
+								Root.tab.open(me.popupParames.parentOption, false); 
+							}
+							else {
+								Root.hidePopup();
+							}
+						},
+						//鍏抽棴鍓嶈皟鍥炶皟
+						saveAfter() {
+							var me = this;
+							if(this.popupParames.callback) {
+								let obj = {
+									row: this.formData
+								}
+								this.popupParames.callback(obj, function() {
+									me.closeDialog();
+								});
+							}
+							else {
+								me.closeDialog();
+							}
+						},
+						
+						initData() {
+							let me = this;
+							var id_ = null;
+							if (this.formData.id) {
+								id_ = this.formData.id;
+							}
+							this.getRowDataById(id_, function(result) {//鏌ヨ鍚庣殑鍥炶皟锛岀敤浜庤幏鍙栧瓧娈电殑
+								if (result.meta && result.meta[me.dataname] && result.meta[me.dataname].fields) {
+									var metas = clone(result.meta[me.dataname].fields);
+									var formFields_ = [];
+									var formData_ = me.rowData[me.dataname] ? me.rowData[me.dataname] : clone(me.formData);
+									
+									me.formData = clone(formData_)
+									metas.map(f=>{
+										f.isshow = "T";
+										formFields_.push(clone(f));
+									})
+									if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
+										me.formFields = clone(formFields_);
+										
+										//瀛楁鏁扮粍杞瓧娈祇bj锛岀洰鐨勪负浜嗙瓫閫夋椂鑾峰彇瀛楁灞炴��
+										me.fieldsToFieldsObj();
+										
+										//璁剧疆瀛楁浜嬩欢
+										me.tableFieldClick();
+									}
+								}
+							})
+						},
+						
+						tableFieldClick() {
+							var me = this;
+							//琛ㄥ崟瀛楁浜嬩欢璁剧疆
+							this.formfieldClick = {
+								
+							};
+						},
+						
+						//鐢熸晥
+						openRowTable() {
+							var me = this;
+							var bo_ = this.$refs.form1.checkForm();
+							
+							if (!bo_) {
+								bo_ = false;
+								Root.message({
+								    type: 'error',
+								    message: '璇峰~鍐欏繀濉」'
+								});
+								return
+							}
+							me.formData.state_code = "Open"
+							me.formData.state_name = "鐢熸晥"
+							// this.iscommit = true;
+							this.saveRowTable();
+						},
+						
+						//淇濆瓨
+						saveRowTable() {
+							var me = this;
+							var operator_ = "saveEntity";//淇濆瓨
+							if(me.iscommit) {
+								operator_ = "commit";//鎻愪氦
+							}
+							
+							var entity_ = clone(this.formData);
+							var entity = {};
+							var product_ = [];
+							for (var r in entity_) {
+								if (entity_[r] || entity_[r] == "" || entity_[r] == false || entity_[r] == 0) {
+									entity[r] = entity_[r];
+								}
+							}
+							
+							let param = {
+								dataname: me.dataname,
+								data: {},
+							}
+							if (me.formData.id) {
+								param.id = me.formData.id
+							}
+							param.data[this.dataname] = entity;
+							
+							Server.call("root/data/saveEntity", param, function(result) {
+								console.log(result);
+								if (result.success) {
+									if(me.iscommit){
+										me.iscommit = false;
+										Root.message({
+											type: 'success',
+											message: '鎻愪氦鎴愬姛'
+										}); 
+										me.saveAfter();
+									}
+									else {
+										Root.message({
+											type: 'success',
+											message: '淇濆瓨鎴愬姛'
+										}); 
+										me.saveAfter();
+									}
+								}
+							});
+						},
+						
+						// 閫氳繃鎴栨嫆缁�
+						onShowApproval(passOrRefuse) {
+							this.approveremark = "";
+							this.reasonvisible = true;//瀹℃壒澶囨敞濉啓寮圭獥
+							this.passOrRefuse = passOrRefuse;// commit涓嬩竴涓姸鎬�;approve閫氳繃;gohome;//鎷掔粷 goback;//鍥為��
+						},
+						saveReason() {
+							this.loading_pass = true;
+							if(this.passOrRefuse == "commit" || this.passOrRefuse == "approve"){
+								this.doApproval();
+							}
+							else{
+								if(this.approveremark != ""){
+									this.doApproval();
+								}
+								else{
+									Root.message({
+										type: 'warning',
+										message: '璇峰~鍐欏師鍥�'
+									});
+									this.loading_pass = false;
+								}
+							}
+						},
+						doApproval(bo) {
+							var me = this;
+							this.doRunApproval()
+						},
+						
+						doRunApproval() {
+							var me = this;
+							
+							let param = {
+								dataname: me.dataname,
+								id: me.formData.id,
+								remark: this.approveremark
+							}
+							Server.call("root/data/" + this.passOrRefuse, param, function(result) {
+								me.loading_pass = false;
+								console.log(result);
+								if (me.passOrRefuse == "commit" || me.passOrRefuse == "approve") {
+									Root.message({
+										type: 'success',
+										message: '瀹℃壒鎴愬姛'
+									}); 
+								}
+								else if (me.passOrRefuse == "goback") {
+									Root.message({
+										type: 'success',
+										message: '宸查��鍥�'
+									}); 
+								}
+								else if (me.passOrRefuse == "gohome") {
+									Root.message({
+										type: 'success',
+										message: '宸叉嫆缁�'
+									}); 
+								}
+								me.saveAfter();
+							}, function(errorresult) {
+								console.log("閿欒淇℃伅", errorresult);
+								me.loading_pass = false;
+								if (errorresult.messages && errorresult.messages.count && errorresult.messages.count.error) {
+									if (errorresult.messages.list) {
+										var config = {
+											totab: false,
+											// width: "1200px",
+											// height: 800,
+											icon: "icon-product",
+											text: "閿欒淇℃伅",
+											url: "module/tool/page/popup_error_messages.html",
+											data: {},
+											delta: errorresult.messages.list,
+											callback: function(obj, callback) {
+												if (callback) {
+													callback();
+												}
+											}
+										};
+										me.doPopupByPublic(config);
+										
+									}
+								}
+								else {
+									Root.message({
+										type: 'error',
+										message: '瀹℃壒澶辫触'
+									}); 
+								}
+							});
+						},
+						
+					}
+				});
+			};
+			
+			loadJsCss(function () {
+				initVue();
+			});
+		</script>
+		<style>
+			/*  鍦╲ue.js涓� v-cloak 杩欎釜鎸囦护鏄槻姝㈤〉闈㈠姞杞芥椂鍑虹幇 vuejs 鐨勫彉閲忓悕鑰岃璁$殑 */
+			[v-cloak] {
+				display: none !important;
+			}
+		</style>
+		
+	</head>
+	
+	<body style="margin: 0px;">
+		<div v-cloak id="vbody">
+			<div id="page_root">
+				<div ref="popup_body" style="padding: 0 20px;">
+					<div v-if="popupParames.totab" class="el-dialog__header">
+						<div class="dialog-title">
+						  <i class="iconfont icon-customermanagement"></i>
+						  <span> {{title}}</span>
+						</div>
+					</div>
+					<div :style="{height: dheight + 'px', 'overflow-y': 'auto'}">
+						<div class="el-dialog__body">
+							<h-form
+								ref="form1"
+								:form-attr="formAttr"
+								:table-fields="formFields"
+								:form-data="formData"
+								:table-field-click="formfieldClick"
+							>
+							</h-form>
+						</div>
+					</div>
+					<el-dialog title="濉啓鍘熷洜" :visible.sync="reasonvisible" height="50%">
+						<el-input
+						type="textarea"
+						:autosize="{ minRows: 2, maxRows: 10}"
+						placeholder="璇疯緭鍏ュ師鍥�"
+						v-model="approveremark">
+						</el-input>
+						
+						<div slot="footer" class="dialog-footer" >
+						<el-button type="default" @click="reasonvisible = false">鍙� 娑�</el-button>
+						<el-button type="primary" :loading="loading_pass" @click="saveReason">纭� 瀹�</el-button>
+						</div>
+					</el-dialog>
+					<div class="el-dialog__footer">
+						<el-button-group style="margin-right: 80px;" >		
+							<el-button  size="small" v-if="isapproval" type="warning" plain @click="onShowApproval('gohome')">閫�鍥炲埌鐢宠浜�</el-button>
+							<el-button  size="small" v-if="isapproval" type="danger" plain @click="onShowApproval('goback')">閫�鍥炲埌涓婁竴姝�</el-button>
+						</el-button-group>
+						<el-button size="small" type="default" @click="closeDialog">鍙� 娑�</el-button>
+						<el-button size="small" v-if="isedit || isrefuseedit" type="primary" :loading="loading_save" @click="saveRowTable":icon="buttonsconfig.save.icon">{{buttonsconfig.save.name}}</el-button>
+						<el-button size="small" v-if="isedit && !formData.agreement_id" type="success" :loading="loading_submit" @click="openRowTable":icon="buttonsconfig.open.icon">{{buttonsconfig.open.name}}</el-button>
+						<el-button size="small" v-if="isapproval" type="success" @click="onShowApproval('approve')">閫� 杩�</el-button>
+					</div>
+				</div>
+			</div>
+		</div>
+		
+		<div id="page_loading" style="position: absolute; top:0px; width: 100vw; height: 50vh;">
+			<div class="spinner">
+			  <div class="cube1"></div>
+			  <div class="cube2"></div>
+			</div>
+		</div>
+	</body>
+</html>
diff --git a/module/model/page/table_simple.html b/module/model/page/table_simple.html
index 3065d34..2f4cbc0 100644
--- a/module/model/page/table_simple.html
+++ b/module/model/page/table_simple.html
@@ -21,7 +21,16 @@
 						tablefieldClick: {},
 						formfieldClick: {},
 
-						dataRequest: [],
+						dataRequest: [
+							{
+								name: "sys_model",
+								dataname: "sys_model",
+								filter: "",
+								isnotoption: false, //true:涓嶆槸閫夐」
+								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+								label:"url",//鏄笅鎷夐�夐」鏃惰缃�
+							},
+						],
 						dataRequestObj:{},
 
 						filterFields: [],
@@ -30,6 +39,8 @@
 						ctabs_r: {},
 						
 						isbasicfilterfields: true, // 瀛樺湪鏌ヨ
+						detail_model_id: "",
+						sys_model_map: {}
 					},
 					created() {
 						if (window.top.tab.selected.option.page_id) {
@@ -57,10 +68,15 @@
 									me.loadRequestData(me.dataRequest, result, function(data) {
 										me.dataRequestObj = data;
 										//棰勫姞杞芥暟鎹悗缁欏摢浜涘瓧娈佃缃畂ptions鎴杅ormatterjson
+										if (me.dataRequestObj.sys_model) {
+										    me.sys_model_map = me.dataRequestObj.sys_model.map.sys_model;
+										}
+										
 										if (me.dataRequestObj.sys_page_model) {
 										    var sys_page_model = me.dataRequestObj.sys_page_model[0];
 											me.dataname = sys_page_model.dataname
 											me.title = sys_page_model.title
+											me.detail_model_id = sys_page_model.detail_model_id
 										}
 										me.initData();
 									});
@@ -222,11 +238,11 @@
 								height: "500px",
 								icon: "icon-product",
 								text: me.title + "璇︽儏",
-								id: "form_simple" + sceneCode + row.id,//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
-								url: "module/model/page/form_simple.html",
+								id: "popup_form_simple" + sceneCode + row.id,//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/model/page/popup_form_simple.html",
 								dataname: me.dataname,
 								data: row,
-								delta: {},
+								delta: {dataname: me.dataname},
 								sceneCode: sceneCode,//"refuseedit",//"approval", //"add"//"browse",
 								callback: function(obj, callback) {
 									me.onQuery();

--
Gitblit v1.8.0