Newer
Older
xc-business-system / src / views / business / manager / sendReceive / components / basic.vue
dutingting on 16 Aug 2023 20 KB 修复报错
<!-- 设备收发管理详情 -- 基本信息 -->
<script name="SendReceiveDetailBasic" lang="ts" setup>
import type { Ref } from 'vue'
import dayjs from 'dayjs'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import type { IBasicForm } from '../sendReceive-interface'
import templateTable from './components/templateTable.vue'
import type { IAccessory, Itech } from '@/views/equipement/info/book/book-interface'
import { getDictByCode } from '@/api/system/dict'
import countries from '@/components/AddressSelect/country-code.json'
import type { deptType, dictType } from '@/global'
import { getDeptTreeList } from '@/api/system/dept'
import { getUserList } from '@/api/system/user'
import showPhoto from '@/components/showPhoto/index.vue'
import { toTreeList } from '@/utils/structure'
import useUserStore from '@/store/modules/user'
const user = useUserStore() // 用户信息
const countryList = ref(countries) // 国家列表
const form: Ref<IBasicForm> = ref({ // 基本信息表单
  equipmentNo: '', // 统一编号
  equipmentName: '', // 设备名称
  model: '', // 型号规格
  type: '', // 设备类型
  productCountry: '', // 生产国家
  manufacturer: '', // 生产厂家
  manufactureNo: '', // 出厂编号
  produceDate: '', // 生产日期
  333: '', // 使用年限
  unitPrice: 0, // 设备单价(万元)
  purchaseDate: '', // 购进日期
  qualityStatus: '', // 质量状况
  tzsb: '', // 是否是特种设备
  qzjd: '', // 是否强制检定
  ABC: '', // ABC
  measureCycle: 0, // 检定周期
  azdw: 0, // 所在单位
  deptId: '', // 使用部门id
  deptName: '', // 使用部门
  level: '', // 重要等级
  usageStatus: '', // 使用状态
  jszb: '', // 技术指标
  instructionsFile: '', // 说明书
  traceCompany: '', // 溯源单位
  traceDate: '', // 溯源日期
  measureValidDate: '', // 检定有效期
  meterIdentify: '', // 计量标识
  fileList: [], // 文件列表

  sygw: '', // 使用岗位
  fzr: '', // 负责人
  RFID: '', // RFID标签绑定
  zyxx: '', // 在用信息
  csrw: '', // 参试任务
  azwz: '', // 安装位置
  remark: '', // 备注
})
// ------------------------------------技术指标-------------------------------------------
const technicalIndexList = ref<Itech[]>([]) // 技术指标列表
const technicalIndexColumns = [ // 技术指标表头
  { text: '测量范围', value: 'limit', required: true },
  { text: '不确定度或允许误差极限或准确度等级', value: 'du', required: true },
  { text: '依据的技术文件', value: 'zb', required: true },
]
// -------------------------------------主附件信息----------------------------------------
const accessoryList = ref<IAccessory[]>([]) // 主附件信息
const accessoryColumns = [ // 主附件信息
  { text: '名称', value: 'name', required: true },
  { text: '信息', value: 'info', required: true },
  { text: '位置', value: 'position', required: true },
]
// ------------------------------------------字典----------------------------------------------
const meterIdentifyDict = ref<dictType[]>([]) // 计量标识
const usageStatusList = ref<dictType[]>([]) // 使用状态
const levelList = ref<dictType[]>([]) // 重要等级
const typeList = ref<dictType[]>([]) // 设备类型
const standardTypeList = ref<dictType[]>([]) // 标准类型
const useDeptList = ref<deptType[]>([]) // 所属部门列表
const userList = ref<{ [key: string]: string }[]>([]) // 用户列表
const categoryList = ref<dictType[]>([]) // 设备分类
const approveTypeList = ref<dictType[]>([]) // 审批类型
const ABCList = ref<dictType[]>([]) // ABC
const useInfoList = ref<dictType[]>([]) // 在用信息
const positionList = ref<deptType[]>([]) // 安装位置列表
const whetherList = [ // 是否字典
  {
    id: '1',
    name: '是',
  },
  {
    id: '0',
    name: '否',
  },
]
/**
 * 获取字典
 */
