| | |
| | | <style scoped> |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 50px; |
| | | width: 230px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 90px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 90px); |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 10px; |
| | | background-color: #fff; |
| | | width: calc(100% - 40px); |
| | | height: calc(100% - 60px - 80px - 10px - 40px); |
| | | padding: 20px; |
| | | } |
| | | |
| | | .el-form-item { |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .full-screen { |
| | | position: absolute; |
| | | right: 52px; |
| | | top: 22px; |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 40px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .fullscreen { |
| | | height: 82vh; |
| | | } |
| | | .custom-upload >>> .el-upload-list--text { |
| | | max-height: 20vh; |
| | | overflow-y: scroll; |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | | <div>æ¥åç¼å¶</div> |
| | | <div class="inspection_order"> |
| | | <div 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="`height: ${more ? 130 : 80}px;`"> |
| | | <el-row :gutter="10" style="width: 100%"> |
| | | <el-col :span="16" style="display: flex; flex-wrap: wrap"> |
| | | <div class="search_thing" v-if="maxNum >= 1"> |
| | | <div class="search_label">æ¥åç¼å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input |
| | | size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | v-model="entity.code" |
| | | @keyup.enter.native="refreshTable()" |
| | | ></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" v-if="maxNum >= 2"> |
| | | <div class="search_label">ä¸ä¼ ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.isUpload" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in tagField.isUpload.select" |
| | | :value="item.value" |
| | | :label="item.label" |
| | | :key="index" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" v-if="maxNum >= 3"> |
| | | <div class="search_label">æäº¤ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.state" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in tagField.state.select" |
| | | :value="item.value" |
| | | :label="item.label" |
| | | :key="index" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div |
| | | class="search_thing" |
| | | v-if="maxNum >= 4 || (maxNum < 4 && more)" |
| | | > |
| | | <div class="search_label">å®¡æ ¸ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.isExamine" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in tagField.isExamine.select" |
| | | :value="item.value" |
| | | :label="item.label" |
| | | :key="index" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" v-if="maxNum >= 5 || more"> |
| | | <div class="search_label">æ¹åç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.isRatify" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in tagField.isRatify.select" |
| | | :value="item.value" |
| | | :label="item.label" |
| | | :key="index" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" v-if="maxNum >= 6 || more"> |
| | | <div class="search_label">å建æ¶é´ï¼</div> |
| | | <div class="search_input"> |
| | | <el-date-picker |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.createTimeRange" |
| | | type="daterange" |
| | | value-format="yyyy-MM-dd[T]HH:mm:ss" |
| | | range-separator="è³" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | :default-time="['00:00:00', '23:59:59']" |
| | | > |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="search_thing"> |
| | | <el-button |
| | | v-if="maxNum < 5" |
| | | type="text" |
| | | :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" |
| | | style="color: #3a7bfa" |
| | | @click="more = !more" |
| | | >{{ !more ? "æ´å¤" : "æ¶èµ·" }}</el-button |
| | | > |
| | | <div class="search_thing" style="padding-left: 20px"> |
| | | <el-button |
| | | size="small" |
| | | @click="refresh()" |
| | | style="margin-right: 6px" |
| | | >é ç½®</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="refreshTable()" |
| | | style="margin-right: 6px" |
| | | >æ¥ è¯¢</el-button |
| | | > |
| | | <template> |
| | | <el-dropdown |
| | | @command="handleCommand" |
| | | style="margin-left: 10px" |
| | | > |
| | | <el-button type="primary" size="small"> |
| | | æ´å¤æä½<i class="el-icon-arrow-down el-icon--right"></i> |
| | | </el-button> |
| | | <el-dropdown-menu slot="dropdown"> |
| | | <el-dropdown-item |
| | | icon="el-icon-download" |
| | | command="batchDownload" |
| | | >æ¹éä¸è½½</el-dropdown-item |
| | | > |
| | | <el-dropdown-item |
| | | icon="el-icon-upload" |
| | | command="batchUpload" |
| | | >æ¹éä¸ä¼ </el-dropdown-item |
| | | > |
| | | <el-dropdown-item |
| | | icon="el-icon-s-check" |
| | | command="oneClickApproval" |
| | | >ä¸é®å®¡æ¹</el-dropdown-item |
| | | > |
| | | <el-dropdown-item |
| | | icon="el-icon-setting" |
| | | command="approvalConfig" |
| | | >审æ¹ç¾åé
ç½®</el-dropdown-item |
| | | > |
| | | </el-dropdown-menu> |
| | | </el-dropdown> |
| | | </template> |
| | | <template> |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="handleDowns" |
| | | :loading="outLoading" |
| | | style="margin-right: 6px" |
| | | >æ¹éä¸è½½</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="openBatchUploadDia()" |
| | | :loading="inLoading" |
| | | >æ¹éä¸ä¼ </el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="oneClickApproval()" |
| | | :loading="approvalLoading" |
| | | >ä¸é®å®¡æ¹</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="openApprovalConfig()" |
| | | :loading="approvalConfigLoading" |
| | | >审æ¹ç¾åé
ç½®</el-button |
| | | > |
| | | </template> |
| | | </div> |
| | | <!-- <div class="btns"> |
| | | <el-button size="small" type="primary" @click="handleDowns" :loading="outLoading" style="margin-right: 16px;">æ¹éä¸è½½</el-button> |
| | | <el-button size="small" type="primary" @click="openBatchUploadDia()" :loading="inLoading">æ¹éä¸ä¼ </el-button> |
| | | </div> --> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div class="table"> |
| | | <div |
| | | style=" |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: nowrap; |
| | | font-size: 13px; |
| | | flex-direction: row; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | " |
| | | > |
| | | <p style="margin-left: 15px"> |
| | | å¾
æäº¤æ°é: <span |
| | | style="font-size: 16px; color: rgb(58, 123, 250)" |
| | | >{{ unSubmitCount }}</span |
| | | > |
| | | </p> |
| | | <p style="margin-left: 15px"> |
| | | å¾
å®¡æ ¸æ°é: <span |
| | | style="font-size: 16px; color: rgb(58, 123, 250)" |
| | | >{{ unExamineCount }}</span |
| | | > |
| | | </p> |
| | | <p style="margin-left: 15px"> |
| | | å¾
æ¹åæ°é: <span |
| | | style="font-size: 16px; color: rgb(58, 123, 250)" |
| | | >{{ unRatifyCount }}</span |
| | | > |
| | | </p> |
| | | </div> |
| | | <lims-table |
| | | :tableData="tableData" |
| | | :column="column" |
| | | :tableLoading="tableLoading" |
| | | :height="'calc(100vh - 270px)'" |
| | | :page="page" |
| | | @pagination="pagination" |
| | | ></lims-table> |
| | | </div> |
| | | </div> |
| | | <!--æ¥åæ¥ç--> |
| | | <el-dialog |
| | | :fullscreen="fullscreen" |
| | | top="5vh" |
| | | :modal-append-to-body="false" |
| | | :visible.sync="viewIssuedVisible" |
| | | title="æ¥åæ¥ç" |
| | | width="80vw" |
| | | > |
| | | <div class="full-screen"> |
| | | <i |
| | | v-if="!fullscreen" |
| | | class="el-icon-full-screen" |
| | | style="cursor: pointer; font-size: 18px" |
| | | @click="fullscreen = true" |
| | | ></i> |
| | | <!-- <img |
| | | v-else |
| | | alt="" |
| | | src="../../../static/img/no-full.svg" |
| | | style="cursor: pointer" |
| | | @click="fullscreen = false" |
| | | /> --> |
| | | </div> |
| | | <div v-if="viewIssuedVisible" style="height: 80vh"> |
| | | <onlyoffice |
| | | ref="onlyoffice" |
| | | :options="option" |
| | | style="width: 100%; height: 100%" |
| | | /> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="å¨çº¿ç¼å¶" |
| | | :visible.sync="claimVisible" |
| | | width="22cm" |
| | | :modal-append-to-body="false" |
| | | :fullscreen="fullscreen" |
| | | > |
| | | <div class="full-screen"> |
| | | <i |
| | | class="el-icon-full-screen" |
| | | style="cursor: pointer; font-size: 18px" |
| | | @click="fullscreen = true" |
| | | v-if="!fullscreen" |
| | | ></i> |
| | | <!-- <img |
| | | src="../../../static/img/no-full.svg" |
| | | alt="" |
| | | v-else |
| | | style="cursor: pointer" |
| | | @click="fullscreen = false" |
| | | /> --> |
| | | </div> |
| | | <Word |
| | | style="height: 70vh" |
| | | :class="{ fullscreen: fullscreen }" |
| | | v-if="claimVisible" |
| | | ref="Word" |
| | | :value="value" |
| | | /> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="claimVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="confirmClaim">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="æ¥åå®¡æ ¸" |
| | | top="5vh" |
| | | :visible.sync="issuedVisible" |
| | | width="80vw" |
| | | :modal-append-to-body="false" |
| | | :fullscreen="fullscreen" |
| | | > |
| | | <div class="full-screen"> |
| | | <i |
| | | class="el-icon-full-screen" |
| | | style="cursor: pointer; font-size: 18px" |
| | | @click="fullscreen = true" |
| | | v-if="!fullscreen" |
| | | ></i> |
| | | <!-- <img |
| | | src="../../../static/img/no-full.svg" |
| | | alt="" |
| | | v-else |
| | | style="cursor: pointer" |
| | | @click="fullscreen = false" |
| | | /> --> |
| | | </div> |
| | | <div style="height: 75vh" v-if="issuedVisible"> |
| | | <onlyoffice |
| | | ref="onlyoffice" |
| | | :options="option" |
| | | style="width: 100%; height: 100%" |
| | | /> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="issuedReasonVisible = true" :disabled="loadingIssued" |
| | | >ä¸éè¿</el-button |
| | | > |
| | | <el-button type="primary" @click="subIssued" :loading="loadingIssued" |
| | | >é è¿</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="ä¸éè¿åå " |
| | | top="5vh" |
| | | :visible.sync="issuedReasonVisible" |
| | | width="400px" |
| | | :modal-append-to-body="false" |
| | | > |
| | | <div class="search_thing"> |
| | | <div class="search_label">ä¸éè¿åå ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input |
| | | size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | v-model="reason" |
| | | ></el-input> |
| | | </div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button |
| | | @click="issuedReasonVisible = false" |
| | | :disabled="loadingIssuedReason" |
| | | >åæ¶</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | @click="handleIssuedReason" |
| | | :loading="loadingIssuedReason" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="æ¥åæ¹å" |
| | | top="5vh" |
| | | :visible.sync="approveVisible" |
| | | width="80vw" |
| | | :modal-append-to-body="false" |
| | | :fullscreen="fullscreen" |
| | | > |
| | | <div class="full-screen"> |
| | | <i |
| | | class="el-icon-full-screen" |
| | | style="cursor: pointer; font-size: 18px" |
| | | @click="fullscreen = true" |
| | | v-if="!fullscreen" |
| | | ></i> |
| | | <!-- <img |
| | | src="../../../static/img/no-full.svg" |
| | | alt="" |
| | | v-else |
| | | style="cursor: pointer" |
| | | @click="fullscreen = false" |
| | | /> --> |
| | | </div> |
| | | <div style="height: 75vh" v-if="approveVisible"> |
| | | <onlyoffice |
| | | ref="onlyoffice" |
| | | :options="option" |
| | | style="width: 100%; height: 100%" |
| | | /> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button |
| | | @click="approveReasonVisible = true" |
| | | :disabled="loadingApprove" |
| | | >䏿¹å</el-button |
| | | > |
| | | <el-button type="primary" @click="subApprove" :loading="loadingApprove" |
| | | >æ¹ å</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="䏿¹ååå " |
| | | :visible.sync="approveReasonVisible" |
| | | width="400px" |
| | | :modal-append-to-body="false" |
| | | > |
| | | <div class="search_thing"> |
| | | <div class="search_label">䏿¹ååå ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input |
| | | size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | v-model="reason" |
| | | ></el-input> |
| | | </div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button |
| | | @click="approveReasonVisible = false" |
| | | :disabled="loadingApproveReason" |
| | | >åæ¶</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | @click="handleApproveReason" |
| | | :loading="loadingApproveReason" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | :visible.sync="batchUploadDia" |
| | | title="æ¥åæ¹éä¸ä¼ " |
| | | width="30%" |
| | | :close-on-click-modal="false" |
| | | top="5vh" |
| | | > |
| | | <div> |
| | | <!-- <el-upload |
| | | class="upload-demo" |
| | | :action="action" |
| | | :headers="headers" |
| | | :show-file-list="false" |
| | | accept=".doc,.docx" |
| | | :limit="1" |
| | | :before-upload="beforeUpload" |
| | | :on-success="handleSuccess" |
| | | ref="upload" |
| | | :on-error="onError"> |
| | | </el-upload> --> |
| | | <el-upload |
| | | ref="upload" |
| | | class="upload-demo custom-upload" |
| | | drag |
| | | show-file-list |
| | | accept=".doc,.docx" |
| | | :action="action" |
| | | :headers="headers" |
| | | :on-error="onError" |
| | | :before-upload="beforeUpload" |
| | | :file-list="fileList" |
| | | :auto-upload="false" |
| | | :limit="100" |
| | | :on-exceed="uploadExceed" |
| | | :on-success="handleSuccess" |
| | | multiple |
| | | > |
| | | <i class="el-icon-upload"></i> |
| | | <div class="el-upload__text">å°æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em></div> |
| | | <div class="el-upload__tip" slot="tip"> |
| | | åªè½ä¸ä¼ .doc/.docxæä»¶ï¼ä¸å个æä»¶ä¸è¶
è¿10MB |
| | | </div> |
| | | </el-upload> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button size="small" type="primary" @click="submitUpload" |
| | | >确认ä¸ä¼ </el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <!-- æ¥åæ¹é审æ¹å¼¹æ¡ --> |
| | | <el-dialog |
| | | :visible.sync="oneClickApprovalDialog" |
| | | title="æ¥åæ¹é审æ¹" |
| | | width="40%" |
| | | :close-on-click-modal="false" |
| | | top="5vh" |
| | | > |
| | | <div> |
| | | <el-result |
| | | icon="error" |
| | | v-show="progressData.hasException != null" |
| | | title="é误信æ¯" |
| | | :subTitle="progressData.hasException" |
| | | ></el-result> |
| | | <el-result |
| | | icon="success" |
| | | v-show="isSuccess && progressData.hasException == null" |
| | | title="æåä¿¡æ¯" |
| | | subTitle="æ¥å审æ¹å®æ" |
| | | ></el-result> |
| | | <el-progress |
| | | :percentage="progressData.hasNum" |
| | | :color="customColors" |
| | | ></el-progress> |
| | | <el-statistic title="å©ä½æ¥åæ°é"> |
| | | <template slot="formatter"> |
| | | {{ progressData.surplus }}/{{ progressData.hasCount }} |
| | | </template> |
| | | </el-statistic> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <!-- <el-button size="small" type="primary" @click="confirmApproval" |
| | | >确认</el-button |
| | | > --> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- æ¤åå¼¹æ¡ --> |
| | | <el-dialog |
| | | title="è¯·éæ©éè¦æ¤åçè¯éªå®¤" |
| | | :visible.sync="withdrawDialogVisible" |
| | | width="30%" |
| | | :before-close="handleClose" |
| | | > |
| | | <el-select |
| | | v-model="laboratory" |
| | | multiple |
| | | clearable |
| | | style="width: 100%; margin-bottom: 20px" |
| | | placeholder="è¯·éæ©è¯éªå®¤" |
| | | > |
| | | <el-option |
| | | v-for="(item, i) in laboratorys" |
| | | :key="i" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | ></el-option> |
| | | </el-select> |
| | | |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="handleClose">å æ¶</el-button> |
| | | <el-button type="primary" @click="withdrawOperation">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | <!-- 审æ¹ç¾åé
ç½®å¼¹æ¡ --> |
| | | <el-dialog |
| | | :visible.sync="approvalConfigDialog" |
| | | title="审æ¹ç¾åé
ç½®" |
| | | width="55%" |
| | | :close-on-click-modal="false" |
| | | top="5vh" |
| | | > |
| | | <div v-if="approvalConfigListTX.editor != null"> |
| | | <el-divider content-position="left">é信产åå®éªå®¤</el-divider> |
| | | <el-form |
| | | size="mini" |
| | | :model="approvalConfigListTX" |
| | | inline |
| | | label-position="right" |
| | | > |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <el-form-item label="ç¼å¶äºº:" prop="editor"> |
| | | <el-select |
| | | v-model="approvalConfigListTX.editor" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å®¡æ ¸äºº:" prop="examiner"> |
| | | <el-select |
| | | v-model="approvalConfigListTX.examiner" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ¹å人:" prop="approver"> |
| | | <el-select |
| | | v-model="approvalConfigListTX.approver" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <br /> |
| | | <div v-if="approvalConfigListDL.editor != null"> |
| | | <el-divider content-position="left">çµå产åå®éªå®¤</el-divider> |
| | | <el-form |
| | | size="mini" |
| | | :model="approvalConfigListDL" |
| | | inline |
| | | label-position="right" |
| | | > |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <el-form-item label="ç¼å¶äºº:" prop="editor"> |
| | | <el-select |
| | | v-model="approvalConfigListDL.editor" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å®¡æ ¸äºº:" prop="examiner"> |
| | | <el-select |
| | | v-model="approvalConfigListDL.examiner" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ¹å人:" prop="approver"> |
| | | <el-select |
| | | v-model="approvalConfigListDL.approver" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button size="small" type="primary" @click="confirmApprovalConfig" |
| | | >确认</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default {}; |
| | | </script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import onlyoffice from "../reportPreparation/onlyoffice.vue"; |
| | | import { |
| | | pageInsReport, |
| | | inReport, |
| | | upAll, |
| | | getLaboratoryByReportId, |
| | | withdraw, |
| | | updateApproveConfig, |
| | | getUserList, |
| | | getApproveConfigList, |
| | | downAll, |
| | | getBatchApprovalProgress, |
| | | getReportCountInfo, |
| | | downReport, |
| | | upReportUrl, |
| | | ratifyReport, |
| | | writeReport, |
| | | examineReport, |
| | | downLoad, |
| | | getReportInfo, |
| | | } from "../../../api/business/reportPreparation"; |
| | | |
| | | <style></style> |
| | | export default { |
| | | components: { |
| | | limsTable, |
| | | onlyoffice, |
| | | }, |
| | | data() { |
| | | return { |
| | | tagField: { |
| | | isUpload: { |
| | | select: [ |
| | | { |
| | | value: 0, |
| | | type: "danger", |
| | | label: "æªä¸ä¼ ", |
| | | }, |
| | | { |
| | | value: 1, |
| | | type: "success", |
| | | label: "å·²ä¸ä¼ ", |
| | | }, |
| | | ], |
| | | }, |
| | | isRatify: { |
| | | select: [ |
| | | { |
| | | value: -9, |
| | | type: "info", |
| | | label: "æªæ¹å", |
| | | }, |
| | | { |
| | | value: 0, |
| | | type: "danger", |
| | | label: "䏿¹å", |
| | | }, |
| | | { |
| | | value: 1, |
| | | type: "success", |
| | | label: "æ¹å", |
| | | }, |
| | | ], |
| | | }, |
| | | isExamine: { |
| | | select: [ |
| | | { |
| | | value: -9, |
| | | type: "info", |
| | | label: "æªå®¡æ ¸", |
| | | }, |
| | | { |
| | | value: 0, |
| | | type: "danger", |
| | | label: "ä¸éè¿", |
| | | }, |
| | | { |
| | | value: 1, |
| | | type: "success", |
| | | label: "éè¿", |
| | | }, |
| | | ], |
| | | }, |
| | | state: { |
| | | select: [ |
| | | { |
| | | value: 0, |
| | | type: "danger", |
| | | label: "å¾
æäº¤", |
| | | }, |
| | | { |
| | | value: 1, |
| | | type: "success", |
| | | label: "å·²æäº¤", |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | entity: { |
| | | isUpload: null, |
| | | entrustCode: null, |
| | | state: null, |
| | | isExamine: null, |
| | | isRatify: null, |
| | | code: null, |
| | | createTimeRange: [], |
| | | }, |
| | | withdrawDialogVisible: false, |
| | | laboratory: [], |
| | | laboratorys: [], |
| | | isSuccess: false, |
| | | time: null, |
| | | //审æ¹è¿åº¦å¯¹è±¡ |
| | | progressData: { |
| | | hasProgress: false, |
| | | hasNum: 0, |
| | | hasCount: 0, |
| | | hasException: null, |
| | | surplus: 0, |
| | | }, |
| | | personList: [], |
| | | approvalConfigListTX: { |
| | | editor: null, |
| | | examiner: null, |
| | | approver: null, |
| | | }, //审æ¹ç¾åé
ç½®å表 |
| | | approvalConfigListDL: { |
| | | editor: null, |
| | | examiner: null, |
| | | approver: null, |
| | | }, //审æ¹ç¾åé
ç½®å表 |
| | | approvalConfigDialog: false, |
| | | approvalConfigLoading: false, |
| | | surplusReportNum: 0, |
| | | percentage: 0, |
| | | customColors: [ |
| | | { color: "#f56c6c", percentage: 20 }, |
| | | { color: "#e6a23c", percentage: 40 }, |
| | | { color: "#5cb87a", percentage: 60 }, |
| | | { color: "#1989fa", percentage: 80 }, |
| | | { color: "#6f7ad3", percentage: 100 }, |
| | | ], |
| | | oneClickApprovalDialog: false, |
| | | approvalLoading: false, |
| | | isShowMore: false, |
| | | more: false, |
| | | fileList: [], |
| | | batchUploadDia: false, |
| | | viewIssuedVisible: false, |
| | | tableData: [], |
| | | column: [ |
| | | { |
| | | label: "æ¥åç¼å·", |
| | | prop: "code", |
| | | }, |
| | | { |
| | | label: "ä¸ä¼ ç¶æ", |
| | | prop: "isUpload", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | return params == 1 ? "å·²ä¸ä¼ " : "æªä¸ä¼ "; |
| | | }, |
| | | formatType: (params) => { |
| | | return params == 1 ? "success" : "danger"; |
| | | }, |
| | | }, |
| | | { |
| | | label: "å建æ¶é´", |
| | | prop: "createTime", |
| | | }, |
| | | { |
| | | label: "æäº¤äºº", |
| | | prop: "writeUserName", |
| | | }, |
| | | { |
| | | label: "æäº¤ç¶æ", |
| | | prop: "state", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | return params == 1 ? "å·²æäº¤" : "å¾
æäº¤"; |
| | | }, |
| | | formatType: (params) => { |
| | | return params == 1 ? "success" : "danger"; |
| | | }, |
| | | }, |
| | | { |
| | | label: "æäº¤æ¶é´", |
| | | prop: "writeTime", |
| | | }, |
| | | { |
| | | label: "å®¡æ ¸äºº", |
| | | prop: "examineUser", |
| | | }, |
| | | { |
| | | label: "å®¡æ ¸ç¶æ", |
| | | prop: "isExamine", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | let farmat = ""; |
| | | if (params == 0) { |
| | | farmat = "ä¸éè¿"; |
| | | } else if (params == 1) { |
| | | farmat = "éè¿"; |
| | | } else { |
| | | farmat = "æªå®¡æ ¸"; |
| | | } |
| | | return farmat; |
| | | }, |
| | | formatType: (params) => { |
| | | let farmat = ""; |
| | | if (params == 0) { |
| | | farmat = "danger"; |
| | | } else if (params == 1) { |
| | | farmat = "success"; |
| | | } else { |
| | | farmat = "info"; |
| | | } |
| | | return farmat; |
| | | }, |
| | | }, |
| | | { |
| | | label: "å®¡æ ¸å¤æ³¨", |
| | | prop: "examineTell", |
| | | }, |
| | | { |
| | | label: "å®¡æ ¸æ¶é´", |
| | | prop: "examineTime", |
| | | }, |
| | | { |
| | | label: "æ¹å人", |
| | | prop: "ratifyUser", |
| | | }, |
| | | { |
| | | label: "æ¹åç¶æ", |
| | | prop: "isRatify", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | let farmat = ""; |
| | | if (params == 0) { |
| | | farmat = "䏿¹å"; |
| | | } else if (params == 1) { |
| | | farmat = "æ¹å"; |
| | | } else { |
| | | farmat = "æªæ¹å"; |
| | | } |
| | | return farmat; |
| | | }, |
| | | formatType: (params) => { |
| | | let farmat = ""; |
| | | if (params == 0) { |
| | | farmat = "danger"; |
| | | } else if (params == 1) { |
| | | farmat = "sucess"; |
| | | } else { |
| | | farmat = "info"; |
| | | } |
| | | return farmat; |
| | | }, |
| | | }, |
| | | { |
| | | label: "æ¹å夿³¨", |
| | | prop: "ratifyTell", |
| | | }, |
| | | { |
| | | label: "æ¹åæ¶é´", |
| | | prop: "ratifyTime", |
| | | }, |
| | | { |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "æä½", |
| | | operation: [ |
| | | { |
| | | name: "ç¼å¶", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleWeave(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.isExamine != -9; |
| | | }, |
| | | }, |
| | | { |
| | | name: "ä¸è½½", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.download(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: "ä¸ä¼ ", |
| | | type: "upload", |
| | | url: "/file/attachmentType/upload", |
| | | data: (row) => { |
| | | return { |
| | | id: row.id, |
| | | type: 1, |
| | | }; |
| | | }, |
| | | uploadIdFun: (row) => { |
| | | return row.id; |
| | | }, |
| | | disabled: (row) => { |
| | | return row.isExamine != -9; |
| | | }, |
| | | }, |
| | | { |
| | | name: "è¿å", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleRestore(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.isExamine != -9; |
| | | }, |
| | | }, |
| | | { |
| | | name: "æäº¤", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleSubmit(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.state != 0; |
| | | }, |
| | | }, |
| | | { |
| | | name: "å®¡æ ¸", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleIssued(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return ( |
| | | row.state == null || row.state == 0 || row.isExamine == 1 |
| | | ); |
| | | }, |
| | | }, |
| | | { |
| | | name: "æ¹å", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleApprove(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return ( |
| | | row.state == null || |
| | | row.state == 0 || |
| | | row.isExamine == 0 || |
| | | row.isExamine == -9 || |
| | | row.isRatify == 1 |
| | | ); |
| | | }, |
| | | }, |
| | | { |
| | | name: "æ¤å", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.withdraw(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.state == 1; |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | ], |
| | | page: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 1, |
| | | }, |
| | | tableLoading: false, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | statusList: [], |
| | | claimVisible: false, |
| | | issuedVisible: false, |
| | | issuedReasonVisible: false, |
| | | approveVisible: false, |
| | | approveReasonVisible: false, |
| | | fullscreen: false, |
| | | loadingApproveReason: false, |
| | | loadingApprove: false, |
| | | loadingIssuedReason: false, |
| | | loadingIssued: false, |
| | | value: ``, |
| | | reason: "", |
| | | currentInfo: null, |
| | | option: null, |
| | | mutiList: [], |
| | | outLoading: false, |
| | | inLoading: false, |
| | | maxNum: 1, |
| | | unSubmitCount: 0, |
| | | unRatifyCount: 0, |
| | | unExamineCount: 0, |
| | | }; |
| | | }, |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | token: sessionStorage.getItem("token"), |
| | | }; |
| | | }, |
| | | action() { |
| | | return ""; |
| | | }, |
| | | }, |
| | | created() { |
| | | this.getAuthorizedPerson(); |
| | | this.handleResize(); |
| | | // çå¬çªå£å¤§å°æ¹åäºä»¶ |
| | | window.addEventListener("resize", this.handleResize); |
| | | }, |
| | | beforeDestroy() { |
| | | if (this.time != null) { |
| | | clearInterval(this.time); |
| | | this.time = null; |
| | | } |
| | | this.progressData = { |
| | | hasProgress: false, |
| | | hasNum: 0, |
| | | hasCount: 0, |
| | | hasException: null, |
| | | surplus: 0, |
| | | }; |
| | | window.removeEventListener("resize", this.handleResize); |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.entity); |
| | | this.getList(); |
| | | this.getReportCountInfo(); |
| | | }, |
| | | watch: { |
| | | batchUploadDia(newVal) { |
| | | if (!newVal) { |
| | | this.$refs.upload.clearFiles(); |
| | | this.fileList = []; |
| | | } |
| | | }, |
| | | progressData(newVal) { |
| | | if (newVal && newVal.hasNum == 100) { |
| | | clearInterval(this.time); |
| | | this.$message.success("æ¥å审æ¹å®æ"); |
| | | this.isSuccess = true; |
| | | this.mutiList = []; |
| | | this.refresh(); |
| | | } else if ( |
| | | newVal && |
| | | newVal.hasException != null && |
| | | newVal.hasException != "" |
| | | ) { |
| | | clearInterval(this.time); |
| | | } |
| | | }, |
| | | oneClickApprovalDialog(newVal) { |
| | | if (!newVal) { |
| | | this.isSuccess = false; |
| | | this.progressData = { |
| | | hasProgress: false, |
| | | hasNum: 0, |
| | | hasCount: 0, |
| | | hasException: null, |
| | | surplus: 0, |
| | | }; |
| | | } |
| | | }, |
| | | }, |
| | | methods: { |
| | | // è¿ååé¡µå¼ |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.getList(); |
| | | }, |
| | | getList() { |
| | | this.tableLoading = true; |
| | | if (!this.entity.createTimeRange) { |
| | | this.entity.createTimeRange = []; |
| | | } |
| | | const data = { ...this.page, ...this.entity }; |
| | | pageInsReport(data) |
| | | .then((res) => { |
| | | this.tableData = res.data.records; |
| | | this.page.total = res.data.total; |
| | | this.tableLoading = false; |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | this.tableLoading = false; |
| | | }); |
| | | }, |
| | | // æ¤å å¼¹æ¡ |
| | | withdraw(row) { |
| | | getLaboratoryByReportId(row.id).then((res) => { |
| | | this.laboratorys = res.data; |
| | | this.reportId = row.id; |
| | | this.withdrawDialogVisible = true; |
| | | }); |
| | | }, |
| | | withdrawOperation() { |
| | | if (this.laboratory.length == 0) { |
| | | this.$message.error("è¯·éæ©éè¦æ¤åçè¯éªå®¤"); |
| | | return; |
| | | } |
| | | let data = { |
| | | laboratory: JSON.stringify(this.laboratory), |
| | | id: this.reportId, |
| | | }; |
| | | withdraw(data).then((res) => { |
| | | if (res.code == 200) { |
| | | this.$message.success("æ¤åæå"); |
| | | this.withdrawDialogVisible = false; |
| | | this.refresh(); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | handleCommand(command) { |
| | | switch (command) { |
| | | case "batchDownload": |
| | | //æ¹éä¸è½½ |
| | | this.handleDowns(); |
| | | break; |
| | | case "batchUpload": |
| | | //æ¹éä¸ä¼ |
| | | this.openBatchUploadDia(); |
| | | break; |
| | | case "oneClickApproval": |
| | | //ä¸é®å®¡æ¹ |
| | | this.oneClickApproval(); |
| | | break; |
| | | case "approvalConfig": |
| | | //审æ¹ç¾åé
ç½® |
| | | this.openApprovalConfig(); |
| | | break; |
| | | } |
| | | }, |
| | | //ç¡®è®¤æ´æ°å®¡æ¹ç¾åé
ç½® |
| | | confirmApprovalConfig() { |
| | | let data = []; |
| | | if (this.approvalConfigListTX.id) { |
| | | data.push(this.approvalConfigListTX); |
| | | } |
| | | if (this.approvalConfigListDL.id) { |
| | | data.push(this.approvalConfigListDL); |
| | | } |
| | | updateApproveConfig({ configList: data }) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | this.$message.success("æ´æ°æå"); |
| | | this.approvalConfigDialog = false; |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | }, |
| | | //è·å人åä¿¡æ¯ |
| | | getAuthorizedPerson() { |
| | | getUserList() |
| | | .then((res) => { |
| | | this.personList = res.data; |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | }, |
| | | //æå¼å®¡æ¹ç¾åé
ç½®å¼¹æ¡ |
| | | openApprovalConfig() { |
| | | getApproveConfigList() |
| | | .then((res) => { |
| | | if (res.code !== 201) { |
| | | res.data.forEach((ele) => { |
| | | if (ele.laboratory == "é信产åå®éªå®¤") { |
| | | this.approvalConfigListTX = { ...ele }; |
| | | } |
| | | if (ele.laboratory == "çµå产åå®éªå®¤") { |
| | | this.approvalConfigListDL = { ...ele }; |
| | | } |
| | | }); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | this.$nextTick(() => { |
| | | this.approvalConfigDialog = true; |
| | | }); |
| | | }, |
| | | //ç¡®è®¤å®¡æ¹ |
| | | confirmApproval() {}, |
| | | //ä¸é®å®¡æ¹æé® |
| | | oneClickApproval() { |
| | | if (this.mutiList.length == 0) { |
| | | this.$message.error("è¯·éæ©è¦å®¡æ¹çæ¥å"); |
| | | return; |
| | | } |
| | | //æ§è¡å®¡æ¹ |
| | | if (!this.progressData.hasProgress) { |
| | | //æªå®¡æ¹çæ¥å |
| | | let unApprovalList = this.mutiList.filter( |
| | | (ele) => ele.isExamine == -9 || ele.isRatify == -9 |
| | | ); |
| | | let entity = this.entity; |
| | | //æ ¹æ®æ¥è¯¢æ¡ä»¶è¿æ»¤å·²éæ©çæ°æ® |
| | | let ids = unApprovalList |
| | | .filter((f) => |
| | | entity.isExamine != null && entity.isExamine !== "" |
| | | ? f.isExamine === entity.isExamine |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.isRatify != null && entity.isRatify !== "" |
| | | ? f.isRatify === entity.isRatify |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.isUpload != null && entity.isUpload !== "" |
| | | ? f.isUpload === entity.isUpload |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.code != null && entity.code !== "" |
| | | ? f.code.indexOf(entity.code) >= 0 |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.state != null && entity.state !== "" |
| | | ? f.state === entity.state |
| | | : true |
| | | ) |
| | | .map((ele) => ele.id); |
| | | batchApprovalReport({ ids: ids }) |
| | | .then((res) => { |
| | | if (res.code != 201) { |
| | | //æ¥è¯¢å®¡æ¹è¿åº¦ |
| | | this.time = setInterval(() => { |
| | | this.getProgress(); |
| | | }, 500); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | clearInterval(this.time); |
| | | }); |
| | | } |
| | | // this.getProgress(); |
| | | this.$nextTick(() => { |
| | | this.oneClickApprovalDialog = true; |
| | | }); |
| | | }, |
| | | getProgress() { |
| | | getBatchApprovalProgress().then((res) => { |
| | | this.progressData = res.data; |
| | | }); |
| | | }, |
| | | // å®ä¹ä¸ä¸ªå½æ°æ¥å¤çè§å£å®½åº¦åå |
| | | handleResize() { |
| | | //è§å£å®½åº¦ |
| | | let windowWidth = window.innerWidth; |
| | | //åå»å·¦è¾¹èåæ å®½åº¦92ï¼é¡µè¾¹è·40,å³è¾¹çæä½æé®å®½åº¦viewportWidth*33.33333% |
| | | let viewportWidth = windowWidth - 92 - 40; |
| | | //æç´¢è¡¨åæå¤§å®½åº¦ |
| | | let formMaxWidth = viewportWidth - viewportWidth * 0.3333333; |
| | | //å个æç´¢æ¡å®½åº¦ä¸º230 |
| | | this.maxNum = formMaxWidth / 230; |
| | | }, |
| | | //æ¹éä¸ä¼ æ¥å |
| | | openBatchUploadDia() { |
| | | this.batchUploadDia = true; |
| | | }, |
| | | // æ¥çæ¥å |
| | | viewIssued(row) { |
| | | this.currentInfo = row; |
| | | console.log(`output->row`, row); |
| | | let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS; |
| | | let fileType = "docx"; |
| | | if (row.tempUrlPdf != null || row.tempUrlPdf === "") { |
| | | fileName = row.tempUrlPdf; |
| | | fileType = "pdf"; |
| | | } |
| | | fileName = fileName.replace("/word/", ""); |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: fileType, |
| | | title: fileName, |
| | | lang: "zh-CN", |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: |
| | | this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName, |
| | | }; |
| | | console.log(this.javaApi + "/word/" + fileName); |
| | | this.viewIssuedVisible = true; |
| | | }, |
| | | handleChange(arr) { |
| | | this.mutiList = arr; |
| | | }, |
| | | handleDowns() { |
| | | if (this.mutiList.length == 0) { |
| | | this.$message.error("è¯·éæ©æ¥å"); |
| | | return; |
| | | } |
| | | let entity = this.entity; |
| | | //æ ¹æ®æ¥è¯¢æ¡ä»¶è¿æ»¤å·²éæ©çæ°æ® |
| | | let str = this.mutiList |
| | | .filter((f) => |
| | | entity.isExamine != null && entity.isExamine !== "" |
| | | ? f.isExamine === entity.isExamine |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.isRatify != null && entity.isRatify !== "" |
| | | ? f.isRatify === entity.isRatify |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.isUpload != null && entity.isUpload !== "" |
| | | ? f.isUpload === entity.isUpload |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.code != null && entity.code !== "" |
| | | ? f.code.indexOf(entity.code) >= 0 |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.state != null && entity.state !== "" |
| | | ? f.state === entity.state |
| | | : true |
| | | ) |
| | | .map((m) => m.id) |
| | | .join(","); |
| | | if (str === "" || str == null) { |
| | | this.$message.error("没æç¬¦åæ¡ä»¶çæ°æ®!"); |
| | | return; |
| | | } |
| | | this.outLoading = true; |
| | | downAll({ ids: str }).then((res) => { |
| | | this.outLoading = false; |
| | | this.$message.success("å¯¼åºæå"); |
| | | // const blob = new Blob([res],{ type: 'application/octet-stream' }); |
| | | // const url = URL.createObjectURL(blob); |
| | | // const link = document.createElement('a'); |
| | | // link.href = url; |
| | | // link.download = 'æ¥å.zip'; |
| | | // link.click(); |
| | | const link = document.createElement("a"); |
| | | link.href = this.javaApi + res.message; |
| | | link.target = "_blank"; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | //ä¸è½½å®æï¼éç½®è¡¨æ ¼ |
| | | this.$nextTick(() => { |
| | | this.refresh(); |
| | | }); |
| | | }); |
| | | }, |
| | | uploadExceed(file, fileList) { |
| | | this.$message.error("åæ¶ä¸ä¼ æä»¶æ°ç®æå¤§ä¸º100ï¼è¯·éè¯"); |
| | | }, |
| | | submitUpload() { |
| | | this.$refs.upload.submit(); |
| | | }, |
| | | beforeUpload(file) { |
| | | const docxType = [ |
| | | "application/vnd.openxmlformats-officedocument.wordprocessingml.document", |
| | | "application/msword", |
| | | ]; |
| | | if (!docxType.includes(file.type)) { |
| | | this.$message.error("åªè½ä¸ä¼ ç±»å为.doc/.docxçæä»¶"); |
| | | return false; |
| | | } |
| | | const maxSize = 10 * 1024 * 1024; //å个æä»¶æå¤§ä¸ä¼ 大å°10MB |
| | | if (file.size > maxSize) { |
| | | this.$message.error("æä»¶" + file.name + "大å°è¶
è¿10MB"); |
| | | return false; |
| | | } |
| | | return true; |
| | | // const isZip = file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || file.name.endsWith('.zip'); |
| | | // if (!isZip) { |
| | | // this.$message.error('ä¸ä¼ æä»¶åªè½æ¯ ZIP æ ¼å¼!'); |
| | | // } |
| | | // if(isZip){ |
| | | // this.inLoading = true; |
| | | // } |
| | | // return isZip; |
| | | }, |
| | | handleSuccess(response) { |
| | | this.inLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success("导å
¥æå"); |
| | | this.refreshTable(); |
| | | this.$refs.upload.clearFiles(); |
| | | this.fileList = []; |
| | | } else { |
| | | this.$message.error(response.message); |
| | | } |
| | | }, |
| | | onError(err, file, fileList, type) { |
| | | this.$message.error("ä¸ä¼ 失败"); |
| | | this.$refs.upload.clearFiles(); |
| | | this.fileList = []; |
| | | }, |
| | | refreshTable(e) { |
| | | if (!this.entity.createTimeRange) { |
| | | this.entity.createTimeRange = []; |
| | | } |
| | | this.getList(); |
| | | this.getReportCountInfo(); |
| | | }, |
| | | getReportCountInfo() { |
| | | if (!this.entity.createTimeRange) { |
| | | this.entity.createTimeRange = []; |
| | | } |
| | | console.log("entity", this.entity); |
| | | getReportCountInfo(this.entity) |
| | | .then((res) => { |
| | | this.unSubmitCount = res.data.unSubmitCount; |
| | | this.unRatifyCount = res.data.unRatifyCount; |
| | | this.unExamineCount = res.data.unExamineCount; |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | }, |
| | | refresh() { |
| | | this.entity = this.HaveJson(this.entityCopy); |
| | | this.upIndex++; |
| | | this.mutiList = []; |
| | | this.getReportCountInfo(); |
| | | }, |
| | | async handleWeave(row) { |
| | | let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS; |
| | | fileName = fileName.replace("/word/", ""); |
| | | const userName = this.$store.state.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"); |
| | | }, |
| | | confirmClaim() { |
| | | // console.log(this.$refs.Word.getValue()) |
| | | }, |
| | | async selectAllByOne(row) { |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | //åèvabOnlyOfficeç»ä»¶åæ°é
ç½® |
| | | const { href } = this.$router.resolve({ |
| | | path: `/wordEdit`, |
| | | query: { |
| | | url: this.javaApi + "/word/" + row.entrustCode + ".docx", |
| | | isEdit: "false", |
| | | fileType: "docx", |
| | | title: row.entrustCode + ".docx", |
| | | lang: "zh-CN", |
| | | isPrint: true, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | }, |
| | | }); |
| | | window.open(href, "_blank"); |
| | | console.log(`output->row`, row); |
| | | }, |
| | | download(row) { |
| | | getReportInfo({ id: row.id, type: 1,suffix:'.docx' }).then((response) => { |
| | | if (response.data && response.data.contentType) { |
| | | downLoad({ id: row.id, type: 1, code: row.code,suffix: '.docx' }) |
| | | .then((res) => { |
| | | // è·åæä»¶å |
| | | const blob = new Blob([res], { type: response.data.contentType }); |
| | | const url = URL.createObjectURL(blob); |
| | | let link = document.createElement("a"); |
| | | link.href = url; |
| | | link.download = row.code; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | URL.revokeObjectURL(url); |
| | | }) |
| | | .catch((error) => { |
| | | this.$message.error(error); |
| | | }); |
| | | } else { |
| | | this.$message.error("æªæ¾å°æä»¶"); |
| | | } |
| | | }); |
| | | }, |
| | | // è¿åæä½ |
| | | handleRestore(row) { |
| | | this.$confirm("æ¯å¦è¿åå½åæ¥å?", "è¿å", { |
| | | confirmButtonText: "è¿å", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | upReportUrl({ id: row.id,type:1 }).then((res) => { |
| | | if (res.code === 200) { |
| | | this.$message.success("æä½æå"); |
| | | this.refreshTable("page"); |
| | | } |
| | | }); |
| | | }) |
| | | .catch({}()); |
| | | }, |
| | | handleIssued(row) { |
| | | this.currentInfo = row; |
| | | let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS; |
| | | fileName = fileName.replace("/word/", ""); |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: "zh-CN", |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: |
| | | this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName, |
| | | }; |
| | | this.issuedVisible = true; |
| | | }, |
| | | // å®¡æ ¸éè¿ |
| | | subIssued() { |
| | | this.loadingIssued = true; |
| | | examineReport({ id: this.currentInfo.id, isExamine: 1 }) |
| | | .then((res) => { |
| | | this.loadingIssued = false; |
| | | if (res.code === 201) { |
| | | return; |
| | | } |
| | | this.$message.success("æäº¤æå"); |
| | | this.refreshTable("page"); |
| | | this.currentInfo = null; |
| | | this.issuedVisible = false; |
| | | }) |
| | | .catch((e) => { |
| | | this.$message.error("æäº¤å¤±è´¥"); |
| | | this.loadingIssued = false; |
| | | }); |
| | | }, |
| | | handleApprove(row) { |
| | | this.currentInfo = row; |
| | | let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS; |
| | | fileName = fileName.replace("/word/", ""); |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: "zh-CN", |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: |
| | | this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName, |
| | | }; |
| | | this.approveVisible = true; |
| | | }, |
| | | // æ¹åéè¿ |
| | | subApprove() { |
| | | this.loadingApprove = true; |
| | | 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; |
| | | this.approveVisible = false; |
| | | }); |
| | | }, |
| | | // æäº¤æä½ |
| | | handleSubmit(row) { |
| | | this.$confirm("æ¯å¦æäº¤å½åæ¥å?", "æäº¤", { |
| | | confirmButtonText: "æäº¤", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | writeReport({ id: row.id }) |
| | | .then((res) => { |
| | | if (res.code === 201) { |
| | | return; |
| | | } |
| | | this.$message.success("æäº¤æå"); |
| | | this.refreshTable("page"); |
| | | }) |
| | | .catch((e) => { |
| | | this.$message.error("æäº¤å¤±è´¥"); |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | // å®¡æ ¸ä¸éè¿åå æäº¤ |
| | | handleIssuedReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error("请è¾å
¥åå "); |
| | | } |
| | | this.loadingIssuedReason = true; |
| | | 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; |
| | | this.reason = ""; |
| | | this.issuedVisible = false; |
| | | this.issuedReasonVisible = false; |
| | | }) |
| | | .catch((e) => { |
| | | this.$message.error("æä½å¤±è´¥"); |
| | | this.loadingIssuedReason = false; |
| | | }); |
| | | }, |
| | | // 䏿¹ååå æäº¤ |
| | | handleApproveReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error("请è¾å
¥åå "); |
| | | } |
| | | this.loadingApproveReason = true; |
| | | examineReport({ |
| | | id: this.currentInfo.id, |
| | | isRatify: 0, |
| | | ratifyTell: this.reason, |
| | | }) |
| | | .then((res) => { |
| | | this.loadingApproveReason = false; |
| | | if (res.code === 201) { |
| | | return; |
| | | } |
| | | this.$message.success("æä½æå"); |
| | | this.refreshTable("page"); |
| | | this.currentInfo = null; |
| | | this.reason = ""; |
| | | this.issuedVisible = false; |
| | | this.issuedReasonVisible = false; |
| | | }) |
| | | .catch((e) => { |
| | | this.$message.error("æä½å¤±è´¥"); |
| | | this.loadingIssuedReason = false; |
| | | }); |
| | | }, |
| | | handleClose() { |
| | | this.withdrawDialogVisible = false; |
| | | this.laboratory = []; |
| | | }, |
| | | getStyle() { |
| | | return "height: calc(100% - " + (this.more ? "94" : "44") + "px)"; |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |