优化体验
This commit is contained in:
parent
f1aa60fbf6
commit
d520288bca
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -21,3 +21,4 @@ selenium-debug.log
|
|||
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
dist.zip
|
||||
|
|
|
@ -10,11 +10,11 @@ export function listUser(query) {
|
|||
})
|
||||
}
|
||||
// 查询包含调班的用户列表
|
||||
export function listUserWithShift(query) {
|
||||
export function listUserWithShift(params) {
|
||||
return request({
|
||||
url: '/system/user/shiftList',
|
||||
method: 'get',
|
||||
params: query
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" v-show="showSearch" :inline="true" label-width="68px">
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" v-show="showSearch" :inline="true" label-width="4em">
|
||||
<!-- <el-form-item label="部门" prop="deptId">
|
||||
<dept-tree-select v-model="queryParams.deptId" width="215px" @change="handleQuery" class="small-tree-select"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类别" prop="category">
|
||||
</el-form-item> -->
|
||||
<!-- <el-form-item label="类别" prop="category">
|
||||
<el-input
|
||||
v-model="queryParams.category"
|
||||
placeholder="请输入类别"
|
||||
|
@ -19,24 +19,34 @@
|
|||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="工序" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
placeholder="请输入工序名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
@change="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="子工序" prop="subName">
|
||||
<el-form-item label="代码" prop="code">
|
||||
<el-input
|
||||
v-model="queryParams.code"
|
||||
placeholder="请输入工序代码"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
@change="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="子工序" prop="subName">
|
||||
<el-input
|
||||
v-model="queryParams.subName"
|
||||
placeholder="请输入子工序名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="图案" prop="pattern">
|
||||
</el-form-item> -->
|
||||
<!-- <el-form-item label="图案" prop="pattern">
|
||||
<el-input
|
||||
v-model="queryParams.pattern"
|
||||
placeholder="请输入图案"
|
||||
|
@ -67,7 +77,7 @@
|
|||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
</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>
|
||||
|
@ -196,16 +206,17 @@ export default {
|
|||
selected: [],
|
||||
columns: [
|
||||
{key: 'priceId', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'deptName', 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: 'category', visible: true, label: '类别', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'size', visible: true, label: '大小', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'name', visible: true, label: '工序', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'subName', visible: true, label: '子工序', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'pattern', visible: true, label: '图案', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'spec', visible: true, label: '规格', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'price', visible: false, label: '单价', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'unit', 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},
|
||||
{key: 'deptName', visible: true, label: '部门', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'code', visible: true, label: '代码', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'category', visible: false, label: '类别', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'size', visible: false, label: '大小', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'pattern', visible: false, label: '图案', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'spec', visible: false, label: '规格', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'price', visible: true, label: '单价', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'unit', visible: true, label: '单位', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'classify', visible: true, label: '分类', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||
{key: 'quantity', visible: false, label: '倍数', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
|
||||
{key: 'remark', visible: false, label: '备注', minWidth: null, sortable: true, overflow: true, align: 'center', width: null},
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
:size="size"
|
||||
:disabled="disabled"
|
||||
readonly
|
||||
ref="inputRef"
|
||||
:placeholder="placeholder">
|
||||
<template #suffix><i class="el-icon-arrow-right"/></template>
|
||||
</el-input>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" v-show="showSearch" :inline="true" label-width="100px">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" v-show="showSearch" :inline="true" label-width="6em">
|
||||
<el-form-item label="单据编号" prop="erpBillNo">
|
||||
<el-input
|
||||
v-model="queryParams.erpBillNo"
|
||||
|
@ -9,7 +9,7 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单据状态" prop="erpDocumentStatus">
|
||||
<!-- <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"
|
||||
|
@ -18,18 +18,11 @@
|
|||
: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>
|
||||
<el-radio :label="true">是</el-radio>
|
||||
<el-radio :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="生产车间" prop="deptId">
|
||||
</el-form-item> -->
|
||||
<!-- <el-form-item label="生产车间" prop="deptId">
|
||||
<dept-tree-select v-model="queryParams.deptId" class="small-tree-select" @change="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="业务状态" prop="erpStatusList">
|
||||
</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"
|
||||
|
@ -38,11 +31,11 @@
|
|||
>{{dict.label}}
|
||||
</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<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="materialCategory">
|
||||
<!-- <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">
|
||||
|
@ -56,14 +49,19 @@
|
|||
</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>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="是否返工" prop="erpIsRework">
|
||||
<el-radio-group v-model="queryParams.erpIsRework">
|
||||
<el-radio :label="null">全部</el-radio>
|
||||
<el-radio :label="true">是</el-radio>
|
||||
<el-radio :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row>
|
||||
<el-row style="margin-bottom: 1em">
|
||||
<el-button type="success" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
:size="size"
|
||||
:disabled="disabled"
|
||||
readonly
|
||||
ref="inputRef"
|
||||
:placeholder="placeholder">
|
||||
<template #suffix><i class="el-icon-arrow-right"/></template>
|
||||
</el-input>
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
placeholder="请输入姓名"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
@change="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机" prop="phonenumber">
|
||||
|
@ -18,6 +19,7 @@
|
|||
placeholder="请输入手机号码"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
@change="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<!--版本更新内容:添加prop属性,修复多选-->
|
||||
|
||||
<template>
|
||||
<el-drawer :with-header="false" :visible.sync="visible" size="90%" direction="rtl" append-to-body>
|
||||
<el-drawer :with-header="false" :visible="visible" size="90%" direction="rtl" append-to-body :before-close="close">
|
||||
<div class="drawer-container">
|
||||
<div class="drawer-operator-box">
|
||||
<el-button type="primary" @click="submit()" icon="el-icon-check">确 认 选 择</el-button>
|
||||
|
@ -82,6 +82,11 @@ export default {
|
|||
this.$emit('select', this.$refs.check.selected[0]);
|
||||
}
|
||||
},
|
||||
// 关闭弹窗
|
||||
close(done) {
|
||||
this.$emit('update:show', false);
|
||||
done();
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
:size="size"
|
||||
:disabled="disabled"
|
||||
readonly
|
||||
ref="inputRef"
|
||||
:placeholder="placeholder">
|
||||
<template #suffix><i class="el-icon-arrow-right"/></template>
|
||||
</el-input>
|
||||
|
|
|
@ -130,7 +130,6 @@ export const $businessInput = {
|
|||
// 确定
|
||||
onSubmit(selected){
|
||||
let value = null;
|
||||
console.log('onSubmit', selected);
|
||||
if (this.multiple) {
|
||||
value = selected.map(item => item[this.prop]);
|
||||
} else {
|
||||
|
@ -153,6 +152,9 @@ export const $businessInput = {
|
|||
// 打开对话框
|
||||
openDialog(){
|
||||
if (this.beforeOpen()) {
|
||||
if (this.$refs.inputRef) {
|
||||
this.$refs.inputRef.blur();
|
||||
}
|
||||
this.dialogShow = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<div class="right-menu">
|
||||
<template v-if="device!=='mobile'">
|
||||
<search id="header-search" class="right-menu-item" />
|
||||
<!-- <screenfull id="screenfull" class="right-menu-item hover-effect" />-->
|
||||
<screenfull id="screenfull" class="right-menu-item hover-effect" />
|
||||
|
||||
<!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">-->
|
||||
<!-- <size-select id="size-select" class="right-menu-item hover-effect" />-->
|
||||
|
|
|
@ -73,22 +73,6 @@ export const constantRoutes = [
|
|||
},
|
||||
]
|
||||
},
|
||||
/**
|
||||
* 新增页
|
||||
*/
|
||||
{
|
||||
path: '/add',
|
||||
component: Layout,
|
||||
hidden: true,
|
||||
children: [
|
||||
{
|
||||
path: 'report',
|
||||
component: () => import('@/views/yh/report/edit/edit.vue'),
|
||||
name: 'ReportAdd',
|
||||
meta: { title: '新增报表', noCache: false}
|
||||
},
|
||||
]
|
||||
},
|
||||
/**
|
||||
* 编辑页
|
||||
*/
|
||||
|
@ -98,7 +82,7 @@ export const constantRoutes = [
|
|||
hidden: true,
|
||||
children: [
|
||||
{
|
||||
path: 'report/:reportId',
|
||||
path: 'report/:reportId?',
|
||||
component: () => import('@/views/yh/report/edit/edit.vue'),
|
||||
name: 'ReportEdit',
|
||||
meta: { title: '编辑报表', noCache: false}
|
||||
|
|
|
@ -1,9 +1,20 @@
|
|||
import {notNullDecimal} from "@/utils/index";
|
||||
|
||||
// 计算总价
|
||||
// 计算乘法
|
||||
export function calcMulDecimal(a, b) {
|
||||
if (a == null || b == null) {
|
||||
return 0;
|
||||
}
|
||||
return notNullDecimal(a).mul(notNullDecimal(b)).toNumber();
|
||||
}
|
||||
|
||||
// 计算加法
|
||||
export function calcAddDecimal(a, b) {
|
||||
if (a == null) {
|
||||
a = 0;
|
||||
}
|
||||
if (b == null) {
|
||||
b = 0;
|
||||
}
|
||||
return notNullDecimal(a).add(notNullDecimal(b)).toNumber();
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
<div class="content" v-infinite-scroll="loadList" :infinite-scroll-disabled="loading || noMore">
|
||||
<el-row :gutter="8" >
|
||||
<el-col :md="12" :sm="24" v-for="report of reportList" :key="report.reportId">
|
||||
<el-col :lg="8" :md="12" :sm="24" v-for="report of reportList" :key="report.reportId">
|
||||
<el-card class="card-box">
|
||||
<template #header>
|
||||
<el-row class="card-header">
|
||||
|
@ -45,18 +45,13 @@
|
|||
{{report.deptName}} {{report.reportDate}} 日报表
|
||||
</el-col>
|
||||
<el-col class="card-operator">
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-view"
|
||||
@click="handleView(report)"
|
||||
v-has-permi="['yh:report:query']"
|
||||
>详情</el-button>
|
||||
<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"
|
||||
|
@ -64,6 +59,7 @@
|
|||
@click="handleSubmit(report)"
|
||||
v-has-permi="['yh:report:submit']"
|
||||
v-show="ReportStatus.canSubmit(report.status)"
|
||||
style="padding: 0;"
|
||||
>提交</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
|
@ -72,6 +68,7 @@
|
|||
@click="handleUpdate(report)"
|
||||
v-has-permi="['yh:report:edit']"
|
||||
v-show="ReportStatus.canEdit(report.status)"
|
||||
style="padding: 0;"
|
||||
>编辑</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
|
@ -80,23 +77,26 @@
|
|||
@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>
|
||||
<el-descriptions :column="2" size="small">
|
||||
<el-descriptions-item v-for="column of columns" v-if="column.visible" :key="column.key" :label="column.label">
|
||||
<template v-if="column.key === 'status'">
|
||||
<dict-tag :options="dict.type.report_status" :value="report[column.key]" size="mini"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'totalAmount'">
|
||||
{{report.totalAmount | dv}} 元
|
||||
</template>
|
||||
<template v-else>
|
||||
{{report[column.key] | dv}}
|
||||
</template>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div class="card-content" @click="handleView(report)">
|
||||
<el-descriptions :column="2" size="small">
|
||||
<el-descriptions-item v-for="column of columns" v-if="column.visible" :key="column.key" :label="column.label">
|
||||
<template v-if="column.key === 'status'">
|
||||
<dict-tag :options="dict.type.report_status" :value="report[column.key]" size="mini"/>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'totalAmount'">
|
||||
{{report.totalAmount | dv}} 元
|
||||
</template>
|
||||
<template v-else>
|
||||
{{report[column.key] | dv}}
|
||||
</template>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
@ -114,7 +114,7 @@ import {cancelReport, delReport, listReport, submitReport} from "@/api/yh/report
|
|||
import {ReportStatus} from "@/utils/constants";
|
||||
import DeptTreeSelect from "@/components/Business/Dept/DeptTreeSelect.vue";
|
||||
import DateRangePicker from "@/components/DateRangePicker/index.vue";
|
||||
|
||||
import { checkPermi } from '@/utils/permission';
|
||||
// 默认排序字段
|
||||
const defaultSort = {
|
||||
prop: "createTime",
|
||||
|
@ -147,7 +147,7 @@ export default {
|
|||
{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"},
|
||||
],
|
||||
],
|
||||
// 排序方式
|
||||
orderSorts: ['ascending', 'descending', null],
|
||||
// 遮罩层
|
||||
|
@ -268,11 +268,11 @@ export default {
|
|||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.$router.push("/add/report")
|
||||
this.$tab.closeOpenPage(`/edit/report`)
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.$router.push(`/edit/report/${row.reportId}`)
|
||||
this.$tab.closeOpenPage(`/edit/report/${row.reportId}`)
|
||||
},
|
||||
// 提交报表
|
||||
handleSubmit(row) {
|
||||
|
@ -305,7 +305,9 @@ export default {
|
|||
})
|
||||
},
|
||||
handleView(row) {
|
||||
this.$router.push(`/view/report/${row.reportId}`)
|
||||
if (checkPermi(['yh:report:query'])) {
|
||||
this.$router.push(`/view/report/${row.reportId}`)
|
||||
}
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
|
|
|
@ -14,8 +14,9 @@
|
|||
<el-descriptions-item label="大小">{{detail.size | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工序">{{detail.name | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="子工序">{{detail.subName | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="表面处理">{{detail.surface | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="图案">{{detail.pattern | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="规格">{{detail.pattern | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="规格">{{detail.spec | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="单价">{{detail.price | dv}} 元</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">{{detail.unit | dv}}</el-descriptions-item>
|
||||
<el-descriptions-item label="分类">{{detail.classify | dv}}</el-descriptions-item>
|
||||
|
|
|
@ -302,6 +302,9 @@
|
|||
<form-col :span="span" label="子工序" prop="subName">
|
||||
<el-input v-model="form.subName" placeholder="请输入子工序名称" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="表面处理" prop="surface">
|
||||
<el-input v-model="form.surface" placeholder="请输入表面处理" />
|
||||
</form-col>
|
||||
<form-col :span="span" label="图案" prop="pattern">
|
||||
<el-input v-model="form.pattern" placeholder="请输入图案" />
|
||||
</form-col>
|
||||
|
|
|
@ -1,142 +1,112 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-row class="edit-table-operate">
|
||||
<el-button size="small" plain icon="el-icon-plus" type="success" @click="showPriceDialog = true" >选择工序</el-button>
|
||||
<el-button size="small" plain icon="el-icon-edit" @click="handleBatchUserProduct">批量编辑员工产量</el-button>
|
||||
<el-row class="edit-table-operate-right">
|
||||
</el-row>
|
||||
<div >
|
||||
<el-row class="row-operate">
|
||||
<el-checkbox
|
||||
v-model="isAllSelected"
|
||||
@change="handleSelectAll"
|
||||
style="margin-right: 16px"
|
||||
>全选</el-checkbox>
|
||||
<div class="right-operator">
|
||||
<el-button size="small" plain icon="el-icon-plus" type="success" @click="showPriceDialog = true" >选择工序</el-button>
|
||||
<el-button size="small" plain icon="el-icon-edit" @click="handleBatchUserProduct">批量编辑员工产量</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
:data="value"
|
||||
size="mini"
|
||||
stripe
|
||||
:header-cell-style="headerCellStyle"
|
||||
@selection-change="onSelectionChange"
|
||||
class="mini-table"
|
||||
>
|
||||
<el-table-column type="selection" align="center"/>
|
||||
<el-table-column label="工序" align="center" prop="priceName">
|
||||
<template #header>
|
||||
<span class="required-label">工序</span>
|
||||
</template>
|
||||
<template scope="d">
|
||||
<form-col table label-width="0" :prop="getProp(d.$index, 'priceId')" :rules="rules.priceId">
|
||||
<hover-show :show-value="d.row.priceName">
|
||||
<price-input
|
||||
v-model="d.row.priceId"
|
||||
@change="(val) => {onChangePrice(d.row, val)}"
|
||||
:query="priceQuery"
|
||||
placeholder="点击选择工序"
|
||||
title="选择工序"
|
||||
open-type="drawer"
|
||||
/>
|
||||
</hover-show>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工序类型" align="center" width="100">
|
||||
<template scope="d">
|
||||
<form-col table label-width="0" :prop="getProp(d.$index, 'priceType')" :rules="rules.priceType">
|
||||
<hover-show>
|
||||
<template #show>
|
||||
<dict-tag :options="dict.type.price_type" :value="d.row.priceType" size="small"/>
|
||||
</template>
|
||||
<el-select v-model="d.row.priceType">
|
||||
<el-option v-for="(item, index) in dict.type.price_type" :key="index" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</hover-show>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="num">
|
||||
<template #header>
|
||||
<span class="required-label">良品数</span>
|
||||
</template>
|
||||
<template scope="d">
|
||||
<form-col table label-width="0" :prop="getProp(d.$index, 'num')" :rules="rules.num">
|
||||
<hover-show>
|
||||
<template #show>
|
||||
{{d.row.num | dv}} {{d.row.priceUnit}}
|
||||
</template>
|
||||
<el-input v-model.number="d.row.num" type="number" :min="0" placeholder="请输入良品数量">
|
||||
<template #suffix>
|
||||
{{d.row.priceUnit}}
|
||||
</template>
|
||||
</el-input>
|
||||
</hover-show>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="defectNum">
|
||||
<template #header>
|
||||
<span class="required-label">不良品数</span>
|
||||
</template>
|
||||
<template scope="d">
|
||||
<form-col table label-width="0" :prop="getProp(d.$index, 'defectNum')" :rules="rules.defectNum">
|
||||
<hover-show>
|
||||
<template #show>
|
||||
{{d.row.defectNum | dv}} {{d.row.priceUnit}}
|
||||
</template>
|
||||
<el-input v-model.number="d.row.defectNum" type="number" :min="0" placeholder="请输入不良品数量">
|
||||
<template #suffix>
|
||||
{{d.row.priceUnit}}
|
||||
</template>
|
||||
</el-input>
|
||||
</hover-show>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单价" align="center" prop="pricePrice" width="80">
|
||||
<template scope="d">
|
||||
<form-col table label-width="0">
|
||||
{{d.row.pricePrice | dv}} 元
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="总价" align="center" width="80">
|
||||
<template scope="d">
|
||||
<form-col table label-width="0">
|
||||
{{ totalPrice(d.row) | dv }} 元
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="明细信息" align="center" width="200">
|
||||
<template scope="d">
|
||||
<el-tag type="primary" size="mini" class="more-row" v-for="(userProd, index) of d.row.userProdList" @click="handleShowMore(d.row, d.$index)">
|
||||
{{userProd.userName | dv}} {{userProd.num | dv}} {{d.row.priceUnit}}
|
||||
</el-tag>
|
||||
<el-tag type="success" size="mini" v-for="(order, index) of d.row.orderProdList" @click="handleShowMore(d.row, d.$index)">
|
||||
{{order.orderErpBillNo}} {{order.num}} {{d.row.priceUnit}}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<div class="process-grid" v-if="!isEmpty(value)">
|
||||
<div v-for="(item, index) in value"
|
||||
:key="index"
|
||||
class="process-card"
|
||||
:class="{'editing': editingIndex === index }"
|
||||
@click.stop="handleShowMore(item, index)">
|
||||
<div class="card-header" @click.stop="toggleCheckbox($event, item)">
|
||||
<div class="process-name">
|
||||
<el-checkbox
|
||||
:value="selection.includes(item)"
|
||||
@change="(val) => handleSelect(item, val)"
|
||||
@click.stop
|
||||
/>
|
||||
<span class="index">#{{index + 1}}</span>
|
||||
<span class="name">{{item.priceName}}</span>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="process-type">
|
||||
<dict-tag :options="dict.type.price_type" :value="item.priceType" size="small"/>
|
||||
</div>
|
||||
<i class="el-icon-delete delete-icon"
|
||||
@click.stop="handleDel(item, index)"
|
||||
title="删除工序"
|
||||
></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table-column width="120" align="center" label="操作">
|
||||
<template slot-scope="d">
|
||||
<el-button type="text" size="mini" @click="handleShowMore(d.row, d.$index)" icon="el-icon-edit">编辑</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
@click="handleDel(d.row, d.$index)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="card-body">
|
||||
<!-- 规格信息行 -->
|
||||
<div class="spec-row">
|
||||
<div class="metric-item">
|
||||
<span class="label">{{item.priceCode | dv}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数据指标网格 -->
|
||||
<div class="metrics-grid">
|
||||
<div class="metric-item">
|
||||
<span class="label">良品数</span>
|
||||
<div class="value-unit">
|
||||
<span class="value">{{item.num || 0}}</span>
|
||||
<span class="unit">{{item.priceUnit}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="metric-item">
|
||||
<span class="label">不良品</span>
|
||||
<div class="value-unit">
|
||||
<span class="value">{{item.defectNum || 0}}</span>
|
||||
<span class="unit">{{item.priceUnit}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="metric-item">
|
||||
<span class="label">单价</span>
|
||||
<div class="value-unit">
|
||||
<span class="value">{{item.pricePrice || 0}}</span>
|
||||
<span class="unit">元</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="metric-item">
|
||||
<span class="label">总价</span>
|
||||
<div class="value-unit">
|
||||
<span class="value highlight">{{item.totalAmount | dv}}</span>
|
||||
<span class="unit">元</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--编辑明细-->
|
||||
<report-product-row-edit
|
||||
:row="row"
|
||||
:visible.sync="showMore"
|
||||
:rules="rules"
|
||||
:user-query="userQuery"
|
||||
:price-query="priceQuery"
|
||||
@submit="onSubmitRow"
|
||||
/>
|
||||
<div class="detail-section" v-if="item.userProdList && item.userProdList.length">
|
||||
<div class="staff-list">
|
||||
<div v-for="user in item.userProdList"
|
||||
:key="user.userId"
|
||||
class="staff-item"
|
||||
@click.stop="handleShowMore(item, index)">
|
||||
{{user.userName}}
|
||||
<span class="staff-num">{{user.num}}{{item.priceUnit}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section" v-if="item.orderProdList && item.orderProdList.length">
|
||||
<div class="order-list">
|
||||
<div v-for="order in item.orderProdList"
|
||||
:key="order.orderId"
|
||||
class="order-item"
|
||||
@click.stop="handleShowMore(item, index)">
|
||||
{{order.orderErpBillNo}}
|
||||
<span class="order-num">{{order.num}}{{item.priceUnit}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-empty v-else description="暂无工序,请添加" />
|
||||
|
||||
<!--工序选择-->
|
||||
<price-drawer
|
||||
multiple
|
||||
:show.sync="showPriceDialog"
|
||||
|
@ -144,7 +114,6 @@
|
|||
@select="onSelectPrices"
|
||||
/>
|
||||
|
||||
<!--批量修改用户产量-->
|
||||
<user-product-batch-dialog
|
||||
:show.sync="showUserProductBatchDialog"
|
||||
@submit="onSubmitUserProductBatch"
|
||||
|
@ -170,6 +139,7 @@ import Dict from "@/views/system/dict/index.vue";
|
|||
import HoverShow from "@/components/HoverShow/index.vue";
|
||||
import ReportProductRowEdit from "@/views/yh/report/edit/components/ReportProductRowEdit.vue";
|
||||
import PriceDrawer from "@/components/Business/Price/PriceDrawer.vue";
|
||||
import {calcTotalAmount} from "@/views/yh/report/utils";
|
||||
|
||||
export default {
|
||||
name: "ReportProductEdit",
|
||||
|
@ -254,20 +224,31 @@ export default {
|
|||
showPriceDialog: false,
|
||||
showUserProductBatchDialog: false,
|
||||
showMore: false,
|
||||
editingIndex: -1, // 当前正在编辑的工序索引
|
||||
isAllSelected: false,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
// 监听选中项变化,更新全选状态
|
||||
selection: {
|
||||
handler(val) {
|
||||
this.isAllSelected = val.length === this.value.length && this.value.length > 0;
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
||||
},
|
||||
methods: {
|
||||
isEmpty,
|
||||
onSubmitRow(data) {
|
||||
console.log("onSubmitRow", data)
|
||||
this.value.splice(this.index, 1, data);
|
||||
},
|
||||
handleShowMore(row, index) {
|
||||
this.row = row;
|
||||
this.index = index;
|
||||
this.showMore = true;
|
||||
this.editingIndex = index;
|
||||
this.$emit('edit', row, index);
|
||||
},
|
||||
// 添加一行
|
||||
addRow(data) {
|
||||
|
@ -278,6 +259,8 @@ export default {
|
|||
pricePrice: null,
|
||||
priceType: '1',
|
||||
num: null,
|
||||
defectNum: null,
|
||||
totalAmount: 0,
|
||||
orderProdList: [],
|
||||
userProdList: [],
|
||||
...data
|
||||
|
@ -308,23 +291,9 @@ export default {
|
|||
priceClassify: price.classify,
|
||||
priceQuantityNumerator: price.quantityNumerator,
|
||||
priceQuantityDenominator: price.quantityDenominator,
|
||||
priceCode: price.code,
|
||||
}
|
||||
},
|
||||
// 工序修改后操作
|
||||
onChangePrice(row, price) {
|
||||
row.priceId = price.priceId;
|
||||
row.priceCategory = price.category;
|
||||
row.priceSize = price.size;
|
||||
row.priceName = price.name;
|
||||
row.priceSubName = price.subName;
|
||||
row.pricePattern = price.pattern;
|
||||
row.priceSpec = price.spec;
|
||||
row.pricePrice = price.price;
|
||||
row.priceUnit = price.unit;
|
||||
row.priceClassify = price.classify;
|
||||
row.priceQuantityNumerator = price.quantityNumerator;
|
||||
row.priceQuantityDenominator = price.quantityDenominator;
|
||||
},
|
||||
// 表格选择项发生变化后
|
||||
onSelectionChange(selection) {
|
||||
this.selection = selection;
|
||||
|
@ -405,14 +374,249 @@ export default {
|
|||
})
|
||||
this.$message.success("批量编辑成功");
|
||||
}
|
||||
|
||||
// 计算总价
|
||||
this.selection.forEach(row => {
|
||||
row.totalAmount = calcTotalAmount(row);
|
||||
})
|
||||
|
||||
this.showUserProductBatchDialog = false;
|
||||
}
|
||||
},
|
||||
toggleSelection(item) {
|
||||
const index = this.selection.indexOf(item);
|
||||
if (index === -1) {
|
||||
this.selection.push(item);
|
||||
} else {
|
||||
this.selection.splice(index, 1);
|
||||
}
|
||||
},
|
||||
// 处理全选/取消全选
|
||||
handleSelectAll(checked) {
|
||||
this.value.forEach(item => {
|
||||
this.handleSelect(item, checked);
|
||||
});
|
||||
},
|
||||
|
||||
// 处理单个选择
|
||||
handleSelect(item, checked) {
|
||||
if (checked && !this.selection.includes(item)) {
|
||||
this.selection.push(item);
|
||||
} else if (!checked) {
|
||||
const index = this.selection.indexOf(item);
|
||||
if (index !== -1) {
|
||||
this.selection.splice(index, 1);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 点击卡片头部时触发复选框
|
||||
toggleCheckbox(event, item) {
|
||||
// 如果点击的是复选框本身,不需要处理
|
||||
if (event.target.className.includes('el-checkbox')) {
|
||||
return;
|
||||
}
|
||||
item.selected = !item.selected;
|
||||
this.handleSelect(item, item.selected);
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.mini-table {
|
||||
font-size: 12px !important;
|
||||
}
|
||||
|
||||
.process-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.process-card {
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||
transition: all 0.2s;
|
||||
border: 1px solid #ebeef5;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 2px 12px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
&.editing {
|
||||
border-color: #409EFF;
|
||||
background-color: #ecf5ff;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 12px;
|
||||
border-bottom: 1px solid #ebeef5;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
&:hover {
|
||||
background-color: #f5f7fa;
|
||||
}
|
||||
|
||||
.process-name {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
flex: 1;
|
||||
|
||||
.index {
|
||||
color: #909399;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-weight: 500;
|
||||
color: #303133;
|
||||
margin-right: auto;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.el-checkbox {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.header-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
|
||||
.process-type {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.delete-icon {
|
||||
color: #909399;
|
||||
cursor: pointer;
|
||||
padding: 4px;
|
||||
font-size: 16px;
|
||||
border-radius: 4px;
|
||||
transition: all 0.2s;
|
||||
|
||||
&:hover {
|
||||
color: #f56c6c;
|
||||
background-color: rgba(245, 108, 108, 0.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card-body {
|
||||
padding: 12px;
|
||||
|
||||
.spec-row {
|
||||
padding-bottom: 8px;
|
||||
|
||||
.metric-item {
|
||||
.label {
|
||||
font-size: 13px;
|
||||
color: #606266;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.metrics-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 12px;
|
||||
margin-bottom: 12px;
|
||||
|
||||
.metric-item {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: baseline;
|
||||
justify-content: space-between;
|
||||
|
||||
.label {
|
||||
font-size: 12px;
|
||||
color: #909399;
|
||||
}
|
||||
|
||||
.value-unit {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
.value {
|
||||
font-size: 16px;
|
||||
color: #303133;
|
||||
|
||||
&.highlight {
|
||||
color: #409EFF;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.unit {
|
||||
font-size: 12px;
|
||||
color: #909399;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.detail-section {
|
||||
margin-top: 8px;
|
||||
|
||||
.staff-list, .order-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
|
||||
.staff-item, .order-item {
|
||||
background: #f5f7fa;
|
||||
padding: 4px 8px;
|
||||
border-radius: 4px;
|
||||
font-size: 12px;
|
||||
color: #606266;
|
||||
|
||||
.staff-num, .order-num {
|
||||
color: #909399;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: #ecf5ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 平板适配
|
||||
@media screen and (max-width: 768px) {
|
||||
.process-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
.row-operate {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0;
|
||||
margin-bottom: 8px;
|
||||
.right-operator {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-table :data="value" style="margin-left: 16px; width: calc(100% - 16px)" size="mini">
|
||||
<el-table-column label="订单" align="center" min-width="180">
|
||||
<div class="order-prod-list">
|
||||
<el-table :data="value" size="mini">
|
||||
<el-table-column label="订单" align="center">
|
||||
<template slot-scope="d">
|
||||
<form-col table label-width="0" :prop="`orderProdList[${d.$index}].orderId`" :rules="rules.orderId">
|
||||
<prod-order-input v-model="d.row.orderId" @change="(val) => onChangeProdOrder(d.row, val)" :query="orderQuery"/>
|
||||
<prod-order-input v-model="d.row.orderId" @change="(val) => onChangeProdOrder(d.row, val)" :query="orderQuery" open-type="drawer"/>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="`产量 (${priceUnit})`" align="center" min-width="180" >
|
||||
<el-table-column :label="`产量 (${priceUnit})`" align="center" >
|
||||
<template slot-scope="d">
|
||||
<form-col table label-width="0" :prop="`orderProdList[${d.$index}].num`" :rules="rules.num">
|
||||
<el-input-number v-model="d.row.num" type="number" :min="0" placeholder="请输入订单产量" controls-position="right" style="width: 100%"/>
|
||||
|
@ -20,12 +20,12 @@
|
|||
<!-- {{d.row.unitName | dv}}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="计划数量" align="center">
|
||||
<!-- <el-table-column label="计划数量" align="center">
|
||||
<template slot-scope="d">
|
||||
{{d.row.orderErpQty | dv}}
|
||||
<template v-if="!isEmpty(d.row.unitName)"> {{d.row.unitName}}</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
<!-- <el-table-column label="已审核数量" align="center">-->
|
||||
<!-- <template slot-scope="d">-->
|
||||
<!-- {{d.row.verifyBaseNum | dv}}-->
|
||||
|
@ -40,12 +40,11 @@
|
|||
<el-table-column align="center" width="100">
|
||||
<template #header>
|
||||
<el-button
|
||||
type="success"
|
||||
type="text"
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="showProdOrderDialog = true"
|
||||
plain
|
||||
>关联
|
||||
>添加关联
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="d">
|
||||
|
@ -192,3 +191,9 @@ export default {
|
|||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.order-prod-list {
|
||||
border: 1px solid #e6e6e6;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,58 +1,60 @@
|
|||
<template>
|
||||
<el-drawer :visible.sync="showMore" :with-header="false" size="90%" @open="onOpen" :before-close="beforeClose">
|
||||
<div class="drawer-container">
|
||||
<div class="drawer-operator-box">
|
||||
<el-button @click="cancel" icon="el-icon-close">取 消</el-button>
|
||||
<el-button type="primary" @click="onSubmit" icon="el-icon-check">保 存</el-button>
|
||||
</div>
|
||||
<div class="drawer-content">
|
||||
<el-form :model="form" :rules="rules" ref="form" label-width="6em">
|
||||
<el-row>
|
||||
<form-col :span="span" label="工序" prop="priceId">
|
||||
<price-input v-model="form.priceId" :query="priceQuery" open-type="dialog" @change="onChangePrice" placeholder="点击选择工序" title="选择工序"/>
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序类型" prop="priceType">
|
||||
<el-select v-model="form.priceType" style="width: 100%">
|
||||
<el-option v-for="(item, index) in dict.type.price_type" :key="index" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</form-col>
|
||||
<form-col :span="span" label="良品数" prop="num">
|
||||
<el-input-number v-model="form.num" type="number" :min="0" placeholder="请输入良品数" controls-position="right" style="width: calc(100% - 2em)"/>
|
||||
{{form.priceUnit}}
|
||||
</form-col>
|
||||
<form-col :span="span" label="不良品数" prop="defectNum">
|
||||
<el-input-number v-model="form.defectNum" type="number" :min="0" placeholder="请输入不良品数" controls-position="right" style="width: calc(100% - 2em)"/>
|
||||
{{form.priceUnit}}
|
||||
</form-col>
|
||||
<form-col :span="span" label="单价">
|
||||
{{form.pricePrice | dv}} 元
|
||||
</form-col>
|
||||
<form-col :span="span" label="总价">
|
||||
{{ calcMulDecimal(form.pricePrice, form.num) | dv }} 元
|
||||
</form-col>
|
||||
</el-row>
|
||||
<div class="drawer-container" v-if="showMore">
|
||||
<!-- <div class="drawer-operator-box">
|
||||
<el-button @click="cancel" icon="el-icon-close">取 消</el-button>
|
||||
<el-button type="primary" @click="onSubmit" icon="el-icon-check">保 存</el-button>
|
||||
</div> -->
|
||||
<div class="drawer-content">
|
||||
<div class="edit-title">工序信息</div>
|
||||
<el-form :model="row" :rules="rules" ref="form" label-width="5em">
|
||||
<el-row>
|
||||
<form-col :span="span * 2" label="工序" prop="priceId">
|
||||
<price-input v-model="row.priceId" :query="priceQuery" open-type="drawer" @change="onChangePrice" placeholder="点击选择工序" title="选择工序"/>
|
||||
</form-col>
|
||||
<form-col :span="span" label="代码">
|
||||
{{row.priceCode | dv}}
|
||||
</form-col>
|
||||
<form-col :span="span" label="工序类型" prop="priceType">
|
||||
<el-radio-group v-model="row.priceType">
|
||||
<el-radio v-for="(item, index) in dict.type.price_type" :key="index" :label="item.value">{{item.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</form-col>
|
||||
<form-col :span="span" label="单价">
|
||||
{{row.pricePrice | dv}} 元
|
||||
</form-col>
|
||||
<form-col :span="span" label="总价">
|
||||
{{ row.totalAmount | dv }} 元
|
||||
</form-col>
|
||||
<form-col :span="span" label="良品" prop="num">
|
||||
<el-input-number v-model="row.num" type="number" :min="0" placeholder="请输入良品数" controls-position="right" style="width: calc(100% - 2em)" @change="calcTotalAmount"/>
|
||||
{{row.priceUnit}}
|
||||
</form-col>
|
||||
<form-col :span="span" label="不良品" prop="defectNum">
|
||||
<el-input-number v-model="row.defectNum" type="number" :min="0" placeholder="请输入不良品数" controls-position="right" style="width: calc(100% - 2em)" @change="calcTotalAmount"/>
|
||||
{{row.priceUnit}}
|
||||
</form-col>
|
||||
</el-row>
|
||||
|
||||
<div class="edit-title">员工产量</div>
|
||||
<report-product-user-list-edit
|
||||
v-model="form.userProdList"
|
||||
:price="form.pricePrice"
|
||||
:price-unit="form.priceUnit"
|
||||
:rules="rules.userProdList"
|
||||
:user-query="userQuery"
|
||||
/>
|
||||
<div class="edit-title">员工产量</div>
|
||||
<report-product-user-list-edit
|
||||
v-model="row.userProdList"
|
||||
:price="row.pricePrice"
|
||||
:price-unit="row.priceUnit"
|
||||
:rules="rules.userProdList"
|
||||
:user-query="userQuery"
|
||||
/>
|
||||
|
||||
<div class="edit-title">关联订单</div>
|
||||
<report-product-order-list-edit
|
||||
v-model="form.orderProdList"
|
||||
:quantity="form.priceQuantityNumerator / form.priceQuantityDenominator"
|
||||
:price-unit="form.priceUnit"
|
||||
:rules="rules.orderProdList"
|
||||
:report-prod="form"
|
||||
/>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="edit-title">关联订单</div>
|
||||
<report-product-order-list-edit
|
||||
v-model="row.orderProdList"
|
||||
:quantity="row.priceQuantityNumerator / row.priceQuantityDenominator"
|
||||
:price-unit="row.priceUnit"
|
||||
:rules="rules.orderProdList"
|
||||
:report-prod="row"
|
||||
/>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
@ -60,10 +62,9 @@ import ReportProductOrderListEdit from "@/views/yh/report/edit/components/Report
|
|||
import ReportProductUserListEdit from "@/views/yh/report/edit/components/ReportProductUserListEdit.vue";
|
||||
import FormCol from "@/components/FormCol/index.vue";
|
||||
import PriceInput from "@/components/Business/Price/PriceInput.vue";
|
||||
import {calcMulDecimal} from "@/utils/money";
|
||||
import {deepClone, isEmpty} from "@/utils";
|
||||
import {calcTotalAmount} from "@/views/yh/report/utils";
|
||||
import {isEmpty} from "@/utils";
|
||||
import {$reportCheck} from "@/views/yh/report/mixins";
|
||||
|
||||
export default {
|
||||
name: "ReportProductRowEdit",
|
||||
mixins: [$reportCheck],
|
||||
|
@ -118,9 +119,11 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
onOpen() {
|
||||
this.form = deepClone(this.row);
|
||||
// 计算总价
|
||||
calcTotalAmount() {
|
||||
this.row.totalAmount = calcTotalAmount(this.row);
|
||||
},
|
||||
isEmpty,
|
||||
beforeClose(done) {
|
||||
this.$confirm('确认取消编辑当前工序?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
|
@ -130,12 +133,11 @@ export default {
|
|||
done();
|
||||
})
|
||||
},
|
||||
calcMulDecimal,
|
||||
onSubmit() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (valid) {
|
||||
// 校验产量是否一致
|
||||
let error = this.preCheckProd(this.form);
|
||||
let error = this.preCheckProd(this.row);
|
||||
if (!isEmpty(error)) {
|
||||
this.$message.warning(error);
|
||||
return;
|
||||
|
@ -146,7 +148,7 @@ export default {
|
|||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$emit('submit', this.form);
|
||||
this.$emit('submit', this.row);
|
||||
this.showMore = false;
|
||||
})
|
||||
} else {
|
||||
|
@ -165,19 +167,28 @@ export default {
|
|||
},
|
||||
// 工序修改后操作
|
||||
onChangePrice(price) {
|
||||
this.form.priceId = price.priceId;
|
||||
this.form.priceCategory = price.category;
|
||||
this.form.priceSize = price.size;
|
||||
this.form.priceName = price.name;
|
||||
this.form.priceSubName = price.subName;
|
||||
this.form.pricePattern = price.pattern;
|
||||
this.form.priceSpec = price.spec;
|
||||
this.form.pricePrice = price.price;
|
||||
this.form.priceUnit = price.unit;
|
||||
this.form.priceClassify = price.classify;
|
||||
this.form.priceQuantityNumerator = price.quantityNumerator;
|
||||
this.form.priceQuantityDenominator = price.quantityDenominator;
|
||||
this.row.priceId = price.priceId;
|
||||
this.row.priceCategory = price.category;
|
||||
this.row.priceSize = price.size;
|
||||
this.row.priceName = price.name;
|
||||
this.row.priceSubName = price.subName;
|
||||
this.row.pricePattern = price.pattern;
|
||||
this.row.priceSpec = price.spec;
|
||||
this.row.pricePrice = price.price;
|
||||
this.row.priceUnit = price.unit;
|
||||
this.row.priceClassify = price.classify;
|
||||
this.row.priceQuantityNumerator = price.quantityNumerator;
|
||||
this.row.priceQuantityDenominator = price.quantityDenominator;
|
||||
this.row.priceCode = price.code;
|
||||
this.calcTotalAmount();
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.drawer-container {
|
||||
background-color: #fefefe;
|
||||
padding: 1em;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-table :data="value" style="margin-left: 16px; width: calc(100% - 16px)" size="mini">
|
||||
<div class="user-prod-list">
|
||||
<el-table :data="value" size="mini">
|
||||
<el-table-column label="员工" align="center">
|
||||
<template slot-scope="d">
|
||||
<form-col table label-width="0" :prop="`userProdList[${d.$index}].userId`" :rules="rules.userId">
|
||||
<user-input v-model="d.row.userId" open-type="dialog" :list-api="listUserWithShift" :query="userQueryParams"/>
|
||||
<user-input v-model="d.row.userId" open-type="drawer" :list-api="listUserWithShift" :query="userQueryParams"/>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -15,7 +15,7 @@
|
|||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工资" align="center" width="100">
|
||||
<el-table-column label="工资" align="center" width="120">
|
||||
<template slot-scope="d">
|
||||
{{ userIncome(d.row.num)}} 元
|
||||
</template>
|
||||
|
@ -23,12 +23,11 @@
|
|||
<el-table-column align="center" width="100">
|
||||
<template #header>
|
||||
<el-button
|
||||
type="success"
|
||||
type="text"
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAddUserProduct"
|
||||
plain
|
||||
>添加
|
||||
>添加员工
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="d">
|
||||
|
@ -155,5 +154,8 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
|
||||
.user-prod-list {
|
||||
border-radius: 4px;
|
||||
border: 1px solid #e6e6e6;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,67 +1,76 @@
|
|||
<template>
|
||||
<el-dialog :visible.sync="visible" title="批量编辑员工产量" close-on-click-modal width="800px">
|
||||
<el-form :model="form" size="mini" :rules="rules" ref="form">
|
||||
<el-row>
|
||||
<form-col :span="24" label="工资模式">
|
||||
<el-radio-group v-model="form.mode">
|
||||
<el-radio-button :label="IncomeMode.COUNT">产量</el-radio-button>
|
||||
<el-radio-button :label="IncomeMode.SCORE">计分</el-radio-button>
|
||||
</el-radio-group>
|
||||
<div v-show="form.mode === IncomeMode.SCORE" style="color: red; ">
|
||||
请注意!计分模式下,需要提前输入选中行的 <strong>总产量</strong> ,否则无法计算员工产量!
|
||||
</div>
|
||||
</form-col>
|
||||
<form-col :span="24" label="更新工序总产量" label-width="8em" v-if="form.mode === IncomeMode.COUNT">
|
||||
<el-switch v-model="form.updateTotal" active-text="开启" inactive-text="关闭"/>
|
||||
<div style="color: red; " v-show="form.updateTotal">
|
||||
请注意!开启之后,将会根据员工产量汇总并覆盖原有的工序总产量。
|
||||
</div>
|
||||
</form-col>
|
||||
</el-row>
|
||||
<el-row class="edit-table-operate">
|
||||
<el-button type="primary" plain @click="handleAdd" icon="el-icon-plus" size="mini">添加员工</el-button>
|
||||
</el-row>
|
||||
<el-table :data="form.list" border size="mini">
|
||||
<el-table-column label="序号" type="index" width="50" align="center"/>
|
||||
<el-table-column label="员工" align="center">
|
||||
<template #header>
|
||||
<span class="required-label">
|
||||
员工
|
||||
</span>
|
||||
</template>
|
||||
<template slot-scope="d">
|
||||
<form-col table label-width="0">
|
||||
<user-input v-model="d.row.userId" :list-api="listUserWithShift" :query="userQueryParams"/>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center">
|
||||
<template #header>
|
||||
<span class="required-label" v-if="form.mode === IncomeMode.COUNT">
|
||||
良品数
|
||||
</span>
|
||||
<span class="required-label" v-if="form.mode === IncomeMode.SCORE">
|
||||
分数
|
||||
</span>
|
||||
</template>
|
||||
<template slot-scope="d">
|
||||
<form-col table label-width="0" v-if="form.mode === IncomeMode.COUNT" :prop="`list[${d.$index}].num`" :rules="rules.list.num">
|
||||
<el-input-number v-model="d.row.num" type="number" placeholder="请输入员工产量" :min="1" controls-position="right" style="width: 100%"/>
|
||||
</form-col>
|
||||
<form-col table label-width="0" v-if="form.mode === IncomeMode.SCORE" :prop="`list[${d.$index}].score`" :rules="rules.list.score">
|
||||
<el-input-number v-model="d.row.score" type="number" placeholder="请输入员工分数" :min="0" controls-position="right" style="width: 100%"/>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="100">
|
||||
<template slot-scope="d">
|
||||
<el-button type="danger" plain size="mini" icon="el-icon-delete" @click="handleDel(d.$index)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-drawer :visible.sync="visible" append-to-body title="批量编辑员工产量" size="800px">
|
||||
<el-row style="padding: 16px;">
|
||||
<el-form :model="form" :rules="rules" ref="form">
|
||||
<el-row>
|
||||
<form-col :span="24" label="工资模式">
|
||||
<el-radio-group v-model="form.mode">
|
||||
<el-radio-button :label="IncomeMode.COUNT">产量</el-radio-button>
|
||||
<el-radio-button :label="IncomeMode.SCORE">计分</el-radio-button>
|
||||
</el-radio-group>
|
||||
<div v-show="form.mode === IncomeMode.SCORE" style="color: red; ">
|
||||
请注意!计分模式下,需要提前输入选中行的 <strong>总产量</strong> ,否则无法计算员工产量!
|
||||
</div>
|
||||
</form-col>
|
||||
<form-col :span="24" label="更新工序总产量" label-width="8em" v-if="form.mode === IncomeMode.COUNT">
|
||||
<el-switch v-model="form.updateTotal" active-text="开启" inactive-text="关闭"/>
|
||||
<div style="color: red; " v-show="form.updateTotal">
|
||||
请注意!开启之后,将会根据员工产量汇总并覆盖原有的工序总产量。
|
||||
</div>
|
||||
</form-col>
|
||||
</el-row>
|
||||
<!-- <el-row class="edit-table-operate">
|
||||
<el-button type="primary" plain @click="handleAdd" icon="el-icon-plus" size="mini">添加员工</el-button>
|
||||
</el-row> -->
|
||||
<el-table :data="form.list" border size="mini">
|
||||
<el-table-column label="序号" type="index" width="50" align="center"/>
|
||||
<el-table-column label="员工" align="center">
|
||||
<template #header>
|
||||
<span class="required-label">
|
||||
员工
|
||||
</span>
|
||||
</template>
|
||||
<template slot-scope="d">
|
||||
<form-col table label-width="0">
|
||||
<user-input v-model="d.row.userId" :list-api="listUserWithShift" :query="userQueryParams" open-type="drawer" />
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center">
|
||||
<template #header>
|
||||
<span class="required-label" v-if="form.mode === IncomeMode.COUNT">
|
||||
良品数
|
||||
</span>
|
||||
<span class="required-label" v-if="form.mode === IncomeMode.SCORE">
|
||||
分数
|
||||
</span>
|
||||
</template>
|
||||
<template slot-scope="d">
|
||||
<form-col table label-width="0" v-if="form.mode === IncomeMode.COUNT" :prop="`list[${d.$index}].num`" :rules="rules.list.num">
|
||||
<el-input-number v-model="d.row.num" type="number" placeholder="请输入员工产量" :min="1" controls-position="right" style="width: 100%"/>
|
||||
</form-col>
|
||||
<form-col table label-width="0" v-if="form.mode === IncomeMode.SCORE" :prop="`list[${d.$index}].score`" :rules="rules.list.score">
|
||||
<el-input-number v-model="d.row.score" type="number" placeholder="请输入员工分数" :min="0" controls-position="right" style="width: 100%"/>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="100">
|
||||
<template #header>
|
||||
<el-button type="text" @click="handleAdd" icon="el-icon-plus" >添加员工</el-button>
|
||||
</template>
|
||||
<template slot-scope="d">
|
||||
<el-button type="text" size="mini" icon="el-icon-delete" @click="handleDel(d.$index)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<el-row type="flex" justify="end" style="padding: 16px;">
|
||||
<el-button @click="visible = false" icon="el-icon-close">取 消</el-button>
|
||||
<el-button type="primary" @click="onSubmit()" icon="el-icon-check">确 定</el-button>
|
||||
</el-row>
|
||||
|
||||
<user-dialog
|
||||
<user-drawer
|
||||
:show.sync="showUserDialog"
|
||||
multiple
|
||||
:query="userQueryParams"
|
||||
|
@ -69,24 +78,19 @@
|
|||
@select="onSelectUsers"
|
||||
/>
|
||||
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="onSubmit()">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</el-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import FormCol from "@/components/FormCol/index.vue";
|
||||
import UserInput from "@/components/Business/User/UserInput.vue";
|
||||
import UserDialog from "@/components/Business/User/UserDialog.vue";
|
||||
import {IncomeMode} from "@/utils/constants";
|
||||
import UserDrawer from "@/components/Business/User/UserDrawer.vue";
|
||||
import {listUserWithShift} from "@/api/system/user";
|
||||
|
||||
export default {
|
||||
name: "UserProductBatchDialog",
|
||||
components: {UserDrawer, UserDialog, UserInput, FormCol},
|
||||
components: {UserDrawer, UserInput, FormCol},
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
|
|
|
@ -1,45 +1,60 @@
|
|||
<template>
|
||||
<div class="report-edit-container" v-loading="loading">
|
||||
<edit-header :title="title">
|
||||
<edit-header class="edit-header" :title="title">
|
||||
<el-button plain @click="cancel" icon="el-icon-close" size="small">取消</el-button>
|
||||
<el-button type="primary" plain @click="submitForm(false)" icon="el-icon-check" size="small">仅保存</el-button>
|
||||
<el-button type="primary" @click="submitForm(true)" icon="el-icon-s-check" size="small">保存并提交</el-button>
|
||||
</edit-header>
|
||||
|
||||
<div class="app-container" style="padding-bottom: 64px">
|
||||
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="6em">
|
||||
<div class="edit-title">基础信息</div>
|
||||
<el-row :gutter="gutter">
|
||||
<form-col :span="span" label="部门" prop="deptId">
|
||||
<dept-tree-select v-model="form.deptId" class="small-tree-select" width="100%" disabled/>
|
||||
</form-col>
|
||||
<form-col :span="span" label="报表日期" prop="reportDate">
|
||||
<el-date-picker
|
||||
v-model="form.reportDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%;"
|
||||
:clearable="false"
|
||||
:editable="false"
|
||||
:picker-options="DatePickerOptions.DISABLE_FUTURE"
|
||||
/>
|
||||
</form-col>
|
||||
<form-col :span="span" label="总金额">
|
||||
{{totalPrice.toNumber() | dv}} 元
|
||||
</form-col>
|
||||
<form-col :span="24" label="备注">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" type="textarea" maxlength="200" show-word-limit :autosize="{minRows: 2, maxRows: 10}"/>
|
||||
</form-col>
|
||||
</el-row>
|
||||
<div class="edit-container">
|
||||
|
||||
<div class="edit-title">工序产量</div>
|
||||
<report-product-edit
|
||||
v-model="form.productList"
|
||||
:rules="productRules"
|
||||
:header-cell-style="headerCellStyle"
|
||||
:form="form"
|
||||
<div class="left-container">
|
||||
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="6em">
|
||||
<div class="edit-title">基础信息</div>
|
||||
<el-row :gutter="gutter">
|
||||
<form-col :span="span" label="部门" prop="deptId">
|
||||
<dept-tree-select v-model="form.deptId" class="small-tree-select" width="100%" disabled/>
|
||||
</form-col>
|
||||
<form-col :span="span" label="报表日期" prop="reportDate">
|
||||
<el-date-picker
|
||||
v-model="form.reportDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%;"
|
||||
:clearable="false"
|
||||
:editable="false"
|
||||
:picker-options="DatePickerOptions.DISABLE_FUTURE"
|
||||
/>
|
||||
</form-col>
|
||||
<form-col :span="24" label="备注">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" type="textarea" maxlength="200" show-word-limit :autosize="{minRows: 2, maxRows: 10}"/>
|
||||
</form-col>
|
||||
<form-col :span="span" label="总金额">
|
||||
{{totalPrice.toNumber() | dv}} 元
|
||||
</form-col>
|
||||
</el-row>
|
||||
|
||||
<div class="edit-title">工序产量</div>
|
||||
<report-product-edit
|
||||
v-model="form.productList"
|
||||
:rules="productRules"
|
||||
:header-cell-style="headerCellStyle"
|
||||
:form="form"
|
||||
@edit="handleEditProduct"
|
||||
/>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<div class="right-container">
|
||||
<!-- 工序行编辑 -->
|
||||
<report-product-row-edit
|
||||
:row="row"
|
||||
:visible.sync="showMore"
|
||||
:rules="rules"
|
||||
/>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -57,19 +72,23 @@ import ReportProductEdit from "@/views/yh/report/edit/components/ReportProductEd
|
|||
import {parseTime} from "@/utils/ruoyi";
|
||||
import {$reportCheck} from "@/views/yh/report/mixins";
|
||||
import {DatePickerOptions} from "@/utils/constants";
|
||||
import ReportProductRowEdit from "@/views/yh/report/edit/components/ReportProductRowEdit.vue";
|
||||
|
||||
export default {
|
||||
name: "ReportEdit",
|
||||
mixins: [$reportCheck],
|
||||
dicts: ['income_mode'],
|
||||
components: {ReportProductEdit, EditHeader, DeptTreeSelect, PriceInput, FormCol},
|
||||
components: {ReportProductEdit, EditHeader, DeptTreeSelect, PriceInput, FormCol, ReportProductRowEdit},
|
||||
data() {
|
||||
return {
|
||||
row: {},
|
||||
index: null,
|
||||
showMore: false,
|
||||
DatePickerOptions,
|
||||
title: null,
|
||||
loading: false,
|
||||
gutter: 8,
|
||||
span: 8,
|
||||
span: 24,
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
|
@ -127,7 +146,7 @@ export default {
|
|||
let total = new Decimal(0);
|
||||
if (this.form != null && !isEmpty(this.form.productList)) {
|
||||
this.form.productList.forEach(item => {
|
||||
total = total.plus(notNullDecimal(item.pricePrice).mul(notNullDecimal(item.num)))
|
||||
total = total.plus(notNullDecimal(item.totalAmount));
|
||||
})
|
||||
}
|
||||
return total;
|
||||
|
@ -144,6 +163,14 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
handleEditProduct(row, index) {
|
||||
this.row = row;
|
||||
this.index = index;
|
||||
this.showMore = true;
|
||||
},
|
||||
cancel() {
|
||||
this.$tab.closeBack();
|
||||
},
|
||||
getDetail(reportId) {
|
||||
this.loading = true;
|
||||
getReport(reportId, {needProductList: true, needUserProd: true, needOrderProd: true}).then(response => {
|
||||
|
@ -238,5 +265,33 @@ export default {
|
|||
-moz-user-drag: none;
|
||||
-o-user-drag: none;
|
||||
user-drag: none;
|
||||
height: calc(100vh - 84px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.edit-header {
|
||||
z-index: 200;
|
||||
}
|
||||
.edit-container {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
background-color: #f1f1f1;
|
||||
overflow: hidden;
|
||||
.left-container {
|
||||
position: relative;
|
||||
background-color: #fff;
|
||||
width: 350px;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
padding: 16px;
|
||||
box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
|
||||
z-index: 100;
|
||||
}
|
||||
.right-container {
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -345,11 +345,11 @@ export default {
|
|||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.$router.push("/add/report")
|
||||
this.$tab.closeOpenPage(`/edit/report`)
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.$router.push(`/edit/report/${row.reportId}`)
|
||||
this.$tab.closeOpenPage(`/edit/report/${row.reportId}`)
|
||||
},
|
||||
handleView(row) {
|
||||
this.$router.push(`/view/report/${row.reportId}`)
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import {isEmpty, notNullDecimal} from "@/utils";
|
||||
import Decimal from "decimal.js";
|
||||
import {ReportPriceType} from "@/utils/constants";
|
||||
|
||||
export const $reportCheck = {
|
||||
methods: {
|
||||
/**
|
||||
|
@ -9,6 +8,7 @@ export const $reportCheck = {
|
|||
*/
|
||||
preCheckProd(row) {
|
||||
let num = notNullDecimal(row.num); // 良品数
|
||||
let defectNum = notNullDecimal(row.defectNum); // 不良数
|
||||
let totalUserNum = new Decimal(0); // 用户良品数
|
||||
|
||||
if (num.toNumber() < 1) {
|
||||
|
@ -27,7 +27,7 @@ export const $reportCheck = {
|
|||
}
|
||||
totalUserNum = totalUserNum.add(userNum);
|
||||
}
|
||||
if (totalUserNum.toNumber() > num.toNumber()) {
|
||||
if (totalUserNum.toNumber() > (num.toNumber() + defectNum.toNumber())) {
|
||||
return "员工总产量不允许超过工序总产量,请检查"
|
||||
}
|
||||
|
||||
|
|
6
src/views/yh/report/utils.js
Normal file
6
src/views/yh/report/utils.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
import {calcMulDecimal, calcAddDecimal} from "@/utils/money";
|
||||
|
||||
// 计算总价
|
||||
export function calcTotalAmount(row) {
|
||||
return calcMulDecimal(row.pricePrice, calcAddDecimal(row.num, row.defectNum)).toFixed(2);
|
||||
}
|
Loading…
Reference in New Issue
Block a user