schemaMap.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. const echarts = require("echarts");
  2. const { post, api } = require('./api.js');
  3. function getTree(subType, type,showNodeName){
  4. post(api.getTree,
  5. {
  6. "subType": subType,
  7. "type": type
  8. }
  9. ).then(res=>{
  10. if(res.data.code == 0) {
  11. const data = res.data.data
  12. drawTree(data,showNodeName)
  13. }
  14. })
  15. }
  16. function drawTree(data, showNodeName){
  17. /**
  18. 属性说明 id 当前节点的唯一ID
  19. pId [必须大写] 代表当前节点的父节点id
  20. name:节点名称
  21. open:是否展开当前节点,默认为false
  22. isParent:true 标记当前节点是否为父节点 默认为如果当前节点下有子节点 则为true 否则为false
  23. icon:设置节点的图标地址
  24. iconOpen:设置节点展开时的图标地址 此节点必须是父节点 isParent:true
  25. iconClose:设置节点收起的的图标地地址 此节点必须是父节点 isParent:true
  26. url:点击节点打开的链接地址 如果想使用onClick:zTreeOnClick事件,就不要加url属性 或者改名字 href
  27. target:设置打开链接的方式 [在新窗口打开(_blank),要本窗口打开(_self)]
  28. **/
  29. var setting = {
  30. //数据格式的设置
  31. data:{
  32. simpleData: {
  33. enable: true, //使用简单的JSON格式
  34. idKey: "id",
  35. pIdKey: "pId",
  36. rootPId: ""
  37. },
  38. },
  39. //树的显示设置
  40. view:{
  41. showLine:true, //设置是否显示连线 默认为true
  42. showTitle: true,//设置是否显示鼠标悬浮时显示title的效果
  43. dblClickExpand: true,//设置是否支持双击展开树节点
  44. fontCss : {color:"#333"},//设置节点样式
  45. expandSpeed: "normal",//设置展开的速度 fast normal slow
  46. nameIsHTML: true,//名字是否是HTML
  47. selectedMulti: true,
  48. },
  49. //设置事件回调
  50. callback:{
  51. onClick: function (treeId, treeNode) {
  52. const selectPId = $('.curSelectedNode').attr('id')
  53. const selectId = selectPId.substring(0,selectPId.length-1) + 'ico'
  54. $('#'+selectId).append('<img class="iconSelect" src="./images/iconSelect.png">')
  55. },
  56. beforeClick: function (treeId, treeNode) {
  57. var zTree = $.fn.zTree.getZTreeObj("tree");
  58. if (treeNode.isParent) {
  59. zTree.expandNode(treeNode);
  60. return false;
  61. } else {
  62. const treeNodeName = treeNode.name
  63. let index = treeNodeName.indexOf(' ')
  64. const name = treeNodeName.substring(index+1)
  65. getSchema(name,select_type)
  66. const selectPId = $('.curSelectedNode').attr('id')
  67. const selectId = selectPId.substring(0,selectPId.length-1) + 'ico'
  68. $('#'+selectId + ' .iconSelect').remove()
  69. return true;
  70. }
  71. }
  72. }
  73. };
  74. var zNodes = data.nodes;
  75. // var zNodes = zTreeData.nodes;
  76. $.fn.zTree.init($("#tree"), setting, zNodes);
  77. if(showNodeName) {
  78. updateTree(showNodeName)
  79. }
  80. }
  81. function getNode(val, type){
  82. post(api.getNode,
  83. {
  84. "inputStr": val,
  85. "labelName": type
  86. }
  87. ).then(res=>{
  88. if(res.data.code == 0) {
  89. const data = res.data.data
  90. let nodeStr =''
  91. if(data.length > 0){
  92. for(let i = 0; i < data.length; i++){
  93. nodeStr +=`<li class="ellipsis nodeItem" title=${data[i].name}>${data[i].name}</li>`
  94. }
  95. }else{
  96. nodeStr = '<li class="ellipsis">暂无符合数据</li>'
  97. }
  98. $(".tabNameList").html(nodeStr)
  99. $(".tabNameList").show()
  100. $(".tabNameList li").click(function(){
  101. const txt = $(this).text()
  102. $(".tabNameList").hide()
  103. getSchema(txt,select_type)
  104. updateTree(txt)
  105. })
  106. }
  107. })
  108. }
  109. function updateTree(keyWord, txt) {
  110. var t = $("#tree");
  111. // if(zNodes&& zNodes.length > 0 && zNodes[0]['name'].indexOf(txt) != -1){
  112. // $.fn.zTree.init(t, setting, zNodes);
  113. // var zTree = $.fn.zTree.getZTreeObj("tree");
  114. // zTree.selectNode(zTree.getNodeByParam("name", keyWord));
  115. // }else {
  116. var tree_select = document.getElementsByClassName("tree_selected");
  117. for(i = 0; i < tree_select.length; i++){
  118. tree_select[i].className = "tree_button";
  119. }
  120. var tree_button = document.getElementsByClassName("tree_button");
  121. for(i = 0; i < tree_button.length; i++){
  122. if(tree_button[i].text == txt){
  123. tree_button[i].className = "tree_selected";
  124. }
  125. }
  126. if(txt != "疾病"){
  127. $("#radio").hide();
  128. }else {
  129. $("#radio").show();
  130. }
  131. selectedNode = keyWord;
  132. var data = {"name":'tree'};
  133. var zTree = $.fn.zTree.getZTreeObj("tree");
  134. zTree.selectNode(zTree.getNodeByParam("name", keyWord));
  135. const selectPId = $('.curSelectedNode').attr('id')
  136. const selectId = selectPId.substring(0,selectPId.length-1) + 'ico'
  137. $('.iconSelect').remove()
  138. $('#'+selectId).append('<img class="iconSelect" src="./images/iconSelect.png">')
  139. }
  140. function getSchema(val, type){
  141. post(api.getSchema,{
  142. "labelName": type,
  143. "pramNme": val
  144. }).then(res=>{
  145. if(res.data.code == 0) {
  146. $('#searchInp').val(val)
  147. if(res.data.data.length >0){
  148. drawSchema(res.data.data)
  149. }else{
  150. let nodeStr
  151. nodeStr = '<li class="ellipsis">暂无符合数据</li>'
  152. $(".tabNameList").html(nodeStr)
  153. $(".tabNameList").show()
  154. }
  155. }else{
  156. let nodeStr
  157. nodeStr = '<li class="ellipsis">暂无符合数据</li>'
  158. $(".tabNameList").html(nodeStr)
  159. $(".tabNameList").show()
  160. }
  161. })
  162. }
  163. function drawSchema(data){
  164. var myChart = echarts.init(document.getElementById('main'));
  165. myChart.setOption(option = {
  166. title: {
  167. text: 'schema 结构',
  168. top: '10',
  169. left: '10'
  170. },
  171. tooltip: {
  172. show:'true',//默认:true;是否显示提示框组件,包括提示框浮层和 axisPointer。
  173. trigger: 'item',//默认:item;触发类型。item:数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。'axis':坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。'none':什么都不触发。
  174. triggerOn: 'mousemove',
  175. // borderColor: '#abcdef'
  176. },
  177. series:[
  178. {
  179. type: 'tree',
  180. cursor:'pointer',
  181. data: data,
  182. left: '105px',
  183. right: '100px',
  184. top: '15%',
  185. bottom: '10%',
  186. // symbol: 'emptyCircle',
  187. itemStyle:{
  188. // borderColor: '#abcdef'
  189. },
  190. // orient: 'vertical',
  191. symbolSize:10, //标记的大小,就是那个小圆圈,默认7
  192. expandAndCollapse: true,//默认:true;子树折叠和展开的交互,默认打开 。
  193. initialTreeDepth:2,//默认:2,树图初始展开的层级(深度)。根节点是第 0 层,然后是第 1 层、第 2 层,... ,直到叶子节点
  194. label: {
  195. normal: {
  196. // distance:0,
  197. // position:'top',//标签的位置。
  198. position:['-100%',5],
  199. rotate: 0,//标签旋转。从 -90 度到 90 度。正值是逆时针。
  200. verticalAlign: 'middle',//文字垂直对齐方式,默认自动。
  201. align: 'right',//文字水平对齐方式,默认自动。
  202. fontSize: 12,//文字的字体大小
  203. // borderColor: '#abcdef',
  204. // backgroundColor:'#abcdef',
  205. color: '#333',
  206. padding: [5,5,5,5],
  207. formatter: function (x) {
  208. var tmp = x.data.name;
  209. if(tmp.length >= 12){
  210. tmp = tmp.substring(0,3);
  211. tmp = tmp + "...";
  212. }
  213. return tmp;
  214. }
  215. },
  216. },
  217. leaves: {
  218. cursor:'pointer',
  219. label: {
  220. normal: {
  221. position: ['-100%',5],
  222. // color:' red',
  223. rotate:0,
  224. cursor:'default',
  225. verticalAlign: 'middle',
  226. align: 'right',
  227. fontSize: 12,//文字的字体大小
  228. formatter: function (x) {
  229. var tmp = x.data.name;
  230. if(tmp.length >= 12){
  231. tmp = tmp.substring(0,3);
  232. tmp = tmp + "...";
  233. }
  234. return tmp;
  235. }
  236. },
  237. }
  238. },
  239. animationDurationUpdate: 750
  240. }
  241. ]
  242. })
  243. myChart.setOption(option);
  244. }
  245. module.exports ={
  246. getSchema,
  247. getTree,
  248. updateTree,
  249. getNode
  250. }