spring
2025-03-06 a8fa33e79abe005353d7f152ef3ece820433f4f6
Merge branch 'dev' of http://114.132.189.42:9002/r/center-lims-before-ruoyi into dev
已添加4个文件
1339 ■■■■■ 文件已修改
src/api/structural/capability.js 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/capability/index.vue 609 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue 437 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/capabilityComponents/testObjectEditForm.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/structural/capability.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
import request from '@/utils/request'
// èŽ·å–æ£€éªŒé¡¹ç›®å‚æ•°
export function selectItemParameterList(query) {
  return request({
    url: '/capacityScope/selectItemParameterList',
    method: 'get',
    params: query
  })
}
// èŽ·å–æ£€æµ‹å¯¹è±¡
export function selectTestObjectList(query) {
  return request({
    url: '/capacityScope/selectTestObjectList',
    method: 'get',
    params: query
  })
}
// æ–°å¢žæ£€éªŒé¡¹ç›®å‚æ•°
export function addItemParameter(query) {
  return request({
    url: '/capacityScope/addItemParameter',
    method: 'post',
    data: query
  })
}
// åˆ é™¤æ£€éªŒé¡¹ç›®å‚æ•°
export function delItemParameter(query) {
  return request({
    url: '/capacityScope/delItemParameter',
    method: 'delete',
    params: query
  })
}
// ä¿®æ”¹æ£€éªŒé¡¹ç›®å‚æ•°
export function upItemParameter(query) {
  return request({
    url: '/capacityScope/upItemParameter',
    method: 'post',
    data: query
  })
}
// èŽ·å–æ£€éªŒå¯¹è±¡æ ‘
export function getItemTree() {
  return request({
    url: '/capacityScope/getItemTree',
    method: 'get'
  })
}
// æ–°å¢žæ£€æµ‹å¯¹è±¡
export function addTestObject(query) {
  return request({
    url: '/capacityScope/addTestObject',
    method: 'post',
    data: query
  })
}
// åˆ é™¤æ£€æµ‹å¯¹è±¡
export function delTestObject(query) {
  return request({
    url: '/capacityScope/delTestObject',
    method: 'delete',
    params: query
  })
}
// ä¿®æ”¹æ£€æµ‹å¯¹è±¡
export function upTestObject(query) {
  return request({
    url: '/capacityScope/upTestObject',
    method: 'post',
    data: query
  })
}
// æŸ¥è¯¢æ£€éªŒå¯¹è±¡çš„产品维护列表
export function selectProductListByObjectId(query) {
  return request({
    url: '/capacityScope/selectProductListByObjectId',
    method: 'get',
    params: query
  })
}
// æ–°å¢žäº§å“
export function addProduct(query) {
  return request({
    url: '/capacityScope/addProduct',
    method: 'post',
    data: query
  })
}
// åˆ é™¤äº§å“
export function delProduct(query) {
  return request({
    url: '/capacityScope/delProduct',
    method: 'delete',
    params: query
  })
}
// ä¿®æ”¹äº§å“
export function upProduct(query) {
  return request({
    url: '/capacityScope/upProduct',
    method: 'post',
    data: query
  })
}
// èŽ·å–å®žéªŒå®¤åç§°
export function obtainItemParameterList() {
  return request({
    url: '/laboratoryScope/obtainItemParameterList',
    method: 'get',
  })
}
// æŸ¥è¯¢åŽŸå§‹è®°å½•æ¨¡æ¿æžšä¸¾
export function getStandardTemplate() {
  return request({
    url: '/StandardTemplate/getStandardTemplate',
    method: 'get',
  })
}
// æ ¹æ®äº§å“id查询厂家密度绑定
export function selectSupplierDensityByProductId(query) {
  return request({
    url: '/productSupplierDensity/selectSupplierDensityByProductId',
    method: 'get',
    params: query
  })
}
// æ–°å¢žäº§å“åŽ‚å®¶å¯†åº¦ç»‘å®š
export function addProductSupplierDensity(query) {
  return request({
    url: '/productSupplierDensity/addProductSupplierDensity',
    method: 'post',
    data: query
  })
}
// ä¿®æ”¹äº§å“åŽ‚å®¶å¯†åº¦ç»‘å®š
export function updateProductSupplierDensity(query) {
  return request({
    url: '/productSupplierDensity/updateProductSupplierDensity',
    method: 'post',
    data: query
  })
}
// åˆ é™¤äº§å“åŽ‚å®¶å¯†åº¦ç»‘å®š
export function deleteProductSupplierDensity(query) {
  return request({
    url: '/productSupplierDensity/deleteProductSupplierDensity',
    method: 'delete',
    params: query
  })
}
src/views/structural/capabilityAndLaboratory/capability/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,609 @@
<template>
  <div class="capacity-scope">
    <div>
      <el-row class="title">
        <el-col :span="12" style="text-align: left">
          <el-radio-group v-model="radio" size="medium" fill="#409EFF" @change="refreshTable">
            <el-radio-button :label="0">检验项目参数</el-radio-button>
            <el-radio-button :label="1">检验对象</el-radio-button>
          </el-radio-group>
        </el-col>
        <el-col :span="12" style="text-align: right;">
          <el-upload v-if="radio === 0" ref='upload1'
                     style="display: inline;margin-right: 8px"
                     :action="uploadAction1"
                     :before-upload="beforeUpload1" :headers="token" :on-error="onError1"
                     :on-success="handleSuccessUp1" :show-file-list="false" accept='.doc,.docx,.xls,.xlsx'>
            <el-button size="small" type="primary">导入</el-button>
          </el-upload>
          <el-button size="small" type="primary" v-if="radio === 1" @click="uploadDia = true">导入</el-button>
          <el-button size="small" type="primary" @click="openAdd()">新增</el-button>
        </el-col>
      </el-row>
    </div>
    <div>
      <el-form :model="itemParameterForm" ref="itemParameterForm" size="small" :inline="true">
        <el-form-item label="检验项" prop="inspectionItem" v-if="radio===0">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.inspectionItem" @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item label="检验子项" prop="inspectionItemSubclass" v-if="radio===0">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.inspectionItemSubclass" @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item label="检验对象" prop="specimenName">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.specimenName" @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">查 è¯¢</el-button>
          <el-button icon="el-icon-refresh" size="mini" @click="refresh">重 ç½®</el-button>
        </el-form-item>
      </el-form>
