Newer
Older
smartKitchenFront / src / components / mycomponent / dialog / categoryAddDialog.vue
<!--品类新增弹窗-->
<template>
  <el-dialog
    :title="title"
    width="840px"
    :visible.sync="isShowInfo"
    append-to-body
    @close="close"
  >
    <div class="categoryDialog">
      <div class="content">
        <div class="inputContent">
          <div class="inputbox">
            <red-star />
            <input-vue
              v-model="categoryInfo.categoryCode"
              title="编号"
              class="inputWidth"
            />
          </div>
          <div class="inputbox">
            <red-star />
            <input-vue title="上级品类" class="inputWidth">
              <el-select
                v-model="categoryInfo.pCategoryCode"
                filterable
                placeholder="请选择"
                style="width: 100%"
              >
                <el-option
                  v-for="item in categoryList"
                  :key="item.id"
                  :label="item.categoryName"
                  :value="item.id"
                />
              </el-select>
            </input-vue>
          </div>
          <div class="inputbox">
            <red-star />
            <input-vue title="备注" class="inputWidth">
              <el-input
                v-model="categoryInfo.remark"
                type="textarea"
                :rows="3"
                placeholder="请输入内容"
              />
            </input-vue>
          </div>
        </div>
        <div class="inputContent">
          <div class="inputbox">
            <red-star />
            <input-vue
              v-model="categoryInfo.categoryName"
              title="名称"
              class="inputWidth"
            />
          </div>
          <div class="inputbox">
            <red-star />
            <input-vue title="资质要求" class="inputWidth">
              <el-select
                v-model="categoryInfo.qualifyIds"
                filterable
                multiple
                placeholder="请选择"
                style="width: 100%"
              >
                <el-option
                  v-for="item in certificationList"
                  :key="item.id"
                  :label="item.qualifyName"
                  :value="item.id"
                />
              </el-select>
            </input-vue>
          </div>
        </div>
      </div>
      <div class="AddContent">
        <div class="addBtn">
          <el-button type="primary" @click="pushAry">
            添加产品参数
          </el-button>
        </div>
        <div v-for=" ( item,index) in categoryInfo.productParams" :key="index">
          <div class="addItem">
            <div class="devName item">
              <red-star />
              <input-vue v-model="item.paramName" title="名称" class="inputWidth" />
            </div>
            <div class="number item">
              <red-star />
              <input-vue title="排序" class="inputWidth">
                <input-number v-model="item.paramOrder" />
              </input-vue>
            </div>
            <div class="isRequire item">
              <red-star />
              <input-vue title="" class="inputWidth">
                <el-checkbox v-model="item.paramRequire">
                  是否必填
                </el-checkbox>
              </input-vue>
            </div>
            <div class="delete item">
              <el-button type="primary" @click="removeAry(index)">
                删除
              </el-button>
            </div>
          </div>
        </div>
      </div>
      <div class="btnBox">
        <el-button type="primary" class="save" @click="save">
          保存
        </el-button>
        <el-button type="info" class="close" @click="close">
          取消
        </el-button>
      </div>
    </div>
  </el-dialog>
</template>

<script>
import dialogHeader from './dialogHeader.vue'
import inputVue from '../input/inputVue.vue'
import InputNumber from '../input/inputNumber.vue'
import RedStar from '../redStar.vue'
import { Message } from 'element-ui'
import { C_add, C_list, C_update, detail } from '../../../api/product/category'
import { getCertification } from '../../../api/systemNew/systemNew'

