licp
2024-05-22 ef4e46f182aee6253805e66286dee847c573cbde
src/views/quality/rawMaterial/rawMaterial-form.vue
@@ -3,11 +3,11 @@
    <div class="page-header">
      <div class="header-left">
        <a @click="$router.go(-1)"><i class="icon-btn-back"></i></a>
        <h2 v-if="resultVal!=null && dataForm.id!=null">查看-原材料检验</h2>
        <h2 v-if="(resultVal!=null && resultVal!='') && dataForm.id!=null">查看-原材料检验</h2>
        <h2 v-else>编辑-原材料检验</h2>
      </div>
      <div class="btn-group header-right">
        <el-button @click="save()" v-if="this.dataForm.id==null">保存</el-button>
        <el-button @click="save()" type="primary" v-if="dataForm.id==null">保存</el-button>
      </div>
    </div>
    <div class="page-main">
@@ -21,41 +21,54 @@
        label-width="110px">
            <el-row>
              <el-col :span="6">
                <el-form-item label="原材料检验编号" prop="rawInsNo">
                <el-input v-model="dataForm.rawInsNo" disabled>
                </el-input>
                </el-form-item>
            </el-col>
              <el-col :span="6">
                <el-form-item label="零件号" prop="code">
                <el-input v-model="dataForm.code" :disabled="resultVal!=null && dataForm.id!=null">
                <el-input v-model="dataForm.code" :disabled="dataForm&&dataForm.id!==null&&dataForm.id!==''">
                  <el-button
                    slot="append"
                    icon="el-icon-search"
                    :disabled="resultVal!=null && dataForm.id!=null"
                    @click="queryCode()"></el-button>
                    :disabled="dataForm&&dataForm.id!==null&&dataForm.id!==''"
                    @click="queryCode"></el-button>
                    <el-button
                    slot="append"
                    icon="el-icon-full-screen"
                    :disabled="dataForm&&dataForm.id!==null&&dataForm.id!==''"
                    @click="Turnonthecamera"></el-button>
                </el-input>
                </el-form-item>
            </el-col>
            <el-col :span="6">
                <el-form-item prop="name" label="原材料名称">
                <el-input v-model="dataForm.name" disabled >
                </el-input>
                  <el-tooltip class="item" effect="dark" :content="dataForm.name">
                  <el-input v-model="dataForm.name" disabled ></el-input>
                </el-tooltip>
                </el-form-item>
            </el-col>
            <el-col :span="6">
                <el-form-item prop="formTime" label="来料日期">
                <el-date-picker
                <el-date-picker
                    style="width:100%"
                    v-model="dataForm.formTime"
                    type="datetime"
                    value-format="yyyy-MM-dd HH:mm:ss"
                    disabled>
                </el-date-picker>
                </el-form-item>
            </el-col>
            <el-col :span="6">
                <el-form-item label="规格型号" prop="specs">
                <el-input v-model="dataForm.specs" disabled></el-input>
                </el-form-item>
            </el-col>
            </el-row>
            <el-row>
              <el-col :span="6">
                <el-form-item label="规格型号" prop="specs">
                  <el-tooltip class="item" effect="dark" :content="dataForm.specs">
                    <el-input v-model="dataForm.specs" disabled></el-input>
                  </el-tooltip>
                </el-form-item>
              </el-col>
                <el-col :span="6">
                    <el-form-item prop="unit" label="单位">
                        <el-input