function getDict() {
  // 计量标识
  getDictByCode('bizMeterIdentify').then((response) => {
    meterIdentifyDict.value = response.data
  })
  // 使用状态
  getDictByCode('bizUsageStatus').then((response) => {
    usageStatusList.value = response.data
  })
  // 重要等级
  getDictByCode('bizEquipmentLevel').then((response) => {
    levelList.value = response.data
  })
  // 设备类型
  getDictByCode('bizEquipmentType').then((response) => {
    typeList.value = response.data
  })
  // 标准类型
  getDictByCode('bizStandardType').then((response) => {
    standardTypeList.value = response.data
  })
  // 获取部门列表
  getDeptTreeList().then((res) => {
    // 转成树结构
    useDeptList.value = toTreeList(res.data, '0', true)
  })
  // 获取用户列表
  getUserList({ offset: 1, limit: 999999 }).then((res: any) => {
    userList.value = res.data.rows
  })
  // 设备分类
  getDictByCode('bizEquipmentCategory').then((response) => {
    categoryList.value = response.data
  })
  // 审批类型
  getDictByCode('approvalType').then((response) => {
    approveTypeList.value = response.data
  })
  // ABC
  getDictByCode('ABC').then((response) => {
    ABCList.value = response.data
  })
  // 使用信息
  getDictByCode('').then((response) => {
    useInfoList.value = response.data
  })
  // 获取安装位置
  // getPositonList().then((res) => {
  //   // 转成树结构
  //   positionList.value = toTreeList(res.data, '0', true)
  // })
}
// -------------------------------------------------------------------------------------------
onMounted(async () => {
  await getDict() // 获取字典
})
</script>

