<template>
|
<div>
|
<div class="content-main">
|
<div class="top-bar">
|
<el-form style="margin-top: 10px;" :hidden="lookVisible" ref="form" :inline="true" :model="searchData">
|
<el-form-item :label="this.radioValue === 0 ? '仪器设备编号:' : '计划编号:'" class="sermargin">
|
<el-input size="small" v-model="searchData.code" @blur="blurSearch()" class="input-form" placeholder="请输入">
|
</el-input>
|
</el-form-item>
|
<el-form-item v-if="this.radioValue === 1">
|
<el-button size="small" type="primary" @click="searchPlan">查询</el-button>
|
</el-form-item>
|
<el-form-item v-if="this.radioValue === 0" :label="this.radioValue === 0 ? '仪器设备名称:' : '设备名称'"
|
class="sermargin">
|
<el-input size="small" v-model="searchData.name" class="input-form" placeholder="请输入">
|
</el-input>
|
</el-form-item>
|
<el-form-item v-if="this.radioValue === 0" :label="this.radioValue === 0 ? '计量单位:' : '计量单位:'"
|
style="margin-right: 20px;">
|
<el-input size="small" v-model="searchData.measureunit" class="input-form" placeholder="请输入">
|
</el-input>
|
</el-form-item>
|
</el-form>
|
<el-form :hidden="lookVisible" style="margin-top: 10px;">
|
<el-form-item v-if="this.radioValue === 0" class="rightBtn">
|
<el-button size="small" type="primary" @click="search">查询</el-button>
|
<el-button size="small" type="primary" plain @click="reset()">重置</el-button>
|
</el-form-item>
|
<el-form-item v-if="this.radioValue === 1" class="rightBtn">
|
<el-button size="small" type="primary" @click="addPlan()" icon="el-icon-plus">新增计划</el-button>
|
</el-form-item>
|
</el-form>
|
</div>
|
<div class="library-table">
|
<div class="table-header">
|
<div class="search-bar">
|
<el-radio-group v-model="radioValue" @change="radioclick">
|
<el-radio-button v-for="item in options" :key="item.value" :label="item.value">
|
{{ item.label }}
|
</el-radio-button>
|
</el-radio-group>
|
</div>
|
</div>
|
<div class="table-box">
|
<el-table v-if="this.radioValue == 0" :max-height="600" :cell-style="{ textAlign: 'left' }"
|
:header-cell-style="{ border: '0px', background: '#f5f7fa', color: '#606266', boxShadow: 'inset 0 1px 0 #ebeef5', textAlign: 'left' }"
|
:data="measureLedgerTable" style="width: 100%">
|
<el-table-column type="index" min-width="10%" />
|
<el-table-column prop="equipmentCode" label="仪器设备编号" min-width="10%" />
|
<el-table-column label="计量单位" prop="measurementUnit" min-width="10%"></el-table-column>
|
<el-table-column prop="equipmentName" label="仪器设备名称" min-width="10%" />
|
<el-table-column prop="measuringRange" label="测量范围" min-width="10%" />
|
<el-table-column prop="termValidity" label="计量周期" min-width="10%">
|
<template slot-scope="scope">
|
{{ scope.row.termValidity }}月
|
</template>
|
</el-table-column>
|
<el-table-column prop="result" label="计量结果" min-width="10%">
|
<template slot-scope="scope">
|
<div v-if="scope.row.result === 1">
|
<span style="color: rgb(78, 210, 16);">正常</span>
|
</div>
|
<div v-else-if="scope.row.result === 2">
|
<span style="color: rgb(27, 202, 233);">矫正后可用</span>
|
</div>
|
<div v-else>
|
<span style="color: red;">失准</span>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column prop="endDate" label="计量日期" min-width="12%" />
|
<el-table-column prop="validit" label="计量有效期" min-width="10%" />
|
<el-table-column prop="name" label="负责人" min-width="10%" />
|
<el-table-column prop="createTime" label="创建日期" min-width="10%" />
|
<el-table-column prop="name" label="创建人" min-width="8%" />
|
<el-table-column prop="code" label="计量编号" min-width="12%" />
|
<el-table-column label="操作" min-width="15%">
|
<template slot-scope="scope">
|
<!-- <el-button type="text" @click="lookMeasurement(scope.row.equipmentCode)" size="small">查看计量履历</el-button> -->
|
<el-button type="text" size="small">查看附件</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<el-table v-show="this.radioValue == 1" :max-height="500" :cell-style="{ textAlign: 'center' }"
|
:header-cell-style="{ border: '0px', background: '#f5f7fa', color: '#606266', boxShadow: 'inset 0 1px 0 #ebeef5', textAlign: 'center' }"
|
:data="measurePlanTable" style="width: 100%">
|
<el-table-column type="index" min-width="10%" />
|
<el-table-column prop="plannedOrderNumber" label="计划编号" min-width="10%" />
|
<el-table-column prop="palanDate" label="计划日期" min-width="10%">
|
<template lot-scope="scope">
|
<!-- {{ scope.row.palanDate }} -->
|
</template>
|
</el-table-column>
|
<el-table-column prop="status" label="计划状态" min-width="6%">
|
<template slot-scope="scope">
|
<div v-if="scope.row.status == 1">
|
<span style="color: green;">已完成</span>
|
</div>
|
<div v-else>
|
<span style="color: red;">未完成</span>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column prop="measurePerson" label="计划负责人" min-width="12%" />
|
<el-table-column prop="createPerson" label="创建人" min-width="10%" />
|
<el-table-column label="创建时间" prop="createTime" min-width="10%" />
|
<el-table-column prop="id" label="操作" min-width="15%">
|
<template slot-scope="scope">
|
<el-button type="text" size="small" @click="lookPalan(scope.row.id)">查看计量履历</el-button>
|
<el-button type="text" size="small">查看附件</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<!-- 分页器 -->
|
<div style="display: flex;justify-content: end;padding: 10px 0;">
|
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
:current-page="currentPage" :page-sizes="[10, 20, 30]" :page-size="pageSize"
|
layout="total, sizes, prev, pager, next, jumper" :total="total">
|
</el-pagination>
|
</div>
|
</div>
|
</div>
|
<div>
|
<el-button v-if="selectInfoBtn" @click="combackLookPlan"
|
style="position: fixed;top: 43px;right: 14px; z-index: 1000;" type="primary" icon="el-icon-refresh-left"
|
size="mini" plain>返回</el-button>
|
<div v-if="addBtn"
|
style="display: flex;justify-content: center;width: 10%;position: fixed;top: 43px;right: 14px; z-index: 1000;">
|
<el-button @click="addTop = -82; addBtn = false;lookVisible= false" size="mini" style="width: 60px;">返回</el-button>
|
<el-button size="mini" @click="measureAdd" style="width: 60px;" type="primary">保存</el-button>
|
</div>
|
</div>
|
<div
|
:style="`position: absolute;top:${addTop}vh;left: 9px;transition: 1s;width: 99%;height: 82vh;background-color: #fff;z-index: 21;`">
|
<Add ref="add" />
|
</div>
|
<div id="myMOdel"
|
:style="`position: absolute;transition: 1s;top:${mymodelTop}px; left: 9px; width: 99%; height: 100vh; background-color: #fff;z-index: 20;`">
|
<el-col :span="10">
|
<p style="font-size: 13px;padding-left: 40px;">计划信息</p>
|
</el-col>
|
<el-col>
|
<el-form :model="planInfo" style="padding-left: 150px;color: #9b9898;">
|
<el-form-item>
|
<el-col :span="8">计划编号:<span style="color: black;">{{ planInfo.plannedOrderNumber }}</span></el-col>
|
<el-col :span="8">负责人:<span style="color: black;">{{ planInfo.measurePerson }}</span></el-col>
|
<el-col :span="8">计划时间:<span style="color: black;">{{ planInfo.planDate }}</span></el-col>
|
</el-form-item>
|
<el-form-item>
|
<el-col :span="8">计量单位:<span style="color: black;">{{ planInfo.unit }}</span></el-col>
|
<el-col :span="8">创建人:<span style="color: black;">{{ planInfo.createPerson }}</span></el-col>
|
<el-col :span="8">创建时间:<span style="color: black;">{{ planInfo.createTime }}</span></el-col>
|
</el-form-item>
|
</el-form>
|
</el-col>
|
<el-col>
|
<el-col style="font-size: 13px;padding-left: 55px;">
|
计量信息
|
</el-col>
|
<el-col>
|
<el-progress style="width: 95%;padding-left: 40px;margin-top: 20px;" :percentage="6" :stroke-width="2"
|
:show-text="false"></el-progress>
|
</el-col>
|
</el-col>
|
<el-col style="width:93%;height: 20vh;margin-top: 30px; margin-left: 40px;">
|
<el-table max-height="300" :data="measureData">
|
<el-table-column type="index" label="序号" />
|
<el-table-column prop="equipmentCode" label="仪器设备编号" />
|
<el-table-column prop="equipmentName" label="仪器设备名称" />
|
<el-table-column prop="measuringRange" label="测量范围" />
|
<el-table-column prop="termValidity" label="计算周期">
|
<template slot-scope="scope">
|
{{ scope.row.termValidity }}月
|
</template>
|
</el-table-column>
|
<el-table-column prop="result" label="计算结果">
|
<template slot-scope="scopeResult">
|
<div v-if="scopeResult.row.result === 1">
|
<span style="color: rgb(78, 210, 16);">正常</span>
|
</div>
|
<div v-else-if="scopeResult.row.result === 2">
|
<span style="color: rgb(27, 202, 233);">矫正后可用</span>
|
</div>
|
<div v-else-if="scopeResult.row.result == '' || scopeResult.row.result == null">
|
<span style="color: #424744;">暂未计量</span>
|
</div>
|
<div v-else>
|
<span style="color: red;">失准</span>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column label="计算日期">
|
<template slot-scope="scopeEndDate">
|
<span v-if="scopeEndDate.row.endDate != '' && scopeEndDate.row.endDate != null">{{
|
scopeEndDate.row.endDate
|
}}</span>
|
<span v-else>无</span>
|
</template>
|
</el-table-column>
|
<el-table-column prop="validit" label="计算有效期" />
|
<el-table-column prop="measurementName" label="负责人" />
|
<el-table-column prop="imCreateTime" label="创建日期" />
|
<el-table-column prop="measurementName" label="创建人" />
|
<el-table-column prop="measurementUnit" label="计量单位" />
|
<el-table-column prop="code" label="计量编号" />
|
<el-table-column prop="equipmentCode" label="操作">
|
<template slot-scope="scope">
|
<a @click="measureUp(scope)" style="color: deepskyblue;">计量</a>
|
</template>
|
</el-table-column>
|
</el-table>
|
</el-col>
|
<el-col style="width: 93%;margin-left: 40px; margin-top: 250px;display: flex;justify-content: end;">
|
<el-pagination @size-change="handleSizeChangePlan" @current-change="handleCurrentChangePllan"
|
:current-page="currentPagePlan" :page-sizes="[5, 10]" :page-size="pageSizePlan"
|
layout="total, sizes, prev, pager, next, jumper" :total="totalPlan">
|
</el-pagination>
|
</el-col>
|
</div>
|
<el-dialog class="measureForm" title="计量" :visible.sync="dialogVisible">
|
<el-form label-position="top" ref="upmeasureForm" :model="measureUpInfo">
|
<el-row :gutter="20">
|
<el-col :span="24">
|
<el-form-item label="检定有效期" prop="date"
|
:rules="[{ required: true, message: '请选择检定有效期', trigger: 'change' }]">
|
<el-date-picker v-model="measureUpInfo.date" type="date" placeholder="选择日期">
|
</el-date-picker>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="不确定度" prop="uncertainty"
|
:rules="[{ required: true, message: '请填写不确定度', trigger: 'blur' }]">
|
<el-input placeholder="请填写不确定度" v-model="measureUpInfo.uncertainty" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="结果" prop="result" :rules="[{ required: true, message: '请选择结果', trigger: 'change' }]">
|
<el-select v-model="measureUpInfo.result" clearable filterable :allow-create="true" placeholder="请选择结果"
|
style="width:100%">
|
<el-option v-for="item in result" :key="item.id" :label="item.label" :value="item.value" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="24">
|
<el-form-item label="性能指标">
|
<el-input v-model="measureUpInfo.performanceIndex" type="textarea" :rows="2" placeholder="请输入内容" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="24">
|
<el-form-item label="备注">
|
<el-input v-model="measureUpInfo.remarks" type="textarea" :rows="2" placeholder="请输入内容" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="24">
|
<el-form-item label="">
|
<el-upload class="upload-demo" action="#" :on-change="handleUploadupdated" :auto-upload="false">
|
<el-button size="small" type="primary">点击上传</el-button>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<span slot="footer" class="dialog-footer">
|
<el-button type="primary" @click="upMeasure">确 定</el-button>
|
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { getPlanPageList, getStandingPageList, getPlanMeasureInstrument, limitGetPlanMeasureRequest, updateMetricalInformationInfo } from '@/api/laboratory/measure'
|
import { default as Add } from "./Add.vue";
|
export default {
|
components: {
|
Add: () => import('./Add.vue')
|
},
|
data() {
|
return {
|
dialogVisible: false,
|
tableIndex: null,
|
selectInfoBtn: false,
|
addBtn: false,
|
measureUpInfo: {
|
id: null,
|
code: null,
|
result: null,
|
date: null,
|
uncertainty: null,
|
performanceIndex: null,
|
remarks: null,
|
file: null,
|
termValidity: null
|
},
|
result: [{
|
label: '合格',
|
value: 1
|
}, {
|
label: '矫正后可用',
|
value: 2
|
}, {
|
label: '不合格',
|
value: 3
|
}],
|
searchData: {
|
code: '',
|
name: '',
|
measureunit: ''
|
},
|
radioValue: 0,
|
options: [{
|
value: 0,
|
label: '计量台账'
|
}, {
|
value: 1,
|
label: '计量计划'
|
}],
|
measureLedgerTable: [],
|
measurePlanTable: [],
|
currentPage: 1,
|
pageSize: 10,
|
total: 0,
|
currentPagePlan: 1,
|
pageSizePlan: 10,
|
totalPlan: 0,
|
direction: 'rtl',
|
lookVisible: false,
|
measureData: [],
|
planInfo: {
|
plannedOrderNumber: 7897897987,
|
measurePerson: '某某人',
|
planDate: "2021-09-08 ~ 2024-08-09",
|
unit: '某某检测局',
|
createPerson: '某某负责人',
|
createTime: '2021-09-08'
|
},
|
mymodelTop: -1000,//14
|
addTop: -85,
|
planId: 0
|
}
|
},
|
created() {
|
this.getStandingPageList()
|
// this.getPlanPageList()
|
},
|
methods: {
|
upResult() {
|
this.measureData[this.tableIndex].result = this.resultUp
|
|
},
|
async upMeasure() {
|
let res = await updateMetricalInformationInfo(this.measureUpInfo)
|
if (res) {
|
this.$message({
|
message: '操作成功!',
|
type: 'success'
|
});
|
this.limitGetPlanMeasureInstrument()
|
this.dialogVisible = false
|
}
|
},
|
handleUploadupdated() {
|
|
},
|
measureUp(scope) {
|
this.dialogVisible = true
|
this.tableIndex = scope.$index
|
this.measureUpInfo.result = scope.row.result
|
this.measureUpInfo.code = scope.row.code
|
this.measureUpInfo.date = scope.row.endDate
|
this.measureUpInfo.id = scope.row.imId
|
this.measureUpInfo.uncertainty = scope.row.uncertainty
|
this.measureUpInfo.performanceIndex = scope.row.performanceIndex
|
this.measureUpInfo.remarks = scope.row.remarks
|
this.measureUpInfo.termValidity = scope.row.termValidity
|
},
|
async measureAdd() {
|
let res = await this.$refs.add.add()
|
if (!res) {
|
return
|
}
|
this.addTop = -82
|
this.$message({
|
message: '操作成功!',
|
type: 'success'
|
});
|
this.lookVisible = false
|
this.addBtn = false
|
// this.limitGetPlanMeasureInstrument()
|
this.getPlanPageList()
|
},
|
async handleSizeChangePlan(num) {
|
this.pageSizePlan = num
|
this.currentPage
|
await this.limitGetPlanMeasureInstrument()
|
},
|
handleCurrentChangePllan(num) {
|
this.currentPagePlan = num;
|
this.limitGetPlanMeasureInstrument();
|
},
|
addPlan() {
|
this.addTop = 2
|
this.lookVisible = true
|
this.$parent.mainShowAdd()
|
this.addBtn = true
|
},
|
async limitGetPlanMeasureInstrument() {
|
let param = {
|
id: this.planId,
|
currentPage: this.currentPagePlan,
|
pageSize: this.pageSizePlan
|
}
|
const res = await limitGetPlanMeasureRequest(param);
|
console.log(res.data.total);
|
// this.totalPlan = res.data.taotal;
|
this.measureData = res.data.list;
|
console.log(this.totalPlan);
|
},
|
lookPalan(id) {
|
this.planId = id
|
this.getPlanAndInfoAndIns(id)
|
this.lookVisible = true
|
this.mymodelTop = 2
|
this.selectInfoBtn = true
|
this.$parent.triggerMainBtnPlan()
|
},
|
async getPlanAndInfoAndIns(id) {
|
let res = await getPlanMeasureInstrument({ "id": id, "currentPage": this.currentPagePlan, "pageSize": this.pageSize });
|
for (const key in res.data.list) {
|
this.planInfo[key] = res.data.list[key]
|
}
|
this.planInfo.planDate = this.planInfo.beginTime + " ~ " + this.planInfo.endTime
|
this.planInfo.metricalInfoAndInsList.forEach(item => {
|
if (item.endDate != '' && item.endDate != null) {
|
item.validit = this.addMonths(item.endDate, item.termValidity)
|
} else {
|
item.validit = '无'
|
}
|
})
|
this.measureData = this.planInfo.metricalInfoAndInsList
|
this.totalPlan = res.data.total
|
},
|
combackLookPlan() {
|
this.lookVisible = false
|
this.mymodelTop = -1000
|
this.selectInfoBtn = false
|
},
|
blurSearch() {
|
if (this.radioValue === 1) {
|
}
|
},
|
handleClose() {
|
this.drawer = false
|
},
|
handleCurrentChange(num) {
|
this.currentPage = num
|
this.radioValue ? this.getPlanPageList() : this.getStandingPageList()
|
},
|
handleSizeChange(num) {
|
this.pageSize = num
|
this.radioValue ? this.getPlanPageList() : this.getStandingPageList()
|
},
|
async getStandingPageList() {
|
let param = {
|
currentPage: this.currentPage, pageSize: this.pageSize,
|
code: this.searchData.code, name: this.searchData.name, unit: this.searchData.measureunit
|
}
|
const res = await getStandingPageList(param)
|
this.measureLedgerTable = res.data.records
|
this.total = res.data.total
|
this.measureLedgerTable.forEach(item => {
|
let dateStr = ''
|
let dateArr = item.createTime
|
dateStr = dateArr[0] + "-" + dateArr[1] + "-" + dateArr[2]
|
item.createTime = dateStr
|
let endArr = item.endDate
|
item.endDate = endArr[0] + "-" + endArr[1] + "-" + endArr[2]
|
item.validit = this.addMonths(item.endDate, item.termValidity)
|
})
|
},
|
addMonths(yearMonthDay, monthNum) {
|
var arr = yearMonthDay.split('-');//2020-08-19或2020-08
|
var year = parseInt(arr[0]);
|
var month = parseInt(arr[1]);
|
month = month + monthNum;
|
if (month > 12) {//月份加
|
var yearNum = parseInt((month - 1) / 12);
|
month = month % 12 == 0 ? 12 : month % 12;
|
year += yearNum;
|
} else if (month <= 0) {//月份减
|
month = Math.abs(month);
|
var yearNum = parseInt((month + 12) / 12);
|
year -= yearNum;
|
}
|
month = month < 10 ? "0" + month : month;
|
return year + "-" + month + "-" + arr[2];
|
},
|
search() {
|
this.getStandingPageList()
|
},
|
searchPlan(){
|
this.getPlanPageList()
|
},
|
reset(formName) {
|
this.searchData.name = ''
|
this.searchData.code = ''
|
this.searchData.measureunit = ''
|
},
|
radioclick() {
|
this.radioValue ? this.getPlanPageList() : this.getStandingPageList()
|
this.reset()
|
},
|
async getPlanPageList() {
|
// console.log(111);
|
let param = {
|
currentPage: this.currentPage,
|
pageSize: this.pageSize,
|
plannedOrderNumber: this.searchData.code
|
}
|
const res = await getPlanPageList(param)
|
res.data.list.forEach(item => {
|
item.palanDate = item.beginTime + " ~ " + item.endTime
|
})
|
this.measurePlanTable = res.data.list
|
this.total = res.data.total
|
console.log(333);
|
},
|
async lookMeasurement(code) {
|
},
|
}
|
}
|
</script>
|
|
<style scoped lang="scss">
|
.top-bar {
|
margin: -25px -15px;
|
background: #fff;
|
display: flex;
|
justify-content: space-between;
|
padding: 5px 24px 0px 24px;
|
|
.sermargin {
|
margin-right: 60px;
|
}
|
}
|
|
.rightBtn {
|
margin-right: 50px
|
}
|
|
.library-table {
|
background-color: #fff;
|
flex: 1;
|
margin: 0px -15px;
|
margin-top: 40px;
|
display: flex;
|
flex-direction: column;
|
|
.table-header {
|
padding: 20px;
|
display: flex;
|
justify-content: space-between;
|
|
.el-form-item {
|
margin-bottom: 30px !important;
|
}
|
}
|
|
.table-box {
|
padding: 0px 20px;
|
margin-top: 0px;
|
flex: 1;
|
background: #fff;
|
/* padding: 20px 20px 10px 20px; */
|
display: flex;
|
flex-direction: column;
|
|
.el-table {
|
flex: 1;
|
}
|
|
>div:nth-child(2) {
|
display: flex;
|
justify-content: end;
|
margin: 10px 0;
|
}
|
}
|
}
|
</style>
|