From 24fc98301c0b38a76b7d5aa704fe79a2e385e584 Mon Sep 17 00:00:00 2001
From: 石广澎 <shiguangpeng@163.com>
Date: 星期三, 29 十一月 2023 14:20:41 +0800
Subject: [PATCH] feat: 1、物品分发部门查询 2、分发新增数量校验
---
admin-web/src/api/stock/ledger.js | 8 ++
admin-web/src/views/departmentitem/itemdis/distribution/edit.vue | 98 +++++++++++++++---------
admin-web/src/views/departmentitem/itemdis/distribution/index.vue | 61 ++++++++------
admin-web/src/views/dashboard/index.vue | 50 +++++++-----
admin-web/src/views/systemSetting/department/index.vue | 12 +-
5 files changed, 139 insertions(+), 90 deletions(-)
diff --git a/admin-web/src/api/stock/ledger.js b/admin-web/src/api/stock/ledger.js
index 07081e4..ed3947d 100644
--- a/admin-web/src/api/stock/ledger.js
+++ b/admin-web/src/api/stock/ledger.js
@@ -72,3 +72,11 @@
params,
});
}
+// 鏌ヨ棰勮淇℃伅鏁伴噺
+export function getWarningTypeNum(params) {
+ return request({
+ url: '/pc/warehouse/warning/getWarningTypeNum',
+ method: 'get',
+ params,
+ });
+}
diff --git a/admin-web/src/views/dashboard/index.vue b/admin-web/src/views/dashboard/index.vue
index a82a8cc..e210eb0 100644
--- a/admin-web/src/views/dashboard/index.vue
+++ b/admin-web/src/views/dashboard/index.vue
@@ -13,7 +13,8 @@
</el-radio-group>
<div class="to-more" @click="nav('/stock/transfer/transferissue')">鏌ョ湅鏇村 ></div>
</div>
- <el-table v-loading="waitLoading" :data="waitWorkData" class="top-tb" height="265" :show-header="false" size="medium">
+ <el-table v-loading="waitLoading" :data="waitWorkData" class="top-tb" height="265" :show-header="false"
+ size="medium">
<el-table-column prop="businessFormCode" align="center" width="130"></el-table-column>
<el-table-column prop="inWarehouseName" align="left" min-width="130">
<template slot-scope="{row}">
@@ -48,12 +49,13 @@
<div class="f-r f-r-between m-b-10">
<el-radio-group size="mini" v-model="earlyWarningType" @change="changeEarlyWarning">
<el-radio-button label="">鍏ㄩ儴</el-radio-button>
- <el-radio-button label="2">缂鸿揣锛�12锛�</el-radio-button>
- <el-radio-button label="1">瓒呭嚭锛�3锛�</el-radio-button>
+ <el-radio-button label="2">缂鸿揣 <span v-if="warningTypeNum.lowNum">锛坽{warningTypeNum.lowNum}}锛�</span></el-radio-button>
+ <el-radio-button label="1">瓒呭嚭 <span v-if="warningTypeNum.upNum">锛坽{warningTypeNum.upNum}}锛�</span></el-radio-button>
</el-radio-group>
<div class="to-more" @click="nav('/stock/ledger/alertQuery')">鏌ョ湅鏇村 ></div>
</div>
- <el-table v-loading="earlyLoading" :data="earlyWarningData" class="top-tb" height="265" :show-header="false" size="medium">
+ <el-table v-loading="earlyLoading" :data="earlyWarningData" class="top-tb" height="265" :show-header="false"
+ size="medium">
<el-table-column prop="baseGoodsTemplateName" align="left" min-width="130">
<template slot-scope="{row}">
<el-tooltip class="item" effect="dark" :content="row.baseGoodsTemplateName " placement="top-start">
@@ -138,8 +140,7 @@
// 鍒涘缓Context
import {LongToDateTime} from "@/utils/DateFormatter";
import {transfeIncome, transferList, transferOutput} from "@/api/stock/transfer";
-import {geWarningList} from '@/api/stock/ledger'
-import transfer from "@/views/mixins/transfer";
+import {getWarningTypeNum, geWarningList} from '@/api/stock/ledger'
const ComponentContext = require.context('./components', false, /\.vue$/i);
let res_components = {};
@@ -172,6 +173,11 @@
waitType: '0',
waitWorkData: [], // 寰呭姙宸ヤ綔
earlyWarningType: '',
+ warningTypeNum: {
+ lowNum: 0,
+ totalNum: 0,
+ upNum: 0,
+ },
earlyWarningData: [] // 棰勮閫氱煡
};
},
@@ -215,9 +221,9 @@
this.waitLoading = false
});
},
- aduitThis(row){
+ aduitThis(row) {
if (this.waitType === '0') {
- this.handleOutput(row)
+ this.handleOutput(row)
} else {
this.handleIncome(row)
}
@@ -229,7 +235,7 @@
if (action == 'confirm') {
instance.confirmButtonLoading = true;
instance.confirmButtonText = '鎵ц涓�...';
- transfeIncome({ id: row.id })
+ transfeIncome({id: row.id})
.then((res) => {
this.$message.success('鎺ユ敹鍏ュ簱鎴愬姛锛�');
done();
@@ -252,7 +258,7 @@
if (action == 'confirm') {
instance.confirmButtonLoading = true;
instance.confirmButtonText = '鎵ц涓�...';
- transferOutput({ id: row.id })
+ transferOutput({id: row.id})
.then((res) => {
this.$message.success('璋冩嫧鍑哄簱鎴愬姛锛�');
done();
@@ -279,16 +285,20 @@
getWarningList() {
this.earlyLoading = true
this.earlyWarningData = []
- geWarningList({
- warningType: this.earlyWarningType,
- pageNum: 1,
- pageSize: 5,
- }).then(res => {
- this.earlyLoading = false
- this.earlyWarningData = res.datas;
- }).catch(() => {
- this.waitLoading = false
- });
+ getWarningTypeNum().then(res => {
+ this.warningTypeNum = res
+ geWarningList({
+ warningType: this.earlyWarningType,
+ pageNum: 1,
+ pageSize: 5,
+ }).then(res => {
+ this.earlyLoading = false
+ this.earlyWarningData = res.datas;
+ }).catch(() => {
+ this.waitLoading = false
+ });
+ })
+
},
// 璺宠浆
nav(url) {
diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
index 1a44026..d94d5c4 100644
--- a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
+++ b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
@@ -118,12 +118,12 @@
</el-col>
</el-row>
<el-row class="card3" v-for="(mItem, mIndex) in goodsItem.models" :key="mIndex">
- <el-col style="padding: 10px 0" :span="10">
+ <el-col style="padding: 15px 0" :span="10">
<el-form-item label="瑙勬牸鍨嬪彿:" style="margin-bottom: 0">
{{ getGoodsModelsName(mItem.baseGoodsModelsId) }}
</el-form-item>
</el-col>
- <el-col style="padding: 10px 0" :span="4">
+ <el-col style="padding: 15px 0" :span="4">
<el-form-item label="鍓╀綑鏁伴噺:" style="margin-bottom: 0" label-width="80">
{{ mItem.worehouseCount }}
</el-form-item>
@@ -135,9 +135,12 @@
<template slot-scope="{$index,row}">
<el-form-item
:prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.goodsNum`"
+ :rules="[
+ {validator: checkCounts,type: 1, userList: mItem.procureModelUserList,worehouseCount: mItem.worehouseCount, trigger: ['blur', 'change']}
+ ]"
label-width="0"
>
- <el-input v-model="row.goodsNum" style="width: 100%"></el-input>
+ <el-input v-model.number="row.goodsNum" style="width: 100%"></el-input>
</el-form-item>
</template>
</el-table-column>
@@ -145,6 +148,7 @@
<template slot-scope="{$index,row}">
<el-form-item
:prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.nowUserName`"
+ :rules="[{required: true, message: '璇疯緭鍏ヤ娇鐢ㄤ汉濮撳悕', trigger: ['blur', 'change']}]"
label-width="0"
>
<el-input v-model="row.nowUserName" style="width: 100%"></el-input>
@@ -154,7 +158,8 @@
<el-table-column prop="nowUserPhone" label="鑱旂郴鐢佃瘽" align="center">
<template slot-scope="{$index,row}">
<el-form-item
- :prop="`transferGoods.${goodsIndex}.models.${mIndex}].procureModelUserList.${$index}.nowUserPhone`"
+ :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.nowUserPhone`"
+ :rules="[{required: true, message: '璇疯緭鍏ヨ仈绯荤數璇�', trigger: ['blur', 'change']}]"
label-width="0"
>
<el-input v-model="row.nowUserPhone" style="width: 100%"></el-input>
@@ -180,12 +185,15 @@
</el-table>
</el-col>
<!--BC绫诲晢鍝� -->
- <el-col style="padding: 10px 0" :span="10" v-else>
+ <el-col style="padding: 15px 0" :span="10" v-else>
<el-form-item
label="鍒嗗彂鏁伴噺:"
:prop="`transferGoods.${goodsIndex}.models.${mIndex}.counts`"
+ :rules="[
+ {validator: checkCounts, type: 2,worehouseCount: mItem.worehouseCount, trigger: ['blur', 'change']}
+ ]"
style="margin-bottom: 0" label-width="80">
- <el-input v-model.number="goodsItem.models[mIndex].counts" style="width: 160px;"></el-input>
+ <el-input v-model.number="mItem.counts" style="width: 160px;"></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -258,23 +266,35 @@
}
callback();
};
- // 鏁伴噺鏍¢獙
- var checkCounts = (rule, value, callback) => {
- console.log(value);
- if (!value) {
- return callback(new Error('璇疯緭鍏�'));
- }
- if (!Number.isInteger(value)) {
- this.$message.warning('璇疯緭鍏ユ暟瀛楀��');
- return callback(new Error('璇疯緭鍏ユ暟瀛楀��'));
- }
- if (value == 0) {
- this.$message.warning('鏁板瓧鍊间笉鑳戒负0');
- return callback(new Error('鏁板瓧鍊间笉鑳戒负0'));
- }
- callback();
- };
return {
+ checkCounts: (rule, value, callback) => {
+ if (!value) {
+ return callback(new Error('璇疯緭鍏ュ垎鍙戞暟閲�'));
+ }
+ if (!Number.isInteger(value)) {
+ // this.$message.warning('璇疯緭鍏ユ暟瀛楀��');
+ return callback(new Error('璇疯緭鍏ユ暟瀛楀��'));
+ }
+ if (value < 1) {
+ // this.$message.warning('鏁板瓧鍊间笉鑳戒负0');
+ return callback(new Error('鏁板瓧鍊煎繀椤诲ぇ浜�0'));
+ }
+ if (value > rule.worehouseCount) {
+ // this.$message.warning('鍒嗗彂鏁伴噺涓嶈兘澶т簬鍓╀綑鏁伴噺');
+ return callback(new Error('鍒嗗彂鏁伴噺涓嶈兘澶т簬鍓╀綑鏁伴噺'));
+ }
+ if(rule.type===1){
+ let sum = 0
+ rule.userList.map(item=>{
+ sum+=(item.goodsNum||0)
+ })
+ if (sum > rule.worehouseCount) {
+ // this.$message.warning('鍒嗗彂鏁伴噺鎬诲拰涓嶈兘澶т簬鍓╀綑鏁伴噺');
+ return callback(new Error('鍒嗗彂鏁伴噺鎬诲拰涓嶈兘澶т簬鍓╀綑鏁伴噺'));
+ }
+ }
+ callback();
+ },
loading: false,
buyTypeOptions: [
{
@@ -329,21 +349,25 @@
baseCategoryIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
baseGoodsTemplateId: [{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}],
modelsIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
- transferGoods:{
- models:{
- counts: [
- { required: true, message: '璇疯緭鍏�', trigger: 'change' },
- { type: 'number', message: '鏁伴噺蹇呴』涓烘暣鏁�' },
- ],
- procureModelUserList:{
- goodsNum: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
- nowUserName: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
- nowUserPhone: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
- }
+ transferGoods: [
+ {
+ models: [
+ {
+ counts: [
+ {required: true, message: '璇疯緭鍏�', trigger: 'change'},
+ {type: 'number', message: '鏁伴噺蹇呴』涓烘暣鏁�'},
+ ],
+ procureModelUserList: [
+ {
+ goodsNum: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}],
+ nowUserName: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}],
+ nowUserPhone: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}],
+ }
+ ]
+ }
+ ]
}
- }
-
-
+ ]
},
uploadSettings: {
@@ -399,7 +423,7 @@
// 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
getdeptmentList() {
- departmentListAll({agencyId: this.userInfo.tenantId})
+ departmentListAll({tenantId: this.userInfo.tenantId})
.then((res) => {
this.departmentOptions = res;
if (!this.setting.id && res.length) {
diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
index 4f55539..681e679 100644
--- a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
+++ b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
@@ -10,7 +10,7 @@
<el-col>
<!--鍒楄〃-->
<div class="table-tool-bar" style="margin-bottom: 15px">
- <my-button name="鏂板" @click="handleAdd" site="tools" size="medium" />
+ <my-button name="鏂板" @click="handleAdd" site="tools" size="medium"/>
</div>
<div :style="{ 'overflow-y': 'auto', height: `calc(100vh - 320px)` }" v-loading="loading">
<el-row v-if="list.length" class="card" :gutter="5">
@@ -23,7 +23,9 @@
<span class="value">{{ item.businessFormCode }}</span>
</div>
<div class="card-header-right">
- <el-button name="鏌ョ湅璇︽儏" site="form" type="primary" size="mini" @click="handleDetail(item)">鏌ョ湅璇︽儏</el-button>
+ <el-button name="鏌ョ湅璇︽儏" site="form" type="primary" size="mini" @click="handleDetail(item)">
+ 鏌ョ湅璇︽儏
+ </el-button>
</div>
</div>
<div class="one-hed">
@@ -52,14 +54,14 @@
<el-empty v-else description="鏆傛棤鏁版嵁"></el-empty>
</div>
<el-pagination
- :small="false"
- :current-page="pageNum"
- :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
- :page-size="pageSize"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total"
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
+ :small="false"
+ :current-page="pageNum"
+ :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
+ :page-size="pageSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
/>
</el-col>
</el-row>
@@ -67,35 +69,36 @@
</el-container>
<!--娣诲姞/缂栬緫寮圭獥-->
<edit
- v-if="editSetting.show"
- :setting="editSetting"
- ref="editRef"
- @close="editSetting.show = false"
- @search="refreshData"
+ v-if="editSetting.show"
+ :setting="editSetting"
+ ref="editRef"
+ @close="editSetting.show = false"
+ @search="refreshData"
></edit>
<detail
- v-if="detailSetting.show"
- :setting="detailSetting"
- @close="detailSetting.show = false"
- ref="detailRef"
+ v-if="detailSetting.show"
+ :setting="detailSetting"
+ @close="detailSetting.show = false"
+ ref="detailRef"
></detail>
</div>
</template>
<script>
-import { transferList} from '@/api/stock/transfer';
+import {transferList} from '@/api/stock/transfer';
import MyButton from '@/components/myButton/myButton';
import SettingIplatform from '@/utils/settingIplatform';
import myImport from '@/views/components/myImport';
import edit from './edit';
import detail from './detail';
-import { getBaseUrl } from '@/utils/base';
+import {getBaseUrl} from '@/utils/base';
import listPage from '../../../mixins/listPage';
+import {getUserDetail} from "@/utils/auth";
export default {
name: 'index',
mixins: [listPage],
- components: { MyButton, myImport, edit, detail },
+ components: {MyButton, myImport, edit, detail},
data() {
return {
loading: false,
@@ -111,11 +114,15 @@
defaultValue: '',
},
{
- type: 'cascader',
- dataIndex: 'agencyId',
+ type: 'select',
+ dataIndex: 'inWarehouseId',
label: '鍒嗗彂閮ㄩ棬',
placeholder: '璇烽�夋嫨',
- optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null },
+ optionsConfig: {
+ url: `/pc/fin/sys/tenant/department/list/all?tenantId=${getUserDetail().tenantId}`,
+ label: 'name',
+ value: 'id',
+ },
defaultValue: '',
options: [],
},
@@ -156,7 +163,7 @@
treeDataList: []
};
},
- created(){
+ created() {
this.fetchData()
},
methods: {
@@ -182,5 +189,5 @@
</script>
<style scoped lang="scss">
- //@import url(../../../../styles/index.scss);
+//@import url(../../../../styles/index.scss);
</style>
diff --git a/admin-web/src/views/systemSetting/department/index.vue b/admin-web/src/views/systemSetting/department/index.vue
index 9544286..41c30b7 100644
--- a/admin-web/src/views/systemSetting/department/index.vue
+++ b/admin-web/src/views/systemSetting/department/index.vue
@@ -129,15 +129,15 @@
},
// 鍒椾俊鎭�
columns: [
- { title: '缂栧彿', field: 'code', align: 'center', width: '100px' },
- { title: '閮ㄩ棬', field: 'name', align: 'left' },
- { title: '椤哄簭鍙�', field: 'orderNum', align: 'left' },
- { title: '澶囨敞', field: 'remark', align: 'left', width: '200px' },
+ { title: '缂栧彿', field: 'code', align: 'center', width: 80 },
+ { title: '閮ㄩ棬', field: 'name', align: 'left', minWidth: 200 },
+ { title: '椤哄簭鍙�', field: 'orderNum', align: 'center', width: 100 },
+ { title: '澶囨敞', field: 'remark', align: 'left', minWidth: 200 },
{
title: '鐘舵��',
field: 'status',
align: 'center',
- width: '180px',
+ width: 100,
formatter: (row) => {
return { value: row.status === 0 ? '鍚敤' : '绂佺敤' };
},
@@ -145,7 +145,7 @@
],
// 鎿嶄綔淇℃伅
operation: {
- width: 150,
+ width: 100,
align: 'center',
show: true, // 鏄剧ず鎿嶄綔鍒�
attr: [
--
Gitblit v1.9.1