@@ -66,158 +79,276 @@
                </el-col>
                <el-col :span="6">
                    <el-form-item label="供应商名称" prop="supplier">
                      <el-tooltip class="item" effect="dark" :content="dataForm.supplier" >
                        <el-input v-model="dataForm.supplier" disabled />
                      </el-tooltip>
                    </el-form-item>
                </el-col>
                <el-col :span="6">
                  <el-form-item label="数量" prop="number">
                      <el-input v-model="dataForm.number" :disabled="resultVal!=null" />
                      <el-input v-model="dataForm.number" :disabled="dataForm&&dataForm.id!==null&&dataForm.id!==''" />
                  </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="6">
                  <el-form-item  prop="projectName" label="项目名称">
                    <el-form-item label="报检日期" prop="startTime">
                        <el-date-picker
                        disabled
                        v-model="dataForm.startTime"
                        type="datetime"
                        format="yyyy-MM-dd HH:mm:ss"
                        value-format="yyyy-MM-dd HH:mm:ss"
                        placeholder="报检日期">
                        </el-date-picker>
                    </el-form-item>
                </el-col>
                <el-col :span="6" v-if="dataForm.id!=null">
                  <el-form-item label="报检人" prop="createUser" >
                        <el-input v-model="dataForm.createUser" disabled />
                  </el-form-item>
                </el-col>
                <el-col :span="6" v-if="dataForm.id!=null">
                  <el-form-item  prop="projectName" label="项目名称" >
                    <el-tooltip :disabled="dataForm.projectName==null" :content="dataForm.projectName">
                      <el-input v-model="dataForm.projectName" disabled ></el-input>
                    </el-tooltip>
                  </el-form-item>
              </el-col>
            </el-row>
            <el-row>
              <el-col :span="6">
                  <el-form-item label="报检日期" prop="createTime" v-if="dataForm.id!=null">
                      <el-input v-model="dataForm.createTime" disabled />
                  </el-form-item>
              </el-col>
              <el-col :span="6">
                <el-form-item label="报检人" prop="createUser" v-if="dataForm.id!=null">
                      <el-input v-model="dataForm.createUser" disabled />
                </el-form-item>
              </el-col>
                    <el-form-item label="备注" prop="remark">
                        <el-input :disabled="dataForm&&dataForm.id!==null&&dataForm.id!==''" v-model="dataForm.remark" />
                    </el-form-item>
                </el-col>
            </el-row>
        </el-form>
      </div>
      <div class="rawMaterial-detail">
        <el-row style="width:100%;z-index: 10;height:50px;">
            <el-col :span="18">检验项目</el-col>
            <el-col :span="6">
                <div style="width:100%;text-align: right;">
                    <el-button v-if="dataForm.id==null" size="small" @click="clickAddLine()">添加检验项目</el-button>
                    <el-button v-if="resultVal==null || dataForm.id==null" size="small" @click="addTeatValueColumn()">添加检测值列</el-button>
                    <el-button v-if="resultVal==null || dataForm.id==null" size="small" @click="delTeatValueColumn()">删除检测值列</el-button>
                </div>
            </el-col>
        </el-row>
        <el-row style="width:100%;">
            <el-col :span="24">
                <el-table
                :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}"
                :cell-style="{textAlign:'center'}"
                 ref="table"
                :data="list"
                border
                style="width: 100%;"
                 height="400"
                  row-key="iid"
                  default-expand-all
                  :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                  <el-table-column type="index" label="序号" width="60">
                  </el-table-column>
                  <el-table-column prop="father" label="检验项目" width="260">
                    <template slot-scope="scope">
                      <el-input v-if="scope.row.children" style="width:90%" :disabled="dataForm.id!=null" v-model="scope.row.father" placeholder="请输入检验项目"></el-input>
                    </template>
                  </el-table-column>
                  <el-table-column prop="name" label="项目" width="260">
                    <template slot-scope="scope">
                    <div v-if="!scope.row.children">
                      <el-input class="inline-input" :disabled="dataForm.id!=null" v-model="scope.row.name"
                        placeholder="请输入项目名称"></el-input>
                  </div>
                      </template>
                  </el-table-column>
                  <el-table-column prop="unit" label="单位" width="260">
                    <template slot-scope="scope">
                    <div v-if="!scope.row.children">
                      <el-input :disabled="dataForm.id != null" v-model="scope.row.unit" placeholder="请输入单位"></el-input>
                    </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="required" label="标准值" width="260">
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                      <el-input :disabled="dataForm.id != null" v-model="scope.row.required"
                        placeholder="请输入标准值"></el-input>
      <div>
        <el-tabs class="rawMaterial-detail" @tab-click="tabsClick">
          <el-tab-pane label="检验项目">
            <el-row style="width:100%;z-index: 10;height:50px;" v-if="resultVal==null">
                <el-col :span="12"></el-col>
                <el-col :span="12" style="text-align: right;">
                    <el-button v-if="dataForm.id&&resultVal==null" size="small"
                    type="primary"
                    @click="saveTable()">保存</el-button>
                  <el-button v-if="dataForm.id==null" size="small" @click="clickAddLine()">添加检验项目</el-button>
                  <el-button class="pad-addcol-btn" v-if="resultVal==null || dataForm.id==null" size="small" @click="addTeatValueColumn()">添加检测值列</el-button>
                  <el-button v-if="resultVal==null || dataForm.id==null" size="small" @click="delTeatValueColumn()">删除检测值列</el-button>
                </el-col>
            </el-row>
            <el-row style="width:100%;">
                <el-col :span="24">
                    <el-table
                    :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}"
                    :cell-style="{textAlign:'center'}"
                    ref="table"
                    :data="list"
                    border
                    style="width: 100%;"
                    height="400"
                    row-key="iid"
                    default-expand-all
                    :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                      <el-table-column type="index" prop="parentIndex" label="序号" width="60">
                        <template scope="scope">
                            <span v-if="scope.row.isIndex">{{scope.row.parentIndex}}</span>
                        </template>
                      </el-table-column>
                      <el-table-column prop="father" label="检验项目" width="160">
                        <template slot-scope="scope">
                          <el-input v-if="scope.row.children" style="width:80%" :disabled="dataForm.id!=null&&(resultVal!=null && resultVal!='')" v-model="scope.row.father" placeholder="请输入检验项目"
                          :ref="'inspectProject'+scope.$index"
                          :id="'inspectProject'+scope.$index"
                          @keyup.native="moveFocus($event, scope.$index, 'inspectProject')"></el-input>
                        </template>
                      </el-table-column>
                      <el-table-column prop="name" label="项目" width="160">
                        <template slot-scope="scope">
                        <div v-if="!scope.row.children">
                          <el-input class="inline-input" :disabled="dataForm.id!=null&&(resultVal!=null && resultVal!='')" v-model="scope.row.name"
                            placeholder="请输入项目名称"
                            :ref="'project'+scope.$index"
                            :id="'project'+scope.$index"
                             @keyup.native="moveFocus($event, scope.$index, 'project')"></el-input>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="testValue" label="检测值" min-width="260" v-for="(item,index) in empiricalValueAdd" :key="index">
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                      <el-tooltip :disabled="scope.row.deviceId != null" class="item" effect="dark" content="请先选择设备!"
                        placement="top-start">
                        <el-col v-if="scope.row.itype === '1'">
                            <el-input :disabled="scope.row.deviceId == '' ||  (dataForm.id!=null&&resultVal!=null)"
                          </template>
                      </el-table-column>
                      <el-table-column prop="unit" label="单位" width="160">
                        <template slot-scope="scope">
                        <div v-if="!scope.row.children">
                          <el-input :disabled="dataForm.id!=null&&(resultVal!=null && resultVal!='')" v-model="scope.row.unit" placeholder="请输入单位"
                          :ref="'unit'+scope.$index"
                          :id="'unit'+scope.$index"
                          @keyup.native="moveFocus($event, scope.$index, 'unit')"></el-input>
                        </div>
                        </template>
                      </el-table-column>
                      <el-table-column prop="required" label="标准值" width="160">
                        <template slot-scope="scope">
                          <div v-if="!scope.row.children">
                          <el-input :disabled="dataForm.id!=null&&(resultVal!=null && resultVal!='')" v-model="scope.row.required"
                            placeholder="请输入标准值"
                            :ref="'standard'+scope.$index"
                            :id="'standard'+scope.$index"
                             @keyup.native="moveFocus($event, scope.$index, 'standard')"></el-input>
                          </div>
                        </template>
                      </el-table-column>
                      <el-table-column prop="testValue" label="检测值" min-width="160" v-for="(item,index) in empiricalValueAdd" :key="index">
                        <template slot-scope="scope">
                          <div v-if="!scope.row.children">
                            <!-- :disabled="scope.row.deviceId == null ||  (dataForm.id!=null&&(resultVal!=null && resultVal!=''))" -->
                                <!-- @input="$nextTick(()=>{checkTestValues(scope.row)})" -->
                                <!-- @blur.capture.native="changeState(scope.row)" -->
                            <el-tooltip :disabled="scope.row.deviceId != null" class="item" effect="dark" content="请先选择设备!" placement="top-start">
                                <el-autocomplete clearable
                                cache="false"
                                ref="testValueInput"
                                @blur="checkTestValues(scope.row,'blur',$event)"
                                @select="checkTestValues(scope.row,'select',$event)"
                                :disabled="scope.row.deviceId == null ||  (dataForm.id!=null&&(resultVal!=null && resultVal!=''))"
                                v-model="scope.row.testValueList[index]"
                                placeholder="请输入检测值"></el-input>
                        </el-col>
                          <el-col v-else>
                              <el-select style="width: 100%;"
                              :disabled="scope.row.deviceId == null ||  (dataForm.id!=null&&resultVal!=null)"
                              v-model="scope.row.testValueList[index]" placeholder="请选择">
                                  <el-option v-for="item in dataVal" :key="item.value" :label="item.label"
                                      :value="item.value">
                                  </el-option>
                              </el-select>
                          </el-col>
                        </el-tooltip>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="deviceName" label="试验设备" min-width="260">
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                        <el-select :disabled="dataForm!=null && resultVal!=null" style="width:100%"
                        v-model="scope.row.deviceId" filterable @change="updateDevice(scope.row,scope.$index)">
                            <el-option v-for="(item,index) in deviceList"
                            :key="index" :value="item.id" :label="item.code +'-'+ item.name"></el-option>
                        </el-select>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="note" label="检验描述" width="260" >
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                      <el-input :disabled="scope.row.deviceId == null ||  (dataForm.id!=null&&resultVal!=null)" v-model="scope.row.note" placeholder="检验描述"></el-input>
                    </div>
                    </template>
                  </el-table-column>
                  <el-table-column fixed="right" v-if="dataForm.id != null" prop="testState" label="结论" min-width="150">
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                        <span v-if="scope.row.testState == 0" style="color:#F56C6C">不合格</span>
                        <span v-else-if="scope.row.testState == 1" style="color:#67C23A">合格</span>
                        <span v-else>暂无结论</span>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column fixed="right" style="background-color: white;" v-if="dataForm.id == null" label="操作" width="150">
                    <template slot-scope="scope">
                      <div>
                          <el-button v-if="scope.row.father!=null" type="text"  @click="addChildren(scope.row)">添加项目</el-button>
                          <el-button v-else type="text" @click="delChildren(scope,scope.$index)">取消</el-button>
                      </div>
                    </template>
                  </el-table-column>
                </el-table>
            </el-col>
        </el-row>
                                :fetch-suggestions="querySearch"
                                placeholder="请输入或选择检测值"
                                :id="`detectionValue${index}`+scope.$index"
                                @keyup.native="moveFocus($event, scope.$index, `detectionValue${index}`)">
                                <template slot-scope="{ item }">
                                    <div>{{ item.value }}</div>
                                </template>
                                </el-autocomplete>
                            </el-tooltip>
                          </div>
                        </template>
                      </el-table-column>
                      <el-table-column prop="deviceName" label="试验设备" min-width="200">
                        <template slot-scope="scope">
                          <div v-if="!scope.row.children">
                            <el-select ref="" :disabled="dataForm!=null && (resultVal!=null && resultVal!='')" style="width:60%"
                            v-model="scope.row.deviceId" filterable @change="updateDevice(scope.row,scope.$index)">
                                <el-option v-for="(item,index) in deviceList"
                                :key="index" :value="item.id" :label="item.code +'-'+ item.name"></el-option>
                            </el-select>
                            <el-button
                            size="small"
                            slot="append"
                            icon="el-icon-full-screen"
                            :disabled="dataForm!=null && (resultVal!=null && resultVal!='')"
                            @click="codeDevice(scope.row,scope.$index)"></el-button>
                          </div>
                        </template>
                      </el-table-column>
                      <el-table-column prop="note" label="检验描述" width="160" >
                        <template slot-scope="scope">
                          <div v-if="!scope.row.children">
                            <el-input @blur="checkTestValues(scope.row,'blur',$event)" :disabled="scope.row.deviceId == null ||  (dataForm.id!=null&&(resultVal!=null && resultVal!=''))" v-model="scope.row.note" placeholder="检验描述"
                            :ref="`remark`+scope.$index"
                            :id="`remark`+scope.$index"
                            @keyup.native="moveFocus($event, scope.$index, `remark`)"></el-input>
                          </div>
                        </template>
                      </el-table-column>
                      <el-table-column fixed="right" v-if="dataForm.id != null" prop="testState" label="结论" min-width="150">
                        <template slot-scope="scope">
                          <div v-if="!scope.row.children">
                            <span v-if="scope.row.testState == 0" style="color:#F56C6C">不合格</span>
                            <span v-else-if="scope.row.testState == 1" style="color:#67C23A">合格</span>
                            <span v-else>暂无结论</span>
                          </div>
                        </template>
                      </el-table-column>
                      <el-table-column fixed="right" style="background-color: white;" v-if="dataForm.id == null" label="操作" width="150">
                        <template slot-scope="scope">
                          <div v-if="scope.row.fId!=null">
                              <el-button type="text"  @click="addChildren(scope.row)">添加项目</el-button>
                              <el-button type="text" @click="delChildren(scope.row,scope.$index,true)">删除行</el-button>
                          </div>
                          <el-button v-else type="text" @click="delChildren(scope.row,scope.$index,false)">取消</el-button>
                        </template>
                      </el-table-column>
                    </el-table>
                </el-col>
            </el-row>
          </el-tab-pane>
          <el-tab-pane label="附件上传" type="card">
            <div style="display: flex;justify-content:flex-end;">
              <div></div>
            </div>
            <div
              v-loading="progrecessFileLoading"
              element-loading-text="请稍等,文件上传中"
            >
              <el-upload
                :disabled="dataForm.rawInsNo==null || (resultVal!=null && resultVal!='')"
                drag
                ref="upload"
                action="/mes/attachment/upload"
                :auto-upload="true"
                :headers="headers"
                :before-upload="submitUpload"
                :on-success="uploadSuccess"
                :data="paramData"
                :with-credentials="true"
                :show-file-list="false"
              >
                <i class="el-icon-upload"></i>
                <div class="el-upload__text">
                  将文件拖到此处,或<em>点击上传</em>
                </div>
              </el-upload>
            </div>
            <el-table :data="processConfigFileTableData" height="260px">
              <el-table-column
                prop="rawInsNo"
                align="center"
                width="120"
                label="原材料检验编号"
                show-overflow-tooltip
              ></el-table-column>
              <el-table-column
                prop="originalFileName"
                align="center"
                label="原文件名"
                width="200"
              ></el-table-column>
              <el-table-column prop="fileName" align="center" label="文件后缀"></el-table-column>
              <el-table-column prop="createUser" align="center" label="上传人"></el-table-column>
              <el-table-column
                prop="createTime"
                align="center"
                label="上传时间"
                show-overflow-tooltip
              ></el-table-column>
              <el-table-column prop="updateUser" align="center" label="更新人">
              </el-table-column>
              <el-table-column
                prop="updateTime"
                align="center"
                label="更新时间"
                show-overflow-tooltip
              ></el-table-column>
              <el-table-column align="center" label="操作">
                <template slot-scope="scope">
                  <el-button
                    @click="delProcessConfigFile(scope.row)"
                    type="text"
                    size="small"
                    :disabled="(resultVal!=null && resultVal!='')"
                    >删除</el-button
                  >
                  <el-button
                    @click="downloadProcessConfigFile(scope.row)"
                    type="text"
                    size="small"
                    >下载</el-button
                  >
                </template>
              </el-table-column>
            </el-table>
          </el-tab-pane>
        </el-tabs>
      </div>
      <div class="rawMaterial-result">
        <el-row>
          <el-col :span="24">检验结论</el-col>
