Compare commits

...

15 Commits

Author SHA1 Message Date
zwq
75f59c3279 更新-仓库-2级bug 2023-11-17 15:48:17 +08:00
8c37647aab Merge pull request 'projects/mes-zjl' (#94) from projects/mes-zjl into projects/mes-test
Reviewed-on: #94
2023-11-17 14:08:54 +08:00
bad7175f87 merge test 2023-11-17 14:07:51 +08:00
231e9227a5 1 2023-11-17 14:04:53 +08:00
e82ee4e542 Merge pull request 'projects/mes-dy' (#93) from projects/mes-dy into projects/mes-test
Reviewed-on: #93
2023-11-17 10:38:28 +08:00
helloDy
40e7d6b6d8 Merge branch 'projects/mes-test' into projects/mes-dy 2023-11-17 10:26:21 +08:00
helloDy
1d9b97f1d0 设备信息bug 2023-11-17 10:24:53 +08:00
cfaa17ee28 Merge pull request 'projects/mes-lb' (#92) from projects/mes-lb into projects/mes-test
Reviewed-on: #92
2023-11-17 10:15:36 +08:00
lb
d1cbac481d Merge branch 'projects/mes-test' into projects/mes-lb 2023-11-17 10:14:26 +08:00
lb
c895975703 update 2023-11-17 10:12:00 +08:00
lb
6ef90a8eba merge test 2023-11-17 10:00:04 +08:00
e63b98161f Merge pull request '更新仓库bug' (#91) from projects/mes-zwq into projects/mes-test
Reviewed-on: #91
2023-11-17 09:55:35 +08:00
lb
23c1b4b3c6 update 2023-11-17 09:48:39 +08:00
Melete
010e51c0f6 update 工艺流程 2023-11-16 22:18:45 +08:00
Melete
a6b48280aa update 工艺流程 2023-11-16 22:00:50 +08:00
14 changed files with 386 additions and 208 deletions

View File

@ -12,8 +12,8 @@ ENV = 'development'
VUE_APP_TITLE = MES系统
# 芋道管理系统/开发环境
# VUE_APP_BASE_API = 'http://100.64.0.26:48082'
VUE_APP_BASE_API = 'http://192.168.0.33:48082'
VUE_APP_BASE_API = 'http://100.64.0.26:48082'
# VUE_APP_BASE_API = 'http://192.168.0.33:48082'
# VUE_APP_BASE_API = 'http://192.168.4.173:48080'
# VUE_APP_BASE_API = 'http://192.168.2.173:48080'
# VUE_APP_BASE_API = 'http://192.168.1.49:48080'

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组</title>
<g id="组件" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="icon/banner/home" fill="#000" fill-rule="nonzero">
<g id="编组">
<rect id="矩形" opacity="0" x="0" y="0" width="24" height="24"></rect>
<path d="M11.1710783,2.42919989 C11.7298936,2.09409047 12.4328291,2.12455473 12.9654367,2.52059014 L20.3218013,7.99000647 L20.4665209,8.10559268 C21.0744501,8.62656431 21.4302636,9.40344805 21.4302636,10.227099 L21.4302636,19.0470569 L21.4250327,19.2212289 C21.3382831,20.6611171 20.1833875,21.8011882 18.7715031,21.8011882 L5.2284969,21.8011882 L5.06035624,21.7957697 C3.67032883,21.7059084 2.56973638,20.5095861 2.56973638,19.0470569 L2.56973638,10.2273587 L2.57600507,10.0381789 C2.63012926,9.22282649 3.03207443,8.47038558 3.67819781,7.99000711 L11.034559,2.52059336 Z M12.0713092,3.55793652 C11.9772762,3.53774358 11.8769764,3.55793433 11.7954857,3.6185066 L4.43911542,9.0879271 L4.32641124,9.18150853 C4.04059293,9.44596068 3.87451485,9.82573182 3.87451485,10.2273587 L3.87451485,19.0470569 L3.880713,19.1821318 C3.94632222,19.8933667 4.52470053,20.4496068 5.2284969,20.4496068 L11.2507497,20.4487759 L11.3507364,20.3451977 L11.3512202,14.4627186 L11.3582338,14.3683764 C11.4044406,14.0603828 11.6734228,13.8227675 12,13.8227675 C12.3345637,13.8227675 12.6123182,14.0734451 12.6454705,14.3976012 L12.6489183,14.4681588 L12.6487364,20.3451881 L12.7487231,20.4487759 L18.7714898,20.4496068 L18.9018895,20.4431864 C19.5885066,20.3752237 20.1254851,19.7760987 20.1254851,19.0470569 L20.1254851,10.2273587 L20.1177907,10.0779557 C20.0769951,9.68325297 19.8759128,9.32208831 19.5608746,9.08791971 L12.2045243,3.61851399 L12.1402672,3.58065321 Z" id="形状结合" stroke="#000" stroke-width="0.1"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1,5 +1,8 @@
<template>
<div class="right-msg" :style="blackTitle ? 'color: #000' : 'color: #fff'">
<div class="home-icon" v-if='blackTitle'>
<svg-icon icon-class="home" style="font-size: 24px; cursor: pointer;" @click="toHome"/>
</div>
<div class="time-msg">
<div class="line1">{{timeZone}}&nbsp;&nbsp;&nbsp;&nbsp;{{topTime}}</div>
<div class="line2">{{topDate}}</div>
@ -45,7 +48,7 @@ export default {
}
}
},
mounted() {
created() {
this.getUserMsg()
this.getTime()
},
@ -73,7 +76,10 @@ export default {
this.$store.dispatch('LogOut').then(() => {
location.href = getPath('/');
})
}).catch(() => {});
}).catch(() => {})
},
toHome() {
this.$router.push({ path: "/" })
}
}
}
@ -83,13 +89,16 @@ export default {
float: right;
height: 100%;
font-size: 14px;
// color: #fff;
// padding-top: 15px;
// padding-right: 38px;
.time-msg {
display: inline-block;
margin-right: 30px;
}
.home-icon {
display: inline-block;
margin-right: 30px;
vertical-align: top;
padding-top: 7px;
}
.base-msg {
display: inline-block;
.avatar {

View File

@ -424,6 +424,7 @@ export default {
//
form: {
id: null,
files: []
},
showUploadComponents: false, //
};
@ -506,6 +507,7 @@ export default {
spec: undefined,
description: undefined,
remark: undefined,
files: []
};
this.resetForm('form');
},

View File

@ -2,7 +2,7 @@
<div class="choicepart-container">
<navbar />
<div class="choicepart-wrapper">
<div class="choicepart-box" id="choicepartBox" :style="'transform:scale('+scale+');width:1574px;height:538px;'">
<div class="choicepart-box" id="choicepartBox" :style="'transform:scale('+scale+');width:1574px;height:538px;'" v-show="showItem">
<div class="choicepart-line1">
<div
v-for="(item, index) in menuArr1"
@ -37,7 +37,7 @@
</div>
</template>
<script>
import Navbar from './components/Navbar.vue'
import Navbar from './components/Navbar'
import { debounce } from '@/utils/debounce'
export default {
components: { Navbar },
@ -154,6 +154,7 @@ export default {
}
}
],
showItem: false
}
},
// computed:{
@ -217,6 +218,9 @@ export default {
}
},
resetSize() {
let _this = this
_this.showItem = false
_this.loading = true
let choicepartBox = document.querySelector('#choicepartBox')
let rw = parseFloat(window.innerWidth)
let rh = parseFloat(window.innerHeight)
@ -224,8 +228,16 @@ export default {
let bh = parseFloat(choicepartBox.style.height)
let wx = 0.82/(bw / rw)
let hx = 0.56/(bh / rh)
this.scale = wx > hx ? hx : wx
_this.scale = wx > hx ? hx : wx
setTimeout(_this.showItemFun, 700)
},
showItemFun() {
this.loading = false
this.showItem = true
}
},
beforeDestroy() {
this.showItem = false
}
}
</script>
@ -244,7 +256,7 @@ export default {
align-items: center;
}
.choicepart-box {
// border: 1px solid red;
// transition: all 0.3s linear;
.choicepart-line1 {
width: 100%;
margin-bottom: 80px;

View File

@ -127,18 +127,19 @@ export default {
lineData[it.recordTime + '_area'] = it.area
})
console.log('你好', this.monitorList)
this.monitorList.forEach(m => {
console.log('455', m)
if (m.lineName === lineData.proLineName) {
m.data.forEach(bad => {
//
// console.log('233', Date.parse(bad.dynamicName))
const stamp = Date.parse(bad.dynamicName)
lineData[stamp + '_bad'] = bad.dynamicValue
lineData[stamp + '_percent'] = (lineData[stamp + '_bad'] / lineData[stamp + '_down'] * 100).toFixed(2) + '%'
})
}
})
if (this.monitorList.length > 0) {
this.monitorList.forEach(m => {
if (m.lineName === lineData.proLineName) {
m.data.forEach(bad => {
//
// console.log('233', Date.parse(bad.dynamicName))
const stamp = Date.parse(bad.dynamicName)
lineData[stamp + '_bad'] = bad.dynamicValue
lineData[stamp + '_percent'] = (lineData[stamp + '_bad'] / lineData[stamp + '_down'] * 100).toFixed(2) + '%'
})
}
})
}
lineData['workOrderName'] = works.join(',')
lineData['spec'] = specs.join(',')
this.tableData.push(lineData)

View File

@ -22,7 +22,9 @@
:line="item.lineName"
:desc="item.remark"
:isActive="item.enabled"
@edit="handleUpdate" />
@edit="handleUpdate"
@copy="handleCopy"
@delete="handleDelete" />
</section>
<base-dialog
@ -58,6 +60,12 @@ const ProcessItem = {
handleEdit() {
this.$emit('edit', this.id);
},
handleCopy() {
this.$emit('copy', this.id);
},
handleDelete() {
this.$emit('delete', this.id);
},
handleViewDetail(e) {
this.$router.push({
name: 'ProcessFlowView',
@ -117,12 +125,18 @@ const ProcessItem = {
<el-col
span={8}
style="text-align: center; border-right: 1px solid #0001">
<el-button type="text" style="color: #0007; line-height: 1.75">
<el-button
type="text"
style="color: #0007; line-height: 1.75"
onClick={this.handleCopy}>
复制
</el-button>
</el-col>
<el-col span={8} style="text-align: center;">
<el-button type="text" style="color: #0007; line-height: 1.75">
<el-button
type="text"
style="color: #0007; line-height: 1.75"
onClick={this.handleDelete}>
删除
</el-button>
</el-col>
@ -255,6 +269,43 @@ export default {
this.open = true;
this.title = '修改工艺';
},
async handleCopy(id) {
this.$confirm('确认拷贝操作?', '提示', {
confirmButtonText: '确 认',
cancelButtonText: '取 消',
})
.then(async () => {
const { code } = await this.http(
'/extend/process-flow/copy',
'post',
{
id,
}
);
if (code == 0) {
this.$modal.msgSuccess('复制成功');
this.getList();
}
})
.catch(() => console.info('操作取消'));
},
async handleDelete(id) {
this.$confirm('确认删除这个工艺吗?', '提示', {
confirmButtonText: '确 认',
cancelButtonText: '取 消',
})
.then(async () => {
const { code } = await this.http(
'/extend/process-flow/delete?id=' + id,
'delete'
);
if (code == 0) {
this.$modal.msgSuccess('删除成功');
this.getList();
}
})
.catch(() => console.info('操作取消'));
},
submitForm() {
this.$refs['form'].validate((valid) => {
if (!valid) {

View File

@ -9,42 +9,68 @@
<section class="process-bom">
<SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" />
<div class="btns" style="
<div
class="btns"
style="
text-align: right;
position: absolute;
top: 20px;
right: 20px;
display: flex;
">
<el-button type="primary" plain :disabled="currentDet == null" class="btn-create" icon="el-icon-plus" @click="handleEqBtn">
<el-button
type="primary"
plain
:disabled="currentDet == null"
class="btn-create"
@click="handleAddEquipment"
icon="el-icon-plus">
分配设备
</el-button>
<el-input icon="el-icon-search" placeholder="搜索" v-model="searchText" style="margin-left: 20px">
<el-input
icon="el-icon-search"
placeholder="搜索"
v-model="searchText"
style="margin-left: 20px">
<i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input>
</div>
<!-- 列表 -->
<base-table :table-props="tableProps" :page="queryParams.pageNo" :limit="queryParams.pageSize" :table-data="list"
<base-table
:table-props="tableProps"
:page="queryParams.pageNo"
:limit="queryParams.pageSize"
:table-data="list"
@emitFun="handleEmitFun">
<method-btn v-if="tableBtn.length" slot="handleBtn" label="操作" :width="120" :method-list="tableBtn"
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="120"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 新增&编辑 -->
<base-dialog
:dialogTitle="eqTitle"
:dialogVisible="centervisible"
@cancel="handleCancel"
@confirm="handleConfirm"
:before-close="handleCancel"
width='70%'
>
123
dialogTitle="选择设备"
:dialogVisible="open"
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
<el-transfer v-model="choosedEquipments" :data="eqList">
<!-- <span slot-scope="{ option }">
{{ option.key }} - {{ option.label }}
</span> -->
</el-transfer>
</base-dialog>
</section>
</template>
@ -56,20 +82,17 @@ export default {
props: {
currentDet: {
type: Object,
default: null
}
default: null,
},
},
data() {
return {
open: false,
eqList: [],
finalList: [],
choosedEquipments: [],
searchBarFormConfig: [{ label: '工序下设备' }],
tableProps: [
// {
// prop: 'createTime',
// label: '',
// fixed: true,
// width: 180,
// filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
// },
{ prop: 'equipmentId', label: '设备名称' },
{ prop: 'materialName', label: '物料BOM' },
{ prop: 'valueName', label: '参数BOM' },
@ -81,10 +104,7 @@ export default {
pageNo: 1,
pageSize: 10,
},
searchText: '',
eqTitle: '分配设备',
centervisible: false,
pageUrl: '/extend/process-flow-det-equipment/page'
searchText: ''
};
},
watch: {
@ -97,12 +117,55 @@ export default {
}
},
immediate: true,
deep: true
}
deep: true,
},
},
methods: {
handleEmitFun() { },
handleTableBtnClick() { },
renderFn(h, option) {
console.log(option);
return <span>1</span>;
},
async getEqList() {
console.log('currentDet', this.currentDet);
const { sectionId } = this.currentDet;
const { code, data } = await this.http(
'base/core-equipment-bind-section/page',
'get',
{ workshopSectionId: sectionId, pageNo: 1, pageSize: 100 }
);
if (code == 0) {
console.log('workshopSectionId', data);
//
this.eqList = [
{ equipmentId: 1, equipmentName: '设备1' },
{ equipmentId: 2, equipmentName: '设备2' },
{ equipmentId: 3, equipmentName: '设备3' },
{ equipmentId: 4, equipmentName: '设备4' },
{ equipmentId: 5, equipmentName: '设备5' },
{ equipmentId: 6, equipmentName: '设备6' },
]; // ].map((item) => ({ label: item.equipmentName, key: item.equipmentId }));
// bombom
// bom bom
this.finalList = this.eqList.map((item) => {
item.sub = [];
// key: equipmentId-bomId
item.sub.push({
key: item.equipmentId + '-' + '101',
label: '参数bom1',
});
item.sub.push({
key: item.equipmentId + '-' + '201',
label: '物料bom1',
});
return item;
});
}
},
handleEmitFun() {},
handleTableBtnClick() {},
put(payload) {
return this.http(this.updateUrl, 'put', payload);
},
@ -121,43 +184,34 @@ export default {
method,
params: method === 'get' ? payload : null,
data: method !== 'get' ? payload : null,
})
});
},
submitForm() {},
async getList({ detId, detName, detDesc, flowId, sectionName } = {}) {
const { code, data } = await this.recv({ pageNn: 1, pageSize: 100, flowDetId: detId });
console.log('get list', detId, detName, flowId);
const { data, code } = await this.http(
'/extend/process-flow-det-equipment/page',
'get',
{ flowDetId: detId, ...this.queryParams }
);
if (code == 0) {
if (data) {
this.list = data.list
}
return { cells: [] };
this.list = data.list;
this.total = data.total;
} else {
this.list.splice(0);
this.total = 0;
}
return Promise.reject(this.infoUrl + ' 接口出错!');
},
// getList({ detId, detName, detDesc, flowId, sectionName } = {}) {
// console.log('get list')
// },
// getList() {
// this.list = [
// { name: '1', code: 'bomg-1', remark: 'Tochter' },
// { name: '2', code: 'bomg-2', remark: 'Bruder' },
// { name: '3', code: 'bomg-3', remark: 'Kalt' },
// ]
// },
async handleAddEquipment() {
this.open = true;
await this.getEqList();
},
cancel() {
this.open = false;
},
clearList() {
this.list = [];
},
handleEqBtn() {
this.centervisible = true
},
handleConfirm() {
this.centervisible = false
},
handleCancel() {
this.centervisible = false
}
},
};
</script>

View File

@ -9,25 +9,57 @@
<section class="process-graph">
<SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" />
<div class="btns" style="text-align: right; position: absolute; top: 20px; right: 20px">
<el-button type="warning" @click="undo" plain v-if="allowUndo" :disabled="!allowUndo" icon="el-icon-back">
<div
class="btns"
style="text-align: right; position: absolute; top: 20px; right: 20px">
<el-button
type="warning"
@click="undo"
plain
v-if="allowUndo"
:disabled="!allowUndo"
icon="el-icon-back">
撤销
</el-button>
<el-button type="warning" @click="redo" plain v-if="allowRedo" :disabled="!allowRedo">
<el-button
type="warning"
@click="redo"
plain
v-if="allowRedo"
:disabled="!allowRedo">
下一步
<i class="el-icon-right el-icon--right"></i>
</el-button>
<el-button class="btn-refresh" @click="handleUpdateLayout" icon="el-icon-refresh">
刷新布局</el-button>
<el-button type="primary" plain class="btn-create" icon="el-icon-plus" @click="handleAdd">
<el-button
class="btn-refresh"
@click="handleUpdateLayout"
icon="el-icon-refresh">
刷新布局
</el-button>
<el-button
type="primary"
plain
class="btn-create"
icon="el-icon-plus"
@click="handleAdd">
新建工序
</el-button>
<el-button class="btn-edit" :disabled="currentDet == null" @click="handleEdit">编辑</el-button>
<el-button
class="btn-edit"
:disabled="currentDet == null"
@click="handleEdit">
编辑
</el-button>
</div>
<div class="process-graph__panel" ref="panel"></div>
<base-dialog :dialogTitle="title" :dialogVisible="open" width="35%" @close="cancel" @cancel="cancel"
<base-dialog
:dialogTitle="title"
:dialogVisible="open"
width="35%"
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" />
</base-dialog>
@ -36,11 +68,15 @@
<script>
import { Graph } from '@antv/x6';
import ProcessNode, { createProcessNode, CACHE_NAME, getSectionFrom } from './ProcessNode';
import ProcessNode, {
createProcessNode,
CACHE_NAME,
getSectionFrom,
} from './ProcessNode';
import DialogForm from '@/components/DialogForm';
// import { IdToName } from '@/utils'
Graph.registerNode('process-node', ProcessNode,true);
Graph.registerNode('process-node', ProcessNode, true);
export default {
name: 'ProcessGraph',
@ -79,7 +115,7 @@ export default {
bind: {
filterable: true,
},
cache: CACHE_NAME
cache: CACHE_NAME,
},
],
[
@ -99,42 +135,39 @@ export default {
id: null,
flowId: null,
content: '',
createTime: null
createTime: null,
},
currentDet: null,
currentNode: null
currentNode: null,
};
},
watch: {
'form.sectionId': {
handler(id) {
},
handler(id) {},
immediate: false,
},
currentDet: {
handler(val) {
this.$emit('det-selected', val)
this.$emit('det-selected', val);
},
deep: true,
immediate: true
}
immediate: true,
},
},
activated() {
this.loadLayout().then(json => {
this.initGraph(json)
})
this.loadLayout().then((json) => {
this.initGraph(json);
});
},
deactivated() {
this.graph.dispose();
this.$nextTick(() => {
this.resetLayout();
this.graph = null;
})
});
},
computed: {},
methods: {
initGraph(json) {
const graph = new Graph({
container: this.$refs.panel,
@ -144,7 +177,7 @@ export default {
},
history: true,
selecting: {
className: 'my-select'
className: 'my-select',
},
connecting: {
snap: true,
@ -155,24 +188,17 @@ export default {
allowEdge: false,
},
panning: true,
// scroller: {
// enabled: true,
// pannable: true,
// cursor: '',
// width: 800,
// height: 200
// },
mousewheel: {
enabled: true,
modifiers: ['ctrl', 'meta']
}
modifiers: ['ctrl', 'meta'],
},
});
console.log(json)
graph.fromJSON(json)
graph.fromJSON(json);
this.graph = graph;
this.$nextTick(() => {
this.registerGraphEvents();
})
});
},
registerGraphEvents() {
@ -182,31 +208,33 @@ export default {
this.currentDet = null;
this.currentNode = null;
nodes.forEach(node => {
nodes.forEach((node) => {
node.attr('container/stroke', '#ccc');
});
edges.forEach(edge => {
edge.attr('line/stroke', '#ccc')
})
}
edges.forEach((edge) => {
edge.attr('line/stroke', '#ccc');
});
};
this.graph.on('node:click', ({ e, x, y, node, view }) => {
reset();
node.attr('container/stroke', '#0b58ff');
const { detId, detName, detDesc, processId, sectionId, sectionName } = node.attrs;
this.currentDet = {}
this.$set(this.currentDet, 'detId', detId?.text)
this.$set(this.currentDet, 'sectionId', sectionId?.text)
this.$set(this.currentDet, 'detName', detName?.text)
this.$set(this.currentDet, 'detDesc', detDesc?.text)
this.$set(this.currentDet, 'flowId', processId?.text)
this.$set(this.currentDet, 'sectionName', sectionName?.text)
this.currentNode = node
const { detId, detName, detDesc, processId, sectionId, sectionName } =
node.attrs;
console.log('node clicked!', node)
this.currentDet = {};
this.$set(this.currentDet, 'detId', detId?.text);
this.$set(this.currentDet, 'sectionId', sectionId?.text);
this.$set(this.currentDet, 'detName', detName?.text);
this.$set(this.currentDet, 'detDesc', detDesc?.text);
this.$set(this.currentDet, 'flowId', processId?.text);
this.$set(this.currentDet, 'sectionName', sectionName?.text);
this.currentNode = node;
});
this.graph.on('edge:click', ({ e, x, y, edge, view }) => {
// console.log('edge clicked!', edge)
reset();
edge.attr('line/stroke', '#0b58ff')
edge.attr('line/stroke', '#0b58ff');
});
this.graph.on('blank:click', ({ e, x, y }) => {
reset();
@ -219,30 +247,30 @@ export default {
y: 0,
offset: { x: 0, y: 0 },
onClick: ({ e, cell, view }) => {
this.$confirm(
'确定删除这个工序吗?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
).then(async () => {
const id = node.attrs.detId.text;
const status = await this.handleDelete(id);
if (status) {
view.cell.remove();
}
}).catch(err => {
return;
this.$confirm('确定删除这个工序吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
}
}
})
.then(async () => {
const id = node.attrs.detId.text;
const status = await this.handleDelete(id);
if (status) {
view.cell.remove();
//
this.handleUpdateLayout();
}
})
.catch((err) => {
return;
});
},
},
});
});
this.graph.on('node:mouseleave', ({ node }) => {
node.removeTools();
})
});
},
resetLayout() {
@ -250,13 +278,13 @@ export default {
id: null,
flowId: null,
content: '',
createTime: null
}
createTime: null,
};
},
async loadLayout() {
const flowId = this.$route.params.id;
if (!flowId) return { cells: [] }
if (!flowId) return { cells: [] };
const { code, data } = await this.info({ id: flowId });
if (code == 0) {
if (data) {
@ -269,9 +297,9 @@ export default {
return Promise.reject(this.infoUrl + ' 接口出错!');
},
handleToJson() { },
handleToJson() {},
handleLoadJson() { },
handleLoadJson() {},
handleDumpJson() {
if (this.graph) {
@ -282,17 +310,25 @@ export default {
async handleUpdateLayout() {
this.layout.content = JSON.stringify(this.graph.toJSON());
let code, data;
console.table([this.layout, this.$route.params.id])
console.table([this.layout, this.$route.params.id]);
//
if (this.layout.id) {
({ code, data } = await this.http('/extend/process-flow-view/update', 'put', this.layout));
({ code, data } = await this.http(
'/extend/process-flow-view/update',
'put',
this.layout
));
} else {
this.layout.flowId = this.$route.params.id;
({ code, data } = await this.http('/extend/process-flow-view/create', 'post', this.layout));
({ code, data } = await this.http(
'/extend/process-flow-view/create',
'post',
this.layout
));
}
if (code == 0) {
this.$modal.msgSuccess('布局已刷新!')
this.$modal.msgSuccess('布局已刷新!');
}
},
@ -325,12 +361,11 @@ export default {
this.title = '编辑工序';
this.$nextTick(() => {
this.open = true;
})
});
},
async handleDelete(id) {
const { code, data } = await this.delete({ id });
debugger;
if (code == 0) {
this.$modal.msgSuccess('成功删除一个工序!');
return true;
@ -349,17 +384,17 @@ export default {
this.updateProcess()
.then((form) => {
const { name, sectionId, remark } = form;
getSectionFrom(sectionId).then(sectionName => {
getSectionFrom(sectionId).then((sectionName) => {
// node
this.currentNode.setAttrs({
detName: { text: name },
sectionId: { text: sectionId },
sectionName: { text: sectionName },
detDesc: { text: remark }
})
})
detDesc: { text: remark },
});
});
})
.catch(err => { });
.catch((err) => {});
return;
}
@ -368,19 +403,22 @@ export default {
if (!id) return null;
return createProcessNode({
flowId: flowId,
name, sectionId, remark,
name,
sectionId,
remark,
id,
})
}).then(node => {
});
})
.then((node) => {
if (!node) {
this.$modal.msgError('创建节点失败');
return;
};
}
this.graph.addNode(node);
}).catch(err => {
})
.catch((err) => {
return;
});
});
},
@ -390,17 +428,16 @@ export default {
this.$modal.msgError('工艺ID不能为空');
return Promise.reject('工艺ID不能为空');
}
return this.put({ flowId, ...this.form })
.then(({ code, data }) => {
if (code == 0) {
this.$modal.msgSuccess('修改成功');
} else {
this.$modal.msgError('修改失败');
}
const formCopy = { ...this.form }
this.open = false;
return formCopy;
});
return this.put({ flowId, ...this.form }).then(({ code, data }) => {
if (code == 0) {
this.$modal.msgSuccess('修改成功');
} else {
this.$modal.msgError('修改失败');
}
const formCopy = { ...this.form };
this.open = false;
return formCopy;
});
},
createProcess() {
@ -410,22 +447,22 @@ export default {
this.$modal.msgError('工艺ID不能为空');
return Promise.reject('工艺ID不能为空');
}
console.log('create process', this.form)
console.log('create process', this.form);
//
return this.post({ flowId, ...this.form }).then(
({ code, data }) => {
return this.post({ flowId, ...this.form })
.then(({ code, data }) => {
this.$modal.msgSuccess('新增成功');
this.open = false;
// this.getList();
return {
id: data, // id
...this.form, // this.form open->false this.form
flowId
...this.form, // this.form open->false this.form
flowId,
};
}
).catch(err => {
this.$modal.msgError(err)
});
})
.catch((err) => {
this.$modal.msgError(err);
});
},
put(payload) {
@ -452,7 +489,7 @@ export default {
method,
params: method === 'get' ? payload : null,
data: method !== 'get' ? payload : null,
})
});
},
},
};

View File

@ -114,7 +114,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`end-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`end-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -114,7 +114,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`out-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`out-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -114,7 +114,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`pack-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`pack-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -114,7 +114,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`part-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`part-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -114,7 +114,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`raw-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`raw-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',