zouyu
2024-03-14 f55848a34750d26419d6a712b9c181ce4e34985a
业务管理:检验任务
已修改4个文件
已添加2个文件
333 ■■■■■ 文件已修改
src/assets/api/controller.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tool/value-table.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-inspect-order-plan.vue 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/enums.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/util/date.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/js/menu.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -12,7 +12,8 @@
        standardTree,
        standardMethod,
        StandardTemplate,
        insOrder
        insOrder,
    insOrderPlan
    }
}
@@ -114,6 +115,12 @@
    selectInsOrderParameter: "/insOrder/selectInsOrderParameter", //查询检验下单
}
const insOrderPlan = {
    selectInsOrderPlanList: "/insOrderPlan/selectInsOrderPlanList", //查询检验任务
}
const systemLog = {
    selectSystemLogList: "/systemLog/selectSystemLogList", //获取日志
}
src/components/tool/value-table.vue
@@ -36,6 +36,26 @@
    }
</style>
<style>
  .value-table .highlight-warning-row-border td{
    border-top: 2px solid #ffcd29;
    border-bottom: 2px solid #ffcd29;
  }
  .value-table .highlight-warning-row-border td:first-child{
    border-left: 2px solid #ffcd29;
  }
  .value-table .highlight-warning-row-border td:last-child{
    border-right: 2px solid #ffcd29;
  }
  .value-table .highlight-danger-row-border td{
    border-top: 2px solid red;
    border-bottom: 2px solid red;
  }
  .value-table .highlight-danger-row-border td:first-child{
    border-left: 2px solid red;
  }
  .value-table .highlight-danger-row-border td:last-child{
    border-right: 2px solid red;
  }
    .value-table .el-upload {
        width: 100%;
    }
@@ -51,13 +71,13 @@
            <el-table ref="eltable" :data="tableData" style="width: 100%;" height="100%" tooltip-effect="dark" border
                @selection-change="selectChange" @select="select" v-loading="loading" @sort-change="sortChange"
                @row-click="rowClick" :show-summary="data.countFleid!=undefined && data.countFleid.length > 0"
                :summary-method="getSummaries" :key="Math.random()">
                :summary-method="getSummaries" :key="Math.random()" :row-class-name="tableRowClassName">
                <el-table-column type="selection" width="65" v-if="data.showSelect" :key="Math.random()">
                </el-table-column>
                <el-table-column type="index" align="center" label="序号" width="70" v-if="data.isIndex" :key="Math.random()">
                </el-table-column>
                <el-table-column :prop="a.label" :label="a.value" sortable="custom" v-for="(a, ai) in tableHead" :key="ai"
                    show-overflow-tooltip min-width="160">
         show-overflow-tooltip min-width="160">
                    <template slot-scope="scope">
                        <div v-if="showType(a.label, data.tagField) != null">
                            <el-tag v-for="(b, bi) in data.tagField[a.label].select" :key="bi" v-if="b.value == scope.row[a.label]"
