From b34e4348df3f9f697fcb4da64ee7ff11deca3170 Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期三, 02 四月 2025 10:26:42 +0800 Subject: [PATCH] 修改检验任务分页和文件预览 --- src/components/view/b1-inspect-order-plan.vue | 1372 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 1,209 insertions(+), 163 deletions(-) diff --git a/src/components/view/b1-inspect-order-plan.vue b/src/components/view/b1-inspect-order-plan.vue index 2216473..e6d3f29 100644 --- a/src/components/view/b1-inspect-order-plan.vue +++ b/src/components/view/b1-inspect-order-plan.vue @@ -1,35 +1,64 @@ <style scoped> -.ins-order-plan-main{ - padding-top: 60px; +.ins-order-plan-main .title { + font-size: 20px; + color: #3A7BFA } -.ins-order-plan-main .search{ + +.search { + background-color: #fff; + height: 80px; + display: flex; + align-items: center; +} + +.search_thing { + display: flex; + align-items: center; + height: 50px; +} + +.search_label { + width: 120px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 120px); +} + +.ins-order-plan-main .search { width: 100%; margin-bottom: 10px; - height: 10vh; + height: 80px; background-color: #fff; border-radius: 3px; } -.search .form-inline{ - height: 5vh; - padding-top:2.5vh; - padding-left: 1%; + +.search .form-inline { + height: 50px; + padding-top: 20px; + padding-left: 50px; } -.ins-order-plan-main .center{ + +.ins-order-plan-main .center { + width: calc(100% - 40px); + height: calc(100% - 60px - 80px - 40px); + background-color: #fff; + border-radius: 3px; + padding: 20px; +} + +.ins-order-plan-main .center .value-table { width: 100%; - height: 70vh; - background-color: #fff; - border-radius: 3px; + height: calc(100% - 68px); } -.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; @@ -43,7 +72,7 @@ border-radius: 8px 0 0 8px; } -.tab li:nth-child(3) { +.tab li:nth-last-child(1) { border-radius: 0 8px 8px 0; } @@ -51,203 +80,1025 @@ 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; + width: 100%; + display: flex; + align-items: center; + justify-content: right; } -.center .center-options .center-title span:last-child{ + +.center .center-options .center-title span:last-child { color: #3A7BFA; font-size: 23px; font-weight: 400; } +.view-self-checkbox { + margin-left: 50px; +} + +.draggable-row { + cursor: move; + position: relative; +} + +.node_i { + color: orange; + font-size: 18px; +} + +.custom-tree-node .el-button { + opacity: 0; +} + +.custom-tree-node:hover .el-button { + opacity: 1; +} + +.el-dialog { + position: relative; +} +</style> +<style> +.ins-order-plan-main .el-form-item__label { + color: #000; +} + +.ins-order-plan-main .el-table th.el-table__cell>.cell { + height: 46px; + line-height: 30px; +} </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-if="$refs.insOrderPlan != undefined">{{$refs.insOrderPlan.total}}</span> - </div> - </el-col> - </el-row> + <div v-show="activeFace == 0 && state == 0" style="height: 100%;"> + <p style="font-size: 16px;padding-left: 20px;text-align: left;height: 60px;line-height: 60px;">妫�楠屼换鍔�</p> + <div class="search"> + <div class="search_thing"> + <div class="search_label">濮旀墭缂栧彿锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="componentData.entity.entrustCode" @keyup.enter.native="refreshTable()"></el-input></div> + </div> + <div class="search_thing"> + <div class="search_label">妫�楠岀姸鎬侊細</div> + <div class="search_input"> + <el-select size="small" v-model="componentData.entity.insState" style="width: 100%;" + @change="refreshTable()"> + <el-option v-for="(a, i) in insStateList" :key="i" :label="a.label" :value="a.value"></el-option> + </el-select> + </div> + </div> + <div class="search_thing"> + <div class="search_label">鏍峰搧缂栧彿锛�</div> + <div class="search_input"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.sampleCOde" + @keyup.enter.native="refreshTable()"></el-input> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> </div> - <ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.selectInsOrderPlanList" :upUrl="$api.user.updateUser" :componentData="componentData" :key="upIndex" @upUser="upUser"/> + <div class="center"> + <div class="center-options"> + <el-row> + <el-col :span="18"> + <div style="display: flex;align-items: center;margin-bottom: 10px;"> + <ul class="tab"> + <li v-for="(m, i) in tabList" :key="i" :class="{ active: i == tabIndex }" @click="handleTab(m, i)"> + {{ m.label.replace('璇曢獙瀹�', '') }} + </li> + </ul> + <div> + <el-checkbox @change="changeCheckBox" class="view-self-checkbox" + v-model="alone"><span>鎴戠殑浠诲姟</span></el-checkbox> + </div> + </div> + </el-col> + <el-col :span="6"> + <div class="center-title"> + <el-button size="small" type="primary" @click="qrCodeVisible = true" + v-if="selectWarehouse">鎵爜鎶ユ</el-button> + <el-button size="small" type="primary" @click="exportVisible = true" style="margin-right: 16px;" + v-if="selectWarehouse">鍑哄簱</el-button> + <span>鎬昏浠诲姟鏁伴噺:</span> + <span>{{ total }}</span> + </div> + </el-col> + </el-row> + </div> + <!-- <ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan" + :isColumnWidth="true" + :url="$api.insOrderPlan.selectInsOrderPlanList" :upUrl="$api.user.updateUser" :componentData="componentData" @handleInspection="handleInspection" + :key="upIndex"/> --> + <el-table :data="tableData" ref="table0" border style="width: 100%;" height="calc(100% - 80px)" + :row-class-name="rowClassName" v-loading="tableLoading" row-key="orderStateId" @sort-change="sortChange"> + <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="sampleCode" label="鏍峰搧缂栧彿" width="170px"></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) ? typeList.find(m => m.value == scope.row.type).type : ''" + size="small">{{ + typeList.find(m => m.value == scope.row.type) ? 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="insStateList.find(m => m.value == scope.row.insState).type" size="small">{{ + insStateList.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="createTime" label="鎶ユ鏃堕棿" width="120px" sortable></el-table-column> + <el-table-column prop="appointed" label="绾﹀畾鏃堕棿" width="120px" sortable></el-table-column> + <el-table-column prop="sendTime" label="涓嬪彂鏃堕棿" width="160px" sortable></el-table-column> + <el-table-column prop="insTime" label="妫�楠屽紑濮嬫椂闂�" width="160px" sortable></el-table-column> + <el-table-column prop="submitTime" label="妫�楠岀粨鏉熸椂闂�" width="160px" sortable></el-table-column> + <el-table-column prop="verifyTell" label="鐞嗙敱" width="150px"></el-table-column> + <el-table-column fixed="right" align="center" label="鎿嶄綔" width="340px"> + <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))" + v-if="inspection">妫�楠�</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))" + v-if="connect">浜ゆ帴</el-button> + <el-button @click="cancelSubmitPlan(scope.row)" type="text" size="small" + :disabled="scope.row.userName == null || scope.row.insState != 3 || (scope.row.userName && !scope.row.userName.includes(userName))" + v-if="inspection">鎾ら攢</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))" + v-if="review">澶嶆牳</el-button> + <el-button @click="handleReview0(scope.row)" type="text" size="small" + :disabled="scope.row.userName == null || (scope.row.insState != 4 && scope.row.insState != 5 && scope.row.insState != 6)" + v-if="verifyPlan2">绾犳澶嶆牳</el-button> + <el-button @click="claimFun(scope.row)" type="text" size="small" + :disabled="scope.row.userName != null || scope.row.checkName != null" v-if="claim">璁ら</el-button> + <el-button @click="lookHistory0(scope.row)" type="text" size="small">鏌ョ湅璁板綍</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="m => refreshTable('size', m)" @current-change="m => refreshTable('current', m)" + :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"> + 鏄惁璁ら濮旀墭缂栧彿<span style="color:#33C130">{{ sampleUserForm.entrustCode }}</span>鐨勪换鍔� + <span slot="footer" class="dialog-footer"> + <el-button @click="claimVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="confirmClaim" :loading="loading">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog title="妫�楠屼氦鎺�" :visible.sync="connectVisible" width="400px"> + <div class="search_thing"> + <div class="search_label" style="width:90px"><span class="required-span">* </span>浜ゆ帴浜哄憳锛�</div> + <div class="search_input"> + <el-select v-model="connect.connectPerson" placeholder="璇烽�夋嫨" style="width: 100%;" filterable> + <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + </div> + <!-- <div class="search_thing"> + <div class="search_label" style="width:90px"><span class="required-span">* </span>璇曢獙瀹わ細</div> + <div class="search_input"> + <el-select v-model="connect.sonLaboratory" placeholder="璇烽�夋嫨" style="width: 100%;" filterable> + <el-option + v-for="item in sonLaboratoryList" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </div> + </div> --> + <span slot="footer" class="dialog-footer"> + <el-button @click="connectVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="confirmConnect" :loading="loading">纭� 瀹�</el-button> + </span> + </el-dialog> + <div style="width: 100%;height: 100%;" v-if="activeFace > 0"> + <Add :active="activeFace" :currentId="currentId" :examine="examine" /> + </div> + <Inspection v-if="state > 0" @goback="goback" :orderId="orderId" :inspectorList="inspectorList" + :sonLaboratory="componentData.entity.sonLaboratory" :state="state" :orderStateId="orderStateId" :version="version" + :isLook="isLook" :num1="num1" :orderId0="orderId0" :userInfo="userInfo" ref="Inspection" /> + <el-dialog title="鏁版嵁鏌ョ湅" :visible.sync="dataDialogVisible" width="80%"> + <div style="height: 70vh;overflow-y: auto;" v-if="dataDialogVisible"> + <ValueTable ref="ValueTableDataLook" :rowKey="'insProductId'" + :url="$api.insOrder.selectSampleAndProductByOrderId" :componentData="componentDataDataLook" /> + </div> + </el-dialog> + <el-dialog title="鏌ョ湅璁板綍" :visible.sync="historyDialogVisible" width="50%"> + <el-table :data="historyList" border style="width: 100%"> + <el-table-column prop="submitTime" label="鎻愪氦鏃ユ湡" min-width="150"> + </el-table-column> + <el-table-column prop="submitUserName" label="鎻愪氦浜�" min-width="90"> + </el-table-column> + <el-table-column prop="term" label="瀹為獙闃舵" min-width="120"> + </el-table-column> + <el-table-column prop="note" label="瀹為獙鎿嶄綔" min-width="120"> + </el-table-column> + <el-table-column prop="tell" label="鍐嶆妫�楠屽師鍥�" min-width="120"> + </el-table-column> + <el-table-column fixed="right" label="鎿嶄綔" min-width="100"> + <template slot-scope="scope"> + <el-button @click="lookHistory(scope.row)" type="text" size="small">鏌ョ湅</el-button> + </template> + </el-table-column> + </el-table> + </el-dialog> + <el-dialog title="鎵爜妫�楠�" :visible.sync="qrCodeVisible" width="400px"> + <el-row> + <el-col class="search_thing" :span="24"> + <div class="search_label" style="width: 90px"><span class="required-span">* </span>鏍峰搧缂栧彿锛�</div> + <div class="search_input"> + <el-input v-model="sampleCode" size="small" clearable :disabled="sampleCodeBtnDisabled"> + <el-tooltip :content="sampleCodeBtnDisabled ? '鎵嬪姩杈撳叆' : '鎵爜鏋緭鍏�'" placement="top" slot="append"> + <el-button type="primary" icon="el-icon-edit" + @click="sampleCodeBtnDisabled = !sampleCodeBtnDisabled"></el-button> + </el-tooltip> + </el-input> + </div> + </el-col> + <el-col class="search_thing" :span="24"> + <div class="search_label" style="width: 90px"><span class="required-span">* </span>璁㈠崟缂栧彿锛�</div> + <div class="search_input"> + <el-input v-model="entrustCode" size="small" clearable :disabled="sampleCodeBtnDisabled"> + </el-input> + </div> + </el-col> + </el-row> + <el-tree :data="storageList" ref="tree" :props="{ children: 'warehouseShelfList', label: 'name' }" node-key="id" + :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" + @node-collapse="nodeClose" :default-expanded-keys="expandedKeys" v-if="qrCodeVisible" empty-text="鏆傛棤鏁版嵁"> + <div class="custom-tree-node" slot-scope="{ node, data }"> + <el-row> + <el-col :span="24"> + <span><i + :class="`node_i ${data.warehouseShelfList != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> + {{ data.name }}</span> + </el-col> + </el-row> + </div> + </el-tree> + <span slot="footer" class="dialog-footer"> + <el-button @click="qrCodeVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="confirmStorage" :loading="upLoadStorage">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog title="鍑哄簱" :visible.sync="exportVisible" width="400px"> + <el-row> + <el-col class="search_thing" :span="24"> + <div class="search_label" style="width: 90px"><span class="required-span">* </span>鏍峰搧缂栧彿锛�</div> + <div class="search_input"> + <el-input v-model="sampleCode" size="small" clearable :disabled="sampleCodeBtnDisabled"> + <el-tooltip :content="sampleCodeBtnDisabled ? '鎵嬪姩杈撳叆' : '鎵爜鏋緭鍏�'" placement="top" slot="append"> + <el-button type="primary" icon="el-icon-edit" + @click="sampleCodeBtnDisabled = !sampleCodeBtnDisabled"></el-button> + </el-tooltip> + </el-input> + </div> + </el-col> + <el-col class="search_thing" :span="24"> + <div class="search_label" style="width: 90px"><span class="required-span">* </span>濮旀墭缂栧彿锛�</div> + <div class="search_input"> + <el-input v-model="entrustCode" size="small" clearable :disabled="sampleCodeBtnDisabled"> + </el-input> + </div> + </el-col> + </el-row> + <span slot="footer" class="dialog-footer"> + <el-button @click="exportVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="confirmExport" :loading="upLoadExport">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog title="绾犳澶嶆牳" :visible="upInsReviewDia" width="600px" :close-on-click-modal="false" :show-close="false"> + <el-radio-group v-model="verifyPlanInfo.type" style="display: flex;flex-direction: column" v-if="upInsReviewDia"> + <el-radio :label="1" style="margin: 10px 0; " :inert="false">缁х画娴嬭瘯涓嬩竴涓牱鍝佹垨鍏朵粬绔欑偣浠诲姟</el-radio> + <el-radio :label="0" style="margin: 10px 0; " :inert="false">鍐嶆妫�楠岃鏍峰搧</el-radio> + <el-radio :label="2" style="margin: 10px 0; " :inert="false">姝ゅ鎵樺崟缁撴潫</el-radio> + <p style="font-size: 12px;color:red"> + 鎱庨噸锛氬鏋滆繕鏈夊叾浠栨牱鍝佸湪妫�锛岀偣鍑荤粨鏉熷彲鑳戒細涓柇锛岃纭繚鎵�鏈夋牱鍝侀兘妫�楠屼笖澶嶆牳瀹屾垚鍐嶇偣鍑� + </p> + </el-radio-group> + <p style="margin-top: 16px;margin-bottom: 6px;"><span style="color:red;margin-right: 4px;">*</span>绾犳鍘熷洜锛�</p> + <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏�" v-model="verifyPlanInfo.tell"> + </el-input> + <span slot="footer" class="dialog-footer"> + <el-button @click="upInsReviewDia = false">鍙� 娑�</el-button> + <el-button type="primary" @click="upInsReview" :loading="reviewLoading">纭� 瀹�</el-button> + </span> + </el-dialog> + <input id="ScanCodeInfo" v-model="codeInfo" @keyup.enter="keyup" + style="opacity: 0;height: 0px;margin: 0px;padding: 0px;position: absolute;top: 0;"></input> </div> </template> <script> import ValueTable from '../tool/value-table.vue' -import { getYearAndMonthAndDays } from '../../util/date' +import Inspection from '../do/b1-inspect-order-plan/Inspection.vue' +import { + getYearAndMonthAndDays +} from '../../util/date' +import Add from '../do/b1-ins-order/add.vue' +import Sortable from 'sortablejs'; export default { - components:{ - ValueTable + components: { + ValueTable, + Inspection, + Add }, - data(){ + data() { return { - searchForm:{ - sampleName: null, - state: null + currentHistory: {}, + historyDialogVisible: false, + historyList: [], + orderStateId: null, + version: null, + examine: null, + inspectorList: [],//妫�楠屼汉鍛樺垪琛� + alone: false, + sampleUserForm: { + entrustCode: null, + insSampleId: null, + userId: null }, - tabList: [ - { - label: '瀹為獙瀹�1', - value: 1 - }, - { - label: '瀹為獙瀹�2', - value: 2 - }, - { - label: '瀹為獙瀹�3', - value: 3 - } - ], + claimVisible: false, + tabList: [], 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:[] - } + componentDataDataLook: { + entity: { + id: 0, + orderBy: { + field: 'sampleCode', + order: 'asc' + } + }, + isIndex: false, + showSelect: false, + select: false, + do: [], + tagField: { + insState: { + select: [] }, - selectField: {}, - requiredAdd:[], - requiredUp:[] - }, + insResult: { + select: [{ + value: 1, + label: '鍚堟牸', + type: 'success' + }, { + value: 0, + label: '涓嶅悎鏍�', + type: 'danger' + }, { + value: 3, + label: '涓嶅垽瀹�', + type: '' + }] + } + }, + selectField: {}, + spanConfig: { + rows: [ + { + name: 'sampleCode', + index: 0 + }, + { + name: 'sample', + index: 1 + }, + { + name: 'model', + index: 5 + } + ] + }, + requiredAdd: [], + requiredUp: [] + }, + dataDialogVisible: false, + componentData: { + entity: { + sonLaboratory: null, + insState: null, + userId: null, + sampleCode: null, + orderBy: { + field: 'createTime,appointed,sendTime,insTime,submitTime', + order: 'asc' + } + }, + sortable: true, + isIndex: true, + showSelect: false, + select: false, + init: false, + needSort: ['createTime', 'sendTime', 'type', 'appointed', 'insState'], + do: [{ + id: '', + font: '鏁版嵁鏌ョ湅', + type: 'text', + method: 'handleDataLook', + //disabFun: (row, index) => { + //const user = JSON.parse(localStorage.getItem('user')) + // let currentUserName = '' + // if(user){ + // currentUserName = user.name + //} + //return row.userName.indexOf(currentUserName)<0 && row.checkName.indexOf(currentUserName)<0 + //} + }, { + id: '', + font: '妫�楠�', + type: 'text', + method: 'handleInspection', + disabFun: (row, index) => { + return row.userName == null || row.insState == 3 || row.insState == 5 || row.insState == 6 || (row.userName && !row.userName.includes(JSON.parse(localStorage.getItem("user")).name)) + } + // disabFun: (row, index) => { + // return row.userId == null || row.insState == 3 || row.insState == 5 + // } + }, { + id: '', + font: '浜ゆ帴', + type: 'text', + method: 'handleConnect', + disabFun: (row, index) => { + return row.userName == null || row.insState == 5 || row.insState == 3 || row.insState == 6 || (row.userName && !row.userName.includes(JSON.parse(localStorage.getItem("user")).name)) + } + }, + { + id: '', + font: '澶嶆牳', + type: 'text', + method: 'handleReview', + disabFun: (row, userName) => { + return row.userName == null || row.insState != 3 || (row.checkName && !row.checkName.includes(JSON.parse(localStorage.getItem("user")).name)) + } + }, { + id: '', + font: '璁ら', + type: 'text', + method: 'claimFun', + disabFun: (row, index) => { + return row.userName != null || row.checkName != null + } + }, { + id: '', + font: '鏌ョ湅璁板綍', + type: 'text', + method: 'claimFun', + disabFun: (row, index) => { + return !row.num1 || row.num1 < 2 + } + } + ], + linkEvent: { + entrustCode: { + method: 'selectAllByOne' + } + }, + tagField: { + type: { + select: [] + }, + insState: { + select: [] + }, + insResult: { + select: [{ + value: 0, + label: '涓嶅悎鏍�', + type: 'danger' + }, { + value: 1, + label: '鍚堟牸', + type: 'success' + }, { + value: '', + label: '鏈嚭缁撴灉', + type: 'info' + }] + } + }, + selectField: {}, + requiredAdd: [], + requiredUp: [] + }, + userName: JSON.parse(localStorage.getItem("user")).name, upIndex: 0, planTotal: 0, - insStateList: [] + insStateList: [], + state: 0,//0:鍙拌处椤碉紝1锛氭楠岄〉闈�,2妫�楠岄〉闈�(澶嶆牳)锛岄粯璁や负0 + activeFace: 0, //1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0 + currentId: null, + entityCopy: {}, + orderId: null, + orderId0: null, + personList: [], + connectVisible: false, + connect: { + connectPerson: '', + // sonLaboratory:'' + }, + loading: false, + currentTime: null, + 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: [], + getInsProduct2: false, + claim: false, + review: false, + verifyPlan2: false, + connect: false, + inspection: false, + isLook: false,//鏄惁鏄煡鐪嬪巻鍙查〉闈� + num1: null, + codeInfo: null, + startTime: null, + scanInsOrderState: false, + qrCodeVisible: false, + sampleCode: '', + entrustCode: '', + storageList: [], + expandedKeys: [], + selectTree: [], + upLoadStorage: false, + exportVisible: false, + upLoadExport: false, + selectWarehouse: false, + userInfo: { + name: [], + ids: [] + }, + sampleCodeBtnDisabled: true, + upInsReviewDia: false, + verifyPlanInfo: { + tell: null, + type: null + }, + reviewLoading: false } }, - created(){ + watch: { + qrCodeVisible(newVal) { + if (newVal) { + // this.$message.success('鎵爜锛氭墦寮�') + this.selectList() + this.sampleCode = null + this.entrustCode = null + let input = document.getElementById('ScanCodeInfo'); + input.focus(); + this.startTime = setInterval(() => { + input.focus() + }, 1000) + } else { + // this.$message.warning('鎵爜锛氬叧闂�') + clearInterval(this.startTime) + this.sampleCodeBtnDisabled = true + } + }, + exportVisible(newVal) { + if (newVal) { + // this.$message.success('鎵爜锛氭墦寮�') + this.sampleCode = null + this.entrustCode = null + let input = document.getElementById('ScanCodeInfo'); + input.focus(); + this.startTime = setInterval(() => { + input.focus() + }, 1000) + } else { + // this.$message.warning('鎵爜锛氬叧闂�') + clearInterval(this.startTime) + this.sampleCodeBtnDisabled = true + } + }, + sampleCodeBtnDisabled(val) { + if (!val) { + this.startTime && clearInterval(this.startTime) + } else if (this.exportVisible || this.qrCodeVisible) { + // this.sampleCode = null + // this.entrustCode = null + let input = document.getElementById('ScanCodeInfo'); + input.focus(); + this.startTime = setInterval(() => { + input.focus() + }, 1000) + } + } + }, + created() { + this.getLaboratoryDicts() this.getTypeDicts() this.getInsStateDicts() - this.refreshTable() + this.getAuthorizedPerson() + this.currentTime = getYearAndMonthAndDays() }, - methods:{ - upUser(){ - - }, - refreshTable() { - this.$refs.insOrderPlan.selectList() - this.$nextTick(()=>{ - this.planTotal = this.$refs.insOrderPlan.total + mounted() { + this.entityCopy = this.HaveJson(this.componentData.entity) + this.getPower() + if (this.jumpTeam) { + this.initializeSortable(); + } + }, + methods: { + selectList() { + this.$axios.get(this.$api.warehouse.selectWarehouse).then(res => { + this.warehouse = res.data + this.storageList = this.HaveJson(res.data).map(item => { + item.warehouseShelfList && item.warehouseShelfList.length > 0 && item.warehouseShelfList.map(m => { + let warehouseShelfList = []; + let warehouseShelfList0 = [] + let warehouseCellList = m.warehouseCellList ? m.warehouseCellList : [] + warehouseCellList.forEach(a => { + if (warehouseShelfList.find(n => n.id == a.row)) { + warehouseShelfList0.push({ + name: a.col + '鍒�', + id: a.col + }) + } else if (warehouseShelfList.length == 0) { + warehouseShelfList.push({ + name: a.row + '灞�', + id: a.row + }) + warehouseShelfList0.push({ + name: a.col + '鍒�', + id: a.col + }) + } else if (!warehouseShelfList.find(n => n.id == a.row)) { + warehouseShelfList[warehouseShelfList.length - 1].warehouseShelfList = JSON.parse(JSON.stringify(warehouseShelfList0)) + warehouseShelfList0 = [] + warehouseShelfList.push({ + name: a.row + '灞�', + id: a.row + }) + warehouseShelfList0.push({ + name: a.col + '鍒�', + id: a.col + }) + } + }) + warehouseShelfList[warehouseShelfList.length - 1].warehouseShelfList = JSON.parse(JSON.stringify(warehouseShelfList0)) + m.warehouseShelfList = warehouseShelfList; + return m; + }) + return item; + }) }) }, - changeRowClass(obj,rowIndex){ - let currentTime = getYearAndMonthAndDays() - if(obj.row.sendTime && currentTime===obj.row.sendTime){ + filterNode(value, data) { + if (!value) return true; + return data.label.indexOf(value) !== -1; + }, + handleNodeClick(val, node, el) { //鏍戠殑鍊� + this.selectTree[node.level - 1] = val.id; + }, + nodeOpen(data, node, el) { + $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened') + this.selectTree[node.level - 1] = data.id; + }, + nodeClose(data, node, el) { + $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder') + }, + // 鎵爜鎶ユ + confirmStorage() { + if (!this.sampleCode) { + this.$message.error('璇峰~鍐欐牱鍝佺紪鍙�') + return + } + if (!this.entrustCode) { + this.$message.error('璇峰~鍐欒鍗曠紪鍙�') + return + } + if (this.selectTree.length < 4) { + this.$message.error('璇烽�夋嫨鏍峰搧鍏ュ簱浣嶇疆') + return + } + this.upLoadStorage = true; + this.$axios.post(this.$api.insOrderPlan.scanInsOrderState, { + trees: this.selectTree.join('-'), + sampleCode: this.sampleCode, + entrustCode: this.entrustCode, + sonLaboratory: this.componentData.entity.sonLaboratory + }).then(res => { + this.upLoadStorage = false; + this.qrCodeVisible = false + this.sampleCode = ''; + this.entrustCode = ''; + this.selectTree = [] + if (res.code == 201) { + this.$message.error('娣诲姞澶辫触') + return + } + this.$message.success('娣诲姞鎴愬姛') + this.refreshTable() + }) + }, + // 纭鍑哄簱 + confirmExport() { + if (!this.sampleCode) { + this.$message.error('璇峰~鍐欐牱鍝佺紪鍙�') + return + } + if (!this.entrustCode) { + this.$message.error('璇峰~鍐欒鍗曠紪鍙�') + return + } + this.upLoadExport = true; + this.$axios.post(this.$api.insOrderPlan.outInsOrderState, { + sampleCode: this.sampleCode, + entrustCode: this.entrustCode, + sonLaboratory: this.componentData.entity.sonLaboratory + }).then(res => { + this.upLoadExport = false; + this.exportVisible = false + this.sampleCode = ''; + this.entrustCode = ''; + if (res.code == 201) { + this.$message.error('鍑哄簱澶辫触') + return + } + this.$message.success('鍑哄簱鎴愬姛') + this.handleShelf(this.entity.shelfId) + }) + }, + // 鎵爜鏋寜涓� + keyup(e) { + var codeInfo = null + try { + console.log(2222, this.codeInfo) + codeInfo = JSON.parse(this.codeInfo) + if (!codeInfo || codeInfo.sampleCode == undefined || codeInfo.entrustCode == undefined) { + this.$message.error('璇ヤ簩缁寸爜鏈夎') + } else { + this.sampleCode = codeInfo.sampleCode + this.entrustCode = codeInfo.entrustCode + } + } catch (e) { + this.$message.error('璇疯皟鑷宠嫳鏂囬敭鐩�') + console.log(e) + } + this.codeInfo = null + }, + // 鎷栨嫿 + initializeSortable() { + const tableBody = this.$refs.table0.$el.querySelector('.el-table__body-wrapper > table > tbody'); + if (tableBody) { + Sortable.create(tableBody, { + handle: '.el-table__row', // 鎷栧姩鎵嬫焺 + animation: 200, + 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]; + if (oldIndex !== newIndex) { + this.tableData.splice(oldIndex, 1); + this.tableData.splice(newIndex, 0, movedItem); + } + this.upIndex++ + this.$axios.post(this.$api.insOrderPlan.jumpTeam, + { + id: movedItem.orderStateId, + 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 + this.dataDialogVisible = true; + }, + // 鏉冮檺鍒嗛厤 + getPower(radio) { + let power = JSON.parse(sessionStorage.getItem('power')) + let inspection = false + let connect = false + let review = false + let claim = false + let jumpTeam = false + let verifyPlan2 = false + // let getInsProduct2 = false + // let getInsOrderUserList = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'doInsOrder') { + inspection = true + } + if (power[i].menuMethod == 'upPlanUser') { + connect = true + } + if (power[i].menuMethod == 'verifyPlan') { + review = true + } + if (power[i].menuMethod == 'verifyPlan2') { + verifyPlan2 = true + } + if (power[i].menuMethod == 'claimInsOrderPlan') { + claim = true + } + if (power[i].menuMethod == 'jumpTeam') { + jumpTeam = true + } + // if (power[i].menuMethod == 'getInsProduct2') { + // getInsProduct2 = true + // } + if (power[i].menuMethod == 'scanInsOrderState') { + this.scanInsOrderState = true + } + if (power[i].menuMethod == 'scanInsOrderState') { + this.selectWarehouse = true + } + } + // if (!getInsProduct2) { + // this.componentData.do.splice(5, 1) + // } + // if (!claim) { + // this.componentData.do.splice(4, 1) + // } + // if (!review) { + // this.componentData.do.splice(3, 1) + // } + // if (!connect) { + // this.componentData.do.splice(2, 1) + // } + // if (!inspection) { + // this.componentData.do.splice(1, 1) + // } + // this.getInsProduct2 = getInsProduct2 + this.claim = claim + this.review = review + this.verifyPlan2 = verifyPlan2 + this.connect = connect + this.inspection = inspection + this.jumpTeam = jumpTeam + }, + changeCheckBox(val) { + this.componentData.entity.userId = val ? 0 : null + this.refreshTable() + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + if (this.tabList.length > 0) { + this.tabIndex = 0 + this.componentData.entity.sonLaboratory = this.tabList[0].value + } + this.refreshTable() + }, + claimFun(row) { + if (row) { + this.sampleUserForm = { + entrustCode: row.entrustCode, + insSampleId: row.sampleId, + sonLaboratory: row.sonLaboratory, + } + this.claimVisible = true + } + }, + confirmClaim() { + this.loading = true; + // this.sampleUserForm.insSampleId = this.orderId + this.$axios.post(this.$api.insOrderPlan.claimInsOrderPlan, this.sampleUserForm, { + headers: { + 'Content-Type': 'application/json' + }, + noQs: true + },).then(res => { + if (res.code === 200 && res.data) { + this.loading = false; + this.$message.success("璁ら鎴愬姛") + this.claimVisible = false + this.refreshTable() + } else { + this.loading = false; + } + }).catch(error => { + console.error(error) + this.loading = false; + }) + }, + refreshTable(type, val) { + if (type && val) { + this.page[type] = val; + } + 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 + // this.$refs.table0.doLayout() + }) + }, + changeRowClass({ + row, + rowIndex + }) { + if (this.currentTime == row.appointed) { return 'highlight-warning-row-border' - }else if(obj.row.sendTime && currentTime>obj.row.sendTime){ + } else if (this.currentTime > row.appointed) { return 'highlight-danger-row-border' } return '' }, - onReset(){ + onReset() { this.searchForm = { sampleName: null, state: null, } this.componentData.entity.insState = null - this.componentData.entity.sample = null + this.componentData.entity.sampleName = null this.refreshTable() }, - onSubmit(){ + onSubmit() { this.componentData.entity.insState = this.searchForm.state - this.componentData.entity.sample = this.searchForm.sampleName - this.$nextTick(()=>{ + this.componentData.entity.sampleName = this.searchForm.sampleName + this.$nextTick(() => { this.refreshTable() }) }, handleTab(m, i) { this.tabIndex = i; - //this.componentData.entity.state = m.value - //this.refreshTable() + this.componentData.entity.sonLaboratory = 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' + 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 + this.typeList = data }) }, getInsStateDicts() { @@ -256,19 +1107,214 @@ }).then(res => { let data = res.data this.insStateList = data - data.forEach(ele=>{ + 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' + 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 }) }, + getLaboratoryDicts() { + this.$axios.post(this.$api.enums.selectEnumByCategory, { + category: "瀛愬疄楠屽" + }).then(res => { + this.tabList = res.data.map(ele => { + return { + label: ele.label, + value: ele.value + } + }) + if (this.tabList.length > 0) { + this.componentData.entity.sonLaboratory = this.tabList[0].value + } + this.refreshTable() + }) + }, + selectAllByOne(row) { + this.activeFace = 2; + this.examine = 1; + this.currentId = parseInt(row.id) + }, + playOrder(num) { + this.activeFace = num + }, + goback() { + this.state = 0 + this.refreshTable('page') + }, + handleInspection(row) { + //褰撳墠妫�楠屼换鍔$殑妫�楠屼汉鍒楄〃 + let inspectorList = [] + if (row.userName) { + inspectorList = row.userName.split(',') + } + let user = JSON.parse(localStorage.getItem('user')) + if (user) { + inspectorList.push(user.name) + } + this.inspectorList = inspectorList + this.orderId = row.sampleId + this.orderId0 = row.id + this.version = row.version + this.orderStateId = row.orderStateId + this.state = 1; + this.userInfo.name = row.userName.split(',') + this.userInfo.ids = row.userNameId.split(',') + this.isLook = false + }, + handleConnect(row) { + this.orderId = row.sampleId + this.orderId0 = row.id + this.connect = {} + this.connectVisible = true; + // this.$axios.post(this.$api.insOrderPlan.upPlanUser2, { + // orderId:this.orderId, + // }).then(res => { + // if (res.code === 200&&res.data.length>0) { + // this.sonLaboratoryList = []; + // res.data.forEach(m=>{ + // this.sonLaboratoryList.push({ + // value:m, + // label:m + // }) + // }) + // // this.connect.sonLaboratory = this.sonLaboratoryList[0].value + // } + // }) + }, + cancelSubmitPlan(row) { + this.$confirm('纭畾鎾ら攢姝ゆ妫�楠屾彁浜�?', "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning" + }).then(() => { + this.$axios.post(this.$api.insOrderPlan.cancelSubmitPlan, { + orderStateId: row.orderStateId + }).then(res => { + if (res.code == 201) { + return + } + this.$message.success("鎿嶄綔鎴愬姛") + this.refreshTable('page') + }).catch(() => { }) + }).catch(() => { }) + }, + confirmConnect() { + if (this.connect.connectPerson == null || this.connect.connectPerson == '' || this.connect.connectPerson == undefined) { + this.$message.error('鏈�夋嫨浜ゆ帴浜哄憳') + return + } + // if(this.connect.sonLaboratory==null||this.connect.sonLaboratory==''||this.connect.sonLaboratory==undefined){ + // this.$message.error('鏈�夋嫨璇曢獙瀹�') + // return + // } + this.loading = true; + this.$axios.post(this.$api.insOrderPlan.upPlanUser, { + sampleId: this.orderId, + userId: this.connect.connectPerson, + sonLaboratory: this.componentData.entity.sonLaboratory, + }).then(res => { + if (res.code === 200) { + this.loading = false; + this.$message.success("鎿嶄綔鎴愬姛") + this.refreshTable('page') + } + this.connectVisible = false + }).catch(error => { + console.error(error) + this.loading = false; + }) + }, + handleReview(row) { + this.state = 2; + this.orderId = row.sampleId + this.orderId0 = row.id + this.version = row.version + this.orderStateId = row.orderStateId + this.isLook = false + }, + getAuthorizedPerson() { + this.$axios.get(this.$api.user.getUserMenu).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + this.personList = data + }) + }, + lookHistory0(row) { + this.currentHistory = row + this.$axios.post(this.$api.insOrderPlan.getInsOrderUserList, { + insOrderStateId: row.orderStateId, + }).then(res => { + this.historyList = res.data + this.historyDialogVisible = true + }) + }, + lookHistory(row) { + this.isLook = true + this.state = 2; + this.orderId = this.currentHistory.sampleId + this.orderId0 = this.currentHistory.id + this.version = this.currentHistory.version + this.orderStateId = this.currentHistory.orderStateId + this.num1 = row.num + this.historyDialogVisible = false + }, + // 绾犳澶嶆牳 + upInsReview() { + if (this.verifyPlanInfo.type != 0 && this.verifyPlanInfo.type != 1 && this.verifyPlanInfo.type != 2) { + return this.$message.error("璇烽�夋嫨澶嶆牳鐘舵��"); + } + if (!this.verifyPlanInfo.tell) { + return this.$message.error("璇疯緭鍏ョ籂姝e鏍哥殑鍘熷洜"); + } + this.reviewLoading = true; + this.$axios + .post(this.$api.insOrderPlan.verifyPlan2, { + sampleId: this.verifyPlanInfo.sampleId, + type: this.verifyPlanInfo.type, + laboratory: this.componentData.entity.sonLaboratory, + tell: this.verifyPlanInfo.tell + }) + .then(res => { + if (res.code === 200) { + this.$message.success("鎿嶄綔鎴愬姛"); + this.upInsReviewDia = false; + this.refreshTable() + } + this.reviewLoading = false; + }) + .catch(error => { + console.error(error); + this.reviewLoading = false; + }); + }, + handleReview0(row) { + this.verifyPlanInfo = JSON.parse(JSON.stringify(row)); + this.$set(this.verifyPlanInfo, 'tell', null) + this.$set(this.verifyPlanInfo, 'type', null) + this.upInsReviewDia = true + }, + sortChange(ob) { + this.componentData.entity.orderBy = {} + this.componentData.entity.orderBy.field = ob.prop + if (ob.order == 'ascending') { + this.componentData.entity.orderBy.order = 'asc' + } else if (ob.order == 'descending') { + this.componentData.entity.orderBy.order = 'desc' + } + this.refreshTable() + } } } </script> -- Gitblit v1.9.3