gaoaoy
2024-03-15 8c51a45d5a220f5ddb4b29a50b3bd732e5ac8521
src/components/view/b2-standard.vue
@@ -44,19 +44,19 @@
      background-color: white;
   }
   .standard_table{
   .standard_table {
      border-top: 1px solid #ebeef5;
      background-color: white;
   }
   .product_table{
   .product_table {
      border-top: 1px solid #ebeef5;
      height: calc(100% - 275px);
      margin-top: 5px;
      background-color: white;
   }
   .product_table .el-table{
   .product_table .el-table {
      height: 100%;
   }
</style>
@@ -71,16 +71,16 @@
      color: #3A7BFA;
   }
   .standard .has-gutter .el-table__cell .cell{
   .standard .has-gutter .el-table__cell .cell {
      line-height: 38px;
      background-color: #fafafa;
   }
   .standard .has-gutter .el-table__cell{
   .standard .has-gutter .el-table__cell {
      background-color: #fafafa !important;
   }
   .standard .standard_table .el-table__row .cell{
   .standard .standard_table .el-table__row .cell {
      font-size: 14px;
   }
</style>
@@ -97,9 +97,9 @@
               <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="addDia = true"></el-button>
            </el-col>
         </el-row>
         <el-tree :data="list" ref="tree" default-expand-all :props="{ children: 'children', label: 'label' }"
            node-key="id" :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current
            @node-expand="nodeOpen" @node-collapse="nodeClose" v-loading="treeLoad">
         <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }"
            node-key="label" :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current
            @node-expand="nodeOpen" @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false" :default-expanded-keys="expandedKeys">
            <div class="custom-tree-node" slot-scope="{ node, data }">
               <el-row>
                  <el-col :span="21">
@@ -107,7 +107,7 @@
                           :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>
                        {{ data.code }} {{ data.label }}</span>
                  </el-col>
                  <el-col :span="2" style="text-align: right;">
                  <el-col :span="2" style="text-align: right;" v-if="delStandardTree">
                     <el-button type="text" size="mini" @click.stop="remove(node, data)">
                        <i class="el-icon-delete"></i>
                     </el-button>
@@ -119,16 +119,17 @@
      <div class="right">
         <el-row class="title">
            <el-col :span="10" style="font-size: 14px;color: #999;">{{selectTree}}</el-col>
            <el-col :span="selectTree==''?24:14" style="text-align: right;">
               <el-button size="small" type="primary" @click="addStandardDia = true" v-if="addStandardMethod">新增标准</el-button>
               <el-button size="small" type="primary">新增项目</el-button>
               <el-button size="small">
            <el-col :span="selectTree==''?24:14" style="text-align: right;" v-if="selectTree!=''">
               <el-button size="small" type="primary" @click="addStandardDia = true"
                  v-if="addStandardMethod">新增标准</el-button>
               <el-button size="small" type="primary" @click="addProductDia = true" v-if="addStandardProduct">新增项目</el-button>
               <el-button size="small" @click="delStandardProductByIds" v-if="delStandardProduct">
                  <i class="el-icon-delete" style="color: #3A7BFA;"></i>
                  <span style="color: #3A7BFA;">删除</span>
               </el-button>
            </el-col>
         </el-row>
         <el-row class="standard_table" v-loading="standardListLoad">
         <el-row class="standard_table" v-loading="tableLoad">
            <el-table class="el-table" :data="standardList" style="width: 100%;" height="220px" tooltip-effect="dark">
               <el-table-column prop="code" label="标准编号" show-overflow-tooltip>
                  <template slot-scope="scope">
@@ -139,29 +140,32 @@
               <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column>
               <el-table-column prop="createUserName" label="创建人"></el-table-column>
               <el-table-column prop="createTime" label="创建时间" width="250px"></el-table-column>
               <el-table-column label="操作" width="100" align="center">
               <el-table-column label="操作" width="100" align="center" v-if="delStandardMethod">
                  <template slot-scope="scope">
                     <el-button type="text" size="small">删除</el-button>
                     <el-button type="text" size="small" @click="delStandardMethodByFLSSM(scope.row.id)">删除</el-button>
                  </template>
               </el-table-column>
            </el-table>
         </el-row>
         <el-row class="product_table">
            <el-table :data="productList" style="width: 100%;" height="100%" tooltip-effect="dark" stripe :fit="true" border>
         <el-row class="product_table" v-loading="tableLoad">
            <el-table :data="productList" style="width: 100%;" height="100%" tooltip-effect="dark" stripe :fit="true" border
               @selection-change="handleSelectionChange">
               <el-table-column type="selection" width="65"></el-table-column>
               <el-table-column prop="code" label="检验项" show-overflow-tooltip></el-table-column>
               <el-table-column prop="name" label="检验项类型" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="检验项小类" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="实验室" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="计量单位" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="单价" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="工时" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="工时分组" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="设备组" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="区间" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="要求值">
               <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
               <!-- <el-table-column prop="inspectionItemClassify" label="检验项类型" width="120" show-overflow-tooltip></el-table-column> -->
               <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140" show-overflow-tooltip></el-table-column>
               <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip></el-table-column>
               <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
               <el-table-column prop="price" label="单价" width="100" show-overflow-tooltip></el-table-column>
               <el-table-column prop="manHour" label="工时" width="80" show-overflow-tooltip></el-table-column>
               <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column>
               <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column>
               <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column>
               <el-table-column prop="ask" label="要求值" width="220px">
                  <template slot-scope="scope">
                     <el-input size="small" placeholder="要求值" v-model="scope.row.ask"></el-input>
                     <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable
                        @change="(value)=>upStandardProductList(value,scope.row.id)" v-if="upStandardProduct" type="textarea" :autosize="{ minRows: 1, maxRows: 3}"></el-input>
                     <span v-else>{{scope.row.ask}}</span>
                  </template>
               </el-table-column>
            </el-table>
@@ -204,9 +208,7 @@
                  <span class="required-span">* </span>样品名称:
               </el-col>
               <el-col :span="16" :offset="1">
                  <el-select v-model="addOb.sample" size="small" style="width: 100%;" clearable>
                     <el-option v-for="(a, ai) in sample" :key="ai" :value="a.value" :label="a.label"></el-option>
                  </el-select>
                  <el-input v-model="addOb.sample" placeholder="请输入样品名称" clearable size="small"></el-input>
               </el-col>
            </el-row>
            <el-row style="line-height: 50px;">
@@ -241,11 +243,24 @@
            <el-button type="primary" @click="addStandardMethodList" :loading="addLoad2">确 定</el-button>
         </span>
      </el-dialog>
      <el-dialog title="新增项目" :visible.sync="addProductDia" width="70%">
         <div class="body" style="height: 60vh;" v-if="addProductDia">
            <ValueTable ref="ValueTable" :url="$api.capacityScope.selectItemParameterList" :componentData="componentData"/>
         </div>
         <span slot="footer" class="dialog-footer">
            <el-button @click="addProductDia = false">取 消</el-button>
            <el-button type="primary" @click="addStandardProductDo" :loading="addLoad3">确 定</el-button>
         </span>
      </el-dialog>
   </div>
</template>
<script>
   import ValueTable from '../tool/value-table.vue'
   export default {
      components: {
         ValueTable
      },
      data() {
         return {
            search: null,
@@ -273,7 +288,45 @@
            addStandardMethod: true,
            addLoad2: false,
            productList: [],
            standardListLoad: false
            tableLoad: false,
            upStandardProduct: false,
            delStandardMethod: false,
            selects: [],
            delStandardProduct: false,
            addProductDia: false,
            productId: null,
            addStandardProduct: false,
            addLoad3: false,
            productEnum: [],
            componentData: {
               entity: {
                  orderBy: {
                     field: 'id',
                     order: 'asc'
                  }
               },
               isIndex: true,
               showSelect: true,
               select: true,
               do: [],
               tagField: {
                  inspectionItemType: {
                     select: []
                  },
                  valueType: {
                     select: []
                  },
                  bsm:{
                     select: []
                  },
                  inspectionValueType:{
                     select:[]
                  },
                  deviceGroup:{select:[]}
               },
               selectField: {},
            },
            expandedKeys:[]
         }
      },
      mounted() {
@@ -281,9 +334,14 @@
         this.selectEnumByCategoryForFactory()
         this.selectStandardTreeList()
         this.obtainItemParameterList()
         this.selectEnumByCategoryForsampleType()
         // this.selectEnumByCategoryForsampleType()
         this.selectTestObjectByName()
         this.selectStandardMethods()
         this.selectEnumByCategoryForDevice()
         this.selectEnumByCategory()
         this.selectEnumByCategoryForValue()
         this.selectEnumByCategoryForSpecial()
         this.selectEnumByCategoryForInspectionValueType()
      },
      methods: {
         filterNode(value, data) {
@@ -299,30 +357,50 @@
         handleNodeClick(val, node, el) { //树的值
            this.selectTree = ''
            this.getNodeParent(node)
            this.selectTree = this.selectTree.replace(' - ','')
            this.selectTree = this.selectTree.replace(' - ', '')
            let data = this.selectTree.split(' - ')
            let data2 = ''
            for(let index = data.length - 1; index >= 0; index--){
            for (let index = data.length - 1; index >= 0; index--) {
               data2 += " - " + data[index]
            }
            this.selectTree = data2.replace(' - ','')
            this.selectTree = data2.replace(' - ', '')
            this.selectsStandardMethodByFLSSM()
            let trees = this.selectTree.split(" - ")
            this.addOb.factory = trees[0]
            this.addOb.laboratory = trees[1]
            this.addOb.sampleType = trees[2]
            this.addOb.sample = trees[3]
         },
         getNodeParent(val){
            if(val.parent!=null){
         getNodeParent(val) {
            if (val.parent != null) {
               this.selectTree += ' - ' + val.label
               this.getNodeParent(val.parent)
            }
         },
         remove(node, data) {
            this.$confirm("是否删除", "提示", {
               type: "warning"
            }).then(res => {
               const parent = node.parent;
               const children = parent.data.children || parent.data;
               const index = children.findIndex(d => d.id === data.id);
               children.splice(index, 1);
            this.$confirm("是否删除该层级", "提示", {
               type: "error"
            }).then(()=> {
               this.treeLoad = true
               this.selectTree = ''
               this.getNodeParent(node)
               this.selectTree = this.selectTree.replace(' - ', '')
               let data = this.selectTree.split(' - ')
               let data2 = ''
               for (let index = data.length - 1; index >= 0; index--) {
                  data2 += " - " + data[index]
               }
               this.selectTree = data2.replace(' - ', '')
               this.$axios.post(this.$api.standardTree.delStandardTree, {
                  tree: this.selectTree
               }).then(res => {
                  if(res.code==201)return
                  this.$message.success('已删除')
                  this.selectStandardTreeList()
                  this.selectTree = ''
                  this.standardList = []
                  this.productList = []
               })
            }).catch(e => {})
         },
         nodeOpen(data, node, el) {
@@ -345,10 +423,53 @@
               this.sampleType = res.data
            })
         },
         selectEnumByCategoryForDevice() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "设备分类"
            }).then(res => {
               this.componentData.tagField.deviceGroup.select = res.data
            })
         },
         selectEnumByCategory() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "检验项类型"
            }).then(res => {
               res.data[1].type = 'info'
               this.componentData.tagField.inspectionItemType.select = res.data
            })
         },
         selectEnumByCategoryForValue() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "取值类型"
            }).then(res => {
               this.componentData.tagField.valueType.select = res.data
            })
         },
         selectEnumByCategoryForSpecial() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "是否"
            }).then(res => {
               this.componentData.tagField.bsm.select = res.data
            })
         },
         selectEnumByCategoryForInspectionValueType() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "检验值类型"
            }).then(res => {
               this.componentData.tagField.inspectionValueType.select = res.data
            })
         },
         selectStandardTreeList() {
            this.treeLoad = true
            this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => {
               this.list = res.data
               this.list.forEach(a=>{
                  a.children.forEach(b=>{
                     b.children.forEach(c=>{
                        this.expandedKeys.push(c.label)
                     })
                  })
               })
               this.treeLoad = false
            })
         },