<!--      æ£€éªŒé¡¹ç›®å‚数表格-->
      <div class="table" v-if="radio===0">
        <lims-table :tableData="tableData" :column="column" key="tableData"
                    @pagination="pagination" :height="'calc(100vh - 290px)'"
                    :page="page" :tableLoading="tableLoading"></lims-table>
      </div>
<!--      æ£€éªŒå¯¹è±¡è¡¨æ ¼-->
      <div class="table" v-if="radio===1">
        <lims-table :tableData="testObjectTableData" :column="testObjectColumn" key="testObjectTableData"
                    @pagination="pagination" :height="'calc(100vh - 290px)'"
                    :page="testObjectPage" :tableLoading="tableLoading"></lims-table>
      </div>
    </div>
    <!--产品维护弹框-->
    <el-dialog title="产品维护" :visible.sync="diaProduct" width="900px">
      <lims-table :tableData="productData" :column="productColumn" height="460"
                  :page="productPage" :tableLoading="productableLoading"></lims-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="diaProduct = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="editProduct('add')" :loading="productLoad">新 å¢ž</el-button>
      </span>
    </el-dialog>
    <!--产品维护编辑-->
    <el-dialog title="操作产品维护" :visible.sync="productEditDia" width="400px">
      <el-form :model="productEditForm" ref="productEditForm" :rules="productRules" label-position="right" label-width="100px">
        <el-form-item label="产品名称" prop="name">
          <el-input size="small" placeholder="请输入" clearable v-model="productEditForm.name"></el-input>
        </el-form-item>
        <el-form-item label="产品名称EN" prop="nameEn">
          <el-input size="small" placeholder="请输入" clearable v-model="productEditForm.nameEn">
          </el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeProduct">取 æ¶ˆ</el-button>
        <el-button :loading="uploading" type="primary" @click="submitProduct">ç¡® è®¤</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="uploadDia" title="数据导入" width="500px">
      <div style="margin: 0 auto;">
        <el-upload ref="upload" :action="uploadAction"
                   :auto-upload="false" :file-list="fileList"
                   :headers="token" :limit="1"
                   :on-change="beforeUpload" :on-error="onError" :on-success="onSuccess" accept=".xlsx" drag
                   name="file">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="uploadDia = false">取 æ¶ˆ</el-button>
        <el-button :loading="uploading" type="primary" @click="submitUpload()">上 ä¼ </el-button>
      </span>
    </el-dialog>
    <!--检验项目参数-编辑弹框-->
    <EditForm ref="editForm" @refreshList="refreshList1"></EditForm>
    <testObjectEditForm ref="testObjectEditForm" @refreshList="refreshList"></testObjectEditForm>
  </div>
