Merge remote-tracking branch 'origin/master'
# Conflicts:
# src/layout/components/AppMain.vue
| | |
| | | name: 'App' |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | #app{ |
| | | overflow: hidden !important; |
| | | } |
| | | |
| | | .breadcrumb-container{ |
| | | height: 40px; |
| | | } |
| | | .app-main{ |
| | | margin-top: 41px !important; |
| | | } |
| | | |
| | | .el-menu-item{ |
| | | width: 100%; |
| | | } |
| | | |
| | | /* å
¨å±æ¨¡ææ¡æ ·å¼ */ |
| | | .el-dialog{ |
| | | border-radius: 10px; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .el-dialog__header,.el-message-box__header { |
| | | box-sizing: border-box; |
| | | height: 46px; |
| | | border-bottom: 1px solid rgb(238, 238, 238); |
| | | padding: 0px; |
| | | padding-left: 18px; |
| | | display: flex; |
| | | align-items: center; |
| | | background-color: #069cff; |
| | | } |
| | | |
| | | .el-dialog__header *{ |
| | | font-size: 16px !important; |
| | | color: #fff; |
| | | } |
| | | |
| | | .el-dialog__headerbtn .el-dialog__close{ |
| | | color: #fff; |
| | | top: -20px; |
| | | } |
| | | |
| | | .el-dialog__headerbtn{ |
| | | top: initial; |
| | | } |
| | | |
| | | .el-dialog__footer .el-button * { |
| | | font-size: 14px !important; |
| | | } |
| | | |
| | | .el-dialog__footer .el-button { |
| | | height: 36px; |
| | | border: 1px solid rgba(190, 190, 190, 0.44); |
| | | box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41); |
| | | padding: 0 14px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | export function getSupplierList(params) { |
| | | return request({ |
| | | url: '/qualificationRate/getSupplierList', |
| | | method: 'get', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * æ ·ååæ ¼ç |
| | | * @param {} params |
| | | * @returns |
| | | */ |
| | | export function getTestSampleStatistics(params) { |
| | | return request({ |
| | | url: '/qualificationRate/getTestSampleStatistics', |
| | | method: 'get', |
| | | params |
| | | }) |
| | | } |
| | | /** |
| | | * ä¾åºååæ ¼ç |
| | | * @param {} params |
| | | * @returns |
| | | */ |
| | | export function getSupplierNoPassStatistics(params) { |
| | | return request({ |
| | | url: '/qualificationRate/getSupplierNoPassStatistics', |
| | | method: 'get', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 项ç®åæ ¼ç |
| | | * @param {} params |
| | | * @returns |
| | | */ |
| | | export function getNoPassProjectStatistics(params) { |
| | | return request({ |
| | | url: '/qualificationRate/getNoPassProjectStatistics', |
| | | method: 'get', |
| | | params |
| | | }) |
| | | } |
| | |
| | | method: 'get', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | //è·åuserå表å仪å¨å表 |
| | | export function getListUserAndListIns(params) { |
| | | return request({ |
| | | url: '/metering-plan/getListUserAndListIns', |
| | | method: 'get', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | //æ·»å 计å以å计éä¿¡æ¯ |
| | | export function addPlanAndMeasure(data) { |
| | | return request({ |
| | | url: '/metering-plan/addPlanAndMeasure', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //ä¿®æ¹è®¡é |
| | | export function updateMetricalInformationInfo(data) { |
| | | return request({ |
| | | url: '/metrical-information/updateMetricalInformationInfo', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | const url = { |
| | | } |
| | | |
| | | export default function(Vue) { |
| | | //æ·»å å
¨å±API |
| | | Vue.prototype.$url = url |
| | | } |
| | |
| | | data |
| | | }) |
| | | } |
| | | |
| | | export function postFile(path, data) { |
| | | return request({ |
| | | url: path, |
| | | method: 'post', |
| | | headers: { |
| | | 'Content-Type': 'multipart/form-data' |
| | | }, |
| | | data |
| | | }) |
| | | } |
| | |
| | | </el-col> |
| | | <el-col :span="12" style="background-color: #fff;display: flex;justify-content: end; align-items: center;"> |
| | | <el-button v-if="backPlan" type="primary" icon="el-icon-refresh-left" size="mini" plain @click="backPlanUp">è¿å</el-button> |
| | | <el-button v-if="add" size="mini" @click="breadd" style="width: 60px;" type="primary">ä¿å</el-button> |
| | | <el-col :span="1"></el-col> |
| | | </el-col> |
| | | </div> |
| | |
| | | data() { |
| | | return { |
| | | levelList: null, |
| | | backPlan: false |
| | | backPlan: false, |
| | | add: false |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | this.$parent.combackPlan() |
| | | this.backPlan=false |
| | | }, |
| | | breadd(){ |
| | | this.add=false |
| | | this.$parent.indexAdd() |
| | | }, |
| | | showadd(){ |
| | | this.add=true |
| | | }, |
| | | triggerBtnPlan(){ |
| | | this.backPlan?this.backPlan=false:this.backPlan=true |
| | | }, |
| | |
| | | <template> |
| | | <section class="app-main"> |
| | | <transition name="fade-transform" mode="out-in"> |
| | | <router-view |
| | | ref="child" |
| | | @triggerMainBtnPlan="triggerMainBtnPlan" |
| | | :key="key" |
| | | /> |
| | | <router-view ref="child" @triggerMainBtnPlan="triggerMainBtnPlan" :key="key" /> |
| | | </transition> |
| | | </section> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "AppMain", |
| | | name: 'AppMain', |
| | | computed: { |
| | | key() { |
| | | return this.$route.path; |
| | | }, |
| | | return this.$route.path |
| | | } |
| | | }, |
| | | methods: { |
| | | childMethod() { |
| | | this.$refs.child.combackLookPlan(); |
| | | childMethod(){ |
| | | this.$refs.child.combackLookPlan() |
| | | }, |
| | | triggerMainBtnPlan() { |
| | | this.$parent.triggerCombackBtn(); |
| | | triggerMainBtnPlan(){ |
| | | this.$parent.triggerCombackBtn() |
| | | }, |
| | | }, |
| | | }; |
| | | mainAdd(){ |
| | | this.$refs.child.measureAdd() |
| | | }, |
| | | mainShowAdd(){ |
| | | this.$parent.showIndexAdd() |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .app-main { |
| | | /* 88 = navbar+baredcrumb */ |
| | | min-height: calc(100vh - 88px); |
| | | height: calc(100vh - 88px); |
| | | width: 100%; |
| | | position: relative; |
| | | overflow: hidden; |
| | | > div { |
| | | min-height: calc(100vh - 88px); |
| | | >div{ |
| | | height: 100%; |
| | | width: 100%; |
| | | } |
| | | ::v-deep .content-main { |
| | | //è¿æ¯ææé¡µé¢çå
è¾¹è· |
| | | ::v-deep .content-main{//è¿æ¯ææé¡µé¢çå
è¾¹è· |
| | | padding: 24px !important; |
| | | } |
| | | } |
| | | .fixed-header + .app-main { |
| | | .fixed-header+.app-main { |
| | | padding-top: 50px; |
| | | } |
| | | </style> |
| | |
| | | padding-right: 15px; |
| | | } |
| | | } |
| | | .el-menu--popup { |
| | | .el-menu--popup{ |
| | | width: 120px; |
| | | } |
| | | </style> |
| | |
| | | width: 100%; |
| | | height: 50px; |
| | | line-height: 50px; |
| | | background: #fff; |
| | | background: #f8f8f8; |
| | | text-align: center; |
| | | overflow: hidden; |
| | | |
| | |
| | | combackPlan(){ |
| | | this.$refs.main.childMethod() |
| | | }, |
| | | indexAdd(){ |
| | | this.$refs.main.mainAdd() |
| | | }, |
| | | showIndexAdd(){ |
| | | this.$refs.breadcrumb.showadd() |
| | | }, |
| | | triggerCombackBtn(){ |
| | | this.$refs.breadcrumb.triggerBtnPlan() |
| | | } |
| | |
| | | import '@/icons' // icon |
| | | import '@/permission' // permission control |
| | | |
| | | import url from './api/url.js' |
| | | |
| | | /** |
| | | * If you don't want to use mock-server |
| | | * you want to use MockJs for mock api |
| | |
| | | mockXHR() |
| | | } |
| | | |
| | | Vue.prototype.HaveJson = (val) => { |
| | | return JSON.parse(JSON.stringify(val)) |
| | | } |
| | | |
| | | // set ElementUI lang to EN |
| | | Vue.use(ElementUI, { locale }) |
| | | // 妿æ³è¦ä¸æç element-uiï¼æå¦ä¸æ¹å¼å£°æ |
| | | // Vue.use(ElementUI) |
| | | |
| | | Vue.use(url); |
| | | |
| | | Vue.config.productionTip = false |
| | | |
| | | new Vue({ |
| | |
| | | { |
| | | path: 'planAssignments', |
| | | name: 'PlanAssignments', |
| | | component: () => import('@/views/experiment/planAssignments/index'), |
| | | component: () => import('@/views/experiment/planAssignments/plan'), |
| | | meta: { title: 'æ£éªè®¡å', icon: 'tree' } |
| | | }, |
| | | { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export function dateFormat(longTypeDate) { |
| | | var dateTypeDate = ""; |
| | | var date = new Date(); |
| | | date.setTime(longTypeDate); |
| | | dateTypeDate += date.getFullYear(); //å¹´ |
| | | dateTypeDate += "-" + getMonth(date); //æ |
| | | dateTypeDate += "-" + getDay(date); //æ¥ |
| | | return dateTypeDate; |
| | | } |
| | | |
| | | //è¿å 01-12 çæä»½å¼ |
| | | function getMonth(date) { |
| | | var month = ""; |
| | | month = date.getMonth() + 1; //getMonth()å¾å°çæä»½æ¯0-11 |
| | | if (month < 10) { |
| | | month = "0" + month; |
| | | } |
| | | return month; |
| | | } |
| | | //è¿å01-30çæ¥æ |
| | | function getDay(date) { |
| | | var day = ""; |
| | | day = date.getDate(); |
| | | if (day < 10) { |
| | | day = "0" + day; |
| | | } |
| | | return day; |
| | | } |
| | | function datetimeFormat(longTypeDate) { |
| | | var dateTypeDate = ""; |
| | | var date = new Date(); |
| | | date.setTime(longTypeDate); |
| | | dateTypeDate += date.getFullYear(); //å¹´ |
| | | dateTypeDate += "-" + this.getMonth(date); //æ |
| | | dateTypeDate += "-" + this.getDay(date); //æ¥ |
| | | return dateTypeDate; |
| | | } |
| | | function format(d) { |
| | | var y = d.getFullYear(); |
| | | var m = d.getMonth() + 1; |
| | | if (m < 10) { |
| | | m = "0" + m; |
| | | } |
| | | var day = d.getDate(); |
| | | if (day < 10) { |
| | | day = "0" + day; |
| | | } |
| | | return y + "-" + m + "-" + day; |
| | | } |
| | |
| | | <div class="content-main"> |
| | | <div class="top-bar"> |
| | | <el-form ref="form" :inline="true" :rules="rules" :model="searchData" label-position="top"> |
| | | <el-form-item label="æ£æµæ¥æ:" class="sermargin" prop="date"> |
| | | <el-date-picker |
| | | v-model="searchData.date" |
| | | type="daterange" |
| | | range-separator="è³" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="æ£éªç±»å:" class="sermargin" prop="type"> |
| | | <el-select v-model="searchData.type" placeholder="å
¨é¨"> |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç©æåç»:"> |
| | | <el-button type="primary" icon="el-icon-plus" class="chooseMaterialBtn" >éæ©ç©æåç»</el-button> |
| | | </el-form-item> |
| | | <div class="rightBtn"> |
| | | <el-form-item> |
| | | <el-button type="primary" plain size="mini">æ¸
空</el-button> |
| | | <el-button type="primary" @click="search" size="mini">æ¥è¯¢</el-button> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | <el-form-item label="æ£æµæ¥æ:" class="sermargin" prop="date"> |
| | | <el-date-picker v-model="searchData.date" type="daterange" range-separator="è³" start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="æ£éªç±»å:" class="sermargin" prop="type"> |
| | | <el-select v-model="searchData.type" placeholder="å
¨é¨"> |
| | | <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä¾åºå:"> |
| | | <el-select v-model="searchData.supplier" placeholder="å
¨é¨"> |
| | | <el-option v-for="item in supplier" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <div class="rightBtn"> |
| | | <el-form-item> |
| | | <el-button type="primary" plain size="mini">æ¸
空</el-button> |
| | | <el-button type="primary" @click="search" size="mini">æ¥è¯¢</el-button> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | <div class="top-bar-copy"></div> |
| | | <div class="chart-content"> |
| | | <div class="qualified-wrapper"> |
| | | <div style="margin-left: 20px;padding:20px 0px;font-size:18px">æ£æµæ¹æ¬¡åæ ¼çç»è®¡</div> |
| | | <div style="margin-left: 20px;padding:20px 0px;font-size:18px">æ£æµæ ·ååæ ¼çç»è®¡</div> |
| | | <div class="qualified" ref="qualified"></div> |
| | | </div> |
| | | <div class="unqualified"> |
| | | <div class="firstBox-wrapper" > |
| | | <div style="margin-left: 20px;padding:20px 0px;font-size:18px">ä¾åºåä¸åæ ¼æ¬¡æ°ç»è®¡</div> |
| | | <div class="firstBox" ref="unqualified_provider"></div> |
| | | </div> |
| | | <div class="secondBox-wrapper" > |
| | | <div class="firstBox-wrapper"> |
| | | <div style="margin-left: 20px;padding:20px 0px;font-size:18px">ä¾åºåä¸åæ ¼æ¬¡æ°ç»è®¡</div> |
| | | <div class="firstBox" ref="unqualified_provider"></div> |
| | | </div> |
| | | <div class="secondBox-wrapper"> |
| | | <div class="secondBox_header"> |
| | | <div style="font-size:18px">ä¸åæ ¼é¡¹ç®ç»è®¡</div> |
| | | <el-radio-group v-model="type"> |
| | | <el-radio-button v-for="item in radiooptions" :key="item.value" :label="item.value" >{{ item.label }}</el-radio-button> |
| | | <el-radio-button v-for="item in radiooptions" :key="item.value" :label="item.value">{{ item.label |
| | | }}</el-radio-button> |
| | | </el-radio-group> |
| | | </div> |
| | | <div class="secondBox" ref="unqualified_project"></div> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="bottom"> |
| | | <el-button type="primary" size="mini" >æ°æ®å¯¼åº</el-button> |
| | | <el-button type="primary" size="mini">æ°æ®å¯¼åº</el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | // æ·»å æ»å¨çå¬äºä»¶ |
| | | window.addEventListener('scroll', function() { |
| | | window.addEventListener('scroll', function () { |
| | | var topBar = document.querySelector('.top-bar'); |
| | | var scrollTop = window.pageYOffset || document.documentElement.scrollTop; |
| | | |
| | |
| | | }) |
| | | |
| | | import * as echarts from 'echarts' |
| | | import { getSupplierList,getTestSampleStatistics,getSupplierNoPassStatistics,getNoPassProjectStatistics } from '@/api/experiment/passRateStatistics'; |
| | | import { dateFormat } from '../../../utils/dateUtil' |
| | | export default { |
| | | data(){ |
| | | data() { |
| | | return { |
| | | searchData:{ |
| | | supplier: [], |
| | | searchData: { |
| | | date: [], |
| | | type: 0, |
| | | group: '' |
| | | type: null, |
| | | supplier: null |
| | | }, |
| | | options:[ |
| | | options: [ |
| | | { |
| | | label: 'éè´å
¥åº', |
| | | label: 'åææ', |
| | | value: 0 |
| | | }, |
| | | { |
| | | label: 'xxxx', |
| | | label: 'æå', |
| | | value: 1 |
| | | }, |
| | | { |
| | | label: 'å§æå', |
| | | value: 2 |
| | | } |
| | | ], |
| | | radiooptions:[ |
| | | radiooptions: [ |
| | | { |
| | | label: 'ç¯å½¢é¥¼å¾', |
| | | value: 0 |
| | |
| | | ], |
| | | type: 0, |
| | | rules: { |
| | | date: [{required: true, message: '请è¾å
¥è´¦å·', trigger: 'blur'}], |
| | | type: [{required: true, message: '请è¾å
¥åå', trigger: 'blur'}] |
| | | // date: [{ required: true, message: '请è¾å
¥è´¦å·', trigger: 'blur' }], |
| | | // type: [{ required: true, message: '请è¾å
¥åå', trigger: 'blur' }] |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getSupplierList() |
| | | this.getTestSampleStatistics() |
| | | this.getSupplierNoPassStatistics() |
| | | const chartDom_qualified = this.$refs.qualified; |
| | | const chartDom_unqualified_provider = this.$refs.unqualified_provider; |
| | | const chartDom_unqualified_project = this.$refs.unqualified_project; |
| | |
| | | const myChart2 = echarts.init(chartDom_unqualified_provider); |
| | | const myChart3 = echarts.init(chartDom_unqualified_project); |
| | | |
| | | /** |
| | | * æ£æµåæ ¼çç»è®¡ |
| | | */ |
| | | const option_qualified = { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | |
| | | } |
| | | ] |
| | | }; |
| | | const option_unqualified1 ={ |
| | | /** |
| | | * ä¾åºå |
| | | */ |
| | | const option_unqualified1 = { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { // åæ è½´æç¤ºå¨ï¼åæ è½´è§¦åææ |
| | | type: 'shadow' // é»è®¤ä¸ºç´çº¿ï¼å¯é为ï¼'line' | 'shadow' |
| | | }, |
| | | formatter: function(params) { |
| | | formatter: function (params) { |
| | | let tooltip = params[0].name + '<br/>'; |
| | | params.forEach(function(item) { |
| | | params.forEach(function (item) { |
| | | tooltip += item.marker + ' ' + item.seriesName + ': ' + item.value.toFixed(2) + '%<br/>'; // å°æ°æ®ä¿ç两ä½å°æ°å¹¶è½¬ä¸ºç¾åæ¯å½¢å¼ |
| | | }); |
| | | return tooltip; |
| | |
| | | data: ['ä¾åºå1', 'ä¾åºå2', 'ä¾åºå3', 'ä¾åºå4'] |
| | | }, |
| | | yAxis: [ |
| | | { |
| | | type: 'value', |
| | | axisLabel: { |
| | | formatter: '{value}%' |
| | | } |
| | | { |
| | | type: 'value', |
| | | axisLabel: { |
| | | formatter: '{value}%' |
| | | } |
| | | ], |
| | | } |
| | | ], |
| | | series: [ |
| | | { |
| | | name: 'åæ ¼æ°é', |
| | |
| | | } |
| | | ] |
| | | }; |
| | | /** |
| | | * ä¸åæ ¼é¡¹ç® |
| | | */ |
| | | const option_unqualified2 = { |
| | | legend: { |
| | | orient: 'vertical', |
| | |
| | | |
| | | myChart1.setOption(option_qualified); |
| | | myChart2.setOption(option_unqualified1); |
| | | if(this.type === 0){ |
| | | if (this.type === 0) { |
| | | myChart3.setOption(option_unqualified2); |
| | | } |
| | | if(this.type === 1){ |
| | | if (this.type === 1) { |
| | | myChart3.setOption(option_unqualified2); |
| | | } |
| | | }, |
| | | methods: { |
| | | search() { |
| | | this.getTestSampleStatistics() |
| | | }, |
| | | dateHandle(){ |
| | | let data=JSON.parse(JSON.stringify(this.searchData)) |
| | | if(this.searchData.date.length!=0&&this.searchData.date !=[]){ |
| | | data.beginDate=dateFormat(this.searchData.date[0]) |
| | | data.endDate=dateFormat(this.searchData.date[1]) |
| | | } |
| | | data.date=null |
| | | return data |
| | | }, |
| | | async getSupplierList() { |
| | | let res = await getSupplierList() |
| | | res.data.forEach(item => { |
| | | this.supplier.push({ label: item.supplier, value: item.supplier }) |
| | | }) |
| | | }, |
| | | getTestSampleStatistics(){ |
| | | let param= this.dateHandle() |
| | | let res =getTestSampleStatistics(param) |
| | | }, |
| | | getSupplierNoPassStatistics(){ |
| | | let param= this.dateHandle() |
| | | getSupplierNoPassStatistics(param) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .content-main{ |
| | | height:100%; |
| | | .content-main { |
| | | height: 100%; |
| | | width: 100%; |
| | | .top-bar{ |
| | | |
| | | .top-bar { |
| | | position: absolute; |
| | | width: 99%; |
| | | top: 0; |
| | | left:0; |
| | | left: 0; |
| | | z-index: 999; |
| | | margin-top: 5px; |
| | | margin-left: 9.5px; |
| | |
| | | display: flex; |
| | | justify-content: space-between; |
| | | padding: 5px 24px 0px 24px; |
| | | transition: position 0.3s ease; |
| | | .el-form{ |
| | | transition: position 0.3s ease; |
| | | |
| | | .el-form { |
| | | width: 100%; |
| | | .chooseMaterialBtn{ |
| | | |
| | | .chooseMaterialBtn { |
| | | background-color: #fff; |
| | | border-color: rgba(192,196,204,0.5); |
| | | border-color: rgba(192, 196, 204, 0.5); |
| | | color: gray; |
| | | width: 220px; |
| | | } |
| | | } |
| | | .sermargin{ |
| | | |
| | | .sermargin { |
| | | margin-right: 60px; |
| | | } |
| | | .rightBtn{ |
| | | display:flex; |
| | | justify-content:end; |
| | | |
| | | .rightBtn { |
| | | display: flex; |
| | | justify-content: end; |
| | | margin-right: 20px; |
| | | margin-top: -40px; |
| | | margin-bottom: -10px; |
| | | } |
| | | } |
| | | |
| | | .top-bar.fixed { |
| | | position: fixed; |
| | | top: 0.45rem; |
| | | left: 0.52rem; |
| | | width:93.8%; |
| | | width: 93.8%; |
| | | } |
| | | .top-bar-copy{ |
| | | |
| | | .top-bar-copy { |
| | | width: 100%; |
| | | height: 12vh; |
| | | } |
| | | .chart-content{ |
| | | |
| | | .chart-content { |
| | | margin: 0px -15px; |
| | | margin-bottom: 60px; |
| | | .qualified-wrapper{ |
| | | |
| | | .qualified-wrapper { |
| | | // margin-top: 14vh; |
| | | background-color: #fff; |
| | | width: 100%; |
| | | height:50vh; |
| | | height: 50vh; |
| | | } |
| | | .qualified{ |
| | | |
| | | .qualified { |
| | | width: 100%; |
| | | height: 400px; |
| | | } |
| | | .unqualified{ |
| | | |
| | | .unqualified { |
| | | margin-top: 10px; |
| | | height: 50vh; |
| | | display:flex; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | .firstBox-wrapper{ |
| | | |
| | | .firstBox-wrapper { |
| | | background-color: #fff; |
| | | width:49%; |
| | | .firstBox{ |
| | | width: 49%; |
| | | |
| | | .firstBox { |
| | | width: 100%; |
| | | height: 40vh; |
| | | } |
| | | } |
| | | .secondBox-wrapper{ |
| | | background-color:#fff; |
| | | width:49%; |
| | | .secondBox_header{ |
| | | display:flex; |
| | | |
| | | .secondBox-wrapper { |
| | | background-color: #fff; |
| | | width: 49%; |
| | | |
| | | .secondBox_header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin: 20px 20px; |
| | | } |
| | | .secondBox{ |
| | | |
| | | .secondBox { |
| | | width: 100%; |
| | | height: 40vh; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .bottom{ |
| | | |
| | | .bottom { |
| | | position: fixed; |
| | | width: 95%; |
| | | bottom: 0rem !important; |
| | |
| | | margin: 0px -15px; |
| | | padding: 20px 40px; |
| | | z-index: 999; |
| | | display:flex; |
| | | display: flex; |
| | | justify-content: end; |
| | | background-color: #fff; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <style scoped> |
| | | .plan { |
| | | width: 100%; |
| | | } |
| | | |
| | | .title { |
| | | height: 60px; |
| | | width: calc(100% - 20px); |
| | | background-color: white; |
| | | margin: 5px 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 0 30px; |
| | | } |
| | | |
| | | .thing { |
| | | margin: 10px; |
| | | padding: 15px; |
| | | background-color: white; |
| | | height: calc(100vh - 15vh); |
| | | } |
| | | </style> |
| | | <style> |
| | | .plan .has-gutter tr th { |
| | | background-color: #f5f7fa !important; |
| | | color: #333; |
| | | } |
| | | |
| | | .plan .cell { |
| | | color: #333; |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | | <div class="plan"> |
| | | <div class="title"> |
| | | <span>项ç®åç§°ï¼</span> |
| | | <el-input v-model="search.name" size="medium" style="width: 200px;margin-right: 20px;"></el-input> |
| | | <span>æ£éªæ¶é´ï¼</span> |
| | | <el-date-picker v-model="search.date" type="daterange" range-separator="è³" start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" size="medium" style="margin-right: 20px;"> |
| | | </el-date-picker> |
| | | <span>æ£éªäººï¼</span> |
| | | <el-input v-model="search.userName" size="medium" style="width: 200px;margin-right: 20px;"></el-input> |
| | | <el-button size="small" type="primary">æ¥è¯¢</el-button> |
| | | <el-button size="small">éç½®</el-button> |
| | | </div> |
| | | <div class="thing"> |
| | | <el-table :data="tableData" style="width: 100%;" row-key="id" default-expand-all |
| | | :tree-props="{children: 'children', hasChildren: 'hasChildren'}" :key="upIndex"> |
| | | <el-table-column type="index" width="50" label="åºå·"> |
| | | </el-table-column> |
| | | <el-table-column prop="date" label="ç³è¯·åå·"> |
| | | </el-table-column> |
| | | <el-table-column prop="name" label="æ£éªç»æ"> |
| | | </el-table-column> |
| | | <el-table-column prop="address" label="å°å"> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" width="80"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" type="primary" v-if="isIfReport(scope.row)">䏿¥</el-button> |
| | | <el-button size="mini" type="warning" @click="openUpDia(scope.row)" |
| | | v-else-if="scope.row.insId==undefined&&scope.row.address==null">åé
</el-button> |
| | | <el-button size="mini" type="success" @click="openUpInsDia(scope.row)" |
| | | v-else-if="scope.row.insId==undefined&&scope.row.name==null">æ£éª</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <el-dialog title="åé
设å¤å人å" :visible.sync="upDia" width="500px" top="30vh"> |
| | | <div class="body"> |
| | | <el-row style="line-height: 46px;"> |
| | | <el-col :span="4" style="font-size: 14px;text-align: right;">人å:</el-col> |
| | | <el-col :span="16" :offset="1"> |
| | | <el-input v-model="upData.address" size="small" clearable></el-input> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitUpData">ç¡® å®</el-button> |
| | | <el-button @click="upDia = false">å æ¶</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="æ£éª" :visible.sync="upInsDia" width="500px"> |
| | | <div class="body" style="max-height: 50vh;overflow-y: auto;"> |
| | | <el-row style="line-height: 46px;"> |
| | | <el-col :span="4" style="font-size: 14px;text-align: right;">æ ·åç¼ç ï¼</el-col> |
| | | <el-col :span="8">{{upData.date}}</el-col> |
| | | <el-col :span="4" style="font-size: 14px;text-align: right;">æ ·ååç§°ï¼</el-col> |
| | | <el-col :span="8">{{upData.date}}</el-col> |
| | | </el-row> |
| | | <el-row style="line-height: 46px;"> |
| | | <el-col :span="4" style="font-size: 14px;text-align: right;">æ£éªé¡¹ç®ï¼</el-col> |
| | | <el-col :span="8">{{upData.date}}</el-col> |
| | | <el-col :span="4" style="font-size: 14px;text-align: right;">åä½ï¼</el-col> |
| | | <el-col :span="8">{{upData.date}}</el-col> |
| | | </el-row> |
| | | <el-row style="line-height: 46px;"> |
| | | <el-col :span="4" style="font-size: 14px;text-align: right;">æ åå¼ï¼</el-col> |
| | | <el-col :span="8">{{upData.date}}</el-col> |
| | | <el-col :span="4" style="font-size: 14px;text-align: right;">å
æ§å¼ï¼</el-col> |
| | | <el-col :span="8">{{upData.date}}</el-col> |
| | | </el-row> |
| | | <el-row style="line-height: 46px;"> |
| | | <el-col style="text-align: right;"><el-button size="mini" @click="addRes">æ·»å æ£éªå¼</el-button></el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col> |
| | | <el-table :data="upData.res" border style="width: 99.9%;" :key="upIndex2"> |
| | | <el-table-column type="index" width="100" label="åºå·"> |
| | | </el-table-column> |
| | | <el-table-column label="æ£éªå¼"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model.number="scope.row.number" size="small" clearable placeholder="请è¾å
¥" |
| | | @change="(val)=>scope.row.number = isNaN(val)?null:val"> |
| | | </el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" width="60"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" type="text" |
| | | @click.native.prevent="deleteRow(scope.$index, upData.res)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitUpData">æ 交</el-button> |
| | | <el-button @click="upInsDia = false">å æ¶</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | search: { |
| | | name: null, |
| | | date: [], |
| | | userName: null, |
| | | }, |
| | | tableData: [{ |
| | | id: 1, |
| | | insId: 123, |
| | | date: '2016-05-02', |
| | | name: null, |
| | | address: '䏿µ·å¸æ®éåºéæ²æ±è·¯ 1518 å¼', |
| | | children: [{ |
| | | id: 33, |
| | | date: '2016-05-01', |
| | | name: null, |
| | | res: '[{"number": 1},{"number": 2}]', |
| | | address: '䏿µ·å¸æ®éåºéæ²æ±è·¯ 1519 å¼' |
| | | }, { |
| | | id: 34, |
| | | date: '2016-05-01', |
| | | name: null, |
| | | res: '[{"number": 1,"res": "ä¸åæ ¼"},{"number": 2}]', |
| | | address: '䏿µ·å¸æ®éåºéæ²æ±è·¯ 1519 å¼' |
| | | }] |
| | | }, { |
| | | id: 2, |
| | | insId: 123, |
| | | date: '2016-05-04', |
| | | name: null, |
| | | address: '䏿µ·å¸æ®éåºéæ²æ±è·¯ 1517 å¼', |
| | | children: [] |
| | | }, { |
| | | id: 3, |
| | | insId: 123, |
| | | date: '2016-05-01', |
| | | children: [{ |
| | | id: 31, |
| | | date: '2016-05-01', |
| | | name: null, |
| | | res: '[{"number": 1},{"number": 2}]', |
| | | address: '䏿µ·å¸æ®éåºéæ²æ±è·¯ 1519 å¼' |
| | | }, { |
| | | id: 32, |
| | | date: '2016-05-01', |
| | | name: null, |
| | | res: '[]', |
| | | address: null |
| | | }] |
| | | }], |
| | | upDia: false, |
| | | upData: {}, |
| | | upIndex: 0, |
| | | upInsDia: false, |
| | | upIndex2: 0 |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.selectDataList() |
| | | }, |
| | | methods: { |
| | | selectDataList() { |
| | | this.tableData.forEach(a => { |
| | | a.code = '[1]' |
| | | if (a.children != undefined) { |
| | | a.children.forEach(b => { |
| | | b.code = '[2]' |
| | | b.res = JSON.parse(b.res) |
| | | }) |
| | | } |
| | | }) |
| | | this.upIndex++ |
| | | }, |
| | | isIfReport(row) { |
| | | var count = 0 |
| | | if (row.children == undefined) return false |
| | | row.children.forEach(a => { |
| | | if (a.name != null && a.name != undefined) count++ |
| | | }) |
| | | return row.insId != undefined && count == row.children.length |
| | | }, |
| | | openUpDia(row) { |
| | | this.upDia = true |
| | | this.upData = { |
| | | id: row.id, |
| | | address: row.address |
| | | } |
| | | }, |
| | | submitUpData() { |
| | | this.tableData.forEach(a => { |
| | | a.children.forEach(b => { |
| | | if (b.id == this.upData.id) { |
| | | b.address = this.upData.address |
| | | } |
| | | }) |
| | | }) |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.upIndex++ |
| | | this.upDia = false |
| | | }, |
| | | openUpInsDia(row) { |
| | | this.upInsDia = true |
| | | this.upData = this.HaveJson(row) |
| | | }, |
| | | deleteRow(index, rows) { |
| | | rows.splice(index, 1); |
| | | }, |
| | | addRes() { |
| | | this.upData.res.push({ |
| | | "number": null |
| | | }) |
| | | this.upIndex2++ |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <el-form-item> |
| | | <el-col :span="6" style="display: flex;justify-content: space-around;"> |
| | | <span>è´è´£äººï¼</span> |
| | | <el-select v-model="planAddInfo.measurePerson" placeholder="è¯·éæ©æ´»å¨åºå"> |
| | | <el-option label="åºåä¸" value="shanghai"></el-option> |
| | | <el-option label="åºåäº" value="beijing"></el-option> |
| | | <el-select v-model="planAddInfo.measurePerson" placeholder="è¯·éæ©è´è´£äºº"> |
| | | <el-option v-for="item in userList" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="8" style="display: flex;justify-content: space-around;"> |
| | | <span>è®¡åæ¶é´ï¼</span> |
| | | <el-date-picker v-model="planAddInfo.planDate" type="daterange" range-separator="è³" start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ"> |
| | | <el-date-picker v-model="planAddInfo.planDate" type="daterange" range-separator="è³" |
| | | start-placeholder="å¼å§æ¥æ" end-placeholder="ç»ææ¥æ"> |
| | | </el-date-picker> |
| | | </el-col> |
| | | <el-col :span="5"></el-col> |
| | |
| | | :show-text="false"></el-progress> |
| | | </el-col> |
| | | </el-col> |
| | | |
| | | <el-col style="width:93%;height: 20vh;margin-top: 30px; margin-left: 40px;"> |
| | | <el-button icon="el-icon-plus" @click="addcodePointsTable()" style="margin-bottom: 10px;" |
| | | type="primary">æ°å¢è®¡é</el-button> |
| | | <el-table ref="codePointsTable" :cell-style="{ textAlign: 'center' }" |
| | | :header-cell-style="{ border: '0px', background: '#f5f7fa', color: '#606266', boxShadow: 'inset 0 1px 0 #ebeef5', textAlign: 'center' }" |
| | | :data="codePointsTable" style="width: 100%"> |
| | | <el-table-column type="index" label="åºå·" min-width="90" /> |
| | | <el-table-column prop="equipmentPointName" label="仪å¨è®¾å¤åç§°" min-width="150"> |
| | | <el-table-column type="index" v-model="codePointsTable.index" label="åºå·" min-width="90" /> |
| | | <el-table-column prop="equipmentPointName" label="仪å¨è®¾å¤" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <span v-show="!codePointesTableStatus">{{ scope.row.equipmentPoint }}</span> |
| | | <el-input v-show="codePointesTableStatus" v-model="scope.row.equipmentPoint" /> |
| | | <span v-show="!codePointesTableStatus">{{ scope.row.equipmentPointName }}</span> |
| | | <el-select @change="insListChange(scope.row.equipmentPointName,scope)" v-model="scope.row.equipmentPointName" placeholder="è¯·éæ©ä»ªå¨è®¾å¤"> |
| | | <el-option v-for="item in insList" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column prop="measuringRange" label="æµéèå´" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <span v-show="!codePointesTableStatus">{{ scope.row.measuringRange }}</span> |
| | | <el-input v-show="codePointesTableStatus" v-model="scope.row.measuringRange" /> |
| | | <el-input disabled v-show="codePointesTableStatus" v-model="scope.row.measuringRange" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="unit" label="åä½" min-width="150"> |
| | | <el-table-column prop="termValidity" label="计é卿" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <span v-show="!codePointesTableStatus">{{ scope.row.unit }}</span> |
| | | <el-input v-show="codePointesTableStatus" v-model="scope.row.unit" /> |
| | | <span v-show="!codePointesTableStatus">{{ scope.row.termValidity }}</span> |
| | | <el-input disabled v-show="codePointesTableStatus" v-model="scope.row.termValidity" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="descriptiveness" label="æè¿°" min-width="200"> |
| | | <el-table-column prop="result" label="计éç»æ" min-width="200"> |
| | | <template slot-scope="scope"> |
| | | <span v-show="!codePointesTableStatus">{{ scope.row.descriptiveness }}</span> |
| | | <el-input v-show="codePointesTableStatus" v-model="scope.row.descriptiveness" /> |
| | | <span v-show="!codePointesTableStatus">{{ scope.row.result }}</span> |
| | | <el-select v-model="scope.row.result" placeholder="è¯·éæ©"> |
| | | <el-option v-for="item in result" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="descriptiveness" label="æä½" min-width="200"> |
| | | <el-table-column prop="endDate" label="è®¡éæ¥æ" min-width="200"> |
| | | <template slot-scope="scope"> |
| | | <el-tag type="" icon=""></el-tag> |
| | | <span v-show="!codePointesTableStatus">{{ scope.row.endDate }}</span> |
| | | <el-date-picker v-model="scope.row.endDate" type="date" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="index" label="æä½" min-width="200"> |
| | | <template slot-scope="scope"> |
| | | <span><a @click="removetableIndex(scope.row.index)" style="color: deepskyblue;">ä½åº</a></span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import { |
| | | getListUserAndListIns, addPlanAndMeasure |
| | | } from '@/api/laboratory/measure' |
| | | import { dateFormat } from "../../../utils/dateUtil"; |
| | | export default { |
| | | data() { |
| | | return { |
| | | planAddInfo: { |
| | | plannedOrderNumber: 7897897987, |
| | | measurePerson: 'ææäºº', |
| | | planDate: "2021-09-08 ~ 2024-08-09", |
| | | unit: 'æææ£æµå±', |
| | | createPerson: 'ææè´è´£äºº', |
| | | createTime: '2021-09-08' |
| | | plannedOrderNumber: '', |
| | | measurePerson: '', |
| | | planDate: "", |
| | | unit: '', |
| | | createPerson: '', |
| | | createTime: '' |
| | | }, |
| | | codePointsTable: [{ |
| | | id: '', |
| | | "index": 1, |
| | | "equipmentPointName": '', |
| | | "measuringRange": '', |
| | | "termValidity": "", |
| | | "result": null, |
| | | }], |
| | | result: [{ |
| | | label: 'åæ ¼', |
| | | value: 1 |
| | | }, { |
| | | label: 'ç«æ£åå¯ç¨', |
| | | value: 2 |
| | | }, { |
| | | label: 'ä¸åæ ¼', |
| | | value: 3 |
| | | }], |
| | | userList: [], |
| | | insList: [], |
| | | instrumentList:[], |
| | | // ç ç¹è¡¨æ ¼çç¶æï¼æ°æ®å±ç¤ºfalse/æ°å¢è¾å
¥true |
| | | codePointesTableStatus: false, |
| | | } |
| | | }, |
| | | async created() { |
| | | this.codePointsTable = [] |
| | | let res = await getListUserAndListIns() |
| | | res.data.userList.forEach(element => { |
| | | this.userList.push({ label: element.name, value: element.id }) |
| | | }); |
| | | this.instrumentList=res.data.instrumentList |
| | | res.data.instrumentList.forEach(item => { |
| | | this.insList.push({ label: item.equipmentName, value: item.id }) |
| | | }) |
| | | console.log(this.insList); |
| | | }, |
| | | methods: { |
| | | addcodePointsTable() { |
| | | const newObj = { |
| | | index: this.codePointsTable.length + 1, |
| | | equipmentPointName: '', |
| | | measuringRange: '', |
| | | termValidity: "", |
| | | planDate: null, |
| | | }], |
| | | // ç ç¹è¡¨æ ¼çç¶æï¼æ°æ®å±ç¤ºfalse/æ°å¢è¾å
¥true |
| | | codePointesTableStatus: true, |
| | | } |
| | | }, |
| | | methods: { |
| | | // æ°å¢è®¾å¤ç ç¹ |
| | | addNewCodePoints() { |
| | | // |
| | | if (!this.codePointsTable) { |
| | | this.codePointsTable = [] |
| | | result: null, |
| | | endDate: null, |
| | | planDate: null |
| | | } |
| | | const newObj = {} |
| | | newObj.equipmentPointName = '' |
| | | newObj.descriptiveness = '' |
| | | newObj.unit = '' |
| | | newObj.instrumentId = this.equipmentDetail.id |
| | | this.codePointsTable.push(newObj) |
| | | this.codePointesTableStatus = true |
| | | }, |
| | | removetableIndex(id) { |
| | | this.codePointsTable = this.codePointsTable.filter(item => { |
| | | return item.index != id; |
| | | }) |
| | | }, |
| | | async add() { |
| | | console.log(111111); |
| | | this.planAddInfo.startTime = dateFormat(this.planAddInfo.planDate[0]) |
| | | this.planAddInfo.endTime = dateFormat(this.planAddInfo.planDate[1]) |
| | | console.log(this.planAddInfo); |
| | | this.planAddInfo.planDate = null |
| | | this.codePointsTable.forEach(item => { |
| | | if(item.endDate!=null&&item.endDate!=''){ |
| | | item.endDate = dateFormat(item.endDate) |
| | | } |
| | | }) |
| | | console.log(this.codePointsTable); |
| | | let data = {} |
| | | this.codePointsTable.length>0?data = { measureList: this.codePointsTable, plan: this.planAddInfo }:data = {plan: this.planAddInfo } |
| | | let add = await addPlanAndMeasure(data) |
| | | this.planAddInfo={ |
| | | plannedOrderNumber: '', |
| | | measurePerson: '', |
| | | planDate: "", |
| | | unit: '', |
| | | createPerson: '', |
| | | createTime: '' |
| | | } |
| | | this.codePointsTable=[] |
| | | return add.data |
| | | }, |
| | | insListChange(i,s){ |
| | | console.log(i); |
| | | console.log(s.$index); |
| | | let ins= this.instrumentList.filter(item=>{ |
| | | return item.id==i |
| | | })[0] |
| | | this.codePointsTable[s.$index].measuringRange=ins.measuringRange |
| | | this.codePointsTable[s.$index].termValidity=ins.termValidity+'æ' |
| | | } |
| | | } |
| | | } |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div style="position: absolute;top:14px;left: 9px;transition: 1s;width: 99%;height: 82vh;background-color: #fff;z-index: 21;"> |
| | | <Add/> |
| | | <div |
| | | :style="`position: absolute;top:${addTop}px;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: 65vh; background-color: #fff;z-index: 20;`"> |
| | | :style="`position: absolute;transition: 1s;top:${mymodelTop}px; left: 9px; width: 99%; height: 85vh; background-color: #fff;z-index: 20;`"> |
| | | <el-col :span="10"> |
| | | <p style="font-size: 13px;padding-left: 40px;">计åä¿¡æ¯</p> |
| | | </el-col> |
| | |
| | | <el-table-column prop="imCreateTime" label="åå»ºæ¥æ" /> |
| | | <el-table-column prop="measurementName" label="å建人" /> |
| | | <el-table-column prop="measurementUnit" label="计éåä½" /> |
| | | <el-table-column prop="equipmentCode" 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: 90px;display: flex;justify-content: end;"> |
| | | <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, 20]" :page-size="pageSizePlan" |
| | | :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 } from '@/api/laboratory/measure' |
| | | import { getPlanPageList, getStandingPageList, getPlanMeasureInstrument, limitGetPlanMeasureRequest, updateMetricalInformationInfo } from '@/api/laboratory/measure' |
| | | import { default as Add } from "./Add.vue"; |
| | | export default { |
| | | components: { |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | dialogVisible: false, |
| | | tableIndex: null, |
| | | 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: '', |
| | |
| | | currentPagePlan: 1, |
| | | pageSizePlan: 5, |
| | | totalPlan: 0, |
| | | drawer: false, |
| | | direction: 'rtl', |
| | | lookVisible: true, |
| | | lookVisible: false, |
| | | measureData: [], |
| | | planInfo: { |
| | | plannedOrderNumber: 7897897987, |
| | |
| | | createPerson: 'ææè´è´£äºº', |
| | | createTime: '2021-09-08' |
| | | }, |
| | | mymodelTop: -600,//14 |
| | | mymodelTop: -700,//14 |
| | | addTop: -700, |
| | | planId: 0 |
| | | } |
| | | }, |
| | |
| | | // 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 |
| | | }, |
| | | measureAdd() { |
| | | let add = this.$refs.add.add() |
| | | if (add) { |
| | | this.addTop = -700 |
| | | this.$message({ |
| | | message: 'æä½æåï¼', |
| | | type: 'success' |
| | | }); |
| | | this.lookVisible = false |
| | | } |
| | | }, |
| | | async handleSizeChangePlan(num) { |
| | | this.pageSizePlan = num |
| | | await this.limitGetPlanMeasureInstrument() |
| | |
| | | await this.limitGetPlanMeasureInstrument() |
| | | }, |
| | | addPlan() { |
| | | this.drawer = true |
| | | this.addTop = 14 |
| | | this.lookVisible = true |
| | | this.$parent.mainShowAdd() |
| | | }, |
| | | async limitGetPlanMeasureInstrument() { |
| | | let res = await limitGetPlanMeasureRequest({ |
| | | let param = { |
| | | id: this.planId, |
| | | currentPage: this.currentPagePlan, |
| | | pageSize: this.pageSize |
| | | }) |
| | | pageSize: this.pageSizePlan |
| | | } |
| | | let res = await limitGetPlanMeasureRequest(param) |
| | | this.totalPlan = res.data.taotal |
| | | this.measureData = res.data.list |
| | | }, |
| | |
| | | }, |
| | | async getPlanAndInfoAndIns(id) { |
| | | let res = await getPlanMeasureInstrument({ "id": id, "currentPage": this.currentPagePlan, "pageSize": this.pageSize }); |
| | | console.log(res); |
| | | for (const key in res.data.list) { |
| | | this.planInfo[key] = res.data.list[key] |
| | | } |
| | |
| | | }, |
| | | combackLookPlan() { |
| | | this.lookVisible = false |
| | | this.mymodelTop = -600 |
| | | this.mymodelTop = -700 |
| | | }, |
| | | blurSearch() { |
| | | if (this.radioValue === 1) { |
| | | console.log("计å"); |
| | | } |
| | | }, |
| | | handleClose() { |
| | | this.drawer = false |
| | | }, |
| | | handleCurrentChange() { |
| | | this.getStandingPageList() |
| | | handleCurrentChange(num) { |
| | | this.currentPage = num |
| | | this.radioValue ? this.getPlanPageList() : this.getStandingPageList() |
| | | }, |
| | | handleSizeChange() { |
| | | this.getStandingPageList() |
| | | handleSizeChange(num) { |
| | | this.pageSize = num |
| | | this.radioValue ? this.getPlanPageList() : this.getStandingPageList() |
| | | }, |
| | | async getStandingPageList() { |
| | | const res = await 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 => { |
| | |
| | | this.reset() |
| | | }, |
| | | async getPlanPageList() { |
| | | const res = await getPlanPageList({ |
| | | let param = { |
| | | currentPage: this.currentPage, pageSize: this.pageSize, |
| | | code: this.searchData.code, name: this.searchData.name, unit: this.searchData.measureunit |
| | | }) |
| | | } |
| | | const res = await getPlanPageList(param) |
| | | res.data.list.forEach(item => { |
| | | item.palanDate = item.beginTime + " ~ " + item.endTime |
| | | }) |
| | |
| | | this.total = res.data.total |
| | | }, |
| | | async lookMeasurement(code) { |
| | | console.log(code); |
| | | }, |
| | | } |
| | | } |