projects/mes-test #133

Merged
gtz217 merged 281 commits from projects/mes-test into projects/mes 2023-11-30 09:11:34 +08:00
86 changed files with 1734 additions and 1717 deletions
Showing only changes of commit 5492666b53 - Show all commits

View File

@ -17,7 +17,7 @@ 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.4.173:48080'
# VUE_APP_BASE_API = 'http://192.168.2.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.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.4.159:48080'
# VUE_APP_BASE_API = 'http://192.168.1.56:48082' # VUE_APP_BASE_API = 'http://192.168.1.56:48082'
# VUE_APP_BASE_API = 'http://192.168.4.159:48080' # VUE_APP_BASE_API = 'http://192.168.4.159:48080'

View File

@ -1,3 +1,10 @@
/*
* @Author: zhp
* @Date: 2023-10-17 09:26:38
* @LastEditTime: 2023-11-20 15:50:08
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request' import request from '@/utils/request'
// 创建质量检测信息基础 // 创建质量检测信息基础
@ -52,3 +59,11 @@ export function exportQualityInspectionDetExcel(query) {
responseType: 'blob' responseType: 'blob'
}) })
} }
export function getQualityInspectionDetList(query) {
return request({
url: '/base/quality-inspection-det/listAll',
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" v-if="col.subcomponent"
:key="col.key" :key="col.key"
:disabled="disabled" :disabled="disabled"
:read-only="disabled"
:is="col.subcomponent" :is="col.subcomponent"
v-model="form[col.prop]" v-model="form[col.prop]"
:inlineStyle="col.style" :inlineStyle="col.style"

View File

@ -1,279 +1,293 @@
<template> <template>
<div> <div :class="[readOnly ? 'editor-wrapper' : '']">
<el-upload <el-upload
:action="uploadFileUrl" :action="uploadFileUrl"
:before-upload="handleBeforeUpload" :before-upload="handleBeforeUpload"
:on-success="handleUploadSuccess" :on-success="handleUploadSuccess"
:on-error="handleUploadError" :on-error="handleUploadError"
name="file" name="file"
:show-file-list="false" :show-file-list="false"
:headers="headers" :headers="headers"
style="display: none" style="display: none"
ref="upload" ref="upload"
v-if="this.type === 'url'" v-if="this.type === 'url'"></el-upload>
> <div class="editor" ref="editor" :style="styles"></div>
</el-upload> </div>
<div class="editor" ref="editor" :style="styles"></div>
</div>
</template> </template>
<script> <script>
import Quill from "quill"; import Quill from 'quill';
import "quill/dist/quill.core.css"; import 'quill/dist/quill.core.css';
import "quill/dist/quill.snow.css"; import 'quill/dist/quill.snow.css';
import "quill/dist/quill.bubble.css"; import 'quill/dist/quill.bubble.css';
import { getAccessToken } from "@/utils/auth"; import { getAccessToken } from '@/utils/auth';
export default { export default {
name: "Editor", name: 'Editor',
props: { props: {
/* 编辑器的内容 */ /* 编辑器的内容 */
value: { value: {
type: String, type: String,
default: "", default: '',
}, },
/* 高度 */ /* 高度 */
height: { height: {
type: Number, type: Number,
default: null, default: null,
}, },
/* 最小高度 */ /* 最小高度 */
minHeight: { minHeight: {
type: Number, type: Number,
default: null, default: null,
}, },
/* 只读 */ /* 只读 */
readOnly: { readOnly: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
// (MB) // (MB)
fileSize: { fileSize: {
type: Number, type: Number,
default: 5, default: 5,
}, },
/* 类型base64格式、url格式 */ /* 类型base64格式、url格式 */
type: { type: {
type: String, type: String,
default: "url", default: 'url',
} },
}, },
data() { data() {
return { return {
uploadFileUrl: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // uploadFileUrl:
headers: { Authorization: "Bearer " + getAccessToken() }, // process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', //
Quill: null, headers: { Authorization: 'Bearer ' + getAccessToken() }, //
currentValue: "", Quill: null,
options: { currentValue: '',
theme: "snow", options: {
bounds: document.body, theme: 'snow',
debug: "warn", bounds: document.body,
modules: { debug: 'warn',
// modules: {
toolbar: [ //
["bold", "italic", "underline", "strike"], // 线 线 toolbar: [
["blockquote", "code-block"], // ['bold', 'italic', 'underline', 'strike'], // 线 线
[{ list: "ordered" }, { list: "bullet" }], // ['blockquote', 'code-block'], //
[{ indent: "-1" }, { indent: "+1" }], // [{ list: 'ordered' }, { list: 'bullet' }], //
[{ size: ["small", false, "large", "huge"] }], // [{ indent: '-1' }, { indent: '+1' }], //
[{ header: [1, 2, 3, 4, 5, 6, false] }], // [{ size: ['small', false, 'large', 'huge'] }], //
[{ color: [] }, { background: [] }], // [{ header: [1, 2, 3, 4, 5, 6, false] }], //
[{ align: [] }], // [{ color: [] }, { background: [] }], //
["clean"], // [{ align: [] }], //
["link", "image", "video"] // ['clean'], //
], ['link', 'image', 'video'], //
}, ],
placeholder: "请输入内容", },
readOnly: true, placeholder: '请输入内容',
}, readOnly: true,
}; },
}, };
computed: { },
styles() { computed: {
let style = {}; styles() {
if (this.minHeight) { let style = {};
style.minHeight = `${this.minHeight}px`; if (this.minHeight) {
} style.minHeight = `${this.minHeight}px`;
if (this.height) { }
style.height = `${this.height}px`; if (this.height) {
} style.height = `${this.height}px`;
return style; }
}, return style;
}, },
watch: { },
value: { watch: {
handler(val) { value: {
if (val !== this.currentValue) { handler(val) {
this.currentValue = val === null ? "" : val; if (val !== this.currentValue) {
if (this.Quill) { this.currentValue = val === null ? '' : val;
this.Quill.pasteHTML(this.currentValue); if (this.Quill) {
} this.Quill.pasteHTML(this.currentValue);
} }
}, }
immediate: true, },
}, immediate: true,
}, },
mounted() { },
this.init(); mounted() {
}, this.init();
beforeDestroy() { },
this.Quill = null; beforeDestroy() {
}, this.Quill = null;
methods: { },
init() { methods: {
const editor = this.$refs.editor; init() {
this.Quill = new Quill(editor, this.options); const editor = this.$refs.editor;
// start this.Quill = new Quill(editor, this.options);
this.$nextTick(()=>{ // start
this.Quill.blur(); this.$nextTick(() => {
if(!this.readOnly){ this.Quill.blur();
this.Quill.enable(); if (!this.readOnly) {
} this.Quill.enable();
}); }
// });
if (this.type === 'url') { //
let toolbar = this.Quill.getModule("toolbar"); if (this.type === 'url') {
toolbar.addHandler("image", (value) => { let toolbar = this.Quill.getModule('toolbar');
this.uploadType = "image"; toolbar.addHandler('image', (value) => {
if (value) { this.uploadType = 'image';
this.$refs.upload.$children[0].$refs.input.click(); if (value) {
} else { this.$refs.upload.$children[0].$refs.input.click();
this.quill.format("image", false); } else {
} this.quill.format('image', false);
}); }
} });
this.Quill.pasteHTML(this.currentValue); }
this.Quill.on("text-change", (delta, oldDelta, source) => { this.Quill.pasteHTML(this.currentValue);
const html = this.$refs.editor.children[0].innerHTML; this.Quill.on('text-change', (delta, oldDelta, source) => {
const text = this.Quill.getText(); const html = this.$refs.editor.children[0].innerHTML;
const quill = this.Quill; const text = this.Quill.getText();
this.currentValue = html; const quill = this.Quill;
this.$emit("input", html); this.currentValue = 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);
}, });
// },
handleBeforeUpload(file) { //
// handleBeforeUpload(file) {
if (this.fileSize) { //
const isLt = file.size / 1024 / 1024 < this.fileSize; if (this.fileSize) {
if (!isLt) { const isLt = file.size / 1024 / 1024 < this.fileSize;
this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`); if (!isLt) {
return false; this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`);
} return false;
} }
return true; }
}, return true;
handleUploadSuccess(res, file) { },
// handleUploadSuccess(res, file) {
let quill = this.Quill; //
// let quill = this.Quill;
// edit by //
if (res.code === 200 || res.code === 0) { // edit by
// if (res.code === 200 || res.code === 0) {
let length = quill.getSelection().index; //
// res.url let length = quill.getSelection().index;
// edit by // res.url
quill.insertEmbed(length, "image", res.data); // edit by
// quill.insertEmbed(length, 'image', res.data);
quill.setSelection(length + 1); //
} else { quill.setSelection(length + 1);
this.$message.error("图片插入失败"); } else {
} this.$message.error('图片插入失败');
}, }
handleUploadError() { },
this.$message.error("图片插入失败"); handleUploadError() {
}, this.$message.error('图片插入失败');
}, },
},
}; };
</script> </script>
<style> <style>
.editor, .ql-toolbar { .editor-wrapper {
white-space: pre-wrap !important; position: relative;
line-height: normal !important; 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 { .quill-img {
display: none; display: none;
} }
.ql-snow .ql-tooltip[data-mode="link"]::before { .ql-snow .ql-tooltip[data-mode='link']::before {
content: "请输入链接地址:"; content: '请输入链接地址:';
} }
.ql-snow .ql-tooltip.ql-editing a.ql-action::after { .ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px; border-right: 0px;
content: "保存"; content: '保存';
padding-right: 0px; padding-right: 0px;
} }
.ql-snow .ql-tooltip[data-mode="video"]::before { .ql-snow .ql-tooltip[data-mode='video']::before {
content: "请输入视频地址:"; content: '请输入视频地址:';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label::before, .ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::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-label[data-value='small']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {
content: "10px"; content: '10px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before, .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 { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {
content: "18px"; content: '18px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before, .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 { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {
content: "32px"; content: '32px';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label::before, .ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::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-label[data-value='1']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {
content: "标题1"; content: '标题1';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, .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 { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {
content: "标题2"; content: '标题2';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, .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 { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {
content: "标题3"; content: '标题3';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, .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 { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {
content: "标题4"; content: '标题4';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, .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 { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {
content: "标题5"; content: '标题5';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, .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 { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {
content: "标题6"; content: '标题6';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label::before, .ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::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-label[data-value='serif']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before {
content: "衬线字体"; content: '衬线字体';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before, .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 { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before {
content: "等宽字体"; content: '等宽字体';
} }
</style> </style>

View File

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

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2021-07-19 15:18:30 * @Date: 2021-07-19 15:18:30
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-15 16:04:06 * @LastEditTime: 2023-11-22 13:58:30
* @Description: * @Description:
--> -->
<template> <template>
@ -14,6 +14,8 @@
}"> }">
<img src="../../assets/img/logo.png" style="width:1.1em;position:relative;top:.4em" alt=""> <img src="../../assets/img/logo.png" style="width:1.1em;position:relative;top:.4em" alt="">
许昌安彩AGV原片周转看板 许昌安彩AGV原片周转看板
<h3 class="unit">单位河南汇融科技服务有限公司</h3>
<h3 class="time">{{ times }}</h3>
<!-- <el-button <!-- <el-button
type="text" type="text"
class="title-button" class="title-button"
@ -87,11 +89,11 @@
<!-- <div style="width: 45%;position: absolute; top: 3em; right: 3em;"> <!-- <div style="width: 45%;position: absolute; top: 3em; right: 3em;">
<top-radio-group /> <top-radio-group />
</div> --> </div> -->
<el-row :gutter="9 * beilv"> <!-- <el-row :gutter="9 * beilv"> -->
<el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="24"> <!-- <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="24"> -->
<base-table :page="1" :limit="9" :show-index="false" :beilv="1" :table-config="inventoryTableProps" <base-table :page="1" :limit="9" :show-index="false" :beilv="1" :table-config="inventoryTableProps"
:table-data="inventoryList" /> :table-data="inventoryList" />
</el-col> <!-- </el-col> -->
<!-- <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12"> <!-- <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
<base-table3 <base-table3
:page="2" :page="2"
@ -101,7 +103,7 @@
:table-data="qualityList2" :table-data="qualityList2"
/> />
</el-col> --> </el-col> -->
</el-row> <!-- </el-row> -->
</base-container> </base-container>
</el-col> </el-col>
<el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12"> <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
@ -666,7 +668,8 @@ export default {
return { return {
beilv: 1, beilv: 1,
beilv2: 1, beilv2: 1,
clientWidth:0, clientWidth: 0,
times:undefined,
value: 100, value: 100,
qualityYearTableProps, qualityYearTableProps,
cxNameList, cxNameList,
@ -748,6 +751,7 @@ export default {
// this.fetchList('order-process') // this.fetchList('order-process')
// this.fetchList('line-chart-data') // this.fetchList('line-chart-data')
this.init() this.init()
this.getTimes()
this.windowWidth(document.documentElement.clientWidth) this.windowWidth(document.documentElement.clientWidth)
}, },
mounted() { mounted() {
@ -776,6 +780,30 @@ export default {
// removeEventListener('resize', resizeFun) // removeEventListener('resize', resizeFun)
// }, // },
methods: { methods: {
getTimes() {
setInterval(this.getTimesInterval, 1000);
},
getTimesInterval: function () {
let _this = this;
let year = new Date().getFullYear(); //
let month = new Date().getMonth() + 1; //
let day = new Date().getDate(); //
let hours = new Date().getHours(); //
let minutes = new Date().getMinutes(); //
let seconds = new Date().getSeconds(); //
// 10 0
if (hours < 10) {
hours = "0" + hours;
}
if (minutes < 10) {
minutes = "0" + minutes;
}
if (seconds < 10) {
seconds = "0" + seconds;
}
//
this.times = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
},
windowWidth(value) { windowWidth(value) {
this.clientWidth = value this.clientWidth = value
}, },
@ -846,7 +874,19 @@ export default {
background-size: 100% 100%; background-size: 100% 100%;
color: #00fff0; color: #00fff0;
text-align: center; text-align: center;
position: relative;
.unit{
position: absolute;
left: 260px;
top:25px;
font-size: 20px;
}
.time{
position: absolute;
left: 1360px;
top:25px;
font-size: 20px;
}
.title-button { .title-button {
color: #00fff0; color: #00fff0;
font-size: 20px; font-size: 20px;

View File

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

View File

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

View File

@ -196,7 +196,7 @@ export default {
input: true, input: true,
label: '设备名称', label: '设备名称',
prop: 'name', prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
// bind: { // bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode... // disabled: this.editMode == 'detail', // some condition, like detail mode...
// } // }
@ -211,10 +211,6 @@ export default {
input: true, input: true,
label: '英文名称', label: '英文名称',
prop: 'enName', prop: 'enName',
// rules: [{ required: true, message: '', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }
}, },
], ],
[ [
@ -222,10 +218,6 @@ export default {
input: true, input: true,
label: '缩写', label: '缩写',
prop: 'abbr', prop: 'abbr',
// rules: [{ required: true, message: '', trigger: 'blur' }],
// bind: {
// disabled: true, // some condition, like detail mode...
// }
}, },
{ {
@ -233,7 +225,7 @@ export default {
label: '设备类型', label: '设备类型',
prop: 'equipmentTypeId', prop: 'equipmentTypeId',
url: '/base/core-equipment-type/page?pageNo=1&pageSize=100', url: '/base/core-equipment-type/page?pageNo=1&pageSize=100',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }],
bind: { bind: {
filterable: true, filterable: true,
}, },
@ -243,7 +235,7 @@ export default {
label: '预计生产时间(min/天)', label: '预计生产时间(min/天)',
prop: 'workTime', prop: 'workTime',
rules: [ rules: [
{ required: true, message: '不能为空', trigger: 'blur' }, { required: true, message: '预计生产时间不能为空', trigger: 'blur' },
{ {
type: 'number', type: 'number',
message: '请输入正确的数字值', message: '请输入正确的数字值',
@ -283,7 +275,7 @@ export default {
prop: 'tvalue', prop: 'tvalue',
label: '设备TT值', label: '设备TT值',
rules: [ rules: [
{ required: true, message: '不能为空', trigger: 'blur' }, { required: true, message: '设备TT值不能为空', trigger: 'blur' },
{ {
type: 'number', type: 'number',
message: '请输入正确的数字值', message: '请输入正确的数字值',
@ -299,7 +291,7 @@ export default {
label: '产品加工时间(s)', label: '产品加工时间(s)',
prop: 'processingTime', prop: 'processingTime',
rules: [ rules: [
{ required: true, message: '不能为空', trigger: 'blur' }, { required: true, message: '产品加工时间不能为空', trigger: 'blur' },
{ {
type: 'number', type: 'number',
message: '请输入正确的数字值', message: '请输入正确的数字值',
@ -312,7 +304,6 @@ export default {
{ {
input: true, input: true,
label: '制造商', label: '制造商',
// rules: [{ required: true, message: '', trigger: 'blur' }],
prop: 'manufacturer', prop: 'manufacturer',
}, },
{ {
@ -325,7 +316,6 @@ export default {
{ {
textarea: true, textarea: true,
label: '功能描述', label: '功能描述',
// rules: [{ required: true, message: '', trigger: 'blur' }],
prop: 'description', prop: 'description',
}, },
], ],

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -29,27 +29,60 @@
<section v-for="(section, index) in sections" :key="section.key"> <section v-for="(section, index) in sections" :key="section.key">
<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle> <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 /> <el-skeleton v-if="!showForm" animated />
<BaseInfoForm <!-- <BaseInfoForm
key="drawer-dialog-form" key="drawer-dialog-form"
v-if="showForm" v-if="showForm"
ref="form" ref="form"
:disabled="mode.includes('detail')" :disabled="mode.includes('detail')"
:dataForm="form" :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>
<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 <base-table
v-loading="attrListLoading" v-loading="attrListLoading"
:table-props="section.props" :table-props="section.props"
:page="attrQuery?.params.pageNo || 1" :page="attrQuery?.params.pageNo || 1"
:limit="attrQuery?.params.pageSize || 10" :limit="attrQuery?.params.pageSize || 10"
:table-data="list" :table-data="list"
:add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr"
@emitFun="handleEmitFun"> @emitFun="handleEmitFun">
<!-- :add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr" -->
<method-btn <method-btn
v-if="section.tableBtn" v-if="section.tableBtn"
slot="handleBtn" slot="handleBtn"
@ -71,17 +104,10 @@
<div class="drawer-body__footer"> <div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button> <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> -->
<el-button v-else type="primary" @click="handleCancel">确定</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> -->
</div> </div>
</div> </div>
@ -99,9 +125,9 @@
<DialogForm <DialogForm
v-if="attrFormVisible" v-if="attrFormVisible"
ref="attrForm" ref="attrForm"
:disabled="mode.includes('detail')"
v-model="attrForm" v-model="attrForm"
:rows="attrRows" /> :rows="attrRows" />
<!-- :disabled="mode.includes('detail')" -->
</base-dialog> </base-dialog>
</el-drawer> </el-drawer>
</template> </template>
@ -165,8 +191,30 @@ export default {
label: '报警编码', // label: '报警编码', //
prop: 'code', prop: 'code',
url: '/base/equipment-group-alarm/getCode', 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, select: true,
label: '报警类型', // label: '报警类型', //
@ -175,15 +223,7 @@ export default {
{ label: '布尔型', value: 2 }, { label: '布尔型', value: 2 },
{ label: '字符型', value: 1 }, { label: '字符型', value: 1 },
], ],
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, input: true,
@ -191,20 +231,6 @@ export default {
prop: 'alarmCode', 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: { attrQuery: {
params: { params: {
@ -226,7 +252,7 @@ export default {
bind: { bind: {
// //
// disabled: this.mode == 'detail', // disabled: this.mode == 'detail',
disabled: true disabled: true,
}, },
}; };
}); });

View File

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

View File

@ -183,10 +183,7 @@ export default {
input: true, input: true,
label: '设备分组名称', label: '设备分组名称',
prop: 'name', prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '设备分组名称不能为空', trigger: 'blur' }],
// bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode...
// }
}, },
{ {
input: true, input: true,
@ -271,7 +268,7 @@ export default {
input: true, input: true,
label: '分组名称', label: '分组名称',
prop: 'name', prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '分组名称不能为空', trigger: 'blur' }],
// bind: { // bind: {
// disabled: true, // some condition, like detail mode... // disabled: true, // some condition, like detail mode...
// } // }
@ -283,7 +280,7 @@ export default {
label: '分组编码', label: '分组编码',
prop: 'code', prop: 'code',
url: '/base/equipment-group/getCode', 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, input: true,
label: '备注', label: '备注',
prop: 'remark', prop: 'remark',
// rules: [{ required: true, message: '', trigger: 'blur' }],
bind: { bind: {
placeholder: '请输入备注', placeholder: '请输入备注',
}, },

View File

@ -29,27 +29,60 @@
<section v-for="(section, index) in sections" :key="section.key"> <section v-for="(section, index) in sections" :key="section.key">
<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle> <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 /> <el-skeleton v-if="!showForm" animated />
<BaseInfoForm <!-- <BaseInfoForm
key="drawer-dialog-form" key="drawer-dialog-form"
v-if="showForm" v-if="showForm"
ref="form" ref="form"
:disabled="true" :disabled="true"
:dataForm="form" :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>
<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 <base-table
v-loading="attrListLoading" v-loading="attrListLoading"
:table-props="section.props" :table-props="section.props"
:page="attrQuery?.params.pageNo || 1" :page="attrQuery?.params.pageNo || 1"
:limit="attrQuery?.params.pageSize || 10" :limit="attrQuery?.params.pageSize || 10"
:table-data="list" :table-data="list"
:add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr"
@emitFun="handleEmitFun"> @emitFun="handleEmitFun">
<!-- :add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr" -->
<method-btn <method-btn
v-if="section.tableBtn" v-if="section.tableBtn"
slot="handleBtn" slot="handleBtn"
@ -71,17 +104,10 @@
<div class="drawer-body__footer"> <div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button> <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> -->
<el-button v-else type="primary" @click="handleCancel">确定</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> -->
</div> </div>
</div> </div>
@ -96,10 +122,10 @@
@close="closeAttrForm" @close="closeAttrForm"
@cancel="closeAttrForm" @cancel="closeAttrForm"
@confirm="submitAttrForm"> @confirm="submitAttrForm">
<!-- :disabled="mode.includes('detail')" -->
<DialogForm <DialogForm
v-if="attrFormVisible" v-if="attrFormVisible"
ref="attrForm" ref="attrForm"
:disabled="mode.includes('detail')"
v-model="attrForm" v-model="attrForm"
:rows="attrRows" /> :rows="attrRows" />
</base-dialog> </base-dialog>
@ -165,7 +191,7 @@ export default {
label: '报警编码', // label: '报警编码', //
prop: 'code', prop: 'code',
url: '/base/equipment-group-alarm/getCode', url: '/base/equipment-group-alarm/getCode',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '报警编码不能为空', trigger: 'blur' }],
}, },
{ {
select: true, select: true,
@ -175,7 +201,7 @@ export default {
{ label: '布尔型', value: 2 }, { label: '布尔型', value: 2 },
{ label: '字符型', value: 1 }, { label: '字符型', value: 1 },
], ],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '报警类型不能为空', trigger: 'blur' }],
}, },
], ],
[ [
@ -196,13 +222,13 @@ export default {
input: true, input: true,
label: '参数列名', // label: '参数列名', //
prop: 'plcParamName', prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '参数列名不能为空', trigger: 'blur' }],
}, },
{ {
input: true, input: true,
label: '报警内容', label: '报警内容',
prop: 'alarmContent', prop: 'alarmContent',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '报警内容不能为空', trigger: 'blur' }],
}, },
], ],
], ],

View File

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

View File

@ -224,7 +224,7 @@ export default {
bind: { bind: {
filterable: true, filterable: true,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
}, },
], ],
[ [
@ -238,7 +238,7 @@ export default {
bind: { bind: {
filterable: true, filterable: true,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '报警分组不能为空', trigger: 'blur' }],
}, },
], ],
], ],
@ -269,7 +269,7 @@ export default {
input: true, input: true,
label: '设备分组名称', label: '设备分组名称',
prop: 'name', prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '设备分组名称不能为空', trigger: 'blur' }],
// bind: { // bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode... // disabled: this.editMode == 'detail', // some condition, like detail mode...
// } // }

View File

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

View File

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

View File

@ -29,27 +29,62 @@
<section v-for="(section, index) in sections" :key="section.key"> <section v-for="(section, index) in sections" :key="section.key">
<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle> <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 /> <el-skeleton v-if="!showForm" animated />
<BaseInfoForm <!-- <BaseInfoForm
key="drawer-dialog-form" key="drawer-dialog-form"
v-if="showForm" v-if="showForm"
ref="form" ref="form"
:disabled="mode.includes('detail')" :disabled="mode.includes('detail')"
v-model="form" 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>
<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 <base-table
v-loading="attrListLoading" v-loading="attrListLoading"
:table-props="section.props" :table-props="section.props"
:page="attrQuery?.params.pageNo || 1" :page="attrQuery?.params.pageNo || 1"
:limit="attrQuery?.params.pageSize || 10" :limit="attrQuery?.params.pageSize || 10"
:table-data="list" :table-data="list"
:add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr"
@emitFun="handleEmitFun"> @emitFun="handleEmitFun">
<!-- :add-button-show="mode.includes('detail') ? null : '添加属性'"
@emitButtonClick="handleAddAttr" -->
<method-btn <method-btn
v-if="section.tableBtn" v-if="section.tableBtn"
slot="handleBtn" slot="handleBtn"
@ -71,17 +106,10 @@
<div class="drawer-body__footer"> <div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button> <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> -->
<el-button v-else type="primary" @click="handleCancel">确定</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> -->
</div> </div>
</div> </div>
@ -96,10 +124,10 @@
@close="closeAttrForm" @close="closeAttrForm"
@cancel="closeAttrForm" @cancel="closeAttrForm"
@confirm="submitAttrForm"> @confirm="submitAttrForm">
<!-- :disabled="mode.includes('detail')" -->
<DialogForm <DialogForm
v-if="attrFormVisible" v-if="attrFormVisible"
ref="attrForm" ref="attrForm"
:disabled="mode.includes('detail')"
v-model="attrForm" v-model="attrForm"
:rows="attrRows" /> :rows="attrRows" />
</base-dialog> </base-dialog>
@ -166,13 +194,13 @@ export default {
input: true, input: true,
label: '参数列名', label: '参数列名',
prop: 'plcParamName', prop: 'plcParamName',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '参数列名不能为空', trigger: 'blur' }],
}, },
{ {
input: true, input: true,
label: '参数名称', label: '参数名称',
prop: 'name', prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '参数名称不能为空', trigger: 'blur' }],
}, },
], ],
[ [
@ -181,7 +209,6 @@ export default {
label: '单位', label: '单位',
prop: 'unit', prop: 'unit',
options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT), options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT),
// rules: [{ required: true, message: '', trigger: 'blur' }],
}, },
{ {
switch: true, switch: true,
@ -199,24 +226,23 @@ export default {
label: '设备参数类型', label: '设备参数类型',
prop: 'equipment_param_type', prop: 'equipment_param_type',
options: [ options: [
{ label: '一般参数', value: 1 }, { label: '一般参数', value: 1 },
{ label: '工艺参数', value: 2 }, { label: '工艺参数', value: 2 },
{ label: '报警参数', value: 3 }, { label: '报警参数', value: 3 },
], ],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '设备参数类型不能为空', trigger: 'blur' }],
}, },
{ {
select: true, select: true,
label: '生产参数类型', label: '生产参数类型',
prop: 'production_param_type', prop: 'production_param_type',
options: [ options: [
{ label: '进片数量', value: 1 }, { label: '进片数量', value: 1 },
{ label: '出片数量', value: 2 }, { label: '出片数量', value: 2 },
{ label: '破损数量', value: 3 }, { label: '破损数量', value: 3 },
{ label: '无类型', value: 4 }, { 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), transform: (val) => Number(val),
}, },
], ],
// rules: [{ required: true, message: '', trigger: 'blur' }],
}, },
], ],
[ [
@ -256,13 +281,11 @@ export default {
input: true, input: true,
label: '标准值', label: '标准值',
prop: 'defaultValue', prop: 'defaultValue',
// rules: [{ required: true, message: '', trigger: 'blur' }],
}, },
{ {
input: true, input: true,
label: '描述', label: '描述',
prop: 'description', prop: 'description',
// rules: [{ required: true, message: '', trigger: 'blur' }],
}, },
], ],
[ [
@ -270,7 +293,6 @@ export default {
input: true, input: true,
label: '备注', label: '备注',
prop: 'remark', 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

@ -166,7 +166,7 @@ export default {
filterable: true, filterable: true,
clearable: true, clearable: true,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
}, },
], ],
[ [
@ -181,8 +181,7 @@ export default {
clearable: true, clearable: true,
multiple: true, multiple: true,
}, },
options: [{ label: 'test', value: 'test' }], rules: [{ required: true, message: '维修工不能为空', trigger: 'blur' }],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
}, },
{ {
input: true, input: true,
@ -195,7 +194,7 @@ export default {
datetime: true, datetime: true,
label: '故障发生时间', label: '故障发生时间',
prop: 'faultTime', prop: 'faultTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '故障发生时间不能为空', trigger: 'blur' }],
bind: { bind: {
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp', 'value-format': 'timestamp',

View File

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

View File

@ -42,7 +42,7 @@
v-if="open" v-if="open"
ref="form" ref="form"
v-model="form" v-model="form"
:disabled="mode == 'detail'" :disabled="mode == 'detail'"
:has-files="true" :has-files="true"
:rows="rows" /> :rows="rows" />
</base-dialog> </base-dialog>
@ -53,7 +53,7 @@
import moment from 'moment'; import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin'; import basicPageMixin from '@/mixins/lb/basicPageMixin';
import Editor from '@/components/Editor'; import Editor from '@/components/Editor';
import { deleteEqMaintainLog } from '@/api/equipment/base/maintain/record' import { deleteEqMaintainLog } from '@/api/equipment/base/maintain/record';
const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'); const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
@ -64,7 +64,6 @@ export default {
data() { data() {
return { return {
searchBarKeys: [ searchBarKeys: [
'maintainPlanId',
'maintainPlanId', 'maintainPlanId',
'startTime', 'startTime',
'relatePlan', 'relatePlan',
@ -187,10 +186,9 @@ export default {
filterable: true, filterable: true,
clearable: true, clearable: true,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '保养设备不能为空', trigger: 'blur' }],
}, },
{ {
// TODO:
select: true, select: true,
label: '保养人员', label: '保养人员',
prop: 'maintainWorker', prop: 'maintainWorker',
@ -201,7 +199,7 @@ export default {
clearable: true, clearable: true,
multiple: true, multiple: true,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '保养人员不能为空', trigger: 'blur' }],
}, },
{ {
input: true, input: true,
@ -218,15 +216,14 @@ export default {
'active-value': 1, 'active-value': 1,
'inactive-value': 2, 'inactive-value': 2,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '是否计划保养不能为空', trigger: 'blur' }],
}, },
{}, {},
{ {
// TODO:
select: true, select: true,
label: '所属计划', label: '所属计划',
prop: 'maintainPlanId', prop: 'maintainPlanId',
url: '', url: '/base/equipment-maintain-plan/page',
bind: { bind: {
filterable: true, filterable: true,
clearable: true, clearable: true,
@ -238,7 +235,7 @@ export default {
datetime: true, datetime: true,
label: '开始时间', label: '开始时间',
prop: 'startTime', prop: 'startTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
bind: { bind: {
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp', 'value-format': 'timestamp',
@ -250,7 +247,7 @@ export default {
datetime: true, datetime: true,
label: '结束时间', label: '结束时间',
prop: 'endTime', prop: 'endTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
bind: { bind: {
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp', 'value-format': 'timestamp',
@ -272,10 +269,16 @@ export default {
prop: 'files', 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' }], [{ input: true, label: '备注', prop: 'remark' }],
], ],
// //
@ -293,20 +296,26 @@ export default {
// //
form: {}, form: {},
basePath: '/base/equipment-maintain-log', basePath: '/base/equipment-maintain-log',
mode: null mode: null,
}; };
}, },
created() { created() {
this.initSearchBar(); this.initSearchBar();
if (this.$route.query) { if (this.$route.query) {
this.queryParams.equipmentId = this.$route.query?.equipmentId ?? undefined this.queryParams.equipmentId =
this.queryParams.maintainPlanId = this.$route.query?.maintainPlanId ?? undefined this.$route.query?.equipmentId ?? undefined;
this.queryParams.relatePlan = this.$route.query?.relatePlan ?? undefined this.queryParams.maintainPlanId =
this.queryParams.startTime = this.$route.query?.createTime ?? undefined this.$route.query?.maintainPlanId ?? undefined;
this.searchBarFormConfig[0].defaultSelect = this.$route.query.equipmentId ?? undefined this.queryParams.relatePlan = this.$route.query?.relatePlan ?? undefined;
this.searchBarFormConfig[1].defaultSelect = Number(this.$route.query.maintainPlanId) ?? undefined this.queryParams.startTime = this.$route.query?.createTime ?? undefined;
this.searchBarFormConfig[2].defaultSelect = this.$route.query?.createTime ?? undefined this.searchBarFormConfig[0].defaultSelect =
this.searchBarFormConfig[3].defaultSelect = Number(this.$route.query.relatePlan) ?? undefined 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(); this.getList();
}, },
@ -349,7 +358,7 @@ export default {
/** 取消按钮 */ /** 取消按钮 */
cancel() { cancel() {
this.open = false; this.open = false;
this.mode = null; this.mode = null;
this.reset(); this.reset();
}, },
/** 表单重置 */ /** 表单重置 */
@ -399,7 +408,7 @@ export default {
this.info({ id }).then((response) => { this.info({ id }).then((response) => {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.form.maintainWorker = this.form.maintainWorker.split(',') this.form.maintainWorker = this.form.maintainWorker.split(',');
this.title = '修改保养记录'; this.title = '修改保养记录';
}); });
}, },
@ -409,7 +418,7 @@ export default {
if (!valid) { if (!valid) {
return; return;
} }
this.form.maintainWorker = this.form.maintainWorker.join(',') this.form.maintainWorker = this.form.maintainWorker.join(',');
// //
if (this.form.id != null) { if (this.form.id != null) {
this.put(this.form).then((response) => { this.put(this.form).then((response) => {
@ -443,7 +452,7 @@ export default {
}, },
handleDetail({ id }) { handleDetail({ id }) {
this.reset(); this.reset();
this.mode = 'detail' this.mode = 'detail';
this.info({ id }).then((response) => { this.info({ id }).then((response) => {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;

View File

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

View File

@ -184,7 +184,7 @@ export default {
input: true, input: true,
label: '维修单号', label: '维修单号',
prop: 'repairOrderNumber', prop: 'repairOrderNumber',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '维修单号不能为空', trigger: 'blur' }],
}, },
{ {
select: true, select: true,
@ -195,7 +195,7 @@ export default {
filterable: true, filterable: true,
clearable: true, clearable: true,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
}, },
], ],
[ [
@ -213,7 +213,7 @@ export default {
// multiple: true, // multiple: true,
}, },
// options: [{ label: 'test', value: 'test' }], // options: [{ label: 'test', value: 'test' }],
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '维修工不能为空', trigger: 'blur' }],
}, },
{ {
input: true, input: true,
@ -226,7 +226,7 @@ export default {
datetime: true, datetime: true,
label: '故障发生时间', label: '故障发生时间',
prop: 'faultTime', prop: 'faultTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '故障发生时间不能为空', trigger: 'blur' }],
bind: { bind: {
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp', 'value-format': 'timestamp',

View File

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

View File

@ -198,21 +198,6 @@ export default {
prop: 'remark', 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, open: false,

View File

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

View File

@ -180,7 +180,7 @@ export default {
input: true, input: true,
label: '工艺名称', label: '工艺名称',
prop: 'name', prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '工艺名称不能为空', trigger: 'blur' }],
// bind: { // bind: {
// disabled: this.editMode == 'detail', // some condition, like detail mode... // disabled: this.editMode == 'detail', // some condition, like detail mode...
// } // }
@ -197,6 +197,7 @@ export default {
select: true, select: true,
label: '产线', label: '产线',
prop: 'lineId', prop: 'lineId',
rules: [{ required: true, message: '产线不能为空', trigger: 'blur' }],
// cache: 'processFlow::lineList', // cache: 'processFlow::lineList',
url: '/base/core-production-line/listAll', url: '/base/core-production-line/listAll',
bind: { bind: {
@ -217,8 +218,9 @@ export default {
[ [
{ {
textarea: true, textarea: true,
label: '功能描述', label: '工艺描述',
prop: 'remark', prop: 'remark',
rules: [{ required: true, message: '工艺描述不能为空', trigger: 'blur' }],
}, },
], ],
], ],

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

@ -31,6 +31,9 @@
icon="el-icon-search" icon="el-icon-search"
placeholder="搜索" placeholder="搜索"
v-model="searchText" v-model="searchText"
:disabled="currentDet == null"
@change="handleSearchTextChange"
clearable
style="margin-left: 20px"> style="margin-left: 20px">
<i slot="prefix" class="el-input__icon el-icon-search"></i> <i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input> </el-input>
@ -63,22 +66,27 @@
<base-dialog <base-dialog
dialogTitle="选择设备" dialogTitle="选择设备"
:dialogVisible="open" :dialogVisible="open"
width="45%"
@close="cancel" @close="cancel"
@cancel="cancel" @cancel="cancel"
@confirm="submitForm"> @confirm="submitForm">
<el-transfer v-model="choosedEquipments" :data="eqList"> <!-- <CustomTransfer /> -->
<!-- <span slot-scope="{ option }"> <BomSelector
{{ option.key }} - {{ option.label }} ref="bomSelector"
</span> --> v-if="open"
</el-transfer> :bom-list="bomList"
:value="selectedBoms"
@update="selectedBoms = $event" />
</base-dialog> </base-dialog>
</section> </section>
</template> </template>
<script> <script>
import BomSelector from './BomSelector.vue';
export default { export default {
name: 'ProcessBom', name: 'ProcessBom',
components: {}, components: { BomSelector },
props: { props: {
currentDet: { currentDet: {
type: Object, type: Object,
@ -89,11 +97,12 @@ export default {
return { return {
open: false, open: false,
eqList: [], eqList: [],
bomList: [],
finalList: [], finalList: [],
choosedEquipments: [], choosedEquipments: [],
searchBarFormConfig: [{ label: '工序下设备' }], searchBarFormConfig: [{ label: '工序下设备' }],
tableProps: [ tableProps: [
{ prop: 'equipmentId', label: '设备名称' }, { prop: 'equName', label: '设备名称' },
{ prop: 'materialName', label: '物料BOM' }, { prop: 'materialName', label: '物料BOM' },
{ prop: 'valueName', label: '参数BOM' }, { prop: 'valueName', label: '参数BOM' },
], ],
@ -103,13 +112,17 @@ export default {
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
equipmentName: '',
}, },
searchText: '' searchText: '',
selectedBoms: [],
timer: null,
}; };
}, },
watch: { watch: {
currentDet: { currentDet: {
handler(val) { handler(val) {
console.log('currentDet', val);
if (val != null) { if (val != null) {
this.getList(val); this.getList(val);
} else { } else {
@ -121,51 +134,21 @@ export default {
}, },
}, },
methods: { methods: {
renderFn(h, option) {
console.log(option);
return <span>1</span>;
},
async getEqList() {
console.log('currentDet', this.currentDet);
const { sectionId } = this.currentDet;
const { code, data } = await this.http(
'base/core-equipment-bind-section/page',
'get',
{ workshopSectionId: sectionId, pageNo: 1, pageSize: 100 }
);
if (code == 0) {
console.log('workshopSectionId', data);
//
this.eqList = [
{ equipmentId: 1, equipmentName: '设备1' },
{ equipmentId: 2, equipmentName: '设备2' },
{ equipmentId: 3, equipmentName: '设备3' },
{ equipmentId: 4, equipmentName: '设备4' },
{ equipmentId: 5, equipmentName: '设备5' },
{ equipmentId: 6, equipmentName: '设备6' },
]; // ].map((item) => ({ label: item.equipmentName, key: item.equipmentId }));
// bombom
// bom bom
this.finalList = this.eqList.map((item) => {
item.sub = [];
// key: equipmentId-bomId
item.sub.push({
key: item.equipmentId + '-' + '101',
label: '参数bom1',
});
item.sub.push({
key: item.equipmentId + '-' + '201',
label: '物料bom1',
});
return item;
});
}
},
handleEmitFun() {}, handleEmitFun() {},
handleTableBtnClick() {}, 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) { put(payload) {
return this.http(this.updateUrl, 'put', payload); return this.http(this.updateUrl, 'put', payload);
}, },
@ -186,8 +169,41 @@ export default {
data: method !== 'get' ? payload : null, data: method !== 'get' ? payload : null,
}); });
}, },
submitForm() {}, submitForm() {
async getList({ detId, detName, detDesc, flowId, sectionName } = {}) { //
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('请选择设备');
}
});
},
async getList({
detId,
detName,
detDesc,
flowId,
sectionName,
sectionId,
} = {}) {
console.log('get list', detId, detName, flowId); console.log('get list', detId, detName, flowId);
const { data, code } = await this.http( const { data, code } = await this.http(
'/extend/process-flow-det-equipment/page', '/extend/process-flow-det-equipment/page',
@ -201,10 +217,38 @@ export default {
this.list.splice(0); this.list.splice(0);
this.total = 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() { async handleAddEquipment() {
this.open = true; this.open = true;
await this.getEqList();
}, },
cancel() { cancel() {
this.open = false; this.open = false;

View File

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

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() { data() {
return { return {
flowId: null, flowId: null,
currentDet: null currentDet: null,
}; };
}, },
provide() { 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() { activated() {
console.log('activated...', this.$route.params); console.log('activated...', this.$route.params);
this.flowId = this.$route.params.id; this.flowId = this.$route.params.id;
@ -44,10 +52,9 @@ export default {
methods: { methods: {
handleDetSelected(det) { handleDetSelected(det) {
if (det != null) { if (det != null) {
this.currentDet = { ...det } this.currentDet = { ...det };
} } else this.currentDet = null;
else this.currentDet = null; },
}
}, },
}; };
</script> </script>

View File

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

View File

@ -27,24 +27,26 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="按钮盒识别码" prop="buttonId" :rules="[ <el-form-item label="按钮盒识别码" prop="buttonId" :rules="[
{ required: true, message: '不能为空', trigger: 'blur' }, { required: true, message: '不能为空', trigger: 'blur' },
{ {
type: 'number', type: 'number',
message: '请输入整数', message: '请输入整数',
trigger: 'blur', trigger: 'blur',
transform: (val) => Number.isInteger(Number(val)) && Number(val), transform: (val) => Number.isInteger(Number(val)) && Number(val),
}, },
]"> ]">
<el-input v-model="dataForm.buttonId" @change="$emit('update', dataForm)" placeholder="请输入整数" /> <el-input v-model="dataForm.buttonId" @change="$emit('update', dataForm)" placeholder="请输入整数" />
</el-form-item> </el-form-item>
<!--
<el-form-item <el-form-item
label="报警编码" label="产线"
prop="code" prop="productionLineId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]"> :rules="[
{ required: true, message: '产线不能为空', trigger: 'blur' },
]">
<el-select <el-select
v-model="dataForm.code" v-model="dataForm.productionLineId"
placeholder="请选择产线" placeholder="请选择产线"
filterable
@change="handleProductlineChange"> @change="handleProductlineChange">
<el-option <el-option
v-for="opt in productionLineList" v-for="opt in productionLineList"
@ -52,38 +54,78 @@
:label="opt.label" :label="opt.label"
:value="opt.value" /> :value="opt.value" />
</el-select> </el-select>
</el-form-item> --> </el-form-item>
</el-col> </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-col :span="12">
<el-form-item label="按钮盒模式" prop="model"> <el-form-item
<el-input v-model="dataForm.model" @change="$emit('update', dataForm)" placeholder="请输入按钮盒模式" /> label="按钮盒识别码"
</el-form-item> prop="buttonId"
</el-col> :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>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="按钮值" prop="keyValue" :rules="[ <el-form-item label="按钮值" prop="keyValue" :rules="[
{ required: true, message: '不能为空', trigger: 'blur' }, { required: true, message: '不能为空', trigger: 'blur' },
{ {
type: 'number', type: 'number',
message: '请输入100以内的整数', message: '请输入100以内的整数',
trigger: 'blur', trigger: 'blur',
transform: (val) => transform: (val) =>
Number.isInteger(+val) && Number.isInteger(+val) &&
Number(val) >= 0 && Number(val) >= 0 &&
Number(val) <= 100 && Number(val) <= 100 &&
Number(val), Number(val),
}, },
]"> ]">
<el-input v-model="dataForm.keyValue" type="number" min="0" max="100" @change="$emit('update', dataForm)" <el-input v-model="dataForm.keyValue" type="number" min="0" max="100" @change="$emit('update', dataForm)"
placeholder="请输入按钮盒模式" /> placeholder="请输入按钮盒模式" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="检测内容" prop="inspectionDetContent"> <el-form-item label="检测内容" prop="inspectionDetId">
<el-input type="textarea" v-model="dataForm.inspectionDetContent" placeholder="请输入检测内容" <el-select v-model="dataForm.inspectionDetId" placeholder="请选择检测内容" filterable
@change="$emit('update', dataForm)"></el-input> @change="$emit('update', dataForm)">
<el-option v-for="opt in inspectionDetList" :key="opt.value" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -108,12 +150,14 @@ export default {
data() { data() {
return { return {
formLoading: true, formLoading: true,
productionLineList: [], productionLineList: [],
inspectionDetList:[],
workshopSectionList: [], workshopSectionList: [],
}; };
}, },
mounted() { mounted() {
this.getProductionLineList(); this.getProductionLineList()
this.getQualityInspectionDetList()
// this.getWorksectionList(); // this.getWorksectionList();
// this.getCode('/base/equipment-group-alarm/getCode').then((code) => { // this.getCode('/base/equipment-group-alarm/getCode').then((code) => {
// this.formLoading = false; // this.formLoading = false;
@ -153,7 +197,20 @@ export default {
} }
this.formLoading = false; this.formLoading = false;
}, },
async getQualityInspectionDetList() {
this.formLoading = true;
const res = await this.$axios({
url: '/base/quality-inspection-det/listAll',
method: 'get',
});
if (res.code == 0) {
this.inspectionDetList = res.data.map((item) => ({
label: item.content,
value: item.id,
}));
}
this.formLoading = false;
},
async getWorksectionList(id) { async getWorksectionList(id) {
this.formLoading = true; this.formLoading = true;
const res = await this.$axios({ const res = await this.$axios({

View File

@ -70,7 +70,7 @@ export default {
label: '产线', label: '产线',
url: '/base/production-line/listAll', url: '/base/production-line/listAll',
prop: 'productionId', prop: 'productionId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '产线不能为空', trigger: 'blur' }],
bind: { bind: {
filterable: true, filterable: true,
}, },
@ -80,7 +80,7 @@ export default {
label: '工段', label: '工段',
url: '/base/workshop-section/listAll', url: '/base/workshop-section/listAll',
prop: 'sectionId', prop: 'sectionId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '工段不能为空', trigger: 'blur' }],
bind: { bind: {
filterable: true, filterable: true,
}, },
@ -118,13 +118,17 @@ export default {
}, },
], ],
bind: { type: 'number', min: 0, max: 100 }, bind: { type: 'number', min: 0, max: 100 },
}, },
{ {
textarea: true, select: true,
label: '检测内容', label: '检测内容',
prop: 'inspectionDetContent', url: '/base/quality-inspection-det/listAll',
// rules: [{ required: true, message: '', trigger: 'blur' }], prop: 'inspectionDetId',
}, rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
},
], ],
], ],
searchBarFormConfig: [ searchBarFormConfig: [
@ -218,7 +222,7 @@ export default {
form: { form: {
id: null, id: null,
buttonId: null, buttonId: null,
inspectionDetContent: null, inspectionDetId: null,
productionLineId: null, productionLineId: null,
sectionId: null, sectionId: null,
model: null, model: null,

View File

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

View File

@ -47,7 +47,13 @@
input: true, input: true,
label: '检测类型名称', label: '检测类型名称',
prop: 'name', prop: 'name',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [
{
required: true,
message: '检测类型名称不能为空',
trigger: 'blur',
},
],
// bind: { // bind: {
// disabled: true, // some condition, like detail mode... // disabled: true, // some condition, like detail mode...
// } // }
@ -174,31 +180,7 @@ export default {
plain: true, plain: true,
color: 'success', 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, open: false,
// //
@ -208,11 +190,11 @@ export default {
name: null, name: null,
}, },
// //
form: { form: {
name: null, name: null,
code: undefined, code: undefined,
remark:undefined remark: undefined,
}, },
}; };
}, },
// watch: { // watch: {

View File

@ -1,7 +1,7 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-11-06 15:15:30 * @Date: 2023-11-06 15:15:30
* @LastEditTime: 2023-11-06 16:00:24 * @LastEditTime: 2023-11-20 15:23:59
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
@ -10,18 +10,18 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="报废原因编码" prop="code"> <el-form-item label="报废原因编码" prop="code">
<el-input v-model="dataForm.code" placeholder="请输入报废类型编码" /> <el-input v-model="dataForm.code" placeholder="请输入报废原因编码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="报废原因" prop="content"> <el-form-item label="报废原因" prop="content">
<el-input v-model="dataForm.content" placeholder="请输入报废类型" /> <el-input v-model="dataForm.content" placeholder="请输入报废原因" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="报废类型" prop="description"> <el-form-item label="报废类型" prop="typeId">
<el-select v-model="dataForm.typeId" placeholder="请选择报废类型"> <el-select v-model="dataForm.typeId" placeholder="请选择报废类型">
<el-option v-for="dict in typeList" :key="dict.id" :label="dict.name" :value="dict.id" /> <el-option v-for="dict in typeList" :key="dict.id" :label="dict.name" :value="dict.id" />
</el-select> </el-select>
@ -68,6 +68,7 @@ export default {
// materialId: [{ required: true, message: "", trigger: "blur" }], // materialId: [{ required: true, message: "", trigger: "blur" }],
code: [{ required: true, message: "报废原因编码不能为空", trigger: "blur" }], code: [{ required: true, message: "报废原因编码不能为空", trigger: "blur" }],
content: [{ required: true, message: "报废原因不能为空", trigger: "blur" }], content: [{ required: true, message: "报废原因不能为空", trigger: "blur" }],
typeId: [{ required: true, message: "报废类型不能为空", trigger: "change" }],
} }
}; };
}, },

View File

@ -1,7 +1,7 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-11-06 15:15:30 * @Date: 2023-11-06 15:15:30
* @LastEditTime: 2023-11-07 18:56:20 * @LastEditTime: 2023-11-21 14:11:18
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
@ -23,8 +23,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="数量" prop="sum"> <el-form-item label="数量" prop="num">
<el-input v-model="dataForm.sum" placeholder="请输入数量" /> <el-input v-model="dataForm.num" placeholder="请输入数量" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -176,9 +176,9 @@ export default {
getDetList().then((res) => { getDetList().then((res) => {
console.log(res); console.log(res);
// console.log(response); // console.log(response);
this.workOrderList = res.data.map((item) => { this.detList = res.data.map((item) => {
return { return {
name: item.name, name: item.content,
id: item.id id: item.id
} }
}) })

View File

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

View File

@ -1,8 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="handleSearchBarBtnClick" />
<!-- 列表 --> <!-- 列表 -->
<el-row> <el-row>
<el-col class="custom-tabs"> <el-col class="custom-tabs">
@ -20,6 +18,7 @@
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="'\u3000图形数据\u3000'" name="chart" style="overflow: inherit"> <el-tab-pane :label="'\u3000图形数据\u3000'" name="chart" style="overflow: inherit">
<SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="handleSearchBarBtnClick" />
<div id="main" style="height: 500px;width: 1000px;"></div> <div id="main" style="height: 500px;width: 1000px;"></div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@ -75,13 +74,13 @@ export default {
}, },
activeName: 'table', activeName: 'table',
searchBarFormConfig: [ searchBarFormConfig: [
// { {
// type: 'select', type: 'label',
// label: '', label: '当前检测数据柱状图',
// placeholder: '', // placeholder: '',
// param: 'workOrderId', // param: 'workOrderId',
// selectOptions: [], // selectOptions: [],
// }, },
// { // {
// type: 'select', // type: 'select',
// label: '', // label: '',
@ -95,40 +94,40 @@ export default {
// placeholder: '', // placeholder: '',
// param: 'inspectionDetContent', // param: 'inspectionDetContent',
// }, // },
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd HH:mm:ss',
format: 'yyyy-MM-dd',
valueFormat: 'timestamp',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'checkTime',
// width: 350,
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
{
type: 'separate',
},
// { // {
// type: this.$auth.hasPermi( // type: 'datePicker',
// 'base:quality-inspection-record:create' // label: '',
// ) // dateType: 'daterange', // datetimerange
// ? 'button' // // format: 'yyyy-MM-dd HH:mm:ss',
// : '', // format: 'yyyy-MM-dd',
// btnName: '', // valueFormat: 'timestamp',
// name: 'add', // rangeSeparator: '-',
// plain: true, // startPlaceholder: '',
// color: 'success', // endPlaceholder: '',
// defaultTime: ['00:00:00', '23:59:59'],
// param: 'checkTime',
// // width: 350,
// }, // },
// {
// type: 'button',
// btnName: '',
// name: 'search',
// color: 'primary',
// },
// {
// type: 'separate',
// },
// // {
// // type: this.$auth.hasPermi(
// // 'base:quality-inspection-record:create'
// // )
// // ? 'button'
// // : '',
// // btnName: '',
// // name: 'add',
// // plain: true,
// // color: 'success',
// // },
], ],
// tableBtn: [ // tableBtn: [
// this.$auth.hasPermi('base:quality-inspection-record:update') // this.$auth.hasPermi('base:quality-inspection-record:update')
@ -316,6 +315,7 @@ export default {
data: arrYAxis, data: arrYAxis,
type: 'bar', type: 'bar',
showBackground: true, showBackground: true,
barWidth:'20',
backgroundStyle: { backgroundStyle: {
color: 'rgba(180, 180, 180, 0.2)' color: 'rgba(180, 180, 180, 0.2)'
} }

View File

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

View File

@ -6,141 +6,81 @@
--> -->
<template> <template>
<el-form <el-form ref="form" :model="innerDataForm" label-width="100px" v-loading="formLoading">
ref="form" <el-row :gutter="20">
:model="innerDataForm" <el-col :span="12">
label-width="100px" <el-form-item label="工单号" prop="workOrderId" :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
v-loading="formLoading"> <el-select v-model="innerDataForm.workOrderId" placeholder="请选择工单号" filterable clearable>
<el-row :gutter="20"> <el-option v-for="opt in workOrderList" :key="opt.value" :label="opt.label" :value="opt.value" />
<el-col :span="12"> </el-select>
<el-form-item </el-form-item>
label="检测内容" </el-col>
prop="inspectionDetId" <el-col :span="12">
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]"> <el-form-item label="检测内容" prop="inspectionDetId"
<el-select :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
v-model="innerDataForm.inspectionDetId" <el-select v-model="innerDataForm.inspectionDetId" placeholder="请选择检测内容" filterable clearable
placeholder="请选择检测内容" @change="handleInspectionDetChange">
filterable <el-option v-for="opt in inspectionDetList" :key="opt.value" :label="opt.label" :value="opt.value" />
clearable </el-select>
@change="handleInspectionDetChange"> </el-form-item>
<el-option </el-col>
v-for="opt in inspectionDetList" </el-row>
:key="opt.value" <el-row :gutter="20">
:label="opt.label" <el-col :span="12">
:value="opt.value" /> <el-form-item label="产线" prop="productionLineId"
</el-select> :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
</el-form-item> <el-select v-model="innerDataForm.productionLineId" placeholder="请选择产线" filterable clearable
</el-col> @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="sectionId" :rules="[{ required: false, message: '不能为空', trigger: 'blur' }]">
<el-select v-model="innerDataForm.sectionId" placeholder="请选择工段" clearable filterable
@change="$emit('update', innerDataForm)">
<el-option v-for="opt in sectionList" :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="checkPerson">
<el-input v-model="innerDataForm.checkPerson" clearable @change="$emit('update', innerDataForm)"
placeholder="请输入检测人员" />
</el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item <el-form-item label="检测时间" prop="checkTime" :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
label="来源" <el-date-picker v-model="innerDataForm.checkTime" type="datetime" placeholder="请选择检测时间"
prop="source" value-format="timestamp" @change="$emit('update', innerDataForm)"></el-date-picker>
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]"> </el-form-item>
<el-select </el-col>
v-model="innerDataForm.source" </el-row>
placeholder="请选择来源" <el-row :gutter="20">
filterable <el-col :span="12">
clearable <el-form-item label="来源" prop="source" :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
@change="$emit('update', innerDataForm)"> <el-select v-model="innerDataForm.source" placeholder="请选择来源" filterable clearable
<el-option @change="$emit('update', innerDataForm)">
v-for="opt in [ <el-option v-for="opt in [
{ label: '手动', value: 1 }, { label: '手动', value: 1 },
{ label: '自动', value: 2 }, { label: '自动', value: 2 },
]" ]" :key="opt.value" :label="opt.label" :value="opt.value" />
:key="opt.value" </el-select>
:label="opt.label" </el-form-item>
:value="opt.value" /> </el-col>
</el-select> </el-row>
</el-form-item> <el-row :gutter="20">
</el-col> <el-col>
</el-row> <el-form-item label="备注" prop="remark">
<el-row :gutter="20"> <el-input v-model="innerDataForm.remark" @change="$emit('update', innerDataForm)" placeholder="请输入备注">
<el-col :span="12"> </el-input>
<el-form-item </el-form-item>
label="产线" </el-col>
prop="productionLineId" </el-row>
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]"> </el-form>
<el-select
v-model="innerDataForm.productionLineId"
placeholder="请选择产线"
filterable
clearable
@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="sectionId"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.sectionId"
placeholder="请选择工段"
clearable
filterable
@change="$emit('update', innerDataForm)">
<el-option
v-for="opt in sectionList"
: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="checkPerson">
<el-input
v-model="innerDataForm.checkPerson"
clearable
@change="$emit('update', innerDataForm)"
placeholder="请输入检测人员" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="检测时间"
prop="checkTime"
:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="innerDataForm.checkTime"
type="datetime"
placeholder="请选择检测时间"
value-format="timestamp"
@change="$emit('update', innerDataForm)"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="描述" prop="explainText">
<el-input
v-model="innerDataForm.explainText"
placeholder="请输入描述信息"
@change="$emit('update', innerDataForm)"
type="textarea"></el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="备注" prop="remark">
<el-input
v-model="innerDataForm.remark"
@change="$emit('update', innerDataForm)"
placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template> </template>
<script> <script>
@ -163,13 +103,14 @@ export default {
formLoading: true, formLoading: true,
inspectionDetList: [], inspectionDetList: [],
productionLineList: [], productionLineList: [],
sectionList: [], sectionList: [],
workOrderList:[],
innerDataForm: {}, innerDataForm: {},
cacheInspectionDetList: null, cacheInspectionDetList: null,
}; };
}, },
mounted() { mounted() {
Promise.all([this.getProductLineList(), this.getInspectionDetList()]).then( Promise.all([this.getProductLineList(), this.getInspectionDetList(), this.getWorkOrderList()]).then(
() => { () => {
this.formLoading = false; this.formLoading = false;
} }
@ -231,6 +172,14 @@ export default {
})); }));
}, },
async getWorkOrderList() {
const response = await this.$axios('base/core-work-order/listbyfilter');
this.workOrderList = response.data.map((item) => ({
label: item.name,
value: item.id,
}));
},
// //
async getInspectionDetList() { async getInspectionDetList() {
const response = await this.$axios( const response = await this.$axios(

View File

@ -74,7 +74,7 @@ export default {
url: '/base/quality-inspection-det/listAll', url: '/base/quality-inspection-det/listAll',
prop: 'inspectionDetId', prop: 'inspectionDetId',
labelKey: 'content', labelKey: 'content',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '检测内容不能为空', trigger: 'blur' }],
bind: { bind: {
filterable: true, filterable: true,
}, },
@ -102,7 +102,7 @@ export default {
bind: { bind: {
filterable: true, filterable: true,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '产线不能为空', trigger: 'blur' }],
}, },
{ {
select: true, select: true,
@ -113,7 +113,7 @@ export default {
bind: { bind: {
filterable: true, filterable: true,
}, },
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: false, message: '不能为空', trigger: 'blur' }],
}, },
], ],
[ [
@ -126,7 +126,7 @@ export default {
datetime: true, datetime: true,
label: '检测时间', label: '检测时间',
prop: 'checkTime', prop: 'checkTime',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }], rules: [{ required: true, message: '检测时间不能为空', trigger: 'blur' }],
bind: { bind: {
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp', 'value-format': 'timestamp',
@ -135,31 +135,25 @@ export default {
}, },
}, },
], ],
// [
// {
// textarea: true,
// label: '',
// prop: 'inspectionDetContent',
// value: '',
// rules: [{ required: true, message: '', trigger: 'blur' }],
// },
// ],
[{ textarea: true, label: '描述', prop: 'explainText' }], [{ textarea: true, label: '描述', prop: 'explainText' }],
[{ input: true, label: '备注', prop: 'remark' }], [{ input: true, label: '备注', prop: 'remark' }],
], ],
searchBarFormConfig: [ searchBarFormConfig: [
{ {
type: 'select', type: 'select',
label: '产线', label: '工单号',
placeholder: '请选择产线', placeholder: '请选择工单号',
param: 'productionLineId', param: 'workOrderId',
selectOptions: [], selectOptions: [],
filterable:true
}, },
{ {
type: 'input', type: 'select',
label: '检测内容', label: '检测内容',
placeholder: '请输入检测内容', placeholder: '请输入检测内容',
param: 'inspectionDetContent', selectOptions: [],
param: 'inspectionDetContent',
filterable: true
}, },
{ {
type: 'datePicker', type: 'datePicker',
@ -217,7 +211,12 @@ export default {
fixed: true, fixed: true,
width: 180, width: 180,
filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'), filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
}, },
{
// width: 128,
prop: 'workOrderName',
label: '工单Id',
},
{ {
// width: 128, // width: 128,
prop: 'inspectionDetContent', prop: 'inspectionDetContent',
@ -255,7 +254,8 @@ export default {
inspectionDetContent: undefined, inspectionDetContent: undefined,
productionLineId: undefined, productionLineId: undefined,
sectionId: undefined, sectionId: undefined,
checkPerson: undefined, checkPerson: undefined,
workOrderId:undefined,
checkTime: undefined, checkTime: undefined,
source: undefined, source: undefined,
explainText: undefined, explainText: undefined,
@ -264,16 +264,17 @@ export default {
// //
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
workOrderId:null,
inspectionDetContent: null, inspectionDetContent: null,
checkTime: [], checkTime: [],
productionLineId: null, // productionLineId: null,
}, },
}; };
}, },
created() { created() {
this.getList(); this.getList();
// this.getProductLineList(); this.getProductLineList()
}, },
watch: { watch: {
form: { form: {
@ -309,7 +310,7 @@ export default {
methods: { methods: {
/** 获取搜索栏的产线列表 */ /** 获取搜索栏的产线列表 */
getProductLineList() { getProductLineList() {
this.$axios('/base/production-line/listAll').then((response) => { this.$axios('/base/core-work-order/listbyfilter').then((response) => {
this.searchBarFormConfig[0].selectOptions = response.data.map( this.searchBarFormConfig[0].selectOptions = response.data.map(
(item) => { (item) => {
return { return {
@ -318,7 +319,17 @@ export default {
}; };
} }
); );
}); })
this.$axios('/base/quality-inspection-det/listAll').then((response) => {
this.searchBarFormConfig[1].selectOptions = response.data.map(
(item) => {
return {
name: item.content,
id: item.content,
};
}
);
});
}, },
/** 查询列表 */ /** 查询列表 */
getList() { getList() {

View File

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

View File

@ -206,6 +206,16 @@ export default {
computed: { computed: {
tableProps() { tableProps() {
return [ return [
{
// width: 128,
prop: 'workOrderId',
label: '工单号',
},
{
// width: 128,
prop: 'productionName',
label: '产品',
},
{ {
// width: 160, // width: 160,
prop: 'inspectionContent', prop: 'inspectionContent',
@ -214,8 +224,8 @@ export default {
...this.dynamicProps, ...this.dynamicProps,
{ {
// width: 128, // width: 128,
prop: 'sumInput', prop: 'sumScrap',
label: '检测类型总数', label: '检测总数',
}, },
{ {
// width: 128, // width: 128,
@ -342,6 +352,8 @@ export default {
inspectionContent: item.inspectionContent, inspectionContent: item.inspectionContent,
...keyValuePairs, ...keyValuePairs,
sumInput: item.sumInput, sumInput: item.sumInput,
productionName: item.productionName,
workOrderId: item.workOrderId,
scrapRatio: item.scrapRatio, scrapRatio: item.scrapRatio,
}; };
}); });

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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