From d0fab39db8c50fb72d7311b0d4c80e475af47c76 Mon Sep 17 00:00:00 2001
From: zhangyanpeng <bob.zhang@highdatas.com>
Date: 星期日, 04 八月 2024 00:34:02 +0800
Subject: [PATCH] 调整

---
 module/md/page/customer/page/customer_list_account.html |    2 
 module/md/page/product/page/batch_number.html           |  995 +++++++++++++---------------
 module/flow/page/flow_inventory_list.html               |    8 
 module/system/page/main.html                            |   20 
 module/md/page/product/page/batch_number_edit.html      |  337 ++++++--
 module/md/page/product/page/category_edit.html          |  653 +++++++++++++++++++
 6 files changed, 1,369 insertions(+), 646 deletions(-)

diff --git a/module/flow/page/flow_inventory_list.html b/module/flow/page/flow_inventory_list.html
index b48fe3d..c8d7582 100644
--- a/module/flow/page/flow_inventory_list.html
+++ b/module/flow/page/flow_inventory_list.html
@@ -27,7 +27,7 @@
 						},
 						tabs: [],
 						tabsobj: {},
-
+						isShowTab: false,
 						dataRequest: [],
 						authTableFields: [
 							{field: "code", name: "鍖婚櫌缂栫爜", isshow: "T", align: "center",width: "150"},
@@ -1033,16 +1033,16 @@
 						<span>鎶ュ憡鏃ユ湡锛�</span>
 						<span v-if="selectTabObj && selectTabObj.code == 'month'">{{newdate_month}}</span>
 						<span v-if="selectTabObj && selectTabObj.code == 'daily'">{{newdate_day}}</span>
-						<el-radio-group style="margin-left: 10px;"
+						<!-- <el-radio-group style="margin-left: 10px;"
 							v-if="selectTabObj && selectTabObj.filterObj && selectTabObj.code=='month'"
 							v-model="selectTabObj.filterObj.dataversion" size="mini" fill="#4cb108">
 							<el-radio-button label="鏈堝害鍒濈増">鍒濈増</el-radio-button>
 							<el-radio-button label="鏈堝害缁堢増">缁堢増</el-radio-button>
-						</el-radio-group>
+						</el-radio-group> -->
 					</div>
 				</div>
 
-				<div>
+				<div v-show="isShowTab">
 					<el-tabs v-model="activeTabName" @tab-click="handleClick">
 						<el-tab-pane v-for="(tab, k) in tabs" :label="tab.name" :name="tab.code" :key="k"></el-tab-pane>
 					</el-tabs>
diff --git a/module/md/page/customer/page/customer_list_account.html b/module/md/page/customer/page/customer_list_account.html
index 169c84e..62d6210 100644
--- a/module/md/page/customer/page/customer_list_account.html
+++ b/module/md/page/customer/page/customer_list_account.html
@@ -22,7 +22,7 @@
 							{code: "orglist", name: "鍌ㄥ", dataname: "md_org_customer", filterTxt: "", orderby: "md_org.update_time desc, md_org.code"},
 							// {code: "distributorlist", name: "閰嶉�佸晢鍒楄〃", dataname: "md_org_customer", filterTxt: "md_org.source='DMS' and md_org.state_code='Open'", orderby: "md_org.update_time desc, md_org.code"},
 							// {code: "nccsy", name: "NCC棣栬惀", dataname: "md_org_account_ncc", filterTxt: "1=1", orderby: "md_org_account_ncc.update_time desc, code"},
-							{code: "WaitOpen", name: "棰勫悎浣�", dataname: "md_org_account", filterTxt: "(md_org_account.state_code='OpeningApproval' or md_org_account.state_code='Open')", orderby: "md_org_account.update_time desc, md_org_account.code"},
+							{code: "WaitOpen", name: "棰勫悎浣�", dataname: "md_org_account", filterTxt: "(md_org_account.state_code='OpeningApproval' or md_org_account.state_code='Open' or md_org_account.state_code='CooperateApproval')", orderby: "md_org_account.update_time desc, md_org_account.code"},
 							{code: "Open", name: "鍚堜綔涓�", dataname: "md_org_partnership", filterTxt: "md_org_account.state_code='Incooperation'", orderby: "md_org_account.update_time desc, md_org_account.code"},
 							{code: "Close", name: "宸查��鍑�", dataname: "md_org_account", filterTxt: "md_org_account.state_code='Close'", orderby: "md_org_account.update_time desc, md_org_account.code"},
 							{code: "All", name: "鍏ㄩ儴", dataname: "md_org_account", filterTxt: "1=1", orderby: "md_org_account.update_time desc, md_org_account.code"},
diff --git a/module/md/page/product/page/batch_number.html b/module/md/page/product/page/batch_number.html
index 0c066d2..66c9858 100644
--- a/module/md/page/product/page/batch_number.html
+++ b/module/md/page/product/page/batch_number.html
@@ -2,7 +2,7 @@
 <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>
+		<title>璧勬枡搴�</title>
 		
 		<script type="text/javascript">
 			var pageVue = null;
@@ -14,57 +14,91 @@
 			};
 			
 			function initVue() {
-				new TreeVue({
+				pageVue = new TabTableVue({
 					el: "#vbody",
 					data: {
-						// dataname: "md_prod_library",
-						dataname: "md_prod_category",
-						title: "浜у搧妫�楠屾姤鍛�",
-						tree_title: "浜у搧绫诲瀷",
+						title: "璧勬枡搴�",
+						dataname: "sys_dossier",
 						treeTxtFormatter: "{name}",
-						isTreeReadonly: true,
+						isTreeReadonly: false,
+						dataRequest: [
+							{
+								isClientMode: false,
+								name: "md_prod_category",
+								//url: "root/front/getOneDictionary",
+								//paramsobj: { code: "OrgType", },
+								isnotoption: false, //true:涓嶆槸閫夐」
+								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+								label:"name",//鏄笅鎷夐�夐」鏃惰缃�
+							},
+						],
+						type_treedata: [],
+						defaultProps: {value: "name", label: "name"},
+						filterObjBydefault: {},
 						
-						dataname_p: "md_prod_library_detail",
-						pagesize_p: 10,
-						pagenum_p: 1,
-						total_p: 0,
-						tableData_p: [],
-						tableFields_p: [],
-						isRefresh_p: true,
-						tableHeight_p: 100,
-						
-						tablefieldClick: {},
-
-						setSelectedRowId: null,
-
-						//filter
-						filterObj: {},
-						filterAttr: {
-							columnnumber: 3,
-							labelwidth: "100px",
-							labelposition: "right",
-							size: "medium",
-							border: "3px solid #c6c6c600"
-						},
-						filterFields: [],
-						filterfieldClick: {},
-						currentnodekey: "",
-						authorize_category_ids: "1<>1",
+						//Tab椤硅缃�
+						tabs: [
+							{code: "Open", name: "鐢熸晥", dataname: "sys_dossier", orderby: "update_time", filterTxt: "state_code = 'Open'",},
+							{code: "Close", name: "浣滃簾", dataname: "sys_dossier", orderby: "update_time desc", filterTxt: "state_code = 'Cancel'",},
+							// {code: "Overdue", name: "閫炬湡", dataname: "sys_dossier", orderby: "update_time desc", filterTxt: "date_to < NOW()", },
+							{code: "All", name: "鍏ㄩ儴", dataname: "sys_dossier", orderby: "update_time desc", filterTxt: "1=1",},
+						],
+						tabsobj: {},
 						cbuttons_r: {},
+						ctabs_r: {},
+						report_url: {isshow: "T", field: "report_url", name: "妯℃澘璁捐", width: "100"},
+
+						clickChildNode: false,
+						currentnodekey: "",
+						nodeName: "",
+						maxlevel: 3,
 					},
 					created() {
-						
 					},
 					
 					mounted() {
 						var me = this;
 						if (window.top.tab.selected.option.page_id) {
-							// this.page_id = window.top.tab.selected.option.page_id;
 							getPageByPageId(window.top.tab.selected.option.page_id, function(result){
+								me.activeTabName="Open";
 								me.cbuttons_r = result.buttons_r;
+								//棰勫姞杞芥暟鎹�
+								if (me.dataRequest.length) {
+									var result = {};
+									me.loadRequestData(me.dataRequest, result, function(data) {
+										me.dataRequestObj = data;
+										//棰勫姞杞芥暟鎹悗缁欏摢浜涘瓧娈佃缃畂ptions鎴杅ormatterjson
+										let addNode = clone(data.md_prod_category);
+										// addNode.map( n => {
+										// 	me.$set(n, "ishnodeadd", true);
+										// })
+										let md_prod_category_ = ArrayToTree(clone(addNode), "name", "parent_id");
+										me.type_treedata = clone(md_prod_category_);
+
+										me.initTabsPage(function() {
+											// me.initData();
+											if(me.type_treedata[0]) {
+												const leafNode = me.findLeafNode(me.type_treedata[0]);
+												let objInit = {
+													data: leafNode,
+													node: {},
+													el: {},
+												};
+												me.currentnodekey = leafNode.id;
+
+												// this.filterObjBydefault.category_id = leafNode.id;
+												me.onNodeClick(objInit);
+											}
+										});
+									});
+								}
+								else {
+									//鑾峰彇鏁版嵁
+									me.initTabsPage(function() {
+										me.initData();
+									});
+								}
 								
-								//鑾峰彇鏁版嵁
-								me.initData();
 								me.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
 									hideLoading();
 								});
@@ -73,82 +107,60 @@
 					},
 					
 					methods:{
+						onhandleClick() {
+							this.selectTabObj = this.tabspageobj[this.activeTabName];
+							this.selectTabObj.filterObjBydefault = this.filterObjBydefault;
+							this.initData();
+						},
+						
 						initData() {
 							var me = this;
-							this.onQuery(function(result, callback) {//鏌ヨ鍚庣殑鍥炶皟锛岀敤浜庤幏鍙栧瓧娈电殑
-								let initTreeData_ = ArrayToTree(clone(me.initTreeData), "name", "parent_id");
-								me.treeData = initTreeData_;
+							me.tableButtonClick();
+							this.doQueryByTab(function(result, callback) {//鏌ヨ鍚庣殑鍥炶皟锛岀敤浜庤幏鍙栧瓧娈电殑
+								if (result.meta && result.meta[me.selectTabObj.dataname] && result.meta[me.selectTabObj.dataname].fields) {
+									var metas = clone(result.meta[me.selectTabObj.dataname].fields);
+									var filterFields_ = [];
+									var tableFields_ = [];
+									
+									// tableFields_.push(me.report_url);
+									
+									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.selectTabObj.filterFields || (me.selectTabObj.filterFields && me.selectTabObj.filterFields.length == 0)) {
+										// me.selectTabObj.filterFields = clone(me.default_filterFields);
+										// me.selectTabObj.tableFields = clone(me.default_tableFields);
+										
+										me.selectTabObj.filterFields = clone(filterFields_);
+										me.selectTabObj.tableFields = clone(tableFields_);
+										
+										//瀛楁鏁扮粍杞瓧娈祇bj锛岀洰鐨勪负浜嗙瓫閫夋椂鑾峰彇瀛楁灞炴��
+										me.fieldsToFieldsObj();
+										
+										//璁剧疆瀛楁浜嬩欢
+										me.tableFieldClick();
+									}
+								}
 								
 								if (callback) {
 									callback();
 								}
-								
-								me.getTableMeta();
-
-								//寰呭畬鍠�
-								// if(me.treeData[0].children[0].children[0]) {
-								// 	let objInit = {
-								// 		data: clone(me.treeData[0].children[0].children[0]),
-								// 		node: {},
-								// 		el: {},
-								// 	};
-								// 	me.onNodeClick(objInit);
-								// }
-
-								//Brooke
-								// console.log(me.treeData);
-								// if(me.treeData[0]) {
-								// 	let objInit = me.findNodeInit(me.treeData[0]);
-								// 	console.log(objInit);
-								// }
-
-								//GPT3.5
-								// const deepestNode = me.findDeepestNode(me.treeData[0]);
-								// console.log(deepestNode);
-
-								if(me.treeData[0]) {
-									const leafNode = me.findLeafNode(me.treeData[0]);
-									let objInit = {
-										data: leafNode,
-										node: {},
-										el: {},
-									};
-									me.currentnodekey = leafNode.id;
-									me.onNodeClick(objInit);
-								}
 							});
 						},
 
-						//Brooke
-						// findNodeInit(arr) {
-						// 	var me = this;
-						// 	if(!arr.children || arr.children.length === 0) {
-						// 		return arr;
-						// 	} else {
-						// 		let child = arr.children[0];
-						// 		const nodeInit = findNodeInit(child);
-						// 		if(nodeInit) {
-						// 			return nodeInit;
-						// 		} esle
-						// 	}
-						// },
-
-						//GPT3.5
-						// findDeepestNode(node) {
-						// 	if (!node.children || node.children.length === 0) {
-						// 		return node;
-						// 	}
-						// 	let deepestChild = node.children[0];
-						// 	for (let i = 1; i < node.children.length; i++) {
-						// 		const child = node.children[i];
-						// 		const deepestGrandchild = this.findDeepestNode(child);
-						// 		if (deepestGrandchild.depth > deepestChild.depth) {
-						// 		deepestChild = deepestGrandchild;
-						// 		}
-						// 	}
-						// 	return deepestChild;
-						// },
-
+						//鎵惧埌绗竴绾ф爲鐨勬渶娣卞眰瀛愯妭鐐�
 						findLeafNode(node) {
 							if (!node.children || node.children.length === 0) {
 								return node;
@@ -162,23 +174,157 @@
 							}
 							return null;
 						},
+
+						//鎵惧埌鎵�鏈夌殑瀛愯妭鐐�
+						findAllLeafNode(node) {
+							// if (!node.children || node.children.length === 0) {
+							// 	return node;
+							// }
+							// for (let i = 0; i < node.children.length; i++) {
+							// 	const child = node.children[i];
+							// 	const leafNode = this.findLeafNode(child);
+							// 	if (leafNode) {
+							// 		return leafNode;
+							// 	}
+							// }
+							// return null;
+						},
 						
-						onAddNode(obj) {
-							var data = obj.data, node = obj.node;
+						// 璁剧疆琛ㄦ牸宸ュ叿鏍忔寜閿簨浠�
+						tableButtonClick() {
+							var me = this;
+							var tablebuttonClick = {};
+							tablebuttonClick.Open = [
+								{
+									isbuttonshow: true,type:"primary",
+									code: "add",isselected: false,classname: "",
+									onclick: function(obj) {
+										me.onAddData('add')
+									}
+								},
+								{
+									isbuttonshow: true,type: "danger",
+									code: "repeal",isselected: true,classname: "",
+									disabled: function(selectRowList) {
+										var bo_ = true;
+										if (selectRowList[0] && selectRowList[0].state_code == 'Open') {
+											bo_ = false;
+										}
+										return bo_
+									},
+									onclick: function(obj) {
+										me.cancelConfirm()
+									}
+								}
+							]
+							tablebuttonClick.All = [
+								{
+									// name: "璇︽儏", // type: "primary", // icon: "el-icon-edit",
+									isbuttonshow: true,
+									code: "formdetail", isselected: true, classname: "",
+									onclick: function(obj) {
+										// obj.selectedList
+										me.openCustomerUser('browse', obj.selectedList[0]);
+									}
+								},
+							]
+							
+							
+							if (tablebuttonClick[this.activeTabName]) {
+								this.selectTabObj.tablebuttonClick = tablebuttonClick[this.activeTabName];
+							}
+							else {
+								this.selectTabObj.tablebuttonClick = []
+							}
+						},
+						
+						tableFieldClick() {
+							var me = this;
+							var tablefieldClick = {};
+							//琛ㄦ牸瀛楁浜嬩欢璁剧疆
+							tablefieldClick = {
+								name: {//瀛楁浜嬩欢璁剧疆
+									val: {//鏈夊�兼椂鐨勭偣鍑讳簨浠�
+										notclick_val: "",//涓嶅彲鐐瑰嚮鐨勫��,1銆佹槸鏁扮粍["11","22"]锛�2銆佷互鈥�;鈥濆垎闅旂殑瀛楃涓�"111;222"
+										notclick_bindfield: [],//褰撹瀛楁鍊肩瓑浜庢寚瀹氬瓧娈靛�兼椂涓嶅彲鐐瑰嚮["filterfield": "111"]
+										onclick: function(obj) {//鏁版嵁鍊肩偣鍑讳簨浠�
+											me.onShowData(obj);
+										},
+									},
+								},
+								template_attachment: {//瀛楁浜嬩欢璁剧疆
+									val: {//鏈夊�兼椂鐨勭偣鍑讳簨浠�
+										notclick_val: "",//涓嶅彲鐐瑰嚮鐨勫��,1銆佹槸鏁扮粍["11","22"]锛�2銆佷互鈥�;鈥濆垎闅旂殑瀛楃涓�"111;222"
+										notclick_bindfield: [],//褰撹瀛楁鍊肩瓑浜庢寚瀹氬瓧娈靛�兼椂涓嶅彲鐐瑰嚮["filterfield": "111"]
+										onclick: function(obj) {//鏁版嵁鍊肩偣鍑讳簨浠�
+											//鎵撳紑
+											me.showFileImgByFileId(obj, "template_attachment", "template_attachment_id");
+										},
+									},
+								},
+							};
+							this.selectTabObj.tablefieldClick = tablefieldClick;
+						},
+
+						//闄勪欢棰勮
+						showFileImgByFileId(obj, filenamefield, fileidfield) {
 							let me = this;
+							var file_name = obj.row[filenamefield];
+							var file_id = obj.row[fileidfield];
+							if(file_id) {
+								var fileid = file_id;
+								let fileName = clone(file_name);
+								let index1 = fileName.lastIndexOf(".");
+								let index2 = fileName.length;
+								let suffix = fileName.substring(index1, index2).toLowerCase(); //鍚庣紑鍚�
+								if (suffix == ".png" || suffix == ".jpg" || suffix == ".pdf") {
+									var row = {
+										fileid: fileid,
+										filename: fileName,
+										dataname: "sys_dossier"
+									}
+						
+									var config = {
+										totab: false,
+										width: "1000px",
+										height: 800,
+										icon: "icon-product",
+										text: "闄勪欢棰勮",
+										id: "pdf_" + fileid,
+										url: "module/tool/page/popup_file_pdf.html",
+										data: row,
+										delta: {},
+										callback: function(obj, callback) {
+											if (callback) {
+												callback();
+											}
+										}
+									};
+									this.doPopupByPublic(config);
+								}
+								else {//鍙彲涓嬭浇锛屼笉鍙瑙�
+									// handleDownloadUrl(fileid,false);
+									handleDownload(fileid, "sys_dossier");
+								}
+							}
+						},
+						
+						//妯℃澘璇︽儏
+						onShowData(obj) {
+							var me = this;
+							
 							var config = {
-								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
-								width: "500px",
-								height: "300px",
+								totab: false,
 								icon: "icon-product",
-								text: "浜у搧绫诲瀷淇℃伅",
-								id: "product_type_edit",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
-								url: "module/md/page/product/page/product_type_edit.html",
-								data: {},
-								delta: {},
-								sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
+								text: "璧勬枡璇︽儏",
+								id: "agreement_mould_edit" + obj.row.id,//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								// url: "module/agreement/page/agreement_mould_edit.html",
+								url: "module/md/page/product/page/batch_number_edit.html",
+								data: obj.row,
+								delta: {},//澶囨鐗堟湰,
+								sceneCode: "browse",//"refuseedit",//"approval", //"add"//"browse",
 								callback: function(obj, callback) {
-									me.type_treedata = obj.options
+									me.onQuery();
 									if (callback) {
 										callback();
 									}
@@ -187,13 +333,155 @@
 							me.doPopupByPublic(config);
 						},
 						
+						//鏂板妯℃澘
+						onAddData(config) {
+							var me = this;
+							var type = "";
+							var delta_ = {
+								nodeKey: this.filterObjBydefault.category_id,
+							}
+							if (this.nodeName) {
+								type = this.nodeName;
+							}
+							var config = {
+								totab: false,
+								icon: "icon-product",
+								text: "璧勬枡淇℃伅" + " - " + type,
+								id: "agreement_mould_edit",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								// url: "module/agreement/page/agreement_mould_edit.html",
+								url: "module/md/page/product/page/batch_number_edit.html",
+								data: {},
+								delta: delta_,
+								sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(obj, callback) {
+									me.onQuery();
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+
+						//浣滃簾妯℃澘纭
+						cancelConfirm() {
+							let me = this;
+							data = me.selectTabObj.selectedrow;
+							Root.confirm('纭畾浣滃簾-' + data.name + '-鍚楋紵', '浣滃簾鎻愮ず', {
+							  confirmButtonText: '纭畾',
+							  cancelButtonText: '鍙栨秷',
+							  type: 'warning'
+							}).then(() => {
+								me.doCloseApproval();
+							}).catch(() => {
+								Root.message({
+									type: 'info',
+									message: '宸插彇娑堜綔搴�'
+								});
+							});
+						},
+						//浣滃簾妯℃澘
+						doCloseApproval() {
+							var me = this;
+							
+							let param = {
+								dataname: me.dataname,
+								data: {
+									"sys_dossier" :{
+										id: me.selectTabObj.selectedrow.id,
+										state_code: "Cancel",
+										state_name: "浣滃簾",
+									}
+								},
+							}
+							
+							Server.call("root/data/saveEntity", param, function(result) {
+								console.log(result);
+								Root.message({
+									type: 'success',
+									message: '宸蹭綔搴�'
+								}); 
+								me.onQuery();
+							});
+						},
+						
+						//鐐瑰嚮鑺傜偣
+						onNodeClick(obj) {
+							var data = obj.data, node = obj.node, el = obj.el;
+							var val = data.id;
+							console.log(obj);
+							if (data.parent_id) {
+								this.clickChildNode = true;
+								this.nodeName = data.name;
+							} else {
+								this.clickChildNode = false;
+							}
+							//old
+							if (data.children && data.children.length) {
+								// val = "";
+								data.children.map(r=>{
+									if (val == "") {
+										val = r.id;
+									}
+									else {
+										val += "','" + r.id;
+									}
+								})
+							}
+
+							// if (data.children && data.children.length) {
+							// 	// val = "";
+							// 	data.children.map(r=>{
+							// 		if (val == "") {
+							// 			val = r.id;
+							// 		}
+							// 		else {
+							// 			val += "','" + r.id;
+							// 		}
+							// 	})
+							// }
+							
+							// this.selectedrow = data;
+							this.filterObjBydefault.category_id = val;
+							this.activeTabName = "Open";
+							this.selectTabObj = this.tabspageobj[this.activeTabName];
+							this.onhandleClick();
+						},
+						
+						//澧炲姞鑺傜偣
+						onAddNode(obj) {
+							var data = obj.data, node = obj.node;
+							let me = this;
+							var config = {
+								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
+								width: "500px",
+								height: "300px",
+								icon: "icon-product",
+								text: "璧勬枡鍒嗙被",
+								id: "category_edit",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
+								url: "module/md/page/product/page/category_edit.html",
+								data: {},
+								delta: {},
+								sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
+								callback: function(options_obj, callback) {
+									me.type_treedata = options_obj.options;
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							me.doPopupByPublic(config);
+						},
+						
+						//缂栬緫鑺傜偣
 						onEditNode(obj) {
 							var data = obj.data, node = obj.node;
 							var me = this;
 							Root.showPopup({
-								url: "module/md/page/product/page/product_type_edit.html",
+								url: "module/md/page/product/page/category_edit.html",
 								width: 800,
 								height: 230,
+								text: "璧勬枡鍒嗙被",
 								data: data,
 								sceneCode: "edit",
 								callback: function(options_obj, callback) {
@@ -203,8 +491,10 @@
 									}
 								}
 							});
+							
 						},
 						
+						//鍒犻櫎鑺傜偣
 						onDelNode(obj) {
 							var data = obj.data, node = obj.node;
 							let me = this;
@@ -213,7 +503,7 @@
 							  cancelButtonText: '鍙栨秷',
 							  type: 'warning'
 							}).then(() => {
-								me.dodeldata(data, node, "agm_category");
+								me.dodeldata(data, node, "md_prod_category");
 							}).catch(() => {
 								Root.message({
 									type: 'info',
@@ -221,11 +511,9 @@
 								});
 							});
 						},
-						
 						dodeldata(row, node, tablename) {
 							if (row.id) {
 								let param = {
-									
 									dataname: tablename,
 									id: row.id
 								}
@@ -247,318 +535,9 @@
 							}
 						},
 						
-						node_isShow(data, isShow) {
-							if (this.$refs[data.id]) {
-								this.$refs[data.id].style.display = isShow ? '' : 'none';
-							}
-						},
-						
-						onNodeClick(obj) {
-							console.log(obj);
-							var data = obj.data, node = obj.node, el = obj.el;
-							var authorize_category_ids = "";
-							if (data.children && data.children.length) {
-								authorize_category_ids = "category_name='" + data.name + "'"
-							}
-							else {
-								authorize_category_ids = "product_name='" + data.name + "'"
-							}
-							
-							// this.filterObjBydefault.category_name = val
-							this.selectedrow = data;
-							this.setSelectedRowId = null;//Brooke
-							this.filterObj = {};
-							this.pagenum_p = 1;
-							
-							this.authorize_category_ids = authorize_category_ids;
-							this.getDataByNode();
-
-						},
-						
-						// onNodeClick(data, node, el) {
-						// 	var val = data.name;
-						// 	if (data.children && data.children.length) {
-						// 		val = "";
-						// 		data.children.map(r=>{
-						// 			if (val == "") {
-						// 				val = r.name;
-						// 			}
-						// 			else {
-						// 				val += "','" + r.name;
-						// 			}
-						// 		})
-						// 	}
-							
-						// 	// this.filterObjBydefault.category_name = val
-						// 	this.selectedrow = data;
-						// 	this.pagenum_p = 1;
-						// 	this.getDataByNode();
-						// },
-						
-						getDataByNode() {
+						rowClick(obj){
 							var me = this;
-							if (!me.selectedrow.id) {
-								return
-							}
-							
-							var filter_ = "";
-							
-							// filter_ = " product_line_name like '" + this.selectedrow.name + "' or authorize_category_name like '" + this.selectedrow.name + "'"
-							//filter_ = " code is not null and code <> '' and (authorize_category_id = '" + me.selectedrow.type_id + "' or authorize_category_name like '" + me.selectedrow.name + "')"
-							
-							filter_ =  this.authorize_category_ids;
-							var param_ = {
-								dataname: me.dataname_p,
-								filter: filter_,
-								orderby: "product_name",
-								page: {
-									pageno: me.pagenum_p,
-									pagesize: me.pagesize_p
-								},
-							}
-							
-							Server.call("root/data/getEntitySet", param_, function(result) {
-								if (result && result.data && result.data.entityset) {
-									var data_ = result.data.entityset;
-									me.tableData_p = data_;
-									me.total_p = result.data.page.recordcount;
-								}
-								else {
-									me.total_p = 0;
-								}
-							})
-						},
-						
-						getTableMeta() {
-							var me = this;
-							var param_ = {
-								dataname: this.dataname_p,
-								filter: "1<>1",
-								attachMeta: true,
-							}
-							
-							Server.call("root/data/getEntitySet", param_, function(result) {
-								if (result.meta && result.meta[me.dataname_p] && result.meta[me.dataname_p].fields) {
-									var metas = clone(result.meta[me.dataname_p].fields);
-									var filterFields_ = [];
-									var tableFields_ = [];
-									
-									metas.map(f=>{
-										f.isshow = "T";
-										//filter
-										if (f.isfilter) {
-											filterFields_.push(clone(f));
-										}
-										else {
-											var filter_f = clone(f);
-											filter_f.isshow = "F";
-											filterFields_.push(filter_f);
-										}
-										
-										if(f.field == "rule_code") {
-											f.isshow = "F";
-										}
-
-										tableFields_.push(clone(f));
-									})
-									if (!me.tableFields_p || (me.tableFields_p && me.tableFields_p.length == 0)) {
-										me.tableFields_p = clone(tableFields_);
-										me.filterFields = clone(filterFields_);
-
-										var filterObj_ = getDataByFields(me.filterObj, me.filterFields);
-										me.filterObj = clone(filterObj_);
-									}
-								}
-								//瀛楁鏁扮粍杞瓧娈祇bj锛岀洰鐨勪负浜嗙瓫閫夋椂鑾峰彇瀛楁灞炴��
-								me.fieldsToFieldsObj();
-
-								me.tableFieldClick();
-								me.tableDataAfter_p();
-							})
-						},
-
-						fieldsToFieldsObj() {
-							//瀛楁杞崲
-							var formFieldsObj_ = {};
-							var tableFieldsObj_ = {};
-							this.formFieldsObj_ = {};
-							this.tableFieldsObj = {};
-							var filterFieldsObj_ = {};
-							this.filterFieldsObj = {};
-
-							
-							this.formFields.map(f=>{
-								if (f.inputtypefilter) {
-									f.type = f.inputtypefilter;
-								}
-								formFieldsObj_[f.field] = f;
-							});
-							
-							this.formFieldsObj = clone(formFieldsObj_);
-							
-							if (this.tableFields && this.tableFields.length) {
-								var tableFields_ = TreeToArray(this.tableFields, "field");
-								tableFields_.map(f=>{
-									tableFieldsObj_[f.field] = f;
-								});
-								
-								this.tableFieldsObj = clone(tableFieldsObj_);
-							}
-							
-
-							this.filterFields.map(f=>{
-								if (f.inputtype == "date") {
-									f.type = "daterange";
-									f.filteroperator = "inScopeInclude";
-								}
-								if (f.inputtypefilter) {
-									f.type = f.inputtypefilter;
-								}
-								filterFieldsObj_[f.field] = f;
-							});
-							
-							this.filterFieldsObj = clone(filterFieldsObj_);
-						},
-
-						tableFieldClick() {
-							var me = this;
-						
-							//琛ㄦ牸瀛楁浜嬩欢璁剧疆
-							this.tablefieldClick = {
-								material_code: {//瀛楁浜嬩欢璁剧疆
-									val: {//鏈夊�兼椂鐨勭偣鍑讳簨浠�
-										notclick_val: "",//涓嶅彲鐐瑰嚮鐨勫��,1銆佹槸鏁扮粍["11","22"]锛�2銆佷互鈥�;鈥濆垎闅旂殑瀛楃涓�"111;222"
-										notclick_bindfield: [],//褰撹瀛楁鍊肩瓑浜庢寚瀹氬瓧娈靛�兼椂涓嶅彲鐐瑰嚮["filterfield": "111"]
-										onclick: function(obj) {//鏁版嵁鍊肩偣鍑讳簨浠�
-											var config = {
-												totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
-												width: "1100px",
-												height: "520px",
-												icon: "icon-product",
-												text: "鎺堟潈鑼冨洿" + (obj.row.material_code ? "-" + obj.row.material_code : ""),
-												id: "popup_sku_relation" + obj.row.id,//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
-												url: "module/md/page/product/page/popup_sku_relation.html",
-												data: obj.row,
-												delta: "",
-												filter: "product_id='"+obj.row.id+"'",
-												sceneCode: "browse",//"refuseedit",//"approval", //"add"//"browse",
-												callback: function(obj, callback) {
-													if (callback) {
-														callback();
-													}
-												}
-											};
-											me.doPopupByPublic(config);
-										},
-									},	
-								},
-							};
-						},
-						
-						tableDataAfter_p() {
-							var me = this;
-							if (this.tableFields_p.length > 0){
-								this.isRefresh_p = false;
-								this.$nextTick(function(){
-									this.isRefresh_p = true;
-									this.$nextTick(function(){
-										var el_list = [];
-										me.tableHeight_p = me.treeHeight;
-									})
-								})
-							}
-						},
-						
-						onQueryAfter() {
-							this.pagenum_p = 1;
-							this.tableData_p = [];
-							this.total_p = 0;
-						},
-						
-						getData_p(page) {
-							this.pagesize_p = page.pagesize;
-							this.pagenum_p = page.pagenum;
-							
-							this.filterQuery();
-						},
-
-						getRow(obj) {
-							this.setSelectedRowId = clone(obj.row.id);
-						},
-						
-						setRuleValue() {
-							let me = this;
-							let obj ={
-								row: {
-									id: me.setSelectedRowId,
-								},
-							} 
-
-							var config = {
-								totab: false, //true: 浠ab瀵艰埅鐨勬柟寮忔墦寮�
-								width: "600px",
-								height: "500px",
-								icon: "icon-product",
-								text: "涓� " + obj.row.id + " 璁剧疆涓嬪崟鍊嶆暟",
-								id: "popup_setRuleValue",//totab: true鏃堕渶璁剧疆锛岀敤浜庡垽鏂槸鍚﹀凡鎵撳紑姝ら〉闈�
-								url: "module/md/page/product/page/popup_setRuleValue.html",
-								data: obj.row,
-								delta: "",
-								// filter: "id = '3018004'",
-								sceneCode: "edit",//"refuseedit",//"approval", //"add"//"browse",
-								callback: function(obj, callback) {
-									me.filterQuery();
-									if (callback) {
-										callback();
-									}
-								}
-							};
-							me.doPopupByPublic(config);
-						},
-
-						filterQuery() {
-							var me = this;
-							// var filter_ = " code is not null and code <> '' and (authorize_category_id = '" + me.selectedrow.type_id + "' or authorize_category_name like '" + me.selectedrow.name + "')"
-							var filter_ = " code is not null and code <> '' and " + me.authorize_category_ids;
-							
-							filter_ = me.getFilterData(filter_, me.filterObj, me.filterFieldsObj);
-							console.log(filter_);
-
-							var param_ = {
-								dataname: me.dataname_p,
-								filter: filter_,
-								orderby: "name",
-								page: {
-									pageno: me.pagenum_p,
-									pagesize: me.pagesize_p
-								},
-							}
-							
-							Server.call("root/data/getEntitySet", param_, function(result) {
-								if (result && result.data && result.data.entityset) {
-									var data_ = result.data.entityset;
-									me.tableData_p = data_;
-									me.total_p = result.data.page.recordcount;
-								}
-								else {
-									me.total_p = 0;
-								}
-							})
-						},
-
-						onInitFilter: function() {
-							this.filterObj = {};
-							this.filterQuery();
-						},
-
-						onDownload() {
-							let me = this;
-							let param = {
-								ioname:"export_md_prod_library_detail",
-								orderby: "",
-								token: Root.getToken()
-							}
-							window.top.vue.textdownloadForm(param);
+							me.selectTabObj.selectedrow = obj.row;
 						},
 					}
 				});
@@ -569,7 +548,7 @@
 			});
 		</script>
 		<style>
-			/*  鍦╲ue.js涓� v-cloak 杩欎釜鎸囦护鏄槻姝㈤〉闈㈠姞杞芥椂鍑虹幇 vuejs 鐨勫彉閲忓悕鑰岃璁$殑 */
+			/* 鍦╲ue.js涓� v-cloak 杩欎釜鎸囦护鏄槻姝㈤〉闈㈠姞杞芥椂鍑虹幇 vuejs 鐨勫彉閲忓悕鑰岃璁$殑 */
 			[v-cloak] {
 				display: none !important;
 			}
@@ -577,9 +556,6 @@
 			    overflow: hidden;
 			    position: relative;
 			    padding-left: 20px;
-			}
-			.nodeLabel {
-			    max-width: 220px !important;
 			}
 		</style>
 		
@@ -590,126 +566,83 @@
 			<div id="page_root">
 				<div class="topbar">
 					<span>{{title}}</span>
-					<div style="float: right; margin-right: 10px">
-						<el-button v-show="cbuttons_r.export" @click="onDownload":icon="buttonsconfig.export.icon">{{buttonsconfig.export.name}}</el-button>
+
+					<div style="float: right; margin-right: 18px;">
+						<el-button v-show="cbuttons_r.Add" :disabled="!clickChildNode" @click="addData" :icon="buttonsconfig.add.icon">{{buttonsconfig.add.name}}</el-button>
+						<!-- <el-button v-show="activeTabName == 'Open'" :disabled="!(selectTabObj.selectedrow && selectTabObj.selectedrow.id && selectTabObj.selectedrow.state_code == 'Open')" type="danger" @click="cancelConfirm">浣� 搴�</el-button> -->
 					</div>
 				</div>
 				
 				<div class="h_dialog__body">
-					<div :style="{position: 'absolute', left: '10px', width: '320px', top: '40px', bottom: '10px', border: '1px solid #ccc'}">
+					<div style="position: absolute;left: 10px; top:45px;width: 320px; bottom: 10px;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>
+							<span style="font-size: 14px;margin-left: 20px;">璧勬枡鍒嗙被</span>
 						</div>
-						<div :style="{padding: '10px 0', height: treeHeight - 55 + 'px', overflow: 'auto'}">
-							<h-tree
-							v-if="isRefresh"
-							:tree-data="treeData"
+						
+						<h-tree
+							v-if="type_treedata && type_treedata.length"
+							:tree-data="type_treedata"
 							:tree-txt-formatter="treeTxtFormatter"
-							:currentnodekey="currentnodekey"
 							:is-readonly="isTreeReadonly"
+							:currentnodekey="currentnodekey"
+							:maxlevel = "maxlevel"
 							
 							@node-click="onNodeClick"
 							@add-node="onAddNode"
 							@edit-node="onEditNode"
 							@del-node="onDelNode"
 							>
-							</h-tree>
-							
-							<!-- <el-tree ref="hierTree" class="filter-tree" node-key="id" :indent="24" 
-							 default-expand-all
-							 highlight-current 
-							 :data="treeData" 
-							 show-checkbox
-							 :expand-on-click-node="true" 
-							 @node-click="onNodeClick"
-							 >
-								<span class="custom-tree-node z_menu_tree" slot-scope="{ node, data, itm }"
-								 @mouseenter="node_isShow(data, true)"
-								 @mouseleave="node_isShow(data, false)"
-								>
-									<span>
-										<div class="nodeLabel nodeLabel_l" style="height: 32px; line-height: 32px;">
-										</div>
-										<div class="nodeLabel z_left_menu_tree_txt">
-											<i v-if="!node.isLeaf" :class="!node.expanded ? 'el-icon-plus':'el-icon-minus'" style="font-size: 10px; margin-right: 10px; border: 1px solid #a7a9a9; color: #a7a9a9;"></i>
-										</div>
-										<div class="nodeLabel z_left_menu_tree_txt">
-											<span>{{ data.name }}</span>
-											<el-badge :ref="'dadgeid_' + data.id" v-show="data.isBadge ? true : false" is-dot class="item">
-											</el-badge>
-										</div>
-									</span>
-									<span>
-										<div :ref="data.id" v-show="false" class="nodeLabel" style="width: 128px;max-width: 128px;">
-											<el-button v-if="!data.parent_id" type="text" 
-											@click.stop="addNode(data,node)" class="z_node_button" icon="el-icon-circle-plus-outline">
-											</el-button>
-											<el-button type="text" 
-											@click.stop="editNode(data,node)" class="z_node_button" icon="el-icon-edit">
-											</el-button>
-											<el-button v-if="!(data.children && data.children.length)" type="text" 
-											@click.stop="delNode(data,node)" class="z_node_button" icon="el-icon-delete">
-											</el-button>
-										</div>
-										
-										<div class="nodeLabel" style="margin-right: 30px;">
-											<span v-if="!node.isLeaf">{{data.children.length}}</span>
-										</div>
-									</span>
-								</span>
-							</el-tree> -->
-						</div>
+						</h-tree>
 					</div>
-					<div :style="{position: 'absolute', left: '340px', right: '10px', top: '40px', bottom: '10px', border: '1px solid #ccc'}">
+					<div style="position: absolute;left: 340px; top:45px; right: 10px; bottom: 10px;border: 1px solid #ccc;">
 						<div>
-							<div style="height: 32px; border-bottom: 1px solid #aaa;">
-								<div class="table_title" style="float: left;">
-									<span>浜у搧鍒楄〃</span>
-								</div>
-								<div style=" text-align: right; ">
-									<el-button v-show="cbuttons_r.RuleValue" :disabled="!(setSelectedRowId)" @click="setRuleValue" >璁剧疆涓嬪崟鍊嶆暟</el-button>
-								</div>
+							<el-tabs v-model="activeTabName" @tab-click="handleClick">
+								<el-tab-pane v-for="(tab, k) in tabs" :label="tab.name" :name="tab.code" :key="k"></el-tab-pane>
+							</el-tabs>
+						</div>
+						<!-- <div class="topbar-line">
+							<div class="query-bar">
+								<h-form-filter v-if="selectTabObj.filterFields" ref="form1" 
+									:form-attr="filterAttr" 
+									:table-fields="selectTabObj.filterFields" 
+									:form-data="selectTabObj.filterObj" 
+									:table-field-click="selectTabObj.filterfieldClick"
+									
+									v-on:on-query="onQuery"
+									v-on:on-init-query="onInitFilter"
+									v-on:on-edit-query="onEditFilter"
+									>
+								</h-form-filter>
 							</div>
-
-							<div class="topbar-line">
-								<!-- <div class="query-icon">
-									<i class="iconfont icon-query"></i>
-								</div> -->
-								<div class="query-bar">
-									<!-- <h-form-filter 
-										ref="form1" 
-										:form-attr="filterAttr"
-										:table-fields="filterFields" 
-										:form-data="filterObj" 
-										:table-field-click="filterfieldClick"
-										
-										v-on:on-query="filterQuery"
-										v-on:on-init-query="onInitFilter"
-										>
-									</h-form-filter> -->
-								</div>
-							</div>
-
+						</div> -->
+									
+						<div class="h_dialog__body">
 							<h-table
-								v-if="isRefresh_p"
-								ref="table_p"
-								:table-fields="tableFields_p" 
-								:table-data="tableData_p" 
-								:pagesize="pagesize_p"
-								:pagenum="pagenum_p"
-								:total="total_p"
-								:table-height="tableHeight_p - 132"
+								v-if="isRefresh && selectTabObj.tableFields"
+								ref="table1"
+								:table-fields="selectTabObj.tableFields" 
+								:table-data="selectTabObj.tableData" 
+								:is-edit-table-data="selectTabObj.isEditTableData"
+								:pagesize="selectTabObj.pagesize"
+								:pagenum="selectTabObj.pagenum"
+								:total="selectTabObj.total"
+								:table-height="selectTabObj.tableHeight - 10"
+								:table-field-click="selectTabObj.tablefieldClick"
+								:is-show-index="selectTabObj.isShowIndex"
+								:tableloading="tableloading"
+								:isdraggableorder="false"
 								:is-highlight-row="true"
-								:table-field-click="tablefieldClick"
+								:isfilterfield="false"
+								:table-buttons-click="selectTabObj.tablebuttonClick"
 								
-								v-on:get-data="getData_p"
-								v-on:row-click="getRow"
+								v-on:get-data="getData"
+								v-on:edit-data="editData"
+								v-on:row-click="rowClick"
+								v-on:order-fields="orderTableFields"
 							>
 							</h-table>
-							
 						</div>
 					</div>
-					
 				</div>
 			</div>
 		</div>
diff --git a/module/md/page/product/page/batch_number_edit.html b/module/md/page/product/page/batch_number_edit.html
index 2401e88..82ab5a4 100644
--- a/module/md/page/product/page/batch_number_edit.html
+++ b/module/md/page/product/page/batch_number_edit.html
@@ -2,7 +2,7 @@
 <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>
+		<title>妯℃澘淇℃伅</title>
 		
 		<script type="text/javascript">
 			var pageVue = null;
@@ -15,35 +15,24 @@
 				new FormVue({
 					el: "#vbody",
 					data: {
-						dataname: "md_batch",
-						title: "娣诲姞鎵瑰彿",
+						dataname: "sys_dossier",
+						title: "妯℃澘淇℃伅",
+
 						formAttr: {
 							istitle: false,
-							title: "鎵瑰彿淇℃伅",
+							title: "琛ㄥ崟鍚嶇О",
 							columnnumber: 2,
-							labelwidth: "140px",
+							labelwidth: "100px",
 							labelposition: "left",//"left",// right//top
 							size: "mini",
 							border: "10px solid #c6c6c600"
 						},
-						
 						formFields: [],
-						default_formFields: [
-							{field: "field11", name: "浜у搧绾�", isshow: "T"},
-							{field: "field22", name: "浜у搧缂栫爜", isshow: "T"},
-							{field: "name", name: "浜у搧鍚嶇О", isshow: "T", type:"popup"},
-							{field: "batchnumber", name: "鎵瑰彿", isshow: "T"},
-							{isshow: "T", field: "field33",name: "浜у搧妫�楠屾姤鍛�", type: "span", buttonarrayname: [{type: "isnotdatashow", buttonname:"鏂囦欢涓婁紶",code:"upload", icon: "el-icon-upload", classname: "form_uploadfile"},{type:"isdata", buttonname: "鏌ョ湅鏂囦欢", icon: "el-icon-search",code:"showfile", classname: "form_showfile"},{type: "isdatashow", buttonname: "鍒犻櫎闄勪欢", icon: "el-icon-delete",code:"delfile", classname: "form_delfile"}], required: true},
-						],
 						newformData: {
-							//id: uuid_short(),
-							// code: createCode("BA"),
-							create_time: createDatetime(),
-							status: "input",
-							state_name: "鑽夌",
-							creator_name: window.top.vue.userinfo.name,
-							type_code: "",
-							type_name: "",
+							state_code: "Open",
+							state_name: "鐢熸晥",
+							type: "agreement",
+							// creator_id:
 						},
 						formData: {},
 						
@@ -51,32 +40,32 @@
 						isedit: false,//鎻愪氦鍓嶇紪杈戯紝淇濆瓨/鎻愪氦
 						isrefuseedit: false,//鎷掔粷鍚庣紪杈戯紝淇濆瓨/鍐嶆鎻愪氦
 						isapproval: false,//瀹℃壒锛屽悓鎰�/鎷掔粷/杞姙/閫�鍥�
-						
 						iscommit: false,//鎻愪氦鏍囪
 						
 						//寮圭獥鍙傛暟
 						popupParames: {},
 						//瀛楁璁剧疆
-						tablefieldClick: {},
 						formfieldClick: {},
 					},
 					created() {
 						this.popupParames = clone(Root.popupParames);
-						this.title = this.popupParames.title || this.popupParames.text
+						this.title = this.popupParames.title || this.popupParames.text;
+
 						if (this.popupParames.data) {
 							this.formData = clone(this.popupParames.data);
 						}
 						
 						if (this.popupParames.sceneCode) {
 							if (this.popupParames.sceneCode == "add") {//鏂板
-								if (this.newformData) {
-									let formData_ = clone(this.formData);
-									
-									for (var k in this.newformData) {
-										formData_[k] = this.newformData[k];
-									}
-									this.formData = formData_;
+								//鍔ㄦ�佽幏鍙栭粯璁ゆ暟鎹�
+								var newEntity_ = {
+									name: "newEntity",
+									url: "root/data/newEntity",
+									paramsobj: {dataname: "sys_dossier"},
+									isnotoption: true, //true:涓嶆槸閫夐」
 								}
+								this.dataRequest.push(newEntity_);
+
 								this.isedit = true;
 							}
 							else if (this.popupParames.sceneCode == "browse") {//鍙
@@ -103,14 +92,26 @@
 							this.loadRequestData(this.dataRequest, result, function(data) {
 								me.dataRequestObj = data;
 								//棰勫姞杞芥暟鎹悗缁欏摢浜涘瓧娈佃缃畂ptions鎴杅ormatterjson
-								
-								data.agm_template.map(c=>{
-									me.options_templateobj[c[me.props_template.value]] = c;
-								})
-								
-								let agm_template_ = ArrayToTree(clone(data.agm_template), "name", "parent_id");
-								me.options_category = agm_template_;
-								
+								if (me.dataRequestObj.newEntity) {
+									var formData = clone(me.dataRequestObj.newEntity.data["sys_dossier"]);
+									// formData.product_category_name = [];
+									if (me.newformData) {
+										let formData_ = clone(formData);
+										
+										for (var k in me.newformData) {
+											if (!formData_[k]) {
+												formData_[k] = me.newformData[k];
+											}
+										}
+
+										me.formData = formData_;
+									}
+									
+									if (me.popupParames.delta) {
+										me.formData.category_id = clone(me.popupParames.delta.nodeKey);
+									}
+								}
+
 								me.initData();
 							});
 						}
@@ -127,6 +128,7 @@
 								//let w_ = this.$refs.popup_body.offsetWidth + "px";
 								let w_ = "900px";
 								let h_ = this.$refs.popup_body.offsetHeight + "px";
+
 								Root.setPopupWH(w_, h_);
 							})
 						});
@@ -176,7 +178,7 @@
 										formFields_.push(clone(f));
 									})
 									if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
-										me.formFields = clone(me.default_formFields);
+										me.formFields = clone(formFields_);
 										
 										//瀛楁鏁扮粍杞瓧娈祇bj锛岀洰鐨勪负浜嗙瓫閫夋椂鑾峰彇瀛楁灞炴��
 										me.fieldsToFieldsObj();
@@ -185,62 +187,65 @@
 										me.tableFieldClick();
 									}
 								}
+
+								if (me.rowData["file_index"]) {
+
+								}
 							})
 						},
 						
 						tableFieldClick() {
 							var me = this;
-							//琛ㄦ牸瀛楁浜嬩欢璁剧疆
-							this.tablefieldClick = {
-							};
-						
 							//琛ㄥ崟瀛楁浜嬩欢璁剧疆
 							this.formfieldClick = {
-								name: {
-									popup: {
-										onclick: function(obj) {//寮圭獥鐐瑰嚮浜嬩欢
-											//鎵撳紑
-											me.tablePopup_productList(obj)
+								template_type_code: {
+									select: {
+										onchange: function(obj) {
+											obj.data.template_type_code = obj.selectoption.code || "";
+											obj.data.template_type_name = obj.selectoption.value || "";
+										}
+									}
+								},
+								
+								template_attachment: {
+									buttonarray: {
+										onclick: function(obj) {
+											var filenamefield = obj.obj.field;
+											var fileidfield = "template_attachment_id";
+											if(obj.buttonobj && obj.buttonobj.code == "showfile"){
+												me.showFileImgByFileId(filenamefield, fileidfield, obj);
+											}else if (obj.buttonobj && obj.buttonobj.code == "upload"){
+												me.onPopupByUploadFile(filenamefield, fileidfield, me.dataname);
+											}else if (obj.buttonobj && obj.buttonobj.code == "delfile"){
+												me.deleteByFileId(filenamefield, fileidfield, obj);
+											}
 										}
 									},
 								},
-								
 							};
-						},
-						
-						tablePopup_productList(obj) {
-							var me = this;
-							Root.showPopup({
-								url: "module/md/page/product/page/popup-new_batch_number-product.html",
-								width: 800,
-								height: 550,
-								data: this.oldObj,
-								sceneCode: "add",
-								dataname: "customer",
-								callback: function(obj, callback) {
-						
-									if (callback) {
-										callback();
-									}
-								}
-							});
 						},
 						
 						//鎻愪氦
 						submitRowTable() {
 							this.iscommit = true;
+							//蹇呭~椤规牎楠�
+                            var bo1 = this.$refs.form1.checkForm();
+							if(!bo1){
+								Root.message({
+                                    type: 'error',
+                                    message: '璇峰~鍐欏繀濉」'
+                                }); 
+                                this.iscommit = false;
+								return;
+                            }
 							this.saveRowTable();
 						},
 						
 						//淇濆瓨
 						saveRowTable() {
 							var me = this;
-							var operator_ = "save";//淇濆瓨
-							if(me.iscommit) {
-								operator_ = "commit";//鎻愪氦
-							}
-							
-							var entity_ = clone(this.formData);
+
+							var entity_ = clone(me.formData);
 							var entity = {};
 							for (var r in entity_) {
 								if (entity_[r] || entity_[r] == "" || entity_[r] == false || entity_[r] == 0) {
@@ -249,34 +254,170 @@
 							}
 							
 							let param = {
-								dataname: this.dataname,
-								// operator: operator_,
+								dataname: me.dataname,
 								data: {},
 							}
-							param.data[this.dataname] = entity;
+							param.data[me.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();
+							}, function(errorresult) {
+								console.log("閿欒淇℃伅", errorresult);
+								if (errorresult.messages && errorresult.messages.count && errorresult.messages.count.error) {
+									if (errorresult.messages.list) {
 										me.iscommit = false;
-										Root.message({
-											type: 'success',
-											message: '鎻愪氦鎴愬姛'
-										}); 
-										me.saveAfter();
+										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: 'success',
-											message: '淇濆瓨鎴愬姛'
-										}); 
-										me.saveAfter();
-									}
+								}
+								else {
+									me.iscommit = false;
+									Root.message({
+										type: 'error',
+										message: '鎻愪氦澶辫触'
+									});
 								}
 							});
 						},
+
+						onPopupByUploadFile(filenamefield, fileidfield,dataname) {
+							var me = this;
+							var analysistype_ = "";
+							var formData_ = clone(me.formData);
+							var delta_ = {filetypelist: [], multiplelimit: 1}//".png", ".jpg", ".pdf"
+							var config = {
+								totab: false,
+								width: "500px",
+								icon: "icon-product",
+								text: "闄勪欢涓婁紶",
+								id: "popupByUploadFile",
+								url: "module/tool/page/popup_uploadFile.html",
+								data: {
+									dataName: dataname,
+									fileidfieldName: fileidfield,
+									id: me.formData.id,
+									fileNamefieldName: filenamefield,
+								},
+								delta: delta_,
+								callback: function(obj, callback) {
+									me.$message({
+										showClose: true,
+										message: '涓婁紶鎴愬姛锛�',
+										type: 'success'
+									});
+
+									if (!formData_[filenamefield]) {
+										formData_[filenamefield] = {};
+									}
+									formData_[filenamefield] = decodeURI(obj.row[0].name);
+									formData_[fileidfield] = obj.row[0].id;
+									
+									me.formData = formData_;
+									if (callback) {
+										callback();
+									}
+								}
+							};
+							this.doPopupByPublic(config);
+						},
+
+						showFileImgByFileId(filenamefield, fileidfield, obj) {
+							let me = this;
+							var file_name = obj.formdata[filenamefield];
+							var file_id = obj.formdata[fileidfield];
+							if(file_id) {
+								var fileid = file_id;
+								let fileName = clone(file_name);
+								let index1 = fileName.lastIndexOf(".");
+								let index2 = fileName.length;
+								let suffix = fileName.substring(index1, index2).toLowerCase(); //鍚庣紑鍚�
+								if (suffix == ".png" || suffix == ".jpg" || suffix == ".pdf") {
+									var row = {
+										fileid: fileid,
+										filename: fileName,
+										dataname: this.dataname
+									}
 						
+									var config = {
+										totab: false,
+										width: "1200px",
+										height: 800,
+										icon: "icon-product",
+										text: "闄勪欢棰勮",
+										id: "pdf_" + fileid,
+										url: "module/tool/page/popup_file_pdf.html",
+										data: row,
+										delta: {},
+										callback: function(obj, callback) {
+											if (callback) {
+												callback();
+											}
+										}
+									};
+									this.doPopupByPublic(config);
+								}
+								else {//鍙彲涓嬭浇锛屼笉鍙瑙�
+									// handleDownloadUrl(fileid,false);
+									handleDownload(fileid, this.dataname);
+								}
+							}
+						},
+
+						deleteByFileId(filenamefield, fileidfield, obj){
+							var me = this;
+							var formData_ = clone(me.formData);
+							Root.confirm('纭畾鍒犻櫎闄勪欢銆�' + formData_[filenamefield] + '銆戝悧锛�', '鍒犻櫎鎻愮ず', {
+							  confirmButtonText: '鍒犻櫎',
+							  cancelButtonText: '鍙栨秷',
+							  type: 'warning'
+							}).then(() => {
+								if (obj.formdata[fileidfield]) {
+									let param = {
+										dataname: "sys_dossier_file",
+										id: obj.formdata[fileidfield],
+									}
+									
+									Server.call("root/data/deleteEntity", param, function(result) {
+										console.log(result);
+										if (result && result.data) {
+											formData_[filenamefield] = "";
+											formData_[fileidfield] = "";
+											me.formData = clone(formData_);
+											Root.message({
+												type: 'success',
+												message: '鍒犻櫎鎴愬姛!'
+											});
+										}
+									});
+								}
+							}).catch(() => {
+								Root.message({
+									type: 'info',
+									message: '宸插彇娑堝垹闄�'
+								});          
+							});
+							
+						},
 					}
 				});
 			};
@@ -293,7 +434,9 @@
 		</style>
 		
 	</head>
-	<body style="margin: 0px;">		<div v-cloak id="vbody">
+	
+	<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">
@@ -302,7 +445,7 @@
 						  <span> {{title}}</span>
 						</div>
 					</div>	
-					<div style="height: 350px; overflow-y: auto;">
+					<div style="height: 300px; overflow-y: auto;">
 						<div class="el-dialog__body">
 							<h-form
 								ref="form1"
@@ -316,13 +459,7 @@
 					</div>
 					<div class="el-dialog__footer">
 						<el-button size="small" type="default" @click="closeDialog">鍙� 娑�</el-button>
-						<el-button size="small" v-if="isedit || isrefuseedit" type="primary" @click="saveRowTable":icon="buttonsconfig.save.icon">{{buttonsconfig.save.name}}</el-button>
-						<el-button size="small" v-if="isrefuseedit" type="success" @click="">鍐嶆鎻愪氦</el-button>
-						
-						<el-button size="small" v-if="isapproval" type="success" @click="">閫� 杩�</el-button>
-						<el-button size="small" v-if="isapproval" type="danger" @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="isedit" type="success" :loading="iscommit" @click="submitRowTable":icon="buttonsconfig.submit.icon">{{buttonsconfig.submit.name}}</el-button>
 					</div>
 				</div>
 			</div>
