projects/mes-test #133

Merged
gtz217 merged 281 commits from projects/mes-test into projects/mes 2023-11-30 09:11:34 +08:00
94 changed files with 1860 additions and 1663 deletions
Showing only changes of commit a22da566c3 - Show all commits

View File

@ -17,10 +17,14 @@ VUE_APP_BASE_API = 'http://192.168.0.33:48082'
# VUE_APP_BASE_API = 'http://192.168.4.173:48080'
# VUE_APP_BASE_API = 'http://192.168.2.173:48080'
# VUE_APP_BASE_API = 'http://192.168.1.49:48080'
# VUE_APP_BASE_API = 'http://192.168.1.8:48080'
# VUE_APP_BASE_API = 'http://192.168.1.8:48082'
# VUE_APP_BASE_API = 'http://192.168.4.159:48080'
# VUE_APP_BASE_API = 'http://192.168.1.56:48080'
# VUE_APP_BASE_API = 'http://192.168.4.159:48080'
# 积木报表指向地址
VUE_APP_JIMU_API = 'http://192.168.0.33:48082'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

View File

@ -12,7 +12,10 @@ ENV = 'production'
VUE_APP_TITLE = MES系统
# 芋道管理系统/生产环境
VUE_APP_BASE_API = 'http://192.168.0.33:48082'
VUE_APP_BASE_API = '/prod-api'
# 积木报表指向地址
VUE_APP_JIMU_API = 'http://192.168.0.33:48082'
# 根据服务器或域名修改

View File

@ -1,7 +1,7 @@
/*
* @Author: Do not edit
* @Date: 2023-11-08 15:56:52
* @LastEditTime: 2023-11-13 09:15:17
* @LastEditTime: 2023-11-16 20:15:02
* @LastEditors: DY
* @Description:
*/
@ -60,3 +60,11 @@ export function getcheckConfigByEqList(query) {
params: query
})
}
// 删除设备巡检记录
export function deleteEqCheckLog(id) {
return request({
url: '/base/equipment-check-log/delete?id=' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,16 @@
/*
* @Author: Do not edit
* @Date: 2023-11-08 15:56:52
* @LastEditTime: 2023-11-16 20:22:12
* @LastEditors: DY
* @Description:
*/
import request from '@/utils/request'
// 删除设备保养记录
export function deleteEqMaintainLog(id) {
return request({
url: '/base/equipment-maintain-log/delete?id=' + id,
method: 'delete'
})
}

View File

@ -1,7 +1,7 @@
/*
* @Author: Do not edit
* @Date: 2023-11-10 16:09:33
* @LastEditTime: 2023-11-10 16:50:08
* @LastEditTime: 2023-11-16 18:57:08
* @LastEditors: DY
* @Description:
*/
@ -23,3 +23,11 @@ export function updateEqRepair(data) {
data: data
})
}
// 删除维修记录
export function deleteRepair(id) {
return request({
url: '/base/equipment-repair-log/delete?id=' + id,
method: 'delete'
})
}

View File

@ -1,7 +1,7 @@
/*
* @Author: Do not edit
* @Date: 2023-11-11 16:18:57
* @LastEditTime: 2023-11-11 17:28:54
* @LastEditTime: 2023-11-16 20:52:06
* @LastEditors: DY
* @Description:
*/
@ -49,3 +49,20 @@ export function getSparePartList(query) {
params: query
})
}
// 删除设备备品备件配置
export function deleteConfig(id) {
return request({
url: '/base/equipment-spare-part-config/delete?id=' + id,
method: 'delete'
})
}
// 获得备品备件分页
export function getSparePartPage(query) {
return request({
url: '/base/equipment-spare-part/page',
method: 'get',
params: query
})
}

View File

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

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -65,6 +65,7 @@
v-if="col.subcomponent"
:key="col.key"
:disabled="disabled"
:read-only="disabled"
:is="col.subcomponent"
v-model="form[col.prop]"
:inlineStyle="col.style"

View File