export default {
  components: {
    inputVue,
    dialogHeader,
    InputNumber,
    RedStar,
    Message
  },
  props: {
    isShowInfo: {
      type: Boolean,
      default: true
    },
    dataInfo: {
      type: Object
    },
    title: ''
  },
  data() {
    return {
      // 品类信息
      categoryInfo: {
        categoryCode: '',
        categoryName: '',
        pCategoryCode: '',
        remark: '',
        qualifyIds: '',
        productParams: [
          {
            paramName: '',
            paramOrder: 0,
            paramRequire: false
          }
        ]
      },
      categoryList: [],
      // 资质列表
      certificationList: []
    }
  },
  watch: {
    dataInfo: {
      handler(vla) {
        if (vla != '') {
          // 编辑操作
          if (!vla.id) return
          detail({ id: vla.id }).then(res => {
            this.categoryInfo.id = res.id
            this.categoryInfo.categoryCode = res.categoryCode
            this.categoryInfo.categoryName = res.categoryName
            this.categoryInfo.pCategoryCode = res.pCategoryCode
            this.categoryInfo.remark = res.remark
            this.categoryInfo.qualifyIds = res.qualifyIds
            this.categoryInfo.productParams = this.dealAry2(res.productParams)
          })
          // this.categoryInfo.id = vla.id
          // this.categoryInfo.categoryCode=vla.categoryCode
          // this.categoryInfo.categoryName=vla.categoryName
          // this.categoryInfo.pCategoryCode=vla.pCategoryCode
          // this.categoryInfo.remark=vla.remark
          // this.categoryInfo.qualifyIds=vla.qualifyIds
          // this.categoryInfo.productParams=this.dealAry2(vla.productParams)
          // this.categoryInfo = {
          //   id:vla.id,
          //   categoryCode:vla.categoryCode,
          //   categoryName:vla.categoryName,
          //   pCategoryCode:vla.pCategoryCode,
          //   remark:vla.qualifyIds,
          //   qualifyIds:vla.qualifyIds
          // }
        } else {
          this.resetData()
        }
      },
      deep: true,
      immediate: true
    }
  },
  mounted() {
    C_list().then(res => {
      this.categoryList = res.data
    })
    getCertification().then(res => {
      console.log(res)
      this.certificationList = res
    })
  },
  methods: {
    close() {
      this.$emit('close')
      // 重置数据
      // this.resetData()
    },
    // 数据处理
    dealAry2(productParams) { //  number 转 boolean
      if (productParams.lenght < 1 || productParams == '') {
        return [{
          paramName: '',
          paramOrder: 0,
          paramRequire: false
        }]
      }
      productParams.forEach(item => {
        if (item.paramRequire == '1') {
          item.paramRequire = true
        } else {
          item.paramRequire = false
        }
      })
      return productParams
    },
    dealAry(productParams) { //  boolean 转 number
      if (productParams.lenght < 1 || productParams == '') {
        return [{
          paramName: '',
          paramOrder: 0,
          paramRequire: false
        }]
      }
      productParams.forEach(item => {
        if (item.paramRequire) {
          item.paramRequire = '1'
        } else {
          item.paramRequire = '0'
        }
      })
      return productParams
    },
    save() {
      if (this.title == '品类新增') {
        this.categoryInfo.productParams = this.dealAry(this.categoryInfo.productParams)
        C_add(this.categoryInfo).then(res => {
          console.log(res, res != '')
          if (res != '') {
            this.$message({
              message: '保存成功',
              type: 'success'
            })

            this.close()
            // 保存后刷新数据
            this.$emit('refresh')
          }
        })
      } else {
        this.categoryInfo.productParams = this.dealAry(this.categoryInfo.productParams)
        console.log(this.categoryInfo.productParams)
        C_update(this.categoryInfo).then(res => {
          if (res != '') {
            this.$message({
              message: '更新成功',
              type: 'success'
            })
            this.close()
            // 保存后刷新数据
            this.$emit('refresh')
          }
        })
      }
    },
    resetData() {
      this.categoryInfo = {
        categoryCode: '',
        categoryName: '',
        pCategoryCode: '',
        remark: '',
        qualifyIds: '',
        productParams: [
          {
            paramName: '',
            paramOrder: 0,
            paramRequire: false
          }
        ]
      }
    },
    // 删除指定数组
    removeAry(index) {
      this.categoryInfo.productParams.splice(index, 1)
    },
    //  添加数组
    pushAry() {
      this.categoryInfo.productParams.push({
        paramName: '',
        paramOrder: 0,
        paramRequire: false
      })
    }
  }
}
</script>

<style lang="scss" scoped>
.categoryDialog {
  width: 800px;
  box-sizing: border-box;

  .content {
    padding: 10px;
    display: flex;
    justify-content: space-between;

    .inputContent {
      flex: 1;
      padding: 0 10px;
      box-sizing: border-box;

      .inputbox {
        margin-bottom: 15px;
        display: flex;
        align-items: center;
      }
    }
  }

  .AddContent {
    max-height: 180px;
    overflow: auto;
    border-radius: 5px;
    box-sizing: border-box;
    border: 1px solid #999;
    padding: 10px;

    .addBtn {
      margin-bottom: 10px;
    }

    .addItem {
      display: flex;

      .item {
        padding-right: 10px;
        display: flex;
        align-items: center;
      }
    }
  }

  .btnBox {
    padding: 30px;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: space-evenly;

    .save,
    .close {
      width: 100px;
    }
  }
}
</style>