更新统计数据
This commit is contained in:
parent
780ed10ece
commit
7fad93f2ae
10
src/api/dashboard/report.js
Normal file
10
src/api/dashboard/report.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 报表统计
|
||||
export function getReportSum(query) {
|
||||
return request({
|
||||
url: '/dashboard/report/sum',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
10
src/api/dashboard/reportOrderProd.js
Normal file
10
src/api/dashboard/reportOrderProd.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 订单产量统计
|
||||
export function getReportOrderProdSum(query) {
|
||||
return request({
|
||||
url: '/dashboard/reportOrderProd/sum',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
10
src/api/dashboard/reportProd.js
Normal file
10
src/api/dashboard/reportProd.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 报表产量统计
|
||||
export function getReportProdSum(query) {
|
||||
return request({
|
||||
url: '/dashboard/reportProd/sum',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
10
src/api/dashboard/reportUserProd.js
Normal file
10
src/api/dashboard/reportUserProd.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 员工产量统计
|
||||
export function getReportUserProdSum(query) {
|
||||
return request({
|
||||
url: '/dashboard/reportUserProd/sum',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
|
@ -239,15 +239,19 @@ aside {
|
|||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.card-operator {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
// 卡片上的按钮
|
||||
.card-btn {
|
||||
padding-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
.card-operator {
|
||||
border-top: 1px solid #f0f0f0;
|
||||
padding-top: 12px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
// 卡片上的按钮
|
||||
.card-btn {
|
||||
padding-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -286,6 +290,14 @@ aside {
|
|||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
.el-table__body-wrapper {
|
||||
&::-webkit-scrollbar {
|
||||
display: none !important;
|
||||
}
|
||||
-ms-overflow-style: none !important; /* IE and Edge */
|
||||
scrollbar-width: none !important; /* Firefox */
|
||||
}
|
||||
}
|
||||
|
||||
.table-form.el-table th.el-table__cell > .cell {
|
||||
|
|
76
src/components/Business/Dept/DeptSelect.vue
Normal file
76
src/components/Business/Dept/DeptSelect.vue
Normal file
|
@ -0,0 +1,76 @@
|
|||
<template>
|
||||
<el-cascader
|
||||
v-model="selectValue"
|
||||
:placeholder="placeholder"
|
||||
clearable
|
||||
filterable
|
||||
v-on="$listeners"
|
||||
style="width: 100%;"
|
||||
:options="options"
|
||||
:show-all-levels="false"
|
||||
:props="{
|
||||
emitPath: false,
|
||||
multiple: multiple,
|
||||
expandTrigger: 'hover',
|
||||
value: 'deptId',
|
||||
label: 'deptName',
|
||||
checkStrictly: checkStrictly
|
||||
}"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listDept } from "@/api/system/dept";
|
||||
|
||||
export default {
|
||||
name: "DeptSelect",
|
||||
props: {
|
||||
value: {
|
||||
type: [String, Array],
|
||||
default: null
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: "请选择部门"
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// 是否严格的遵守父子节点不互相关联
|
||||
checkStrictly: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
options: [],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
selectValue: {
|
||||
get() {
|
||||
return this.value;
|
||||
},
|
||||
set(val) {
|
||||
this.$emit("input", val);
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getOptions();
|
||||
},
|
||||
methods: {
|
||||
getOptions() {
|
||||
listDept().then(response => {
|
||||
this.options = this.handleTree(response.data, "deptId", "parentId", "children");
|
||||
});
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -15,7 +15,7 @@
|
|||
<div class="search-container">
|
||||
<el-input
|
||||
v-model="queryParams.keyword"
|
||||
placeholder="搜索订单编号/物料编码"
|
||||
placeholder="搜索订单编号/物料编码/计划跟踪号"
|
||||
clearable
|
||||
prefix-icon="el-icon-search"
|
||||
@input="getList"
|
||||
|
@ -61,6 +61,10 @@
|
|||
<div class="label">物料:</div>
|
||||
<div class="value">{{ item.materialNumber | dv}}</div>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<div class="label">计划跟踪号:</div>
|
||||
<div class="value">{{ item.erpMtoNo | dv}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="check-icon">
|
||||
|
|
|
@ -15,18 +15,18 @@
|
|||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
<dept-tree-select v-else-if="type === 'dept'" v-model="queryParams[prop]" class="small-tree-select" width="200px" @change="handleQuery"/>
|
||||
<dept-select v-else-if="type === 'dept'" v-model="queryParams[prop]" check-strictly @change="handleQuery"/>
|
||||
<date-range-picker v-else-if="type === 'daterange'" v-model="queryParams[prop]" @change="handleQuery"/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import DeptTreeSelect from "@/components/Business/Dept/DeptTreeSelect.vue";
|
||||
import DeptSelect from "@/components/Business/Dept/DeptSelect.vue";
|
||||
import DateRangePicker from "@/components/DateRangePicker/index.vue";
|
||||
|
||||
export default {
|
||||
name: "SearchFormItem",
|
||||
components: {DateRangePicker, DeptTreeSelect},
|
||||
components: {DateRangePicker, DeptSelect},
|
||||
props: {
|
||||
queryParams: {
|
||||
type: Object,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-table-column class="table-form-col" :header-align="align" :align="align" :width="width" >
|
||||
<el-table-column class="table-form-col" :prop="prop" :header-align="align" :align="align" :width="width" >
|
||||
<template #header>
|
||||
<div @click="handleClickHeader">
|
||||
<span :class="required ? 'required-label' : ''">{{label}}</span>
|
||||
|
|
|
@ -5,7 +5,7 @@ const filters = {
|
|||
},
|
||||
// 缺省值
|
||||
defaultValue(data) {
|
||||
return data == null ? '--' : data;
|
||||
return data == null || data.length == 0 ? '--' : data;
|
||||
},
|
||||
fix2(num) {
|
||||
if (num == null) {
|
||||
|
|
|
@ -41,45 +41,9 @@
|
|||
<el-card class="card-box">
|
||||
<template #header>
|
||||
<el-row class="card-header">
|
||||
<el-col>
|
||||
<el-col style="font-size: 14px;">
|
||||
{{report.deptName}} {{report.reportDate}} 日报表
|
||||
</el-col>
|
||||
<el-col class="card-operator">
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-refresh"
|
||||
@click="handleCancel(report)"
|
||||
v-has-permi="['yh:report:cancel']"
|
||||
v-show="ReportStatus.canCancel(report.status)"
|
||||
style="padding: 0;"
|
||||
>取消提交</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-check"
|
||||
@click="handleSubmit(report)"
|
||||
v-has-permi="['yh:report:submit']"
|
||||
v-show="ReportStatus.canSubmit(report.status)"
|
||||
style="padding: 0;"
|
||||
>提交</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
class="card-btn"
|
||||
@click="handleUpdate(report)"
|
||||
v-has-permi="['yh:report:edit']"
|
||||
v-show="ReportStatus.canEdit(report.status)"
|
||||
style="padding: 0;"
|
||||
>编辑</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
class="card-btn"
|
||||
@click="handleDelete(report)"
|
||||
v-has-permi="['yh:report:remove']"
|
||||
v-show="ReportStatus.canDel(report.status)"
|
||||
style="padding: 0;"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
<div class="card-content" @click="handleView(report)">
|
||||
|
@ -97,6 +61,44 @@
|
|||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<div class="card-operator">
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
icon="el-icon-refresh"
|
||||
@click="handleCancel(report)"
|
||||
v-has-permi="['yh:report:cancel']"
|
||||
v-show="ReportStatus.canCancel(report.status)"
|
||||
style="padding: 0;"
|
||||
>取消提交</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
icon="el-icon-check"
|
||||
@click="handleSubmit(report)"
|
||||
v-has-permi="['yh:report:submit']"
|
||||
v-show="ReportStatus.canSubmit(report.status)"
|
||||
style="padding: 0;"
|
||||
>提交</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(report)"
|
||||
v-has-permi="['yh:report:edit']"
|
||||
v-show="ReportStatus.canEdit(report.status)"
|
||||
style="padding: 0;"
|
||||
>编辑</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(report)"
|
||||
v-has-permi="['yh:report:remove']"
|
||||
v-show="ReportStatus.canDel(report.status)"
|
||||
style="padding: 0;"
|
||||
>删除</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
@ -135,7 +137,7 @@ export default {
|
|||
row: {},
|
||||
// 字段列表
|
||||
columns: [
|
||||
{key: 'reportId', visible: true, label: '报表编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportId', visible: false, label: '报表编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'deptName', visible: false, label: '部门', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportDate', visible: false, label: '报表日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'status', visible: true, label: '状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
|
@ -143,10 +145,10 @@ export default {
|
|||
{key: 'remark', visible: true, label: '备注', minWidth: null, sortable: false, overflow: false, align: 'center', width: "180"},
|
||||
{key: 'createBy', visible: true, label: '创建人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'createTime', visible: true, label: '创建时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "180"},
|
||||
{key: 'updateBy', visible: true, label: '更新人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'updateTime', visible: true, label: '更新时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "180"},
|
||||
{key: 'verifyBy', visible: true, label: '审核人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'verifyTime', visible: true, label: '审核时间', minWidth: null, sortable: false, overflow: false, align: 'center', width: "180"},
|
||||
{key: 'updateBy', visible: false, label: '更新人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'updateTime', visible: false, label: '更新时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "180"},
|
||||
{key: 'verifyBy', visible: false, label: '审核人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'verifyTime', visible: false, label: '审核时间', minWidth: null, sortable: false, overflow: false, align: 'center', width: "180"},
|
||||
],
|
||||
// 排序方式
|
||||
orderSorts: ['ascending', 'descending', null],
|
||||
|
|
|
@ -1,7 +1,15 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||
<el-form-item label="单据编号" prop="erpBillNo">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="5em">
|
||||
<el-form-item label="计划跟踪号" prop="erpMtoNo" label-width="6em">
|
||||
<el-input
|
||||
v-model="queryParams.erpMtoNo"
|
||||
placeholder="请输入计划跟踪号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="编号" prop="erpBillNo">
|
||||
<el-input
|
||||
v-model="queryParams.erpBillNo"
|
||||
placeholder="请输入单据编号"
|
||||
|
@ -9,16 +17,6 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单据状态" prop="erpDocumentStatus">
|
||||
<el-select v-model="queryParams.erpDocumentStatus" placeholder="请选择单据状态" clearable @change="handleQuery">
|
||||
<el-option
|
||||
v-for="dict in dict.type.prod_order_erp_document_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否返工" prop="erpIsRework">
|
||||
<el-radio-group v-model="queryParams.erpIsRework">
|
||||
<el-radio :label="null">全部</el-radio>
|
||||
|
@ -27,9 +25,12 @@
|
|||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="生产车间" prop="deptId">
|
||||
<dept-tree-select v-model="queryParams.deptId" class="small-tree-select" @change="handleQuery"/>
|
||||
<dept-select v-model="queryParams.deptId" @change="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="业务状态" prop="erpStatusList">
|
||||
<el-form-item label="物料" prop="materialNumber">
|
||||
<el-input v-model="queryParams.materialNumber" placeholder="请输入物料" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="erpStatusList">
|
||||
<el-checkbox-group v-model="queryParams.erpStatusList" @change="handleQuery">
|
||||
<el-checkbox-button
|
||||
v-for="dict in dict.type.prod_order_erp_status"
|
||||
|
@ -39,21 +40,6 @@
|
|||
</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料规格" prop="materialCategory">
|
||||
<el-input v-model="queryParams.materialCategory" placeholder="请输入物料规格" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料大小" prop="materialSize">
|
||||
<el-input v-model="queryParams.materialSize" placeholder="请输入物料大小" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="表面处理" prop="materialSurface">
|
||||
<el-input v-model="queryParams.materialSurface" placeholder="请输入物料表面处理" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="盖子方式" prop="materialCover">
|
||||
<el-input v-model="queryParams.materialCover" placeholder="请输入物料盖子方式" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="盖子方式" prop="materialGraphics">
|
||||
<el-input v-model="queryParams.materialGraphics" placeholder="请输入物料图案" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
|
@ -105,7 +91,7 @@
|
|||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="prodOrderList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
|
||||
<el-table size="mini" max-height="600px" v-loading="loading" :data="prodOrderList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<template v-for="column of showColumns">
|
||||
<el-table-column
|
||||
|
@ -124,24 +110,33 @@
|
|||
{{d.row[column.key]}}
|
||||
</template>
|
||||
<template v-else-if="column.key === 'erpDocumentStatus'">
|
||||
<dict-tag :options="dict.type.prod_order_erp_document_status" :value="d.row[column.key]"/>
|
||||
<dict-tag :options="dict.type.prod_order_erp_document_status" :value="d.row[column.key]" size="mini"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'erpStatus'">
|
||||
<dict-tag :options="dict.type.prod_order_erp_status" :value="d.row[column.key]"/>
|
||||
<dict-tag :options="dict.type.prod_order_erp_status" :value="d.row[column.key]" size="mini"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'erpReqSrc'">
|
||||
<dict-tag :options="dict.type.prod_order_erp_req_src" :value="d.row[column.key]"/>
|
||||
<dict-tag :options="dict.type.prod_order_erp_req_src" :value="d.row[column.key]" size="mini"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'erpIsRework'">
|
||||
<boolean-tag :value="d.row.erpIsRework"/>
|
||||
<boolean-tag :value="d.row.erpIsRework" size="mini"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'percentage'">
|
||||
<prod-order-progress :percentage="percentage(d.row)" width="80px"/>
|
||||
<prod-order-progress :percentage="percentage(d.row)" width="100%" />
|
||||
<div>数量:{{d.row.erpQty | dv}} {{d.row.unitName}} </div>
|
||||
<div>未入库:{{d.row.erpNoStockInQty | dv}} {{d.row.unitName}}</div>
|
||||
</template>
|
||||
<template v-else-if="['erpQty', 'erpNoStockInQty'].includes(column.key)">
|
||||
{{d.row[column.key]}}
|
||||
<template v-if="!isEmpty(d.row.unitName)">{{d.row.unitName}}</template>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'time'">
|
||||
<template v-if="d.row.erpDate">单据日期:{{d.row.erpDate | dv}}<br/></template>
|
||||
<!-- <template v-if="d.row.erpCreateDate">创建:{{d.row.erpCreateDate | dv}}<br/></template>
|
||||
<template v-if="d.row.erpModifyDate">修改:{{d.row.erpModifyDate | dv}}<br/></template> -->
|
||||
<template v-if="d.row.erpConveyDate">下达:{{d.row.erpConveyDate | dv}}<br/></template>
|
||||
<template v-if="d.row.syncTime">同步:{{d.row.syncTime | dv}}<br/></template>
|
||||
</template>
|
||||
<template v-else>
|
||||
{{d.row[column.key]}}
|
||||
</template>
|
||||
|
@ -190,72 +185,6 @@
|
|||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改生产订单对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body :close-on-click-modal="false">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-row>
|
||||
<form-col :span="span" label="单据编号" prop="billNo">
|
||||
<el-input v-model="form.billNo" placeholder="请输入单据编号" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="单据日期" prop="billDate">
|
||||
<el-date-picker clearable
|
||||
v-model="form.billDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择单据日期">
|
||||
</el-date-picker>
|
||||
</form-col>
|
||||
<form-col :span="span" label="规格型号" prop="spec">
|
||||
<el-input v-model="form.spec" placeholder="请输入规格型号" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="生产车间ID" prop="deptId">
|
||||
<el-input v-model="form.deptId" placeholder="请输入生产车间ID" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="数量" prop="num">
|
||||
<el-input v-model="form.num" placeholder="请输入数量" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="批号" prop="batchNo">
|
||||
<el-input v-model="form.batchNo" placeholder="请输入批号" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="下达时间" prop="releaseTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.releaseTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择下达时间">
|
||||
</el-date-picker>
|
||||
</form-col>
|
||||
<form-col :span="span" label="源单编号" prop="sourceNo">
|
||||
<el-input v-model="form.sourceNo" placeholder="请输入源单编号" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="需求单据" prop="demandBill">
|
||||
<el-input v-model="form.demandBill" placeholder="请输入需求单据" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="辅助属性(json)" prop="auxProp">
|
||||
<el-input v-model="form.auxProp" placeholder="请输入辅助属性(json)" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="计划跟踪号" prop="planTrackNo">
|
||||
<el-input v-model="form.planTrackNo" placeholder="请输入计划跟踪号" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="物料编码" prop="materialNo">
|
||||
<el-input v-model="form.materialNo" placeholder="请输入物料编码" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="合格品入库数量" prop="quaStore">
|
||||
<el-input v-model="form.quaStore" placeholder="请输入合格品入库数量" />
|
||||
</form-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -270,7 +199,7 @@ import {
|
|||
} from "@/api/yh/prodOrder";
|
||||
import {$showColumns} from '@/utils/mixins';
|
||||
import FormCol from "@/components/FormCol/index.vue";
|
||||
import DeptTreeSelect from "@/components/Business/Dept/DeptTreeSelect.vue";
|
||||
import DeptSelect from "@/components/Business/Dept/DeptSelect.vue";
|
||||
import BooleanTag from "@/components/BooleanTag/index.vue";
|
||||
import {isEmpty} from "@/utils";
|
||||
import {$prodOrder} from "@/views/yh/prodOrder/mixins";
|
||||
|
@ -286,7 +215,7 @@ export default {
|
|||
name: "ProdOrder",
|
||||
mixins: [$showColumns, $prodOrder],
|
||||
dicts: ['prod_order_erp_document_status', 'prod_order_erp_status', 'prod_order_erp_req_src'],
|
||||
components: {ProdOrderProgress, BooleanTag, DeptTreeSelect, FormCol},
|
||||
components: {ProdOrderProgress, BooleanTag, DeptSelect, FormCol},
|
||||
data() {
|
||||
return {
|
||||
span: 24,
|
||||
|
@ -294,28 +223,22 @@ export default {
|
|||
columns: [
|
||||
{key: 'id', visible: false, label: '生产订单ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'erpId', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'erpBillNo', visible: true, label: '单据编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpDocumentStatus', visible: true, label: '单据状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpCreateDate', visible: true, label: '创建日期', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpModifyDate', visible: true, label: '修改日期', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpDescription', visible: false, label: '主表备注', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'erpDate', visible: true, label: '单据日期', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'materialNumber', visible: true, label: '物料编码', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpIsRework', visible: true, label: '是否返工', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpMtoNo', visible: true, label: '跟踪号', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpBillNo', visible: true, label: '编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'erpStatus', visible: true, label: '状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
|
||||
{key: 'erpDocumentStatus', visible: false, label: '单据', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
|
||||
{key: 'erpDescription', visible: false, label: '主备注', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'materialNumber', visible: true, label: '物料', minWidth: null, sortable: false, overflow: false, align: 'center', width: null},
|
||||
{key: 'workShopName', visible: true, label: '车间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpIsRework', visible: true, label: '返工', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
|
||||
{key: 'percentage', visible: true, label: '进度', minWidth: null, sortable: false, overflow: false, align: 'left', width: "120"},
|
||||
{key: 'erpRowId', visible: false, label: '行标识', minWidth: null, sortable: true, overflow: true, align: 'center', width: null},
|
||||
{key: 'erpMemoItem', visible: true, label: '备注', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpConveyDate', visible: true, label: '下达日期', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpStatus', visible: true, label: '业务状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'workShopName', visible: true, label: '生产车间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpReqSrc', visible: true, label: '需求来源', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'unitName', visible: false, label: '单位', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'erpQty', visible: true, label: '数量', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'erpMemoItem', visible: true, label: '备注', minWidth: null, sortable: true, overflow: true, align: 'center', width: null},
|
||||
{key: 'time', visible: true, label: '时间', minWidth: null, sortable: false, overflow: false, align: 'left', width: "170"},
|
||||
{key: 'erpReqSrc', visible: false, label: '来源', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
|
||||
{key: 'erpBaseUnitQty', visible: false, label: '基本', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'erpNoStockInQty', visible: true, label: '未入库', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'erpBaseNoStockInQty', visible: false, label: '基本未入库', minWidth: null, sortable: true, overflow: false, align: 'center', width: "130"},
|
||||
{key: 'erpBaseNoStockInQty', visible: false, label: '基本未入库', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'baseUnitName', visible: false, label: '基本单位', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'syncTime', visible: true, label: '同步时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'percentage', visible: true, label: '进度', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||
],
|
||||
// 排序方式
|
||||
orderSorts: ['ascending', 'descending', null],
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" align="center"/>
|
||||
<el-table-column type="index" min-width="10" align="center" label="#">
|
||||
<el-table-column type="index" align="left" label="#">
|
||||
<template slot-scope="d">
|
||||
{{d.$index + (pageNum - 1) * pageSize + 1}}
|
||||
</template>
|
||||
|
@ -59,12 +59,12 @@
|
|||
<!-- <table-form-col label="不良品" prop-prefix="productList" prop="defectNum">
|
||||
<el-input-number slot-scope="d" v-model="d.row.defectNum" placeholder="请输入数量" :min="0" :precision="0" controls-position="right" style="width: 100%"/>
|
||||
</table-form-col> -->
|
||||
<table-form-col label="表面" width="80" prop-prefix="productList" prop="surface" :rules="rules.productList.surface" header-icon="el-icon-edit" @click-header="handleBatchEdit('surface')">
|
||||
<el-select slot-scope="d" v-model="d.row.surface" placeholder="请选择表面处理" filterable clearable allow-create style="width: 100%;">
|
||||
<table-form-col label="表面" width="76" prop-prefix="productList" prop="surface" :rules="rules.productList.surface" header-icon="el-icon-edit" @click-header="handleBatchEdit('surface')">
|
||||
<el-select slot-scope="d" v-model="d.row.surface" placeholder="请选择表面处理" @change="onChangeSurface(d.row)" filterable clearable allow-create style="width: 100%;">
|
||||
<el-option v-for="item in dict.type.surface" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</table-form-col>
|
||||
<table-form-col label="颜色" width="120" prop-prefix="productList" prop="color" :rules="rules.productList.color" header-icon="el-icon-edit" @click-header="handleBatchEdit('color')">
|
||||
<table-form-col label="颜色" width="115" prop-prefix="productList" prop="color" :rules="rules.productList.color" header-icon="el-icon-edit" @click-header="handleBatchEdit('color')">
|
||||
<el-select slot-scope="d" v-model="d.row.color" placeholder="请选择颜色" filterable clearable allow-create style="width: 100%;">
|
||||
<el-option v-for="item in dict.type.color_code" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
|
@ -79,7 +79,7 @@
|
|||
<table-form-col label="单价" prop-prefix="productList" width="100" prop="priceId" required :rules="rules.productList.priceId">
|
||||
<price-select
|
||||
slot-scope="d"
|
||||
v-model="d.row.priceId"
|
||||
:value="d.row.priceId"
|
||||
:name="d.row.priceName"
|
||||
:code="d.row.priceCode"
|
||||
:status="d.row.priceStatus"
|
||||
|
@ -90,35 +90,49 @@
|
|||
:ref="`priceSelect${d.index}`"
|
||||
/>
|
||||
</table-form-col>
|
||||
<table-form-col label="备注" prop-prefix="productList" prop="remark" align="center" width="60" :rules="rules.productList.remark">
|
||||
<el-popover
|
||||
slot-scope="d"
|
||||
placement="top"
|
||||
width="400"
|
||||
trigger="hover"
|
||||
>
|
||||
<div slot="reference" style="font-size: 12px; white-space: nowrap;">{{d.row.remark | dv}}</div>
|
||||
<el-input type="textarea" v-model="d.row.remark" placeholder="请输入备注" maxlength="200" show-word-limit autofocus :autosize="{ minRows: 2, maxRows: 6 }" />
|
||||
</el-popover>
|
||||
</table-form-col>
|
||||
<table-form-col label="工资" prop-prefix="productList" prop="totalAmount" align="right" width="60">
|
||||
<span slot-scope="d" style="font-size: 12px;" @click="handleDetail(d.row)">{{totalAmount(d.row) | fix2 | dv}}</span>
|
||||
</table-form-col>
|
||||
<table-form-col label="详细" prop-prefix="productList" prop="pricePrice" align="right" width="60" :rules="rules.productList.pricePrice">
|
||||
<div slot-scope="d" @click="handleDetail(d.row)">
|
||||
<div style="font-size: 12px;">员工:{{d.row.userProdList.length}}</div>
|
||||
<div style="font-size: 12px;" v-if="d.row.orderProdList.length > 0">订单:{{d.row.orderProdList.length}}</div>
|
||||
</div>
|
||||
</table-form-col>
|
||||
<el-table-column label="操作" align="center" width="120">
|
||||
<el-table-column label="操作" align="right" width="70">
|
||||
<template #header>
|
||||
<el-button size="small" icon="el-icon-plus" type="text" @click="handleAdd">新增工序</el-button>
|
||||
<el-button size="mini" icon="el-icon-plus" type="text" @click="handleAdd">新增工序</el-button>
|
||||
</template>
|
||||
<template slot-scope="d">
|
||||
<el-button
|
||||
type="text"
|
||||
@click="handleChangeSort(d.$index, -1)"
|
||||
icon="el-icon-upload2"
|
||||
size="small"
|
||||
size="mini"
|
||||
></el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
@click="handleChangeSort(d.$index, 1)"
|
||||
icon="el-icon-download"
|
||||
size="small"
|
||||
size="mini"
|
||||
></el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
@click="doCopy(d.$index, d.row)"
|
||||
icon="el-icon-document-copy"
|
||||
size="small"
|
||||
>复制</el-button>
|
||||
size="mini"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
@ -251,6 +265,15 @@ export default {
|
|||
name: row.priceName,
|
||||
}
|
||||
}
|
||||
},
|
||||
totalAmount() {
|
||||
return (row) => {
|
||||
let totalAmount = Decimal(0);
|
||||
row.userProdList.forEach(item => {
|
||||
totalAmount = totalAmount.plus(notNullDecimal(item.num).mul(notNullDecimal(row.pricePrice)));
|
||||
})
|
||||
return totalAmount.toNumber();
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
@ -344,8 +367,12 @@ export default {
|
|||
this.$refs.table.toggleRowExpansion(row);
|
||||
},
|
||||
handlePriceChange(row, val) {
|
||||
// 检查单价是否变化
|
||||
this.checkPriceChange(row, val);
|
||||
|
||||
// 先判断val是否为空,避免后续重复判断
|
||||
if (val == null) {
|
||||
row.priceId = null;
|
||||
row.priceSubName = null;
|
||||
row.priceSpec = null;
|
||||
row.pricePrice = null;
|
||||
|
@ -355,23 +382,44 @@ export default {
|
|||
row.priceQuantityDenominator = null;
|
||||
row.priceCode = null;
|
||||
row.priceStatus = null;
|
||||
} else {
|
||||
// val不为空时赋值
|
||||
row.priceId = val.priceId;
|
||||
row.priceSubName = val.subName || null;
|
||||
row.priceSpec = val.spec || null;
|
||||
row.pricePrice = val.price || null;
|
||||
row.priceUnit = val.unit || null;
|
||||
row.priceClassify = val.classify || null;
|
||||
row.priceQuantityNumerator = val.quantityNumerator || null;
|
||||
row.priceQuantityDenominator = val.quantityDenominator || null;
|
||||
row.priceCode = val.code || null;
|
||||
row.priceStatus = val.status || null;
|
||||
row.priceCategory = val.category;
|
||||
row.priceSize = val.size;
|
||||
row.priceName = val.name;
|
||||
row.pricePattern = val.pattern;
|
||||
}
|
||||
},
|
||||
checkPriceChange(ov, nv) {
|
||||
if (ov.orderProdList == null || ov.orderProdList.length == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// val不为空时赋值
|
||||
row.priceSubName = val.subName || null;
|
||||
row.priceSpec = val.spec || null;
|
||||
row.pricePrice = val.price || null;
|
||||
row.priceUnit = val.unit || null;
|
||||
row.priceClassify = val.classify || null;
|
||||
row.priceQuantityNumerator = val.quantityNumerator || null;
|
||||
row.priceQuantityDenominator = val.quantityDenominator || null;
|
||||
row.priceCode = val.code || null;
|
||||
row.priceStatus = val.status || null;
|
||||
row.priceCategory = val.category;
|
||||
row.priceSize = val.size;
|
||||
row.priceName = val.name;
|
||||
row.pricePattern = val.pattern;
|
||||
if (nv == null) {
|
||||
nv = {};
|
||||
}
|
||||
if (ov.priceCategory != nv.priceCategory ||
|
||||
ov.priceSize != nv.priceSize ||
|
||||
ov.pricePattern != nv.pricePattern ) {
|
||||
this.$message.info('由于工序发生变化,关联订单已清空,请重新选择关联订单。');
|
||||
ov.orderProdList = [];
|
||||
}
|
||||
},
|
||||
onChangeSurface(row) {
|
||||
if (row.orderProdList == null || row.orderProdList.length == 0) {
|
||||
return;
|
||||
}
|
||||
this.$message.info('由于表面处理发生变化,关联订单已清空,请重新选择关联订单。');
|
||||
row.orderProdList = [];
|
||||
},
|
||||
// 当用户数量发生变化时,自动汇总良品
|
||||
handleChangeUserNum(row) {
|
||||
|
|
|
@ -6,18 +6,25 @@
|
|||
stripe
|
||||
class="mini-table"
|
||||
@selection-change="handleSelectionChange"
|
||||
show-summary
|
||||
:summary-method="getSummary"
|
||||
>
|
||||
<el-table-column type="selection" align="center"/>
|
||||
<el-table-column align="center" label="#" width="50" type="index"/>
|
||||
<table-form-col label="订单" :prop-prefix="propPrefix" prop="orderId" required :rules="rules.orderId">
|
||||
<template slot-scope="d">
|
||||
{{d.row.orderErpBillNo | dv}}
|
||||
</template>
|
||||
<table-form-col label="计划跟踪号" :prop-prefix="propPrefix" prop="orderId" required :rules="rules.orderId">
|
||||
<span slot-scope="d" style="font-size: 12px;">
|
||||
{{d.row.orderErpMtoNo | dv}}
|
||||
</span>
|
||||
</table-form-col>
|
||||
<table-form-col label="物料编码" :prop-prefix="propPrefix" prop="orderMaterialNumber">
|
||||
<template slot-scope="d">
|
||||
<table-form-col label="订单" :prop-prefix="propPrefix" prop="orderId" required :rules="rules.orderId">
|
||||
<span slot-scope="d" style="font-size: 12px;">
|
||||
{{d.row.orderErpBillNo | dv}}
|
||||
</span>
|
||||
</table-form-col>
|
||||
<table-form-col label="物料" :prop-prefix="propPrefix" prop="orderMaterialNumber">
|
||||
<span slot-scope="d" style="font-size: 12px;">
|
||||
{{d.row.orderMaterialNumber | dv}}
|
||||
</template>
|
||||
</span>
|
||||
</table-form-col>
|
||||
<table-form-col label="产量" :prop-prefix="propPrefix" prop="num" required :rules="rules.num" header-icon="el-icon-edit" @click-header="handleBatchEdit('num')">
|
||||
<el-input slot-scope="d" v-model="d.row.num" placeholder="请输入产量">
|
||||
|
@ -98,11 +105,35 @@ export default {
|
|||
materialCategory: this.prod.priceCategory,
|
||||
materialSize: this.prod.priceSize,
|
||||
materialGraphics: this.prod.pricePattern,
|
||||
materialSurface: this.prod.surface,
|
||||
excludeIds: this.value.map(item => item.orderId),
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getSummary({ columns, data }) {
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
if (column.property === 'num') {
|
||||
const sum = data.reduce((prev, curr) => {
|
||||
const value = Number(curr.num);
|
||||
if (!isNaN(value)) {
|
||||
return prev + value;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
sums[index] = sum + this.prod.priceUnit;
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
// 新增
|
||||
handleAdd() {
|
||||
this.showOrderDialog = true;
|
||||
|
@ -125,6 +156,7 @@ export default {
|
|||
// vo
|
||||
orderErpBillNo: item.erpBillNo,
|
||||
orderMaterialNumber: item.materialNumber,
|
||||
orderErpMtoNo: item.erpMtoNo,
|
||||
}));
|
||||
if (this.value == null) {
|
||||
this.$emit('input', list);
|
||||
|
|
|
@ -6,13 +6,15 @@
|
|||
stripe
|
||||
class="mini-table"
|
||||
@selection-change="handleSelectionChange"
|
||||
show-summary
|
||||
:summary-method="getSummary"
|
||||
>
|
||||
<el-table-column type="selection" align="center"/>
|
||||
<el-table-column align="center" label="#" width="50" type="index"/>
|
||||
<table-form-col label="员工" :prop-prefix="propPrefix" prop="userId" required :rules="rules.userId">
|
||||
<template slot-scope="d">
|
||||
<span slot-scope="d" style="font-size: 12px;">
|
||||
{{d.row.userName | dv}} ({{d.row.userNo | dv}})
|
||||
</template>
|
||||
</span>
|
||||
</table-form-col>
|
||||
<table-form-col label="产量" :prop-prefix="propPrefix" prop="num" required :rules="rules.num" header-icon="el-icon-edit" @click-header="handleBatchEdit('num')">
|
||||
<el-input slot-scope="d" v-model="d.row.num" placeholder="请输入产量" @change="handleChangeNum">
|
||||
|
@ -21,6 +23,9 @@
|
|||
</template>
|
||||
</el-input>
|
||||
</table-form-col>
|
||||
<table-form-col label="工资" :prop-prefix="propPrefix" prop="totalAmount" align="right" width="100">
|
||||
<span slot-scope="d" style="font-size: 12px;">{{totalAmount(d.row) | fix2 | dv}}</span>
|
||||
</table-form-col>
|
||||
<el-table-column label="操作" align="center" width="120">
|
||||
<template #header>
|
||||
<el-button size="small" icon="el-icon-plus" type="text" @click="handleAdd" >关联员工</el-button>
|
||||
|
@ -95,8 +100,42 @@ export default {
|
|||
excludeUserIds: this.value.map(item => item.userId),
|
||||
}
|
||||
},
|
||||
// 工资
|
||||
totalAmount() {
|
||||
return (row) => {
|
||||
return notNullDecimal(row.num).mul(notNullDecimal(this.prod.pricePrice)).toNumber();
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getSummary({ columns, data }) {
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
if (column.property === 'num') {
|
||||
const sum = data.reduce((prev, curr) => {
|
||||
const value = Number(curr.num);
|
||||
if (!isNaN(value)) {
|
||||
return prev + value;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
sums[index] = sum + this.prod.priceUnit;
|
||||
} else if (column.property === 'totalAmount') {
|
||||
const sum = data.reduce((prev, curr) => {
|
||||
return prev + this.totalAmount(curr);
|
||||
}, 0);
|
||||
sums[index] = sum.toFixed(2);
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
listUserWithShift,
|
||||
handleChangeNum() {
|
||||
this.emitChangeNum();
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<dept-tree-select v-model="form.deptId" class="small-tree-select" @change="handleQuery"/>
|
||||
<dept-select v-model="queryParams.deptId" @change="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="statusList">
|
||||
<el-checkbox-group v-model="queryParams.statusList" @change="handleQuery">
|
||||
|
@ -14,30 +14,6 @@
|
|||
</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建人" prop="createBy">
|
||||
<el-input
|
||||
v-model="queryParams.createBy"
|
||||
placeholder="请输入创建人名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核人" prop="verifyBy">
|
||||
<el-input
|
||||
v-model="queryParams.verifyBy"
|
||||
placeholder="请输入审核人名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新人" prop="updateBy">
|
||||
<el-input
|
||||
v-model="queryParams.updateBy"
|
||||
placeholder="请输入更新人名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="报表日期" prop="reportDateRange">
|
||||
<el-date-picker
|
||||
type="daterange"
|
||||
|
@ -92,7 +68,9 @@
|
|||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="reportList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
|
||||
<el-table size="mini" max-height="600px" v-loading="loading" :data="reportList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange"
|
||||
show-summary
|
||||
:summary-method="getSummary">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<template v-for="column of showColumns">
|
||||
<el-table-column
|
||||
|
@ -111,11 +89,19 @@
|
|||
{{d.row[column.key]}}
|
||||
</template>
|
||||
<template v-else-if="column.key === 'status'">
|
||||
<dict-tag :options="dict.type.report_status" :value="d.row[column.key]"/>
|
||||
<dict-tag :options="dict.type.report_status" :value="d.row[column.key]" size="mini"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'totalAmount'">
|
||||
{{d.row.totalAmount | dv}} 元
|
||||
</template>
|
||||
<template v-else-if="column.key === 'createTime'">
|
||||
<template v-if="d.row.createTime">创建:{{d.row.createTime | dv}}({{d.row.createBy | dv}})<br/></template>
|
||||
<template v-if="d.row.updateTime">更新:{{d.row.updateTime | dv}}({{d.row.updateBy | dv}})<br/></template>
|
||||
<template v-if="d.row.verifyTime">审核:{{d.row.verifyTime | dv}}({{d.row.verifyBy | dv}})<br/></template>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'productCount'">
|
||||
{{d.row.productCount | dv}} 条
|
||||
</template>
|
||||
<template v-else>
|
||||
{{d.row[column.key] | dv}}
|
||||
</template>
|
||||
|
@ -179,10 +165,11 @@
|
|||
|
||||
<script>
|
||||
import {cancelReport, delReport, listReport, submitReport} from "@/api/yh/report";
|
||||
import {getReportSum} from "@/api/dashboard/report";
|
||||
import {$showColumns} from '@/utils/mixins';
|
||||
import FormCol from "@/components/FormCol/index.vue";
|
||||
import DeptTreeSelect from "@/components/Business/Dept/DeptTreeSelect.vue";
|
||||
import {DatePickerOptions, ReportStatus} from "@/utils/constants";
|
||||
import DeptSelect from '@/components/Business/Dept/DeptSelect.vue';
|
||||
|
||||
// 默认排序字段
|
||||
const defaultSort = {
|
||||
|
@ -194,24 +181,20 @@ export default {
|
|||
name: "Report",
|
||||
mixins: [$showColumns],
|
||||
dicts: ['report_status'],
|
||||
components: {DeptTreeSelect, FormCol},
|
||||
components: { FormCol, DeptSelect},
|
||||
data() {
|
||||
return {
|
||||
DatePickerOptions,
|
||||
ReportStatus,
|
||||
// 字段列表
|
||||
columns: [
|
||||
{key: 'reportId', visible: true, label: '报表编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'reportId', visible: false, label: '编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'deptName', visible: true, label: '部门', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportDate', visible: true, label: '报表日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'totalAmount', visible: true, label: '总金额', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportDate', visible: true, label: '日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'status', visible: true, label: '状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'createBy', visible: true, label: '创建人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'createTime', visible: true, label: '创建时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "180"},
|
||||
{key: 'updateBy', visible: true, label: '更新人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'updateTime', visible: true, label: '更新时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "180"},
|
||||
{key: 'verifyBy', visible: true, label: '审核人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'verifyTime', visible: true, label: '审核时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "180"},
|
||||
{key: 'totalAmount', visible: true, label: '金额', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'productCount', visible: true, label: '工序', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'createTime', visible: true, label: '时间', minWidth: null, sortable: true, overflow: false, align: 'left', width: "250"},
|
||||
{key: 'verifyRemark', visible: true, label: '审核意见', minWidth: null, sortable: false, overflow: true, align: 'center', width: null},
|
||||
],
|
||||
// 排序方式
|
||||
|
@ -270,13 +253,34 @@ export default {
|
|||
createBy: [
|
||||
{ required: true, message: "创建人名称不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
},
|
||||
sum: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getSum() {
|
||||
getReportSum(this.queryParams).then(res => {
|
||||
this.sum = res.data;
|
||||
})
|
||||
},
|
||||
getSummary({ columns, data }) {
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
if (column.property === 'totalAmount') {
|
||||
sums[index] = this.sum.totalAmount + ' 元';
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
// 提交报表
|
||||
handleSubmit(row) {
|
||||
this.$confirm('确定提交吗?', '提示', {
|
||||
|
@ -325,6 +329,7 @@ export default {
|
|||
this.reportList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
this.getSum();
|
||||
});
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
<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="orderErpMtoNo" v-if="isShow('orderErpMtoNo')" label-width="6em">
|
||||
<el-input
|
||||
v-model="queryParams.orderErpMtoNo"
|
||||
placeholder="请输入计划跟踪号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="生产订单" prop="orderErpBillNo" v-if="isShow('orderErpBillNo')">
|
||||
<el-input
|
||||
v-model="queryParams.orderErpBillNo"
|
||||
|
@ -9,6 +17,9 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="车间" prop="reportDeptId">
|
||||
<dept-select v-model="queryParams.reportDeptId" @change="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
|
@ -50,19 +61,31 @@
|
|||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="reportOrderProdList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table
|
||||
show-summary
|
||||
:summary-method="sumaryMethod"
|
||||
v-loading="loading"
|
||||
size="mini"
|
||||
max-height="600px"
|
||||
:data="reportOrderProdList"
|
||||
@selection-change="handleSelectionChange"
|
||||
:default-sort="defaultSort"
|
||||
@sort-change="onSortChange">
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55"
|
||||
align="center" />
|
||||
<template v-for="column of showColumns">
|
||||
<el-table-column
|
||||
:key="column.key"
|
||||
:label="column.label"
|
||||
:prop="column.key"
|
||||
:align="column.align"
|
||||
:min-width="column.minWidth"
|
||||
:sort-orders="orderSorts"
|
||||
:sortable="column.sortable"
|
||||
:show-overflow-tooltip="column.overflow"
|
||||
:width="column.width"
|
||||
:key="column.key"
|
||||
:label="column.label"
|
||||
:prop="column.key"
|
||||
:align="column.align"
|
||||
:min-width="column.minWidth"
|
||||
:sort-orders="orderSorts"
|
||||
:sortable="column.sortable"
|
||||
:show-overflow-tooltip="column.overflow"
|
||||
:width="column.width"
|
||||
>
|
||||
<template slot-scope="d">
|
||||
<template v-if="column.key === 'id'">
|
||||
|
@ -81,7 +104,7 @@
|
|||
{{d.row[column.key] | dv}} {{d.row.unitName}}
|
||||
</template>
|
||||
<template v-else-if="column.key === 'reportStatus'">
|
||||
<dict-tag :value="d.row.reportStatus" :options="dict.type.report_status"/>
|
||||
<dict-tag :value="d.row.reportStatus" :options="dict.type.report_status" size="mini"/>
|
||||
</template>
|
||||
<template v-else>
|
||||
{{d.row[column.key]}}
|
||||
|
@ -151,6 +174,8 @@ import {
|
|||
import {$showColumns} from '@/utils/mixins';
|
||||
import FormCol from "@/components/FormCol/index.vue";
|
||||
import ProdOrderLink from "@/components/Business/ProdOrder/ProdOrderLink.vue";
|
||||
import { getReportOrderProdSum } from "@/api/dashboard/reportOrderProd";
|
||||
import DeptSelect from "@/components/Business/Dept/DeptSelect.vue";
|
||||
|
||||
// 默认排序字段
|
||||
const defaultSort = {
|
||||
|
@ -162,7 +187,7 @@ export default {
|
|||
name: "ReportOrderProd",
|
||||
mixins: [$showColumns],
|
||||
dicts: ['report_status'],
|
||||
components: {ProdOrderLink, FormCol},
|
||||
components: {ProdOrderLink, FormCol, DeptSelect},
|
||||
props: {
|
||||
query: {
|
||||
type: Object,
|
||||
|
@ -175,13 +200,18 @@ export default {
|
|||
// 字段列表
|
||||
columns: [
|
||||
{key: 'id', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'orderErpMtoNo', visible: true, label: '计划跟踪号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'orderErpBillNo', visible: true, label: '生产订单', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportId', visible: false, label: '报表编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'reportDate', visible: true, label: '报表日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportStatus', visible: true, label: '报表状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportDeptName', visible: true, label: '车间', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportDate', visible: true, label: '日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportStatus', visible: true, label: '状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'priceName', visible: true, label: '工序', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'priceCategory', visible: true, label: '类别', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'priceSize', visible: true, label: '大小', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'pricePattern', visible: true, label: '图案', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'pricePrice', visible: true, label: '单价', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'orderErpQty', visible: true, label: '订单数量', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'orderErpQty', visible: false, label: '订单数量', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'num', visible: true, label: '良品数', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
],
|
||||
// 排序方式
|
||||
|
@ -228,7 +258,8 @@ export default {
|
|||
num: [
|
||||
{ required: true, message: "生产数量不能为空", trigger: "blur" }
|
||||
]
|
||||
}
|
||||
},
|
||||
sum: {}, // 统计数据
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
@ -240,6 +271,20 @@ export default {
|
|||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
sumaryMethod({ columns, data }) {
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (column.property === 'num') {
|
||||
sums[index] = this.sum.num;
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
if (index == 0) {
|
||||
sums[index] = '合计';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
/** 当排序按钮被点击时触发 **/
|
||||
onSortChange(column) {
|
||||
if (column.order == null) {
|
||||
|
@ -258,6 +303,12 @@ export default {
|
|||
this.reportOrderProdList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
this.getSum();
|
||||
});
|
||||
},
|
||||
getSum() {
|
||||
getReportOrderProdSum(this.queryParams).then(response => {
|
||||
this.sum = response.data;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
|
|
|
@ -86,6 +86,9 @@
|
|||
@sort-change="onSortChange"
|
||||
@expand-change="onExpandChange"
|
||||
size="mini"
|
||||
max-height="600px"
|
||||
show-summary
|
||||
:summary-method="getSummary"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" v-if="listConfig.showSelection"/>
|
||||
<el-table-column type="expand" width="20" align="left" fixed="left">
|
||||
|
@ -183,63 +186,6 @@
|
|||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改报表产量对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body :close-on-click-modal="false">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-row>
|
||||
<form-col :span="span" label="报表ID" prop="reportId">
|
||||
<el-input v-model="form.reportId" placeholder="请输入报表ID" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序ID" prop="priceId">
|
||||
<el-input v-model="form.priceId" placeholder="请输入工序ID" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="良品数" prop="num">
|
||||
<el-input v-model="form.num" placeholder="请输入良品数" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="不良品数" prop="defectNum">
|
||||
<el-input v-model="form.defectNum" placeholder="请输入不良品数" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序类别" prop="priceCategory">
|
||||
<el-input v-model="form.priceCategory" placeholder="请输入工序类别" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序大小" prop="priceSize">
|
||||
<el-input v-model="form.priceSize" placeholder="请输入工序大小" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序名称" prop="priceName">
|
||||
<el-input v-model="form.priceName" placeholder="请输入工序名称" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="子工序名称" prop="priceSubName">
|
||||
<el-input v-model="form.priceSubName" placeholder="请输入子工序名称" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序图案" prop="pricePattern">
|
||||
<el-input v-model="form.pricePattern" placeholder="请输入工序图案" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序规格" prop="priceSpec">
|
||||
<el-input v-model="form.priceSpec" placeholder="请输入工序规格" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序单价(元)" prop="pricePrice">
|
||||
<el-input v-model="form.pricePrice" placeholder="请输入工序单价(元)" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序单位" prop="priceUnit">
|
||||
<el-input v-model="form.priceUnit" placeholder="请输入工序单位" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序分类" prop="priceClassify">
|
||||
<el-input v-model="form.priceClassify" placeholder="请输入工序分类" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序生产数量倍数(个)" prop="priceQuantity">
|
||||
<el-input v-model="form.priceQuantity" placeholder="请输入工序生产数量倍数(个)" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="删除标志" prop="deleted">
|
||||
<el-input v-model="form.deleted" placeholder="请输入删除标志" />
|
||||
</form-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -255,6 +201,7 @@ import {formatFraction, isEmpty} from "@/utils";
|
|||
import ReportOrderProdDescriptions from "@/views/yh/reportProd/components/ReportOrderProdDescriptions.vue";
|
||||
import BooleanTag from '@/components/BooleanTag/index.vue'
|
||||
import {ReportStatus} from "@/utils/constants";
|
||||
import {getReportProdSum} from "@/api/dashboard/reportProd";
|
||||
|
||||
// 默认排序字段
|
||||
const defaultSort = {
|
||||
|
@ -287,18 +234,14 @@ export default {
|
|||
showPage: false,
|
||||
},
|
||||
searchColumns: [
|
||||
{key: 'reportId', label: "报表编号", type: 'input', dictType: null},
|
||||
{key: 'reportStatus', label: "报表状态", type: 'dict', dictType: 'report_status'},
|
||||
{key: 'deptId', label: "车间", type: 'dept', dictType: null},
|
||||
{key: 'reportDateRange', label: "报表日期", type: 'daterange', dictType: null},
|
||||
{key: 'reportDateRange', label: "日期", type: 'daterange', dictType: null},
|
||||
{key: 'reportStatus', label: "报表状态", type: 'dict', dictType: 'report_status'},
|
||||
{key: 'priceName', label: "工序", type: 'input', dictType: null},
|
||||
{key: 'priceSubName', label: "子工序", type: 'input', dictType: null},
|
||||
{key: 'priceCategory', label: "类别", type: 'input', dictType: null},
|
||||
{key: 'priceSize', label: "大小", type: 'input', dictType: null},
|
||||
{key: 'pricePattern', label: "图案", type: 'input', dictType: null},
|
||||
{key: 'priceSpec', label: "规格", type: 'input', dictType: null},
|
||||
{key: 'priceClassify', label: "分类", type: 'input', dictType: null},
|
||||
{key: 'priceUnit', label: "单位", type: 'input', dictType: null},
|
||||
],
|
||||
span: 24,
|
||||
// 字段列表
|
||||
|
@ -399,7 +342,8 @@ export default {
|
|||
priceType: [
|
||||
{ required: true, message: "工序类型不能为空", trigger: "change" }
|
||||
]
|
||||
}
|
||||
},
|
||||
sum: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
@ -413,6 +357,23 @@ export default {
|
|||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getSummary({ columns, data }) {
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
if (column.property === 'num') {
|
||||
sums[index] = this.sum.num;
|
||||
} else if (column.property === 'totalAmount') {
|
||||
sums[index] = this.sum.totalAmount + ' 元';
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
handleRefreshPriceMatchReportProd() {
|
||||
refreshPriceMatchReportProd(this.ids).then(response => {
|
||||
if (response.code === 200 && response.data > 0) {
|
||||
|
@ -448,8 +409,14 @@ export default {
|
|||
this.reportProdList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
this.getSum();
|
||||
});
|
||||
},
|
||||
getSum() {
|
||||
getReportProdSum(this.queryParams).then(res => {
|
||||
this.sum = res.data;
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
|
|
|
@ -1,12 +1,24 @@
|
|||
<template>
|
||||
<div :class="listConfig.containerClass">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<!-- 报表日期 -->
|
||||
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<dept-tree-select v-model="queryParams.deptId" placeholder="请选择部门" class="small-tree-select" @change="handleQuery"/>
|
||||
<dept-select v-model="queryParams.deptId" @change="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="报表状态" prop="reportStatus">
|
||||
<el-form-item label="日期" prop="reportDateRange">
|
||||
<el-date-picker
|
||||
v-model="queryParams.reportDateRange"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
clearable
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
@change="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="reportStatus">
|
||||
<el-select
|
||||
v-model="queryParams.reportStatus"
|
||||
placeholder="请选择报表状态"
|
||||
|
@ -32,32 +44,36 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工序名称" prop="priceName">
|
||||
<el-form-item label="工序" prop="priceName">
|
||||
<el-input
|
||||
v-model="queryParams.priceName"
|
||||
placeholder="请输入工序名称"
|
||||
placeholder="请输入工序"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工序代码" prop="priceCode">
|
||||
<el-form-item label="类别" prop="priceCategory">
|
||||
<el-input
|
||||
v-model="queryParams.priceCode"
|
||||
placeholder="请输入工序代码"
|
||||
v-model="queryParams.priceCategory"
|
||||
placeholder="请输入类别"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="报表日期" prop="reportDateRange">
|
||||
<el-date-picker
|
||||
v-model="queryParams.reportDateRange"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
<el-form-item label="大小" prop="priceSize">
|
||||
<el-input
|
||||
v-model="queryParams.priceSize"
|
||||
placeholder="请输入大小"
|
||||
clearable
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
@change="handleQuery"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="图案" prop="pricePattern">
|
||||
<el-input
|
||||
v-model="queryParams.pricePattern"
|
||||
placeholder="请输入图案"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -104,7 +120,7 @@
|
|||
</el-row>
|
||||
|
||||
<!-- TODO 统计数据 -->
|
||||
<el-row class="statistics-row">
|
||||
<!-- <el-row class="statistics-row">
|
||||
<div class="statistics-item">
|
||||
<span class="statistics-label">总产量:</span>
|
||||
<span class="statistics-value">{{ statistics.totalNum || 0 }}</span>
|
||||
|
@ -113,9 +129,18 @@
|
|||
<span class="statistics-label">总工资:</span>
|
||||
<span class="statistics-value">{{ statistics.totalPrice || 0 }} 元</span>
|
||||
</div>
|
||||
</el-row>
|
||||
</el-row> -->
|
||||
|
||||
<el-table v-loading="loading" :data="reportUserProdList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
|
||||
<el-table
|
||||
max-height="600px"
|
||||
size="mini"
|
||||
v-loading="loading"
|
||||
show-summary
|
||||
:summary-method="getSummary"
|
||||
:data="reportUserProdList"
|
||||
@selection-change="handleSelectionChange"
|
||||
:default-sort="defaultSort"
|
||||
@sort-change="onSortChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<template v-for="column of showColumns">
|
||||
<el-table-column
|
||||
|
@ -140,10 +165,13 @@
|
|||
{{d.row[column.key] | dv}} {{ d.row.priceUnit | dv}}
|
||||
</template>
|
||||
<template v-else-if="column.key === 'totalPrice'">
|
||||
{{d.row.totalPrice | dv}} 元
|
||||
{{d.row.totalPrice | fix2 | dv}} 元
|
||||
</template>
|
||||
<template v-else-if="column.key === 'reportStatus'">
|
||||
<dict-tag :value="d.row.reportStatus" :options="dict.type.report_status"/>
|
||||
<dict-tag :value="d.row.reportStatus" :options="dict.type.report_status" size="mini"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'userName'">
|
||||
{{d.row.userName | dv}}({{d.row.userNo | dv}})
|
||||
</template>
|
||||
<template v-else>
|
||||
{{d.row[column.key]}}
|
||||
|
@ -212,8 +240,9 @@ import {
|
|||
} from "@/api/yh/reportUserProd";
|
||||
import {$listConfig, $showColumns, $showSearch} from '@/utils/mixins';
|
||||
import FormCol from "@/components/FormCol/index.vue";
|
||||
import DeptTreeSelect from '@/components/Business/Dept/DeptTreeSelect.vue';
|
||||
import DeptSelect from '@/components/Business/Dept/DeptSelect.vue';
|
||||
import {dashboardUserProd} from '@/api/yh/dashboard.js';
|
||||
import {getReportUserProdSum} from '@/api/dashboard/reportUserProd';
|
||||
|
||||
// 默认排序字段
|
||||
const defaultSort = {
|
||||
|
@ -225,7 +254,7 @@ export default {
|
|||
name: "ReportUserProd",
|
||||
mixins: [$showColumns, $listConfig, $showSearch],
|
||||
dicts: ['report_status'],
|
||||
components: {FormCol, DeptTreeSelect},
|
||||
components: {FormCol, DeptSelect},
|
||||
props: {
|
||||
query: {
|
||||
type: Object,
|
||||
|
@ -244,16 +273,18 @@ export default {
|
|||
// 字段列表
|
||||
columns: [
|
||||
{key: 'id', visible: false, label: '明细ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'reportDate', visible: true, label: '报表日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'deptName', visible: true, label: '部门', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportStatus', visible: true, label: '报表状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'userName', visible: true, label: '员工名称', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'userNo', visible: true, label: '员工编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'reportDate', visible: true, label: '日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'reportStatus', visible: true, label: '状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'priceName', visible: true, label: '工序', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'priceCode', visible: true, label: '工序代码', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
// {key: 'priceCode', visible: true, label: '代码', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'priceCategory', visible: true, label: '类别', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'priceSize', visible: true, label: '大小', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'pricePattern', visible: true, label: '图案', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'userName', visible: true, label: '员工', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'pricePrice', visible: true, label: '单价', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'num', visible: true, label: '产量', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'totalPrice', visible: true, label: '工资', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'totalPrice', visible: true, label: '工资', minWidth: null, sortable: true, overflow: false, align: 'right', width: null},
|
||||
],
|
||||
// 排序方式
|
||||
orderSorts: ['ascending', 'descending', null],
|
||||
|
@ -303,6 +334,7 @@ export default {
|
|||
},
|
||||
// 统计数据
|
||||
statistics: {},
|
||||
sum: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
@ -317,6 +349,24 @@ export default {
|
|||
this.getStatistics();
|
||||
},
|
||||
methods: {
|
||||
// 统计数据
|
||||
getSummary({ columns, data }) {
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
if (column.property === 'totalPrice') {
|
||||
sums[index] = this.sum.totalAmount + ' 元';
|
||||
} else if (column.property === 'num') {
|
||||
sums[index] = this.sum.num;
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
getStatistics() {
|
||||
dashboardUserProd(this.queryParams).then(res => {
|
||||
this.statistics = res.data;
|
||||
|
@ -340,8 +390,14 @@ export default {
|
|||
this.reportUserProdList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
this.getSum();
|
||||
});
|
||||
},
|
||||
getSum() {
|
||||
getReportUserProdSum(this.queryParams).then(res => {
|
||||
this.sum = res.data;
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
|
|
Loading…
Reference in New Issue
Block a user