Newer
Older
xc-business-system / src / views / quality / review / work / components / edit.vue
liyaguang on 22 Apr 9 KB merge
<!-- 管理评审工作管理编辑页面 -->
<script name="QualityReviewWorkHandler" lang="ts" setup>
import type { FormInstance, FormRules, UploadUserFile } from 'element-plus'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import dayjs from 'dayjs'
import fileList from './fileList.vue'
import { getDictByCode } from '@/api/system/dict'
import useUserStore from '@/store/modules/user'
import { getUserList } from '@/api/system/user'
import { addReviewWork, detailReviewWork, updateReviewWork } from '@/api/quality/review/work'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
const ruleFormRef = ref<FormInstance>() // from组件
const ruleForm = ref({
  yearTime: '',
  yearNum: '',
  workName: '',
  bizLabCode: '',
  beginTime: '',
  endTime: '',
  commanderId: '',
  currentStage: '0',
  reviewFileList: [] as any,
}) // 表单
const rules = ref<FormRules>({
  yearTime: [{ required: true, message: '年份必选', trigger: ['blur', 'change'] }],
  yearNum: [{ required: true, message: '月份必选', trigger: ['blur', 'change'] }],
  bizLabCode: [{ required: true, message: '实验室必选', trigger: ['blur', 'change'] }],
  beginTime: [{ required: true, message: '开始时间必选', trigger: ['blur', 'change'] }],
  endTime: [{ required: true, message: '结束时间必选', trigger: ['blur', 'change'] }],
  commanderId: [{ required: true, message: '质量负责人必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
onMounted(() => {
  if ($route.path.includes('create')) {
    // ruleForm.value.logTime = dayjs().format('YYYY-MM-DD HH:mm') // 记录时间
    // ruleForm.value.commanderId = userStore.id
    // ruleForm.value.createName = userStore.name
  }
  if (!$route.path.includes('create')) {
    detailReviewWork({ id: $route.query.id }).then((res) => {
      console.log(res.data, '详情')
      ruleForm.value = res.data
    })
  }
})
// 文件组件实例
const fileRef = ref()
const isSave = ref(false)
const saveRow = (data: any) => {
  ($route.path.includes('create') ? addReviewWork : updateReviewWork)(data).then((res) => {
    ElMessage.success('保存成功')
    isSave.value = true
    // $router.go(-1)
    // $router.push({
    //   path: '/qreview/qreviewwork',
    // })
  })
}
// 保存
const saveForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) { return }
  await formEl.validate((valid, fields) => {
    if (valid) {
      ElMessageBox.confirm(
        '确认保存吗?',
        '提示',
        {
          confirmButtonText: '确认',
          cancelButtonText: '取消',
          type: 'warning',
        },
      ).then((res) => {
        const data = {
          ...ruleForm.value,
          workName: `${ruleForm.value.yearTime}年第${ruleForm.value.yearNum}次管理评审`,
          reviewFileList: fileRef.value.list,
          managementStatus: '0'
        }
        saveRow(data)
      })
    }
  })
}
// 提交
const submitForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) { return }
  await formEl.validate((valid, fields) => {
    if (valid) {
      if (!isSave.value) {
        ElMessage.warning('请先保存再提交!')
        return
      }
      ElMessageBox.confirm(
        '确认提交吗?',
        '提示',
        {
          confirmButtonText: '确认',
          cancelButtonText: '取消',
          type: 'warning',
        },
      ).then((res) => {
        const data = {
          ...ruleForm.value,
          workName: `${ruleForm.value.yearTime}年第${ruleForm.value.yearNum}次管理评审`,
          reviewFileList: fileRef.value.list,
          managementStatus: '1'
        }
        updateReviewWork(data).then((res) => {
          ElMessage.success('添加成功')
          $router.push({
            path: '/qreview/qreviewwork',
          })
        })
      })
    }
  })
}
const labelList = ref<{ id: string; value: string; name: string }[]>()// 实验室+
const currentStageList = ref<{ id: string; value: string; name: string }[]>()// 归档状态+
const yearList = ref<{ id: string; value: string; name: string }[]>([])// 年度
const monthList = ref<{ id: string; value: string; name: string }[]>([])// 月份
const userList = ref<any[]>([])
// 获取字典值
const fetchDict = () => {
  // 获取实验室字典
  getDictByCode('bizLabCode').then((res) => {
    labelList.value = res.data
  })
  // 归档状态
  getDictByCode('managementReviewCurrentStage').then((res) => {
    currentStageList.value = res.data
  })
  // 循环出最近十年的year
  // 获取当前年份
  const year = new Date().getFullYear() + 5
  for (let i = year; i > year - 10; i--) {
    yearList.value?.push({
      name: String(i),
      value: String(i),
      id: String(i),
    })
  }
  yearList.value?.reverse()
  // 月份
  for (let i = 1; i < 13; i++) {
    monthList.value?.push({
      name: String(i),
      value: String(i),
      id: String(i),
    })
  }
  // 用户
  getUserList({ offset: 1, limit: 99999 }).then((res) => {
    userList.value = res.data.rows.filter((item: any) => item.roleName.includes('质量负责') || item.roleName.includes('质量监督'))
  })
}
fetchDict()
</script>

<template>
  <app-container style="overflow: hidden;">
    <detail-page title="管理评审工作管理">
      <template #btns>
        <el-button v-if="!$route.path.includes('detail')" type="primary" @click="submitForm(ruleFormRef)">
          提交
        </el-button>
        <el-button v-if="!$route.path.includes('detail')" type="primary" @click="saveForm(ruleFormRef)">
          保存
        </el-button>
        <el-button type="info" @click="() => $router.go(-1)">
          关闭
        </el-button>
      </template>
    </detail-page>
    <detail-block title="">
      <el-form
        ref="ruleFormRef" :model="ruleForm" :class="$route.path.includes('detail') ? 'isDetail' : ''"
        :rules="rules" label-position="right" label-width="120px" class="form"
        :disabled="$route.path.includes('detail')"
      >
        <el-row :gutter="24" class="marg">
          <el-col :span="6">
            <el-form-item label="审核工作名称" prop="createName">
              <el-form-item label="" label-width="0px" prop="yearTime">
                <el-select
                  v-model="ruleForm.yearTime" placeholder="年份" class="short-input" filterable
                  style="width: 80px;"
                >
                  <el-option v-for="item in yearList" :key="item.id" :label="item.name" :value="item.value" />
                </el-select>
                年第
              </el-form-item>
              <el-form-item label="" label-width="0px" prop="yearNum">
                <el-select
                  v-model="ruleForm.yearNum" placeholder="次数" class="short-input" filterable
                  style="width: 80px;"
                >
                  <el-option v-for="item in monthList" :key="item.id" :label="item.name" :value="item.value" />
                </el-select>
                次管理评审
              </el-form-item>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="实验室" prop="bizLabCode">
              <el-select
                v-model="ruleForm.bizLabCode" placeholder="实验室" class="short-input" filterable
                style="width: 100%;"
              >
                <el-option v-for="item in labelList" :key="item.id" :label="item.name" :value="item.value" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="开始时间" prop="beginTime">
              <el-date-picker
                v-model="ruleForm.beginTime" type="date" placeholder="开始时间" style="width: 100%;"
                value-format="YYYY-MM-DD" format="YYYY-MM-DD"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="结束时间" prop="endTime">
              <el-date-picker
                v-model="ruleForm.endTime" type="date" placeholder="结束时间" style="width: 100%;"
                value-format="YYYY-MM-DD" format="YYYY-MM-DD"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="6">
            <el-form-item label="质量负责人" prop="commanderId">
              <!-- <el-input v-model.trim="ruleForm.commanderId" placeholder="创建人" /> -->
              <el-select v-model="ruleForm.commanderId" filterable clearable placeholder="质量负责人" style="width: 100%;">
                <el-option v-for="(item) in userList" :key="item.id" :label="item.name" :value="item.id">
                  <span style="float: left;">{{ item.name }}</span>
                  <span style="float: right; color: #8492a6; font-size: 13px;">{{ item.deptName }}</span>
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="归档状态" prop="currentStage">
              <el-select
                v-model="ruleForm.currentStage" placeholder="归档状态" class="short-input" filterable
                style="width: 100%;"
              >
                <el-option v-for="item in currentStageList" :key="item.id" :label="item.name" :value="item.value" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </detail-block>
    <file-list ref="fileRef" :data="ruleForm.reviewFileList" />
  </app-container>
</template>

<style lang="scss" scoped>
.user-container {
  width: 100%;
  height: 120px;
  overflow-y: scroll;
  border: 1px solid #dcdfe6;
  border-radius: 5px;
}

.mx-1 {
  margin-top: 5px;
  margin-right: 5px;
  margin-left: 5px;
}
</style>