@@ -373,7 +494,7 @@
                     value: a.specimenName
                  })
               })
               this.sample = data
               this.sampleType = data
            })
         },
         selectStandardMethods() {
@@ -388,16 +509,16 @@
               this.standardEnum = data
            })
         },
         addStandardMethodList(){
         addStandardMethodList() {
            if (this.standardId == null || this.standardId == '') {
               this.$message.error('标准方法未选择')
               return
            }
            this.addLoad2 = true
            this.$axios.post(this.$api.standardTree.addStandardMethodList,{
            this.$axios.post(this.$api.standardTree.addStandardMethodList, {
               standardId: this.standardId,
               tree: this.selectTree
            }).then(res=>{
            }).then(res => {
               this.addLoad2 = false
               this.addStandardDia = false
               this.$message.success('添加成功')
@@ -440,19 +561,25 @@
               this.addLoad = false
            })
         },
         selectsStandardMethodByFLSSM(){
            this.standardListLoad = true
            this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM,{
         selectsStandardMethodByFLSSM() {
            this.tableLoad = true
            this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
               tree: this.selectTree
            }).then(res=>{
               this.standardListLoad = false
               this.standardList = res.data
            }).then(res => {
               this.tableLoad = false
               this.standardList = res.data.standardMethodList
               this.productList = res.data.standardProductList
            })
         },
         getPower() {
            let power = JSON.parse(sessionStorage.getItem('power'))
            let add = false
            let addStandardMethod = false
            let upStandardProduct = false
            let delStandardMethod = false
            let delStandardProduct = false
            let addStandardProduct = false
            let delStandardTree = false
            for (var i = 0; i < power.length; i++) {
               if (power[i].menuMethod == 'addStandardTree') {
                  add = true
@@ -460,11 +587,115 @@
               if (power[i].menuMethod == 'addStandardMethodList') {
                  addStandardMethod = true
               }
               if (power[i].menuMethod == 'upStandardProductList') {
                  upStandardProduct = true
               }
               if (power[i].menuMethod == 'delStandardMethodByFLSSM') {
                  delStandardMethod = true
               }
               if (power[i].menuMethod == 'delStandardProductByIds') {
                  delStandardProduct = true
               }
               if (power[i].menuMethod == 'addStandardProduct') {
                  addStandardProduct = true
               }
               if (power[i].menuMethod == 'delStandardTree') {
                  delStandardTree = true
               }
            }
            this.addPower = add
            this.addStandardMethod = addStandardMethod
            this.upStandardProduct = upStandardProduct
            this.delStandardMethod = delStandardMethod
            this.delStandardProduct = delStandardProduct
            this.addStandardProduct = addStandardProduct
            this.delStandardTree = delStandardTree
         },
         upStandardProductList(value, index) {
            this.$axios.post(this.$api.standardTree.upStandardProductList, {
               id: index,
               ask: value
            }, {
               headers: {
                  'Content-Type': 'application/json'
               }
            }).then(res => {
               if (res.code == 201) {
                  this.$message.error('未保存')
                  return
               }
               this.$message.success('已保存')
            })
         },
         delStandardMethodByFLSSM(id) {
            this.$confirm('是否删除当前数据?', "警告", {
               confirmButtonText: "确定",
               cancelButtonText: "取消",
               type: "warning"
            }).then(() => {
               this.tableLoad = true
               this.$axios.post(this.$api.standardTree.delStandardMethodByFLSSM, {
                  id: id
               }).then(res => {
                  if (res.code == 201) {
                     return
                  }
                  this.$message.success('已删除')
                  this.selectsStandardMethodByFLSSM()
               })
            }).catch(() => {})
         },
         handleSelectionChange(val) {
            this.selects = []
            val.forEach(a => {
               this.selects.push(a.id)
            })
         },
         delStandardProductByIds() {
            if(this.selects.length == 0){
               this.$message.error('未选中数据')
               return
            }
            this.$confirm('是否删除当前选中 '+this.selects.length+' 条数据?', "警告", {
               confirmButtonText: "确定",
               cancelButtonText: "取消",
               type: "warning"
            }).then(() => {
               this.tableLoad = true
               this.$axios.post(this.$api.standardTree.delStandardProductByIds, {
                  ids: JSON.stringify(this.selects)
               }).then(res => {
                  if (res.code == 201) {
                     return
                  }
                  this.$message.success('已删除')
                  this.selectsStandardMethodByFLSSM()
               })
            }).catch(() => {})
         },
         addStandardProductDo(){
            let selects = this.$refs.ValueTable.multipleSelection
            if(selects.length == 0){
               this.$message.error('未选择数据')
               return
            }
            let select = []
            selects.forEach(a=>{
               select.push(a.id)
            })
            this.tableLoad = true
            this.$axios.post(this.$api.standardTree.addStandardProduct,{
               ids: JSON.stringify(select),
               tree: this.selectTree
            }).then(res=>{
               if (res.code == 201) {
                  return
               }
               this.$message.success('添加成功')
               this.selectsStandardMethodByFLSSM()
            })
            this.addProductDia = false
         }
      }
   }
</script>