This commit is contained in:
shijing 2026-07-23 16:40:07 +08:00
commit 9c302b215b
6 changed files with 68 additions and 13 deletions

View File

@ -1,3 +1,7 @@
## 3.1.2026072315
- fix: 问题修复
- 工艺路线表单残留问题根治:xtSelect外部清空值时同步清空显示文字(残留主因);画布/右侧新增弹框加key每次打开强制重建实例;route_form编辑时sort不再被count+1覆盖;无routeId不再全量拉辅料 [caoqianming]
## 3.1.2026072314 ## 3.1.2026072314
- fix: 问题修复 - fix: 问题修复

View File

@ -61,6 +61,8 @@
:default-viewport="{ zoom: 0.9 }" :default-viewport="{ zoom: 0.9 }"
:min-zoom="0.2" :min-zoom="0.2"
:max-zoom="2" :max-zoom="2"
:connection-radius="8"
:connect-on-click="false"
:nodes-draggable="true" :nodes-draggable="true"
:nodes-connectable="!readonly" :nodes-connectable="!readonly"
:elements-selectable="true" :elements-selectable="true"
@ -87,12 +89,14 @@
</div> </div>
</div> </div>
<!-- 复用现有单步表单新增/编辑一条 Route --> <!-- 复用现有单步表单新增/编辑一条 Routekey 随每次打开递增强制重建实例预填走 prop 在挂载时即确定 -->
<route-form <route-form
v-if="dialogVisible" v-if="dialogVisible"
:key="dialogSeq"
ref="routeForm" ref="routeForm"
:count="count" :count="count"
:routepack="routepack" :routepack="routepack"
:prefill="formPrefill"
@success="onFormSuccess" @success="onFormSuccess"
@closed="dialogVisible = false" @closed="dialogVisible = false"
></route-form> ></route-form>
@ -141,6 +145,8 @@ export default {
edges: [], edges: [],
count: 0, count: 0,
dialogVisible: false, dialogVisible: false,
dialogSeq: 0,
formPrefill: null,
// //
matType: "30", matType: "30",
matKeyword: "", matKeyword: "",
@ -151,6 +157,7 @@ export default {
// 线 // 线
connectSource: null, connectSource: null,
connectMade: false, connectMade: false,
connectStartPos: null,
// //
hasFitted: false, hasFitted: false,
}; };
@ -282,9 +289,12 @@ export default {
if (pid) routeNodeIds.add(pid); if (pid) routeNodeIds.add(pid);
this.seedNodes = this.seedNodes.filter((s) => !routeNodeIds.has(s.id)); this.seedNodes = this.seedNodes.filter((s) => !routeNodeIds.has(s.id));
const prevCount = this.nodes.length;
this.edges = edges; this.edges = edges;
this.nodes = layoutGraph(routeNodes.concat(this.seedNodes), edges); this.nodes = layoutGraph(routeNodes.concat(this.seedNodes), edges);
this.syncStore(); this.syncStore();
// dagre 线
if (this.hasFitted && this.nodes.length !== prevCount) this.doFit();
}, },
/** 把本地 nodes/edges 命令式同步到 Vue Flow store先节点后边避免边找不到端点 */ /** 把本地 nodes/edges 命令式同步到 Vue Flow store先节点后边避免边找不到端点 */
@ -374,11 +384,18 @@ export default {
onConnectStart(params) { onConnectStart(params) {
this.connectSource = (params && (params.nodeId || params.source)) || null; this.connectSource = (params && (params.nodeId || params.source)) || null;
this.connectMade = false; this.connectMade = false;
const oe = params && params.event;
this.connectStartPos = oe && oe.clientX != null ? { x: oe.clientX, y: oe.clientY } : null;
}, },
/** 连到已有节点:新建一条 Route预填输入/输出物料 */ /** 连到已有节点:新建一条 Route预填输入/输出物料 */
onConnect(conn) { onConnect(conn) {
this.connectMade = true; this.connectMade = true;
if (this.readonly) return; if (this.readonly) return;
//
if (!conn.target || conn.target === conn.source) {
this.openAddFrom(conn.source);
return;
}
const src = this.nodes.find((n) => n.id === conn.source); const src = this.nodes.find((n) => n.id === conn.source);
const tgt = this.nodes.find((n) => n.id === conn.target); const tgt = this.nodes.find((n) => n.id === conn.target);
// id Number() // id Number()
@ -390,16 +407,28 @@ export default {
}); });
}, },
/** 拉线到空白处:新建工序,输出物料留空由后端自动生成下一节点 */ /** 拉线到空白处:新建工序,输出物料留空由后端自动生成下一节点 */
onConnectEnd() { onConnectEnd(evt) {
const src = this.connectSource; const src = this.connectSource;
const made = this.connectMade; const made = this.connectMade;
const startPos = this.connectStartPos;
this.connectSource = null; this.connectSource = null;
this.connectMade = false; this.connectMade = false;
this.connectStartPos = null;
if (this.readonly || made || !src) return; if (this.readonly || made || !src) return;
const node = this.nodes.find((n) => n.id === src); // ()线
const oe = evt && evt.clientX != null ? evt : evt && evt.event;
if (startPos && oe && oe.clientX != null) {
const dist = Math.hypot(oe.clientX - startPos.x, oe.clientY - startPos.y);
if (dist < 8) return;
}
this.openAddFrom(src);
},
/** 以某节点为输入新建工序:只带输入物料,其余字段一律默认值 */
openAddFrom(srcId) {
const node = this.nodes.find((n) => n.id === srcId);
// id // id
this.openForm("add", { this.openForm("add", {
material_in: src, material_in: srcId,
material_in_name: node ? node.data.label : "", material_in_name: node ? node.data.label : "",
}); });
}, },
@ -477,12 +506,13 @@ export default {
this.openForm("add", null); this.openForm("add", null);
}, },
/** 打开单步表单prefill 为 null 表示纯新增 */ /** 打开单步表单prefill 为 null 表示纯新增。预填经 prop 传入,在表单挂载 open 时一次性应用 */
openForm(mode, prefill) { openForm(mode, prefill) {
this.dialogSeq += 1;
this.formPrefill = prefill || null;
this.dialogVisible = true; this.dialogVisible = true;
this.$nextTick(() => { this.$nextTick(() => {
const inst = this.$refs.routeForm.open(mode); this.$refs.routeForm.open(mode);
if (prefill) inst.setData(prefill);
}); });
}, },