@@ -225,20 +356,20 @@
        <el-row style="width:100%">
          <el-col :span="24">
            <el-table border height="90" :data="conclusionTable" ref="conclusion" v-model="conclusion"
            :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}"
            :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}"
            :cell-style="{textAlign:'center'}">
                <el-table-column prop="code" label="物料编号"></el-table-column>
                <el-table-column prop="name" label="物料名称"></el-table-column>
                <el-table-column prop="code" width="150" show-overflow-tooltip label="物料编号"></el-table-column>
                <el-table-column prop="name" width="150" show-overflow-tooltip label="物料名称"></el-table-column>
                <el-table-column prop="userName" label="检验员"></el-table-column>
                <el-table-column prop="judgeState" label="检验结论">
                  <template slot-scope="scope">
                    <el-tag type="success" v-if="scope.row.testState == '1'">合格</el-tag>
                    <el-tag type="danger" v-else-if="scope.row.testState == '0'">不合格</el-tag>
                    <el-tag type="success" v-if="scope.row.testState == 1">合格</el-tag>
                    <el-tag type="danger" v-else-if="scope.row.testState == 0">不合格</el-tag>
                  </template>
                </el-table-column>
                <el-table-column  label="操作">
                    <template>
                        <el-button type="text" :disabled="resultVal!=null && dataForm.id!=null" @click="showDialog()" size="small">上报</el-button>
                        <el-button type="text" :disabled="(resultVal!=null && resultVal!='') && dataForm.id!=null" @click="showDialog()" size="small">上报</el-button>
                    </template>
                </el-table-column>
            </el-table>
