From 9253a1b75603488a1a50b4198170e20051ea5ae2 Mon Sep 17 00:00:00 2001
From: zhangyanpeng <bob.zhang@highdatas.com>
Date: 星期日, 25 八月 2024 20:18:15 +0800
Subject: [PATCH] 调整

---
 module/config/page/sys_menu_edit.html       |  823 ++++++++++++++++++++++++
 js/myelement.js                             |    4 
 module/model/model_iframe.html              |  172 +++++
 module/config/page/sys_menu_add.html        |   85 ++
 module/config/page/sys_menu_add_report.html |  465 +++++++++++++
 module/model/page/table_simple.html         |  426 ++++++++++++
 module/system/page/main.html                |   22 
 module/tool/page/popup_iconfont.html        |    2 
 js/config.js                                |    2 
 9 files changed, 1,973 insertions(+), 28 deletions(-)

diff --git a/js/config.js b/js/config.js
index a0bc394..2631beb 100644
--- a/js/config.js
+++ b/js/config.js
@@ -14,7 +14,7 @@
 
 
 config = {
-	jscssversion: "2024081902", //.js/.css鏂囦欢鐨勭増鏈彿锛屽幓闄ゅ墠绔紦瀛樼殑涓�绉嶆満鍒�
+	jscssversion: "2024082502", //.js/.css鏂囦欢鐨勭増鏈彿锛屽幓闄ゅ墠绔紦瀛樼殑涓�绉嶆満鍒�
 	isupgrading: false, //鏄惁鍗囩骇涓�
 	appName: "TPP",
 	title: "钀ラ攢涓�浣撳寲杩愯惀骞冲彴",
diff --git a/js/myelement.js b/js/myelement.js
index a7f1ae4..8c64137 100644
--- a/js/myelement.js
+++ b/js/myelement.js
@@ -5550,9 +5550,9 @@
 							' :disabled = "typeof (fieldObj.disabled) != \'undefined\' ? fieldObj.disabled : (disabled ? true : false)" '+
 							' :value="formData[fieldObj.field] && formData[fieldObj.field].length == fieldObj.options.length ? true : false" @change="handleCheckAllChange($event, fieldObj, formData)">鍏ㄩ��</el-checkbox>'+
 							
-							'<el-checkbox-group  v-model="formData[fieldObj.field]" class="h_form_checkboxgroup" '+
+							'<el-checkbox-group  v-model="formData[fieldObj.field]" class="h_form_checkboxgroup aaa" '+
 							' :disabled = "typeof (fieldObj.disabled) != \'undefined\' ? fieldObj.disabled : (disabled ? true : false)" @change="formchange($event, fieldObj)"> '+
-								'<el-checkbox v-for="(o, k) in fieldObj.options" :key="k" :label="o.code"><div :style="{width: fieldObj.valuewidth ? fieldObj.valuewidth : \'100%\'}">{{o.value}}</div></el-checkbox> '+
+								'<el-checkbox v-for="(o, k) in fieldObj.options" :key="\'f_checkboxobj\' + k" :label="o.code"><div :style="{width: fieldObj.valuewidth ? fieldObj.valuewidth : \'100%\'}">{{o.value}}</div></el-checkbox> '+
 							'</el-checkbox-group> '+
 						'</div>'+
 						'<div v-else>'+ 
diff --git a/module/config/page/sys_menu_add.html b/module/config/page/sys_menu_add.html
index 4b66a50..62289c6 100644
--- a/module/config/page/sys_menu_add.html
+++ b/module/config/page/sys_menu_add.html
@@ -32,7 +32,9 @@
 							//id: uuid_short(),
 							// code: createCode("BA"),
 						},
-						formData: {},
+						formData: {
+							title: "",
+						},
 						
 						dataRequest: [
 							{
@@ -63,6 +65,9 @@
 						
 						pageid: "", // 鏂伴〉闈d
 						parent_menuobj: {}, // 鐖剁骇鑿滃崟
+						
+						isAddMenu: false, // 浠呮坊鍔犱竴涓彍鍗�
+						treeoptions: []
 					},
 					created() {
 						this.popupParames = clone(Root.popupParames);
@@ -72,13 +77,41 @@
 						// }
 
 						if (this.popupParames.data) {
-							this.parent_menuobj = this.popupParames.data;
 							if (this.popupParames.sceneCode) {
-								if (this.popupParames.sceneCode == 'add') {
-									this.pageid = createCode("R_");
+								if (this.popupParames.sceneCode == 'addmenu') {
+									this.isAddMenu = true;
+									this.parent_menuobj = this.popupParames.data;
+									if (this.parent_menuobj && this.parent_menuobj.id) {
+										this.formData.parent_id = this.parent_menuobj.id
+									}
+								}
+								else if (this.popupParames.sceneCode == 'add') {
+									this.parent_menuobj = this.popupParames.data;
+									this.pageid = createCode("M_P");
 									this.formData.parent_id = this.popupParames.data.id;
-								} else if (this.popupParames.sceneCode == 'edit') {
+								} 
+								else if (this.popupParames.sceneCode == 'edit') {
 									this.pageid = this.popupParames.data.page_id;
+									
+									this.parent_menuobj = {
+										id: this.popupParames.data.parent_id,
+										type_code: this.popupParames.data.type_code
+									};
+									if (this.popupParames.data.url &&  this.popupParames.data.url.indexOf("viewlet=") > 0) {
+										var url_ = this.popupParames.data.url.split("viewlet=")
+										var url_parame_ = url_[1].split("&")
+										
+										if (url_parame_[1] && url_parame_[1] == "op=write") {
+											this.popupParames.data.reporttype = "write"
+										}
+										else if (url_parame_[1] && url_parame_[1] == "op=view") {
+											this.popupParames.data.reporttype = "view"
+										}
+										else {
+											this.popupParames.data.reporttype = ""
+										}
+										this.popupParames.data.url = url_parame_[0]
+									}
 									this.formData = clone(this.popupParames.data);
 								}
 							}
@@ -157,8 +190,13 @@
 										}
 										formFields_.push(clone(f));
 									})
-									var page_url = {isshow: "T", field: "url", name: "璺緞", type: "input", required: true}
-									formFields_.push(clone(page_url));
+									// if (!me.isAddMenu) {
+									// 	var page_url = {isshow: "T", field: "url", name: "璺緞", type: "input", required: true, placeholder: "濡傦細patch_report/DMS_index_mysql.frm", appendix: "鎶ヨ〃涓殑鍙傛暟鍖呭惈actor锛堣鑹茬被鍨婳rg/Business/Sales/Customer/Admin锛夈�乼arget_id锛堥攢鍞矖浣岻D/DMS寮�鎴稩D锛夈�乧ompany_id銆乥u_id", isvalexplain_br: true}
+									// 	var page_reporttype = {isshow: "T", field: "reporttype", name: "绫诲瀷", type: "radio", options: [{code: "", value: "棰勮"}, {code: "write", value: "濉姤"},{code: "view", value: "鍒嗘瀽"}]}
+									// 	formFields_.push(clone(page_url));
+									// 	formFields_.push(clone(page_reporttype));
+									// }
+									
 									if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
 										me.formFields = clone(formFields_);
 										
@@ -269,11 +307,12 @@
 							var me = this;
 							if (this.pageid) {
 								var entity_ = clone(this.formData);
+								
 								var entity = {
 									id: this.pageid,
 									code: this.pageid,
 									title: entity_.title,
-									url: "module/report/page/report_iframe.html?viewlet=" + entity_.url,
+									url: entity_.url ? entity_.url : "module/model/model_iframe.html",
 									is_active: "T"
 								};
 								
@@ -298,12 +337,13 @@
 							var me = this;
 							var entity_ = clone(this.formData);
 							var entity = {
-								parent_id: this.parent_menuobj.id,
-								type_code: this.parent_menuobj.type_code,
-								page_id: this.pageid,
+								parent_id: this.parent_menuobj.id || null,
+								type_code: this.parent_menuobj.type_code || "Z",
+								open_type: "arrange",
+								page_id: this.pageid || null,
 								title: entity_.title,
 								icon: entity_.icon,
-								order_no: this.parent_menuobj.children.length + 1,
+								order_no: entity_.order_no ? entity_.order_no : (this.parent_menuobj.children ? this.parent_menuobj.children.length + 1 : 1),
 							};
 							
 							if (entity_.id) {
@@ -317,6 +357,26 @@
 							param.data[this.dataname] = entity;
 							Server.call("root/data/saveEntity", param, function(result) {
 								console.log(result);
+								if (me.pageid) {
+									me.onRefreshCacheByPageId(me.pageid);
+								}
+								else {
+									Root.message({
+										type: 'success',
+										message: '淇濆瓨鎴愬姛'
+									}); 
+									me.saveAfter();
+								}
+							});
+						},
+						
+						// 鍒锋柊缂撳瓨
+						onRefreshCacheByPageId(PageId) {
+							var me = this;
+							let param_ = {
+								page_id: PageId
+							}
+							Server.call("root/system/reloadMenuByPage", param_, function(result) {
 								if (result.success) {
 									let param_ = {
 										dataname: "sys_menu",
@@ -334,7 +394,6 @@
 								}
 							});
 						},
-						
 						
 					}
 				});
