| | |
| | | <el-form-item> |
| | | 模型名称:{{modelName}} |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="saveDiagram()">暂存</el-button> |
| | | <el-button type="primary" @click="analyzeDiagram()">保存</el-button> |
| | | <el-button type="primary" @click="clearDiagram()">清空图形</el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-tooltip class="item" effect="dark" content="左对齐" placement="left"> |
| | | <el-button class="" style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF;" |
| | | @click="leftAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-zuoduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | <el-button type="primary" @click="saveDiagram()">暂存</el-button> |
| | | <el-button type="primary" @click="analyzeDiagram()">保存</el-button> |
| | | <el-button type="primary" @click="clearDiagram()">清空图形</el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-tooltip class="item" effect="dark" content="居中对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="centerAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-chuizhiduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | <el-tooltip class="item" effect="dark" content="左对齐" placement="left"> |
| | | <el-button class="" style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF;" |
| | | @click="leftAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-zuoduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-tooltip class="item" effect="dark" content="右对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="rightAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-youduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | <el-tooltip class="item" effect="dark" content="居中对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="centerAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-chuizhiduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-tooltip class="item" effect="dark" content="顶部对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="topAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-dingduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | <el-tooltip class="item" effect="dark" content="右对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="rightAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-youduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-tooltip class="item" effect="dark" content="水平对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="shuipingAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-shuipingduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | <el-tooltip class="item" effect="dark" content="顶部对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="topAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-dingduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-tooltip class="item" effect="dark" content="底部对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="bottomAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-diduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | <el-tooltip class="item" effect="dark" content="水平对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="shuipingAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-shuipingduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-tooltip class="item" effect="dark" content="底部对齐" placement="left"> |
| | | <el-button style="margin-left: 0;padding: 2px;border: 1px solid #5F95FF" |
| | | @click="bottomAlign()"><i style="font-size: 2rem;" |
| | | class="wt-iconfont icon-diduiqi"></i></el-button> |
| | | </el-tooltip> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div id="containerImg" style="border: 1px solid #EAEBEE;border-radius: 6px; |
| | |
| | | import ConfigEdge from './ConfigEdge/index.vue' |
| | | import {removeCurrentTabHandle} from '@/commonJS/common' |
| | | import {setHartBeat} from '@/commonJS/common'; |
| | | import Cookies from 'js-cookie' |
| | | |
| | | export default { |
| | | name: 'RBD-edit-img', |
| | |
| | | return { |
| | | modelId: '', |
| | | modelName: '', |
| | | modelType:'', |
| | | modelType: '', |
| | | timer: null, |
| | | imgsList:[ |
| | | {imgPath:'start',imgName:'start',nodeType:'start',imgWidth:60,imgHeight:60,imgId:'1',data:{}}, |
| | | {imgPath:'end',imgName:'end',nodeType:'end',imgWidth:60,imgHeight:60,imgId:'2',data:{}}, |
| | | {imgPath:'connect',imgName:'connect',nodeType:'connect',imgWidth:20,imgHeight:20,imgId:'3',data:{}}, |
| | | imgsList: [ |
| | | {imgPath: 'start', imgName: 'start', nodeType: 'start', imgWidth: 60, imgHeight: 60, imgId: '1', data: {}}, |
| | | {imgPath: 'end', imgName: 'end', nodeType: 'end', imgWidth: 60, imgHeight: 60, imgId: '2', data: {}}, |
| | | { |
| | | imgPath: 'connect', |
| | | imgName: 'connect', |
| | | nodeType: 'connect', |
| | | imgWidth: 20, |
| | | imgHeight: 20, |
| | | imgId: '3', |
| | | data: {} |
| | | }, |
| | | // {imgPath:'parallelLeft',imgName:'parallelLeft',nodeType:'parallelLeft',imgWidth:60,imgHeight:60,imgId:'3',data:{}}, |
| | | // {imgPath:'parallelRight',imgName:'parallel',nodeType:'parallel',imgWidth:60,imgHeight:60,imgId:'4',data:{}}, |
| | | {imgPath:'switchRight',imgName:'switch',nodeType:'switch',imgWidth:60,imgHeight:60,imgId:'5',data:{}}, |
| | | {imgPath:'voteRight',imgName:'vote',nodeType:'vote',imgWidth:60,imgHeight:60,imgId:'6',data:{}}, |
| | | { |
| | | imgPath: 'switchRight', |
| | | imgName: 'switch', |
| | | nodeType: 'switch', |
| | | imgWidth: 60, |
| | | imgHeight: 60, |
| | | imgId: '5', |
| | | data: {} |
| | | }, |
| | | {imgPath: 'voteRight', imgName: 'vote', nodeType: 'vote', imgWidth: 60, imgHeight: 60, imgId: '6', data: {}}, |
| | | ], |
| | | imgsList2:[ |
| | | // {imgPath:'logo',imgName:'logo',nodeType:'node',,nodeTypeExt:'',productType:'',statusImg:'',imgWidth:60,imgHeight:60,imgId:'100',dataId:'123456'}, |
| | | imgsList2: [ |
| | | // {imgPath:'logo',imgName:'logo',nodeType:'node',,nodeTypeExt:'',productType:'',statusImg:'',imgWidth:60,imgHeight:60,imgId:'100',dataId:'123456'}, |
| | | ], |
| | | nodeType:'', |
| | | nodeType: '', |
| | | first: true, |
| | | shape: '', |
| | | projectList: [], |
| | |
| | | id: '', |
| | | graph: null, |
| | | globalGridAttr: { |
| | | voteSum:'', |
| | | repairMttcr:'', |
| | | repairMttcrOther:'', |
| | | repairDistribType:'', |
| | | reliabDistribType:'', |
| | | taskMtbcfOther:'', |
| | | isRepair:0, |
| | | taskMtbcf:'', |
| | | numberInputValue:'', |
| | | statusImg:'', |
| | | nodeTypeExt:'', |
| | | voteSum: '', |
| | | repairMttcr: '', |
| | | repairMttcrOther: '', |
| | | repairDistribType: '', |
| | | reliabDistribType: '', |
| | | taskMtbcfOther: '', |
| | | isRepair: 0, |
| | | taskMtbcf: '', |
| | | numberInputValue: '', |
| | | statusImg: '', |
| | | nodeTypeExt: '', |
| | | type: 'mesh', |
| | | size: 10, |
| | | color: '#e5e5e5', |
| | |
| | | }, |
| | | isReady: false, |
| | | curCel: Cell, |
| | | left_p: document.documentElement.clientHeight-100, |
| | | left_p: document.documentElement.clientHeight - 100, |
| | | ports: { |
| | | groups: { |
| | | top: { |
| | |
| | | this.type = 'grid' |
| | | }, |
| | | methods: { |
| | | init(row){ |
| | | init(row) { |
| | | this.modelName = row.modelName |
| | | this.dataForm.id = row.id |
| | | // this.productId = row.productId |
| | | // this.getProduct(row.productId) |
| | | this.initDigram(row.productId) |
| | | console.log(this.dataForm,'init(row){') |
| | | console.log(this.dataForm, 'init(row){') |
| | | }, |
| | | async getDiagram(modelId) { |
| | | let params = { |
| | | modelId : modelId |
| | | modelId: modelId |
| | | } |
| | | let res = await this.$http.get(`/taskReliability/ModelLine/getDiagram`, {params: params}) |
| | | console.log(res,'async getDiagram( res') |
| | | let res = await this.$http.get(`/taskReliability/ModelLine/getDiagram`, {params: params}) |
| | | console.log(res, 'async getDiagram( res') |
| | | if (res.data !== null && res.data.content != null) { |
| | | this.dataForm = res.data |
| | | console.log(this.dataForm, 'this.dataForm in getDiagram') |
| | | this.diagramJson = JSON.parse(this.dataForm.content) |
| | | // console.log(this.dataForm.content,'this.Diagram content') |
| | | console.log(this.diagramJson, 'this.Diagram json') |
| | | this.graph.fromJSON(this.diagramJson) |
| | | this.graph.centerContent() |
| | | this.graph.zoomToFit() |
| | | } else { |
| | | await this.clearDiagram() |
| | | } |
| | | this.dataForm = res.data |
| | | console.log(this.dataForm, 'this.dataForm in getDiagram') |
| | | this.diagramJson = JSON.parse(this.dataForm.content) |
| | | // console.log(this.dataForm.content,'this.Diagram content') |
| | | console.log(this.diagramJson, 'this.Diagram json') |
| | | this.graph.fromJSON(this.diagramJson) |
| | | this.graph.centerContent() |
| | | this.graph.zoomToFit() |
| | | } else { |
| | | await this.clearDiagram() |
| | | } |
| | | }, |
| | | async clearDiagram() { |
| | | this.dataForm.id = null |
| | |
| | | pageVisible: true, |
| | | pageBreak: true, |
| | | pannable: true, |
| | | minVisibleWidth:200, |
| | | minVisibleHeight:200, |
| | | minVisibleWidth: 200, |
| | | minVisibleHeight: 200, |
| | | modifiers: 'shift', |
| | | }, |
| | | // panning: { |
| | |
| | | }) |
| | | this.graph.centerContent() |
| | | const stencil = new Addon.Stencil({ |
| | | getDropNode(node) { |
| | | let {width, height} = node.size() |
| | | if (node.getData().imgWidth) { |
| | | width = node.getData().imgWidth |
| | | } |
| | | if (node.getData().imgHeight) { |
| | | height = node.getData().imgHeight |
| | | } |
| | | console.log(node.getData().imgWidth, node.getData().imgHeight, 'node.size()') |
| | | return node.clone().size(width, height) |
| | | }, |
| | | // 返回一个新的节点作为实际放置到画布上的节点 |
| | | title: '', |
| | | target: this.graph, |
| | | stencilGraphWidth: 230, |
| | |
| | | }) |
| | | document.getElementById('stencilImg').appendChild(stencil.container) |
| | | const imageNodes = this.imgsList.map((item) => |
| | | this.graph.createNode({ |
| | | shape: 'image', |
| | | imageUrl: require('/public/modelImg/'+item.imgPath+'.png'), |
| | | width: item.imgWidth, |
| | | height: item.imgHeight, |
| | | x: item.imgWidth, |
| | | y: item.imgHeight, |
| | | data: { |
| | | dataId: '', |
| | | nodeType: item.nodeType, |
| | | nodeTypeExt: '' |
| | | }, |
| | | attrs: { |
| | | text:{ |
| | | text: item.imgName, |
| | | fontSize: 14, |
| | | style: { |
| | | color: this.globalGridAttr.nodeColor |
| | | }, |
| | | refX: 0.5, |
| | | refY: '100%', |
| | | refY2: 4, |
| | | textAnchor: 'middle', |
| | | textVerticalAnchor: 'top', |
| | | this.graph.createNode({ |
| | | shape: 'image', |
| | | imageUrl: require('/public/modelImg/' + item.imgPath + '.png'), |
| | | width: item.imgWidth, |
| | | height: item.imgHeight, |
| | | x: item.imgWidth, |
| | | y: item.imgHeight, |
| | | data: { |
| | | dataId: '', |
| | | nodeType: item.nodeType, |
| | | nodeTypeExt: '' |
| | | }, |
| | | attrs: { |
| | | text: { |
| | | text: item.imgName, |
| | | fontSize: 14, |
| | | style: { |
| | | color: this.globalGridAttr.nodeColor |
| | | }, |
| | | refX: 0.5, |
| | | refY: '100%', |
| | | refY2: 4, |
| | | textAnchor: 'middle', |
| | | textVerticalAnchor: 'top', |
| | | }, |
| | | ports: {...this.ports}, |
| | | }), |
| | | }, |
| | | ports: {...this.ports}, |
| | | }), |
| | | ) |
| | | let params = { |
| | | productId : productId |
| | | productId: productId |
| | | } |
| | | let res = await this.$http.get(`/basicInfo/XhProductModel/getProduct`, {params: params}) |
| | | this.imgsList2 = res.data |
| | | console.log(this.imgsList2 ,'getProduct(productId)234567890') |
| | | console.log(this.imgsList2, 'getProduct(productId)234567890') |
| | | const imageNodes2 = this.imgsList2.map((item) => |
| | | this.graph.createNode({ |
| | | shape: 'image', |
| | | imageUrl: `${window.SITE_CONFIG['apiURL']}/sys/oss/content2?fileId=${item.imgPath}`, |
| | | width:item.imgWidth, |
| | | height:item.imgHeight, |
| | | x:item.imgWidth, |
| | | y:item.imgHeight, |
| | | data: { |
| | | isRepair:false, |
| | | dataId: item.dataId, |
| | | nodeType: item.nodeType, |
| | | nodeTypeExt: item.nodeTypeExt, |
| | | productType: item.productType, |
| | | statusImg:item.statusImg, |
| | | reliabDistribType:item.reliabDistribType, |
| | | repairDistribType:item.repairDistribType, |
| | | repairMttcr:item.repairMttcr, |
| | | repairMttcrOther:item.repairMttcrOther, |
| | | taskMtbcf:item.taskMtbcf, |
| | | taskMtbcfOther:item.taskMtbcfOther, |
| | | voteSum:'', |
| | | }, |
| | | attrs: { |
| | | text:{ |
| | | text: item.imgName, |
| | | fontSize: 14, |
| | | style: { |
| | | color: this.globalGridAttr.nodeColor |
| | | }, |
| | | refX: 0.5, |
| | | refY: '100%', |
| | | refY2: 4, |
| | | textAnchor: 'middle', |
| | | textVerticalAnchor: 'top', |
| | | this.graph.createNode({ |
| | | shape: 'image', |
| | | imageUrl: `${window.SITE_CONFIG['apiURL']}/sysPictureBase/getProductImg?token=${Cookies.get('token')}&id=${item.imgPath}`, |
| | | width: 60, |
| | | height: 60, |
| | | data: { |
| | | isRepair: false, |
| | | dataId: item.dataId, |
| | | nodeType: item.nodeType, |
| | | nodeTypeExt: item.nodeTypeExt, |
| | | productType: item.productType, |
| | | statusImg: item.statusImg, |
| | | reliabDistribType: item.reliabDistribType, |
| | | repairDistribType: item.repairDistribType, |
| | | repairMttcr: item.repairMttcr, |
| | | repairMttcrOther: item.repairMttcrOther, |
| | | taskMtbcf: item.taskMtbcf, |
| | | taskMtbcfOther: item.taskMtbcfOther, |
| | | voteSum: '', |
| | | imgHeight: item.imgHeight, |
| | | imgWidth: item.imgWidth |
| | | }, |
| | | attrs: { |
| | | text: { |
| | | text: item.imgName, |
| | | fontSize: 14, |
| | | style: { |
| | | color: this.globalGridAttr.nodeColor |
| | | }, |
| | | refX: 0.5, |
| | | refY: '100%', |
| | | refY2: 4, |
| | | textAnchor: 'middle', |
| | | textVerticalAnchor: 'top', |
| | | }, |
| | | tools: [ |
| | | { |
| | | name: 'button', |
| | | args: { |
| | | markup: [ |
| | | { |
| | | tagName: 'image', |
| | | selector: 'icon', |
| | | attrs: { |
| | | // 'xlink:href': 'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*evDjT5vjkX0AAAAAAAAAAAAAARQnAQ', |
| | | 'xlink:href':item.statusImg, |
| | | width: 30, |
| | | height: 30, |
| | | x: 0, |
| | | y: 0 |
| | | } |
| | | }, |
| | | tools: [ |
| | | { |
| | | name: 'button', |
| | | args: { |
| | | markup: [ |
| | | { |
| | | tagName: 'image', |
| | | selector: 'icon', |
| | | attrs: { |
| | | // 'xlink:href': 'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*evDjT5vjkX0AAAAAAAAAAAAAARQnAQ', |
| | | 'xlink:href': item.statusImg, |
| | | width: 30, |
| | | height: 30, |
| | | x: 0, |
| | | y: 0 |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | ports: {...this.ports}, |
| | | }), |
| | | } |
| | | ], |
| | | ports: {...this.ports}, |
| | | }), |
| | | ) |
| | | stencil.load(imageNodes, 'group1') |
| | | stencil.load(imageNodes2, 'group2') |
| | |
| | | this.type = cell.isNode() ? 'node' : 'edge' |
| | | this.shape = cell.shape |
| | | this.id = cell.id |
| | | if(this.type==='node'){ |
| | | if (this.type === 'node') { |
| | | this.nodeType = cell.getData().nodeType |
| | | console.log(this.nodeType, 'this.nodeType') |
| | | } |
| | |
| | | } |
| | | }, |
| | | close() { |
| | | if (this.timer){ |
| | | if (this.timer) { |
| | | window.clearInterval(this.timer) |
| | | } |
| | | }, |
| | |
| | | </script> |
| | | |
| | | <style> |
| | | #containerImg { |
| | | display: flex; |
| | | border: 1px solid #dfe3e8; |
| | | height:400px ; |
| | | width: 100% !important; |
| | | } |
| | | #containerImg { |
| | | display: flex; |
| | | border: 1px solid #dfe3e8; |
| | | height: 400px; |
| | | width: 100% !important; |
| | | } |
| | | |
| | | .x6-graph-scroller.x6-graph-scroller-pannable { |
| | | width: 100% !important; |
| | | } |
| | | .x6-graph-scroller.x6-graph-scroller-pannable { |
| | | width: 100% !important; |
| | | } |
| | | |
| | | #stencilImg { |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | border-right: 1px solid #dfe3e8; |
| | | } |
| | | #stencilImg { |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | border-right: 1px solid #dfe3e8; |
| | | } |
| | | |
| | | .x6-widget-stencil { |
| | | position: relative; |
| | | height: 100%; |
| | | } |
| | | .x6-widget-stencil { |
| | | position: relative; |
| | | height: 100%; |
| | | } |
| | | |
| | | .x6-widget-stencil-content { |
| | | position: relative; |
| | | height: 100%; |
| | | } |
| | | .x6-widget-stencil-content { |
| | | position: relative; |
| | | height: 100%; |
| | | } |
| | | |
| | | </style> |