@@ -195,6 +215,9 @@
    } from 'iview';
    export default {
        props: {
      tableRowClassName:{
        type: Function
      },
            url: {
                type: String,
                default: () => null
@@ -552,7 +575,7 @@
                    return
                }
                for (var i = 0; i < this.data.requiredAdd.length; i++) {
                    if (this.upData[this.data.requiredAdd[i]] == null || this.upData[this.data.requiredAdd[i]] == '') {
                    if (this.upData[this.data.requiredAdd[i]] === null || this.upData[this.data.requiredAdd[i]] === '') {
                        var list = this.upHead.filter(a => {
                            if (a.label == this.data.requiredAdd[i]) return a
                        })
src/components/view/b1-inspect-order-plan.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,273 @@
<style scoped>
.ins-order-plan-main{
  padding-top: 60px;
}
.ins-order-plan-main .search{
  width: 100%;
  margin-bottom: 10px;
  height: 10vh;
  background-color: #fff;
  border-radius: 3px;
}
.search .form-inline{
  height: 5vh;
  padding-top:2.5vh;
  padding-left: 1%;
}
.ins-order-plan-main .center{
  width: 100%;
  height: 70vh;
  background-color: #fff;
  border-radius: 3px;
}
.ins-order-plan-main .center .value-table{
  width:98%;
  height: 80%;
  margin-left:1%;
}
.tab {
  list-style-type: none;
  display: flex;
  padding: 10px 0px;
}
.tab li {
  line-height: 24px;
  padding: 6px 14px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #EEEEEE;
  cursor: pointer;
}
.tab li:nth-child(1) {
  border-radius: 8px 0 0 8px;
}
.tab li:nth-child(3) {
  border-radius: 0 8px 8px 0;
}
.tab li.active {
  border-color: #3A7BFA;
  color: #3A7BFA;
}
.center .center-options:nth-child(1){
  padding-left: 1%;
}
.center .center-options .center-title {
  width:85%;
  padding-top: 20px;
  text-align: right;
}
.center .center-options .center-title span:last-child{
  color: #3A7BFA;
  font-size: 23px;
  font-weight: 400;
}
</style>
<template>
  <div class="ins-order-plan-main">
    <div class="search">
      <el-form :inline="true" :model="searchForm" class="form-inline">
        <el-form-item label="样品名称:">
          <el-input clearable v-model="searchForm.sampleName" size="small" placeholder="请输入"></el-input>
        </el-form-item>
        <el-form-item label="状态:">
          <el-select clearable size="small" v-model="searchForm.state" placeholder="请选择">
            <el-option v-for="(item,index) in insStateList" :key="index"
            :label="item.label" :value="item.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button size="small" @click="onReset">重置</el-button>
          <el-button size="small" type="primary" @click="onSubmit">查询</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div class="center">
      <div class="center-options">
        <el-row>
          <el-col :span="20">
            <ul class="tab">
              <li v-for="(m,i) in tabList" :key="i" :class="{active:i==tabIndex}" @click="handleTab(m,i)">{{m.label}}</li>
            </ul>
          </el-col>
          <el-col :span="4">
            <div class="center-title">
              <span>总计任务数量:</span>
              <span v-text="planTotal"></span>
            </div>
          </el-col>
        </el-row>
      </div>
      <ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.selectInsOrderPlanList" :upUrl="$api.user.updateUser" :componentData="componentData" :key="upIndex" @upUser="upUser"/>
    </div>
  </div>
</template>
<script>
import ValueTable from '../tool/value-table.vue'
import { getYearAndMonthAndDays } from '../../util/date'
export default {
  components:{
    ValueTable
  },
  data(){
    return {
      searchForm:{
        sampleName: null,
        state: null
      },
      tabList: [
        {
          label: '实验室1',
          value: 1
        },
        {
          label: '实验室2',
          value: 2
        },
        {
          label: '实验室3',
          value: 3
        }
      ],
      active: 1,
      tabIndex: 0,
      componentData: {
                    entity: {
            state: 1,
            insState: null,
            sample: null,
                        orderBy: {
                            field: 'type',
                            order: 'desc'
                        }
                    },
                    isIndex: true,
                    showSelect: false,
                    select: false,
                    do: [{
                        id: '',
                        font: '检验',
                        type: 'text',
                        method: '',
                        field:[]
                    },{
                        id: '',
                        font: '交接',
                        type: 'text',
                        method: ''
                    },
          {
                        id: '',
                        font: '复核',
                        type: 'text',
                        method: ''
                    },{
                        id: '',
                        font: '认领',
                        type: 'text',
                        method: ''
                    }],
                    tagField: {
            type:{
              select:[]
            },
            insState:{
              select:[]
            }
          },
                    selectField: {},
                    requiredAdd:[],
                    requiredUp:[]
                },
      upIndex: 0,
      planTotal: 0,
      insStateList: []
    }
  },
  created(){
    this.getTypeDicts()
    this.getInsStateDicts()
  },
  methods:{
    upUser(){
    },
    refreshTable() {
      this.$refs.insOrderPlan.selectList()
      this.$nextTick(()=>{
        this.planTotal = this.$refs.insOrderPlan.total
      })
    },
    changeRowClass(obj,rowIndex){
      let currentTime = getYearAndMonthAndDays()
      if(obj.row.sendTime && currentTime===obj.row.sendTime){
        return 'highlight-warning-row-border'
      }else if(obj.row.sendTime && currentTime>obj.row.sendTime){
        return 'highlight-danger-row-border'
      }
      return ''
    },
    onReset(){
      this.searchForm = {
        sampleName: null,
        state: null,
      }
      this.componentData.entity.insState = null
      this.componentData.entity.sample = null
      this.refreshTable()
    },
    onSubmit(){
      this.componentData.entity.insState = this.searchForm.state
      this.componentData.entity.sample = this.searchForm.sampleName
      this.$nextTick(()=>{
        this.refreshTable()
      })
    },
    handleTab(m, i) {
      this.tabIndex = i;
      //this.componentData.entity.state = m.value
      //this.refreshTable()
    },
    getTypeDicts() {
      this.$axios.post(this.$api.enums.selectEnumByCategory, {
        category: "紧急程度"
      }).then(res => {
        let data = res.data
        data.forEach(ele=>{
          if(ele.value==='0'){
            ele.type='success'
          }else if(ele.value==='1'){
            ele.type='warning'
          }else if(ele.value==='2'){
            ele.type='danger'
          }
        })
        this.componentData.tagField.type.select = data
      })
    },
    getInsStateDicts() {
      this.$axios.post(this.$api.enums.selectEnumByCategory, {
        category: "检验任务状态"
      }).then(res => {
        let data = res.data
        this.insStateList = data
        data.forEach(ele=>{
          //0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过
          if(['2','5'].includes(ele.value)){
            ele.type='success'
          }else if(['1','3'].includes(ele.value)){
            ele.type='warning'
          }else if(['0','4'].includes(ele.value)){
            ele.type='danger'
          }
        })
        this.componentData.tagField.insState.select = data
      })
    },
  }
}
</script>
src/components/view/enums.vue
@@ -153,4 +153,4 @@
            }
        }
    }
</script>
</script>
src/util/date.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
/**
 * èŽ·å–å¹´æœˆæ—¥
 */
export function getYearAndMonthAndDays() {
  const date = new Date()
  let year = date.getFullYear()
  let month = date.getMonth() + 1
  if (month < 10) {
    month = '0' + month + '-'
  } else {
    month = month + '-'
  }
  year = year + '-'
  let days = date.getDate()
  return year + month + days
}
static/js/menu.js
@@ -22,8 +22,8 @@
        }, {
            v: "检验任务",
            i: "font icon-erjidaohang",
            u: "",
            p: ""
            u: "b1-inspect-order-plan",
            p: "selectInsOrderPlanList"
        }, {
            v: "报告编制",
            i: "font icon-erjidaohang",