diff --git a/module/md/page/product/page/category_edit.html b/module/md/page/product/page/category_edit.html
new file mode 100644
index 0000000..e013df8
--- /dev/null
+++ b/module/md/page/product/page/category_edit.html
@@ -0,0 +1,653 @@
+<!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 BasicsVue({
+					el: "#vbody",
+					data: {
+						//dataname:  "agm_record", 
+						form_dataname: "md_prod_category",
+						table_dataname: "",
+						dataRequest: [
+							{
+								name: "md_prod_category",
+								//url: "root/front/getOneDictionary",
+								//paramsobj: { code: "OrgType", },
+								isnotoption: false, //true:涓嶆槸閫夐」
+								code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+								label:"name",//鏄笅鎷夐�夐」鏃惰缃�
+								filter: " (parent_id is null or parent_id='')"
+							},
+							
+							{
+							 name: "agmrecord_field",
+							 dataname: "agm_field",
+							 //url: "root/front/getOneDictionary",
+							 //paramsobj: { code: "OrgType", },
+							 filter: " table_name='agm_record'",
+							 isnotoption: false, //true:涓嶆槸閫夐」
+							 code:"id",//鏄笅鎷夐�夐」鏃惰缃�
+							 label:"field_name",//鏄笅鎷夐�夐」鏃惰缃�
+							},
+							
+						],
+						
+						title: "鍗忚绫诲瀷鏂板",
+						formAttr: {
+							istitle: false,
+							title: "鍗忚绫诲瀷鏂板",
+							columnnumber: 2,
+							labelwidth: "110px",
+							labelposition: "left",// right
+							size: "medium",
+							border: "0px solid #c6c6c600"
+						},
+						formFields: [
+							{isshow: "T", field: "creator_name", name: "鍒涘缓浜�", type: "span", notvalunit: true},
+							{isshow: "T", field: "create_time", name: "鍒涘缓鏃堕棿", type: "span", notvalunit: true},
+							{isshow: "T", field: "parent_id", name: "鎵�灞炵被鍨�", type: "select", isrefresh: true,
+								options: [], props:{value: "id", label: "name"}, notvalunit: true,
+							},
+							{isshow: "T", field: "name", name: "绫诲瀷鍚嶇О", notvalunit: true},
+							//{isshow: "T", field: "fieldlist", name: "澶囨瀛楁閰嶇疆", type: "checkboxobj", options: [], colspan: 3},
+						],
+						newRowDefault: {
+							//id: uuid_short(),
+							code: createCode("BA"),
+							versionno: "1",
+							create_time: createDatetime(),
+							creator_name: window.top.vue.userinfo.name,
+							//fieldlist: []
+						},
+						formData: {},
+						isWithinEditTableData: false,
+						notdisabled: true,
+						Approval: false,
+						
+						isCommit: false,
+						treeoptions: [],
+						
+						tableFields1: [
+							{isshow: "T", field: "field_name", name: "澶囨鍩虹瀛楁"},
+						],
+						tableFields2: [
+							{isshow: "T", field: "field_name", name: "澶囨鏄庣粏浜у搧鍙婇噾棰濆瓧娈�"},
+						],
+						tableFields3: [
+							{isshow: "T", field: "field_name", name: "澶囨鏄庣粏缁堢瀛楁"},
+						],
+						tableHeight: 300,
+						tableData1: [],
+						tableData2: [],
+						tableData3: [],
+						agmFieldsObj: {},
+						isCommit: false,
+						
+						selectionList: [],
+						selectionList_detail: [],
+						//瀛楁璁剧疆
+						tablefieldClick: {},
+						formfieldClick: {},
+					},
+					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.sceneCode) {
+							if (this.popupParames.sceneCode == "browse") {
+								this.formAttr.disabled = true;
+								this.isWithinEditTableData = false;
+								this.notdisabled = false;
+								this.Approval = false;
+							}
+							else if (this.popupParames.sceneCode == "add") {
+								if (this.newRowDefault) {
+									let formData_ = clone(this.formData);
+									
+									for (var k in this.newRowDefault) {
+										formData_[k] = this.newRowDefault[k];
+									}
+									this.formData = formData_;
+								}
+							}
+							else if (this.popupParames.sceneCode == "edit") {
+								let formData_ = clone(this.formData);
+								
+								
+							}
+						}
+					},
+					
+					mounted() {
+						var me = this;
+						//棰勫姞杞芥暟鎹�
+						if (this.dataRequest.length) {
+							var result = {};
+							this.loadRequestData(this.dataRequest, result, function(data) {
+								me.dataRequestObj = data;
+								//棰勫姞杞芥暟鎹悗缁欏摢浜涘瓧娈佃缃畂ptions鎴杅ormatterjson
+								me.tableData1 = clone(data.agmrecord_field);
+								// me.tableData2 = clone(data.agmrecorddetail_field);
+								// me.tableData3 = clone(data.agmrecorddetail_terminal_field);
+								var fieldlist_options = [];
+								me.tableData1.map(r=>{
+									var option_ = {
+										code: r.id,
+										name: r.field_name
+									}
+									fieldlist_options.push(option_);
+									
+									me.agmFieldsObj[r.id] = r;
+								})
+								// me.tableData2.map(r=>{
+								// 	me.agmFieldsObj[r.id] = r;
+								// })
+								// me.tableData3.map(r=>{
+								// 	me.agmFieldsObj[r.id] = r;
+								// })
+								var formFields_ = clone(me.formFields);
+								formFields_.map(f=>{
+									if (f.field == "parent_id") {
+										//me.$set(f.options, me.dataRequestObj.md_prod_category)
+										f.options = me.dataRequestObj.md_prod_category
+									}
+									else if (f.field == "fieldlist") {
+										f.options = fieldlist_options
+									}
+									
+								})
+								me.formFields = clone(formFields_);
+								
+								me.initData();
+							});
+						}
+						else {
+							this.initData();
+						}
+						
+						this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+							hideLoading();
+							
+							//閲嶆柊璁剧疆寮圭獥瀹介珮
+							this.$nextTick(function(){
+								//let w_ = this.$refs.popup_body.offsetWidth + "px";
+								let w_ = "900px";
+								let h_ = this.$refs.popup_body.offsetHeight + "px";
+								Root.setPopupWH(w_, h_);
+							})
+						});
+					},
+					
+					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
+							let filter_table = "";
+							//璁剧疆瀛楁浜嬩欢
+                            me.tableFieldClick();
+						},
+
+						tableFieldClick() {
+							var me = this;
+							//琛ㄥ崟瀛楁浜嬩欢璁剧疆
+							this.formfieldClick = {
+								parent_id: {//妞嶅叆鏃ユ湡
+									select: {
+										onchange: function(obj) {//妞嶅叆鏃ユ湡瑕佹棭浜庝笂鎶ユ棩鏈�
+											console.log("testest", obj);
+											if (obj.selectoption) {
+												if (obj.selectoption.code_rule) {
+													me.$set(me.formData, "code_rule", obj.selectoption.code_rule);
+												}
+												if (obj.selectoption.code_rule) {
+													me.$set(me.formData, "method_name", obj.selectoption.method_name);
+												}
+												if (obj.selectoption.code_rule) {
+													me.$set(me.formData, "sql_content", obj.selectoption.sql_content);
+												}
+											}
+										}
+									}
+								},
+							};
+						},
+						
+						submitRowTable() {
+							this.isCommit = true;
+							this.saveRowTable();
+						},
+						
+						saveRowTable() {
+							var me = this;
+							
+							var operator_ = "save";//淇濆瓨
+							
+							if(me.isCommit) {
+								operator_ = "commit";//鎻愪氦
+							}
+							
+							var entity_ = clone(this.formData);
+							var entity = {};
+							for (var r in entity_) {
+								if (entity_[r] || entity_[r] == "" || entity_[r] == false || entity_[r] == 0) {
+									entity[r] = entity_[r];
+								}
+							}
+							
+							var table_entityset = [];
+							
+							if (this.formData.fieldlist) {
+								this.formData.fieldlist.map(id=>{
+									var entity_d = {
+										category_name: this.formData.name,
+										field_id: id,
+										field: this.agmFieldsObj[id].field,
+										field_name: this.agmFieldsObj[id].field_name,
+										table_name: this.agmFieldsObj[id].table_name
+									}
+									this.formData.id
+									
+									table_entityset.push(entity_d);
+								})
+							}
+							
+							// this.selectionList_detail.map(id=>{
+							// 	var entity_ = {
+							// 		category_name: this.formData.name,
+							// 		field_id: id,
+							// 		field: this.agmFieldsObj[id].field,
+							// 		field_name: this.agmFieldsObj[id].field_name,
+							// 		table_name: this.agmFieldsObj[id].table_name
+							// 	}
+							// 	table_entityset.push(entity_);
+							// })
+							// this.selectionList_terminal_detail.map(id=>{
+							// 	var entity_ = {
+							// 		category_name: this.formData.name,
+							// 		field_id: id,
+							// 		field: this.agmFieldsObj[id].field,
+							// 		field_name: this.agmFieldsObj[id].field_name,
+							// 		table_name: this.agmFieldsObj[id].table_name
+							// 	}
+							// 	table_entityset.push(entity_);
+							// })
+							
+							let param = {
+								
+								dataname: this.form_dataname,
+								// operator: operator_,
+								data: {},
+							}
+							
+							param.data[this.form_dataname] = entity;
+							//param.data[this.table_dataname] = table_entityset;
+							
+							Server.call("root/data/saveEntity", param, function(result) { //
+								console.log(result);
+								if (result.success) {
+									if(me.isCommit){
+										me.isCommit = false;
+										let param_ = {
+											
+											dataname: "md_prod_category",
+											filter: "1=1",
+										}
+										Server.call("root/data/getEntitySet", param_, function(result2){
+											let md_prod_category_ = ArrayToTree(clone(result2.data.entityset), "name", "parent_id");
+											// md_prod_category_.unshift({
+											// 	id:"cascaderbyadd",
+											// 	label: "cascaderbyadd",
+											// 	name: "cascaderbyadd",
+											// 	parent_id: null
+											// })
+											me.treeoptions = md_prod_category_;
+											
+											Root.message({
+												type: 'success',
+												message: '鎻愪氦鎴愬姛'
+											}); 
+											me.saveAfter();
+										});
+									}
+									else {
+										let param_ = {
+											
+											dataname: "md_prod_category",
+											filter: "1=1",
+										}
+										Server.call("root/data/getEntitySet", param_, function(result2){
+											let md_prod_category_ = ArrayToTree(clone(result2.data.entityset), "name", "parent_id");
+											// md_prod_category_.unshift({
+											// 	id:"cascaderbyadd",
+											// 	label: "cascaderbyadd",
+											// 	name: "cascaderbyadd",
+											// 	parent_id: null
+											// })
+											me.treeoptions = md_prod_category_;
+											Root.message({
+												type: 'success',
+												message: '淇濆瓨鎴愬姛'
+											}); 
+											me.saveAfter();
+										});
+									}
+								}
+								
+							});
+						},
+						
+						// visibleChange(obj, rowdata, callback) {
+						// 	let me = this;
+						// 	let row = obj;
+						// 	let field = obj.field;
+						// 	let options_ = [];
+							
+						// 	if(field == "parent_id") {
+						// 		var filter_ = " parent_id is null ";
+								
+						// 		let val = row[field];
+						// 		let param_ = {
+						// 			
+						// 			dataname: "md_prod_category",
+						// 			filter: filter_,
+						// 		}
+						// 		Server.call("root/data/getEntitySet", param_, function(result){
+						// 			options_ = result.data.entityset;
+						// 			options_.map(o=>{
+						// 				o.label = o.name;
+						// 			})
+						// 			console.log(options_);
+						// 			//obj.options = options_;
+						// 			callback({options: clone(options_)});
+									
+						// 		});
+						// 	}
+						// },
+						
+						selectOptionOperate(obj) {
+							let me = this;
+							if (obj.type == "add") {
+								if (obj.fieldobj.field == "type_code") {
+									
+									
+									/* Root.showPopup({
+										url: "../md/customer/popup/customer_list.html",
+										width: 800,
+										height: 550,
+										data: this.oldObj,
+										dataname: "customer",
+										callback: function(obj, callback) {
+											let formData_ = clone(me.formData);
+											formData_.customer_name = obj.row.md_description;
+											formData_.customer_code = obj.row.md_code;
+											formData_.customer_id = obj.row.id;
+											formData_.province_name = obj.row.province;
+											
+											me.formData = formData_;
+											if (callback) {
+												callback();
+											}
+										}
+									}); */
+								}
+							}
+							
+						},
+						
+						formChange(obj) {
+							let me = this;
+							if (obj.fieldobj.field == "type_code") {
+								obj.data.type_name = clone(obj.selectoption.label);
+							}
+							
+						},
+						
+						selectChange(obj) {
+							let me = this;
+							if (obj.fieldobj.field == "parent_id" && obj.selectoption) {
+								//obj.data.type_name = clone(obj.selectoption.label);
+							}
+							
+						},
+						
+						showPopup(obj) {
+							let me = this;
+							this.selectFormField = obj.obj;
+							if (this.selectFormField.field == "customer_name") {
+								
+								Root.showPopup({
+									url: "../md/customer/popup/customer_list.html",
+									width: 800,
+									height: 550,
+									data: this.oldObj,
+									dataname: "customer",
+									callback: function(obj, callback) {
+										let formData_ = clone(me.formData);
+										formData_.customer_name = obj.row.md_description;
+										formData_.customer_code = obj.row.md_code;
+										formData_.customer_id = obj.row.id;
+										// formData_.province_name = obj.row.province;
+										
+										me.formData = formData_;
+										if (callback) {
+											callback();
+										}
+									}
+								});
+							}
+							if (this.selectFormField.field == "delivery_part_name") {
+								Root.showPopup({
+									url: "../org/company/popup/managesubject_list.html",
+									width: 800,
+									height: 550,
+									dataname:"getDelivery_part_name",
+									type :"managesubjectname",
+									callback: function(obj, callback) {
+										let formData_ = clone(me.formData);
+										formData_.delivery_part_name = obj.row.delivery_part_name;
+										formData_.delivery_part_code = obj.row.delivery_part_code;
+										me.formData = formData_;
+										if (callback) {
+											callback();
+										}
+									}
+								});
+							}
+							if (this.selectFormField.field == "product_name") {
+								Root.showPopup({
+									url: "../md/product/popup/sku_list.html",
+									width: 800,
+									height: 550,
+									callback: function(obj, callback) {
+										let formData_ = clone(me.formData);
+										
+										formData_.product_id = obj.row.id;
+										formData_.product_code = obj.row.md_code;
+										formData_.product_name = obj.row.md_description;
+										//formData_.spec = obj.row.pack_specification;
+										
+										me.formData = formData_;
+										if (callback) {
+											callback();
+										}
+									}
+								});
+							}
+						},
+						
+						handleSelectionChange(selection) {
+							this.selectionList = [];
+							if (selection.length > 0) {
+								selection.map(sr=>{
+									this.selectionList.push(sr.id);
+								})
+							}
+						},
+						
+						handleSelectionChange_detail(selection) {
+							this.selectionList_detail = [];
+							if (selection.length > 0) {
+								selection.map(sr=>{
+									this.selectionList_detail.push(sr.id);
+								})
+							}
+						},
+						handleSelectionChange_terminaldetail(selection) {
+							this.selectionList_terminal_detail = [];
+							if (selection.length > 0) {
+								selection.map(sr=>{
+									this.selectionList_terminal_detail.push(sr.id);
+								})
+							}
+						},
+						
+					}
+				});
+			};
+			
+			loadJsCss(function () {
+				initVue();
+			});
+		</script>
+		<style>
+			/*  鍦╲ue.js涓� v-cloak 杩欎釜鎸囦护鏄槻姝㈤〉闈㈠姞杞芥椂鍑虹幇 vuejs 鐨勫彉閲忓悕鑰岃璁$殑 */
+			[v-cloak] {
+				display: none !important;
+			}
+			
+			
+			/* .h_form_checkboxgroup .el-checkbox {
+				width: 120px;
+			} */
+		</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> {{formAttr.title}} </span> -->
+						</div>
+					</div>	
+					<div style="height: 350px; 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>
+							<!-- 
+							v-on:form-change="formChange"
+							v-on:select-change="selectChange"
+							v-on:show-popup="showPopup"
+							v-on:select-option-operate="selectOptionOperate"
+							v-on:visible-change="visibleChange" -->
+						</div>
+						<!-- <div class="" style="padding-left: 20px;">
+							<div style="width: 30%;float: left;">
+								<h-table
+									ref="table1"
+									:table-fields="tableFields1" 
+									:table-data="tableData1" 
+									:table-height="tableHeight"
+									:is-selection="true"
+									:is-pagination="false"
+									
+									v-on:selection-change="handleSelectionChange"
+								>
+								</h-table>
+							</div>
+							<div style="width: 30%;float: left;margin-left: 5%;">
+								<h-table
+									ref="table2"
+									:table-fields="tableFields2" 
+									:table-data="tableData2" 
+									:table-height="tableHeight"
+									:is-selection="true"
+									:is-pagination="false"
+									
+									v-on:selection-change="handleSelectionChange_detail"
+								>
+								</h-table>
+							</div>
+							
+							<div style="width: 30%;float: right;">
+								<h-table
+									ref="table3"
+									:table-fields="tableFields3" 
+									:table-data="tableData3" 
+									:table-height="tableHeight"
+									:is-selection="true"
+									:is-pagination="false"
+									
+									v-on:selection-change="handleSelectionChange_terminaldetail"
+								>
+								</h-table>
+							</div>
+							
+						</div> -->
+						
+					</div>
+					<div class="el-dialog__footer">
+						<el-button size="small" type="default" size="small" @click="closeDialog">鍙� 娑�</el-button>
+						<el-button size="small" v-if="notdisabled" type="primary" @click="saveRowTable":icon="buttonsconfig.save.icon">{{buttonsconfig.save.name}}</el-button>
+						<!-- <el-button v-if="notdisabled" type="success" @click="submitRowTable":icon="buttonsconfig.submit.icon">{{buttonsconfig.submit.name}}</el-button> -->
+					</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>
+		</div>	
+		
+	</body>
+</html>
diff --git a/module/system/page/main.html b/module/system/page/main.html
index 20d1f7a..98c14c3 100644
--- a/module/system/page/main.html
+++ b/module/system/page/main.html
@@ -7,27 +7,27 @@
 	<meta http-equiv="Cache-control" content="no-cache">
 	<meta http-equiv="Cache" content="no-cache">
 	<title>缁堢鎺ㄥ箍骞冲彴</title>
