Newer
Older
xc-business-system / src / views / equipement / monitor / radio / detail.vue
dutingting on 29 Nov 17 KB 临时提交
<!-- 监测智能模型详情 -->
<script lang="ts" setup name="EquipementMonitorRadioDetail">
import { ref } from 'vue'
import { ElLoading, ElMessage } from 'element-plus'
import type { IForm } from './radio-interface'
import { getUserList } from '@/api/system/user'
import useUserStore from '@/store/modules/user'
import { getDictByCode } from '@/api/system/dict'
import type { deptType, dictType } from '@/global'
import countries from '@/components/AddressSelect/country-code.json'
import { getDeptTreeList } from '@/api/system/dept'
import { toTreeList } from '@/utils/structure'
import { addMonitorRadioList, getInfo, updateMonitorRadioList } from '@/api/equipment/monitor/radio'
const user = useUserStore() // 用户信息
const textMap: { [key: string]: string } = {
  edit: '编辑',
  add: '新建',
  detail: '详情',
}// 字典
const $router = useRouter() // 关闭页面使用
const $route = useRoute() // 路由参数
const pageType = ref('add') // 页面类型: add, edit, detail
const infoId = ref('') // 列表id
const countryList = ref(countries) // 国家列表
const ruleFormRef = ref() // 表单ref
const form = ref<IForm>({
  labCode: '', // 实验室代码
  // groupCode: '',	// 组别代码(字典code)
  equipmentNo: '', // 统一编号
  equipmentName: '', // 智能模型名称
  model: '', // 规格型号
  checkCycle: 0, // 检定周期
  transmitFrequencyBand: '', // 发射频段
  transmitPower: '', // 发射功率
  receiveFrequencyBand: '', // 接收频段
  receiverSensitivity: '', // 接收灵敏度
  belongSystem: '', // 所属系统
  spectralCharacteristics: '', // 频谱特征
  productCountry: '', // 生产国家
  manufacturer: '', // 厂商
  manufactureNo: '', // 出厂编号
  produceDate: '', // 生产日期
  traceCompany: '', // 溯源单位
  traceDate: '', // 溯源日期
  measureValidDate: '', // 检定有效期
  meterIdentifyName: '', // 计量标识
  meterIdentify: '', // 计量标识code
  createDept: '', // 所属部门
  createDeptId: '', // 所属部门id
  createUserId: '', // 负责人id
  createUserName: '', // 负责人
  location: '', // 地点
})
// 校验规则
const formRules = ref({
  equipmentName: [{ required: true, message: '智能模型名称不能为空', trigger: ['blur', 'change'] }],
  labCode: [{ required: true, message: '实验室代码不能为空', trigger: ['blur', 'change'] }],
  // groupCode: [{ required: true, message: '组别代码不能为空', trigger: ['blur', 'change'] }],
})
// -------------------------------------------字典------------------------------------------
const meterIdentifyDict = ref<dictType[]>([]) // 计量标识
const labCodeList = ref<dictType[]>([]) // 实验室代码
// const groupCodeList = ref<dictType[]>([]) // 组别代码
const userList = ref<{ [key: string]: string }[]>([]) // 用户列表
const useDeptList = ref<deptType[]>([]) // 所属部门列表
const deptList = ref<deptType[]>([]) // 所属部门列表
// 获取字典值
async function getDict() {
  // 计量标识
  getDictByCode('bizMeterIdentify').then((response) => {
    meterIdentifyDict.value = response.data
  })
  // 获取用户列表
  getUserList({ offset: 1, limit: 999999 }).then((res: any) => {
    userList.value = res.data.rows
  })
  // 获取部门列表
  getDeptTreeList().then((res) => {
    deptList.value = res.data
    // 转成树结构
    useDeptList.value = toTreeList(res.data, '0', true)
  })
  // 获取用户列表
  // getStaffList({ offset: 1, limit: 999999 }).then((res: any) => {
  //   userList.value = res.data.rows
  // })
  // 实验室代码
  getDictByCode('bizLabCode').then((response) => {
    labCodeList.value = response.data
  })
  // 组别代码
  // getDictByCode('bizGroupCode').then((response) => {
  //   groupCodeList.value = response.data
  // })
}
// ----------------------------------路由参数--------------------------------------------
if ($route.params && $route.params.type) {
  pageType.value = $route.params.type as string
  console.log(pageType.value)

  if ($route.params.id) {
    infoId.value = $route.params.id as string
  }
}
// -------------------------------------------按钮----------------------------------------------
// 关闭新增页面的回调
const close = () => {
  $router.back()
}