</template>
<script>
import {
  addProduct,
  delItemParameter, delProduct, delTestObject, selectItemParameterList, selectProductListByObjectId,
  selectTestObjectList, upProduct,
} from "@/api/structural/capability";
import limsTable from "@/components/Table/lims-table.vue";
import EditForm from "@/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue";
import testObjectEditForm from "@/views/structural/capabilityAndLaboratory/capabilityComponents/testObjectEditForm.vue";
import {getToken} from "@/utils/auth";
import { obtainItemParameterList } from '@/api/structural/laboratoryScope'
export default {
  components: {limsTable, EditForm, testObjectEditForm},
  data() {
    return {
      uploadAction: process.env.VUE_APP_BASE_API + '/capacityScope/importExcel',
      uploadAction1: process.env.VUE_APP_BASE_API + '/capacityScope/importEquipData',
      tableData: [],
      tableLoading: false,
      column: [
        {label: '检验项', prop: 'inspectionItem'},
        {label: '检验项EN', prop: 'inspectionItemEn'},
        {label: '检验子项', prop: 'inspectionItemSubclass'},
        {label: '检验子项EN', prop: 'inspectionItemSubclassEn'},
        {label: '检验项分类', prop: 'inspectionItemClass'},
        {label: '检验项分类EN', prop: 'inspectionItemClassEn'},
        {label: '检验对象', prop: 'sample'},
        {label: '单价(元)', prop: 'price'},
        {label: '试验室', prop: 'sonLaboratory'},
        {label: '要求描述', prop: 'askTell'},
        {label: '要求值', prop: 'ask'},
        {label: '计量单位', prop: 'unit'},
        {label: '工时(H)', prop: 'manHour'},
        {label: '预计时间(H)', prop: 'manDay'},
        {label: '工时分组', prop: 'manHourGroup'},
        {label: '创建时间', prop: 'createTime'},
        {label: '修改时间', prop: 'updateTime'},
        {label: '条件', prop: 'radiusList'},
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          width: '140px',
          operation: [
            {
              name: '编辑',
              type: 'text',
              clickFun: (row) => {
                this.editForm(row);
              },
            },
            {
              name: '删除',
              type: 'text',
              clickFun: (row) => {
                this.delete(row);
              },
            },
          ]
        }
      ],
      page: {
        total:0,
        size:10,
        current:1
      },
      testObjectTableData: [],
      testObjectColumn: [
        {
          dataType: 'tag',
          label: '场所',
          prop: 'laboratoryId',
          minWidth: '130',
          formatData: (params) => {
            let index = this.laboratoryList.findIndex(item => item.value == params)
            if(index > -1) {
              return this.laboratoryList[index].label
            }else {
              return null
            }
            // if (params == 1) {
            //   return '装备电缆试验室'
            // } else if (params == 5) {
            //   return '通信产品实验室'
            // } else if (params == 6) {
            //   return '电力产品实验室'
            // } else if (params == 8) {
            //   return '储能产品实验室'
            // } else {
            //   return '射频线缆实验室'
            // }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else if (params == 5) {
              return 'info'
            } else if (params == 6) {
              return 'warning'
            } else if (params == 8) {
              return 'danger'
            } else {
              return null
            }
          }
        },
        {label: '检验对象', prop: 'specimenName'},
        {label: '检验对象EN', prop: 'specimenNameEn'},
        {label: '产品', prop: 'product'},
        {label: '对象代号', prop: 'code'},
        {label: '对象类型', prop: 'objectType',
          dataType: 'tag',
          formatData: (params) => {
            if (params == 1) {
              return '原材料'
            } else if (params == 2) {
              return '成品'
            } else {
              return '辅材'
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else if (params == 2) {
              return 'info'
            } else {
              return 'warning'
            }
          }},
        {label: '创建人', prop: 'createUserName'},
        {label: '更新人', prop: 'updateUserName'},
        {label: '创建时间', prop: 'createTime'},
        {label: '更新时间', prop: 'updateTime'},
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          width: '240px',
          operation: [
            {
              name: '编辑',
              type: 'text',
              clickFun: (row) => {
                this.editTestObjectForm(row);
              },
            },
            {
              name: '删除',
              type: 'text',
              clickFun: (row) => {
                this.deleteTest(row);
              },
            },
            {
              name: '产品维护',
              type: 'text',
              clickFun: (row) => {
                this.upProduct(row);
              },
            },
          ]
        }
      ],
      testObjectPage: {
        total:0,
        size:10,
        current:0
      },
      addOrUpdate: '',
      tree: null,
      loading: true,
      itemParameterForm: {
        inspectionItem: null,
        inspectionItemSubclass: null,
        specimenName: null
      },
      radio: 0,
      productLoad: false,
      diaProduct: false,
      productColumn: [
        {label: '产品名称', prop: 'name'},
        {label: '产品名称EN', prop: 'nameEn'},
        {
          dataType: 'action',
          label: '操作',
          operation: [
            {
              name: '编辑',
              type: 'text',
              clickFun: (row) => {
                this.editProduct('edit', row);
              },
            },
            {
              name: '删除',
              type: 'text',
              clickFun: (row) => {
                this.deleteProduct(row);
              },
            },
          ]
        }
      ],
      productData: [],
      productPage: {
        total:0,
        size:10,
        current:0,
        layout: 'total, prev, pager, next'
      },
      productableLoading: false,
      productEditDia: false,
      operationType: '',
      productEditForm: {
        objectId: '',
        id: '',
        name: '',
        nameEn: ''
      },
      objectId: '',
      productRules: {
        name: [{ required: true, message: '请填写产品名称', trigger: 'blur' }],
        nameEn: [{ required: true, message: '请填写产品名称EN', trigger: 'blur' }]
      },
      uploadDia: false,
      fileList: [],
      token: {Authorization: "Bearer " + getToken()},
      uploading: false,
      laboratoryList:[]
    }
  },
  created() {
    this.getItemParameterList()
    this.refreshTable()
  },
  computed: {
    title() {
      return this.addOrUpdate === 1 ? '新增' : '编辑'
    }
  },
  methods: {
    submitUpload() {
      if (this.$refs.upload.uploadFiles.length === 0) {
        this.$message.error('未选择文件')
        return
      }
      this.uploading = true
      this.$refs.upload.submit();
    },
    onSuccess(response, file, fileList) {
      this.$refs.upload.clearFiles()
      this.uploadDia = false
      this.uploading = false
      if (response.code !== 200) {
        this.$message.error(response.msg)
        return
      }
      this.$message.success('上传成功')
      this.productList = []
      this.refreshTable()
    },
    onError(err, file, fileList) {
      this.$message.error('上传失败')
      this.$refs.upload.clearFiles()
      this.uploading = false
    },
    beforeUpload(file, fileList) {
      if (file.size > 1024 * 1024 * 10) {
        this.$message.error('上传文件不超过10M');
        this.$refs.upload.clearFiles()
        return false;
      } else {
        return true;
      }
    },
    onError1(err, file, fileList) {
      this.$message.error('上传失败')
      this.$refs.upload1.clearFiles()
      this.uploading = false
    },
    beforeUpload1(file, fileList) {
      if (file.size > 1024 * 1024 * 10) {
        this.$message.error('上传文件不超过10M');
        this.$refs.upload1.clearFiles()
        return false;
      } else {
        return true;
      }
    },
    handleSuccessUp1 (response, file, fileList) {
      this.$refs.upload1.clearFiles()
      if (response.code !== 200) {
        this.$message.error(response.msg)
        return
      }
      this.$message.success('上传成功')
      this.refreshTable()
    },
    refreshList () {
      this.refreshTable()
    },
    refreshList1 () {
      this.refreshTable()
    },
    refreshTable() {
      this.tableLoading = true
      if (this.radio === 0) {
        selectItemParameterList({...this.page, ...this.itemParameterForm}).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.tableData = res.data.records
            this.page.total = res.data.total
          }
        }).catch(err => {
          this.tableLoading = false
        })
      } else {
        selectTestObjectList({...this.testObjectPage, ...this.itemParameterForm}).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.testObjectTableData = res.data.records
            this.testObjectPage.total = res.data.total
          }
        }).catch(err => {
          this.tableLoading = false
        })
      }
    },
    refresh() {
      this.resetForm('itemParameterForm')
      this.page.current = 1
      this.refreshTable()
    },
    pagination (page) {
      this.page.size = page.limit
      this.refreshTable()
    },
    // æ£€éªŒé¡¹ç›®å‚数新增
    openAdd() {
      if (this.radio === 0) {
        this.$refs.editForm.openDia('add')
      } else {
        this.$refs.testObjectEditForm.openDia('add')
      }
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-打开修改弹框
    editForm (row) {
      this.$refs.editForm.openDia('edit', row)
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-删除
    delete (row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delItemParameter({id:row.id}).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.refreshTable();
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      })
    },
    // æ£€éªŒå¯¹è±¡-打开修改弹框
    editTestObjectForm (row) {
      this.$refs.testObjectEditForm.openDia('edit', row)
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-删除
    deleteTest (row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delTestObject({id:row.id}).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.refreshTable();
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      })
    },
    // äº§å“ç»´æŠ¤
    upProduct(row) {
      this.diaProduct = true
      this.objectId = row.id
      this.getProductList(row)
    },
    getProductList () {
      const params = {
        objectId: this.objectId,
      }
      this.productableLoading = true
      selectProductListByObjectId({...params, ...this.productPage}).then(res => {
        this.productableLoading = false
        this.productData = res.data.records
        this.productPage.total = res.data.total
      }).catch(err => {
        this.productableLoading = false
      })
    },
    // äº§å“ç»´æŠ¤-新增-编辑
    editProduct (type, row) {
      this.productEditDia = true
      this.operationType = type
      if (type === 'edit') {
        this.productEditForm = this.HaveJson(row)
      }
    },
    // æäº¤äº§å“ç»´æŠ¤ä¿®æ”¹
    submitProduct () {
      this.$refs['productEditForm'].validate((valid) => {
        if (valid) {
          this.uploading = true
          this.productEditForm.objectId = this.objectId
          if (this.operationType === 'add') {
            addProduct(this.productEditForm).then(res => {
              this.uploading = false
              if (res.code === 200) {
                this.$message.success('新增成功')
                this.closeProduct()
                this.getProductList();
              }
            }).catch(err => {
              this.uploading = false
            })
          } else {
            upProduct(this.productEditForm).then(res => {
              this.uploading = false
              if (res.code === 200) {
                this.$message.success('新增成功')
                this.closeProduct()
                this.getProductList();
              }
            }).catch(err => {
              this.uploading = false
            })
          }
        }
      })
    },
    closeProduct() {
      this.resetForm('productEditForm')
      this.productEditDia = false
    },
    // äº§å“ç»´æŠ¤-删除
    deleteProduct (row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delProduct({id:row.id}).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.getProductList();
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      })
    },
    getItemParameterList(){
      obtainItemParameterList().then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.laboratoryName,
            value: a.id
          })
        })
        this.laboratoryList = data
      })
    }
  }
}
</script>
<style scoped>
.capacity-scope {
  padding: 20px;
}
.title {
  height: 40px;
  line-height: 40px;
  margin-bottom: 10px;
}
</style>
src/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,437 @@
<template>
  <div>
    <el-dialog :title="operationType === 'add' ? '新增' : '编辑'" :visible.sync="editFormDia" width="60%" @close="closeDia">
      <el-form ref="editForm" :model="editForm" :rules="editFormRules" label-width="140px">
        <el-row>
          <el-col :span="12">
            <el-form-item label="检验项:" prop="inspectionItem">
              <el-input v-model="editForm.inspectionItem" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="检验项EN:" prop="inspectionItemEn">
              <el-input v-model="editForm.inspectionItemEn" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="检验子项:" prop="inspectionItemSubclass">
              <el-input v-model="editForm.inspectionItemSubclass" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="检验子项EN:" prop="inspectionItemSubclassEn">
              <el-input v-model="editForm.inspectionItemSubclassEn" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="检验对象:" prop="sample">
              <el-cascader v-model="editForm.sample" :options="itemParameterData.cascaderField.sample.tree"
                           :props="{value:'name',label:'name',checkStrictly: true, multiple: true}"
                           :show-all-levels="false"  clearable
                           filterable placeholder="请选择" size="small" style="width: 100%;"></el-cascader>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="单价(元):" prop="price">
              <el-input v-model="editForm.price" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="场所:" prop="laboratory">
              <el-select v-model="editForm.laboratory" clearable placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in laboratoryList" :key="item.label" :label="item.label" :value="item.label"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="试验室:" prop="sonLaboratory">
              <el-select v-model="editForm.sonLaboratory" clearable placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in dict.type.sys_sub_lab" :key="item.value" :label="item.label" :value="item.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="要求描述:" prop="askTell">
              <el-input v-model="editForm.askTell" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="要求值:" prop="ask">
              <el-input v-model="editForm.ask" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="计量单位:" prop="unit">
              <el-select v-model="editForm.unit" clearable placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in dict.type.sys_unit" :key="item.value" :label="item.label" :value="item.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="工时(H):" prop="manHour">
              <el-input v-model="editForm.manHour" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="预计时间(H):" prop="manDay">
              <el-input v-model="editForm.manDay" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="工时分组:" prop="manHourGroup">
              <el-input v-model="editForm.manHourGroup" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="检验项类型:" prop="inspectionItemType">
              <el-select v-model="editForm.inspectionItemType" clearable placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in dict.type.inspection_item_type" :key="item.value" :label="item.label" :value="item.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="检验值类型:" prop="inspectionValueType">
              <el-select v-model="editForm.inspectionValueType" clearable placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in dict.type.inspection_value_type" :key="item.value" :label="item.label" :value="item.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="特殊标识:" prop="bsm">
              <el-select v-model="editForm.bsm" clearable placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in dict.type.inspection_bsm" :key="item.value" :label="item.label" :value="item.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="原始记录模板:" prop="templateId">
              <el-select v-model="editForm.templateId" clearable placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in templateIdList" :key="item.value" :label="item.label" :value="item.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="检验项分类:" prop="inspectionItemClass">
              <el-input v-model="editForm.inspectionItemClass" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="检验项分类EN:" prop="inspectionItemClassEn">
              <el-input v-model="editForm.inspectionItemClassEn" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="试验方法:" prop="method">
              <el-select v-model="editForm.method" clearable multiple placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in methodList" :key="item.value" :label="item.label" :value="item.label"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="条件:" prop="radiusList">
              <el-select v-model="editForm.radiusList" allow-create default-first-option filterable multiple
                         placeholder="请选择"
                         size="small"
                         style="width: 100%">
                <el-option v-for="item in radiusListList" :key="item.value" :label="item.label" :value="item.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="收费标准(元/次):" prop="rates">
              <el-input v-model="editForm.rates" clearable size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
