From 1c5ca22f781214dba8057c7547461ba86fe06a95 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 24 二月 2025 10:47:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
src/views/login.vue | 57 +--
src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue | 337 ++++++++++++++++++++++
src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue | 305 ++++++++++++++++++++
src/views/CNAS/systemManagement/measuresDealRisks/index.vue | 39 ++
src/views/CNAS/process/method/standardMethod/index.vue | 4
src/api/cnas/systemManagement/measuresDealRisks.js | 116 +++++++
6 files changed, 823 insertions(+), 35 deletions(-)
diff --git a/src/api/cnas/systemManagement/measuresDealRisks.js b/src/api/cnas/systemManagement/measuresDealRisks.js
new file mode 100644
index 0000000..2649410
--- /dev/null
+++ b/src/api/cnas/systemManagement/measuresDealRisks.js
@@ -0,0 +1,116 @@
+// 搴斿椋庨櫓鐨勬帾鏂界浉鍏虫帴鍙�
+import request from "@/utils/request";
+
+//鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 鍒嗛〉
+export function getPageResults(query) {
+ return request({
+ url: "/manageRiskAssessmentResults/getPageResults",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 瀹℃壒
+export function dangerousRiskApproval(data) {
+ return request({
+ url: "/manageRiskAssessmentResults/dangerousRiskApproval",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 鎵瑰噯
+export function hazardIdentificationAndRiskApproval(data) {
+ return request({
+ url: "/manageRiskAssessmentResults/hazardIdentificationAndRiskApproval",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 鍒犻櫎
+export function removeRiskFactors(query) {
+ return request({
+ url: "/manageRiskAssessmentResults/removeRiskFactors",
+ method: "delete",
+ params: query,
+ });
+}
+
+// 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 鏂板
+export function addNewRiskFactors(data) {
+ return request({
+ url: "/manageRiskAssessmentResults/addNewRiskFactors",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 瀵煎嚭
+export function exportHazardFactorIdentification(query) {
+ return request({
+ url: "/manageRiskAssessmentResults/exportHazardFactorIdentification",
+ method: "get",
+ headers: {
+ responseType: "blob",
+ },
+ params: query,
+ });
+}
+
+//閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鍒嗛〉
+export function getPageList(query) {
+ return request({
+ url: "/manageControlPlanList/getPageList",
+ method: "get",
+ params: query,
+ });
+}
+
+// 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 瀹℃牳
+export function riskAnalysisApprovalOfControlPlanChecklist(data) {
+ return request({
+ url: "/manageControlPlanList/riskAnalysisApprovalOfControlPlanChecklist",
+ method: "post",
+ data: data,
+ });
+}
+
+// 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鎵瑰噯
+export function approvalOfControlPlanChecklist(data) {
+ return request({
+ url: "/manageControlPlanList/approvalOfControlPlanChecklist",
+ method: "post",
+ data: data,
+ });
+}
+
+//閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鍒犻櫎
+export function deleteSignificantRiskFactorAnalysis(query) {
+ return request({
+ url: "/manageControlPlanList/deleteSignificantRiskFactorAnalysis",
+ method: "delete",
+ params: query,
+ });
+}
+
+// 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鏂板
+export function analysisOfMajorRiskFactorsAdded(data) {
+ return request({
+ url: "/manageControlPlanList/analysisOfMajorRiskFactorsAdded",
+ method: "post",
+ data: data,
+ });
+}
+
+//閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 瀵煎嚭
+export function exportSignificantRiskFactors(query) {
+ return request({
+ url: "/manageControlPlanList/exportSignificantRiskFactors",
+ method: "get",
+ headers: {
+ responseType: "blob",
+ },
+ params: query,
+ });
+}
diff --git a/src/views/CNAS/process/method/standardMethod/index.vue b/src/views/CNAS/process/method/standardMethod/index.vue
index f29c0e2..bb4602e 100644
--- a/src/views/CNAS/process/method/standardMethod/index.vue
+++ b/src/views/CNAS/process/method/standardMethod/index.vue
@@ -53,9 +53,9 @@
<el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
</div>
<div class="btn">
- <el-button size="small" @click="$refs.ValueTable.openUpload()" v-if="inPower">
+ <!-- <el-button size="small" @click="$refs.ValueTable.openUpload()" v-if="inPower">
<i class="el-icon-upload2" style="color: #3a7bfa"></i>
- <span style="color: #3a7bfa">瀵煎叆</span></el-button>
+ <span style="color: #3a7bfa">瀵煎叆</span></el-button> -->
<el-button size="small" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
</div>
</div>
diff --git a/src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue b/src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue
new file mode 100644
index 0000000..f0c97d8
--- /dev/null
+++ b/src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue
@@ -0,0 +1,337 @@
+<template>
+ <div style="padding: 10px">
+ <div class="header">
+ <span></span>
+ <div style="min-width: 200px">
+ <el-button type="primary" size="small" @click="addFun">鏂� 澧�</el-button>
+ <el-button type="primary" size="small" @click="approvalFun">瀹� 鎵�</el-button>
+ <el-button type="primary" size="small" @click="approveFun">鎵� 鍑�</el-button>
+ <el-upload style="display: inline-block; padding: 0 6px" :headers="headers" :action="action" :on-error="onError"
+ :show-file-list="false" :on-success="onSuccess">
+ <el-button size="small" type="primary">瀵� 鍏�</el-button>
+ </el-upload>
+ <el-button size="small" @click="openDownloadDia">瀵煎嚭</el-button>
+ </div>
+ </div>
+ <el-table :data="tableData" style="width: 100%" height="calc(100vh - 18em)">
+ <el-table-column type="index" label="搴忓彿" width="120">
+ <template v-slot="scope">
+ <span>{{ (page.current - 1) * page.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="venue" label="鍦扮偣/娲诲姩" min-width="180"></el-table-column>
+ <el-table-column prop="hazard" label="鍗遍櫓鍥犵礌" width="testDate" min-width="180"></el-table-column>
+ <el-table-column prop="accidents" label="鍙兘瀵艰嚧鐨勪簨鏁�" min-width="180"></el-table-column>
+ <el-table-column prop="injury" label="瀵逛汉鍙兘閫犳垚鐨勫嵄瀹�" min-width="180"></el-table-column>
+ <el-table-column label="椋庨櫓璇勪环" align="center" min-width="180">
+ <template>
+ <el-table-column prop="riskL" label="L" min-width="80"></el-table-column>
+ <el-table-column prop="riskE" label="E" min-width="80"></el-table-column>
+ <el-table-column prop="riskC" label="C" min-width="80"></el-table-column>
+ <el-table-column prop="riskD" label="D" min-width="80"></el-table-column>
+ </template>
+ </el-table-column>
+ <el-table-column prop="level" label="椋庨櫓绛夌骇" min-width="180"></el-table-column>
+ <el-table-column prop="measures" label="鎺у埗鎺柦" min-width="180"></el-table-column>
+ <el-table-column prop="editorName" label="缂栧埗浜哄鍚�" min-width="180"></el-table-column>
+ <el-table-column prop="editorDate" label="缂栧埗鏃ユ湡" min-width="180"></el-table-column>
+ <el-table-column prop="approvalName" label="瀹℃壒浜哄鍚�" min-width="180"></el-table-column>
+ <el-table-column prop="approvalDate" label="瀹℃壒鏃ユ湡" min-width="180"></el-table-column>
+ <el-table-column prop="approvalStatus" label="瀹℃壒鐘舵��" min-width="180">
+ <template #default="{ row }">
+ {{ row.approvalStatus === 1 ? '閫氳繃' : row.approvalStatus === 2 ? '涓嶉�氳繃' : '' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="approveName" label="鎵瑰噯浜哄鍚�" min-width="180"></el-table-column>
+ <el-table-column prop="approveStatus" label="鎵瑰噯鐘舵��" min-width="180">
+ <template #default="{ row }">
+ {{ row.approveStatus === 1 ? '閫氳繃' : row.approveStatus === 2 ? '涓嶉�氳繃' : '' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="approveDate" label="鎵瑰噯鏃ユ湡" min-width="180"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" width="100">
+ <template v-slot="scope">
+ <el-button type="text" size="small" @click="editClick(scope.row)">缂栬緫</el-button>
+ <el-button @click="deleteClick(scope.row)" type="text" size="small">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]" :total="page.total"
+ layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
+ @current-change="handleCurrentChange">
+ </el-pagination>
+ <el-dialog title="鎻愮ず" :visible.sync="dialogVisible" width="50%">
+ <el-form ref="form" :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="鍦扮偣/娲诲姩">
+ <el-input v-model="form.venue" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍗遍櫓鍥犵礌">
+ <el-input v-model="form.hazard" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍙兘瀵艰嚧鐨勪簨鏁�">
+ <el-input v-model="form.accidents" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀵逛汉鍙兘閫犳垚鐨勫嵄瀹�" label-width="140px">
+ <el-input v-model="form.injury" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椋庨櫓璇勪环/L">
+ <el-input v-model="form.riskL" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椋庨櫓璇勪环/E">
+ <el-input v-model="form.riskE" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椋庨櫓璇勪环/C">
+ <el-input v-model="form.riskC" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椋庨櫓璇勪环/D">
+ <el-input v-model="form.riskD" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椋庨櫓绛夌骇">
+ <el-input v-model="form.level" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎺у埗鎺柦">
+ <el-input v-model="form.measures" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="addApi" :loading="loading">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import { getToken } from "@/utils/auth";
+import {
+ getPageResults,
+ dangerousRiskApproval,
+ hazardIdentificationAndRiskApproval,
+ removeRiskFactors,
+ addNewRiskFactors,
+ exportHazardFactorIdentification,
+} from '@/api/cnas/systemManagement/measuresDealRisks.js'
+import { mapGetters } from "vuex";
+export default {
+ data() {
+ return {
+ dialogVisible: false,
+ form: {},
+ page: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ tableData: [],
+ loading: false
+ }
+ },
+ computed: {
+ headers() {
+ return {
+ 'Authorization': "Bearer " + getToken()
+ }
+ },
+ action() {
+ return this.javaApi + '/manageRiskAssessmentResults/riskAssessmentImport'
+ },
+ ...mapGetters(["userId"]),
+ },
+ methods: {
+ handleSizeChange(val) {
+ this.page.size = val;
+ this.initData();
+ },
+ handleCurrentChange(val) {
+ this.page.current = val;
+ this.initData();
+ },
+ // 鍒嗛〉琛ㄦ牸鍒濆鍖�
+ initData() {
+ this.tableData = []
+ getPageResults(this.page).then(res => {
+ if (res.code === 201) return;
+ this.tableData = res.data.records;
+ this.page.total = res.data.total;
+ });
+ },
+ // 瀹℃壒
+ approvalFun() {
+ this.$confirm('鏄惁瀹℃壒閫氳繃?', '鎻愮ず', {
+ confirmButtonText: '閫氳繃',
+ cancelButtonText: '涓嶉�氳繃',
+ type: 'warning',
+ closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂�
+ distinguishCancelAndClose: true,
+ beforeClose: (action, instance, done) => {
+ if (action === 'confirm') {
+ this.approvalApi(this.userId, 1)
+ done();
+ } else if (action === 'cancel') {
+ this.approvalApi(this.userId, 2)
+ done();
+ } else if (action === 'close') {
+ // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂�
+ done();
+ }
+ }
+ })
+ },
+ // 瀹℃壒鎺ュ彛
+ approvalApi(userId, status) {
+ dangerousRiskApproval({ approval: userId, status: status }).then(res => {
+ if (res.code === 201) return;
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ });
+ },
+ // 鎵瑰噯
+ approveFun() {
+ this.$confirm('鏄惁鎵瑰噯閫氳繃?', '鎻愮ず', {
+ confirmButtonText: '閫氳繃',
+ cancelButtonText: '涓嶉�氳繃',
+ type: 'warning',
+ closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂�
+ distinguishCancelAndClose: true,
+ beforeClose: (action, instance, done) => {
+ if (action === 'confirm') {
+ this.approveApi(this.userId, 1)
+ done();
+ } else if (action === 'cancel') {
+ this.approveApi(this.userId, 2)
+ done();
+ } else if (action === 'close') {
+ // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂�
+ done();
+ }
+ }
+ })
+ },
+ // 鎵瑰噯鎺ュ彛
+ approveApi(userId, status) {
+ hazardIdentificationAndRiskApproval({ approve: userId, status: status }).then(res => {
+ if (res.code === 201) return;
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ });
+ },
+ // 鏂囦欢涓婁紶澶辫触
+ onError() {
+ this.$message({
+ type: 'error',
+ message: '鎿嶄綔澶辫触!'
+ });
+ },
+ // 鏂囦欢涓婁紶鎴愬姛
+ onSuccess(response) {
+ if (response.code == 201) {
+ this.$message({
+ type: 'error',
+ message: response.message,
+ });
+ return
+ }
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ },
+ addFun() {
+ this.form = {}
+ this.dialogVisible = true
+ },
+ // 鍒犻櫎
+ deleteClick(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ removeRiskFactors({ id: row.id }).then(res => {
+ if (res.code === 201) return;
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ });
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ addApi() {
+ this.loading = true
+ addNewRiskFactors(this.form).then(res => {
+ if (res.code === 201) return;
+ this.dialogVisible = false
+ this.loading = false
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ }).catch(err => {
+ this.loading = false
+ });
+ },
+ // 缂栬緫
+ editClick(row) {
+ this.form = { ...row }
+ this.dialogVisible = true
+ },
+ // 瀵煎嚭
+ openDownloadDia() {
+ exportHazardFactorIdentification().then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�' + '.docx');
+ })
+ },
+ },
+ mounted() {
+ this.initData()
+ },
+}
+</script>
+
+<style scoped>
+.header {
+ height: 3em;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue b/src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue
new file mode 100644
index 0000000..57ed36d
--- /dev/null
+++ b/src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue
@@ -0,0 +1,305 @@
+<template>
+ <div style="padding: 10px">
+ <div class="header">
+ <div></div>
+ <div style="min-width: 200px">
+ <el-button type="primary" size="small" @click="addFun">鏂� 澧�</el-button>
+ <el-button type="primary" size="small" @click="approvalFun">瀹� 鎵�</el-button>
+ <el-button type="primary" size="small" @click="approveFun">鎵� 鍑�</el-button>
+ <el-upload style="display: inline-block; padding: 0 6px" :action="action" :headers="headers" :on-error="onError"
+ :show-file-list="false" :on-success="onSuccess">
+ <el-button size="small" type="primary">瀵� 鍏�</el-button>
+ </el-upload>
+ <el-button size="small" @click="openDownloadDia">瀵煎嚭</el-button>
+ </div>
+ </div>
+ <el-table :data="tableData" style="width: 100%" height="calc(100vh - 18em)">
+ <el-table-column type="index" label="搴忓彿" width="120">
+ <template v-slot="scope">
+ <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="jobActivity" label="浣滀笟娲诲姩" min-width="180"></el-table-column>
+ <el-table-column prop="category" label="椋庨櫓鍥犵礌绫诲埆" width="testDate" min-width="180"></el-table-column>
+ <el-table-column prop="description" label="椋庨櫓鍥犵礌鎻忚堪" min-width="180"></el-table-column>
+ <el-table-column prop="result" label="鍙鑷寸殑浜嬫晠" min-width="180"></el-table-column>
+ <el-table-column prop="intolerable" label="鏄惁涓嶅彲鎵垮彈椋庨櫓" min-width="180"></el-table-column>
+ <el-table-column prop="plan" label="鎺у埗璁″垝" min-width="180"></el-table-column>
+ <el-table-column prop="editorName" label="缂栧埗浜哄鍚�" min-width="180"></el-table-column>
+ <el-table-column prop="editorDate" label="缂栧埗鏃ユ湡" min-width="180"></el-table-column>
+ <el-table-column prop="approvalName" label="瀹℃壒濮撳悕" min-width="180"></el-table-column>
+ <el-table-column prop="approvalDate" label="瀹℃壒鏃ユ湡" min-width="180"></el-table-column>
+ <el-table-column prop="approvalStatus" label="瀹℃壒鐘舵��" min-width="180">
+ <template #default="{ row }">
+ {{ row.approvalStatus === 1 ? '閫氳繃' : row.approvalStatus === 2 ? '涓嶉�氳繃' : '' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="approveName" label="鎵瑰噯濮撳悕" min-width="180"></el-table-column>
+ <el-table-column prop="approveStatus" label="鎵瑰噯鐘舵��" min-width="180">
+ <template #default="{ row }">
+ {{ row.approveStatus === 1 ? '閫氳繃' : row.approveStatus === 2 ? '涓嶉�氳繃' : '' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="approveDate" label="鎵瑰噯浜烘棩鏈�" min-width="180"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" width="100">
+ <template v-slot="scope">
+ <el-button type="text" size="small" @click="editClick(scope.row)">缂栬緫</el-button>
+ <el-button @click="deleteClick(scope.row)" type="text" size="small">鍒犻櫎</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 title="鎻愮ず" :visible.sync="dialogVisible" width="50%">
+ <el-form ref="form" :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="浣滀笟娲诲姩">
+ <el-input v-model="form.jobActivity" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椋庨櫓鍥犵礌绫诲埆">
+ <el-input v-model="form.category" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椋庨櫓鍥犵礌鎻忚堪">
+ <el-input v-model="form.description" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍙鑷寸殑浜嬫晠">
+ <el-input v-model="form.result" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏄惁涓嶅彲鎵垮彈椋庨櫓" label-width="130px">
+ <el-input v-model="form.intolerable" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎺у埗璁″垝">
+ <el-input v-model="form.plan" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="addApi" :loading="loading">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import { getToken } from "@/utils/auth";
+import {
+ getPageList,
+ riskAnalysisApprovalOfControlPlanChecklist,
+ approvalOfControlPlanChecklist,
+ deleteSignificantRiskFactorAnalysis,
+ analysisOfMajorRiskFactorsAdded,
+ exportSignificantRiskFactors,
+} from '@/api/cnas/systemManagement/measuresDealRisks.js'
+import { mapGetters } from "vuex";
+export default {
+ data() {
+ return {
+ dialogVisible: false,
+ form: {},
+ loading: false,
+ search: {
+ size: 20,
+ current: 1,
+ total: 0
+ },
+ tableData: [],
+ }
+ },
+ computed: {
+ headers() {
+ return {
+ 'Authorization': "Bearer " + getToken()
+ }
+ },
+ action() {
+ return this.javaApi + '/manageControlPlanList/importControlPlanList'
+ },
+ ...mapGetters(["userId"]),
+ },
+ methods: {
+ handleSizeChange(val) {
+ this.search.size = val;
+ this.initData();
+ },
+ handleCurrentChange(val) {
+ this.search.current = val;
+ this.initData();
+ },
+ initData() {
+ getPageList(this.search).then(res => {
+ if (res.code === 201) return;
+ this.tableData = res.data.records;
+ this.search.total = res.data.total;
+ });
+ },
+ // 瀹℃壒
+ approvalFun() {
+ this.$confirm('鏄惁瀹℃壒閫氳繃?', '鎻愮ず', {
+ confirmButtonText: '閫氳繃',
+ cancelButtonText: '涓嶉�氳繃',
+ type: 'warning',
+ closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂�
+ distinguishCancelAndClose: true,
+ beforeClose: (action, instance, done) => {
+ if (action === 'confirm') {
+ this.approvalApi(this.userId, 1)
+ done();
+ } else if (action === 'cancel') {
+ this.approvalApi(this.userId, 2)
+ done();
+ } else if (action === 'close') {
+ // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂�
+ done();
+ }
+ }
+ })
+ },
+ // 瀹℃壒鎺ュ彛
+ approvalApi(userId, status) {
+ riskAnalysisApprovalOfControlPlanChecklist({ approval: userId, status }).then(res => {
+ if (res.code === 201) return;
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ });
+ },
+ // 鎵瑰噯
+ approveFun() {
+ this.$confirm('鏄惁鎵瑰噯閫氳繃?', '鎻愮ず', {
+ confirmButtonText: '閫氳繃',
+ cancelButtonText: '涓嶉�氳繃',
+ type: 'warning',
+ closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂�
+ distinguishCancelAndClose: true,
+ beforeClose: (action, instance, done) => {
+ if (action === 'confirm') {
+ this.approveApi(this.userId, 1)
+ done();
+ } else if (action === 'cancel') {
+ this.approveApi(this.userId, 2)
+ done();
+ } else if (action === 'close') {
+ // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂�
+ done();
+ }
+ }
+ })
+ },
+ // 鎵瑰噯鎺ュ彛
+ approveApi(userId, status) {
+ approvalOfControlPlanChecklist({ approve: userId, status }).then(res => {
+ if (res.code === 201) return;
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ });
+ },
+ onError() {
+ this.$message({
+ type: 'error',
+ message: '鎿嶄綔澶辫触!'
+ });
+ },
+ onSuccess(response) {
+ if (response.code == 201) {
+ this.$message({
+ type: 'error',
+ message: response.message,
+ });
+ return
+ }
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ },
+ addFun() {
+ this.form = {}
+ this.dialogVisible = true
+ },
+ // 鍒犻櫎
+ deleteClick(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteSignificantRiskFactorAnalysis({ id: row.id }).then(res => {
+ if (res.code === 201) return;
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ });
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ addApi() {
+ this.loading = true
+ analysisOfMajorRiskFactorsAdded(this.form).then(res => {
+ if (res.code === 201) return;
+ this.dialogVisible = false
+ this.loading = false
+ this.initData()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ }).catch(err => {
+ this.loading = false
+ });
+ },
+ // 缂栬緫
+ editClick(row) {
+ this.form = { ...row }
+ this.dialogVisible = true
+ },
+ // 瀵煎嚭
+ openDownloadDia() {
+ exportSignificantRiskFactors().then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�' + '.docx');
+ })
+ },
+ },
+ mounted() {
+ this.initData()
+ },
+}
+</script>
+
+<style scoped>
+.header {
+ height: 3em;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/measuresDealRisks/index.vue b/src/views/CNAS/systemManagement/measuresDealRisks/index.vue
new file mode 100644
index 0000000..4088909
--- /dev/null
+++ b/src/views/CNAS/systemManagement/measuresDealRisks/index.vue
@@ -0,0 +1,39 @@
+<template>
+ <div class="main">
+ <el-tabs v-model="activeName" type="border-card" :lazy="true">
+ <el-tab-pane label="鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�" name="鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�">
+ <HazardIdentificationRiskAssessment v-if="activeName === '鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�'" />
+ </el-tab-pane>
+ <el-tab-pane label="閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�" name="閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�">
+ <listRiskAnalysisControlPlans v-if="activeName === '閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�'" />
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+</template>
+
+<script>
+
+import HazardIdentificationRiskAssessment
+ from "./components/hazardIdentificationRiskAssessment.vue";
+import listRiskAnalysisControlPlans
+ from "./components//listRiskAnalysisControlPlans.vue";
+export default {
+ components: { HazardIdentificationRiskAssessment, listRiskAnalysisControlPlans },
+ data() {
+ return {
+ activeName: '鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�',
+ }
+ }
+}
+</script>
+
+<style scoped>
+.main {
+ width: 100%;
+}
+
+/deep/ .el-tabs--border-card>.el-tabs__content {
+ height: calc(100vh - 9em);
+ padding: 0;
+}
+</style>
diff --git a/src/views/login.vue b/src/views/login.vue
index 107f37f..c934170 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -8,49 +8,29 @@
<div class="title_small">LIMS瀹為獙瀹ょ鐞嗙郴缁�</div>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<el-form-item prop="username">
- <el-input
- v-model="loginForm.username"
- type="text"
- auto-complete="off"
- placeholder="璐﹀彿"
- >
+ <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="璐﹀彿">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="password">
- <el-input
- v-model="loginForm.password"
- type="password"
- auto-complete="off"
- placeholder="瀵嗙爜"
- @keyup.enter.native="handleLogin"
- >
+ <el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="瀵嗙爜"
+ @keyup.enter.native="handleLogin" show-password>
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="code" v-if="captchaEnabled">
- <el-input
- v-model="loginForm.code"
- auto-complete="off"
- placeholder="楠岃瘉鐮�"
- style="width: 63%"
- @keyup.enter.native="handleLogin"
- >
+ <el-input v-model="loginForm.code" auto-complete="off" placeholder="楠岃瘉鐮�" style="width: 63%"
+ @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input>
<div class="login-code">
- <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+ <img :src="codeUrl" @click="getCode" class="login-code-img" />
</div>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">璁颁綇瀵嗙爜</el-checkbox>
<el-form-item style="width:100%;">
- <el-button
- :loading="loading"
- size="medium"
- type="primary"
- style="width:100%;"
- @click.native.prevent="handleLogin"
- >
+ <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
+ @click.native.prevent="handleLogin">
<span v-if="!loading">鐧� 褰�</span>
<span v-else>鐧� 褰� 涓�...</span>
</el-button>
@@ -61,9 +41,9 @@
</el-form>
</div>
<!-- 搴曢儴 -->
-<!-- <div class="el-login-footer">-->
-<!-- <span>Copyright 漏 2018-2025 ruoyi.vip All Rights Reserved.</span>-->
-<!-- </div>-->
+ <!-- <div class="el-login-footer">-->
+ <!-- <span>Copyright 漏 2018-2025 ruoyi.vip All Rights Reserved.</span>-->
+ <!-- </div>-->
</div>
</template>
@@ -103,7 +83,7 @@
},
watch: {
$route: {
- handler: function(route) {
+ handler: function (route) {
this.redirect = route.query && route.query.redirect;
},
immediate: true
@@ -147,7 +127,7 @@
Cookies.remove('rememberMe');
}
this.$store.dispatch("Login", this.loginForm).then(() => {
- this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
+ this.$router.push({ path: this.redirect || "/" }).catch(() => { });
}).catch(() => {
this.loading = false;
if (this.captchaEnabled) {
@@ -176,10 +156,12 @@
display: flex;
background-image: url("~@/assets/images/login.png");
background-size: 100% 100%;
+
.leftImg {
width: calc(100% - 500px);
height: 100%;
overflow: hidden;
+
img {
width: 100%;
min-height: 100%;
@@ -193,6 +175,7 @@
align-items: center;
flex-direction: column;
justify-content: center;
+
.title_big {
color: #004EA2;
font-size: 40px;
@@ -203,30 +186,37 @@
color: #004EA2;
font-size: 24px;
}
+
.login-form {
border-radius: 6px;
background: #ffffff;
width: 400px;
padding: 25px 25px 5px 25px;
+
.el-input {
height: 38px;
+
input {
height: 38px;
}
}
+
.input-icon {
height: 39px;
width: 14px;
margin-left: 2px;
}
+
.login-code {
width: 33%;
height: 38px;
float: right;
+
img {
cursor: pointer;
vertical-align: middle;
}
+
.login-code-img {
height: 38px;
}
@@ -234,6 +224,7 @@
}
}
}
+
.el-login-footer {
height: 40px;
line-height: 40px;
--
Gitblit v1.9.3