licp
2024-09-02 811bbc3feb318238214d022cb3a7458176f28e55
新增插队、扫码枪等功能
已修改7个文件
342 ■■■■■ 文件已修改
src/assets/api/controller.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-ins-order/add.vue 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-inspect-order-plan/Inspection.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tool/value-table.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-inspect-order-plan.vue 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-sample.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -206,6 +206,7 @@
  getReportModel: "/insOrderPlan/getReportModel", // 切换光纤-光纤带记录模版查询检验内容
  write: "/insOrderPlan/write", // 填写温度与湿度
  temCycle: "/insOrderPlan/temCycle", // 温度循环查看列表数据(包括通过样品id,循环次数,温度,循环次数进行筛选)
  jumpTeam: "/insOrderPlan/jumpTeam", // 插队
}
const systemLog = {
src/components/do/b1-ins-order/add.vue
@@ -384,7 +384,7 @@
              <el-input size="small" v-model="scope.row.sample" clearable :readonly="active>1"></el-input>
            </template>
          </el-table-column>
          <el-table-column prop="sampleCode" label="样品编号" min-width="140" align="center">
          <el-table-column prop="sampleCode" label="样品编号" min-width="100" align="center">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.sampleCode" clearable placeholder="不填写则系统自动生成"
                :readonly="active>1"></el-input>
@@ -399,7 +399,7 @@
              </el-select>
            </template>
          </el-table-column>
          <el-table-column prop="modelNum" label="型号参数" width="130" align="center" v-if="!(active>1)">
          <el-table-column prop="modelNum" label="型号参数" min-width="100" align="center" v-if="!(active>1)">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.modelNum" clearable placeholder="非必填"
                @keyup.enter.native="methodChange(scope.row.standardMethodListId, scope.row)"
@@ -412,6 +412,15 @@
                placeholder="检验标准" size="small" :loading="methodLoad" @change="(value)=>methodChange(value, scope.row)"
                @focus="methodFocus" :readonly="active>1" style="width: 100%;" clearable @clear="productList = []">
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column prop="testRequirements" label="试验标准" align="center" min-width="100">
            <template slot-scope="scope">
              <el-select v-model="scope.row.testRequirements" :disabled="scope.row.model==null||active>1"
                placeholder="试验标准" size="small" :readonly="active>1" style="width: 100%;" clearable>
                <el-option v-for="item in standard" :key="item.id" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </template>
@@ -1127,7 +1136,8 @@
        temId: '',
        sonLaboratoryList:[],
        selectiveEcho: [], // 检验下单的时候勾选检验项目,如果使用筛选提交显示检验项目为空 回显列表
        deaprtEnum:[]
        deaprtEnum:[],
        standard:[]
      }
    },
    watch: {
@@ -1193,6 +1203,7 @@
      // this.selectInsOrderTemplate()
      this.getAuthorizedPerson();
      this.selectEnumByCategoryForUnit()
      this.selectEnumByCategoryForStandard()
      this.selectStandardMethods()
      this.selectEnumByCategoryForOrderType()
      this.selectDepartmentEnum()
@@ -1594,10 +1605,11 @@
        }else if(this.addObj.orderType&&this.addObj.orderType!='C'&&!this.addObj.departmentLimsId){
          this.addObj.departmentLims = '检测中心'
          this.addObj.departmentLimsId = this.deaprtEnum.find(m=>m.name=='检测中心').id
        }else{
          this.$message.error('请选择检验类别')
          return
        }
        // else{
        //   this.$message.error('请选择检验类别')
        //   return
        // }
        if (!this.addObj.companyId) {
          this.$message.error('未选择客户单位')
          return
@@ -2137,9 +2149,15 @@
        })
      },
      getProNum() {
        this.sampleSelectionList.forEach((m, i) => {
          Vue.set(this.sampleSelectionList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
        })
        if (this.active != 1) {
          this.sampleList.forEach((m, i) => {
            Vue.set(this.sampleList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
          })
        }else{
          this.sampleSelectionList.forEach((m, i) => {
            Vue.set(this.sampleSelectionList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
          })
        }
        this.$refs.sampleTable.doLayout()
      },
      searchFilter() {
@@ -2559,6 +2577,13 @@
          this.units = res.data
        })
      },
      selectEnumByCategoryForStandard() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "试验标准"
        }).then(res => {
          this.standard = res.data
        })
      },
      selectEnumByCategoryForOrderType() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "检验类别"
