Merge remote-tracking branch 'origin/0.8.X' into 0.8.X
This commit is contained in:
@@ -1,25 +1,45 @@
|
||||
<template>
|
||||
<div :class="{'show':show}" class="header-search">
|
||||
<div class="header-search">
|
||||
<svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
|
||||
<el-select
|
||||
ref="headerSearchSelect"
|
||||
v-model="search"
|
||||
:remote-method="querySearch"
|
||||
filterable
|
||||
default-first-option
|
||||
remote
|
||||
placeholder="Search"
|
||||
class="header-search-select"
|
||||
@change="change"
|
||||
<el-dialog
|
||||
:visible.sync="show"
|
||||
:close-on-click-modal="true"
|
||||
width="560px"
|
||||
append-to-body
|
||||
:show-close="false"
|
||||
custom-class="header-search-dialog"
|
||||
@opened="$refs.searchInput && $refs.searchInput.focus()"
|
||||
>
|
||||
<el-option v-for="option in options" :key="option.item.path" :value="option.item" :label="option.item.title.join(' > ')" />
|
||||
</el-select>
|
||||
<div class="search-body">
|
||||
<div class="search-input-wrap">
|
||||
<svg-icon class-name="search-prefix" icon-class="search" />
|
||||
<input
|
||||
ref="searchInput"
|
||||
v-model="search"
|
||||
class="search-input"
|
||||
placeholder="搜索菜单"
|
||||
@input="querySearch($event.target.value)"
|
||||
/>
|
||||
</div>
|
||||
<ul v-if="options.length" class="search-results">
|
||||
<li
|
||||
v-for="option in options"
|
||||
:key="option.item.path"
|
||||
class="search-result-item"
|
||||
@click="change(option.item)"
|
||||
>
|
||||
<span>{{ option.item.title.join(' > ') }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div v-if="search && options.length === 0" class="no-result">
|
||||
无匹配结果
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// fuse is a lightweight fuzzy-search module
|
||||
// make search results more in line with expectations
|
||||
import Fuse from 'fuse.js/dist/fuse.min.js'
|
||||
import path from 'path'
|
||||
|
||||
@@ -45,13 +65,6 @@ export default {
|
||||
},
|
||||
searchPool(list) {
|
||||
this.initFuse(list)
|
||||
},
|
||||
show(value) {
|
||||
if (value) {
|
||||
document.body.addEventListener('click', this.close)
|
||||
} else {
|
||||
document.body.removeEventListener('click', this.close)
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -59,30 +72,20 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
click() {
|
||||
this.show = !this.show
|
||||
if (this.show) {
|
||||
this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus()
|
||||
}
|
||||
},
|
||||
close() {
|
||||
this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur()
|
||||
this.show = true
|
||||
this.search = ''
|
||||
this.options = []
|
||||
this.show = false
|
||||
},
|
||||
change(val) {
|
||||
const path = val.path;
|
||||
if(this.ishttp(val.path)) {
|
||||
// http(s):// 路径新窗口打开
|
||||
const pindex = path.indexOf("http");
|
||||
window.open(path.substr(pindex, path.length), "_blank");
|
||||
if (this.ishttp(val.path)) {
|
||||
const pindex = val.path.indexOf('http')
|
||||
window.open(val.path.substr(pindex, val.path.length), '_blank')
|
||||
} else {
|
||||
this.$router.push(val.path)
|
||||
}
|
||||
this.show = false
|
||||
this.search = ''
|
||||
this.options = []
|
||||
this.$nextTick(() => {
|
||||
this.show = false
|
||||
})
|
||||
},
|
||||
initFuse(list) {
|
||||
this.fuse = new Fuse(list, {
|
||||
@@ -100,13 +103,10 @@ export default {
|
||||
}]
|
||||
})
|
||||
},
|
||||
// Filter out the routes that can be displayed in the sidebar
|
||||
// And generate the internationalized title
|
||||
generateRoutes(routes, basePath = '/', prefixTitle = []) {
|
||||
let res = []
|
||||
|
||||
for (const router of routes) {
|
||||
// skip hidden router
|
||||
if (router.hidden) { continue }
|
||||
|
||||
const data = {
|
||||
@@ -118,13 +118,10 @@ export default {
|
||||
data.title = [...data.title, router.meta.title]
|
||||
|
||||
if (router.redirect !== 'noRedirect') {
|
||||
// only push the routes with title
|
||||
// special case: need to exclude parent router without redirect
|
||||
res.push(data)
|
||||
}
|
||||
}
|
||||
|
||||
// recursive child routes
|
||||
if (router.children) {
|
||||
const tempRoutes = this.generateRoutes(router.children, data.path, data.title)
|
||||
if (tempRoutes.length >= 1) {
|
||||
@@ -150,39 +147,81 @@ export default {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.header-search {
|
||||
font-size: 0 !important;
|
||||
|
||||
.search-icon {
|
||||
cursor: pointer;
|
||||
font-size: 18px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
.header-search-select {
|
||||
font-size: 18px;
|
||||
transition: width 0.2s;
|
||||
width: 0;
|
||||
overflow: hidden;
|
||||
background: transparent;
|
||||
border-radius: 0;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
<style lang="scss">
|
||||
.header-search-dialog {
|
||||
border-radius: 8px;
|
||||
|
||||
::v-deep .el-input__inner {
|
||||
border-radius: 0;
|
||||
border: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
box-shadow: none !important;
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.el-dialog__header {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
&.show {
|
||||
.header-search-select {
|
||||
width: 210px;
|
||||
margin-left: 10px;
|
||||
.el-dialog__body {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.search-body {
|
||||
.search-input-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 12px 20px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
|
||||
.search-prefix {
|
||||
font-size: 18px;
|
||||
color: #999;
|
||||
flex-shrink: 0;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
flex: 1;
|
||||
border: none;
|
||||
outline: none;
|
||||
font-size: 16px;
|
||||
line-height: 32px;
|
||||
height: 32px;
|
||||
background: transparent;
|
||||
|
||||
&::placeholder {
|
||||
color: #bfbfbf;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.search-results {
|
||||
max-height: 360px;
|
||||
overflow-y: auto;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
|
||||
.search-result-item {
|
||||
padding: 10px 20px;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
transition: background 0.15s;
|
||||
|
||||
&:hover {
|
||||
background: #f0f2f5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.no-result {
|
||||
padding: 32px 0;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<div class="navbar">
|
||||
<hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
|
||||
|
||||
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-show="topNav || !showSubNav"/>
|
||||
<sub-nav id="subnav-container" class="subnav-container" v-if="!topNav" @has-items="showSubNav = $event"/>
|
||||
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
|
||||
<breadcrumb id="breadcrumb-container" class="breadcrumb-container"/>
|
||||
<sub-nav id="subnav-container" class="subnav-container" @has-items="showSubNav = $event"/>
|
||||
<!-- <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/> -->
|
||||
|
||||
<div class="right-menu">
|
||||
<template v-if="device!=='mobile'">
|
||||
|
||||
@@ -130,6 +130,24 @@ export const constantRoutes = [
|
||||
component: () => import('@/views/wms/coil/materialWarning/index'),
|
||||
name: 'MaterialWarning',
|
||||
meta: { title: '告警信息', icon: 'warning' }
|
||||
},
|
||||
{
|
||||
path: 'split',
|
||||
component: () => import('@/views/wms/coil/split'),
|
||||
name: 'Split',
|
||||
meta: { title: '分卷', icon: 'checkbox' }
|
||||
},
|
||||
{
|
||||
path: 'merge',
|
||||
component: () => import('@/views/wms/coil/merge'),
|
||||
name: 'Merge',
|
||||
meta: { title: '合卷', icon: 'checkbox' }
|
||||
},
|
||||
{
|
||||
path: 'typing',
|
||||
component: () => import('@/views/wms/coil/typing'),
|
||||
name: 'Typing',
|
||||
meta: { title: '加工', icon: 'checkbox' }
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
@@ -221,7 +221,7 @@ export default {
|
||||
const defaultItem = { taxDivisor: 1.13 };
|
||||
this.initProduct(defaultItem);
|
||||
this.products = [defaultItem];
|
||||
this.remark = '';
|
||||
this.remark = '净边料/毛边料、简包/裸包、卷重结算';
|
||||
this.productName = '';
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -104,15 +104,15 @@ export default {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.submenu-page {
|
||||
padding: 16px 20px;
|
||||
max-width: 900px;
|
||||
padding: 24px;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.submenu-page__header {
|
||||
margin-bottom: 16px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 1px solid #ebeef5;
|
||||
margin-bottom: 20px;
|
||||
padding-bottom: 14px;
|
||||
border-bottom: 1px solid #e4e7ed;
|
||||
}
|
||||
|
||||
.submenu-page__parent-title {
|
||||
@@ -122,56 +122,59 @@ export default {
|
||||
}
|
||||
|
||||
.submenu-page__list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.submenu-page__empty {
|
||||
text-align: center;
|
||||
padding: 40px 0;
|
||||
padding: 60px 0;
|
||||
color: #909399;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.submenu-group {
|
||||
width: calc(50% - 6px);
|
||||
min-width: 280px;
|
||||
background: #fafbfc;
|
||||
border: 1px solid #ebeef5;
|
||||
border-radius: 6px;
|
||||
background: #fff;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
transition: border-color 0.2s;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
|
||||
&:hover {
|
||||
border-color: #c0c4cc;
|
||||
border-color: #5F7BA0;
|
||||
box-shadow: 0 2px 8px rgba(95, 123, 160, 0.12);
|
||||
}
|
||||
}
|
||||
|
||||
.submenu-group__title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 12px 16px;
|
||||
padding: 14px 16px;
|
||||
cursor: pointer;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
transition: background 0.15s;
|
||||
background: linear-gradient(135deg, #fafbfc, #f5f7fa);
|
||||
border-bottom: 1px solid #f0f2f5;
|
||||
transition: background 0.15s, border-color 0.15s;
|
||||
|
||||
&:hover {
|
||||
background: #f5f7fa;
|
||||
background: linear-gradient(135deg, #f0f2f5, #eceff3);
|
||||
border-bottom-color: #e4e7ed;
|
||||
}
|
||||
}
|
||||
|
||||
.submenu-group__icon {
|
||||
font-size: 16px;
|
||||
color: var(--current-color, #409EFF);
|
||||
margin-right: 8px;
|
||||
font-size: 18px;
|
||||
color: #5F7BA0;
|
||||
margin-right: 10px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.submenu-group__text {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
@@ -181,9 +184,12 @@ export default {
|
||||
}
|
||||
|
||||
.submenu-group__count {
|
||||
font-size: 11px;
|
||||
color: #909399;
|
||||
margin-right: 6px;
|
||||
font-size: 12px;
|
||||
color: #5F7BA0;
|
||||
background: rgba(95, 123, 160, 0.08);
|
||||
padding: 2px 8px;
|
||||
border-radius: 10px;
|
||||
margin-right: 8px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@@ -191,39 +197,45 @@ export default {
|
||||
font-size: 12px;
|
||||
color: #c0c4cc;
|
||||
flex-shrink: 0;
|
||||
transition: color 0.15s;
|
||||
|
||||
.submenu-group__title:hover & {
|
||||
color: #5F7BA0;
|
||||
}
|
||||
}
|
||||
|
||||
.submenu-group__items {
|
||||
padding: 4px 0;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
.submenu-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 8px 16px 8px 24px;
|
||||
padding: 10px 16px 10px 24px;
|
||||
cursor: pointer;
|
||||
transition: background 0.15s;
|
||||
transition: background 0.15s, padding-left 0.2s;
|
||||
|
||||
&:hover {
|
||||
background: #f0f2f5;
|
||||
background: rgba(95, 123, 160, 0.05);
|
||||
padding-left: 28px;
|
||||
}
|
||||
|
||||
&:not(:last-child) {
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
border-bottom: 1px solid #f7f7f7;
|
||||
}
|
||||
}
|
||||
|
||||
.submenu-item__folder {
|
||||
font-size: 13px;
|
||||
font-size: 14px;
|
||||
color: #e6a23c;
|
||||
margin-right: 8px;
|
||||
margin-right: 10px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.submenu-item__doc {
|
||||
font-size: 13px;
|
||||
color: #909399;
|
||||
margin-right: 8px;
|
||||
font-size: 14px;
|
||||
color: #5F7BA0;
|
||||
margin-right: 10px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@@ -242,11 +254,16 @@ export default {
|
||||
color: #c0c4cc;
|
||||
flex-shrink: 0;
|
||||
margin-left: 4px;
|
||||
transition: color 0.15s;
|
||||
|
||||
.submenu-item:hover & {
|
||||
color: #5F7BA0;
|
||||
}
|
||||
}
|
||||
|
||||
.submenu-item--leaf {
|
||||
.submenu-item__doc {
|
||||
color: #c0c4cc;
|
||||
color: #a8abb2;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,21 +1,34 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="告警级别" prop="warningLevel">
|
||||
<el-form-item label="告警类型" prop="warningType">
|
||||
<el-radio-group v-model="queryParams.warningType" @change="handleQuery">
|
||||
<el-radio-button label="">全部</el-radio-button>
|
||||
<el-radio-button label="LENGTH">长度告警</el-radio-button>
|
||||
<el-radio-button label="THICKNESS">厚度告警</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="告警级别" prop="warningLevel">
|
||||
<el-select v-model="queryParams.warningLevel" placeholder="请选择告警级别" clearable @keyup.enter.native="handleQuery">
|
||||
<el-option label="警告" value="WARNING" />
|
||||
<el-option label="错误" value="ERROR" />
|
||||
<el-option label="严重错误" value="CRITICAL" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="告警状态" prop="warningStatus">
|
||||
<el-select v-model="queryParams.warningStatus" placeholder="请选择告警状态" clearable
|
||||
@keyup.enter.native="handleQuery">
|
||||
@change="handleQuery">
|
||||
<el-option label="未处理" value="0" />
|
||||
<el-option label="已处理" value="1" />
|
||||
<el-option label="已忽略" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工序" prop="actionType">
|
||||
<el-select v-model="queryParams.actionType" placeholder="请选择工序" clearable
|
||||
@change="handleQuery">
|
||||
<el-option v-for="item in dict.type.action_type" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="处理人" prop="handleBy">
|
||||
<el-input v-model="queryParams.handleBy" placeholder="请输入处理人" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
@@ -35,18 +48,26 @@
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工序" align="center" prop="actionType">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.action_type" :value="scope.row.actionType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入场卷号" align="center" prop="coilVo.enterCoilNo" />
|
||||
<el-table-column label="当前卷号" align="center" prop="coilVo.currentCoilNo" />
|
||||
<el-table-column label="发生时间" align="center" prop="createTime" width="180">
|
||||
<!-- 如果是今天的标红显示 -->
|
||||
<template slot-scope="scope">
|
||||
<span v-if="isToday(scope.row.createTime)" style="color: red;">{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||
<span v-else>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="理论值" align="center" prop="theoreticalVal" />
|
||||
<el-table-column label="实测值" align="center" prop="actualVal" />
|
||||
<el-table-column label="允许偏差" align="center" prop="allowDeviation" />
|
||||
<el-table-column label="实际偏差值" align="center" prop="deviationValue" />
|
||||
<el-table-column label="偏差率(%)" align="center" prop="deviationRate" />
|
||||
<el-table-column label="告警级别" align="center" prop="warningLevel">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.warningLevel === 'WARNING' ? '警告' : scope.row.warningLevel === 'ERROR' ? '错误' : '严重错误'
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="告警说明" align="center" prop="warningMsg" />
|
||||
<el-table-column label="告警说明" align="center" prop="warningMsg" show-overflow-tooltip />
|
||||
<el-table-column label="告警状态" align="center" prop="warningStatus">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.warningStatus == 0 ? '未处理' : scope.row.warningStatus == 1 ? '已处理' : '已忽略' }}</span>
|
||||
@@ -157,7 +178,7 @@ export default {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
coilId: undefined,
|
||||
warningType: undefined,
|
||||
warningType: '',
|
||||
theoreticalVal: undefined,
|
||||
actualVal: undefined,
|
||||
allowDeviation: undefined,
|
||||
@@ -231,6 +252,7 @@ export default {
|
||||
}
|
||||
};
|
||||
},
|
||||
dicts: ['action_type'],
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
@@ -247,7 +269,7 @@ export default {
|
||||
/** 忽略按钮操作 */
|
||||
handleIgnore(row) {
|
||||
this.loading = true;
|
||||
updateMaterialWarning({ ...row, warningStatus: 2 }).then(response => {
|
||||
updateMaterialWarning({ ...row, warningStatus: 2, handleBy: this.$store.state.user.name, handleTime: this.parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}') }).then(response => {
|
||||
this.loading = false;
|
||||
this.$message({
|
||||
message: "忽略成功",
|
||||
@@ -256,10 +278,23 @@ export default {
|
||||
this.getList();
|
||||
});
|
||||
},
|
||||
/** 判断是否是今天的 */
|
||||
isToday(date) {
|
||||
const today = new Date();
|
||||
const year = today.getFullYear();
|
||||
const month = today.getMonth() + 1;
|
||||
const day = today.getDate();
|
||||
const dateObj = new Date(date);
|
||||
const year2 = dateObj.getFullYear();
|
||||
const month2 = dateObj.getMonth() + 1;
|
||||
const day2 = dateObj.getDate();
|
||||
return year === year2 && month === month2 && day === day2;
|
||||
},
|
||||
/** 处理按钮操作 */
|
||||
handleHandle(row) {
|
||||
this.loading = true;
|
||||
updateMaterialWarning({ ...row, warningStatus: 1 }).then(response => {
|
||||
// 填写处理人和处理时间
|
||||
updateMaterialWarning({ ...row, warningStatus: 1, handleBy: this.$store.state.user.name, handleTime: this.parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}') }).then(response => {
|
||||
this.loading = false;
|
||||
this.$message({
|
||||
message: "处理成功",
|
||||
|
||||
@@ -864,7 +864,7 @@ export default {
|
||||
|
||||
if (this.splitForm.coilId) {
|
||||
// 编辑分条:调用更新接口
|
||||
res = await updateMaterialCoilSimple(splitData)
|
||||
res = await updateMaterialCoilSimple({...splitData, actionId: this.actionId})
|
||||
} else {
|
||||
// 新增分条:调用创建接口
|
||||
res = await createSpecialChild(this.coilId, this.actionId, splitData)
|
||||
|
||||
@@ -171,22 +171,60 @@
|
||||
<!-- all 类型的统计信息(comprehensive 风格) -->
|
||||
<template v-else-if="reportType === 'all'">
|
||||
<el-descriptions title="统计信息" :column="3" border>
|
||||
<el-descriptions-item label="产出数量">{{ summary.outCount }}<span v-if="viewType === 'day' && yesterdaySummary.outCount" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.outCount }})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="产出总重">{{ summary.outTotalWeight }}t<span v-if="viewType === 'day' && yesterdaySummary.outTotalWeight" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.outTotalWeight }}t)</span></el-descriptions-item>
|
||||
<el-descriptions-item label="产出均重">{{ summary.outAvgWeight }}t<span v-if="viewType === 'day' && yesterdaySummary.outAvgWeight" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.outAvgWeight }}t)</span></el-descriptions-item>
|
||||
<el-descriptions-item label="产出数量">{{ summary.outCount }}<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.outCount"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.outCount
|
||||
}})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="产出总重">{{ summary.outTotalWeight }}t<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.outTotalWeight"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.outTotalWeight
|
||||
}}t)</span></el-descriptions-item>
|
||||
<el-descriptions-item label="产出均重">{{ summary.outAvgWeight }}t<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.outAvgWeight"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.outAvgWeight
|
||||
}}t)</span></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="消耗数量">{{ summary.lossCount }}<span v-if="viewType === 'day' && yesterdaySummary.lossCount" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.lossCount }})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="消耗总重">{{ summary.lossTotalWeight }}t<span v-if="viewType === 'day' && yesterdaySummary.lossTotalWeight" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.lossTotalWeight }}t)</span></el-descriptions-item>
|
||||
<el-descriptions-item label="消耗均重">{{ summary.lossAvgWeight }}t<span v-if="viewType === 'day' && yesterdaySummary.lossAvgWeight" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.lossAvgWeight }}t)</span></el-descriptions-item>
|
||||
<el-descriptions-item label="消耗数量">{{ summary.lossCount }}<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.lossCount"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.lossCount
|
||||
}})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="消耗总重">{{ summary.lossTotalWeight }}t<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.lossTotalWeight"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.lossTotalWeight
|
||||
}}t)</span></el-descriptions-item>
|
||||
<el-descriptions-item label="消耗均重">{{ summary.lossAvgWeight }}t<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.lossAvgWeight"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.lossAvgWeight
|
||||
}}t)</span></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="数量差值">{{ summary.countDiff }}<span v-if="viewType === 'day' && yesterdaySummary.countDiff" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.countDiff }})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="总重差值">{{ summary.weightDiff }}<span v-if="viewType === 'day' && yesterdaySummary.weightDiff" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.weightDiff }})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="均重差值">{{ summary.avgWeightDiff }}t<span v-if="viewType === 'day' && yesterdaySummary.avgWeightDiff" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.avgWeightDiff }}t)</span></el-descriptions-item>
|
||||
<el-descriptions-item label="数量差值">{{ summary.countDiff }}<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.countDiff"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.countDiff
|
||||
}})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="总重差值">{{ summary.weightDiff }}<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.weightDiff"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.weightDiff
|
||||
}})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="均重差值">{{ summary.avgWeightDiff }}t<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.avgWeightDiff"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.avgWeightDiff
|
||||
}}t)</span></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="成品率">{{ summary.passRate }}<span v-if="viewType === 'day' && yesterdaySummary.passRate" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.passRate }})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="损耗率">{{ summary.lossRate }}<span v-if="viewType === 'day' && yesterdaySummary.lossRate" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.lossRate }})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="异常率">{{ summary.abRate }}<span v-if="viewType === 'day' && yesterdaySummary.abRate" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.abRate }})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="正品率">{{ summary.passRate2 }}<span v-if="viewType === 'day' && yesterdaySummary.passRate2" style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.passRate2 }})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="成品率">{{ summary.passRate }}<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.passRate"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.passRate
|
||||
}})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="损耗率">{{ summary.lossRate }}<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.lossRate"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.lossRate
|
||||
}})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="异常率">{{ summary.abRate }}<span v-if="viewType === 'day' && yesterdaySummary.abRate"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.abRate
|
||||
}})</span></el-descriptions-item>
|
||||
<el-descriptions-item label="正品率">{{ summary.passRate2 }}<span
|
||||
v-if="viewType === 'day' && yesterdaySummary.passRate2"
|
||||
style="margin-left: 10px; font-size: 12px; color: #999;">(昨日: {{ yesterdaySummary.passRate2
|
||||
}})</span></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<el-descriptions title="已处理M统计信息" :column="3" border>
|
||||
@@ -347,13 +385,8 @@
|
||||
<columns-setting :reportType="activeColumnConfig"></columns-setting>
|
||||
</el-dialog>
|
||||
|
||||
<custom-export
|
||||
ref="customExport"
|
||||
:visible.sync="customExportVisible"
|
||||
:storage-key="customExportStorageKey"
|
||||
:column-groups="columnGroups"
|
||||
@export="handleCustomExport"
|
||||
/>
|
||||
<custom-export ref="customExport" :visible.sync="customExportVisible" :storage-key="customExportStorageKey"
|
||||
:column-groups="columnGroups" @export="handleCustomExport" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -482,7 +515,7 @@ export default {
|
||||
'基本信息': ['itemTypeDesc', 'warehouseName', 'actualWarehouseName', 'dataTypeText'],
|
||||
'钢卷号': ['enterCoilNo', 'supplierCoilNo', 'currentCoilNo'],
|
||||
'时间': ['createTime', 'exportTime', 'exportBy'],
|
||||
'物理属性': ['netWeight', 'length', 'specification', 'actualThickness', 'theoreticalThickness', 'theoreticalLength'],
|
||||
'物理属性': ['netWeight', 'length', 'specification', 'actualThickness', 'theoreticalThickness', 'theoreticalLength', 'scheduleThickness'],
|
||||
'材质属性': ['material', 'manufacturer', 'surfaceTreatmentDesc', 'zincLayer', 'packingStatus', 'temperGrade', 'coatingType', 'chromePlateCoilNo'],
|
||||
'用途': ['purpose', 'businessPurpose'],
|
||||
'状态': ['qualityStatus', 'statusDesc', 'isRelatedToOrderText'],
|
||||
@@ -694,7 +727,13 @@ export default {
|
||||
|
||||
if (this.reportType === 'all') {
|
||||
// all 类型使用 comprehensive 方式查询
|
||||
const res = await listLightPendingAction({ ...this.queryParams, actionTypes: this.actionType, actionStatus: 2 });
|
||||
const res = await listLightPendingAction({
|
||||
enterCoilNo: this.queryParams.enterCoilNo,
|
||||
startTime: this.queryParams.startTime,
|
||||
endTime: this.queryParams.endTime,
|
||||
actionTypes: this.actionType,
|
||||
actionStatus: 2
|
||||
});
|
||||
const lossIds = res.data.filter(item => item.coilId).map(item => item.coilId);
|
||||
const lossActionIds = res.data.filter(item => item.actionId).map(item => item.actionId);
|
||||
this.actionIds = lossActionIds.join(',')
|
||||
@@ -732,7 +771,13 @@ export default {
|
||||
return
|
||||
}
|
||||
|
||||
const res = await listLightPendingAction({ ...this.queryParams, actionTypes: this.actionType, actionStatus: 2 });
|
||||
const res = await listLightPendingAction({
|
||||
enterCoilNo: this.queryParams.enterCoilNo,
|
||||
startTime: this.queryParams.startTime,
|
||||
endTime: this.queryParams.endTime,
|
||||
actionTypes: this.actionType,
|
||||
actionStatus: 2
|
||||
});
|
||||
const lossIds = res.data.filter(item => item.coilId).map(item => item.coilId);
|
||||
const lossActionIds = res.data.filter(item => item.actionId).map(item => item.actionId);
|
||||
this.actionIds = lossActionIds.join(',')
|
||||
@@ -796,12 +841,14 @@ export default {
|
||||
const { start, end } = this.getDayTimeRange(yesterdayDate)
|
||||
|
||||
const yesterdayParams = {
|
||||
...this.queryParams,
|
||||
enterCoilNo: this.queryParams.enterCoilNo,
|
||||
actionTypes: this.actionType,
|
||||
actionStatus: 2,
|
||||
startTime: start,
|
||||
endTime: end,
|
||||
}
|
||||
|
||||
const res = await listLightPendingAction({ ...yesterdayParams, actionTypes: this.actionType, actionStatus: 2 })
|
||||
const res = await listLightPendingAction({ ...yesterdayParams })
|
||||
const lossIds = res.data.filter(item => item.coilId).map(item => item.coilId)
|
||||
const lossActionIds = res.data.filter(item => item.actionId).map(item => item.actionId)
|
||||
const outIds = [...new Set(res.data.filter(item => item.processedCoilIds).map(item => item.processedCoilIds))]
|
||||
|
||||
Reference in New Issue
Block a user