This commit is contained in:
2022-12-13 16:41:37 +08:00
parent c0a5dbac2d
commit f6b3f2f323
60 changed files with 6404 additions and 742 deletions

View File

@@ -1,103 +1,149 @@
import { Addon} from '@antv/x6';
import { Addon } from '@antv/x6';
// 拖拽生成四边形
export const startDragToGraph = (graph,data,e) =>{
const node =
export const startDragToGraph = (graph, data, e) => {
const node =
graph.createNode({
width: 100, //节点的宽度
height: 60, //节点的高度
attrs: {
label: {
text: data.name,
workingProcedureId: data.id,
fill: 'white',
fontSize: 14,
textWrap: {
width: -10 ,
height: -10,
ellipsis: true,
},
label: '圆角矩形',
data: {
type: 'defaultYSquare'
},
body: {
stroke: '#000000',
strokeWidth: 1,
fill: '#5bdeff',
}
},
ports: ports
})
const dnd = new Addon.Dnd({target:graph})
dnd.start(node,e)
shape: 'rect',
width: 100, //节点的宽度
height: 60, //节点的高度
attrs: {
label: {
text: data.name,
workingProcedureId: data.id,
fill: '#FFFFFF',
fontSize: 14,
textWrap: {
width: -10,
height: -10,
ellipsis: true,
},
},
body: {
stroke: '#000000',
strokeWidth: 1,
fill: '#5bdeff',
rx: 10,
ry: 10,
}
},
})
const dnd = new Addon.Dnd({ target: graph })
dnd.start(node, e)
}
//下面是锚点的代码。 知道就行了 我就不一一写了。
export const ports = {
groups: {
// 输入链接桩群组定义
top: {
position: 'top',
attrs: {
circle: {
r: 4,
magnet: true,
stroke: '#2D8CF0',
strokeWidth: 2,
fill: '#fff',
},
},
},
// 输出链接桩群组定义
bottom: {
position: 'bottom',
attrs: {
circle: {
r: 4,
magnet: true,
stroke: '#2D8CF0',
strokeWidth: 2,
fill: '#fff',
},
},
},
left: {
position: 'left',
attrs: {
circle: {
r: 4,
magnet: true,
stroke: '#2D8CF0',
strokeWidth: 2,
fill: '#fff',
},
},
},
right: {
position: 'right',
attrs: {
circle: {
r: 4,
magnet: true,
stroke: '#2D8CF0',
strokeWidth: 2,
fill: '#fff',
},
groups: {
// 输入链接桩群组定义
top: {
position: 'top',
attrs: {
circle: {
r: 4,
magnet: true,
stroke: '#2D8CF0',
strokeWidth: 2,
fill: '#fff',
},
},
},
items: [
// 输出链接桩群组定义
bottom: {
position: 'bottom',
attrs: {
circle: {
r: 4,
magnet: true,
stroke: '#2D8CF0',
strokeWidth: 2,
fill: '#fff',
},
},
},
left: {
position: 'left',
attrs: {
circle: {
r: 4,
magnet: true,
stroke: '#2D8CF0',
strokeWidth: 2,
fill: '#fff',
},
},
},
right: {
position: 'right',
attrs: {
circle: {
r: 4,
magnet: true,
stroke: '#2D8CF0',
strokeWidth: 2,
fill: '#fff',
},
},
},
},
items: [
{
id: 'port1',
group: 'top',
},
{
id: 'port2',
group: 'bottom',
},
{
id: 'port3',
group: 'left',
},
{
id: 'port4',
group: 'right',
}
],
}
// 连线 label 设置
export const configEdgeLabel = (labelText, fontColor, fill, stroke) => {
if (!labelText) return { attrs: { labelText: { text: '' }, labelBody: { fill: '', stroke: '' } } }
return {
markup: [
{
id: 'port1',
group: 'top',
tagName: 'rect',
selector: 'labelBody',
},
{
id: 'port2',
group: 'bottom',
tagName: 'text',
selector: 'labelText',
},
{
id: 'port3',
group: 'left',
},
{
id: 'port4',
group: 'right',
}
],
attrs: {
labelText: {
text: labelText || '',
fill: fontColor || '#333',
textAnchor: 'middle',
textVerticalAnchor: 'middle',
},
labelBody: {
ref: 'labelText',
refX: -8,
refY: -5,
refWidth: '100%',
refHeight: '100%',
refWidth2: 16,
refHeight2: 10,
stroke: stroke || '#555',
fill: fill || '#fff',
strokeWidth: 2,
rx: 5,
ry: 5,
},
}
}
}

View File

@@ -2,13 +2,16 @@
* @Author: zwq
* @Date: 2022-09-01 15:42:34
* @LastEditors: zwq
* @LastEditTime: 2022-09-09 13:42:48
* @LastEditTime: 2022-12-12 15:44:25
* @Description:
-->
<template>
<el-row :gutter="20">
<el-col :span="3">
<el-card>
<el-card class="cardHeader">
<div slot="header" style="color:#409eff;text-align:center">
工序列表
</div>
<div
v-for="(item, index) in processArr"
:key="index"
@@ -18,19 +21,164 @@
>
{{ item.name }}
</div>
<!-- <el-button type="primary">保存</el-button> -->
</el-card>
</el-col>
<el-col :span="21">
<div id="containerChart"></div>
<div v-if="editDrawer" class="edit-main">
<div class="edit-main-title">
<h3>{{ editTitle }}</h3>
<i class="el-icon-close" @click="closeEditForm"></i>
</div>
<div v-if="editTitle === '编辑节点'" class="form-main">
<el-form ref="nodeForm" :model="form" label-width="80px" size="mini">
<el-form-item label="节点文本">
<el-input
v-model="form.labelText"
size="small"
readonly
@input="changeNode('labelText', form.labelText)"
></el-input>
</el-form-item>
<!-- <el-form-item label="字体大小">
<el-input
v-model="form.fontSize"
size="small"
@input="changeNode('fontSize', form.fontSize)"
></el-input>
</el-form-item> -->
<el-form-item label="字体颜色">
<el-color-picker
v-model="form.fontFill"
@change="changeNode('fontFill', form.fontFill)"
></el-color-picker>
</el-form-item>
<el-form-item label="节点背景">
<el-color-picker
v-model="form.fill"
@change="changeNode('fill', form.fill)"
></el-color-picker>
</el-form-item>
<!-- <el-form-item label="边框颜色">
<el-color-picker
v-model="form.stroke"
@change="changeNode('stroke', form.stroke)"
></el-color-picker>
</el-form-item> -->
<div class="see-box">
<h5>预览</h5>
<div
class="see-item"
:style="{
background: form.fill,
color: form.fontFill,
'border-color': form.stroke,
'font-size': form.fontSize + 'px',
}"
>
{{ form.labelText }}
</div>
</div>
</el-form>
</div>
<!-- <div v-if="editTitle === '编辑连线'" class="form-main">
<el-form ref="edgeForm" :model="form" label-width="80px" size="mini">
<el-form-item label="标签内容">
<el-input
v-model="form.label"
size="small"
placeholder="标签文字,空则没有"
@input="
changeEdgeLabel(form.label, labelForm.fontColor, labelForm.fill, labelForm.stroke)
"
></el-input>
<div v-if="form.label" class="label-style">
<p>
字体颜色<el-color-picker
v-model="labelForm.fontColor"
size="mini"
@change="
changeEdgeLabel(
form.label,
labelForm.fontColor,
labelForm.fill,
labelForm.stroke
)
"
></el-color-picker>
</p>
<p>
背景颜色<el-color-picker
v-model="labelForm.fill"
size="mini"
@change="
changeEdgeLabel(
form.label,
labelForm.fontColor,
labelForm.fill,
labelForm.stroke
)
"
></el-color-picker>
</p>
<p>
描边颜色<el-color-picker
v-model="labelForm.stroke"
size="mini"
@change="
changeEdgeLabel(
form.label,
labelForm.fontColor,
labelForm.fill,
labelForm.stroke
)
"
></el-color-picker>
</p>
</div>
</el-form-item>
<el-form-item label="线条颜色">
<el-color-picker
v-model="form.stroke"
size="small"
@change="changeEdgeStroke"
></el-color-picker>
</el-form-item>
<el-form-item label="线条宽度">
<el-input-number
v-model="form.strokeWidth"
size="small"
@change="changeEdgeStrokeWidth"
:min="2"
:step="2"
:max="6"
label="线条宽度"
></el-input-number>
</el-form-item>
<el-form-item label="双向箭头">
<el-switch v-model="form.isArrows" @change="changeEdgeArrows"></el-switch>
</el-form-item>
<el-form-item label="流动线条">
<el-switch v-model="form.isAnit" @change="changeEdgeAnit"></el-switch>
</el-form-item>
</el-form>
</div> -->
<div class="edit-btn">
<el-button type="primary" size="medium" @click="saveChange" style="width:100%"
>保存</el-button
>
<el-button type="danger" size="medium" @click="handlerDel" style="width:100%"
>删除此{{ editTitle === "编辑节点" ? "节点" : "连线" }}</el-button
>
</div>
</div>
</el-col>
</el-row>
</template>
<script>
import { Graph, Shape, FunctionExt } from "@antv/x6";
import { startDragToGraph, ports } from "./flowMethods.js";
import { startDragToGraph, configEdgeLabel } from "./flowMethods.js";
export default {
props: {
productId: {
@@ -45,6 +193,14 @@ export default {
graph: "",
type: "grid",
selectCell: "",
editDrawer: false,
editTitle: "",
form: {},
labelForm: {
fontColor: "#333",
fill: "#FFF",
stroke: "#555",
},
connectEdgeType: {
//连线方式
connector: "normal",
@@ -68,6 +224,20 @@ export default {
activated() {
this.init();
},
watch: {
value: {
handler: function() {
if (this.graph) {
this.selectCell = "";
this.editDrawer = false;
this.graph.dispose();
this.init();
}
},
deep: true,
immediate: true,
},
},
methods: {
init() {
this.getArr();
@@ -101,106 +271,50 @@ export default {
modifiers: ["ctrl", "meta"],
},
grid: this.grid,
connecting: {
// 节点连接
anchor: "center",
connectionPoint: "anchor",
allowBlank: false,
snap: true,
},
createEdge() {
return new Shape.Edge({
attrs: {
line: {
stroke: "#1890ff",
strokeWidth: 1,
targetMarker: {
name: "classic",
size: 8,
},
strokeDasharray: 0, //虚线
style: {
animation: "ant-line 30s infinite linear",
},
},
},
label: {
text: "",
},
connector: _that.connectEdgeType.connector,
router: {
name: _that.connectEdgeType.router.name || "",
},
zIndex: 0,
});
},
});
// 鼠标移入移出节点
this.graph.on(
"node:mouseenter",
FunctionExt.debounce(() => {
const container = document.getElementById("containerChart");
const ports = container.querySelectorAll(".x6-port-body");
this.showPorts(ports, true);
}),
500
);
this.graph.on("node:mouseleave", (e) => {
const container = document.getElementById("containerChart");
const ports = container.querySelectorAll(".x6-port-body");
this.showPorts(ports, false);
});
// // 鼠标移入移出节点
// this.graph.on(
// "node:mouseenter",
// FunctionExt.debounce(() => {
// const container = document.getElementById("containerChart");
// const ports = container.querySelectorAll(".x6-port-body");
// this.showPorts(ports, true);
// }),
// 500
// );
// this.graph.on("node:mouseleave", (e) => {
// const container = document.getElementById("containerChart");
// const ports = container.querySelectorAll(".x6-port-body");
// this.showPorts(ports, false);
// });
//获取放置到画布上节点的位置
this.graph.on("node:added", ({ node }) => {
const { x, y } = node.position();
this.addProcess(node.attrs.label.workingProcedureId, x, y);
});
//这是鼠标抬起节点事件
this.graph.on("node:mouseup", ({ node }) => {
this.graph.on("node:moved", ({ node }) => {
const { x, y } = node.position();
this.updataNode(node.attrs.label.id, x, y);
this.updataNode(node.id, x, y);
});
//这是点击节点事件
this.graph.on("node:click", () => {
const cell = this.graph.getSelectedCells();
console.log(cell);
});
//这是右键节点事件
this.graph.on("node:contextmenu", (e) => {
console.log(e);
});
this.graph.on("selection:changed", (args) => {
args.added.forEach((cell) => {
this.selectCell = cell;
if (cell.isEdge()) {
cell.isEdge() && cell.attr("line/strokeDasharray", 5); //虚线蚂蚁线
cell.addTools([
{
name: "vertices",
args: {
padding: 4,
attrs: {
strokeWidth: 0.1,
stroke: "#2d8cf0",
fill: "#ffffff",
},
},
},
]);
}
});
args.removed.forEach((cell) => {
cell.isEdge() && cell.attr("line/strokeDasharray", 0); //正常线
cell.removeTools();
});
console.log(this.graph.toJSON());
// 点击编辑
this.graph.on("cell:click", ({ cell }) => {
this.editForm(cell);
});
//链接边分离后触发
// this.graph.on("edge:connected", ({ isNew, edge }) => {
// if (isNew) {
// const source = edge.getSourceCell();
// const target = edge.getTargetCell();
// }
// });
},
showPorts(ports, show) {
for (let i = 0, len = ports.length; i < len; i = i + 1) {
ports[i].style.visibility = show ? "visible" : "hidden";
}
},
// 是否展示节点
// showPorts(ports, show) {
// for (let i = 0, len = ports.length; i < len; i = i + 1) {
// ports[i].style.visibility = show ? "visible" : "hidden";
// }
// },
// 拖拽生成正方形或者圆形
startDrag(data, e) {
startDragToGraph(this.graph, data, e);
@@ -233,6 +347,7 @@ export default {
}
this.dataList = res.data;
this.setNode();
this.setEdge();
})
.catch(() => {});
},
@@ -240,15 +355,19 @@ export default {
let nodes = [];
this.dataList.forEach((item) => {
let obj = {};
obj.x = item.x;
(obj.id = item.id), (obj.x = item.x);
obj.y = item.y;
obj.width = 100;
obj.height = 60;
obj.label = "圆角矩形";
obj.data = {
type: "defaultYSquare",
};
obj.shape = "rect";
obj.attrs = {
label: {
text: item.workingProcedureName,
id: item.id,
fill: "white",
fill: item.fontcolor || "#FFFFFF",
fontSize: 14,
textWrap: {
width: -10,
@@ -259,10 +378,11 @@ export default {
body: {
stroke: "#000000",
strokeWidth: 1,
fill: "#5bdeff",
fill: item.backcolor || "#5bdeff",
rx: 10,
ry: 10,
},
};
obj.ports = ports;
nodes.push(obj);
});
const data = {
@@ -270,6 +390,22 @@ export default {
};
this.graph.fromJSON(data);
},
setEdge() {
let source, target;
if (this.dataList.length >= 2) {
this.dataList.forEach((item, index) => {
if (index % 2 === 0) {
source = item.id;
} else {
target = item.id;
this.graph.addEdge({
source: source,
target: target,
});
}
});
}
},
updataNode(id, x, y) {
const data = {
id: id,
@@ -287,6 +423,7 @@ export default {
type: "success",
duration: 500,
});
this.getList();
})
.catch(() => {});
},
@@ -314,33 +451,218 @@ export default {
})
.catch(() => {});
},
// 删除
deleteHandle(id, name) {
this.$confirm(`确定对[名称=${name}]进行删除操作?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
//编辑节点和线
editForm(cell) {
this.selectCell = cell;
console.log(cell);
// 编辑node节点
if (cell.isNode() && cell.data.type && cell.data.type.includes("default")) {
this.editTitle = "编辑节点";
const body = cell.attrs.body || cell.attrs.rect || cell.attrs.polygon || cell.attrs.circle;
this.form = {
labelText: cell.attrs.label.text || "",
fontSize: cell.attrs.label.fontSize || 14,
fontFill: cell.attrs.label.fill || "",
fill: body.fill || "",
stroke: body.stroke || "",
};
return (this.editDrawer = true);
}
// // 编辑线
// if (!cell.isNode() && cell.shape === "edge") {
// this.editTitle = "编辑连线";
// this.form = {
// label: cell.labels && cell.labels[0] ? cell.labels[0].attrs.labelText.text : "",
// stroke: cell.attrs.line.stroke || "",
// strokeWidth: cell.attrs.line.strokeWidth || "",
// isArrows: cell.attrs.line.sourceMarker ? true : false,
// isAnit: cell.attrs.line.strokeDasharray ? true : false,
// };
// // 看是否有label
// const edgeCellLabel = (cell.labels && cell.labels[0] && cell.labels[0].attrs) || false;
// if (this.form.label && edgeCellLabel) {
// this.labelForm = {
// fontColor: edgeCellLabel.labelText.fill || "#333",
// fill: edgeCellLabel.labelBody.fill || "#fff",
// stroke: edgeCellLabel.labelBody.stroke || "#555",
// };
// } else {
// this.labelForm = { fontColor: "#333", fill: "#FFF", stroke: "#555" };
// }
// return (this.editDrawer = true);
// }
},
closeEditForm() {
this.editDrawer = false;
},
// 修改一般节点
changeNode(type, value) {
switch (type) {
case "labelText":
this.selectCell.attr("label/text", value);
break;
case "fontSize":
this.selectCell.attr("label/fontSize", value);
break;
case "fontFill":
this.selectCell.attr("label/fill", value);
break;
case "fill":
this.selectCell.attr("body/fill", value);
break;
case "stroke":
this.selectCell.attr("body/stroke", value);
break;
}
},
// 修改边label属性
changeEdgeLabel(label, fontColor, fill, stroke) {
this.selectCell.setLabels([configEdgeLabel(label, fontColor, fill, stroke)]);
if (!label) this.labelForm = { fontColor: "#333", fill: "#FFF", stroke: "#555" };
},
// 修改边的颜色
changeEdgeStroke(val) {
this.selectCell.attr("line/stroke", val);
},
// 边的宽度
changeEdgeStrokeWidth(val) {
if (this.form.isArrows) {
this.selectCell.attr({
line: {
strokeWidth: val,
sourceMarker: {
width: 12 * (val / 2) || 12,
height: 8 * (val / 2) || 8,
},
targetMarker: {
width: 12 * (val / 2) || 12,
height: 8 * (val / 2) || 8,
},
},
});
} else {
this.selectCell.attr({
line: {
strokeWidth: val,
targetMarker: {
width: 12 * (val / 2) || 12,
height: 8 * (val / 2) || 8,
},
},
});
}
},
// 边的箭头
changeEdgeArrows(val) {
if (val) {
this.selectCell.attr({
line: {
sourceMarker: {
name: "block",
width: 12 * (this.form.strokeWidth / 2) || 12,
height: 8 * (this.form.strokeWidth / 2) || 8,
},
targetMarker: {
name: "block",
width: 12 * (this.form.strokeWidth / 2) || 12,
height: 8 * (this.form.strokeWidth / 2) || 8,
},
},
});
} else {
this.selectCell.attr({
line: {
sourceMarker: "",
targetMarker: {
name: "block",
size: 10 * (this.form.strokeWidth / 2) || 10,
},
},
});
}
},
// 边的添加蚂蚁线
changeEdgeAnit(val) {
if (val) {
this.selectCell.attr({
line: {
strokeDasharray: 5,
style: {
animation: "ant-line 30s infinite linear",
},
},
});
} else {
this.selectCell.attr({
line: {
strokeDasharray: 0,
style: {
animation: "",
},
},
});
}
},
// 删除节点
handlerDel() {
this.$confirm(
`此操作将永久删除此${this.editTitle === "编辑节点" ? "节点" : "连线"}, 是否继续?`,
"提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
this.$http
.delete("/basic/productWorkingprocedureRelation", { data: [id] })
.then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.getList();
},
});
} else {
this.$message.error(data.msg);
}
});
const cells = this.graph.getSelectedCells();
if (cells.length) {
this.$http
.delete("/basic/productWorkingprocedureRelation", { data: [cells[0].id] })
.then(({ data }) => {
if (data && data.code === 0) {
this.graph.removeCells(cells);
this.form = {};
this.editDrawer = false;
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.getList();
},
});
} else {
this.$message.error(data.msg);
}
});
}
})
.catch(() => {});
}, //清空画布
},
saveChange() {
const cells = this.graph.getSelectedCells();
const data = {
id: cells[0].id,
backcolor: cells[0].attrs.body.fill,
fontcolor: cells[0].attrs.label.fill,
};
this.$http
.put("/basic/productWorkingprocedureRelation", data)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.$message({
message: this.$t("prompt.success"),
type: "success",
duration: 500,
});
this.getList();
})
.catch(() => {});
},
//清空画布
deleteAll() {
this.graph.clearCells();
},
@@ -349,16 +671,20 @@ export default {
this.graph.dispose();
},
},
destroyed() {
console.log("销毁画布");
beforeDestroy() {
this.graph.dispose();
},
};
</script>
<style>
#containerChart {
<style lang="scss">
@keyframes ant-line {
to {
stroke-dashoffset: -1000;
}
}
</style>
<style>
.btn {
background-color: #5bdeff;
text-align: center;
@@ -368,3 +694,68 @@ export default {
margin-bottom: 10px;
}
</style>
<style lang="scss" scoped="scoped">
.edit-main {
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 280px;
border-left: 1px solid #f2f2f2;
box-shadow: 0 -10px 10px rgba($color: #000000, $alpha: 0.3);
padding: 20px;
background: #fff;
box-sizing: border-box;
.edit-main-title {
display: flex;
justify-content: space-between;
align-items: center;
h3 {
flex: 1;
}
i {
cursor: pointer;
font-size: 20px;
opacity: 0.7;
&:hover {
opacity: 1;
}
}
}
.form-main {
padding: 10px 0;
.label-style {
background: #f2f2f2;
padding: 0 10px;
p {
display: flex;
align-items: center;
font-size: 12px;
}
}
}
.edit-btn {
display: flex;
align-items: center;
}
.see-box {
padding: 10px;
background: #f2f2f2;
h5 {
}
.see-item {
line-height: 60px;
text-align: center;
width: 100px;
height: 60px;
border-radius: 5px;
margin: auto;
border: 2px solid #333;
}
}
}
.el-card ::v-deep .el-card__header {
height: 60px;
}
</style>

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-09-07 16:04:53
* @LastEditTime: 2022-12-13 16:00:33
* @Description:
-->
<template>
@@ -20,7 +20,7 @@
border
style="width: 50%;"
>
<el-table-column prop="name"> </el-table-column>
<el-table-column prop="name" align="center"> </el-table-column>
<el-table-column
v-for="(item, index) in workingProcedure"
:key="item.id"
@@ -38,7 +38,7 @@
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="特性列表">
<el-tab-pane label="特性列表" align="center">
<el-table
:data="dataList"
:stripe="true"
@@ -57,14 +57,14 @@
width="50"
>
</el-table-column>
<el-table-column prop="code" label="编号"> </el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="type" label="特性类型">
<el-table-column prop="code" align="center" label="编号"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"></el-table-column>
<el-table-column prop="type" align="center" label="特性类型">
<template slot-scope="scope">
<span>{{ scope.row.type === 2 ? "计数" : "计量" }}</span>
</template>
</el-table-column>
<el-table-column prop="defectLevel" label="缺陷等级">
<el-table-column prop="defectLevel" align="center" label="缺陷等级">
<template slot-scope="scope">
<span>{{
scope.row.defectLevel === 1
@@ -75,24 +75,24 @@
}}</span>
</template>
</el-table-column>
<el-table-column prop="measureToolName" label="量具"></el-table-column>
<el-table-column prop="isSpc" label="SPC">
<el-table-column prop="measureToolName" align="center" label="量具"></el-table-column>
<el-table-column prop="isSpc" align="center" label="SPC">
<template slot-scope="scope">
<span>{{ scope.row.isSpc === 1 ? "是" : "否" }}</span>
</template>
</el-table-column>
<el-table-column prop="controlGraphName" label="分析图形"></el-table-column>
<el-table-column prop="sampleSize" label="样本大小"></el-table-column>
<el-table-column prop="samplingFrequency" label="抽样频率"></el-table-column>
<el-table-column prop="unitName" label="单位"></el-table-column>
<el-table-column prop="decimalPlaces" label="小数位数"></el-table-column>
<el-table-column prop="specifications" label="规格"></el-table-column>
<el-table-column prop="lsl" label="LSL"></el-table-column>
<el-table-column prop="sl" label="SL"></el-table-column>
<el-table-column prop="usl" label="USL"></el-table-column>
<el-table-column prop="targetCpk" label="目标CPK"></el-table-column>
<el-table-column prop="targetPpk" label="目标PPK"></el-table-column>
<el-table-column prop="remark" label="备注"></el-table-column>
<el-table-column prop="controlGraphName" align="center" label="分析图形"></el-table-column>
<el-table-column prop="sampleSize" align="center" label="样本大小"></el-table-column>
<el-table-column prop="samplingFrequency" align="center" label="抽样频率"></el-table-column>
<el-table-column prop="unitName" align="center" label="单位"></el-table-column>
<el-table-column prop="decimalPlaces" align="center" label="小数位数"></el-table-column>
<el-table-column prop="specifications" align="center" label="规格"></el-table-column>
<el-table-column prop="lsl" align="center" label="LSL"></el-table-column>
<el-table-column prop="sl" align="center" label="SL"></el-table-column>
<el-table-column prop="usl" align="center" label="USL"></el-table-column>
<el-table-column prop="targetCpk" align="center" label="目标CPK"></el-table-column>
<el-table-column prop="targetPpk" align="center" label="目标PPK"></el-table-column>
<el-table-column prop="remark" align="center" label="备注"></el-table-column>
<el-table-column
fixed="right"
header-align="center"
@@ -176,7 +176,7 @@ export default {
methods: {
init(index) {
this.dataListLoading = false;
this.inspectionStage = parseInt(index) + 1;
this.inspectionStage = parseInt(index);
this.productFeaturesList.splice(0, this.productFeaturesList.length);
this.$nextTick(() => {
this.getSelection();

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-09-07 16:06:00
* @LastEditTime: 2022-12-01 15:51:44
* @Description:
-->
<template>
@@ -19,14 +19,14 @@
>
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
</el-table-column>
<el-table-column prop="code" label="编号"> </el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="type" label="特性类型">
<el-table-column prop="code" align="center" label="编号"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"></el-table-column>
<el-table-column prop="type" align="center" label="特性类型">
<template slot-scope="scope">
<span>{{ scope.row.type === 2 ? "计数" : "计量" }}</span>
</template>
</el-table-column>
<el-table-column prop="defectLevel" label="缺陷等级">
<el-table-column prop="defectLevel" align="center" label="缺陷等级">
<template slot-scope="scope">
<span>{{
scope.row.defectLevel === 1
@@ -37,24 +37,24 @@
}}</span>
</template>
</el-table-column>
<el-table-column prop="measureToolName" label="量具"></el-table-column>
<el-table-column prop="isSpc" label="SPC">
<el-table-column prop="measureToolName" align="center" label="量具"></el-table-column>
<el-table-column prop="isSpc" align="center" label="SPC">
<template slot-scope="scope">
<span>{{ scope.row.isSpc === 1 ? "是" : "否" }}</span>
</template>
</el-table-column>
<el-table-column prop="controlGraphName" label="分析图形"></el-table-column>
<el-table-column prop="sampleSize" label="样本大小"></el-table-column>
<el-table-column prop="samplingFrequency" label="抽样频率"></el-table-column>
<el-table-column prop="unitName" label="单位"></el-table-column>
<el-table-column prop="decimalPlaces" label="小数位数"></el-table-column>
<el-table-column prop="specifications" label="规格"></el-table-column>
<el-table-column prop="lsl" label="LSL"></el-table-column>
<el-table-column prop="sl" label="SL"></el-table-column>
<el-table-column prop="usl" label="USL"></el-table-column>
<el-table-column prop="targetCpk" label="目标CPK"></el-table-column>
<el-table-column prop="targetPpk" label="目标PPK"></el-table-column>
<el-table-column prop="remark" label="备注"></el-table-column>
<el-table-column prop="controlGraphName" align="center" label="分析图形"></el-table-column>
<el-table-column prop="sampleSize" align="center" label="样本大小"></el-table-column>
<el-table-column prop="samplingFrequency" align="center" label="抽样频率"></el-table-column>
<el-table-column prop="unitName" align="center" label="单位"></el-table-column>
<el-table-column prop="decimalPlaces" align="center" label="小数位数"></el-table-column>
<el-table-column prop="specifications" align="center" label="规格"></el-table-column>
<el-table-column prop="lsl" align="center" label="LSL"></el-table-column>
<el-table-column prop="sl" align="center" label="SL"></el-table-column>
<el-table-column prop="usl" align="center" label="USL"></el-table-column>
<el-table-column prop="targetCpk" align="center" label="目标CPK"></el-table-column>
<el-table-column prop="targetPpk" align="center" label="目标PPK"></el-table-column>
<el-table-column prop="remark" align="center" label="备注"></el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="hisVisible = false">关闭</el-button>

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-09-05 15:25:52
* @LastEditTime: 2022-12-13 16:00:28
* @Description:
-->
<template>
@@ -87,12 +87,12 @@ export default {
return this.$message.error(res.msg);
}
this.workingProcedure = res.data;
this.$refs.fourContentRef[0].init(0);
this.$refs.fourContentRef[0].init(this.inspectionStageArr?.[0]);
})
.catch(() => {});
},
tabClick(val) {
this.$refs.fourContentRef[val.index].init(val.index);
this.$refs.fourContentRef[val.index].init(this.inspectionStageArr?.[val.index]);
},
// 表单提交
dataFormSubmit() {

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-08-29 16:49:43
* @LastEditTime: 2022-12-12 15:51:58
* @Description:
-->
<template>
@@ -33,6 +33,7 @@
<el-form-item label="特性类型" prop="type">
<el-select
v-model="threeDataForm.type"
@change="numIsblack"
:style="{ width: '100%' }"
filterable
placeholder="请选择特性类型"
@@ -50,6 +51,7 @@
<el-col :span="8">
<el-form-item label="缺陷等级" prop="defectLevel">
<el-select
:disabled="threeDataForm.type === 2"
v-model="threeDataForm.defectLevel"
:style="{ width: '100%' }"
filterable
@@ -68,6 +70,7 @@
<el-col :span="8">
<el-form-item label="量具" prop="measureToolId">
<el-select
:disabled="threeDataForm.type === 2"
v-model="threeDataForm.measureToolId"
placeholder="请选择单位"
clearable
@@ -85,6 +88,7 @@
<el-col :span="8">
<el-form-item label="单位" prop="unitId">
<el-select
:disabled="threeDataForm.type === 2"
v-model="threeDataForm.unitId"
placeholder="请选择单位"
clearable
@@ -101,22 +105,38 @@
</el-col>
<el-col :span="8">
<el-form-item label="规格" prop="specifications">
<el-input v-model="threeDataForm.specifications" placeholder="规格"></el-input>
<el-input
:disabled="threeDataForm.type === 2"
v-model="threeDataForm.specifications"
placeholder="规格"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="LSL" prop="lsl">
<el-input-number v-model="threeDataForm.lsl" placeholder="LSL"></el-input-number>
<el-input-number
:disabled="threeDataForm.type === 2"
v-model="threeDataForm.lsl"
placeholder="LSL"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="SL" prop="sl">
<el-input-number v-model="threeDataForm.sl" placeholder="SL"></el-input-number>
<el-input-number
:disabled="threeDataForm.type === 2"
v-model="threeDataForm.sl"
placeholder="SL"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="USL" prop="usl">
<el-input-number v-model="threeDataForm.usl" placeholder="USL"></el-input-number>
<el-input-number
:disabled="threeDataForm.type === 2"
v-model="threeDataForm.usl"
placeholder="USL"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
@@ -147,11 +167,11 @@ export default {
defectLevel: "",
measureToolId: "",
unitId: "",
specifications: '',
lsl: '',
sl: '',
usl: '',
remark: ''
specifications: "",
lsl: "",
sl: "",
usl: "",
remark: "",
},
typeArr: [
{
@@ -238,6 +258,17 @@ export default {
})
.catch(() => {});
},
numIsblack(val){
if(val===2){
this.threeDataForm.defectLevel= ""
this.threeDataForm.measureToolId= ""
this.threeDataForm.unitId= ""
this.threeDataForm.specifications= ""
this.threeDataForm.lsl= 0
this.threeDataForm.sl= 0
this.threeDataForm.usl= 0
}
},
// 表单提交
dataFormSubmit() {
this.$refs["threeDataForm"].validate((valid) => {

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-08-29 16:46:06
* @LastEditTime: 2022-12-01 15:52:10
* @Description:
-->
<template>
@@ -26,14 +26,14 @@
>
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
</el-table-column>
<el-table-column prop="code" label="编号"> </el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="type" label="特性类型">
<el-table-column prop="code" align="center" label="编号"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"></el-table-column>
<el-table-column prop="type" align="center" label="特性类型">
<template slot-scope="scope">
<span>{{ scope.row.type === 2 ? "计数" : "计量" }}</span>
</template>
</el-table-column>
<el-table-column prop="defectLevel" label="缺陷等级">
<el-table-column prop="defectLevel" align="center" label="缺陷等级">
<template slot-scope="scope">
<span>{{
scope.row.defectLevel === 1
@@ -44,13 +44,13 @@
}}</span>
</template>
</el-table-column>
<el-table-column prop="measureToolName" label="量具"></el-table-column>
<el-table-column prop="unitName" label="单位"></el-table-column>
<el-table-column prop="specifications" label="规格"></el-table-column>
<el-table-column prop="lsl" label="LSL"></el-table-column>
<el-table-column prop="sl" label="SL"></el-table-column>
<el-table-column prop="usl" label="USL"></el-table-column>
<el-table-column prop="remark" label="备注"></el-table-column>
<el-table-column prop="measureToolName" align="center" label="量具"></el-table-column>
<el-table-column prop="unitName" align="center" label="单位"></el-table-column>
<el-table-column prop="specifications" align="center" label="规格"></el-table-column>
<el-table-column prop="lsl" align="center" label="LSL"></el-table-column>
<el-table-column prop="sl" align="center" label="SL"></el-table-column>
<el-table-column prop="usl" align="center" label="USL"></el-table-column>
<el-table-column prop="remark" align="center" label="备注"></el-table-column>
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-09-07 15:25:36
* @LastEditTime: 2022-12-01 15:52:21
* @Description:
-->
<template>
@@ -35,8 +35,8 @@
>
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
</el-table-column>
<el-table-column prop="workingProcedureName" label="工序名称"> </el-table-column>
<el-table-column prop="workingProcedureCode" label="工序编码"> </el-table-column>
<el-table-column prop="workingProcedureName" align="center" label="工序名称"> </el-table-column>
<el-table-column prop="workingProcedureCode" align="center" label="工序编码"> </el-table-column>
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
<template slot-scope="scope">
<el-button

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-08-24 15:06:08
* @LastEditTime: 2022-12-01 15:52:40
* @Description:
-->
<template>
@@ -30,12 +30,12 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="num" label="小数位数"> </el-table-column>
<el-table-column prop="USL" label="USL"> </el-table-column>
<el-table-column prop="SL" label="SL"> </el-table-column>
<el-table-column prop="LSL" label="LSL"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column prop="num" align="center" label="小数位数"> </el-table-column>
<el-table-column prop="USL" align="center" label="USL"> </el-table-column>
<el-table-column prop="SL" align="center" label="SL"> </el-table-column>
<el-table-column prop="LSL" align="center" label="LSL"> </el-table-column>
<el-table-column
fixed="right"
header-align="center"

View File

@@ -7,20 +7,34 @@
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
<el-input size="small" v-model="dataForm.name" clearable placeholder="请输入名称查询" />
</el-form-item>
<el-form-item>
<el-input size="small" v-model="dataForm.code" clearable placeholder="请输入编码查询" />
</el-form-item>
<el-form-item>
<el-select
size="small"
v-model="dataForm.paramKey"
v-model="dataForm.type"
placeholder="请选择类型"
style="width:150px"
clearable
placeholder="请输入关键字查询"
/>
>
<el-option
v-for="(item, index) in typeArr"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('工厂管理')">
@@ -50,8 +64,8 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column
type="type"
header-align="center"
@@ -65,8 +79,8 @@
</template>
</el-table-column>
<!-- <el-table-column prop="supplier" label="供应商"> </el-table-column> -->
<el-table-column prop="address" label="联系地址"> </el-table-column>
<el-table-column prop="descs" label="描述"> </el-table-column>
<el-table-column prop="address" align="center" label="联系地址"> </el-table-column>
<el-table-column prop="descs" align="center" label="描述"> </el-table-column>
<el-table-column
type="status"
header-align="center"
@@ -158,6 +172,16 @@ export default {
statusUrl: '/basic/factory/status',
exportUrl: '/basic/factory/export'
},
typeArr: [
{
label: "内部工厂",
value: "1",
},
{
label: "供应商",
value: "2",
}
],
};
},
components: {

View File

@@ -1,36 +1,12 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<el-form
style="display: flex; align-items: center; justify-content: right;"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
size="small"
v-model="dataForm.paramKey"
clearable
placeholder="请输入关键字查询"
/>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('机台管理')">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-form>
<query-form
:page-name="'机台管理'"
:data-form="dataForm"
@getDataList="getDataList"
@addOrUpdateHandle="addOrUpdateHandle"
@exportHandle="exportHandle"
/>
<el-table
:data="dataList"
:stripe="true"
@@ -50,10 +26,10 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="platformName" label="站点"> </el-table-column>
<el-table-column prop="remark" label="描述"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column prop="platformName" align="center" label="站点"> </el-table-column>
<el-table-column prop="remark" align="center" label="描述"> </el-table-column>
<el-table-column
type="status"
header-align="center"
@@ -140,6 +116,7 @@
<script>
import AddOrUpdate from './components/machineManage-add'
import basicPage from '@/mixins/basic-page'
import queryForm from './query-form'
export default {
mixins: [basicPage],
data() {
@@ -154,6 +131,7 @@ export default {
},
components: {
AddOrUpdate,
queryForm,
},
methods: {
},

View File

@@ -1,36 +1,12 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<el-form
style="display: flex; align-items: center; justify-content: right;"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
size="small"
v-model="dataForm.paramKey"
clearable
placeholder="请输入关键字查询"
/>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('工序定义')">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-form>
<query-form
:page-name="'工序定义'"
:data-form="dataForm"
@getDataList="getDataList"
@addOrUpdateHandle="addOrUpdateHandle"
@exportHandle="exportHandle"
/>
<el-table
:data="dataList"
:stripe="true"
@@ -50,10 +26,10 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="workingProcedureTypeName" label="类型"> </el-table-column>
<el-table-column prop="machineName" label="机台">
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column prop="workingProcedureTypeName" align="center" label="类型"> </el-table-column>
<el-table-column prop="machineName" align="center" label="机台">
<template slot-scope="scope">
<span>{{ scope.row.machineName}}</span>
</template>
@@ -164,6 +140,7 @@
import AddOrUpdate from './components/processDefine-add'
import BindMachine from './components/processDefine-machine'
import basicPage from '@/mixins/basic-page'
import queryForm from './query-form'
export default {
mixins: [basicPage],
data() {
@@ -179,6 +156,7 @@ export default {
},
components: {
AddOrUpdate,
queryForm,
BindMachine
},
methods: {

View File

@@ -1,152 +1,781 @@
<!--
* @Author: zwq
* @Date: 2022-08-22 15:53:16
* @Date: 2022-09-01 15:42:34
* @LastEditors: zwq
* @LastEditTime: 2022-09-01 16:42:08
* @LastEditTime: 2022-09-13 11:34:30
* @Description:
-->
<template>
<el-card shadow="never" class="aui-card--fill">
<el-row :gutter="10">
<el-col :span="10">
<el-form
style="background-color:#e6f7ff;padding:10px 20px"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
<el-row :gutter="20">
<el-col :span="3">
<el-card>
<div
v-for="(item, index) in processArr"
:key="index"
class="btn"
:title="item.name"
@mousedown="startDrag(item, $event)"
>
<el-form-item>
<el-input v-model="dataForm.paramKey" clearable placeholder="请输入关键字查询" />
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
</el-form-item>
</el-form>
<el-table
:data="dataList"
height="650"
highlight-current-row
@current-change="handleCurrentChange"
:header-cell-style="{
background: '#eef1f6',
color: '#606266',
height: '56px',
}"
border
v-loading="dataListLoading"
style="width: 100%;"
>
<el-table-column
fixed="left"
type="index"
header-align="center"
align="center"
label="序号"
width="50"
{{ item.name }}
</div>
</el-card>
</el-col>
<el-col :span="21">
<div id="containerChart"></div>
<div v-if="editDrawer" class="edit-main">
<div class="edit-main-title">
<h3>{{ editTitle }}</h3>
<i class="el-icon-close" @click="closeEditForm"></i>
</div>
<div v-if="editTitle === '编辑节点'" class="form-main">
<el-form ref="nodeForm" :model="form" label-width="80px">
<el-form-item label="节点文本">
<el-input
v-model="form.labelText"
size="small"
@input="changeNode('labelText', form.labelText)"
></el-input>
</el-form-item>
<el-form-item label="字体大小">
<el-input
v-model="form.fontSize"
size="small"
@input="changeNode('fontSize', form.fontSize)"
></el-input>
</el-form-item>
<el-form-item label="字体颜色">
<el-color-picker
v-model="form.fontFill"
@change="changeNode('fontFill', form.fontFill)"
></el-color-picker>
</el-form-item>
<el-form-item label="节点背景">
<el-color-picker
v-model="form.fill"
@change="changeNode('fill', form.fill)"
></el-color-picker>
</el-form-item>
<el-form-item label="边框颜色">
<el-color-picker
v-model="form.stroke"
@change="changeNode('stroke', form.stroke)"
></el-color-picker>
</el-form-item>
<div class="see-box">
<h5>预览</h5>
<div
class="see-item"
:style="{
background: form.fill,
color: form.fontFill,
'border-color': form.stroke,
'font-size': form.fontSize + 'px',
}"
>
{{ form.labelText }}
</div>
</div>
</el-form>
</div>
<div v-if="editTitle === '编辑连线'" class="form-main">
<el-form ref="edgeForm" :model="form" label-width="80px">
<el-form-item label="标签内容">
<el-input
v-model="form.label"
size="small"
placeholder="标签文字,空则没有"
@input="
changeEdgeLabel(form.label, labelForm.fontColor, labelForm.fill, labelForm.stroke)
"
></el-input>
<div v-if="form.label" class="label-style">
<p>
字体颜色<el-color-picker
v-model="labelForm.fontColor"
size="mini"
@change="
changeEdgeLabel(
form.label,
labelForm.fontColor,
labelForm.fill,
labelForm.stroke
)
"
></el-color-picker>
</p>
<p>
背景颜色<el-color-picker
v-model="labelForm.fill"
size="mini"
@change="
changeEdgeLabel(
form.label,
labelForm.fontColor,
labelForm.fill,
labelForm.stroke
)
"
></el-color-picker>
</p>
<p>
描边颜色<el-color-picker
v-model="labelForm.stroke"
size="mini"
@change="
changeEdgeLabel(
form.label,
labelForm.fontColor,
labelForm.fill,
labelForm.stroke
)
"
></el-color-picker>
</p>
</div>
</el-form-item>
<el-form-item label="线条颜色">
<el-color-picker
v-model="form.stroke"
size="small"
@change="changeEdgeStroke"
></el-color-picker>
</el-form-item>
<el-form-item label="线条样式">
<el-select
v-model="form.connector"
size="small"
placeholder="请选择"
@change="changeEdgeConnector"
>
<el-option label="直角" value="normal"></el-option>
<el-option label="圆角" value="rounded"></el-option>
<el-option label="平滑" value="smooth"></el-option>
<el-option label="跳线(两线交叉)" value="jumpover"></el-option>
</el-select>
</el-form-item>
<el-form-item label="线条宽度">
<el-input-number
v-model="form.strokeWidth"
size="small"
@change="changeEdgeStrokeWidth"
:min="2"
:step="2"
:max="6"
label="线条宽度"
></el-input-number>
</el-form-item>
<el-form-item label="双向箭头">
<el-switch v-model="form.isArrows" @change="changeEdgeArrows"></el-switch>
</el-form-item>
<el-form-item label="流动线条">
<el-switch v-model="form.isAnit" @change="changeEdgeAnit"></el-switch>
</el-form-item>
<el-form-item label="调整线条">
<el-switch v-model="form.isTools" @change="changeEdgeTools"></el-switch>
</el-form-item>
</el-form>
</div>
<div class="edit-btn">
<el-button type="danger" @click="handlerDel" style="width:100%"
>删除此{{ editTitle === "编辑节点" ? "节点" : "连线" }}</el-button
>
</el-table-column>
<el-table-column prop="name" label="名称" fixed="left"> </el-table-column>
<el-table-column prop="code" label="编码" fixed="left"> </el-table-column>
</el-table>
</el-col>
<el-col :span="13" :offset="1">
<el-tabs @tab-click="tabClick">
<el-tab-pane label="图形模式">
<process-flow-graph
v-show="graphVisible"
ref="graphRef"
:product-id="productId"
@refreshDataList="getDataList"
></process-flow-graph>
</el-tab-pane>
<el-tab-pane label="表格模式">
<two-step v-show="twoStepVisible" ref="twoStepRef" :product-id="productId"></two-step>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</el-card>
</div>
</div>
</el-col>
</el-row>
</template>
<script>
import processFlowGraph from "./components/processFlow-graph";
import twoStep from "./components/productList-two";
import { Graph, Shape, FunctionExt } from "@antv/x6";
import { startDragToGraph, ports, configEdgeLabel } from "../spc-basic/components/flowMethods.js";
export default {
props: {
productId: {
type: String,
},
},
data() {
return {
dataListLoading: false,
dataList: [],
flowDataList: [],
graphVisible: true,
twoStepVisible: false,
dataForm: {
paramKey: "",
processArr: [],
processId: "",
graph: "",
type: "grid",
selectCell: "",
editDrawer: false,
editTitle: "",
form: {},
labelForm: {
fontColor: "#333",
fill: "#FFF",
stroke: "#555",
},
connectEdgeType: {
//连线方式
connector: "normal",
router: {
name: "",
},
},
grid: {
// 网格设置
size: 20, // 网格大小 10px
visible: true, // 渲染网格背景
type: "mesh",
args: {
color: "#D0D0D0",
thickness: 1, // 网格线宽度/网格点大小
factor: 10,
},
},
productId: "",
paneName: "图形模式",
};
},
components: {
processFlowGraph,
twoStep,
activated() {
this.init();
},
created() {
this.getDataList();
this.productId = ''
watch: {
value: {
handler: function() {
if (this.graph) {
this.selectCell = "";
this.editDrawer = false;
this.graph.dispose();
this.init();
}
},
deep: true,
immediate: true,
},
},
methods: {
getDataList() {
this.dataListLoading = true;
init() {
this.getArr();
this.$nextTick(() => {
this.processId = "";
if (this.productId) {
this.getList();
} else {
this.dataList = [];
}
});
this.graph = new Graph({
container: document.getElementById("containerChart"),
height: 600,
selecting: true,
background: {
color: "#fffbe6", // 设置画布背景颜色
},
snapline: {
enabled: true,
sharp: true,
},
// scroller: {
// enabled: true,
// pageVisible: false,
// pageBreak: false,
// pannable: true,
// },
mousewheel: {
enabled: true,
modifiers: ["ctrl", "meta"],
},
grid: this.grid,
connecting: {
// 节点连接
anchor: "center",
connectionPoint: "anchor",
allowBlank: false,
snap: true,
},
createEdge() {
return new Shape.Edge({
attrs: {
line: {
stroke: "#1890ff",
strokeWidth: 1,
targetMarker: {
name: "classic",
size: 8,
},
strokeDasharray: 0, //虚线
style: {
animation: "ant-line 30s infinite linear",
},
},
},
label: {
text: "",
},
connector: _that.connectEdgeType.connector,
router: {
name: _that.connectEdgeType.router.name || "",
},
zIndex: 0,
});
},
});
// 鼠标移入移出节点
this.graph.on(
"node:mouseenter",
FunctionExt.debounce(() => {
const container = document.getElementById("containerChart");
const ports = container.querySelectorAll(".x6-port-body");
this.showPorts(ports, true);
}),
500
);
this.graph.on("node:mouseleave", (e) => {
const container = document.getElementById("containerChart");
const ports = container.querySelectorAll(".x6-port-body");
this.showPorts(ports, false);
});
//获取放置到画布上节点的位置
this.graph.on("node:added", ({ node }) => {
const { x, y } = node.position();
this.addProcess(node.attrs.label.workingProcedureId, x, y);
});
//这是鼠标抬起节点事件
this.graph.on("node:mouseup", ({ node }) => {
const { x, y } = node.position();
this.updataNode(node.attrs.label.id, x, y);
});
// 点击编辑
this.graph.on('cell:click', ({ cell }) => {
this.editForm(cell)
})
},
showPorts(ports, show) {
for (let i = 0, len = ports.length; i < len; i = i + 1) {
ports[i].style.visibility = show ? "visible" : "hidden";
}
},
// 拖拽生成正方形或者圆形
startDrag(data, e) {
startDragToGraph(this.graph, data, e);
},
getArr() {
this.$http
.get("/basic/product/page", {
.get("/basic/workingProcedure/page", {
params: {
page: 1,
limit: 500,
code: this.dataForm.paramKey,
name: this.dataForm.paramKey,
},
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.processArr = res.data.list;
})
.catch(() => {});
},
getList() {
this.$http
.get(
`/basic/productWorkingprocedureRelation/getWorkingprocedureByProductId/${this.productId}`
)
.then(({ data: res }) => {
if (res.code !== 0) {
this.dataList = [];
return this.$message.error(res.msg);
}
this.dataList = res.data.list;
this.dataList = res.data;
this.setNode();
})
.catch(() => {
this.dataListLoading = false;
});
.catch(() => {});
},
tabClick(val) {
this.paneName = val.label;
if (val.label === "图形模式") {
this.twoStepVisible = false;
this.graphVisible = true;
this.$nextTick(() => {
this.$refs.graphRef.init();
});
} else {
this.graphVisible = false;
this.twoStepVisible = true;
this.$nextTick(() => {
this.$refs.twoStepRef.init();
});
}
},
handleCurrentChange(val) {
if (val) {
this.productId = val.id;
const obj = {
label: this.paneName,
setNode() {
let nodes = [];
this.dataList.forEach((item) => {
let obj = {};
obj.x = item.x;
obj.y = item.y;
obj.width = 100;
obj.height = 60;
obj.label= '圆角矩形',
obj.data= {
type: 'defaultYSquare'
},
obj.shape= 'rect',
obj.attrs = {
label: {
text: item.workingProcedureName,
id: item.id,
fill: "white",
fontSize: 14,
textWrap: {
width: -10,
height: -10,
ellipsis: true,
},
},
body: {
stroke: "#000000",
strokeWidth: 1,
fill: "#5bdeff",
},
};
this.tabClick(obj);
}
obj.ports = ports;
nodes.push(obj);
});
const data = {
nodes,
};
this.graph.fromJSON(data);
},
updataNode(id, x, y) {
const data = {
id: id,
x: x,
y: y,
};
this.$http
.put("/basic/productWorkingprocedureRelation", data)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.$message({
message: this.$t("prompt.success"),
type: "success",
duration: 500,
});
})
.catch(() => {});
},
addProcess(workingProcedureId, x, y) {
this.$http
.post("/basic/productWorkingprocedureRelation/save", {
workingProcedureId: workingProcedureId,
productId: this.productId,
x,
y,
})
.then(({ data: res }) => {
if (res.code !== 0) {
this.getList();
return this.$message.error(res.msg);
}
this.$message({
message: this.$t("prompt.success"),
type: "success",
duration: 500,
onClose: () => {
this.getList();
},
});
})
.catch(() => {});
},
//编辑节点和线
editForm(cell){
if(this.selectCell) this.selectCell.removeTools() // 删除修改线的工具
this.selectCell = cell
// 编辑node节点
console.log(cell.data)
if(cell.isNode() && cell.data.type && cell.data.type.includes('default')){
this.editTitle = '编辑节点'
const body = cell.attrs.body || cell.attrs.rect || cell.attrs.polygon || cell.attrs.circle
this.form = {
labelText: cell.attrs.label.text || '',
fontSize: cell.attrs.label.fontSize || 14,
fontFill: cell.attrs.label.fill || '',
fill: body.fill|| '',
stroke: body.stroke || ''
}
return this.editDrawer = true
}
// 编辑线
if(!cell.isNode() && cell.shape === 'edge'){
this.editTitle = '编辑连线'
this.form = {
label: (cell.labels && cell.labels[0]) ? cell.labels[0].attrs.labelText.text : '',
stroke: cell.attrs.line.stroke || '',
connector: 'rounded',
strokeWidth: cell.attrs.line.strokeWidth || '',
isArrows: cell.attrs.line.sourceMarker ? true : false,
isAnit: cell.attrs.line.strokeDasharray ? true : false,
isTools: false
}
// 看是否有label
const edgeCellLabel = cell.labels && cell.labels[0] && cell.labels[0].attrs || false
if(this.form.label && edgeCellLabel){
this.labelForm = {
fontColor: edgeCellLabel.labelText.fill || '#333',
fill: edgeCellLabel.labelBody.fill || '#fff',
stroke: edgeCellLabel.labelBody.stroke || '#555'
}
} else {
this.labelForm = { fontColor: '#333', fill: '#FFF', stroke: '#555' }
}
return this.editDrawer = true
}
},
closeEditForm(){
this.editDrawer = false
if(this.selectCell) this.selectCell.removeTools()
},
// 修改一般节点
changeNode(type, value){
switch (type) {
case 'labelText':
this.selectCell.attr('label/text', value)
break;
case 'fontSize':
this.selectCell.attr('label/fontSize', value)
break;
case 'fontFill':
this.selectCell.attr('label/fill', value)
break;
case 'fill':
this.selectCell.attr('body/fill', value)
break;
case 'stroke':
this.selectCell.attr('body/stroke', value)
break;
}
},
// 修改边label属性
changeEdgeLabel(label, fontColor, fill, stroke){
this.selectCell.setLabels([configEdgeLabel(label, fontColor, fill, stroke)])
if(!label) this.labelForm = { fontColor: '#333', fill: '#FFF', stroke: '#555' }
},
// 修改边的颜色
changeEdgeStroke(val){
this.selectCell.attr('line/stroke', val)
},
// 边的样式
changeEdgeConnector(val){
switch (val) {
case 'normal':
this.selectCell.setConnector(val)
break;
case 'smooth':
this.selectCell.setConnector(val)
break;
case 'rounded':
this.selectCell.setConnector(val, { radius: 20 })
break;
case 'jumpover':
this.selectCell.setConnector(val, { radius: 20 })
break;
}
},
// 边的宽度
changeEdgeStrokeWidth(val){
if(this.form.isArrows){
this.selectCell.attr({
line: {
strokeWidth: val,
sourceMarker: {
width: 12 * (val / 2) || 12,
height: 8 * (val / 2) || 8
},
targetMarker: {
width: 12 * (val / 2) || 12,
height: 8 * (val / 2) || 8
}
}
})
} else {
this.selectCell.attr({
line: {
strokeWidth: val,
targetMarker: {
width: 12 * (val / 2) || 12,
height: 8 * (val / 2) || 8
}
}
})
}
},
// 边的箭头
changeEdgeArrows(val){
if(val){
this.selectCell.attr({
line: {
sourceMarker: {
name: 'block',
width: 12 * (this.form.strokeWidth / 2) || 12,
height: 8 * (this.form.strokeWidth / 2) || 8
},
targetMarker: {
name: 'block',
width: 12 * (this.form.strokeWidth / 2) || 12,
height: 8 * (this.form.strokeWidth / 2) || 8
},
}
})
} else {
this.selectCell.attr({
line: {
sourceMarker: '',
targetMarker: {
name: 'block',
size: 10 * (this.form.strokeWidth / 2) || 10
},
}
})
}
},
// 边的添加蚂蚁线
changeEdgeAnit(val){
if(val){
this.selectCell.attr({
line: {
strokeDasharray: 5,
style: {
animation: 'ant-line 30s infinite linear',
}
}
})
} else {
this.selectCell.attr({
line: {
strokeDasharray: 0,
style: {
animation: '',
}
}
})
}
},
// 给线添加调节工具
changeEdgeTools(val){
if(val) this.selectCell.addTools(['vertices', 'segments'])
else this.selectCell.removeTools()
},
// 删除节点
handlerDel(){
this.$confirm(`此操作将永久删除此${this.editTitle === '编辑节点' ? '节点' : '连线'}, 是否继续?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const cells = this.graph.getSelectedCells()
if (cells.length) {
this.graph.removeCells(cells)
this.form = {}
this.editDrawer = false
this.$message({type: 'success',message: '删除成功!'})
}
}).catch(() => {})
},
// 删除
deleteHandle(id, name) {
this.$confirm(`确定对[名称=${name}]进行删除操作?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$http
.delete("/basic/productWorkingprocedureRelation", { data: [id] })
.then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.getList();
},
});
} else {
this.$message.error(data.msg);
}
});
})
.catch(() => {});
}, //清空画布
deleteAll() {
this.graph.clearCells();
},
//销毁画布
GraphDelete() {
this.graph.dispose();
},
},
beforeDestroy() {
this.graph.dispose();
},
};
</script>
<style lang="scss">
@keyframes ant-line {
to {
stroke-dashoffset: -1000
}
}
</style>
<style>
.btn {
background-color: #5bdeff;
text-align: center;
padding: 20px;
color: white;
cursor: move;
margin-bottom: 10px;
}
</style>
<style lang="scss" scoped="scoped">
.edit-main{
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 280px;
border-left: 1px solid #f2f2f2;
box-shadow: 0 -10px 10px rgba($color: #000000, $alpha: 0.3);
padding: 20px;
background: #fff;
box-sizing: border-box;
.edit-main-title{
display: flex;
justify-content: space-between;
align-items: center;
h3{
flex: 1;
}
i{
cursor: pointer;
font-size: 20px;
opacity: 0.7;
&:hover{
opacity: 1;
}
}
}
.form-main{
padding: 20px 0;
.label-style{
background: #f2f2f2;
padding: 0 10px;
p{
display: flex;
align-items: center;
font-size: 12px;
}
}
}
.edit-btn{
}
.see-box{
padding: 20px;
background: #f2f2f2;
h5{
padding-bottom: 10px;
}
.see-item{
padding: 10px 30px;
border: 2px solid #333;
text-align: center;
}
}
}
</style>

View File

@@ -1,36 +1,12 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<el-form
style="display: flex; align-items: center; justify-content: right;"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
size="small"
v-model="dataForm.paramKey"
clearable
placeholder="请输入关键字查询"
/>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('工序类型')">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-form>
<query-form
:page-name="'工序类型'"
:data-form="dataForm"
@getDataList="getDataList"
@addOrUpdateHandle="addOrUpdateHandle"
@exportHandle="exportHandle"
/>
<el-table
:data="dataList"
:stripe="true"
@@ -50,8 +26,8 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column
type="status"
header-align="center"
@@ -133,6 +109,7 @@
<script>
import AddOrUpdate from './components/processType-add'
import basicPage from '@/mixins/basic-page'
import queryForm from './query-form'
export default {
mixins: [basicPage],
data() {
@@ -147,6 +124,7 @@ export default {
},
components: {
AddOrUpdate,
queryForm,
},
methods: {
},

View File

@@ -7,20 +7,50 @@
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
<el-input size="small" v-model="dataForm.name" clearable placeholder="请输入名称查询" />
</el-form-item>
<el-form-item>
<el-input size="small" v-model="dataForm.code" clearable placeholder="请输入编码查询" />
</el-form-item>
<el-form-item>
<el-select
size="small"
v-model="dataForm.paramKey"
v-model="dataForm.product_type_id"
placeholder="请选择产品类型"
style="width:150px"
clearable
placeholder="请输入关键字查询"
/>
>
<el-option
v-for="(item, index) in productTypeArr"
:key="index"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select
size="small"
v-model="dataForm.inspection_stage"
placeholder="请选择检验阶段"
style="width:150px"
clearable
>
<el-option
v-for="(item, index) in inspectionStageOptions"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('产品列表')">
@@ -37,7 +67,7 @@
:header-cell-style="{
background: '#eef1f6',
color: '#606266',
height: '56px'
height: '56px',
}"
v-loading="dataListLoading"
style="width: 100%;"
@@ -51,33 +81,27 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称" fixed="left"> </el-table-column>
<el-table-column prop="code" label="编码" fixed="left"> </el-table-column>
<el-table-column prop="specifications" label="规格"> </el-table-column>
<el-table-column prop="drawing" label="图纸"> </el-table-column>
<el-table-column prop="productType" label="产品类型"> </el-table-column>
<el-table-column prop="descs" label="描述"> </el-table-column>
<el-table-column prop="remark" label="备注"> </el-table-column>
<el-table-column prop="inspectionStandard" label="检验标准"> </el-table-column>
<el-table-column prop="inspectionStage" label="检验阶段">
<el-table-column prop="name" align="center" label="名称" fixed="left"> </el-table-column>
<el-table-column prop="code" align="center" label="编码" fixed="left"> </el-table-column>
<el-table-column prop="specifications" align="center" label="规格"> </el-table-column>
<el-table-column prop="drawing" align="center" label="图纸"> </el-table-column>
<el-table-column prop="productType" align="center" label="产品类型"> </el-table-column>
<el-table-column prop="descs" align="center" label="描述"> </el-table-column>
<el-table-column prop="remark" align="center" label="备注"> </el-table-column>
<el-table-column prop="inspectionStandard" align="center" label="检验标准"> </el-table-column>
<el-table-column prop="inspectionStage" align="center" label="检验阶段">
<template slot-scope="scope">
<div style="pointer-events: none;">
<el-checkbox-group :value ="scope.row.inspectionStage.split(',')">
<el-checkbox label="1">进货检验</el-checkbox>
<el-checkbox label="2">过程检验</el-checkbox>
<el-checkbox label="3">成品检验</el-checkbox>
<el-checkbox label="4">出货检验</el-checkbox>
</el-checkbox-group>
<el-checkbox-group :value="scope.row.inspectionStage.split(',')">
<el-checkbox label="1">进货检验</el-checkbox>
<el-checkbox label="2">过程检验</el-checkbox>
<el-checkbox label="3">成品检验</el-checkbox>
<el-checkbox label="4">出货检验</el-checkbox>
</el-checkbox-group>
</div>
</template>
</el-table-column>
<el-table-column
type="status"
header-align="center"
align="center"
label="状态"
width="80"
>
<el-table-column type="status" header-align="center" align="center" label="状态" width="80">
<template slot-scope="scope">
<el-tag :type="scope.row.status === 0 ? 'danger' : 'success'">{{
scope.row.status === 0 ? "不可用" : "可用"
@@ -110,26 +134,11 @@
</el-button>
</template>
</el-table-column> -->
<el-table-column
fixed="right"
header-align="center"
align="center"
width="150"
label="操作"
>
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
<template slot-scope="scope">
<el-button
type="text"
size="small"
@click="addOrUpdateHandle(scope.row.id)"
>
<el-tooltip
class="item"
effect="dark"
content="修改"
placement="top"
>
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-编辑"></use></svg>
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">
<el-tooltip class="item" effect="dark" content="修改" placement="top">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-编辑"></use></svg>
</el-tooltip>
</el-button>
<el-popover placement="top" width="160" trigger="click" :ref="`popover-${scope.row.id}`">
@@ -181,24 +190,63 @@
</template>
<script>
import AddOrUpdate from './components/productList-add'
import basicPage from '@/mixins/basic-page'
import AddOrUpdate from "./components/productList-add";
import basicPage from "@/mixins/basic-page";
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: '/basic/product/page',
deleteURL: '/basic/product/delete',
statusUrl: '/basic/product/status',
exportUrl: '/basic/product/export'
getDataListURL: "/basic/product/page",
deleteURL: "/basic/product/delete",
statusUrl: "/basic/product/status",
exportUrl: "/basic/product/export",
},
productTypeArr: [],
inspectionStageOptions: [
{
label: "进货检验",
value: "1",
},
{
label: "过程检验",
value: "2",
},
{
label: "成品检验",
value: "3",
},
{
label: "出货检验",
value: "4",
},
],
};
},
components: {
AddOrUpdate,
},
created() {
this.getArr();
},
methods: {
getArr() {
this.$http
.get("/basic/productType/page", {
params: {
page: 1,
limit: 500,
},
})
.then(({ data: res }) => {
if (res.code !== 0) {
this.productTypeArr = [];
return this.$message.error(res.msg);
}
this.productTypeArr = res.data.list;
})
.catch(() => {});
},
},
};
</script>
</script>

View File

@@ -1,36 +1,12 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<el-form
style="display: flex; align-items: center; justify-content: right;"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
size="small"
v-model="dataForm.paramKey"
clearable
placeholder="请输入关键字查询"
/>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('产品类型')">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-form>
<query-form
:page-name="'产品类型'"
:data-form="dataForm"
@getDataList="getDataList"
@addOrUpdateHandle="addOrUpdateHandle"
@exportHandle="exportHandle"
/>
<el-table
:data="dataList"
:stripe="true"
@@ -44,9 +20,9 @@
>
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="descs" label="描述"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column prop="descs" align="center" label="描述"> </el-table-column>
<el-table-column type="status" header-align="center" align="center" label="状态" width="80">
<template slot-scope="scope">
<el-tag :type="scope.row.status === 0 ? 'danger' : 'success'">{{
@@ -112,6 +88,7 @@
<script>
import AddOrUpdate from "./components/productType-add";
import basicPage from '@/mixins/basic-page'
import queryForm from './query-form'
export default {
mixins: [basicPage],
data() {
@@ -126,6 +103,7 @@ export default {
},
components: {
AddOrUpdate,
queryForm,
},
methods: {
},

View File

@@ -0,0 +1,73 @@
<!--
* @Author: zwq
* @Date: 2022-09-15 10:44:29
* @LastEditors: zwq
* @LastEditTime: 2022-09-16 13:52:21
* @Description:
-->
<template>
<el-form
style="display: flex; align-items: center; justify-content: right;"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input size="small" v-model="dataForm.name" clearable placeholder="请输入名称查询" />
</el-form-item>
<el-form-item>
<el-input size="small" v-model="dataForm.code" clearable placeholder="请输入编码查询" />
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle()">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
props: {
pageName: {
type: String,
default: () => {
return "";
},
},
dataForm: {
type: Object,
default: () => {
return {};
},
},
},
data() {
return {
};
},
methods: {
getDataList() {
this.$emit("getDataList");
},
addOrUpdateHandle() {
this.$emit("addOrUpdateHandle");
},
exportHandle() {
this.$emit("exportHandle", this.pageName);
},
},
};
</script>
<style></style>

View File

@@ -1,36 +1,12 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<el-form
style="display: flex; align-items: center; justify-content: right;"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
size="small"
v-model="dataForm.paramKey"
clearable
placeholder="请输入关键字查询"
/>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('站点管理')">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-form>
<query-form
:page-name="'站点管理'"
:data-form="dataForm"
@getDataList="getDataList"
@addOrUpdateHandle="addOrUpdateHandle"
@exportHandle="exportHandle"
/>
<el-table
:data="dataList"
:stripe="true"
@@ -50,9 +26,9 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="platformGroup" label="站点分组"> </el-table-column>
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column prop="platformGroup" align="center" label="站点分组"> </el-table-column>
<el-table-column
type="status"
header-align="center"
@@ -139,6 +115,7 @@
<script>
import AddOrUpdate from './components/siteManage-add'
import basicPage from '@/mixins/basic-page'
import queryForm from './query-form'
export default {
mixins: [basicPage],
data() {
@@ -153,6 +130,7 @@ export default {
},
components: {
AddOrUpdate,
queryForm,
},
methods: {
},

View File

@@ -1,36 +1,12 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<el-form
style="display: flex; align-items: center; justify-content: right;"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
size="small"
v-model="dataForm.paramKey"
clearable
placeholder="请输入关键字查询"
/>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('量具管理')">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-form>
<query-form
:page-name="'量具管理'"
:data-form="dataForm"
@getDataList="getDataList"
@addOrUpdateHandle="addOrUpdateHandle"
@exportHandle="exportHandle"
/>
<el-table
:data="dataList"
:stripe="true"
@@ -50,9 +26,9 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="type" label="测量类型">
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column prop="type" align="center" label="测量类型">
<template slot-scope="scope">
<span>{{
scope.row.type === '2' ? "计数" : "计量"
@@ -167,6 +143,7 @@
import AddOrUpdate from './components/toolsType-add'
import Detail from './components/toolsType-detail'
import basicPage from '@/mixins/basic-page'
import queryForm from './query-form'
export default {
mixins: [basicPage],
data() {
@@ -182,6 +159,7 @@ export default {
},
components: {
AddOrUpdate,
queryForm,
Detail
},
methods: {

View File

@@ -1,36 +1,12 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<el-form
style="display: flex; align-items: center; justify-content: right;"
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
size="small"
v-model="dataForm.paramKey"
clearable
placeholder="请输入关键字查询"
/>
</el-form-item>
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
新增
</el-button>
<el-button size="small" type="primary" @click="exportHandle('计量单位管理')">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-form>
<query-form
:page-name="'计量单位'"
:data-form="dataForm"
@getDataList="getDataList"
@addOrUpdateHandle="addOrUpdateHandle"
@exportHandle="exportHandle"
/>
<el-table
:data="dataList"
:stripe="true"
@@ -50,9 +26,9 @@
width="50"
>
</el-table-column>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="code" label="编码"> </el-table-column>
<el-table-column prop="type" label="类型">
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
<el-table-column prop="type" align="center" label="类型">
<template slot-scope="scope">
<span>{{
scope.row.type === 2 ? "不可计数" : "可计数"
@@ -144,6 +120,7 @@
<script>
import AddOrUpdate from './components/unitList-add'
import queryForm from './query-form'
import basicPage from '@/mixins/basic-page'
export default {
mixins: [basicPage],
@@ -159,6 +136,7 @@ export default {
},
components: {
AddOrUpdate,
queryForm,
},
methods: {
},