<template>
  <detail-block title="">
    <el-form
      ref="ruleFormRef"
      :model="form"
      :label-width="120"
      label-position="right"
    >
      <el-row :gutter="24" class="marg">
        <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=" "
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="型号规格" prop="model">
            <el-input
              v-model.trim="form.model"
              placeholder=" "
              disabled
              class="full-width-input"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="设备类型:" prop="type">
            <el-select
              v-model.trim="form.type"
              clearable
              placeholder=" "
              size="default"
              disabled
              class="full-width-input"
            >
              <el-option
                v-for="item in typeList"
                :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="productCountry">
            <el-select
              v-model="form.productCountry"
              filterable
              placeholder=" "
              disabled
              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=" "
              class="detail-input"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="出厂编号:" prop="manufactureNo">
            <el-input
              v-model.trim="form.manufactureNo"
              placeholder=" "
              class="detail-input"
              disabled
            />
          </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=" "
              disabled
              class="full-width-input"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="使用年限:" prop="333">
            <el-input
              v-model="form[333]"
              class="detail-input"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="设备单价(万元)" prop="singlePrice">
            <el-input-number
              v-model="form.unitPrice"
              placeholder=" "
              disabled
              :precision="4"
              :step="0.1"
              :min="0"
              class="full-width-input"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="购进日期:" prop="purchaseDate">
            <el-date-picker
              v-model="form.purchaseDate"
              type="date"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              placeholder=" "
              disabled
              class="full-width-input"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="质量状况" prop="qualityStatus">
            <el-input
              v-model.trim="form.qualityStatus"
              placeholder=" "
              disabled
              class="full-width-input"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="是否是特种设备:" prop="tzsb">
            <el-select
              v-model.trim="form.tzsb"
              clearable
              placeholder=" "
              size="default"
              disabled
              class="full-width-input"
            >
              <el-option
                v-for="item in whetherList"
                :key="item.id"
                :label="item.name"
                :value="item.id"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="是否强制检定:" prop="qzjd">
            <el-select
              v-model.trim="form.qzjd"
              clearable
              placeholder=" "
              size="default"
              disabled
              class="full-width-input"
            >
              <el-option
                v-for="item in whetherList"
                :key="item.id"
                :label="item.name"
                :value="item.id"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="ABC:" prop="ABC">
            <el-select
              v-model.trim="form.ABC"
              clearable
              placeholder=" "
              size="default"
              disabled
              class="full-width-input"
            >
              <el-option
                v-for="item in ABCList"
                :key="item.id"
                :label="item.name"
                :value="item.id"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="检定周期(月)" prop="measureCycle">
            <el-input-number
              v-model="form.measureCycle"
              disabled
              class="full-width-input"
              :min="0"
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="所在单位:">
            <el-input
              v-model="form.azdw"
              type="textarea"
              autosize
              disabled
              class="detail-input"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="使用部门" prop="deptId">
            <dept-select v-model="form.deptId" :data="useDeptList" disabled placeholder=" " />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="重要等级:" prop="level">
            <el-select
              v-model.trim="form.level"
              clearable
              placeholder=" "
              size="default"
              disabled
              class="full-width-input"
            >
              <el-option
                v-for="item in levelList"
                :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="usageStatus">
            <el-select
              v-model.trim="form.usageStatus"
              clearable
              placeholder=" "
              size="default"
              disabled
              class="full-width-input"
            >
              <el-option
                v-for="item in usageStatusList"
                :key="item.id"
                :label="item.name"
                :value="item.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-col :span="24">
          <el-form-item label="说明书:">
            <div v-for="(item, index) in form.instructionsFile" :key="index" style="display: flex;" />
            <span v-if="!form.instructionsFile.length">无</span>
            <input v-show="false" ref="fileRef" type="file" name="upload" multiple>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </detail-block>
  <!-- 溯源信息表单 -->
  <detail-block title="">
    <el-form
      ref="sourceFormRef"
      :model="form"
      :label-width="120"
      label-position="right"
      style="display: flex;flex-wrap: nowrap;"
    >
      <el-form-item label="溯源单位:" prop="traceCompany" style="flex: 1;">
        <el-input
          v-model="form.traceCompany"
          disabled
        />
      </el-form-item>
      <el-form-item label="溯源日期:" prop="traceDate" style="flex: 1;">
        <el-date-picker
          v-model="form.traceDate"
          type="date"
          format="YYYY-MM-DD"
          value-format="YYYY-MM-DD"
          disabled
          class="full-width-input"
        />
      </el-form-item>
      <el-form-item label="检定有效期:" prop="measureValidDate" style="flex: 1;">
        <el-date-picker
          v-model="form.measureValidDate"
          type="date"
          format="YYYY-MM-DD"
          value-format="YYYY-MM-DD"
          disabled
          class="full-width-input"
        />
      </el-form-item>
      <el-form-item label="计量标识:" prop="meterIdentify" style="flex: 1;">
        <el-select
          v-model="form.meterIdentify"
          placeholder=" "
          disabled
          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-form>
  </detail-block>
  <!-- 技术指标 -->
  <detail-block title="技术指标">
    <el-table
      ref="techRef"
      :data="technicalIndexList"
      border
      style="width: 100%;"
    >
      <el-table-column align="center" label="序号" width="80" type="index" />
      <el-table-column
        v-for="item in technicalIndexColumns"
        :key="item.value"
        :prop="item.value"
        :label="item.text"
        align="center"
      />
    </el-table>
  </detail-block>

  <!-- 组别信息 -->
  <detail-block title="">
    <el-form
      ref="sourceFormRef"
      :model="form"
      :label-width="120"
      label-position="right"
    >
      <el-row :gutter="24" class="marg">
        <el-col :span="6">
          <el-form-item label="使用岗位:" prop="sygw">
            <el-input
              v-model="form.sygw"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="负责人:" prop="fzr">
            <el-input
              v-model="form.fzr"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="RFID标签绑定:" prop="RFID">
            <el-input
              v-model="form.RFID"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="在用信息:" prop="zyxx">
            <el-select
              v-model.trim="form.zyxx"
              clearable
              placeholder=" "
              size="default"
              disabled
              class="full-width-input"
            >
              <el-option
                v-for="item in useInfoList"
                :key="item.id"
                :label="item.name"
                :value="item.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-form-item label="组别信息:" style="display: flex;width: 100%;flex-wrap: wrap;">
          <div v-for="(item, index) in ['1', '2', '3', '4', '5']" :key="index">
            <el-input
              readonly
              style="width: fit-content ; margin-left: 10px;"
              disabled
            />
          </div>
        </el-form-item>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-col :span="18">
          <el-form-item label="安装位置:">
            <div style="display: flex;width: 100%; align-items: center;">
              <dept-select v-model="form.azwz" style="width: 320px;" :data="positionList" disabled placeholder=" " />
              <el-input
                v-model="form.azwz"
                style="flex: 1;margin-left: 10px;"
                disabled
              />
            </div>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-col :span="12">
          <el-form-item label="参试任务:">
            <el-input
              v-model="form.csrw"
              type="textarea"
              autosize
              disabled
              class="detail-input"
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-col :span="12">
          <el-form-item label="备注:">
            <el-input
              v-model="form.remark"
              type="textarea"
              autosize
              disabled
              class="detail-input"
            />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </detail-block>

  <!-- 主附件信息 -->
  <detail-block title="主附件信息">
    <el-table
      ref="accessoryRef"
      :data="accessoryList"
      border
      style="width: 100%;"
    >
      <el-table-column align="center" label="序号" width="80" type="index" />
      <el-table-column
        v-for="item in accessoryColumns"
        :key="item.value"
        :prop="item.value"
        :label="item.text"
        align="center"
      >
        <template #header>
          <span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span>
        </template>
        <template #default="scope">
          <span v-if="!scope.row.editable">{{ scope.row[item.value] }}</span>
          <el-input v-else v-model="scope.row[item.value]" :autofocus="true" :placeholder="`${item.text}`" class="input" />
        </template>
      </el-table-column>
    </el-table>
  </detail-block>
</template>

<style lang="scss" scoped>
.link {
  text-decoration: underline;
  color: #3d7eff;
  cursor: pointer;
}

.file-area {
  display: flex;
  align-items: center;
  font-size: 14px;
  color: #60627f;
  margin-bottom: 10px;
  margin-left: 40px;
  white-space: nowrap;

  .tech-file {
    display: flex;
    align-items: center;
    margin-left: 20px;

    .file-text {
      margin-right: 10px;
    }
  }
}
</style>