@@ -262,34 +393,73 @@
        <el-button type="primary" @click="submitSave()">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog
    title="扫描"
    :visible.sync="qrcode"
    width="60%">
    <div style="height: 100vh;width: 100%;">
      <qr-code-app ref="codeCompont" @ok="getResultInfo" @cancelCodeDialog="cancelCodeDialog"></qr-code-app>
    </div>
    <span slot="footer" class="dialog-footer">
      <el-button @click="qrcode = false">取 消</el-button>
      <el-button type="primary" @click="qrcode = false">确 定</el-button>
    </span>
    </el-dialog>
    <el-dialog
      title="设备扫描"
      :visible.sync="deviceCode"
      width="60%">
      <div style="height: 100vh;width: 100%;">
        <qr-code-app ref="codeDeviceCompont" @ok="getDeviceResultInfo" @cancelCodeDialog="cancelDeviceCodeDialog"></qr-code-app>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="deviceCode = false">取 消</el-button>
        <el-button type="primary" @click="deviceCode = false">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
import {
  selectDevice,
  addRawInspects,
  getObj,
  updateRawInsProduct,
  updateRawInspectsById,
  updateDeviceById, } from '@/api/quality/rawMaterial'
  updateRawInsProduct2,
  updateDeviceById, chooseIFS} from '@/api/quality/rawMaterial'
  import {
    getProcessConfigFiles,
    deleteProcessConfigFile,
    downloadProcessConfigFile
 } from '@/api/quality/attachment'
  import rawMaterialPartDialog from '@/views/common/rawMaterial-part'
