| | |
| | | @current-change="currentChange" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column align="center" type="selection" width="55" v-if="isSelection" /> |
| | | <el-table-column |
| | | align="center" |
| | | type="selection" |
| | | width="55" |
| | | v-if="isSelection" |
| | | /> |
| | | <el-table-column |
| | | align="center" |
| | | label="序号" |
| | |
| | | .el-table >>> .el-table__empty-text { |
| | | text-align: center; |
| | | } |
| | | |
| | | >>> .cell { |
| | | padding: 0 !important; |
| | | } |
| | | .cell { |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | padding-right: 4px; |
| | | padding-left: 4px; |
| | | } |
| | | >>> .cell { |
| | | padding: 0 !important; |
| | | padding-left: 10px; |
| | | } |
| | | .link { |
| | | color: rgb(64, 158, 255); |
| | |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "操作", |
| | | width: "120px", |
| | | operation: [ |
| | | { |
| | | name: "编辑", |
| | |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- <ValueTable |
| | | :key="upIndex" |
| | | ref="insOrderPlan" |
| | | :componentData="componentData" |
| | | :isColumnWidth="true" |
| | | :tableRowClassName="changeRowClass" |
| | | :upUrl="$api.user.updateUser" |
| | | :url="$api.insOrderPlan.selectInsOrderPlanList" |
| | | class="value-table" |
| | | @handleInspection="handleInspection" |
| | | /> --> |
| | | <lims-table |
| | | :tableData="tableData" |
| | | :column="column" |
| | |
| | | :tableLoading="tableLoading" |
| | | :height="'calc(100vh - 290px)'" |
| | | @pagination="pagination" |
| | | key="tableData0" |
| | | ></lims-table> |
| | | </div> |
| | | </div> |
| | |
| | | />--> |
| | | <el-dialog :visible.sync="dataDialogVisible" title="数据查看" width="80%"> |
| | | <div v-if="dataDialogVisible" style="height: 70vh; overflow-y: auto"> |
| | | <ValueTable |
| | | ref="ValueTableDataLook" |
| | | :componentData="componentDataDataLook" |
| | | :rowKey="'insProductId'" |
| | | :url="$api.insOrder.selectSampleAndProductByOrderId" |
| | | /> |
| | | <lims-table |
| | | :tableData="lookTableData" |
| | | :column="lookColumn" |
| | | :page="lookPage" |
| | | :tableLoading="lookTableLoading" |
| | | :height="'60vh'" |
| | | @pagination="lookPagination" |
| | | key="tableData1" |
| | | ></lims-table> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog |
| | |
| | | bindingProductTreeByProductId, |
| | | delProductTreeByProductId, |
| | | selectInsOrderPlanList, |
| | | selectSampleAndProductByOrderId, |
| | | } from "@/api/business/inspectionTask.js"; |
| | | import { mapGetters } from "vuex"; |
| | | export default { |
| | |
| | | requiredUp: [], |
| | | }, |
| | | dataDialogVisible: false, |
| | | componentData: { |
| | | entity: { |
| | | orderBy: { |
| | | field: "entrustCode", |
| | | order: "asc", |
| | | }, |
| | | sonLaboratory: null, |
| | | insState: null, |
| | | userId: null, |
| | | typeSource: null, |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | init: false, |
| | | needSort: ["createTime", "sendTime", "type", "appointed", "insState"], |
| | | do: [ |
| | | { |
| | | id: "", |
| | | font: "数据查看", |
| | | type: "text", |
| | | method: "handleDataLook", |
| | | }, |
| | | { |
| | | id: "", |
| | | font: "修改检验值", |
| | | type: "text", |
| | | method: "editInspection", |
| | | disabFun: (row, index) => { |
| | | return ( |
| | | row.userName == null || row.insState == 3 || row.insState == 5 |
| | | ); |
| | | }, |
| | | }, |
| | | { |
| | | id: "", |
| | | font: "检验", |
| | | type: "text", |
| | | method: "handleInspection", |
| | | disabFun: (row, index) => { |
| | | return ( |
| | | row.userName == null || |
| | | row.insState == 3 || |
| | | row.insState == 5 || |
| | | (row.userName && |
| | | !row.userName.includes( |
| | | JSON.parse(localStorage.getItem("user")).name |
| | | )) |
| | | ); |
| | | }, |
| | | }, |
| | | { |
| | | id: "", |
| | | font: "交接", |
| | | type: "text", |
| | | method: "handleConnect", |
| | | disabFun: (row, index) => { |
| | | return ( |
| | | row.userName == null || |
| | | row.insState == 5 || |
| | | row.insState == 3 || |
| | | (row.userName && |
| | | !row.userName.includes( |
| | | JSON.parse(localStorage.getItem("user")).name |
| | | )) |
| | | ); |
| | | }, |
| | | }, |
| | | // { |
| | | // font: '产业链', |
| | | // type: 'text', |
| | | // method: 'openInfoDialog', |
| | | // disabFun: (row, index) => { |
| | | // return row.typeSource !== 1 |
| | | // } |
| | | // }, |
| | | // { |
| | | // id: '', |
| | | // font: '认领', |
| | | // type: 'text', |
| | | // method: 'claimFun', |
| | | // disabFun: (row, index) => { |
| | | // return row.userName != null || row.checkName!=null |
| | | // } |
| | | // }, |
| | | { |
| | | id: "", |
| | | font: "原始记录", |
| | | type: "text", |
| | | method: "viewInspectInfo", |
| | | }, |
| | | ], |
| | | linkEvent: { |
| | | entrustCode: { |
| | | method: "selectAllByOne", |
| | | }, |
| | | }, |
| | | tagField: { |
| | | type: { |
| | | select: [], |
| | | }, |
| | | insState: { |
| | | select: [], |
| | | }, |
| | | insResult: { |
| | | select: [ |
| | | { |
| | | value: 0, |
| | | label: "不合格", |
| | | type: "danger", |
| | | }, |
| | | { |
| | | value: 1, |
| | | label: "合格", |
| | | type: "success", |
| | | }, |
| | | { |
| | | value: "", |
| | | label: "未出结果", |
| | | type: "info", |
| | | }, |
| | | ], |
| | | }, |
| | | typeSource: { |
| | | 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: [], |
| | | requiredUp: [], |
| | | }, |
| | | upIndex: 0, |
| | | planTotal: 0, |
| | | insStateList: [], |
| | | state: 0, // 0:台账页,1:检验页面,2检验页面(复核),默认为0,3数据查看 |
| | |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "操作", |
| | | width: "260px", |
| | | operation: [ |
| | | { |
| | | name: "数据查看", |
| | |
| | | }, |
| | | tableLoading: false, |
| | | queryParams: {}, |
| | | insResultList: [ |
| | | { |
| | | value: 1, |
| | | label: "合格", |
| | | type: "success", |
| | | }, |
| | | { |
| | | value: 0, |
| | | label: "不合格", |
| | | type: "danger", |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: "不判定", |
| | | type: "", |
| | | }, |
| | | ], |
| | | lookTableData: [], |
| | | lookColumn: [ |
| | | { |
| | | label: "样品编号", |
| | | prop: "sampleCode", |
| | | width: "140px", |
| | | dataType: "link", |
| | | linkMethod: "selectAllByOne", |
| | | }, |
| | | { label: "样品名称", prop: "sample", width: "140px" }, |
| | | { label: "检验项分类", prop: "inspectionItemClass" }, |
| | | { label: "检验项", prop: "inspectionItem", width: "140px" }, |
| | | { label: "检验子项", prop: "inspectionItemSubclass" }, |
| | | { label: "单位", prop: "unit" }, |
| | | { label: "样品型号", prop: "model" }, |
| | | { label: "条件", prop: "radius" }, |
| | | { label: "电缆标识", prop: "cableTag" }, |
| | | { label: "试验要求", prop: "tell" }, |
| | | { label: "检验结果", prop: "lastValue" }, |
| | | { |
| | | label: "结果判定", |
| | | prop: "insResult", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | return this.insResultList.find((m) => m.value == params).label; |
| | | }, |
| | | formatType: (params) => { |
| | | return this.insResultList.find((m) => m.value == params).type; |
| | | }, |
| | | }, |
| | | { |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "操作", |
| | | operation: [ |
| | | { |
| | | name: "不合格复测查看", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.getRetestResult(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.insResult != 0; |
| | | }, |
| | | }, |
| | | { |
| | | name: "检验项绑定", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.getBinding(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return ( |
| | | this.lookInfo.userName == null || |
| | | this.lookInfo.insState == 3 || |
| | | this.lookInfo.insState == 5 |
| | | ); |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | ], |
| | | lookPage: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 0, |
| | | }, |
| | | lookTableLoading: false, |
| | | }; |
| | | }, |
| | | created() { |
| | |
| | | this.page.size = limit; |
| | | this.getList(); |
| | | }, |
| | | getLookList() { |
| | | this.lookTableLoading = true; |
| | | let param = { id: this.lookInfo.id, ...this.lookPage }; |
| | | delete param.total; |
| | | selectSampleAndProductByOrderId({ ...param }) |
| | | .then((res) => { |
| | | this.lookTableLoading = false; |
| | | if (res.code === 200) { |
| | | this.lookTableData = res.data.records; |
| | | this.lookPage.total = res.data.total; |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | this.lookTableLoading = false; |
| | | }); |
| | | }, |
| | | lookPagination({ page, limit }) { |
| | | this.lookPage.current = page; |
| | | this.lookPage.size = limit; |
| | | this.getLookList(); |
| | | }, |
| | | // 修改检验值 |
| | | editInspection(row) { |
| | | this.$refs.editInspectionItem.showDialog(row.id); |
| | |
| | | // 数据查看 |
| | | handleDataLook(row) { |
| | | this.lookInfo = row; |
| | | this.componentDataDataLook.entity.id = row.id; |
| | | this.getLookList(); |
| | | this.dataDialogVisible = true; |
| | | }, |
| | | // 查看不合格复测结果 |
| | |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "操作", |
| | | width: "160px", |
| | | operation: [ |
| | | { |
| | | name: "编辑", |
| | |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "操作", |
| | | width: "160px", |
| | | operation: [ |
| | | { |
| | | name: "编辑", |
| | |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "操作", |
| | | width: "320px", |
| | | operation: [ |
| | | { |
| | | name: "编辑", |
| | |
| | | <div> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true"> |
| | | <el-form-item label="资质名称" prop="name"> |
| | | <el-select v-model="queryParams.name" placeholder="选择资质名称" size="small" @change="refreshTable()"> |
| | | <el-option v-for="dict in dict.type.qualification_name" :key="dict.value" :label="dict.label" :value="dict.value"> |
| | | <el-select |
| | | v-model="queryParams.name" |
| | | placeholder="选择资质名称" |
| | | size="small" |
| | | @change="refreshTable()" |
| | | > |
| | | <el-option |
| | | v-for="dict in dict.type.cnas_method_qualification" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | > |
| | | {{ dict.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">查 询</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="refresh">重 置</el-button> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | size="mini" |
| | | @click="refreshTable" |
| | | >查 询</el-button |
| | | > |
| | | <el-button icon="el-icon-refresh" size="mini" @click="refresh" |
| | | >重 置</el-button |
| | | > |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div> |
| | | <el-row class="title"> |
| | | <el-col :span="12" style="text-align: left"> |
| | | <el-radio-group v-model="radio" @input="selectorSwitch" size="medium" fill="#409EFF"> |
| | | <el-radio-group |
| | | v-model="radio" |
| | | @input="selectorSwitch" |
| | | size="medium" |
| | | fill="#409EFF" |
| | | > |
| | | <el-radio-button :label="0">资质明细</el-radio-button> |
| | | <el-radio-button :label="1">资质总览</el-radio-button> |
| | | </el-radio-group> |
| | | </el-col> |
| | | <el-col :span="12" style="text-align: right;" v-if="radio===0"> |
| | | <el-button size="small" type="primary" @click="openAdd">资质更新</el-button> |
| | | <el-button size="small" icon="el-icon-delete" @click="handleDel">删除</el-button> |
| | | <el-col :span="12" style="text-align: right" v-if="radio === 0"> |
| | | <el-button size="small" type="primary" @click="openAdd" |
| | | >资质更新</el-button |
| | | > |
| | | <el-button size="small" icon="el-icon-delete" @click="handleDel" |
| | | >删除</el-button |
| | | > |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-if="radio===0"> |
| | | <lims-table :tableData="tableData" :column="column" |
| | | :isSelection="true" :handleSelectionChange="handleSelectionChange" |
| | | @pagination="pagination" :height="'calc(100vh - 300px)'" |
| | | :page="page" :tableLoading="tableLoading"></lims-table> |
| | | <div v-if="radio === 0"> |
| | | <lims-table |
| | | :tableData="tableData" |
| | | :column="column" |
| | | :isSelection="true" |
| | | :handleSelectionChange="handleSelectionChange" |
| | | @pagination="pagination" |
| | | :height="'calc(100vh - 300px)'" |
| | | :page="page" |
| | | :tableLoading="tableLoading" |
| | | ></lims-table> |
| | | </div> |
| | | <div class="table" v-if="radio===1" v-loading="pageLoading" @scroll="scrollFn"> |
| | | <div |
| | | class="table" |
| | | v-if="radio === 1" |
| | | v-loading="pageLoading" |
| | | @scroll="scrollFn" |
| | | > |
| | | <el-row :gutter="16"> |
| | | <el-col :span="8" v-for="(m,i) in list" :key="i" :xs="24" :sm="12" :md="8" :lg="8" :xl="6" style="margin-bottom: 16px;"> |
| | | <el-col |
| | | :span="8" |
| | | v-for="(m, i) in list" |
| | | :key="i" |
| | | :xs="24" |
| | | :sm="12" |
| | | :md="8" |
| | | :lg="8" |
| | | :xl="6" |
| | | style="margin-bottom: 16px" |
| | | > |
| | | <div class="table-item"> |
| | | <el-image style="width: 102px;height: 102px;margin-right: 20px;border-radius: 16px;" :src="javaApi +'/img/'+m.imageUrl"> |
| | | <div slot="error" class="image-error" style="width: 100px; |
| | | height: 100px; |
| | | <el-image |
| | | style=" |
| | | width: 102px; |
| | | height: 102px; |
| | | margin-right: 20px; |
| | | border-radius: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border: 1px solid #EEEEEE;"> |
| | | <i class="el-icon-picture-outline" style="font-size:30px;color:#666666;"></i> |
| | | " |
| | | :src="javaApi + '/img/' + m.imageUrl" |
| | | > |
| | | <div |
| | | slot="error" |
| | | class="image-error" |
| | | style=" |
| | | width: 100px; |
| | | height: 100px; |
| | | border-radius: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border: 1px solid #eeeeee; |
| | | " |
| | | > |
| | | <i |
| | | class="el-icon-picture-outline" |
| | | style="font-size: 30px; color: #666666" |
| | | ></i> |
| | | </div> |
| | | </el-image> |
| | | <div class="table-item-right" style="flex: 1;font-size: 12px;color: #666666;"> |
| | | <p style="line-height: 26px;">资质名称:<span style="color: #3A7BFA;">{{ m.name }}</span></p> |
| | | <p style="line-height: 26px;">颁发时间:{{m.recentlyTime}}</p> |
| | | <p style="line-height: 26px;">到期时间:{{m.expireTime}}</p> |
| | | <div |
| | | class="table-item-right" |
| | | style="flex: 1; font-size: 12px; color: #666666" |
| | | > |
| | | <p style="line-height: 26px"> |
| | | 资质名称:<span style="color: #3a7bfa">{{ m.name }}</span> |
| | | </p> |
| | | <p style="line-height: 26px">颁发时间:{{ m.recentlyTime }}</p> |
| | | <p style="line-height: 26px">到期时间:{{ m.expireTime }}</p> |
| | | <p> |
| | | <span>状态:</span> |
| | | <el-tag :type="m.state===0?'danger':'success'" size="small">{{ m.state===0?'失效':'有效' }}</el-tag> |
| | | <el-tag |
| | | :type="m.state === 0 ? 'danger' : 'success'" |
| | | size="small" |
| | | >{{ m.state === 0 ? "失效" : "有效" }}</el-tag |
| | | > |
| | | </p> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <div v-if="list.length<1&&!pageLoading&&!isLoding" style="color:#909399;font-size:14px;text-align: center;margin-top:200px" >暂无数据</div> |
| | | <div v-if="list.length>0"> |
| | | <el-button v-if="isLoding" type="text" style="display: flex; margin: 0 auto; color: #909399"> |
| | | <i class="el-icon-loading" style="font-size:20px"></i> |
| | | <div |
| | | v-if="list.length < 1 && !pageLoading && !isLoding" |
| | | style=" |
| | | color: #909399; |
| | | font-size: 14px; |
| | | text-align: center; |
| | | margin-top: 200px; |
| | | " |
| | | > |
| | | 暂无数据 |
| | | </div> |
| | | <div v-if="list.length > 0"> |
| | | <el-button |
| | | v-if="isLoding" |
| | | type="text" |
| | | style="display: flex; margin: 0 auto; color: #909399" |
| | | > |
| | | <i class="el-icon-loading" style="font-size: 20px"></i> |
| | | </el-button> |
| | | <el-button type="text" v-if="finishLoding" style="display: flex; margin: 0 auto; color: #909399">已经没有更多啦~</el-button> |
| | | <el-button |
| | | type="text" |
| | | v-if="finishLoding" |
| | | style="display: flex; margin: 0 auto; color: #909399" |
| | | >已经没有更多啦~</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | <el-dialog title="资质更新" :visible.sync="qualificationsConnectVisible" width="400px"> |
| | | <el-form ref="formDataRef" :model="formData" label-position="right" :rules="formDataRules" label-width="78px"> |
| | | <el-dialog |
| | | title="资质更新" |
| | | :visible.sync="qualificationsConnectVisible" |
| | | width="400px" |
| | | > |
| | | <el-form |
| | | ref="formDataRef" |
| | | :model="formData" |
| | | label-position="right" |
| | | :rules="formDataRules" |
| | | label-width="78px" |
| | | > |
| | | <el-form-item label="资质名称" prop="name"> |
| | | <el-select v-model="formData.name" placeholder="请选择" style="width: 100%;" size="small" clearable> |
| | | <el-option v-for="dict in dict.type.qualification_name" :key="dict.value" :label="dict.label" :value="dict.value"> |
| | | <el-select |
| | | v-model="formData.name" |
| | | placeholder="请选择" |
| | | style="width: 100%" |
| | | size="small" |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="dict in dict.type.cnas_method_qualification" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | > |
| | | {{ dict.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="资质编码" prop="code"> |
| | | <el-input size="small" placeholder="请输入" clearable v-model="formData.code"></el-input> |
| | | <el-input |
| | | size="small" |
| | | placeholder="请输入" |
| | | clearable |
| | | v-model="formData.code" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="颁发机构" prop="organization"> |
| | | <el-input size="small" placeholder="请输入" clearable v-model="formData.organization"></el-input> |
| | | <el-input |
| | | size="small" |
| | | placeholder="请输入" |
| | | clearable |
| | | v-model="formData.organization" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="资质说明" prop="explanation"> |
| | | <el-input size="small" placeholder="请输入" clearable v-model="formData.explanation"></el-input> |
| | | <el-input |
| | | size="small" |
| | | placeholder="请输入" |
| | | clearable |
| | | v-model="formData.explanation" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="颁发时间" prop="dateOfIssuance"> |
| | | <el-date-picker style="width:100%" v-model="formData.dateOfIssuance" |
| | | type="datetime" |
| | | size="small" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | placeholder="选择日期"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="formData.dateOfIssuance" |
| | | type="datetime" |
| | | size="small" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | placeholder="选择日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="到期时间" prop="expireTime"> |
| | | <el-date-picker style="width:100%" v-model="formData.expireTime" |
| | | type="datetime" |
| | | size="small" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | placeholder="选择日期"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="formData.expireTime" |
| | | type="datetime" |
| | | size="small" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | placeholder="选择日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="资质图片"> |
| | | <el-upload |
| | | ref="upload" |
| | | :action="uploadAction" |
| | | :on-success="m=>handleSuccessUpImg(m,'imageUrl')" |
| | | accept='image/jpg,image/jpeg,image/png' |
| | | :on-success="(m) => handleSuccessUpImg(m, 'imageUrl')" |
| | | accept="image/jpg,image/jpeg,image/png" |
| | | :multiple="false" |
| | | :limit="1" |
| | | :headers="headers" :on-change="beforeUpload" |
| | | :on-error="onError"> |
| | | <el-button slot="trigger" size="small" type="primary">选取图片</el-button> |
| | | :headers="headers" |
| | | :on-change="beforeUpload" |
| | | :on-error="onError" |
| | | > |
| | | <el-button slot="trigger" size="small" type="primary" |
| | | >选取图片</el-button |
| | | > |
| | | </el-upload> |
| | | </el-form-item> |
| | | <el-form-item label="资质附件"> |
| | | <el-upload |
| | | ref="upload1" |
| | | :action="uploadAction" |
| | | :on-success="m=>handleSuccessUpImg(m,'fileUrl')" |
| | | accept='image/jpg,image/jpeg,image/png,application/pdf,.doc,.docx' |
| | | :headers="headers" :multiple="false" :limit="1" :on-change="beforeUpload1" |
| | | :on-error="onError1"> |
| | | <el-button slot="trigger" size="small" type="primary">选取文件</el-button> |
| | | :on-success="(m) => handleSuccessUpImg(m, 'fileUrl')" |
| | | accept="image/jpg,image/jpeg,image/png,application/pdf,.doc,.docx" |
| | | :headers="headers" |
| | | :multiple="false" |
| | | :limit="1" |
| | | :on-change="beforeUpload1" |
| | | :on-error="onError1" |
| | | > |
| | | <el-button slot="trigger" size="small" type="primary" |
| | | >选取文件</el-button |
| | | > |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="qualificationsConnectVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="confirmQualifications" :loading="loading">确 定</el-button> |
| | | </span> |
| | | <el-button @click="qualificationsConnectVisible = false" |
| | | >取 消</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | @click="confirmQualifications" |
| | | :loading="loading" |
| | | >确 定</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import {addCertificationDetail, delCertificationDetail, getCertificationDetail} from "@/api/structural/laboratory"; |
| | | import {getToken} from "@/utils/auth"; |
| | | import { |
| | | addCertificationDetail, |
| | | delCertificationDetail, |
| | | getCertificationDetail, |
| | | } from "@/api/structural/laboratory"; |
| | | import { getToken } from "@/utils/auth"; |
| | | |
| | | export default { |
| | | components: { |
| | | limsTable |
| | | limsTable, |
| | | }, |
| | | dicts: ['qualification_name'], |
| | | dicts: ["cnas_method_qualification"], |
| | | data() { |
| | | return { |
| | | radio: 0, |
| | | queryParams: { |
| | | name: '' |
| | | name: "", |
| | | }, |
| | | tableData: [], |
| | | selection: [], |
| | | column: [ |
| | | {label: '资质名称', prop: 'name'}, |
| | | {label: '资质编码', prop: 'code'}, |
| | | {label: '颁发机构', prop: 'organization'}, |
| | | {label: '资质说明', prop: 'explanation'}, |
| | | {label: '首次颁发时间', prop: 'firstIssuanceDate'}, |
| | | {label: '最近颁发时间', prop: 'latestIssuanceDate'}, |
| | | {label: '到期颁发时间', prop: 'expireTime'}, |
| | | { label: "资质名称", prop: "name" }, |
| | | { label: "资质编码", prop: "code" }, |
| | | { label: "颁发机构", prop: "organization" }, |
| | | { label: "资质说明", prop: "explanation" }, |
| | | { label: "首次颁发时间", prop: "firstIssuanceDate" }, |
| | | { label: "最近颁发时间", prop: "latestIssuanceDate" }, |
| | | { label: "到期颁发时间", prop: "expireTime" }, |
| | | { |
| | | dataType: 'action', |
| | | fixed: 'right', |
| | | label: '操作', |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "操作", |
| | | operation: [ |
| | | { |
| | | name: '附件下载', |
| | | type: 'text', |
| | | name: "附件下载", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleDownLoad(row); |
| | | }, |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | }, |
| | | ], |
| | | page: { |
| | | total:0, |
| | | size:10, |
| | | current:1 |
| | | total: 0, |
| | | size: 10, |
| | | current: 1, |
| | | }, |
| | | tableLoading: false, |
| | | qualificationsList:[], |
| | | qualificationsConnectVisible:false, |
| | | formData:{}, |
| | | qualificationsList: [], |
| | | qualificationsConnectVisible: false, |
| | | formData: {}, |
| | | formDataRules: { |
| | | name: [{ required: true, message: "请填写资质名称", trigger: "change" }], |
| | | name: [ |
| | | { required: true, message: "请填写资质名称", trigger: "change" }, |
| | | ], |
| | | code: [{ required: true, message: "请填写资质编码", trigger: "blur" }], |
| | | organization: [{ required: true, message: "请填写颁发机构", trigger: "blur" }], |
| | | dateOfIssuance: [{ required: true, message: "请选择颁发时间", trigger: "change" }], |
| | | expireTime: [{ required: true, message: "请填写到期时间", trigger: "change" }], |
| | | organization: [ |
| | | { required: true, message: "请填写颁发机构", trigger: "blur" }, |
| | | ], |
| | | dateOfIssuance: [ |
| | | { required: true, message: "请选择颁发时间", trigger: "change" }, |
| | | ], |
| | | expireTime: [ |
| | | { required: true, message: "请填写到期时间", trigger: "change" }, |
| | | ], |
| | | }, |
| | | loading:false, |
| | | pageLoading:false, |
| | | loading: false, |
| | | pageLoading: false, |
| | | isLoding: false, // 加载中,loading图标,默认为true |
| | | finishLoding: false, // 加载完成,显示已经没有更多了 |
| | | currentPage: 1, // 当前页 |
| | | pageSize: 16, // 一页16条 |
| | | total: '', |
| | | list:[], |
| | | uploadAction: process.env.VUE_APP_BASE_API + '/deviceScope/uploadFile', |
| | | total: "", |
| | | list: [], |
| | | uploadAction: process.env.VUE_APP_BASE_API + "/deviceScope/uploadFile", |
| | | headers: { Authorization: "Bearer " + getToken() }, |
| | | } |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.refreshTable() |
| | | this.refreshTable(); |
| | | }, |
| | | methods: { |
| | | selectorSwitch(radio) { |
| | | if(radio === 1){ |
| | | if (radio === 1) { |
| | | this.list = []; |
| | | this.refreshTable(); |
| | | } |
| | |
| | | refreshTable() { |
| | | if (this.radio === 0) { |
| | | this.tableLoading = true; |
| | | getCertificationDetail({...this.page,...this.queryParams}).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 200) { |
| | | this.tableData = res.data.records |
| | | this.page.total = res.data.total |
| | | } |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | }) |
| | | getCertificationDetail({ ...this.page, ...this.queryParams }) |
| | | .then((res) => { |
| | | this.tableLoading = false; |
| | | if (res.code === 200) { |
| | | this.tableData = res.data.records; |
| | | this.page.total = res.data.total; |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | this.tableLoading = false; |
| | | }); |
| | | } else { |
| | | if(this.currentPage>1){ |
| | | this.isLoding = true |
| | | }else{ |
| | | this.pageLoading = true |
| | | if (this.currentPage > 1) { |
| | | this.isLoding = true; |
| | | } else { |
| | | this.pageLoading = true; |
| | | } |
| | | if(this.list.length===0){ |
| | | window.addEventListener("scroll", this.throttle(this.scrollFn, 20000)); |
| | | if (this.list.length === 0) { |
| | | window.addEventListener( |
| | | "scroll", |
| | | this.throttle(this.scrollFn, 20000) |
| | | ); |
| | | } |
| | | getCertificationDetail({ |
| | | current: this.currentPage, |
| | | size: this.pageSize, |
| | | ...this.queryParams |
| | | }).then(res => { |
| | | if(res.code===200){ |
| | | this.total = res.data.total |
| | | let list = res.data.records; |
| | | if(list.length===0){ |
| | | this.finishLoding = true; |
| | | }else{ |
| | | if(list.length<this.pageSize){ |
| | | ...this.queryParams, |
| | | }) |
| | | .then((res) => { |
| | | if (res.code === 200) { |
| | | this.total = res.data.total; |
| | | let list = res.data.records; |
| | | if (list.length === 0) { |
| | | this.finishLoding = true; |
| | | } |
| | | this.list = this.list.concat(list) |
| | | if(this.total===this.list.length){ |
| | | this.finishLoding = true; |
| | | } else { |
| | | if (list.length < this.pageSize) { |
| | | this.finishLoding = true; |
| | | } |
| | | this.list = this.list.concat(list); |
| | | if (this.total === this.list.length) { |
| | | this.finishLoding = true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | this.pageLoading = false |
| | | this.isLoding = false; |
| | | }).catch(err => { |
| | | this.pageLoading = false |
| | | this.isLoding = false; |
| | | }) |
| | | this.pageLoading = false; |
| | | this.isLoding = false; |
| | | }) |
| | | .catch((err) => { |
| | | this.pageLoading = false; |
| | | this.isLoding = false; |
| | | }); |
| | | } |
| | | }, |
| | | // 重置 |
| | | refresh() { |
| | | if(this.radio === 0){ |
| | | this.queryParams.name = '' |
| | | this.page.size = 10 |
| | | this.page.current = 1 |
| | | this.refreshTable() |
| | | if (this.radio === 0) { |
| | | this.queryParams.name = ""; |
| | | this.page.size = 10; |
| | | this.page.current = 1; |
| | | this.refreshTable(); |
| | | } else { |
| | | this.finishLoding = false; |
| | | this.currentPage= 1; |
| | | this.list=[]; |
| | | this.refreshTable() |
| | | this.currentPage = 1; |
| | | this.list = []; |
| | | this.refreshTable(); |
| | | } |
| | | }, |
| | | // 表格多选 |
| | | handleSelectionChange (selection) { |
| | | handleSelectionChange(selection) { |
| | | this.selection = selection; |
| | | }, |
| | | pagination (page) { |
| | | this.page.size = page.limit |
| | | this.refreshTable() |
| | | pagination(page) { |
| | | this.page.size = page.limit; |
| | | this.refreshTable(); |
| | | }, |
| | | // 资质明细批量删除 |
| | | handleDel(){ |
| | | if (this.selection.length===0) { |
| | | this.$message.warning('请选择至少一条数据') |
| | | return |
| | | handleDel() { |
| | | if (this.selection.length === 0) { |
| | | this.$message.warning("请选择至少一条数据"); |
| | | return; |
| | | } |
| | | const delIds = [] |
| | | this.selection.forEach(item => { |
| | | delIds.push(item.id) |
| | | }) |
| | | delCertificationDetail(delIds).then(res => { |
| | | if (res.code !== 200) return |
| | | const delIds = []; |
| | | this.selection.forEach((item) => { |
| | | delIds.push(item.id); |
| | | }); |
| | | delCertificationDetail(delIds).then((res) => { |
| | | if (res.code !== 200) return; |
| | | this.refreshTable(); |
| | | this.$message.success('删除成功') |
| | | }) |
| | | this.$message.success("删除成功"); |
| | | }); |
| | | }, |
| | | // 资质明细附件下载 |
| | | handleDownLoad(row){ |
| | | handleDownLoad(row) { |
| | | // let url = row.fileUrl; |
| | | // const link = document.createElement('a'); |
| | | // link.href = this.javaApi + '/img/'+ url; |
| | | // document.body.appendChild(link); |
| | | // link.target = '_blank'; |
| | | // link.click(); |
| | | const url = process.env.VUE_APP_BASE_API + '/img/'+ row.fileUrl |
| | | const url = process.env.VUE_APP_BASE_API + "/img/" + row.fileUrl; |
| | | this.$download.saveAs(url, row.fileUrl); |
| | | }, |
| | | openAdd() { |
| | | this.qualificationsConnectVisible = true; |
| | | this.$nextTick(()=>{ |
| | | this.$refs.upload.clearFiles() |
| | | this.$refs.upload1.clearFiles() |
| | | }) |
| | | this.$nextTick(() => { |
| | | this.$refs.upload.clearFiles(); |
| | | this.$refs.upload1.clearFiles(); |
| | | }); |
| | | this.formData = {}; |
| | | }, |
| | | handleSuccessUpImg(response,name) { |
| | | handleSuccessUpImg(response, name) { |
| | | if (response.code === 200) { |
| | | this.formData[name] = response.data.url; |
| | | } |
| | | }, |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('上传文件不超过10M'); |
| | | this.$refs.upload.clearFiles() |
| | | this.$message.error("上传文件不超过10M"); |
| | | this.$refs.upload.clearFiles(); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('上传失败') |
| | | this.$refs.upload.clearFiles() |
| | | this.$message.error("上传失败"); |
| | | this.$refs.upload.clearFiles(); |
| | | }, |
| | | beforeUpload1(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('上传文件不超过10M'); |
| | | this.$refs.upload1.clearFiles() |
| | | this.$message.error("上传文件不超过10M"); |
| | | this.$refs.upload1.clearFiles(); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }, |
| | | onError1(err, file, fileList) { |
| | | this.$message.error('上传失败') |
| | | this.$refs.upload1.clearFiles() |
| | | this.$message.error("上传失败"); |
| | | this.$refs.upload1.clearFiles(); |
| | | }, |
| | | confirmQualifications(){ |
| | | this.$refs['formDataRef'].validate((valid) => { |
| | | confirmQualifications() { |
| | | this.$refs["formDataRef"].validate((valid) => { |
| | | if (valid) { |
| | | this.loading = true; |
| | | addCertificationDetail({...this.formData}).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('已提交') |
| | | this.refreshTable() |
| | | this.resetForm("formDataRef"); |
| | | this.qualificationsConnectVisible = false |
| | | }).catch(err => { |
| | | this.loading = false |
| | | }) |
| | | addCertificationDetail({ ...this.formData }) |
| | | .then((res) => { |
| | | this.loading = false; |
| | | if (res.code === 201) return; |
| | | this.$message.success("已提交"); |
| | | this.refreshTable(); |
| | | this.resetForm("formDataRef"); |
| | | this.qualificationsConnectVisible = false; |
| | | }) |
| | | .catch((err) => { |
| | | this.loading = false; |
| | | }); |
| | | } |
| | | }) |
| | | }); |
| | | }, |
| | | // 滚动触底加载 |
| | | scrollFn() { |
| | |
| | | let scrollHeight = document.body.scrollHeight; // 滚动文档高度 |
| | | let scrollTop = parseInt(document.documentElement.scrollTop); // 已滚动的高度 |
| | | let height = 300; |
| | | if (scrollTop + clientHeight >= scrollHeight - height && scrollHeight !== 0) { |
| | | if (!this.finishLoding&&this.currentPage*this.pageSize<this.total) { |
| | | if ( |
| | | scrollTop + clientHeight >= scrollHeight - height && |
| | | scrollHeight !== 0 |
| | | ) { |
| | | if ( |
| | | !this.finishLoding && |
| | | this.currentPage * this.pageSize < this.total |
| | | ) { |
| | | this.currentPage = this.currentPage + 1; |
| | | this.refreshTable(); |
| | | } |
| | |
| | | destroyed() { |
| | | window.removeEventListener("scroll", this.throttle(), false); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | |
| | | line-height: 40px; |
| | | margin-bottom: 10px; |
| | | } |
| | | .table-item{ |
| | | .table-item { |
| | | border-radius: 8px 8px 8px 8px; |
| | | box-shadow: 4px 4px 8px 0px rgba(51,51,51,0.04); |
| | | border: 1px solid #EEEEEE; |
| | | box-shadow: 4px 4px 8px 0px rgba(51, 51, 51, 0.04); |
| | | border: 1px solid #eeeeee; |
| | | box-sizing: border-box; |
| | | padding: 14px 12px; |
| | | display: flex; |