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: [] // 预警通知 |
| | | }; |
| | | }, |
| | |
| | | this.waitLoading = false |
| | | }); |
| | | }, |
| | | aduitThis(row){ |
| | | aduitThis(row) { |
| | | if (this.waitType === '0') { |
| | | this.handleOutput(row) |
| | | this.handleOutput(row) |
| | | } else { |
| | | this.handleIncome(row) |
| | | } |
| | |
| | | if (action == 'confirm') { |
| | | instance.confirmButtonLoading = true; |
| | | instance.confirmButtonText = '执行中...'; |
| | | transfeIncome({ id: row.id }) |
| | | transfeIncome({id: row.id}) |
| | | .then((res) => { |
| | | this.$message.success('接收入库成功!'); |
| | | done(); |
| | |
| | | if (action == 'confirm') { |
| | | instance.confirmButtonLoading = true; |
| | | instance.confirmButtonText = '执行中...'; |
| | | transferOutput({ id: row.id }) |
| | | transferOutput({id: row.id}) |
| | | .then((res) => { |
| | | this.$message.success('调拨出库成功!'); |
| | | done(); |
| | |
| | | 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) { |
| | |
| | | </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); |
| | | 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: [ |
| | | { |
| | |
| | | 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: { |
| | |
| | | |
| | | // 获取入库仓库列表 |
| | | getdeptmentList() { |
| | | departmentListAll({agencyId: this.userInfo.tenantId}) |
| | | departmentListAll({tenantId: this.userInfo.tenantId}) |
| | | .then((res) => { |
| | | this.departmentOptions = res; |
| | | if (!this.setting.id && res.length) { |
| | |
| | | <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"> |
| | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | </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, |
| | |
| | | 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: [], |
| | | }, |
| | |
| | | treeDataList: [] |
| | | }; |
| | | }, |
| | | created(){ |
| | | created() { |
| | | this.fetchData() |
| | | }, |
| | | methods: { |
| | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | //@import url(../../../../styles/index.scss); |
| | | //@import url(../../../../styles/index.scss); |
| | | </style> |
| | |
| | | }, |
| | | // 列信息 |
| | | 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: [ |