Compare commits
16 Commits
3.1.202607
...
master
| Author | SHA1 | Date |
|---|---|---|
|
|
ff2e9a49e0 | |
|
|
f3a92cb296 | |
|
|
9c302b215b | |
|
|
f8e3523568 | |
|
|
a378a39917 | |
|
|
494999eb11 | |
|
|
dbd93cb9b9 | |
|
|
205768fbc3 | |
|
|
ca5d96bd86 | |
|
|
1770b10d07 | |
|
|
ec59a0ac98 | |
|
|
d6d382e281 | |
|
|
37b5e3f468 | |
|
|
23313d5ced | |
|
|
070b41fd51 | |
|
|
d3502b4456 |
11
changelog.md
11
changelog.md
|
|
@ -1,3 +1,14 @@
|
||||||
|
## 3.1.2026072315
|
||||||
|
|
||||||
|
- fix: 问题修复
|
||||||
|
- 工艺路线表单残留问题根治:xtSelect外部清空值时同步清空显示文字(残留主因);画布/右侧新增弹框加key每次打开强制重建实例;route_form编辑时sort不再被count+1覆盖;无routeId不再全量拉辅料 [caoqianming]
|
||||||
|
## 3.1.2026072314
|
||||||
|
|
||||||
|
- fix: 问题修复
|
||||||
|
- 弹框表单残留上次内容问题一批:route_form open时主动resetForm不再依赖父级v-if销毁(关闭动画期间重开复用实例致残留);riskpoint新增未重置saveForm且RiskForm常驻挂载补destroy-on-close;algo页弹框v-model改v-if与algo2对齐;mroom/plat_record新增未重置表单 [caoqianming]
|
||||||
|
- 工作流配置四页(字段/工作流/流转/状态)新增弹框未重置表单,先编辑再新增会残留上一条内容;默认值提为defaultForm常量供data与新增共用 [caoqianming]
|
||||||
|
- 禅道458 [shijing]
|
||||||
|
- 陶瓷日志中设备为可选 [shijing]
|
||||||
## 3.1.2026072309
|
## 3.1.2026072309
|
||||||
|
|
||||||
- feat: 新增功能
|
- feat: 新增功能
|
||||||
|
|
|
||||||
|
|
@ -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 -->
|
<!-- 复用现有单步表单:新增/编辑一条 Route;key 随每次打开递增强制重建实例,预填走 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);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,17 @@ onMounted(() => {
|
||||||
const init = () => {
|
const init = () => {
|
||||||
if (props.label) {
|
if (props.label) {
|
||||||
selectLabel.value = props.label;
|
selectLabel.value = props.label;
|
||||||
} else {
|
return;
|
||||||
|
}
|
||||||
|
// 外部把值清空(表单重置/实例复用)时同步清空显示文字,否则输入框会残留上次选择的内容
|
||||||
|
const emptyVal =
|
||||||
|
props.modelValue == null ||
|
||||||
|
props.modelValue === "" ||
|
||||||
|
(Array.isArray(props.modelValue) && props.modelValue.length === 0);
|
||||||
|
if (emptyVal) {
|
||||||
|
selectLabel.value = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (props.multiple) {
|
if (props.multiple) {
|
||||||
if (isFixOptions.value) {
|
if (isFixOptions.value) {
|
||||||
selectLabel.value = props.options
|
selectLabel.value = props.options
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ const DEFAULT_CONFIG = {
|
||||||
DASHBOARD_URL: "/dashboard",
|
DASHBOARD_URL: "/dashboard",
|
||||||
|
|
||||||
//版本号
|
//版本号
|
||||||
APP_VER: "3.1.2026072309",
|
APP_VER: "3.1.2026072315",
|
||||||
|
|
||||||
//内核版本号
|
//内核版本号
|
||||||
CORE_VER: "1.6.9",
|
CORE_VER: "1.6.9",
|
||||||
|
|
|
||||||
|
|
@ -356,7 +356,7 @@
|
||||||
<el-dialog v-model="choseMyScheduleDialog" title="选择策略">
|
<el-dialog v-model="choseMyScheduleDialog" title="选择策略">
|
||||||
<MySchedule @scheduleChose="scheduleChose"></MySchedule>
|
<MySchedule @scheduleChose="scheduleChose"></MySchedule>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog v-model="riskDialog" title="新增/编辑" width="90%">
|
<el-dialog v-model="riskDialog" title="新增/编辑" width="90%" destroy-on-close>
|
||||||
<RiskForm ref="riskForm" :riskpoint="rowData.id" @riskConfirm="riskConfirm"></RiskForm>
|
<RiskForm ref="riskForm" :riskpoint="rowData.id" @riskConfirm="riskConfirm"></RiskForm>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</el-container>
|
</el-container>
|
||||||
|
|
@ -444,6 +444,7 @@ export default {
|
||||||
this.$refs.table.queryData(this.query);
|
this.$refs.table.queryData(this.query);
|
||||||
},
|
},
|
||||||
table_add() {
|
table_add() {
|
||||||
|
this.saveForm = Object.assign({}, defaultForm);
|
||||||
this.saveDialog = true;
|
this.saveDialog = true;
|
||||||
},
|
},
|
||||||
table_edit(row) {
|
table_edit(row) {
|
||||||
|
|
|
||||||
|
|
@ -128,13 +128,13 @@
|
||||||
</el-container>
|
</el-container>
|
||||||
</el-container>
|
</el-container>
|
||||||
<save-dialog
|
<save-dialog
|
||||||
v-model="dialog.save"
|
v-if="dialog.save"
|
||||||
ref="saveDialog"
|
ref="saveDialog"
|
||||||
@success="handleSaveSuccessss"
|
@success="handleSaveSuccessss"
|
||||||
@closed="dialog.save = false"
|
@closed="dialog.save = false"
|
||||||
></save-dialog>
|
></save-dialog>
|
||||||
<algo-dialog
|
<algo-dialog
|
||||||
v-model="dialog.algos"
|
v-if="dialog.algos"
|
||||||
ref="algoDialog"
|
ref="algoDialog"
|
||||||
@success="handleSaveSuccessss"
|
@success="handleSaveSuccessss"
|
||||||
@closed="dialog.algos = false"
|
@closed="dialog.algos = false"
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
@ -467,15 +474,45 @@ export default {
|
||||||
that.paramsJsonFileurl = list1;
|
that.paramsJsonFileurl = list1;
|
||||||
that.params_json.fileurl = JSON.stringify(that.paramsJsonFileurl);
|
that.params_json.fileurl = JSON.stringify(that.paramsJsonFileurl);
|
||||||
},
|
},
|
||||||
|
//重置表单状态:open时主动清空,不依赖父级v-if销毁组件(关闭动画期间重开会复用实例导致残留上次内容)
|
||||||
|
resetForm() {
|
||||||
|
this.form = Object.assign({}, defaultForm);
|
||||||
|
this.form.routepack = this.routepack;
|
||||||
|
if (this.project_code == "bxerp" || this.project_code == "tcerp") {
|
||||||
|
this.form.material_out_tracking = 20;
|
||||||
|
}
|
||||||
|
this.params_json = {
|
||||||
|
duibian1: 0,
|
||||||
|
duibian2: 0,
|
||||||
|
changdu1: 0,
|
||||||
|
changdu2: 0,
|
||||||
|
pbnum: 0,
|
||||||
|
pbsigao: 0,
|
||||||
|
pbbb: "是",
|
||||||
|
};
|
||||||
|
this.params_json2 = { dscd: 0, sijing: 0 };
|
||||||
|
this.fileIds = [];
|
||||||
|
this.fileurl = [];
|
||||||
|
this.fileurl_form = [];
|
||||||
|
this.paramsJsonFileurl = [];
|
||||||
|
this.routemats = [];
|
||||||
|
this.routeId = "";
|
||||||
|
this.processName = "";
|
||||||
|
this.divDisable = false;
|
||||||
|
},
|
||||||
//显示
|
//显示
|
||||||
open(mode = "add") {
|
open(mode = "add") {
|
||||||
let that = this;
|
let that = this;
|
||||||
that.mode = mode;
|
that.mode = mode;
|
||||||
|
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();
|
||||||
})
|
})
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,11 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
const defaultForm = {
|
||||||
|
name: "",
|
||||||
|
location: "",
|
||||||
|
capacity: "",
|
||||||
|
};
|
||||||
export default {
|
export default {
|
||||||
name: "mroom",
|
name: "mroom",
|
||||||
data() {
|
data() {
|
||||||
|
|
@ -114,11 +119,7 @@ export default {
|
||||||
edit: "编辑",
|
edit: "编辑",
|
||||||
show: "查看",
|
show: "查看",
|
||||||
},
|
},
|
||||||
addForm: {
|
addForm: Object.assign({}, defaultForm),
|
||||||
name: "",
|
|
||||||
location: "",
|
|
||||||
capacity: "",
|
|
||||||
},
|
|
||||||
rules: {
|
rules: {
|
||||||
name: [{ required: true, message: "请输入会议室名称", trigger: "blur" }],
|
name: [{ required: true, message: "请输入会议室名称", trigger: "blur" }],
|
||||||
location: [{ required: true, message: "请输入地点", trigger: "blur" }],
|
location: [{ required: true, message: "请输入地点", trigger: "blur" }],
|
||||||
|
|
@ -127,9 +128,10 @@ export default {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
//添加工作流
|
//添加会议室
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.type = "add";
|
this.type = "add";
|
||||||
|
this.addForm = Object.assign({}, defaultForm);
|
||||||
this.limitedVisible = true;
|
this.limitedVisible = true;
|
||||||
},
|
},
|
||||||
handleCancel() {
|
handleCancel() {
|
||||||
|
|
|
||||||
|
|
@ -245,6 +245,7 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.type = "add";
|
this.type = "add";
|
||||||
|
this.addForm = {};
|
||||||
this.limitedVisible = true;
|
this.limitedVisible = true;
|
||||||
},
|
},
|
||||||
handleCancel() {
|
handleCancel() {
|
||||||
|
|
|
||||||
|
|
@ -107,13 +107,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="总数">
|
<el-table-column label="总数">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span v-if="scope.row.总切片数" @click="handleClick(scope.row)" style="color:#0052d9;">{{ scope.row.总切片数 }}</span>
|
<span @click="handleClick(scope.row)" style="color:#0052d9;">{{ scope.row.总切片数 }}</span>
|
||||||
<span v-else @click="handleClick(scope.row)" style="color:#0052d9;">{{ scope.row.总生产数 }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="合格率" prop="合格率">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{((scope.row.总切片合格数/scope.row.总切片数)*100).toFixed(2) }}%</span>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</scTable>
|
</scTable>
|
||||||
|
|
@ -137,11 +131,8 @@
|
||||||
<el-table-column label="物料名" prop="物料名" :filters="nameFilters" :filter-method="filterName" filter-placement="bottom-end">
|
<el-table-column label="物料名" prop="物料名" :filters="nameFilters" :filter-method="filterName" filter-placement="bottom-end">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="总数" prop="总切片数">
|
<el-table-column label="总数" prop="总切片数">
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="合格率" prop="合格率">
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span v-if="scope.row.总切片数>0">{{((scope.row.总切片合格数/scope.row.总切片数)*100).toFixed(2) }}%</span>
|
<span @click="handleClick(scope.row)" style="color:#0052d9;">{{ scope.row.总切片数 }}</span>
|
||||||
<span v-else>0%</span>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</scTable>
|
</scTable>
|
||||||
|
|
@ -149,13 +140,86 @@
|
||||||
</el-container>
|
</el-container>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
|
<el-drawer
|
||||||
|
v-model="boardVisible"
|
||||||
|
:title="boardTitle"
|
||||||
|
size="80%"
|
||||||
|
direction="rtl"
|
||||||
|
append-to-body
|
||||||
|
destroy-on-close
|
||||||
|
>
|
||||||
|
<div class="board-drawer-body">
|
||||||
|
<div class="board-drawer-table">
|
||||||
|
<el-table :data="boardList" border stripe height="100%" style="width: 100%;">
|
||||||
|
<el-table-column type="index" label="序号" width="60" />
|
||||||
|
<el-table-column label="板段号" prop="板段号" />
|
||||||
|
<el-table-column label="像位移" prop="像位移" />
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<div class="board-drawer-chart">
|
||||||
|
<div class="board-chart-scroll">
|
||||||
|
<scEcharts
|
||||||
|
:option="chartOption"
|
||||||
|
:style="{ width: chartWidth + 'px', height: '100%' }"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-drawer>
|
||||||
</el-main>
|
</el-main>
|
||||||
</el-container>
|
</el-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import scEcharts from "@/components/scEcharts";
|
||||||
export default {
|
export default {
|
||||||
name: "workerTimes",
|
name: "workerTimes",
|
||||||
|
components: { scEcharts },
|
||||||
|
computed: {
|
||||||
|
chartWidth() {
|
||||||
|
const perPoint = 22;
|
||||||
|
const minWidth = 600;
|
||||||
|
return Math.max(minWidth, (this.boardList.length || 1) * perPoint);
|
||||||
|
},
|
||||||
|
chartOption() {
|
||||||
|
const xs = this.boardList.map(i => i.板段号);
|
||||||
|
const ys = this.boardList.map(i => (i.像位移 == null ? null : Number(i.像位移)));
|
||||||
|
return {
|
||||||
|
tooltip: { trigger: 'axis' },
|
||||||
|
grid: { left: 50, right: 20, top: 30, bottom: 100 },
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
data: xs,
|
||||||
|
axisLabel: { rotate: 85, interval: 0, fontSize: 11 }
|
||||||
|
},
|
||||||
|
yAxis: { type: 'value', name: '像位移' },
|
||||||
|
series: [{
|
||||||
|
name: '像位移',
|
||||||
|
type: 'line',
|
||||||
|
data: ys,
|
||||||
|
connectNulls: false,
|
||||||
|
symbol: 'circle',
|
||||||
|
symbolSize: 6,
|
||||||
|
markLine: {
|
||||||
|
symbol: 'none',
|
||||||
|
silent: true,
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
yAxis: 100,
|
||||||
|
lineStyle: { color: '#f5a623', width: 1.5, type: 'dashed' },
|
||||||
|
label: { formatter: '标准 100', position: 'insideEndTop', color: '#f5a623' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
yAxis: 200,
|
||||||
|
lineStyle: { color: '#f5222d', width: 1.5, type: 'dashed' },
|
||||||
|
label: { formatter: '标准 200', position: 'insideEndTop', color: '#f5222d' }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
query:{
|
query:{
|
||||||
|
|
@ -175,6 +239,9 @@ export default {
|
||||||
filterNames:[],
|
filterNames:[],
|
||||||
visible:false,
|
visible:false,
|
||||||
userName:'',
|
userName:'',
|
||||||
|
boardVisible:false,
|
||||||
|
boardTitle:'',
|
||||||
|
boardList:[],
|
||||||
code:'lineDay_p',
|
code:'lineDay_p',
|
||||||
activeName:'shengchan',
|
activeName:'shengchan',
|
||||||
apiObj: this.$API.system.user.list,
|
apiObj: this.$API.system.user.list,
|
||||||
|
|
@ -310,6 +377,16 @@ export default {
|
||||||
deptChange(){
|
deptChange(){
|
||||||
this.getData();
|
this.getData();
|
||||||
},
|
},
|
||||||
|
handleClick(row){
|
||||||
|
let that = this;
|
||||||
|
let detail = row.板段明细;
|
||||||
|
if(typeof detail === 'string'){
|
||||||
|
try{ detail = JSON.parse(detail); }catch(e){ detail = []; }
|
||||||
|
}
|
||||||
|
that.boardList = Array.isArray(detail) ? detail : [];
|
||||||
|
that.boardTitle = (row.工装编号 || row.开台人员姓名 || '') + ' 板段列表';
|
||||||
|
that.boardVisible = true;
|
||||||
|
},
|
||||||
handleQuery(){
|
handleQuery(){
|
||||||
let that = this;
|
let that = this;
|
||||||
that.getData();
|
that.getData();
|
||||||
|
|
@ -319,4 +396,26 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.board-drawer-body {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
.board-drawer-table {
|
||||||
|
flex: 0 0 60%;
|
||||||
|
min-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.board-drawer-chart {
|
||||||
|
flex: 0 0 40%;
|
||||||
|
min-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.board-chart-scroll {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow-x: auto;
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
<!--
|
||||||
|
物料仓库合格库存统计
|
||||||
|
数据来源: BI 数据集 code=materialCount2 (POST api/bi/dataset/{code}/exec)
|
||||||
|
抽自 factory_web/src/views/inm/good.vue 的"物料仓库合格库存统计"抽屉内容
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<el-container v-loading="loading">
|
||||||
|
<el-header style="display: flex; align-items: center;">
|
||||||
|
<span style="font-weight: 600;">物料仓库合格库存统计</span>
|
||||||
|
<el-text style="margin-left: 16px;">仓库总数:{{ totalCount }}</el-text>
|
||||||
|
<el-button type="primary" icon="el-icon-refresh" @click="getProductCount" :loading="loading" style="margin-left: auto;">刷新</el-button>
|
||||||
|
</el-header>
|
||||||
|
<el-container>
|
||||||
|
<el-header style="height: 40%;">
|
||||||
|
<scTable :data="tableData" hideDo hidePagination row-key="material_name" style="width: 100%;">
|
||||||
|
<el-table-column label="物料名" prop="material_name"></el-table-column>
|
||||||
|
<el-table-column label="数量" prop="count"></el-table-column>
|
||||||
|
</scTable>
|
||||||
|
</el-header>
|
||||||
|
<el-main>
|
||||||
|
<scEcharts :option="echartsOptions" height="100%"></scEcharts>
|
||||||
|
</el-main>
|
||||||
|
</el-container>
|
||||||
|
</el-container>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import scEcharts from "@/components/scEcharts/index.vue";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "goodStatistic",
|
||||||
|
components: { scEcharts },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
tableData: [],
|
||||||
|
totalCount: 0,
|
||||||
|
echartsOptions: {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getProductCount();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getProductCount() {
|
||||||
|
let that = this;
|
||||||
|
let query = {
|
||||||
|
material_types: "10",
|
||||||
|
select_material: "material.name as material_name",
|
||||||
|
groupby_material: "material.name",
|
||||||
|
};
|
||||||
|
that.loading = true;
|
||||||
|
that.$API.bi.dataset.exec
|
||||||
|
.req("materialCount2", { query: query })
|
||||||
|
.then((res) => {
|
||||||
|
let data = (that.tableData = res.data2.ds0 || []);
|
||||||
|
let totalCount = 0;
|
||||||
|
data.forEach((item) => {
|
||||||
|
totalCount += Number(item.count) || 0;
|
||||||
|
});
|
||||||
|
that.totalCount = totalCount;
|
||||||
|
if (res.echart_options) {
|
||||||
|
that.echartsOptions = JSON.parse(res.echart_options);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
that.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!--
|
<!--
|
||||||
物料保障车间-仓库数量汇总表
|
物料保障车间-仓库数量汇总表
|
||||||
数据来源: BI 数据集 code=wh_material_summary (POST api/bi/dataset/{code}/exec)
|
数据来源: BI 数据集 code=wh_material_summary (POST api/bi/dataset/{code}/exec)
|
||||||
返回 res.data2.ds0~ds3, 分组维度为 material.model(型号)
|
返回 res.data2.ds0~ds4, 分组维度为 material.model(型号)
|
||||||
菜单/路由由后端下发, component 填 statistics/material_wh_summary
|
菜单/路由由后端下发, component 填 statistics/material_wh_summary
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -25,15 +25,13 @@
|
||||||
|
|
||||||
<el-main id="elMain" v-loading="loading">
|
<el-main id="elMain" v-loading="loading">
|
||||||
<!-- KPI 概览 -->
|
<!-- KPI 概览 -->
|
||||||
<el-row :gutter="15" style="margin-bottom: 15px;">
|
<div class="kpi-grid">
|
||||||
<el-col :md="6" :sm="12" v-for="k in kpiList" :key="k.label">
|
<el-card v-for="k in kpiList" :key="k.label" shadow="hover" class="kpi-card" :style="{ borderLeft: '4px solid ' + k.color }">
|
||||||
<el-card shadow="hover" class="kpi-card" :style="{ borderLeft: '4px solid ' + k.color }">
|
|
||||||
<div class="kpi-label">{{ k.label }} · 现有库存合计</div>
|
<div class="kpi-label">{{ k.label }} · 现有库存合计</div>
|
||||||
<div class="kpi-value" :style="{ color: k.color }">{{ fmtNum(k.total) }}</div>
|
<div class="kpi-value" :style="{ color: k.color }">{{ fmtNum(k.total) }}</div>
|
||||||
<div class="kpi-sub">覆盖 {{ k.count }} 个型号</div>
|
<div class="kpi-sub">覆盖 {{ k.count }} 个型号</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</div>
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<!-- 库存量对比图 -->
|
<!-- 库存量对比图 -->
|
||||||
<el-card shadow="never" style="margin-bottom: 15px;">
|
<el-card shadow="never" style="margin-bottom: 15px;">
|
||||||
|
|
@ -103,6 +101,18 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
|
<el-col :lg="12">
|
||||||
|
<el-card shadow="never" class="rpt-card">
|
||||||
|
<template #header><b>半成品库周数据</b><span class="hd-tip">(入库=采购入库+生产入库 / 出库=生产领料)</span></template>
|
||||||
|
<el-table :data="ds4" border stripe size="small" show-summary :summary-method="sumRow">
|
||||||
|
<el-table-column label="型号" prop="型号" width="110" />
|
||||||
|
<el-table-column label="入库数据" prop="入库数据" align="right" :formatter="numCell" />
|
||||||
|
<el-table-column label="出库数据" prop="出库数据" align="right" :formatter="numCell" />
|
||||||
|
<el-table-column label="现有库存" prop="现有库存" align="right" :formatter="numCell" />
|
||||||
|
</el-table>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- 设置安全库存上下限 -->
|
<!-- 设置安全库存上下限 -->
|
||||||
|
|
@ -136,6 +146,7 @@ import scEcharts from "@/components/scEcharts/index.vue";
|
||||||
const BLOCKS = [
|
const BLOCKS = [
|
||||||
{ key: "原料", color: "#409EFF" },
|
{ key: "原料", color: "#409EFF" },
|
||||||
{ key: "成品", color: "#67C23A" },
|
{ key: "成品", color: "#67C23A" },
|
||||||
|
{ key: "半成品", color: "#B37FEB" },
|
||||||
{ key: "白玻", color: "#E6A23C" },
|
{ key: "白玻", color: "#E6A23C" },
|
||||||
{ key: "黑玻", color: "#909399" },
|
{ key: "黑玻", color: "#909399" },
|
||||||
];
|
];
|
||||||
|
|
@ -151,6 +162,7 @@ export default {
|
||||||
ds1: [],
|
ds1: [],
|
||||||
ds2: [],
|
ds2: [],
|
||||||
ds3: [],
|
ds3: [],
|
||||||
|
ds4: [],
|
||||||
safeDialog: {
|
safeDialog: {
|
||||||
visible: false,
|
visible: false,
|
||||||
saving: false,
|
saving: false,
|
||||||
|
|
@ -267,6 +279,7 @@ export default {
|
||||||
this.ds1 = d.ds1 || [];
|
this.ds1 = d.ds1 || [];
|
||||||
this.ds2 = d.ds2 || [];
|
this.ds2 = d.ds2 || [];
|
||||||
this.ds3 = d.ds3 || [];
|
this.ds3 = d.ds3 || [];
|
||||||
|
this.ds4 = d.ds4 || [];
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
|
@ -335,8 +348,19 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.kpi-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(5, 1fr);
|
||||||
|
gap: 15px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
@media (max-width: 992px) {
|
||||||
|
.kpi-grid {
|
||||||
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
.kpi-card {
|
.kpi-card {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
.kpi-label {
|
.kpi-label {
|
||||||
color: #909399;
|
color: #909399;
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span
|
<span
|
||||||
v-if="scope.row.week_esitimate_consume && scope.row.week_esitimate_consume !== null">
|
v-if="scope.row.week_esitimate_consume && scope.row.week_esitimate_consume !== null">
|
||||||
{{ Math.floor(scope.row.count_mb / scope.row.week_esitimate_consume) * 7 }}
|
{{ Math.floor(scope.row.count / scope.row.week_esitimate_consume) * 7 }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -337,12 +337,20 @@ export default {
|
||||||
this.echartsOptions = JSON.parse(res.echart_options);
|
this.echartsOptions = JSON.parse(res.echart_options);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
}else if(that.params.type==30){
|
||||||
|
this.$API.bi.dataset.exec.req("materialCount2", {query:query2 }).then((res) => {
|
||||||
|
if (res.echart_options) {
|
||||||
|
this.echartsOptions = JSON.parse(res.echart_options);
|
||||||
|
}
|
||||||
|
})
|
||||||
}else if(that.params.type==40){
|
}else if(that.params.type==40){
|
||||||
this.$API.bi.dataset.exec.req("helpso_cate", {}).then((res) => {
|
this.$API.bi.dataset.exec.req("helpso_cate", {}).then((res) => {
|
||||||
if (res.echart_options) {
|
if (res.echart_options) {
|
||||||
this.echartsOptions = JSON.parse(res.echart_options);
|
this.echartsOptions = JSON.parse(res.echart_options);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
}else{
|
||||||
|
that.echartsOptions = null;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//更改周预估用量
|
//更改周预估用量
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,18 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
const defaultForm = {
|
||||||
|
field_key: '',
|
||||||
|
field_name: '',
|
||||||
|
placeholder: '',
|
||||||
|
field_type: '',
|
||||||
|
sort: '',
|
||||||
|
label: 'name',
|
||||||
|
default_value: '',
|
||||||
|
field_template: '',
|
||||||
|
field_choice: [],
|
||||||
|
is_hidden: false,
|
||||||
|
};
|
||||||
export default {
|
export default {
|
||||||
name: "field",
|
name: "field",
|
||||||
data() {
|
data() {
|
||||||
|
|
@ -130,18 +142,7 @@
|
||||||
show: '查看'
|
show: '查看'
|
||||||
},
|
},
|
||||||
//表单数据
|
//表单数据
|
||||||
addForm: {
|
addForm: Object.assign({}, defaultForm, {field_choice: []}),
|
||||||
field_key: '',
|
|
||||||
field_name: '',
|
|
||||||
placeholder: '',
|
|
||||||
field_type: '',
|
|
||||||
sort: '',
|
|
||||||
label: 'name',
|
|
||||||
default_value: '',
|
|
||||||
field_template: '',
|
|
||||||
field_choice: [],
|
|
||||||
is_hidden: false,
|
|
||||||
},
|
|
||||||
//验证规则
|
//验证规则
|
||||||
rules: {
|
rules: {
|
||||||
name: [
|
name: [
|
||||||
|
|
@ -205,6 +206,8 @@
|
||||||
},
|
},
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.type = 'add';
|
this.type = 'add';
|
||||||
|
this.addForm = Object.assign({}, defaultForm, {field_choice: []});
|
||||||
|
this.choiceOption = [{id: null, name: ""}];
|
||||||
this.dialogVisible = true;
|
this.dialogVisible = true;
|
||||||
},
|
},
|
||||||
submitHandle() {
|
submitHandle() {
|
||||||
|
|
|
||||||
|
|
@ -391,6 +391,15 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
const defaultForm = {
|
||||||
|
name: "",
|
||||||
|
is_hidden: false,
|
||||||
|
sort: "",
|
||||||
|
type: "",
|
||||||
|
enable_retreat: false,
|
||||||
|
participant_type: 0,
|
||||||
|
distribute_type: 2, //分发类型
|
||||||
|
};
|
||||||
export default {
|
export default {
|
||||||
name: "state",
|
name: "state",
|
||||||
data() {
|
data() {
|
||||||
|
|
@ -412,17 +421,10 @@ export default {
|
||||||
stateChange: [],
|
stateChange: [],
|
||||||
fieldList: [],
|
fieldList: [],
|
||||||
//表单数据
|
//表单数据
|
||||||
addForm: {
|
addForm: Object.assign({}, defaultForm, {
|
||||||
name: "",
|
|
||||||
is_hidden: false,
|
|
||||||
sort: "",
|
|
||||||
type: "",
|
|
||||||
participant_cc: [],
|
participant_cc: [],
|
||||||
enable_retreat: false,
|
|
||||||
participant_type: 0,
|
|
||||||
distribute_type: 2, //分发类型
|
|
||||||
state_fields: {}, //字段状态是否可写
|
state_fields: {}, //字段状态是否可写
|
||||||
},
|
}),
|
||||||
//验证规则
|
//验证规则
|
||||||
rules: {
|
rules: {
|
||||||
name: [{ required: true, message: "请输入工作流名称" }],
|
name: [{ required: true, message: "请输入工作流名称" }],
|
||||||
|
|
@ -568,6 +570,11 @@ export default {
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.getField();
|
this.getField();
|
||||||
this.type = "add";
|
this.type = "add";
|
||||||
|
this.addForm = Object.assign({}, defaultForm, {
|
||||||
|
participant_cc: [],
|
||||||
|
state_fields: {},
|
||||||
|
});
|
||||||
|
this.stateChange = [];
|
||||||
this.dialogVisible = true;
|
this.dialogVisible = true;
|
||||||
// if(this.dialogInitNum === 0){
|
// if(this.dialogInitNum === 0){
|
||||||
// this.getUsers();
|
// this.getUsers();
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,13 @@
|
||||||
<script>
|
<script>
|
||||||
// import vueJsonEditor from 'vue-json-editor'
|
// import vueJsonEditor from 'vue-json-editor'
|
||||||
import JsonEditorVue from 'json-editor-vue3'
|
import JsonEditorVue from 'json-editor-vue3'
|
||||||
|
const defaultForm = {
|
||||||
|
name: '',
|
||||||
|
timer: 0,
|
||||||
|
source_state: '',
|
||||||
|
destination_state: '',
|
||||||
|
field_require_check: false,
|
||||||
|
};
|
||||||
export default {
|
export default {
|
||||||
name: "transform",
|
name: "transform",
|
||||||
components: { JsonEditorVue },
|
components: { JsonEditorVue },
|
||||||
|
|
@ -165,14 +172,7 @@
|
||||||
value: 3,
|
value: 3,
|
||||||
label: '其他'
|
label: '其他'
|
||||||
}],
|
}],
|
||||||
addForm: {
|
addForm: Object.assign({}, defaultForm, {condition_expression: {}}),
|
||||||
name: '',
|
|
||||||
timer: 0,
|
|
||||||
source_state: '',
|
|
||||||
destination_state: '',
|
|
||||||
condition_expression: {},
|
|
||||||
field_require_check: false,
|
|
||||||
},
|
|
||||||
stateList: [],
|
stateList: [],
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
}
|
}
|
||||||
|
|
@ -200,6 +200,7 @@
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.getStateList();
|
this.getStateList();
|
||||||
this.type = 'add';
|
this.type = 'add';
|
||||||
|
this.addForm = Object.assign({}, defaultForm, {condition_expression: {}});
|
||||||
this.dialogVisible = true;
|
this.dialogVisible = true;
|
||||||
},
|
},
|
||||||
handleEdit(row) {
|
handleEdit(row) {
|
||||||
|
|
|
||||||
|
|
@ -207,6 +207,15 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import degraDialog from "./degraD3_2.vue";
|
import degraDialog from "./degraD3_2.vue";
|
||||||
|
const defaultForm = {
|
||||||
|
name: "",
|
||||||
|
sn_prefix: "",
|
||||||
|
description: "",
|
||||||
|
view_permission_check: true,
|
||||||
|
display_form_str: [],
|
||||||
|
title_template: "",
|
||||||
|
content_template: "",
|
||||||
|
};
|
||||||
export default {
|
export default {
|
||||||
name: "index",
|
name: "index",
|
||||||
components: {
|
components: {
|
||||||
|
|
@ -233,15 +242,7 @@ export default {
|
||||||
},
|
},
|
||||||
wfCateOptions: [],
|
wfCateOptions: [],
|
||||||
//表单数据
|
//表单数据
|
||||||
addForm: {
|
addForm: Object.assign({}, defaultForm, { display_form_str: [] }),
|
||||||
name: "",
|
|
||||||
sn_prefix: "",
|
|
||||||
description: "",
|
|
||||||
view_permission_check: true,
|
|
||||||
display_form_str: [],
|
|
||||||
title_template: "",
|
|
||||||
content_template: "",
|
|
||||||
},
|
|
||||||
//验证规则
|
//验证规则
|
||||||
rules: {
|
rules: {
|
||||||
name: [{ required: true, message: "请输入工作流名称" }],
|
name: [{ required: true, message: "请输入工作流名称" }],
|
||||||
|
|
@ -264,6 +265,7 @@ export default {
|
||||||
//添加工作流
|
//添加工作流
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.type = "add";
|
this.type = "add";
|
||||||
|
this.addForm = Object.assign({}, defaultForm, { display_form_str: [] });
|
||||||
this.limitedVisible = true;
|
this.limitedVisible = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -915,6 +915,7 @@ export default {
|
||||||
this.imputDisable = true;
|
this.imputDisable = true;
|
||||||
await this.getInputText(data);
|
await this.getInputText(data);
|
||||||
this.imputDisable = false;
|
this.imputDisable = false;
|
||||||
|
await this.$nextTick();
|
||||||
this.$refs.codeInput.focus();
|
this.$refs.codeInput.focus();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,8 +60,8 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :md="12" :sm="12" :xs="24" v-if="route_code=='ladansi'||route_code=='yicifusi'||route_code=='ercifusi'||route_code=='zlybcl'||route_code=='djg'||route_code=='cnc'">
|
<el-col :md="12" :sm="12" :xs="24" v-if="base_code=='tcerp'||route_code=='ladansi'||route_code=='yicifusi'||route_code=='ercifusi'||route_code=='zlybcl'||route_code=='djg'||route_code=='cnc'">
|
||||||
<el-form-item label="生产设备" prop="equipment">
|
<el-form-item label="生产设备" :prop="base_code!=='tcerp' ? 'equipment' : null">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="form.equipment"
|
v-model="form.equipment"
|
||||||
placeholder="生产设备"
|
placeholder="生产设备"
|
||||||
|
|
@ -315,6 +315,7 @@ export default {
|
||||||
mtaskOptions:[],
|
mtaskOptions:[],
|
||||||
supplierOptions: [],
|
supplierOptions: [],
|
||||||
setFiltersVisible: false,
|
setFiltersVisible: false,
|
||||||
|
base_code: this.$TOOL.data.get('BASE_INFO').base.base_code,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@
|
||||||
<el-input-number v-model="form.count_use" :disabled="materialTracking==20" style="width: 100%;"></el-input-number>
|
<el-input-number v-model="form.count_use" :disabled="materialTracking==20" style="width: 100%;"></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :md="12" :sm="12" :xs="24" v-if="route_code=='ladansi'||route_code=='yicifusi'||route_code=='ercifusi'||route_code=='zlybcl'||route_code=='djg'||route_code=='cnc'">
|
<el-col :md="12" :sm="12" :xs="24" v-if="base_code=='tcerp'||route_code=='ladansi'||route_code=='yicifusi'||route_code=='ercifusi'||route_code=='zlybcl'||route_code=='djg'||route_code=='cnc'">
|
||||||
<el-form-item label="生产设备" prop="equipment">
|
<el-form-item label="生产设备" :prop="base_code!=='tcerp' ? 'equipment' : null">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="form.equipment"
|
v-model="form.equipment"
|
||||||
placeholder="生产设备"
|
placeholder="生产设备"
|
||||||
|
|
@ -292,6 +292,7 @@ export default {
|
||||||
routeOptions: [],
|
routeOptions: [],
|
||||||
materialOptions: [],
|
materialOptions: [],
|
||||||
routeOriginOptions: [],
|
routeOriginOptions: [],
|
||||||
|
base_code: this.$TOOL.data.get('BASE_INFO').base.base_code,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
||||||
|
|
@ -87,12 +87,21 @@
|
||||||
>
|
>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
|
v-if="scope.row.submit_time!==null"
|
||||||
link size="small"
|
link size="small"
|
||||||
@click="check_revert(scope.row)"
|
@click="check_revert(scope.row)"
|
||||||
v-auth="'ftestwork.create'"
|
v-auth="'ftestwork.create'"
|
||||||
type="primary"
|
type="primary"
|
||||||
>撤回
|
>撤回
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-else
|
||||||
|
link size="small"
|
||||||
|
@click="check_delete(scope.row)"
|
||||||
|
v-auth="'ftestwork.create'"
|
||||||
|
type="danger"
|
||||||
|
>删除
|
||||||
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</scTable>
|
</scTable>
|
||||||
|
|
@ -159,7 +168,17 @@ export default {
|
||||||
});
|
});
|
||||||
}).catch(() => {});
|
}).catch(() => {});
|
||||||
},
|
},
|
||||||
|
check_delete(row){
|
||||||
|
let that = this;
|
||||||
|
this.$confirm(`确定删除该检验吗?`, "提示", {
|
||||||
|
type: "warning",
|
||||||
|
}).then(() => {
|
||||||
|
that.$API.qm.ftestwork.delete.req(row.id).then((res) => {
|
||||||
|
this.$refs.table.refresh();
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
handleQuery() {
|
handleQuery() {
|
||||||
this.$refs.table.queryData(this.query);
|
this.$refs.table.queryData(this.query);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue