feat:
1、物品分发部门查询
2、分发新增数量校验
| | |
| | | params, |
| | | }); |
| | | } |
| | | // 查询预警信息数量 |
| | | export function getWarningTypeNum(params) { |
| | | return request({ |
| | | url: '/pc/warehouse/warning/getWarningTypeNum', |
| | | method: 'get', |
| | | params, |
| | | }); |
| | | } |
| | |
| | | </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}"> |
| | |
| | | <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"> |
| | |
| | | // 创建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 = {}; |
| | |
| | | waitType: '0', |
| | | waitWorkData: [], // 待办工作 |
| | | earlyWarningType: '', |
| | | warningTypeNum: { |
| | | lowNum: 0, |
| | | totalNum: 0, |
| | | upNum: 0, |
| | | }, |
| | | earlyWarningData: [] // 预警通知 |
| | | }; |
| | | }, |
| | |
| | | getWarningList() { |
| | | this.earlyLoading = true |
| | | this.earlyWarningData = [] |
| | | getWarningTypeNum().then(res => { |
| | | this.warningTypeNum = res |
| | | geWarningList({ |
| | | warningType: this.earlyWarningType, |
| | | pageNum: 1, |
| | |
| | | }).catch(() => { |
| | | this.waitLoading = false |
| | | }); |
| | | }) |
| | | |
| | | }, |
| | | // 跳转 |
| | | nav(url) { |
| | |
| | | </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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | } |
| | | callback(); |
| | | }; |
| | | // 数量校验 |
| | | var checkCounts = (rule, value, callback) => { |
| | | console.log(value); |
| | | return { |
| | | checkCounts: (rule, value, callback) => { |
| | | if (!value) { |
| | | return callback(new Error('请输入')); |
| | | return callback(new Error('请输入分发数量')); |
| | | } |
| | | if (!Number.isInteger(value)) { |
| | | this.$message.warning('请输入数字值'); |
| | | // this.$message.warning('请输入数字值'); |
| | | return callback(new Error('请输入数字值')); |
| | | } |
| | | if (value == 0) { |
| | | this.$message.warning('数字值不能为0'); |
| | | return callback(new Error('数字值不能为0')); |
| | | 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(); |
| | | }; |
| | | return { |
| | | }, |
| | | loading: false, |
| | | buyTypeOptions: [ |
| | | { |
| | |
| | | baseCategoryIds: [{required: true, message: '请选择', trigger: 'change'}], |
| | | baseGoodsTemplateId: [{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}], |
| | | modelsIds: [{required: true, message: '请选择', trigger: 'change'}], |
| | | transferGoods:{ |
| | | models:{ |
| | | transferGoods: [ |
| | | { |
| | | models: [ |
| | | { |
| | | counts: [ |
| | | { required: true, message: '请输入', trigger: 'change' }, |
| | | { type: 'number', message: '数量必须为整数' }, |
| | | ], |
| | | procureModelUserList:{ |
| | | procureModelUserList: [ |
| | | { |
| | | goodsNum: [ { required: true, message: '请输入', trigger: 'blur' }], |
| | | nowUserName: [ { required: true, message: '请输入', trigger: 'blur' }], |
| | | nowUserPhone: [ { required: true, message: '请输入', trigger: 'blur' }], |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | |
| | | |
| | | ] |
| | | }, |
| | | |
| | | uploadSettings: { |
| | |
| | | |
| | | // 获取入库仓库列表 |
| | | getdeptmentList() { |
| | | departmentListAll({agencyId: this.userInfo.tenantId}) |
| | | departmentListAll({tenantId: this.userInfo.tenantId}) |
| | | .then((res) => { |
| | | this.departmentOptions = res; |
| | | if (!this.setting.id && res.length) { |
| | |
| | | <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"> |
| | |
| | | import detail from './detail'; |
| | | import { getBaseUrl } from '@/utils/base'; |
| | | import listPage from '../../../mixins/listPage'; |
| | | import {getUserDetail} from "@/utils/auth"; |
| | | |
| | | export default { |
| | | name: 'index', |
| | |
| | | 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: [], |
| | | }, |
| | |
| | | }, |
| | | // 列信息 |
| | | 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 ? '启用' : '禁用' }; |
| | | }, |
| | |
| | | ], |
| | | // 操作信息 |
| | | operation: { |
| | | width: 150, |
| | | width: 100, |
| | | align: 'center', |
| | | show: true, // 显示操作列 |
| | | attr: [ |