src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -440,6 +440,9 @@
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='样品型号'">
                    <div :style="`font-family:${n.v.ff} !important;`" v-if="currentSample.model!==undefined&&currentSample.model!==null">{{currentSample.model}}</div>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='试验标准'">
                    <div :style="`font-family:${n.v.ff} !important;`" v-if="currentSample.testRequirements!==undefined&&currentSample.testRequirements!==null">{{currentSample.testRequirements}}</div>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='套管'">
                    <div style="display: flex;flex-wrap: nowrap;align-items: center;">
                      <!-- <i class="el-icon-caret-left table_caret" @click="caretBushing(-1)"></i> -->
@@ -2739,6 +2742,7 @@
              }
            }
          })
          console.log(4444,a.template)
          // 操作赋值--主要赋值单位,试验方法等信息
          ids.forEach(id => {
            for (let b = 0; b < a.template.length; b++) {
@@ -2751,6 +2755,9 @@
                    .ps.value === '检测方法')) {
                  a.template[b].v.v = id.product.methodS
                }
                // if (a.template[b].v.ps != undefined && (a.template[b].v.ps.value === '试验标准')) {
                //   a.template[b].v.v = id.product.testRequirements
                // }
              }
            }
          })
src/components/tool/value-table.vue
@@ -4,6 +4,10 @@
    height: 100%;
    overflow-y: auto;
  }
  >>>.el-table__row {
    cursor: move;
    position: relative;
  }
  .table {
    width: 100%;
@@ -118,7 +122,7 @@
        @row-click="rowClick" :show-summary="data.countFleid!=undefined && data.countFleid.length > 0"
        :summary-method="getSummaries" :row-class-name="tableRowClassName" :row-key="record=>record[rowKey]"
        :current-row-key="data.currentId" :highlight-current-row="data.highlight===undefined||data.highlight"
        :span-method="spanMethod" :key="specialKey">
        :span-method="spanMethod" :key="specialKey" :class="{sortable:data.sortable}">
        <el-table-column type="selection" :width="selectionWidth" v-if="data.showSelect" :key="Math.random()">
        </el-table-column>
        <el-table-column type="index" align="center" label="序号" :width="selectionWidth" v-if="data.isIndex" :key="Math.random()">
@@ -332,12 +336,7 @@
</template>
<script>
  import {
    Page
  } from 'iview';
  import {
    data
  } from 'jquery';
  import Sortable from 'sortablejs';
  export default {
    props: {
      selectionWidth: {
@@ -503,8 +502,37 @@
        'token': sessionStorage.getItem('token')
      }
      this.specialKey = this.specialKey+Math.random()*100;
      // 是否可拖动列表--此功能暂时未实现
      if(this.data.sortable){
        this.$nextTick(() => {
          this.initializeSortable()
        })
      }
    },
    methods: {
      initializeSortable() {
        let className =".el-table__body-wrapper > table > tbody";
        const table= document.querySelector(className);
        const self = this
        Sortable.create(table, {
        animation: 150, //动画时长
        handle: ".el-table__row", //可拖拽区域class
        onEnd({ newIndex, oldIndex }) {
            console.log(3333,newIndex, oldIndex)
            const movedItem = this.tableData[oldIndex];
            this.tableData.splice(oldIndex, 1);
            this.tableData.splice(newIndex, 0, movedItem);
          }
        })
      },
      getUpdatedOrder() {
        // 根据拖拽后的顺序获取更新的数据
        // 这里需要实现你的逻辑
      },
      updateTableData(newOrder) {
        // 根据新的顺序更新表格数据
        // 这里需要实现你的逻辑
      },
      rowspan(spanArr, position, spanName) {
        this.tableData.forEach((item, index) => {
          if (index === 0) {
src/components/view/b1-inspect-order-plan.vue
@@ -97,6 +97,10 @@
    .view-self-checkbox {
        margin-left: 50px;
    }
  .draggable-row {
    cursor: move;
    position: relative;
  }
</style>
<style>
    .ins-order-plan-main .el-form-item__label{
@@ -154,10 +158,101 @@
                        </el-col>
                    </el-row>
                </div>
                <ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan"
                <!-- <ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan"
                    :isColumnWidth="true"
                    :url="$api.insOrderPlan.selectInsOrderPlanList" :upUrl="$api.user.updateUser" :componentData="componentData" @handleInspection="handleInspection"
                    :key="upIndex"/>
                    :key="upIndex"/> -->
          <el-table
          :data="tableData"
          ref="table"
          border
          style="width: 100%;"
          height="calc(100% - 80px)"
          :row-class-name="rowClassName"
          v-loading="tableLoading"
        >
          <el-table-column
            prop="entrustCode"
            label="委托编号"
            width="140px"
          >
            <template slot-scope="scope">
              <el-button @click="selectAllByOne(scope.row)" type="text" size="small">{{ scope.row.entrustCode }}</el-button>
            </template>
          </el-table-column>
          <el-table-column
            prop="sample"
            label="样品名称"
            width="100px"
          ></el-table-column>
          <el-table-column
            prop="type"
            label="紧急程度"
            width="100px"
          >
            <template slot-scope="scope">
              <el-tag :type="typeList.find(m=>m.value==scope.row.type).type" size="small">{{ typeList.find(m=>m.value==scope.row.type).label }}</el-tag>
            </template>
          </el-table-column>
          <el-table-column
            prop="insState"
            label="状态"
            width="100px"
          >
          <template slot-scope="scope">
              <el-tag :type="typeList.find(m=>m.value==scope.row.insState).type" size="small">{{ typeList.find(m=>m.value==scope.row.insState).label }}</el-tag>
            </template></el-table-column>
          <el-table-column
            prop="userName"
            label="检验人"
            width="140px"
          ></el-table-column>
          <el-table-column
            prop="checkName"
            label="复核人"
            width="100px"
          ></el-table-column>
          <el-table-column
            prop="appointed"
            label="约定时间"
            width="120px"
          ></el-table-column>
          <el-table-column
            prop="sendTime"
            label="下发时间"
            width="160px"
          ></el-table-column>
          <el-table-column
            prop="insTime"
            label="检验开始时间"
            width="160px"
          ></el-table-column>
          <el-table-column
            prop="verifyTell"
            label="理由"
            width="150px"
          ></el-table-column>
          <el-table-column
            fixed="right"
            align="center" label="操作"
            width="250px"
          >
          <template slot-scope="scope">
            <el-button @click="handleDataLook(scope.row)" type="text" size="small">数据查看</el-button>
            <el-button @click="handleInspection(scope.row)" type="text" size="small" :disabled="scope.row.userName == null || scope.row.insState == 3 || scope.row.insState == 5||scope.row.insState == 6||(scope.row.userName&&!scope.row.userName.includes(userName))">检验</el-button>
            <el-button @click="handleConnect(scope.row)" type="text" size="small" :disabled="scope.row.userName == null || scope.row.insState == 5  || scope.row.insState == 3||scope.row.insState == 6||(scope.row.userName&&!scope.row.userName.includes(userName))">交接</el-button>
            <el-button @click="handleReview(scope.row)" type="text" size="small" :disabled="scope.row.userName == null || scope.row.insState != 3 ||(scope.row.checkName&&!scope.row.checkName.includes(userName))">复核</el-button>
            <el-button @click="claimFun(scope.row)" type="text" size="small" :disabled="scope.row.userName != null || scope.row.checkName!=null">认领</el-button>
          </template>
          </el-table-column>
        </el-table>
        <div style="display: flex;justify-content: flex-end;width: 100%;margin-top: 10px;">
          <span></span>
          <el-pagination @size-change="refreshTable" @current-change="refreshTable" :current-page="page.current"
            :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper"
            :total="total">
          </el-pagination>
        </div>
            </div>
        </div>
        <el-dialog title="提示" :visible.sync="claimVisible" width="400px">
@@ -219,7 +314,7 @@
        getYearAndMonthAndDays
    } from '../../util/date'
    import Add from '../do/b1-ins-order/add.vue'
import { CellGroup } from 'iview'
  import Sortable from 'sortablejs';
    export default {
        components: {
            ValueTable,
@@ -299,6 +394,7 @@
                        insState: null,
                        userId: null
                    },
          sortable:true,
                    isIndex: true,
                    showSelect: false,
                    select: false,
@@ -387,6 +483,7 @@
                    requiredAdd: [],
                    requiredUp: []
                },
        userName:JSON.parse(localStorage.getItem("user")).name,
                upIndex: 0,
                planTotal: 0,
                insStateList: [],
@@ -403,7 +500,29 @@
        },
        loading:false,
        currentTime: null,
        sonLaboratoryList:[]
        sonLaboratoryList:[],
        tableData: [],
        page:{
          current:1,
          size:20,
        },
        total:0,
        tableLoading:false,
        jumpTeam:false,
        insResultList:[{
          value: 0,
          label: '不合格',
          type: 'danger'
        },{
          value: 1,
          label: '合格',
          type: 'success'
        },{
          value: '',
          label: '未出结果',
          type: 'info'
        }],
        typeList:[]
            }
        },
        created() {
@@ -416,8 +535,43 @@
        mounted() {
            this.entityCopy = this.HaveJson(this.componentData.entity)
      this.getPower()
      if(this.jumpTeam){
        this.initializeSortable();
      }
        },
        methods: {
      initializeSortable() {
        const tableBody = this.$refs.table.$el.querySelector('.el-table__body-wrapper > table > tbody');
        if (tableBody) {
          Sortable.create(tableBody, {
            handle: '.el-table__row', // 拖动手柄
            animation: 150,
            onEnd: this.handleSortEnd,
          });
        } else {
          console.error('Table body not found.');
        }
      },
      handleSortEnd(evt) {
        const oldIndex = evt.oldIndex;
        const newIndex = evt.newIndex;
        const movedItem = this.tableData[oldIndex];
        this.$axios.post(this.$api.insOrderPlan.jumpTeam,
          {
            id: movedItem.id,
            sort: newIndex+1,
            ...this.page
          }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }
        ).then(res => {})
      },
      rowClassName({ row, rowIndex }) {
        return 'draggable-row';
      },
            // 数据查看
            handleDataLook(row) {
                this.componentDataDataLook.entity.id = row.id
@@ -430,6 +584,7 @@
                let connect = false
                let review = false
        let claim = false
        let jumpTeam = false
                for (var i = 0; i < power.length; i++) {
                    if (power[i].menuMethod == 'doInsOrder') {
                        inspection = true
@@ -442,6 +597,9 @@
                    }
          if (power[i].menuMethod == 'claimInsOrderPlan') {
                        claim = true
                    }
          if (power[i].menuMethod == 'jumpTeam') {
                        jumpTeam = true
                    }
                }
                if (!claim) {
@@ -456,6 +614,7 @@
                if (!inspection) {
                    this.componentData.do.splice(0, 1)
                }
        this.jumpTeam = jumpTeam
            },
            changeCheckBox(val) {
                this.componentData.entity.userId = val?0:null
@@ -499,8 +658,20 @@
          this.loading = false;
                })
            },
            refreshTable(e) {
                this.$refs.insOrderPlan.selectList(e)
            refreshTable() {
                this.tableLoading = true
        this.$axios.post(this.$api.insOrderPlan.selectInsOrderPlanList,{
          entity:this.componentData.entity,
          page:this.page
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then((res) => {
          this.tableLoading = false
          this.total = res.data.body.total
          this.tableData = res.data.body.records
        })
            },
            changeRowClass({
                row,
@@ -549,6 +720,7 @@
                        }
                    })
                    this.componentData.tagField.type.select = data
          this.typeList = data
                })
            },
            getInsStateDicts() {
src/components/view/b1-sample.vue
@@ -222,7 +222,7 @@
                  effect="dark"
                  placement="top"
                  v-for="(n,j) in m.samples"
                  :key="j" :disabled="`${n.sample}${n.model}`.length<10">
                  :key="j" :disabled="`${n.sample}${n.model}`.length<5">
                    <div slot="content"><span>{{ n.sample }}</span>
                      <span>&nbsp;({{ n.model }})&nbsp;[{{ n.sampleCode }}]</span></div>
                    <li class="green"
@@ -366,6 +366,7 @@
        <el-button type="primary" @click="confirmShelves" :loading="upLoadShelves">确 定</el-button>
      </span>
    </el-dialog>
    <input type="password" id="ScanCodeInfo" v-model="codeInfo" @keyup.enter="keyup" style="opacity: 0;height: 0px;margin: 0px;padding: 0px;position: absolute;top: 0;"></input>
  </div>
</template>
@@ -382,6 +383,7 @@
          shelfId: null
        },
        warehouse: [],
        startTime: null,
        shelf: [],
        storageList:[],
        storageVisible: false,
@@ -406,13 +408,64 @@
        tableLoading:false,
        sampleCode:'',
        currentId:null,
        searchSampleCode:''
        searchSampleCode:'',
        codeInfo:null,
      }
    },
    watch:{
      storageVisible(newVal){
        if(newVal){
            // this.$message.success('扫码:打开')
            let input = document.getElementById('ScanCodeInfo');
            input.focus();
            this.startTime = setInterval(()=>{
                input.focus()
            },1000)
        }else{
            // this.$message.warning('扫码:关闭')
            clearInterval(this.startTime)
        }
      },
      exportVisible(newVal){
        if(newVal){
            // this.$message.success('扫码:打开')
            let input = document.getElementById('ScanCodeInfo');
            input.focus();
            this.startTime = setInterval(()=>{
                input.focus()
            },1000)
        }else{
            // this.$message.warning('扫码:关闭')
            clearInterval(this.startTime)
        }
      },
    },
    mounted() {
      this.selectList()
    },
    methods: {
      keyup(e){
        var code = ''
        var str = {}
        var that = this;
        console.log(3333,this.codeInfo)
        try{
            code = JSON.parse(this.codeInfo)
            if(code.moNo2==null||code.moNo2==undefined||code.moNo2==''){
                this.$message.error('该二维码有误')
            }else{
                str = {
                    moNo2: code.moNo2,
                }
                // if(this.storageVisible){
                // }else if(this.exportVisible){}
                this.sampleCode = code.moNo2
            }
        }catch(e){
            this.$message.error('该二维码有误')
        }
        this.codeInfo = null
      },
      selectList() {
        this.$axios.get(this.$api.warehouse.selectWarehouse).then(res => {
          this.warehouse = res.data
src/main.js
@@ -18,9 +18,9 @@
Vue.prototype.PROJECT = '检测中心'
// Vue.prototype.PROJECT = '装备电缆'
//本地
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
const javaApi = 'http://127.0.0.1:8001';
// const javaApi = 'http://192.168.0.104:8001';
// Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
// const javaApi = 'http://127.0.0.1:8001';
const javaApi = 'http://192.168.212.249:8001';
// //通信测试库
// Vue.prototype.LOCATIONVUE = "http://10.1.13.77:8080";
@@ -28,7 +28,7 @@
//云
// Vue.prototype.LOCATIONVUE = "http://114.132.189.42:8080";
//const javaApi = 'http://114.132.189.42:1234';
// const javaApi = 'http://114.132.189.42:1234';
// //检测中心正式库
// Vue.prototype.LOCATIONVUE = "http://10.1.200.86:8080";