Merge remote-tracking branch 'origin/dev' into dev
| | |
| | | // æ¥åç¼å¶é¡µé¢ç¸å
³æ¥å£ |
| | | import request from '@/utils/request' |
| | | |
| | | // æ¥è¯¢åææä¸å-å¾
ä¸å |
| | | // æ¥åè¿å |
| | | export function upReportUrl(query) { |
| | | return request({ |
| | | url: '/insReport/upReportUrl', |
| | |
| | | data: query |
| | | }) |
| | | } |
| | | // æ¥è¯¢æ£éªæ¥åæ°æ® |
| | | export function pageInsReport(query) { |
| | | return request({ |
| | | url: '/insReport/pageInsReport', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // æ¥åæ¹éä¸è½½ |
| | | export function downAll(query) { |
| | | return request({ |
| | | url: '/insReport/downAll', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // æ¥åéåå°æ£éªä»»å¡ |
| | | export function sendBackTask(query) { |
| | | return request({ |
| | | url: '/insReport/sendBackTask', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ¥åå®¡æ ¸ |
| | | export function examineReport(query) { |
| | | return request({ |
| | | url: '/insReport/examineReport', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ¥åæäº¤ |
| | | export function writeReport(query) { |
| | | return request({ |
| | | url: '/insReport/writeReport', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ¥åæ¹å |
| | | export function ratifyReport(query) { |
| | | return request({ |
| | | url: '/insReport/ratifyReport', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // æ ·å管ç页é¢ç¸å
³æ¥å£ |
| | | import request from '@/utils/request' |
| | | |
| | | // æ¥è¯¢ä»åº |
| | | export function selectWarehouse() { |
| | | return request({ |
| | | url: '/warehouse/selectWarehouse', |
| | | method: 'get' |
| | | }) |
| | | } |
| | | // æ ·åå
¥åº |
| | | export function inWarehouse(query) { |
| | | return request({ |
| | | url: '/warehouse/inWarehouse', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ ·ååºåº |
| | | export function outWarehouse(query) { |
| | | return request({ |
| | | url: '/warehouse/outWarehouse', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // ä¿®æ¹ä»åº |
| | | export function upWarehouse(query) { |
| | | return request({ |
| | | url: '/warehouse/upWarehouse', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ·»å ä»åº |
| | | export function addWarehouse(query) { |
| | | return request({ |
| | | url: '/warehouse/addWarehouse', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // ä¿®æ¹è´§æ¶ |
| | | export function upShelf(query) { |
| | | return request({ |
| | | url: '/warehouse/upShelf', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ·»å è´§æ¶ |
| | | export function addShelf(query) { |
| | | return request({ |
| | | url: '/warehouse/addShelf', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // å é¤ä»åº |
| | | export function delWarehouse(query) { |
| | | return request({ |
| | | url: '/warehouse/delWarehouse', |
| | | method: 'delete', |
| | | params: query |
| | | }) |
| | | } |
| | | // å é¤è´§æ¶ |
| | | export function delShelf(query) { |
| | | return request({ |
| | | url: '/warehouse/delShelf', |
| | | method: 'delete', |
| | | params: query |
| | | }) |
| | | } |
| | | // æ¥è¯¢è´§æ¶ä¸çåæ¾ä¿¡æ¯ |
| | | export function getWarehouse(query) { |
| | | return request({ |
| | | url: '/warehouse/getWarehouse', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // æ¥è¯¢è´§æ¶ä¸çåæ¾ä¿¡æ¯ |
| | | export function searchSampleId(query) { |
| | | return request({ |
| | | url: '/warehouse/searchSampleId', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | |
| | | <el-table-column v-for="(item, index) in column" :key="index" :column-key="item.columnKey" |
| | | :filter-method="item.filterHandler" :filter-multiple="item.filterMultiple" :filtered-value="item.filteredValue" |
| | | :filters="item.filters" :fixed="item.fixed" :label="item.label" :min-width="item.minWidth" :prop="item.prop" |
| | | :show-overflow-tooltip="item.dataType === 'action' ? false : true" :sortable="item.sortable ? true : false" |
| | | :show-overflow-tooltip="item.dataType === 'action' || item.dataType === 'slot' ? false : true" :sortable="item.sortable ? true : false" |
| | | :type="item.type" :width="item.dataType === 'action' ? getWidth(item.operation) : item.width |
| | | " align="center"> |
| | | <!-- <div class="123" v-if="item.type == ''"> --> |
| | |
| | | @click="o.clickFun(scope.row)" :key="key"> |
| | | {{ o.name }} |
| | | </el-button> |
| | | <el-upload action="#" size="mini" :on-change="(file, fileList) => o.clickFun(scope.row, file, fileList) |
| | | " :multiple="o.multiple ? o.multiple : false" :limit="o.limit ? o.limit : 1" |
| | | <el-upload |
| | | :action="javaApi + o.url +'?id=' +(o.uploadIdFun ? o.uploadIdFun(scope.row): scope.row.id) " |
| | | size="mini" |
| | | ref="upload" |
| | | :multiple="o.multiple ? o.multiple : false" |
| | | :limit="1" |
| | | :disabled="o.disabled ? o.disabled(scope.row) : false" :accept="o.accept |
| | | ? o.accept |
| | | : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' |
| | | " v-if="o.type == 'upload'" style="display: inline-block; width: 50px" |
| | | v-show="o.showHide ? o.showHide(scope.row) : true" :auto-upload="false" :on-exceed="onExceed" |
| | | v-show="o.showHide ? o.showHide(scope.row) : true" |
| | | :headers="uploadHeader" |
| | | :on-error="onError" |
| | | :on-exceed="onExceed" |
| | | :on-success="handleSuccessUp" |
| | | :show-file-list="false" :key="key"> |
| | | <el-button :size="o.size ? o.size : 'small'" type="text" |
| | | :disabled="o.disabled ? o.disabled(scope.row) : false">{{ o.name }}</el-button> |
| | |
| | | setCurrent(row) { |
| | | this.$refs.multipleTable.setCurrentRow(); |
| | | }, |
| | | handleSuccessUp(response, label) { |
| | | if (typeof label === "string") { |
| | | if (response.code == 200) { |
| | | this.upData[label] = response.data.url; |
| | | } |
| | | } else { |
| | | if (response.code == 200) { |
| | | this.$message.success("ä¸ä¼ æå"); |
| | | } |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error("ä¸ä¼ 失败"); |
| | | this.$refs.upload.clearFiles(); |
| | | this.uploading = false; |
| | | }, |
| | | onExceed() { |
| | | this.$message.warning("è¶
åºæä»¶ä¸ªæ°"); |
| | | }, |
| | |
| | | v-else |
| | | ref="upload" |
| | | :accept="a.uploadConfig.accept" |
| | | :action=" |
| | | javaApi + |
| | | a.uploadConfig.url + |
| | | '?id=' + |
| | | (a.uploadConfig.uploadIdFun |
| | | ? a.uploadConfig.uploadIdFun(scope.row) |
| | | : scope.row.id) |
| | | " |
| | | :action="javaApi + a.uploadConfig.url +'?id=' +(a.uploadConfig.uploadIdFun ? a.uploadConfig.uploadIdFun(scope.row): scope.row.id)" |
| | | :disabled=" |
| | | a.disabFun ? a.disabFun(scope.row, scope.$index) : false |
| | | " |
| | |
| | | }, |
| | | { |
| | | name: "ä¸ä¼ ", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleUpload(row); |
| | | }, |
| | | type: "upload", |
| | | accept: '.doc,.docx', |
| | | url: '/insReport/inReport', |
| | | uploadIdFun: (row) => { |
| | | return row.insReportId |
| | | } |
| | | }, |
| | | { |
| | | name: "è¿å", |
| | |
| | | }) |
| | | }, |
| | | // ä¸ä¼ æ¥å |
| | | handleUpload () { |
| | | handleUpload (row) { |
| | | |
| | | }, |
| | | // ä¸è½½æ¥å |
| | |
| | | dicts: ['check_type', 'urgency_level'], |
| | | components: {}, |
| | | props: { |
| | | isReport: { |
| | | type: Number, |
| | | default: () => null |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | orderType: '', |
| | | active: 0, |
| | | currentId: 0, |
| | | isReport: '', |
| | | editTable:[], // åºé´ç¹æ®å¼å¡«å |
| | | template: null, |
| | | saveLoad: false, // ä¿åæé®loading |
| | |
| | | this.active = this.$route.query.active |
| | | this.orderType = this.$route.query.orderType |
| | | this.currentId = this.$route.query.currentId |
| | | this.isReport = this.$route.query.isReport |
| | | this.customsInspection = this.$route.query.customsInspection |
| | | this.getUserNowList() // è·åå½åç¨æ·ä¿¡æ¯ |
| | | this.selectStandardMethods() // è·åæ£éªæ åä¸ææ¡æ°æ® |
| | |
| | | orderId = this.dataIndex === 0 ? this.customsInspection.enterOrderId : this.customsInspection.quarterOrderId |
| | | } else if (!this.customsInspection.enterOrderId && !this.customsInspection.quarterOrderId) { |
| | | this.isShowTab = false |
| | | orderId = this.isReport === 1 ? this.customsInspection.insOrderId : this.customsInspection.id |
| | | orderId = this.isReport == 1 ? this.customsInspection.insOrderId : this.customsInspection.id |
| | | } |
| | | // æ¥ç |
| | | // è¯·æ±æ¥å£ï¼åæ¾æ°æ® |
| | |
| | | this.upLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.$refs.fileList.selectList() |
| | | this.getFileList() |
| | | } |
| | | }, |
| | | beforeUpload(file) { |
| | |
| | | <template> |
| | | <div class="inspection_order"> |
| | | <div v-show="activeFace === 0 && state===0" style="width: 100%;height: 100%;"> |
| | | <div> |
| | | <el-row class="title"> |
| | | <el-col :span="12" style="padding-left: 20px;text-align: left;">æ¥åç¼å¶</el-col> |
| | | </el-row> |
| | | </div> |
| | | <div class="search" style="position: relative;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ¥åç¼å·ï¼</div> |
| | | <div class="search_input"><el-input v-model="componentData.entity.code" clearable placeholder="请è¾å
¥" |
| | | size="small" @keyup.enter.native="refreshTable()"></el-input></div> |
| | | <div class="app-container"> |
| | | <div> |
| | | <el-form :model="entity" ref="entity" size="small" :inline="true"> |
| | | <el-form-item label="æ¥åç¼å·" prop="code"> |
| | | <el-input v-model="entity.code" clearable placeholder="请è¾å
¥" |
| | | size="small" @keyup.enter.native="refreshTable()"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç¶æ" prop="queryStatus"> |
| | | <el-select v-model="entity.queryStatus" clearable size="small" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸åç±»å«" prop="typeSource"> |
| | | <el-select v-model="entity.typeSource" clearable size="small" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ£éªç±»å«" prop="orderType"> |
| | | <el-select v-model="entity.orderType" clearable size="small" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button size="mini" @click="refresh()">éç½®</el-button> |
| | | <el-button size="mini" type="primary" @click="refreshTable()">æ¥è¯¢</el-button> |
| | | <el-button :loading="outLoading" size="mini" type="primary" @click="handleDowns">æ¹éä¸è½½</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div> |
| | | <lims-table :tableData="valueTableData" :column="column" :page="page" :tableLoading="tableLoading" |
| | | :isSelection="true" :handleSelectionChange="handleChange" |
| | | :height="'calc(100vh - 290px)'" @pagination="pagination" key="valueTableData"> |
| | | <div slot="action" slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="viewIssued(scope.row)">æ¥çæ¥å</el-button> |
| | | <el-upload ref='upload1' |
| | | style="display: inline;margin: 0 6px" |
| | | :action="fileAction1 +'?id='+ scope.row.id" |
| | | :auto-upload="true" |
| | | :before-upload="fileBeforeUpload1" |
| | | :headers="uploadHeader" :on-error="onError1" |
| | | :on-success="handleSuccessUp1" |
| | | :show-file-list="false" |
| | | accept='.doc,.docx'> |
| | | <el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">è¿å</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">éåä»»å¡</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">æäº¤</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">å®¡æ ¸</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">æ¹å</el-button> |
| | | <el-popover placement="bottom" trigger="hover" style="margin-left: 6px"> |
| | | <template #reference> |
| | | <el-button link type="text" size="small">æ´å¤</el-button> |
| | | </template> |
| | | <div> |
| | | <el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">ä¸è½½</el-button> |
| | | <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">åå§è®°å½</el-button> |
| | | <el-button type="text" size="small" @click="handleFileLook(scope.row)">éä»¶ä¸ä¼ </el-button> |
| | | </div> |
| | | </el-popover> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="componentData.entity.queryStatus" clearable size="small" style="width: 100%;" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in queryStatusList" :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-select v-model="componentData.entity.typeSource" clearable size="small" style="width: 100%;" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in typeSourceList" :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-select v-model="componentData.entity.orderType" clearable size="small" style="width: 100%;" @change="refreshTable()"> |
| | | <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option> |
| | | </el-select> |
| | | </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> |
| | | <el-button :loading="outLoading" size="small" style="margin-right: 16px;" type="primary" @click="handleDowns">æ¹éä¸è½½</el-button> |
| | | </div> |
| | | </div> |
| | | <!-- <input id="input" type="file" accept=".doc,.docx"></input> --> |
| | | <div class="table"> |
| | | <el-table @selection-change="handleChange" :data="valueTableData" style="width: 100%" height="calc(100vh - 21em)" v-loading="tableLoading"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column header-align="center" align="center" width="70" prop="prop" label="åºå·" type="index"></el-table-column> |
| | | <el-table-column prop="code" label="æ¥åç¼å·" min-width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="selectAllByOne(scope.row)">{{scope.row.code}}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="typeSource" label="ä¸åç±»å«" min-width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="info" v-if="scope.row.typeSource === 1" disable-transitions>åææä¸å</el-tag> |
| | | <el-tag type="info" v-if="scope.row.typeSource === 0" disable-transitions>æåä¸å</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="orderType" label="æ£éªç±»å«" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="success" v-if="scope.row.orderType === 'Customer-ordered test'" disable-transitions>å§æè¯éª</el-tag> |
| | | <el-tag v-if="scope.row.orderType === 'æ½æ£'" disable-transitions>æ½æ£</el-tag> |
| | | <el-tag type="info" v-if="scope.row.orderType === 'è¿åæ£éª'" disable-transitions>è¿åæ£éª</el-tag> |
| | | <el-tag type="warning" v-if="scope.row.orderType === 'Quarterly inspection'" disable-transitions>å£åº¦æ£éª</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" label="å建æ¶é´" min-width="150"></el-table-column> |
| | | <el-table-column prop="writeUserName" label="æäº¤äºº" min-width="110"></el-table-column> |
| | | <el-table-column prop="writeTime" label="æäº¤æ¶é´" min-width="150"></el-table-column> |
| | | <el-table-column prop="state" label="æäº¤ç¶æ" min-width="110"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="danger" v-if="scope.row.state === 0" disable-transitions>å¾
æäº¤</el-tag> |
| | | <el-tag type="success" v-if="scope.row.state === 1" disable-transitions>å·²æäº¤</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="examineUser" label="å®¡æ ¸äºº" width="110"></el-table-column> |
| | | <el-table-column prop="examineTime" label="å®¡æ ¸æ¶é´" width="180"></el-table-column> |
| | | <el-table-column prop="isExamine" label="å®¡æ ¸ç¶æ" width="110"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="danger" v-if="scope.row.isExamine === 0" disable-transitions>ä¸éè¿</el-tag> |
| | | <el-tag type="success" v-if="scope.row.isExamine === 1" disable-transitions>éè¿</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="examineTell" label="å®¡æ ¸å¤æ³¨" width="180"></el-table-column> |
| | | <el-table-column prop="ratifyUser" label="æ¹å人" width="110"></el-table-column> |
| | | <el-table-column prop="ratifyTime" label="æ¹åæ¶é´" width="180"></el-table-column> |
| | | <el-table-column prop="isRatify" label="æ¹åç¶æ" width="110"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="danger" v-if="scope.row.isRatify === 0" disable-transitions>䏿¹å</el-tag> |
| | | <el-tag type="success" v-if="scope.row.isRatify === 1" disable-transitions>æ¹å</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="ratifyTell" label="æ¹å夿³¨" width="180"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column label="æä½" fixed="right" min-width="360" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="viewIssued(scope.row)">æ¥çæ¥å</el-button> |
| | | <el-upload ref='upload1' |
| | | style="display: inline" |
| | | :action="fileAction1 +'?id='+ scope.row.id" |
| | | :auto-upload="true" |
| | | :before-upload="fileBeforeUpload1" |
| | | :headers="headers" :on-error="onError1" |
| | | :on-success="handleSuccessUp1" |
| | | :show-file-list="false" |
| | | accept='.doc,.docx'> |
| | | <el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">ä¸ä¼ </el-button> |
| | | <!-- <span>ä¸ä¼ </span>--> |
| | | </el-upload> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">è¿å</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">éåä»»å¡</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">æäº¤</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">å®¡æ ¸</el-button> |
| | | <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">æ¹å</el-button> |
| | | <el-popover placement="bottom" :width="170" trigger="hover"> |
| | | <template #reference> |
| | | <el-button link type="text" size="small">æ´å¤</el-button> |
| | | </template> |
| | | <div> |
| | | <el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">ä¸è½½</el-button> |
| | | <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">åå§è®°å½</el-button> |
| | | <el-button type="text" size="small" @click="handleFileLook(scope.row)">éä»¶ä¸ä¼ </el-button> |
| | | </div> |
| | | </el-popover> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current" |
| | | style="margin-right: 5%;" :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size" |
| | | layout="->,total, sizes, prev, pager, next, jumper" :total="total"> |
| | | </el-pagination> |
| | | </div> |
| | | </lims-table> |
| | | </div> |
| | | <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="claimVisible" title="å¨çº¿ç¼å¶" |
| | | width="22cm"> |
| | |
| | | <el-button :loading="loadingVerify" type="primary" @click="handleSubmit">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <div v-if="activeFace >0 && isCopper === null" style="width: 100%;height: 100%;"> |
| | | <Add :active="activeFace" :currentId="currentId" :examine="examine"/> |
| | | </div> |
| | | <div v-if="activeFace >0 && isCopper === 0" style="width: 100%;height: 100%;"> |
| | | <CustomsInspection :active="activeFace" :currentId="currentId" :customsInspection="customsInspection" :isReport="isReport"/> |
| | | </div> |
| | | <div v-if="activeFace >0 && isCopper === 1" style="width: 100%;height: 100%;"> |
| | | <CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder> |
| | | </div> |
| | | <!--产ä¸é¾ä¿¡æ¯æ¥ç--> |
| | | <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo> |
| | | <!-- <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>--> |
| | | <!--æ¥åæ¥ç--> |
| | | <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" title="æ¥åæ¥ç" |
| | | width="80vw"> |
| | |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | | </div> |
| | | </el-dialog> |
| | | <!--æ£éªä»»å¡ä¿¡æ¯æ¥ç--> |
| | | <Inspection v-if="state>0" :key="InspectionKey" :inspectorList="inspectorList" :orderId="orderId" |
| | | :sonLaboratory="sonLaboratory" :state="state" |
| | | :typeSource="typeSource" |
| | | @goback="goback" @refreshView="refreshView"/> |
| | | <!--éä»¶æ¥ç--> |
| | | <el-dialog :visible.sync="filesDialogVisible" title="éä»¶æ¥ç" width="80%" @closed="closeFilesLook"> |
| | | <div style="display: flex;justify-content: space-between;"> |
| | | <div style="margin-bottom: 10px"> |
| | | <el-upload ref='upload' |
| | | :action="fileAction" |
| | | :auto-upload="true" |
| | | :before-upload="fileBeforeUpload" :data="{orderId: filesLookInfo.insOrderId}" |
| | | :headers="headers" :on-error="onError" |
| | | :headers="uploadHeader" :on-error="onError" |
| | | :on-success="handleSuccessUp" |
| | | :show-file-list="false" |
| | | accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;"> |
| | | <el-button size="small" style="height: 38px" type="primary">éä»¶ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </div> |
| | | <!-- <div v-if="filesDialogVisible" style="height: 70vh;overflow-y: auto;">--> |
| | | <!-- <ValueTable :key="upIndex"--> |
| | | <!-- ref="fileList"--> |
| | | <!-- :componentData="fileComponentData"--> |
| | | <!-- :delUrl="$api.insOrderPlan.delfile"--> |
| | | <!-- :url="$api.insOrderPlan.getFileList"--> |
| | | <!-- class="value-table"/>--> |
| | | <!-- </div>--> |
| | | <lims-table :tableData="tableDataFile" :column="columnFile" @pagination="paginationFile" height="500px" |
| | | key="tableDataFile" :page="pageFile" :tableLoading="tableLoadingFile"></lims-table> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | |
| | | import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue"; |
| | | // import ShowInfo from "../do/b1-material-ins-order/showInfo.vue"; |
| | | import file from "@/utils/file"; |
| | | import { |
| | | downAll, |
| | | examineReport, |
| | | pageInsReport, |
| | | ratifyReport, |
| | | sendBackTask, |
| | | upReportUrl, |
| | | writeReport |
| | | } from "@/api/business/insReport"; |
| | | import {mapGetters} from "vuex"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import {delfile, downFile, getFileList} from "@/api/business/rawMaterialOrder"; |
| | | export default { |
| | | components: {onlyoffice}, |
| | | components: {limsTable, onlyoffice}, |
| | | data() { |
| | | return { |
| | | componentData: { |
| | | entity: { |
| | | queryStatus: null, |
| | | code: null, |
| | | typeSource: null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: true, |
| | | select: true, |
| | | selectMethod: 'handleChange', |
| | | do: [ |
| | | { |
| | | id: '', |
| | | font: 'æ¥çæ¥å', |
| | | type: 'text', |
| | | method: 'viewIssued', |
| | | }, |
| | | { |
| | | id: 'download', |
| | | font: 'ä¸è½½', |
| | | type: 'text', |
| | | method: 'download' |
| | | }, { |
| | | id: 'handleUpload', |
| | | font: 'ä¸ä¼ ', |
| | | type: 'upload', |
| | | uploadConfig: { |
| | | url: this.$api.insReport.inReport, |
| | | accept: '.docx' |
| | | }, |
| | | method: 'handleUpload', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 || userName != row.writeUserName |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleRestore', |
| | | font: 'è¿å', |
| | | type: 'text', |
| | | method: 'handleRestore', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName |
| | | } |
| | | }, |
| | | { |
| | | id: 'sendBackTask', |
| | | font: 'éåä»»å¡', |
| | | type: 'text', |
| | | method: 'sendBackTask', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName |
| | | } |
| | | }, |
| | | { |
| | | id: 'handle', |
| | | font: 'æäº¤', |
| | | type: 'text', |
| | | method: 'handle', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleIssued', |
| | | font: 'å®¡æ ¸', |
| | | type: 'text', |
| | | method: 'handleIssued', |
| | | disabFun: (row, index) => { |
| | | return row.state == null || row.state == 0 || row.isExamine == 1 || JSON.parse(localStorage.getItem("user")).name != row.examineUser |
| | | } |
| | | }, { |
| | | id: 'handleApprove', |
| | | font: 'æ¹å', |
| | | type: 'text', |
| | | method: 'handleApprove', |
| | | disabFun: (row, index) => { |
| | | return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row.isRatify == 1 || JSON.parse(localStorage.getItem("user")).name != row.ratifyUser |
| | | } |
| | | }, |
| | | { |
| | | id: '', |
| | | font: 'åå§è®°å½', |
| | | type: 'text', |
| | | method: 'viewInspectInfo', |
| | | }, |
| | | { |
| | | id: '', |
| | | font: 'éä»¶ä¸ä¼ ', |
| | | type: 'text', |
| | | method: 'handleFileLook', |
| | | } |
| | | ], |
| | | linkEvent: { |
| | | code: { |
| | | method: 'selectAllByOne' |
| | | } |
| | | }, |
| | | tagField: { |
| | | isRatify: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: '䏿¹å' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: 'æ¹å' |
| | | }] |
| | | }, |
| | | isExamine: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: 'ä¸éè¿' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: 'éè¿' |
| | | }] |
| | | }, |
| | | state: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: 'å¾
æäº¤' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: 'å·²æäº¤' |
| | | }] |
| | | }, |
| | | typeSource: { |
| | | select: [{ |
| | | value: 0, |
| | | label: 'æåä¸å', |
| | | type: 'info' |
| | | },{ |
| | | value: 1, |
| | | label: 'åææä¸å', |
| | | type: 'info' |
| | | }] |
| | | }, |
| | | queryStatus: { |
| | | select: [{ |
| | | value: 0, |
| | | label: 'å¾
æäº¤', |
| | | type: 'info' |
| | | },{ |
| | | value: 1, |
| | | label: 'å¾
å®¡æ ¸', |
| | | type: 'info' |
| | | },{ |
| | | value: 2, |
| | | label: 'å¾
æ¹å', |
| | | type: 'info' |
| | | }] |
| | | }, |
| | | orderType: { |
| | | select: [{ |
| | | value: 'Customer-ordered test', |
| | | label: 'å§æè¯éª', |
| | | type: 'success', |
| | | effect: 'plain' |
| | | },{ |
| | | value: 'æ½æ£', |
| | | label: 'æ½æ£', |
| | | type: '', |
| | | effect: 'plain' |
| | | },{ |
| | | value: 'è¿åæ£éª', |
| | | label: 'è¿åæ£éª', |
| | | type: 'info', |
| | | effect: 'plain' |
| | | },{ |
| | | value: 'Quarterly inspection', |
| | | label: 'å£åº¦æ£éª', |
| | | type: 'warning', |
| | | effect: 'plain' |
| | | }] |
| | | } |
| | | }, |
| | | selectField: {}, |
| | | requiredAdd: [], |
| | | needSort: ['createTime', 'state', 'writeTime', 'isExamine', 'examineTime', 'ratifyTime'], |
| | | requiredUp: [] |
| | | entity: { |
| | | queryStatus: null, |
| | | code: null, |
| | | typeSource: null, |
| | | }, |
| | | page: { |
| | | current: 1, |
| | | size: 20, |
| | | total: 0 |
| | | }, |
| | | total: null, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | statusList: [], |
| | | claimVisible: false, |
| | |
| | | sonLaboratory: '', // è¯éªå®¤ |
| | | filesDialogVisible: false, |
| | | filesLookInfo: {}, |
| | | fileComponentData: { |
| | | entity: { |
| | | insOrderId:'' |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | sort: false, |
| | | init:false, |
| | | do: [ |
| | | { |
| | | id: 'parent', |
| | | font: 'ä¸è½½', |
| | | type: 'text', |
| | | method: 'handleDown' |
| | | },{ |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | tableDataFile: [], |
| | | tableLoadingFile: false, |
| | | columnFile: [ |
| | | { |
| | | dataType: 'tag', |
| | | label: 'ç±»å', |
| | | prop: 'type', |
| | | formatData: (params) => { |
| | | if (params == 1) { |
| | | return 'å¾ç' |
| | | } else if (params == 2) { |
| | | return 'æä»¶' |
| | | } else { |
| | | return '' |
| | | } |
| | | }, |
| | | formatType: (params) => { |
| | | if (params == 1) { |
| | | return 'success' |
| | | } else if (params == 2) { |
| | | return 'warning' |
| | | } else { |
| | | return '' |
| | | } |
| | | } |
| | | ], |
| | | isPage: false, |
| | | linkEvent: {}, |
| | | tagField: { |
| | | type:{ |
| | | select:[ |
| | | { |
| | | value: 1, |
| | | label: 'å¾ç' |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: 'æä»¶' |
| | | }, |
| | | { label: 'éä»¶åç§°', prop: 'fileName' }, |
| | | { label: 'ä¸ä¼ 人', prop: 'name' }, |
| | | { label: 'ä¸ä¼ æ¶é´', prop: 'createTime' }, |
| | | { |
| | | dataType: 'action', |
| | | fixed: 'right', |
| | | label: 'æä½', |
| | | width: '170px', |
| | | operation: [ |
| | | { |
| | | name: 'ä¸è½½', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row); |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | currentId: '', |
| | | selectField: {}, |
| | | requiredAdd: [], |
| | | requiredUp: [] |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.delete(row); |
| | | } |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | pageFile: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 1 |
| | | }, |
| | | isCopper: null, |
| | | tableLoading: false, |
| | | valueTableData: [], |
| | | userName: '' |
| | | column: [ |
| | | { |
| | | label: "æ¥åç¼å·", |
| | | prop: "code", |
| | | width: "160px", |
| | | dataType: "link", |
| | | linkMethod: "selectAllByOne", |
| | | }, |
| | | { |
| | | label: "ä¸åç±»å«", |
| | | prop: "typeSource", |
| | | width: "100px", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | if (params == 0) { |
| | | return "æåä¸å"; |
| | | } else { |
| | | return "åææä¸å"; |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | label: "æ£éªç±»å", |
| | | prop: "orderType", |
| | | width: "100px", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | return this.orderTypeList.find((m) => m.value == params).label; |
| | | }, |
| | | formatType: (params) => { |
| | | return this.orderTypeList.find((m) => m.value == params).type; |
| | | }, |
| | | }, |
| | | { label: "å建æ¶é´", prop: "createTime" }, |
| | | { label: "æäº¤äºº", prop: "writeUserName" }, |
| | | { label: "æäº¤æ¶é´", prop: "writeTime" }, |
| | | { |
| | | label: "æäº¤ç¶æ", |
| | | prop: "state", |
| | | width: "100px", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | if (params == 0) { |
| | | return "å¾
æäº¤"; |
| | | } else { |
| | | return "å·²æäº¤"; |
| | | } |
| | | }, |
| | | formatType: (params) => { |
| | | if (params == 0) { |
| | | return "danger"; |
| | | } else { |
| | | return "success"; |
| | | } |
| | | }, |
| | | }, |
| | | { label: "å®¡æ ¸äºº", prop: "examineUser" }, |
| | | { label: "å®¡æ ¸æ¶é´", prop: "examineTime" }, |
| | | { |
| | | label: "å®¡æ ¸ç¶æ", |
| | | prop: "isExamine", |
| | | width: "100px", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | if (params == 0) { |
| | | return "ä¸éè¿"; |
| | | } else { |
| | | return "éè¿"; |
| | | } |
| | | }, |
| | | formatType: (params) => { |
| | | if (params == 0) { |
| | | return "danger"; |
| | | } else { |
| | | return "success"; |
| | | } |
| | | }, |
| | | }, |
| | | { label: "å®¡æ ¸å¤æ³¨", prop: "examineTell" }, |
| | | { label: "æ¹å人", prop: "ratifyUser" }, |
| | | { label: "æ¹åæ¶é´", prop: "ratifyTime" }, |
| | | { |
| | | label: "æ¹åç¶æ", |
| | | prop: "isRatify", |
| | | width: "100px", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | if (params == 0) { |
| | | return "䏿¹å"; |
| | | } else { |
| | | return "æ¹å"; |
| | | } |
| | | }, |
| | | formatType: (params) => { |
| | | if (params == 0) { |
| | | return "danger"; |
| | | } else { |
| | | return "success"; |
| | | } |
| | | }, |
| | | }, |
| | | { label: "æ¹å夿³¨", prop: "ratifyTell" }, |
| | | { |
| | | fixed: "right", |
| | | dataType: "slot", |
| | | slot: "action", |
| | | width: '360px', |
| | | label: "æä½" |
| | | } |
| | | ], |
| | | userName: '', |
| | | } |
| | | }, |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | ...mapGetters(["nickName", "userId"]), |
| | | action() { |
| | | return this.javaApi + this.$api.insReport.upAll |
| | | return this.javaApi + '/insReport/upAll' |
| | | }, |
| | | fileAction() { |
| | | return this.javaApi + this.$api.insOrderPlan.uploadFile |
| | | return this.javaApi + '/unqualifiedHandler/uploadFileByUnqualified' |
| | | }, |
| | | fileAction1() { |
| | | return this.javaApi + this.$api.insReport.inReport |
| | | return this.javaApi + '/insReport/inReport' |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity) |
| | | this.userName = JSON.parse(localStorage.getItem("user")).name |
| | | this.getPower() |
| | | this.refreshTable() |
| | | }, |
| | | methods: { |
| | | refreshTable() { |
| | | this.tableLoading = true |
| | | pageInsReport({ |
| | | ...this.page,...this.entity |
| | | }).then(res => { |
| | | this.tableLoading = false |
| | | this.page.total = res.data.body.total |
| | | this.valueTableData = res.data.body.records |
| | | }) |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.refreshTable(); |
| | | }, |
| | | refresh() { |
| | | this.resetForm('entity') |
| | | this.refreshTable(); |
| | | }, |
| | | handleChange(arr){ |
| | | this.mutiList = arr |
| | | }, |
| | |
| | | if(row.userName){ |
| | | inspectorList = row.userName.split(',') |
| | | } |
| | | let user = JSON.parse(localStorage.getItem('user')) |
| | | if(user){ |
| | | inspectorList.push(user.name) |
| | | } |
| | | this.inspectorList = inspectorList |
| | | this.state = 3; |
| | | this.typeSource = row.typeSource |
| | | this.orderId = row.insOrderId |
| | | this.sonLaboratory = row.sonLaboratory |
| | | inspectorList.push(this.nickName) |
| | | this.$router.push({ |
| | | path: "/inspectionTask/inspection", |
| | | query: { |
| | | sonLaboratory: row.sonLaboratory, |
| | | state: 3, |
| | | typeSource: row.typeSource, |
| | | orderId: row.insOrderId, |
| | | inspectorList: inspectorList, |
| | | }, |
| | | }) |
| | | }, |
| | | goback() { |
| | | this.state = 0 |
| | | this.refreshTable('page') |
| | | }, |
| | | // æå¼æ¥çéä»¶å¼¹æ¡ |
| | | handleFileLook (row) { |
| | | this.filesLookInfo = row |
| | | this.filesDialogVisible = true |
| | | this.fileComponentData.entity.insOrderId = row.insOrderId |
| | | this.$nextTick(() => { |
| | | this.$refs['fileList'].selectList() |
| | | this.getFileList() |
| | | }, |
| | | // æ¥è¯¢éä»¶æ¥çå表åè° |
| | | getFileList() { |
| | | this.tableLoadingFile = true |
| | | getFileList({insOrderId: this.filesLookInfo.insOrderId}).then(res => { |
| | | this.tableLoadingFile = false |
| | | if (res.code === 200) { |
| | | this.tableDataFile = res.data.records |
| | | this.pageFile.total = res.data.total |
| | | } |
| | | }).catch(err => { |
| | | this.tableLoadingFile = false |
| | | }) |
| | | }, |
| | | paginationFile(page) { |
| | | this.pageFile.size = page.limit |
| | | this.getFileList() |
| | | }, |
| | | closeFilesLook () { |
| | | this.filesDialogVisible = false |
| | |
| | | this.upLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.$refs.fileList.selectList() |
| | | this.getFileList() |
| | | } |
| | | }, |
| | | handleSuccessUp1(response, ) { |
| | |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | } |
| | | }, |
| | | // ä¸è½½éä»¶çæä»¶ |
| | | handleDown(row){ |
| | | this.$axios.post(this.$api.insOrderPlan.downFile, { |
| | | downFile({ |
| | | id: row.id, |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | |
| | | |
| | | }) |
| | | }, |
| | | // å·æ°é¡µé¢ |
| | | refreshView () { |
| | | this.InspectionKey++ |
| | | // å é¤éä»¶æä»¶ |
| | | delete(row) { |
| | | this.$confirm('æ¯å¦å é¤å½åæ°æ®?', "è¦å", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | }).then(() => { |
| | | delfile({ id: row.id }).then(res => { |
| | | if (res.code === 500) { |
| | | return |
| | | } |
| | | this.$message.success('å 餿å') |
| | | this.getList() |
| | | }).catch(e => { |
| | | this.$message.error('å é¤å¤±è´¥') |
| | | }) |
| | | }).catch(() => { }) |
| | | }, |
| | | // æ¥ç产ä¸é¾ä¿¡æ¯ |
| | | openInfoDialog (row) { |
| | |
| | | } |
| | | let str = this.mutiList.map(m=>m.id).join(',') |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.insReport.downAll+'?ids='+str).then(res => { |
| | | downAll({ids: str}).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | // const blob = new Blob([res],{ type: 'application/octet-stream' }); |
| | |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload1.clearFiles() |
| | | }, |
| | | refreshTable(e) { |
| | | this.tableLoading = false |
| | | this.$axios.post(this.$api.insReport.pageInsReport, { |
| | | page: this.page, |
| | | entity: this.componentData.entity |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.total = res.data.body.total |
| | | this.valueTableData = res.data.body.records |
| | | }) |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.page.size = val |
| | | this.refreshTable(); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.page.current = val |
| | | this.refreshTable(); |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.refreshTable(); |
| | | }, |
| | | async handleWeave(row) { |
| | | let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | //åèvabOnlyOfficeç»ä»¶åæ°é
ç½® |
| | | const { href } = this.$router.resolve({ |
| | | path: `/wordEdit`, |
| | | query: { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: true, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: true, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | } |
| | | }) |
| | | window.open(href, '_blank'); |
| | | }, |
| | | // æéåé
|
| | | getPower(radio) { |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let edit = false |
| | | let up = false |
| | | let res = false |
| | | let sub = false |
| | | let issued = true |
| | | let approve = true |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'upReportFile') { |
| | | edit = true |
| | | } |
| | | if (power[i].menuMethod == 'inReport') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'upReportUrl') { |
| | | res = true |
| | | } |
| | | if (power[i].menuMethod == 'writeReport') { |
| | | sub = true |
| | | } |
| | | if (power[i].menuMethod == 'ratifyReport') { |
| | | approve = true |
| | | } |
| | | if (power[i].menuMethod == 'examineReport') { |
| | | issued = true |
| | | } |
| | | } |
| | | if (!approve) { |
| | | this.componentData.do.splice(6, 1) |
| | | } |
| | | if (!issued) { |
| | | this.componentData.do.splice(5, 1) |
| | | } |
| | | if (!sub) { |
| | | this.componentData.do.splice(4, 1) |
| | | } |
| | | if (!res) { |
| | | this.componentData.do.splice(3, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(2, 1) |
| | | } |
| | | if (!edit) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | }, |
| | | confirmClaim() { |
| | | // console.log(this.$refs.Word.getValue()) |
| | | }, |
| | | playOrder(num) { |
| | | this.activeFace = num |
| | | }, |
| | | async selectAllByOne(row) { |
| | | selectAllByOne(row) { |
| | | this.isCopper = row.isCopper |
| | | this.customsInspection = row |
| | | this.activeFace = 2; |
| | | this.examine = 1; |
| | | this.isReport = 1 |
| | | this.currentId = parseInt(row.insOrderId) |
| | | switch (row.isCopper) { |
| | | case 0: |
| | | // åææ |
| | | this.$router.push({ |
| | | path: "/materialOrder/customsInspection", query: { |
| | | customsInspection: row, |
| | | active: this.activeFace, |
| | | currentId: row.insOrderId, |
| | | isReport: this.isReport |
| | | } |
| | | }); |
| | | break; |
| | | case null: |
| | | // æå |
| | | this.$router.push({ |
| | | path: "/productOrder/add", query: { |
| | | examine: this.examine, |
| | | active: this.activeFace, |
| | | currentId: row.insOrderId |
| | | } |
| | | }); |
| | | break; |
| | | case 1: |
| | | // éæ |
| | | this.$router.push({ |
| | | path: "/materialOrder/copperOrder", query: { |
| | | active: this.activeFace, |
| | | currentId: row.insOrderId |
| | | } |
| | | }); |
| | | break; |
| | | } |
| | | }, |
| | | download(row) { |
| | | let url = row.urlS ? row.urlS : row.url; |
| | |
| | | }, |
| | | // è¿åæä½ |
| | | handleRestore(row) { |
| | | this.$axios.post(this.$api.insReport.upReportUrl, { |
| | | upReportUrl({ |
| | | id: row.id |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | |
| | | fileType = "pdf" |
| | | } |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | const userName = this.nickName |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | |
| | | } |
| | | this.issuedVisible = true; |
| | | }, |
| | | // æ¥çpdfæ¥å |
| | | viewIssuedPdf(row) { |
| | | this.currentInfo = row; |
| | | let url = row.tempUrlPdf |
| | | if(url){ |
| | | url = url.split('.')[0]+'.pdf' |
| | | const link = document.createElement('a'); |
| | | link.href = this.javaApi + url; |
| | | link.target = '_blank'; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | } |
| | | }, |
| | | // æ¥çæ¥å |
| | | viewIssued(row) { |
| | | this.currentInfo = row; |
| | |
| | | fileType = "pdf" |
| | | } |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | const userName = this.nickName |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.upLoad = true |
| | | this.$axios.post(this.$api.insReport.sendBackTask+'?id='+row.id).then(res => { |
| | | sendBackTask({id: row.id}).then(res => { |
| | | this.upLoad = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('éåæåï¼') |
| | | this.refreshTable('page') |
| | | }).catch(err => { |
| | |
| | | return |
| | | } |
| | | this.loadingIssued = true; |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | examineReport({ |
| | | id: this.currentInfo.id, |
| | | userId: this.approver, |
| | | isExamine: 1 |
| | | }).then(res => { |
| | | this.loadingIssued = false; |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('æäº¤æå') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | |
| | | }, |
| | | // è·å人åå表 |
| | | getAuthorizedPerson() { |
| | | this.$axios.get(this.$api.user.selectQualityUserList).then(res => { |
| | | let data = [] |
| | | let userName = JSON.parse(localStorage.getItem("user")).name; |
| | | res.data.forEach(a => { |
| | | // if(a.name !== userName) { |
| | | selectUserCondition({ type: 0 }).then((res) => { |
| | | let data = []; |
| | | res.data.forEach((a) => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | // } |
| | | }) |
| | | this.approverList = data |
| | | value: a.id, |
| | | }); |
| | | }); |
| | | this.approverList = data; |
| | | }) |
| | | }, |
| | | // æ¹åæé® |
| | |
| | | fileType = "pdf" |
| | | } |
| | | fileName = fileName.replace('/word/','') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | const userName = this.nickName |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | |
| | | // æ¹åéè¿ |
| | | subApprove() { |
| | | this.loadingApprove = true; |
| | | this.$axios.post(this.$api.insReport.ratifyReport, { |
| | | ratifyReport({ |
| | | id: this.currentInfo.id, |
| | | isRatify: 1 |
| | | }).then(res => { |
| | | this.loadingApprove = false; |
| | | if (res.code == 201) { |
| | | this.$message.error('æ¹å失败') |
| | | return |
| | | } |
| | | this.$message.success('å·²æ¹å') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | |
| | | // æäº¤å®¡æ ¸äººæä½ |
| | | handleSubmit(row) { |
| | | this.loadingVerify = true |
| | | this.$axios.post(this.$api.insReport.writeReport, { |
| | | writeReport({ |
| | | id: this.currentInfo.id, |
| | | userId: this.verifyUser, |
| | | }).then(res => { |
| | | this.loadingVerify = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.addVerifyDia = false |
| | | this.$message.success('æäº¤æå') |
| | | this.refreshTable('page') |
| | |
| | | return this.$message.error('请è¾å
¥åå ') |
| | | } |
| | | this.loadingIssuedReason = true; |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | examineReport({ |
| | | id: this.currentInfo.id, |
| | | isExamine: 0, |
| | | examineTell: this.reason |
| | | }).then(res => { |
| | | this.loadingIssuedReason = false; |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('æä½æå') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | |
| | | return this.$message.error('请è¾å
¥åå ') |
| | | } |
| | | this.loadingApproveReason = true |
| | | this.$axios.post(this.$api.insReport.ratifyReport, { |
| | | ratifyReport({ |
| | | id: this.currentInfo.id, |
| | | isRatify: 0, |
| | | examineTell: this.reason |
| | | }).then(res => { |
| | | this.loadingApproveReason = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('æä½æå') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div style="width: 100%;height: 100%;overflow-y: auto;" class="detail"> |
| | | <div> |
| | | <el-row class="title"> |
| | | <el-col :span="12" style="padding-left: 20px;text-align: left;">æ ·å详æ
</el-col> |
| | | <el-col :span="12" style="text-align: right;"> |
| | | <el-button size="small" @click="hanldeBack">è¿å</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ ·åç¼å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.sampleCode" disabled></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ ·ååç§°ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.sample" disabled></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ ·åæ°éï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.num" disabled></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">åä½ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.unit" disabled></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">å
¥åºæ¶é´ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.date" disabled></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">å
¥åºäººï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.user" disabled></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" > |
| | | <div class="search_label">åºä½å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.code" disabled style="min-width: 230px;"></el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <h4>æ£éªé¡¹ç®</h4> |
| | | <div class="table"> |
| | | <el-table class="el-table" ref="productTable" :data="products" height="380px" tooltip-effect="dark" border> |
| | | <el-table-column type="index" align="center" label="åºå·" width="70" :key="Math.random()"> |
| | | </el-table-column> |
| | | <el-table-column prop="inspectionItem" label="æ£éªé¡¹" min-width="100" |
| | | show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="inspectionItemSubclass" label="æ£éªé¡¹åç±»" min-width="100" show-overflow-tooltip v-if="PROJECT=='è£
å¤çµç¼'"></el-table-column> |
| | | <el-table-column prop="laboratory" label="å®éªå®¤" min-min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="unit" label="åä½" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="equipValue" label="设å¤" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="scope"> |
| | | {{handleData(scope.row.equipValue)}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="entrustCode" label="å§æç¼å·" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="updateUserName" label="æ£éªäºº" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="updateTime" label="æ£éªæ¶é´" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="insResult" label="ç»è®º" min-width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | :type="scope.row.insResult==1?'success':'danger'" size="medium">{{scope.row.insResult==1?'åæ ¼':'ä¸åæ ¼'}}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <h4>åºå
¥åºåå²</h4> |
| | | <div class="table" style="margin-bottom: 20px;"> |
| | | <el-table class="el-table" ref="productTable" :data="histories" height="380px" tooltip-effect="dark" border> |
| | | <el-table-column type="index" align="center" label="åºå·" width="70" :key="Math.random()"> |
| | | </el-table-column> |
| | | <el-table-column prop="state" label="ç±»å" |
| | | show-overflow-tooltip> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="scope.row.state==1?'success':'danger'">{{ scope.row.state==1?'å
¥åº':'åºåº' }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createUserName" label="æä½äºº" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="createTime" label="æä½æ¶é´" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="warehouseCode" label="åºä½å·" show-overflow-tooltip></el-table-column> |
| | | <!-- <el-table-column prop="price" label="忾卿ï¼hï¼" show-overflow-tooltip></el-table-column> --> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props:['id'], |
| | | data(vm) { |
| | | return{ |
| | | entity:{ |
| | | num:1, |
| | | }, |
| | | products:[], |
| | | histories:[] |
| | | } |
| | | }, |
| | | mounted(){ |
| | | this.getInfo() |
| | | }, |
| | | methods:{ |
| | | hanldeBack(){ |
| | | this.$emit('hanldeBack') |
| | | }, |
| | | getInfo(){ |
| | | this.$axios.post(this.$api.warehouse.getSampleRecord, { |
| | | id: this.id |
| | | }).then(res => { |
| | | let {histories,insSample,sampleHistory,products} = res.data; |
| | | this.entity = {num:1,...insSample,...sampleHistory}; |
| | | this.histories = histories; |
| | | this.products = products; |
| | | }) |
| | | }, |
| | | handleData(e){ |
| | | let info = '' |
| | | if(e){ |
| | | info = JSON.parse(e).map(item => { |
| | | return item.v; |
| | | }).join(',') |
| | | } |
| | | return info |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .detail::-webkit-scrollbar{ |
| | | width: 0; |
| | | } |
| | | |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 120px; |
| | | display: flex; |
| | | align-items: center; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 40px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 120px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 10px; |
| | | background-color: #fff; |
| | | width: calc(100% - 40px); |
| | | padding: 20px; |
| | | } |
| | | h4{ |
| | | font-size: 16px; |
| | | font-weight: normal; |
| | | margin-top: 10px; |
| | | margin-left: 20px; |
| | | } |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="capacity-scope"> |
| | | <div v-if="!isDetail"> |
| | | <div style="display: flex;justify-content: space-between"> |
| | | <el-form :model="entity" ref="entity" size="small" :inline="true"> |
| | | <el-form-item label="ä»åºåç§°" prop="warehouseId"> |
| | | <el-select v-model="entity.warehouseId" placeholder="éæ©ä»åº" size="small" @change="warehouseChange"> |
| | | <el-option v-for="item in warehouse" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è´§æ¶" prop="shelfId"> |
| | | <el-select v-model="entity.shelfId" placeholder="éæ©è´§æ¶" size="small" @change="handleShelf"> |
| | | <el-option v-for="item in shelf" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ ·åç¼å·" prop="searchSampleCode"> |
| | | <el-input placeholder="请è¾å
¥æ ·åç¼å·" v-model="searchSampleCode" size="small"> |
| | | <el-button slot="append" icon="el-icon-search" @click="handleSearch"></el-button> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button size="small" style="color:#3A7BFA" @click="keepVisible=true">ç»´æ¤</el-button> |
| | | <el-button size="small" style="color:#3A7BFA" @click="warehouseVisible=true,isEdit=false">æ·»å ä»åº</el-button> |
| | | <el-button size="small" style="color:#3A7BFA" @click="shelvesVisible=true,isEdit=false" |
| | | :disabled="entity.warehouseId==null">æ·»å è´§æ¶</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div> |
| | | <el-button size="small" type="primary" @click="storageVisible=true">å
¥åº</el-button> |
| | | <el-button size="small" type="primary" @click="exportVisible=true">åºåº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table" v-loading="tableLoading"> |
| | | <table border="1" class="tables" cellpadding="10" style="table-layout:fixed;" v-if="tableList.length>0"> |
| | | <tbody> |
| | | <tr v-for="(item,index) in tableList" :key="index"> |
| | | <td v-for="(m,i) in item" :key="i" class="content"> |
| | | <h4 v-if="m.row!=undefined">{{ m.row }} - {{ m.col }}</h4> |
| | | <ul> |
| | | <el-tooltip |
| | | effect="dark" |
| | | placement="top" |
| | | v-for="(n,j) in m.samples" |
| | | :key="j" :disabled="`${n.sample}${n.model}`.length<10"> |
| | | <div slot="content"><span>{{ n.sample }}</span> |
| | | <span> ({{ n.model }}) [{{ n.sampleCode }}]</span></div> |
| | | <li class="green" |
| | | @click="handelDetail(n)"> |
| | | <i></i> |
| | | <span>{{ n.sample }}</span> |
| | | <span> ({{ n.model }}) [{{ n.sampleCode }}]</span> |
| | | <!-- <span class="num"> x{{ n.num }}</span> --> |
| | | </li> |
| | | </el-tooltip> |
| | | </ul> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td v-for="(item,index) in rowList" :key="index" style="background: ghostwhite;height: 20px;">{{ item }} |
| | | </td> |
| | | </tr> |
| | | </tbody> |
| | | </table> |
| | | <span v-else style="color: rgb(144, 147, 153);display: inline-block;position: absolute;top: 60%;left: 50%;transform: translate(-50%,-50%);">ææ æ°æ®</span> |
| | | </div> |
| | | </div> |
| | | <Detail v-else @hanldeBack="isDetail=false" :id="currentId" /> |
| | | <el-dialog title="æ ·åå
¥åº" :visible.sync="storageVisible" width="350px"> |
| | | <el-row> |
| | | <el-col class="search_thing" :span="24"> |
| | | <div class="search_label"><span class="required-span">* </span>æ ·åç¼å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input v-model="sampleCode" size="small"></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="storageVisible" |
| | | 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="storageVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="confirmStorage" :loading="upLoadStorage">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="æ ·ååºåº" :visible.sync="exportVisible" width="350px"> |
| | | <!-- <div class="shaoma"> |
| | | <img src="../../../static/img/æ«ç .svg" alt="" style="margin-right: 5px;"> |
| | | <span>æ«ç åºåº</span> |
| | | </div> --> |
| | | <el-row> |
| | | <el-col class="search_thing" :span="24"> |
| | | <div class="search_label"><span class="required-span">* </span>æ ·åç¼å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input v-model="sampleCode" size="small"></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.sync="keepVisible" width="350px" :append-to-body="true"> |
| | | <el-tree :data="warehouse" 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="keepVisible" |
| | | empty-text="ææ æ°æ®"> |
| | | <div class="custom-tree-node" style="width: 100%;" slot-scope="{ node, data }"> |
| | | <el-row style="width: 100%;display: flex;align-items: center;"> |
| | | <el-col :span="20"> |
| | | <span><i |
| | | :class="`node_i ${node.level<2 ? 'el-icon-folder-opened': 'el-icon-tickets'}`"></i> |
| | | {{ data.name }}</span> |
| | | </el-col> |
| | | <el-col :span="4" v-if="node.level<3"> |
| | | <el-button type="text" size="mini" icon="el-icon-edit" @click.stop="handleEdit(data,node.level)"> |
| | | </el-button> |
| | | <el-button type="text" size="mini" icon="el-icon-delete" @click.stop="handleDelete(data,node.level)"> |
| | | </el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </el-tree> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="keepVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="keepVisible = false" >ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :title="isEdit?'ä»åºä¿®æ¹':'ä»åºæ°å¢'" :visible.sync="warehouseVisible" width="350px"> |
| | | <el-row> |
| | | <el-col class="search_thing" :span="24"> |
| | | <div class="search_label"><span class="required-span">* </span>ä»åºåç§°ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input v-model="name" size="small" @keyup.enter.native="confirmWarehouse"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="warehouseVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="confirmWarehouse" :loading="upLoadWarehouse">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :title="isEdit?'è´§æ¶ä¿®æ¹':'è´§æ¶æ°å¢'" :visible.sync="shelvesVisible" width="350px"> |
| | | <el-row> |
| | | <el-col class="search_thing" :span="24"> |
| | | <div class="search_label"><span class="required-span">* </span>è´§æ¶åç§°ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input v-model="shelves.name" size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col class="search_thing" :span="24"> |
| | | <div class="search_label"><span class="required-span">* </span>è´§æ¶å±æ°ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input v-model="shelves.row" size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col class="search_thing" :span="24"> |
| | | <div class="search_label"><span class="required-span">* </span>è´§æ¶åæ°ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input v-model="shelves.col" size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="shelvesVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="confirmShelves" :loading="upLoadShelves">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Detail from './components/detail.vue' |
| | | import { |
| | | addShelf, |
| | | addWarehouse, delShelf, delWarehouse, getWarehouse, |
| | | inWarehouse, |
| | | outWarehouse, searchSampleId, |
| | | selectWarehouse, |
| | | upShelf, |
| | | upWarehouse |
| | | } from "@/api/business/sample"; |
| | | export default { |
| | | components: { |
| | | Detail |
| | | }, |
| | | data() { |
| | | return { |
| | | entity: { |
| | | warehouseId: null, |
| | | shelfId: null |
| | | }, |
| | | warehouse: [], |
| | | shelf: [], |
| | | storageList:[], |
| | | storageVisible: false, |
| | | exportVisible: false, |
| | | keepVisible: false, |
| | | warehouseVisible: false, |
| | | shelvesVisible: false, |
| | | upLoadStorage: false, |
| | | upLoadExport: false, |
| | | upLoadWarehouse: false, |
| | | upLoadShelves: false, |
| | | tableList: [], |
| | | rowList: [], |
| | | value: '', |
| | | name:'', |
| | | shelves:{}, |
| | | selectTree: [], |
| | | expandedKeys: [], |
| | | isEdit: false, //å¼¹æ¡--æ¯å¦æ¯ä¿®æ¹,é»è®¤ä¸ºfalse |
| | | isDetail: false, //详æ
--æ¯å¦å±ç¤ºä¸ºè¯¦æ
页é¢ï¼é»è®¤ä¸ºfalse |
| | | currentEdit:null,//å½åè¦ç»´æ¤çä¿¡æ¯ |
| | | tableLoading:false, |
| | | sampleCode:'', |
| | | currentId:null, |
| | | searchSampleCode:'' |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.selectList() |
| | | }, |
| | | methods: { |
| | | selectList() { |
| | | selectWarehouse().then(res => { |
| | | this.warehouse = res.data |
| | | if(res.data.length==0){ |
| | | this.entity.warehouseId = ''; |
| | | this.entity.shelfId = ''; |
| | | this.tableList = [] |
| | | } |
| | | this.storageList = this.HaveJson(res.data).map(item=>{ |
| | | item.warehouseShelfList&&item.warehouseShelfList.length>0&&item.warehouseShelfList.map(m=>{ |
| | | let warehouseShelfList = []; |
| | | for (let i=1;i<m.row+1;i++){ |
| | | let warehouseShelfList0 = [] |
| | | for (let j=1;j<m.col+1;j++){ |
| | | warehouseShelfList0.push({ |
| | | name:j+' å', |
| | | id:j, |
| | | }) |
| | | } |
| | | warehouseShelfList.push({ |
| | | name:i+' å±', |
| | | id:i, |
| | | warehouseShelfList:warehouseShelfList0 |
| | | }) |
| | | } |
| | | m.warehouseShelfList = warehouseShelfList; |
| | | return m; |
| | | }) |
| | | return item; |
| | | }) |
| | | if(!this.entity.warehouseId&&this.warehouse.length>0){ |
| | | this.entity.warehouseId = this.warehouse[0].id |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | if(this.shelf.length>0){ |
| | | this.entity.shelfId = this.shelf[0].id |
| | | this.handleShelf(this.entity.shelfId) |
| | | }else{ |
| | | this.tableList = [] |
| | | } |
| | | }else if(this.warehouse.length>0){ |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | if(this.shelf.length>0){ |
| | | this.entity.shelfId = this.shelf[0].id |
| | | this.handleShelf(this.entity.shelfId) |
| | | }else{ |
| | | this.tableList = [] |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å
¥åº |
| | | confirmStorage() { |
| | | if (!this.sampleCode) { |
| | | this.$message.error('è¯·å¡«åæ ·åç¼å·') |
| | | return |
| | | } |
| | | if (this.selectTree.length < 4) { |
| | | this.$message.error('è¯·éæ©æ ·åå
¥åºä½ç½®') |
| | | return |
| | | } |
| | | this.upLoadStorage = true; |
| | | inWarehouse({ |
| | | trees: this.selectTree.join('-'), |
| | | sampleCode:this.sampleCode |
| | | }).then(res => { |
| | | this.upLoadStorage = false; |
| | | this.storageVisible = false |
| | | this.sampleCode = ''; |
| | | this.selectTree = [] |
| | | this.$message.success('å
¥åºæå') |
| | | this.handleShelf(this.entity.shelfId) |
| | | }).catch(err => { |
| | | this.upLoadStorage = false; |
| | | }) |
| | | }, |
| | | // åºåº |
| | | confirmExport() { |
| | | if (!this.sampleCode) { |
| | | this.$message.error('è¯·å¡«åæ ·åç¼å·') |
| | | return |
| | | } |
| | | this.upLoadExport = true; |
| | | outWarehouse({ |
| | | sampleCode:this.sampleCode |
| | | }).then(res => { |
| | | this.upLoadExport = false; |
| | | this.exportVisible = false |
| | | this.sampleCode = ''; |
| | | this.$message.success('åºåºæå') |
| | | this.handleShelf(this.entity.shelfId) |
| | | }).catch(err => { |
| | | this.upLoadExport = false; |
| | | }) |
| | | }, |
| | | // æ·»å /ä¿®æ¹ä»åº |
| | | confirmWarehouse() { |
| | | if (!this.name) { |
| | | this.$message.error('请填åä»åºåç§°') |
| | | return |
| | | } |
| | | this.upLoadWarehouse = true; |
| | | if(this.currentEdit&&this.currentEdit.id){ |
| | | // ä¿®æ¹ä»åº |
| | | upWarehouse({ |
| | | name: this.name, |
| | | id:this.currentEdit.id |
| | | }).then(res => { |
| | | this.upLoadWarehouse = false; |
| | | this.warehouseVisible = false |
| | | // this.keepVisible = false |
| | | this.currentEdit = null; |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.selectList() |
| | | this.name = '' |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | }).catch(err => { |
| | | this.upLoadWarehouse = false; |
| | | }) |
| | | }else{ |
| | | // æ°å¢ä»åº |
| | | addWarehouse({ |
| | | name: this.name |
| | | }).then(res => { |
| | | this.upLoadWarehouse = false; |
| | | this.warehouseVisible = false |
| | | this.$message.success('æ·»å æå') |
| | | this.selectList() |
| | | this.name = '' |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | }).catch(err => { |
| | | this.upLoadWarehouse = false; |
| | | }) |
| | | } |
| | | }, |
| | | // æ·»å /ä¿®æ¹è´§æ¶ |
| | | confirmShelves() { |
| | | if (!this.shelves.name) { |
| | | this.$message.error('请填åè´§æ¶åç§°') |
| | | return |
| | | } |
| | | if (!this.shelves.row) { |
| | | this.$message.error('请填åè´§æ¶å±æ°') |
| | | return |
| | | } |
| | | if (!this.shelves.col) { |
| | | this.$message.error('请填åè´§æ¶åæ°') |
| | | return |
| | | } |
| | | this.upLoadShelves = true; |
| | | if(this.currentEdit&&this.currentEdit.id){ |
| | | // ä¿®æ¹ |
| | | upShelf({ |
| | | id:this.currentEdit.id,...this.shelves |
| | | }).then(res => { |
| | | this.upLoadShelves = false; |
| | | this.shelvesVisible = false |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.selectList() |
| | | this.currentEdit ={}; |
| | | }).catch(err => { |
| | | this.upLoadShelves = false; |
| | | }) |
| | | }else{ |
| | | // æ°å¢ |
| | | addShelf({ |
| | | warehouseId: this.entity.warehouseId,...this.shelves |
| | | }).then(res => { |
| | | this.upLoadShelves = false; |
| | | this.shelvesVisible = false |
| | | this.$message.success('æ·»å æå') |
| | | this.selectList() |
| | | this.shelves = {} |
| | | }).catch(err => { |
| | | this.upLoadShelves = false; |
| | | }) |
| | | } |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | }, |
| | | 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') |
| | | }, |
| | | handleDelete(row, level) { |
| | | this.$confirm('æ¯å¦å½åæ°æ®?', "è¦å", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | }).then(() => { |
| | | if (level == 1) { |
| | | // å é¤ä»åº |
| | | delWarehouse({ |
| | | id: row.id |
| | | }).then(res => { |
| | | this.$message.success('æå') |
| | | this.selectList() |
| | | }).catch(e => { |
| | | this.$message.error('失败') |
| | | }) |
| | | }else{ |
| | | // å é¤è´§æ¶ |
| | | delShelf({ |
| | | id: row.id |
| | | }).then(res => { |
| | | this.$message.success('æå') |
| | | this.selectList() |
| | | }).catch(e => { |
| | | this.$message.error('失败') |
| | | }) |
| | | } |
| | | this.warehouseChange(this.entity.warehouseId) |
| | | }).catch(() => {}) |
| | | }, |
| | | handleEdit(data, level) { |
| | | this.isEdit = true; |
| | | // 夿æ¯ç¬¬å å±çº§ï¼ç¬¬ä¸å±çº§ï¼ä¿®æ¹ä»åºï¼ç¬¬äºå±çº§ä¿®æ¹è´§æ¶ |
| | | if (level == 1) { |
| | | this.warehouseVisible = true; |
| | | this.currentEdit = data; |
| | | this.name = data.name |
| | | } else { |
| | | this.shelvesVisible = true; |
| | | this.currentEdit = data; |
| | | this.shelves = { |
| | | name:data.name, |
| | | row:data.row, |
| | | col:data.col, |
| | | warehouseId:data.warehouseId |
| | | } |
| | | } |
| | | }, |
| | | // æ¥ç详æ
|
| | | handelDetail(row) { |
| | | this.currentId = row.id; |
| | | this.isDetail = true; |
| | | }, |
| | | warehouseChange(val) { |
| | | this.tableList = [] |
| | | let map = this.warehouse.find(a => { |
| | | return a.id === val ? a : null |
| | | }) |
| | | this.shelf = map.warehouseShelfList; |
| | | this.entity.shelfId = ''; |
| | | }, |
| | | handleShelf(e){ |
| | | if(e){ |
| | | this.tableLoading = true; |
| | | getWarehouse({shelfId: e}).then(res => { |
| | | this.tableLoading = false; |
| | | let data = res.data; |
| | | let set =new Set() |
| | | this.tableList = []; |
| | | let arr = [] |
| | | data.forEach(m=>{ |
| | | set.add(m.col) |
| | | if(arr.length>0){ |
| | | if(arr.find(n=>n.row==m.row)){ |
| | | arr.push(m) |
| | | }else{ |
| | | this.tableList.push(arr) |
| | | arr = [] |
| | | arr.push(m) |
| | | } |
| | | }else{ |
| | | arr.push(m) |
| | | } |
| | | }) |
| | | this.tableList.push(arr) |
| | | this.rowList = []; |
| | | for(let i=0;i<set.size;i++){ |
| | | this.rowList.push(`${i+1} å`) |
| | | } |
| | | }).catch(e=>{ |
| | | this.tableLoading = false; |
| | | }) |
| | | } |
| | | }, |
| | | handleSearch(){ |
| | | if(!this.searchSampleCode){ |
| | | this.$message.error('请è¾å
¥æ ·åç¼å·') |
| | | return; |
| | | } |
| | | searchSampleId({sampleCode: this.searchSampleCode}).then(res => { |
| | | if(res.code==200){ |
| | | this.currentId = res.data; |
| | | this.isDetail = true; |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 50px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 90px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 10px; |
| | | background-color: #fff; |
| | | width: calc(100% - 40px); |
| | | height: calc(100% - 60px - 80px - 10px - 40px); |
| | | padding: 20px; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | .el-form-item { |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 10px; |
| | | top: 25px; |
| | | display: flex; |
| | | align-items: center; |
| | | z-index: 9; |
| | | } |
| | | |
| | | .tables { |
| | | width: 100%; |
| | | height: 100%; |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .tables th { |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .tables td { |
| | | font-size: 12px; |
| | | text-align: center; |
| | | vertical-align: top; |
| | | border-color: rgb(192, 191, 191) !important; |
| | | padding: 5px; |
| | | box-sizing: border-box; |
| | | height: 120px; |
| | | } |
| | | |
| | | .tables ul { |
| | | list-style-type: none; |
| | | } |
| | | |
| | | .tables ul li { |
| | | border-radius: 3px; |
| | | padding: 4px 10px; |
| | | box-sizing: border-box; |
| | | margin-bottom: 5px; |
| | | font-size: 12px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: start; |
| | | color: #333333; |
| | | cursor: pointer; |
| | | overflow: hidden; /*è¶
åºé¨åéè*/ |
| | | white-space: nowrap; /*ç¦æ¢æ¢è¡*/ |
| | | text-overflow: ellipsis; /*çç¥å·*/ |
| | | } |
| | | |
| | | .tables h4 { |
| | | color: #999999; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | padding: 6px 0; |
| | | } |
| | | |
| | | .tables i { |
| | | display: inline-block; |
| | | width: 6px; |
| | | height: 6px; |
| | | border-radius: 50%; |
| | | margin-right: 6px; |
| | | } |
| | | |
| | | li:hover { |
| | | background: rgba(58, 123, 250, 0.18); |
| | | } |
| | | |
| | | li:hover i { |
| | | background: #3A7BFA; |
| | | } |
| | | |
| | | li:hover .num { |
| | | color: #3A7BFA; |
| | | } |
| | | |
| | | .green { |
| | | background: #E0F6EA; |
| | | } |
| | | |
| | | .green i { |
| | | background: #34BD66; |
| | | } |
| | | |
| | | .green .num { |
| | | color: #34BD66; |
| | | } |
| | | |
| | | .el-dialog { |
| | | position: relative; |
| | | } |
| | | |
| | | .shaoma { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 14px; |
| | | color: #3A7BFA; |
| | | position: absolute; |
| | | top: 23px; |
| | | right: 54px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .node_i { |
| | | color: orange; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .custom-tree-node .el-button { |
| | | opacity: 0; |
| | | } |
| | | |
| | | .custom-tree-node:hover .el-button { |
| | | opacity: 1; |
| | | } |
| | | >>>.el-loading-mask { |
| | | z-index: 10; |
| | | } |
| | | </style> |