// 点击编辑按钮
const edit = () => {
  pageType.value = 'edit'
}

// 保存
const save = () => {
  ruleFormRef.value!.validate((valid: boolean) => {
    if (valid) {
      const loading = ElLoading.service({
        lock: true,
        background: 'rgba(255, 255, 255, 0.8)',
      })
      const params = {
        ...form.value,
        createDept: deptList.value.find(item => item.id === form.value.createDeptId)?.name,
        createUserName: userList.value.find(item => item.id === form.value.createUserId)?.name,
        id: infoId.value,
      }
      // 新建
      if (pageType.value === 'add') { // 新建
        addMonitorRadioList(params).then((res) => {
          ElMessage.success('保存成功')
          form.value.equipmentNo = res.data.equipmentNo // 统一编号
          pageType.value = 'detail'
          loading.close()
        }).catch(() => {
          loading.close()
        })
      }
      // 保存
      else if (pageType.value === 'edit') { // 编辑
        updateMonitorRadioList(params).then((res) => {
          ElMessage.success('保存成功')
          pageType.value = 'detail'
          loading.close()
        }).catch(() => {
          loading.close()
        })
      }
    }
    else {
      console.log('表单校验不通过')
    }
  })
}

// -------------------------------------------获取详情信息--------------------------------------------------
// 获取详情信息
const fetchInfo = () => {
  const loading = ElLoading.service({
    lock: true,
    background: 'rgba(255, 255, 255, 0.8)',
  })
  getInfo({ id: infoId.value }).then((res) => {
    form.value = res.data
    loading.close()
  })
}

onMounted(async () => {
  getDict().then(() => {
    if (pageType.value !== 'add') {
      fetchInfo()
    }
  })
})
</script>

<template>
  <app-container>
    <detail-page :title="`无线电库-${textMap[pageType]}`">
      <template #btns>
        <el-button v-if="pageType !== 'detail'" type="primary" @click="save">
          保存
        </el-button>
        <el-button v-if="pageType === 'detail'" type="primary" @click="edit">
          编辑
        </el-button>
        <el-button type="info" @click="close">
          关闭
        </el-button>
      </template>
      <el-form
        ref="ruleFormRef"
        :model="form"
        label-width="120"
        label-position="right"
        :rules="formRules"
      >
        <el-row :gutter="24">
          <el-col :span="6">
            <el-form-item label="实验室代码" prop="labCode">
              <el-select v-model="form.labCode" :placeholder="pageType === 'detail' ? ' ' : '请选择实验室代码'" :disabled="pageType === 'detail'" class="full-width-input">
                <el-option v-for="item in labCodeList" :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="groupCode">
              <el-select v-model="form.groupCode" :placeholder="pageType === 'detail' ? ' ' : '请选择组别代码'" :disabled="pageType === 'detail'" class="full-width-input">
                <el-option v-for="item in groupCodeList" :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="equipmentNo">
              <el-input v-model="form.equipmentNo" disabled placeholder="系统自动生成" />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="智能模型名称:" prop="equipmentName">
              <el-input
                v-model.trim="form.equipmentName"
                :placeholder="pageType === 'detail' ? '' : '请输入智能模型名称'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="规格型号" prop="model">
              <el-input
                v-model.trim="form.model"
                :placeholder="pageType === 'detail' ? '' : '请输入规格型号'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="检定周期(月)" prop="checkCycle">
              <el-input-number
                v-model="form.checkCycle"
                :placeholder="pageType === 'detail' ? '' : '请输入检定周期'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
                :min="0"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="发射频段" prop="transmitFrequencyBand">
              <el-input
                v-model.trim="form.transmitFrequencyBand"
                :placeholder="pageType === 'detail' ? '' : '请输入发射频段'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="发射功率" prop="transmitPower">
              <el-input
                v-model.trim="form.transmitPower"
                :placeholder="pageType === 'detail' ? '' : '请输入发射功率'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="接收频段" prop="receiveFrequencyBand">
              <el-input
                v-model.trim="form.receiveFrequencyBand"
                :placeholder="pageType === 'detail' ? '' : '请输入接收频段'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="接收灵敏度" prop="receiverSensitivity">
              <el-input
                v-model.trim="form.receiverSensitivity"
                :placeholder="pageType === 'detail' ? '' : '请输入接收灵敏度'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="所属系统" prop="belongSystem">
              <el-input
                v-model.trim="form.belongSystem"
                :placeholder="pageType === 'detail' ? '' : '请输入所属系统'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="频谱特征" prop="spectralCharacteristics">
              <el-input
                v-model.trim="form.spectralCharacteristics"
                type="textarea"
                autosize
                :placeholder="pageType === 'detail' ? '' : '请输入频谱特征'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="地点" prop="location">
              <el-input
                v-model.trim="form.location"
                type="textarea"
                autosize
                :placeholder="pageType === 'detail' ? '' : '请输入地点'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="生产国家:" prop="productCountry">
              <el-select
                v-model="form.productCountry"
                filterable
                :placeholder="pageType === 'detail' ? ' ' : '请选择生产国家'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              >
                <el-option v-for="country of countryList" :key="country.code" :label="country.CNName" :value="country.code" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="厂商:" prop="manufacturer">
              <el-input
                v-model.trim="form.manufacturer"
                :placeholder="pageType === 'detail' ? '' : '请输入厂商'"
                :class="{ 'detail-input': pageType === 'detail' }"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="出厂编号:" prop="manufactureNo">
              <el-input
                v-model.trim="form.manufactureNo"
                :placeholder="pageType === 'detail' ? '' : '请输入出厂编号'"
                :class="{ 'detail-input': pageType === 'detail' }"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="生产日期:" prop="produceDate">
              <el-date-picker
                v-model="form.produceDate"
                type="date"
                format="YYYY-MM-DD"
                value-format="YYYY-MM-DD"
                :placeholder="pageType === 'detail' ? ' ' : '请选择生产日期'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="溯源单位:" prop="traceCompany" style="flex: 1;">
              <el-input
                v-model="form.traceCompany"
                :disabled="pageType === 'detail'"
                :placeholder="pageType === 'detail' ? ' ' : '请输入溯源单位'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="溯源日期:" prop="traceDate" style="flex: 1;">
              <el-date-picker
                v-model="form.traceDate"
                type="date"
                :placeholder="pageType === 'detail' ? ' ' : '请选择日期'"
                format="YYYY-MM-DD"
                value-format="YYYY-MM-DD"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="检定有效期:" prop="measureValidDate" style="flex: 1;">
              <el-date-picker
                v-model="form.measureValidDate"
                type="date"
                :placeholder="pageType === 'detail' ? ' ' : '请选择日期'"
                format="YYYY-MM-DD"
                value-format="YYYY-MM-DD"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="计量标识:" prop="meterIdentify" style="flex: 1;">
              <el-select
                v-model="form.meterIdentify"
                :placeholder="pageType === 'detail' ? ' ' : '请选择计量标识'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              >
                <el-option v-for="item of meterIdentifyDict" :key="item.value" :label="item.name" :value="item.value" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="所属部门" prop="createDeptId">
              <dept-select v-model="form.createDeptId" :data="useDeptList" :disabled="pageType === 'detail'" :placeholder="pageType === 'detail' ? ' ' : '所属部门'" />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="负责人" prop="createUserId">
              <el-select
                v-model.trim="form.createUserId"
                placeholder="请选择负责人"
                filterable
                :disabled="pageType === 'detail'"
                class="full-width-input"
              >
                <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </detail-page>
  </app-container>
</template>

<style lang="scss" scoped>
.step {
  line-height: 28px;
  font-size: 20px;
  color: #3d7eff;
  font-weight: bold;
  margin-bottom: 5px;
  width: fit-content;
}
</style>

<style lang="scss">
.fieldtest-record-detail {
  .el-table thead.is-group th.el-table__cell {
    background: #f2f6ff;
  }
}
</style>