小小儁爺
2024-08-13 17d7e2b918d669789ba42d457a676bc950c03950
src/views/materialManager/materialList.vue
@@ -3,7 +3,7 @@
    <div class="body" :style="{height:mainHeight+'px'}">
      <div class="bodyTopButtonGroup" style="justify-content: space-between">
        <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>
        <el-button v-waves icon="el-icon-download" @click="upload">导入</el-button>
        <!--        <el-button v-waves icon="el-icon-download" @click="upload">导入</el-button>-->
      </div>
      <div class="bodyTopFormGroup">
@@ -24,17 +24,18 @@
            <el-form-item label="母件规格" style=" display: flex;">
              <el-input v-model="form.parentpartspec" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="存货类型" style=" display: flex;">
              <el-select v-model="form.parttype" style="width: 200px" placeholder="请选择">
                <el-option
                  v-for="item in parttypeArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item v-show="isExpandForm" label="版本编号" style=" display: flex;">
            <!--            <el-form-item label="存货类型" style=" display: flex;">-->
            <!--              <el-select v-model="form.parttype" style="width: 200px" placeholder="请选择">-->
            <!--                <el-option-->
            <!--                  v-for="item in parttypeArr"-->
            <!--                  :key="item.code"-->
            <!--                  :label="item.name"-->
            <!--                  :value="item.code"-->
            <!--                />-->
            <!--              </el-select>-->
            <!--            </el-form-item>-->
            <el-form-item label="版本编号" style=" display: flex;">
              <el-input v-model="form.version" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item v-show="isExpandForm" label="创建人员" style=" display: flex;">
@@ -92,10 +93,10 @@
      </div>
      <div class="elTableDiv">
        <TableColumnSettings
          :list1="tableColumnSettingsArray"
          @tableColumnUpdate="tableColumnUpdate"
        />
        <!--        <TableColumnSettings-->
        <!--          :list1="tableColumnSettingsArray"-->
        <!--          @tableColumnUpdate="tableColumnUpdate"-->
        <!--        />-->
        <el-table
          ref="tableDataRef"
          :key="tableTimeStampKey"
@@ -289,7 +290,7 @@
        align="right"
        layout="total,prev, pager, next,sizes"
        popper-class="select_bottom"
        @pagination="getBoIventorySelect"
        @pagination="getBomMainData"
      />
    </div>
@@ -318,7 +319,7 @@
          <el-form-item label="母件编码" prop="parentpartcode">
            <el-select
              v-model="dialogForm.parentpartcode"
              style="width: 200px"
              style="width: 490px"
              placeholder="请选择"
              :popper-append-to-body="false"
              :disabled="operation!=='add'"
@@ -328,47 +329,33 @@
              <el-option
                v-for="item in PartSelectArr"
                :key="item.partcode"
                :label="item.partcode"
                :label="item.partcode+' / '+item.partname"
                :value="item.partcode"
              />
            </el-select>
          </el-form-item>
          <el-form-item label="母件名称" prop="parentpartname">
            <el-select
              v-model="dialogForm.parentpartname"
              style="width: 200px"
              placeholder="请选择"
              filterable
              :disabled="operation!=='add'"
              :popper-append-to-body="false"
              @change="partSelectChange"
            >
              <el-option
                v-for="item in PartSelectArr"
                :key="item.partcode"
                :label="item.partname"
                :value="item.partcode"
              />
            </el-select>
          </el-form-item>
          <el-form-item label="母件规格" prop="parentpartspec">
            <el-input v-model="dialogForm.parentpartspec" disabled style="width: 200px" />
            <!--          <el-select-->
            <!--            v-model="dialogForm.parentpartspec"-->
            <!--            style="width: 200px"-->
            <!--            placeholder="请选择"-->
            <!--            :popper-append-to-body="false"-->
            <!--          >-->
            <!--            <el-option-->
            <!--              v-for="item in PartSelectArr"-->
            <!--              :key="item.partcode"-->
            <!--              :label="item.partcode"-->
            <!--              :value="item.partcode"-->
            <!--            />-->
            <!--          </el-select>-->
          </el-form-item>
          <el-form-item label="计量单位">
            <el-input v-model="dialogForm.uomname" disabled style="width: 200px" />
            <!--            <el-input v-model="dialogForm.uomname"  style="width: 200px" />-->
            <el-select
              v-model="dialogForm.uomcode"
              :disabled="UnitGroupArr.length<2"
              style="width: 200px"
              placeholder="请选择"
              :popper-append-to-body="false"
            >
              <el-option
                v-for="item in UnitGroupArr"
                :key="item.unitcode"
                :label="item.unitname"
                :value="item.unitcode"
              />
            </el-select>
          </el-form-item>
          <!--          <el-form-item label="存货类型">-->
          <!--            <el-input v-model="dialogForm.chlx" readonly style="width: 200px" />-->
