From 0e37ff9a1b1ad8f6bbcf0f3097cef7d109ef2ec8 Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期一, 24 二月 2025 10:06:30 +0800 Subject: [PATCH] 应对风险和机遇的措施搬迁完成 --- 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