debug
This commit is contained in:
parent
1e13611d0a
commit
6131dba97a
|
@ -19,20 +19,26 @@ export function getReport(reportId, params = {}) {
|
|||
}
|
||||
|
||||
// 新增报表
|
||||
export function addReport(data) {
|
||||
export function addReport(data, submit) {
|
||||
return request({
|
||||
url: '/yh/report',
|
||||
method: 'post',
|
||||
data: data
|
||||
data: data,
|
||||
params: {
|
||||
submit
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 修改报表
|
||||
export function updateReport(data) {
|
||||
export function updateReport(data, submit) {
|
||||
return request({
|
||||
url: '/yh/report',
|
||||
method: 'put',
|
||||
data: data
|
||||
data: data,
|
||||
params: {
|
||||
submit
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
class="mini-table"
|
||||
>
|
||||
<el-table-column type="selection" align="center"/>
|
||||
<!-- <el-table-column type="index" width="60" label="序号" align="center"/>-->
|
||||
<el-table-column label="工序" align="center" prop="priceName">
|
||||
<template #header>
|
||||
<span class="required-label">工序</span>
|
||||
|
@ -36,7 +35,7 @@
|
|||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工序类型" align="center" >
|
||||
<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>
|
||||
|
@ -88,39 +87,39 @@
|
|||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单价" align="center" prop="pricePrice" width="100">
|
||||
<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="100">
|
||||
<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="160">
|
||||
<el-table-column label="明细信息" align="center" width="200">
|
||||
<template scope="d">
|
||||
<div class="more-row" v-for="(userProd, index) of d.row.userProdList" @click="handleShowMore(d.row, d.$index)">
|
||||
{{index + 1}}、{{userProd.userName | dv}} {{userProd.num | dv}} {{d.row.priceUnit}}
|
||||
</div>
|
||||
<div class="more-row" v-for="(order, index) of d.row.orderProdList" @click="handleShowMore(d.row, d.$index)">
|
||||
{{index + 1}}、{{order.orderErpBillNo}} {{order.num}} {{d.row.priceUnit}}
|
||||
</div>
|
||||
<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>
|
||||
|
||||
<el-table-column width="160" align="center" label="操作">
|
||||
<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.$index)">
|
||||
@click="handleDel(d.row, d.$index)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
|
@ -242,6 +241,7 @@ export default {
|
|||
deptId: this.form.deptId,
|
||||
status: PriceStatus.PASS, // 已审核
|
||||
disabled: false,
|
||||
excludePriceIds: this.value.map(item => item.priceId)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -329,10 +329,14 @@ export default {
|
|||
this.selection = selection;
|
||||
},
|
||||
// 删除
|
||||
handleDel(index) {
|
||||
if (this.value != null) {
|
||||
handleDel(row, index) {
|
||||
this.$confirm(`确定删除工序【${row.priceName}】吗?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.value.splice(index, 1);
|
||||
}
|
||||
})
|
||||
},
|
||||
// 批量修改产量
|
||||
handleBatchUserProduct(){
|
||||
|
@ -388,12 +392,15 @@ export default {
|
|||
num: item.num
|
||||
}
|
||||
})
|
||||
// 计算总产量
|
||||
|
||||
// 若需要更新总产量,则计算总产量
|
||||
if (data.updateTotal) {
|
||||
let totalCount = notNullDecimal(0);
|
||||
row.userProdList.forEach(item => {
|
||||
totalCount = notNullDecimal(item.num).add(totalCount);
|
||||
})
|
||||
row.num = totalCount.toNumber();
|
||||
}
|
||||
})
|
||||
this.$message.success("批量编辑成功");
|
||||
}
|
||||
|
|
|
@ -141,13 +141,20 @@ export default {
|
|||
erpStatusList: [ProdOrderErpStatus.START_WORK],
|
||||
materialCategory: this.reportProd.priceCategory,
|
||||
materialSize: this.reportProd.priceSize,
|
||||
excludeIds: this.value.map(item => item.orderId),
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
isEmpty,
|
||||
handleDel(index) {
|
||||
this.$confirm(`确定删除与当前订单的关联吗?`, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}).then(() => {
|
||||
this.value.splice(index, 1)
|
||||
})
|
||||
},
|
||||
onChangeProdOrder(row, item) {
|
||||
row.orderErpQty = item.erpQty;
|
||||
|
|
|
@ -136,7 +136,7 @@ export default {
|
|||
this.$refs.form.validate(valid => {
|
||||
if (valid) {
|
||||
// 校验产量是否一致
|
||||
let error = this.checkNum(this.form);
|
||||
let error = this.preCheckProd(this.form);
|
||||
if (!isEmpty(error)) {
|
||||
this.$message.warning(error);
|
||||
return;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<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="userQuery"/>
|
||||
<user-input v-model="d.row.userId" open-type="dialog" :list-api="listUserWithShift" :query="userQueryParams"/>
|
||||
</form-col>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -38,7 +38,7 @@
|
|||
type="text"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
@click="handleDelUserProduct(d.$index)"
|
||||
@click="handleDelUserProduct(d.row, d.$index)"
|
||||
>删除
|
||||
</el-button>
|
||||
</template>
|
||||
|
@ -51,7 +51,7 @@
|
|||
:show.sync="showUserDialog"
|
||||
:list-api="listUserWithShift"
|
||||
@select="onSelectUsers"
|
||||
:query="userQuery"
|
||||
:query="userQueryParams"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
@ -101,6 +101,12 @@ export default {
|
|||
}
|
||||
},
|
||||
computed: {
|
||||
userQueryParams() {
|
||||
return {
|
||||
excludeUserIds: this.value.map(item => item.userId),
|
||||
...this.userQuery
|
||||
}
|
||||
},
|
||||
userIncome() {
|
||||
return (num) => {
|
||||
return calcMulDecimal(num, this.price);
|
||||
|
@ -114,8 +120,14 @@ export default {
|
|||
this.showUserDialog = true;
|
||||
},
|
||||
// 删除用户产量
|
||||
handleDelUserProduct(index) {
|
||||
handleDelUserProduct(row, index) {
|
||||
this.$confirm(`确定删除当前员工产量吗?`, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}).then(() => {
|
||||
this.value.splice(index, 1);
|
||||
})
|
||||
},
|
||||
// 确认添加用户
|
||||
onSelectUsers(list) {
|
||||
|
|
|
@ -1,14 +1,20 @@
|
|||
<template>
|
||||
<el-dialog :visible.sync="visible" title="批量编辑员工产量" close-on-click-modal width="800px">
|
||||
<el-form :model="form" label-width="6em" size="mini">
|
||||
<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 :label="IncomeMode.COUNT">产量</el-radio>
|
||||
<el-radio :label="IncomeMode.SCORE">计分</el-radio>
|
||||
<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>,否则无法计算员工产量!
|
||||
请注意!计分模式下,需要提前输入选中行的 <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>
|
||||
|
@ -25,24 +31,24 @@
|
|||
</template>
|
||||
<template slot-scope="d">
|
||||
<form-col table label-width="0">
|
||||
<user-input v-model="d.row.userId" :list-api="listUserWithShift" :query="userQuery"/>
|
||||
<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">
|
||||
<el-input v-model="d.row.num" type="number" placeholder="请输入员工产量" :min="0"/>
|
||||
<form-col table label-width="0" v-if="form.mode === IncomeMode.COUNT" :prop="`list[${d.$index}].num`" :rules="rules.list.num">
|
||||
<el-input v-model="d.row.num" type="number" placeholder="请输入员工产量" :min="1"/>
|
||||
</form-col>
|
||||
<form-col table label-width="0" v-if="form.mode === IncomeMode.SCORE">
|
||||
<form-col table label-width="0" v-if="form.mode === IncomeMode.SCORE" :prop="`list[${d.$index}].score`" :rules="rules.list.score">
|
||||
<el-input v-model="d.row.score" type="number" placeholder="请输入员工分数" :min="0"/>
|
||||
</form-col>
|
||||
</template>
|
||||
|
@ -58,7 +64,7 @@
|
|||
<user-dialog
|
||||
:show.sync="showUserDialog"
|
||||
multiple
|
||||
:query="userQuery"
|
||||
:query="userQueryParams"
|
||||
:list-api="listUserWithShift"
|
||||
@select="onSelectUsers"
|
||||
/>
|
||||
|
@ -94,8 +100,11 @@ export default {
|
|||
}
|
||||
},
|
||||
computed: {
|
||||
IncomeMode() {
|
||||
return IncomeMode
|
||||
userQueryParams() {
|
||||
return {
|
||||
excludeUserIds: this.form.list.map(item => item.userId),
|
||||
...this.userQuery,
|
||||
}
|
||||
},
|
||||
visible: {
|
||||
get() {
|
||||
|
@ -108,32 +117,60 @@ export default {
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
IncomeMode,
|
||||
form: {
|
||||
mode: IncomeMode.COUNT
|
||||
list: [],
|
||||
mode: IncomeMode.COUNT,
|
||||
updateTotal: true,
|
||||
},
|
||||
showUserDialog: false,
|
||||
rules: {
|
||||
list: {
|
||||
num: [
|
||||
{required: true, message: '请输入员工产量', trigger: 'blur'},
|
||||
],
|
||||
score: [
|
||||
{required: true, message: '请输入员工分数', trigger: 'blur'},
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
listUserWithShift,
|
||||
onSubmit() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (valid) {
|
||||
this.$confirm('【注意!】保存后将会覆盖已选中的员工产量数据,是否确认保存当前产量信息?', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$emit('submit', this.form);
|
||||
})
|
||||
} else {
|
||||
this.$message.warning("表单校验不通过,请检查")
|
||||
}
|
||||
})
|
||||
},
|
||||
handleDel(index) {
|
||||
this.$confirm(`确定删除当前员工产量吗?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(res => {
|
||||
this.form.list.splice(index, 1);
|
||||
})
|
||||
},
|
||||
handleAdd() {
|
||||
this.showUserDialog = true;
|
||||
},
|
||||
onSelectUsers(list) {
|
||||
if (isEmpty(this.form.list)) {
|
||||
this.form.list = [];
|
||||
}
|
||||
list.forEach(item => {
|
||||
this.form.list.push({
|
||||
userId: item.userId,
|
||||
userName: item.nickName,
|
||||
num: 0,
|
||||
num: null,
|
||||
score: 10,
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
<template>
|
||||
<div class="report-edit-container">
|
||||
<div class="report-edit-container" v-loading="loading">
|
||||
<edit-header :title="title">
|
||||
<el-button type="primary" @click="submitForm" icon="el-icon-check" 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">
|
||||
|
@ -20,6 +21,7 @@
|
|||
style="width: 100%;"
|
||||
:clearable="false"
|
||||
:editable="false"
|
||||
:picker-options="pickerOptions"
|
||||
/>
|
||||
</form-col>
|
||||
<form-col :span="span" label="总金额">
|
||||
|
@ -113,7 +115,13 @@ export default {
|
|||
},
|
||||
headerCellStyle: {
|
||||
backgroundColor: "#f5f7fa",
|
||||
},
|
||||
// 报表日期选项
|
||||
pickerOptions: {
|
||||
disabledDate(date) {
|
||||
return date.getTime() > Date.now();
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -149,21 +157,25 @@ export default {
|
|||
})
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
submitForm(submit) {
|
||||
this.form.totalAmount = this.totalPrice;
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
// 校验产量是否一致
|
||||
for (let i = 0; i < this.form.productList.length; i++) {
|
||||
let error = this.checkNum(this.form.productList[i]);
|
||||
let error = this.preCheckProd(this.form.productList[i]);
|
||||
if (!isEmpty(error)) {
|
||||
return this.$message.warning(`第${i + 1}行工序产量校验未通过:${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
this.$confirm(`确认${submit ? '保存并提交' : '保存'}当前报表?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.loading = true;
|
||||
if (this.form.reportId != null) {
|
||||
updateReport(this.form).then(res => {
|
||||
updateReport(this.form, submit).then(res => {
|
||||
if (res.code === 200) {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.$tab.closeBack();
|
||||
|
@ -172,7 +184,7 @@ export default {
|
|||
this.loading = false;
|
||||
})
|
||||
} else {
|
||||
addReport(this.form).then(res => {
|
||||
addReport(this.form, submit).then(res => {
|
||||
if (res.code === 200) {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.$tab.closeBack();
|
||||
|
@ -181,6 +193,7 @@ export default {
|
|||
this.loading = false;
|
||||
})
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.$message.warning("表单校验未通过,请检查")
|
||||
}
|
||||
|
|
|
@ -1,27 +1,50 @@
|
|||
import {notNullDecimal} from "@/utils";
|
||||
import {isEmpty, notNullDecimal} from "@/utils";
|
||||
import Decimal from "decimal.js";
|
||||
import {ReportPriceType} from "@/utils/constants";
|
||||
|
||||
export const $reportCheck = {
|
||||
methods: {
|
||||
/**
|
||||
* 校验数量是否一致
|
||||
* 提交前校验工序产量
|
||||
*/
|
||||
checkNum(row) {
|
||||
preCheckProd(row) {
|
||||
let num = notNullDecimal(row.num); // 良品数
|
||||
let userNum = new Decimal(0); // 用户良品数
|
||||
row.userProdList.forEach(item => {
|
||||
userNum = userNum.add(notNullDecimal(item.num));
|
||||
})
|
||||
console.log(userNum.toNumber(), num.toNumber())
|
||||
if (userNum.toNumber() > num.toNumber()) {
|
||||
let totalUserNum = new Decimal(0); // 用户良品数
|
||||
|
||||
if (num.toNumber() < 1) {
|
||||
return "良品数不允许小于1,请检查";
|
||||
}
|
||||
|
||||
// 校验员工产量
|
||||
if (isEmpty(row.userProdList)) {
|
||||
return "至少要填写一条员工产量";
|
||||
}
|
||||
for(let i = 0; i < row.userProdList.length; i++) {
|
||||
let item = row.userProdList[i];
|
||||
let userNum = notNullDecimal(item.num);
|
||||
if (userNum.toNumber() < 1) {
|
||||
return `第${i+1}行员工产量不允许小于1,请检查`;
|
||||
}
|
||||
totalUserNum = totalUserNum.add(userNum);
|
||||
}
|
||||
if (totalUserNum.toNumber() > num.toNumber()) {
|
||||
return "员工总产量不允许超过工序总产量,请检查"
|
||||
}
|
||||
|
||||
let orderNum = new Decimal(0); // 订单良品数
|
||||
row.orderProdList.forEach(item => {
|
||||
orderNum = orderNum.add(notNullDecimal(item.num));
|
||||
})
|
||||
if (orderNum.toNumber() > num.toNumber()) {
|
||||
// 校验订单产量
|
||||
if (row.priceType === ReportPriceType.BILL && isEmpty(row.orderProdList)) {
|
||||
return "订单工序至少需要关联一个订单"
|
||||
}
|
||||
let totalOrderNum = new Decimal(0); // 订单良品数
|
||||
for(let i = 0; i < row.orderProdList.length; i++) {
|
||||
let item = row.orderProdList[i];
|
||||
let orderNum = notNullDecimal(item.num);
|
||||
if (orderNum.toNumber() < 1) {
|
||||
return `第${i+1}行订单产量不允许小于1,请检查`;
|
||||
}
|
||||
totalOrderNum = totalOrderNum.add(orderNum);
|
||||
}
|
||||
if (totalOrderNum.toNumber() > num.toNumber()) {
|
||||
return "订单总产量不允许超过工序总产量,请检查"
|
||||
}
|
||||
},
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
end-placeholder="结束时间"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
@change="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建部门" prop="deptId">
|
||||
|
|
Loading…
Reference in New Issue
Block a user