Newer
Older
smartKitchenFront / src / components / mycomponent / dialog / categoryAddDialog.vue
liyaguang on 22 Dec 2022 9 KB fix(*): 修改服务管理
<!--品类新增弹窗-->
<template>
  <el-dialog
    :title="title"
    width="840px"
    :visible.sync="isShowInfo"
    append-to-body
    @close="close"
  >
    <div class="categoryDialog">
      <el-form ref="dataForm" :rules="rules" :model="categoryInfo" class="inputContent" label-position="right" label-width="100px">
        <el-row :gutter="10">
          <el-col :span="12">
            <el-form-item label="编号" prop="categoryCode">
              <el-input v-model.trim="categoryInfo.categoryCode" placeholder="必填" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="名称" prop="categoryName">
              <el-input v-model.trim="categoryInfo.categoryName" placeholder="必填" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="上级品类" prop="pCategoryCode">
              <el-select
                v-model="categoryInfo.pCategoryCode"
                filterable
                placeholder="请选择"
                style="width: 100%"
              >
                <!-- <el-option
                  label="无"
                  value=""
                /> -->
                <el-option
                  v-for="item in categoryList"
                  :key="item.categoryCode"
                  :label="item.categoryName"
                  :value="item.categoryCode"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="资质要求" prop="qualifyIds">
              <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>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="备注" prop="remark">
              <el-input
                v-mode.triml="categoryInfo.remark"
                type="textarea"
                :rows="3"
                placeholder="请输入内容"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <div class="AddContent">
          <div class="addBtn">
            <el-button type="primary" @click="pushAry">
              添加产品参数
            </el-button>
          </div>
          <div style="padding: 15px 20px">
            <div v-for=" (item,index) of categoryInfo.productParams" :key="index" class="addItem">
              <el-form-item label="名称" :prop="`productParams[${index}].paramName`" :rules="{required: true, message: `请输入名称`, trigger: ['change','blur']}" label-width="60px">
                <el-input v-model.trim="item.paramName" placeholder="必填" />
              </el-form-item>
              <el-form-item label="排序" :prop="`productParams[${index}].paramOrder`" :rules="{required: true, message: `请输入排序`, trigger: ['change','blur']}" label-width="60px">
                <el-input-number v-model="item.paramOrder" :min="0" :max="9999" />
              </el-form-item>
              <div class="isRequire item" style="height:40px;margin-left: 20px">
                <el-checkbox v-model="item.paramRequire" true-label="1" false-label="0">
                  必填
                </el-checkbox>
              </div>
              <div class="delete item" style="margin-left: 15px">
                <el-button type="primary" @click="removeAry(index)">
                  删除
                </el-button>
              </div>
            </div>
          </div>
        </div>
      </el-form>
    </div>
    <div slot="footer" class="dialog-footer">
      <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 { C_add, C_list, C_update, detail } from '../../../api/product/category'
import { getCertification } from '../../../api/systemNew/systemNew'

export default {
  props: {
    isShowInfo: {
      type: Boolean,
      default: true
    },
    title: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      dialogType: '', // add新增,update
      // 品类信息
      categoryInfo: {
        categoryCode: '',
        categoryName: '',
        pCategoryCode: '',
        remark: '',
        qualifyIds: '',
        productParams: [
          {
            paramName: '',
            paramOrder: 0,
            paramRequire: 0
          }
        ]
      },
      rules: {
        categoryCode: [{ required: true, message: '此项不能为空', trigger: ['blur', 'change'] }],
        categoryName: [{ required: true, message: '此项不能为空', trigger: ['blur', 'change'] }],
        pCategoryCode: [{ required: false, message: '此项不能为空', trigger: ['blur', 'change'] }],
        qualifyIds: [{ type: 'array', required: true, message: '此项不能为空', trigger: ['blur', 'change'] }],
        productParams: [{ required: true, message: '此项不能为空', trigger: ['blur', 'change'] }]
      },
      categoryList: [], // 品类列表
      certificationList: [] // 资质列表
    }
  },
  mounted() {
    C_list().then(res => {
      this.categoryList = res.data
    })
    getCertification().then(res => {
      this.certificationList = res
    })
  },
  methods: {
    initDialog(dialogType, row) {
      C_list().then(res => {
      this.categoryList = res.data
    })
      this.dialogType = dialogType
      if (dialogType === 'add') {
        this.resetData()
        this.$nextTick(() => {
          this.$refs['dataForm'].clearValidate()
        })
      } else {
        if (!row.id) return
        detail({ id: row.id }).then(res => {
          console.log(res.data, 'row')
          this.categoryInfo = {
            id: res.data.id,
            categoryCode: res.data.categoryCode,
            categoryName: res.data.categoryName,
            pCategoryCode: res.data.pCategoryCode,
            remark: res.data.remark,
            qualifyIds: res.data.qualifyIds,
            productParams: res.data.productParams.map(item => {
              return {
                paramName: item.paramName,
                paramOrder: item.paramOrder,
                paramRequire: item.paramRequire
              }
            })
          }
        })
      }
    },
    close() {
      this.$emit('close')
      this.resetData()
    },
    save() {
      this.$refs['dataForm'].validate((valid) => {
        if (valid) {
          if (this.title === '品类新增') {
            C_add(this.categoryInfo).then(res => {
              if (res.code === 200) {
                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.code === 200) {
                this.$message({
                  message: '更新成功',
                  type: 'success'
                })
                this.close()
                // 保存后刷新数据
                this.$emit('refresh')
              }
            })
          }
        }
      })
    },
    resetData() {
      this.categoryInfo = {
        categoryCode: '',
        categoryName: '',
        pCategoryCode: '',
        remark: '',
        qualifyIds: '',
        productParams: [
          {
            paramName: '',
            paramOrder: 0,
            paramRequire: '0'
          }
        ]
      }
    },
    // 删除指定数组
    removeAry(index) {
      this.categoryInfo.productParams.splice(index, 1)
    },
    //  添加数组
    pushAry() {
      this.categoryInfo.productParams.push({
        paramName: '',
        paramOrder: 0,
        paramRequire: '0'
      })
    }
  }
}
</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 #c9c9c9;
    padding: 10px 10px 20px;

    .addBtn {
      margin-bottom: 10px;
    }

    .addItem {
      display: flex;
      align-items: flex-start;
      .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>