From a1fddf659da7d3ad8b5280cb76071eae50a86d46 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 25 二月 2025 15:05:58 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev
---
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-treatment.vue | 202 +++
src/views/CNAS/resourceDemand/facilitiesEnvironment/index.vue | 50
src/views/business/productSamplingInfo/components/addQuarterItem.vue | 290 ++++
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue | 288 ++++
src/views/CNAS/resourceDemand/standardMaterial/index.vue | 8
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue | 403 ++++++
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue | 414 ++++++
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management.vue | 261 ++++
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions.vue | 51
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue | 483 +++++++
src/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes.js | 56
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management-dia.vue | 211 +++
src/api/business/productSamplingInfo.js | 101 +
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-dialog.vue | 189 +++
src/views/business/productSamplingInfo/index.vue | 647 ++++++++++
15 files changed, 3,646 insertions(+), 8 deletions(-)
diff --git a/src/api/business/productSamplingInfo.js b/src/api/business/productSamplingInfo.js
new file mode 100644
index 0000000..b954bfe
--- /dev/null
+++ b/src/api/business/productSamplingInfo.js
@@ -0,0 +1,101 @@
+// 鎶芥牱淇℃伅璇︽儏椤甸潰鐩稿叧鎺ュ彛
+import request from '@/utils/request'
+
+// 鎶芥牱淇℃伅-瀛e害鏌ヨ
+export function getQuarterPage(query) {
+ return request({
+ url: '/finishProductSpotCheck/getQuarterPage',
+ method: 'get',
+ params: query
+ })
+}
+// 鎶芥牱淇℃伅-骞村害鏌ヨ
+export function getSpotCheckYearPage(query) {
+ return request({
+ url: '/finishProductSpotCheck/getSpotCheckYearPage',
+ method: 'get',
+ params: query
+ })
+}
+// 鍒犻櫎瀛e害鎶芥
+export function deleteQuarter(query) {
+ return request({
+ url: '/finishProductSpotCheck/deleteQuarter',
+ method: 'delete',
+ params: query
+ })
+}
+// 鐢熸垚瀛e害鎶ュ憡
+export function finalReportQuarter(query) {
+ return request({
+ url: '/finishProductSpotCheck/finalReportQuarter',
+ method: 'get',
+ params: query,
+ responseType: "blob"
+ })
+}
+// 鐢熸垚骞村害鎶ュ憡
+export function finalReportSpotCheckYear(query) {
+ return request({
+ url: '/finishProductSpotCheck/finalReportSpotCheckYear',
+ method: 'get',
+ params: query,
+ responseType: "blob"
+ })
+}
+// 鍒犻櫎骞村害鎶芥
+export function deleteSpotCheckYear(query) {
+ return request({
+ url: '/finishProductSpotCheck/deleteSpotCheckYear',
+ method: 'delete',
+ params: query,
+ })
+}
+// 骞村害鎶芥鏌ョ湅璇︽儏
+export function getSpotCheckYear(query) {
+ return request({
+ url: '/finishProductSpotCheck/getSpotCheckYear',
+ method: 'get',
+ params: query,
+ })
+}
+// 鎻愪氦骞村害鎶芥牱
+export function addSpotCheckYear(query) {
+ return request({
+ url: '/finishProductSpotCheck/addSpotCheckYear',
+ method: 'post',
+ data: query,
+ })
+}
+// 缂栬緫骞村害鎶芥牱
+export function updateSpotCheckYear(query) {
+ return request({
+ url: '/finishProductSpotCheck/updateSpotCheckYear',
+ method: 'post',
+ data: query,
+ })
+}
+// 瀛e害鎶芥鏌ョ湅璇︽儏
+export function getQuarter(query) {
+ return request({
+ url: '/finishProductSpotCheck/getQuarter',
+ method: 'get',
+ params: query,
+ })
+}
+// 鎻愪氦瀛e害鎶芥牱
+export function addQuarter(query) {
+ return request({
+ url: '/finishProductSpotCheck/addQuarter',
+ method: 'post',
+ data : query,
+ })
+}
+// 缂栬緫瀛e害妫�楠�
+export function updateQuarterOnOrder(query) {
+ return request({
+ url: '/finishProductSpotCheck/updateQuarterOnOrder',
+ method: 'post',
+ data : query,
+ })
+}
diff --git a/src/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes.js b/src/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes.js
new file mode 100644
index 0000000..e9a5915
--- /dev/null
+++ b/src/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes.js
@@ -0,0 +1,56 @@
+import request from '@/utils/request'
+
+// 瀹夊叏鍐呭姟涓夊簾澶勭悊鍒嗛〉鏌ヨ
+export function pageInternalWastes(query) {
+ return request({
+ url: '/internalWastes/pageInternalWastes',
+ method: 'get',
+ params: query
+ })
+}
+
+// 瀹夊叏鍐呭姟涓夊簾澶勭悊鏌ョ湅璇︽儏
+export function getInternalWastesOne(query) {
+ return request({
+ url: '/internalWastes/getInternalWastesOne',
+ method: 'get',
+ params: query
+ })
+}
+
+// 瀹夊叏鍐呭姟涓夊簾澶勭悊鏂板
+export function addInternalWastes(query) {
+ return request({
+ url: '/internalWastes/addInternalWastes',
+ method: 'post',
+ data: query
+ })
+}
+
+// 瀹夊叏鍐呭姟涓夊簾澶勭悊鍒嗛〉淇敼
+export function updateInternalWastes(query) {
+ return request({
+ url: '/internalWastes/updateInternalWastes',
+ method: 'post',
+ data: query
+ })
+}
+
+// 瀵煎嚭涓夊簾澶勭悊
+export function exportInternalWastes(query) {
+ return request({
+ url: "/internalWastes/exportInternalWastes",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//瀹夊叏鍐呭姟涓夊簾澶勭悊鍒犻櫎
+export function removeStandardSubstance(query) {
+ return request({
+ url: '/internalWastes/delInternalWastes',
+ method: 'delete',
+ params: query
+ })
+}
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management-dia.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management-dia.vue
new file mode 100644
index 0000000..14d2b3b
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management-dia.vue
@@ -0,0 +1,211 @@
+<template>
+ <div>
+ <el-dialog v-loading="diaLoading" :close-on-click-modal="false"
+ :close-on-press-escape="false"
+ :visible.sync="formDia"
+ title="澶栨潵浜哄憳绠$悊淇℃伅"
+ width="80%" @close="closeThreeWastesDia">
+ <el-form ref="form" :model="form" :rules="rules" label-width="auto">
+ <el-col :span="12">
+ <el-form-item label="鏃ユ湡" prop="registerDate">
+ <el-date-picker v-model="form.registerDate"
+ clearable
+ format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡"
+ size="small"
+ type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="杩涘叆鍖哄煙" prop="area">
+ <el-input v-model="form.area" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="杩涘叆浜哄憳" prop="personnel">
+ <el-input v-model="form.personnel" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="杩涘叆鍘熷洜" prop="reason">
+ <el-input v-model="form.reason" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="闄悓浜哄憳" prop="accompanyingId">
+ <el-select v-model="form.accompanyingId" clearable filterable
+ placeholder="璇烽�夋嫨闄悓浜哄憳" size="small">
+ <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎵瑰噯浜虹鍚�" prop="approveId">
+ <el-select v-model="form.approveId" clearable filterable
+ placeholder="璇烽�夋嫨鎵瑰噯浜�" size="small">
+ <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="淇濆瘑鍙婂叾瀹冩儏鍐�" prop="confidentiality">
+ <el-input v-model="form.confidentiality" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input v-model="form.remark" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeThreeWastesDia">鍙� 娑�</el-button>
+ <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+export default {
+ name: 'Personnel-management-dia',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ diaLoading: false,
+ loading: false,
+ form: {
+ registerDate: '',
+ area: '',
+ personnel: '',
+ reason: '',
+ accompanyingId: '',
+ accompanyingName: '',
+ approveId: '',
+ approveName: '',
+ confidentiality: '',
+ remark: '',
+ },
+ rules: {
+ registerDate: [{required: true, message: '璇烽�夋嫨鏃ユ湡',trigger: 'change'}],
+ area: [{required: true, message: '璇峰~鍐欒繘鍏ュ尯鍩�',trigger: 'blur'}],
+ personnel: [{required: true, message: '璇峰~鍐欒繘鍏ヤ汉鍛�',trigger: 'blur'}],
+ reason: [{required: true, message: '璇峰~鍐欒繘鍏ュ師鍥�',trigger: 'blur'}],
+ accompanyingId: [{required: true, message: '璇烽�夋嫨闄悓浜哄憳',trigger: 'change'}],
+ approveId: [{required: true, message: '璇烽�夋嫨鎵瑰噯浜�',trigger: 'change'}],
+ confidentiality: [{required: true, message: '璇峰~鍐欎繚瀵嗗強鍏朵粬鎯呭喌',trigger: 'blur'}],
+ remark: [{required: false, message: '璇峰~鍐欏娉�',trigger: 'blur'}],
+ },
+ operationType: '',
+ personList: []
+ };
+ },
+ mounted() {
+
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDia (type, row) {
+ this.getAuthorizedPerson()
+ this.formDia = true
+ this.operationType = type
+ if (type !== 'add') {
+ this.searchInfo(row)
+ } else {
+ this.form.accompanyingId = JSON.parse(localStorage.getItem("user")).userId
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo (row) {
+ this.diaLoading = true
+ this.$axios(this.$api.foreignRegister.getForeignRegisterOne + '?registerId=' + row.registerId).then(res => {
+ this.diaLoading = false
+ if (res.code === 201) return
+ this.form = res.data
+ }).catch(err => {
+ console.log(err)
+ this.diaLoading = false
+ })
+ },
+ // 鎻愪氦寮规鏁版嵁
+ handleEdit () {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ this.loading = true
+ const internalImplementDto = this.HaveJson(this.form)
+ const index = this.personList.findIndex(item => item.value === internalImplementDto.accompanyingId)
+ if (index > -1) {
+ internalImplementDto.accompanyingName = this.personList[index].label
+ }
+ const index1 = this.personList.findIndex(item => item.value === internalImplementDto.approveId)
+ if (index1 > -1) {
+ internalImplementDto.approveName = this.personList[index].label
+ }
+ if (this.operationType === 'add') {
+ this.$axios.post(this.$api.foreignRegister.addForeignRegister, internalImplementDto, {
+ headers: {
+ "Content-Type": "application/json"
+ },
+ noQs: true
+ }).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeThreeWastesDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ } else if (this.operationType === 'edit') {
+ this.$axios.post(this.$api.foreignRegister.updateForeignRegister, internalImplementDto, {
+ headers: {
+ "Content-Type": "application/json"
+ },
+ noQs: true
+ }).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeThreeWastesDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ }
+ } else {
+ console.log('error submit!!');
+ return false;
+ }
+ });
+ },
+ closeThreeWastesDia () {
+ this.$refs.form.resetFields();
+ this.formDia = false
+ this.$emit('closeThreeWastesDia')
+ },
+ getAuthorizedPerson() {
+ this.$axios.get(this.$api.user.getUserMenu).then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.name,
+ value: a.id
+ })
+ })
+ this.personList = data
+ })
+ },
+ }
+};
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management.vue
new file mode 100644
index 0000000..b15fbc2
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management.vue
@@ -0,0 +1,261 @@
+<template>
+ <div>
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 160px">鏃ユ湡锛�</span>
+ <el-date-picker v-model="searchForm.registerDate"
+ clearable
+ format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡"
+ size="small"
+ style="width: 100%"
+ type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" @click="handleDown">瀵� 鍑�</el-button>
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </span>
+ </div>
+ <div class="table">
+ <ZTTable
+ :column="tableColumn"
+ :height="'calc(100vh - 20em)'"
+ :table-data="tableData"
+ :table-loading="tableLoading"
+ style="padding: 0 10px;margin-bottom: 16px">
+ </ZTTable>
+ <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]"
+ :total="total" layout="->,total, sizes, prev, pager, next, jumper"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange">
+ </el-pagination>
+ </div>
+ <personnel-management-dia v-if="threeWastesDia" ref="threeWastesDia" @closeThreeWastesDia="closeThreeWastesDia"></personnel-management-dia>
+ </div>
+</template>
+
+<script>
+// import ZTTable from '../../caorui/ZTTable/index.vue';
+// import PersonnelManagementDia from './Personnel-management-dia.vue';
+import PersonnelManagementDia from '../component/Personnel-management-dia.vue';
+
+export default {
+ name: 'Personnel-management',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { PersonnelManagementDia},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ registerDate: '',
+ },
+ tableColumn: [
+ {
+ label: '鏃ユ湡',
+ prop: 'registerDate',
+ minWidth: '100'
+ },
+ {
+ label: '杩涘叆鍖哄煙',
+ prop: 'area',
+ minWidth: '100'
+ },
+ {
+ label: '杩涘叆浜哄憳',
+ prop: 'personnel',
+ minWidth: '100'
+ },
+ {
+ label: '杩涘叆鍘熷洜',
+ prop: 'reason',
+ minWidth: '100'
+ },
+ {
+ label: '闄悓浜哄憳',
+ prop: 'accompanyingName',
+ minWidth: '100'
+ },
+ {
+ label: '鎵瑰噯浜虹鍚�',
+ prop: 'approveName',
+ minWidth: '100'
+ },
+ {
+ label: '淇濆瘑鍙婂叾浠栨儏鍐�',
+ prop: 'confidentiality',
+ minWidth: '100'
+ },
+ {
+ label: '澶囨敞',
+ prop: 'remark',
+ minWidth: '100'
+ },
+ {
+ dataType: 'action',
+ fixed: 'right',
+ minWidth: '220',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('edit', row);
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ },
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ },
+ total: 0,
+ threeWastesDia: false
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList () {
+ const entity = this.searchForm
+ const page = this.page
+ this.tableLoading = true
+ this.$axios.post(this.$api.foreignRegister.pageForeignRegister, {entity, page}, {
+ headers: {
+ "Content-Type": "application/json"
+ },
+ noQs: true
+ }).then(res => {
+ this.tableLoading = false
+ if (res.code === 201) return
+ this.tableData = res.data.records
+ this.total = res.data.total
+ }).catch(err => {
+ console.log('err---', err);
+ this.tableLoading = false
+ })
+ },
+ // 鍒犻櫎
+ delPlan (row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.tableLoading = true
+ this.$axios.get(this.$api.foreignRegister.delForeignRegister + '?registerId=' + row.registerId).then(res => {
+ this.tableLoading = false
+ if (res.code === 201) return
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.searchList()
+ }).catch(err => {
+ this.tableLoading = false
+ console.log('err---', err);
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+ openFormDia (type, row) {
+ this.threeWastesDia = true
+ this.$nextTick(() => {
+ this.$refs.threeWastesDia.openDia(type, row)
+ })
+ },
+ // 瀵煎嚭
+ handleDown (row) {
+ const entity = this.searchForm
+ this.$axios.post(this.$api.foreignRegister.exportForeignRegister,{entity},{
+ responseType: "blob",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ noQs: true}).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res],{ type: 'application/msword' });
+ //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+ let reader = new FileReader();
+ reader.readAsText(blob, 'utf-8');
+ reader.onload = () => {
+ try {
+ let result = JSON.parse(reader.result);
+ if (result.message) {
+ this.$message.error(result.message);
+ } else {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '澶栨潵浜哄憳鐧昏' + '.docx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ } catch (err) {
+ console.log(err);
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '澶栨潵浜哄憳鐧昏' + '.docx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ }
+ })
+ },
+ closeThreeWastesDia () {
+ this.threeWastesDia = false
+ this.searchList()
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm () {
+ this.searchForm.registerDate = '';
+ this.searchList()
+ },
+ // 鍒嗛〉
+ handleSizeChange(val) {
+ this.page.size = val;
+ this.searchList();
+ },
+ handleCurrentChange(val) {
+ this.page.current = val;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.search-background {
+ width: 100%;
+ height: 60px;
+ line-height: 60px;
+ display: flex;
+ justify-content: space-between;
+}
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions.vue
new file mode 100644
index 0000000..38db4fc
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions.vue
@@ -0,0 +1,51 @@
+<template>
+ <el-row>
+ <el-col :span="2">
+ <el-menu style="height: 100vh;" @select="clickSelect" :default-active="activeName">
+ <el-menu-item index="鐢垫簮绋冲畾鎬�">
+ <span slot="title">鐢垫簮绋冲畾鎬�</span>
+ </el-menu-item>
+ <el-menu-item index="闃查浄妫�娴�">
+ <span slot="title">闃查浄妫�娴�</span>
+ </el-menu-item>
+ <el-menu-item index="鐓у害璁板綍">
+ <span slot="title">鐓у害璁板綍</span>
+ </el-menu-item>
+ <el-menu-item index="娓╂箍搴﹁褰�">
+ <span slot="title">娓╂箍搴﹁褰�</span>
+ </el-menu-item>
+ </el-menu>
+ </el-col>
+ <el-col :span="22" style="padding: 10px">
+ <power-supply-stability v-if="activeName === '鐢垫簮绋冲畾鎬�'"/>
+ <lightning-protection-detection v-if="activeName === '闃查浄妫�娴�'" />
+ <illuminance-recording v-if="activeName === '鐓у害璁板綍'"/>
+ <temperature-humidity-record v-if="activeName === '娓╂箍搴﹁褰�'"/>
+ </el-col>
+ </el-row>
+</template>
+
+<script>
+// 鐢垫簮绋冲畾鎬�
+import PowerSupplyStability from "./facilities-environmental-conditions/power-supply-stability.vue";
+// 闃查浄妫�娴�
+import LightningProtectionDetection from "./facilities-environmental-conditions/lightning-protection-detection.vue";
+// 鐓у害璁板綍
+import IlluminanceRecording from "./facilities-environmental-conditions/illuminance-recording.vue";
+// 娓╂箍搴﹁褰�
+import TemperatureHumidityRecord from "./facilities-environmental-conditions/temperature-humidity-record.vue";
+
+export default {
+ components: {TemperatureHumidityRecord, IlluminanceRecording, LightningProtectionDetection, PowerSupplyStability},
+ data() {
+ return {
+ activeName: "鐢垫簮绋冲畾鎬�"
+ }
+ },
+ methods: {
+ clickSelect(index) {
+ this.activeName = index;
+ }
+ }
+}
+</script>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue
new file mode 100644
index 0000000..165feb1
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue
@@ -0,0 +1,414 @@
+<template>
+ <div>
+ <div class="header">
+ <div>鐓у害璁板綍</div>
+ <div>
+ <el-button size="small" type="primary" @click="clickAdd">鏂� 澧�</el-button>
+ </div>
+ </div>
+ <el-table
+ :data="tableData"
+ height="calc(100vh - 18em)"
+ style="width: 100%">
+ <el-table-column label="搴忓彿" type="index" width="120">
+ <template v-slot="scope">
+ <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="缁撹" min-width="180" prop="conclusion"></el-table-column>
+ <el-table-column label="娴嬭瘯鏃ユ湡" min-width="180" prop="testDate" width="testDate"></el-table-column>
+ <el-table-column label="妫�娴嬭��" min-width="180" prop="testerUser"></el-table-column>
+ <el-table-column label="鏍告煡浜�" min-width="180" prop="checkerUser"></el-table-column>
+ <el-table-column label="璁惧鍚嶇О" min-width="180" prop="deviceName"></el-table-column>
+ <el-table-column label="璁惧缂栧彿" min-width="180" prop="managementNumber"></el-table-column>
+ <el-table-column label="鏍″噯鏃ユ湡" min-width="180" prop="lastCalibrationDate"></el-table-column>
+ <el-table-column label="涓嬫鏍″噯鏃ユ湡" min-width="180" prop="nextCalibrationDate"></el-table-column>
+ <el-table-column label="鍒涘缓鏃堕棿" min-width="180" prop="createTime"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="140">
+ <template v-slot="scope">
+ <el-button size="small" type="text" @click="downLoadPost(scope.row)">瀵煎嚭</el-button>
+ <el-button size="small" type="text" @click="edit(scope.row)">缂栬緫</el-button>
+ <el-button size="small" type="text" @click="deleteRowFun(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
+ :total="search.total" layout="->,total, sizes, prev, pager, next, jumper"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange">
+ </el-pagination>
+ <el-dialog
+ :visible.sync="dialogVisible"
+ title="鏂板"
+ width="50%"
+ @open="openDialog">
+ <div style="height: 50vh; overflow-y: auto">
+ <el-form ref="form" :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ祴璇曞湴鐐�', trigger: 'change' }]" label="娴嬭瘯鏃ユ湡"
+ prop="testDate">
+ <el-date-picker
+ v-model="form.testDate"
+ format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡"
+ size="small"
+ style="width: 100%"
+ type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'change' }]" label="璁惧鍚嶇О"
+ prop="deviceId">
+ <el-select v-model="form.deviceId"
+ class="table_input"
+ clearable
+ filterable
+ placeholder="璁惧鍚嶇О"
+ size="small" @change="getCalibrationDateFun">
+ <el-option v-for="item in equipOptions" :key="item.id" :label="item.deviceName" :value="item.id">
+ {{item.deviceName + item.managementNumber}}
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧缂栧彿">
+ <el-input v-model="form.managementNumber" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈�杩戞牎鍑嗘棩鏈�">
+ <el-input v-model="form.lastCalibrationDate" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬫鏍″噯鏃ユ湡">
+ <el-input v-model="form.nextCalibrationDate" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="妫�娴嬭��" prop="recipientUser">
+ <el-select v-model="form.testerId" clearable filterable placeholder="璇烽�夋嫨"
+ size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏍告煡浜�" prop="recipientUser">
+ <el-select v-model="form.checkerId" clearable filterable placeholder="璇烽�夋嫨"
+ size="small" style="width: 100%;" >
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="缁撹">
+ <el-input
+ v-model="form.conclusion"
+ :rows="2"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ type="textarea">
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <div>
+ <div style="display: flex; justify-content: flex-end; margin-bottom: 0.5em">
+ <el-button size="small" type="primary" @click="feMeasuredQuantityListAdd">鏂板</el-button>
+ </div>
+ <div>
+ <el-table
+ :data="form.illuminationDetectionAreaList"
+ height="40vh"
+ style="width: 100%; margin: auto">
+ <el-table-column label="搴忓彿" type="index" width="80"></el-table-column>
+ <el-table-column
+ align="center"
+ label="妫�娴嬪尯鍩熷悕绉�"
+ min-width="180"
+ prop="detectionAreaLabel">
+ <template #default="{ row }">
+ <el-input v-model="row.detectionAreaLabel" :rows="1" type="textarea"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column
+ align="center"
+ label="妫�娴嬪��"
+ min-width="300"
+ prop="name">
+ <template>
+ <el-table-column align="center" label="绗竴娆�" min-width="100" prop="valueOne">
+ <template #default="{ row }">
+ <el-input v-model="row.valueOne" :rows="1" @blur="getAverage(row)"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" label="绗簩娆�" min-width="100" prop="valueTwo">
+ <template #default="{ row }">
+ <el-input v-model="row.valueTwo" :rows="1" @blur="getAverage(row)"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" label="绗笁娆�" min-width="100" prop="valueThree">
+ <template #default="{ row }">
+ <el-input v-model="row.valueThree" :rows="1" @blur="getAverage(row)"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" label="骞冲潎鍊�" min-width="100" prop="average">
+ <template #default="{ row }">
+ <el-input v-model="row.average" :rows="1"></el-input>
+ </template>
+ </el-table-column>
+ </template>
+ </el-table-column>
+ <el-table-column
+ align="center"
+ label="澶囨敞"
+ min-width="180"
+ prop="detectionAreaLabel">
+ <template #default="{ row }">
+ <el-input v-model="row.remark" :rows="1" type="textarea"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column
+ fixed="right"
+ label="鎿嶄綔"
+ width="100">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="feMeasuredQuantityListDelete(scope.row, scope.$index)">
+ 鍒犻櫎
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </div>
+ </el-form>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0
+ },
+ tableData: [],
+ dialogVisible: false,
+ submitLoading: false,
+ form: {
+ testDate: '',
+ deviceId: '',
+ managementNumber: '',
+ lastCalibrationDate: '',
+ nextCalibrationDate: '',
+ testerId: '',
+ checkerId: '',
+ conclusion: '',
+ illuminationDetectionAreaList: []
+ },
+ cascaderList: [],
+ responsibleOptions: [],
+ equipOptions: [],
+ }
+ },
+ mounted() {
+ this.initData()
+ },
+ watch: {
+ dialogVisible(newVal) {
+ if (!newVal) {
+ this.form = {
+ deviceId: null,
+ illuminationDetectionAreaList: []
+ }
+ }
+ }
+ },
+ methods: {
+ getAverage(row) {
+ if (row.valueOne && row.valueTwo && row.valueThree) {
+ if (!isNaN(row.valueOne) && !isNaN(row.valueTwo) && !isNaN(row.valueThree)) {
+ const avg = Number(row.valueOne) + Number(row.valueTwo) + Number(row.valueThree)
+ console.log(avg)
+ row.average = Math.round(avg/3);
+ } else {
+ this.$message.warning("蹇呴』涓烘暟瀛楋紒")
+ }
+ }
+ },
+ edit(row) {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.getFeIlluminationDetectionArea + "?intensityIlluminationId=" + row.intensityIlluminationId).then(res => {
+ this.form = {...row}
+ this.form.illuminationDetectionAreaList = res.data;
+ this.dialogVisible = true
+ });
+ },
+ initData() {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.getFeLightningProtection + '?size=' + this.search.size + '¤t=' + this.search.current).then(res => {
+ if (res.code === 201) return;
+ this.tableData = res.data.records;
+ this.search.total = res.data.total;
+ });
+ },
+ handleSizeChange(val) {
+ this.search.size = val;
+ this.initData();
+ },
+ handleCurrentChange(val) {
+ this.search.current = val;
+ this.initData();
+ },
+ deleteRowFun(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeLightningProtection + '?intensityIlluminationId=' + row.intensityIlluminationId).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ this.initData()
+ })
+ })
+ },
+ feMeasuredQuantityListDelete(row, index) {
+ if (row.detectionAreaId) {
+ this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeIlluminationDetectionArea + '?detectionAreaId=' + row.detectionAreaId).then(res => {
+ if (res.code === 201) return
+ this.form.illuminationDetectionAreaList.splice(index, 1)
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ })
+ } else {
+ this.form.illuminationDetectionAreaList.splice(index, 1)
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ }
+ },
+ openDialog() {
+ this.$axios.get(this.$api.deviceScope.treeDevice).then(res => {
+ this.cascaderList = res.data;
+ });
+ this.$nextTick(() => {
+ this.$refs['form'].clearValidate()
+ })
+ this.getUserList()
+ },
+ clickAdd() {
+ this.dialogVisible = true
+ this.getEquipOptions()
+ },
+ // 鑾峰彇鎵�鏈夎澶�
+ getEquipOptions() {
+ this.equipOptions = []
+ this.$axios.get(this.$api.deviceScope.deviceScopeSearch+'?status=0').then(res => {
+ if (res.code === 200 && res.data) {
+ this.equipOptions = res.data
+ }
+ }).catch(error => {
+ console.error(error)
+ })
+ },
+ feMeasuredQuantityListAdd() {
+ const obj = {
+ detectionAreaLabel: null,
+ valueOne: null,
+ valueTwo: null,
+ valueThree: null,
+ average: null,
+ remark: null,
+ }
+ this.form.illuminationDetectionAreaList.push(obj)
+ },
+ addPowerSupplyStability() {
+ this.submitLoading = true
+ this.$refs.form.validate((valid) => {
+ if (valid) {
+ this.$axios.post(this.$api.facilitiesAndEnvironment.addFeLightningProtection, this.form, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ this.submitLoading = false
+ if (res.code === 200) {
+ this.initData()
+ this.dialogVisible = false
+ }
+ }).catch(error => {
+ this.submitLoading = false
+ })
+ }
+ });
+ },
+ // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
+ getUserList() {
+ this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
+ if (res.code == 200) {
+ this.responsibleOptions = res.data
+ }
+ })
+ },
+ getCalibrationDateFun(val) {
+ const index = this.equipOptions.findIndex(item => item.id === val)
+ if (index > -1) {
+ this.form.managementNumber = this.equipOptions[index].managementNumber
+ this.form.lastCalibrationDate = this.equipOptions[index].lastCalibrationDate
+ this.form.nextCalibrationDate = this.equipOptions[index].nextCalibrationDate
+ }
+ },
+ // 瀵煎嚭
+ downLoadPost(row) {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.exportFeIllumination + '?intensityIlluminationId=' + row.intensityIlluminationId,{responseType: "blob"}).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res],{ type: 'application/msword' });
+ //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+ let reader = new FileReader();
+ reader.readAsText(blob, 'utf-8');
+ reader.onload = () => {
+ try {
+ let result = JSON.parse(reader.result);
+ if (result.message) {
+ this.$message.error(result.message);
+ } else {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '鐓у害璁板綍' + '.docx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ } catch (err) {
+ console.log(err);
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '鐓у害璁板綍' + '.docx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ }
+ })
+ },
+ }
+}
+</script>
+
+<style scoped>
+.header {
+ height: 3em;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue
new file mode 100644
index 0000000..57a7704
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue
@@ -0,0 +1,288 @@
+<template>
+ <div>
+ <div class="header">
+ <div>闃查浄妫�娴�</div>
+ <div>
+ <el-button size="small" type="primary" @click="clickAdd">瀵� 鍏�</el-button>
+ <el-button size="small" type="primary" @click="downLoadPost">瀵� 鍑�</el-button>
+ </div>
+ </div>
+ <el-table
+ :data="tableData"
+ height="calc(100vh - 18em)"
+ style="width: 100%">
+ <el-table-column label="搴忓彿" type="index" width="120">
+ <template v-slot="scope">
+ <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鍘熸枃浠跺悕"
+ min-width="180"
+ prop="fileName">
+ </el-table-column>
+ <el-table-column
+ label="妫�娴嬫棩鏈�"
+ min-width="180"
+ prop="detectionDate">
+ </el-table-column>
+ <el-table-column
+ label="鏈夋晥鏈�"
+ min-width="180"
+ prop="termValidity">
+ </el-table-column>
+ <el-table-column
+ label="妫�娴嬪崟浣�"
+ min-width="180"
+ prop="detectionUnit">
+ </el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="100">
+ <template v-slot="scope">
+ <el-button size="small" type="text" @click="edit(scope.row)">缂栬緫</el-button>
+ <el-button size="small" type="text" @click="deleteRowFun(scope.row)">鍒犻櫎</el-button>
+ <el-button size="small" type="text" @click="download(scope.row)">涓嬭浇</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
+ :total="search.total" layout="->,total, sizes, prev, pager, next, jumper"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange">
+ </el-pagination>
+ <el-dialog
+ :visible.sync="dialogVisible"
+ title="鏂� 澧�"
+ width="50%">
+ <div style="height: 50vh;">
+ <el-form ref="form" :model="form" label-width="80px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ祴璇曞湴鐐�', trigger: 'blur' }]" label="妫�娴嬫棩鏈�"
+ prop="detectionDate">
+ <el-date-picker
+ v-model="form.detectionDate"
+ format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡"
+ size="small"
+ style="width: 100%"
+ type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ祴璇曞湴鐐�', trigger: 'blur' }]" label="鏈夋晥鏈�"
+ prop="termValidity">
+ <el-date-picker
+ v-model="form.termValidity"
+ format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡"
+ size="small"
+ style="width: 100%"
+ type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ祴璇曞湴鐐�', trigger: 'blur' }]" label="妫�娴嬪崟浣�"
+ prop="detectionUnit">
+ <el-input v-model="form.detectionUnit" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="妫�娴嬪崟浣�" >
+ <el-upload
+ :file-list="form.fileList"
+ :http-request="httpRequest"
+ :limit="1"
+ :on-exceed="handleExceed"
+ :on-remove="handleRemove"
+ action="#"
+ class="upload-demo"
+ drag
+ multiple>
+ <i class="el-icon-upload"></i>
+ <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="addImport">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+
+export default {
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0
+ },
+ tableData: [],
+ dialogVisible: false,
+ form: {
+ fileList: [],
+ fileData: []
+ },
+ }
+ },
+ mounted() {
+ this.initData()
+ },
+ watch: {
+ dialogVisible(newVal) {
+ if (!newVal) {
+ this.form = {
+ fileList: [],
+ fileData: []
+ }
+ }
+ }
+ },
+ methods: {
+ // 瀵煎嚭
+ downLoadPost() {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.exportOfLightningProtectionDetection,{responseType: "blob"}).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res],{ type: 'application/msword' });
+ //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+ let reader = new FileReader();
+ reader.readAsText(blob, 'utf-8');
+ reader.onload = () => {
+ try {
+ let result = JSON.parse(reader.result);
+ if (result.message) {
+ this.$message.error(result.message);
+ } else {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '闃查浄妫�娴嬪鍑�' + '.xlsx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ } catch (err) {
+ console.log(err);
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '闃查浄妫�娴嬪鍑�' + '.xlsx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ }
+ })
+ },
+ initData() {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.getLightningProtectionDetection + '?size=' + this.search.size + '¤t=' + this.search.current).then(res => {
+ if (res.code === 201) return;
+ this.tableData = res.data.records;
+ this.search.total = res.data.total;
+ });
+ },
+ handleSizeChange(val) {
+ this.search.size = val;
+ this.initData();
+ },
+ handleCurrentChange(val) {
+ this.search.current = val;
+ this.initData();
+ },
+ clickAdd() {
+ this.dialogVisible = true
+ },
+ // 鏂囦欢鏁伴噺杩囧鏃舵彁閱�
+ handleExceed() {
+ this.$message({type: 'error', message: '鏈�澶氭敮鎸�1涓檮浠朵笂浼�'})
+ },
+ // 瑕嗙洊榛樿鐨勪笂浼犺涓猴紝鍙互鑷畾涔変笂浼犵殑瀹炵幇锛屽皢涓婁紶鐨勬枃浠朵緷娆℃坊鍔犲埌fileList鏁扮粍涓�,鏀寔澶氫釜鏂囦欢
+ httpRequest(option) {
+ this.form.fileData.push(option)
+ },
+ addImport() {
+ console.log(this.form)
+ this.$refs.form.validate((valid) => {
+ if (valid) {
+ let params = new FormData()
+ if (this.form.lightningProtectionId) {
+ params.append("lightningProtectionId", this.form.lightningProtectionId)
+ }
+ params.append("termValidity", this.form.termValidity)
+ params.append("detectionUnit", this.form.detectionUnit)
+ params.append("detectionDate", this.form.detectionDate)
+ if (this.form.fileData.length > 0) {
+ params.append("file", this.form.fileData[0].file)
+ }
+ this.$axios.post(this.$api.facilitiesAndEnvironment.addLightningProtectionDetection, params, {
+ headers: {'Content-Type': 'multipart/form-data;'},
+ noQs: true
+ }).then(res => {
+ if (res.code === 201) return;
+ this.dialogVisible = false
+ this.initData()
+ });
+ }
+ });
+ },
+ edit(row) {
+ this.dialogVisible = true
+ this.form = {...row}
+ this.form.fileList = []
+ this.form.fileData = []
+ this.form.fileList.push({name: row.systemFileName, url: "123434"})
+ console.log(this.form)
+ },
+ deleteRowFun(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteLightningProtectionDetection + '?lightningProtectionId=' + row.lightningProtectionId).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ this.initData()
+ })
+ })
+ },
+ handleRemove(file) {
+ this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + file.name).then(res => {
+ if (res.code === 201) return;
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ let index = this.form.fileList.indexOf(fileName)
+ if (index != -1) {
+ this.successFileList.splice(index, 1)
+ }
+ })
+ },
+ download(row) {
+ let url = '';
+
+ // fileDownload.downloadIamge(url, row.fileName)
+ url = this.javaApi + 'img/' + row.systemFileName
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = row.fileName;
+ link.click();
+ }
+ }
+}
+</script>
+
+<style scoped>
+.header {
+ height: 3em;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue
new file mode 100644
index 0000000..0cd9c6d
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue
@@ -0,0 +1,403 @@
+<template>
+ <div>
+ <div class="header">
+ <div>鐢垫簮绋冲畾鎬�</div>
+ <div>
+ <el-button size="small" type="primary" @click="openAddDia">鏂� 澧�</el-button>
+ </div>
+ </div>
+ <el-table
+ :data="tableData"
+ height="calc(100vh - 18em)"
+ style="width: 100%">
+ <el-table-column label="搴忓彿" type="index" width="120">
+ <template v-slot="scope">
+ <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="娴嬭瘯鍦扮偣" min-width="180" prop="testLocation"></el-table-column>
+ <el-table-column label="娴嬭瘯鏃ユ湡" min-width="180" prop="testDate" width="testDate"></el-table-column>
+ <el-table-column label="缁撹" min-width="180" prop="conclusion"></el-table-column>
+ <el-table-column label="妫�娴嬭��" min-width="180" prop="testerUser"></el-table-column>
+ <el-table-column label="鏍告煡浜�" min-width="180" prop="checkerUser"></el-table-column>
+ <el-table-column label="璁惧鍚嶇О" min-width="180" prop="deviceName"></el-table-column>
+ <el-table-column label="璁惧缂栧彿" min-width="180" prop="managementNumber"></el-table-column>
+ <el-table-column label="鏍″噯鏃ユ湡" min-width="180" prop="lastCalibrationDate"></el-table-column>
+ <el-table-column label="涓嬫鏍″噯鏃ユ湡" min-width="180" prop="nextCalibrationDate"></el-table-column>
+ <el-table-column label="鍒涘缓鏃堕棿" min-width="180" prop="createTime"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="140">
+ <template v-slot="scope">
+ <el-button size="small" type="text" @click="downLoadPost(scope.row)">瀵煎嚭</el-button>
+ <el-button size="small" type="text" @click="edit(scope.row)">缂栬緫</el-button>
+ <el-button size="small" type="text" @click="deleteRowFun(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
+ :total="search.total" layout="->,total, sizes, prev, pager, next, jumper"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange">
+ </el-pagination>
+ <el-dialog
+ :visible.sync="dialogVisible"
+ title="鏂板"
+ width="50%"
+ @open="openDialog">
+ <div style="height: 50vh; overflow-y: auto">
+ <el-form ref="form" :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ祴璇曞湴鐐�', trigger: 'blur' }]" label="娴嬭瘯鍦扮偣"
+ prop="testLocation">
+ <el-input v-model="form.testLocation" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ祴璇曟棩鏈�', trigger: 'change' }]" label="娴嬭瘯鏃ユ湡"
+ prop="testDate">
+ <el-date-picker
+ v-model="form.testDate"
+ format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡"
+ size="small"
+ style="width: 100%"
+ type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'change' }]" label="璁惧鍚嶇О"
+ prop="deviceId">
+ <el-select v-model="form.deviceId"
+ class="table_input"
+ clearable
+ filterable
+ placeholder="璁惧鍚嶇О"
+ size="small" @change="getCalibrationDateFun">
+ <el-option v-for="item in equipOptions" :key="item.id" :label="item.deviceName" :value="item.id">
+ {{item.deviceName + item.managementNumber}}
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧缂栧彿">
+ <el-input v-model="form.managementNumber" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈�杩戞牎鍑嗘棩鏈�">
+ <el-input v-model="form.lastCalibrationDate" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬫鏍″噯鏃ユ湡">
+ <el-input v-model="form.nextCalibrationDate" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="妫�娴嬭��" prop="recipientUser">
+ <el-select v-model="form.testerId" clearable filterable placeholder="璇烽�夋嫨"
+ size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏍告煡浜�" prop="recipientUser">
+ <el-select v-model="form.checkerId" clearable filterable placeholder="璇烽�夋嫨"
+ size="small" style="width: 100%;" >
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="缁撹">
+ <el-input
+ v-model="form.conclusion"
+ :rows="2"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ type="textarea">
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <div>
+ <div style="display: flex; justify-content: flex-end; margin-bottom: 0.5em">
+ <el-button size="small" type="primary" @click="feMeasuredQuantityListAdd">鏂板</el-button>
+ </div>
+ <div>
+ <el-table
+ :data="form.feMeasuredQuantityList"
+ height="40vh"
+ style="width: 100%; margin: auto">
+ <el-table-column label="搴忓彿" type="index" width="80"></el-table-column>
+ <el-table-column
+ align="center"
+ label="娴嬪畾閲忓悕绉�"
+ min-width="180"
+ prop="measuredQuantityLabel">
+ <template #default="{ row }">
+ <el-input v-model="row.measuredQuantityLabel" :rows="1" type="textarea"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column
+ align="center"
+ label="鍊�"
+ min-width="300"
+ prop="name">
+ <template>
+ <el-table-column align="center" label="A" min-width="100" prop="valueA">
+ <template #default="{ row }">
+ <el-input v-model="row.valueA" :rows="1"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" label="B" min-width="100" prop="valueB">
+ <template #default="{ row }">
+ <el-input v-model="row.valueB" :rows="1"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" label="C" min-width="100" prop="valueC">
+ <template #default="{ row }">
+ <el-input v-model="row.valueC" :rows="1"></el-input>
+ </template>
+ </el-table-column>
+ </template>
+ </el-table-column>
+ <el-table-column
+ fixed="right"
+ label="鎿嶄綔"
+ width="100">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="feMeasuredQuantityListDelete(scope.row, scope.$index)">
+ 鍒犻櫎
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </div>
+ </el-form>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0
+ },
+ tableData: [],
+ dialogVisible: false,
+ submitLoading: false,
+ form: {
+ testLocation: '',
+ testDate: '',
+ deviceId: '',
+ managementNumber: '',
+ lastCalibrationDate: '',
+ nextCalibrationDate: '',
+ testerId: '',
+ checkerId: '',
+ conclusion: '',
+ feMeasuredQuantityList: []
+ },
+ equipOptions: [],
+ cascaderList: [],
+ responsibleOptions: []
+ }
+ },
+ mounted() {
+ this.initData()
+ },
+ watch: {
+ dialogVisible(newVal) {
+ if (!newVal) {
+ this.form = {
+ deviceId: null,
+ feMeasuredQuantityList: []
+ }
+ }
+ }
+ },
+ methods: {
+ // 鍒濆鍖栬皟鐢�
+ initData() {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.getLaboratoryFacilityPowerStablePage + '?size=' + this.search.size + '¤t=' + this.search.current).then(res => {
+ if (res.code === 201) return;
+ this.tableData = res.data.records;
+ this.search.total = res.data.total;
+ });
+ },
+ handleSizeChange(val) {
+ this.search.size = val;
+ this.initData();
+ },
+ handleCurrentChange(val) {
+ this.search.current = val;
+ this.initData();
+ },
+ // 鐢垫簮绋冲畾鎬� 琛ㄦ牸涓殑琛屽垹闄ゆ寜閽�
+ deleteRowFun(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteLaboratoryFacilityPowerStable + '?powerStableId=' + row.powerStableId).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ this.initData()
+ })
+ })
+ },
+ openAddDia () {
+ this.dialogVisible = true
+ this.getEquipOptions()
+ },
+ // 鑾峰彇鎵�鏈夎澶�
+ getEquipOptions() {
+ this.equipOptions = []
+ this.$axios.get(this.$api.deviceScope.deviceScopeSearch+'?status=0').then(res => {
+ if (res.code === 200 && res.data) {
+ this.equipOptions = res.data
+ }
+ }).catch(error => {
+ console.error(error)
+ })
+ },
+ // 鐢垫簮绋冲畾鎬�-鎵撳紑寮规璋冪敤璁惧鎺ュ彛锛屾煡璇娇鐢ㄧ殑璁惧
+ openDialog() {
+ this.$axios.get(this.$api.deviceScope.treeDevice).then(res => {
+ this.cascaderList = res.data;
+ });
+ this.$nextTick(() => {
+ this.$refs['form'].clearValidate()
+ })
+ this.getUserList()
+ },
+ //
+ getCalibrationDateFun(val) {
+ const index = this.equipOptions.findIndex(item => item.id === val)
+ if (index > -1) {
+ this.form.managementNumber = this.equipOptions[index].managementNumber
+ this.form.lastCalibrationDate = this.equipOptions[index].lastCalibrationDate
+ this.form.nextCalibrationDate = this.equipOptions[index].nextCalibrationDate
+ }
+ },
+ // 鐢垫簮绋冲畾鎬�-娴嬪畾閲忓脊妗嗕腑琛ㄦ牸鐨勫垹闄よ
+ feMeasuredQuantityListDelete(row, index) {
+ if (row.measuredQuantityId) {
+ this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeMeasuredQuantity + '?measuredQuantityId=' + row.measuredQuantityId).then(res => {
+ if (res.code === 201) return
+ this.form.feMeasuredQuantityList.splice(index, 1)
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ })
+ } else {
+ this.form.feMeasuredQuantityList.splice(index, 1)
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ }
+ },
+ // 鐢垫簮绋冲畾鎬�-娴嬪畾閲忚〃鏍兼柊澧炶
+ feMeasuredQuantityListAdd() {
+ const obj = {
+ measuredQuantityLabel: null,
+ valueA: null,
+ valueB: null,
+ valueC: null,
+ }
+ this.form.feMeasuredQuantityList.push(obj)
+ },
+ // 鐢垫簮绋冲畾鎬� 鏂板
+ addPowerSupplyStability() {
+ this.submitLoading = true
+ this.$refs.form.validate((valid) => {
+ if (valid) {
+ this.$axios.post(this.$api.facilitiesAndEnvironment.addLaboratoryFacilityPowerStable, this.form, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ this.submitLoading = false
+ if (res.code === 200) {
+ this.initData()
+ this.dialogVisible = false
+ }
+ }).catch(error => {
+ this.submitLoading = false
+ })
+ }
+ });
+ },
+ // 瀵煎嚭
+ downLoadPost(row) {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.exportFePowerStable + '?powerStableId=' + row.powerStableId,{responseType: "blob"}).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res],{ type: 'application/msword' });
+ //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+ let reader = new FileReader();
+ reader.readAsText(blob, 'utf-8');
+ reader.onload = () => {
+ try {
+ let result = JSON.parse(reader.result);
+ if (result.message) {
+ this.$message.error(result.message);
+ } else {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '鐢垫簮绋冲畾鎬�' + '.docx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ } catch (err) {
+ console.log(err);
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '鐢垫簮绋冲畾鎬�' + '.docx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ }
+ })
+ },
+ // 鐢垫簮绋冲畾鎬� 鐐瑰嚮琛岀紪杈戣Е鍙�
+ edit(row) {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.getFeMeasuredQuantityService + "?powerStableId=" + row.powerStableId).then(res => {
+ this.form = {...row}
+ this.form.feMeasuredQuantityList = res.data;
+ this.dialogVisible = true
+ });
+ },
+ // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
+ getUserList() {
+ this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
+ if (res.code == 200) {
+ this.responsibleOptions = res.data
+ }
+ })
+ },
+ }
+}
+</script>
+
+<style scoped>
+.header {
+ height: 3em;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue
new file mode 100644
index 0000000..f848a42
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue
@@ -0,0 +1,483 @@
+<template>
+ <div>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <div class="header">
+ <div>璇曢獙鍖哄煙</div>
+ <div>
+ 鍚嶇О锛�
+ <el-input v-model="search.testAreaName" clearable size="small" style="width: 120px"></el-input>
+ <el-button size="small" type="primary" @click="initData">鏌ヨ</el-button>
+ <el-button size="small" type="primary" @click="clickAdd">鏂� 澧�</el-button>
+ </div>
+ </div>
+ <el-table
+ :data="tableData"
+ height="calc(100vh - 18em)"
+ highlight-current-row
+ style="width: 100%"
+ @row-click="clickRow">
+ <el-table-column label="搴忓彿" type="index" width="60" align="center"></el-table-column>
+ <el-table-column label="鏈堝害鏃堕棿" min-width="180" prop="monthDate"></el-table-column>
+ <el-table-column label="璇曢獙鍖哄煙鍚嶇О" min-width="180" prop="testAreaName"></el-table-column>
+ <el-table-column label="纭鐘舵��" min-width="180" prop="isAffirm">
+ <template slot-scope="scope">
+ <el-tag type="danger" v-if="scope.row.isAffirm == 0">鏈‘璁�</el-tag>
+ <el-tag type="success" v-if="scope.row.isAffirm == 1">宸茬‘璁�</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="澧炶ˉ淇℃伅" min-width="180" prop="subjoin"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="180" align="center">
+ <template v-slot="scope">
+ <el-button size="small" type="text" @click="downLoadPost(scope.row)">瀵煎嚭</el-button>
+ <el-button size="small" type="text" @click="edit(scope.row)">缂栬緫</el-button>
+ <el-button :disabled="scope.row.isAffirm === '1'" size="small" type="text" @click="openApprovalDialog(scope.row)">纭</el-button>
+ <el-button size="small" type="text" @click="deleteRowFun(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
+ :total="search.total" layout="->,total, sizes, prev, pager, next, jumper"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange">
+ </el-pagination>
+ </el-col>
+ <el-col :span="12">
+ <div class="header">
+ <div>娓╂箍搴﹁褰曪細{{ saveRow.monthDate }}</div>
+ <div>
+ <el-button v-if="saveRow.monthDate" size="small" type="primary" @click="dialogVisible1 = true">鏂� 澧�</el-button>
+ </div>
+ </div>
+ <el-table
+ :data="tableData1"
+ height="calc(100vh - 18em)"
+ style="width: 100%">
+ <el-table-column label="搴忓彿" type="index" width="60" align="center"></el-table-column>
+ <el-table-column label="鏃ユ湡" min-width="100" prop="recordDate"></el-table-column>
+ <el-table-column align="center" label="涓婂崍" min-width="200">
+ <template>
+ <el-table-column label="鏃堕棿" min-width="110" prop="morningTestTime" show-overflow-tooltip></el-table-column>
+ <el-table-column label="娓╁害" min-width="80" prop="morningTemp" show-overflow-tooltip></el-table-column>
+ <el-table-column label="婀垮害" min-width="80" prop="morningHum" show-overflow-tooltip></el-table-column>
+ </template>
+ </el-table-column>
+ <el-table-column label="璁板綍鍛�" min-width="100" prop="morningRecorderUser"></el-table-column>
+ <el-table-column align="center" label="涓嬪崍" min-width="200">
+ <template>
+ <el-table-column label="鏃堕棿" min-width="110" prop="afternoonTime" show-overflow-tooltip></el-table-column>
+ <el-table-column label="娓╁害" min-width="80" prop="afternoonTemp" show-overflow-tooltip></el-table-column>
+ <el-table-column label="婀垮害" min-width="80" prop="afternoonHum" show-overflow-tooltip></el-table-column>
+ </template>
+ </el-table-column>
+ <el-table-column label="璁板綍鍛�" min-width="100" prop="afternoonRecorderUser"></el-table-column>
+ <el-table-column label="澶囨敞" min-width="100" prop="note" show-overflow-tooltip></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="100">
+ <template v-slot="scope">
+ <el-button size="small" type="text" @click="edit1(scope.row)">缂栬緫</el-button>
+ <el-button size="small" type="text" @click="deleteRowFun1(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination :current-page="1" :page-size="search1.size" :page-sizes="[10, 20, 30, 50, 100]"
+ :total="search1.total" layout="->,total, sizes, prev, pager, next, jumper"
+ @size-change="handleSizeChange1"
+ @current-change="handleCurrentChange1">
+ </el-pagination>
+ </el-col>
+ </el-row>
+ <el-dialog
+ :visible.sync="dialogVisible"
+ title="鎻愮ず"
+ width="50%">
+ <div style="height: 20vh;">
+ <el-form ref="form" :model="form" label-width="80px">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ湀搴︽椂闂�', trigger: 'blur' }]" label="鏈堝害鏃堕棿"
+ prop="monthDate">
+ <el-date-picker
+ v-model="form.monthDate"
+ format="yyyy-MM"
+ placeholder="閫夋嫨鏈堜唤"
+ size="small"
+ style="width: 100%"
+ type="month"
+ value-format="yyyy-MM">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ヨ瘯楠屽尯鍩�', trigger: 'blur' }]" label="璇曢獙鍖哄煙"
+ prop="testAreaName">
+ <el-input v-model="form.testAreaName"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog
+ :visible.sync="dialogVisible1"
+ title="鎻愮ず"
+ width="50%"
+ @open="openDialog">
+ <div style="height: 40vh;">
+ <el-form ref="form1" :model="form1" label-width="120px">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鏃ユ湡">
+ <el-date-picker
+ v-model="form1.recordDate"
+ format="yyyy-MM-dd"
+ placeholder="璇烽�夋嫨鏃ユ湡"
+ size="small"
+ style="width: 50%"
+ type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓婂崍鏃堕棿">
+ <el-time-picker
+ v-model="form1.morningTestTime"
+ size="small"
+ value-format="HH:mm:ss"
+ format="HH:mm:ss"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨鏃堕棿">
+ </el-time-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓婂崍娓╁害">
+ <el-input v-model="form1.morningTemp" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓婂崍婀垮害">
+ <el-input v-model="form1.morningHum" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓婂崍璁板綍鍛�">
+ <el-select v-model="form1.morningRecorderId" clearable filterable placeholder="璇烽�夋嫨"
+ size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬪崍鏃堕棿">
+ <el-time-picker
+ v-model="form1.afternoonTime"
+ size="small"
+ value-format="HH:mm:ss"
+ format="HH:mm:ss"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨鏃堕棿">
+ </el-time-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬪崍娓╁害">
+ <el-input v-model="form1.afternoonTemp" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬪崍婀垮害">
+ <el-input v-model="form1.afternoonHum" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬪崍璁板綍鍛�">
+ <el-select v-model="form1.afternoonRecorderId" clearable filterable placeholder="璇烽�夋嫨"
+ size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞">
+ <el-input
+ v-model="form1.note"
+ :rows="2"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ type="textarea">
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible1 = false">鍙� 娑�</el-button>
+ <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability1">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="approvalDialog" title="纭" width="30%" @close="subjoin = ''">
+ <span>
+ 澧炶ˉ淇℃伅锛�
+ <el-input v-model="subjoin" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="approvalLoading" @click="subjoin = '', approvalDialog = false">涓嶇‘璁�</el-button>
+ <el-button :loading="approvalLoading" type="primary" @click="handleApproval">纭� 璁�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0,
+ testAreaName: ''
+ },
+ search1: {
+ size: 20,
+ current: 1,
+ total: 0
+ },
+ tableData: [],
+ tableData1: [],
+ dialogVisible: false,
+ submitLoading: false,
+ dialogVisible1: false,
+ form: {},
+ form1: {},
+ saveRow: {},
+ responsibleOptions: [],
+ approvalDialog: false,
+ approvalLoading: false,
+ subjoin: '',
+ approvalRow: {},
+ }
+ },
+ mounted() {
+ this.initData()
+ },
+ watch: {
+ dialogVisible(newVal) {
+ if (!newVal) {
+ this.form = {
+ }
+ }
+ },
+ dialogVisible1(newVal) {
+ if (!newVal) {
+ this.form1 = {
+ }
+ }
+ }
+ },
+ methods: {
+ openApprovalDialog (row) {
+ this.approvalDialog = true
+ this.approvalRow = row
+ },
+ handleApproval () {
+ this.approvalLoading = true
+ const params = {
+ dateId: this.approvalRow.dateId,
+ subjoin: this.subjoin,
+ }
+ this.$axios.post(this.$api.facilitiesAndEnvironment.affirmFeTempHumDate, params, {
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ noQs: true
+ }).then(res => {
+ this.approvalLoading = false
+ if (res.code === 200) {
+ this.$message.success('纭鎴愬姛锛�')
+ this.approvalDialog = false
+ this.initData()
+ }
+ }).catch(err => {
+ this.approvalDialog = false
+ })
+ },
+ openDialog() {
+ this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
+ if (res.code == 200) {
+ this.responsibleOptions = res.data
+ }
+ })
+ },
+ addPowerSupplyStability() {
+ this.$refs.form.validate((valid) => {
+ if (valid) {
+ this.submitLoading = true
+ this.$axios.post(this.$api.facilitiesAndEnvironment.addFeTempHumDate, this.form, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鏂板鎴愬姛!')
+ this.submitLoading = false
+ this.initData()
+ this.dialogVisible = false
+ }
+ }).catch(err => {
+ this.submitLoading = false
+ })
+ }
+ });
+ },
+ addPowerSupplyStability1() {
+ if (!this.saveRow) {
+ this.$message.warning("璇烽�夋嫨璇曢獙鍖哄煙锛�")
+ return
+ }
+ this.$refs.form1.validate((valid) => {
+ this.submitLoading = true
+ if (valid) {
+ this.form1.dateId = this.saveRow.dateId
+ this.$axios.post(this.$api.facilitiesAndEnvironment.addFeTempHumRecord, this.form1, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鏂板鎴愬姛!')
+ this.submitLoading = false
+ this.initData1(this.saveRow.dateId)
+ this.dialogVisible1 = false
+ }
+ }).catch(err => {
+ this.submitLoading = false
+ })
+ }
+ });
+ },
+ clickRow(row) {
+ this.saveRow = row
+ this.initData1(row.dateId)
+ },
+ edit(row) {
+ this.form = {...row}
+ this.dialogVisible = true
+ },
+ deleteRowFun(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeTempHumDate + '?dateId=' + row.dateId).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ this.initData()
+ })
+ })
+ },
+ edit1(row) {
+ this.form1 = {...row}
+ this.dialogVisible1 = true
+ },
+ // 瀵煎嚭
+ downLoadPost(row) {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.exportTemperatureAndHumidityRecords + '?dateId=' + row.dateId,{responseType: "blob"}).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res],{ type: 'application/msword' });
+ //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+ let reader = new FileReader();
+ reader.readAsText(blob, 'utf-8');
+ reader.onload = () => {
+ try {
+ let result = JSON.parse(reader.result);
+ if (result.message) {
+ this.$message.error(result.message);
+ } else {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '娓╂箍搴﹁褰�' + '.docx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ } catch (err) {
+ console.log(err);
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '娓╂箍搴﹁褰�' + '.docx';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ }
+ })
+ },
+ deleteRowFun1(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeTempHumRecord + '?tempHumId=' + row.tempHumId).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ this.initData1(this.saveRow.dateId)
+ })
+ })
+ },
+ initData() {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.getFeTempHumDate + '?size=' + this.search.size + '¤t=' + this.search.current + '&testAreaName=' + this.search.testAreaName).then(res => {
+ if (res.code === 201) return;
+ this.tableData = res.data.records;
+ this.search.total = res.data.total;
+ if (res.data.records.length === 0) {
+ this.tableData1 = []
+ this.saveRow.monthDate = ''
+ }
+ });
+ },
+ initData1(dateId) {
+ this.$axios.get(this.$api.facilitiesAndEnvironment.getFeTempHumRecordPage + '?size=' + this.search1.size + '¤t=' + this.search1.current + '&dateId=' + dateId).then(res => {
+ if (res.code === 201) return;
+ this.tableData1 = res.data.records;
+ this.search1.total = res.data.total;
+ });
+ },
+ handleSizeChange(val) {
+ this.search.size = val;
+ this.initData();
+ },
+ handleCurrentChange(val) {
+ this.search.current = val;
+ this.initData();
+ },
+ handleSizeChange1(val) {
+ this.search1.size = val;
+ this.initData1();
+ },
+ handleCurrentChange1(val) {
+ this.search1.current = val;
+ this.initData1();
+ },
+ clickAdd() {
+ this.dialogVisible = true
+ }
+ }
+}
+</script>
+
+<style scoped>
+.header {
+ height: 3em;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-dialog.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-dialog.vue
new file mode 100644
index 0000000..510bbc2
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-dialog.vue
@@ -0,0 +1,189 @@
+<template>
+ <div>
+ <el-dialog v-loading="diaLoading" :close-on-click-modal="false"
+ :close-on-press-escape="false"
+ :visible.sync="formDia"
+ title="涓夊簾澶勭悊淇℃伅"
+ width="80%" @close="closeThreeWastesDia">
+ <el-form ref="form" :model="form" :rules="rules" label-width="auto">
+ <el-col :span="24">
+ <el-form-item label="澶囨敞" prop="purposes">
+ <el-input v-model="form.remark" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ <div style="text-align: right;margin-bottom: 10px">
+ <el-button size="small" type="primary" @click="addRow">娣诲姞</el-button>
+ <el-button size="small" type="danger" @click="clearTable">娓呯┖</el-button>
+ </div>
+ <el-table :data="wastesDetailList" border height="300" style="width: 100%">
+ <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+ <el-table-column header-align="center" label="鎺ユ敹浜�" prop="acceptor">
+ <template slot-scope="{row}">
+ <el-input v-model="row.acceptor" size="small"/>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="鎺ユ敹鍗曚綅" prop="receivingUnit">
+ <template slot-scope="{row}">
+ <el-input v-model="row.receivingUnit" size="small"/>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="鍚嶇О" prop="designation">
+ <template slot-scope="{row}">
+ <el-input v-model="row.designation" size="small"/>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="绉讳氦浜�" prop="transferPeople" width="180">
+ <template slot-scope="{row}">
+ <el-input v-model="row.transferPeople" size="small"/>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="浣撶Н" prop="volume" width="180">
+ <template slot-scope="{row}">
+ <el-input v-model="row.volume" size="small"/>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="閫佸鐞嗘棩鏈�" prop="deliveryDate" width="180">
+ <template slot-scope="{row}">
+ <!-- <el-input v-model="row.deliveryDate" size="small"/> -->
+ <el-date-picker
+ value-format="yyyy-MM-dd"
+ style="width: 100%"
+ format="yyyy-MM-dd"
+ size="small"
+ v-model="row.deliveryDate"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </template>
+ </el-table-column>
+ </el-table>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeThreeWastesDia">鍙� 娑�</el-button>
+ <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getInternalWastesOne,
+ addInternalWastes,
+ updateInternalWastes
+} from '@/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes'
+
+export default {
+ name: 'three-wastes-dialog',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ diaLoading: false,
+ loading: false,
+ form: {
+ remark: '',
+ wastesId: '',
+ },
+ rules: {
+ remark: [{required: false, message: '璇峰~鍐欏娉�',trigger: 'blur'}],
+ },
+ wastesDetailList: [],
+ operationType: '',
+ };
+ },
+ mounted() {
+
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDia (type, row) {
+ this.formDia = true
+ this.operationType = type
+ if (type !== 'add') {
+ this.searchInfo(row)
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo (row) {
+ this.diaLoading = true
+ getInternalWastesOne({wastesId: row.wastesId}).then(res => {
+ this.diaLoading = false
+ if (res.code === 200){
+ this.form = res.data
+ this.wastesDetailList = this.form.wastesDetailList
+ }
+ }).catch(err => {
+ console.log(err)
+ this.diaLoading = false
+ })
+ },
+ // 鎻愪氦寮规鏁版嵁
+ handleEdit () {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ if (this.wastesDetailList.length === 0) {
+ this.$message.warning('璇锋坊鍔犺〃鏍兼暟鎹�')
+ return
+ }
+ this.loading = true
+ const internalImplementDto = this.HaveJson(this.form)
+ internalImplementDto.wastesDetailList = this.HaveJson(this.wastesDetailList)
+ if (this.operationType === 'add') {
+ addInternalWastes(internalImplementDto).then(res => {
+ this.loading = false
+ if (res.code === 200){
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeThreeWastesDia()
+ }
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ } else if (this.operationType === 'edit') {
+ updateInternalWastes(internalImplementDto).then(res => {
+ this.loading = false
+ if (res.code === 200){
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeThreeWastesDia()
+ }
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ }
+ } else {
+ console.log('error submit!!');
+ return false;
+ }
+ });
+ },
+ // 澧炲姞琛ㄦ牸琛屾暟鎹�
+ addRow () {
+ this.wastesDetailList.push({
+ acceptor: '',
+ receivingUnit: '',
+ designation: '',
+ transferPeople: '',
+ volume: '',
+ deliveryDate: '',
+ })
+ },
+ // 娓呯┖琛ㄦ牸鏁版嵁
+ clearTable () {
+ this.wastesDetailList = []
+ },
+ closeThreeWastesDia () {
+ this.$refs.form.resetFields();
+ this.formDia = false
+ this.$emit('closeThreeWastesDia')
+ },
+ }
+};
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-treatment.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-treatment.vue
new file mode 100644
index 0000000..81ead8f
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-treatment.vue
@@ -0,0 +1,202 @@
+<template>
+ <div class="capacity-scope">
+ <div class="search">
+ <div>
+ <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="searchForm.remark">
+ </el-input>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="searchList">鏌� 璇�</el-button>
+ <el-button icon="el-icon-refresh" size="mini" @click="resetSearchForm">閲� 缃�</el-button>
+ </el-form-item>
+ </el-form>
+ </div>
+ <div>
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </div>
+
+ </div>
+ <div class="table">
+ <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'" @pagination="pagination"
+ :page="page" :tableLoading="tableLoading"></lims-table>
+ </div>
+ <three-wastes-dialog v-if="threeWastesDia" ref="threeWastesDia" @closeThreeWastesDia="closeThreeWastesDia"></three-wastes-dialog>
+ </div>
+</template>
+
+<script>
+import ThreeWastesDialog from './three-wastes-dialog.vue';
+import limsTable from '@/components/Table/lims-table.vue'
+import {
+ pageInternalWastes,
+ removeStandardSubstance,
+ exportInternalWastes
+} from '@/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes'
+export default {
+ name: 'a6-three-wastes-treatment',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {
+ ThreeWastesDialog,
+ limsTable
+ },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ remark: '',
+ },
+ tableColumn: [
+ {
+ label: '鍒涘缓鏃堕棿',
+ prop: 'createTime',
+ minWidth: '100'
+ },
+ {
+ label: '鍒涘缓浜�',
+ prop: 'createUserName',
+ minWidth: '100'
+ },
+ {
+ label: '澶囨敞',
+ prop: 'remark',
+ minWidth: '100'
+ },
+ {
+ label: '淇敼鏃堕棿',
+ prop: 'updateTime',
+ minWidth: '100'
+ },
+ {
+ label: '淇敼浜�',
+ prop: 'updateUserName',
+ minWidth: '100'
+ },
+ {
+ dataType: 'action',
+ fixed: 'right',
+ minWidth: '220',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ },
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('edit', row);
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ },
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ total: 0,
+ size: 10,
+ current: 1
+ },
+ total: 0,
+ threeWastesDia: false
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList () {
+ this.tableLoading = true
+ pageInternalWastes({...this.page,...this.searchForm}).then(res => {
+ this.tableLoading = false
+ if (res.code === 200){
+ this.tableData = res.data.records
+ this.page.total = res.data.total
+ }
+ }).catch(err => {
+ console.log('err---', err);
+ this.tableLoading = false
+ })
+ },
+ // 鍒犻櫎
+ delPlan (row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.tableLoading = true
+ removeStandardSubstance({wastesId:row.wastesId}).then(res => {
+ this.tableLoading = false
+ if (res.code === 200){
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.searchList()
+ }
+ }).catch(err => {
+ this.tableLoading = false
+ console.log('err---', err);
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+ openFormDia (type, row) {
+ this.threeWastesDia = true
+ this.$nextTick(() => {
+ this.$refs.threeWastesDia.openDia(type, row)
+ })
+ },
+ // 瀵煎嚭
+ handleDown (row) {
+ exportInternalWastes({wastesId:row.wastesId}).then(res =>{
+ this.outLoading = false
+ const blob = new Blob([res],{ type: 'application/msword' });
+ this.$download.saveAs(blob, '涓夊簾澶勭悊瀵煎嚭.docx')
+ this.$message.success('瀵煎嚭鎴愬姛')
+ })
+ },
+ closeThreeWastesDia () {
+ this.threeWastesDia = false
+ this.searchList()
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm () {
+ this.searchForm.remark = '';
+ this.searchList()
+ },
+ // 鍒嗛〉鍒囨崲
+ pagination(page) {
+ this.page.size = page.limit
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.search {
+ height: 46px;
+ display: flex;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/index.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/index.vue
new file mode 100644
index 0000000..9705d3d
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/index.vue
@@ -0,0 +1,50 @@
+<template>
+ <div class="main">
+ <el-tabs v-model="activeName" :lazy="true" type="border-card">
+ <el-tab-pane label="璁炬柦鍜岀幆澧冩潯浠惰姹�" name="璁炬柦鍜岀幆澧冩潯浠惰姹�">
+ <FacilitiesEnvironmentalConditions v-if="activeName === '璁炬柦鍜岀幆澧冩潯浠惰姹�'"/>
+ </el-tab-pane>
+
+ <el-tab-pane label="涓夊簾澶勭悊" name="涓夊簾澶勭悊">
+ <a6-three-wastes-treatment v-if="activeName === '涓夊簾澶勭悊'"></a6-three-wastes-treatment>
+ </el-tab-pane>
+ <el-tab-pane label="杩涘嚭浜哄憳绠$悊" name="杩涘嚭浜哄憳绠$悊">
+ <personnel-management v-if="activeName === '杩涘嚭浜哄憳绠$悊'"></personnel-management>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </template>
+
+ <script>
+ import FacilitiesEnvironmentalConditions from "../facilitiesEnvironment/component/facilities-environmental-conditions.vue";
+// // 澶栨潵浜哄憳绠$悊
+ import ExternalPersonnelManagement from "../facilitiesEnvironment/component/Personnel-management.vue";
+ import A6ThreeWastesTreatment from '../facilitiesEnvironment/component/three-wastes-treatment.vue';
+// import PersonnelManagement from '../do/a6-facilities-environment/Personnel-management.vue';
+
+ export default {
+ components: {
+ // PersonnelManagement,
+ A6ThreeWastesTreatment,
+ ExternalPersonnelManagement,
+ FacilitiesEnvironmentalConditions
+ },
+ data() {
+ return {
+ activeName: '璁炬柦鍜岀幆澧冩潯浠惰姹�',
+ }
+ }
+ }
+ </script>
+
+ <style scoped>
+ .main {
+ padding: 15px 0;
+ width: 100%;
+ border-radius: 15px;
+ }
+ v-deep .el-tabs--border-card>.el-tabs__content {
+ height: calc(100vh - 9em);
+ padding: 0;
+ }
+ </style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterial/index.vue b/src/views/CNAS/resourceDemand/standardMaterial/index.vue
index e75f44f..c23d9f9 100644
--- a/src/views/CNAS/resourceDemand/standardMaterial/index.vue
+++ b/src/views/CNAS/resourceDemand/standardMaterial/index.vue
@@ -35,9 +35,6 @@
<script>
-// import FormDia from '../do/a6-standard-material-list/formDia.vue';
-// import BorrowDia from '../do/a6-standard-material-list/borrowDia.vue';
-// import ReturnDia from '../do/a6-standard-material-list/returnDia.vue';
import limsTable from '@/components/Table/lims-table.vue'
import {
getPageStandardSubstance,
@@ -121,11 +118,6 @@
prop: 'remark',
minWidth: '100'
},
- // {
- // label: '鍒涘缓浜�',
- // prop: 'createUser',
- // minWidth: '100'
- // },
{
label: '鍒涘缓鏃堕棿',
prop: 'createTime',
diff --git a/src/views/business/productSamplingInfo/components/addQuarterItem.vue b/src/views/business/productSamplingInfo/components/addQuarterItem.vue
new file mode 100644
index 0000000..765ed43
--- /dev/null
+++ b/src/views/business/productSamplingInfo/components/addQuarterItem.vue
@@ -0,0 +1,290 @@
+<template>
+ <div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="quarterSampleDia" title="瀛e害鎶芥牱" width="90%" @close="quarterSampleDia = false">
+ <div style="display: flex;align-items: center;justify-content: space-between;margin-bottom: 10px">
+ <div style="width: 30%;display: flex;align-items: center;" >
+ <span style="width: 50px">缂栧彿锛�</span>
+ <el-input v-model="quarterSampleForm.quarterNo" :disabled="operationType !== 'add'" size="small"></el-input>
+ </div>
+ <div v-if="operationType === 'add'">
+ <el-button size="small" type="primary" @click="addQuarter">娣诲姞</el-button>
+ <el-button size="small" type="danger" @click="clearTable">娓呯┖</el-button>
+ </div>
+ </div>
+ <div>
+ <el-table v-loading="tableLoading" :data="quarterItems" border height="400" style="width: 100%">
+ <el-table-column label="浜у搧绫诲瀷" prop="productType" width="200">
+ <template slot-scope="{row}">
+ <template>
+ <el-input v-model="row.productType" size="small"/>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column label="璐d换浜�" prop="dutyUser" width="100"></el-table-column>
+ <el-table-column label="鍨嬪彿" prop="productModel" width="120">
+ <template slot-scope="{row}">
+ <template>
+ <el-input v-model="row.productModel" size="small" :disabled="operationType === 'view'"/>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎶芥牱鏁伴噺" min-width="340" prop="spotCheckNumber">
+ <template slot-scope="{row}">
+ <template>
+ <el-input v-model="row.spotCheckNumber" size="small" :disabled="operationType === 'view'"/>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column v-if="operationType === 'add'" label="鏁伴噺" min-width="120" prop="number">
+ <template slot-scope="{row}">
+ <template>
+ <el-input v-model="row.number" size="small" :disabled="operationType === 'view'"/>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column v-if="operationType !== 'add'" label="鎶芥牱鏃堕棿" prop="spotCheckTime" width="160">
+ <template slot-scope="{row}">
+ <template>
+ <el-date-picker v-model="row.spotCheckTime"
+ format="yyyy-MM-dd"
+ :disabled="operationType === 'view'"
+ placeholder="閫夋嫨鏃ユ湡"
+ size="small"
+ clearable
+ style="width:100%"
+ type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column v-if="operationType !== 'add'" label="璇曟牱缁撹" prop="result" width="130">
+ <template v-slot="scope">
+ <el-select v-model="scope.row.result" placeholder="璇烽�夋嫨" size="small" clearable :disabled="operationType === 'view'">
+ <el-option label="鍚堟牸" value="鍚堟牸"></el-option>
+ <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�"></el-option>
+ </el-select>
+ </template>
+ </el-table-column>
+ <el-table-column v-if="operationType !== 'add'" label="鍙栨牱浜哄憳" prop="samplingUser" width="120">
+ <template slot-scope="{row}">
+ <template>
+ <el-input v-model="row.samplingUser" size="small" :disabled="operationType === 'view'"/>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column label="澶囨敞" prop="itemRemark" width="200">
+ <template slot-scope="{row}">
+ <template>
+ <el-input v-model="row.itemRemark" size="small" :disabled="operationType === 'view'"/>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column v-if="operationType !== 'view'" fixed="right" label="鎿嶄綔" width="100">
+ <template slot-scope="scope">
+ <el-button size="small" style="color: #f56c6c" type="text" @click="deleteScope(scope.$index)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <div style="display: flex;align-items: center;margin: 10px 0">
+ <span style="width: 70px">澶囨敞锛�</span>
+ <el-input v-model="quarterSampleForm.remark" :disabled="operationType === 'view'" size="small" style="width: 43%" type="textarea"></el-input>
+ </div>
+ <div v-if="operationType !== 'add'">
+ <el-form ref="form" :model="editForm" label-width="70px">
+ <el-col :span="12">
+ <el-form-item label="缂栧埗浜猴細">
+ <el-select v-model="editForm.writeUser" :disabled="operationType !=='edit'" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浼氱浜猴細">
+ <el-select v-model="editForm.countersignUser" :disabled="operationType !=='edit'" multiple placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳浜猴細">
+ <el-select v-model="editForm.examineUser" :disabled="operationType !=='edit'" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎵瑰噯浜猴細">
+ <el-select v-model="editForm.ratifyUser" :disabled="operationType !=='edit'" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="quarterSampleDia = false">鍙� 娑�</el-button>
+ <el-button v-if="operationType === 'add'" @click="quarterSampleDia = false">淇� 瀛�</el-button>
+ <el-button v-if="operationType !== 'add' && operationType !== 'view'" type="primary" @click="handleSample">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {addQuarter, getQuarter, updateQuarterOnOrder} from "@/api/business/productSamplingInfo";
+import {selectUserCondition} from "@/api/performance/class";
+
+export default {
+ name: "addQuarterItem",
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ tableLoading: false,
+ quarterSampleDia: false, // 瀛e害鎶芥牱寮规
+ quarterSampleForm: {
+ quarterNo: '', // 缂栧彿
+ },
+ quarterItems: [],
+ quarterTemItems: [],
+ operationType: '',
+ editForm: {
+ quarterId: '',
+ writeUser: '', // 缂栧埗浜�
+ countersignUser: [], // 浼氱浜�
+ examineUser: '', // 瀹℃牳浜�
+ ratifyUser: '', // 鎵瑰噯浜�
+ },
+ userList: [],
+ quarterRow: {},
+ }
+ },
+ mounted() {
+ this.getUserList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ openDia (quarterTemItems, type) {
+ this.quarterSampleDia = true
+ this.operationType = type
+ if (type === 'add') {
+ if (quarterTemItems.length > 0) {
+ this.quarterItems = quarterTemItems
+ }
+ this.quarterSampleForm.quarterNo = getCurrentMonthTwoDigits()
+ } else {
+ this.tableLoading = true
+ this.quarterRow = quarterTemItems
+ getQuarter({quarterId: quarterTemItems.quarterId}).then(res => {
+ this.tableLoading = false
+ if (res.code === 200) {
+ this.quarterItems = res.data.quarterItems
+ this.quarterSampleForm.quarterNo = res.data.quarterNo
+ this.quarterSampleForm.remark = res.data.remark
+ this.editForm.quarterId = res.data.quarterId
+ this.editForm.writeUser = res.data.writeUser
+ this.editForm.examineUser = res.data.examineUser
+ this.editForm.ratifyUser = res.data.ratifyUser
+ if (res.data.countersignUser) {
+ this.editForm.countersignUser = res.data.countersignUser.split(",").map(Number)
+ }
+ }
+ })
+ }
+ },
+ // 鎵嬪姩娣诲姞
+ addQuarter () {
+ this.quarterItems.push({
+ productType: '',
+ dutyUser: JSON.parse(localStorage.getItem("user")).name,
+ productModel: '',
+ spotCheckNumber: '',
+ number: '',
+ spotCheckTime: '',
+ result: '',
+ samplingUser: '',
+ itemRemark: '',
+ })
+ },
+ // 鎻愪氦瀛e害鎶芥牱
+ handleSample () {
+ this.$confirm('鏄惁鎻愪氦璇ユ暟鎹�', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ if (this.operationType === 'add') {
+ this.quarterSampleForm.quarterItems = JSON.parse(JSON.stringify(this.quarterItems))
+ this.quarterSampleForm.quarterItems.forEach(item => {
+ item.spotCheckNumber = item.spotCheckNumber + ' ' + (item.number == null ? "" : item.number)
+ })
+ addQuarter(this.quarterSampleForm).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.quarterItems = []
+ this.$parent.quarterTemItems = []
+ this.closeQuarterSampleDia()
+ }
+ })
+ } else {
+ const params = {...this.editForm}
+ if (params.countersignUser.length > 0) {
+ params.countersignUser = params.countersignUser.join(',')
+ } else {
+ params.countersignUser = ''
+ }
+ params.quarterItems = JSON.parse(JSON.stringify(this.quarterItems))
+ updateQuarterOnOrder(params).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.quarterItems = []
+ this.closeQuarterSampleDia()
+ }
+ })
+ }
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑�'
+ });
+ });
+
+ },
+ // 娓呯┖鎶芥牱璁″垝
+ clearTable () {
+ this.quarterItems = []
+ this.$parent.quarterTemItems = []
+ },
+ // 鎵嬪姩鍒犻櫎
+ deleteScope (index) {
+ this.quarterItems.splice(index, 1)
+ },
+ // 鍏抽棴瀛e害鎶芥牱寮规
+ closeQuarterSampleDia () {
+ this.quarterSampleDia = false
+ if (this.operationType === 'add') {
+ this.$parent.handleStockList()
+ } else {
+ this.$parent.refreshTable()
+ }
+ },
+ getUserList(){
+ selectUserCondition({ type: 0 }).then((res) => {
+ this.userList = res.data;
+ })
+ },
+ },
+}
+function getCurrentMonthTwoDigits() {
+ const currentDate = new Date();
+ const year = currentDate.getFullYear();
+ const currentMonth = currentDate.getMonth() + 1;
+ return year + currentMonth.toString().padStart(2, '0');
+}
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/business/productSamplingInfo/index.vue b/src/views/business/productSamplingInfo/index.vue
new file mode 100644
index 0000000..a7c2831
--- /dev/null
+++ b/src/views/business/productSamplingInfo/index.vue
@@ -0,0 +1,647 @@
+<template>
+ <div class="capacity-scope">
+ <div style="display: flex;justify-content: space-between">
+ <el-form :model="entity" ref="entity" size="small" :inline="true">
+ <el-form-item label="缂栧彿" prop="quarterNo" v-show="tabIndex === 0">
+ <el-input v-model="entity.quarterNo" clearable placeholder="璇疯緭鍏�"
+ size="small"
+ @keyup.enter.native="refreshTable">
+ </el-input>
+ </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-form-item>
+ </el-form>
+ <div>
+ <el-button v-if="tabIndex === 1" size="small" type="primary" @click="yearSample('add')">骞村害鎶芥牱</el-button>
+ </div>
+ </div>
+ <div>
+ <div class="table">
+ <ul class="tab">
+ <li v-for="(m,i) in tabList" :key="i" :class="{active:i===tabIndex}" @click="handleTab(m,i)">{{m.label}}</li>
+ </ul>
+ <!--瀛e害-->
+ <lims-table :tableData="tableData" :column="column" v-if="tabIndex === 0"
+ @pagination="pagination" :height="'calc(100vh - 290px)'"
+ :page="page" :tableLoading="tableLoading"></lims-table>
+ <!--骞村害-->
+ <lims-table :tableData="tableData1" :column="column1" v-if="tabIndex === 1"
+ @pagination="pagination1" :height="'calc(100vh - 290px)'"
+ key="tableData1" :page="page1" :tableLoading="tableLoading1"></lims-table>
+ </div>
+ </div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="yearSampleDia" title="骞村害鎶芥牱" width="70%"
+ @close="closeYearSampleDia">
+ <div style="display: flex;align-items: center;justify-content: space-between;margin-bottom: 10px">
+ <div style="width: 30%;display: flex;align-items: center;" >
+ <el-input v-if="operationType !=='view'" v-model="currentYear" size="small"/>
+ <span v-if="operationType ==='view'" style="width: 160px;font-size: 18px;font-weight: 600">{{currentYear}}</span>
+ </div>
+ <div v-if="operationType !== 'view'">
+ <el-button size="small" type="primary" @click="addQuarter">娣诲姞</el-button>
+ <el-button size="small" type="danger" @click="clearTable">娓呯┖</el-button>
+ </div>
+ </div>
+ <div>
+ <el-table :data="yearItems" border height="450" style="width: 100%">
+ <el-table-column label="绫诲埆" prop="yearType" width="240">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.yearType" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.yearType}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="1" prop="january" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.january" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.january}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="2" prop="february" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.february" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.february}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="3" prop="march" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.march" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.march}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="4" prop="april" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.april" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.april}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="5" prop="may" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.may" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.may}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="6" prop="june" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.june" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.june}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="7" prop="july" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.july" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.july}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="8" prop="august" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.august" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.august}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="9" prop="september" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.september" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.september}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="10" prop="october" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.october" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.october}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="11" prop="november" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.november" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.november}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="12" prop="december" width="160">
+ <template slot-scope="{row}">
+ <template v-if="operationType !== 'view'">
+ <el-input v-model="row.december" size="small" type="textarea" :rows="4"/>
+ </template>
+ <template v-else>
+ <span size="small">{{row.december}}</span>
+ </template>
+ </template>
+ </el-table-column>
+ <el-table-column v-if="operationType !== 'view'" fixed="right" label="鎿嶄綔" width="100">
+ <template slot-scope="scope">
+ <el-button size="small" style="color: #f56c6c" type="text" @click="deleteScope(scope.$index)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <div style="display: flex;align-items: center;margin-top: 10px">
+ <span style="width: 70px">娉ㄦ剰浜嬮」锛�</span>
+ <el-input v-model="yearSampleForm.tableRemark" :disabled="operationType === 'view'" size="small" style="width: 50%" type="textarea"></el-input>
+ </div>
+ <div style="display: flex;align-items: center;margin-top: 10px">
+ <span style="width: 70px">澶囨敞锛�</span>
+ <el-input v-model="yearSampleForm.remark" :disabled="operationType === 'view'" size="small" style="width: 50%" type="textarea"></el-input>
+ </div>
+ <div v-if="operationType !== 'add'">
+ <el-form ref="form" :model="editYearFormRow" label-width="70px">
+ <el-col :span="12">
+ <el-form-item label="缂栧埗浜猴細">
+ <el-select v-model="editYearFormRow.writeUser" :disabled="operationType !=='edit'" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浼氱浜猴細">
+ <el-select v-model="editYearFormRow.countersignUser" :disabled="operationType !=='edit'" multiple placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳浜猴細">
+ <el-select v-model="editYearFormRow.examineUser" :disabled="operationType !=='edit'" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎵瑰噯浜猴細">
+ <el-select v-model="editYearFormRow.ratifyUser" :disabled="operationType !=='edit'" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeYearSampleDia">鍙� 娑�</el-button>
+ <el-button v-if="operationType !== 'view'" type="primary" @click="handleSample">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <add-quarter-item ref="addQuarterItem"></add-quarter-item>
+ </div>
+</template>
+
+<script>
+import AddQuarterItem from "./components/addQuarterItem.vue";
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+ addSpotCheckYear,
+ deleteQuarter, deleteSpotCheckYear,
+ finalReportQuarter,
+ finalReportSpotCheckYear,
+ getQuarterPage, getSpotCheckYear, getSpotCheckYearPage, updateSpotCheckYear
+} from "@/api/business/productSamplingInfo";
+import {selectUserCondition} from "@/api/performance/class";
+
+export default {
+ name: "b1-product-sampling-info",
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {limsTable, AddQuarterItem},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ upIndex: 0,
+ tabIndex: 0,
+ tabList: [
+ {
+ label: '瀛e害',
+ value: 0
+ },
+ {
+ label: '骞村害',
+ value: 1
+ },
+ ],
+ entity: {
+ quarterNo: null,
+ },
+ tableData: [],
+ tableLoading: false,
+ column: [
+ {label: '缂栧彿', prop: 'quarterNo'},
+ {label: '澶囨敞', prop: 'remark'},
+ {label: '鍒涘缓浜�', prop: 'createUserName'},
+ {label: '鍒涘缓鏃堕棿', prop: 'createTime'},
+ {
+ dataType: 'action',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.editForm(row);
+ },
+ },
+ {
+ name: '鏌ョ湅',
+ type: 'text',
+ clickFun: (row) => {
+ this.viewQuarterInfo(row);
+ },
+ },
+ {
+ name: '涓嬭浇',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row);
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ clickFun: (row) => {
+ this.deleteQuarterInfo(row);
+ },
+ }
+ ]
+ }
+ ],
+ page: {
+ total:0,
+ size:10,
+ current:1
+ },
+ tableData1: [],
+ tableLoading1: false,
+ column1: [
+ { label: '鍚嶇О', prop: 'yearHead' },
+ { label: '鍒涘缓浜�', prop: 'createUserName' },
+ { label: '鍒涘缓鏃堕棿', prop: 'createTime' },
+ {
+ dataType: 'action',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.editYearForm(row);
+ },
+ },
+ {
+ name: '鏌ョ湅',
+ type: 'text',
+ clickFun: (row) => {
+ this.viewYearInfo(row);
+ },
+ },
+ {
+ name: '涓嬭浇',
+ type: 'text',
+ clickFun: (row) => {
+ this.download(row);
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ clickFun: (row) => {
+ this.deleteYearInfo(row);
+ },
+ },
+ ]
+ }
+ ],
+ page1: {
+ total: 0,
+ size: 10,
+ current: 1
+ },
+ yearSampleDia: false, // 骞村害鎶芥牱
+ yearSampleForm: {
+ tableRemark: '',
+ remark: ''
+ },
+ yearItems: [],
+ currentYear: '',
+ operationType: '',
+ userList: [],
+ yearRow: {},
+ editYearFormRow: {
+ yearId: '',
+ writeUser: '', // 缂栧埗浜�
+ countersignUser: null, // 浼氱浜�
+ examineUser: '', // 瀹℃牳浜�
+ ratifyUser: '', // 鎵瑰噯浜�
+ }
+ }
+ },
+ mounted() {
+ this.refreshTable()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍥炶皟
+ refreshTable(e) {
+ if (this.tabIndex === 0) {
+ this.getQuarterPageList()
+ } else if (this.tabIndex === 1) {
+ this.getSpotCheckYearPageList()
+ }
+ },
+ getQuarterPageList () {
+ this.tableLoading = true
+ getQuarterPage({
+ ...this.page,...this.entity
+ }).then(res => {
+ this.tableLoading = false
+ this.page.total = res.data.total
+ this.tableData = res.data.records
+ }).catch(err => {
+ this.tableLoading = false
+ })
+ },
+ getSpotCheckYearPageList () {
+ this.tableLoading1 = true
+ getSpotCheckYearPage({
+ ...this.page1
+ }).then(res => {
+ this.tableLoading1 = false
+ this.page1.total = res.data.total
+ this.tableData1 = res.data.records
+ }).catch(err => {
+ this.tableLoading1 = false
+ })
+ },
+ // 閲嶇疆
+ refresh() {
+ this.resetForm('entity')
+ this.refreshTable()
+ },
+ pagination (page) {
+ this.page.size = page.limit
+ this.refreshTable()
+ },
+ pagination1 (page) {
+ this.page1.size = page.limit
+ this.refreshTable()
+ },
+ // 缂栬緫瀛e害鎶芥牱
+ editForm (row) {
+ this.$refs.addQuarterItem.openDia(row, 'edit')
+ },
+ // 鏌ョ湅瀛e害鎶芥牱
+ viewQuarterInfo (row) {
+ this.$refs.addQuarterItem.openDia(row, 'view')
+ },
+ // 鍒犻櫎瀛e害鎶芥牱
+ deleteQuarterInfo (row) {
+ this.$confirm('鏄惁鍒犻櫎褰撳墠鏁版嵁?', "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }).then(() => {
+ deleteQuarter({quarterId: row.quarterId}).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.refreshTable()
+ }
+ })
+ }).catch(() => {})
+ },
+ // 瀵煎嚭
+ handleDown (row) {
+ let randomNum = Math.random();
+ finalReportQuarter({quarterId: row.quarterId, random: randomNum}).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '瀛e害鎶芥牱淇℃伅瀵煎嚭.docx')
+ this.$message.success('瀵煎嚭鎴愬姛')
+ })
+ },
+ // 骞村害涓嬭浇
+ download(row) {
+ finalReportSpotCheckYear({yearId: row.yearId}).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, row.yearHead + '.docx')
+ this.$message.success('瀵煎嚭鎴愬姛')
+ })
+ },
+ // 鍒犻櫎骞村害鎶芥牱
+ deleteYearInfo (row) {
+ this.$confirm('鏄惁鍒犻櫎褰撳墠鏁版嵁?', "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }).then(() => {
+ deleteSpotCheckYear({yearId: row.yearId}).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.refreshTable()
+ }
+ })
+ }).catch(() => {})
+ },
+ // 鏌ョ湅骞村害璇︽儏
+ viewYearInfo (row) {
+ this.operationType = 'view'
+ this.getUserList()
+ this.yearSampleDia = true
+ this.yearRow = row
+ getSpotCheckYear({yearId: row.yearId}).then(res => {
+ if (res.code === 200) {
+ this.currentYear = res.data.yearHead
+ this.yearItems = res.data.yearItems
+ this.yearSampleForm.tableRemark = res.data.tableRemark
+ this.yearSampleForm.remark = res.data.remark
+ this.editYearFormRow.yearId = res.data.yearId
+ this.editYearFormRow.writeUser = res.data.writeUser
+ this.editYearFormRow.examineUser = res.data.examineUser
+ this.editYearFormRow.ratifyUser = res.data.ratifyUser
+ if (res.data.countersignUser) {
+ this.editYearFormRow.countersignUser = res.data.countersignUser.split(",").map(Number)
+ }
+ }
+ })
+ },
+ // 缂栬緫骞村害鎶芥牱
+ editYearForm (row) {
+ this.operationType = 'edit'
+ this.getUserList()
+ this.yearSampleDia = true
+ getSpotCheckYear({yearId: row.yearId}).then(res => {
+ if (res.code === 200) {
+ this.currentYear = res.data.yearHead
+ this.yearItems = res.data.yearItems
+ this.yearSampleForm.tableRemark = res.data.tableRemark
+ this.yearSampleForm.remark = res.data.remark
+ this.editYearFormRow.yearId = res.data.yearId
+ this.editYearFormRow.writeUser = res.data.writeUser
+ this.editYearFormRow.examineUser = res.data.examineUser
+ this.editYearFormRow.ratifyUser = res.data.ratifyUser
+ if (res.data.countersignUser) {
+ this.editYearFormRow.countersignUser = res.data.countersignUser.split(",").map(Number)
+ }
+ }
+ })
+ },
+ // 鎻愪氦骞村害璁″垝
+ handleSample () {
+ if (this.operationType === 'add') {
+ this.yearSampleForm.yearItems = JSON.parse(JSON.stringify(this.yearItems))
+ this.yearSampleForm.yearHead = this.currentYear
+ addSpotCheckYear(this.yearSampleForm).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.yearSampleForm = {}
+ this.yearItems = []
+ this.closeYearSampleDia()
+ this.refreshTable()
+ }
+ })
+ } else {
+ const params = {...this.editYearFormRow}
+ if (params.countersignUser != null) {
+ params.countersignUser = params.countersignUser.join(',')
+ }
+ params.yearItems = JSON.parse(JSON.stringify(this.yearItems))
+ params.tableRemark = this.yearSampleForm.tableRemark
+ params.remark = this.yearSampleForm.remark
+ updateSpotCheckYear(params).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇敼鎴愬姛')
+ this.yearSampleForm = {}
+ this.editYearFormRow = {
+ yearId: '',
+ writeUser: '', // 缂栧埗浜�
+ countersignUser: [], // 浼氱浜�
+ examineUser: '', // 瀹℃牳浜�
+ ratifyUser: '', // 鎵瑰噯浜�
+ }
+ this.yearItems = []
+ this.closeYearSampleDia()
+ this.refreshTable()
+ }
+ })
+ }
+ },
+ yearSample (type) {
+ this.operationType = type
+ const currentDate = new Date();
+ this.yearSampleDia = true
+ this.currentYear = currentDate.getFullYear() + '骞村勾搴︽娊妫�璁″垝'
+ },
+ // 娣诲姞骞村害璁″垝
+ addQuarter () {
+ this.yearItems.push({})
+ },
+ // 娓呯┖鎶芥牱璁″垝
+ clearTable () {
+ this.yearItems = []
+ },
+ // 鎵嬪姩鍒犻櫎
+ deleteScope (index) {
+ this.yearItems.splice(index, 1)
+ },
+ // 鍒囨崲涓嬪崟tab琛ㄦ牸
+ handleTab(m, i) {
+ this.tabIndex = i;
+ if (this.tabIndex === 0) {
+ this.componentData.entity.quarterNo = this.entity.quarterNo
+ }
+ this.refreshTable()
+ },
+ closeYearSampleDia () {
+ this.yearSampleForm = {
+ tableRemark: '',
+ remark: ''
+ }
+ this.yearItems = []
+ this.yearSampleDia = false
+ },
+ getStyle(){
+ return 'height: calc(100% - '+'44'+'px)'
+ },
+ getUserList(){
+ selectUserCondition({ type: 0 }).then((res) => {
+ this.userList = res.data;
+ })
+ },
+ },
+}
+</script>
+
+<style scoped>
+.tab {
+ list-style-type: none;
+ display: flex;
+ margin-bottom: 12px;
+ margin-top: 0;
+ padding-left: 0;
+}
+
+.tab li {
+ line-height: 24px;
+ padding: 6px 14px;
+ font-size: 14px;
+ color: #333333;
+ border: 1px solid #EEEEEE;
+ cursor: pointer;
+}
+
+.tab li:nth-child(1) {
+ border-radius: 8px 0 0 8px;
+}
+
+.tab li:nth-child(2) {
+ border-radius: 0 8px 8px 0;
+}
+
+.tab li.active {
+ border-color: #3A7BFA;
+ color: #3A7BFA;
+}
+</style>
--
Gitblit v1.9.3