<!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 = [ {id: "css_m1", type: "css", url: "root/css/tree.css"}, ]; window.top.initJsCss(document, jscss_urls, callback); }; function initVue() { new TreeVue({ el: "#vbody", data: { dataname: "md_library", title: "产å“资料库管ç†", tree_title: "资料库列表", treeTxtFormatter: "{name}", isTreeReadonly: true, dataname_p: "md_library_detail", pagesize_p: 10, pagenum_p: 1, total_p: 0, tableData_p: [], tableFields_p: [], isRefresh_p: true, tableHeight_p: 100, tablefieldClick: {}, tablebuttonClick: [], setSelectedRowId: null, //filter filterObj: {}, filterAttr: { columnnumber: 3, labelwidth: "100px", labelposition: "right", size: "medium", border: "3px solid #c6c6c600" }, filterFields: [], filterfieldClick: {}, currentnodekey: "", library_ids: "1<>1", cbuttons_r: {}, }, 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.cbuttons_r = result.buttons_r; //èŽ·å–æ•°æ® me.initData(); me.$nextTick(() => { // 以æœåŠ¡çš„æ–¹å¼è°ƒç”¨çš„ Loading 需è¦å¼‚æ¥å…³é— hideLoading(); }); }) } }, methods:{ initData() { var me = this; me.tableButtonClick();//æ ‡è¯†2 this.onQuery(function(result, callback) {//查询åŽçš„回调,用于获å–å—æ®µçš„ let initTreeData_ = ArrayToTree(clone(me.initTreeData), "name", "parent_id"); me.treeData = initTreeData_; if (callback) { callback(); } //待完善 // 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); } me.getTableMeta(); }); }, //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; } 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; let me = this; var config = { totab: false, //true: 以Tabå¯¼èˆªçš„æ–¹å¼æ‰“å¼€ width: "500px", height: "300px", 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", callback: function(obj, callback) { me.type_treedata = 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", width: 800, height: 230, data: data, sceneCode: "edit", callback: function(options_obj, callback) { me.type_treedata = options_obj.options if (callback) { callback(); } } }); }, onDelNode(obj) { var data = obj.data, node = obj.node; let me = this; Root.confirm('ç¡®å®šåˆ é™¤-' + data.name + '-å—?', 'åˆ é™¤æç¤º', { confirmButtonText: 'åˆ é™¤', cancelButtonText: 'å–æ¶ˆ', type: 'warning' }).then(() => { me.dodeldata(data, node, "agm_category"); }).catch(() => { Root.message({ type: 'info', message: '已喿¶ˆåˆ 除' }); }); }, dodeldata(row, node, tablename) { 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); Root.message({ type: 'success', message: 'åˆ é™¤æˆåŠŸ!' }); } }); } }, 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 library_ids = ""; if (data.children && data.children.length) { library_ids = "parent_id='" + data.id + "'" } else { library_ids = "parent_id='" + data.id + "'" } // this.filterObjBydefault.category_name = val this.selectedrow = data; this.setSelectedRowId = null;//Brooke this.filterObj = {}; this.pagenum_p = 1; this.library_ids = library_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() { 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.library_ids; 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; } }) }, 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 == "parent_id") { 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_); } } //å—æ®µæ•°ç»„è½¬å—æ®µobj,目的为了ç›é€‰æ—¶èŽ·å–å—æ®µå±žæ€§ 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_); }, // è®¾ç½®è¡¨æ ¼å·¥å…·æ æŒ‰é”®äº‹ä»¶ tableButtonClick() { var me = this; var tablebuttonClick = []; tablebuttonClick = [ { isbuttonshow: true,type:"primary", code: "add",isselected: false,classname: "", onclick: function(obj) { var sceneCode = "add" me.onAddData(obj,sceneCode) } }, { // 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]); var sceneCode = "browse"; var row = obj.selectedList[0] me.onAddData(row,sceneCode) } }, { 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() } } ] this.tablebuttonClick = tablebuttonClick; }, tableFieldClick() { var me = this; //è¡¨æ ¼å—æ®µäº‹ä»¶è®¾ç½® this.tablefieldClick = { } }, //æ–°å¢žæ¨¡æ¿ onAddData(obj,sceneCode) { var me = this; var type = ""; var delta_ = { nodeKey: this.selectedrow.id, } if (this.selectedrow.name) { type = this.selectedrow.name } var config = { totab: false, icon: "icon-product", text: "新增资料" + type, id: "material_list_edit"+sceneCode+this.selectedrow.id+obj?obj.id:"",//totab: trueæ—¶éœ€è®¾ç½®ï¼Œç”¨äºŽåˆ¤æ–æ˜¯å¦å·²æ‰“å¼€æ¤é¡µé¢ url: "module/material/page/material_list_edit.html", data: obj?obj:{}, delta: delta_, sceneCode: sceneCode,//"refuseedit",//"approval", //"add"//"browse", callback: function(obj, callback) { console.log(me.treeData) me.getDataByNode() console.log(me.treeData) if (callback) { callback(); } } }; me.doPopupByPublic(config); }, showFileImgByFileId(obj, filenamefield, fileidfield, filedataname) { 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: dataname } 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, dataname); } } }, 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; if (page.filtersobj) { // && Object.keys(page.filtersobj).length this.filterObj = page.filtersobj; } 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: 以Tabå¯¼èˆªçš„æ–¹å¼æ‰“å¼€ 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_ = " id is not null and id <> '' and " + me.library_ids; filter_ = me.getFilterData(filter_, me.filterObj, me.filterFieldsObj, true); 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; var filter_ = "code is not null and code <> '' and " + me.library_ids; filter_ = this.getFilterData(filter_, me.filterObj, me.filterFieldsObj); let param = { dataname: 'md_product_sql', filename: '产å“ä¿¡æ¯å¯¼å‡º' + String(new Date().getTime()), categoryfilter: filter_, orderby: "update_time desc", token: Root.getToken() } textdownloadForm(param); }, } }); }; loadJsCss(function () { initVue(); }); </script> <style> /* 在vue.jsä¸ v-cloak 这个指令是防æ¢é¡µé¢åŠ è½½æ—¶å‡ºçŽ° vuejs çš„å˜é‡å而设计的 */ [v-cloak] { display: none !important; } .el-tabs__nav-scroll { overflow: hidden; position: relative; padding-left: 20px; } .nodeLabel { max-width: 220px !important; } </style> </head> <body style="margin: 0px;"> <div v-cloak id="vbody"> <div id="page_root"> <div class="topbar"> <span>{{title}}</span> <div style="float: right; margin-right: 10px"> <el-button @click="onDownload":icon="buttonsconfig.export.icon">{{buttonsconfig.export.name}}</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="height: 32px;line-height: 32px;border-bottom: 1px solid #ccc ;"> <span style="font-size: 14px;margin-left: 20px;">{{tree_title}}</span> </div> <div :style="{padding: '10px 0', height: treeHeight - 55 + 'px', overflow: 'auto'}"> <h-tree v-if="isRefresh" :tree-data="treeData" :tree-txt-formatter="treeTxtFormatter" :currentnodekey="currentnodekey" :is-readonly="isTreeReadonly" @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> </div> <div :style="{position: 'absolute', left: '340px', right: '10px', top: '40px', 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> </div> <h-table v-if="isRefresh_p && tableFields_p.length" 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" :is-highlight-row="true" :table-field-click="tablefieldClick" :table-buttons-click="tablebuttonClick" v-on:get-data="getData_p" v-on:row-click="getRow" > </h-table> </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>