zhengnaiwen_citu 3 hónapja
szülő
commit
c9d0f422d0
3 módosított fájl, 153 hozzáadás és 1 törlés
  1. 52 0
      package-lock.json
  2. 1 0
      package.json
  3. 100 1
      src/views/payroll/staffWage/StaffWageDrill.vue

+ 52 - 0
package-lock.json

@@ -2837,6 +2837,11 @@
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
       "dev": true
     },
+    "base64-arraybuffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+      "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
+    },
     "base64-js": {
       "version": "1.5.1",
       "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
@@ -3604,6 +3609,14 @@
       "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
       "dev": true
     },
+    "css-line-break": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+      "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+      "requires": {
+        "utrie": "^1.0.2"
+      }
+    },
     "css-loader": {
       "version": "6.11.0",
       "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz",
@@ -5923,6 +5936,15 @@
         "tapable": "^2.0.0"
       }
     },
+    "html2canvas": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+      "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+      "requires": {
+        "css-line-break": "^2.1.0",
+        "text-segmentation": "^1.0.3"
+      }
+    },
     "htmlparser2": {
       "version": "6.1.0",
       "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz",
@@ -8968,6 +8990,15 @@
       "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",
       "dev": true
     },
+    "relation-graph": {
+      "version": "2.2.11",
+      "resolved": "https://registry.npmmirror.com/relation-graph/-/relation-graph-2.2.11.tgz",
+      "integrity": "sha512-k8jrZkkNYMIKqGN0g8ZHhqd0sP9RAvem6xw9UN9FD59TiVlKx1Vsvi7E/Kh9Z1tZGltdrPo0ZERsUn6Ydoc0Sw==",
+      "requires": {
+        "html2canvas": "^1.4.1",
+        "screenfull": "^5.1.0"
+      }
+    },
     "renderkid": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz",
@@ -9205,6 +9236,11 @@
         "ajv-keywords": "^3.5.2"
       }
     },
+    "screenfull": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmmirror.com/screenfull/-/screenfull-5.2.0.tgz",
+      "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA=="
+    },
     "scroll-into-view-if-needed": {
       "version": "2.2.31",
       "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
@@ -9977,6 +10013,14 @@
         }
       }
     },
+    "text-segmentation": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+      "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+      "requires": {
+        "utrie": "^1.0.2"
+      }
+    },
     "text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
@@ -10578,6 +10622,14 @@
       "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
       "dev": true
     },