@@ -448,7 +435,7 @@
        />
        <el-table-column
          prop="SMATERIRL_CODE"
          label="子件编码"
          label="子件编码/名称"
          show-tooltip-when-overflow
        >
          <template slot-scope="{row}">
@@ -456,60 +443,53 @@
              v-if="row.isVisible===1"
              v-model="row.SMATERIRL_CODE"
              filterable
              placeholder="请选择"
              @change="val=>tableChange(val,row)"
            >
              <el-option
                v-for="item in PartSelectArr"
                :key="item.partname"
                :label="item.partcode"
                :value="item.partname"
              />
            </el-select>
            <div v-if="row.isVisible===0">{{ row.SMATERIRL_CODE }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="SMATERIRL_NAME"
          label="子件名称"
          filterable
          show-tooltip-when-overflow
        >
          <template slot-scope="{row}">
            <el-select
              v-if="row.isVisible===1"
              v-model="row.SMATERIRL_NAME"
              style="width: 100%;"
              placeholder="请选择"
              @change="val=>tableChange(val,row)"
            >
              <el-option
                v-for="item in PartSelectArr"
                :key="item.partcode"
                :label="item.partname"
                :label="item.partcode+' / '+item.partname"
                :value="item.partcode"
              />
            </el-select>
            <div v-if="row.isVisible===0">{{ row.SMATERIRL_NAME }}</div>
            <div v-if="row.isVisible===0">{{ row.SMATERIRL_CODE }}</div>
          </template>
        </el-table-column>
        <el-table-column
          prop="SMATERIRL_SPEC"
          label="子件规格"
          width="110"
          show-tooltip-when-overflow
        >
          <template slot-scope="{row}">
            <div v-if="row.SMATERIRL_SPEC">{{ row.SMATERIRL_SPEC }}</div>
            <div v-else>/</div>
          </template>
          <!--          <template slot-scope="{row}">-->
          <!--            <div v-if="row.SMATERIRL_SPEC">{{ row.SMATERIRL_SPEC }}</div>-->
          <!--            <div v-else>/</div>-->
          <!--          </template>-->
        </el-table-column>
        <el-table-column
          prop="uomname"
          label="计量单位"
          width="110"
          show-tooltip-when-overflow
        >
          <template slot-scope="{row}">
            <el-select
              v-model="row.uomcode"
              :disabled="row.UnitGroupArr.length<2"
              placeholder="请选择"
            >
              <el-option
                v-for="item in row.UnitGroupArr"
                :key="item.unitcode"
                :label="item.unitname"
                :value="item.unitcode"
        />
            </el-select>
          </template>
        </el-table-column>
        <el-table-column
          prop="BASE_QUANTITY"
          label="基本用量"
@@ -550,45 +530,24 @@
          show-tooltip-when-overflow
          width="110"
        />
        <el-table-column
          prop="PN_TYPE"
          label="属性"
          show-tooltip-when-overflow
          width="110"
        >
          <template slot-scope="{row}">
            <el-select
              v-if="row.isVisible===1"
              v-model="row.PN_TYPE"
              :disabled="row.PN_TYPE==='Z'"
              placeholder="请选择"
              @change="val=>changeType(val,row)"
            >
              <el-option
                v-for="item in sxArr"
                :key="item.code"
                :label="item.name"
                :value="item.code"
              />
            </el-select>
            <div v-if="row.isVisible===0">{{ row.PN_TYPE === 'Z' ? '主料' : '辅料' }}</div>
          </template>
        </el-table-column>
        <el-table-column
          v-if="operation!=='preview'"
          label="操作"
          width="120"
          width="80"
          fixed="right"
        >
          <template slot-scope="{row}">
            <div class="operationClass">
              <el-button v-if="row.isVisible===1" v-waves type="text" @click="saveRow(row)">确定</el-button>
              <el-button v-if="row.isVisible===1" v-waves type="text" @click="cancelRow(row)">取消</el-button>
              <el-button v-if="row.isVisible===0" v-waves type="text" @click="editRow(row)">编辑</el-button>
              <el-button v-if="row.isVisible===0" v-waves type="text" @click="delRow(row)">删除</el-button>
              <!--                      <el-button v-if="row.isVisible===1" v-waves type="text" @click="saveRow(row)">确定</el-button>-->
              <!--                      <el-button v-if="row.isVisible===1" v-waves type="text" @click="cancelRow(row)">取消</el-button>-->
              <!--                      <el-button v-if="row.isVisible===0" v-waves type="text" @click="editRow(row)">编辑</el-button>-->
              <!--                      <el-button v-if="row.isVisible===0" v-waves type="text" @click="delRow(row)">删除</el-button>-->
              <el-button v-waves type="text" @click="delRow(row)">删除</el-button>
            </div>
          </template>
        </el-table-column>
      </el-table>
      <span slot="footer" class="dialog-footer">
@@ -613,17 +572,15 @@
<script>
import Pagination from '@/components/Pagination'
import { handleDatetime } from '@/utils/global'
// import {
//   AddUpdateBoIventory,
//   BoIventorySelect,
//   BoIventorySelectView,
//   DeleteBoIventory, MaterielDetailedVsion,
//   PartSelect,
//   StockTypeSelect
// } from '@/api/makeModel'
import elDragDialog from '@/directive/el-drag-dialog'
import waves from '@/directive/waves'
import TableColumnSettings from '@/components/TableColumnSettings'
import {
  AddUpdateTBomUnitGroup,
  BomMainData,
  AddUpdateTBomParentData,
  TMaterielClassTree, AddUpdateTBomMaxVsion
} from '@/api/ProductModel'
export default {
  name: 'Zzjg',
@@ -784,7 +741,7 @@
        uomname: '',
        // chlx: '',
        quantity: '',
        status: '',
        status: 'Y',
        startdate: '',
        version: ''
      },
@@ -820,16 +777,15 @@
        { code: 'Z', name: '主料' },
        { code: 'F', name: '辅料' }
      ],
      title_value: '数据导入 / 物料清单',
      code: '21',
      shows: false
      UnitGroupArr: []// 计量单位数组
    }
  },
  created() {
    // this.handleRequest()
    this.getBomMainData()
    this.getAddUpdateTBomParentData()
    // this.getStockTypeSelect()
  },
  mounted() {
    window.addEventListener('resize', this.getHeight)
@@ -843,14 +799,7 @@
      this.tableTimeStampKey = new Date().getTime()
      this.$refs.tableDataRef.doLayout()
    },
    handleRequest() {
      this.getBoIventorySelect().then(res => {
        if (res.code === '200') {
          this.getStockTypeSelect()
        }
      })
    },
    async getBoIventorySelect() {
    async getBomMainData() {
      let tempDate = this.form.createdate
      if (tempDate.length > 0) {
        tempDate = handleDatetime(tempDate[0]) + '~' + handleDatetime(tempDate[1])
@@ -872,45 +821,45 @@
        rows: this.form.rows // 每页多少条
      }
      const res = await BoIventorySelect(data)
      const res = await BomMainData(data)
      this.tableData = res.data
      this.total = res.count
      return { code: res.code }
    },
    // 获取母件编码名称等下拉接口
    async getPartSelect() {
      const { data: res } = await PartSelect()
    async getAddUpdateTBomParentData() {
      const { data: res } = await AddUpdateTBomParentData()
      this.PartSelectArr = res
      this.PartSelectArrAll = res
    },
    // 获取存货类型下拉接口
    async getStockTypeSelect() {
      const { data: res } = await StockTypeSelect()
      const { data: res } = await TMaterielClassTree()
      this.parttypeArr = res
    },
    partSelectChange(val) {
    async partSelectChange(val) {
      const res = this.PartSelectArr.find(item => item.partcode === val)
      this.dialogForm.parentpartcode = res.partcode
      // this.dialogForm.parentpartcode = res.partcode
      this.dialogForm.parentpartname = res.partname
      this.dialogForm.parentpartspec = res.partspec
      // this.dialogForm.uomcode = res.uom_code
      this.dialogForm.uomname = res.uom_name
      this.dialogForm.uomcode = res.unitcode
      this.dialogForm.uomname = res.unitname
      if (this.PartSelectArrTemp.length > 0) {
        this.PartSelectArr.unshift(this.PartSelectArrTemp[0])
        this.PartSelectArrTemp.splice(0, 1)
      }
      this.PartSelectArr.forEach((item, index) => {
        if (item.partcode === val) {
          this.PartSelectArrTemp.push(item)
          this.PartSelectArr.splice(index, 1)
        }
      this.UnitGroupArr = []
      this.UnitGroupArr.push({
        unitcode: res.unitcode,
        unitname: res.unitname
      })
      this.getMaterielDetailedVsion(this.dialogForm.parentpartcode)
      if (res.idunitgroup) {
        const { data: r } = await AddUpdateTBomUnitGroup({ idunitgroup: res.idunitgroup })
        this.UnitGroupArr = r
      }
      await this.getAddUpdateTBomMaxVsion(this.dialogForm.parentpartcode)
    },
    async getMaterielDetailedVsion(parentpartcode) {
      const { data: res } = await MaterielDetailedVsion({ parentpartcode })
    async getAddUpdateTBomMaxVsion(parentpartcode) {
      const { data: res } = await AddUpdateTBomMaxVsion({ parentpartcode })
      this.dialogForm.version = res
    },
    // 排序改变时
@@ -924,20 +873,17 @@
      }
      this.form.order = order
      this.form.prop = prop
      this.getBoIventorySelect()
      this.getBomMainData()
    },
    // 查询
    search() {
      this.getBoIventorySelect()
      this.getBomMainData()
    },
    // 导入按钮
    upload() {
      this.shows = true
      this.$refs.importPickerFunc.newDataFunc()
    },
    colos() {
      this.shows = false
    },
    // 重置
    reset() {
      this.form.parentpartcode = ''
@@ -948,24 +894,22 @@
      this.form.version = ''
      this.form.createusername = ''
      this.form.createdate = ''
      this.getBoIventorySelect()
      this.getBomMainData()
    },
    // 新增按钮
    add(operation) {
      this.operation = operation
      this.dialogVisible = true
      this.getPartSelect()
      this.dialogForm.startdate = handleDatetime(new Date())
    },
    // 修改按钮
    async edit(operation, row) {
      const res = await BoIventorySelectView({ bomid: row.id })
      const res = await BomMainDataView({ bomid: row.id })
      if (res.code === '200') {
        this.operation = operation
        this.dialogVisible = true
        await this.getPartSelect()
        const childrenArr = [] // 子集数组partcode
@@ -987,8 +931,8 @@
            uomname: item.uom_name,
            BASE_QUANTITY: item.base_quantity,
            LOSS_QUANTITY: item.loss_quantity,
            TOTAL_QUANTITY: item.total_quantity,
            PN_TYPE: item.pn_type
            TOTAL_QUANTITY: item.total_quantity
          })
          childrenArr.push(item.partcode)
        })
@@ -1017,28 +961,30 @@
      }
    },
    // 对话框表格下拉选择值改变时
    tableChange(val, row) {
      const res = this.PartSelectArr.find(item => item.partcode === val || item.partname === val)
    async  tableChange(val, row) {
      const res = this.PartSelectArr.find(item => item.partcode === val)
      row.SMATERIRL_CODE = res.partcode
      row.SMATERIRL_NAME = res.partname
      row.SMATERIRL_SPEC = res.partspec
      row.uomcode = res.uom_code
      row.uomname = res.uom_name
      row.uomcode = res.unitcode
      row.uomname = res.unitname
      // this.PartSelectArr.forEach((item, index) => {
      //   this.PartSelectArr.splice(index, 1)
      // })
    },
    // 物料清单属性类型值改变时触发
    changeType(val, row) {
      this.dialogTableDataArr.forEach(item => {
        item.PN_TYPE = item.SMATERIRL_CODE === row.SMATERIRL_CODE ? 'Z' : 'F'
      row.UnitGroupArr = []
      row.UnitGroupArr.push({
        unitcode: res.unitcode,
        unitname: res.unitname
      })
    },
    addDialog() {
      if (this.dialogTableDataArr.find(item => item.isVisible === 1)) {
        return this.$message.info('请先保存本条记录!')
      if (res.idunitgroup) {
        const { data: r } = await AddUpdateTBomUnitGroup({ idunitgroup: res.idunitgroup })
        row.UnitGroupArr = r
      }
    },
    addDialog() {
      // if (this.dialogTableDataArr.find(item => item.isVisible === 1)) {
      //   return this.$message.info('请先保存本条记录!')
      // }
      let number = Math.random() * Math.random()// 作为删除时的标识符
      number = number === 0 ? (10 + Math.random()) : number
@@ -1051,14 +997,14 @@
        SMATERIRL_SPEC: '',
        uomcode: '',
        uomname: '',
        UnitGroupArr: [],
        BASE_QUANTITY: '',
        LOSS_QUANTITY: '',
        TOTAL_QUANTITY: '',
        PN_TYPE: this.dialogTableDataArr.length === 0 ? 'Z' : 'F'
        TOTAL_QUANTITY: ''
      })
    },
    saveRow(row) {
      if (row.SMATERIRL_CODE === '' || row.BASE_QUANTITY === '' || row.LOSS_QUANTITY === '' || row.PN_TYPE === '') {
      if (row.SMATERIRL_CODE === '' || row.BASE_QUANTITY === '' || row.LOSS_QUANTITY === '') {
        return this.$message.info('保存失败,该行内容未填全!')
      }
@@ -1083,15 +1029,11 @@
      })
    },
    delRow(row) {
      if (row.PN_TYPE === 'Z') {
        return this.$message.info('主料不可删除!')
      }
      this.PartSelectArrAll.forEach(item => {
        if (item.partcode === row.SMATERIRL_CODE) {
          this.PartSelectArr.unshift(item)
        }
      })
      // this.PartSelectArrAll.forEach(item => {
      //   if (item.partcode === row.SMATERIRL_CODE) {
      //     this.PartSelectArr.unshift(item)
      //   }
      // })
      this.dialogTableDataArr.forEach((item, index) => {
        if (item.SMATERIRL_CODE === row.SMATERIRL_CODE) {
          this.dialogTableDataArr.splice(index, 1)
@@ -1103,23 +1045,23 @@
    },
    // 删除按钮
    async del(row) {
      this.$confirm('是否确认删除?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        DeleteBoIventory({ bomid: row.id }).then(res => {
          if (res.code === '200') {
            this.$message.success('删除成功!')
            if (this.form.page > 1 && this.tableData.length === 1) {
              this.form.page--
            }
            this.getBoIventorySelect()
          }
        })
      }).catch(() => {
        this.$message.info('已取消删除')
      })
      // this.$confirm('是否确认删除?', '提示', {
      //   confirmButtonText: '确定',
      //   cancelButtonText: '取消',
      //   type: 'warning'
      // }).then(() => {
      //   DeleteBoIventory({ bomid: row.id }).then(res => {
      //     if (res.code === '200') {
      //       this.$message.success('删除成功!')
      //       if (this.form.page > 1 && this.tableData.length === 1) {
      //         this.form.page--
      //       }
      //       this.getBomMainData()
      //     }
      //   })
      // }).catch(() => {
      //   this.$message.info('已取消删除')
      // })
    },
    // 对话框关闭事件
    handleClose() {
@@ -1130,7 +1072,7 @@
      this.dialogForm.uomname = ''
      // this.dialogForm.chlx = ''
      this.dialogForm.quantity = ''
      this.dialogForm.status = ''
      this.dialogForm.status = 'Y'
      this.dialogForm.startdate = ''
      this.dialogForm.version = ''
      this.PartSelectArr = []
@@ -1167,17 +1109,17 @@
          // console.log(data)
          this.$store.state.app.buttonIsDisabled = true
          AddUpdateBoIventory(data).then(res => {
            if (res.code === '200') {
              this.dialogVisible = false
              this.$message.success(this.operation === 'add' ? '添加成功!' : '修改成功!')
              this.getBoIventorySelect()
              this.$store.state.app.buttonIsDisabled = false
            } else {
              this.$message.error(this.operation === 'add' ? '添加失败!' : '修改失败!')
              this.$store.state.app.buttonIsDisabled = false
            }
          })
          // AddUpdateBoIventory(data).then(res => {
          //   if (res.code === '200') {
          //     this.dialogVisible = false
          //     this.$message.success(this.operation === 'add' ? '添加成功!' : '修改成功!')
          //     this.getBomMainData()
          //     this.$store.state.app.buttonIsDisabled = false
          //   } else {
          //     this.$message.error(this.operation === 'add' ? '添加失败!' : '修改失败!')
          //     this.$store.state.app.buttonIsDisabled = false
          //   }
          // })
        }
      })
    },
@@ -1196,4 +1138,11 @@
  }
}
</script>
<style scoped lang="scss">
::v-deep .el-select__caret::before{
  display: flex;
  align-items: center;
  justify-content: center;
  height: 34px;
}
</style>