<!--        <el-col :span="12">-->
<!--          <el-form-item label="字典类型:" prop="dic">-->
<!--            <el-select v-model="editForm.dic" clearable placeholder="请选择" size="small" style="width: 100%">-->
<!--              <el-option v-for="item in dicList" :key="item.value" :label="item.label" :value="item.value"></el-option>-->
<!--            </el-select>-->
<!--          </el-form-item>-->
<!--        </el-col>-->
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeDia">取 æ¶ˆ</el-button>
        <el-button :loading="editLoad" type="primary" @click="handleEdit">提 äº¤</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  addItemParameter,
  getItemTree,
  getStandardTemplate,
  obtainItemParameterList,
  upItemParameter
} from "@/api/structural/capability";
import {selectStandardMethods} from "@/api/standard/standardLibrary";
export default {
  name: "EditForm",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {},
  dicts: ['sys_sub_lab', 'inspection_item_type', 'sys_unit', 'inspection_value_type', 'inspection_bsm'],
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      editFormDia: false,
      editLoad: false,
      editForm: {
        inspectionItem: '', // æ£€éªŒé¡¹
        inspectionItemEn: '', // æ£€éªŒé¡¹EN
        inspectionItemSubclass: '', // æ£€éªŒå­é¡¹
        inspectionItemSubclassEn: '', // æ£€éªŒå­é¡¹EN
        sample: [], // æ£€éªŒå¯¹è±¡
        price: '', // å•ä»·
        laboratory: '', // åœºæ‰€
        sonLaboratory: '', // è¯•验室
        askTell: '', // è¦æ±‚描述
        ask: '', // è¦æ±‚值
        unit: '', // è®¡é‡å•位
        manHour: '', // å·¥æ—¶
        manDay: '', // é¢„计时间
        manHourGroup: '', // å·¥æ—¶åˆ†ç»„
        inspectionItemType: '', // æ£€éªŒé¡¹ç±»åž‹
        inspectionValueType: '', // æ£€éªŒå€¼ç±»åž‹
        dic: '', // å­—典类型
        bsm: '', // ç‰¹æ®Šæ ‡è¯†
        templateId: '', // åŽŸå§‹è®°å½•æ¨¡æ¿
        inspectionItemClass: '', // æ£€éªŒé¡¹åˆ†ç±»
        inspectionItemClassEn: '', // æ£€éªŒé¡¹åˆ†ç±»EN
        method: '', // è¯•验方法
        radiusList: [], // æ¡ä»¶
        rates: '', // æ¡ä»¶
      },
      sampleList: [], // æ£€éªŒå¯¹è±¡ä¸‹æ‹‰æ¡†
      laboratoryList: [], // åœºæ‰€ä¸‹æ‹‰æ¡†
      inspectionItemTypeList: [], // æ£€éªŒé¡¹ç±»åž‹ä¸‹æ‹‰æ¡†
      dicList: [], // å­—典类型下拉框
      templateIdList: [], // åŽŸå§‹è®°å½•æ¨¡æ¿ä¸‹æ‹‰æ¡†
      methodList: [], // è¯•验方法下拉框
      radiusListList: [], // æ¡ä»¶ä¸‹æ‹‰æ¡†
      itemParameterData: {
        cascaderField: {
          sample: {
            tree: []
          },
        }
      },
      editFormRules: {
        inspectionItem: [
          { required: true, message: '请选择检验项', trigger: 'change' }
        ],
        sonLaboratory: [
          { required: true, message: '请选择试验室', trigger: 'change' }
        ],
        unit: [
          { required: true, message: '请选择计量单位', trigger: 'change' }
        ],
        inspectionItemType: [
          { required: true, message: '请选择检验项类型', trigger: 'change' }
        ],
        inspectionValueType: [
          { required: true, message: '请选择检验值类型', trigger: 'change' }
        ],
        templateId: [
          { required: true, message: '请选择原始记录模板', trigger: 'change' }
        ]
      },
      operationType: ''
    }
  },
  // æ–¹æ³•集合
  methods: {
    openDia (type, row) {
      this.operationType = type
      this.editFormDia = true
      this.obtainItemParameterList() // åœºæ‰€ç±»åž‹
      this.getStandardTemplate() // åŽŸå§‹è®°å½•æ¨¡æ¿ä¸‹æ‹‰æ¡†
      this.getSelectStandardMethods() // è¯•验方法
      this.selectTestObjectByName() // æ£€éªŒå¯¹è±¡
      if (type === 'add') {
        this.editForm = {
          inspectionItem: '', // æ£€éªŒé¡¹
            inspectionItemEn: '', // æ£€éªŒé¡¹EN
            inspectionItemSubclass: '', // æ£€éªŒå­é¡¹
            inspectionItemSubclassEn: '', // æ£€éªŒå­é¡¹EN
            sample: [], // æ£€éªŒå¯¹è±¡
            price: '', // å•ä»·
            laboratory: '', // åœºæ‰€
            sonLaboratory: '', // è¯•验室
            askTell: '', // è¦æ±‚描述
            ask: '', // è¦æ±‚值
            unit: '', // è®¡é‡å•位
            manHour: '', // å·¥æ—¶
            manDay: '', // é¢„计时间
            manHourGroup: '', // å·¥æ—¶åˆ†ç»„
            inspectionItemType: '', // æ£€éªŒé¡¹ç±»åž‹
            inspectionValueType: '', // æ£€éªŒå€¼ç±»åž‹
            dic: '', // å­—典类型
            bsm: '', // ç‰¹æ®Šæ ‡è¯†
            templateId: '', // åŽŸå§‹è®°å½•æ¨¡æ¿
            inspectionItemClass: '', // æ£€éªŒé¡¹åˆ†ç±»
            inspectionItemClassEn: '', // æ£€éªŒé¡¹åˆ†ç±»EN
            method: '', // è¯•验方法
            radiusList: [], // æ¡ä»¶
            rates: '', // æ¡ä»¶
        }
        this.resetForm('editForm')
      } else {
        this.editForm = this.HaveJson(row)
        this.editForm.sample = JSON.parse(this.editForm.sample)
        this.editForm.radiusList = JSON.parse(this.editForm.radiusList)
        this.editForm.method = JSON.parse(this.editForm.method)
      }
    },
    // æäº¤ç¼–辑
    handleEdit () {
      this.$refs.editForm.validate(valid => {
        if (valid) {
          this.editLoad = true
          let obj = this.HaveJson(this.editForm)
          obj.method = JSON.stringify(obj.method)
          obj.sample = JSON.stringify(obj.sample)
          if (obj.radiusList?.length > 0) {
            obj.radiusList = JSON.stringify(obj.radiusList)
          } else {
            obj.radiusList = null
          }
          if(obj.id){
            // ä¿®æ”¹
            upItemParameter(obj).then(res => {
              this.editLoad = false
              if (res.code === 500) {
                return
              }
              this.$message.success('修改成功')
              this.editFormDia = false
              this.$emit('refreshList')
            }).catch(e => {
              this.editLoad = false
            })
          }else{
            // æ–°å¢ž
            addItemParameter(obj).then(res => {
              this.editLoad = false
              if (res.code === 500) {
                return
              }
              this.$message.success('添加成功')
              this.editFormDia = false
              this.$emit('refreshList')
            }).catch(e => {
              this.editLoad = false
            })
          }
        }
      })
    },
    // å…³é—­å¼¹æ¡†
    closeDia () {
      this.editFormDia = false
      this.resetForm("editForm");
    },
    selectTestObjectByName() {
      getItemTree().then(res => {
        if (res.data.length > 0) {
          res.data.forEach(a=>{
            this.cascaderFieldData(a)
          })
          this.itemParameterData.cascaderField.sample.tree = res.data
        }
      })
    },
    cascaderFieldData(val){
      if(val.children === undefined) {
        return
      }else if(val.children.length==0){
        val.label = val.name
        val.value = val.id
        delete val.children
      }else{
        val.label = val.name
        val.value = val.id
        val.children.forEach(a=>{
          a.label = a.name
          a.value = a.id
          this.cascaderFieldData(a)
        })
      }
    },
    getSelectStandardMethods() {
      selectStandardMethods().then(res => {
        let data = []
          if (res.data.length > 0) {
            res.data.forEach(a => {
              data.push({
                label: a.code,
                value: a.id,
              })
            })
            this.methodList = data
          }
      })
    },
    obtainItemParameterList() {
      obtainItemParameterList().then(res => {
        let data = []
          if (res.data.length > 0) {
            res.data.forEach(a => {
              data.push({
                label: a.laboratoryName,
                value: a.id
              })
            })
          }
        this.laboratoryList = data
      })
    },
    getStandardTemplate() {
      getStandardTemplate().then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.name,
            value: a.id,
            type: 'success'
          })
        })
        this.templateIdList = data
      })
    },
  },
}
</script>
<style scoped>
::v-deep .el-dialog__body {
  height: 620px;
  overflow-y: auto;
}
</style>
src/views/structural/capabilityAndLaboratory/capabilityComponents/testObjectEditForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
<template>
  <div>
    <el-dialog :title="operationType === 'add' ? '新增' : '编辑'" :visible.sync="editFormDia" width="500px" @close="closeDia">
      <el-form ref="editForm" :model="editForm" :rules="editFormRules" label-width="120px" label-position="right">
        <el-form-item label="场所:" prop="laboratoryId">
          <el-select v-model="editForm.laboratoryId" clearable placeholder="请选择" size="small" style="width: 100%">
            <el-option v-for="item in laboratoryList" :key="item.value" :label="item.label" :value="item.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="检验对象:" prop="specimenName">
          <el-input v-model="editForm.specimenName" clearable size="small"></el-input>
        </el-form-item>
        <el-form-item label="检验对象EN:" prop="specimenNameEn">
          <el-input v-model="editForm.specimenNameEn" clearable size="small"></el-input>
        </el-form-item>
        <el-form-item label="对象代号:" prop="code">
          <el-input v-model="editForm.code" clearable size="small"></el-input>
        </el-form-item>
        <el-form-item label="对象类型:" prop="objectType">
          <el-select v-model="editForm.objectType" clearable placeholder="请选择" size="small" style="width: 100%">
            <el-option v-for="item in dict.type.object_type" :key="item.value" :label="item.label" :value="item.value"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeDia">取 æ¶ˆ</el-button>
        <el-button :loading="editLoad" type="primary" @click="handleEdit">提 äº¤</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {obtainItemParameterList} from "@/api/structural/laboratoryScope";
