Newer
Older
xc-metering-front / src / views / tested / device / task / addDialog.vue
liyaguang on 7 Oct 2023 5 KB feat(*): 细节完善
<!-- 新增参试任务 -->
<script lang="ts" setup name="SystemUserAddDialog">
import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import dayjs from 'dayjs'
import { addTask, delTask, getTaskList, updateTask } from '@/api/eqpt/device/task'
import useUserStore from '@/store/modules/user'
import { getUserDept } from '@/api/system/user'
const emits = defineEmits(['resetData'])
const ruleFormRef = ref<FormInstance>()
const dialogFormVisible = ref<boolean>(false)// 对话框是否显示
const dialogStatus = ref<string>('')// 对话框类型:create,update
const userStore = useUserStore()
const userForm = ref({
  endTime: '',
  startTime: '',
  taskName: '',
  remark: '',
  createDeptId: '',
  createTime: '',
  createUserId: '',
})// 表单
const textMap: { [key: string]: string } = {
  update: '编辑',
  create: '新增',
}// 表头显示标题

const rules: FormRules = reactive({
  taskName: [{ required: true, message: '任务名称必填', trigger: ['blur', 'change'] }],
  startTime: [{ required: true, message: '开始时间必选', trigger: ['blur', 'change'] }],
  endTime: [{ required: true, message: '结束时间必选', trigger: ['blur', 'change'] }],
})// 前端校验规则

// 重置表单
const resetForm1 = () => {
  userForm.value.endTime = ''
  userForm.value.startTime = ''
  userForm.value.taskName = ''
  userForm.value.remark = ''
  userForm.value.createDeptId = ''
  userForm.value.createTime = ''
  userForm.value.createUserId = ''
}
// 新增数据
const createData = () => {
  ruleFormRef.value?.validate(async (valid) => {
    if (valid) {
      const data = {
        ...userForm.value,
        startTime: `${userForm.value.startTime} 00:00:00`,
        endTime: `${userForm.value.endTime} 23:59:59`,
      }
      addTask(data).then((response) => {
        ElMessage.success('添加成功')
        dialogFormVisible.value = false
        emits('resetData')
      })
    }
  })
}
// 修改数据
const updateData = () => {
  ruleFormRef.value?.validate((valid) => {
    if (valid) {
      updateTask(userForm.value).then((response) => {
        ElMessage.success('修改成功')
        dialogFormVisible.value = false
        emits('resetData')
      })
    }
  })
}

// 保存数据
const saveData = () => {
  if (dialogStatus.value === 'update') {
    updateData()
  }
  else if (dialogStatus.value === 'create') {
    createData()
  }
}

const cancel = () => {
  dialogFormVisible.value = false
  resetForm1()
  ruleFormRef.value?.resetFields()
  emits('resetData')
}
// 初始化对话框
const initDialog = (dialogStatusflag: string, row: any) => {
  dialogStatus.value = dialogStatusflag
  dialogFormVisible.value = true
  if (dialogStatus.value === 'create') { // 如果是新增,清除验证
    resetForm1()
    nextTick(() => {
      ruleFormRef.value?.clearValidate()
    })
    userForm.value.createUserId = userStore.id
    userForm.value.createDeptId = userStore.deptId
    userForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
    // getUserDept().then((res) => {
    //   userForm.value.createDeptId = res.data.id
    // })
  }
  else if (dialogStatus.value === 'update') { // 如果是修改,将row中数据填写到输入框中
    userForm.value = JSON.parse(JSON.stringify(row))
  }
}
defineExpose({ initDialog })
</script>

<template>
  <el-dialog v-if="dialogFormVisible" v-model="dialogFormVisible" width="35%" :title="textMap[dialogStatus]" append-to-body>
    <el-form ref="ruleFormRef" :rules="rules" :model="userForm" label-position="right" label-width="110px">
      <el-row :gutter="20">
        <el-col :span="20">
          <el-form-item label="任务名称" prop="taskName">
            <el-input
              v-model.trim="userForm.taskName" type="text"
              placeholder="参试任务名称"
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="20">
          <el-form-item label="开始时间" prop="startTime">
            <el-date-picker
              v-model="userForm.startTime"
              type="date"
              placeholder="开始时间"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              style="width: 100%;"
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="20">
          <el-form-item label="结束时间" prop="endTime">
            <el-date-picker
              v-model="userForm.endTime"
              type="date"
              placeholder="结束时间"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              style="width: 100%;"
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="20">
          <el-form-item label="备注" prop="remark">
            <el-input
              v-model="userForm.remark"
              maxlength="50"
              placeholder="备注"
              show-word-limit
              type="textarea"
              :row="2"
            />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <div class="dialog-footer footer">
      <el-button type="primary" @click="saveData">
        保存
      </el-button>
      <el-button @click="cancel">
        取消
      </el-button>
    </div>
  </el-dialog>
</template>

<style lang="scss" scoped>
.footer {
  display: flex;
  justify-content: flex-end;
}
</style>