diff --git a/module/config/page/sys_menu_add_report.html b/module/config/page/sys_menu_add_report.html
new file mode 100644
index 0000000..664da66
--- /dev/null
+++ b/module/config/page/sys_menu_add_report.html
@@ -0,0 +1,465 @@
+<!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: "sys_menu",
+						title: "鏂板鑿滃崟",
+						formAttr: {
+							istitle: false,
+							title: "",
+							columnnumber: 1,
+							labelwidth: "70px",
+							labelposition: "left",
+							size: "medium",
+							border: "10px solid #c6c6c600"
+						},
+						
+						formFields: [],
+						newformData: {
+							//id: uuid_short(),
+							// code: createCode("BA"),
+						},
+						formData: {
+							title: "",
+						},
+						
+						dataRequest: [
+							{
+								name: "sys_menunotpage",
+								dataname: "sys_menu",
+								filter: " page_id is null",
+								isnotoption: false, //true:涓嶆槸閫夐」
+								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+								label:"name",//鏄笅鎷夐�夐」鏃惰缃�
+							},
+							
+						],
+						dataRequestObj: {},
+						options_menumap: {},
+						options_menutree: [],
+						
+						//鎸夐敭鏉冮檺璁剧疆
+						isedit: false,//鎻愪氦鍓嶇紪杈戯紝淇濆瓨/鎻愪氦
+						isrefuseedit: false,//鎷掔粷鍚庣紪杈戯紝淇濆瓨/鍐嶆鎻愪氦
+						isapproval: false,//瀹℃壒锛屽悓鎰�/鎷掔粷/杞姙/閫�鍥�
+						iscommit: false,//鎻愪氦鏍囪
+						
+						//寮圭獥鍙傛暟
+						popupParames: {},
+						//瀛楁璁剧疆
+						tablefieldClick: {},
+						formfieldClick: {},
+						
+						pageid: "", // 鏂伴〉闈d
+						parent_menuobj: {}, // 鐖剁骇鑿滃崟
+						
+						isAddMenu: false, // 浠呮坊鍔犱竴涓彍鍗�
+						treeoptions: []
+					},
+					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.data) {
+							if (this.popupParames.sceneCode) {
+								if (this.popupParames.sceneCode == 'addmenu') {
+									this.isAddMenu = true;
+									this.parent_menuobj = this.popupParames.data;
+									if (this.parent_menuobj && this.parent_menuobj.id) {
+										this.formData.parent_id = this.parent_menuobj.id
+									}
+								}
+								else if (this.popupParames.sceneCode == 'add') {
+									this.parent_menuobj = this.popupParames.data;
+									this.pageid = createCode("R_");
+									this.formData.parent_id = this.popupParames.data.id;
+								} 
+								else if (this.popupParames.sceneCode == 'edit') {
+									this.pageid = this.popupParames.data.page_id;
+									
+									this.parent_menuobj = {
+										id: this.popupParames.data.parent_id,
+										type_code: this.popupParames.data.type_code
+									};
+									if (this.popupParames.data.url &&  this.popupParames.data.url.indexOf("viewlet=") > 0) {
+										var url_ = this.popupParames.data.url.split("viewlet=")
+										var url_parame_ = url_[1].split("&")
+										
+										if (url_parame_[1] && url_parame_[1] == "op=write") {
+											this.popupParames.data.reporttype = "write"
+										}
+										else if (url_parame_[1] && url_parame_[1] == "op=view") {
+											this.popupParames.data.reporttype = "view"
+										}
+										else {
+											this.popupParames.data.reporttype = ""
+										}
+										this.popupParames.data.url = url_parame_[0]
+									}
+									this.formData = clone(this.popupParames.data);
+								}
+							}
+						}
+					},
+					
+					mounted() {
+						var me = this;
+						//棰勫姞杞芥暟鎹�
+						if (this.dataRequest && this.dataRequest.length) {
+							var result = {};
+							this.loadRequestData(this.dataRequest, result, function(data) {
+								me.dataRequestObj = data;
+								//棰勫姞杞芥暟鎹悗缁欏摢浜涘瓧娈佃缃畂ptions鎴杅ormatterjson
+								var sys_menunotpage_ = clone(data.sys_menunotpage);
+								sys_menunotpage_.map(m=>{
+									me.options_menumap[m.id] = m;
+								})
+								var sys_menunotpagetree = ArrayToTree(clone(sys_menunotpage_), "title", "parent_id");
+								me.options_menutree = clone(sys_menunotpagetree);
+								
+								me.initData();
+							});
+						}
+						else {
+							this.initData();
+						}
+						
+					},
+					
+					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 = {
+									options: this.treeoptions,
+								}
+								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_ = [];
+									
+									metas.map(f=>{
+										f.isshow = "T";
+										if (f.field == "parent_id") {
+											// f.notshowalllevels = true;
+											f.props = {value: "id", label: "title", checkStrictly: true};
+											f.options = me.options_menutree;
+										}
+										formFields_.push(clone(f));
+									})
+									if (!me.isAddMenu) {
+										var page_url = {isshow: "T", field: "url", name: "璺緞", type: "input", required: true, placeholder: "濡傦細patch_report/DMS_index_mysql.frm", appendix: "鎶ヨ〃涓殑鍙傛暟鍖呭惈actor锛堣鑹茬被鍨婳rg/Business/Sales/Customer/Admin锛夈�乼arget_id锛堥攢鍞矖浣岻D/DMS寮�鎴稩D锛夈�乧ompany_id銆乥u_id", isvalexplain_br: true}
+										var page_reporttype = {isshow: "T", field: "reporttype", name: "绫诲瀷", type: "radio", options: [{code: "", value: "棰勮"}, {code: "write", value: "濉姤"},{code: "view", value: "鍒嗘瀽"}]}
+										formFields_.push(clone(page_url));
+										formFields_.push(clone(page_reporttype));
+									}
+									
+									if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
+										me.formFields = clone(formFields_);
+										
+										//璁剧疆瀛楁浜嬩欢
+										me.tableFieldClick();
+										
+										// 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+										me.$nextTick(() => { 
+											hideLoading();
+											
+											//閲嶆柊璁剧疆寮圭獥瀹介珮
+											me.$nextTick(function(){
+												let w_ = me.$refs.popup_body.offsetWidth + "px";
+												w_ = "900px";
+												let h_ = me.$refs.popup_body.offsetHeight + "px";
+												Root.setPopupWH(w_, h_);
+											})
+										});
+									}
+								}							
+								
+							})
+						},
+						
+						tableFieldClick() {
+							var me = this;
+							//琛ㄥ崟瀛楁浜嬩欢璁剧疆
+							this.formfieldClick = {
+								icon: {
+									popup: {
+										onclick: function(obj) {//寮圭獥鐐瑰嚮浜嬩欢
+											//鎵撳紑
+											me.open_iconlist()
+										}
+									},
+								},
+								page_id: {
+									popup: {
+										onclick: function(obj) {//寮圭獥鐐瑰嚮浜嬩欢
+											//鎵撳紑
+											me.open_pagelist()
+										}
+									},
+								},
+							};
+						},
+						
+						open_iconlist() {
+							var me = this;
+							var config = {
+								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
+								width: "900px",
+								height: "900px",
+								icon: "icon-product",
+								text: "鍥炬爣閫夋嫨寮圭獥",
+								id: "popup_iconfont",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/tool/page/popup_iconfont.html",
+								data: {},
+								delta: {pageobj: me.selectTabObj},
+								sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(obj, callback) {
+									let formData_ = clone(me.formData);
+									formData_.icon = obj.icon;
+									me.formData = formData_;
+									
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+						
+						open_pagelist() {
+							var me = this;
+							var config = {
+								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
+								width: "900px",
+								height: "900px",
+								icon: "icon-product",
+								text: "瀵瑰簲椤甸潰淇℃伅",
+								id: "popup_page",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/config/page/popup_page.html",
+								data: {},
+								delta: {},
+								sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(obj, callback) {
+									let formData_ = clone(me.formData);
+									formData_.page_id = obj.row.id;
+									me.formData = formData_;
+									
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+						
+						//鎻愪氦
+						submitRowTable() {
+							this.iscommit = true;
+							this.saveRowTable();
+						},
+						
+						// 淇濆瓨椤甸潰
+						saveRowTable() {
+							var me = this;
+							if (this.pageid) {
+								var entity_ = clone(this.formData);
+								
+								if (entity_.reporttype && entity_.reporttype == "write") {
+									entity_.url += "&op=write"
+								}
+								else if (entity_.reporttype && entity_.reporttype == "view") {
+									entity_.url += "&op=view"
+								}
+								
+								var entity = {
+									id: this.pageid,
+									code: this.pageid,
+									title: entity_.title,
+									url: "module/report/page/report_iframe.html?viewlet=" + entity_.url,
+									is_active: "T"
+								};
+								
+								let param = {
+									dataname: "sys_page",
+									data: {},
+								}
+								param.data["sys_page"] = entity;
+								Server.call("root/data/saveEntity", param, function(result) {
+									console.log(result);
+									if (result.success) {
+										me.doSaveRowTable();
+									}
+								})
+							}
+							else {
+								this.doSaveRowTable()
+							}
+						},
+						//淇濆瓨鑿滃崟
+						doSaveRowTable() {
+							var me = this;
+							var entity_ = clone(this.formData);
+							var entity = {
+								parent_id: this.parent_menuobj.id || null,
+								type_code: this.parent_menuobj.type_code || "Z",
+								page_id: this.pageid || null,
+								title: entity_.title,
+								icon: entity_.icon,
+								order_no: entity_.order_no ? entity_.order_no : (this.parent_menuobj.children ? this.parent_menuobj.children.length + 1 : 1),
+							};
+							
+							if (entity_.id) {
+								entity.id = entity_.id
+							}
+							
+							let param = {
+								dataname: this.dataname,
+								data: {},
+							}
+							param.data[this.dataname] = entity;
+							Server.call("root/data/saveEntity", param, function(result) {
+								console.log(result);
+								if (me.pageid) {
+									me.onRefreshCacheByPageId(me.pageid);
+								}
+								else {
+									Root.message({
+										type: 'success',
+										message: '淇濆瓨鎴愬姛'
+									}); 
+									me.saveAfter();
+								}
+							});
+						},
+						
+						// 鍒锋柊缂撳瓨
+						onRefreshCacheByPageId(PageId) {
+							var me = this;
+							let param_ = {
+								page_id: PageId
+							}
+							Server.call("root/system/reloadMenuByPage", param_, function(result) {
+								if (result.success) {
+									let param_ = {
+										dataname: "sys_menu",
+										filter: "page_id is null",
+									}
+									Server.call("root/data/getEntitySet", param_, function(result2){
+										let agm_category_ = ArrayToTree(clone(result2.data.entityset), "title", "parent_id");
+										me.options_menutree = agm_category_;
+										Root.message({
+											type: 'success',
+											message: '淇濆瓨鎴愬姛'
+										}); 
+										me.saveAfter();
+									});
+								}
+							});
+						},
+						
+					}
+				});
+			};
+			
+			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 class="popup_el-dialog__header">
+						<div class="dialog-title">
+						  <i class="iconfont icon-customermanagement"></i>
+						  <span> {{title}}</span>
+						</div>
+					</div>	
+					<div style="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>
+					<div class="el-dialog__footer">
+						<el-button size="small" type="default" @click="closeDialog">鍙� 娑�</el-button>
+						<el-button size="small" type="primary" @click="saveRowTable":icon="buttonsconfig.save.icon">{{buttonsconfig.save.name}}</el-button>
+						<!-- <el-button size="small" v-if="isedit" type="success" @click="submitRowTable":icon="buttonsconfig.submit.icon">{{buttonsconfig.submit.name}}</el-button> -->
+						<!-- <el-button size="small" v-if="isrefuseedit" type="success" @click="">鍐嶆鎻愪氦</el-button>
+						
+						<el-button size="small" v-if="isapproval" type="primary" @click="">閫� 杩�</el-button>
+						<el-button size="small" v-if="isapproval" type="success" @click="">鎷� 缁�</el-button>
+						<el-button size="small" v-if="isapproval" type="primary" @click="">杞� 鍔�</el-button>
+						<el-button size="small" v-if="isapproval" type="success" @click="">閫� 鍥�</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/config/page/sys_menu_edit.html b/module/config/page/sys_menu_edit.html
new file mode 100644
index 0000000..72bbaf7
--- /dev/null
+++ b/module/config/page/sys_menu_edit.html
@@ -0,0 +1,823 @@
+<!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 TreeVue({
+					el: "#vbody",
+					data: {
+						dataname: "sys_menu", 
+						title: "鑿滃崟绠$悊",
+						tree_title: "鑿滃崟绠$悊",
+						treeTxtFormatter: "{title}",
+						isTreeReadonly: false,
+						
+						form_dataname: "sys_menu",
+						// formAttr: {},
+						formFields: [],
+						formData: {
+							parent_id: []
+						},
+						formfieldClick: {},
+						defaultexpandedkeys: [],
+						currentnodekey: "",
+						
+						dataRequest: [
+							{
+								name: "sys_menunotpage",
+								dataname: "sys_menu",
+								filter: " page_id is null",
+								isnotoption: false, //true:涓嶆槸閫夐」
+								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+								label:"name",//鏄笅鎷夐�夐」鏃惰缃�
+							},
+							{
+								name: "sys_model",
+								dataname: "sys_model",
+								filter: "",
+								isnotoption: false, //true:涓嶆槸閫夐」
+								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+								label:"name",//鏄笅鎷夐�夐」鏃惰缃�
+							},
+						],
+						dataRequestObj: {},
+						options_menutree: [],
+						options_menumap: {},
+						options_model: [],
+						options_buttons: [],
+						pagebuttonmap: {},
+						
+						pagesize_p: 10,
+						pagenum_p: 1,
+						total_p: 0,
+						tableData_p: [],
+						isRefresh_p: true,
+						tableHeight_p: 100,
+						
+						selectNodeData: {},
+						page_metas: [
+							{isshow: "T", field: "parent_id", labelchinese: "鑿滃崟璺緞", inputtype: "cascader", optionsgroup: "", group_name: "鑿滃崟淇℃伅"},
+							{isshow: "T", field: "title", labelchinese: "鑿滃崟鍚嶇О", inputtype: "", optionsgroup: "", group_name: "鑿滃崟淇℃伅"},
+							{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: "椤甸潰閰嶇疆"},
+						],
+						
+						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: "is_list", labelchinese: "鏄惁鏄剧ず",inputtype: "ischeckbox"},
+							{isshow: "T", field: "isfilter", 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: "formatter", labelchinese: "鏍煎紡鍖�",inputtype: "select", optionsgroup: "formatterEvent", width: "150"},
+							{isshow: "T", field: "formatpattern", 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"},
+							
+						],
+						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: "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: "list_order_no", labelchinese: "椤哄簭",inputtype: "number"},
+							{isshow: "T", field: "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: "F", field: "last_update_time", labelchinese: "鏇存柊鏃堕棿"},
+							{isshow: "T", field: "group_name", labelchinese: "琛ㄥご鍒嗙粍鍚�"},
+						],
+						tableFields: [],
+						tableData: [],
+						tableHeight: 500,
+						tablefieldClick: {},
+						tablebuttonClick: [],
+						tableloading: false,
+						scene_type: ""
+					},
+					created() {
+						let clientHeight = document.documentElement.clientHeight;
+						this.tableHeight = clientHeight - 250 - 32;
+						
+					},
+					
+					mounted() {
+						var me = this;
+						//棰勫姞杞芥暟鎹�
+						if (this.dataRequest.length) {
+							var result = {};
+							this.loadRequestData(this.dataRequest, result, function(data) {
+								me.dataRequestObj = data;
+								//棰勫姞杞芥暟鎹悗缁欏摢浜涘瓧娈佃缃畂ptions鎴杅ormatterjson
+								if (me.dataRequestObj.sys_menunotpage) {
+									var sys_menunotpage_ = clone(me.dataRequestObj.sys_menunotpage);
+									sys_menunotpage_.map(m=>{
+										me.options_menumap[m.id] = m;
+									})
+									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);
+									me.options_model = clone(sys_model_);
+								}
+								
+								
+								me.initData();
+							});
+						}
+						else {
+							this.initData();
+						}
+						this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+							hideLoading();
+							this.treeHeight = document.documentElement.clientHeight - 20;
+						});
+					},
+					
+					methods:{
+						initData() {
+							var me = this;
+							this.getMenuAll();
+							this.getPageMeta();
+						},
+						
+						//鎷垮埌宸﹁竟鏍�
+						getMenuAll() {
+							var me = this;
+							var param_ = {}
+							me.treeData = [];
+							Server.call("root/client/getMenuTreeAll", param_, function(result) {
+								//閬嶅巻鏍戞暟鎹紝灏嗘牴鑺傜偣鐨刾age_id璁剧疆涓篿d
+								var menus_tree = clone(result.data.menus);
+								// var menus_tree2 = clone(result.data.menus);
+								me.menuToPageTree(menus_tree);
+								me.treeData = clone(menus_tree);
+								var row = me.treeData[0];
+								// me.$refs.table1.setCurrentRow(row)
+								me.selectNodeData = clone(row);
+								me.formData = row;
+								me.isRefresh = false;
+								me.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+									me.defaultexpandedkeys = [me.formData.id];
+									me.currentnodekey = me.formData.id;
+									me.isRefresh = true
+								});
+							})
+						},
+						
+						menuToPageTree(oldmenus) {
+							var me = this;
+							oldmenus.map(om=>{
+								if (om.id && om.open_type && om.open_type == "arrange") {
+									om.isnot_nodeadd = true; // 鑺傜偣涓嶅彲鏂板
+								}
+								else if (om.id && !om.page_id) {
+									// om.isnot_nodeadd = true; // 鑺傜偣涓嶅彲鏂板
+									om.isnot_nodeedit = true; // 鑺傜偣涓嶅彲鏀�
+									om.isnot_nodedel = true; // 鑺傜偣涓嶅彲鍒�
+								}
+								else {
+									om.isnotnode_edit = true; // 鑺傜偣涓嶅彲澧炲垹鏀�
+								}
+								if (om.children) {
+									me.menuToPageTree(om.children);
+								}
+								else if (om.menu_id) {
+									om.id = om.menu_id
+								}
+							})
+						},
+						
+						//鎷垮埌鍙宠竟鐨勫瓧娈�
+						getPageMeta() {
+							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") {
+									f.props = {value: "id", label: "title", checkStrictly: true};
+									f.options = me.options_menutree;
+								}
+								if (f.field == "model_id") {
+									// f.props = {value: "id", label: "title", checkStrictly: true};
+									f.options = me.options_model;
+								}
+								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.getPageData_model(page_id, function(pagemodel) {
+								if (pagemodel && pagemodel.model_id) {
+									var formData_ = clone(me.formData);
+									formData_.model_id = pagemodel.model_id
+									formData_.page_title = pagemodel.title
+									formData_.dataname = pagemodel.dataname
+									formData_.buttons = []
+									
+									me.formData = clone(formData_);
+									me.scene_type = pagemodel.sys_model__scene_type;
+									// 鑾峰彇椤甸潰dataname瀵瑰簲瀛楁
+									me.getModelButtons(formData_.model_id, function(modelbuttons){
+										me.options_buttons = clone(modelbuttons)
+										me.getPageMeta();
+									});
+									if (formData_.dataname) {
+										me.getTableData(formData_.dataname, pagemodel.sys_model__scene_type);
+									}
+									else {
+										me.tableFields = [];
+										me.tableData = [];
+									}
+								}
+								else {
+									var formData_ = clone(me.formData);
+									formData_.model_id = ""
+									formData_.page_title = ""
+									formData_.dataname = ""
+									formData_.buttons = []
+									
+									me.formData = clone(formData_);
+									me.options_buttons = []
+									me.getPageMeta();
+									me.tableFields = [];
+									me.tableData = [];
+								}
+								
+							});
+							// 鑾峰彇椤甸潰鎸夐敭
+							me.getPageButtons(page_id);
+						},
+						getPageButtons(page_id) {
+							var me = this;
+							let param_ = {
+								dataname: "sys_page_button",//鑾峰彇缁忛攢鍟嗗搴旀敹璐у湴鍧�
+								filter:"sys_page_button.page_id='" + page_id + "'",
+							}
+							Server.call("root/data/getEntitySet", param_, function(result) {
+								var pagebuttons = []
+								var pagebuttonmap = {}
+								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_);
+								}
+							});
+						},
+						
+						getPageData_model(page_id, callback) {
+							var me = this;
+							let param_ = {
+								dataname: "sys_page_model",//鑾峰彇缁忛攢鍟嗗搴旀敹璐у湴鍧�
+								filter:"sys_page_model.page_id='" + page_id + "'",
+							}
+							Server.call("root/data/getEntitySet", param_, function(result) {
+								var pagemodel = {}
+								if (result && result.data && result.data.entityset && result.data.entityset.length) {
+									pagemodel = result.data.entityset[0]
+								}
+								
+								callback(pagemodel);
+							});
+						},
+						
+						getModelButtons(model_id, callback) {
+							var me = this;
+							let param_ = {
+								dataname: "sys_model_parameter",//鑾峰彇缁忛攢鍟嗗搴旀敹璐у湴鍧�
+								filter:"model_id='" + model_id + "' and parameter_type='button'",
+							}
+							Server.call("root/data/getEntitySet", param_, function(result) {
+								var modelbuttons = []
+								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,
+										}
+										modelbuttons.push(b_)
+									})
+								}
+								
+								callback(modelbuttons);
+							});
+						},
+						
+						getTableData(dataname, scene_type) {
+							var me = this;
+							var interface_ = "getEntitySet"
+							if (scene_type == "table") {
+								interface_ = "getEntitySet"
+								this.tableFields = clone(this.tableFields_table)
+							}
+							else {
+								interface_ = "getEntity"
+								this.tableFields = clone(this.tableFields_form)
+							}
+							
+							let param_ = {
+								attachMeta: true,
+								dataname: dataname,//鑾峰彇缁忛攢鍟嗗搴旀敹璐у湴鍧�
+								filter: "1<>1",
+							}
+							this.tableloading = true;
+							Server.call("root/data/" + interface_, param_, function(result) {
+								me.tableloading = false;
+								var tableData = [];
+								if (result.meta[dataname] && result.meta[dataname].fields) {
+									tableData = result.meta[dataname].fields
+								}
+								me.tableData = clone(tableData)
+							});
+						},
+						
+						//鑺傜偣鐐瑰嚮锛岀粰鍙宠竟璧嬪��
+						onNodeClick(obj) {
+							var data = obj.data, node = obj.node, el = obj.el;
+							var data_ = clone(data);
+							this.selectNodeData = clone(data);
+							if (data_.parent_id) {
+								var parent_ids_ = [];
+								var parent_ids = this.getParents(data_.parent_id, this.options_menumap, parent_ids_);
+								
+								data_.parent_id = parent_ids
+							}
+							this.formData = data_;
+							
+							this.options_buttons = []
+							if (data_.open_type == "arrange" && this.selectNodeData.page_id) {
+								this.getPageData(this.selectNodeData.page_id);
+							}
+							else {
+								this.getPageMeta();
+							}
+						},
+						
+						//鎷垮埌鎵�鏈夌殑鐖惰妭鐐筰d
+						getParents(id, treemap, list) {
+							list.unshift(id);
+							if (treemap[id].parent_id) {
+								this.getParents(treemap[id].parent_id, treemap, list)
+							}
+							else {
+								return list;
+							}
+						},
+						
+						//鏂板鑺傜偣
+						onAddNode(obj) {
+							var data = obj.data, node = obj.node;
+							let me = this;
+							var config = {
+								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
+								width: "900px",
+								height: "340px",
+								icon: "icon-product",
+								text: "鑿滃崟鏂板",
+								id: "sys_menu_add",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/config/page/sys_menu_add.html",
+								data: data,
+								delta: {},
+								sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(obj, callback) {
+									me.getMenuAll();
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+						
+						//缂栬緫鑺傜偣
+						onEditNode(obj) {
+							var data = obj.data, node = obj.node;
+							var me = this;
+							Root.showPopup({
+								url: "module/config/page/sys_menu_add.html",
+								width: "900px",
+								height: "340px",
+								text: "鑿滃崟缂栬緫",
+								data: data,
+								sceneCode: "edit",
+								callback: function(options_obj, callback) {
+									me.getMenuAll();
+									if (callback) {
+										callback();
+									}
+								}
+							});
+						},
+						
+						//鍒犻櫎鑺傜偣
+						onDelNode(obj) {
+							var data = obj.data, node = obj.node;
+							let me = this;
+							Root.confirm('纭畾鍒犻櫎-' + data.title + '-鍚楋紵', '鍒犻櫎鎻愮ず', {
+							  confirmButtonText: '鍒犻櫎',
+							  cancelButtonText: '鍙栨秷',
+							  type: 'warning'
+							}).then(() => {
+								me.dodeldata(data, node, "sys_menu");
+							}).catch(() => {
+								Root.message({
+									type: 'info',
+									message: '宸插彇娑堝垹闄�'
+								});
+							});
+						},
+						dodeldata(row, node, tablename) {
+							var me = this;
+							if (row.id) {
+								let param = {
+									dataname: tablename,
+									id: row.id
+								}
+								
+								Server.call("root/data/deleteEntity", param, function(result) {
+									console.log(result);
+									if (result && result.data) {
+										const parent = node.parent;
+										const children = parent.data.children || parent.data;
+										const index = children.findIndex(d => d.id === row.id);
+										children.splice(index, 1);
+										
+										let param_ = {
+											dataname: "sys_menu",
+											filter: "page_id is null",
+										}
+										Server.call("root/data/getEntitySet", param_, function(result2){
+											let agm_category_ = ArrayToTree(clone(result2.data.entityset), "title", "parent_id");
+											me.treeData = agm_category_;
+											me.getMenuAll();
+											Root.message({
+												type: 'success',
+												message: '鍒犻櫎鎴愬姛!'
+											});
+										});
+									}
+								});
+							}
+						},
+						
+						formFieldClick() {
+							var me = this;
+							//琛ㄥ崟瀛楁浜嬩欢璁剧疆
+							this.formfieldClick = {
+								icon: {
+									popup: {
+										onclick: function(obj) {//寮圭獥鐐瑰嚮浜嬩欢
+											//鎵撳紑
+											me.open_iconlist()
+										}
+									},
+								},
+								page_id: {
+									popup: {
+										onclick: function(obj) {//寮圭獥鐐瑰嚮浜嬩欢
+											//鎵撳紑
+											me.open_pagelist()
+										}
+									},
+								},
+								
+								model_id: {
+									select: {
+										onchange: function(obj,refreshCallback) {//涓嬫媺灞曞紑浜嬩欢
+											console.log("model_id 閫夋嫨");
+											var value = obj.selectoption.value;
+											me.scene_type = obj.selectoption.scene_type;
+											var formData_ = clone(me.formData);
+											
+											me.formData = clone(formData_);
+											if (me.formData.model_id) {
+												me.getModelButtons(me.formData.model_id, function(modelbuttons){
+													me.options_buttons = clone(modelbuttons)
+													me.getPageMeta();
+												});
+												if (me.formData.dataname && me.scene_type) {
+													me.getTableData(me.formData.dataname, me.scene_type);
+												}
+											}
+											else {
+												me.options_buttons = []
+												me.getPageMeta();
+											}
+											
+										},
+									}
+								},
+								dataname: {
+									input: {
+										onchange: function(obj,refreshCallback) {//涓嬫媺灞曞紑浜嬩欢
+											if (me.formData.dataname && me.scene_type) {
+												me.getTableData(me.formData.dataname, me.scene_type);
+											}
+											else {
+												me.tableFields = [];
+												me.tableData = [];
+											}
+										},
+									}
+								}
+							};
+						},
+
+						open_iconlist() {
+							var me = this;
+							var config = {
+								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
+								width: "900px",
+								height: "900px",
+								icon: "icon-product",
+								text: "鍥炬爣",
+								id: "popup_iconfont",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/tool/page/popup_iconfont.html",
+								data: {},
+								delta: {pageobj: me.selectTabObj},
+								sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(obj, callback) {
+									let formData_ = clone(me.formData);
+									formData_.icon = obj.icon;
+									me.formData = formData_;
+									
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+						
+						open_pagelist() {
+							var me = this;
+							var config = {
+								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
+								width: "900px",
+								height: "900px",
+								icon: "icon-product",
+								text: "椤甸潰璇︽儏",
+								id: "popup_page",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/config/page/popup_page.html",
+								data: {},
+								delta: {},
+								sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(obj, callback) {
+									let formData_ = clone(me.formData);
+									formData_.page_id = obj.row.id;
+									me.formData = formData_;
+									
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+						
+						//鏂板鑿滃崟锛屾病鎳傚拰鏂板鑺傜偣鏈変粈涔堝尯鍒�
+						onAddData() {
+							var data = clone(this.selectNodeData);
+							var me = this;
+							var config = {
+								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
+								width: "900px",
+								height: "340px",
+								icon: "icon-product",
+								text: "鑿滃崟鏂板",
+								id: "sys_menu_add",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/config/page/sys_menu_add.html",
+								data: data,
+								delta: {},
+								sceneCode: "addmenu",//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(obj, callback) {
+									me.getMenuAll();
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+						
+						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];
+									}
+									else {
+										entity[r] = null;
+									}
+								}
+								else if (entity_[r] || entity_[r] ==  "" || entity_[r] == false || entity_[r] == 0) {
+									entity[r] = entity_[r];
+								}
+							}
+							
+							let param = {
+								dataname: this.dataname,
+								// operator: operator_,
+								data: {},
+							}
+							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: '鎻愪氦鎴愬姛'
+										}); 
+									}
+									else {
+										Root.message({
+											type: 'success',
+											message: '淇濆瓨鎴愬姛'
+										}); 
+									}
+								}
+								
+								me.getMenuAll();
+							});
+						},
+
+						node_isShow(data, isShow) {
+							if (this.$refs[data.id]) {
+								this.$refs[data.id].style.display = isShow ? '' : 'none';
+							}
+						},
+					}
+				});
+			};
+			
+			loadJsCss(function () {
+				initVue();
+			});
+		</script>
+		<style>
+			/*  鍦╲ue.js涓� v-cloak 杩欎釜鎸囦护鏄槻姝㈤〉闈㈠姞杞芥椂鍑虹幇 vuejs 鐨勫彉閲忓悕鑰岃璁$殑 */
+			[v-cloak] {
+				display: none !important;
+			}
+			.el-tabs__nav-scroll {
+			    overflow: hidden;
+			    position: relative;
+			    padding-left: 20px;
+			}
+		</style>
+		
+	</head>
+	
+	<body style="margin: 0px; position: absolute; top: 0px; bottom: 0px; width: 100%;">
+		<div v-cloak id="vbody" style="height: 100%; width: 100%;">
+			<div id="page_root" style="height: 100%; width: 100%;">
+				<div class="h_dialog__body" style="height: 100%; width: 100%;">
+					<div :style="{position: 'absolute', top: '10px', left: '10px', width: '320px', height: treeHeight + 'px', border: '1px solid #ccc'}">
+						<div style="height: 32px;line-height: 32px;border-bottom: 1px solid #ccc ;">
+							<span style="font-size: 14px;margin-left: 20px;">{{tree_title}}</span>
+							
+							<!-- 宸ュ叿鏍� -->
+							<div style="float: right; margin-right: 18px">
+								<el-button-group style="margin-left: 3px">
+									<el-button @click="addData">娣诲姞鑿滃崟</el-button>
+								</el-button-group>
+							</div>
+							
+						</div>
+						<div :style="{padding: '10px 0', height: treeHeight - 60 + 'px', overflow: 'auto'}">
+							<h-tree
+								v-if="isRefresh"
+								:tree-data="treeData"
+								:tree-txt-formatter="treeTxtFormatter"
+								:is-readonly="isTreeReadonly"
+								:default-expanded-keys="defaultexpandedkeys"
+								:currentnodekey="currentnodekey"
+								:default-expand-all="false"
+								
+								@node-click="onNodeClick"
+								@add-node="onAddNode"
+								@edit-node="onEditNode"
+								@del-node="onDelNode"
+							>
+							</h-tree>
+						</div>
+					</div>
+					<div :style="{position: 'absolute', top: '10px', left: '340px', right: '10px', height: treeHeight + 'px', border: '1px solid #ccc'}">
+						<div>
+							<div style="height: 32px;line-height: 32px;border-bottom: 1px solid #ccc ;">
+								<span style="font-size: 14px;margin-left: 20px;">椤甸潰璇︽儏</span>
+								
+								<!-- 宸ュ叿鏍� -->
+								<div style="float: right; margin-right: 18px">
+									<el-button-group style="margin-left: 3px">
+										<el-button @click="saveRowTable":icon="buttonsconfig.save.icon">{{buttonsconfig.save.name}}</el-button>
+									</el-button-group>
+								</div>
+							</div>
+								
+							<div style="margin: 16px;">
+								<h-form
+									ref="form1"
+									:form-attr="formAttr"
+									:table-fields="formFields"
+									:form-data="formData"
+									:table-field-click="formfieldClick"
+								>
+								</h-form>
+								
+								<h-table
+									v-if="isRefresh && tableFields.length"
+									ref="table1"
+									:table-fields="tableFields" 
+									:table-data="tableData" 
+									:table-height="tableHeight"
+									:table-field-click="tablefieldClick"
+									:table-buttons-click="tablebuttonClick"
+									:is-highlight-row="true"
+									:tableloading="tableloading"
+									:is-pagination="false"
+									:is-within-edit-table-data="true"
+									
+									:isshowtool="false"
+									:isfilterfield="false"
+									:istablebuttons="false"
+									:isbasicfilterfields="false"
+									:isdraggableorder="false"
+									>
+								</h-table>
+							</div>
+							
+						</div>
+					</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/model_iframe.html b/module/model/model_iframe.html
new file mode 100644
index 0000000..8a5ba66
--- /dev/null
+++ b/module/model/model_iframe.html
@@ -0,0 +1,172 @@
+<!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 vue_ = null;
+			var pageVue = null;
+			function loadJsCss(callback) {
+				var jscss_urls = [];
+				window.top.initJsCss(document, jscss_urls, callback);
+			};
+			
+			function initVue() {
+				vue_ = new FormVue({
+					el: "#vbody",
+					data: {
+						title: "妯″瀷瀹瑰櫒",
+						iframe_url: "",
+						reporturl: "",
+						
+						dataRequest: [
+							{
+								name: "sys_model",
+								dataname: "sys_model",
+								filter: "",
+								isnotoption: false, //true:涓嶆槸閫夐」
+								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+								label:"url",//鏄笅鎷夐�夐」鏃惰缃�
+							},
+						],
+						dataRequestObj: {},
+						
+						sys_model_map: {},
+						sys_page_model: {},
+						
+					},
+					created() {
+						if (window.top.tab.selected.option.page_id) {
+							let page_id = window.top.tab.selected.option.page_id;
+							var sys_page_model = {
+								name: "sys_page_model", // 椤甸潰瀵瑰簲鐨勬ā鍨�
+								dataname: "sys_page_model",
+								// url: "root/data/getEntitySet",
+								// paramsobj: {dataname: "sys_page_model", filter:"sys_page_model.page_id='" + page_id + "'"},
+								isnotoption: true, //true:涓嶆槸閫夐」
+								filter: "sys_page_model.page_id='" + page_id + "'"
+							}
+							this.dataRequest.push(sys_page_model);
+						}
+					},
+					
+					mounted() {
+						var me = this;
+						if (this.dataRequest && this.dataRequest.length) {
+							var result = {};
+							this.loadRequestData(this.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) {
+								    me.sys_page_model = me.dataRequestObj.sys_page_model[0];
+								}
+								
+								me.initData();
+								
+								// 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+								me.$nextTick(() => { 
+								    hideLoading();
+								});
+							});
+						}
+						else {
+							// 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+							this.$nextTick(() => { 
+								hideLoading();
+								me.initData();
+							});
+						}
+						
+					},
+					
+					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);
+							}
+							else {
+								this.iframe_url = this.sys_page_model.sys_model__url
+							}
+						},
+						
+						getReportToken() {
+							var me = this;
+							
+							var param_ = "";
+							if (window.top.vue.userinfo.currentactor.actor_type == "Customer") { // 缁忛攢鍟�
+								param_ = "&actor=" + window.top.vue.userinfo.currentactor.actor_type + "&accountId=" + window.top.vue.userinfo.currentactor.target_id
+							}
+							else if (window.top.vue.userinfo.currentactor.actor_type == "Sales") { // 閿�鍞�
+								param_ = "&actor=" + window.top.vue.userinfo.currentactor.actor_type + "&positionID=" + window.top.vue.userinfo.currentactor.target_id + "&level=" + window.top.vue.userinfo.position_level_field
+							}
+							else if (window.top.vue.userinfo.currentactor.actor_type == "Business" || window.top.vue.userinfo.currentactor.actor_type == "Org") { // 鍟嗗姟銆佽繍钀�
+								param_ = "&actor=" + window.top.vue.userinfo.currentactor.actor_type //+ "&positionID=" + window.top.vue.userinfo.currentactor.target_id
+							}
+							else if (window.top.vue.userinfo.currentactor.actor_type == "Admin") { // Admin
+								param_ = "&actor=" + window.top.vue.userinfo.currentactor.actor_type
+							}
+							if (param_) {
+								this.reporturl += param_
+							}
+							else {
+								this.$message({
+									message: '璇ヨ鑹叉病鏈夋姤琛ㄩ〉闈㈡潈闄�',
+									type: 'warning'
+								});
+								return;
+							}
+							
+							var param = {
+								type: "get",
+							}
+							Server.call("rootreport/login/cross/domain?fine_username="+window.top.config.report_user.name+"&fine_password="+window.top.config.report_user.password+"&validity=-2", param, function(result) {
+								// 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+								me.$nextTick(() => { 
+									hideLoading();
+								});
+								me.iframe_url = window.top.config.url_root + "rootreport/view/form?" + me.reporturl;
+								me.iframe_url = me.sys_page_model.sys_model__url
+								// me.iframe_url = window.top.config.url_report + "/view/form?" + me.reporturl;
+							});
+						}
+					}
+				});
+			};
+			
+			loadJsCss(function () {
+				initVue();
+			});
+		</script>
+		
+		<style>
+			/*  鍦╲ue.js涓� v-cloak 杩欎釜鎸囦护鏄槻姝㈤〉闈㈠姞杞芥椂鍑虹幇 vuejs 鐨勫彉閲忓悕鑰岃璁$殑 */
+			[v-cloak] {
+				display: none !important;
+			}
+		</style>
+	</head>
+	
+	<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>
+			</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>
+		</div>	
+		
+	</body>
+</html>
diff --git a/module/model/page/table_simple.html b/module/model/page/table_simple.html
new file mode 100644
index 0000000..3065d34
--- /dev/null
+++ b/module/model/page/table_simple.html
@@ -0,0 +1,426 @@
+	<!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 ListVue({
+					el: "#vbody",
+					data: {
+						dataname: "",
+						title: "绠�鍗曞垪琛ㄦā鍨�",
+						orderby: "",
+						filterfieldClick: {},
+						tablefieldClick: {},
+						formfieldClick: {},
+
+						dataRequest: [],
+						dataRequestObj:{},
+
+						filterFields: [],
+						tableFields: [],
+						cbuttons_r: {}, // 鏉冮檺鎸夐敭
+						ctabs_r: {},
+						
+						isbasicfilterfields: true, // 瀛樺湪鏌ヨ
+					},
+					created() {
+						if (window.top.tab.selected.option.page_id) {
+							let page_id = window.top.tab.selected.option.page_id;
+							var sys_page_model = {
+								name: "sys_page_model", // 椤甸潰瀵瑰簲鐨勬ā鍨�
+								dataname: "sys_page_model",
+								// url: "root/data/getEntitySet",
+								// paramsobj: {dataname: "sys_page_model", filter:"sys_page_model.page_id='" + page_id + "'"},
+								isnotoption: true, //true:涓嶆槸閫夐」
+								filter: "sys_page_model.page_id='" + page_id + "'"
+							}
+							this.dataRequest.push(sys_page_model);
+						}
+					},
+					mounted() {
+						var me = this;
+						if (window.top.tab.selected.option.page_id) {
+							this.title = window.top.tab.selected.option.menutitle
+							getPageByPageId(window.top.tab.selected.option.page_id, function(result){
+								me.cbuttons_r = result.buttons_r;
+								//棰勫姞杞芥暟鎹�
+								if (me.dataRequest && me.dataRequest.length) {
+									var result = {};
+									me.loadRequestData(me.dataRequest, result, function(data) {
+										me.dataRequestObj = data;
+										//棰勫姞杞芥暟鎹悗缁欏摢浜涘瓧娈佃缃畂ptions鎴杅ormatterjson
+										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.initData();
+									});
+								}
+								else {
+									me.initData();
+								}
+								
+								me.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+									hideLoading();
+								});
+							})
+						}
+					},
+					methods:{
+						initData() {
+							var me = this;
+							
+							this.onQuery(function(result, callback) {//鏌ヨ鍚庣殑鍥炶皟锛岀敤浜庤幏鍙栧瓧娈电殑
+								if (result.meta && result.meta[me.dataname] && result.meta[me.dataname].fields) {
+									var metas = clone(result.meta[me.dataname].fields);
+									var filterFields_ = [];
+									var tableFields_ = [];
+									
+									metas.map(f=>{
+										f.isshow = "T";
+										
+										if (f.isfilter) {
+											filterFields_.push(clone(f));
+										}
+										else {
+											var filter_f = clone(f);
+											filter_f.isshow = "F";
+											filterFields_.push(filter_f);
+										}
+										
+										tableFields_.push(clone(f));
+									})
+									if (!me.filterFields || (me.filterFields && me.filterFields.length == 0)) {
+										me.filterFields = clone(filterFields_);
+										me.tableFields = clone(tableFields_);
+										
+										//瀛楁鏁扮粍杞瓧娈祇bj锛岀洰鐨勪负浜嗙瓫閫夋椂鑾峰彇瀛楁灞炴��
+										me.fieldsToFieldsObj();
+										
+										//璁剧疆瀛楁浜嬩欢
+										me.tableFieldClick();
+									}
+								}
+								
+								if (callback) {
+									callback();
+								}
+							});
+						},
+						
+						tableFieldClick() {
+							var me = this;
+							//琛ㄦ牸瀛楁浜嬩欢璁剧疆
+							this.tablefieldClick = {
+								state_name: {//鐘舵��
+									val: {//鏈夊�兼椂鐨勭偣鍑讳簨浠�
+										notclick_val: ["鑽夌","褰曞叆"],//涓嶅彲鐐瑰嚮鐨勫��,1銆佹槸鏁扮粍["11","22"]锛�2銆佷互鈥�;鈥濆垎闅旂殑瀛楃涓�"111;222"
+										notclick_bindfield: [],
+										onclick: function(obj) {
+											var config = {
+												totab: false,
+												width: "1100px",
+												height: "520px",
+												icon: "icon-product",
+												text: "娴佺▼姝ラ",
+												id: "popup_workflow_step_user" + obj.row.id,
+												url: "module/tool/page/popup_workflow_step_user.html?v=2023020703",
+												data: obj.row,
+												delta: {},//{machine_code: "Org_Account_Open"},
+												sceneCode: "browse",//"refuseedit",//"approval", //"add"//"browse",
+												callback: function(obj, callback) {
+													if (callback) {
+														callback();
+													}
+												}
+											};
+											me.doPopupByPublic(config);
+										},
+									},	
+								},
+								code: {//瀛楁浜嬩欢璁剧疆
+									val: {//鏈夊�兼椂鐨勭偣鍑讳簨浠�
+										notclick_val: "",//涓嶅彲鐐瑰嚮鐨勫��,1銆佹槸鏁扮粍["11","22"]锛�2銆佷互鈥�;鈥濆垎闅旂殑瀛楃涓�"111;222"
+										notclick_bindfield: [],//褰撹瀛楁鍊肩瓑浜庢寚瀹氬瓧娈靛�兼椂涓嶅彲鐐瑰嚮["filterfield": "111"]
+										onclick: function(obj) {//鏁版嵁鍊肩偣鍑讳簨浠�
+											var sceneCode_ = "browse";
+											//濡傛灉鏄垱寤轰汉涓旀槸褰曞叆鐘舵�佹垨閫�鍥炵姸鎬佸垯鏄紪杈戠姸鎬�
+											if (obj.row.creator_id == window.top.vue.userinfo.id && (obj.row.state_code == "Input" || obj.row.state_code == "input" || obj.row.state_code == "Rejected")) {
+												sceneCode_ = "edit";
+											}
+											me.editData(sceneCode_, obj.row);
+										},
+									},	
+								},
+							};
+							
+							this.tablebuttonclick = [
+								{ // 璇︽儏
+									isbuttonshow:  me.cbuttons_r.FormDetail ? me.cbuttons_r.FormDetail : false, type: "primary",
+									code: "formdetail", isselected: true, classname:"",
+									onclick: function(obj) {
+										me.editData("browse", obj.selectedList[0])
+									}
+								},
+								{ // 鏂板
+									isbuttonshow: me.cbuttons_r.Add ? me.cbuttons_r.Add : false,type:"primary",
+									code: "add",isselected: false,classname: "",
+									onclick: function(obj) {
+										me.editData("add", {})
+									}
+								},
+								{ // 缂栬緫
+									isbuttonshow:  me.cbuttons_r.Edit ? me.cbuttons_r.Edit : false,type:"primary",
+									code: "edit",isselected: true,classname: "",
+									disabled: function(selectRowList) {
+										var bo_ = true;
+										if (selectRowList[0] && (!selectRowList[0].state_code || (selectRowList[0].state_code && selectRowList[0].state_code == 'Input'))) {
+											bo_ = false;
+										}
+										return bo_
+									},
+									onclick: function(obj) {
+										me.editData('edit', obj.selectedList[0])
+									}
+								},
+								{ // 鍒犻櫎
+									isbuttonshow:  me.cbuttons_r.Delete ? me.cbuttons_r.Delete : false, type: "danger",
+									code: "delete", isselected: true, classname:"",
+									disabled: function(selectRowList) {
+										var bo_ = true ;
+										if (selectRowList[0] && (!selectRowList[0].state_code || (selectRowList[0].state_code && selectRowList[0].state_code == 'Input'))) {
+											bo_ = false
+										}
+										return bo_;
+									},
+									onclick: function(obj) {
+										me.delData(obj, obj.selectedList[0])
+									}
+								}
+							]
+						},
+						
+						rowClick(obj) {
+							var me = this;
+							me.selectedrow = obj.row;
+						},
+						
+						editData(sceneCode, row) {
+							var me = this;
+							var config = {
+								totab: true, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
+								width: "900px",
+								height: "500px",
+								icon: "icon-product",
+								text: me.title + "璇︽儏",
+								id: "form_simple" + sceneCode + row.id,//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/model/page/form_simple.html",
+								dataname: me.dataname,
+								data: row,
+								delta: {},
+								sceneCode: sceneCode,//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(obj, callback) {
+									me.onQuery();
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+						delData(obj, row) {
+							let me = this;
+							let name_ = "璇ユ暟鎹�";
+							
+							if (!row.id) {
+								Root.message({
+									type: 'warning',
+									message: '璇烽�夋嫨鍒犻櫎鏁版嵁'
+								});  
+								return
+							}
+							if (row.name) {
+								name_ = "銆�" + row.name + "銆�";
+							}
+							
+							Root.confirm('纭畾鍒犻櫎' + name_ + '鍚楋紵', '鍒犻櫎鎻愮ず', {
+							  confirmButtonText: '鍒犻櫎',
+							  cancelButtonText: '鍙栨秷',
+							  type: 'warning'
+							}).then(() => {
+								let param = {
+									id: row.id,
+									dataname: me.dataname,
+								}
+								Server.call("root/data/deleteEntity", param, function(result) {
+									Root.message({
+										type: 'success',
+										message: '鍒犻櫎鎴愬姛!'
+									});
+									me.onQuery();
+								});
+							}).catch(() => {
+								Root.message({
+									type: 'info',
+									message: '宸插彇娑堝垹闄�'
+								});          
+							});
+						},
+						
+						DownloadTemplate() {
+							var pathurl = "";
+							if (this.selectTabObj.code == "amt_detail") {
+								pathurl = "template/1.瀵煎叆妯℃澘/鎶樻墸鏄庣粏瀵煎叆-鎶樻墸.xlsx"; 
+							}
+							else if (this.selectTabObj.code == "qty_detail") {
+								pathurl = "template/1.瀵煎叆妯℃澘/鎶樻墸鏄庣粏瀵煎叆-涔拌禒 .xlsx";
+							}
+							handleDownload(pathurl);
+						},
+						
+						onPopupByUploadFile() {
+							var me = this;
+							var ioname_ = ""
+							if (this.selectTabObj.code == 'amt_detail') {
+								ioname_ = "import_rebate_amt";
+							}
+							else if (this.selectTabObj.code == "qty_detail") {
+								ioname_ = "import_rebate_qty";
+							}
+							var delta_ = {
+								filetypelist: [], 
+								isToDB: true,
+								dataname: this.selectTabObj.dataname,
+								tableFields: this.selectTabObj.tableFields,
+								otherSave: "salesBizLogic/saveDealerTargetByImport",
+							}
+							var config = {
+								totab: false,
+								width: "500px",
+								icon: "icon-product",
+								text: "鏁版嵁鏂囦欢涓婁紶",
+								id: "popup_uploadFileToDB",
+								url: "module/tool/page/popup_uploadFileToDB.html",
+								data: {
+									uploadType: "dealertarget",
+									tempTable: "temp_target_dealer",
+									operate_type: "dealertarget",
+									userid: me.userid,
+									ioname:ioname_,
+									// position_id: me.position_id,
+								},
+								delta: delta_,
+								callback: function(obj, callback) {
+									me.$message({
+										showClose: true,
+										message: '涓婁紶鎴愬姛锛�',
+										type: 'success'
+									});
+									me.onQuery();
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							this.doPopupByPublic(config);
+						},
+						onDownload() {
+							let me = this;
+							var ioname = "";
+							var sign = "";
+							var filename = '鎶樻墸鏄庣粏瀵煎嚭' + String(new Date().getTime());
+							var filter_ = "1 = 1";
+							filter_ = this.getFilterData(filter_);
+							if (me.selectTabObj.code == "qty_detail") {
+								ioname = "export_rebate_qty_detail"
+								sign = "rebate_qty_detail"
+								filename = '涔拌禒鏄庣粏瀵煎嚭' + String(new Date().getTime());
+							}
+							else if (me.selectTabObj.code == "amt_detail") {
+								ioname = "export_rebate_amt_detail"
+								sign = "rebate_amt_detail"
+							}
+							let param = {
+								sign: sign,
+								filename: filename,
+								filter: filter_,
+								ioname:ioname,
+								orderby: "",
+								token: Root.getToken()
+							}
+							window.top.vue.textdownloadForm(param);
+						},
+					}
+				});
+			};
+			loadJsCss(function () {
+				initVue();
+			});
+		</script>
+	</head>
+	
+	<body style="margin: 0px;" >
+		<div v-cloak id="vbody">
+			<div id="page_root">
+				<div class="topbar">
+					<span :class="page_title == 'right' ? 'h_page_title_right' : 'h_page_title_left'"><span class="h_page_title_txt">{{title}}</span></span>
+					
+					<div :class="page_title == 'right' ? 'h_page_button_left' : 'h_page_button_right'">
+						<el-button-group style="margin-left: 3px">
+							<el-button v-show="cbuttons_r.Import" @click="DownloadTemplate">妯℃澘涓嬭浇</el-button>
+							<el-button v-show="cbuttons_r.Import" @click="onPopupByUploadFile":icon="buttonsconfig.import.icon">{{buttonsconfig.import.name}}</el-button>
+							<el-button v-show="cbuttons_r.Export" @click="onDownload" :icon="buttonsconfig.export.icon">{{buttonsconfig.export.name}}</el-button>
+						</el-button-group>
+					</div>
+				</div>
+			
+				<div class="h_dialog__body">
+					<h-table
+						v-if="isRefresh"
+						ref="table1"
+						:table-fields="tableFields" 
+						:table-data="tableData" 
+						:table-field-click="tablefieldClick"
+						:pagesize="pagesize"
+						:pagenum="pagenum"
+						:total="total"
+						:table-height="tableHeight"
+						:is-highlight-row="true"
+						:isdraggableorder="cbuttons_r.Set"
+						:table-buttons-click="tablebuttonclick"
+						:filtersobj="filterObj"
+						:isbasicfilterfields="isbasicfilterfields"
+						:basicfilterfieldslength="5"
+						
+						v-on:get-data="getData"
+						v-on:row-click="rowClick"
+						v-on:order-fields="orderTableFields"
+					>
+					</h-table>
+				</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>
+		
+		<style>
+			[v-cloak] {
+				display: none !important;
+			}
+		</style>
+	</body>
+</html>
diff --git a/module/system/page/main.html b/module/system/page/main.html
index 5d29588..08db079 100644
--- a/module/system/page/main.html
+++ b/module/system/page/main.html
@@ -6,28 +6,28 @@
 	<meta http-equiv="Pragma" content="no-cache">
 	<meta http-equiv="Cache-control" content="no-cache">
 	<meta http-equiv="Cache" content="no-cache">
-	<title>缁堢鎺ㄥ箍骞冲彴</title>
-	<link href="../css/main.css?v=2024081902" rel="stylesheet">
-	<link href="../../../css/control.css?v=2024081902" rel="stylesheet">
-	<link href="../../../css/page.css?v=2024081902" rel="stylesheet">
-	<link href="../../../css/icon/iconfont.css?v=2024081902" rel="stylesheet">
+	<title>钀ラ攢涓�浣撳寲杩愯惀骞冲彴</title>
+	<link href="../css/main.css?v=2024082502" rel="stylesheet">
+	<link href="../../../css/control.css?v=2024082502" rel="stylesheet">
+	<link href="../../../css/page.css?v=2024082502" rel="stylesheet">
+	<link href="../../../css/icon/iconfont.css?v=2024082502" rel="stylesheet">
 	<link href="../../../js/vue/element-ui/lib/theme-chalk/index.css" rel="stylesheet">
 	<link href="../../../img/org/head.png" rel="shortcut icon" type="image/x-icon">
-	<link href="../../../css/myelement.css?v=2024081902" rel="stylesheet">
+	<link href="../../../css/myelement.css?v=2024082502" rel="stylesheet">
 	
 	<script src="../../../js/jquery-3.5.1.min.js"></script>
 	<script src="../../../js/vue/vue.js"></script>
 	
-	<script src="../../../js/config.js?v=2024081902"></script>
+	<script src="../../../js/config.js?v=2024082502"></script>
 	<script src="../../../data/data.js"></script>
 	<script src="../../../js/vue/elementDefault.js"></script>
 	<script src="../../../js/vue/element-ui/lib/index.js"></script>
 	<script src="../../../js/Sortable.js"></script>
-	<script src="../../../js/vue/page.js?v=2024081902"></script>
-	<script src="../../../js/foundation.js?v=2024081902"></script>
-	<script src="../../../js/control.js?v=2024081902"></script>
+	<script src="../../../js/vue/page.js?v=2024082502"></script>
+	<script src="../../../js/foundation.js?v=2024082502"></script>
+	<script src="../../../js/control.js?v=2024082502"></script>
 	<script src="../../../js/loadJsCss.js"></script>
-	<script src="../../../js/myelement.js?v=2024081902"></script>
+	<script src="../../../js/myelement.js?v=2024082502"></script>
 	
 </head>
 	
diff --git a/module/tool/page/popup_iconfont.html b/module/tool/page/popup_iconfont.html
index 82dbee4..c5a4e83 100644
--- a/module/tool/page/popup_iconfont.html
+++ b/module/tool/page/popup_iconfont.html
@@ -38,7 +38,7 @@
 							this.$nextTick(function(){
 								//let w_ = this.$refs.popup_body.offsetWidth + "px";
 								let w_ = "900px";
-								let h_ = this.$refs.popup_body.offsetHeight + "px";
+								let h_ = (this.$refs.popup_body.offsetHeight + 10) + "px";
 								Root.setPopupWH(w_, h_);
 							})
 						});

--
Gitblit v1.8.0