Newer
Older
xc-business-system / src / views / resource / outsideService / consumable / storeDetailDialog.vue
tanyue on 23 Oct 2023 3 KB 20231023 物资入库单
<!-- 物资入库情况 弹窗编辑 -->
<script name="StoreDetailDialog" lang="ts" setup>
import type { IConsumableStoreGoods } from './consumable-interface'

const emit = defineEmits(['recordSaved'])

const goodsFormRef = ref()

const goodsStoreDetail = ref<IConsumableStoreGoods>({
  id: '',
  goodsName: '',
  goodsModel: '',
  amount: '',
  price: '',
  unitPrice: '',
  remark: '',
})

const goodsStoreRules = ref({
  goodsName: [{ required: true, message: '物资名称不能为空', trigger: 'blur' }],
  goodsModel: [{ required: true, message: '规格型号不能为空', trigger: 'blur' }],
  amount: [{ required: true, message: '数量不能为空', trigger: 'blur' }],
  price: [{ required: true, message: '金额不能为空', trigger: 'blur' }],
}) // 表单验证规则

const showDialog = ref(false)

// 逻辑
const showRecordDialog = (show: boolean) => {
  showDialog.value = show

  nextTick(() => {
    goodsFormRef.value.clearValidate()
  })

  if (show === false) {
    // 关闭的时候清除表单
    goodsStoreDetail.value = {
      goodsName: '',
      goodsModel: '',
      amount: '',
      price: '',
      unitPrice: '',
      remark: '',
    }
  }
}

// 编辑时初始化表格
const initRecordData = (record: IConsumableStoreGoods) => {
  goodsStoreDetail.value = { ...record }
}

const submitStoreGoods = () => {
  goodsFormRef.value.validate((valid: boolean) => {
    if (valid === true) {
      emit('recordSaved', goodsStoreDetail.value)

      showRecordDialog(false)
    }
  })
}

defineExpose({
  showRecordDialog,
  initRecordData,
})
</script>

<template>
  <el-dialog v-model="showDialog" title="物资入库详情" :append-to-body="true" :close-on-click-modal="false">
    <detail-block title="">
      <el-form ref="goodsFormRef" :model="goodsStoreDetail" :rules="goodsStoreRules" label-position="right" label-width="110px" border stripe>
        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="物资名称" prop="goodsName">
              <el-input v-model="goodsStoreDetail.goodsName" placeholder="请输入物资名称" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="规格" prop="goodsModel">
              <el-input v-model="goodsStoreDetail.goodsModel" placeholder="请输入物资规格" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="数量" prop="amount">
              <el-input v-model="goodsStoreDetail.amount" placeholder="请输入使用数量及单位" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="单价">
              <el-input v-model="goodsStoreDetail.unitPrice" placeholder="请输入单价及单位" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="金额" prop="price">
              <el-input v-model="goodsStoreDetail.price" placeholder="请输入金额" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="备注">
              <el-input v-model="goodsStoreDetail.remark" placeholder="请输入备注信息" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </detail-block>

    <template #footer>
      <span class="dialog-footer">
        <el-button @click="showRecordDialog(false)">取消</el-button>
        <el-button type="primary" @click="submitStoreGoods">
          保存
        </el-button>
      </span>
    </template>
  </el-dialog>
</template>