-	<link href="../css/main.css?v=2024080201" rel="stylesheet">
-	<link href="../../../css/control.css?v=2024080201" rel="stylesheet">
-	<link href="../../../css/page.css?v=2024080201" rel="stylesheet">
-	<link href="../../../css/icon/iconfont.css?v=2024080201" rel="stylesheet">
+	<link href="../css/main.css?v=2024080301" rel="stylesheet">
+	<link href="../../../css/control.css?v=2024080301" rel="stylesheet">
+	<link href="../../../css/page.css?v=2024080301" rel="stylesheet">
+	<link href="../../../css/icon/iconfont.css?v=2024080301" 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=2024080201" rel="stylesheet">
+	<link href="../../../css/myelement.css?v=2024080301" 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=2024080201"></script>
+	<script src="../../../js/config.js?v=2024080301"></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=2024080201"></script>
-	<script src="../../../js/foundation.js?v=2024080201"></script>
-	<script src="../../../js/control.js?v=2024080201"></script>
+	<script src="../../../js/vue/page.js?v=2024080301"></script>
+	<script src="../../../js/foundation.js?v=2024080301"></script>
+	<script src="../../../js/control.js?v=2024080301"></script>
 	<script src="../../../js/loadJsCss.js"></script>
-	<script src="../../../js/myelement.js?v=2024080201"></script>
+	<script src="../../../js/myelement.js?v=2024080301"></script>
 	
 </head>
 	

--
Gitblit v1.8.0