Newer
Older
xc-business-system / src / views / resource / outsideService / consumable / handoverDetailDialog.vue
dutingting on 3 Jan 5 KB 需求开发+10
<!-- 物资交接单 弹窗编辑 -->
<script name="HandoverDetailDialog" lang="ts" setup>
import type { IConsumableHandoverGoods } from './consumable-interface'
import type { IStaffBasicInfo } from '@/views/resource/person/register/person-regitster'
import FilterRegistedStaff from '@/views/resource/common/filterRegistedStaff.vue'

const emit = defineEmits(['recordSaved'])

const goodsHandoverFormRef = ref()
const staffFilterRef = ref()

const goodsHandoverDetail = ref<IConsumableHandoverGoods>({
  id: '',
  recordId: '',
  goodsName: '',
  handoverTime: '',
  handoverAmount: '',
  handoverUserName: '',
  handoverUserId: '',
  company: '',
  receiver: '',
})

const goodsHandoverRules = ref({
  goodsName: [{ required: true, message: '物资名称不能为空', trigger: 'blur' }],
  handoverAmount: [{ required: true, message: '交接数量不能为空', trigger: 'blur' }],
  handoverTime: [{ required: true, message: '交接日期不能为空', trigger: 'blur' }],
  handoverUserId: [{ required: true, message: '交接人不能为空,请选择', trigger: ['blur', 'change'] }],
  receiver: [{ required: true, message: '接收人不能为空', trigger: 'blur' }],
}) // 表单验证规则

const showDialog = ref(false)

// 逻辑
const showRegistedStaffFilter = () => {
  staffFilterRef.value.showOrHideFilterDialog(true, 1)
}

const staffSelectedHandler = (staffs: IStaffBasicInfo[]) => {
  goodsHandoverDetail.value.handoverUserId = staffs[0].id!
  goodsHandoverDetail.value.handoverUserName = staffs[0].staffName

  staffFilterRef.value.showOrHideFilterDialog(false)
}

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

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

  if (show === false) {
    // 关闭的时候清除表单
    goodsHandoverDetail.value = {
      id: '',
      recordId: '',
      goodsName: '',
      handoverTime: '',
      handoverAmount: '',
      handoverUserName: '',
      handoverUserId: '',
      company: '',
      receiver: '',
    }
  }
}

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

const submitUseGoods = () => {
  goodsHandoverFormRef.value.validate((valid: boolean) => {
    if (valid === true) {
      emit('recordSaved', goodsHandoverDetail.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="goodsHandoverFormRef" :model="goodsHandoverDetail" :rules="goodsHandoverRules" 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="goodsHandoverDetail.goodsName" placeholder="请输入物资名称" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="交接日期" prop="handoverTime">
              <el-date-picker v-model="goodsHandoverDetail.handoverTime" placeholder="请选择交接日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD" type="date" style="width: 100%;" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="交接数量" prop="handoverAmount">
              <el-input v-model="goodsHandoverDetail.handoverAmount" 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="goodsHandoverDetail.company" placeholder="请输入计量单位" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="交接人" prop="handoverUserId">
              <el-input v-model="goodsHandoverDetail.handoverUserId" type="hidden" />
              <el-input v-model="goodsHandoverDetail.handoverUserName" placeholder="请选择交接人" :disabled="true">
                <template #append>
                  <el-button size="small" @click="showRegistedStaffFilter">
                    选择
                  </el-button>
                </template>
              </el-input>
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="18" :offset="3">
            <el-form-item label="接收人" prop="receiver">
              <el-input v-model="goodsHandoverDetail.receiver" 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="submitUseGoods">
          保存
        </el-button>
      </span>
    </template>

    <filter-registed-staff ref="staffFilterRef" :is-multi="false" :show-score="false" @record-selected="staffSelectedHandler" />
  </el-dialog>
</template>