View File

@ -123,8 +123,18 @@ onMounted(() => {
const init = () => { const init = () => {
if (props.label) { if (props.label) {
selectLabel.value = props.label; selectLabel.value = props.label;
} else { return;
if (props.multiple) { }
// (/)
const emptyVal =
props.modelValue == null ||
props.modelValue === "" ||
(Array.isArray(props.modelValue) && props.modelValue.length === 0);
if (emptyVal) {
selectLabel.value = "";
return;
}
if (props.multiple) {
if (isFixOptions.value) { if (isFixOptions.value) {
selectLabel.value = props.options selectLabel.value = props.options
.filter((item) => .filter((item) =>
@ -149,7 +159,6 @@ const init = () => {
selectLabel.value = props.obj[props.labelField]; selectLabel.value = props.obj[props.labelField];
} }
} }
}
} }
const isFixOptions = ref(false); const isFixOptions = ref(false);

View File

@ -6,7 +6,7 @@ const DEFAULT_CONFIG = {
DASHBOARD_URL: "/dashboard", DASHBOARD_URL: "/dashboard",
//版本号 //版本号
APP_VER: "3.1.2026072314", APP_VER: "3.1.2026072315",
//内核版本号 //内核版本号
CORE_VER: "1.6.9", CORE_VER: "1.6.9",

View File

@ -305,6 +305,8 @@ export default {
props: { props: {
count: { type: Number, default : 0 }, count: { type: Number, default : 0 },
routepack: { type: String, default: "" }, routepack: { type: String, default: "" },
// (线)setData
prefill: { type: Object, default: null },
}, },
emits: ["success", "closed"], emits: ["success", "closed"],
data() { data() {
@ -397,6 +399,11 @@ export default {
}, },
getroutemats(){ getroutemats(){
let that = this; let that = this;
// routeId(线)
if (!that.routeId) {
that.routemats = [];
return;
}
that.$API.mtm.routemat.list.req({ route: that.routeId,page: 0}).then((res) => { that.$API.mtm.routemat.list.req({ route: that.routeId,page: 0}).then((res) => {
that.routemats = res; that.routemats = res;
}); });
@ -498,9 +505,11 @@ export default {
let that = this; let that = this;
that.mode = mode; that.mode = mode;
that.resetForm(); that.resetForm();
if (that.prefill) that.setData(that.prefill);
that.visible = true; that.visible = true;
that.$nextTick(() => { that.$nextTick(() => {
if(that.count){ // setData sort
if(that.count && mode === "add"){
that.form.sort = that.count+1; that.form.sort = that.count+1;
} }
that.$refs.dialogForm && that.$refs.dialogForm.clearValidate(); that.$refs.dialogForm && that.$refs.dialogForm.clearValidate();

View File

@ -184,6 +184,7 @@
</el-container> </el-container>
<save-dialog <save-dialog
v-if="dialog.save" v-if="dialog.save"
:key="dialogSeq"
ref="saveDialog" ref="saveDialog"
:count = "count" :count = "count"
:routepack="routepack" :routepack="routepack"
@ -217,6 +218,7 @@ export default {
dialog: { dialog: {
save: false, save: false,
}, },
dialogSeq: 0,
fileList:[], fileList:[],
form: { form: {
name: "", name: "",
@ -341,13 +343,14 @@ export default {
table_add() { table_add() {
let that = this; let that = this;
that.count = this.$refs.tables.tableData.length; that.count = this.$refs.tables.tableData.length;
console.log("count",that.count); this.dialogSeq += 1;
this.dialog.save = true; this.dialog.save = true;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.saveDialog.open("add"); this.$refs.saveDialog.open("add");
}); });
}, },
table_edit(row) { table_edit(row) {
this.dialogSeq += 1;
this.dialog.save = true; this.dialog.save = true;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.saveDialog.open("edit").setData(row); this.$refs.saveDialog.open("edit").setData(row);