订单详情(进度需要考虑是否计入审核中的数量)
This commit is contained in:
parent
8e2e810e69
commit
0db4935ab9
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-tag :type="value ? trueType : falseType" :size="size">{{value ? trueText : falseText}}</el-tag>
|
||||
<el-tag v-if="value != null" :type="value ? trueType : falseType" :size="size">{{value ? trueText : falseText}}</el-tag>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
|
@ -7,8 +7,7 @@ export default {
|
|||
props: {
|
||||
value: {
|
||||
type: Boolean,
|
||||
default: null,
|
||||
required: true
|
||||
default: null
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
|
|
|
@ -120,6 +120,12 @@ export const constantRoutes = [
|
|||
name: 'ReportView',
|
||||
meta: { title: '报表详情', noCache: false}
|
||||
},
|
||||
{
|
||||
path: 'prodOrder/:id',
|
||||
component: () => import('@/views/yh/prodOrder/view/view.vue'),
|
||||
name: 'ProdOrderView',
|
||||
meta: { title: '订单详情', noCache: false}
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
@ -92,3 +92,21 @@ export const ReportPriceType = {
|
|||
PUBLIC: "1", // 公共工序
|
||||
BILL: "2", // 订单工序
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入日志业务类型
|
||||
*/
|
||||
export const LogImportBizType = {
|
||||
PRICE: "1", // 单价
|
||||
PROD_ORDER: "2", // 生产订单
|
||||
}
|
||||
|
||||
// 操作日志业务类型
|
||||
export const OperLogBizType = {
|
||||
UNKNOWN: "0", // 未知
|
||||
PRICE: "1", // 单价
|
||||
REPORT: "2", // 报表
|
||||
PROD_ORDER: "3", // 生产订单
|
||||
MATERIAL: "4", // 物料
|
||||
UNIT: "5", // 单位
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
v-model="queryParams.operIp"
|
||||
placeholder="请输入操作地址"
|
||||
clearable
|
||||
style="width: 240px;"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
@ -15,7 +14,6 @@
|
|||
v-model="queryParams.title"
|
||||
placeholder="请输入系统模块"
|
||||
clearable
|
||||
style="width: 240px;"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
@ -24,17 +22,11 @@
|
|||
v-model="queryParams.operName"
|
||||
placeholder="请输入操作人员"
|
||||
clearable
|
||||
style="width: 240px;"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="businessType">
|
||||
<el-select
|
||||
v-model="queryParams.businessType"
|
||||
placeholder="操作类型"
|
||||
clearable
|
||||
style="width: 240px"
|
||||
>
|
||||
<el-form-item label="操作类型" prop="businessType" >
|
||||
<el-select v-model="queryParams.businessType" placeholder="请选择操作类型" clearable @change="handleQuery">
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_oper_type"
|
||||
:key="dict.value"
|
||||
|
@ -43,13 +35,18 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select
|
||||
v-model="queryParams.status"
|
||||
placeholder="操作状态"
|
||||
clearable
|
||||
style="width: 240px"
|
||||
>
|
||||
<el-form-item label="业务类型" prop="bizType">
|
||||
<el-select v-model="queryParams.bizType" placeholder="请选择业务类型" clearable @change="handleQuery">
|
||||
<el-option
|
||||
v-for="dict in dict.type.log_biz_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="操作状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择操作状态" clearable @change="handleQuery">
|
||||
<el-option
|
||||
v-for="dict in dict.type.sys_common_status"
|
||||
:key="dict.value"
|
||||
|
@ -65,8 +62,8 @@
|
|||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
|
@ -218,6 +215,12 @@ import { list, delOperlog, cleanOperlog } from "@/api/monitor/operlog";
|
|||
export default {
|
||||
name: "Operlog",
|
||||
dicts: ['sys_oper_type', 'sys_common_status', 'log_biz_type'],
|
||||
props: {
|
||||
query: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
@ -253,6 +256,11 @@ export default {
|
|||
};
|
||||
},
|
||||
created() {
|
||||
this.queryParams = {
|
||||
...this.queryParams,
|
||||
...this.query
|
||||
}
|
||||
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
|
|
37
src/views/yh/prodOrder/components/ProdOrderProgress.vue
Normal file
37
src/views/yh/prodOrder/components/ProdOrderProgress.vue
Normal file
|
@ -0,0 +1,37 @@
|
|||
<template>
|
||||
<el-progress
|
||||
v-if="percentage != null && !isNaN(percentage)"
|
||||
text-inside
|
||||
:stroke-width="16"
|
||||
:percentage="percentage"
|
||||
:color="customColors"
|
||||
text-color="#fff"
|
||||
:style="{width: width}"
|
||||
/>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "ProdOrderProgress",
|
||||
props: {
|
||||
percentage: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
customColors: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return [
|
||||
{color: '#f56c6c', percentage: 100},
|
||||
{color: '#f3ab40', percentage: 80},
|
||||
{color: '#5cb87a', percentage: 60},
|
||||
{color: '#2f9bfb', percentage: 30},
|
||||
]
|
||||
}
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: "80px",
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -132,6 +132,9 @@
|
|||
<template v-else-if="column.key === 'erpIsRework'">
|
||||
<boolean-tag :value="d.row.erpIsRework"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'percentage'">
|
||||
<prod-order-progress :percentage="percentage(d.row)" width="80px"/>
|
||||
</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>
|
||||
|
@ -151,6 +154,13 @@
|
|||
<!-- @click="handleUpdate(scope.row)"-->
|
||||
<!-- v-has-permi="['yh:prodOrder:edit']"-->
|
||||
<!-- >修改</el-button>-->
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-view"
|
||||
@click="handleView(scope.row)"
|
||||
v-has-permi="['yh:prodOrder:query']"
|
||||
>详情</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
|
@ -260,6 +270,8 @@ import FormCol from "@/components/FormCol/index.vue";
|
|||
import DeptTreeSelect from "@/components/Business/Dept/DeptTreeSelect.vue";
|
||||
import BooleanTag from "@/components/BooleanTag/index.vue";
|
||||
import {isEmpty} from "@/utils";
|
||||
import {$prodOrder} from "@/views/yh/prodOrder/mixins";
|
||||
import ProdOrderProgress from "@/views/yh/prodOrder/components/ProdOrderProgress.vue";
|
||||
|
||||
// 默认排序字段
|
||||
const defaultSort = {
|
||||
|
@ -269,9 +281,9 @@ const defaultSort = {
|
|||
|
||||
export default {
|
||||
name: "ProdOrder",
|
||||
mixins: [$showColumns],
|
||||
mixins: [$showColumns, $prodOrder],
|
||||
dicts: ['prod_order_erp_document_status', 'prod_order_erp_status', 'prod_order_erp_req_src'],
|
||||
components: {BooleanTag, DeptTreeSelect, FormCol},
|
||||
components: {ProdOrderProgress, BooleanTag, DeptTreeSelect, FormCol},
|
||||
data() {
|
||||
return {
|
||||
span: 24,
|
||||
|
@ -300,6 +312,7 @@ export default {
|
|||
{key: 'erpBaseNoStockInQty', visible: false, label: '基本未入库', minWidth: null, sortable: true, overflow: false, align: 'center', width: "130"},
|
||||
{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],
|
||||
|
@ -361,6 +374,9 @@ export default {
|
|||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
handleView(row) {
|
||||
this.$router.push(`/view/prodOrder/${row.id}`)
|
||||
},
|
||||
isEmpty,
|
||||
handleSync(query = {}) {
|
||||
this.$confirm('确定同步生产订单吗?', '提示', {
|
||||
|
|
16
src/views/yh/prodOrder/mixins.js
Normal file
16
src/views/yh/prodOrder/mixins.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
import {notNullDecimal} from "@/utils";
|
||||
|
||||
export const $prodOrder = {
|
||||
computed: {
|
||||
// 生产进度百分比
|
||||
percentage() {
|
||||
return (row) => {
|
||||
return notNullDecimal(
|
||||
notNullDecimal(row.verifiedBaseNum)
|
||||
.div(notNullDecimal(row.erpBaseUnitQty))
|
||||
.toFixed(2)
|
||||
).toNumber();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
96
src/views/yh/prodOrder/view/view.vue
Normal file
96
src/views/yh/prodOrder/view/view.vue
Normal file
|
@ -0,0 +1,96 @@
|
|||
<template>
|
||||
<div class="app-container" v-loading="loading">
|
||||
<el-card class="card-box" header="订单信息">
|
||||
<el-descriptions :column="4">
|
||||
<el-descriptions-item label="单据编号">{{detail.erpBillNo | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="单据状态">
|
||||
<dict-tag :options="dict.type.prod_order_erp_document_status" :value="detail.erpDocumentStatus" size="small"/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="创建日期">{{detail.erpCreateDate | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="修改日期">{{detail.erpModifyDate | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="单据日期">{{detail.erpDate | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="物料编码">{{detail.materialNumber | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否返工">
|
||||
<boolean-tag :value="detail.erpIsRework" size="small"/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="备注">{{detail.erpMemoItem | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="下达日期">{{detail.erpConveyDate | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="业务状态">
|
||||
<dict-tag :options="dict.type.prod_order_erp_status" :value="detail.erpStatus" size="small"/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="生产车间">{{detail.workShopName | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="需求来源">
|
||||
<dict-tag :options="dict.type.prod_order_erp_req_src" :value="detail.erpReqSrc" size="small"/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="数量">{{detail.erpQty | dv}} {{detail.unitName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="未入库数量">{{detail.erpNoStockInQty | dv}} {{detail.unitName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="同步时间">{{detail.syncTime | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="生产进度">
|
||||
<prod-order-progress :percentage="percentage(detail)" width="80px"/>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-card>
|
||||
|
||||
<el-card class="card-box">
|
||||
<el-tabs>
|
||||
<el-tab-pane label="生产列表" lazy v-if="checkPermi(['yh:reportOrderProd:list'])">
|
||||
<report-order-prod v-if="detail.id != null" :query="{orderId: detail.id}"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="同步日志" lazy v-if="checkPermi(['yh:logImportDetail:list'])">
|
||||
<log-import-detail v-if="detail.id != null" :query="{logBizType: LogImportBizType.PROD_ORDER, bstId: detail.id}"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="操作日志" lazy v-if="checkPermi(['yh:logImportDetail:list'])">
|
||||
<operlog v-if="detail.id != null" :query="{bizType: OperLogBizType.PROD_ORDER, bizId: detail.id}"/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getProdOrder} from "@/api/yh/prodOrder";
|
||||
import BooleanTag from "@/components/BooleanTag/index.vue";
|
||||
import ReportOrderProd from "@/views/yh/reportOrderProd/index.vue";
|
||||
import {checkPermi} from "@/utils/permission";
|
||||
import LogImport from "@/views/yh/logImport/index.vue";
|
||||
import LogImportDetail from "@/views/yh/logImportDetail/index.vue";
|
||||
import {LogImportBizType, OperLogBizType} from "@/utils/constants";
|
||||
import Operlog from "@/views/monitor/operlog/index.vue";
|
||||
import ProdOrderProgress from "@/views/yh/prodOrder/components/ProdOrderProgress.vue";
|
||||
import {$prodOrder} from "@/views/yh/prodOrder/mixins";
|
||||
|
||||
export default {
|
||||
name: "ProdOrderView",
|
||||
mixins: [$prodOrder],
|
||||
computed: {
|
||||
OperLogBizType() {
|
||||
return OperLogBizType
|
||||
},
|
||||
LogImportBizType() {
|
||||
return LogImportBizType
|
||||
},
|
||||
},
|
||||
components: {ProdOrderProgress, Operlog, LogImportDetail, LogImport, ReportOrderProd, BooleanTag},
|
||||
dicts: ['prod_order_erp_document_status', 'prod_order_erp_status', 'prod_order_erp_req_src'],
|
||||
data() {
|
||||
return {
|
||||
detail: {},
|
||||
loading: false,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getDetail();
|
||||
},
|
||||
methods: {
|
||||
checkPermi,
|
||||
getDetail() {
|
||||
this.loading = true;
|
||||
getProdOrder(this.$route.params.id).then(res => {
|
||||
this.detail = res.data;
|
||||
}).finally(() => {
|
||||
this.loading = false;
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -68,7 +68,7 @@
|
|||
<template v-if="column.key === 'id'">
|
||||
{{d.row[column.key]}}
|
||||
</template>
|
||||
<template v-else-if="column.key === 'num'">
|
||||
<template v-else-if="['num'].includes(column.key)">
|
||||
{{d.row[column.key] | dv}} {{d.row.priceUnit}}
|
||||
</template>
|
||||
<template v-else-if="column.key === 'pricePrice'">
|
||||
|
@ -150,19 +150,25 @@ export default {
|
|||
mixins: [$showColumns],
|
||||
dicts: ['report_status'],
|
||||
components: {FormCol},
|
||||
props: {
|
||||
query: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
span: 24,
|
||||
// 字段列表
|
||||
columns: [
|
||||
{key: 'id', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{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: 'orderErpBillNo', 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: '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: 'num', visible: true, label: '良品数', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
],
|
||||
// 排序方式
|
||||
orderSorts: ['ascending', 'descending', null],
|
||||
|
@ -212,6 +218,11 @@ export default {
|
|||
};
|
||||
},
|
||||
created() {
|
||||
this.queryParams = {
|
||||
...this.queryParams,
|
||||
...this.query
|
||||
}
|
||||
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<el-descriptions-item :key="item.id" label="生产订单" :span="2">{{item.orderErpBillNo | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item :key="item.id" label="本次提交产量">{{item.num | fix2 | dv}} {{priceUnit}}</el-descriptions-item>
|
||||
<el-descriptions-item :key="item.id" label="订单进度">
|
||||
<el-progress text-inside :stroke-width="16" :percentage="percentage(item)" :color="customColors" text-color="#fff" style="width: 80px"/>
|
||||
<prod-order-progress :percentage="percentage(item)" width="80px"/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :key="item.id" label="订单需求数量">{{item.orderErpBaseUnitQty | fix2 | dv}} {{item.baseUnitName}}</el-descriptions-item>
|
||||
<el-descriptions-item :key="item.id" label="订单未入库数量">{{item.orderErpBaseNoStockInQty | fix2 | dv}} {{item.baseUnitName}}</el-descriptions-item>
|
||||
|
@ -21,9 +21,11 @@
|
|||
|
||||
import {notNullDecimal} from "@/utils";
|
||||
import Decimal from "decimal.js";
|
||||
import ProdOrderProgress from "@/views/yh/prodOrder/components/ProdOrderProgress.vue";
|
||||
|
||||
export default {
|
||||
name: "ReportOrderProdDescriptions",
|
||||
components: {ProdOrderProgress},
|
||||
props: {
|
||||
data: {
|
||||
type: Array,
|
||||
|
@ -42,12 +44,6 @@ export default {
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
customColors: [
|
||||
{color: '#f56c6c', percentage: 100},
|
||||
{color: '#f3ab40', percentage: 80},
|
||||
{color: '#5cb87a', percentage: 60},
|
||||
{color: '#2f9bfb', percentage: 30},
|
||||
]
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -60,11 +56,9 @@ export default {
|
|||
console.log("percentage", verifiedBaseNum.toNumber(), num.toNumber(), orderErpBaseUnitQty.toNumber());
|
||||
|
||||
// 结果 = (已审核量 + 本次提交量 * 倍数) / 基础总需求量 * 100
|
||||
let result = new Decimal(
|
||||
return new Decimal(
|
||||
verifiedBaseNum.add(num).mul(new Decimal(100)).div(orderErpBaseUnitQty).toFixed(2)
|
||||
).toNumber();
|
||||
console.log('result', result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue
Block a user