@ -1,5 +1,5 @@
<template>
<div>
<div :class="[readOnly ? 'editor-wrapper' : '']">
<el-upload
:action="uploadFileUrl"
:before-upload="handleBeforeUpload"
@ -10,27 +10,25 @@
:headers="headers"
style="display: none"
ref="upload"
v-if="this.type === 'url'"
>
</el-upload>
v-if="this.type === 'url'"></el-upload>
<div class="editor" ref="editor" :style="styles"></div>
</div>
</template>
<script>
import Quill from "quill";
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import { getAccessToken } from "@/utils/auth";
import Quill from 'quill';
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css';
import { getAccessToken } from '@/utils/auth';
export default {
name: "Editor",
name: 'Editor',
props: {
/* 编辑器的内容 */
value: {
type: String,
default: "",
default: '',
},
/* 高度 */
height: {
@ -55,35 +53,36 @@ export default {
/* 类型base64格式、url格式 */
type: {
type: String,
default: "url",
}
default: 'url',
},
},
data() {
return {
uploadFileUrl: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", //
headers: { Authorization: "Bearer " + getAccessToken() }, //
uploadFileUrl:
process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', //
headers: { Authorization: 'Bearer ' + getAccessToken() }, //
Quill: null,
currentValue: "",
currentValue: '',
options: {
theme: "snow",
theme: 'snow',
bounds: document.body,
debug: "warn",
debug: 'warn',
modules: {
//
toolbar: [
["bold", "italic", "underline", "strike"], // 线 线
["blockquote", "code-block"], //
[{ list: "ordered" }, { list: "bullet" }], //
[{ indent: "-1" }, { indent: "+1" }], //
[{ size: ["small", false, "large", "huge"] }], //
['bold', 'italic', 'underline', 'strike'], // 线 线
['blockquote', 'code-block'], //
[{ list: 'ordered' }, { list: 'bullet' }], //
[{ indent: '-1' }, { indent: '+1' }], //
[{ size: ['small', false, 'large', 'huge'] }], //
[{ header: [1, 2, 3, 4, 5, 6, false] }], //
[{ color: [] }, { background: [] }], //
[{ align: [] }], //
["clean"], //
["link", "image", "video"] //
['clean'], //
['link', 'image', 'video'], //
],
},
placeholder: "请输入内容",
placeholder: '请输入内容',
readOnly: true,
},
};
@ -104,7 +103,7 @@ export default {
value: {
handler(val) {
if (val !== this.currentValue) {
this.currentValue = val === null ? "" : val;
this.currentValue = val === null ? '' : val;
if (this.Quill) {
this.Quill.pasteHTML(this.currentValue);
}
@ -124,41 +123,41 @@ export default {
const editor = this.$refs.editor;
this.Quill = new Quill(editor, this.options);
// start
this.$nextTick(()=>{
this.$nextTick(() => {
this.Quill.blur();
if(!this.readOnly){
if (!this.readOnly) {
this.Quill.enable();
}
});
//
if (this.type === 'url') {
let toolbar = this.Quill.getModule("toolbar");
toolbar.addHandler("image", (value) => {
this.uploadType = "image";
let toolbar = this.Quill.getModule('toolbar');
toolbar.addHandler('image', (value) => {
this.uploadType = 'image';
if (value) {
this.$refs.upload.$children[0].$refs.input.click();
} else {
this.quill.format("image", false);
this.quill.format('image', false);
}
});
}
this.Quill.pasteHTML(this.currentValue);
this.Quill.on("text-change", (delta, oldDelta, source) => {
this.Quill.on('text-change', (delta, oldDelta, source) => {
const html = this.$refs.editor.children[0].innerHTML;
const text = this.Quill.getText();
const quill = this.Quill;
this.currentValue = html;
this.$emit("input", html);
this.$emit("on-change", { html, text, quill });
this.$emit('input', html);
this.$emit('on-change', { html, text, quill });
});
this.Quill.on("text-change", (delta, oldDelta, source) => {
this.$emit("on-text-change", delta, oldDelta, source);
this.Quill.on('text-change', (delta, oldDelta, source) => {
this.$emit('on-text-change', delta, oldDelta, source);
});
this.Quill.on("selection-change", (range, oldRange, source) => {
this.$emit("on-selection-change", range, oldRange, source);
this.Quill.on('selection-change', (range, oldRange, source) => {
this.$emit('on-selection-change', range, oldRange, source);
});
this.Quill.on("editor-change", (eventName, ...args) => {
this.$emit("on-editor-change", eventName, ...args);
this.Quill.on('editor-change', (eventName, ...args) => {
this.$emit('on-editor-change', eventName, ...args);
});
},
//
@ -183,97 +182,112 @@ export default {
let length = quill.getSelection().index;
// res.url
// edit by
quill.insertEmbed(length, "image", res.data);
quill.insertEmbed(length, 'image', res.data);
//
quill.setSelection(length + 1);
} else {
this.$message.error("图片插入失败");
this.$message.error('图片插入失败');
}
},
handleUploadError() {
this.$message.error("图片插入失败");
this.$message.error('图片插入失败');
},
},
};
</script>
<style>
.editor, .ql-toolbar {
.editor-wrapper {
position: relative;
cursor: not-allowed;
&::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #f5f7fa77;
}
}
.editor,
.ql-toolbar {
white-space: pre-wrap !important;
line-height: normal !important;
}
.quill-img {
display: none;
}
.ql-snow .ql-tooltip[data-mode="link"]::before {
content: "请输入链接地址:";
.ql-snow .ql-tooltip[data-mode='link']::before {
content: '请输入链接地址:';
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px;
content: "保存";
content: '保存';
padding-right: 0px;
}
.ql-snow .ql-tooltip[data-mode="video"]::before {
content: "请输入视频地址:";
.ql-snow .ql-tooltip[data-mode='video']::before {
content: '请输入视频地址:';
}
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: "14px";
content: '14px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
content: "10px";
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {
content: '10px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
content: "18px";
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {
content: '18px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
content: "32px";
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {
content: '32px';
}
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: "文本";
content: '文本';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
content: "标题1";
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {
content: '标题1';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
content: "标题2";
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {
content: '标题2';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
content: "标题3";
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {
content: '标题3';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
content: "标题4";
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {
content: '标题4';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
content: "标题5";
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {
content: '标题5';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
content: "标题6";
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {
content: '标题6';
}
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: "标准字体";
content: '标准字体';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
content: "衬线字体";
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before {
content: '衬线字体';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
content: "等宽字体";
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before {
content: '等宽字体';
}
</style>

View File

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

View File

@ -162,7 +162,7 @@ export default {
input: true,
label: '属性名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '属性名称不能为空', trigger: 'blur' }],
},
],
[

View File

@ -10,7 +10,7 @@
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="设备名称" prop="name" :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-form-item label="设备名称" prop="name" :rules="[{ required: true, message: '设备名称不能为空', trigger: 'blur' }]">
<el-input v-model="form.name" :disabled="disabled" placeholder="请输入设备名称"></el-input>
</el-form-item>
</el-col>
@ -33,7 +33,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="设备类型" prop="equipmentTypeId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '设备类型不能为空', trigger: 'blur' }]">
<el-select v-model="form.equipmentTypeId" :disabled="disabled" filterable placeholder="请选择设备类型">
<el-option v-for="eqType in eqTypeList" :key="eqType.id" :label="eqType.name"
:value="eqType.id"></el-option>
@ -43,7 +43,7 @@
<el-col :span="8">
<el-form-item label="预计生产时间(min/天)" prop="workTime" :rules="[
{ required: true, message: '不能为空', trigger: 'blur' },
{ required: true, message: '预计生产时间不能为空', trigger: 'blur' },
{
type: 'number',
message: '请输入正确的数字值',
@ -71,7 +71,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="设备TT值" prop="tvalue" :rules="[
{ required: true, message: '不能为空', trigger: 'blur' },
{ required: true, message: '设备TT值不能为空', trigger: 'blur' },
{
type: 'number',
message: '请输入正确的数字值',
@ -86,7 +86,7 @@
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="产品加工时间(s)" prop="processingTime" :rules="[
{ required: true, message: '不能为空', trigger: 'blur' },
{ required: true, message: '产品加工时间不能为空', trigger: 'blur' },
{
type: 'number',
message: '请输入正确的数字值',

View File

@ -17,7 +17,7 @@
<!-- 对话框(添加) -->
<base-dialog :dialogTitle="title" :dialogVisible="open" @close="cancel" @cancel="cancel" width="60%"
@confirm="submitForm">
<DialogForm v-if="open" key="index-dialog-form" ref="form" label-position="top" size="small" :dataForm="form"
<DialogForm v-if="open" key="index-dialog-form" ref="form" label-position="top" size="small" v-model="form"
:rows="computedRows" />
</base-dialog>
@ -196,7 +196,7 @@ export default {
input: true,
label: '设备名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
// bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode...
// }
@ -211,10 +211,6 @@ export default {
input: true,
label: '英文名称',
prop: 'enName',
// rules: [{ required: true, message: '', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }
},
],
[
@ -222,10 +218,6 @@ export default {
input: true,
label: '缩写',
prop: 'abbr',
// rules: [{ required: true, message: '', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }
},
{
@ -233,7 +225,7 @@ export default {
label: '设备类型',
prop: 'equipmentTypeId',
url: '/base/core-equipment-type/page?pageNo=1&pageSize=100',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
@ -243,7 +235,7 @@ export default {
label: '预计生产时间(min/天)',
prop: 'workTime',
rules: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ required: true, message: '预计生产时间不能为空', trigger: 'blur' },
{
type: 'number',
message: '请输入正确的数字值',
@ -275,7 +267,7 @@ export default {
prop: 'tvalue',
label: '设备TT值',
rules: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ required: true, message: '设备TT值不能为空', trigger: 'blur' },
{
type: 'number',
message: '请输入正确的数字值',
@ -291,7 +283,7 @@ export default {
label: '产品加工时间(s)',
prop: 'processingTime',
rules: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ required: true, message: '产品加工时间不能为空', trigger: 'blur' },
{
type: 'number',
message: '请输入正确的数字值',
@ -304,7 +296,6 @@ export default {
{
input: true,
label: '制造商',
// rules: [{ required: true, message: '', trigger: 'blur' }],
prop: 'manufacturer',
},
{
@ -317,7 +308,6 @@ export default {
{
textarea: true,
label: '功能描述',
// rules: [{ required: true, message: '', trigger: 'blur' }],
prop: 'description',
},
],
@ -424,6 +414,7 @@ export default {
//
form: {
id: null,
files: []
},
showUploadComponents: false, //
};
@ -506,6 +497,7 @@ export default {
spec: undefined,
description: undefined,
remark: undefined,
files: []
};
this.resetForm('form');
},

View File

@ -149,7 +149,7 @@ export default {
select: true,
label: '产线',
prop: 'productionLineId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '产线名不能为空', trigger: 'blur' }],
url: '/base/core-production-line/listAll',
bind: { clearable: true, filterable: true },
// watch: 'workshopSectionId'
@ -159,7 +159,7 @@ export default {
label: '工段',
prop: 'workshopSectionId',
depends: 'productionLineId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '工段不能为空', trigger: 'blur' }],
bind: { clearable: true, filterable: true },
url: '/base/core-workshop-section/listByParentId',
},
@ -169,7 +169,7 @@ export default {
select: true,
label: '设备',
prop: 'equipmentId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名不能为空', trigger: 'blur' }],
bind: { clearable: true, filterable: true },
url: '/base/core-equipment/listAll',
},

View File

@ -135,7 +135,7 @@ export default {
input: true,
label: '设备类型名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备类型名不能为空', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }

View File

@ -16,7 +16,7 @@
<el-form-item
label="产线"
prop="productionLineId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '产线不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.productionLineId"
placeholder="请选择产线"
@ -35,7 +35,7 @@
<el-form-item
label="工段"
prop="workshopSectionId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '工段不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.workshopSectionId"
filterable
@ -55,7 +55,7 @@
<el-form-item
label="设备"
prop="equipmentId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '设备不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.equipmentId"
filterable

View File

@ -176,7 +176,7 @@ export default {
url: '/base/production-line/listAll',
// prop: '__product_line', // __
prop: 'productionLineId', // 线id使
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '产线不能为空', trigger: 'blur' }],
},
{
select: true,
@ -185,7 +185,7 @@ export default {
// depends: '__product_line', // 线
depends: 'productionLineId',
prop: 'workshopSectionId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '工段不能为空', trigger: 'blur' }],
},
],
[
@ -194,7 +194,7 @@ export default {
label: '设备',
url: '/base/core-equipment/page?pageNo=1&pageSize=100',
prop: 'equipmentId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
},
{
input: true,

View File

@ -16,36 +16,20 @@
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '报警编码不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.code"
@change="$emit('update', dataForm)"
placeholder="请输入工段排序" />
</el-form-item>
<!--
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.code"
placeholder="请选择产线"
@change="handleProductlineChange">
<el-option
v-for="opt in productionLineList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item> -->
</el-col>
<el-col :span="12">
<el-form-item
label="报警类型"
prop="type"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '报警类型不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.type"
:disabled="disabled"
@ -68,7 +52,7 @@
<el-form-item
label="报警级别"
prop="grade"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '报警级别不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.grade"
@ -101,7 +85,7 @@
<el-form-item
label="参数列名"
prop="plcParamName"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '参数列名不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.plcParamName"
@ -113,7 +97,7 @@
<el-form-item
label="报警内容"
prop="alarmContent"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '报警内容不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.alarmContent"

View File

@ -137,7 +137,7 @@ export default {
label: '报警编码', //
prop: 'code',
url: '/base/equipment-group-alarm/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '报警编码不能为空', trigger: 'blur' }],
},
{
select: true,
@ -147,7 +147,7 @@ export default {
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '报警类型不能为空', trigger: 'blur' }],
},
],
[
@ -168,13 +168,13 @@ export default {
input: true,
label: '参数列名', //
prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '参数列名不能为空', trigger: 'blur' }],
},
{
input: true,
label: '报警内容',
prop: 'alarmContent',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '报警内容不能为空', trigger: 'blur' }],
},
],
],

View File

@ -177,7 +177,7 @@ export default {
input: true,
label: '关联表名',
prop: 'plcTableName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '关联表名不能为空', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }
@ -187,7 +187,7 @@ export default {
label: '编码',
prop: 'code',
url: '/base/equipment-group/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
},
],
[
@ -195,7 +195,7 @@ export default {
input: true,
label: '标识',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '标识不能为空', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }

View File

@ -166,13 +166,13 @@ export default {
input: true,
label: '参数列名',
prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '参数列名不能为空', trigger: 'blur' }],
},
{
input: true,
label: '参数名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '参数名称不能为空', trigger: 'blur' }],
},
],
[
@ -181,7 +181,6 @@ export default {
label: '单位',
prop: 'unit',
options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT),
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
{
switch: true,
@ -222,7 +221,6 @@ export default {
transform: (val) => Number(val),
},
],
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
[
@ -230,13 +228,11 @@ export default {
input: true,
label: '标准值',
prop: 'defaultValue',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
{
input: true,
label: '描述',
prop: 'description',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
[
@ -244,7 +240,6 @@ export default {
input: true,
label: '备注',
prop: 'remark',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
],

View File

@ -236,7 +236,7 @@ export default {
prop: 'plcId',
labelKey: `plcTableName`,
url: '/base/equipment-plc/listAll',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '关联表名不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
@ -248,7 +248,7 @@ export default {
label: '设备',
prop: 'equipmentId',
url: '/base/core-equipment/page?pageNo=1&pageSize=99',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
@ -274,7 +274,7 @@ export default {
input: true,
label: '设备名',
prop: 'equipmentName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名不能为空', trigger: 'blur' }],
// bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode...
// }

View File

@ -120,13 +120,13 @@ export default {
input: true,
label: '参数列名',
prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '参数列名不能为空', trigger: 'blur' }],
},
{
input: true,
label: '参数名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '参数名称不能为空', trigger: 'blur' }],
},
],
[
@ -135,7 +135,6 @@ export default {
label: '单位',
prop: 'unit',
options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT),
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
{
switch: true,
@ -176,7 +175,6 @@ export default {
transform: (val) => Number(val),
},
],
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
[
@ -184,13 +182,11 @@ export default {
input: true,
label: '标准值',
prop: 'defaultValue',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
{
input: true,
label: '描述',
prop: 'description',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
[
@ -198,7 +194,6 @@ export default {
input: true,
label: '备注',
prop: 'remark',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
],

View File

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

View File

@ -127,8 +127,8 @@ export default {
lineData[it.recordTime + '_area'] = it.area
})
console.log('你好', this.monitorList)
if (this.monitorList.length > 0) {
this.monitorList.forEach(m => {
console.log('455', m)
if (m.lineName === lineData.proLineName) {
m.data.forEach(bad => {
//
@ -139,6 +139,7 @@ export default {
})
}
})
}
lineData['workOrderName'] = works.join(',')
lineData['spec'] = specs.join(',')
this.tableData.push(lineData)

View File

@ -29,27 +29,60 @@
<section v-for="(section, index) in sections" :key="section.key">
<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle>
<div class="form-part" v-if="section.key == 'base'">
<div
class="form-part"
v-if="section.key == 'base'"
style="border-bottom: 1px solid #dfdfdf; margin-bottom: 24px">
<el-skeleton v-if="!showForm" animated />
<BaseInfoForm
<!-- <BaseInfoForm
key="drawer-dialog-form"
v-if="showForm"
ref="form"
:disabled="mode.includes('detail')"
:dataForm="form"
:rows="formRows" />
:rows="formRows" /> -->
<el-row style="margin-bottom: 24px">
<el-col :span="8">
<div
class="title"
style="font-weight: 700; font-size: 16px; margin: 8px 0">
设备分组名称
</div>
<div class="value" style="font-size: 14px">{{ form.name }}</div>
</el-col>
<el-col :span="8">
<div
class="title"
style="font-weight: 700; font-size: 16px; margin: 8px 0">
设备分组编码
</div>
<div class="value" style="font-size: 14px">
{{ form.code }}
</div>
</el-col>
</el-row>
</div>
<div v-if="section.key == 'attrs'" style="margin-top: 12px">
<div
v-if="section.key == 'attrs'"
style="position: relative; margin-top: 12px">
<!-- v-if="!mode.includes('detail')" -->
<div style="position: absolute; top: -40px; right: 0">
<el-button @click="handleAddAttr" type="text">
<i class="el-icon-plus"></i>
添加报警
</el-button>
</div>
<base-table
v-loading="attrListLoading"
:table-props="section.props"
:page="attrQuery?.params.pageNo || 1"
:limit="attrQuery?.params.pageSize || 10"
:table-data="list"
:add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr"
@emitFun="handleEmitFun">
<!-- :add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr" -->
<method-btn
v-if="section.tableBtn"
slot="handleBtn"
@ -71,17 +104,10 @@
<div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button>
<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
<!-- <el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
编辑
</el-button>
<el-button v-else type="primary" @click="handleCancel">确定</el-button>
<!-- sections的第二项必须是 属性列表 -->
<!-- <el-button
v-if="sections[1].allowAdd"
type="primary"
@click="handleAddAttr">
添加属性
</el-button> -->
<!-- <el-button v-else type="primary" @click="handleCancel">确定</el-button> -->
</div>
</div>
@ -99,9 +125,9 @@
<DialogForm
v-if="attrFormVisible"
ref="attrForm"
:disabled="mode.includes('detail')"
v-model="attrForm"
:rows="attrRows" />
<!-- :disabled="mode.includes('detail')" -->
</base-dialog>
</el-drawer>
</template>
@ -165,8 +191,30 @@ export default {
label: '报警编码', //
prop: 'code',
url: '/base/equipment-group-alarm/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '报警编码不能为空', trigger: 'blur' }],
},
{
select: true,
label: '报警级别', //
prop: 'grade',
options: this.getDictDatas(this.DICT_TYPE.EQU_ALARM_LEVEL),
},
],
[
{
input: true,
label: '参数列名', //
prop: 'plcParamName',
rules: [{ required: true, message: '参数列名不能为空', trigger: 'blur' }],
},
{
input: true,
label: '报警内容',
prop: 'alarmContent',
rules: [{ required: true, message: '报警内容不能为空', trigger: 'blur' }],
},
],
[
{
select: true,
label: '报警类型', //
@ -175,15 +223,7 @@ export default {
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
},
],
[
{
select: true,
label: '报警级别', //
prop: 'grade',
options: this.getDictDatas(this.DICT_TYPE.EQU_ALARM_LEVEL),
rules: [{ required: true, message: '报警类型不能为空', trigger: 'blur' }],
},
{
input: true,
@ -191,20 +231,6 @@ export default {
prop: 'alarmCode',
},
],
[
{
input: true,
label: '参数列名', //
prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
},
{
input: true,
label: '报警内容',
prop: 'alarmContent',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
},
],
],
attrQuery: {
params: {
@ -226,7 +252,7 @@ export default {
bind: {
//
// disabled: this.mode == 'detail',
disabled: true
disabled: true,
},
};
});

View File

@ -16,46 +16,26 @@
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '报警编码不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.code"
@change="$emit('update', dataForm)"
placeholder="请输入报警编码" />
</el-form-item>
<!--
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.code"
placeholder="请选择产线"
@change="handleProductlineChange">
<el-option
v-for="opt in productionLineList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item> -->
</el-col>
<el-col :span="12">
<el-form-item
label="报警类型"
prop="type"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
label="报警级别"
prop="grade"
:rules="[{ required: true, message: '报警级别不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.type"
placeholder="请选择报警类型"
@change="handleTypeChange">
v-model="dataForm.grade"
placeholder="请选择报警级别"
@change="$emit('update', dataForm)">
<el-option
v-for="opt in [
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
]"
v-for="opt in getDictDatas(DICT_TYPE.EQU_ALARM_LEVEL)"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
@ -66,16 +46,45 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="报警级别"
prop="grade"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
label="参数列名"
prop="plcParamName"
:rules="[{ required: true, message: '参数列名不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.plcParamName"
placeholder="请输入参数列名"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="报警内容"
prop="alarmContent"
:rules="[{ required: true, message: '报警内容不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.alarmContent"
placeholder="请输入报警内容"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="报警类型"
prop="type"
:rules="[{ required: true, message: '报警类型不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.grade"
placeholder="请选择报警级别"
@change="$emit('update', dataForm)">
v-model="dataForm.type"
placeholder="请选择报警类型"
@change="handleTypeChange">
<el-option
v-for="opt in getDictDatas(DICT_TYPE.EQU_ALARM_LEVEL)"
v-for="opt in [
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
]"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
@ -96,32 +105,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="参数列名"
prop="plcParamName"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.plcParamName"
placeholder="请输入参数列名"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="报警内容"
prop="alarmContent"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.alarmContent"
placeholder="请输入报警内容"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>

View File

@ -38,7 +38,7 @@
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
<DialogForm v-if="open" ref="form" :dataForm="form" :rows="rows" />
<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" />
</base-dialog>
<!-- 抽屉 详情 -->
@ -183,10 +183,7 @@ export default {
input: true,
label: '设备分组名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
// bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode...
// }
rules: [{ required: true, message: '设备分组名称不能为空', trigger: 'blur' }],
},
{
input: true,
@ -271,7 +268,7 @@ export default {
input: true,
label: '分组名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '分组名称不能为空', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }
@ -283,7 +280,7 @@ export default {
label: '分组编码',
prop: 'code',
url: '/base/equipment-group/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '分组编码不能为空', trigger: 'blur' }],
},
],
[
@ -291,7 +288,6 @@ export default {
input: true,
label: '备注',
prop: 'remark',
// rules: [{ required: true, message: '', trigger: 'blur' }],
bind: {
placeholder: '请输入备注',
},

View File

@ -29,27 +29,60 @@
<section v-for="(section, index) in sections" :key="section.key">
<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle>
<div class="form-part" v-if="section.key == 'base'">
<div
class="form-part"
v-if="section.key == 'base'"
style="border-bottom: 1px solid #dfdfdf; margin-bottom: 24px">
<el-skeleton v-if="!showForm" animated />
<BaseInfoForm
<!-- <BaseInfoForm
key="drawer-dialog-form"
v-if="showForm"
ref="form"
:disabled="true"
:dataForm="form"
:rows="formRows" />
:rows="formRows" /> -->
<el-row style="margin-bottom: 24px">
<el-col :span="8">
<div
class="title"
style="font-weight: 700; font-size: 16px; margin: 8px 0">
设备分组名称
</div>
<div class="value" style="font-size: 14px">{{ form.name }}</div>
</el-col>
<el-col :span="8">
<div
class="title"
style="font-weight: 700; font-size: 16px; margin: 8px 0">
设备分组编码
</div>
<div class="value" style="font-size: 14px">
{{ form.code }}
</div>
</el-col>
</el-row>
</div>
<div v-if="section.key == 'attrs'" style="margin-top: 12px">
<div
v-if="section.key == 'attrs'"
style="position: relative; margin-top: 12px">
<!-- v-if="!mode.includes('detail')" -->
<div style="position: absolute; top: -40px; right: 0">
<el-button @click="handleAddAttr" type="text">
<i class="el-icon-plus"></i>
添加属性
</el-button>
</div>
<base-table
v-loading="attrListLoading"
:table-props="section.props"
:page="attrQuery?.params.pageNo || 1"
:limit="attrQuery?.params.pageSize || 10"
:table-data="list"
:add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr"
@emitFun="handleEmitFun">
<!-- :add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr" -->
<method-btn
v-if="section.tableBtn"
slot="handleBtn"
@ -71,17 +104,10 @@
<div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button>
<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
<!-- <el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
编辑
</el-button>
<el-button v-else type="primary" @click="handleCancel">确定</el-button>
<!-- sections的第二项必须是 属性列表 -->
<!-- <el-button
v-if="sections[1].allowAdd"
type="primary"
@click="handleAddAttr">
添加属性
</el-button> -->
<!-- <el-button v-else type="primary" @click="handleCancel">确定</el-button> -->
</div>
</div>
@ -96,10 +122,10 @@
@close="closeAttrForm"
@cancel="closeAttrForm"
@confirm="submitAttrForm">
<!-- :disabled="mode.includes('detail')" -->
<DialogForm
v-if="attrFormVisible"
ref="attrForm"
:disabled="mode.includes('detail')"
v-model="attrForm"
:rows="attrRows" />
</base-dialog>
@ -165,7 +191,7 @@ export default {
label: '报警编码', //
prop: 'code',
url: '/base/equipment-group-alarm/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '报警编码不能为空', trigger: 'blur' }],
},
{
select: true,
@ -175,7 +201,7 @@ export default {
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '报警类型不能为空', trigger: 'blur' }],
},
],
[
@ -196,13 +222,13 @@ export default {
input: true,
label: '参数列名', //
prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '参数列名不能为空', trigger: 'blur' }],
},
{
input: true,
label: '报警内容',
prop: 'alarmContent',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '报警内容不能为空', trigger: 'blur' }],
},
],
],

View File

@ -16,46 +16,27 @@
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '报警编码不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.code"
@change="$emit('update', dataForm)"
placeholder="请输入工段排序" />
</el-form-item>
<!--
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.code"
placeholder="请选择产线"
@change="handleProductlineChange">
<el-option
v-for="opt in productionLineList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item> -->
</el-col>
<el-col :span="12">
<el-form-item
label="报警类型"
prop="type"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
label="报警级别"
prop="grade"
:rules="[{ required: true, message: '报警级别不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.type"
placeholder="请选择报警类型"
@change="handleTypeChange">
v-model="dataForm.grade"
placeholder="请选择报警级别"
@change="$emit('update', dataForm)">
<el-option
v-for="opt in [
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
]"
v-for="opt in getDictDatas(DICT_TYPE.EQU_ALARM_LEVEL)"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
@ -66,16 +47,45 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="报警级别"
prop="grade"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
label="参数列名"
prop="plcParamName"
:rules="[{ required: true, message: '参数列名不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.plcParamName"
placeholder="请输入参数列名"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="报警内容"
prop="alarmContent"
:rules="[{ required: true, message: '报警内容不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.alarmContent"
placeholder="请输入报警内容"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="报警类型"
prop="type"
:rules="[{ required: true, message: '报警类型不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.grade"
placeholder="请选择报警级别"
@change="$emit('update', dataForm)">
v-model="dataForm.type"
placeholder="请选择报警类型"
@change="handleTypeChange">
<el-option
v-for="opt in getDictDatas(DICT_TYPE.EQU_ALARM_LEVEL)"
v-for="opt in [
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
]"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
@ -96,32 +106,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="参数列名"
prop="plcParamName"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.plcParamName"
placeholder="请输入参数列名"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="报警内容"
prop="alarmContent"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.alarmContent"
placeholder="请输入报警内容"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>

View File

@ -38,7 +38,7 @@
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
<DialogForm v-if="open" ref="form" :dataForm="form" :rows="rows" />
<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" />
</base-dialog>
<!-- 抽屉 详情 -->
@ -224,7 +224,7 @@ export default {
bind: {
filterable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
},
],
[
@ -238,7 +238,7 @@ export default {
bind: {
filterable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '报警分组不能为空', trigger: 'blur' }],
},
],
],
@ -269,7 +269,7 @@ export default {
input: true,
label: '设备分组名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备分组名称不能为空', trigger: 'blur' }],
// bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode...
// }

View File

@ -224,7 +224,7 @@ export default {
prop: 'plcId',
labelKey: `plcTableName`,
url: '/base/equipment-plc/listAll',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '关联表名不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
@ -236,7 +236,7 @@ export default {
label: '设备',
prop: 'equipmentId',
url: '/base/core-equipment/page?pageNo=1&pageSize=99',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
@ -262,7 +262,7 @@ export default {
input: true,
label: '设备名',
prop: 'equipmentName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名不能为空', trigger: 'blur' }],
// bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode...
// }

View File

@ -184,7 +184,7 @@ export default {
input: true,
label: '关联表名',
prop: 'plcTableName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '关联表名不能为空', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }
@ -194,7 +194,7 @@ export default {
label: '编码',
prop: 'code',
url: '/base/equipment-group/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
},
],
[
@ -202,7 +202,7 @@ export default {
input: true,
label: '标识',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '标识不能为空', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }

View File

@ -29,27 +29,62 @@
<section v-for="(section, index) in sections" :key="section.key">
<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle>
<div class="form-part" v-if="section.key == 'base'">
<div
class="form-part"
v-if="section.key == 'base'"
style="border-bottom: 1px solid #dfdfdf; margin-bottom: 24px">
<el-skeleton v-if="!showForm" animated />
<BaseInfoForm
<!-- <BaseInfoForm
key="drawer-dialog-form"
v-if="showForm"
ref="form"
:disabled="mode.includes('detail')"
v-model="form"
:rows="formRows" />
:rows="formRows" /> -->
<el-row style="margin-bottom: 24px">
<el-col :span="8">
<div
class="title"
style="font-weight: 700; font-size: 16px; margin: 8px 0">
设备名
</div>
<div class="value" style="font-size: 14px">
{{ form.equipmentName }}
</div>
</el-col>
<el-col :span="8">
<div
class="title"
style="font-weight: 700; font-size: 16px; margin: 8px 0">
关联表名
</div>
<div class="value" style="font-size: 14px">
{{ form.plcTableName }}
</div>
</el-col>
</el-row>
</div>
<div v-if="section.key == 'attrs'" style="margin-top: 12px">
<div
v-if="section.key == 'attrs'"
style="position: relative; margin-top: 12px">
<!-- v-if="!mode.includes('detail')" -->
<div style="position: absolute; top: -40px; right: 0">
<el-button @click="handleAddAttr" type="text">
<i class="el-icon-plus"></i>
添加属性
</el-button>
</div>
<base-table
v-loading="attrListLoading"
:table-props="section.props"
:page="attrQuery?.params.pageNo || 1"
:limit="attrQuery?.params.pageSize || 10"
:table-data="list"
:add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr"
@emitFun="handleEmitFun">
<!-- :add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr" -->
<method-btn
v-if="section.tableBtn"
slot="handleBtn"
@ -71,17 +106,10 @@
<div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button>
<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
<!-- <el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
编辑
</el-button>
<el-button v-else type="primary" @click="handleCancel">确定</el-button>
<!-- sections的第二项必须是 属性列表 -->
<!-- <el-button
v-if="sections[1].allowAdd"
type="primary"
@click="handleAddAttr">
添加属性
</el-button> -->
<!-- <el-button v-else type="primary" @click="handleCancel">确定</el-button> -->
</div>
</div>
@ -96,10 +124,10 @@
@close="closeAttrForm"
@cancel="closeAttrForm"
@confirm="submitAttrForm">
<!-- :disabled="mode.includes('detail')" -->
<DialogForm
v-if="attrFormVisible"
ref="attrForm"
:disabled="mode.includes('detail')"
v-model="attrForm"
:rows="attrRows" />
</base-dialog>
@ -166,13 +194,13 @@ export default {
input: true,
label: '参数列名',
prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '参数列名不能为空', trigger: 'blur' }],
},
{
input: true,
label: '参数名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '参数名称不能为空', trigger: 'blur' }],
},
],
[
@ -181,7 +209,6 @@ export default {
label: '单位',
prop: 'unit',
options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT),
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
{
switch: true,
@ -203,7 +230,7 @@ export default {
{ label: '工艺参数', value: 2 },
{ label: '报警参数', value: 3 },
],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备参数类型不能为空', trigger: 'blur' }],
},
{
select: true,
@ -214,9 +241,8 @@ export default {
{ label: '出片数量', value: 2 },
{ label: '破损数量', value: 3 },
{ label: '无类型', value: 4 },
],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '生产参数类型不能为空', trigger: 'blur' }],
},
],
[
@ -248,7 +274,6 @@ export default {
transform: (val) => Number(val),
},
],
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
[
@ -256,13 +281,11 @@ export default {
input: true,
label: '标准值',
prop: 'defaultValue',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
{
input: true,
label: '描述',
prop: 'description',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
[
@ -270,7 +293,6 @@ export default {
input: true,
label: '备注',
prop: 'remark',
// rules: [{ required: true, message: '', trigger: 'blur' }],
},
],
],

View File

@ -1,187 +0,0 @@
<!--
filename: dialogForm.vue
author: liubin
date: 2023-09-11 15:55:13
description: DialogForm for equipmentBindSection only
-->
<template>
<el-form
ref="form"
:model="dataForm"
label-width="100px"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.code"
@change="$emit('update', dataForm)"
placeholder="请输入工段排序" />
</el-form-item>
<!--
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.code"
placeholder="请选择产线"
@change="handleProductlineChange">
<el-option
v-for="opt in productionLineList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item> -->
</el-col>
<el-col :span="12">
<el-form-item
label="报警类型"
prop="type"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-select
v-model="dataForm.type"
:disabled="disabled"
placeholder="请选择报警类型"
@change="$emit('update', dataForm)">
<el-option
v-for="opt in [
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
]"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="报警级别"
prop="grade"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.grade"
placeholder="请选择报警级别"
@change="$emit('update', dataForm)">
<el-option
v-for="opt in getDictDatas(DICT_TYPE.EQU_ALARM_LEVEL)"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
v-if="+dataForm.type == 1"
label="设备报警编码"
prop="alarmCode">
<el-input
:disabled="disabled"
v-model="dataForm.alarmCode"
@change="$emit('update', dataForm)"
placeholder="请输入设备报警编码" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="参数列名"
prop="plcParamName"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.plcParamName"
placeholder="请输入参数列名"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="报警内容"
prop="alarmContent"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-input
:disabled="disabled"
v-model="dataForm.alarmContent"
placeholder="请输入报警内容"
@change="$emit('update', dataForm)"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
export default {
name: 'DialogForm',
model: {
prop: 'dataForm',
event: 'update',
},
emits: ['update'],
components: {},
props: {
dataForm: {
type: Object,
default: () => ({}),
},
disabled: {
type: Boolean,
default: false,
},
},
data() {
return {
formLoading: true,
};
},
mounted() {
this.getCode('/base/equipment-group-alarm/getCode').then((code) => {
this.formLoading = false;
this.$emit('update', {
...this.dataForm,
code,
});
});
},
methods: {
/** 模拟透传 ref */
validate(cb) {
return this.$refs.form.validate(cb);
},
resetFields(args) {
return this.$refs.form.resetFields(args);
},
async handleProductlineChange(id) {
await this.getWorksectionList(id);
this.dataForm.workshopSectionId = null;
this.$emit('update', this.dataForm);
},
async getCode(url) {
const response = await this.$axios(url);
return response.data;
},
},
};
</script>
<style scoped lang="scss">
.el-date-editor,
.el-select {
width: 100%;
}
</style>

View File

@ -1,361 +0,0 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<SearchBar
:formConfigs="searchBarFormConfig"
ref="search-bar"
@headBtnClick="handleSearchBarBtnClick" />
<!-- 列表 -->
<base-table
:table-props="tableProps"
:page="queryParams.pageNo"
:limit="queryParams.pageSize"
:table-data="list"
@emitFun="handleEmitFun">
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="120"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
<!-- 分页组件 -->
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 对话框(添加 / 修改) -->
<base-dialog
:dialogTitle="title"
:dialogVisible="open"
width="736px"
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" />
</base-dialog>
</div>
</template>
<script>
import {
createEquipmentGroupAlarm,
updateEquipmentGroupAlarm,
deleteEquipmentGroupAlarm,
getEquipmentGroupAlarm,
getEquipmentGroupAlarmPage,
exportEquipmentGroupAlarmExcel,
} from '@/api/base/equipmentGroupAlarm';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import moment from 'moment';
import { publicFormatter } from '@/utils/dict';
import DialogForm from './dialogForm.vue';
export default {
name: 'EquipmentGroupAlarm',
components: { DialogForm },
mixins: [basicPageMixin],
data() {
return {
searchBarKeys: [''],
tableBtn: [
this.$auth.hasPermi('base:equipment-group-alarm:update')
? {
type: 'edit',
btnName: '修改',
}
: undefined,
this.$auth.hasPermi('base:equipment-group-alarm:delete')
? {
type: 'delete',
btnName: '删除',
}
: undefined,
].filter((v) => v),
tableProps: [
{
prop: 'createTime',
label: '添加时间',
fixed: true,
width: 180,
filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
},
{ width: 240, prop: 'code', label: '报警编码' },
{
prop: 'type',
label: '报警类型',
filter: (val) =>
val != null ? ['-', '字符型', '布尔型', '-'][val] : '-',
},
{
prop: 'grade',
label: '报警级别',
filter: publicFormatter(this.DICT_TYPE.EQU_ALARM_LEVEL),
},
{ prop: 'alarmCode', label: '设备报警编码' },
{ prop: 'plcParamName', label: '参数列名' },
{ prop: 'alarmContent', label: '报警内容' },
],
searchBarFormConfig: [
{
type: 'input',
label: '设备分组编码',
width: '220',
placeholder: '/',
param: 'equipmentGroupCode',
defaultSelect: null,
disabled: true,
},
{
type: 'input',
label: '设备分组名称',
placeholder: '/',
param: 'equipmentGroupName',
defaultSelect: null,
disabled: true,
},
{
type: this.$auth.hasPermi('base:equipment-group-alarm:create')
? 'button'
: '',
btnName: '新增',
name: 'add',
plain: true,
color: 'success',
},
],
rows: [
[
{
input: true,
label: '报警编码', //
prop: 'code',
url: '/base/equipment-group-alarm/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
},
{
select: true,
label: '报警类型', //
prop: 'type',
options: [
{ label: '布尔型', value: 2 },
{ label: '字符型', value: 1 },
],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
},
],
[
{
select: true,
label: '报警级别', //
prop: 'grade',
options: this.getDictDatas(this.DICT_TYPE.EQU_ALARM_LEVEL),
},
{
input: true,
label: '设备报警编码', //
prop: 'alarmCode',
},
],
[
{
input: true,
label: '参数列名', //
prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
},
{
input: true,
label: '报警内容',
prop: 'alarmContent',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
},
],
],
//
open: false,
//
queryParams: {
pageNo: 1,
pageSize: 10,
equipmentGroupId: null,
},
//
form: {
id: null,
equipmentGroupId: null,
code: null,
type: null,
grade: null,
alarmCode: null,
alarmContent: null,
plcParamName: null,
},
// //
// rules: {
// equipmentGroupId: [{ required: true, message: "IDbase_equipment_group", trigger: "blur" }],
// type: [{ required: true, message: ":1.2.", trigger: "change" }],
// alarmContent: [{ required: true, message: " ", trigger: "blur" }],
// plcParamName: [{ required: true, message: "plc_param_name", trigger: "blur" }],
// }
};
},
// watch: {
// $route(value) {
// console.log('new route info', value)
// }
// },
// created() {
// this.getList();
// },
activated() {
//
const { equipmentGroupName, equipmentGroupCode, equipmentGroupId } =
this.$route.params;
this.setSearchBarFormValue('equipmentGroupName', equipmentGroupName);
this.setSearchBarFormValue('equipmentGroupCode', equipmentGroupCode);
this.queryParams.equipmentGroupId = equipmentGroupId;
// if (!equipmentGroupId) this.getList(); //
this.getList();
},
deactivated() {
this.setSearchBarFormValue('equipmentGroupName', null);
this.setSearchBarFormValue('equipmentGroupCode', null);
this.queryParams.equipmentGroupId = null;
},
methods: {
/** 设置 searchBarForm 的默认值 - 用得比较少 */
setSearchBarFormValue(param, value) {
this.searchBarFormConfig.forEach((config) => {
if (config.param == param) {
config.defaultSelect = value;
}
});
},
/** 查询列表 */
getList() {
this.loading = true;
//
getEquipmentGroupAlarmPage(this.queryParams).then((response) => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: null,
equipmentGroupId: null,
code: null,
type: null,
grade: null,
alarmCode: null,
alarmContent: null,
plcParamName: null,
};
this.resetForm('form');
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm');
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
if (this.queryParams.equipmentGroupId == null)
return this.$message.error('没有检测到设备分组信息');
this.reset();
this.open = true;
this.title = '添加设备分组报警明细';
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getEquipmentGroupAlarm(id).then((response) => {
this.form = response.data;
this.open = true;
this.title = '修改设备分组报警明细';
});
},
/** 提交按钮 */
submitForm() {
this.$refs['form'].validate((valid) => {
if (!valid) {
return;
}
//
if (this.form.id != null) {
updateEquipmentGroupAlarm({
...this.form,
equipmentGroupId: this.queryParams.equipmentGroupId,
}).then((response) => {
this.$modal.msgSuccess('修改成功');
this.open = false;
this.getList();
});
return;
}
//
createEquipmentGroupAlarm({
...this.form,
equipmentGroupId: this.queryParams.equipmentGroupId,
}).then((response) => {
this.$modal.msgSuccess('新增成功');
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除该报警?')
.then(function () {
return deleteEquipmentGroupAlarm(id);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = { ...this.queryParams };
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal
.confirm('是否确认导出所有设备分组报警明细数据项?')
.then(() => {
this.exportLoading = true;
return exportEquipmentGroupAlarmExcel(params);
})
.then((response) => {
this.$download.excel(response, '设备分组报警明细.xls');
this.exportLoading = false;
})
.catch(() => {});
},
},
};
</script>

View File

@ -127,7 +127,7 @@ export default {
label: '巡检内容编号',
prop: 'code',
url: '/base/equipment-check/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '巡检内容编号不能为空', trigger: 'blur' }],
},
],
[
@ -135,7 +135,7 @@ export default {
input: true,
label: '巡检项目',
prop: 'program',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '巡检项目不能为空', trigger: 'blur' }],
},
],
[
@ -143,7 +143,7 @@ export default {
input: true,
label: '巡检内容',
prop: 'content',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '巡检内容不能为空', trigger: 'blur' }],
},
],
[

View File

@ -49,7 +49,8 @@
filterable
:disabled="isdetail"
style="width: 100%"
placeholder="请选择巡检配置">
placeholder="请选择巡检配置"
@change="setInspectionContet">
<el-option
v-for="dict in configList"
:key="dict.id"
@ -107,20 +108,15 @@
</el-button>
<el-button v-else type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<!-- <attr-add
v-if="addOrUpdateVisible"
ref="addOrUpdate"
:config-id="dataForm.id"
@refreshDataList="getList" /> -->
</el-drawer>
</template>
<script>
import SmallTitle from '../../../base/alarm/Record/SmallTitle.vue';
import { createCheckLog, updateCheckLog, getcheckAllList, getcheckConfigByEqList, getEqCheckLog } from '@/api/equipment/base/inspection/record'
import { createCheckLog, updateCheckLog, getcheckConfigByEqList, getEqCheckLog } from '@/api/equipment/base/inspection/record'
import { getEquipmentAll } from '@/api/base/equipment'
import Editor from "@/components/Editor";
import { getCheckDetPage } from "@/api/equipment/base/inspection/settings";
// import FileUpload from "@/components/FileUpload";
// import { parseTime } from '../../../../core/mixins/code-filter';
// import attrAdd from './attr-add';
@ -176,7 +172,8 @@ export default {
equipmentId: undefined,
actualTime: undefined,
responsible: undefined,
description: undefined
description: undefined,
files: []
},
list: [],
eqList: [],
@ -224,8 +221,20 @@ export default {
resetFields(args) {
return this.$refs.dataForm.resetFields(args);
},
initData() {
this.dataForm = {
id: undefined,
configId: undefined,
equipmentId: undefined,
actualTime: undefined,
responsible: undefined,
description: undefined,
files: []
}
this.list = []
},
init(id, isdetail) {
// this.initData();
this.initData();
this.isdetail = isdetail || false;
this.dataForm.id = id || undefined;
this.visible = true;
@ -247,39 +256,12 @@ export default {
});
this.formLoading = false
},
handleClick(raw) {
if (raw.type === 'delete') {
this.$confirm(
`确定要删除名称为${raw.data.sparePartName}的数据?`,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
deleteConfigDet(raw.data.id).then(({ data }) => {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.getList();
},
});
});
})
.catch(() => {});
} else {
this.addNew(raw.data.id);
}
},
getList() {
//
getcheckAllList({
...this.listQuery,
configId: this.dataForm.id,
setInspectionContet() {
//
getCheckDetPage({
pageNo: 1,
pageSize: 99,
configId: this.dataForm.configId,
}).then((response) => {
this.list = response.data.list;
this.listQuery.total = response.data.total;
@ -308,6 +290,8 @@ export default {
})
})
this.dataForm.files = arry
} else {
this.dataForm.files = []
}
//

View File

@ -57,7 +57,7 @@
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import addRecord from './addRecord.vue';
import { exportCheckLogExcel } from '@/api/equipment/base/inspection/record'
import { exportCheckLogExcel, deleteEqCheckLog } from '@/api/equipment/base/inspection/record'
import { parseTime } from '../../../../core/mixins/code-filter';
const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
@ -166,7 +166,7 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
},
],
[
@ -181,8 +181,7 @@ export default {
clearable: true,
multiple: true,
},
options: [{ label: 'test', value: 'test' }],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '维修工不能为空', trigger: 'blur' }],
},
{
input: true,
@ -195,7 +194,7 @@ export default {
datetime: true,
label: '故障发生时间',
prop: 'faultTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '故障发生时间不能为空', trigger: 'blur' }],
bind: {
format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp',
@ -349,9 +348,9 @@ export default {
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除记录"' + row.name + '"?')
.confirm('是否删除设备巡检记录配置名称为"' + row.configName + '"的数据项?')
.then(function () {
return this.delete({ id });
return deleteEqCheckLog(id);
})
.then(() => {
this.getList();

View File

@ -152,14 +152,14 @@ export default {
input: true,
label: '配置名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '配置名称不能为空', trigger: 'blur' }],
},
{
input: true,
label: '配置编码',
prop: 'code',
url: '/base/equipment-check-config/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '配置编码不能为空', trigger: 'blur' }],
},
],
[
@ -168,7 +168,7 @@ export default {
label: '设备名称',
prop: 'equipmentId',
url: '/base/core-equipment/listAll',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
},
{
input: true,

View File

@ -169,14 +169,14 @@ export default {
input: true,
label: '计划名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '计划名称不能为空', trigger: 'blur' }],
},
{
input: true,
label: '计划编号',
prop: 'code',
url: '/base/equipment-maintain-plan/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '计划编号不能为空', trigger: 'blur' }],
},
],
[
@ -185,7 +185,7 @@ export default {
label: '设备名称',
prop: 'equipmentId',
url: '/base/core-equipment/listAll',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
},
{
select: true,

View File

@ -53,6 +53,7 @@
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import Editor from '@/components/Editor';
import { deleteEqMaintainLog } from '@/api/equipment/base/maintain/record';
const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
@ -63,7 +64,6 @@ export default {
data() {
return {
searchBarKeys: [
'maintainPlanId',
'maintainPlanId',
'startTime',
'relatePlan',
@ -131,7 +131,7 @@ export default {
label: '时间段',
dateType: 'daterange', // datetimerange
format: 'yyyy-MM-dd',
valueFormat: 'timestamp',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
@ -186,10 +186,9 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '保养设备不能为空', trigger: 'blur' }],
},
{
// TODO:
select: true,
label: '保养人员',
prop: 'maintainWorker',
@ -200,7 +199,7 @@ export default {
clearable: true,
multiple: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '保养人员不能为空', trigger: 'blur' }],
},
{
input: true,
@ -217,15 +216,14 @@ export default {
'active-value': 1,
'inactive-value': 2,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '是否计划保养不能为空', trigger: 'blur' }],
},
{},
{
// TODO:
select: true,
label: '所属计划',
prop: 'maintainPlanId',
url: '',
url: '/base/equipment-maintain-plan/page',
bind: {
filterable: true,
clearable: true,
@ -237,7 +235,7 @@ export default {
datetime: true,
label: '开始时间',
prop: 'startTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
bind: {
format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp',
@ -249,7 +247,7 @@ export default {
datetime: true,
label: '结束时间',
prop: 'endTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
bind: {
format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp',
@ -271,10 +269,16 @@ export default {
prop: 'files',
},
],
// TODO:
[{ label: '保养描述', prop: 'maintenanceDes', subcomponent: Editor, bind: {
'min-height': 192
} }],
[
{
label: '保养描述',
prop: 'maintenanceDes',
subcomponent: Editor,
bind: {
'min-height': 192,
},
},
],
[{ input: true, label: '备注', prop: 'remark' }],
],
//
@ -292,20 +296,26 @@ export default {
//
form: {},
basePath: '/base/equipment-maintain-log',
mode: null
mode: null,
};
},
created() {
this.initSearchBar();
if (this.$route.query) {
this.queryParams.equipmentId = this.$route.query?.equipmentId ?? undefined
this.queryParams.maintainPlanId = this.$route.query?.maintainPlanId ?? undefined
this.queryParams.relatePlan = this.$route.query?.relatePlan ?? undefined
this.queryParams.startTime = this.$route.query?.createTime ?? undefined
this.searchBarFormConfig[0].defaultSelect = this.$route.query.equipmentId ?? undefined
this.searchBarFormConfig[1].defaultSelect = Number(this.$route.query.maintainPlanId) ?? undefined
this.searchBarFormConfig[2].defaultSelect = this.$route.query?.createTime ?? undefined
this.searchBarFormConfig[3].defaultSelect = Number(this.$route.query.relatePlan) ?? undefined
this.queryParams.equipmentId =
this.$route.query?.equipmentId ?? undefined;
this.queryParams.maintainPlanId =
this.$route.query?.maintainPlanId ?? undefined;
this.queryParams.relatePlan = this.$route.query?.relatePlan ?? undefined;
this.queryParams.startTime = this.$route.query?.createTime ?? undefined;
this.searchBarFormConfig[0].defaultSelect =
this.$route.query.equipmentId ?? undefined;
this.searchBarFormConfig[1].defaultSelect =
Number(this.$route.query.maintainPlanId) ?? undefined;
this.searchBarFormConfig[2].defaultSelect =
this.$route.query?.createTime ?? undefined;
this.searchBarFormConfig[3].defaultSelect =
Number(this.$route.query.relatePlan) ?? undefined;
}
this.getList();
},
@ -398,7 +408,7 @@ export default {
this.info({ id }).then((response) => {
this.form = response.data;
this.open = true;
this.form.maintainWorker = this.form.maintainWorker.split(',')
this.form.maintainWorker = this.form.maintainWorker.split(',');
this.title = '修改保养记录';
});
},
@ -408,7 +418,7 @@ export default {
if (!valid) {
return;
}
this.form.maintainWorker = this.form.maintainWorker.join(',')
this.form.maintainWorker = this.form.maintainWorker.join(',');
//
if (this.form.id != null) {
this.put(this.form).then((response) => {
@ -430,9 +440,11 @@ export default {
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除记录"' + row.name + '"?')
.confirm(
'是否删除设备保养单号为"' + row.maintainOrderNumber + '"的数据项?'
)
.then(function () {
return this.delete({ id });
return deleteEqMaintainLog(id);
})
.then(() => {
this.getList();
@ -442,7 +454,7 @@ export default {
},
handleDetail({ id }) {
this.reset();
this.mode = 'detail'
this.mode = 'detail';
this.info({ id }).then((response) => {
this.form = response.data;
this.open = true;

View File

@ -19,6 +19,7 @@
ref="form"
:model="dataForm"
label-width="100px"
label-position="top"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="8">
@ -62,7 +63,7 @@
<el-form-item
label="维修开始时间"
prop="maintenanceStartTime"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="dataForm.maintenanceStartTime"
type="datetime"
@ -76,7 +77,7 @@
<el-form-item
label="维修结束时间"
prop="maintenanceFinishTime"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="dataForm.maintenanceFinishTime"
type="datetime"
@ -90,7 +91,7 @@
<el-form-item
label="维修方式"
prop="repairMode"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '维修方式不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.repairMode"
@ -126,7 +127,7 @@
<el-form-item
label="故障明细"
prop="faultDetail"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '故障明细不能为空', trigger: 'blur' }]">
<!-- // -->
<editor v-model="dataForm.faultDetail" :read-only="disabled" :min-height="380"/>
</el-form-item>
@ -213,7 +214,7 @@ export default {
this.visible = false;
},
goEdit() {
this.isdetail = false;
this.disabled = false;
},
/** 模拟透传 ref */
validate(cb) {

View File

@ -56,6 +56,7 @@
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import CustomDialogForm from './CustomDialogForm.vue';
import { deleteRepair } from '@/api/equipment/base/repair'
const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
@ -168,7 +169,7 @@ export default {
input: true,
label: '维修单号',
prop: 'repairOrderNumber',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '维修单号不能为空', trigger: 'blur' }],
},
{
select: true,
@ -179,7 +180,7 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
},
],
[
@ -197,7 +198,7 @@ export default {
// multiple: true,
},
// options: [{ label: 'test', value: 'test' }],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '维修工不能为空', trigger: 'blur' }],
},
{
input: true,
@ -210,7 +211,7 @@ export default {
datetime: true,
label: '故障发生时间',
prop: 'faultTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '故障发生时间不能为空', trigger: 'blur' }],
bind: {
format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp',
@ -239,7 +240,7 @@ export default {
//
form: {},
basePath: '/base/equipment-repair-log',
mode: null,
mode: null
};
},
created() {
@ -375,9 +376,9 @@ export default {
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除记录"' + row.name + '"?')
.then(function () {
return this.delete({ id });
.confirm('是否确认删除维修单号为"' + row.repairOrderNumber + '"的数据?')
.then(() => {
return deleteRepair(id);
})
.then(() => {
this.getList();
@ -411,6 +412,7 @@ export default {
},
//
handleTableBtnClick({ data, type }) {
console.log('nihc', data, type)
switch (type) {
case 'edit':
this.handleUpdate(data);

View File

@ -188,6 +188,7 @@ export default {
getSparePartConfig(this.dataForm.id).then(response => {
this.formLoading = false
this.dataForm = response.data;
this.getList()
});
} else {
// if (this.urlOptions.isGetCode) {
@ -257,7 +258,9 @@ export default {
padding: 18px;
}
.action_btn {
float: right;
/* float: right; */
display: flex;
justify-content: right;
margin: 5px 15px;
font-size: 14px;
}

View File

@ -44,7 +44,7 @@
<script>
import {
createConfigDet,
getSparePartList
getSparePartPage
} from '@/api/equipment/base/spare-parts/config';
export default {
@ -72,8 +72,12 @@ export default {
},
methods: {
async getDict() {
const res = await getSparePartList()
this.partList = res.data
await getSparePartPage({
pageNo: 1,
pageSize: 99
}).then(res => {
this.partList = res.data.list;
})
},
init(id) {
this.dataForm.id = id || '';

View File

@ -59,6 +59,7 @@ import basicPageMixin from '@/mixins/lb/basicPageMixin';
import { publicFormatter } from '@/utils/dict';
import Editor from '@/components/Editor';
import addSparts from './addSparts.vue';
import { deleteConfig } from '@/api/equipment/base/spare-parts/config'
const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
@ -160,7 +161,7 @@ export default {
input: true,
label: '配置名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '配置名称不能为空', trigger: 'blur' }],
},
],
[
@ -173,7 +174,7 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
},
],
[
@ -282,7 +283,7 @@ export default {
const id = row.id;
this.info({ id }).then((response) => {
this.form = response.data;
this.form.responsible = this.form.responsible.split(',')
this.form.responsible = this.form.responsible ? this.form.responsible.split(',') : undefined
this.open = true;
this.title = '修改备品备件配置';
});
@ -315,9 +316,9 @@ export default {
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除记录"' + row.name + '"?')
.confirm('是否确认删除配置名为"' + row.name + '"的数据?')
.then(function () {
return this.delete({ id });
return deleteConfig(id);
})
.then(() => {
this.getList();

View File

@ -153,7 +153,7 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '供应商不能为空', trigger: 'blur' }],
},
],
[
@ -196,21 +196,6 @@ export default {
prop: 'remark',
},
],
// [
// {
// datetime: true,
// label: '',
// prop: 'faultTime',
// rules: [{ required: true, message: '', trigger: 'blur' }],
// bind: {
// format: 'yyyy-MM-dd HH:mm:ss',
// 'value-format': 'timestamp',
// // 'value-format': 'yyyy-MM-dd HH:mm:ss',
// clearable: true,
// },
// },
// ],
],
//
open: false,

View File

@ -211,7 +211,7 @@ export default {
input: true,
label: '配置名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '配置名称不能为空', trigger: 'blur' }],
},
],
[
@ -224,7 +224,7 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
},
],
[

View File

@ -328,7 +328,7 @@ export default {
this.initState();
const { code, data } = await this.$axios({
url: '/analysis/equipment-analysis/quantity',
url: '/monitoring/equipment-monitor/quantity-series',
method: 'get',
params: this.queryParams,
});

View File

@ -210,7 +210,7 @@ export default {
async getList() {
const { code, data } = await this.$axios({
url: '/analysis/equipment-analysis/status',
url: '/monitoring/equipment-monitor/status-series',
method: 'get',
params: this.queryParams,
});

View File

@ -22,7 +22,9 @@
:line="item.lineName"
:desc="item.remark"
:isActive="item.enabled"
@edit="handleUpdate" />
@edit="handleUpdate"
@copy="handleCopy"
@delete="handleDelete" />
</section>
<base-dialog
@ -58,6 +60,12 @@ const ProcessItem = {
handleEdit() {
this.$emit('edit', this.id);
},
handleCopy() {
this.$emit('copy', this.id);
},
handleDelete() {
this.$emit('delete', this.id);
},
handleViewDetail(e) {
this.$router.push({
name: 'ProcessFlowView',
@ -117,12 +125,18 @@ const ProcessItem = {
<el-col
span={8}
style="text-align: center; border-right: 1px solid #0001">
<el-button type="text" style="color: #0007; line-height: 1.75">
<el-button
type="text"
style="color: #0007; line-height: 1.75"
onClick={this.handleCopy}>
复制
</el-button>
</el-col>
<el-col span={8} style="text-align: center;">
<el-button type="text" style="color: #0007; line-height: 1.75">
<el-button
type="text"
style="color: #0007; line-height: 1.75"
onClick={this.handleDelete}>
删除
</el-button>
</el-col>
@ -166,7 +180,7 @@ export default {
input: true,
label: '工艺名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '工艺名称不能为空', trigger: 'blur' }],
// bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode...
// }
@ -183,6 +197,7 @@ export default {
select: true,
label: '产线',
prop: 'lineId',
rules: [{ required: true, message: '产线不能为空', trigger: 'blur' }],
// cache: 'processFlow::lineList',
url: '/base/core-production-line/listAll',
bind: {
@ -203,8 +218,9 @@ export default {
[
{
textarea: true,
label: '功能描述',
label: '工艺描述',
prop: 'remark',
rules: [{ required: true, message: '工艺描述不能为空', trigger: 'blur' }],
},
],
],
@ -255,6 +271,43 @@ export default {
this.open = true;
this.title = '修改工艺';
},
async handleCopy(id) {
this.$confirm('确认拷贝操作?', '提示', {
confirmButtonText: '确 认',
cancelButtonText: '取 消',
})
.then(async () => {
const { code } = await this.http(
'/extend/process-flow/copy',
'post',
{
id,
}
);
if (code == 0) {
this.$modal.msgSuccess('复制成功');
this.getList();
}
})
.catch(() => console.info('操作取消'));
},
async handleDelete(id) {
this.$confirm('确认删除这个工艺吗?', '提示', {
confirmButtonText: '确 认',
cancelButtonText: '取 消',
})
.then(async () => {
const { code } = await this.http(
'/extend/process-flow/delete?id=' + id,
'delete'
);
if (code == 0) {
this.$modal.msgSuccess('删除成功');
this.getList();
}
})
.catch(() => console.info('操作取消'));
},
submitForm() {
this.$refs['form'].validate((valid) => {
if (!valid) {

View File

@ -0,0 +1,114 @@
<!--
filename: BomSelection.vue
author: liubin
date: 2023-11-20 13:23:36
description:
-->
<template>
<div class="bom-selection">
<el-checkbox
v-for="item in list__inner"
:key="item.id + randomKey"
:label="item.name"
:disabled="item.disabled"
:checked="item.id === selected"
@change="(e) => handleChange(item, e)"
class="sl__body-item"></el-checkbox>
</div>
</template>
<script>
export default {
name: 'BomSelection',
components: {},
// model: {
// prop: 'selected',
// event: 'update',
// },
props: {
currentSelect: {
type: String,
default: null,
},
list: {
type: Array,
default: () => [],
},
equipmentId: {
type: String,
default: '',
},
},
data() {
return {
list__inner: [],
selected: null,
randomKey: Math.random(),
};
},
watch: {
list: {
handler(val) {
if (val) {
this.list__inner = val.map((item) => ({ ...item, disabled: false }));
}
},
deep: true,
immediate: true,
},
currentSelect: {
handler(val) {
this.selected = val;
this.randomKey = Math.random();
},
immediate: true,
},
},
methods: {
handleChange(bomItem, selected) {
this.list__inner = this.list__inner.map((item) => ({
...item,
disabled: selected ? item.id !== bomItem.id : false,
}));
if (selected) this.selected = null;
else this.clearSelected();
this.$emit('change', this.equipmentId, bomItem.id, selected);
this.$nextTick(() => {
this.$forceUpdate();
});
},
clearSelected() {
console.log('clearSelected');
this.selected = null;
this.randomKey = Math.random();
// this.$emit('update', null);
// this.$nextTick(() => {
// this.$forceUpdate();
// });
},
},
};
</script>
<style scoped lang="scss">
.bom-selection {
display: flex;
flex-direction: column;
gap: 6px;
padding: 6px;
}
.sl__body-item {
margin: 0;
padding: 3px 6px;
border-radius: 4px;
transition: background 0.3s ease-in-out;
&:hover {
background: #0001;
}
}
</style>

View File

@ -0,0 +1,264 @@
<!--
filename: BomSelector.vue
author: liubin
date: 2023-11-17 16:23:28
description:
-->
<template>
<div class="bom-selector">
<el-row>
<el-col :span="8">
<el-input
v-model="searchText"
placeholder="搜索"
clearable
style="margin-bottom: 12px; user-select: none">
<i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input>
</el-col>
</el-row>
<el-row style="border: 1px solid #ccc; display: flex">
<el-col :span="8">
<div class="select-list">
<div class="sl__header" style="background: #f3f4fb; padding: 12px">
<span style="">可分配设备</span>
<span>
{{ selectedEquipments.length }}/{{ filteredBomList.length }}
</span>
</div>
<div class="sl__body">
<div
class="sl__body-item"
v-for="eq in filteredBomList"
:key="eq.id + refreshKey">
<el-checkbox
:key="refreshKey"
:checked="selectedEquipments.includes(eq.id)"
@change="(e) => handleEquipmentChange(eq, e)"
class=""></el-checkbox>
<span
:key="'label' + refreshKey"
@click.stop="() => handleLoadDom(eq)">
{{ eq.name }}
</span>
</div>
</div>
</div>
</el-col>
<el-col :span="8" style="border-left: 1px solid #ccc">
<div class="select-list">
<div class="sl__header" style="background: #f3f4fb; padding: 12px">
<span style="">物料BOM</span>
</div>
<BomSelection
ref="materialsBomList"
:key="materialsBomList.equipmentId + 'materialsBomList'"
:list="materialsBomList"
:equipment-id="materialsBomList.equipmentId"
:current-select="currentSelectedMaterialBomId"
@change="handleMaterialBomChange" />
</div>
</el-col>
<el-col :span="8" style="border-left: 1px solid #ccc">
<div class="select-list">
<div class="sl__header" style="background: #f3f4fb; padding: 12px">
<span style="">参数BOM</span>
</div>
<BomSelection
ref="valuesBomList"
:key="valuesBomList.equipmentId + 'valuesBomList'"
:list="valuesBomList"
:equipment-id="valuesBomList.equipmentId"
:current-select="currentSelectedValueBomId"
@change="handleValueBomChange" />
</div>
</el-col>
</el-row>
</div>
</template>
;
<script>
import BomSelection from './BomSelection.vue';
export default {
name: 'BomSelector',
components: { BomSelection },
model: {
prop: 'value',
event: 'update',
},
props: {
bomList: {
type: Array,
default: () => [],
},
value: {
type: Array,
default: () => [],
},
},
data() {
return {
searchText: '',
selectedEquipments: [],
selected: [],
materialsBomList: [],
valuesBomList: [],
refreshKey: Math.random(),
currentSelectedMaterialBomId: null,
currentSelectedValueBomId: null,
};
},
watch: {
value: {
handler(val) {
console.log('value', val);
if (val) {
this.selectedEquipments = val.map((item) => item.equipmentId);
this.selected = val;
}
},
deep: true,
immediate: true,
},
},
computed: {
filteredBomList() {
return this.bomList.filter((item) => {
return item.name.includes(this.searchText);
});
},
},
methods: {
commit() {
this.$emit('update', this.selected);
},
handleLoadDom(eq) {
// dom
this.currentEquipment = eq.id;
this.materialsBomList = eq.materialsBom;
this.valuesBomList = eq.valuesBom;
// bom
if (this.selectedEquipments.includes(eq.id)) {
const selectedItem = this.selected.find(
(item) => item.equipmentId == eq.id
);
this.currentSelectedMaterialBomId =
selectedItem.equMaterialBomId ?? null;
this.currentSelectedValueBomId = selectedItem.equValueBomId ?? null;
}
},
handleEquipmentChange(eq, selected) {
this.currentEquipment = eq.id;
this.materialsBomList = eq.materialsBom;
this.valuesBomList = eq.valuesBom;
if (selected) {
this.selectedEquipments.push(eq.id);
this.selected.push({
equipmentId: eq.id,
equValueBomId: null,
equMaterialBomId: null,
});
// this.$emit('update', this.selected);
} else {
//
this.selectedEquipments = this.selectedEquipments.filter(
(id) => id !== eq.id
);
// this.$refs.materialsBomList.clearSelected();
// this.$refs.valuesBomList.clearSelected();
this.currentSelectedMaterialBomId = null;
this.currentSelectedValueBomId = null;
this.selected = this.selected.filter(
(item) => item.equipmentId !== eq.id
);
// this.$emit('update', this.selected);
}
},
handleMaterialBomChange(equipmentId, bomId, selected) {
const selectedItem = this.selected.find(
(item) => item.equipmentId == equipmentId
);
if (selected && !selectedItem) {
//
this.selectedEquipments.push(equipmentId);
this.selected.push({
equipmentId,
equValueBomId: null,
equMaterialBomId: bomId,
});
// ''
this.refreshKey = Math.random();
// this.$emit('update', this.selected);
return;
}
selectedItem && (selectedItem.equMaterialBomId = selected ? bomId : null);
this.currentSelectedMaterialBomId = selected ? bomId : null;
// this.$emit('update', this.selected);
},
handleValueBomChange(equipmentId, bomId, selected) {
const selectedItem = this.selected.find(
(item) => item.equipmentId == equipmentId
);
if (selected && !selectedItem) {
//
this.selectedEquipments.push(equipmentId);
this.selected.push({
equipmentId,
equValueBomId: bomId,
equMaterialBomId: null,
});
this.refreshKey = Math.random();
// this.$emit('update', this.selected);
return;
}
selectedItem && (selectedItem.equValueBomId = selected ? bomId : null);
this.currentSelectedValueBomId = selected ? bomId : null;
// this.$emit('update', this.selected);
},
},
};
</script>
<style scoped lang="scss">
.bom-selector {
min-height: 200px;
}
.sl__body {
display: flex;
flex-direction: column;
gap: 6px;
padding: 6px;
}
.sl__body-item {
margin: 0;
padding: 3px 6px;
border-radius: 4px;
cursor: pointer;
transition: background 0.3s ease-in-out;
display: flex;
align-items: center;
gap: 8px;
> span {
flex: 1;
}
&:hover {
background: #0001;
}
}
.sl__header {
border-bottom: 1px solid #ccc;
}
</style>

View File

@ -9,58 +9,102 @@
<section class="process-bom">
<SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" />
<div class="btns" style="
<div
class="btns"
style="
text-align: right;
position: absolute;
top: 20px;
right: 20px;
display: flex;
">
<el-button type="primary" plain :disabled="currentDet == null" class="btn-create" icon="el-icon-plus">
<el-button
type="primary"
plain
:disabled="currentDet == null"
class="btn-create"
@click="handleAddEquipment"
icon="el-icon-plus">
分配设备
</el-button>
<el-input icon="el-icon-search" placeholder="搜索" v-model="searchText" style="margin-left: 20px">
<el-input
icon="el-icon-search"
placeholder="搜索"
v-model="searchText"
:disabled="currentDet == null"
@change="handleSearchTextChange"
clearable
style="margin-left: 20px">
<i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input>
</div>
<!-- 列表 -->
<base-table :table-props="tableProps" :page="queryParams.pageNo" :limit="queryParams.pageSize" :table-data="list"
<base-table
:table-props="tableProps"
:page="queryParams.pageNo"
:limit="queryParams.pageSize"
:table-data="list"
@emitFun="handleEmitFun">
<method-btn v-if="tableBtn.length" slot="handleBtn" label="操作" :width="120" :method-list="tableBtn"
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="120"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" />
<base-dialog
dialogTitle="选择设备"
:dialogVisible="open"
width="45%"
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
<!-- <CustomTransfer /> -->
<BomSelector
ref="bomSelector"
v-if="open"
:bom-list="bomList"
:value="selectedBoms"
@update="selectedBoms = $event" />
</base-dialog>
</section>
</template>
<script>
import BomSelector from './BomSelector.vue';
export default {
name: 'ProcessBom',
components: {},
components: { BomSelector },
props: {
currentDet: {
type: Object,
default: null
}
default: null,
},
},
data() {
return {
open: false,
eqList: [],
bomList: [],
finalList: [],
choosedEquipments: [],
searchBarFormConfig: [{ label: '工序下设备' }],
tableProps: [
// {
// prop: 'createTime',
// label: '',
// fixed: true,
// width: 180,
// filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
// },
{ prop: 'name', label: '设备名称' },
{ prop: 'code', label: '物料BOM' },
{ prop: 'remark', label: '参数BOM' },
{ prop: 'equName', label: '设备名称' },
{ prop: 'materialName', label: '物料BOM' },
{ prop: 'valueName', label: '参数BOM' },
],
list: [],
total: 0,
@ -68,13 +112,17 @@ export default {
queryParams: {
pageNo: 1,
pageSize: 10,
equipmentName: '',
},
searchText: ''
searchText: '',
selectedBoms: [],
timer: null,
};
},
watch: {
currentDet: {
handler(val) {
console.log('currentDet', val);
if (val != null) {
this.getList(val);
} else {
@ -82,12 +130,25 @@ export default {
}
},
immediate: true,
deep: true
}
deep: true,
},
},
methods: {
handleEmitFun() { },
handleTableBtnClick() { },
handleEmitFun() {},
handleTableBtnClick() {},
handleSearchTextChange(val) {
if (this.timer) clearTimeout(this.timer);
this.timer = setTimeout(() => {
console.log('geting list.......');
this.queryParams.equipmentName = val;
this.$nextTick(() => {
this.getList(this.currentDet);
});
}, 300);
},
put(payload) {
return this.http(this.updateUrl, 'put', payload);
},
@ -106,23 +167,95 @@ export default {
method,
params: method === 'get' ? payload : null,
data: method !== 'get' ? payload : null,
})
});
},
getList({ detId, detName, detDesc, flowId, sectionName } = {}) {
console.log('get list')
submitForm() {
//
this.$refs.bomSelector.commit();
//
this.$nextTick(async () => {
console.log('selectedBoms', this.selectedBoms);
if (this.selectedBoms.length) {
const { code, data } = await this.http(
'/extend/process-flow-det-equipment/createList',
'post',
this.selectedBoms.map((item) => ({
...item,
flowDetId: this.currentDet.detId,
}))
);
if (code == 0) {
this.$message.success('操作成功');
this.getList(this.currentDet);
this.cancel();
} else {
this.$message.error('操作失败');
}
} else {
this.$message.info('请选择设备');
}
});
},
getList() {
this.list = [
{ name: '1', code: 'bomg-1', remark: 'Tochter' },
{ name: '2', code: 'bomg-2', remark: 'Bruder' },
{ name: '3', code: 'bomg-3', remark: 'Kalt' },
]
async getList({
detId,
detName,
detDesc,
flowId,
sectionName,
sectionId,
} = {}) {
console.log('get list', detId, detName, flowId);
const { data, code } = await this.http(
'/extend/process-flow-det-equipment/page',
'get',
{ flowDetId: detId, ...this.queryParams }
);
if (code == 0) {
this.list = data.list;
this.total = data.total;
} else {
this.list.splice(0);
this.total = 0;
}
// bom
this.http('/extend/process-flow-det/getEquipmentDetBySectionId', 'post', {
sectionId,
flowDetId: detId,
}).then(({ code, data }) => {
if (code == 0) {
this.bomList = data.map((eq) => {
eq.materialsBom = eq.materialsBom || [];
eq.valuesBom = eq.valuesBom || [];
//
eq.materialsBom.chosen = eq.materialsBomChoseId ?? null;
eq.valuesBom.chosen = eq.valuesBomChoseId ?? null;
if (eq.equChose || eq.materialsBom.chosen || eq.valuesBom.chosen) {
this.selectedBoms.push({
equipmentId: eq.id,
equMaterialBomId: eq.materialsBom.chosen,
equValueBomId: eq.valuesBom.chosen,
});
}
// id
eq.materialsBom.equipmentId = eq.id;
eq.valuesBom.equipmentId = eq.id;
return eq;
});
} else {
this.bomList.splice(0);
}
});
},
async handleAddEquipment() {
this.open = true;
},
cancel() {
this.open = false;
},
clearList() {
this.list = [];
}
},
},
};
</script>

View File

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

View File

@ -0,0 +1,51 @@
export class Candidate {
constructor(id, name, paramBomList, materialBomList) {
this.equipmentId = id;
this.equipmentName = name;
this.children = [];
this.totalBom = paramBomList.length + materialBomList.length;
this.selected = false;
paramBomList.forEach((pb) => {
this.children.push({
id: pb.id,
name: pb.name,
type: 'param',
selected: false,
});
});
materialBomList.forEach((mb) => {
this.children.push({
id: mb.id,
name: mb.name,
type: 'material',
selected: false,
});
});
}
get selected() {
return this.children.filter((child) => child.selected).length;
}
get paramBom() {
return this.children.filter((child) => child.type === 'param');
}
get materialBom() {
return this.children.filter((child) => child.type === 'material');
}
}
export class CandidateList {
constructor() {
this.value = [];
}
addCandidate(candidate) {
this.value.push(candidate);
}
get selected() {
return this.list.filter((candidate) => candidate.selected).length;
}
}

View File

@ -25,7 +25,7 @@ export default {
data() {
return {
flowId: null,
currentDet: null
currentDet: null,
};
},
provide() {
@ -36,6 +36,14 @@ export default {
},
};
},
beforeRouteEnter(to, from, next) {
console.log('tot', to, from);
if (to.params.id) {
next();
} else {
next({ path: '/extend/process-flow' });
}
},
activated() {
console.log('activated...', this.$route.params);
this.flowId = this.$route.params.id;
@ -44,10 +52,9 @@ export default {
methods: {
handleDetSelected(det) {
if (det != null) {
this.currentDet = { ...det }
}
else this.currentDet = null;
}
this.currentDet = { ...det };
} else this.currentDet = null;
},
},
};
</script>

View File

@ -68,7 +68,7 @@ export default {
input: true,
label: '工序名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '工序名称不能为空', trigger: 'blur' }],
},
],
[
@ -77,7 +77,7 @@ export default {
label: '工段',
prop: 'sectionId',
url: '/base/core-workshop-section/listAll',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '工段不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},

View File

@ -37,14 +37,16 @@
]">
<el-input v-model="dataForm.buttonId" @change="$emit('update', dataForm)" placeholder="请输入整数" />
</el-form-item>
<!--
<el-form-item
label="报警编码"
prop="code"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
label="产线"
prop="productionLineId"
:rules="[
{ required: true, message: '产线不能为空', trigger: 'blur' },
]">
<el-select
v-model="dataForm.code"
v-model="dataForm.productionLineId"
placeholder="请选择产线"
filterable
@change="handleProductlineChange">
<el-option
v-for="opt in productionLineList"
@ -52,12 +54,50 @@
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item> -->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="工段"
prop="sectionId"
:rules="[
{ required: true, message: '工段不能为空', trigger: 'blur' },
]">
<el-select
v-model="dataForm.sectionId"
placeholder="请选择工段"
filterable
@change="$emit('update', dataForm)">
<el-option
v-for="opt in workshopSectionList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="按钮盒模式" prop="model">
<el-input v-model="dataForm.model" @change="$emit('update', dataForm)" placeholder="请输入按钮盒模式" />
<el-form-item
label="按钮盒识别码"
prop="buttonId"
:rules="[
{
required: true,
message: '按钮盒识别码不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '请输入整数',
trigger: 'blur',
transform: (val) => Number.isInteger(Number(val)) && Number(val),
},
]">
<el-input
v-model="dataForm.buttonId"
@change="$emit('update', dataForm)"
placeholder="请输入整数" />
</el-form-item>
</el-col>

View File

@ -70,7 +70,7 @@ export default {
label: '产线',
url: '/base/production-line/listAll',
prop: 'productionId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '产线不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
@ -80,7 +80,7 @@ export default {
label: '工段',
url: '/base/workshop-section/listAll',
prop: 'sectionId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '工段不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},

View File

@ -50,7 +50,7 @@
label: '检测类型',
prop: 'typeId',
url: '/base/quality-inspection-type/listAll',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '检测类型不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
@ -61,7 +61,7 @@
input: true,
label: '检测内容',
prop: 'content',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '检测内容不能为空', trigger: 'blur' }],
},
],
[

View File

@ -47,7 +47,13 @@
input: true,
label: '检测类型名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [
{
required: true,
message: '检测类型名称不能为空',
trigger: 'blur',
},
],
// bind: {
// disabled: true, // some condition, like detail mode...
// }
@ -174,31 +180,7 @@ export default {
plain: true,
color: 'success',
},
// {
// type: this.$auth.hasPermi('base:quality-inspection-type:export')
// ? 'button'
// : '',
// btnName: '',
// name: 'export',
// color: 'warning',
// },
],
//
// formRows: [
// [
// {
// input: true,
// label: '',
// prop: 'name',
// rules: [{ required: true, message: '', trigger: 'blur' }],
// // bind: {
// // disabled: true, // some condition, like detail mode...
// // }
// },
// ],
// [{ input: true, label: '', prop: 'code' }],
// [{ input: true, label: '', prop: 'remark' }],
// ],
//
open: false,
//
@ -211,7 +193,7 @@ export default {
form: {
name: null,
code: undefined,
remark:undefined
remark: undefined,
},
};
},

View File

@ -16,7 +16,7 @@
<el-form-item
label="检测内容"
prop="inspectionDetId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '检测内容不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.inspectionDetId"
placeholder="请选择检测内容"
@ -36,7 +36,7 @@
<el-form-item
label="来源"
prop="source"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '来源不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.source"
placeholder="请选择来源"
@ -60,7 +60,7 @@
<el-form-item
label="产线"
prop="productionLineId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '产线不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.productionLineId"
placeholder="请选择产线"
@ -79,7 +79,7 @@
<el-form-item
label="工段"
prop="sectionId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '工段不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.sectionId"
placeholder="请选择工段"
@ -110,7 +110,7 @@
<el-form-item
label="检测时间"
prop="checkTime"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '检测时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="innerDataForm.checkTime"
type="datetime"

View File

@ -68,7 +68,7 @@ export default {
input: true,
label: '工序名称',
prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '工序名称不能为空', trigger: 'blur' }],
},
],
[
@ -77,7 +77,7 @@ export default {
label: '工段',
prop: 'sectionId',
url: '/base/core-workshop-section/listAll',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '工段不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},

View File

@ -74,7 +74,7 @@ export default {
url: '/base/quality-inspection-det/listAll',
prop: 'inspectionDetId',
labelKey: 'content',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '检测内容不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
@ -102,7 +102,7 @@ export default {
bind: {
filterable: true,
},
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '产线不能为空', trigger: 'blur' }],
},
{
select: true,
@ -126,7 +126,7 @@ export default {
datetime: true,
label: '检测时间',
prop: 'checkTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '检测时间不能为空', trigger: 'blur' }],
bind: {
format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp',
@ -135,15 +135,6 @@ export default {
},
},
],
// [
// {
// textarea: true,
// label: '',
// prop: 'inspectionDetContent',
// value: '',
// rules: [{ required: true, message: '', trigger: 'blur' }],
// },
// ],
[{ textarea: true, label: '描述', prop: 'explainText' }],
[{ input: true, label: '备注', prop: 'remark' }],
],

View File

@ -16,7 +16,7 @@
<el-form-item
label="检测内容"
prop="inspectionDetId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '检测内容不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.inspectionDetId"
placeholder="请选择检测内容"
@ -36,7 +36,7 @@
<el-form-item
label="来源"
prop="source"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '来源不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.source"
placeholder="请选择来源"
@ -60,7 +60,7 @@
<el-form-item
label="产线"
prop="productionLineId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '产线不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.productionLineId"
placeholder="请选择产线"
@ -79,7 +79,7 @@
<el-form-item
label="工段"
prop="sectionId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '工段不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.sectionId"
placeholder="请选择工段"
@ -110,7 +110,7 @@
<el-form-item
label="检测时间"
prop="checkTime"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '检测时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="innerDataForm.checkTime"
type="datetime"

View File

@ -20,7 +20,7 @@ export default {
data() {
return {
url: process.env.VUE_APP_BASE_API + "/jmreport/list?token=" + getAccessToken(),
url: process.env.VUE_APP_JIMU_API + "/jmreport/list?token=" + getAccessToken(),
};
},
};

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-03 14:56:25
* @LastEditTime: 2023-11-20 15:54:28
* @Description:
-->
<template>
@ -15,31 +15,31 @@
label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-form-item label="物品名称" prop="name">
<el-input
v-model="dataForm.name"
clearable
placeholder="请输入名称" />
placeholder="请输入物品名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="编码" prop="code">
<el-form-item label="物品编码" prop="code">
<el-input
v-model="dataForm.code"
clearable
placeholder="请输入编码" />
placeholder="请输入物品编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格" prop="spec">
<el-form-item label="物品规格" prop="spec">
<el-input
v-model="dataForm.spec"
clearable
placeholder="请输入规格" />
placeholder="请输入物品规格" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" prop="unit">
<el-form-item label="物品单位" prop="unit">
<el-select
v-model="dataForm.unit"
filterable
@ -57,6 +57,7 @@
<el-col :span="12">
<el-form-item label="单日消耗量" prop="dailyUse">
<el-input-number
:min="0"
v-model="dataForm.dailyUse"
clearable
placeholder="请输入单日消耗量" />
@ -65,9 +66,10 @@
<el-col :span="12">
<el-form-item label="允许留存时间" prop="allowTime">
<el-input-number
:min="0"
v-model="dataForm.allowTime"
clearable
placeholder="请输入允许留存时间" />
placeholder="请输入允许留存时间" /> ()
</el-form-item>
</el-col>
<el-col :span="12">
@ -130,13 +132,14 @@ export default {
allowTime: 0,
enabled: 1,
remark: '',
storageType:2
},
dataRule: {
code: [
{ required: true, message: '库位编码不能为空', trigger: 'blur' },
{ required: true, message: '物品编码不能为空', trigger: 'blur' },
],
name: [
{ required: true, message: '库位名称不能为空', trigger: 'blur' },
{ required: true, message: '物品名称不能为空', trigger: 'blur' },
],
},
isorno: [

View File

@ -57,19 +57,19 @@ import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'name',
label: '名称',
label: '物品名称',
},
{
prop: 'code',
label: '编码',
label: '物品编码',
},
{
prop: 'spec',
label: '规格',
label: '物品规格',
},
{
prop: 'unit',
label: '单位',
label: '物品单位',
filter: publicFormatter('unit_dict')
},
{
@ -121,8 +121,8 @@ export default {
formConfig: [
{
type: 'input',
label: '名称',
placeholder: '名称',
label: '物品名称',
placeholder: '物品名称',
param: 'name',
},
{

View File

@ -2,7 +2,6 @@
<div class="app-container">
<!-- 搜索工作栏 -->
<search-bar
:isFold="true"
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
@ -114,7 +113,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`end-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`end-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-04 16:32:54
* @LastEditTime: 2023-11-20 15:14:18
* @Description:
-->
<template>
@ -68,7 +68,6 @@
v-model="dataForm.goodsBatch"
filterable
clearable
@change="setBatchInfo"
placeholder="请选择物品名称">
<el-option
v-for="(item, index) in Batch"
@ -79,13 +78,12 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入库数量" prop="numDet">
<el-form-item :label="dataForm.id?'出库数量':'入库数量'" prop="numDet">
<el-input-number
v-model="dataForm.numDet"
clearable
:min="0"
:max="max?max:9999999"
placeholder="请输入入库数量" />
placeholder="请输入数量" />
</el-form-item>
</el-col>
</el-row>
@ -130,7 +128,6 @@ export default {
},
goodsArr: [],
Batch: [],
max: 0,
dataRule: {
goodsId: [
{ required: true, message: '物品名称不能为空', trigger: 'change' },
@ -143,7 +140,7 @@ export default {
},
],
numDet: [
{ required: true, message: '入库数量不能为空', trigger: 'blur' },
{ required: true, message: '数量不能为空', trigger: 'blur' },
],
},
};
@ -172,13 +169,6 @@ export default {
}
});
},
setBatchInfo(){
this.Batch.forEach((item) => {
if (item.goodsBatch === this.dataForm.goodsBatch) {
this.max = item.numDet
}
});
},
outWare(data) {
this.getArr();
this.visible = true;

View File

@ -29,6 +29,7 @@
<el-option
v-for="item in productArr"
:key="item.id"
:disabled="!item.enabled"
:label="item.name"
:value="item" />
</el-select>

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-03 14:56:25
* @LastEditTime: 2023-11-20 15:54:39
* @Description:
-->
<template>
@ -15,31 +15,31 @@
label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-form-item label="物品名称" prop="name">
<el-input
v-model="dataForm.name"
clearable
placeholder="请输入名称" />
placeholder="请输入物品名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="编码" prop="code">
<el-form-item label="物品编码" prop="code">
<el-input
v-model="dataForm.code"
clearable
placeholder="请输入编码" />
placeholder="请输入物品编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格" prop="spec">
<el-form-item label="物品规格" prop="spec">
<el-input
v-model="dataForm.spec"
clearable
placeholder="请输入规格" />
placeholder="请输入物品规格" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" prop="unit">
<el-form-item label="物品单位" prop="unit">
<el-select
v-model="dataForm.unit"
filterable
@ -57,6 +57,7 @@
<el-col :span="12">
<el-form-item label="单日消耗量" prop="dailyUse">
<el-input-number
:min="0"
v-model="dataForm.dailyUse"
clearable
placeholder="请输入单日消耗量" />
@ -65,9 +66,10 @@
<el-col :span="12">
<el-form-item label="允许留存时间" prop="allowTime">
<el-input-number
:min="0"
v-model="dataForm.allowTime"
clearable
placeholder="请输入允许留存时间" />
placeholder="请输入允许留存时间" /> ()
</el-form-item>
</el-col>
<el-col :span="12">
@ -130,13 +132,14 @@ export default {
allowTime: 0,
enabled: 1,
remark: '',
storageType:5
},
dataRule: {
code: [
{ required: true, message: '库位编码不能为空', trigger: 'blur' },
{ required: true, message: '物品编码不能为空', trigger: 'blur' },
],
name: [
{ required: true, message: '库位名称不能为空', trigger: 'blur' },
{ required: true, message: '物品名称不能为空', trigger: 'blur' },
],
},
isorno: [

View File

@ -57,19 +57,19 @@ import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'name',
label: '名称',
label: '物品名称',
},
{
prop: 'code',
label: '编码',
label: '物品编码',
},
{
prop: 'spec',
label: '规格',
label: '物品规格',
},
{
prop: 'unit',
label: '单位',
label: '物品单位',
filter: publicFormatter('unit_dict')
},
{
@ -121,8 +121,8 @@ export default {
formConfig: [
{
type: 'input',
label: '名称',
placeholder: '名称',
label: '物品名称',
placeholder: '物品名称',
param: 'name',
},
{

View File

@ -2,7 +2,6 @@
<div class="app-container">
<!-- 搜索工作栏 -->
<search-bar
:isFold="true"
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
@ -114,7 +113,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`out-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`out-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-04 16:24:41
* @LastEditTime: 2023-11-20 15:14:00
* @Description:
-->
<template>
@ -68,7 +68,6 @@
v-model="dataForm.goodsBatch"
filterable
clearable
@change="setBatchInfo"
placeholder="请选择物品名称">
<el-option
v-for="(item, index) in Batch"
@ -79,13 +78,12 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入库数量" prop="numDet">
<el-form-item :label="dataForm.id?'出库数量':'入库数量'" prop="numDet">
<el-input-number
v-model="dataForm.numDet"
clearable
:min="0"
:max="max?max:9999999"
placeholder="请输入入库数量" />
placeholder="请输入数量" />
</el-form-item>
</el-col>
</el-row>
@ -130,7 +128,6 @@ export default {
},
goodsArr: [],
Batch: [],
max: 0,
dataRule: {
goodsId: [
{ required: true, message: '物品名称不能为空', trigger: 'change' },
@ -143,7 +140,7 @@ export default {
},
],
numDet: [
{ required: true, message: '入库数量不能为空', trigger: 'blur' },
{ required: true, message: '数量不能为空', trigger: 'blur' },
],
},
};
@ -172,13 +169,6 @@ export default {
}
});
},
setBatchInfo(){
this.Batch.forEach((item) => {
if (item.goodsBatch === this.dataForm.goodsBatch) {
this.max = item.numDet
}
});
},
outWare(data) {
this.getArr();
this.visible = true;

View File

@ -29,6 +29,7 @@
<el-option
v-for="item in productArr"
:key="item.id"
:disabled="!item.enabled"
:label="item.name"
:value="item" />
</el-select>

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-03 14:56:25
* @LastEditTime: 2023-11-20 15:54:49
* @Description:
-->
<template>
@ -15,31 +15,31 @@
label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-form-item label="物品名称" prop="name">
<el-input
v-model="dataForm.name"
clearable
placeholder="请输入名称" />
placeholder="请输入物品名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="编码" prop="code">
<el-form-item label="物品编码" prop="code">
<el-input
v-model="dataForm.code"
clearable
placeholder="请输入编码" />
placeholder="请输入物品编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格" prop="spec">
<el-form-item label="物品规格" prop="spec">
<el-input
v-model="dataForm.spec"
clearable
placeholder="请输入规格" />
placeholder="请输入物品规格" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" prop="unit">
<el-form-item label="物品单位" prop="unit">
<el-select
v-model="dataForm.unit"
filterable
@ -57,6 +57,7 @@
<el-col :span="12">
<el-form-item label="单日消耗量" prop="dailyUse">
<el-input-number
:min="0"
v-model="dataForm.dailyUse"
clearable
placeholder="请输入单日消耗量" />
@ -65,9 +66,10 @@
<el-col :span="12">
<el-form-item label="允许留存时间" prop="allowTime">
<el-input-number
:min="0"
v-model="dataForm.allowTime"
clearable
placeholder="请输入允许留存时间" />
placeholder="请输入允许留存时间" /> ()
</el-form-item>
</el-col>
<el-col :span="12">
@ -130,13 +132,14 @@ export default {
allowTime: 0,
enabled: 1,
remark: '',
storageType:3
},
dataRule: {
code: [
{ required: true, message: '库位编码不能为空', trigger: 'blur' },
{ required: true, message: '物品编码不能为空', trigger: 'blur' },
],
name: [
{ required: true, message: '库位名称不能为空', trigger: 'blur' },
{ required: true, message: '物品名称不能为空', trigger: 'blur' },
],
},
isorno: [

View File

@ -57,19 +57,19 @@ import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'name',
label: '名称',
label: '物品名称',
},
{
prop: 'code',
label: '编码',
label: '物品编码',
},
{
prop: 'spec',
label: '规格',
label: '物品规格',
},
{
prop: 'unit',
label: '单位',
label: '物品单位',
filter: publicFormatter('unit_dict')
},
{
@ -121,8 +121,8 @@ export default {
formConfig: [
{
type: 'input',
label: '名称',
placeholder: '名称',
label: '物品名称',
placeholder: '物品名称',
param: 'name',
},
{

View File

@ -2,7 +2,6 @@
<div class="app-container">
<!-- 搜索工作栏 -->
<search-bar
:isFold="true"
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
@ -114,7 +113,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`pack-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`pack-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-04 14:17:39
* @LastEditTime: 2023-11-20 15:13:37
* @Description:
-->
<template>
@ -68,7 +68,6 @@
v-model="dataForm.goodsBatch"
filterable
clearable
@change="setBatchInfo"
placeholder="请选择物品名称">
<el-option
v-for="(item, index) in Batch"
@ -79,13 +78,12 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入库数量" prop="numDet">
<el-form-item :label="dataForm.id?'出库数量':'入库数量'" prop="numDet">
<el-input-number
v-model="dataForm.numDet"
clearable
:min="0"
:max="max?max:9999999"
placeholder="请输入入库数量" />
placeholder="请输入数量" />
</el-form-item>
</el-col>
</el-row>
@ -130,7 +128,6 @@ export default {
},
goodsArr: [],
Batch: [],
max: 0,
dataRule: {
goodsId: [
{ required: true, message: '物品名称不能为空', trigger: 'change' },
@ -143,7 +140,7 @@ export default {
},
],
numDet: [
{ required: true, message: '入库数量不能为空', trigger: 'blur' },
{ required: true, message: '数量不能为空', trigger: 'blur' },
],
},
};
@ -172,13 +169,6 @@ export default {
}
});
},
setBatchInfo(){
this.Batch.forEach((item) => {
if (item.goodsBatch === this.dataForm.goodsBatch) {
this.max = item.numDet
}
});
},
outWare(data) {
this.getArr();
this.visible = true;

View File

@ -29,6 +29,7 @@
<el-option
v-for="item in productArr"
:key="item.id"
:disabled="!item.enabled"
:label="item.name"
:value="item" />
</el-select>

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-03 14:56:25
* @LastEditTime: 2023-11-20 15:54:59
* @Description:
-->
<template>
@ -15,31 +15,31 @@
label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-form-item label="物品名称" prop="name">
<el-input
v-model="dataForm.name"
clearable
placeholder="请输入名称" />
placeholder="请输入物品名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="编码" prop="code">
<el-form-item label="物品编码" prop="code">
<el-input
v-model="dataForm.code"
clearable
placeholder="请输入编码" />
placeholder="请输入物品编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格" prop="spec">
<el-form-item label="物品规格" prop="spec">
<el-input
v-model="dataForm.spec"
clearable
placeholder="请输入规格" />
placeholder="请输入物品规格" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" prop="unit">
<el-form-item label="物品单位" prop="unit">
<el-select
v-model="dataForm.unit"
filterable
@ -57,6 +57,7 @@
<el-col :span="12">
<el-form-item label="单日消耗量" prop="dailyUse">
<el-input-number
:min="0"
v-model="dataForm.dailyUse"
clearable
placeholder="请输入单日消耗量" />
@ -65,9 +66,10 @@
<el-col :span="12">
<el-form-item label="允许留存时间" prop="allowTime">
<el-input-number
:min="0"
v-model="dataForm.allowTime"
clearable
placeholder="请输入允许留存时间" />
placeholder="请输入允许留存时间" /> ()
</el-form-item>
</el-col>
<el-col :span="12">
@ -130,13 +132,14 @@ export default {
allowTime: 0,
enabled: 1,
remark: '',
storageType:4
},
dataRule: {
code: [
{ required: true, message: '库位编码不能为空', trigger: 'blur' },
{ required: true, message: '物品编码不能为空', trigger: 'blur' },
],
name: [
{ required: true, message: '库位名称不能为空', trigger: 'blur' },
{ required: true, message: '物品名称不能为空', trigger: 'blur' },
],
},
isorno: [

View File

@ -57,19 +57,19 @@ import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'name',
label: '名称',
label: '物品名称',
},
{
prop: 'code',
label: '编码',
label: '物品编码',
},
{
prop: 'spec',
label: '规格',
label: '物品规格',
},
{
prop: 'unit',
label: '单位',
label: '物品单位',
filter: publicFormatter('unit_dict')
},
{
@ -121,8 +121,8 @@ export default {
formConfig: [
{
type: 'input',
label: '名称',
placeholder: '名称',
label: '物品名称',
placeholder: '物品名称',
param: 'name',
},
{

View File

@ -2,7 +2,6 @@
<div class="app-container">
<!-- 搜索工作栏 -->
<search-bar
:isFold="true"
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
@ -114,7 +113,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`part-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`part-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-04 16:24:26
* @LastEditTime: 2023-11-20 15:12:43
* @Description:
-->
<template>
@ -68,7 +68,6 @@
v-model="dataForm.goodsBatch"
filterable
clearable
@change="setBatchInfo"
placeholder="请选择物品名称">
<el-option
v-for="(item, index) in Batch"
@ -79,13 +78,12 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入库数量" prop="numDet">
<el-form-item :label="dataForm.id?'出库数量':'入库数量'" prop="numDet">
<el-input-number
v-model="dataForm.numDet"
clearable
:min="0"
:max="max?max:9999999"
placeholder="请输入入库数量" />
placeholder="请输入数量" />
</el-form-item>
</el-col>
</el-row>
@ -130,7 +128,6 @@ export default {
},
goodsArr: [],
Batch: [],
max: 0,
dataRule: {
goodsId: [
{ required: true, message: '物品名称不能为空', trigger: 'change' },
@ -143,7 +140,7 @@ export default {
},
],
numDet: [
{ required: true, message: '入库数量不能为空', trigger: 'blur' },
{ required: true, message: '数量不能为空', trigger: 'blur' },
],
},
};
@ -172,13 +169,6 @@ export default {
}
});
},
setBatchInfo(){
this.Batch.forEach((item) => {
if (item.goodsBatch === this.dataForm.goodsBatch) {
this.max = item.numDet
}
});
},
outWare(data) {
this.getArr();
this.visible = true;

View File

@ -29,6 +29,7 @@
<el-option
v-for="item in productArr"
:key="item.id"
:disabled="!item.enabled"
:label="item.name"
:value="item" />
</el-select>

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-03 14:56:25
* @LastEditTime: 2023-11-20 15:54:15
* @Description:
-->
<template>
@ -15,31 +15,31 @@
label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-form-item label="物品名称" prop="name">
<el-input
v-model="dataForm.name"
clearable
placeholder="请输入名称" />
placeholder="请输入物品名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="编码" prop="code">
<el-form-item label="物品编码" prop="code">
<el-input
v-model="dataForm.code"
clearable
placeholder="请输入编码" />
placeholder="请输入物品编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格" prop="spec">
<el-form-item label="物品规格" prop="spec">
<el-input
v-model="dataForm.spec"
clearable
placeholder="请输入规格" />
placeholder="请输入物品规格" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" prop="unit">
<el-form-item label="物品单位" prop="unit">
<el-select
v-model="dataForm.unit"
filterable
@ -57,6 +57,7 @@
<el-col :span="12">
<el-form-item label="单日消耗量" prop="dailyUse">
<el-input-number
:min="0"
v-model="dataForm.dailyUse"
clearable
placeholder="请输入单日消耗量" />
@ -65,9 +66,10 @@
<el-col :span="12">
<el-form-item label="允许留存时间" prop="allowTime">
<el-input-number
:min="0"
v-model="dataForm.allowTime"
clearable
placeholder="请输入允许留存时间" />
placeholder="请输入允许留存时间" /> ()
</el-form-item>
</el-col>
<el-col :span="12">
@ -130,13 +132,14 @@ export default {
allowTime: 0,
enabled: 1,
remark: '',
storageType:1
},
dataRule: {
code: [
{ required: true, message: '库位编码不能为空', trigger: 'blur' },
{ required: true, message: '物品编码不能为空', trigger: 'blur' },
],
name: [
{ required: true, message: '库位名称不能为空', trigger: 'blur' },
{ required: true, message: '物品名称不能为空', trigger: 'blur' },
],
},
isorno: [

View File

@ -57,19 +57,19 @@ import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'name',
label: '名称',
label: '物品名称',
},
{
prop: 'code',
label: '编码',
label: '物品编码',
},
{
prop: 'spec',
label: '规格',
label: '物品规格',
},
{
prop: 'unit',
label: '单位',
label: '物品单位',
filter: publicFormatter('unit_dict')
},
{
@ -121,8 +121,8 @@ export default {
formConfig: [
{
type: 'input',
label: '名称',
placeholder: '名称',
label: '物品名称',
placeholder: '物品名称',
param: 'name',
},
{

View File

@ -2,7 +2,6 @@
<div class="app-container">
<!-- 搜索工作栏 -->
<search-bar
:isFold="true"
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
@ -114,7 +113,7 @@ export default {
tableData: [],
tableProps,
tableBtn: [
this.$auth.hasPermi(`raw-material:warehouse-realtime-location-his:query`)
this.$auth.hasPermi(`raw-material:warehouse-location-his:query`)
? {
type: 'info',
btnName: '详情',

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-11-04 14:17:39
* @LastEditTime: 2023-11-20 15:12:13
* @Description:
-->
<template>
@ -68,7 +68,6 @@
v-model="dataForm.goodsBatch"
filterable
clearable
@change="setBatchInfo"
placeholder="请选择物品名称">
<el-option
v-for="(item, index) in Batch"
@ -79,13 +78,13 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入库数量" prop="numDet">
<el-form-item :label="dataForm.id?'出库数量':'入库数量'" prop="numDet">
<el-input-number
v-model="dataForm.numDet"
clearable
:min="0"
:max="max?max:9999999"
placeholder="请输入入库数量" />
placeholder="请输入数量" />
<!-- :max="max?max:9999999" -->
</el-form-item>
</el-col>
</el-row>
@ -130,7 +129,7 @@ export default {
},
goodsArr: [],
Batch: [],
max: 0,
//max: 0,
dataRule: {
goodsId: [
{ required: true, message: '物品名称不能为空', trigger: 'change' },
@ -143,7 +142,7 @@ export default {
},
],
numDet: [
{ required: true, message: '入库数量不能为空', trigger: 'blur' },
{ required: true, message: '数量不能为空', trigger: 'blur' },
],
},
};
@ -172,13 +171,13 @@ export default {
}
});
},
setBatchInfo(){
this.Batch.forEach((item) => {
if (item.goodsBatch === this.dataForm.goodsBatch) {
this.max = item.numDet
}
});
},
// setBatchInfo(){
// this.Batch.forEach((item) => {
// if (item.goodsBatch === this.dataForm.goodsBatch) {
// this.max = item.numDet
// }
// });
// },
outWare(data) {
this.getArr();
this.visible = true;

View File

@ -29,6 +29,7 @@
<el-option
v-for="item in productArr"
:key="item.id"
:disabled="!item.enabled"
:label="item.name"
:value="item" />
</el-select>

View File

@ -18,7 +18,7 @@
@click.native="setWareInfo(item)"
:style="{
background: item.id === wareInfo.warehouseId ? '#37D97F' : '',
color: item.id === wareInfo.warehouseId ? 'white' : ''
color: item.id === wareInfo.warehouseId ? 'white' : '',
}"
class="ware-card">
{{ item.name }}
@ -263,7 +263,7 @@ export default {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then((response) => {
this.tableData = response.data.list;
this.total = response.data.total;
this.listQuery.total = response.data.total;
this.dataListLoading = false;
});
},