import {addTestObject, upTestObject} from "@/api/structural/capability";
export default {
  name: "EditForm",
  // import å¼•入的组件需要注入到对象中才能使用
  dicts: ['object_type'],
  components: {},
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      editFormDia: false,
      editLoad: false,
      editForm: {
        id: '',
        laboratoryId: '', // åœºæ‰€
        specimenName: '', // æ£€éªŒå¯¹è±¡
        specimenNameEn: '', // æ£€éªŒå¯¹è±¡EN
        code: '', // å¯¹è±¡ä»£å·
        objectType: '', // å¯¹è±¡ç±»åž‹
      },
      laboratoryList: [],
      editFormRules: {
        laboratoryId: [
          { required: true, message: '请选择场所', trigger: 'change' }
        ],
        specimenName: [
          { required: true, message: '请输入检验对象', trigger: 'blur' }
        ],
        code: [
          { required: true, message: '请输入对象代号', trigger: 'blur' }
        ],
      },
      operationType: ''
    }
  },
  // æ–¹æ³•集合
  methods: {
    openDia (type, row) {
      this.operationType = type
      this.obtainItemParameterList()
      this.editFormDia = true
      if (type === 'add') {
        this.resetForm("editForm");
      } else {
        this.editForm = {...row}
      }
    },
    // æäº¤ç¼–辑
    handleEdit () {
      this.$refs.editForm.validate(valid => {
        if (valid) {
          this.editLoad = true
          if(this.editForm.id){
            // ä¿®æ”¹
            upTestObject(this.editForm).then(res => {
              this.editLoad = false
              if (res.code === 500) {
                return
              }
              this.$message.success('修改成功')
              this.closeDia()
              this.$emit('refreshList')
            }).catch(e => {
              this.editLoad = false
            })
          }else{
            // æ–°å¢ž
            addTestObject(this.editForm).then(res => {
              this.editLoad = false
              if (res.code === 500) {
                return
              }
              this.$message.success('添加成功')
              this.closeDia()
              this.$emit('refreshList')
            }).catch(e => {
              this.editLoad = false
            })
          }
        }
      })
    },
    // å…³é—­å¼¹æ¡†
    closeDia () {
      this.editFormDia = false
      this.resetForm("editForm");
    },
    // èŽ·å–åœºæ‰€ä¸‹æ‹‰æ¡†çš„å€¼
    obtainItemParameterList() {
      obtainItemParameterList().then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.laboratoryName,
            value: a.id
          })
        })
        this.laboratoryList = data
      })
    },
  },
}
</script>
<style scoped>
</style>