+    "utrie": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+      "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+      "requires": {
+        "base64-arraybuffer": "^1.0.2"
+      }
+    },
     "uuid": {
       "version": "8.3.2",
       "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",

+ 1 - 0
package.json

@@ -26,6 +26,7 @@
     "nprogress": "^0.2.0",
     "qs": "^6.14.0",
     "regenerator-runtime": "^0.14.1",
+    "relation-graph": "^2.2.11",
     "scrolling-element": "^1.0.2",
     "vue": "^2.6.14",
     "vue-router": "^3.5.1",

+ 100 - 1
src/views/payroll/staffWage/StaffWageDrill.vue

@@ -1,5 +1,8 @@
 <template>
   <m-dialog title="绩效明细" ref="dialog">
+    <div style="height: 200px">
+      <RelationGraph ref="graphRef" :options="graphOptions" />
+    </div>
     <div class="mb-3">
       <span
         v-for="(type, index) in parentDetailTypes"
@@ -31,22 +34,118 @@
 </template>
 
 <script>
+import RelationGraph from 'relation-graph'
 import {
   drilling
 } from '@/api/system'
 export default {
   name: 'StaffWageDrill',
+  components: { RelationGraph },
   data () {
     return {
       loading: false,
       items: [],
       headers: [],
-      parentDetailTypes: []
+      parentDetailTypes: [],
+      graphOptions: {
+        defaultJunctionPoint: 'lr',
+        // 这里可以参考"Graph 图谱"中的参数进行设置 https://www.relation-graph.com/#/docs/graph
+        debug: false, // 是否开始调试模式,调试模式下会在控制台打印额外的日志信息
+        allowShowMiniToolBar: false, // 是否显示工具栏
+        showDebugPanel: false, // 是否显示调试按钮,通过此按钮可以打印配置、数据等
+        backgroundImage: '', // 图谱水印url,如:https://ssl.relation-graph.com/images/relatioon-graph-canvas-bg.png
+        downloadImageFileName: '', // 下载图片时,图片的名称
+        disableZoom: false, // 是否禁用图谱的缩放功能
+        disableDragNode: false, // 是否禁用图谱中节点的拖动
+        moveToCenterWhenRefresh: true, // 当图谱刷新后(调用setJsonData或refresh方法都会触发),让图谱根据节点居中(图片会默认将根节点作为中心展示,此选项会根据节点分布寻找中心)
+        zoomToFitWhenRefresh: true, // 当图谱刷新后(调用setJsonData或refresh方法都会触发),是否让图谱缩放到适合可见区域大小,此选项不适用于fixed和force布局
+        useAnimationWhenRefresh: true, // 当图谱刷新后(调用setJsonData或refresh方法都会触发),使用动画让图居中、缩放
+        useAnimationWhenExpanded: true,
+        defaultFocusRootNode: true, // 默认为根节点添加一个被选中的样式
+        disableNodeClickEffect: false, // 是否禁用节点默认的点击效果(选中、闪烁)
+        disableLineClickEffect: false, // 是否禁用线条默认的点击效果(选中、闪烁)
+        allowShowZoomMenu: false, // 是否在右侧菜单栏显示放大缩小的按钮,此设置和disableZoom不冲突
+        allowAutoLayoutIfSupport: false, // 是否在工具栏中显示【自动布局】按钮(只有在布局支持且此选项为true时才会显示的按钮)
+        allowShowRefreshButton: false, // 是否在工具栏中显示【刷新】按钮
+        allowShowDownloadButton: false, // 是否在工具栏中显示【下载图片】按钮
+        backgroundImageNoRepeat: false, // 只在右下角显示水印,不重复显示水印
+        allowSwitchLineShape: false, // 是否在工具栏中显示切换线条形状的按钮
+        allowSwitchJunctionPoint: false, // 是否在工具栏中显示切换连接点位置的按钮
+        isMoveByParentNode: false, // 是否在拖动节点后让子节点跟随
+        defaultExpandHolderPosition: 'hide', // 默认的节点展开/关闭按钮位置(left/top/right/bottom/hide)
+        defaultNodeColor: '#FD8B37', // 默认的节点背景颜色
+        checkedLineColor: '#FD8B37', // 当线条被选中时的颜色
+        defaultNodeFontColor: '#ffffff', // 默认的节点文字颜色
+        defaultNodeBorderColor: '#90EE90', // 默认的节点边框颜色
+        defaultNodeBorderWidth: 0, // 默认的节点边框粗细(像素)
+        defaultLineColor: '#cccccc', // 默认的线条颜色
+        defaultLineWidth: 2, // 默认的线条粗细(像素)
+        defaultLineShape: 2, // 默认的线条样式(1:直线/2:样式2/3:样式3/4:折线/5:样式5/6:样式6)使用示例
+        defaultNodeShape: 1, // 默认的节点形状,0:圆形;1:矩形
+        defaultShowLineLabel: true, // 默认是否显示连线文字,v2版本此选项已无效,主要是这个选项没什么用
+        hideNodeContentByZoom: true, // 是否根据缩放比例隐藏节点内容
+        // disableDragCanvas: false,
+        // lineUseTextPath: false,
+        defaultLineMarker: { // 默认的线条箭头样式,示例参考:配置工具中的选项:连线箭头样式
+          markerWidth: 24,
+          markerHeight: 24,
+          refX: 6,
+          refY: 6,
+          data: 'M2,2 L10,6 L2,10 L6,6 L2,2'
+        },
+        layouts: [
+          {
+            label: '自动布局',
+            layoutName: 'tree', // 布局方式(tree树状布局/center中心布局/force自动布局)
+            from: 'left',
+            maxLayoutTimes: 20,
+            layoutClassName: 'seeks-layout-force',
+            useLayoutStyleOptions: false,
+            defaultNodeColor: '#FFC5A6',
+            defaultNodeFontColor: '#000000',
+            defaultNodeBorderColor: '#efefef',
+            defaultNodeBorderWidth: 1,
+            defaultLineColor: '#FD8B37',
+            defaultLineWidth: 1,
+            defaultShowLineLabel: true,
+            defaultLineMarker: {
+              markerWidth: 12,
+              markerHeight: 12,
+              refX: 6,
+              refY: 6,
+              data: 'M2,2 L10,6 L2,10 L6,6 L2,2'
+            }
+          }
+        ]
+      }
     }
   },
   methods: {
     async open (item) {
       this.$refs.dialog.open()
+      this.$nextTick(() => {
+        const jsonData = {
+          rootId: 'a',
+          nodes: [
+            { id: 'a', text: 'a' },
+            { id: 'b', text: 'b' },
+            { id: 'b1', text: 'b1' },
+            { id: 'b1-1', text: 'b1-1' },
+            { id: 'b1-2', text: 'b1-2' }
+          ],
+          lines: [
+            { from: 'a', to: 'b' },
+            { from: 'b', to: 'b1' },
+            { from: 'b1', to: 'b1-1' },
+            { from: 'b1', to: 'b1-2' },
+            { from: 'b1', to: 'b1-3' }
+          ]
+        }
+        this.$refs.graphRef.setOptions(this.graphOptions)
+        this.$refs.graphRef.setJsonData(jsonData, (graphInstance) => {
+        // 这些写上当图谱初始化完成后需要执行的代码
+        })
+      })
       this.parentDetailTypes = [{
         label: '上级员工薪资绩效钻取',
         detailType: '员工薪资绩效钻取',