admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
@@ -1,13 +1,25 @@
<template>
  <win-md class="stock-edit" :title="`${setting.title}采购入库`" @close="close" :width="'800px'">
  <win-md class="stock-edit" title="物品分发" @close="close" :width="'800px'">
    <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
      <div class="main-w">
        <el-row :gutter="24" class="headerHeight">
          <el-col :span="12">
            <el-form-item label="入库仓库" prop="warehouseId">
            <el-form-item label="部门" prop="warehouseId">
              <el-select v-model="formData.warehouseId" placeholder="请选择" style="width: 100%">
                <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" />
                <el-option v-for="item in departmentOptions" :key="item.id" :label="item.name" :value="item.id" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="领取人" prop="warehouseId">
              <el-input v-model="formData.warehouseId" placeholder="请输入"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="headerHeight">
          <el-col :span="12">
            <el-form-item label="联系电话" prop="buyType">
              <el-input v-model.number="formData.buyType" placeholder="请输入"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
@@ -25,17 +37,8 @@
          </el-col>
        </el-row>
        <el-row :gutter="24" class="headerHeight">
          <el-col :span="12">
            <el-form-item label="采购类型" prop="buyType">
              <el-select v-model="formData.buyType" placeholder="请选择" style="width: 100%">
                <el-option v-for="item in buyTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="headerHeight">
          <el-col :span="24">
            <el-form-item label="采购入库手续" prop="procureDoc">
            <el-form-item label="分发审批手续" prop="procureDoc">
              <upload ref="uploadRef" :values="fileList" :settings="uploadSettings" @on-change="uploadChange"></upload>
            </el-form-item>
          </el-col>
@@ -114,52 +117,59 @@
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="供货商" prop="supplier">
                <el-input v-model="goodsItem.supplier" clearable maxlength="20" show-word-limit />
              </el-form-item>
            </el-col>
          </el-row>
          <el-table :data="goodsItem.models" :stripe="true">
            <el-table-column prop="baseGoodsModelsId" label="规格型号" align="center">
              <template slot-scope="scope">
                {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }}
              </template>
            </el-table-column>
            <el-table-column label="单位" align="center">
              <template slot-scope="scope">
                {{ scope.row.unit }}
              </template>
            </el-table-column>
            <el-table-column prop="priceYuan" label="单价(元)" align="center">
              <template slot-scope="scope">
                <el-form-item
                  label-width="0"
                  style="margin-bottom: 0"
                  :prop="`procureGoods[${goodsIndex}].models[${scope.$index}].priceYuan`"
                  :rules="rules.priceYuan"
                >
                  <el-input
                    type="number"
                    v-model.number="scope.row.priceYuan"
                    @change="priceChange($event, goodsIndex, scope.$index)"
                  ></el-input>
          <el-row class="card3" v-for="(mItem, mIndex) in goodsItem.models" :key="mIndex">
            <el-row :gutter="24" type="flex" align="middle" style="height: 50px">
              <el-col :span="8">
                <el-form-item label="规格型号:" prop="baseGoodsModelsId" style="margin-bottom: 0">
                  {{ getGoodsModelsName(mItem.baseGoodsModelsId) }}
                </el-form-item>
              </template>
            </el-table-column>
            <el-table-column prop="counts" label="采购数量" align="center">
              <template slot-scope="scope">
                <el-form-item
                  label-width="0"
                  style="margin-bottom: 0"
                  :prop="`procureGoods[${goodsIndex}].models[${scope.$index}].counts`"
                  :rules="rules.counts"
                >
                  <el-input v-model.number="scope.row.counts"></el-input>
              </el-col>
              <el-col :span="6">
                <el-form-item label="剩余数量:" prop="baseGoodsModelsId" style="margin-bottom: 0" label-width="80">
                  50
                </el-form-item>
              </template>
            </el-table-column>
          </el-table>
              </el-col>
              <el-col :span="10" v-if="true">
                <el-form-item label="分发数量:" prop="baseGoodsModelsId" style="margin-bottom: 0" label-width="80">
                  <el-input v-model.number="mItem.count" style="width: 160px;"></el-input>
                </el-form-item>
              </el-col>
            </el-row>
            <el-table :data="mItem.clist" :stripe="true" v-if="false">
              <el-table-column prop="count" label="分发数量" align="center">
                <template slot-scope="scope">
                  <el-input v-model="scope.row.count"></el-input>
                </template>
              </el-table-column>
              <el-table-column prop="count" label="使用人" align="center">
                <template slot-scope="scope">
                  <el-input v-model="scope.row.user" maxlength="20"></el-input>
                </template>
              </el-table-column>
              <el-table-column prop="count" label="联系电话" align="center">
                <template slot-scope="scope">
                  <el-input v-model.number="scope.row.phone" maxlength="11"></el-input>
                </template>
              </el-table-column>
              <el-table-column align="left" width="60">
                <template slot-scope="scope">
                  <i
                    v-if="mItem.clist.length > 1"
                    class="el-icon-remove-outline"
                    style="color: #f56c6c; font-size: 16px; cursor: pointer"
                    @click="handleDel(goodsIndex, mIndex, scope.$index)"
                  ></i>
                  <i
                    v-if="mItem.clist.length - 1 == scope.$index"
                    class="el-icon-circle-plus-outline"
                    style="color: #0d997c; font-size: 16px; cursor: pointer"
                    @click="handleAdd(goodsIndex, mIndex, scope.$index)"
                  ></i>
                </template>
              </el-table-column>
            </el-table>
          </el-row>
          <div class="btn-group">
            <el-button
              v-if="formData.procureGoods.length > 1"
@@ -198,6 +208,7 @@
  goodsModel,
  procureDetail,
} from '@/api/stock/procure/purchaseOrder';
import { departmentListAll } from '@/api/system/deptment';
import { getTree } from '@/api/foudation/classification';
import MyButton from '@/components/myButton/myButton';
import winMd from '@/components/win/win-md';
@@ -205,6 +216,7 @@
import { getUploadUrl, getDownUrl } from '@/utils/base';
import { findParentIds } from '@/utils/index';
import { mapGetters } from 'vuex';
import * as DateFormatter from '@/utils/DateFormatter';
export default {
  components: { MyButton, winMd, upload },
@@ -224,18 +236,6 @@
      let temp = this.formData.procureGoods.filter((v) => v.baseGoodsTemplateId == value);
      if (!temp || temp.length != 1) {
        return callback(new Error('已选过此物品'));
      }
      callback();
    };
    // 金额校验
    var checkPrice = (rule, value, callback) => {
      console.log(value);
      if (!value) {
        return callback(new Error('请输入'));
      }
      if (value == 0) {
        this.$message.warning('数字值不能为0');
        return callback(new Error('数字值不能为0'));
      }
      callback();
    };
@@ -268,14 +268,13 @@
        },
      ],
      fileList: [],
      warehouses: [], // 入库仓库列表
      departmentOptions: [], // 部门列表
      categoryOptions: [], // 物品分类列表
      modelList: [], //型号列表
      formData: {
        procureDoc: '',
        warehouseId: '', // 入库仓库id
        procureTime: '', // 采购时间
        buyType: '2', // 采购方式(1:集采;2=自采)
        procureTime: DateFormatter.formatDate(new Date()), // 采购时间
        procureGoods: [],
      },
      goodsItem: {
@@ -292,10 +291,12 @@
      },
      modelsItem: {
        baseGoodsModelsId: '', // 规格型号编号
        priceYuan: null, // 单价(元)
        price: null, // 单价(分 采购需要,调拨不需要)
        counts: null, // 操作数量
        unit: null, //单位
        syCount: '',
      },
      clistItem: {
        count: null,
        user: null,
        phone: null,
      },
      rules: {
        warehouseId: [{ required: true, message: '请选择', trigger: 'change' }],
@@ -306,7 +307,6 @@
        baseCategoryIds: [{ required: true, message: '请选择', trigger: 'change' }],
        baseGoodsTemplateId: [{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
        modelsIds: [{ required: true, message: '请选择', trigger: 'change' }],
        priceYuan: [{ validator: checkPrice, trigger: 'blur' }],
        counts: [{ validator: checkCounts, trigger: 'blur' }],
      },
@@ -331,7 +331,7 @@
  },
  methods: {
    async init() {
      this.getWarehouseList();
      this.getdeptmentList();
      this.getgoodsTemplate();
      this.getgoodsModel();
      // 获取物品分类列表
@@ -364,16 +364,16 @@
    },
    // 获取入库仓库列表
    getWarehouseList() {
      selectTenantWarehouse({ agencyId: this.userInfo.tenantId })
    getdeptmentList() {
      departmentListAll({ agencyId: this.userInfo.tenantId })
        .then((res) => {
          this.warehouses = res;
          this.departmentOptions = res;
          if (!this.setting.id && res.length) {
            this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
          }
          if (this.warehouses.length && !this.formData.warehouseId) {
          if (this.departmentOptions.length && !this.formData.warehouseId) {
            // 默认选中第一个仓库
            this.formData.warehouseId = this.warehouses[0].id;
            this.formData.warehouseId = this.departmentOptions[0].id;
          }
        })
        .catch((err) => {
@@ -463,8 +463,8 @@
      let str = JSON.stringify(arr);
      e.forEach((item) => {
        if (str.indexOf(item) == -1) {
          let temp = this.goodsModelAll.find((v) => v.id == item);
          arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit });
          let clist = [JSON.parse(JSON.stringify(this.clistItem))];
          arr.push({ ...this.modelsItem, baseGoodsModelsId: item, clist });
        }
      });
      this.formData.procureGoods[index].models = arr;
@@ -475,6 +475,14 @@
      let arr = this.formData.procureGoods[index].models;
      let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
      this.formData.procureGoods[index].models.splice(delIndex, 1);
    },
    //型号分发新增
    handleAdd(goodsIndex, mIndex, cIndex) {
      this.formData.procureGoods[goodsIndex].models[mIndex].clist.push(JSON.parse(JSON.stringify(this.clistItem)));
    },
    handleDel(goodsIndex, mIndex, cIndex) {
      this.formData.procureGoods[goodsIndex].models[mIndex].clist.splice(cIndex, 1);
    },
    // 价格input监听 转为分
@@ -546,4 +554,8 @@
</script>
<style scoped lang="scss">
@import url(../../../../styles/store.scss);
.card3 {
  border-radius: 2px;
  background: #ffffff;
}
</style>