export default {
    // props:['currentRow'],
  import { getStore } from '@/util/store'
  import qrCodeApp from '@/views/common/qrCodeApp'
  export default {
  components:{
    rawMaterialPartDialog,
    qrCodeApp,
  },
    computed:{},
    components:{
      rawMaterialPartDialog
    },
    data(){
        return{
          dataVal: [{
                label: '是',
                value: '是'
            }, {
                label: '否',
                value: '否'
            }],
          // componentData:{},
            progrecessFileLoading: false,
            processConfigFileTableData: [],
            fileList: [],
            headers: {
              Authorization: 'Bearer ' + getStore({ name: 'access_token' })
            },
            paramData: {
              no: '',
              lineNumber: '',
              type: 0
            },
            row: null,
            proIndex: 0,
            deviceCode: false,
            qrcode: false,
            userdata:[],
            currentRow:[],
            userlist:[],
@@ -311,11 +481,12 @@
                formTime: '',
                message: '',
                name: '',
                code: '88.118.1/A0498220',
                code: '',
                specs: '',
                unit: '',
                number: '',
                supplier: '',
                remark:'',
                rawInsProducts: [{
                  deviceId: 0,
                  father:'',
@@ -335,9 +506,13 @@
              userName: '',
              testState: ''
            }],
            dataRule: {},
            dataRule: {
              code:[{ required: true, message: '请扫描选择零件', trigger: 'blur' }],
            //   startTime: [{ required: true, message: '请选择报检日期', trigger: 'blur' }]
            },
            deviceList: [],
            restaurants:[],
            keyfield:['inspectProject','project','unit','standard','remark'],
            keyfield0:['detectionValue0']
        }
    },
    beforeUpdate(){
@@ -345,16 +520,15 @@
        this.$refs.table.doLayout();
      })
    },
    mounted(){
    created(){
      this.dataForm.id = this.$route.query.id
      this.resultVal = this.$route.query.resultVal
      this.resultVal = this.$route.params.resultVal
      if(this.resultVal == null){
        let val = sessionStorage.getItem("raw-resultVal-"+this.dataForm.id)
        val == undefined ? null : this.resultVal=val
      }
      this.init()
      this.init(this.dataForm.id)
      this.getDeviceList()
      this.restaurants = this.loadAll();
    },
    watch:{
      dialogVisible(newVal){
@@ -362,41 +536,132 @@
          this.unqualifiedNum = null
        }
      },
      empiricalValueAdd(newVal){
        if(newVal!=this.keyfield0.length){
            if(newVal>this.keyfield0.length){
                this.keyfield0 = []
                for(let i=0;i<newVal;i++){
                    this.keyfield0.push('detectionValue'+i)
                }
            }else{
                this.keyfield0.splice(this.keyfield0.length-1,1);
            }
        }
      }
    },
    methods:{
      querySearch(queryString, cb) {
        var restaurants = this.restaurants;
        var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
        cb(results);
      querySearch(queryString, cb){
        // 调用 callback 返回建议列表的数据
        cb([{value:'是'},{value:'否'}]);
      },
      // createFilter(queryString) {
      //     return (restaurant) => {
      //       return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
      //     };
      //   },
      // loadAll(){
      //   return [
      //   {"value":"是"},
      //   {"value":"否"}
      // ];},
      // handleSelect(item) {
      //   console.log(item);
      // },
      changeName(index,row){
        this.projectList.forEach(item=>{
          if(row.name == item.name){
            this.list[index].unit = item.unit
            this.list[index].required = item.required
      tabsClick(tab,even){
        if(tab.index == 1){
          if(this.dataForm.rawInsNo==null){
            this.$message.error("请先保存原材料检验信息")
            return
          }
            this.getConfigFiles();
        }
      },
      getConfigFiles() {
        const param = {
          no: this.dataForm.rawInsNo,
          lineNumber: this.dataForm.id,
          type: 0
        }
        getProcessConfigFiles(param).then((res) => {
          this.processConfigFileTableData = res.data.data
        })
      },
      downloadProcessConfigFile(row) {
        downloadProcessConfigFile({
            bucket: row.bucketName,
            fileName: row.fileName,
            originalFileName: row.originalFileName
        })
      },
      delProcessConfigFile(row) {
          this.$confirm('是否删除该附件', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning',
            closeOnClickModal: false
          }).then(function() {
            return deleteProcessConfigFile(row.id)
          }).then((data) => {
            this.getConfigFiles()
          })
      },
      submitUpload() {
        this.paramData.no = this.dataForm.rawInsNo
        this.paramData.lineNumber = this.dataForm.id
        this.progrecessFileLoading = true
      },
      uploadSuccess() {
        this.progrecessFileLoading = false
        this.getConfigFiles()
      },
      cancelDeviceCodeDialog(){
        this.deviceCode = false
      },
      getDeviceResultInfo(val){
        let id=val.split("id@")[1]
        if(id!=undefined&&id!=''&&id!=null){
          let filterData=this.deviceList.filter(item=>{
          return item.id==id
        })[0]
        console.log(filterData);
        this.row.deviceId=Number(id)
        this.updateDevice(this.row,this.proIndex)
        }else{
          this.$message({
          message: '二维码未识别出计量器具信息!',
          type: 'warning'
        });
        }
      },
      codeDevice(row,index){
        this.row=row
        console.log("row",row);
        this.deviceCode =true
        this.$refs.codeDeviceCompont.openCamera()
        this.proIndex=index
      },
      getResultInfo(data){
        if(!data.includes("part_no")){
          this.$message({
          message: '二维码未识别出零件信息!',
          type: 'warning'
        });
        }
        let obj=JSON.parse(data)
        let info={"code":obj["part_no"]}
        if(info.code!=undefined&&info.code!=''){
          this.paramObj = info
          this.showPart = true
        }else{
          this.$message({
          message: '二维码未识别出零件信息!',
          type: 'warning'
        });
        }
      },
      cancelCodeDialog(){
        this.qrcode = false
      },
       // 打开相机
      Turnonthecamera() {
          this.qrcode = true
          this.$refs.codeCompont.openCamera()
      },
      // 确认回调
      selectPart(param, nodePart, index) {
        console.log(param)
        if (typeof param !== 'undefined') {
          this.dataForm.rawInsNo = param.rawInsNo
          this.dataForm.code = param.code
          this.dataForm.name = param.name
          this.dataForm.formTime = param.formTime
          this.dataForm.startTime = param.formTime
          this.dataForm.unit = param.unit
          this.dataForm.specs = param.specs
          this.dataForm.supplier = param.supplier
@@ -404,8 +669,8 @@
          this.dataForm.message = param.message
          this.dataForm.projectName = param.projectName
          this.projectList = param.rawInsProducts == null ? [] : param.rawInsProducts
          param.rawInsProducts.forEach(o=>{
            this.clickAddLine(o)
          param.rawInsProducts.forEach((o,index)=>{
            this.clickAddLine(o,index)
          })
        }
@@ -416,24 +681,25 @@
        }
        this.showPart = true
      },
      updateDevice(row,index){
        if(this.dataForm.id != null){
          updateDeviceById({deviceId:row.deviceId,rpId:row.rpId}).then(res=>{
            this.list[index].testValue = ''
            this.list[index].testState = null
            this.list[index].testValueList = []
          }).catch(error=>{
            console.log(error)
      updateDevice(row, index) {
          updateDeviceById({ deviceId: row.deviceId, rpId: row.rpId }).then(res => {
            row.testValue = null
            row.testState = null
            row.testValueList = []
            row.note = null
          }).catch(error => {
              console.log(error)
          })
        }
      },
      checkTestState(){
          let resultVal = '1'
          this.list.forEach(item=>{
              if(item.children){
                if(obj.testState == 0){
                    resultVal = '0'
                }
                item.children.forEach(ele=>{
                  if(ele.testState == 0){
                      resultVal = '0'
                  }
                })
              }
          })
          this.resultVal = resultVal
@@ -441,10 +707,16 @@
          sessionStorage.setItem("raw-resultVal-"+this.dataForm.id,resultVal)
      },
      showDialog(){
        let pro = this.list.filter(item => {
          return item.testState == 0;
        let size = 0 //不合格项目数量
        this.list.forEach(item=>{
          if(item.children){
            let num = item.children.filter(e=>{
              return e.testState == 0
            }).length
            size+=num
          }
        })
        if (pro.length > 0) {
        if (size > 0) {
          this.dialogVisible = true
        }else{
          this.submitSave()
@@ -455,101 +727,132 @@
        let data = {
          id: this.dataForm.id,
          number: this.unqualifiedNum,
          // toLocationNo: this.fiedNum
          result: this.conclusionTable[0].testState
        }
        updateRawInspectsById(data).then(res => {
          if(res.data.code == 0){
          if(res.data.code == 0 && (res.data.data=='1'|| res.data.data=='0')){
            sessionStorage.setItem("raw-resultVal-"+this.dataForm.id,res.data.data)
            this.$message.success("上报成功");
            this.dialogVisible = false
            this.checkTestState()
          }else{
            this.$message.error("上报失败,",res.data.data);
          }
          this.dialogVisible = false
          this.checkTestState()
        });
      },
      addTeatValueColumn(){
        this.empiricalValueAdd = this.empiricalValueAdd + 1;
        this.$nextTick(()=>{
            this.empiricalValueAdd = this.empiricalValueAdd + 1;
        })
      },
      // 添加行
      clickAddLine(row) {
      clickAddLine(row,index) {
        let ele = {
            fId: Math.random(),
            father: null,
            iid: Math.random(),
            children:[]
        }
        if(row){
          let userNameList = []
          ele.isIndex = true;
          ele.parentIndex = index + 1;
          ele.father = row.father?row.father:null
          row.children.forEach(item => {
              item.iid = Math.random()
              ele.children.push({
                deviceId: null,
                deviceName: null,
                iid: Math.random(),
                required: item.required?item.required:null,
                rpId: null,
                name: item.name?item.name:null,
                unit: item.unit?item.unit:null,
                userName: null,
                testValue: null,
                testValueList: [],
                note: null,
                testState: null
              })
              let arr = []
              item.testValue = ''
              item.testValueList= []
              if (item.userName) {
                userNameList.push(item.userName)
              }
              if (item.inspectionValue) {
                  arr = item.inspectionValue.split(",")
              }
              item.empiricalValueAddss = arr
              if (arr.length > this.empiricalValueAdd) {
                  this.empiricalValueAdd = arr.length
              }
            this.list.push(row)
          })
            })
            this.list.push(ele)
        }else{
          let ele = {
            father: '',
            iid: Math.random(),
            children:[{
          ele.isIndex = true;
          ele.parentIndex = this.list.length + 1;
          ele.children.push({
              deviceId: null,
              deviceName: null,
              iid: Math.random(),
              required: null,
              rpId: null,
              name: null,
              unit: null,
              unit: '',
              userName: null,
              testValue: null,
              testValue: '',
              testValueList: [],
              note: null,
              testState: null
            }]
          }
              testState: ''
            })
          this.list.push(ele)
        }
      },
      changeRowResult(){
          if(this.list){
              this.list.forEach(e=>{
                  if(e.children){
                      e.children.map(i=>{
                          if(i.testValueList.length>1){
                            i.testValueList = i.testValueList.splice(i.testValueList.length-1,1)
                            return i
                            //   let arr = i.testValue.split(",")
                            //   arr.splice((arr.length-1),1)
                            //   let obj = {
                            //     deviceId: i.deviceId,
                            //     rpId: i.rpId,
                            //     testValue: arr.join(","),
                            //     note: i.note
                            //   }
                            //   updateRawInsProduct(obj).then(res=>{
                            //     if(res.data.code === 0){
                            //       this.init(this.dataForm.id)
                            //     }
                            //   })
                          }
                      })
                  }
              })
              this.saveTable()
          }
      },
      delTeatValueColumn(){
        if (this.empiricalValueAdd - 1 === 0) { } else {
        if (this.empiricalValueAdd - 1 > 0) {
          if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
            this.empiricalValueAdd = this.empiricalValueAdd - 1;
            // this.changeRowResult()
            this.list.forEach(i => {
              i.testValueList.splice(this.empiricalValueAdd, 1);
              if(i.children){
                i.children.forEach(ele=>{
                  ele.testValueList.splice(this.empiricalValueAdd, 1);
                })
              }
            });
            this.saveTable()
          }
        }
      },
      updateTestValue(row,index){
        if(row.rpId == null || row.testValueList[index]==null){
          return
        }
        let obj = {
          deviceId: row.deviceId,
          rpId: row.rpId,
          testValue: row.testValueList.join(",")
        }
        updateRawInsProduct(obj).then(res=>{
          if(res.data.code === 0){
            this.$message.success("更新成功")
            this.init()
          }else{
            this.$message.success("更新失败")
          }
        }).catch(error=>{
          this.$message.error(error)
        })
      },
      init(){
        if(this.dataForm.id){
          getObj(this.dataForm.id).then(res=>{
            console.log(res);
      init(id){
        if(id){
          getObj(id).then(res=>{
            let data = res.data.data
            this.dataForm.rawInsNo = data.rawInsNo
            this.dataForm.name = data.name
            this.dataForm.formTime = data.formTime
            this.dataForm.startTime = data.startTime
            this.dataForm.remark = data.remark
            this.dataForm.code = data.code
            this.dataForm.specs = data.specs
            this.dataForm.unit = data.runit
@@ -560,20 +863,28 @@
            this.dataForm.createUser = data.createUser
            let userNameList = []
            this.list = []
            data.children.forEach(item => {
            data.children.forEach((item,index) => {
              if (item.children) {
                    let ele = {
                      iid: null,
                      father: null,
                      children: []
                    }
                    ele.isIndex = true;
                    ele.parentIndex = index + 1;
                    ele.iid = Math.random()
                    ele.father = item.rpFather
                    item.children.forEach(obj => {
                      console.log(obj);
                    if (item.children != undefined) {
                    item.children.forEach((obj) => {
                      let arr= []
                      if(obj.userName){
                        userNameList.push(obj.userName)
                      }
                      if(obj.testValue){
                        arr = obj.testValue.split(",")
                      }
                      if (arr.length > this.empiricalValueAdd) {
                          this.empiricalValueAdd = arr.length
                      }
                      let o = {
                        deviceId: obj.deviceId,
@@ -592,13 +903,29 @@
                      ele.children.push(o)
                    })
                    this.list.push(ele)
                }}
            })
            let rVal = ''
            let passNum = 0
            let unPassNum = 0
            this.list.forEach(item=>{
                if(item.children){
                  item.children.forEach(ele=>{
                    if(ele.testState == 0){
                      unPassNum += 1
                    }
                    if(ele.testState == 1){
                      passNum+=1
                    }
                  })
                }
            })
            })
            rVal = (passNum+unPassNum)>0 ? unPassNum>0 ? '0' :'1' : ''
            this.conclusionTable = [{
              code: data.code,
              name: data.name,
              userName: Array.from(new Set(userNameList)).join(','),
              testState: this.resultVal==null?null:this.resultVal
              testState: this.resultVal==null?rVal:this.resultVal
            }]
          }).catch(error=>{
            this.$message.error("获取失败",error)
@@ -607,14 +934,92 @@
          this.conclusionTable = []
        }
      },
       // 删除子项目
       delChildren(scope,index) {
        console.log(scope,index);
      selectBlur(e){
        console.log(e,e.target.tabIndex);
        console.log(e.target.value);
      },
      checkTestValues(row,currentOption,event){
          if(row){
              let isTrue = true
              if(currentOption==='blur'){
                  let targetVal = event.target.value
                  if( (targetVal && ['是','否'].includes(targetVal)) || !targetVal){
                    isTrue = false
                  }else{
                      for(var i=0;i<row.testValueList.length;i++){
                          let val = row.testValueList[i]
                          if(val != '' && val != null){
                              if(!['是','否'].includes(val)){
                                  let reg = /(^-?[0-9]{1,6}$)|(^-?[0-9]{1,6}[\.]{1}[0-9]{1,3}$)/
                                  if(!reg.test(val)){
                                    row.testValueList[i] = ''
                                    event.target.value = ''
                                    this.$message.error("请输入6位数字或选择是否")
                                    isTrue = false
                                }
                            }
                          }
                      }
                  }
              }
              if(!isTrue){
                  return
              }
            //   this.changeState(row)
          }
      },
      saveTable() {
        let rawInsProducts = [];
          this.$nextTick(()=>{
            this.list.forEach(item=>{
                if(item.children){
                    item.children.forEach(ele=>{
                        let obj = JSON.parse(JSON.stringify(ele))
                        obj.testValue = obj.testValueList.join(",")
                        obj.id = obj.rpId
                        delete obj.testValueList;
                        obj.name = ele.name;
                        obj.father = item.father;
                        obj.unit = ele.unit;
                        rawInsProducts.push(obj)
                    })
                }
            })
            if(rawInsProducts.length>0){
                updateRawInsProduct2(rawInsProducts).then(res => {
                    if (res.data.code == 0) {
                        this.$message.success("更新成功")
                    } else {
                        this.$message.error("更新失败")
                    }
                    this.init(this.dataForm.id)
                })
            }
        })
      },
      // 删除子项目
      delChildren(row,index,isParent) {
        if(isParent){
          let parentIndex = this.list.findIndex(el =>{
            return el.iid == row.iid
          })
          this.list.splice(parentIndex,1)
        }else{
          let i = this.list.findIndex(el =>{
            return el.children.find(ele => ele.iid == row.iid)
          })
          let childrenIndex = this.list[i].children.findIndex(el =>{
            return el.iid == row.iid
          })
          if(this.list[i].children.length<2){
            this.list.splice(i,1)
          }else{
              this.list[i].children.splice(childrenIndex,1)
          }
        }
      },
      //添加子项目
      addChildren(row){
        console.log(row);
        let obj = {
          deviceId: null,
          deviceName: null,
@@ -622,7 +1027,7 @@
          required: null,
          rpId: null,
          name: null,
          unit: null,
          unit: '',
          userName: null,
          testValue: null,
          testValueList: [],
@@ -632,17 +1037,27 @@
        row.children.push(obj)
      },
      save(){
        console.log(this.dataForm);
        let data = this.dataForm
        console.log(data);
        console.log(this.list);
        data.rawInsProducts = this.list
        console.log('=====>');
        addRawInspects(data).then(res=>{
            this.$message.success("保存成功")
            this.$router.go(-1)
        }).catch(error=>{
          this.$message.error(error)
        this.$refs.dataForm.validate(valid=>{
            if(valid){
                const _than = this
                let data = this.dataForm
                this.list.forEach(item=>{
                item.children.forEach(c=>{
                    c.testValue=c.testValueList.join(",")
                    c.required = c.required.replace(',',',').replace('(','(').replace(')',')')
                })
                })
                data.rawInsProducts = this.list
                addRawInspects(data).then(res=>{
                    this.$message.success("保存成功")
                    this.$router.go(-1)
                }).catch(error=>{
                this.$message.error(error)
                })
                _than.$nextTick(()=>{
                    _than.init(Number(res.data.msg))
                })
            }
        })
      },
      getDeviceList(){
@@ -650,21 +1065,135 @@
          this.deviceList = res.data.data
        })
      },
    },
      moveFocus(event, index, key) {
        console.log(key, index,key)
        let keyfield = this.insertArrayAt(this.keyfield,4,this.keyfield0);
        // enter键
        // if (event.keyCode === 13) { // 回车
        //     if (index === this.getLen() - 1 && key === keyfield[keyfield.length - 1]) { // 最后一行最后一个
        //         console.log('最后一行最后一个无法回车')
        //     return
        //     }
        //     this.$nextTick(() => {
        //         event.target.blur()
        //     })
        //     if (key === keyfield[keyfield.length - 1]) { // 当前行最后一个,跳转下一行第一个
        //     } else { // 跳转下一个
        //     const nextkeyindex = keyfield.findIndex(k => k === key) + 1
        //     this.$nextTick(() => {
        //         document.getElementById(keyfield[nextkeyindex] + index).focus()
        //     })
        //     }
        // }
        // 向上 =38
        if (event.keyCode === 38) {
            console.log('向上')
            if (index === 0) { // 第一行
            console.log('第一行无法向上')
            return
            }
            document.getElementById(key + index).blur()
            let i = 0;
            while (true){
                let dom = document.getElementById(key + (index - 1-i))
                if(dom){
                    dom.focus()
                    return
                }else if((index-1-i)==0){
                    return
                }
                i++
            }
        }
        // 下 = 40
        if (event.keyCode === 40) {
            console.log('向下')
            if (index === this.getLen() - 1) { // 最后一行
            console.log('最后一行无法向下')
            return
            }
            document.getElementById(key + index).blur()
            this.$nextTick(() => {
            let i = 0;
            while (true){
                let dom = document.getElementById(key + (index + 1+i))
                console.log(dom,key + (index + 1+i))
                if(dom){
                    dom.focus()
                    return
                }else if((index+1+i)==this.getLen() - 1){
                    return
                }
                i++
            }
            })
        }
        // 左 = 37
        if (event.keyCode === 37) {
            console.log('向左')
            if (index === 0 && key === keyfield[0]) { // 第一行第一个
            console.log('第一行第一个无法向左')
            return
            }
            document.getElementById(key + index).blur()
            const prevkeyindex = keyfield.findIndex(k => k === key) - 1
            this.$nextTick(() => {
                let dom = document.getElementById(keyfield[prevkeyindex] + index)
                if(dom){
                    dom.focus()
                }
            })
        }
        // 右 = 39
        if (event.keyCode === 39) {
            console.log('向右')
            if (index === this.getLen() - 1 && key === keyfield[keyfield.length - 1]) { // 最后一行最后一个
            console.log('最后一行最后一个无法向右')
            return
            }
            document.getElementById(key + index).blur()
            const nextkeyindex = keyfield.findIndex(k => k === key) + 1
            this.$nextTick(() => {
                let dom = document.getElementById(keyfield[nextkeyindex] + index)
                if(dom){
                    dom.focus()
                }
            })
        }
        },
      insertArrayAt(arr1, index, arr2) {
        return arr1.slice(0, index).concat(arr2, arr1.slice(index));
        },
        getLen(){
        let arr = []
        this.list.forEach(item => {
            arr.push(item)
            item.children.forEach(child => {
                arr.push(child)
            })
        })
        return arr.length
      }
      }
}
</script>
<style>
.rawMaterial-detail {
  width: 100%;
  height: 470px;
  height: 530px;
  padding: 10px 20px;
  display: flex;
  border: 1px solid #ddd;
  background-color: #fff;
  margin-top: 10px;
  box-sizing: border-box;
  flex-wrap: wrap;
  /* display: flex;
  flex-wrap: wrap; */
}
.rawMaterial-result {
@@ -681,7 +1210,7 @@
.rawMaterial-basic {
  background-color: #fff;
  height: 155px;
  height: 170px;
  display: flex;
  flex-wrap: wrap;
  padding: 10px 20px;
@@ -854,4 +1383,16 @@
  border: 1px solid #e4e7ed;
  border-bottom: none;
}
.dropdown{
    position: relative;
    right: 30px;
    top: 5px;
    color: #C0C4CC;
    font-size: 14px;
}
@media (max-width: 767px) {
  .pad-addcol-btn{
    font-size:12px;
  }
}
</style>