From 5a1616f169d75ece07d2d12a8edac3e5f660a920 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期四, 08 九月 2022 09:36:16 +0800 Subject: [PATCH] 合并 --- src/views/riskWarningSys/warningBigScreen/components/message.vue | 24 src/views/goalManagement/targetStatistics/index.vue | 92 src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/linkSetting/index.vue | 2 src/views/specialWorkSystem/workBasicManage/safeMeasuresManage/index.vue | 2 src/views/contingencyManagement/panManagement/component/approval.vue | 239 src/views/contingencyManagement/contingency/component/openAdd.vue | 569 + src/views/contingencyManagement/abolishDialog/component/formInformationTop.vue | 144 src/views/goalManagement/Goalsummary/index.vue | 227 src/views/riskWarningSys/warningBigScreen/index.vue | 8 src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue | 2 src/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue | 305 + src/views/goalManagement/processForms/component/lowerPlate.vue | 120 src/views/specialWorkSystem/workBasicManage/certificateFilterSetting/index.vue | 2 src/views/specialWorkSystem/workPlan/workReservation/index.vue | 2 src/views/goalManagement/targetImprovements/component/Dailogprove.vue | 105 src/views/goalManagement/targetSettings/component/search.vue | 52 src/views/specialWorkSystem/workFlow/approveBasic/index.vue | 2 src/views/system/personShiftManage/arrangeManage/index.vue | 2 src/views/facilityManagement/ProductionEquipment/index.vue | 390 + src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue | 2 src/views/specialWorkSystem/approveProcessManage/examineTemplate/index.vue | 2 src/views/goalManagement/targetDecompositionMonth/index.vue | 286 + src/views/contingencyManagement/processForm/component/formInformationTops.vue | 312 + src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/reportTypeSetting/index.vue | 4 src/views/goalManagement/safetyAssessment/index.vue | 241 src/views/system/personShiftManage/scheduleManage/schedule/index.vue | 2 src/views/intellectInspect/intelligentLine/index.vue | 25 src/views/specialWorkSystem/afterWorkManage/workTicketRecord/index.vue | 2 src/views/riskWarningSys/accidentLevel/index.vue | 2 src/views/goalManagement/targetDecompositionQuarter/index.vue | 286 + src/views/specialWorkSystem/foundationSet/safetyAction/index.vue | 2 src/views/goalManagement/targetEscalation/index.vue | 199 src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue | 204 src/views/contingencyManagement/processForm/processForm.vue | 137 src/views/goalManagement/safetyAssessment/component/Dailog.vue | 264 src/views/specialWorkSystem/workFlow/approveRule/index.vue | 2 src/views/goalManagement/processForms/component/formInformationTop.vue | 144 src/views/contingencyManagement/panManagement/component/upData.vue | 125 src/views/facilityManagement/InstrumentationInformation/index.vue | 391 + src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue | 196 src/views/riskWarningSys/educationAndTraining/index.vue | 2 src/views/accidentManagementSystem/accidentCasesCop/index.vue | 82 src/views/facilityManagement/deviceType/component/Dailog.vue | 198 src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue | 2 src/views/specialWorkSystem/workBasicManage/workTypeSetting/index.vue | 2 src/views/contingencyManagement/panManagement/component/abolishLibrary.vue | 226 src/views/contingencyManagement/panManagement/component/approvalProcess.vue | 196 src/views/goalManagement/targetSettings/index.vue | 300 + src/views/specialWorkSystem/afterWorkManage/workTicketCheck/index.vue | 2 src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/approveTypeSetting/index.vue | 2 src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue | 2 src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue | 2 src/views/specialWorkSystem/workProcess/gasCheck/index.vue | 25 src/views/contingencyManagement/panManagement/component/startUp.vue | 160 src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue | 308 + src/views/contingencyManagement/contingency/index.vue | 401 + src/views/goalManagement/targetClassification/index.vue | 261 src/views/system/personShiftManage/personArrange/index.vue | 2 src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue | 2 src/views/facilityManagement/safetyEquipment/index.vue | 391 + src/views/riskWarningSys/riskLevel/index.vue | 2 src/views/goalManagement/performanceAppraisal/component/DailogAq.vue | 455 + src/views/accidentManagementSystem/accidentCasesCop/component/wangEditor/index.vue | 174 src/views/goalManagement/processForms/component/formInformationTops.vue | 162 src/views/facilityManagement/deviceType/index.vue | 130 src/views/riskWarningSys/warningBigScreen/indexs/index.vue | 53 src/views/system/personShiftManage/scheduleManage/strategy/index.vue | 2 src/views/goalManagement/targetDecompositionHalfYear/index.vue | 286 + src/views/goalManagement/processForms/processForms.vue | 124 src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue | 325 + src/views/goalManagement/Incentivestandard/component/DailogAdd.vue | 147 src/views/goalManagement/Incentivestandard/index.vue | 283 src/views/accidentManagementSystem/accidentStatistics/index.vue | 13 src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue | 404 + src/views/accidentManagementSystem/accidentCases/index.vue | 533 src/views/goalManagement/targetEscalation/component/TypeDailog.vue | 341 + src/views/system/personShiftManage/personTimeManage/durationManage/index.vue | 2 src/views/contingencyManagement/contingency/component/upData.vue | 125 src/views/goalManagement/targetImprovements/index.vue | 307 + src/views/goalManagement/index.vue | 14 src/views/contingencyManagement/panManagement/component/initiateApproval.vue | 159 src/views/goalManagement/safetyAssessment/component/DailogAdd.vue | 281 src/views/goalManagement/TargetBook/index.vue | 289 + src/views/riskWarningSys/emergencyDrills/index.vue | 2 src/views/contingencyManagement/abolishDialog/abolishDialog.vue | 139 src/views/goalManagement/IncentiveRecording/index.vue | 302 + src/views/contingencyManagement/abolishDialog/component/formInformationTops.vue | 318 + src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue | 8 src/views/contingencyManagement/processForm/component/lowerPlate.vue | 120 src/views/goalManagement/targetDecompositionYear/index.vue | 284 src/views/specialWorkSystem/workAlert/alertRecord/index.vue | 2 src/views/goalManagement/TargetBook/component/DailogAdd.vue | 246 src/views/goalManagement/targetEscalation/component/Dailog.vue | 65 src/views/specialWorkSystem/workProcess/workCheck/index.vue | 187 src/views/goalManagement/performanceAppraisal/component/DailogKh.vue | 247 src/views/facilityManagement/keyEquipment/index.vue | 449 + src/views/contingencyManagement/panManagement/component/openAdd.vue | 471 + src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue | 204 src/views/goalManagement/performanceAppraisal/index.vue | 526 + src/views/goalManagement/targetDecompositionYear/component/Dailog.vue | 262 src/views/newHome/index.vue | 42 src/views/specialWorkSystem/workBasicManage/personalProtectDevices/index.vue | 2 src/views/system/personShiftManage/generalShiftManagement/index.vue | 2 src/views/specialWorkSystem/approveProcessManage/approveProcessList/index.vue | 2 src/views/contingencyManagement/abolishDialog/component/lowerPlate.vue | 120 src/views/accidentManagementSystem/accidentCases/component/DailogCases.vue | 2 src/views/goalManagement/TargetBook/component/DailogSearch.vue | 175 src/views/contingencyManagement/processForm/component/formInformationTop.vue | 144 src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue | 133 src/views/accidentManagementSystem/accidentExpress/component/openAdd.vue | 16 src/views/goalManagement/targetSettings/component/dailogAdd.vue | 284 src/views/facilityManagement/EquipmentStatistics/index.vue | 101 112 files changed, 16,747 insertions(+), 402 deletions(-) diff --git a/src/views/accidentManagementSystem/accidentCases/component/DailogCases.vue b/src/views/accidentManagementSystem/accidentCases/component/DailogCases.vue index 3f1ffb1..3bcf4a6 100644 --- a/src/views/accidentManagementSystem/accidentCases/component/DailogCases.vue +++ b/src/views/accidentManagementSystem/accidentCases/component/DailogCases.vue @@ -21,7 +21,7 @@ </el-form-item> </el-col> <el-col :xs="24" :sm="23" :md="23" :lg="23" :xl="23" class="mb20"> - <el-form-item label="内容" size="default" prop="caseContent"> + <el-form-item label="内容" size="default" prop="caseContent"> <Wangeditor v-if="dialogVisible" style="width: 100%" :value="form.caseContent" @change="changeCaseContent" showTop=""></Wangeditor> </el-form-item> diff --git a/src/views/accidentManagementSystem/accidentCases/index.vue b/src/views/accidentManagementSystem/accidentCases/index.vue index e5a4bfc..38728a1 100644 --- a/src/views/accidentManagementSystem/accidentCases/index.vue +++ b/src/views/accidentManagementSystem/accidentCases/index.vue @@ -1,261 +1,274 @@ -<!--<template>--> -<!-- <div>--> -<!-- <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle">--> -<!-- <el-row>--> -<!-- <el-col :span="4">--> -<!-- <el-form-item>--> -<!-- <el-input v-model="ruleForm.searchParams.caseTitle" size="default" placeholder="请输入关键词" />--> -<!-- </el-form-item>--> -<!-- </el-col>--> -<!-- <!– <el-col :span="4">--> -<!-- <el-form-item>--> -<!-- <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" />--> -<!-- </el-form-item>--> -<!-- </el-col> –>--> -<!-- <el-col :span="16">--> -<!-- <el-form-item>--> -<!-- <el-button type="primary" size="default" @click="listApi">查询</el-button>--> -<!-- <el-button size="default" @click="resetForm">重置</el-button>--> -<!-- </el-form-item>--> -<!-- </el-col>--> -<!-- </el-row>--> -<!-- </el-form>--> -<!-- <div class="minCenter">--> -<!-- <div class="btns">--> -<!-- <div>--> -<!-- <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button>--> -<!-- <!– <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain @click="openD('修改', deletAll[0])">修改</el-button> –>--> -<!-- <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button>--> -<!-- </div>--> -<!-- </div>--> -<!-- <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%">--> -<!-- <el-table-column type="selection" align="center" width="55" />--> -<!-- <el-table-column label="序号" align="center" type="index" width="70" />--> -<!-- <el-table-column label="标题" align="center" property="caseTitle" sortable />--> -<!-- <el-table-column property="caseTime" align="center" label="发布时间" sortable />--> -<!-- <!– <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip />--> -<!-- <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> –>--> -<!-- <el-table-column label="操作" align="center" sortable show-overflow-tooltip>--> -<!-- <template #default="scope">--> -<!-- <!– <el-button link type="primary" size="small" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> –>--> -<!-- <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">编辑</el-button>--> -<!-- <el-button link type="primary" size="small" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button>--> -<!-- </template>--> -<!-- </el-table-column>--> -<!-- </el-table>--> -<!-- <div class="pages">--> -<!-- <el-pagination--> -<!-- v-model:currentPage="currentPage4"--> -<!-- v-model:page-size="pageSize4"--> -<!-- :page-sizes="[10, 20, 30, 40]"--> -<!-- layout="total, sizes, prev, pager, next, jumper"--> -<!-- :total="total"--> -<!-- @size-change="handleSizeChange"--> -<!-- @current-change="handleCurrentChange"--> -<!-- />--> -<!-- </div>--> -<!-- </div>--> -<!-- <DailogCases ref="Show" @onAdd="add"></DailogCases>--> -<!-- </div>--> -<!--</template>--> -<!--<script lang="ts">--> -<!--import DailogCases from './component/DailogCases.vue';--> -<!--import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';--> -<!--import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';--> -<!--import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue';--> -<!--import { accidentManagementSystemApi } from '/@/api/accidentManagementSystem';--> -<!--export default defineComponent({--> -<!-- components: { ElButton, ElInput,DailogCases },--> -<!-- setup() {--> -<!-- // 搜索条件--> -<!-- const ruleForm = reactive({--> -<!-- pageSize: 10,--> -<!-- pageIndex: 1,--> -<!-- searchParams: {--> -<!-- caseTitle: '',--> -<!-- },--> -<!-- });--> -<!-- // 下方导航与表格--> -<!-- const tableData = ref([]);--> -<!-- const currentPage4 = ref();--> -<!-- const pageSize4 = ref();--> -<!-- const total = ref();--> -<!-- const resetForm = () => {--> -<!-- ruleForm.searchParams.caseTitle = '';--> -<!-- listApi();--> -<!-- };--> -<!-- const listApi = () => {--> -<!-- accidentManagementSystemApi()--> -<!-- .getaccidentCaseList(ruleForm)--> -<!-- .then((res) => {--> -<!-- if (res.data.code == 200) {--> -<!-- tableData.value = res.data.data;--> -<!-- currentPage4.value = res.data.pageIndex;--> -<!-- pageSize4.value = res.data.pageSize;--> -<!-- total.value = res.data.total;--> -<!-- } else {--> -<!-- ElMessage.error(res.data.msg);--> -<!-- }--> -<!-- });--> -<!-- };--> -<!-- onMounted(() => {--> -<!-- listApi();--> -<!-- });--> +<template> + <div> + <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.caseTitle" size="default" placeholder="请输入关键词" /> + </el-form-item> + </el-col> + <!-- <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> --> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <!-- <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain @click="openD('修改', deletAll[0])">修改</el-button> --> + <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column label="标题" align="center" property="caseTitle" sortable /> + <el-table-column property="caseTime" align="center" label="发布时间" sortable /> + <!-- <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> --> + <el-table-column label="操作" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="jump(scope.row.id)">查看</el-button> + <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">编辑</el-button> + <el-button link type="primary" size="small" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <DailogCases ref="Show" @onAdd="add"></DailogCases> + </div> +</template> +<script lang="ts"> +import DailogCases from './component/DailogCases.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import { accidentManagementSystemApi } from '/@/api/accidentManagementSystem'; +import { useRouter } from 'vue-router'; +export default defineComponent({ + components: { ElButton, ElInput, DailogCases }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + caseTitle: '', + }, + }); + // 下方导航与表格 + const tableData = ref([]); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const resetForm = () => { + ruleForm.searchParams.caseTitle = ''; + listApi(); + }; + const listApi = () => { + accidentManagementSystemApi() + .getaccidentCaseList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); -<!-- const handleSizeChange = (val: number) => {--> -<!-- // console.log(`${val} items per page`);--> -<!-- ruleForm.pageSize = val;--> -<!-- listApi();--> -<!-- };--> -<!-- const handleCurrentChange = (val: number) => {--> -<!-- // console.log(`current page: ${val}`);--> -<!-- ruleForm.pageIndex = val;--> -<!-- listApi();--> -<!-- };--> -<!-- const activeNames = ref('1');--> -<!-- // 打开弹窗--> -<!-- const Show = ref();--> -<!-- const openD = (title: String, id: number) => {--> -<!-- Show.value.openDailog(title,id);--> -<!-- };--> -<!-- // 删除--> -<!-- const onDelete = (id: number) => {--> -<!-- let arr = [];--> -<!-- arr.push(id);--> -<!-- ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {--> -<!-- confirmButtonText: '确定',--> -<!-- cancelButtonText: '取消',--> -<!-- type: 'warning',--> -<!-- })--> -<!-- .then(() => {--> -<!-- console.log(arr)--> -<!-- accidentManagementSystemApi()--> -<!-- .getaccidentCaseDelete(arr)--> -<!-- .then((res) => {--> -<!-- if (res.data.code == 200) {--> -<!-- ElMessage({--> -<!-- message: res.data.msg,--> -<!-- type: 'success',--> -<!-- });--> -<!-- listApi();--> -<!-- } else {--> -<!-- ElMessage.error(res.data.msg);--> -<!-- }--> -<!-- });--> -<!-- })--> -<!-- .catch(() => {--> -<!-- // ElMessage({--> -<!-- // type: 'info',--> -<!-- // message: 'Delete canceled',--> -<!-- // });--> -<!-- });--> -<!-- };--> -<!-- // 批量删除--> -<!-- const warning = ref(true);--> -<!-- const danger = ref(true);--> -<!-- const deletAll = ref();--> -<!-- const handleSelectionChange = (val: any) => {--> -<!-- let valId = JSON.parse(JSON.stringify(val));--> -<!-- let arr = [];--> -<!-- for (let i = 0; i < valId.length; i++) {--> -<!-- arr.push(valId[i].id);--> -<!-- }--> -<!-- deletAll.value = arr;--> -<!-- if (val.length == 1) {--> -<!-- warning.value = false;--> -<!-- danger.value = false;--> -<!-- } else if (val.length == 0) {--> -<!-- warning.value = true;--> -<!-- danger.value = true;--> -<!-- } else {--> -<!-- warning.value = true;--> -<!-- danger.value = false;--> -<!-- }--> -<!-- };--> -<!-- const onDeleteAll = () => {--> -<!-- ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {--> -<!-- confirmButtonText: '确定',--> -<!-- cancelButtonText: '取消',--> -<!-- type: 'warning',--> -<!-- })--> -<!-- .then(() => {--> -<!-- accidentManagementSystemApi()--> -<!-- .getaccidentCaseDelete(deletAll.value)--> -<!-- .then((res) => {--> -<!-- if (res.data.code == 200) {--> -<!-- ElMessage({--> -<!-- message: res.data.msg,--> -<!-- type: 'success',--> -<!-- });--> -<!-- listApi();--> -<!-- } else {--> -<!-- ElMessage.error(res.data.msg);--> -<!-- }--> -<!-- });--> -<!-- })--> -<!-- .catch(() => {--> -<!-- ElMessage({--> -<!-- type: 'info',--> -<!-- message: 'Delete canceled',--> -<!-- });--> -<!-- });--> -<!-- };--> -<!-- const add = () => {--> -<!-- listApi();--> -<!-- };--> -<!-- return {--> -<!-- listApi,--> -<!-- add,--> -<!-- resetForm,--> -<!-- tableData,--> -<!-- currentPage4,--> -<!-- pageSize4,--> -<!-- total,--> -<!-- ruleForm,--> -<!-- handleSizeChange,--> -<!-- handleCurrentChange,--> -<!-- Show,--> -<!-- openD,--> -<!-- activeNames,--> -<!-- onDelete,--> -<!-- warning,--> -<!-- danger,--> -<!-- deletAll,--> -<!-- handleSelectionChange,--> -<!-- onDeleteAll,--> -<!-- Plus,--> -<!-- Delete,--> -<!-- Upload,--> -<!-- Download,--> -<!-- Refresh,--> -<!-- View,--> -<!-- EditPen,--> -<!-- };--> -<!-- },--> -<!--});--> -<!--</script>--> -<!--<style scoped>--> -<!--.topTitle {--> -<!-- background-color: #fff;--> -<!-- padding: 20px 0px 20px 0px;--> -<!--}--> -<!--.minCenter {--> -<!-- width: 100%;--> -<!-- background-color: #fff;--> -<!-- margin-top: 10px;--> -<!-- padding: 0 20px;--> -<!--}--> -<!--.btns {--> -<!-- padding: 20px 0px 10px 0px;--> -<!-- display: flex;--> -<!-- justify-content: space-between;--> -<!--}--> -<!--.pages {--> -<!-- padding: 20px 0;--> -<!-- display: flex;--> -<!-- justify-content: right;--> -<!--}--> -<!--.tableC {--> -<!-- margin: 0 10%;--> -<!--}--> -<!--</style>--> + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const activeNames = ref('1'); + // 打开弹窗 + const Show = ref(); + const openD = (title: String, id: number) => { + Show.value.openDailog(title, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + console.log(arr); + accidentManagementSystemApi() + .getaccidentCaseDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + accidentManagementSystemApi() + .getaccidentCaseDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + const add = () => { + listApi(); + }; + let router = useRouter(); + let jump = (id:any) => { + router.push({ + path: '/accidentCasesCop' , + query:{ + id:id, + } + }); + }; + + return { + jump, + router, + listApi, + add, + resetForm, + tableData, + currentPage4, + pageSize4, + total, + ruleForm, + handleSizeChange, + handleCurrentChange, + Show, + openD, + activeNames, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 20px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +.tableC { + margin: 0 10%; +} +</style> \ No newline at end of file diff --git a/src/views/accidentManagementSystem/accidentCasesCop/component/wangEditor/index.vue b/src/views/accidentManagementSystem/accidentCasesCop/component/wangEditor/index.vue new file mode 100644 index 0000000..3953efc --- /dev/null +++ b/src/views/accidentManagementSystem/accidentCasesCop/component/wangEditor/index.vue @@ -0,0 +1,174 @@ +<template> + <div class="editor"> + <div ref="toolbar" class="toolbar" :class="showTop"> + </div> + <div ref="editor" class="text"> + </div> + </div> +</template> + +<script> + import E from 'wangeditor' + // import {uploadNew,downloadNew} from '@/api/upload'; + // import defaultUrl from "@/api/defaultUrl"; + export default { + name: 'editoritem', + data() { + return { + // uploadPath, + editor: null, + info_: null, + // defaultUrl:defaultUrl, + defaultUrl:'', + } + }, + model: { + prop: 'value', + event: 'change' + }, + props: { + value: { + type: String, + default: '' + }, + isClear: { + type: Boolean, + default: false + }, + showTop: { + type: String, + default: '' + }, + }, + watch: { + isClear(val) { + // 触发清除文本域内容 + if (val) { + this.editor.txt.clear() + this.info_ = null + } + }, + value: function(value) { + if (value !== this.editor.txt.html()) { + this.editor.txt.html(this.value) + } + } + //value为编辑框输入的内容,这里我监听了一下值,当父组件调用得时候,如果给value赋值了,子组件将会显示父组件赋给的值 + }, + mounted() { + var that =this + that.setEditor() + that.editor.txt.html(that.value) + }, + methods: { + setEditor() { + var that =this + this.editor = new E(this.$refs.toolbar, this.$refs.editor) + // 配置菜单 + this.editor.config.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + 'backColor', // 背景颜色 + 'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + // 'image', // 插入图片 + 'table', // 表格 + // 'video', // 插入视频 + 'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ] + + //配置上传图片 + this.editor.config.uploadImgShowBase64 = false // base 64 存储图片 + this.editor.config.uploadImgServer = 'http://otp.cdinfotech.top/file/upload_images'// 配置服务器端地址 + this.editor.config.uploadImgHeaders = { }// 自定义 header + this.editor.config.uploadFileName = 'file' // 后端接受上传文件的参数名 + this.editor.config.uploadImgMaxSize = 2 * 1024 * 1024 // 将图片大小限制为 2M + this.editor.config.uploadImgMaxLength = 1 // 限制一次最多上传 3 张图片 + this.editor.config.uploadImgTimeout = 3 * 60 * 1000 // 设置超时时间 + this.editor.config.uploadImgHooks = { + fail: (xhr, editor, result) => { + // 插入图片失败回调 + }, + success: (xhr, editor, result) => { + // 图片上传成功回调 + }, + timeout: (xhr, editor) => { + // 网络超时的回调 + }, + error: (xhr, editor) => { + // 图片上传错误的回调 + }, + customInsert: (insertImg, result, editor) => { + // 图片上传成功,插入图片的回调 + //result为上传图片成功的时候返回的数据,这里我打印了一下发现后台返回的是data:[{url:"路径的形式"},...] + // console.log(result.data[0].url) + //insertImg()为插入图片的函数 + //循环插入图片 + // for (let i = 0; i < 1; i++) { + // console.log(result) + let url = "http://otp.cdinfotech.top"+result.url + insertImg(url) + // } + } + } + this.editor.config.customUploadImg = function (files, insert) { + let form = new FormData(); + form.append('file', files[0]); + form.append('dir', 'temp1') + // uploadNew(form).then(res=>{ + // if(res.result){ + // let url = that.defaultUrl+`/upload/downloadNew?path=`+encodeURI(res.data.fileUrl) + // insert(url) + // that.$message("上传成功", 'success'); + // }else { + // that.$message.error("上传失败"); + // } + // + // }) + } + + this.editor.config.onchange = (html) => { + this.info_ = html // 绑定当前逐渐地值 + this.$emit('change', this.info_) // 将内容同步到父组件中 + } + // 创建富文本编辑器 + this.editor.create() + //是否可编辑 + if (this.showTop=='hiddenClass'){ + this.editor.disable() + } + } + } + } +</script> + +<style scoped> + .editor { + /*margin: 0 auto;*/ + position: relative; + z-index: 100; + } + .toolbar { + width: 100%; + border: 1px solid #ccc; + } + .text { + border: 1px solid #ccc; + min-height: 250px; + } + .hiddenClass{ + display: none; + + } +</style> diff --git a/src/views/accidentManagementSystem/accidentCasesCop/index.vue b/src/views/accidentManagementSystem/accidentCasesCop/index.vue new file mode 100644 index 0000000..52831de --- /dev/null +++ b/src/views/accidentManagementSystem/accidentCasesCop/index.vue @@ -0,0 +1,82 @@ +<template> + <div style="background-color:#fff;height: 800px;"> + <el-form :model="form" label-width="120px"> + <el-row> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="标题" size="default" prop="caseTitle"> + <el-input v-model="form.caseTitle" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="11" :md="11" :lg="11" :xl="11" class="mb20"> + <el-form-item label="发布时间" size="default" prop="caseTime"> + <el-date-picker + v-model="form.caseTime" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + type="datetime" + placeholder="请选择" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="23" :md="23" :lg="23" :xl="23" class="mb20"> + <el-form-item label="内容" size="default" prop="caseContent"> + <Wangeditor style="width: 100%" :value="form.caseContent" + showTop=""></Wangeditor> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, onMounted } from 'vue'; +import { timeDate } from '/@/assets/index.ts'; +import type { FormInstance, FormRules } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus'; +import { accidentManagementSystemApi } from '/@/api/accidentManagementSystem'; +import Wangeditor from './component/wangEditor/index.vue'; +import {useRoute} from 'vue-router' +export default defineComponent({ + components: {Wangeditor}, + setup(props, { emit }) { + const route = useRoute(); + const num = route.query.id; + const dialogVisible = ref<boolean>(false); + const form = ref({ + caseTitle: '',///案例标题 + caseContent: '',///案例内容 + caseTime: '', + }); + onMounted(()=>{ + listApi(num) + }) + const listApi=(id:any)=>{ + accidentManagementSystemApi() + .getaccidentCaseDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + } + + return { + timeDate, + form, + dialogVisible, + Search, + route, + num + }; + }, +}); +</script> +<style scoped> +.el-col { + padding: 20px 0 0 0; +} +</style> \ No newline at end of file diff --git a/src/views/accidentManagementSystem/accidentExpress/component/openAdd.vue b/src/views/accidentManagementSystem/accidentExpress/component/openAdd.vue index 51af58b..f72d850 100644 --- a/src/views/accidentManagementSystem/accidentExpress/component/openAdd.vue +++ b/src/views/accidentManagementSystem/accidentExpress/component/openAdd.vue @@ -367,6 +367,7 @@ type: 'success', }); emit('myAdd', true); + formEl.resetFields(); } else { ElMessage({ showClose: true, @@ -375,27 +376,12 @@ }); emit('myAdd', true); } - formEl.resetFields(); }); } else { console.log('error submit!', fields); } }); - formEl.resetFields(); } - ruleForm.value = { - accidentExpressId: '', - emergencyPrecautions: '', - accidentCausesPreliminaryAnalysis: '', - accidentBriefProcess: '', - casualties: '', - accidentCause: '', - occurrenceTime: '', - occurrencePlace: '', - accidentDepartmentId: '', - accidentName: '', - fileList: [], - }; }; const resetForm = (formEl: FormInstance | undefined) => { isShowDialog.value = false; diff --git a/src/views/accidentManagementSystem/accidentStatistics/index.vue b/src/views/accidentManagementSystem/accidentStatistics/index.vue index 1337225..f543f1a 100644 --- a/src/views/accidentManagementSystem/accidentStatistics/index.vue +++ b/src/views/accidentManagementSystem/accidentStatistics/index.vue @@ -3,22 +3,22 @@ <el-card shadow="hover"> <div class="system-user-search mb15"> <el-form ref="ruleFormRef" size="default" label-width="80px" :inline="true"> - <el-row :gutter="35"> - <el-col :xs="24" :sm="4" :md="4" :lg="4" :xl="4" class="mb20"> + <el-row > + <el-col :span="5"> <el-form-item prop="telephone" label="选择年月"> - <el-radio-group v-model="params.type" class="w100"> + <el-radio-group v-model="params.type" style="width:100%"> <el-radio :label="2">年</el-radio> <el-radio :label="1">月</el-radio> </el-radio-group> </el-form-item> </el-col> - <el-col :xs="24" :sm="4" :md="4" :lg="4" :xl="4" class="mb20"> + <el-col :span="6"> <el-form-item v-if="params.type==2" prop="telephone" label="选择年"> <el-date-picker v-model="params.year" :disabled="disabled" type="year" - class="w100" + style="width:100%" value-format="YYYY" placeholder="选择日期时间" /> @@ -29,12 +29,13 @@ :disabled="disabled" type="month" class="w100" + style="width:100%" value-format="YYYY-MM" placeholder="选择日期时间" /> </el-form-item> </el-col> - <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" class="mb20"> + <el-col :span="3"> <el-button size="default" type="primary" class="ml10" @click="emergencySuppliesCount"> 查询</el-button> </el-col> </el-row> diff --git a/src/views/contingencyManagement/abolishDialog/abolishDialog.vue b/src/views/contingencyManagement/abolishDialog/abolishDialog.vue index e69de29..69dba30 100644 --- a/src/views/contingencyManagement/abolishDialog/abolishDialog.vue +++ b/src/views/contingencyManagement/abolishDialog/abolishDialog.vue @@ -0,0 +1,139 @@ +<template> + <div class="system-user-container"> + <h4 class="title">胡海涛2022-07-01 16:08:42发起了目标检查上报(检查)--检查</h4> + <div class="box"> + <el-menu + :default-active="activeIndex" + class="el-menu-demo" + background-color="#ebeef5" + text-color="#fff" + active-text-color="#fff" + mode="horizontal" + @select="handleSelect" + > + <el-menu-item index="1">表单信息</el-menu-item> + <el-menu-item index="2">流程图</el-menu-item> + </el-menu> + <div v-if="activeIndex == 1" class="navType"> + <formInformationTop v-if="false"></formInformationTop> + <formInformationTops></formInformationTops> + </div> + <div v-if="activeIndex == 2" class="navType" style="padding:20px 20px 0 20px"> + <div class="title2">流程图 + <!-- <img src=""> --> + </div> + <div style="width:100%;height:400px"></div> + </div> + </div> + <lowerPlate></lowerPlate> + <div class="btns"> + <el-button type="primary">启动</el-button> + </div> + </div> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref,onMounted } from 'vue'; +import { useRouter } from 'vue-router'; +import formInformationTop from './component/formInformationTop.vue' +import formInformationTops from './component/formInformationTops.vue' +import lowerPlate from './component/lowerPlate.vue' +export default defineComponent({ + components:{lowerPlate,formInformationTop,formInformationTops}, + setup() { + const activeIndex = ref<any>('1'); + const handleSelect = (key: string, keyPath: string[]) => { + // console.log(key, keyPath); + activeIndex.value = key; + }; + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + const router=useRouter() + const Type=onMounted(()=>{ + // console.log("xxxxxxx",router) + }) + + return { + activeIndex, + handleSelect, + form, + router, + Type + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; + padding: 15px; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} + +/*弹窗底部边框线*/ +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +/*弹窗顶部边框线*/ +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +</style> diff --git a/src/views/contingencyManagement/abolishDialog/component/formInformationTop.vue b/src/views/contingencyManagement/abolishDialog/component/formInformationTop.vue index e69de29..ef75063 100644 --- a/src/views/contingencyManagement/abolishDialog/component/formInformationTop.vue +++ b/src/views/contingencyManagement/abolishDialog/component/formInformationTop.vue @@ -0,0 +1,144 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" style="padding: 0 20px"> + <el-tab-pane label="考核指标" name="1"> + <el-table :data="tableData" style="width: 100%"> + <el-table-column align="center" type="index" label="序号" width="70" /> + <el-table-column align="center" prop="date" label="责任部门" /> + <el-table-column align="center" prop="name" label="考核指标" /> + <el-table-column align="center" prop="address" label="制定部门" /> + <el-table-column align="center" prop="address" label="制定日期" /> + <el-table-column align="center" label="检查值"> + <template #default> + <el-input v-model="form.name" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column align="center" prop="address" label="检查人" /> + <el-table-column align="center" prop="address" label="检查时间" /> + </el-table> + <div class="tiao"> + <div class="typeS">审批</div> + </div> + <el-row style="padding:20px 0"> + <el-col :span="6" style="text-align:right">一级审批:</el-col> + <el-col :span="18">同意</el-col> + </el-row> + <el-row style="padding:0 0 20px 0"> + <el-col :span="6"></el-col> + <el-col :span="18"><span class="logoColor">同意</span><span style="margin-right: 8px;">杜建喜</span><span>2021-05-24 04:47:42</span></el-col> + </el-row> + </el-tab-pane> + </el-tabs> +</template> +<script lang="ts"> +import { defineComponent,ref,reactive } from 'vue' + +export default defineComponent({ + setup() { + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const activeName = ref('1'); + return{ + form, + tableData, + activeName + } + }, +}) +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0 ; +} +</style> diff --git a/src/views/contingencyManagement/abolishDialog/component/formInformationTops.vue b/src/views/contingencyManagement/abolishDialog/component/formInformationTops.vue index e69de29..68ae8a6 100644 --- a/src/views/contingencyManagement/abolishDialog/component/formInformationTops.vue +++ b/src/views/contingencyManagement/abolishDialog/component/formInformationTops.vue @@ -0,0 +1,318 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="12"> + <el-form-item label="预案名称"> + <el-input v-model="form.name" disabled placeholder="请填写预案名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="适用部门"> + <el-tree-select + class="select" + placeholder="请选择" + v-model="value" + :data="data" + :render-after-expand="false" + show-checkbox + multiple + clearable + disabled + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预案类型"> + <el-select class="select" v-model="form.region" disabled placeholder="请选择"> + <el-option label="综合应急预案" value="shanghai" /> + <el-option label="现场处置方案" value="beijing" /> + <el-option label="专项应急预案" value="shanghai" /> + <el-option label="其它预案" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="危险源关联"> + <el-select class="select" v-model="form.region" disabled placeholder="请选择"> + <el-option label="是" value="shanghai" /> + <el-option label="否" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预案级别"> + <el-select class="select" v-model="form.region" disabled placeholder="请选择"> + <el-option label="公司及" value="shanghai" /> + <el-option label="分厂级" value="beijing" /> + <el-option label="车间级" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="编写人"> + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" @click="openUser" disabled/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="编写部门" disabled placeholder="请选择"> + <el-tree-select + class="select" + v-model="value2" + :data="dataSelect" + :render-after-expand="false" + multiple + check-strictly + check-on-click-node + clearable + disabled + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="发布实施日期"> + <el-date-picker v-model="datetime" type="datetime" disabled placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急队伍" prop="telephone" @click="daiInpt" > + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" disabled/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="预案附件"> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + disabled + > + <el-button type="primary" disabled + >点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 添加相关附件 + </div> + </template> + </el-upload> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="区域名称" prop="telephone"> + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" disabled @click="regionsDialog"/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <checkTemplate ref="ShowRef"/> + <userSelections ref="userRef"/> + <RegionsDialog ref="openRef"/> +</template> +<script lang="ts"> +import { + defineComponent, + ref, + reactive +} from 'vue'; +import { + Search +} from '@element-plus/icons-vue' +import UserSelections from "/@/components/userSelections/index.vue" +import CheckTemplate from "/@/components/checkTemplate/index.vue" +import RegionsDialog from "/@/components/regionsDialog/index.vue"; +export default defineComponent({ + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + }, + setup() { + const form = reactive({ + name: '', + value: '', + value2: '', + teamLeader: '', + + // data: '', + // dataSelect: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + // 可选择树形选择框 + const value = ref() + + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '生产运行部', + children: [ + { + value: '1-1-1', + label: '工艺二班', + }, + ], + }, + ], + } + ] + // 树形选择框 + const value2 = ref() + + const dataSelect = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '生产运行部', + children: [ + { + value: '1-1-1', + label: '工艺二班', + }, + ], + }, + ], + } + ] + // 应急队伍弹窗 + const ShowRef=ref() + const daiInpt=()=>{ + ShowRef.value.openDailog() + } + // 选择区域弹窗 + const openRef=ref() + const regionsDialog=()=>{ + openRef.value.openDailog() + } + // 打开编写人选择用户弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + // 日期选择 + const datetime = ref('') + return { + form, + value, + data, + value2, + dataSelect, + openUser, + userRef, + Search, + ShowRef, + daiInpt, + openRef, + datetime, + regionsDialog, + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box { + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao { + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0; + position: relative; +} +.typeS { + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor { + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns { + width: 100%; + padding: 20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); +} +.title2 { + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0; +} +.select{ + width: 100%; +} +.select ::v-deep .el-select{ + width: 100%; +} +</style> diff --git a/src/views/contingencyManagement/abolishDialog/component/lowerPlate.vue b/src/views/contingencyManagement/abolishDialog/component/lowerPlate.vue index e69de29..cbb82fb 100644 --- a/src/views/contingencyManagement/abolishDialog/component/lowerPlate.vue +++ b/src/views/contingencyManagement/abolishDialog/component/lowerPlate.vue @@ -0,0 +1,120 @@ +<template> + <div class="box"> + <el-form ref="formS" :model="form" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="15"> + <el-form-item label="流程标题"> + <el-input v-model="form.names" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label="下级审批日期"> + <el-date-picker v-model="form.date1" type="date" placeholder="下级审批日期" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.delivery" label="是否抄送" @change="typeChang"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.delivery"> + <el-col :span="15"> + <el-form-item label="抄送给" prop="resource"> + <el-input v-model="form.resource" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.type" label="指定下一步处理者(不设置就使用默认处理人)"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.type"> + <el-col :span="15"> + <el-form-item label="指定" prop="desc"> + <el-input v-model="form.desc" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + <DailogSearchUser ref="ShowUser"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue' +import { Search } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus' +export default defineComponent({ + components:{DailogSearchUser}, + setup() { + const formS=ref<FormInstance>() + let form = reactive({ + names: '', + region: '', + date1: '', + date2: '', + delivery: "", + type: "", + resource: '', + desc: '', + }); + const typeChang=()=>{ + console.log('tag',form) + } + const rules = reactive<FormRules>({ + resource: [ + { + type: 'array', + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ], + desc: [ + { + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ]}) + const ShowUser=ref() + const openDai =()=>{ + ShowUser.value.openDailog() + } + return { + form, + rules, + formS, + typeChang, + ShowUser, + openDai, + Search, + }; + }, +}); +</script> + +<style scoped> +.box { + margin: 30px 0 100px 0; + background-color: #fff; + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); + padding: 20px; +} +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue b/src/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue index e69de29..cafe13e 100644 --- a/src/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue +++ b/src/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue @@ -0,0 +1,305 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="40%" + draggable + :fullscreen="full" + @close="resetForm(ruleFormRef)" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + :rules="rules" + :disabled="disabled" + label-width="90px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="选择人员" prop="name"> + <el-input + v-model="ruleForm.name" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="人员工号" prop="jobNumber"> + <el-input v-model="ruleForm.jobNumber" placeholder="请填写人员工号"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="人员名称" prop="name"> + <el-input v-model="ruleForm.name" placeholder="请填写人员名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="人员性别" prop="gender"> + <el-radio-group v-model="ruleForm.gender"> + <el-radio :label="false">男</el-radio> + <el-radio :label="true">女</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="手机号码" prop="phone"> + <el-input v-model="ruleForm.phone" placeholder="请填写手机号码"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="职位" prop="position"> + <el-input v-model="ruleForm.position" placeholder="请填写职位"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> +<!-- <el-button size="default" type="primary" @click="addForm(ruleFormRef)">继续添加</el-button>--> + <el-button size="default" @click="resetForm(ruleFormRef)">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)" >确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser"/> + </div> +</template> + +<script lang="ts"> +import { + ref, + reactive, + defineComponent +} from 'vue'; + +import type { + FormRules, + FormInstance, +} from 'element-plus' +import { ElMessage } from 'element-plus'; +import { + Search, + FullScreen, +} from '@element-plus/icons-vue' +import DailogSearchUserManger from "/@/components/DailogSearchUserManger/index.vue" +import {contingencyApi} from "/@/api/contingencyManagement/contingency"; + +export default defineComponent({ + name: 'addTeamLeader', + components: { + // Search, + DailogSearchUserManger + }, + setup(props, { emit }) { + const isShowDialog = ref(false) + const ruleFormRef = ref<FormInstance>() + const ruleForm = ref ({ + teamId: '', + userUid: '', + gender: '', + jobNumber: '', // 人员工号 + name: '', // 人员名称 + phone: '', // 手机号码 + position: '', // 职位 + }); + const rules = reactive<FormRules>({ + jobNumber: [ + { + required: true, + message: '人员工号不能为空', + trigger: 'change', + }, + ], + personnelName: [ + { + required: true, + message: '人员名称不能为空', + trigger: 'change', + }, + ], + personnelGender: [ + { + required: true, + message: '人员性别不能为空', + trigger: 'change', + }, + ], + phone: [ + { + required: true, + message: '手机号码不能为空', + trigger: 'change', + }, + ], + position: [ + { + required: true, + message: '职位不能为空', + trigger: 'change', + }, + ], + }) + const titles = ref(); + const disabled = ref(); + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建应急队伍人员') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + // console.log('-------',ruleForm.value) + // emit('myAdd', ruleForm.value); + contingencyApi() + .addEmergencyTeamPersonnel(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } + else if (title == '修改应急队伍人员') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + contingencyApi() + .editEmergencyTeamPersonnel(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + teamId: '', + userUid: '', + gender: '', + jobNumber: '', // 人员工号 + name: '', // 人员名称 + phone: '', // 手机号码 + position: '', // 职位 + }; + } + } + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + + // 打开弹窗 + const openDialog = (title: string, id: number,teamId:number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + ruleForm.value.teamId = teamId + + if (title == '查看应急队伍人员' || title == '修改应急队伍人员') { + contingencyApi() + .seeEmergencyTeamPersonnel(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + } + }); + } + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + const onUser = (e:any) => { + ruleForm.value.userUid=e[0].uid + ruleForm.value.gender=e[0].sex + ruleForm.value.name=e[0].realName + ruleForm.value.jobNumber=e[0].jobNumber + ruleForm.value.phone=e[0].phone + ruleForm.value.position=e[0].position + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + // closeDialog, + isShowDialog, + ruleFormRef, + // submitForm, + // onCancel, + ruleForm, + rules, + Search, + toggleFullscreen, + FullScreen, + full, + resetForm, + titles, + disabled, + emit, + openUser, + userRef, + onUser, + submitForm, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea{ + height: 168px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 168px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/contingency/component/openAdd.vue b/src/views/contingencyManagement/contingency/component/openAdd.vue index e69de29..2d9e986 100644 --- a/src/views/contingencyManagement/contingency/component/openAdd.vue +++ b/src/views/contingencyManagement/contingency/component/openAdd.vue @@ -0,0 +1,569 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="50%" draggable :fullscreen="full" @close="resetForm(ruleFormRef)"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" :rules="rules" label-width="120px" + :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="队伍名称" prop="teamName"> + <el-input v-model="ruleForm.teamName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="队伍级别" prop="teamLevel"> + <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> + <el-option label="公司" value="1"></el-option> + <el-option label="分厂-车间" value="2"></el-option> + <el-option label="工序-班组等" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="队伍负责人" prop="principalName"> + <el-input v-model="ruleForm.principalName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="负责人部门" prop="principalDepartmentId"> + <el-tree-select v-model="ruleForm.principalDepartmentId" :data="newTreeList" class="w100" + :props="propse" clearable placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="负责人手机" prop="principalPhone"> + <el-input v-model="ruleForm.principalPhone" placeholder="请填写负责人手机"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="固定电话" prop="telephoneNumber"> + <el-input v-model="ruleForm.telephoneNumber" placeholder="请填写固定电话"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="队伍描述" prop="teamDesc"> + <el-input class="textarea" v-model="ruleForm.teamDesc" type="textarea" maxlength="150" + placeholder="请填写队伍描述"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="相关附件" prop="fileList"> + <uploaderFile :fileList="fileList" :systemName="'EMERGENCY'" :disabled="disabled" + @successUploader="successUploader"></uploaderFile> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> + <el-tab-pane label="应急队伍人员" name="first" > + <el-button type="primary" size="default" @click="onAddEmergencyPersonnel(ruleFormRef)" :disabled="disabled">新增 + </el-button> + <el-table + :data="tableData" + style="width: 100%; margin-top: 15px" + ref="multipleTableRef" + :header-cell-style="{ background: '#f6f7fa', color: '#909399' }" + :disabled="disabled" + > + <el-table-column prop="jobNumber" label="人员工号" show-overflow-tooltip></el-table-column> + <el-table-column prop="name" label="人员名称" show-overflow-tooltip></el-table-column> + <el-table-column prop="phone" label="手机号码" show-overflow-tooltip></el-table-column> + <el-table-column prop="position" label="职位" show-overflow-tooltip></el-table-column> + <el-table-column label="操作" width="250" align="center"> + <template #default="scope"> + <el-button :disabled="disabled" size="small" @click="onEdit('查看应急队伍人员',scope.row.id)">查看 + </el-button> + <el-button :disabled="disabled" size="small" @click="onEdit('修改应急队伍人员',scope.row.id)" + style="margin-right: 5px">编辑 + </el-button> + <el-button :disabled="disabled" size="small" @click="onRowDel(scope.row.id)" + style="margin-right: 5px">删除 + </el-button> + </template> + </el-table-column> + </el-table> + </el-tab-pane> + </el-tabs> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" v-if="disabled == true ? false : true" type="primary" + @click="onSubmit(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <AddEmergencyPersonnel ref="addRef" @myAdd="onMyAdd"/> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser"/> + </div> +</template> + +<script lang="ts"> + import { + reactive, + ref, + defineComponent, + onMounted, + // toRefs, + } from 'vue'; + import { + ElMessage, + ElMessageBox, + } from 'element-plus'; + + import type { + UploadUserFile, + TabsPaneContext, + FormInstance, + FormRules, + } from 'element-plus' + + import { + Search, + FullScreen + } from '@element-plus/icons-vue' + import AddEmergencyPersonnel from "/@/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue"; + import DailogSearchUserManger from "/@/components/DailogSearchUserManger/index.vue" + import {contingencyApi} from "/@/api/contingencyManagement/contingency"; + import {goalManagementApi} from "/@/api/goalManagement"; + import uploaderFile from '/@/components/uploaderFile/index.vue'; + // import {releaseDrillPlanApi} from "/@/api/releaseDrillPlan"; + + + export default defineComponent({ + name: 'openAdd', + components: { + AddEmergencyPersonnel, + DailogSearchUserManger, + uploaderFile + }, + setup(prop, {emit}) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + const ruleForm = ref({ + teamName: '', // 队伍名称 + teamLevel: '', // 队伍级别 + principalUid: '', // 队伍负责人 + principalName: '', + principalDepartmentId: '', //负责人部门 + principalPhone: '', // 负责人手机 + telephoneNumber: '', // 固定电话 + teamDesc: '', //队伍描述 + fileList: [], + memberList: [] + }); + const titles = ref(); + const disabled = ref(); + const teamId = ref() + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + teamId.value = id + if (title == '查看应急队伍管理' || title == '修改应急队伍管理') { + contingencyApi() + .seeEmergencyTeam(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + fileList.value = (res.data.data.fileList?res.data.data.fileList:[]) + initFileListData() + listApi() + } + }); + } + } + // 上传附件 + const fileList = ref([]) + const initFileListData = async () => { + for(var a = 0;a<fileList.value.length;a++){ + fileList.value[a].name = fileList.value[a].fileName + } + } + // 上传成功组装数据 + const successUploader = (list) =>{ + fileList.value = list + const formFileList = [] + for(var a = 0;a<fileList.value.length;a++){ + formFileList.push( + { + fileName:fileList.value[a].fileName, + fileUrl:'' + } + ) + } + ruleForm.value.fileList = formFileList + } + //定义树形下拉框 + const principalDepartmentId = ref() + const data = ref() + + + + //el-tree-select回显 + const propse = { + label: 'depName', + children: 'children', + }; + const newTreeList = []; + //得到部门树 + const department = async () => { + await goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + getTreeList(res.data.data, newTreeList); + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 递归树状数据且修改字段名 + const getTreeList = (treeList, newTreeList) => { + treeList.map((c) => { + let tempData = { + depName: c.depName, + value: c.depId, + children: [], + }; + if (c.children && c.children.length > 0) { + tempData.children = []; + getTreeList(c.children, tempData.children); + } + newTreeList.push(tempData); + }); + }; + onMounted(() => { + department(); + }); + + + + + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + const onUser = (e: any) => { + ruleForm.value.principalUid = e[0].uid + ruleForm.value.principalName = e[0].realName + }; + //定义tabs切换 + const activeName = ref('first') + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event) + } + + // 必填项提示 + const rules = reactive<FormRules>({ + teamName: [ + { + required: true, + message: '队伍名称不能为空', + trigger: 'change', + }, + ], + teamLevel: [ + { + required: true, + message: '队伍级别不能为空', + trigger: 'change', + }, + ], + principalUid: [ + { + required: true, + message: '队伍负责人不能为空', + trigger: 'change', + }, + ], + principalDepartmentId: [ + { + required: true, + message: '负责人部门不能为空', + trigger: 'change', + }, + ], + principalPhone: [ + { + required: true, + message: '负责人手机不能为空', + trigger: 'change', + }, + ], + telephoneNumber: [ + { + required: true, + message: '固定电话不能为空', + trigger: 'change', + }, + ], + }) + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + const onSubmit = async (title: string, formEl: FormInstance | undefined) => { + if(!ruleForm.value.fileList){ + ruleForm.value.fileList = [] + } + if (title == '新建应急队伍管理') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + if(teamId.value==null||teamId.value==''){ + contingencyApi() + .addEmergencyTeam(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + }else { + ElMessage({ + showClose: true, + message: '添加成功', + type: 'success', + }); + emit('myAdd', true); + } + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改应急队伍管理') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + contingencyApi() + .editEmergencyTeam(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + teamName: '', // 队伍名称 + teamLevel: '', // 队伍级别 + principalUid: '', // 队伍负责人 + principalDepartmentId: '', //负责人部门 + principalPhone: '', // 负责人手机 + telephoneNumber: '', // 固定电话 + teamDesc: '', //队伍描述 + fileList: [], + memberList: [] + }; + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + fileList.value = [] + tableData.value=[] + ruleForm.value = {} + }; + // 定义表格数据 + const tableData = ref([]); + //添加队伍负责人弹窗 + const addRef = ref(); + const onAddEmergencyPersonnel = async (formEl: FormInstance | undefined) => { + if(!ruleForm.value.fileList){ + ruleForm.value.fileList = [] + } + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + // isShowDialog.value = false; + if(teamId.value == ''||teamId.value==null){ + ElMessageBox.confirm('确认添加此应急队伍?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + contingencyApi() + .addEmergencyTeam(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + teamId.value = res.data.data.id + addRef.value.openDialog('新建应急队伍人员','',teamId.value); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }) + .catch(() => {}); + + }else { + addRef.value.openDialog('新建应急队伍人员','',teamId.value); + } + + + } else { + console.log('error submit!', fields); + } + }); + }; + // 请求列表数据 + const listApi = async () => { + let res = await contingencyApi().getEmergencyTeamPersonnelList(teamId.value); + if (res.data.code == 200) { + tableData.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }; + // 新增后刷新 + const onMyAdd = (e: object) => { + listApi(); + }; + // 打开修改弹窗 + const onEdit = (val: string, row: object) => { + if (val == '查看应急队伍人员') { + addRef.value.openDialog('查看应急队伍人员', row,teamId.value, true); + } else { + addRef.value.openDialog('修改应急队伍人员', row,teamId.value, false); + } + }; + // 删除 + const onRowDel = (data: any) => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + contingencyApi() + .deleteEmergencyTeamPersonnel(data) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi() + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi() + } + }); + }) + .catch(() => { + }); + }; + return { + openDialog, + fileList, + principalDepartmentId, + data, + activeName, + handleClick, + tableData, + Search, + resetForm, + isShowDialog, + ruleFormRef, + ruleForm, + rules, + addRef, + userRef, + titles, + disabled, + propse, + emit, + onSubmit, + openUser, + onAddEmergencyPersonnel, + toggleFullscreen, + FullScreen, + full, + onUser, + onMyAdd, + listApi, + onEdit, + onRowDel, + department, + teamId, + newTreeList, + successUploader, + initFileListData + }; + }, + }); +</script> +<style scoped lang="scss"> + .textarea { + height: 168px !important; + } + + .textarea ::v-deep .el-textarea__inner { + height: 168px !important; + } + + ::v-deep .el-table__cell { + font-weight: 400; + } +</style> + diff --git a/src/views/contingencyManagement/contingency/component/upData.vue b/src/views/contingencyManagement/contingency/component/upData.vue index e69de29..cc3e2d0 100644 --- a/src/views/contingencyManagement/contingency/component/upData.vue +++ b/src/views/contingencyManagement/contingency/component/upData.vue @@ -0,0 +1,125 @@ +<template> + <el-dialog + v-model="dialogVisible" + title="导入Excel" + width="50%" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + multiple + :on-preview="handlePreview" + :on-remove="handleRemove" + :before-remove="beforeRemove" + :limit="3" + :on-exceed="handleExceed" + > + <el-button size="default">下载模板</el-button> + <el-button size="default" type="primary">点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 只允许导入“xls”或“xlsx”格式文件! + </div> + </template> + </el-upload> + </el-dialog> +</template> +<script lang="ts"> +import { ref, + defineComponent, +} from "vue"; +import { + ElMessage, + ElMessageBox +} from "element-plus"; +import type { + UploadProps, + UploadUserFile, +} from "element-plus"; +import { + FullScreen +} from '@element-plus/icons-vue' +export default defineComponent({ + setup() { + let dialogVisible =ref<boolean>(false) + const fileList = ref<UploadUserFile[]>([ + // { + // name: "element-plus-logo.svg", + // url: "https://element-plus.org/images/element-plus-logo.svg", + // }, + // { + // name: "element-plus-logo2.svg", + // url: "https://element-plus.org/images/element-plus-logo.svg", + // }, + ]); + + const handleRemove: UploadProps["onRemove"] = (file, uploadFiles) => { + console.log(file, uploadFiles); + }; + + const handlePreview: UploadProps["onPreview"] = (uploadFile) => { + console.log(uploadFile); + }; + + const handleExceed: UploadProps["onExceed"] = (files, uploadFiles) => { + ElMessage.warning( + `The limit is 3, you selected ${ + files.length + } files this time, add up to ${ + files.length + uploadFiles.length + } totally` + ); + }; + + const beforeRemove: UploadProps["beforeRemove"] = ( + uploadFile, + uploadFiles + ) => { + return ElMessageBox.confirm( + `Cancel the transfert of ${uploadFile.name} ?` + ).then( + () => true, + () => false + ); + }; + // 打开弹窗 + const openDialog = (type:string,value:any,projectList: any,projectId:string) => { + dialogVisible.value=true + } + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + fileList, + handleRemove, + handlePreview, + handleExceed, + beforeRemove, + openDialog, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.el-upload__tip{ + margin-left: 100px; + margin-top: 20px; +} +::v-deep .el-dialog__header{ + border-bottom: 1px solid #e8e8e8; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/contingency/index.vue b/src/views/contingencyManagement/contingency/index.vue index e69de29..8083231 100644 --- a/src/views/contingencyManagement/contingency/index.vue +++ b/src/views/contingencyManagement/contingency/index.vue @@ -0,0 +1,401 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-form :inline="true" class="demo-form-inline"> + <el-form-item> + <el-input size="default" v-model="listQuery.searchParams.teamName" placeholder="队伍名称"> </el-input> + </el-form-item> + <el-form-item> + <el-select size="default" v-model="listQuery.searchParams.teamLevel" placeholder="请选择队伍级别"> + <el-option label="公司" value="1"></el-option> + <el-option label="分厂-车间" value="2"></el-option> + <el-option label="工序-班组等" value="3"></el-option> + </el-select> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" class="ml10" @click="onSubmit"> + 查询 + </el-button> + <el-button size="default" class="ml10" @click="submitReset"> + 重置 + </el-button> + </el-form-item> + </el-form> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> + <Plus /> + </el-icon>新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning" @click="onEdit('修改', deleteAll[0])"> + <el-icon> + <Edit /> + </el-icon>修改 + </el-button> + <el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </div> +<!-- <div class="button_Right">--> +<!-- <el-button size="default" @click="upButton">--> +<!-- <el-icon>--> +<!-- <Upload />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button size="default">--> +<!-- <el-icon>--> +<!-- <Download />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button size="default">--> +<!-- <el-icon>--> +<!-- <Refresh />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- </div>--> + </div> + <el-table + :data="tableData" + style="width: 100%" + ref="multipleTableRef" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="teamName" label="队伍名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="teamLevel" label="队伍级别" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.teamLevel == 1">公司</span> + <span v-if="scope.row.teamLevel == 2">分厂-车间</span> + <span v-if="scope.row.teamLevel == 3">工序-班组等</span> + </template> + </el-table-column> + <el-table-column prop="teamDesc" label="队伍描述" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="principalPhone" label="负责人手机" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="fileList" label="相关附件" show-overflow-tooltip sortable> + + </el-table-column> + <el-table-column label="操作" width="200" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onEdit('详情',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <View /> + </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <EditPen /> + </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + class="mt15" + :pager-count="5" + :page-sizes="[10, 20, 30]" + v-model:currentPage="pageIndex" + background + v-model:page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + > + </el-pagination> + </div> + </el-card> + <OpenAdd ref="addRef" @myAdd="onMyAdd" /> + <upData ref="upShow"></upData> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent +} from 'vue'; +import { + ElMessageBox, + ElMessage, +} from 'element-plus'; +import { + Plus, + Delete, + // Upload, + // Download, + // Refresh, + Edit, + View, + EditPen, +} from '@element-plus/icons-vue' + +import OpenAdd from '../../contingencyManagement/contingency/component/openAdd.vue' +import UpData from '../../contingencyManagement/contingency/component/upData.vue'; +import {contingencyApi} from "../../../api/contingencyManagement/contingency"; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenAdd, + View, + Edit, + EditPen, + Plus, + Delete, + // Upload, + // Download, + // Refresh, + UpData, + contingencyApi + }, + setup() { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + teamName: "", + teamLevel: "", + } + }) + // 定义表格数据 + const tableData = ref([]); + // 列表数据请求 + const onSubmit = async () => { + let res = await contingencyApi().getTeamManagementList(listQuery) + if(res.data.code === '200'){ + tableData.value = res.data.data; + for(var a = 0;a<tableData.value.length;a++){ + if(tableData.value[a].fileList!=null&&tableData.value[a].fileList!=''&&tableData.value[a].fileList.length!=0){ + tableData.value[a].fileList = tableData.value[a].fileList[0].fileName + } + } + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + }else{ + ElMessage({ + showClose: true, + type:'error', + message:res.data.msg + }) + } + } + // 重置 + const submitReset = () => { + listQuery.searchParams.teamName = ''; + listQuery.searchParams.teamLevel = ''; + onSubmit(); + }; + const warning = ref(true); + const danger = ref(true); + const deleteAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deleteAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + + // 上传 + // const upShow=ref() + // const upButton=()=>{ + // upShow.value.openDialog() + // } + // 打开新增应急队伍弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建应急队伍管理'); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + onSubmit(); + } else { + onSubmit(); + } + }; + // 打开修改应急队伍弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看应急队伍管理',row,true); + } else { + addRef.value.openDialog('修改应急队伍管理',row,false); + } + }; + // 删除用户 + const onRowDel = (data: any) => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + contingencyApi() + .deleteEmergencyTeam([data]) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }).catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + contingencyApi() + .deleteEmergencyTeam(deleteAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const onHandleSizeChange = (val: number) => { + listQuery.pageSize = val; + onSubmit(); + }; + const onHandleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + onSubmit(); + }; + // 页面加载时 + onMounted(() => { + onSubmit(); + }); + return { + listQuery, + onSubmit, + // upButton, + // upShow, + onOpenAdd, //新增 + addRef, + pageIndex, + pageSize, + total, + onEdit, + handleSelectionChange, + submitReset, + onRowDel, + onMyAdd, + tableData, + onDeleteAll, + onHandleSizeChange, + onHandleCurrentChange, + deleteAll, + warning, + danger, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box{ + padding: 20px; + background-color: #fff; +} +.tableForm{ + margin-top: 10px; +} +/*按钮行*/ + .button_Line{ + display: flex; + flex-direction: row; + justify-content: space-between; + margin-bottom: 10px; + } +//分页 +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +.el-form .el-form-item{ + margin-bottom: 0px!important; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue index e69de29..5dad014 100644 --- a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue +++ b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue @@ -0,0 +1,325 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + title="应急演练计划--修改审批进度" + v-model="isShowDialog" + width="769px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <!-- <img class="process-status-img" src="src/assets/icon.png"> --> + <el-tabs type="border-card"> + <el-tab-pane label="流转记录"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流转记录</span> + </div> + </template> + <div> + <el-steps :active="2"> + <el-step title="开始" description="胡海涛,2022-07-09 20:41:50" /> + <el-step title="一级审批" description="管理员,2022-07-09 20:41:50" /> + </el-steps> + </div> + <el-table :data="tableData" stripe style="width: 100%"> + <el-table-column prop="date" label="执行环节" width="120" /> + <el-table-column prop="name" label="执行人" width="120" /> + <el-table-column prop="address" label="开始时间" width="100" /> + <el-table-column prop="address" label="结束时间" width="100" /> + <el-table-column prop="address" label="办理状态" width="100" /> + <el-table-column prop="address" label="审批意见" width="100" /> + <el-table-column prop="address" label="任务历时" width="100" /> + </el-table> + </el-card> + </el-tab-pane> + <el-tab-pane label="流程信息"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流程信息</span> + </div> + </template> + <div> + <el-timeline> + <el-timeline-item timestamp="2018/4/12" placement="top" color="rgb(63, 158, 255)"> + <el-card> + <h4 style="margin: 10px 0;padding-bottom: 10px;">一级审批</h4> + <el-row> + <el-col class="tip" :span="22" :offset="1"> + <div class="item"> + <span class="label">审批人:</span> + <span class="value">管理员</span> + </div> + <div class="item"> + <span class="label">办理状态:</span> + <span class="value"> +<!-- <el-tag--> +<!-- v-for="item in items"--> +<!-- :key="item.label"--> +<!-- :type="item.type"--> +<!-- class="mx-1"--> +<!-- effect="dark"--> +<!-- >--> +<!-- {{ item.label }}--> +<!-- </el-tag>--> + <p class="text">等待审核</p> + </span> + </div> + <div class="item"> + <span class="label">审批意见:</span> + <span class="value">等待审核</span> + </div> + <div class="item"> + <span class="label">开始时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">结束时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">用时:</span> + <span class="value">0秒</span> + </div> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + <el-timeline-item timestamp="2018/4/3" placement="top" color="rgb(63, 158, 255)"> + <el-card> + <h4>开始</h4> + <el-row> + <el-col class="tip" :span="22" :offset="1"> + <div class="item"> + <span class="label">审批人:</span> + <span class="value">胡海涛</span> + </div> + <div class="item"> + <span class="label">办理状态:</span> + <span class="value"> + <p class="text">开始</p> + </span> + </div> + <div class="item"> + <span class="label">审批意见:</span> + <span class="value">等待审核</span> + </div> + <div class="item"> + <span class="label">开始时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">结束时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">用时:</span> + <span class="value">0秒</span> + </div> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + </el-timeline> + </div> + </el-card> + </el-tab-pane> + <el-tab-pane label="流程图"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流程图</span> + </div> + </template> + <div> + </div> + </el-card> + </el-tab-pane> + </el-tabs> + </el-dialog> + <RegionsDialog ref="Shows"/> + <UserCheckbox ref="userRef"/> + </div> +</template> + +<script lang="ts"> +import { + + ref, + defineComponent +} from 'vue'; + +import type { + TagProps, +} from 'element-plus' + +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import UserCheckbox from "/@/components/userCheckbox/index.vue" +import RegionsDialog from "/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue" + +export default defineComponent({ + name: 'openAdd', + components: { + RegionsDialog, + UserCheckbox, + }, + setup() { + const isShowDialog = ref(false) + // 打开弹窗 + const openDialog = () => { + // state.ruleForm = row; + isShowDialog.value = true; + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-02', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-04', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-01', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + ] + + type Item = { type: TagProps['type']; label: string } + + const items = ref<Array<Item>>([ + { type: '', label: '等待审核' }, + ]) + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + Search, + tableData, + items, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.process-status-img{ + width: 128px; + height: auto; + position: absolute; + right: 10px; + top: 60px; + z-index: 999; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//tabs字体颜色 +::v-deep .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{ + color: #a9d86e!important; +} +.card-header { + display: flex; + justify-content: space-between; + align-items: center; +} +//.box-card { +// width: 480px; +//} +//步骤条字体大小 +::v-deep .el-step__icon-inner{ + font-size: 14px!important; +} +//步骤条颜色 +::v-deep .el-step__line{ + background-color: #409eff; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} + +.tip { + padding: 8px 16px; + background-color: #ecf8ff; + border-radius: 4px; + border-left: 5px solid #50bfff; + margin: 20px 0; +} +.item{ + height: 32px; + line-height: 32px; + margin-bottom: 8px; +} +.item .label { + display: inline-block; + height: 100%; + width: 70px; + font-size: 14px; + color: #5e6d82; + text-align: end; + vertical-align: top; +} +.item .value { + padding-left: 10px; + font-size: 14px; + max-width: calc(100% - 90px); + color: #5e6d82; + display: inline-block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.text{ + background-color: #409eff; + color: #fff; + border-width: 1px; + border-style: solid; + border-radius: 4px; + height: 24px; + padding: 0 8px; + line-height: 22px; + display: inline-block; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue index e69de29..b1a7099 100644 --- a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue +++ b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue @@ -0,0 +1,404 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="button_Line"> + <div class="button_Left mb15"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> + <Plus /> + </el-icon>新建 + </el-button> + <el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> +<!-- <el-button @click="upButton">--> +<!-- <el-icon>--> +<!-- <Upload />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button>--> +<!-- <el-icon>--> +<!-- <Download />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button>--> +<!-- <el-icon>--> +<!-- <Refresh />--> +<!-- </el-icon>--> +<!-- </el-button>--> + </div> + </div> + <el-table + :data="tableData" + style="width: 100%" + ref="multipleTableRef" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="drillName" label="演练名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillAddress" label="演练地点" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillWay" label="演练方式" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.drillWay == 1">综合</span> + <span v-if="scope.row.drillWay == 2">桌面</span> + <span v-if="scope.row.drillWay == 3">专项</span> + </template> + </el-table-column> + <el-table-column prop="drillLevel" label="演练级别" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.drillLevel == 1">公司级</span> + <span v-if="scope.row.drillLevel == 2">分厂级</span> + <span v-if="scope.row.drillLevel == 3">车间级</span> + </template> + </el-table-column> + <el-table-column prop="drillPlanDate" label="计划演练日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="gmtModitify" label="修改时间" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="260" align="center"> + <template #default="scope"> + <!--<el-button size="small" text type="primary" @click="releaseOfDrillPlan(0)">--> + <!--<el-icon style="margin-right: 5px;">--> + <!--<VideoPlay />--> + <!--</el-icon>启动--> + <!--</el-button>--> + <el-button size="small" text type="primary" @click="onEdit('详情',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <View /> + </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <EditPen /> + </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <OpenAdd ref="addRef" @myAdd="onMyAdd"/> +<!-- <FlowChart ref="flowRef"></FlowChart>--> + <upData ref="upShow"></upData> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent +} from 'vue'; +import { + ElMessageBox, + ElMessage, + // ElTable, +} from 'element-plus'; +import { + Plus, + Delete, + // Upload, + // Download, + // Refresh, + View, + VideoPlay, + EditPen, +} from '@element-plus/icons-vue' +import {useRouter} from "vue-router" +import OpenAdd from '/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue'; +// import FlowChart from '/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue'; +import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import { releaseDrillPlanApi } from '/@/api/contingencyManagement/emergencyDrillPlan'; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenAdd, + EditPen, + Plus, + View, + Delete, + // Upload, + // Download, + // Refresh, + VideoPlay, + UpData, + // FlowChart, + }, + setup() { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + drillName: '' + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 列表数据请求 + const listApi = async () => { + let res = await releaseDrillPlanApi().getReleaseDrillPlanList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }; + onMounted(() => { + listApi(); + }); + // 上传 + // const upShow=ref() + // const upButton=()=>{ + // upShow.value.openDialog() + // } + + // 打开新增弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建应急演练计划发布',false); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 打开修改用户弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看应急演练计划发布',row,true); + } else { + addRef.value.openDialog('修改应急演练计划发布',row,false); + } + }; + // 打开修改用户弹窗 + // const flowRef = ref(); + // const onflowChart = (row: TableDataRow) => { + // flowRef.value.openDialog(row); + // }; + // 删除 + const onRowDel = (id: number) => { + let arr = []; + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', '提示',{ + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + releaseDrillPlanApi() + .deleteReleaseDrillPlan(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + releaseDrillPlanApi() + .deleteReleaseDrillPlan(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + listApi(); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + listApi(); + }; + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + // console.log(deletAll.value); + if (val.length == 1) { + danger.value = false; + } else if (val.length == 0) { + danger.value = true; + } else { + danger.value = false; + } + }; + + // 启动跳转 + const router=useRouter() + const releaseOfDrillPlan=(data:string)=>{ + router.push({ + path:"/releaseOfDrillStart", + query:{ + type:data + } + }) + } + return { + // upButton, + // upShow, + tableData, + // onflowChart, + // flowRef, + onOpenAdd, //新增 + addRef, + onRowDel, + View , + pageIndex, + listQuery, + pageSize, + handleSizeChange, + handleCurrentChange, + router, + releaseOfDrillPlan, + listApi, + danger, + deletAll, + handleSelectionChange, + onMyAdd, + onDeleteAll, + onEdit, + total, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box{ + padding: 20px; + background-color: #fff; +} +.tableForm{ + margin-top: 10px; +} +/*按钮行*/ +.button_Line{ + display: flex; + flex-direction: row; + justify-content: space-between; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} +//分页 +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled{ + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next{ + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue b/src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue index fd30fbe..d746a59 100644 --- a/src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue +++ b/src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue @@ -112,9 +112,9 @@ await formEl.validate((valid, fields) => { if (valid) { if (titles.value == '新建应急物资保养') { - isShowDialog.value = false; delete ruleForm.value.suppliesName delete ruleForm.value.userName + delete ruleForm.value.id maintenanceEmergencyMaterialsApi() .addMaintenanceEmergencyMaterials(ruleForm.value) .then((res) => { @@ -125,6 +125,7 @@ type: 'success', }); emit('myAdd', true); + isShowDialog.value = false; } else { ElMessage({ showClose: true, @@ -135,7 +136,6 @@ } }); } else if (titles.value == '修改应急物资保养') { - isShowDialog.value = false; delete ruleForm.value.suppliesName delete ruleForm.value.userName maintenanceEmergencyMaterialsApi() @@ -148,6 +148,7 @@ type: 'success', }); emit('myAdd', true); + isShowDialog.value = false; } else { ElMessage({ showClose: true, @@ -163,12 +164,13 @@ console.log('error submit!', fields); } }); - formEl.resetFields(); + }; const resetForm = (formEl: FormInstance | undefined) => { isShowDialog.value = false; if (!formEl) return; formEl.resetFields(); + ruleForm.value.userList=[] }; const rules = reactive<FormRules>({ nameTitle: [], diff --git a/src/views/contingencyManagement/panManagement/component/abolishLibrary.vue b/src/views/contingencyManagement/panManagement/component/abolishLibrary.vue index e69de29..c36b1e3 100644 --- a/src/views/contingencyManagement/panManagement/component/abolishLibrary.vue +++ b/src/views/contingencyManagement/panManagement/component/abolishLibrary.vue @@ -0,0 +1,226 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="废止库" v-model="isShowDialog" width="60%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-table + :data="tableData" + style="width: 100%; margin-top: 15px" + ref="multipleTableRef" + :model="formInline" + :header-cell-style="{ background: '#f6f7fa', color: '#909399' }" + > + <el-table-column prop="name" label="预案名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="type" label="预案类型" show-overflow-tooltip sortable> + <template #default="scope"> + <div v-if="scope.row.type==1">综合应急预案</div> + <div v-if="scope.row.type==2">现场处置方案</div> + <div v-if="scope.row.type==3">专项应急预案</div> + <div v-if="scope.row.type==4">其他预案</div> + </template> + </el-table-column> + <el-table-column prop="authorName" label="编写人" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="releaseDate" label="发布实施日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="200" align="center"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onReduction(scope.row.id)">还原 </el-button> + </template> + </el-table-column> + </el-table> + </el-col> + </el-row> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + class="mt15" + background + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + /> + </div> + <template #footer> + <span class="dialog-footer"> + <el-button @click="onCancel">取消</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { ref, reactive, defineComponent, onMounted } from 'vue'; + +import type { FormInstance } from 'element-plus'; +import { + // ElMessageBox, + ElMessage, +} from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import { emergencyPlanApi } from '../../../../api/contingencyManagement/emergencyPlan'; +export default defineComponent({ + name: 'abolishLibrary', + components: {}, + setup(prop, { emit }) { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + abolishStatus: true, + }, + }); + // 定义表格数据 + const tableData = ref([]); + + // 列表数据请求 + const openDialog = async () => { + isShowDialog.value = true; + let res = await emergencyPlanApi().getEmergencyPlanList(listQuery); + if (res.data.code === '200') { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + type: 'error', + message: res.data.msg, + }); + } + }; + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + // 打开弹窗 + // const openDialog = () => { + // isShowDialog.value = true; + // }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + const onReduction = async (id: number) => { + isShowDialog.value = false; + emergencyPlanApi() + .reductionEmergencyTeam(id) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + openDialog(); + } + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + tableData, + Search, + ruleFormRef, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + toggleFullscreen, + FullScreen, + full, + listQuery, + // onSubmit, + total, + emit, + onReduction, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/panManagement/component/approval.vue b/src/views/contingencyManagement/panManagement/component/approval.vue index e69de29..aed57e8 100644 --- a/src/views/contingencyManagement/panManagement/component/approval.vue +++ b/src/views/contingencyManagement/panManagement/component/approval.vue @@ -0,0 +1,239 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="40%" draggable :fullscreen="full" :close-on-click-modal="false"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" label-width="120px" :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批名称" prop="workName"> + <el-input v-model="ruleForm.workName" placeholder="请填写队伍名称" disabled></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批标题" prop="title"> + <el-input v-model="ruleForm.title" placeholder="请填写审批名称" disabled></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批人" prop="approvePersonId"> + <el-input v-model="ruleForm.approvePersonName" placeholder="请选择" class="input-with-select" disabled> + <template #append> + <el-button :icon="Search" @click="openUser" :disabled="disabled"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="审批结果" prop="authorUid"> + <el-radio-group v-model="ruleForm.approveResult"> + <el-radio :label="false">不通过</el-radio> + <el-radio :label="true">通过</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="审批意见" prop="approveMemo"> + <el-input v-model="ruleForm.approveMemo" type="textarea" placeholder="请填写审批意见"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="是否完成" prop="complete" @change="typeChang"> + <el-radio-group v-model="ruleForm.complete"> + <el-radio :label="false">是</el-radio> + <el-radio :label="true">否</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col v-if="ruleForm.complete" :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批名称" prop="twoWorkName"> + <el-input v-model="ruleForm.twoWorkName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col v-if="ruleForm.complete" :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批标题" prop="twoTitle"> + <el-input v-model="ruleForm.twoTitle" placeholder="请填写审批名称"></el-input> + </el-form-item> + </el-col> + <el-col v-if="ruleForm.complete" :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批人" prop="twoApprovePersonName"> + <el-input v-model="ruleForm.twoApprovePersonName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent } from 'vue'; + +import type { FormInstance } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearchUserManger from '/@/components/DailogSearchUserManger/index.vue'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; + +export default defineComponent({ + name: 'openAdd', + components: { + DailogSearchUserManger, + }, + setup(prop, { emit }) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + const ruleForm = ref({ + approveId: '', + workName: '', // 审批名称 + title: '', //审批标题 + approvePersonId: '', // + approvePersonName: '', // 审批人 + approveStatus: 2, //审批状态 + relateType: 1, //业务类型 + approveResult: false, //审批结果 + approveMemo: '', //审批意见 + relateId: '', + twoWorkName: '', + twoTitle: '', + twoApprovePersonId: '', + twoApprovePersonName: '', + }); + const titles = ref(); + const disabled = ref(); + const uid = ref(); + // 打开弹窗 + const openDialog = (title: string, approveId: number, type: boolean, id: number) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + + uid.value = approveId; + if (title == '查看审批' || title == '审批') { + emergencyPlanApi() + .approvalProcessEmergencyPlan(approveId) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + ruleForm.value.relateId = id; + } + }); + } + }; + const submitForm = async () => { + console.log(ruleForm.value); + + ruleForm.value.workName = ruleForm.value.twoWorkName; + ruleForm.value.title = ruleForm.value.twoTitle; + ruleForm.value.approvePersonId = ruleForm.value.twoApprovePersonId; + ruleForm.value.approvePersonName = ruleForm.value.twoApprovePersonName; + ruleForm.value.relateType = 1; + isShowDialog.value = false; + if(ruleForm.value.complete == false) { + ruleForm.value.approveStatus=3 + } + delete ruleForm.value.gmtCreate + delete ruleForm.value.complete + delete ruleForm.value.submitPersonName + + delete ruleForm.value.twoApprovePersonId + delete ruleForm.value.twoApprovePersonName + delete ruleForm.value.twoTitle + delete ruleForm.value.twoWorkName + emergencyPlanApi() + .editApprovalEmergencyPlan(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + }); + }; + const resetForm = () => { + isShowDialog.value = false; + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + //回显 + const onUser = (e: any) => { + ruleForm.value.twoApprovePersonId = e[0].uid; + ruleForm.value.twoApprovePersonName = e[0].realName; + }; + const typeChang = () => { + console.log('tag', ruleForm); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + Search, + submitForm, + openUser, + userRef, + toggleFullscreen, + FullScreen, + full, + titles, + disabled, + emit, + isShowDialog, + ruleFormRef, + ruleForm, + resetForm, + onUser, + typeChang, + uid, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/panManagement/component/approvalProcess.vue b/src/views/contingencyManagement/panManagement/component/approvalProcess.vue index e69de29..209c51a 100644 --- a/src/views/contingencyManagement/panManagement/component/approvalProcess.vue +++ b/src/views/contingencyManagement/panManagement/component/approvalProcess.vue @@ -0,0 +1,196 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="查看审批流程" v-model="isShowDialog" width="60%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-table + :data="tableData" + style="width: 100%; margin-top: 15px" + ref="multipleTableRef" + :model="formInline" + :header-cell-style="{ background: '#f6f7fa', color: '#909399' }" + > + <el-table-column prop="workName" label="审批人" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="title" label="审批标题" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="approvePersonName" label="编写人" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="approveMemo" label="审批意见" show-overflow-tooltip sortable></el-table-column> + </el-table> + </el-col> + </el-row> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + class="mt15" + background + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + /> + </div> + <template #footer> + <span class="dialog-footer"> + <el-button @click="onCancel">取消</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { ref, reactive, defineComponent, onMounted } from 'vue'; + +import type { FormInstance } from 'element-plus'; +import { + // ElMessageBox, + ElMessage, +} from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import { emergencyPlanApi } from '../../../../api/contingencyManagement/emergencyPlan'; +export default defineComponent({ + name: 'abolishLibrary', + components: {}, + setup(prop, { emit }) { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + relateType: 1, + relateId: '', + startTime: '', + endTime: '', + }, + }); + // 定义表格数据 + const tableData = ref([]); + + // 列表数据请求 + const uid = ref(); + const openDialog = async (id: number) => { + isShowDialog.value = true; + listQuery.searchParams.relateId=id + uid.value = id; + let res = await emergencyPlanApi().processEmergencyPlan(listQuery); + if (res.data.code === '200') { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + type: 'error', + message: res.data.msg, + }); + } + }; + + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + // 打开弹窗 + // const openDialog = () => { + // isShowDialog.value = true; + // }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + tableData, + Search, + ruleFormRef, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + toggleFullscreen, + FullScreen, + full, + listQuery, + total, + emit, + uid, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/panManagement/component/initiateApproval.vue b/src/views/contingencyManagement/panManagement/component/initiateApproval.vue index e69de29..eb2afa2 100644 --- a/src/views/contingencyManagement/panManagement/component/initiateApproval.vue +++ b/src/views/contingencyManagement/panManagement/component/initiateApproval.vue @@ -0,0 +1,159 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="发起审批" v-model="isShowDialog" width="40%" draggable :fullscreen="full" :close-on-click-modal="false"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批名称" prop="workName"> + <el-input v-model="ruleForm.workName" placeholder="请填写审批名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批标题" prop="title"> + <el-input v-model="ruleForm.title" placeholder="请填写审批名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批人" prop="approvePersonId"> + <el-input v-model="ruleForm.approvePersonName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button size="default" type="primary" @click="submitForm">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent } from 'vue'; + +import type { FormInstance } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearchUserManger from '/@/components/DailogSearchUserManger/index.vue'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; + +export default defineComponent({ + name: 'openAdd', + components: { + DailogSearchUserManger, + }, + setup(prop, { emit }) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + const ruleForm = ref({ + workName: '', // 审批名称 + title: '', //审批标题 + approvePersonId: '', + approvePersonName: '', + approveStatus: 2, + relateType: 1, + relateId: '', + }); + const titles = ref(); + + // 打开弹窗 + const openDialog = (title: string, id: number) => { + isShowDialog.value = true; + titles.value = title; + ruleForm.value.relateId = id; + uid.value = id; + }; + const uid = ref(); + const submitForm = async () => { + isShowDialog.value = false; + + emergencyPlanApi() + .approvalEmergencyPlan(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + }); + }; + const resetForm = () => { + isShowDialog.value = false; + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + //回显 + const onUser = (e: any) => { + ruleForm.value.approvePersonId = e[0].uid; + ruleForm.value.approvePersonName = e[0].realName; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + Search, + submitForm, + openUser, + userRef, + toggleFullscreen, + FullScreen, + full, + titles, + emit, + isShowDialog, + ruleFormRef, + ruleForm, + resetForm, + onUser, + uid, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/panManagement/component/openAdd.vue b/src/views/contingencyManagement/panManagement/component/openAdd.vue index e69de29..4114bb7 100644 --- a/src/views/contingencyManagement/panManagement/component/openAdd.vue +++ b/src/views/contingencyManagement/panManagement/component/openAdd.vue @@ -0,0 +1,471 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="50%" + draggable + :fullscreen="full" + :close-on-click-modal="false" + @close="resetForm(ruleFormRef)" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" label-width="120px" :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="预案名称" prop="name"> + <el-input v-model="ruleForm.name" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="适用部门" prop="responsibleDepartment"> + <el-tree-select + v-model="responsibleDepartment" + :data="newTreeList" + class="w100" + clearable + :props="propse" + multiple + :render-after-expand="false" + check-strictly + check-on-click-node + placeholder="请选择" + @change="changeDepartment" + /> + <el-divider /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="预案类型" prop="type"> + <el-select v-model="ruleForm.type" class="w100" placeholder="请选择"> + <el-option label="综合应急预案" value="1"></el-option> + <el-option label="现场处置方案" value="2"></el-option> + <el-option label="专项应急预案" value="3"></el-option> + <el-option label="其他预案" value="4"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="危险源关联" prop="associatedDanger"> + <el-select v-model="ruleForm.associatedDanger" class="w100" placeholder="请选择"> + <el-option label="是" :value="false"></el-option> + <el-option label="否" :value="true"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="预案级别" prop="level"> + <el-select v-model="ruleForm.level" class="w100" placeholder="请选择"> + <el-option label="公司级" value="1"></el-option> + <el-option label="分厂级" value="2"></el-option> + <el-option label="车间级" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="编写人" prop="authorId"> + <el-input v-model="ruleForm.authorName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="编写部门" prop="authorDeptId"> + <el-tree-select + v-model="ruleForm.authorDeptId" + :data="newTreeList" + class="w100" + :props="propse" + clearable + :render-after-expand="false" + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发布实施日期" prop="releaseDate"> + <el-date-picker + v-model="ruleForm.releaseDate" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急队伍" prop="emergencyTeam"> + <el-input v-model="ruleForm.teamName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt(0)" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="相关附件"> + <uploaderFile :fileList="fileList" :systemName="'EMERGENCY'" :disabled="disabled" + @successUploader="successUploader"></uploaderFile> + </el-form-item> + </el-col> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">--> + <!-- <el-form-item label="区域名称" prop="areaName">--> + <!-- <el-input--> + <!-- v-model="ruleForm.areaName"--> + <!-- placeholder="请选择"--> + <!-- class="input-with-select"--> + <!-- >--> + <!-- <template #append>--> + <!-- <el-button :icon="Search" @click="regionsDialog"/>--> + <!-- </template>--> + <!-- </el-input>--> + <!-- </el-form-item>--> + <!-- </el-col>--> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <CheckTemplate ref="Shows" @SearchUser="SearchUser" /> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser" /> + <RegionsDialog ref="openRef" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent, onMounted } from 'vue'; + +import type { UploadUserFile, FormInstance } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearchUserManger from '/@/components/DailogSearchUserManger/index.vue'; +import CheckTemplate from '/@/components/checkTemplate/index.vue'; +import RegionsDialog from '/@/components/regionsDialog/index.vue'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; +import { goalManagementApi } from '/@/api/goalManagement'; +import uploaderFile from '/@/components/uploaderFile/index.vue'; +export default defineComponent({ + name: 'openAdd', + components: { + CheckTemplate, + DailogSearchUserManger, + RegionsDialog, + uploaderFile + }, + setup(prop, { emit }) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + const ruleForm = ref({ + name: '', // 预案名称 + type: '', //预案类型 + associatedDanger: '', // 危险源关联 + level: '', // 预案级别 + authorUid: '', // 编写人 + authorName: '', + authorDeptId: '', // 编写部门 + releaseDate: '', // 发布实施日期 + fileList: [], + areaList: [], //区域列表 + teamList: [], + // teamId: '', //应急队伍 + deptList: [], + }); + const titles = ref(); + const disabled = ref(); + + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看应急预案管理' || title == '修改应急预案管理') { + emergencyPlanApi() + .seeEmergencyTeam(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + ruleForm.value.teamName = '' + responsibleDepartment.value = [] + if(res.data.data.teamList){ + for(var a = 0;a<res.data.data.teamList.length;a++){ + ruleForm.value.teamName+=res.data.data.teamList[a].teamName+';' + } + } + if(res.data.data.deptList){ + for(var a = 0;a<res.data.data.deptList.length;a++){ + + responsibleDepartment.value.push(res.data.data.deptList[a].departmentId) + } + } + fileList.value = (res.data.data.fileList?res.data.data.fileList:[]) + initFileListData() + } + }); + } + }; + const initFileListData = async () => { + for(var a = 0;a<fileList.value.length;a++){ + fileList.value[a].name = fileList.value[a].fileName + } + } + // 上传成功组装数据 + const successUploader = (list) =>{ + fileList.value = list + const formFileList = [] + for(var a = 0;a<fileList.value.length;a++){ + formFileList.push( + { + fileName:fileList.value[a].fileName, + fileUrl:'' + } + ) + } + ruleForm.value.fileList = formFileList + } + //日期选择器 + const releaseDate = ref(''); + // 上传附件 + const fileList = ref([]); + //el-tree-select回显 + const propse = { + label: 'depName', + children: 'children', + }; + const newTreeList = []; + //得到部门树 + const department = async () => { + await goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + getTreeList(res.data.data, newTreeList); + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 递归树状数据且修改字段名 + const getTreeList = (treeList, newTreeList) => { + treeList.map((c) => { + let tempData = { + depName: c.depName, + value: c.depId, + children: [], + }; + if (c.children && c.children.length > 0) { + tempData.children = []; + getTreeList(c.children, tempData.children); + } + newTreeList.push(tempData); + }); + }; + onMounted(() => { + department(); + }); + const changeDepartment = (e) => { + var temList = []; + for (var a = 0; a < e.length; a++) { + temList.push({ + departmentId: e[a], + }); + } + ruleForm.value.deptList = temList; + console.log(ruleForm); + }; + //定义树形下拉框 + const responsibleDepartment = ref([]); + const data = ref(); + + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if(!ruleForm.value.fileList){ + ruleForm.value.fileList = [] + } + if (title == '新建应急预案管理') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + delete ruleForm.value.teamName + emergencyPlanApi() + .addEmergencyPlan(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改应急预案管理') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + delete ruleForm.value.teamName + emergencyPlanApi() + .editEmergencyTeam(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + name: '', // 预案名称 + type: '', //预案类型 + associatedDanger: '', // 危险源关联 + level: '', // 预案级别 + authorUid: '', // 编写人 + authorName: '', + authorDeptId: '', // 编写部门 + releaseDate: '', // 发布实施日期 + fileList: [], + // teamId: '', //应急队伍ID + areaList: [], //区域列表 + teamList: [], + deptList: [], + }; + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + ruleForm.value = {}; + fileList.value = [] + }; + // 应急队伍弹窗 + const Shows = ref(); + const daiInpt = (data: any) => { + Shows.value.openDailog(data); + }; + const SearchUser = (val: any) => { + let arr = []; + ruleForm.value.teamList = []; + for (let i = 0; i < val.length; i++) { + arr.push(val[i].teamName); + ruleForm.value.teamList.push({ + teamId: val[i].id, + }); + } + ruleForm.value.teamName = arr.toString(); + }; + // 选择区域弹窗 + const openRef = ref(); + const regionsDialog = () => { + openRef.value.openDailog(); + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + //回显 + const onUser = (e: any) => { + ruleForm.value.authorUid = e[0].uid; + ruleForm.value.authorName = e[0].realName; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + fileList, + responsibleDepartment, + data, + Search, + releaseDate, + // treeSelect, + // trees, + propse, + department, + daiInpt, + Shows, + SearchUser, + submitForm, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + titles, + disabled, + emit, + isShowDialog, + ruleFormRef, + ruleForm, + resetForm, + onUser, + newTreeList, + changeDepartment, + successUploader, + initFileListData + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/panManagement/component/startUp.vue b/src/views/contingencyManagement/panManagement/component/startUp.vue index e69de29..49f5500 100644 --- a/src/views/contingencyManagement/panManagement/component/startUp.vue +++ b/src/views/contingencyManagement/panManagement/component/startUp.vue @@ -0,0 +1,160 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="30%" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="ruleForm" ref="ruleFormRef" label-width="80px"> + <el-form-item label="备注" > + <el-input v-model="ruleForm.remark" type="textarea" autocomplete="off" /> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">取消</el-button> + <el-button size="default" type="primary" @click="submitForm(titles,ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { + ref, + defineComponent +} from 'vue'; + +import type { + FormInstance, +} from 'element-plus' +import { ElMessage } from 'element-plus'; +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import {emergencyPlanLogApi} from "/@/api/contingencyManagement/emergencyPlanLog"; + +export default defineComponent({ + name: 'openAdd', + components: { + }, + setup(prop, {emit}) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + + const ruleForm = ref({ + // id: id, + remark: '', + }) + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + // const openDialog = (title: string ,id: number,) => { + // isShowDialog.value = true; + // titles.value = title; + // if (title == '启动') { + // emergencyPlanLogApi() + // .seeEmergencyPlanLog(id) + // .then((res) => { + // if (res.data.code == 200) { + // ruleForm.value = res.data.data; + // } + // }); + // } + // }; + const openDialog = (title: string) => { + isShowDialog.value = true; + titles.value = title; + }; + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '启动') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyPlanLogApi() + .addEmergencyPlanLog(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + ruleForm.value = { + // id: id, + remark: '', + } + } else { + console.log('error submit!', fields); + } + }); + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + Search, + toggleFullscreen, + FullScreen, + full, + titles, + emit, + isShowDialog, + ruleFormRef, + ruleForm, + submitForm, + disabled, + resetForm, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea{ + height: 168px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 168px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal{ + height: 0; + margin: 0; + border-top: transparent; +} +.el-select{ + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/panManagement/component/upData.vue b/src/views/contingencyManagement/panManagement/component/upData.vue index e69de29..cc3e2d0 100644 --- a/src/views/contingencyManagement/panManagement/component/upData.vue +++ b/src/views/contingencyManagement/panManagement/component/upData.vue @@ -0,0 +1,125 @@ +<template> + <el-dialog + v-model="dialogVisible" + title="导入Excel" + width="50%" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + multiple + :on-preview="handlePreview" + :on-remove="handleRemove" + :before-remove="beforeRemove" + :limit="3" + :on-exceed="handleExceed" + > + <el-button size="default">下载模板</el-button> + <el-button size="default" type="primary">点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 只允许导入“xls”或“xlsx”格式文件! + </div> + </template> + </el-upload> + </el-dialog> +</template> +<script lang="ts"> +import { ref, + defineComponent, +} from "vue"; +import { + ElMessage, + ElMessageBox +} from "element-plus"; +import type { + UploadProps, + UploadUserFile, +} from "element-plus"; +import { + FullScreen +} from '@element-plus/icons-vue' +export default defineComponent({ + setup() { + let dialogVisible =ref<boolean>(false) + const fileList = ref<UploadUserFile[]>([ + // { + // name: "element-plus-logo.svg", + // url: "https://element-plus.org/images/element-plus-logo.svg", + // }, + // { + // name: "element-plus-logo2.svg", + // url: "https://element-plus.org/images/element-plus-logo.svg", + // }, + ]); + + const handleRemove: UploadProps["onRemove"] = (file, uploadFiles) => { + console.log(file, uploadFiles); + }; + + const handlePreview: UploadProps["onPreview"] = (uploadFile) => { + console.log(uploadFile); + }; + + const handleExceed: UploadProps["onExceed"] = (files, uploadFiles) => { + ElMessage.warning( + `The limit is 3, you selected ${ + files.length + } files this time, add up to ${ + files.length + uploadFiles.length + } totally` + ); + }; + + const beforeRemove: UploadProps["beforeRemove"] = ( + uploadFile, + uploadFiles + ) => { + return ElMessageBox.confirm( + `Cancel the transfert of ${uploadFile.name} ?` + ).then( + () => true, + () => false + ); + }; + // 打开弹窗 + const openDialog = (type:string,value:any,projectList: any,projectId:string) => { + dialogVisible.value=true + } + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + fileList, + handleRemove, + handlePreview, + handleExceed, + beforeRemove, + openDialog, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.el-upload__tip{ + margin-left: 100px; + margin-top: 20px; +} +::v-deep .el-dialog__header{ + border-bottom: 1px solid #e8e8e8; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/processForm/component/formInformationTop.vue b/src/views/contingencyManagement/processForm/component/formInformationTop.vue index e69de29..ef75063 100644 --- a/src/views/contingencyManagement/processForm/component/formInformationTop.vue +++ b/src/views/contingencyManagement/processForm/component/formInformationTop.vue @@ -0,0 +1,144 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" style="padding: 0 20px"> + <el-tab-pane label="考核指标" name="1"> + <el-table :data="tableData" style="width: 100%"> + <el-table-column align="center" type="index" label="序号" width="70" /> + <el-table-column align="center" prop="date" label="责任部门" /> + <el-table-column align="center" prop="name" label="考核指标" /> + <el-table-column align="center" prop="address" label="制定部门" /> + <el-table-column align="center" prop="address" label="制定日期" /> + <el-table-column align="center" label="检查值"> + <template #default> + <el-input v-model="form.name" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column align="center" prop="address" label="检查人" /> + <el-table-column align="center" prop="address" label="检查时间" /> + </el-table> + <div class="tiao"> + <div class="typeS">审批</div> + </div> + <el-row style="padding:20px 0"> + <el-col :span="6" style="text-align:right">一级审批:</el-col> + <el-col :span="18">同意</el-col> + </el-row> + <el-row style="padding:0 0 20px 0"> + <el-col :span="6"></el-col> + <el-col :span="18"><span class="logoColor">同意</span><span style="margin-right: 8px;">杜建喜</span><span>2021-05-24 04:47:42</span></el-col> + </el-row> + </el-tab-pane> + </el-tabs> +</template> +<script lang="ts"> +import { defineComponent,ref,reactive } from 'vue' + +export default defineComponent({ + setup() { + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const activeName = ref('1'); + return{ + form, + tableData, + activeName + } + }, +}) +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0 ; +} +</style> diff --git a/src/views/contingencyManagement/processForm/component/formInformationTops.vue b/src/views/contingencyManagement/processForm/component/formInformationTops.vue index e69de29..53eed6a 100644 --- a/src/views/contingencyManagement/processForm/component/formInformationTops.vue +++ b/src/views/contingencyManagement/processForm/component/formInformationTops.vue @@ -0,0 +1,312 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="12"> + <el-form-item label="预案名称"> + <el-input v-model="form.name" placeholder="请填写预案名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="适用部门"> + <el-tree-select + class="select" + placeholder="请选择" + v-model="value" + :data="data" + :render-after-expand="false" + show-checkbox + multiple + clearable + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预案类型"> + <el-select class="select" v-model="form.region" placeholder="请选择"> + <el-option label="综合应急预案" value="shanghai" /> + <el-option label="现场处置方案" value="beijing" /> + <el-option label="专项应急预案" value="shanghai" /> + <el-option label="其它预案" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="危险源关联"> + <el-select class="select" v-model="form.region" placeholder="请选择"> + <el-option label="是" value="shanghai" /> + <el-option label="否" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预案级别"> + <el-select class="select" v-model="form.region" placeholder="请选择"> + <el-option label="公司及" value="shanghai" /> + <el-option label="分厂级" value="beijing" /> + <el-option label="车间级" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="编写人"> + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="编写部门" placeholder="请选择"> + <el-tree-select + class="select" + v-model="value2" + :data="dataSelect" + :render-after-expand="false" + multiple + check-strictly + check-on-click-node + clearable + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="发布实施日期"> + <el-date-picker v-model="datetime" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急队伍" prop="telephone" @click="daiInpt" > + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="预案附件"> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + > + <el-button type="primary" + >点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 添加相关附件 + </div> + </template> + </el-upload> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="区域名称" prop="telephone"> + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="regionsDialog"/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <checkTemplate ref="ShowRef"/> + <userSelections ref="userRef"/> + <RegionsDialog ref="openRef"/> +</template> +<script lang="ts"> +import { + defineComponent, + ref, + reactive +} from 'vue'; +import { + Search +} from '@element-plus/icons-vue' +import UserSelections from "/@/components/userSelections/index.vue" +import CheckTemplate from "/@/components/checkTemplate/index.vue" +import RegionsDialog from "/@/components/regionsDialog/index.vue"; +export default defineComponent({ + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + }, + setup() { + const form = reactive({ + name: '', + value: '', + value2: '', + teamLeader: '', + + // data: '', + // dataSelect: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + // 可选择树形选择框 + const value = ref() + + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '生产运行部', + children: [ + { + value: '1-1-1', + label: '工艺二班', + }, + ], + }, + ], + } + ] + // 树形选择框 + const value2 = ref() + + const dataSelect = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '生产运行部', + children: [ + { + value: '1-1-1', + label: '工艺二班', + }, + ], + }, + ], + } + ] + // 应急队伍弹窗 + const ShowRef=ref() + const daiInpt=()=>{ + ShowRef.value.openDailog() + } + // 选择区域弹窗 + const openRef=ref() + const regionsDialog=()=>{ + openRef.value.openDailog() + } + // 打开编写人选择用户弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + // 日期选择 + const datetime = ref('') + return { + form, + value, + data, + value2, + dataSelect, + openUser, + userRef, + Search, + ShowRef, + daiInpt, + openRef, + datetime, + regionsDialog, + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box { + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao { + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0; + position: relative; +} +.typeS { + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor { + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns { + width: 100%; + padding: 20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); +} +.title2 { + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0; +} +.select{ + width: 100%; +} +.select ::v-deep .el-select{ + width: 100%; +} +</style> diff --git a/src/views/contingencyManagement/processForm/component/lowerPlate.vue b/src/views/contingencyManagement/processForm/component/lowerPlate.vue index e69de29..cbb82fb 100644 --- a/src/views/contingencyManagement/processForm/component/lowerPlate.vue +++ b/src/views/contingencyManagement/processForm/component/lowerPlate.vue @@ -0,0 +1,120 @@ +<template> + <div class="box"> + <el-form ref="formS" :model="form" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="15"> + <el-form-item label="流程标题"> + <el-input v-model="form.names" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label="下级审批日期"> + <el-date-picker v-model="form.date1" type="date" placeholder="下级审批日期" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.delivery" label="是否抄送" @change="typeChang"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.delivery"> + <el-col :span="15"> + <el-form-item label="抄送给" prop="resource"> + <el-input v-model="form.resource" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.type" label="指定下一步处理者(不设置就使用默认处理人)"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.type"> + <el-col :span="15"> + <el-form-item label="指定" prop="desc"> + <el-input v-model="form.desc" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + <DailogSearchUser ref="ShowUser"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue' +import { Search } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus' +export default defineComponent({ + components:{DailogSearchUser}, + setup() { + const formS=ref<FormInstance>() + let form = reactive({ + names: '', + region: '', + date1: '', + date2: '', + delivery: "", + type: "", + resource: '', + desc: '', + }); + const typeChang=()=>{ + console.log('tag',form) + } + const rules = reactive<FormRules>({ + resource: [ + { + type: 'array', + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ], + desc: [ + { + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ]}) + const ShowUser=ref() + const openDai =()=>{ + ShowUser.value.openDailog() + } + return { + form, + rules, + formS, + typeChang, + ShowUser, + openDai, + Search, + }; + }, +}); +</script> + +<style scoped> +.box { + margin: 30px 0 100px 0; + background-color: #fff; + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); + padding: 20px; +} +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/processForm/processForm.vue b/src/views/contingencyManagement/processForm/processForm.vue index e69de29..98218a0 100644 --- a/src/views/contingencyManagement/processForm/processForm.vue +++ b/src/views/contingencyManagement/processForm/processForm.vue @@ -0,0 +1,137 @@ +<template> + <div class="system-user-container"> + <h4 class="title">胡海涛2022-07-01 16:08:42发起了目标检查上报(检查)--检查</h4> + <div class="box"> + <el-menu + :default-active="activeIndex" + class="el-menu-demo" + background-color="#ebeef5" + text-color="#fff" + active-text-color="#fff" + mode="horizontal" + @select="handleSelect" + > + <el-menu-item index="1">表单信息</el-menu-item> + <el-menu-item index="2">流程图</el-menu-item> + </el-menu> + <div v-if="activeIndex == 1" class="navType"> + <formInformationTop v-if="false"></formInformationTop> + <formInformationTops></formInformationTops> + </div> + <div v-if="activeIndex == 2" class="navType" style="padding:20px 20px 0 20px"> + <div class="title2">流程图</div> + <div style="width:100%;height:400px"></div> + </div> + </div> + <lowerPlate></lowerPlate> + <div class="btns"> + <el-button type="primary">启动</el-button> + </div> + </div> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref,onMounted } from 'vue'; +import { useRouter } from 'vue-router'; +import formInformationTop from './component/formInformationTop.vue' +import formInformationTops from './component/formInformationTops.vue' +import lowerPlate from './component/lowerPlate.vue' +export default defineComponent({ + components:{lowerPlate,formInformationTop,formInformationTops}, + setup() { + const activeIndex = ref('1'); + const handleSelect = (key: string, keyPath: string[]) => { + // console.log(key, keyPath); + activeIndex.value = key; + }; + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + const router=useRouter() + const Type=onMounted(()=>{ + // console.log("xxxxxxx",router) + }) + + return { + activeIndex, + handleSelect, + form, + router, + Type + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; + padding: 15px; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} + +/*弹窗底部边框线*/ +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +/*弹窗顶部边框线*/ +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +</style> diff --git a/src/views/facilityManagement/EquipmentStatistics/index.vue b/src/views/facilityManagement/EquipmentStatistics/index.vue index e69de29..136eea1 100644 --- a/src/views/facilityManagement/EquipmentStatistics/index.vue +++ b/src/views/facilityManagement/EquipmentStatistics/index.vue @@ -0,0 +1,101 @@ +<template> + <div class="box"> + <div class="title">设备设施统计</div> + <div ref="main" style="width: 100%; height: 400px"></div> + </div> +</template> +<script lang="ts"> +import { defineComponent, onMounted, ref } from 'vue'; +import * as echarts from 'echarts'; +import { ElMessage } from 'element-plus'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +export default defineComponent({ + setup() { + const listApi = () => { + facilityManagementApi() + .getequipmentInfoStatistics() + .then((res) => { + if (res.data.code == 200) { + let arr = []; + arr = res.data.data; + let date = []; + for (let i = 0; i < arr.length; i++) { + if (arr[i].stopStatus == 1) { + date[0] = arr[i].count; + } else if (arr[i].stopStatus == 2) { + date[1] = arr[i].count; + }else if (arr[i].stopStatus == 3) { + date[2] = arr[i].count; + }else if (arr[i].stopStatus == 4) { + date[3] = arr[i].count; + }else if (arr[i].stopStatus == -1) { + date[4] = arr[i].count; + } + } + init(date); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + onMounted(() => { + listApi(); + }); + const main = ref(); + const init = (data: any) => { + var myChart = echarts.init(main.value); + var option = { + tooltip: {}, + grid: { + left: '3%', + right: '4%', + bottom: '5%', + containLabel: true, + }, + xAxis: { + type: 'category', + data: ['停用 ', '在用', '维修 ', '报废', '超时未保养'], + }, + yAxis: { + type: 'value', + name: '数量', + nameTextStyle: { + color: '#aaa', + nameLocation: 'start', + }, + }, + color: ['#6394f9'], + series: [ + { + data: data, + type: 'bar', + }, + ], + }; + + myChart.setOption(option); + }; + return { + init, + onMounted, + main, + listApi, + }; + }, +}); +</script> +<style scoped> +.box { + background-color: #fff; + box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%); +} +.title { + font-size: 16px; + border-bottom: 1px solid #eee; + padding: 20px; +} +</style> diff --git a/src/views/facilityManagement/InstrumentationInformation/index.vue b/src/views/facilityManagement/InstrumentationInformation/index.vue index e69de29..9d64291 100644 --- a/src/views/facilityManagement/InstrumentationInformation/index.vue +++ b/src/views/facilityManagement/InstrumentationInformation/index.vue @@ -0,0 +1,391 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.qName" placeholder="装置设施名称" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row> + <el-col :span="4"> + <el-input v-model="filterText" style="height: 30px" placeholder="请输入关键字" /> + <div class="tree"> + <!-- <el-tree ref="treeRef" class="filter-tree" :data="data" :props="props" :filter-node-method="filterNode" /> --> + <el-tree ref="treeRef" :data="data" :props="props" @node-click="handleNodeClick" :filter-node-method="filterNode" /> + </div> + </el-col> + <el-col :span="20"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen" + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" plain>删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="openUp"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <div style="padding-left: 10px"> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" @selection-change="handleSelectionChange"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClicks" style="margin: 0 5%"> + <el-tab-pane label="设备保养" name="first"> + <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" style="width: 100%"> + <el-table-column property="takecareMemo" align="center" label="保养情况" sortable /> + <el-table-column property="leadingPersonName" align="center" label="保养负责人" sortable /> + <el-table-column property="takecareDate" align="center" :formatter="timeDate" label="保养日期" sortable /> + <el-table-column property="leadingPersonDepartmentName" align="center" label="保养负责人单位" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备检查" name="second" + ><el-table ref="multipleTableRef" :data="scope.row.checkDetailList" style="width: 100%"> + <el-table-column property="leadingPersonName" align="center" label="检查人" sortable /> + <el-table-column property="createTime" align="center" :formatter="timeDate" label="检查日期" sortable /> + <el-table-column property="name" align="center" label="检查人部门" sortable /> + <el-table-column property="takecareMemo" align="center" label="检查结果" sortable /> + <el-table-column property="name" align="center" label="检查状态" sortable /> </el-table + ></el-tab-pane> + <el-tab-pane label="设备检测" name="third"> + <el-table ref="multipleTableRef" :data="scope.row.testDetailList" style="width: 100%"> + <el-table-column property="testPersonName" align="center" label="检测人" sortable /> + <el-table-column property="testDate" align="center" :formatter="timeDate" label="检测日期" sortable /> + <el-table-column property="testPersonDepartmentName" align="center" label="检测人单位" sortable /> + <el-table-column property="testMemo" align="center" label="检测内容" sortable /> + <el-table-column align="center" label="检测结果"> + <template #default="scope"> + <span v-if="scope.row.testResult == 1">成功</span> + <span v-if="scope.row.testResult == 2">失败</span> + </template> + </el-table-column> + <el-table-column property="testStatus" align="center" label="检测状态" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备维修" name="fourth"> + <el-table ref="multipleTableRef" :data="scope.row.repaireDetailList" style="width: 100%"> + <el-table-column property="exceptionInfo" align="center" label="设施异常项" sortable /> + <el-table-column align="center" label="维修状态"> + <template #default="scope"> + <span v-if="scope.row.repairStatus == 1">维修中</span> + <span v-if="scope.row.repairStatus == 2">已修好</span> + </template> + </el-table-column> + <el-table-column property="repairMemo" align="center" label="维修情况" sortable /> + <el-table-column property="repairPersonName" align="center" label="维修负责人" sortable /> + <el-table-column property="repairPersonDepartmentName" align="center" label="维修负责人单位" sortable /> + <el-table-column property="repairStartDate" align="center" :formatter="timeDate" label="维修开始日期" sortable /> + <el-table-column property="repairEndDate" align="center" :formatter="timeDate" label="维修结束日期" sortable /> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-table-column> + <el-table-column property="qName" label="装置设施名称" align="center" sortable /> + <el-table-column property="positionNum" align="center" label="装置设施位号" sortable /> + <el-table-column property="qUsage" align="center" label="装置设施用途" sortable /> + <el-table-column property="model" label="装置设施型号" align="center" sortable show-overflow-tooltip /> + <el-table-column property="equipmentTypeId" label="类型/类别外键" align="center" sortable show-overflow-tooltip /> + <el-table-column property="setPart" label="设施部位" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-col> + </el-row> + <!-- <updata ref="Show"></updata> --> + <Dailog ref="openAdd" @navAddorUpdata="onAddorUpdata"></Dailog> + </div> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, watch, onMounted } from 'vue'; +import { timeDate } from '/@/assets/index.ts'; +import updata from '/@/components/updata/updata.vue'; +import Dailog from '/@/components/equipmentDailog/Dailog.vue'; +import { ElTree, TabsPaneContext, ElMessage, ElMessageBox } from 'element-plus'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { EditPen, View, Plus, Delete, Download, Refresh, Upload } from '@element-plus/icons-vue'; +interface Tree { + label: string; + children?: Tree[]; +} +export default defineComponent({ + components: { updata, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////名称 + positionNum: '', ////位号 + equipmentTypeId: '', + infoType: 0, ////具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.positionNum = ''; + ruleForm.searchParams.equipmentTypeId = ''; + listApiTree() + listApi(); + }; + const listApi = () => { + facilityManagementApi() + .getequipmentInfoList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title, false, id, 0); + }; + // 删除 + const onDelete = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + const filterText = ref(''); + const treeRef = ref<InstanceType<typeof ElTree>>(); + // 树形 + const listApiTree = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const props = { + label: 'typeName', + children: 'childList', + value: 'id', + }; + watch(filterText, (val) => { + treeRef.value!.filter(val); + }); + + const filterNode = (value: string, data: Tree) => { + if (!value) return true; + return data.typeName.includes(value); + }; + const handleNodeClick = (data: Tree) => { + ruleForm.searchParams.positionNum = data.sortNum; + ruleForm.searchParams.equipmentTypeId = data.id; + listApi(); + }; + const data = ref([]); + onMounted(() => { + listApiTree(); + }); + const handleClicks = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + + const activeName = ref('first'); + // const Show=ref() + // const openUp=()=>{ + // Show.value.openDialog() + // } + return { + handleNodeClick, + ruleForm, + timeDate, + resetForm, + listApi, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + listApiTree, + handleClicks, + filterText, + treeRef, + props, + filterNode, + data, + openAdd, + openD, + activeName, + Plus, + EditPen, + Delete, + Download, + Refresh, + View, + Upload, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.tree { + height: 750px; + background-color: #fff; + overflow: hidden; + overflow-y: auto; +} +.btns { + padding: 10px 0px 10px 10px; + display: flex; + justify-content: space-between; + background-color: #fff; +} +</style> diff --git a/src/views/facilityManagement/ProductionEquipment/index.vue b/src/views/facilityManagement/ProductionEquipment/index.vue index e69de29..70edf54 100644 --- a/src/views/facilityManagement/ProductionEquipment/index.vue +++ b/src/views/facilityManagement/ProductionEquipment/index.vue @@ -0,0 +1,390 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.qName" placeholder="装置设施名称" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row> + <el-col :span="4"> + <el-input v-model="filterText" style="height: 30px" placeholder="请输入关键字" /> + <div class="tree"> + + <!-- <el-tree ref="treeRef" class="filter-tree" :data="data" :props="props" :filter-node-method="filterNode" /> --> + <el-tree ref="treeRef" :data="data" :props="props" @node-click="handleNodeClick" :filter-node-method="filterNode" /> + </div> + </el-col> + <el-col :span="20"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen" + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" plain>删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="openUp"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <div style="padding-left: 10px"> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClicks" style="margin: 0 5%"> + <el-tab-pane label="设备保养" name="first"> + <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" style="width: 100%"> + <el-table-column property="takecareMemo" align="center" label="保养情况" sortable /> + <el-table-column property="leadingPersonName" align="center" label="保养负责人" sortable /> + <el-table-column property="takecareDate" align="center" label="保养日期" sortable /> + <el-table-column property="leadingPersonDepartmentName" align="center" label="保养负责人单位" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备检查" name="second" + ><el-table ref="multipleTableRef" :data="scope.row.checkDetailList" style="width: 100%"> + <el-table-column property="leadingPersonName" align="center" label="检查人" sortable /> + <el-table-column property="createTime" align="center" label="检查日期" sortable /> + <el-table-column property="name" align="center" label="检查人部门" sortable /> + <el-table-column property="takecareMemo" align="center" label="检查结果" sortable /> + <el-table-column property="name" align="center" label="检查状态" sortable /> </el-table + ></el-tab-pane> + <el-tab-pane label="设备检测" name="third"> + <el-table ref="multipleTableRef" :data="scope.row.testDetailList" style="width: 100%"> + <el-table-column property="testPersonName" align="center" label="检测人" sortable /> + <el-table-column property="testDate" align="center" label="检测日期" sortable /> + <el-table-column property="testPersonDepartmentName" align="center" label="检测人单位" sortable /> + <el-table-column property="testMemo" align="center" label="检测内容" sortable /> + <el-table-column align="center" label="检测结果"> + <template #default="scope"> + <span v-if="scope.row.testResult == 1">成功</span> + <span v-if="scope.row.testResult == 2">失败</span> + </template> + </el-table-column> + <el-table-column property="testStatus" align="center" label="检测状态" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备维修" name="fourth"> + <el-table ref="multipleTableRef" :data="scope.row.repaireDetailList" style="width: 100%"> + <el-table-column property="exceptionInfo" align="center" label="设施异常项" sortable /> + <el-table-column align="center" label="维修状态"> + <template #default="scope"> + <span v-if="scope.row.repairStatus == 1">维修中</span> + <span v-if="scope.row.repairStatus == 2">已修好</span> + </template> + </el-table-column> + <el-table-column property="repairMemo" align="center" label="维修情况" sortable /> + <el-table-column property="repairPersonName" align="center" label="维修负责人" sortable /> + <el-table-column property="repairPersonDepartmentName" align="center" label="维修负责人单位" sortable /> + <el-table-column property="repairStartDate" align="center" label="维修开始日期" sortable /> + <el-table-column property="repairEndDate" align="center" label="维修结束日期" sortable /> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-table-column> + <el-table-column property="qName" label="装置设施名称" align="center" sortable /> + <el-table-column property="positionNum" align="center" label="装置设施位号" sortable /> + <el-table-column property="qUsage" align="center" label="装置设施用途" sortable /> + <el-table-column property="model" label="装置设施型号" align="center" sortable show-overflow-tooltip /> + <el-table-column property="equipmentTypeId" label="类型/类别外键" align="center" sortable show-overflow-tooltip /> + <el-table-column property="setPart" label="设施部位" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-col> + </el-row> + <!-- <updata ref="Show"></updata> --> + <Dailog ref="openAdd" @navAddorUpdata="onAddorUpdata"></Dailog> + </div> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, watch, onMounted } from 'vue'; +import updata from '/@/components/updata/updata.vue'; +import Dailog from '/@/components/equipmentDailog/Dailog.vue'; +import { ElTree, TabsPaneContext, ElMessage, ElMessageBox } from 'element-plus'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { EditPen, View, Plus, Delete, Download, Refresh, Upload } from '@element-plus/icons-vue'; +interface Tree { + label: string; + children?: Tree[]; +} +export default defineComponent({ + components: { updata, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////名称 + positionNum: '', ////位号 + equipmentTypeId:"", + infoType: 1, ////具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.positionNum = ''; + ruleForm.searchParams.equipmentTypeId = ''; + listApiTree() + listApi(); + }; + const listApi = () => { + facilityManagementApi() + .getequipmentInfoList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title,true,id,1); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + const filterText = ref(''); + const treeRef = ref<InstanceType<typeof ElTree>>(); + // 树形 + const listApiTree = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + data.value= res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const props = { + label: 'typeName', + children: 'childList', + value: 'id', + } + watch(filterText, (val) => { + treeRef.value!.filter(val); + }); + + const filterNode = (value: string, data: Tree) => { + if (!value) return true; + return data.typeName.includes(value); + }; + const handleNodeClick=(data: Tree)=>{ + ruleForm.searchParams.equipmentTypeId=data.id + ruleForm.searchParams.equipmentTypeId = data.id; + listApi(); + } + const data=ref([]) + onMounted(() => { + listApiTree(); + }); + const handleClicks = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + + const activeName = ref('first'); + // const Show=ref() + // const openUp=()=>{ + // Show.value.openDialog() + // } + return { + handleNodeClick, + ruleForm, + resetForm, + listApi, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + listApiTree, + handleClicks, + filterText, + treeRef, + props, + filterNode, + data, + openAdd, + openD, + activeName, + Plus, + EditPen, + Delete, + Download, + Refresh, + View, + Upload, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.tree { + height: 750px; + background-color: #fff; + overflow: hidden; + overflow-y: auto; +} +.btns { + padding: 10px 0px 10px 10px; + display: flex; + justify-content: space-between; + background-color: #fff; +} +</style> diff --git a/src/views/facilityManagement/deviceType/component/Dailog.vue b/src/views/facilityManagement/deviceType/component/Dailog.vue index e69de29..ce4d7af 100644 --- a/src/views/facilityManagement/deviceType/component/Dailog.vue +++ b/src/views/facilityManagement/deviceType/component/Dailog.vue @@ -0,0 +1,198 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" @close="resetForm(ruleFormRef)" :title="titles" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" ref="ruleFormRef" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="是否为设备内容" size="default" prop="isContent"> + <el-select v-model="form.isContent" placeholder="请选择" style="width: 100%"> + <el-option label="是" :value="1" /> + <el-option label="否" :value="2" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="父级编号" size="default" prop="parentId"> + <el-tree-select clearable check-strictly="true" v-model="form.parentId" :data="data" :props="propst" class="w100" placeholder="请选择" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="类别名称" size="default" prop="typeName"> + <el-input v-model="form.typeName" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="排列序列" size="default" prop="sortNum"> + <el-input v-model.number="form.sortNum" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)">关闭</el-button> + <el-button type="primary" @click="submitForm(ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import type { FormInstance, FormRules } from 'element-plus'; +import { FullScreen } from '@element-plus/icons-vue'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { ElMessage } from 'element-plus'; +import { type } from 'os'; +export default defineComponent({ + setup(prpos, { emit }) { + const dialogVisible = ref(false); + const form = ref({ + isContent: '', ////是否为设备内容 1:是 2:否 + typeName: '', ////类别名称 + parentId: '', ////父级ID,如果没有父级,为0 + isCheck: 0, ////是否检测 1:是 2:否 + isVisit: 0, ////是否巡检 1:是 2:否 + sortNum: '', //排列序列 + // id: '', //设备类型ID ,更新时必填 + }); + const titles = ref(); + const titleT = ref(); + const disabled = ref(false); + const openDailog = (title: string, id: number) => { + listApi(); + titleT.value = title; + dialogVisible.value = true; + titles.value = `${title}设备设施类型管理`; + if (title == '查看') { + disabled.value = true; + detail(id); + } else if (title == '修改') { + detail(id); + } else if (title == '添加') { + form.value.parentId = id; + } + }; + const detail = (id: number) => { + facilityManagementApi() + .getequipmentTypeMngDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + // 列表 + const listApi = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const data = ref([]); + const propst = { + label: 'typeName', + children: 'childList', + value: 'id', + }; + const ruleFormRef = ref<FormInstance>(); + const rules = reactive<FormRules>({ + isContent: [{ required: true, message: '是否为设备内容不能为空', trigger: 'change' }], + parentId: [], + typeName: [{ required: true, message: '类别名称不能为空', trigger: 'change' }], + sortNum: [ + { required: true, message: '排列序列不能为空', trigger: 'change' }, + { type: 'number', message: '请输入数字!', trigger: 'change' }, + ], + }); + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + if (titleT.value == '新建') { + delete form.value.id; + } + facilityManagementApi() + .getequipmentTypeMngAddOrUpdate(form.value) + .then((res) => { + if (res.data.code == 200) { + dialogVisible.value = false; + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('onAdd'); + formEl.resetFields(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + } else { + console.log('error submit!', fields); + } + }); + disabled.value=false + }; + const resetForm = (formEl: FormInstance | undefined) => { + if (!formEl) return; + formEl.resetFields(); + dialogVisible.value = false; + disabled.value=false + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + titleT, + detail, + rules, + ruleFormRef, + listApi, + propst, + submitForm, + resetForm, + data, + disabled, + dialogVisible, + form, + titles, + openDailog, + full, + toggleFullscreen, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> diff --git a/src/views/facilityManagement/deviceType/index.vue b/src/views/facilityManagement/deviceType/index.vue index e69de29..11958ec 100644 --- a/src/views/facilityManagement/deviceType/index.vue +++ b/src/views/facilityManagement/deviceType/index.vue @@ -0,0 +1,130 @@ +<template> + <div class="box"> + <el-button type="primary" :icon="Plus" @click="openD('新建', 0)" size="default">新建</el-button> + <el-table :data="tableData" style="width: 100%" row-key="id" :tree-props="propse"> + <el-table-column align="center" label="是否为设备内容"> + <template #default="scope"> + <span v-if="scope.row.isContent == 1">是</span> + <span v-if="scope.row.isContent == 2">否</span> + </template> + </el-table-column> + <el-table-column align="center" label="巡检"> + <template #default="scope"> + <span v-if="scope.row.isVisit == 0">-</span> + <span v-if="scope.row.isVisit == 1">是</span> + <span v-if="scope.row.isVisit == 2">否</span> + </template> + </el-table-column> + <el-table-column align="center" label="检测"> + <template #default="scope"> + <span v-if="scope.row.isCheck == 0">-</span> + <span v-if="scope.row.isCheck == 1">是</span> + <span v-if="scope.row.isCheck == 2">否</span> + </template> + </el-table-column> + <el-table-column align="center" prop="typeName" label="类别名称" /> + <el-table-column align="center" label="操作"> + <template #default="scope"> + <el-button type="primary" link :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button type="primary" link :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button type="primary" link :icon="Delete" @click="Deletes(scope.row.id)">删除</el-button> + <el-button type="primary" link :icon="CirclePlus" @click="openD('添加', scope.row.id)">添加下级设备设施类型管理</el-button> + </template> + </el-table-column> + </el-table> + <Dailog ref="Show" @onAdd="add"></Dailog> + </div> +</template> +<script lang="ts"> +import { defineComponent, onMounted, ref } from 'vue'; +import { Plus, View, EditPen, Delete, CirclePlus } from '@element-plus/icons-vue'; +import Dailog from './component/Dailog.vue'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { ElMessage,ElMessageBox } from 'element-plus'; +export default defineComponent({ + components: { Dailog }, + setup() { + // 列表 + const listApi = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + onMounted(() => { + listApi(); + }); + // 删除 + const Deletes = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentTypeMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + const add = () => { + listApi(); + }; + const tableData = ref(); + const propse = { + children: 'childList', + }; + const Show = ref(); + const openD = (title: string, id: number) => { + Show.value.openDailog(title, id); + }; + return { + propse, + add, + tableData, + Show, + Deletes, + openD, + listApi, + Plus, + View, + EditPen, + CirclePlus, + Delete, + }; + }, +}); +</script> +<style scoped> +.box { + padding: 20px; + background-color: #fff; +} +</style> diff --git a/src/views/facilityManagement/keyEquipment/index.vue b/src/views/facilityManagement/keyEquipment/index.vue index e69de29..36c634d 100644 --- a/src/views/facilityManagement/keyEquipment/index.vue +++ b/src/views/facilityManagement/keyEquipment/index.vue @@ -0,0 +1,449 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.name" placeholder="装置/部位名称"/> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row> + <el-col :span="4"> + <el-input v-model="filterText" style="height: 30px" placeholder="请输入关键字"/> + <div class="tree"> + <!-- <el-input v-model="filterText" style="height: 30px" placeholder="Filter keyword" />--> + <el-tree ref="treeRef" :data="data" :props="props" @node-click="handleNodeClick" + :filter-node-method="filterNode"/> + </div> + </el-col> + <el-col :span="20"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen" + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" + plain>删除 + </el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="openUp"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <div style="padding-left: 10px"> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" + style="width: 100%"> + <el-table-column type="selection" align="center" width="55"/> + <el-table-column type="expand"> + <template #default="scope"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick" + style="margin: 0 5%"> + <el-tab-pane label="设备保养" name="first"> + <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" + style="width: 100%"> + <el-table-column property="takecareMemo" align="center" label="保养情况" + sortable/> + <el-table-column property="leadingPersonName" align="center" label="保养负责人" + sortable/> + <el-table-column property="takecareDate" align="center" + :formatter="timeDate" label="保养日期" sortable/> + <el-table-column property="leadingPersonDepartmentName" align="center" + label="保养负责人单位" sortable/> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备检查" name="second" + > + <el-table ref="multipleTableRef" :data="scope.row.checkDetailList" + style="width: 100%"> + <el-table-column property="testPersonName" align="center" label="检查人" + sortable/> + <el-table-column property="testDate" align="center" :formatter="timeDate" + label="检查日期" sortable/> + <el-table-column property="testPersonDepartmentName" align="center" label="检查人部门" sortable/> + <el-table-column property="testResult" align="center" label="检查结果" + sortable> + <template #default="scope"> + <span v-if="scope.row.testResult == 1">成功</span> + <span v-if="scope.row.testResult == 2">失败</span> + </template> + </el-table-column> + <el-table-column property="testStatus" align="center" label="检查状态" sortable/> + </el-table + > + </el-tab-pane> + <el-tab-pane label="设备检测" name="third"> + <el-table ref="multipleTableRef" :data="scope.row.testDetailList" + style="width: 100%"> + <el-table-column property="repairPersonName" align="center" label="检测人" + sortable/> + <el-table-column property="repairStarDate" align="center" :formatter="timeDate" + label="检测日期" sortable/> + <el-table-column property="repairPersonDepartmentName" align="center" + label="检测人单位" sortable/> + <el-table-column property="testMemo" align="center" label="检测内容" sortable/> + <el-table-column property="testResult" align="center" label="检测结果" + sortable/> + <el-table-column property="testStatus" align="center" label="检测状态" + sortable/> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备维修" name="fourth"> + <el-table ref="multipleTableRef" :data="scope.row.repaireDetailList" + style="width: 100%"> + <el-table-column property="exceptionInfo" align="center" label="设施异常项" + sortable/> + <el-table-column property="repairStatus" align="center" label="维修状态" + sortable> + <template #default="scope"> + <span v-if="scope.row.repairStatus == 1">维修中</span> + <span v-if="scope.row.repairStatus == 2">已维修</span> + </template> + + </el-table-column> + <el-table-column property="repairMemo" align="center" label="维修情况" + sortable/> + <el-table-column property="repairPersonName" align="center" label="维修负责人" + sortable/> + <el-table-column property="repairPersonDepartmentName" align="center" + label="维修负责人单位" sortable/> + <el-table-column property="repairStartDate" align="center" + :formatter="timeDate" label="维修开始日期" sortable/> + <el-table-column property="repairEndDate" align="center" + :formatter="timeDate" label="维修结束日期" sortable/> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-table-column> + <el-table-column property="equipmentTypeName" align="center" label="类型/类别外键" sortable/> + <el-table-column property="name" align="center" label="装置/部位名称" sortable/> + <el-table-column property="departmentName" label="所属部门" align="center" sortable + show-overflow-tooltip/> + <el-table-column property="position" label="具体位置" align="center" sortable + show-overflow-tooltip/> + <el-table-column property="leadingPersonName" label="负责人姓名" align="center" sortable + show-overflow-tooltip/> + <el-table-column property="partType" label="装置部位分类" align="center" sortable + show-overflow-tooltip> + <template #default="scope"> + <span v-if="scope.row.partType == 1">关键装置</span> + <span v-if="scope.row.partType == 2">重点部位</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" + @click="openD('查看', scope.row.id)">查看 + </el-button> + <el-button link type="primary" size="default" :icon="EditPen" + @click="openD('修改', scope.row.id)">修改 + </el-button> + <el-button link type="primary" size="default" :icon="Delete" + @click="onDelete(scope.row.id)">删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-col> + </el-row> + <!-- <updata ref="Show"></updata>--> + <DailogS ref="ShowD" @navAddorUpdata="onAddorUpdata"></DailogS> + </div> +</template> +<script lang="ts"> + import {defineComponent, ref, reactive, watch, onMounted} from 'vue'; + // import updata from '/@/components/updata/updata.vue' + import DailogS from '/@/components/equipmentDailog/DailogS.vue'; + import {ElTree, TabsPaneContext, ElMessage, ElMessageBox} from 'element-plus'; + import {EditPen, Plus, Delete, Download, Refresh, Upload, View} from '@element-plus/icons-vue'; + import {facilityManagementApi} from '/@/api/facilityManagement'; + import {timeDate} from '/@/assets/index.ts' + + interface Tree { + label: string; + children?: Tree[]; + } + + export default defineComponent({ + components: { + // updata, + DailogS, + }, + setup() { + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + // equipmentTypeId: '', ////类型/类别外键 + name: '', ////装置/部位名称 + // departmentId: '',////所属部门 + // position: '', ////具体位置 + // leadingPersonName: '', ////负责人姓名 + // connectPersonId: '',////装置部位分类 + // infoTpe: 0, ////具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施 3:重点监管装置/设备 + equipmentTypeId: '' + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.equipmentTypeId = ''; + listApi(); + }; + const listApi = () => { + // delete ruleForm.qName + facilityManagementApi() + .getkeypointEquipmentInfoAddOrList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const filterText = ref(''); + const treeRef = ref<InstanceType<typeof ElTree>>(); + // 树形 + const listApiTree = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + console.log(res.data.data); + data.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const props = { + label: 'typeName', + children: 'childList', + value: 'id', + } + watch(filterText, (val) => { + treeRef.value!.filter(val); + }); + const filterNode = (value: string, data: Tree) => { + if (!value) return true; + return data.typeName.includes(value); + }; + const handleNodeClick = (data: Tree) => { + console.log(data) + ruleForm.searchParams.equipmentTypeId = data.id; + + listApi(); + }; + const data = ref([]); + onMounted(() => { + listApiTree(); + }); + // 删除 + const onDelete = (id: number) => { + let arr = [] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getkeypointEquipmentInfoDetele(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + // const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + // warning.value = false; + danger.value = false; + } else if (val.length == 0) { + // warning.value = true; + danger.value = true; + } else { + // warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getkeypointEquipmentInfoDetele(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + + const activeName = ref('first'); + + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + // const Show=ref() + // const openUp=()=>{ + // Show.value.openDialog() + // } + // 新增弹窗 + const ShowD = ref(); + const openD = (title: String, id: number) => { + ShowD.value.openDailog(title, false, id, 2); + }; + return { + activeName, + handleClick, + ruleForm, + filterText, + treeRef, + props, + filterNode, + data, + tableData, + // Show, + // openUp, + ShowD, + danger, + openD, + // openEdit, + Plus, + EditPen, + listApiTree, + Delete, + View, + Download, + Refresh, + Upload, + resetForm, + listApi, + handleCurrentChange, + handleSizeChange, + onAddorUpdata, + total, + currentPage4, + pageSize4, + onDelete, + // warning, + handleSelectionChange, + onDeleteAll, + handleNodeClick, + timeDate, + deletAll + }; + }, + }); +</script> +<style scoped> + .topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; + } + + .tree { + height: 750px; + background-color: #fff; + overflow: hidden; + overflow-y: auto; + } + + .btns { + padding: 10px 0px 10px 10px; + display: flex; + justify-content: space-between; + background-color: #fff; + } +</style> diff --git a/src/views/facilityManagement/safetyEquipment/index.vue b/src/views/facilityManagement/safetyEquipment/index.vue index e69de29..d7f3ac5 100644 --- a/src/views/facilityManagement/safetyEquipment/index.vue +++ b/src/views/facilityManagement/safetyEquipment/index.vue @@ -0,0 +1,391 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.qName" placeholder="装置设施名称" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row> + <el-col :span="4"> + <el-input v-model="filterText" style="height: 30px" placeholder="请输入关键字" /> + <div class="tree"> + <!-- <el-tree ref="treeRef" class="filter-tree" :data="data" :props="props" :filter-node-method="filterNode" /> --> + <el-tree ref="treeRef" :data="data" :props="props" @node-click="handleNodeClick" :filter-node-method="filterNode" /> + </div> + </el-col> + <el-col :span="20"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen" + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" plain>删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="openUp"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <div style="padding-left: 10px"> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClicks" style="margin: 0 5%"> + <el-tab-pane label="设备保养" name="first"> + <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" style="width: 100%"> + <el-table-column property="takecareMemo" align="center" label="保养情况" sortable /> + <el-table-column property="leadingPersonName" align="center" label="保养负责人" sortable /> + <el-table-column property="takecareDate" align="center" :formatter="timeDate" label="保养日期" sortable /> + <el-table-column property="leadingPersonDepartmentName" align="center" label="保养负责人单位" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备检查" name="second" + ><el-table ref="multipleTableRef" :data="scope.row.checkDetailList" style="width: 100%"> + <el-table-column property="leadingPersonName" align="center" label="检查人" sortable /> + <el-table-column property="createTime" align="center" :formatter="timeDate" label="检查日期" sortable /> + <el-table-column property="name" align="center" label="检查人部门" sortable /> + <el-table-column property="takecareMemo" align="center" label="检查结果" sortable /> + <el-table-column property="name" align="center" label="检查状态" sortable /> </el-table + ></el-tab-pane> + <el-tab-pane label="设备检测" name="third"> + <el-table ref="multipleTableRef" :data="scope.row.testDetailList" style="width: 100%"> + <el-table-column property="testPersonName" align="center" label="检测人" sortable /> + <el-table-column property="testDate" align="center" :formatter="timeDate" label="检测日期" sortable /> + <el-table-column property="testPersonDepartmentName" align="center" label="检测人单位" sortable /> + <el-table-column property="testMemo" align="center" label="检测内容" sortable /> + <el-table-column align="center" label="检测结果"> + <template #default="scope"> + <span v-if="scope.row.testResult == 1">成功</span> + <span v-if="scope.row.testResult == 2">失败</span> + </template> + </el-table-column> + <el-table-column property="testStatus" align="center" label="检测状态" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备维修" name="fourth"> + <el-table ref="multipleTableRef" :data="scope.row.repaireDetailList" style="width: 100%"> + <el-table-column property="exceptionInfo" align="center" label="设施异常项" sortable /> + <el-table-column align="center" label="维修状态"> + <template #default="scope"> + <span v-if="scope.row.repairStatus == 1">维修中</span> + <span v-if="scope.row.repairStatus == 2">已修好</span> + </template> + </el-table-column> + <el-table-column property="repairMemo" align="center" label="维修情况" sortable /> + <el-table-column property="repairPersonName" align="center" label="维修负责人" sortable /> + <el-table-column property="repairPersonDepartmentName" align="center" label="维修负责人单位" sortable /> + <el-table-column property="repairStartDate" align="center" :formatter="timeDate" label="维修开始日期" sortable /> + <el-table-column property="repairEndDate" align="center" :formatter="timeDate" label="维修结束日期" sortable /> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-table-column> + <el-table-column property="qName" label="装置设施名称" align="center" sortable /> + <el-table-column property="positionNum" align="center" label="装置设施位号" sortable /> + <el-table-column property="qUsage" align="center" label="装置设施用途" sortable /> + <el-table-column property="model" label="装置设施型号" align="center" sortable show-overflow-tooltip /> + <el-table-column property="equipmentTypeId" label="类型/类别外键" align="center" sortable show-overflow-tooltip /> + <el-table-column property="setPart" label="设施部位" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-col> + </el-row> + <!-- <updata ref="Show"></updata> --> + <Dailog ref="openAdd" @navAddorUpdata="onAddorUpdata"></Dailog> + </div> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, watch, onMounted } from 'vue'; +import updata from '/@/components/updata/updata.vue'; +import Dailog from '/@/components/equipmentDailog/Dailog.vue'; +import { ElTree, TabsPaneContext, ElMessage, ElMessageBox } from 'element-plus'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { timeDate } from '/@/assets/index.ts'; +import { EditPen, View, Plus, Delete, Download, Refresh, Upload } from '@element-plus/icons-vue'; +interface Tree { + label: string; + children?: Tree[]; +} +export default defineComponent({ + components: { updata, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////名称 + positionNum: '', ////位号 + equipmentTypeId: '', + infoType: 2, ////具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.positionNum = ''; + ruleForm.searchParams.equipmentTypeId = ''; + listApiTree() + listApi(); + }; + const listApi = () => { + facilityManagementApi() + .getequipmentInfoList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title, false, id, 2); + }; + // 删除 + const onDelete = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + const filterText = ref(''); + const treeRef = ref<InstanceType<typeof ElTree>>(); + // 树形 + const listApiTree = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const props = { + label: 'typeName', + children: 'childList', + value: 'id', + }; + watch(filterText, (val) => { + treeRef.value!.filter(val); + }); + + const filterNode = (value: string, data: Tree) => { + if (!value) return true; + return data.typeName.includes(value); + }; + const handleNodeClick = (data: Tree) => { + ruleForm.searchParams.equipmentTypeId = data.id; + ruleForm.searchParams.equipmentTypeId = data.id; + listApi(); + }; + const data = ref([]); + onMounted(() => { + listApiTree(); + }); + const handleClicks = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + + const activeName = ref('first'); + // const Show=ref() + // const openUp=()=>{ + // Show.value.openDialog() + // } + return { + handleNodeClick, + ruleForm, + resetForm, + listApi, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + listApiTree, + handleClicks, + filterText, + treeRef, + props, + filterNode, + data, + openAdd, + openD, + activeName, + Plus, + EditPen, + Delete, + Download, + Refresh, + View, + Upload, + timeDate, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.tree { + height: 750px; + background-color: #fff; + overflow: hidden; + overflow-y: auto; +} +.btns { + padding: 10px 0px 10px 10px; + display: flex; + justify-content: space-between; + background-color: #fff; +} +</style> diff --git a/src/views/goalManagement/Goalsummary/index.vue b/src/views/goalManagement/Goalsummary/index.vue index e69de29..a345459 100644 --- a/src/views/goalManagement/Goalsummary/index.vue +++ b/src/views/goalManagement/Goalsummary/index.vue @@ -0,0 +1,227 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.year" placeholder="年度" /> + </el-form-item> + </el-col> + <el-col :span="4" > + <el-form-item size="default"> + <el-tree-select v-model="ruleForm.searchParams.departmentId" :data="data" class="w100" placeholder="请选择" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <p>汇总日期:2022-07-04 23:00:07</p> + <div> + <el-button type="primary" size="default" :icon="Download" @click="exportExcel('tab1', '会员明细.xlsx')">导出</el-button> + </div> + </div> + <el-table :data="tableData" style="width: 100%" id="tab1"> + <el-table-column label="责任部门" align="center"> + <template #default="scope">{{ scope.row.departmentId }}</template> + </el-table-column> + <el-table-column property="targetValue" align="center" label="安全目标指标" /> + <el-table-column property="examineValue" label="考核指标" align="center" show-overflow-tooltip /> + <el-table-column property="yiYue" label="1月" align="center" show-overflow-tooltip /> + <el-table-column property="february" label="2月" align="center" show-overflow-tooltip /> + <el-table-column property="erYue" label="3月" align="center" show-overflow-tooltip /> + <el-table-column property="sanYue" label="4月" align="center" show-overflow-tooltip /> + <el-table-column property="siYue" label="5月" align="center" show-overflow-tooltip /> + <el-table-column property="wuYue" label="6月" align="center" show-overflow-tooltip /> + <el-table-column property="liuYue" label="7月" align="center" show-overflow-tooltip /> + <el-table-column property="qiYue" label="8月" align="center" show-overflow-tooltip /> + <el-table-column property="baYue" label="9月" align="center" show-overflow-tooltip /> + <el-table-column property="jiuYue" label="10月" align="center" show-overflow-tooltip /> + <el-table-column property="shiYue" label="11月" align="center" show-overflow-tooltip /> + <el-table-column property="shiyiYue" label="12月" align="center" show-overflow-tooltip /> + <el-table-column label="考核结果" align="center"> + <template #default="scope">{{ scope.row.examineResult }}</template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </div> +</template> +<script lang="ts"> +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; + +import * as XLSX from 'xlsx'; + +export default defineComponent({ + components: { ElButton, ElInput }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + year: '', //年度 + departmentId: '', //责任部门 + }, + }); + // 下方导航与表格 + const tableData = ref([]); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const resetForm = () => { + ruleForm.searchParams.year = ''; + ruleForm.searchParams.departmentId = ''; + }; + const listApi = () => { + goalManagementApi() + .gettargetDutySummaryList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); + + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '11', + label: '经营班子', + children: [], + }, + ], + }, + { + value: '2', + label: '生产运行部', + children: [ + { + value: '21', + label: '灌装一班', + children: [], + }, + { + value: '22', + label: '工艺四班', + children: [], + }, + ], + }, + { + value: '3', + label: '设备部', + children: [ + { + value: '31', + label: '仪表班', + children: [], + }, + { + value: '32', + label: '机修班', + children: [], + }, + ], + }, + ]; + + const exportExcel = (id:string,name:string) => { + let workbook = XLSX.utils.table_to_book(document.getElementById(id)); //需要在table上定义一个id + try { + XLSX.writeFile(workbook, name); + console.log('导出成功!'); + } catch (e) { + console.log('导出失败!'); + } + } + return { + ruleForm, + tableData, + currentPage4, + pageSize4, + total, + data, + resetForm, + listApi, + handleSizeChange, + handleCurrentChange, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + exportExcel + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 10px 0px 10px 0px; + display: flex; + justify-content: left; +} +.btns p { + font-size: 18px; + line-height: 40px; + margin-right: 20px; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue b/src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue index e69de29..c0a5906 100644 --- a/src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue +++ b/src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue @@ -0,0 +1,204 @@ +<template> + <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" :title="titles" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" label-width="120px"> + <el-row> + <el-col :span="24"> + <el-form-item label="员工姓名" size="default"> + <el-input v-model="form.personName" placeholder="请选择"> + <template #append> <el-button :icon="Search" @click="daiInpts(0)" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="奖惩名称" size="default"> + <el-input v-model="form.rewardPunishmentStandardName" placeholder="请选择"> + <template #append> <el-button :icon="Search" @click="daiInpt" /> </template + ></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="奖惩类型" size="default"> + <el-select v-model="form.standardType" disabled size="default" style="width: 100%" placeholder="请选择"> + <el-option label="奖励" :value="1" /> + <el-option label="惩罚" :value="2" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="奖惩内容" size="default"> + <el-input disabled v-model="form.content" placeholder="请填写奖惩内容" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="依据" size="default"> + <el-input disabled v-model="form.reason" placeholder="请填写奖惩依据" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="备注信息"> + <el-input v-model="form.memo" type="textarea" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default" :disabled="disabled">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUser ref="Show" @SearchUser="UserId"></DailogSearchUser> + <DailogSearch ref="Shows" @backNum="numberId"></DailogSearch> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearch from './DailogSearch.vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus'; +export default defineComponent({ + components: { DailogSearch, DailogSearchUser }, + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const form = ref({ + rewardPunishmentStandardId: '', //奖惩标准/外键 + rewardPunishmentStandardName: '', + memo: '', ////备注信息 + personId: '', ////员工(多个用逗号隔开) + personName: '', + }); + const titles = ref(); + const disabled = ref(false); + // 打开弹窗 + const openDailog = (title: string, value: any, data: any) => { + dialogVisible.value = true; + titles.value = `${title}奖惩标准设定`; + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') + goalManagementApi() + .getrewardPunishmentDetail(data.id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + form.value.standardType = data.standardType; + form.value.content = data.content; + form.value.reason = data.reason; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 提交 + const submitForm = () => { + dialogVisible.value = false; + delete form.value.standardType; + delete form.value.content; + delete form.value.reason; + delete form.value.rewardPunishmentStandardName + goalManagementApi() + .getrewardPunishmentAddOrUpdate(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('navAddorUpdata'); + } else { + ElMessage.error(res.data.msg); + } + }); + form.value = { + rewardPunishmentStandardId: '', //奖惩标准/外键 + rewardPunishmentStandardName: '', + memo: '', ////备注信息 + personId: '', ////员工(多个用逗号隔开) + personName: '', + }; + }; + // 取消 + const resetForm = () => { + dialogVisible.value = false; + form.value = { + rewardPunishmentStandardId: '', //奖惩标准/外键 + rewardPunishmentStandardName: '', + memo: '', ////备注信息 + personId: '', ////员工(多个用逗号隔开) + personName: '', + }; + }; + + // 安全目标指标弹窗 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(); + }; + const Show = ref(); + const daiInpts = (type: any) => { + Show.value.openDailog(type); + }; + const numberId = (val: any) => { + console.log(val); + form.value.rewardPunishmentStandardId = val.id; + form.value.rewardPunishmentStandardName = val.qname; + form.value.standardType = val.standardType; + form.value.content = val.content; + form.value.reason = val.reason; + }; + const UserId = (val: any) => { + let arr = []; + let arrId = []; + for (let i = 0; i < val.length; i++) { + arr.push(val[i].realName); + arrId.push(val[i].uid); + } + form.value.personName = arr.toString(); + form.value.personId = arrId.toString(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + UserId, + form, + titles, + disabled, + openDailog, + submitForm, + numberId, + resetForm, + Shows, + daiInpt, + Show, + daiInpts, + full, + toggleFullscreen, + Search, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue b/src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue index e69de29..aabfa03 100644 --- a/src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue +++ b/src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue @@ -0,0 +1,204 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" title="奖惩类型" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="17"> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon> + <el-row> + <el-col :span="12"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.standardType" placeholder="奖惩类型" /> + </el-form-item> + </el-col> + <!-- <el-col :span="6" :offset="1"> + <el-form-item> + <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" /> + </el-form-item> + </el-col> --> + <el-col :span="11" :offset="1"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-button size="default" :icon="Delete" @click="clear">清除选择</el-button> + <el-table :data="tableData" style="width: 100%; margin-top: 20px"> + <el-table-column align="center"> + <template #default="scope"> + <el-radio-group v-model="radio1"> + <el-radio :label="scope.row.id" @click="radio(scope.row)" size="large">{{ null }}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column align="center" prop="qname" label="奖惩名称" width="180" /> + <el-table-column align="center" label="奖惩类型" width="180"> + <template #default="scope"> + <span v-if="scope.row.standardType == 1">奖励</span> + <span v-if="scope.row.standardType == 2">惩罚</span> + <span></span> + </template> + </el-table-column> + <el-table-column align="center" prop="content" label="奖惩内容" /> + </el-table> + <el-pagination + style="padding: 20px 0; border-bottom: 1px solid #dedede" + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </el-col> + <el-col :span="7"> + <div v-if="dynamicTags[0] == '' ? false : true"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag.qname }} + </el-tag> + </div> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref, onMounted } from 'vue'; +import { Delete, FullScreen } from '@element-plus/icons-vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + setup(props, { emit }) { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + standardType: '', ////奖惩类型 1:奖励 2:惩罚 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.standardType = ''; + listApi(); + }; + const listApi = () => { + goalManagementApi() + .getrewardPunishmentStandardList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + const handleClick = (val: any) => { + let targetType = JSON.parse(JSON.stringify(val)); + ruleForm.searchParams.standardType = targetType.paneName; + listApi(); + }; + onMounted(() => {}); + // const onAddorUpdata = () => { + // listApi(); + // }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 打开弹窗 + const dialogVisible = ref(false); + const openDailog = () => { + dialogVisible.value = true; + listApi(); + }; + // 右方点击添加后显示标签 + const dynamicTags = ref(['']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value = ''; + }; + const radio1 = ref(''); + const radio = (event: any) => { + dynamicTags.value[0] = event; + }; + const clear = () => { + dynamicTags.value = ['']; + radio1.value = ''; + }; + const submitForm = () => { + let obj = JSON.parse(JSON.stringify(dynamicTags.value)); + emit('backNum', obj[0]); + dialogVisible.value = false; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + submitForm, + radio, + radio1, + clear, + dialogVisible, + openDailog, + ruleForm, + resetForm, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + dynamicTags, + listApi, + handleClick, + handleClose, + Delete, + full, + toggleFullscreen, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> diff --git a/src/views/goalManagement/IncentiveRecording/index.vue b/src/views/goalManagement/IncentiveRecording/index.vue index e69de29..829190a 100644 --- a/src/views/goalManagement/IncentiveRecording/index.vue +++ b/src/views/goalManagement/IncentiveRecording/index.vue @@ -0,0 +1,302 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="personName" placeholder="请选择被奖惩者"> + <template #append> + <el-button :icon="Search" @click="openSearch" /> + </template> + </el-input> + </el-form-item> + </el-col> + <!-- <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" /> + </el-form-item> + </el-col> --> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen" + @click="openD('修改', editRow)">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" plain @click="onDeleteAll">删除 </el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" @selection-change="handleSelectionChange"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column property="createTime" align="center" label="奖惩日期" :formatter="timeDate" sortable /> + <el-table-column label="奖惩类型" align="center" sortable> + <template #default="scope"> + <span v-if="scope.row.standardType == 1">奖励</span> + <span v-if="scope.row.standardType == 2">惩罚</span> + </template> + </el-table-column> + <el-table-column property="personName" align="center" label="被奖惩者" sortable /> + <el-table-column property="content" label="奖惩内容" align="center" sortable show-overflow-tooltip /> + <el-table-column property="reason" label="奖惩依据" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row)">查看 </el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除 </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <DailogAdd ref="openAdd" @navAddorUpdata="onAddorUpdata"></DailogAdd> + <DailogSearchUser ref="openUser" @SearchUser="userId"></DailogSearchUser> + </div> + </div> +</template> +<script lang="ts"> +import DailogAdd from './component/DailogAdd.vue'; +import {timeDate} from '/@/assets/index.ts' +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen, Search } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { ElButton, ElInput, DailogAdd, DailogSearchUser }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + personId: '', ////员工 + }, + }); + // 重置 + const personName=ref() + const resetForm = () => { + ruleForm.searchParams.personId = ''; + personName.value = ''; + listApi(); + }; + const listApi = () => { + goalManagementApi() + .getrewardPunishmentList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + const handleClick = (val: any) => { + let targetType = JSON.parse(JSON.stringify(val)); + ruleForm.searchParams.personId = targetType.paneName; + listApi(); + }; + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title, ruleForm.searchParams.personId, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getrewardPunishmentDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const editRow = ref() + const handleSelectionChange = (val: any) => { + editRow.value = val[0] + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getrewardPunishmentDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + const openUser = ref(); + const openSearch = () => { + openUser.value.openDailog(); + }; + const userId = (val: any) => { + ruleForm.searchParams.personId = val.uid; + personName.value = val.realName; + }; + return { + timeDate, + personName, + ruleForm, + userId, + resetForm, + listApi, + handleClick, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + openD, + onDelete, + openAdd, + warning, + danger, + deletAll, + openSearch, + handleSelectionChange, + onDeleteAll, + openUser, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + Search, + editRow + }; + }, +}); +</script> +<style scoped> +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} + +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} + +.btns { + padding: 10px 0px 10px 0px; + display: flex; + justify-content: space-between; +} + +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/Incentivestandard/component/DailogAdd.vue b/src/views/goalManagement/Incentivestandard/component/DailogAdd.vue index e69de29..e910cb5 100644 --- a/src/views/goalManagement/Incentivestandard/component/DailogAdd.vue +++ b/src/views/goalManagement/Incentivestandard/component/DailogAdd.vue @@ -0,0 +1,147 @@ +<template> + <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" :title="titles" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="奖惩类型" size="default"> + <el-select v-model="form.standardType" style="width: 100%" placeholder="请选择"> + <el-option label="奖励" :value="1" /> + <el-option label="惩罚" :value="2" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="奖惩内容" size="default"> + <el-input v-model="form.content" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="奖惩名称" size="default"> + <el-input v-model="form.qName" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="依据" size="default"> + <el-input v-model="form.reason" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="备注信息"> + <el-input v-model="form.memo" type="textarea" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default" :disabled="disabled">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus'; +export default defineComponent({ + setup(props, { emit }) { + let Shows = ref(false); + const dialogVisible = ref<boolean>(false); + const form = ref({ + qName: "", ////奖惩名称 + reason: "", ////依据 + memo: "", ////备注信息 + content: "", ////奖惩内容 + standardType: null ////奖惩类型 1:奖励 2:惩罚 + }); + const titles = ref(); + const disabled = ref(false); + // 打开弹窗 + const openDailog = (title: string, value: any, id: number) => { + dialogVisible.value = true; + titles.value = `${title}奖惩标准设定`; + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') + goalManagementApi() + .getrewardPunishmentStandardDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 提交 + const submitForm = () => { + dialogVisible.value = false; + goalManagementApi() + .getrewardPunishmentStandardaddOrUpdate(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('navAddorUpdata'); + } else { + ElMessage.error(res.data.msg); + } + }); + form.value = { + qName: "", ////奖惩名称 + reason: "", ////依据 + memo: "", ////备注信息 + content: "", ////奖惩内容 + standardType: null, ////奖惩类型 1:奖励 2:惩罚 + } + }; + // 取消 + const resetForm = () => { + dialogVisible.value = false; + form.value = { + qName: "", ////奖惩名称 + reason: "", ////依据 + memo: "", ////备注信息 + content: "", ////奖惩内容 + standardType: null, ////奖惩类型 1:奖励 2:惩罚 + }; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + + return { + form, + titles, + dialogVisible, + openDailog, + disabled, + Search, + submitForm, + resetForm, + full, + toggleFullscreen, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/Incentivestandard/index.vue b/src/views/goalManagement/Incentivestandard/index.vue index e69de29..c0aadc8 100644 --- a/src/views/goalManagement/Incentivestandard/index.vue +++ b/src/views/goalManagement/Incentivestandard/index.vue @@ -0,0 +1,283 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-select v-model="ruleForm.searchParams.standardType" size="default" style="width: 100%" placeholder="请选择"> + <el-option label="奖励" value="1" /> + <el-option label="惩罚" value="2" /> + </el-select> + </el-form-item> + </el-col> + <!-- <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" /> + </el-form-item> + </el-col> --> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')" >新建</el-button> + <el-button size="default" type="warning" :disabled="warning" plain :icon="EditPen" + @click="openD('修改', deletAll[0])">修改 </el-button> + <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="handleSelectionChange">删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="upButton"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column property="qname" align="center" label="奖惩名称" sortable /> + <el-table-column property="name" align="center" label="奖惩类型" sortable> + <template #default="scope"> + <span v-if="scope.row.standardType == 1">奖励</span> + <span v-if="scope.row.standardType == 2">惩罚</span> + </template> + </el-table-column> + <el-table-column property="content" label="奖惩内容" align="center" sortable show-overflow-tooltip /> + <el-table-column property="reason" label="依据" align="center" sortable show-overflow-tooltip /> + <el-table-column property="memo" label="备注信息" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看 </el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除 </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <DailogAdd ref="openAdd" @navAddorUpdata="onAddorUpdata"></DailogAdd> + <!-- <upData ref="upShow"></upData> --> + </div> + </div> +</template> +<script lang="ts"> +import DailogAdd from './component/DailogAdd.vue'; +import upData from '../../../components/updata/updata.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { ElButton, ElInput, upData, DailogAdd }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + standardType: '', ////奖惩类型 1:奖励 2:惩罚 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.standardType = ''; + listApi(); + }; + const listApi = () => { + goalManagementApi() + .getrewardPunishmentStandardList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + const handleClick = (val: any) => { + let targetType = JSON.parse(JSON.stringify(val)); + ruleForm.searchParams.standardType = targetType.paneName; + listApi(); + }; + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title, ruleForm.searchParams.standardType, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getrewardPunishmentStandardDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getrewardPunishmentStandardDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + return { + ruleForm, + resetForm, + listApi, + handleClick, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + openAdd, + openD, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} + +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} + +.btns { + padding: 10px 0px 10px 0px; + display: flex; + justify-content: space-between; +} + +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/TargetBook/component/DailogAdd.vue b/src/views/goalManagement/TargetBook/component/DailogAdd.vue index e69de29..fa0bc2a 100644 --- a/src/views/goalManagement/TargetBook/component/DailogAdd.vue +++ b/src/views/goalManagement/TargetBook/component/DailogAdd.vue @@ -0,0 +1,246 @@ +<template> + <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" :title="titles" width="50%" draggable @close="resetForm"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" label-width="120px"> + <el-row> + <el-col :span="24"> + <el-form-item label="岗位" size="default"> + <el-input v-model="form.jobName" placeholder="请选择"> + <template #append> <el-button :icon="Search" @click="daiInpt" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="责任书签订日期" size="default"> + <el-date-picker v-model="form.signDate" style="width:100%" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择日期时间" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="备注信息"> + <el-input v-model="form.memo" type="textarea" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="责任书附件"> + <uploaderFile :fileList="fileList" :systemName="'GOAL_MANAGE'" :disabled="disabled" + @successUploader="successUploader" @deleteFile="deleteFile"></uploaderFile> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearch ref="Shows" @backNum="IdNumber"></DailogSearch> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearch from './DailogSearch.vue'; +import { ElMessage, ElMessageBox } from 'element-plus'; +import type { UploadProps, UploadUserFile } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; +import uploaderFile from '/@/components/uploaderFile/index.vue'; +export default defineComponent({ + components: { DailogSearch,uploaderFile }, + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const form = ref({ + indexNum: '', //目标指标编号 + memo: '', ////备注信息 + signDate: '', //责任书签订日期 + extraFile: '', //责任书附件 + jobId: '', //岗位 + }); + const titles = ref(); + const disabled = ref(false); + // 打开弹窗 + const openDailog = (title: string, value: any, id: number) => { + dialogVisible.value = true; + titles.value =`${title}目标责任书`; + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') + goalManagementApi() + .gettargetDutyfileInfoDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + form.value.signDate=timeC(form.value.signDate) + + + if(res.data.data.extraFile!=null&&res.data.data.extraFile!=''){ + var extraFileList = res.data.data.extraFile.split(',') + for(var a = 0;a<extraFileList.length;a++){ + fileList.value.push( + { + name:extraFileList[a] + } + ) + } + }else { + fileList.value = [] + } + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 上传成功组装数据 + const successUploader = (list) =>{ + console.log('successUploader',list) + fileList.value = list + var formFileList = '' + for(var a = 0;a<fileList.value.length;a++){ + if(a==fileList.value.length-1){ + formFileList+=fileList.value[a].name + }else { + formFileList+=fileList.value[a].name+',' + } + } + form.value.extraFile = formFileList + } + const deleteFile = (list) =>{ + console.log('deleteFile',list) + fileList.value = list + const formFileList = '' + for(var a = 0;a<fileList.value.length;a++){ + if(a==fileList.value.length-1){ + formFileList.value+=fileList.value[a].name + }else { + formFileList.value+=fileList.value[a].name+',' + } + } + form.value.extraFile = formFileList + } + const timeC = (timestamp: any) => { + let a = new Date(timestamp).getTime(); + const date = new Date(a); + const Y = date.getFullYear() + '-'; + const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + const D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '; + const h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'; + const m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); + const s = date.getSeconds(); // 秒 + const dateString = Y + M + D + h + m +`:${s}`; + // console.log('dateString', dateString); // > dateString 2021-07-06 14:23 + return dateString; + }; + // 提交 + const submitForm = () => { + dialogVisible.value = false; + delete form.value.jobName + goalManagementApi() + .gettargetDutyfileInfoAddorUpdata(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('navAddorUpdata'); + } else { + ElMessage.error(res.data.msg); + } + }); + form.value = { + indexNum: '', //目标指标编号 + memo: '', ////备注信息 + signDate: '', //责任书签订日期 + extraFile: '666', //责任书附件 + jobId: '', //岗位 + }; + }; + // 取消 + const resetForm = () => { + dialogVisible.value = false; + form.value = { + indexNum: '', //目标指标编号 + memo: '', ////备注信息 + signDate: '', //责任书签订日期 + extraFile: '666', //责任书附件 + jobId: '', //岗位 + }; + fileList.value = [] + }; + // 安全目标指标弹窗 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(); + }; + const IdNumber=(val:any)=>{ + form.value.jobId=val.id + form.value.jobName=val.date + } + // 点击上传 + const fileList = ref([ + ]); + + const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => { + console.log(file, uploadFiles); + }; + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handleExceed: UploadProps['onExceed'] = (files, uploadFiles) => { + ElMessage.warning(`The limit is 3, you selected ${files.length} files this time, add up to ${files.length + uploadFiles.length} totally`); + }; + + const beforeRemove: UploadProps['beforeRemove'] = (uploadFile, uploadFiles) => { + return ElMessageBox.confirm(`Cancel the transfert of ${uploadFile.name} ?`).then( + () => true, + () => false + ); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + timeC, + IdNumber, + dialogVisible, + form, + disabled, + titles, + openDailog, + daiInpt, + submitForm, + resetForm, + Shows, + Search, + fileList, + handleRemove, + handlePreview, + handleExceed, + beforeRemove, + full, + toggleFullscreen, + FullScreen, + successUploader, + deleteFile + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/TargetBook/component/DailogSearch.vue b/src/views/goalManagement/TargetBook/component/DailogSearch.vue index e69de29..54a6871 100644 --- a/src/views/goalManagement/TargetBook/component/DailogSearch.vue +++ b/src/views/goalManagement/TargetBook/component/DailogSearch.vue @@ -0,0 +1,175 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" title="选择岗位" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="17"> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon> + <el-row> + <el-col :span="12"> + <el-form-item size="default"> + <el-input v-model="ruleForm.pass" placeholder="岗位名称" /> + </el-form-item> + </el-col> + <!-- <el-col :span="6" :offset="1"> + <el-form-item> + <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" /> + </el-form-item> + </el-col> --> + <el-col :span="11" :offset="1"> + <el-form-item> + <el-button size="default" type="primary" @click="submitForm(ruleFormRef)">查询</el-button> + <el-button size="default" @click="resetForm(ruleFormRef)">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-button size="default" :icon="Delete">清除选择</el-button> + <el-table :data="tableData" style="width: 100%; margin-top: 20px" > + <el-table-column align="center" width="70px"> + <template #default="scope"> + <el-radio-group v-model="radio1"> + <el-radio :label="scope.row.id" @click="radio(scope.row)" size="large">{{ null }}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column align="center" prop="date" label="岗位名称" /> + </el-table> + <el-pagination + style="padding: 20px 0; border-bottom: 1px solid #dedede" + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[100, 200, 300, 400]" + :small="small" + :disabled="disabled" + :background="background" + layout="total, sizes, prev, pager, next, jumper" + :total="1" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </el-col> + <el-col :span="7"> + <div v-if="dynamicTags[0]==''?false:true"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag.date }} + </el-tag> + </div> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref } from 'vue'; +import { Delete, FullScreen } from '@element-plus/icons-vue'; +export default defineComponent({ + setup(props,{emit}) { + const dialogVisible = ref<boolean>(false); + const openDailog = () => { + dialogVisible.value = true; + }; + // 搜索条件 + const ruleForm = reactive({ + pass: '', + checkPass: '', + }); + // 表格 + const tableData = [ + { id:1, + date: '岗位1', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { + id:2, + date: '岗位2', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { + id:3, + date: '岗位3', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { id:4, + date: '岗位4', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const pageSize4 = ref(100); + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`); + }; + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`); + }; + // 右方点击添加后显示标签 + const dynamicTags = ref(['']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value = ''; + }; + const radio1 = ref(''); + const radio = (event: any) => { + dynamicTags.value[0] = event; + }; + const clear=()=>{ + dynamicTags.value=[''] + radio1.value="" + } + const submitForm=()=>{ + let obj=JSON.parse(JSON.stringify(dynamicTags.value)) + emit("backNum",obj[0]) + dialogVisible.value = false + } + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + radio1, + radio, + clear, + dialogVisible, + openDailog, + ruleForm, + tableData, + pageSize4, + handleSizeChange, + handleCurrentChange, + dynamicTags, + handleClose, + submitForm, + Delete, + full, + toggleFullscreen, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> diff --git a/src/views/goalManagement/TargetBook/index.vue b/src/views/goalManagement/TargetBook/index.vue index e69de29..593acf8 100644 --- a/src/views/goalManagement/TargetBook/index.vue +++ b/src/views/goalManagement/TargetBook/index.vue @@ -0,0 +1,289 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="jobName" placeholder="请选择岗位"> + <template #append> <el-button :icon="Search" @click="openSearch" /> </template + ></el-input> + </el-form-item> + </el-col> + <!-- <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" /> + </el-form-item> + </el-col> --> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen" + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="index" label="序号" align="center" width="70" /> + <el-table-column property="jobId" align="center" label="岗位" sortable /> + <el-table-column property="signDate" align="center" label="责任书签订日期" :formatter="timeDate" sortable /> + <el-table-column property="extraFile" align="center" label="附件" sortable /> + <el-table-column property="memo" label="备注信息" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" style="width: 300px"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <DailogAdd ref="openAdd" @navAddorUpdata="onAddorUpdata"></DailogAdd> + <DailogSearch ref="openUser" @backNum="IdNumber"></DailogSearch> + </div> + </div> +</template> +<script lang="ts"> +import DailogAdd from './component/DailogAdd.vue'; +import {timeDate} from '/@/assets/index.ts' +import DailogSearch from './component/DailogSearch.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen, Search } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'; +export default defineComponent({ + components: { ElButton, ElInput, DailogAdd, DailogSearch }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + jobId: '', ////岗位号/外键 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.jobId = ''; + jobName.value="" + listApi(); + }; + const listApi = () => { + goalManagementApi() + .gettargetDutyfileInfoList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + const handleClick = (val: any) => { + let targetType = JSON.parse(JSON.stringify(val)); + ruleForm.searchParams.jobId = targetType.paneName; + listApi(); + }; + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + const jobName=ref() + const IdNumber=(val:any)=>{ + ruleForm.jobId=val.id + jobName.value=val.date + } + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title, ruleForm.searchParams.jobId, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .gettargetDutyfileInfoDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .gettargetDutyfileInfoDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + const openUser = ref(); + const openSearch = () => { + openUser.value.openDailog(); + }; + return { + IdNumber, + ruleForm, + resetForm, + listApi, + handleClick, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + openAdd, + openD, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + openUser, + openSearch, + timeDate, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + Search, + }; + }, +}); +</script> +<style scoped> +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.btns { + padding: 10px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/index.vue b/src/views/goalManagement/index.vue index e69de29..8d45119 100644 --- a/src/views/goalManagement/index.vue +++ b/src/views/goalManagement/index.vue @@ -0,0 +1,14 @@ +<template> + <router-view></router-view> +</template> + +<script> +export default { + name: "index" +} +</script> + +<style scoped> + +</style> + diff --git a/src/views/goalManagement/performanceAppraisal/component/DailogAq.vue b/src/views/goalManagement/performanceAppraisal/component/DailogAq.vue index e69de29..1bf1044 100644 --- a/src/views/goalManagement/performanceAppraisal/component/DailogAq.vue +++ b/src/views/goalManagement/performanceAppraisal/component/DailogAq.vue @@ -0,0 +1,455 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" @close="handleClose(ruleFormRef)" :title="titles" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" label-width="120px" ref="ruleFormRef" :rules="rules"> + <el-row> + <el-col :span="11"> + <el-form-item label="考核标题" size="default" prop="title"> + <el-input v-model="form.title" placeholder="请填写考核标题"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="考核日期" size="default" prop="examineDate"> + <el-date-picker + v-model="form.examineDate" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + type="datetime" + placeholder="请选择" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="合格分数" size="default" prop="acceptanceNumber"> + <el-input v-model="form.acceptanceNumber" disabled /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="总分" size="default" prop="examineTotalNumber"> + <el-input v-model="form.examineTotalNumber" disabled /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="考核部门" size="default" prop="examineDepartmentId"> + <el-tree-select + v-model="form.examineDepartmentId" + :data="data" + class="w100" + @node-click="nameData1" + :props="propse" + check-strictly + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="考核人" size="default" prop="examinePersonName"> + <el-input v-model="form.examinePersonName"> + <template #append> <el-button :icon="Search" @click="daiInpt(1)" /></template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="被考核部门" size="default" prop="beExaminedDepartmentId"> + <el-tree-select + v-model="form.beExaminedDepartmentId" + :data="data" + @node-click="nameData2" + class="w100" + :props="propse" + check-strictly + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="被考核人" size="default" prop="beExaminedPersonName"> + <el-input v-model="form.beExaminedPersonName"> + <template #append> <el-button :icon="Search" @click="daiInpt(0)" /></template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="附件"> + <uploaderFile :fileList="fileList" :systemName="'GOAL_MANAGE'" :disabled="disabled" + @successUploader="successUploader" @deleteFile="deleteFile"></uploaderFile> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="考核模板" size="default" prop="examineTemplateName"> + <el-input v-model="form.examineTemplateName"> + <template #append> <el-button :icon="Search" @click="daiAdd" /></template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="备注信息" prop="memo"> + <el-input v-model="form.memo" type="textarea"> </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" class="demo-tabs"> + <el-tab-pane label="考核项目" name="1"> + <!-- <el-button type="primary" size="default" @click="daiAdd">新增</el-button> --> + </el-tab-pane> + </el-tabs> + <el-table :data="form.numberDetailJson" style="width: 100%"> + <el-table-column align="center" prop="itemDetail" label="考核项目" /> + <el-table-column align="center" prop="content" label="考核内容" /> + <el-table-column align="center" label="考核分数"> + <template #default="scope"> + <el-input @blur="numberC" v-model.number="scope.row.number"> </el-input> + </template> + </el-table-column> + <!-- <el-table-column align="center" prop="address" label="制定日期" /> + <el-table-column align="center" prop="address" label="上报人" /> + <el-table-column align="center" label="操作"> + <template #default> + <el-button link type="primary">查看</el-button> + </template> + </el-table-column> --> + </el-table> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm(ruleFormRef)" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearch ref="Show" @typeDome="onType"></DailogSearch> + <DailogSearchUser ref="Shows" @SearchUser="userId"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearch from './DailogSearch.vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { ElMessage, ElMessageBox } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; +import type { UploadProps, UploadUserFile } from 'element-plus'; +import type { FormInstance, FormRules } from 'element-plus'; +import uploaderFile from '/@/components/uploaderFile/index.vue'; +export default defineComponent({ + components: { DailogSearchUser, DailogSearch,uploaderFile }, + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const ruleFormRef = ref<FormInstance>(); + const form = ref({ + beExaminedDepartmentId: '', ////被考核部门ID/外键 + beExaminedDepartmentName: '', + beExaminedPersonId: '', ////被考核人ID/外键(可能有多个,用逗号隔开) + beExaminedPersonName: '', + examineDate: '', ////考核日期 + examineDepartmentId: '', ////考核部门ID/外键 + examineDepartmentName: '', + examinePersonId: '', ////考核人ID/外键 + examinePersonName: '', + examineTemplateId: '', ////绩效考核模板ID/外键 + examineTemplateName: '', + examineTotalNumber: '', ////总分 + acceptanceNumber: '', ///合格分数 + extraFile: '', //责任书附件 + itemDetail: '', ////考核项目 + memo: '', ////备注信息 + numberDetailJson: [], ////各个考核项目的具体得分,json格式。形式为:[{“id”:"123","number":"123"}] + title: '', ////考核标题 + }); + const titles = ref(); + const titleT = ref(); + const disabled = ref(false); + // 打开弹窗 + const openDailog = (title: string, value: any, id: number) => { + department(); + dialogVisible.value = true; + titles.value = `${title}安全考核管理`; + titleT.value=title + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') + goalManagementApi() + .getexamineMngDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + form.value.examineDate = timeC(form.value.examineDate); + form.value.numberDetailJson = form.value.currentExamineDtoList; + + + if(res.data.data.extraFile!=null&&res.data.data.extraFile!=''){ + var extraFileList = res.data.data.extraFile.split(',') + for(var a = 0;a<extraFileList.length;a++){ + fileList.value.push( + { + name:extraFileList[a] + } + ) + } + }else { + fileList.value = [] + } + + // fileList.value = (res.data.data.fileList?res.data.data.fileList:[]) + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 上传成功组装数据 + const successUploader = (list) =>{ + console.log('successUploader',list) + fileList.value = list + var formFileList = '' + for(var a = 0;a<fileList.value.length;a++){ + if(a==fileList.value.length-1){ + formFileList+=fileList.value[a].name + }else { + formFileList+=fileList.value[a].name+',' + } + } + form.value.extraFile = formFileList + } + const deleteFile = (list) =>{ + console.log('deleteFile',list) + fileList.value = list + const formFileList = '' + for(var a = 0;a<fileList.value.length;a++){ + if(a==fileList.value.length-1){ + formFileList.value+=fileList.value[a].name + }else { + formFileList.value+=fileList.value[a].name+',' + } + } + form.value.extraFile = formFileList + } + + const timeC = (timestamp: any) => { + let a = new Date(timestamp).getTime(); + const date = new Date(a); + const Y = date.getFullYear() + '-'; + const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + const D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '; + const h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'; + const m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); + const s = date.getSeconds(); // 秒 + const dateString = Y + M + D + h + m + `:${s}`; + // console.log('dateString', dateString); // > dateString 2021-07-06 14:23 + return dateString; + }; + // 验证 + const rules = reactive<FormRules>({ + title: [{ required: true, message: '考核标题不能为空', trigger: 'blur' }], + examineDate: [{ required: true, message: '考核日期不能为空', trigger: 'blur' }], + examineDepartmentId: [{ required: true, message: '考核部门不能为空', trigger: 'blur' }], + examinePersonName: [], + examinePersonId: [], + beExaminedDepartmentId: [{ required: true, message: '被考核部门不能为空', trigger: 'blur' }], + beExaminedPersonName: [], + beExaminedPersonId: [], + examineTemplateId: [], + examineTemplateName: [{ required: true, message: '考核模板不能为空', trigger: 'blur' }], + memo: [], + }); + // 接收 + const onType = (data: any, val: any) => { + form.value.examineTotalNumber = ''; + form.value.examineTemplateId = data.id; + form.value.examineTemplateName = data.title; + form.value.acceptanceNumber = data.acceptanceNumber; + form.value.numberDetailJson = val.examineItemList; + }; + const numberC = () => { + let arr = 0; + for (let i = 0; i < form.value.numberDetailJson.length; i++) { + if (form.value.numberDetailJson[i].number != undefined) { + arr = parseInt(arr) + parseInt(form.value.numberDetailJson[i].number); + } else { + arr = parseInt(arr) + 0; + } + } + form.value.examineTotalNumber = arr; + }; + // 提交 + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + if(titleT.value=='新建'){ + delete form.value.id + } + dialogVisible.value = false; + let arr = []; + for (let i = 0; i < form.value.numberDetailJson.length; i++) { + arr.push({ + id: form.value.numberDetailJson[i].id, + number: form.value.numberDetailJson[i].number, + }); + } + form.value.numberDetailJson = JSON.stringify(arr); + goalManagementApi() + .getexamineMngAddOrUpdate(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('navAddorUpdata'); + } else { + ElMessage.error(res.data.msg); + } + }); + } else { + console.log('error submit!', fields); + } + }); + }; + // 取消 + const resetForm = (formEl: FormInstance | undefined) => { + if (!formEl) return; + dialogVisible.value = false; + formEl.resetFields(); + }; + const handleClose = (formEl: FormInstance | undefined) => { + if (!formEl) return; + formEl.resetFields(); + fileList.value=[] + }; + const activeName = ref('1'); + // 新增弹窗 + const Show = ref(); + const daiAdd = () => { + Show.value.openDailog(); + }; + // 安全目标指标弹窗 + const Shows = ref(); + const daiInpt = (type: any) => { + Shows.value.openDailog(type); + }; + // 点击上传 + const fileList = ref<UploadUserFile[]>([]); + + const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => { + console.log(file, uploadFiles); + }; + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handleExceed: UploadProps['onExceed'] = (files, uploadFiles) => { + ElMessage.warning(`The limit is 3, you selected ${files.length} files this time, add up to ${files.length + uploadFiles.length} totally`); + }; + + const beforeRemove: UploadProps['beforeRemove'] = (uploadFile, uploadFiles) => { + return ElMessageBox.confirm(`Cancel the transfert of ${uploadFile.name} ?`).then( + () => true, + () => false + ); + }; + const userId = (val: any, type: any) => { + if (type == 1) { + form.value.examinePersonId = val.uid; + form.value.examinePersonName = val.realName; + } else if (type == 0) { + let uid = []; + let realName = []; + for (let i = 0; i < val.length; i++) { + uid.push(val[i].uid); + realName.push(val[i].realName); + } + form.value.beExaminedPersonId = uid.toString(); + form.value.beExaminedPersonName = realName.toString(); + console.log(form.value.beExaminedPersonId, form.value.beExaminedPersonName); + } + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + //部门 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + const data = ref(); + const nameData1 = (val: any) => { + form.value.examineDepartmentName = val.depName; + }; + const nameData2 = (val: any) => { + form.value.beExaminedDepartmentName = val.depName; + console.log(form.value); + }; + return { + titleT, + rules, + timeC, + numberC, + onType, + handleClose, + nameData1, + nameData2, + ruleFormRef, + department, + propse, + data, + userId, + activeName, + dialogVisible, + form, + titles, + disabled, + openDailog, + submitForm, + resetForm, + Show, + daiAdd, + Shows, + daiInpt, + Search, + fileList, + handleRemove, + handlePreview, + handleExceed, + beforeRemove, + full, + toggleFullscreen, + FullScreen, + successUploader, + deleteFile + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/performanceAppraisal/component/DailogKh.vue b/src/views/goalManagement/performanceAppraisal/component/DailogKh.vue index e69de29..7d58a68 100644 --- a/src/views/goalManagement/performanceAppraisal/component/DailogKh.vue +++ b/src/views/goalManagement/performanceAppraisal/component/DailogKh.vue @@ -0,0 +1,247 @@ +<template> + <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" title="新建考核标准设定" width="60%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="标准标题" size="default"> + <el-input v-model="form.title"> </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="适用范围" size="default"> + <el-select v-model="form.applyRange" style="width: 100%" placeholder="请选择"> + <el-option label="安全生产责任制考核1" value="1" /> + <el-option label="安全生产责任制考核2" value="2" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <div v-if="clickType"> + <el-row> + <el-col :span="11"> + <el-form-item label="设定人" size="default"> + <el-input v-model="form.setPersonId" disabled> + <template #append> <el-button :icon="Search" @click="daiInpt" /></template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="设定人部门" size="default"> + <el-select v-model="form.setPersonDepartmentId" disabled style="width: 100%" placeholder="请选择"> + <el-option label="Zone one" value="shanghai" /> + <el-option label="Zone two" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + </div> + <el-row> + <el-col :span="11"> + <el-form-item label="模板分类编码" size="default"> + <el-input v-model="form.templateCode" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="合格分数" size="default"> + <el-input v-model="form.acceptanceNumber" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="备注信息"> + <el-input v-model="form.memo" type="textarea" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2" v-if="clickType"> + <el-form-item label="设定日期" size="default"> + <el-date-picker disabled v-model="form.setTimem" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" class="demo-tabs"> + <el-tab-pane label="考核项目" name="1"> + <el-button type="primary" size="default" @click="daiAdd('新增','')">新增</el-button> + </el-tab-pane> + </el-tabs> + <el-table :data="form.examineItemList" style="width: 100%"> + <el-table-column align="center" prop="itemType" label="类型" width="180" /> + <el-table-column align="center" prop="itemDetail" label="考核项目" width="180" /> + <el-table-column align="center" prop="content" label="考核内容" /> + <el-table-column align="center" prop="judgeStandard" label="评定标准" /> + <el-table-column align="center" prop="memo" label="考核说明" /> + <el-table-column align="center" label="操作"> + <template #default="scope"> + <el-button link type="primary" @click="daiAdd('查看', scope.row)">查看</el-button> + <el-button link type="primary" @click="daiAdd('修改', scope.row)">修改</el-button> + <el-button link type="primary" @click="deleteA(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <DailogKhS ref="Show" @onAdd="AddObj"></DailogKhS> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogKhS from './DailogKhS.vue'; +import { ElMessage, ElMessageBox } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { DailogKhS }, + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const form = ref({ + examineItemList: [], //考核项目列表 + setTimem: 1658386392466, + memo: '', ////备注信息 + templateCode: '', ////模板分类编码 + title: '', ////标准标题 + setPersonId: 1, //设定人 + acceptanceNumber: '', ////合格分数 + setPersonDepartmentId: 2, //设定人部门 + applyRange: '', ////适用范围 + }); + const titles = ref(); + const titleT = ref(); + const disabled = ref(false); + const clickType = ref(false); + // 打开弹窗 + const openDailog = (title: string, value: any, id: number) => { + dialogVisible.value = true; + titles.value = `${title}安全考核管理`; + titleT.value=title + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') { + goalManagementApi() + .getexamineTemplateDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + } else { + clickType.value = false; + } + }; + // 接受传值 + const AddObj = (val: any) => { + if (index.value == -1) { + form.value.examineItemList.push(val); + } else { + form.value.examineItemList[index.value] = val; + } + }; + // 删除 + const deleteA = (tag: any) => { + form.value.examineItemList.splice(form.value.examineItemList.indexOf(tag), 1); + }; + // 提交 + const submitForm = () => { + if(titleT.value=='新建'){ + delete form.value.id + } + dialogVisible.value = false; + goalManagementApi() + .getexamineTemplateAddOrUpdate(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('navAddorUpdata'); + } else { + ElMessage.error(res.data.msg); + } + }); + form.value = { + examineItemList: [], //考核项目列表 + setTimem: 1658386392466, + memo: '', ////备注信息 + templateCode: '', ////模板分类编码 + title: '', ////标准标题 + setPersonId: 1, //设定人 + acceptanceNumber: '', ////合格分数 + setPersonDepartmentId: 2, //设定人部门 + applyRange: '', ////适用范围 + }; + }; + // 取消 + const resetForm = () => { + dialogVisible.value = false; + form.value = { + examineItemList: [], //考核项目列表 + setTimem: 1658386392466, + memo: '', ////备注信息 + templateCode: '', ////模板分类编码 + title: '', ////标准标题 + setPersonId: 1, //设定人 + acceptanceNumber: '', ////合格分数 + setPersonDepartmentId: 2, //设定人部门 + applyRange: '', ////适用范围 + }; + }; + const activeName = ref('1'); + // 新增弹窗 + const index = ref<any>(); + const Show = ref(); + const daiAdd = (title: string, data: any) => { + index.value = form.value.examineItemList.indexOf(data); + Show.value.openDailog(title, data); + }; + // 安全目标指标弹窗 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + titleT, + index, + form, + dialogVisible, + deleteA, + AddObj, + openDailog, + activeName, + titles, + disabled, + submitForm, + resetForm, + Show, + daiAdd, + Shows, + daiInpt, + Search, + full, + clickType, + toggleFullscreen, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue b/src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue index e69de29..f186ab3 100644 --- a/src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue +++ b/src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue @@ -0,0 +1,133 @@ +<template> + <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" :title="titles" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" label-width="120px"> + <el-row> + <el-col :span="24"> + <el-form-item label="类型"> + <el-input v-model="form.itemType" type="textarea"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="考核项目"> + <el-input v-model="form.itemDetail" type="textarea"> </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="考核内容"> + <el-input v-model="form.content" type="textarea"> </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="评定标准"> + <el-input v-model="form.judgeStandard" type="textarea"> </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="考核说明"> + <el-input v-model="form.memo" type="textarea"> </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> +<!-- <el-button type="primary" @click="dialogVisible = false" size="default">继续添加</el-button>--> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <!-- <DailogAdd ref="Show"></DailogAdd> + <DailogSearch ref="Shows"></DailogSearch> --> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +// import DailogAdd from './DailogAdd.vue' +// import DailogSearch from '../../../../components/DailogSearch/DailogSearch.vue' +export default defineComponent({ + // components:{DailogAdd,DailogSearch}, + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const form = ref({ + itemType: '', ////类型 + memo: '', //备注 + itemDetail: '', ////考核项目 + content: '', ////考核内容 + judgeStandard: '', ////评定标准 + }); + const disabled=ref(false) + const titles=ref() + const openDailog = (title: string, value: any) => { + dialogVisible.value = true; + titles.value=`${title}考核项目` + if (title == '查看') { + form.value = value; + disabled.value=true + }else if(title == '修改'){ + disabled.value=false + form.value = value; + } + }; + // 提交 + const submitForm = () => { + dialogVisible.value = false; + emit('onAdd', form.value); + form.value = { + itemType: '', ////类型 + memo: '', //备注 + itemDetail: '', ////考核项目 + content: '', ////考核内容 + judgeStandard: '', ////评定标准 + }; + }; + // 取消 + const resetForm = () => { + dialogVisible.value = false; + form.value = { + itemType: '', ////类型 + memo: '', //备注 + itemDetail: '', ////考核项目 + content: '', ////考核内容 + judgeStandard: '', ////评定标准 + }; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + form, + disabled, + titles, + dialogVisible, + openDailog, + submitForm, + resetForm, + Search, + full, + toggleFullscreen, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue b/src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue index e69de29..d50ea80 100644 --- a/src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue +++ b/src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue @@ -0,0 +1,196 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" title="选择安全目标指标" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="17"> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon> + <el-row> + <el-col :span="12"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.title" placeholder="标准标题" /> + </el-form-item> + </el-col> + <!-- <el-col :span="6" :offset="1"> + <el-form-item> + <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" /> + </el-form-item> + </el-col> --> + <el-col :span="11" :offset="1"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi()">查询</el-button> + <el-button size="default" @click="reset">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-button size="default" :icon="Delete" @click="clear">清除选择</el-button> + <el-table :data="tableData" style="width: 100%; margin-top: 20px" > + <el-table-column align="center" width="70px"> + <template #default="scope"> + <el-radio-group v-model="radio1"> + <el-radio :label="scope.row.id" @click="radio(scope.row)" size="large">{{ null }}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column align="center" prop="title" label="标准标题" /> + </el-table> + <el-pagination + style="padding: 20px 0; border-bottom: 1px solid #dedede" + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </el-col> + <el-col :span="7"> + <div v-if="dynamicTags[0]==''?false:true"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag.title }} + </el-tag> + </div> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref } from 'vue'; +import { Delete, FullScreen } from '@element-plus/icons-vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + setup(props,{emit}) { + const dialogVisible = ref<boolean>(false); + const openDailog = () => { + dialogVisible.value = true; + listApi() + }; + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + title: '', //标准标题 + }, + }); + const listApi = () => { + goalManagementApi() + .getexamineTemplateList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 重置 + const reset=()=>{ + ruleForm.searchParams.title="" + listApi() + } + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 提交 + const submitForm=()=>{ + dialogVisible.value = false + emit("typeDome",dynamicTags.value[0],list.value) + clear() + } + // 右方点击添加后显示标签 + const dynamicTags = ref(['']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value = ''; + }; + const radio1 = ref(''); + const list=ref([]) + const radio = (event: any) => { + + goalManagementApi() + .getexamineTemplateDetail(event.id) + .then((res) => { + if (res.data.code == 200) { + list.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + dynamicTags.value[0] = event; + }; + const clear=()=>{ + dynamicTags.value=[''] + radio1.value="" + } + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + submitForm, + list, + reset, + dialogVisible, + listApi, + openDailog, + ruleForm, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + dynamicTags, + handleClose, + Delete, + full, + toggleFullscreen, + radio1, + radio, + clear, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> diff --git a/src/views/goalManagement/performanceAppraisal/index.vue b/src/views/goalManagement/performanceAppraisal/index.vue index e69de29..53838f6 100644 --- a/src/views/goalManagement/performanceAppraisal/index.vue +++ b/src/views/goalManagement/performanceAppraisal/index.vue @@ -0,0 +1,526 @@ +<template> + <div> + <div class="minCenter"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> + <el-tab-pane label="安全考核管理" name="1"> + <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-tree-select v-model="ruleForm.searchParams.examineDepartmentId" :data="data" check-strictly="true" class="w100" :props="propse" placeholder="请选择" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen" + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" plain :icon="Delete" @click="onDeleteAll">删除</el-button> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" @selection-change="handleSelectionChange"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <div class="tableC"> + <el-table :data="scope.row.currentExamineDtoList" style="width: 100%"> + <el-table-column align="center" prop="itemDetail" label="考核项目" /> + <el-table-column align="center" prop="content" label="考核内容" /> + <el-table-column align="center" prop="number" label="考核分数" /> + </el-table> + </div> + </template> + </el-table-column> + <el-table-column property="examineDate" align="center" :formatter="timeDate" label="考核日期" sortable /> + <el-table-column property="examineDepartmentName" align="center" label="考核部门" sortable /> + <el-table-column property="examinePersonName" label="考核人" align="center" sortable show-overflow-tooltip /> + <el-table-column property="beExaminedDepartmentName" label="被考核部门" align="center" sortable show-overflow-tooltip /> + <el-table-column property="examineTotalNumber" label="总分" align="center" sortable show-overflow-tooltip /> + <el-table-column property="numberDetailJson.number" label="考核结果" align="center" sortable show-overflow-tooltip /> + <el-table-column property="extraFile" label="附件" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250px"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-tab-pane> + <el-tab-pane label="考核标准设定" name="2"> + <el-form :model="ruleForms" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForms.searchParams.title" placeholder="标准标题" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApis">查询</el-button> + <el-button size="default" @click="resetForms">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openDs('新建')">新建</el-button> + <!-- <el-button size="default" :disabled="warnings" type="warning" plain :icon="EditPen">修改</el-button> --> + <el-button size="default" :disabled="dangers" type="danger" plain :icon="Delete" @click="onDeleteAlls">删除</el-button> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableDatas" style="width: 100%" @selection-change="handleSelectionChanges"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <div class="tableC"> + <el-table :data="scope.row.examineItemList" style="width: 100%"> + <el-table-column align="center" prop="itemType" label="类型" /> + <el-table-column align="center" prop="itemDetail" label="考核项目" /> + <el-table-column align="center" prop="content" label="考核内容" /> + <el-table-column align="center" prop="judgeStandard" label="评定标准" /> + <el-table-column align="center" prop="memo" label="考核说明" /> + </el-table> + </div> + </template> + </el-table-column> + <el-table-column label="标准标题" property="title" align="center" sortable /> + <el-table-column property="applyRange" align="center" label="适用范围" sortable /> + <el-table-column property="setPersonName" label="设定人" align="center" sortable show-overflow-tooltip /> + <el-table-column property="setPersonDepartmentName" label="设定人部门" align="center" sortable show-overflow-tooltip /> + <el-table-column property="setTimem" label="设定日期" align="center" :formatter="timeDate" sortable show-overflow-tooltip /> + <el-table-column property="templateCode" label="模板分类编码" align="center" sortable show-overflow-tooltip /> + <el-table-column property="acceptanceNumber" label="合格分数" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250px"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openDs('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openDs('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDeletes(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4s" + v-model:page-size="pageSize4s" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="totals" + @size-change="handleSizeChanges" + @current-change="handleCurrentChanges" + /> + </div> + </el-tab-pane> + </el-tabs> + </div> + <DailogAq ref="openAdd" @navAddorUpdata="onAddorUpdata"></DailogAq> + <DailogKh ref="openAdds" @navAddorUpdata="onAddorUpdatas"></DailogKh> + </div> +</template> +<script lang="ts"> +import {timeDate} from '/@/assets/index.ts' +import DailogAq from './component/DailogAq.vue'; +import DailogKh from './component/DailogKh.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import type { TabsPaneContext } from 'element-plus' +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { ElButton, ElInput, DailogAq, DailogKh }, + setup() { + // 搜索条件 安全考核管理 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + examineDepartmentId: '', + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.examineDepartmentId = ''; + listApi() + }; + const listApi = () => { + goalManagementApi() + .getexamineMngList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD= (title: String, id: number) => { + openAdd.value.openDailog(title, ruleForm.searchParams.examineDepartmentId, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getexamineMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getexamineMngDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + // 切换 + const activeName = ref('1'); + const handleClick = (val: TabsPaneContext) => { + console.log(val) + if (val.props.name == '1') { + listApi(); + }else{ + listApis(); + } + }; + // 搜索条件 考核标准设定 + const ruleForms = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + title: '', //标准标题 + }, + }); + // 重置 + const resetForms = () => { + ruleForms.searchParams.title = ''; + listApis() + }; + const listApis = () => { + goalManagementApi() + .getexamineTemplateList(ruleForms) + .then((res) => { + if (res.data.code == 200) { + tableDatas.value = res.data.data; + currentPage4s.value = res.data.pageIndex; + pageSize4s.value = res.data.pageSize; + totals.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApis(); + department() + }); + const onAddorUpdatas = () => { + listApis(); + }; + // 表格 + const tableDatas = ref(); + const currentPage4s = ref(); + const pageSize4s = ref(); + const totals = ref(); + const handleSizeChanges = (val: number) => { + // console.log(`${val} items per page`); + ruleForms.pageSize = val; + listApis(); + }; + const handleCurrentChanges = (val: number) => { + // console.log(`current page: ${val}`); + ruleForms.pageIndex = val; + listApis(); + }; + // 弹窗 + const openAdds = ref(); + const openDs = (title: String, id: number) => { + openAdds.value.openDailog(title, ruleForm.searchParams.examineDepartmentId, id); + }; + // 删除 + const onDeletes = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getexamineTemplateDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApis(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warnings = ref(true); + const dangers = ref(true); + const deletAlls = ref(); + const handleSelectionChanges = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAlls.value = arr; + if (val.length == 1) { + warnings.value = false; + dangers.value = false; + } else if (val.length == 0) { + warnings.value = true; + dangers.value = true; + } else { + warnings.value = true; + dangers.value = false; + } + }; + const onDeleteAlls = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getexamineTemplateDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApis(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + const data = ref(); + return { + timeDate, + department, + propse, + data, + activeName, + ruleForm, + resetForm, + listApi, + handleClick, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + openAdd, + openD, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + ruleForms, + resetForms, + listApis, + onAddorUpdatas, + tableDatas, + currentPage4s, + pageSize4s, + totals, + handleSizeChanges, + handleCurrentChanges, + openAdds, + openDs, + onDeletes, + warnings, + dangers, + deletAlls, + handleSelectionChanges, + onDeleteAlls, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 20px; +} +.topTitle { + padding: 5px 0 20px 0; + border-bottom: 1px solid #dedede; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +.tableC { + margin: 0 10%; +} +</style> diff --git a/src/views/goalManagement/processForms/component/formInformationTop.vue b/src/views/goalManagement/processForms/component/formInformationTop.vue index e69de29..5f34405 100644 --- a/src/views/goalManagement/processForms/component/formInformationTop.vue +++ b/src/views/goalManagement/processForms/component/formInformationTop.vue @@ -0,0 +1,144 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" style="padding: 0 20px"> + <el-tab-pane label="考核指标" name="1"> + <el-table :data="tableData" style="width: 100%"> + <el-table-column align="center" type="index" label="序号" width="70" /> + <el-table-column align="center" prop="date" label="责任部门" /> + <el-table-column align="center" prop="name" label="考核指标" /> + <el-table-column align="center" prop="address" label="制定部门" /> + <el-table-column align="center" prop="address" label="制定日期" /> + <el-table-column align="center" label="检查值"> + <template #default> + <el-input v-model="form.name" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column align="center" prop="address" label="检查人" /> + <el-table-column align="center" prop="address" label="检查时间" /> + </el-table> + <div class="tiao"> + <div class="typeS">审批</div> + </div> + <el-row style="padding:20px 0"> + <el-col :span="6" style="text-align:right">一级审批:</el-col> + <el-col :span="18">同意</el-col> + </el-row> + <el-row style="padding:0 0 20px 0"> + <el-col :span="6"></el-col> + <el-col :span="18"><span class="logoColor">同意</span><span style="margin-right: 8px;">杜建喜</span><span>2021-05-24 04:47:42</span></el-col> + </el-row> + </el-tab-pane> + </el-tabs> +</template> +<script lang="ts"> +import { defineComponent,ref,reactive } from 'vue' + +export default defineComponent({ + setup() { + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const activeName = ref('1'); + return{ + form, + tableData, + activeName + } + }, +}) +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0 ; +} +</style> diff --git a/src/views/goalManagement/processForms/component/formInformationTops.vue b/src/views/goalManagement/processForms/component/formInformationTops.vue index e69de29..ba671e5 100644 --- a/src/views/goalManagement/processForms/component/formInformationTops.vue +++ b/src/views/goalManagement/processForms/component/formInformationTops.vue @@ -0,0 +1,162 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="责任部门" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="改进期限" size="default"> + <el-date-picker v-model="form.date1" type="date" placeholder="Pick a date" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="发起人" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="发起时间" size="default"> + <el-date-picker v-model="form.date1" type="date" placeholder="Pick a date" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" style="padding: 0 20px"> + <el-tab-pane label="考核指标" name="1"> + <el-table :data="tableData" style="width: 100%"> + <el-table-column align="center" type="index" label="序号" width="70" /> + <el-table-column align="center" prop="date" label="责任部门" /> + <el-table-column align="center" prop="name" label="考核指标" /> + <el-table-column align="center" prop="address" label="制定部门" /> + <el-table-column align="center" prop="address" label="制定日期" /> + <el-table-column align="center" label="检查值"> + <template #default> + <el-input v-model="form.name" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column align="center" prop="address" label="检查人" /> + <el-table-column align="center" prop="address" label="检查时间" /> + </el-table> + <div class="tiao"> + <div class="typeS">审批</div> + </div> + <el-row style="padding: 20px 0"> + <el-col :span="6" style="text-align: right">一级审批:</el-col> + <el-col :span="18">同意</el-col> + </el-row> + <el-row style="padding: 0 0 20px 0"> + <el-col :span="6"></el-col> + <el-col :span="18"><span class="logoColor">同意</span><span style="margin-right: 8px">杜建喜</span><span>2021-05-24 04:47:42</span></el-col> + </el-row> + </el-tab-pane> + </el-tabs> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; + +export default defineComponent({ + setup() { + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const activeName = ref('1'); + return { + form, + tableData, + activeName, + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box { + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao { + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0; + position: relative; +} +.typeS { + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor { + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns { + width: 100%; + padding: 20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); +} +.title2 { + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:20px 0 0px 0; +} +</style> diff --git a/src/views/goalManagement/processForms/component/lowerPlate.vue b/src/views/goalManagement/processForms/component/lowerPlate.vue index e69de29..3eea9f5 100644 --- a/src/views/goalManagement/processForms/component/lowerPlate.vue +++ b/src/views/goalManagement/processForms/component/lowerPlate.vue @@ -0,0 +1,120 @@ +<template> + <div class="box"> + <el-form ref="formS" :model="form" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="15"> + <el-form-item label="流程标题" size="default"> + <el-input v-model="form.names" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label="下级审批日期" size="default"> + <el-date-picker v-model="form.date1" type="date" placeholder="Pick a date" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.delivery" label="是否抄送" @change="typeChang"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.delivery"> + <el-col :span="15"> + <el-form-item label="抄送给" prop="resource" size="default"> + <el-input v-model="form.resource" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.type" label="指定下一步处理者(不设置就使用默认处理人)"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.type"> + <el-col :span="15"> + <el-form-item label="指定" prop="desc" size="default"> + <el-input v-model="form.desc" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + <DailogSearchUser ref="ShowUser"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue' +import { Search } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus' +export default defineComponent({ + components:{DailogSearchUser}, + setup() { + const formS=ref<FormInstance>() + let form = reactive({ + names: '', + region: '', + date1: '', + date2: '', + delivery: "", + type: "", + resource: '', + desc: '', + }); + const typeChang=()=>{ + console.log('tag',form) + } + const rules = reactive<FormRules>({ + resource: [ + { + type: 'array', + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ], + desc: [ + { + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ]}) + const ShowUser=ref() + const openDai =()=>{ + ShowUser.value.openDailog() + } + return { + form, + rules, + formS, + typeChang, + ShowUser, + openDai, + Search, + }; + }, +}); +</script> + +<style scoped> +.box { + margin: 30px 0 100px 0; + background-color: #fff; + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); + padding: 20px; +} +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/processForms/processForms.vue b/src/views/goalManagement/processForms/processForms.vue index e69de29..331337a 100644 --- a/src/views/goalManagement/processForms/processForms.vue +++ b/src/views/goalManagement/processForms/processForms.vue @@ -0,0 +1,124 @@ +<template> + <div> + <h4 class="title">胡海涛2022-07-01 16:08:42发起了目标检查上报(检查)--检查</h4> + <div class="box"> + <el-menu + :default-active="activeIndex" + class="el-menu-demo" + background-color="#ebeef5" + text-color="#fff" + active-text-color="#fff" + mode="horizontal" + @select="handleSelect" + > + <el-menu-item index="1">表单信息</el-menu-item> + <!-- <el-menu-item index="2">流程图</el-menu-item> --> + </el-menu> + <div v-if="activeIndex == 1" class="navType"> + <formInformationTop v-if="false"></formInformationTop> + <formInformationTops></formInformationTops> + </div> + <!-- <div v-if="activeIndex == 2" class="navType" style="padding:20px 20px 0 20px"> + <div class="title2">流程图</div> + <div style="width:100%;height:400px"></div> + </div> --> + </div> + <lowerPlate></lowerPlate> + <div class="btns"> + <el-button type="primary">发起上报</el-button> + </div> + </div> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref,onMounted } from 'vue'; +import { useRouter } from 'vue-router'; +import formInformationTop from './component/formInformationTop.vue' +import formInformationTops from './component/formInformationTops.vue' +import lowerPlate from './component/lowerPlate.vue' +export default defineComponent({ + components:{lowerPlate,formInformationTop,formInformationTops}, + setup() { + const activeIndex = ref('1'); + const handleSelect = (key: string, keyPath: string[]) => { + // console.log(key, keyPath); + activeIndex.value = key; + }; + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + const router=useRouter() + const Type=onMounted(()=>{ + console.log("xxxxxxx",router) + }) + + return { + activeIndex, + handleSelect, + form, + router, + Type + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +</style> diff --git a/src/views/goalManagement/safetyAssessment/component/Dailog.vue b/src/views/goalManagement/safetyAssessment/component/Dailog.vue index e69de29..21771af 100644 --- a/src/views/goalManagement/safetyAssessment/component/Dailog.vue +++ b/src/views/goalManagement/safetyAssessment/component/Dailog.vue @@ -0,0 +1,264 @@ +<template> + <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" title="目标分解" width="60%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标" size="default"> + <el-input v-model="form.qName" :disabled="disabled"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号" size="default"> + <el-input v-model="form.indexNum" disabled /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度" size="default"> + <el-input v-model="form.year" disabled /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值" size="default"> + <el-input v-model="form.value" disabled /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" class="demo-tabs"> + <el-tab-pane label="目标指标分解" name="1"> + <!-- <el-button type="primary" size="default" @click="daiAdd('新增')" :disabled="disabled">新增</el-button> --> + </el-tab-pane> + </el-tabs> + <el-table :data="formUp.targetDivideDetailList" style="width: 100%"> + <el-table-column align="center" property="dutyDepartmentName" label="责任部门" width="180" /> + <el-table-column align="center" property="value" label="考核指标" width="180" /> + <el-table-column align="center" property="makerDepartmentName" label="制定人部门" /> + <el-table-column align="center" property="makeDate" :formatter="timeDate" label="制定日期" /> + <el-table-column align="center" property="commitPersonName" label="上报人" /> + <el-table-column align="center" label="操作"> + <template #default="scope"> + <el-button link type="primary" @click="daiAdd('查看', scope.row)">查看</el-button> + <el-button link :disabled="disabled" type="primary" @click="daiAdd('修改', scope.row)">考核</el-button> + </template> + </el-table-column> + </el-table> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button type="primary" v-if="disabled == false" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <DailogAdd ref="Show" @onAdd="add"></DailogAdd> + <DailogSearch ref="Shows" @backNum="onNumber"></DailogSearch> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { timeDate } from '/@/assets/index.ts'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogAdd from './DailogAdd.vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus'; +import DailogSearch from '../../../../components/DailogSearch/DailogSearch.vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import { emit } from 'process'; +import { deepClone } from '/@/utils/other'; +export default defineComponent({ + components: { DailogAdd, DailogSearch }, + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const form = ref({ + qName: '', + indexNum: '', + year: '', + value: '', + targetDivideDetailList: [], + }); + const targetType = ref(); + const disabled = ref(false); + const titles = ref(); + const numId=ref() + const openDailog = (title: string, type: any, id: number) => { + dialogVisible.value = true; + titles.value = title; + targetType.value = type; + + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') { + goalManagementApi() + .getTargetMngDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + formUp.targetDivideDetailList = form.value.targetDivideDetailList; + for(let i=0;i<formUp.targetDivideDetailList.length;i++){ + formUp.targetDivideDetailList[i].makeDate=timeC(formUp.targetDivideDetailList[i].makeDate) + } + } else { + ElMessage.error(res.data.msg); + } + }); + } + numId.value=id + }; + const timeC = (timestamp: any) => { + let a = new Date(timestamp).getTime(); + const date = new Date(a); + const Y = date.getFullYear() + '-'; + const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + const D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '; + const h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'; + const m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); + const s = date.getSeconds(); // 秒 + const dateString = Y + M + D + h + m +`:${s}`; + // console.log('dateString', dateString); // > dateString 2021-07-06 14:23 + return dateString; + }; + const onNumber = (val: object) => { + form.value = val; + }; + // 导航 + const activeName = ref('1'); + // 表格 + const tableData = ref([]); + // 新增弹窗 + const index = ref<any>(); + const Show = ref(); + const daiAdd = (title: string, data: any) => { + index.value = formUp.targetDivideDetailList.indexOf(data); + Show.value.openDailog(title, data); + }; + const formUp = reactive({ + targetId: '', //关联的目标指标/外键 + delTargetDivideDetails: '', //要删除的目标指标分解ID,多个用逗号隔开 + targetDivideDetailList: [], //目标指标分解列表 + }); + + const add = (val: any) => { + goalManagementApi() + .getTargetMngDetail(numId.value) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + formUp.targetDivideDetailList = form.value.targetDivideDetailList; + for(let i=0;i<formUp.targetDivideDetailList.length;i++){ + formUp.targetDivideDetailList[i].makeDate=timeC(formUp.targetDivideDetailList[i].makeDate) + } + } else { + ElMessage.error(res.data.msg); + } + }); + + // let obj=JSON.parse(JSON.stringify(form.value)) + }; + // 新增 + const submitForm = () => { + formUp.delTargetDivideDetails = arr.value.toString(); + formUp.targetId = form.value.id; + dialogVisible.value = false; + for(let i=0;i<formUp.targetDivideDetailList.length;i++){ + delete formUp.targetDivideDetailList[i].dutyDepartmentName + delete formUp.targetDivideDetailList[i].makerDepartmentName + } + goalManagementApi() + .gettargetDivideDetail(formUp) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('addList'); + } else { + ElMessage.error(res.data.msg); + } + }); + form.value = { + qName: '', + indexNum: '', + year: '', + value: '', + targetDivideDetailList: [], + }; + tableData.value = []; + formUp.targetId = ''; + formUp.delTargetDivideDetails = ''; + formUp.targetDivideDetailList = []; + }; + const arr = ref([]); + // 安全目标指标弹窗 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(targetType.value); + }; + // 关闭 + const resetForm = () => { + dialogVisible.value = false; + form.value = { + qName: '', + indexNum: '', + year: '', + value: '', + targetDivideDetailList: [], + }; + tableData.value = []; + formUp.targetId = ''; + formUp.delTargetDivideDetails = ''; + formUp.targetDivideDetailList = []; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + // 时间格式处理 + // const timeDate = (data: any) => { + // let result = new Date(data).getTime(); + // return result; + // }; + return { + timeC, + index, + timeDate, + arr, + form, + dialogVisible, + openDailog, + activeName, + tableData, + Show, + daiAdd, + Shows, + daiInpt, + Search, + full, + toggleFullscreen, + FullScreen, + onNumber, + targetType, + disabled, + resetForm, + titles, + add, + formUp, + submitForm, + numId + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/safetyAssessment/component/DailogAdd.vue b/src/views/goalManagement/safetyAssessment/component/DailogAdd.vue index e69de29..dc63830 100644 --- a/src/views/goalManagement/safetyAssessment/component/DailogAdd.vue +++ b/src/views/goalManagement/safetyAssessment/component/DailogAdd.vue @@ -0,0 +1,281 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" :title="titles" width="50%" draggable @close="resetForm(ruleFormRef)"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" label-width="120px" ref="ruleFormRef" :rules="rules"> + <!-- <el-row> + <el-col :span="11"> + <el-form-item label="责任部门" prop="dutyDepartmentId" size="default"> + <el-tree-select v-model="form.dutyDepartmentId" check-strictly="true" @current-change="dutyName" :data="data" class="w100" :props="propse" placeholder="请选择" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="考核指标" prop="examineValue" size="default"> + <el-input v-model.number="form.examineValue" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="制定人部门" prop="makerDepartmentId" size="default"> + <el-tree-select v-model="form.makerDepartmentId" :data="data" check-strictly="true" + @current-change="makerDepartmentName" class="w100" :props="propse" placeholder="请选择" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="制定日期" prop="makeDate" size="default"> + <el-date-picker v-model="form.makeDate" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="上报值" prop="uploadValue" size="default"> + <el-input v-model="form.uploadValue"> + <template #append> <el-button :icon="Search" @click="openUser" /> </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="上报时间" prop="uploadDate" size="default"> + <el-date-picker v-model="form.uploadDate" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> --> + <el-row> + <el-col :span="11"> + <el-form-item label="考核结果" prop="examineResult" size="default"> + <el-select v-model="form.examineResult" placeholder="请选择" style="width: 100%"> + <el-option label="合格" :value="1" /> + <el-option label="不合格" :value="2" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="考核人" prop="examinePersonName" size="default"> + <el-input v-model="form.examinePersonName"> + <template #append> <el-button :icon="Search" @click="openUser" /> </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <!-- <el-row> + <el-col :span="11"> + <el-form-item label="考核时间" prop="examineDate" size="default"> + <el-date-picker v-model="form.examineDate" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"></el-col> + </el-row> --> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm(ruleFormRef)" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUser ref="Show" @SearchUser="onUser"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, onMounted } from 'vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus'; +import DailogSearchUser from '../../../../components/DailogSearchUser/index.vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { DailogSearchUser }, + setup(props, { emit }) { + const ruleFormRef = ref<FormInstance>(); + const form = ref({ + targetDivideDetailId: "", //关联的目标分解/外键 + examinePersonId: "", + examinePersonName: '', + examineResult: "", //考核结果 1:合格 2:不合格 + id: "", //目标指标ID + }); + //部门 + // const department = () => { + // goalManagementApi() + // .getTreedepartment() + // .then((res) => { + // if (res.data.code == 200) { + // data.value = res.data.data; + // } else { + // ElMessage.error(res.data.msg); + // } + // }); + // }; + // const propse = { + // label: 'depName', + // children: 'children', + // value: 'depId', + // }; + // onMounted(() => { + // department(); + // }); + const disabled = ref(false); + // 开启弹窗 + const titles = ref(); + const dialogVisible = ref(false); + const openDailog = (title: string, data: any) => { + titles.value = `${title}目标考核`; + if (title == '查看') { + disabled.value = true; + form.value = data; + // form.value.id = data.targetId; + form.value.targetDivideDetailId=data.id + form.value.examinePersonName = data.examinePersonName; + form.value.examinePersonId=data.examinePersonId + form.value.examineResult=data.examineResult + } else if (title == '修改') { + console.log(data) + disabled.value = false; + // form.value.id = data.targetId; + form.value.targetDivideDetailId=data.id + form.value.examinePersonName = data.examinePersonName; + form.value.examinePersonId=data.examinePersonId + form.value.examineResult=data.examineResult + } else { + disabled.value = false; + } + dialogVisible.value = true; + }; + // 开启用户弹窗 + const Show = ref(); + const openUser = () => { + Show.value.openDailog(); + }; + const rules = reactive<FormRules>({ + // dutyDepartmentId: [ + // { + // required: true, + // message: '责任部门不能为空', + // trigger: 'blur', + // }, + // ], + // makerDepartmentId: [ + // { + // required: true, + // message: '制定人部门不能为空', + // trigger: 'blur', + // }, + // ], + // commitPersonId: [ + // { + // required: true, + // message: '上报人不能为空', + // trigger: 'blur', + // }, + // ], + // examineValue: [ + // { + // required: true, + // message: '考核指标值不能为空', + // trigger: 'blur', + // }, + // { + // type: 'number', + // message: '考核指标值只能为数字类型', + // trigger: 'blur', + // }, + // ], + // makeDate: [ + // { + // required: true, + // message: '制定日期不能为空', + // trigger: 'blur', + // }, + // ], + examinePersonName: [], + examineResult:[] + + }); + // const dutyName = (data: any) => { + // form.value.dutyDepartmentName = data.depName; + // }; + // const makerDepartmentName = (data: any) => { + // form.value.makerDepartmentName = data.depName; + // }; + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + console.log(form.value) + dialogVisible.value = false; + goalManagementApi().gettargetExamineAddOrUpdate(form.value).then(res=>{ + if(res.data.code==200){ + ElMessage({ + message: res.data.msg, + type: 'success', + }); + }else{ + ElMessage.error(res.data.msg); + } + }) + // handleClose(formEl) + } else { + console.log('error submit!', fields); + } + }); + emit('onAdd'); + }; + + const resetForm = (formEl: FormInstance | undefined) => { + // console.log(formEl); + if (!formEl) return; + // formEl.resetFields(); + dialogVisible.value = false; + form.value = {}; + }; + // const handleClose = (formEl: any) => { + // formEl.resetFields(); + // }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + // const data = ref(); + const onUser = (e: any) => { + console.log(e); + form.value.examinePersonId = e.uid; + form.value.examinePersonName = e.realName; + }; + return { + disabled, + titles, + // handleClose, + form, + // propse, + // department, + dialogVisible, + openDailog, + Show, + openUser, + Search, + full, + toggleFullscreen, + FullScreen, + // data, + onUser, + ruleFormRef, + rules, + submitForm, + resetForm, + // dutyName, + // makerDepartmentName, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> diff --git a/src/views/goalManagement/safetyAssessment/index.vue b/src/views/goalManagement/safetyAssessment/index.vue index e69de29..f52ba71 100644 --- a/src/views/goalManagement/safetyAssessment/index.vue +++ b/src/views/goalManagement/safetyAssessment/index.vue @@ -0,0 +1,241 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.indexNum" placeholder="请输入目标指标" /> + </el-form-item> + </el-col> + <!-- <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" /> + </el-form-item> + </el-col> --> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <el-tabs v-model="ruleForm.searchParams.targetType" class="demo-tabs" @tab-click="handleClick"> + <div class="btns"> + <div> + <!-- <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> --> + </div> + <div> + <!-- <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <el-tab-pane label="目标定制(年)" name="1"> </el-tab-pane> + <el-tab-pane label="目标定制(月)" name="2"></el-tab-pane> + <el-tab-pane label="目标定制(半年)" name="3"></el-tab-pane> + <el-tab-pane label="目标定制(季度)" name="4"></el-tab-pane> + </el-tabs> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column type="expand"> + <template #default="scope"> + <div class="tableC"> + <el-tabs v-model="activeNames"> + <el-tab-pane label="目标指标分解" name="1"> + <el-table :data="scope.row.targetDivideDetailList" style="width: 100%"> + <el-table-column align="center" prop="dutyDepartmentName" label="责任部门" /> + <el-table-column align="center" prop="value" label="考核指标" /> + <el-table-column align="center" prop="makerDepartmentName" label="制定人部门" /> + <el-table-column align="center" prop="makeDate" :formatter="timeDate" label="制定日期" /> + <el-table-column align="center" prop="commitPersonName" label="上报人" /> + </el-table> + </el-tab-pane> + </el-tabs> + </div> + </template> + </el-table-column> + <el-table-column label="安全目标指标" align="center" property="qName" sortable /> + <el-table-column property="indexNum" align="center" label="考核指标编号" sortable /> + <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="300" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="View" @click="openD('修改', scope.row.id)">考核</el-button> + <!--<el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button>--> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <Dailog ref="openAdd"></Dailog> + </div> + </div> +</template> +<script lang="ts"> +import { timeDate } from '/@/assets/index.ts'; +import Dailog from './component/Dailog.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'; +export default defineComponent({ + components: { ElButton, ElInput, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////安全目标指标 + indexNum: '', ////目标指标编号 + targetType: '1', ////指标类型 1:年指标 2:月指标 + divideStatus: 1, ////分解状态 1:已分解 2:未分解 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.indexNum = ''; + }; + const listApi = () => { + goalManagementApi() + .gettargetExamineList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + const handleClick = (val: any) => { + let targetType = JSON.parse(JSON.stringify(val)); + ruleForm.searchParams.targetType = targetType.paneName; + listApi(); + }; + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 删除 + const onDelete = (id: number) => { + var arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title, ruleForm.searchParams.targetType,id); + }; + const activeNames=ref("1") + return { + timeDate, + activeNames, + listApi, + ruleForm, + resetForm, + handleClick, + tableData, + currentPage4, + pageSize4, + handleSizeChange, + handleCurrentChange, + onAddorUpdata, + total, + openAdd, + openD, + onDelete, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 10px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +.tableC { + margin: 0 10%; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/targetClassification/index.vue b/src/views/goalManagement/targetClassification/index.vue index e69de29..8c59970 100644 --- a/src/views/goalManagement/targetClassification/index.vue +++ b/src/views/goalManagement/targetClassification/index.vue @@ -0,0 +1,261 @@ +<template> + <div> + <!-- <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> --> + <div class="minCenter"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column label="名称" align="center" property="typeName" sortable /> + <el-table-column property="memo" align="center" label="描述" sortable /> + <!-- <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> --> + <el-table-column label="操作" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="small" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <DailogClass ref="Show" @onAdd="add"></DailogClass> + </div> +</template> +<script lang="ts"> +import DailogClass from '/@/components/DailogClass/index.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { ElButton, ElInput,DailogClass }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + typeName: '', ////分类名称 + }, + }); + // 下方导航与表格 + const tableData = ref([]); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + // const resetForm = () => { + // ruleForm.searchParams.qName = ''; + // ruleForm.searchParams.indexNum = ''; + // listApi(); + // }; + const listApi = () => { + goalManagementApi() + .gettargetClassList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); + + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const activeNames = ref('1'); + // 打开弹窗 + const Show = ref(); + const openD = (title: String, id: number) => { + Show.value.openDailog(title, ruleForm.searchParams.targetType,id); + }; + // 删除 + const onDelete = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .gettargetClassDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .gettargetClassDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + const add = () => { + listApi(); + }; + return { + listApi, + add, + // resetForm, + tableData, + currentPage4, + pageSize4, + total, + ruleForm, + handleSizeChange, + handleCurrentChange, + Show, + openD, + activeNames, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 20px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +.tableC { + margin: 0 10%; +} +</style> diff --git a/src/views/goalManagement/targetDecompositionHalfYear/index.vue b/src/views/goalManagement/targetDecompositionHalfYear/index.vue index e69de29..1ed6ed9 100644 --- a/src/views/goalManagement/targetDecompositionHalfYear/index.vue +++ b/src/views/goalManagement/targetDecompositionHalfYear/index.vue @@ -0,0 +1,286 @@ +<template> + <div> + <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <div> + <!--<el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button>--> + <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <div class="tableC"> + <el-tabs v-model="activeNames"> + <el-tab-pane label="目标指标分解" name="1"> + <el-table :data="scope.row.targetDivideDetailList" style="width: 100%"> + <el-table-column align="center" prop="dutyDepartmentName" label="责任部门" /> + <el-table-column align="center" prop="value" label="考核指标" /> + <el-table-column align="center" prop="makerDepartmentName" label="制定人部门" /> + <el-table-column align="center" prop="makeDate" :formatter="timeDate" label="制定日期" /> + <el-table-column align="center" prop="commitPersonName" label="上报人" /> + </el-table> + </el-tab-pane> + </el-tabs> + </div> + </template> + </el-table-column> + <el-table-column label="安全目标指标" align="center" property="qName" sortable /> + <el-table-column property="indexNum" align="center" label="目标指标编号" sortable /> + <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="small" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <Dailog ref="Show" @addList="add"></Dailog> + </div> +</template> +<script lang="ts"> +import { timeDate } from '/@/assets/index.ts'; +import search from '../targetSettings/component/search.vue'; +import Dailog from '../targetDecompositionYear/component/Dailog.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'; +export default defineComponent({ + components: { ElButton, ElInput, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////安全目标指标 + indexNum: '', ////目标指标编号 + targetType: '3', ////指标类型 1:年指标 2:月指标 + divideStatus: '', ////分解状态 1:已分解 2:未分解 + }, + }); + // 下方导航与表格 + const tableData = ref([]); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.indexNum = ''; + listApi() + }; + const listApi = () => { + goalManagementApi() + .getTargetMngList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); + + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const activeNames = ref('1'); + // 打开弹窗 + const Show = ref(); + const openD = (title: String, id: number) => { + Show.value.openDailog(title, ruleForm.searchParams.targetType, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + const add=()=>{ + listApi() + } + return { + timeDate, + add, + listApi, + resetForm, + tableData, + currentPage4, + pageSize4, + total, + ruleForm, + handleSizeChange, + handleCurrentChange, + Show, + openD, + activeNames, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 0px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +.tableC { + margin: 0 10%; +} +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/targetDecompositionMonth/index.vue b/src/views/goalManagement/targetDecompositionMonth/index.vue index e69de29..f0510a7 100644 --- a/src/views/goalManagement/targetDecompositionMonth/index.vue +++ b/src/views/goalManagement/targetDecompositionMonth/index.vue @@ -0,0 +1,286 @@ +<template> + <div> + <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <div> + <!--<el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button>--> + <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <div class="tableC"> + <el-tabs v-model="activeNames"> + <el-tab-pane label="目标指标分解" name="1"> + <el-table :data="scope.row.targetDivideDetailList" style="width: 100%"> + <el-table-column align="center" prop="dutyDepartmentName" label="责任部门" /> + <el-table-column align="center" prop="value" label="考核指标" /> + <el-table-column align="center" prop="makerDepartmentName" label="制定人部门" /> + <el-table-column align="center" prop="makeDate" :formatter="timeDate" label="制定日期" /> + <el-table-column align="center" prop="commitPersonName" label="上报人" /> + </el-table> + </el-tab-pane> + </el-tabs> + </div> + </template> + </el-table-column> + <el-table-column label="安全目标指标" align="center" property="qName" sortable /> + <el-table-column property="indexNum" align="center" label="目标指标编号" sortable /> + <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="small" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <Dailog ref="Show" @addList="add"></Dailog> + </div> +</template> +<script lang="ts"> +import { timeDate } from '/@/assets/index.ts'; +import search from '../targetSettings/component/search.vue'; +import Dailog from '../targetDecompositionYear/component/Dailog.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'; +export default defineComponent({ + components: { ElButton, ElInput, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////安全目标指标 + indexNum: '', ////目标指标编号 + targetType: '2', ////指标类型 1:年指标 2:月指标 + divideStatus: '', ////分解状态 1:已分解 2:未分解 + }, + }); + // 下方导航与表格 + const tableData = ref([]); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.indexNum = ''; + listApi() + }; + const listApi = () => { + goalManagementApi() + .getTargetMngList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); + + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const activeNames = ref('1'); + // 打开弹窗 + const Show = ref(); + const openD = (title: String, id: number) => { + Show.value.openDailog(title, ruleForm.searchParams.targetType, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + const add=()=>{ + listApi() + } + return { + timeDate, + add, + listApi, + resetForm, + tableData, + currentPage4, + pageSize4, + total, + ruleForm, + handleSizeChange, + handleCurrentChange, + Show, + openD, + activeNames, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 0px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +.tableC { + margin: 0 10%; +} +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +</style> diff --git a/src/views/goalManagement/targetDecompositionQuarter/index.vue b/src/views/goalManagement/targetDecompositionQuarter/index.vue index e69de29..4f0f36d 100644 --- a/src/views/goalManagement/targetDecompositionQuarter/index.vue +++ b/src/views/goalManagement/targetDecompositionQuarter/index.vue @@ -0,0 +1,286 @@ +<template> + <div> + <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <div> + <!--<el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button>--> + <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <div class="tableC"> + <el-tabs v-model="activeNames"> + <el-tab-pane label="目标指标分解" name="1"> + <el-table :data="scope.row.targetDivideDetailList" style="width: 100%"> + <el-table-column align="center" prop="dutyDepartmentName" label="责任部门" /> + <el-table-column align="center" prop="value" label="考核指标" /> + <el-table-column align="center" prop="makerDepartmentName" label="制定人部门" /> + <el-table-column align="center" prop="makeDate" :formatter="timeDate" label="制定日期" /> + <el-table-column align="center" prop="commitPersonName" label="上报人" /> + </el-table> + </el-tab-pane> + </el-tabs> + </div> + </template> + </el-table-column> + <el-table-column label="安全目标指标" align="center" property="qName" sortable /> + <el-table-column property="indexNum" align="center" label="目标指标编号" sortable /> + <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="small" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <Dailog ref="Show" @addList="add"></Dailog> + </div> +</template> +<script lang="ts"> +import { timeDate } from '/@/assets/index.ts'; +import search from '../targetSettings/component/search.vue'; +import Dailog from '../targetDecompositionYear/component/Dailog.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'; +export default defineComponent({ + components: { ElButton, ElInput, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////安全目标指标 + indexNum: '', ////目标指标编号 + targetType: '4', ////指标类型 1:年指标 2:月指标 + divideStatus: '', ////分解状态 1:已分解 2:未分解 + }, + }); + // 下方导航与表格 + const tableData = ref([]); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.indexNum = ''; + listApi() + }; + const listApi = () => { + goalManagementApi() + .getTargetMngList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); + + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const activeNames = ref('1'); + // 打开弹窗 + const Show = ref(); + const openD = (title: String, id: number) => { + Show.value.openDailog(title, ruleForm.searchParams.targetType, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + const add=()=>{ + listApi() + } + return { + timeDate, + add, + listApi, + resetForm, + tableData, + currentPage4, + pageSize4, + total, + ruleForm, + handleSizeChange, + handleCurrentChange, + Show, + openD, + activeNames, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 0px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +.tableC { + margin: 0 10%; +} +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +</style> diff --git a/src/views/goalManagement/targetDecompositionYear/component/Dailog.vue b/src/views/goalManagement/targetDecompositionYear/component/Dailog.vue index e69de29..c728ad6 100644 --- a/src/views/goalManagement/targetDecompositionYear/component/Dailog.vue +++ b/src/views/goalManagement/targetDecompositionYear/component/Dailog.vue @@ -0,0 +1,262 @@ +<template> + <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" title="目标分解" width="60%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标" size="default"> + <el-input v-model="form.qName" :disabled="disabled"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号" size="default"> + <el-input v-model="form.indexNum" disabled /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度" size="default"> + <el-input v-model="form.year" disabled /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值" size="default"> + <el-input v-model="form.value" disabled /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" class="demo-tabs"> + <el-tab-pane label="目标指标分解" name="1"> + <el-button type="primary" size="default" @click="daiAdd('新增')" :disabled="disabled">新增</el-button> + </el-tab-pane> + </el-tabs> + <el-table :data="formUp.targetDivideDetailList" style="width: 100%"> + <el-table-column align="center" property="dutyDepartmentName" label="责任部门" width="180" /> + <el-table-column align="center" property="value" label="考核指标" width="180" /> + <el-table-column align="center" property="makerDepartmentName" label="制定人部门" /> + <el-table-column align="center" property="makeDate" :formatter="timeDate" label="制定日期" /> + <el-table-column align="center" property="commitPersonName" label="上报人" /> + <el-table-column align="center" label="操作"> + <template #default="scope"> + <el-button link type="primary" @click="daiAdd('查看', scope.row)">查看</el-button> + <el-button link :disabled="disabled" type="primary" @click="daiAdd('修改', scope.row)">修改</el-button> + <el-button link :disabled="disabled" type="primary" @click="Delete(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button type="primary" v-if="disabled == false" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <DailogAdd ref="Show" @onAdd="add"></DailogAdd> + <DailogSearch ref="Shows" @backNum="onNumber"></DailogSearch> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { timeDate } from '/@/assets/index.ts'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogAdd from './DailogAdd.vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus'; +import DailogSearch from '../../../../components/DailogSearch/DailogSearch.vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import { emit } from 'process'; +import { deepClone } from '/@/utils/other'; +export default defineComponent({ + components: { DailogAdd, DailogSearch }, + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const form = ref({ + qName: '', + indexNum: '', + year: '', + value: '', + targetDivideDetailList: [], + }); + const targetType = ref(); + const disabled = ref(false); + const titles = ref(); + const openDailog = (title: string, type: any, id: number) => { + dialogVisible.value = true; + titles.value = title; + targetType.value = type; + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') { + goalManagementApi() + .getTargetMngDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + formUp.targetDivideDetailList = form.value.targetDivideDetailList; + for(let i=0;i<formUp.targetDivideDetailList.length;i++){ + formUp.targetDivideDetailList[i].makeDate=timeC(formUp.targetDivideDetailList[i].makeDate) + } + } else { + ElMessage.error(res.data.msg); + } + }); + } + }; + const timeC = (timestamp: any) => { + let a = new Date(timestamp).getTime(); + const date = new Date(a); + const Y = date.getFullYear() + '-'; + const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + const D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '; + const h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'; + const m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); + const s = date.getSeconds(); // 秒 + const dateString = Y + M + D + h + m +`:${s}`; + // console.log('dateString', dateString); // > dateString 2021-07-06 14:23 + return dateString; + }; + const onNumber = (val: object) => { + form.value = val; + }; + // 导航 + const activeName = ref('1'); + // 表格 + const tableData = ref([]); + // 新增弹窗 + const index = ref<any>(); + const Show = ref(); + const daiAdd = (title: string, data: any) => { + index.value = formUp.targetDivideDetailList.indexOf(data); + Show.value.openDailog(title, data); + }; + const formUp = reactive({ + targetId: '', //关联的目标指标/外键 + delTargetDivideDetails: '', //要删除的目标指标分解ID,多个用逗号隔开 + targetDivideDetailList: [], //目标指标分解列表 + }); + + const add = (val: any) => { + const item = deepClone(val); + console.log(item) + if (index.value == -1) { + formUp.targetDivideDetailList.push(item); + } else { + formUp.targetDivideDetailList[index.value] = item; + } + + // let obj=JSON.parse(JSON.stringify(form.value)) + }; + // 新增 + const submitForm = () => { + formUp.delTargetDivideDetails = arr.value.toString(); + formUp.targetId = form.value.id; + dialogVisible.value = false; + for(let i=0;i<formUp.targetDivideDetailList.length;i++){ + delete formUp.targetDivideDetailList[i].dutyDepartmentName + delete formUp.targetDivideDetailList[i].makerDepartmentName + } + goalManagementApi() + .gettargetDivideDetail(formUp) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('addList'); + } else { + ElMessage.error(res.data.msg); + } + }); + form.value = { + qName: '', + indexNum: '', + year: '', + value: '', + targetDivideDetailList: [], + }; + tableData.value = []; + formUp.targetId = ''; + formUp.delTargetDivideDetails = ''; + formUp.targetDivideDetailList = []; + }; + const arr = ref([]); + // 删除 + const Delete = (data: any) => { + formUp.targetDivideDetailList.splice(form.value.targetDivideDetailList.indexOf(data), 1); + formUp.targetId = data.targetId; + arr.value.push(data.id); + }; + // 安全目标指标弹窗 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(targetType.value); + }; + // 关闭 + const resetForm = () => { + dialogVisible.value = false; + form.value = { + qName: '', + indexNum: '', + year: '', + value: '', + targetDivideDetailList: [], + }; + tableData.value = []; + formUp.targetId = ''; + formUp.delTargetDivideDetails = ''; + formUp.targetDivideDetailList = []; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + // 时间格式处理 + // const timeDate = (data: any) => { + // let result = new Date(data).getTime(); + // return result; + // }; + return { + timeC, + index, + timeDate, + arr, + form, + dialogVisible, + openDailog, + activeName, + tableData, + Show, + daiAdd, + Shows, + daiInpt, + Search, + full, + toggleFullscreen, + FullScreen, + onNumber, + targetType, + disabled, + resetForm, + titles, + add, + formUp, + submitForm, + Delete, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> diff --git a/src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue b/src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue index e69de29..52680b0 100644 --- a/src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue +++ b/src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue @@ -0,0 +1,308 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" :title="titles" width="50%" draggable @close="resetForm(ruleFormRef)"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" label-width="120px" ref="ruleFormRef" :rules="rules"> + <el-row> + <el-col :span="11"> + <el-form-item label="目标分类" prop="targetTypeId" size="default"> + <el-select v-model="form.targetTypeId" class="m-2" placeholder="请选择" style="width:100%"> + <el-option v-for="item in options" :key="item.id" :label="item.typeName" :value="item.id" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="责任人" prop="dutyPersonName" size="default"> + <el-input v-model="form.dutyPersonName"> + <template #append> <el-button :icon="Search" @click="openUser(1)" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="责任部门" prop="dutyDepartmentId" size="default"> + <el-tree-select + v-model="form.dutyDepartmentId" + check-strictly="true" + @current-change="dutyName" + :data="data" + class="w100" + :props="propse" + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="考核指标" prop="value" size="default"> + <el-input v-model.number="form.value" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="制定人部门" prop="makerDepartmentId" size="default"> + <el-tree-select + v-model="form.makerDepartmentId" + :data="data" + @current-change="makerName" + check-strictly="true" + class="w100" + :props="propse" + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="制定日期" prop="makeDate" size="default"> + <el-date-picker + v-model="form.makeDate" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + type="datetime" + placeholder="请选择" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="上报人" prop="commitPersonName" size="default"> + <el-input v-model="form.commitPersonName"> + <template #append> <el-button :icon="Search" @click="openUser(2)" /> </template + ></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="计划措施" prop="commitPersonName" size="default"> + <el-input v-model="form.planDesc"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm(ruleFormRef)" :disabled="disabled" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUser ref="Show" @SearchUser="onUser"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, onMounted } from 'vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus'; +import DailogSearchUser from '../../../../components/DailogSearchUser/index.vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { DailogSearchUser }, + setup(props, { emit }) { + const ruleFormRef = ref<FormInstance>(); + const form = ref({ + dutyDepartmentId: '', ////责任部门/外键 + makerDepartmentId: '', ////制定人部门/外键 + commitPersonId: '', ////上报人/外键 + commitPersonName: '', + value: '', ////考核指标值 + makeDate: '', ////制定日期 + targetTypeId: '', ///目标分类 + dutyPersonId: '', ///责任人id + dutyPersonName: '', ///责任人 + planDesc: '', ///计划措施 + }); + //部门 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + onMounted(() => { + department(); + allList() + }); + const disabled = ref(false); + // 开启弹窗 + const titles = ref(); + const dialogVisible = ref(false); + const openDailog = (title: string, data: any) => { + titles.value = `${title}目标指标分解`; + if (title == '查看') { + disabled.value = true; + form.value = data; + } else if (title == '修改') { + disabled.value = false; + form.value = data; + } else { + disabled.value = false; + } + dialogVisible.value = true; + }; + // 分类 All + const allList=()=>{ + goalManagementApi().gettargetClassAll({}).then(res=>{ + if(res.data.code==200){ + options.value=res.data.data + }else{ + ElMessage.error(res.data.msg); + } + }) + } + // 开启用户弹窗 + const Show = ref(); + const openUser = (type:any) => { + Show.value.openDailog(type); + }; + const rules = reactive<FormRules>({ + targetTypeId: [ + { + required: true, + message: '目标分类不能为空', + trigger: 'blur', + }, + ], + dutyPersonName: [ + { + required: true, + message: '责任人不能为空', + trigger: 'blur', + }, + ], + dutyDepartmentId: [ + { + required: true, + message: '责任部门不能为空', + trigger: 'blur', + }, + ], + makerDepartmentId: [ + { + required: true, + message: '制定人部门不能为空', + trigger: 'blur', + }, + ], + commitPersonId: [ + { + required: true, + message: '上报人不能为空', + trigger: 'blur', + }, + ], + value: [ + { + required: true, + message: '考核指标值不能为空', + trigger: 'blur', + }, + { + type: 'number', + message: '考核指标值只能为数字类型', + trigger: 'blur', + }, + ], + makeDate: [ + { + required: true, + message: '制定日期不能为空', + trigger: 'blur', + }, + ], + commitPersonName: [], + }); + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + emit('onAdd', form.value); + dialogVisible.value = false; + // handleClose(formEl) + } else { + console.log('error submit!', fields); + } + }); + }; + + const resetForm = (formEl: FormInstance | undefined) => { + // console.log(formEl); + if (!formEl) return; + formEl.clearValidate(); + dialogVisible.value = false; + form.value = {}; + }; + // const handleClose = (formEl: any) => { + // formEl.resetFields(); + // }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + const data = ref(); + const onUser = (e: any, type: any) => { + console.log(e); + if (type == 1) { + form.value.dutyPersonId = e.uid; + form.value.dutyPersonName = e.realName; + } else if (type == 2) { + form.value.commitPersonId = e.uid; + form.value.commitPersonName = e.realName; + } + }; + const makerName = (data: any) => { + form.value.makerDepartmentName = data.depName; + }; + const dutyName = (data: any) => { + form.value.dutyDepartmentName = data.depName; + }; + const options = ref([]); + return { + options, + allList, + disabled, + makerName, + dutyName, + titles, + // handleClose, + form, + propse, + department, + dialogVisible, + openDailog, + Show, + openUser, + Search, + full, + toggleFullscreen, + FullScreen, + data, + onUser, + ruleFormRef, + rules, + submitForm, + resetForm, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> diff --git a/src/views/goalManagement/targetDecompositionYear/index.vue b/src/views/goalManagement/targetDecompositionYear/index.vue index e69de29..e840ca6 100644 --- a/src/views/goalManagement/targetDecompositionYear/index.vue +++ b/src/views/goalManagement/targetDecompositionYear/index.vue @@ -0,0 +1,284 @@ +<template> + <div> + <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <div class="btns"> + <div> + <!--<el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button>--> + <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain + @click="openD('修改', deletAll[0])">修改</el-button> + <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button> + </div> + </div> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <div class="tableC"> + <el-tabs v-model="activeNames"> + <el-tab-pane label="目标指标分解" name="1"> + <el-table :data="scope.row.targetDivideDetailList" style="width: 100%"> + <el-table-column align="center" prop="dutyDepartmentName" label="责任部门" /> + <el-table-column align="center" prop="value" label="考核指标" /> + <el-table-column align="center" prop="makerDepartmentName" label="制定人部门" /> + <el-table-column align="center" prop="makeDate" :formatter="timeDate" label="制定日期" /> + <el-table-column align="center" prop="commitPersonName" label="上报人" /> + </el-table> + </el-tab-pane> + </el-tabs> + </div> + </template> + </el-table-column> + <el-table-column label="安全目标指标" align="center" property="qName" sortable /> + <el-table-column property="indexNum" align="center" label="目标指标编号" sortable /> + <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="small" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <Dailog ref="Show" @addList="add"></Dailog> + </div> +</template> +<script lang="ts"> +import { timeDate } from '/@/assets/index.ts'; +import Dailog from './component/Dailog.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { ElButton, ElInput, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////安全目标指标 + indexNum: '', ////目标指标编号 + targetType: '1', ////指标类型 1:年指标 2:月指标 + divideStatus: '', ////分解状态 1:已分解 2:未分解 + }, + }); + // 下方导航与表格 + const tableData = ref([]); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.indexNum = ''; + listApi() + }; + const listApi = () => { + goalManagementApi() + .getTargetMngList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); + + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const activeNames = ref('1'); + // 打开弹窗 + const Show = ref(); + const openD = (title: String, id: number) => { + Show.value.openDailog(title,ruleForm.searchParams.targetType, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + const add=()=>{ + listApi() + } + return { + timeDate, + listApi, + add, + resetForm, + tableData, + currentPage4, + pageSize4, + total, + ruleForm, + handleSizeChange, + handleCurrentChange, + Show, + openD, + activeNames, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 0px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +.tableC { + margin: 0 10%; +} +</style> diff --git a/src/views/goalManagement/targetEscalation/component/Dailog.vue b/src/views/goalManagement/targetEscalation/component/Dailog.vue index e69de29..bf223b6 100644 --- a/src/views/goalManagement/targetEscalation/component/Dailog.vue +++ b/src/views/goalManagement/targetEscalation/component/Dailog.vue @@ -0,0 +1,65 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" title="查看审批流程" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-table :data="tableData" style="width: 100%"> + <el-table-column property="workName" label="审批人" sortable></el-table-column> + <el-table-column property="title" label="审批标题" sortable></el-table-column> + <el-table-column property="approvePersonName" label="编写人" sortable></el-table-column> + <el-table-column property="approveMemo" label="审批意见" sortable></el-table-column> + </el-table> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false">关闭</el-button> + <!-- <el-button type="primary" @click="dialogVisible = false">确定</el-button> --> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref } from 'vue'; +import { FullScreen } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + setup() { + const dialogVisible = ref(false); + const form = ref({ + pageSize: 10, + pageIndex: 1, + searchParams: { + relateId: '', ////检查记录ID + relateType:"", + gmtCreate:[], + }, + }); + const tableData = ref(); + const openDailog = (data: any,type:number) => { + dialogVisible.value = true; + form.value.searchParams.relateId=data + form.value.searchParams.relateType=type + goalManagementApi().getworkApproveListCode(form.value).then(res=>{ + if(res.data.code==200){ + tableData.value=res.data.data + } + }) + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + tableData, + openDailog, + full, + toggleFullscreen, + form, + FullScreen, + }; + }, +}); +</script> diff --git a/src/views/goalManagement/targetEscalation/component/TypeDailog.vue b/src/views/goalManagement/targetEscalation/component/TypeDailog.vue index e69de29..02c9afb 100644 --- a/src/views/goalManagement/targetEscalation/component/TypeDailog.vue +++ b/src/views/goalManagement/targetEscalation/component/TypeDailog.vue @@ -0,0 +1,341 @@ +<template> + <el-dialog :title="titleName" v-model="dialogVisible" @click="resetForm" width="70%" draggable :fullscreen="full" :close-on-click-modal="false"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="form" size="default" :disabled="disabled" label-width="120px"> + <div v-if="titleName == '发起审批'"> + <el-row> + <el-col :span="11"> + <el-form-item label="审批名称" prop="workName" size="default"> + <el-input v-model="form.workName" :disabled="disabledT" placeholder="请填写名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="审批标题" prop="title" size="default"> + <el-input v-model="form.title" :disabled="disabledT" placeholder="请填写标题"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="审批人" prop="approvePersonId" size="default"> + <el-input v-model="form.approvePersonName" :disabled="disabledT" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"></el-col> + </el-row> + </div> + <div v-if="titleName != '发起审批'"> + <el-row> + <el-col :span="11"> + <el-form-item label="审批名称" prop="workName" size="default"> + <el-input v-model="formUp.workName" :disabled="disabledT" placeholder="请填写名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="审批标题" prop="title" size="default"> + <el-input v-model="formUp.title" :disabled="disabledT" placeholder="请填写标题"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="审批人" prop="approvePersonId" size="default"> + <el-input v-model="formUp.approvePersonName" :disabled="disabledT" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"></el-col> + </el-row> + </div> + <el-table :data="tableData" style="width: 90%;margin:20px auto"> + <el-table-column align="center" type="index" label="序号" width="80" /> + <el-table-column align="center" prop="makerDepartmentName" label="责任部门" /> + <el-table-column align="center" prop="value" label="考核指标" /> + <el-table-column align="center" prop="dutyDepartmentName" label="制定部门" /> + <el-table-column align="center" prop="makeDate" :formatter="timeDate" label="制定日期" /> + <el-table-column align="center" label="检查值"> + <template #default="scope"> + <el-input v-model="scope.row.commitValue" :disabled="disabledType" /> + </template> + </el-table-column> + <el-table-column align="center" label="检查人"> + <template #default="scope"> + <el-input v-model="scope.row.personName" :disabled="disabledType"> + <template #append> <el-button :icon="Search" @click="openUsers(scope.row)" /> </template + ></el-input> + </template> + </el-table-column> + </el-table> + <div v-if="typeScope"> + <el-row> + <el-col> + <el-form-item label="审批结果" prop="authorUid"> + <el-radio-group :disabled="disabled" v-model="form.approveResult"> + <el-radio :label="0">不通过</el-radio> + <el-radio :label="1">通过</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="审批意见" prop="approveMemo"> + <el-input v-model="form.approveMemo" :disabled="disabled" type="textarea" placeholder="请填写审批意见"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="是否完成" prop="complete"> + <el-radio-group v-model="form.approveStatus" :disabled="disabled"> + <el-radio :label="3">是</el-radio> + <el-radio :label="2">否</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + <div v-if="form.approveStatus == 2"> + <el-row> + <el-col :span="11"> + <el-form-item label="审批名称" prop="workName" size="default"> + <el-input v-model="form.workName" placeholder="请填写名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="审批标题" prop="title" size="default"> + <el-input v-model="form.title" placeholder="请填写标题"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="审批人" prop="approvePersonId" size="default"> + <el-input v-model="form.approvePersonName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"></el-col> + </el-row> + </div> + </div> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button size="default" type="primary" :disabled="disabled" @click="submitForm">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser" /> + <DailogSearchUser ref="Show" @SearchUser="onUsers"></DailogSearchUser> +</template> +<script lang="ts"> +import { ref, defineComponent } from 'vue'; +import { timeDate } from '/@/assets/index.ts'; +import DailogSearchUserManger from '/@/components/DailogSearchUserManger/index.vue'; +import { ElMessage } from 'element-plus'; +import DailogSearchUser from '../../../../components/DailogSearchUser/index.vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +export default defineComponent({ + components: { DailogSearchUserManger, DailogSearchUser }, + setup(props, { emit }) { + const dialogVisible = ref(false); + const form = ref({ + workName: '', // 审批名称 + title: '', //审批标题 + approvePersonId: '', + approvePersonName: '', + approveStatus: "", + approveResult: '', + relateType: 1, + relateId: '', + relateDesc: '', + }); + // 提交 + const submitForm = () => { + if (titleName.value == '发起审批') { + let arr = []; + for (let i = 0; i < tableData.value.length; i++) { + arr.push({ + id: tableData.value[i].id, + value: tableData.value[i].commitValue, + personName: tableData.value[i].personName, + personId: tableData.value[i].personId, + }); + } + form.value.approveStatus=2 + form.value.relateDesc = JSON.stringify(arr); + goalManagementApi() + .getworkApproveAdd(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('onType'); + } else { + ElMessage.error(res.data.msg); + } + }); + } else if (titleName.value == '审批') { + goalManagementApi() + .getworkApproveUpdata(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('onType'); + } else { + ElMessage.error(res.data.msg); + } + }); + } + dialogVisible.value = false; + disabled.value = false; + disabledT.value = false; + form.value = {}; + formUp.value = {}; + }; + // 关闭 + const resetForm = () => { + disabled.value = false; + disabledT.value = false; + form.value = {}; + formUp.value = {}; + tableData.value=[]; + dialogVisible.value = false; + }; + const titleName = ref(); + const typeScope = ref(); + const disabledT = ref(false); + const disabled = ref(false); + const formUp = ref({ + workName: '', + title: '', + approvePersonName: '', + }); + const tableData = ref([]); + const disabledType=ref() + // 打开弹窗 + const openDialog = (title: string, name: any, id: number, type: number,data:any) => { + dialogVisible.value = true; + titleName.value = title; + form.value.relateType = type; + if (title == '发起审批') { + form.value.relateId = id; + typeScope.value = false; + goalManagementApi() + .getTargetMngDetail(id) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data.targetDivideDetailList; + } else { + ElMessage.error(res.data.msg); + } + }); + disabledType.value=false + } else if (title == '审批' || title == '查看审批') { + goalManagementApi() + .getworkApproveDetail(id) + .then((res) => { + if (res.data.code == 200) { + if (data.approveStatus==2&&data.checkApprove==true){ + disabled.value = false; + } else if(data.approveStatus==2&&data.checkApprove==false) { + disabled.value = true; + } + form.value = res.data.data; + form.value.approveStatus = ''; + formUp.value.workName = form.value.workName; + formUp.value.title = form.value.title; + formUp.value.approvePersonName = form.value.approvePersonName; + form.value.workName="" + form.value.title="" + form.value.approvePersonName="" + tableData.value=res.data.data.targetDivideDetailList + console.log(form.value.approvePersonName) + } + }); + disabledType.value=true + typeScope.value = true; + disabledT.value = true; + } + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + const index = ref(); + const Show = ref(); + const openUsers = (id: any) => { + index.value = tableData.value.indexOf(id); + Show.value.openDailog(); + }; + const onUser = (val: any) => { + form.value.approvePersonId = val[0].uid; + form.value.approvePersonName = val[0].realName; + }; + const onUsers = (val: any) => { + tableData.value[index.value].personName = val.realName; + tableData.value[index.value].personId = val.uid; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + disabledType, + index, + Show, + onUsers, + openUsers, + formUp, + timeDate, + tableData, + onUser, + dialogVisible, + form, + disabledT, + submitForm, + resetForm, + titleName, + typeScope, + disabled, + openDialog, + userRef, + openUser, + full, + toggleFullscreen, + Search, + FullScreen, + }; + }, +}); +</script> +<style> +.el-row { + padding-bottom: 20px; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/targetEscalation/index.vue b/src/views/goalManagement/targetEscalation/index.vue index e69de29..22535be 100644 --- a/src/views/goalManagement/targetEscalation/index.vue +++ b/src/views/goalManagement/targetEscalation/index.vue @@ -0,0 +1,199 @@ +<template> + <div> + <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> + <el-tab-pane label="检查" name="1"> </el-tab-pane> + <el-tab-pane label="上报" name="2"></el-tab-pane> + </el-tabs> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%"> + <el-table-column label="安全目标指标" align="center" property="qName" sortable /> + <el-table-column property="indexNum" align="center" label="目标指标编号" sortable /> + <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> + <el-table-column v-if="activeName == 1" label="操作" align="center" show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="EditPen" v-if="scope.row.approveStatus==null" @click="TypeDailog('发起审批','检查',scope.row.id,1)">发起审批</el-button> + <el-button link type="primary" size="default" :icon="EditPen" v-if="scope.row.approveStatus==2&&scope.row.checkApprove==true" @click="TypeDailog('审批',scope.row.id,scope.row.approveId,1,scope.row)">审批</el-button> + <el-button link type="primary" size="default" :icon="EditPen" v-if="scope.row.approveStatus==2&&scope.row.checkApprove==false" @click="TypeDailog('查看审批',scope.row.id,scope.row.approveId,1,scope.row)">查看审批</el-button> + <el-button link type="primary" size="default" :icon="EditPen" v-if="scope.row.approveStatus==3" @click="openDai(scope.row.id,1)" >查看审批流程</el-button> + </template> + </el-table-column> + <el-table-column v-if="activeName == 2" label="操作" align="center" show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="EditPen" v-if="scope.row.approveStatus==null" @click="TypeDailog('发起审批','检查',scope.row.id,2)">发起审批</el-button> + <el-button link type="primary" size="default" :icon="EditPen" v-if="scope.row.approveStatus==2&&scope.row.checkApprove==true" @click="TypeDailog('审批',scope.row.id,scope.row.approveId,2,scope.row)">审批</el-button> + <el-button link type="primary" size="default" :icon="EditPen" v-if="scope.row.approveStatus==2&&scope.row.checkApprove==false" @click="TypeDailog('查看审批',scope.row.id,scope.row.approveId,2,scope.row)">查看审批</el-button> + <el-button link type="primary" size="default" :icon="EditPen" v-if="scope.row.approveStatus==3" @click="openDai(scope.row.id,2)" >查看审批流程</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <Dailog ref="Show"></Dailog> + <TypeDailog ref="TypeD" @onType="typeAlign" /> + </div> +</template> +<script lang="ts"> +import Dailog from './component/Dailog.vue'; +import TypeDailog from './component/TypeDailog.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import { useRouter } from 'vue-router'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { ElButton, ElInput, Dailog,TypeDailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////安全目标指标 + indexNum: '', ////目标指标编号 + targetType: 1, ////指标类型 1:年指标 2:月指标 + divideStatus: 1, ////分解状态 1:已分解 2:未分解 + relateType: 1, ////关联业务类型 1:目标检查 2:目标上报 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.indexNum = ''; + }; + const listApi = () => { + goalManagementApi() + .getworkApproveList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + const handleClick = (val: any) => { + // let targetType = JSON.parse(JSON.stringify(val)); + ruleForm.searchParams.relateType = val.paneName; + listApi(); + }; + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const activeName = ref<any>('1'); + // 记录弹窗 + const Show = ref(); + const openDai = (data: any,num:number) => { + Show.value.openDailog(data,num); + }; + // 发起审批弹窗 + const TypeD = ref(); + const TypeDailog = (title:string,name:string,id:number,type:number,data:any) => { + TypeD.value.openDialog(title,name,id,type,data); + }; + const typeAlign=()=>{ + listApi(); + } + return { + TypeD, + typeAlign, + TypeDailog, + activeName, + total, + handleClick, + ruleForm, + listApi, + onAddorUpdata, + tableData, + resetForm, + currentPage4, + pageSize4, + handleSizeChange, + handleCurrentChange, + Show, + openDai, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + EditPen, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 0px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/targetImprovements/component/Dailogprove.vue b/src/views/goalManagement/targetImprovements/component/Dailogprove.vue index e69de29..ee0c885 100644 --- a/src/views/goalManagement/targetImprovements/component/Dailogprove.vue +++ b/src/views/goalManagement/targetImprovements/component/Dailogprove.vue @@ -0,0 +1,105 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" title="Tips" width="50%" :before-close="handleClose"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标" size="default"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号" size="default"> + <el-input v-model="form.name" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度" size="default"> + <el-input v-model="form.name" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="责任部门" size="default"> + <el-input v-model="form.name" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="改进期限" size="default"> + <el-date-picker v-model="form.date1" type="date" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2" > + <el-form-item label="发起人" size="default"> + <el-input v-model="model"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="发起时间" size="default"> + <el-date-picker v-model="form.date1" type="date" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" class="demo-tabs"> + <el-tab-pane label="目标指标" name="first"></el-tab-pane> + </el-tabs> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false">关闭</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import { Plus, Delete, Upload, Download, Refresh, View, Search, FullScreen } from '@element-plus/icons-vue'; +export default defineComponent({ + setup() { + const dialogVisible = ref(false); + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + const openDailog = () => { + dialogVisible.value = true; + }; + const activeName = ref('first'); + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + form, + openDailog, + activeName, + Search, + full, + toggleFullscreen, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/targetImprovements/index.vue b/src/views/goalManagement/targetImprovements/index.vue index e69de29..b273902 100644 --- a/src/views/goalManagement/targetImprovements/index.vue +++ b/src/views/goalManagement/targetImprovements/index.vue @@ -0,0 +1,307 @@ +<template> +<div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.pass" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button type="primary" size="default" @click="submitForm(ruleFormRef)">查询</el-button> + <el-button size="default" @click="resetForm(ruleFormRef)">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> + <el-tab-pane label="发起改进" name="1"> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column label="安全目标指标" align="center" sortable> + <template #default="scope">{{ scope.row.date }}</template> + </el-table-column> + <el-table-column property="name" align="center" label="目标指标编号" sortable /> + <el-table-column property="address" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="责任部门" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="考核指标" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="上报值" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="考核时间" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="考核结果" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="200" sortable show-overflow-tooltip> + <template #default> + <el-button link type="primary" size="default" :icon="View" @click="handleClick">查看</el-button> + <el-button link type="primary" size="default" :icon="Delete">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[100, 200, 300, 400]" + :small="small" + :disabled="disabled" + :background="background" + layout="total, sizes, prev, pager, next, jumper" + :total="400" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-tab-pane> + <el-tab-pane label="整改" name="2"> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column label="安全目标指标" align="center" sortable> + <template #default="scope">{{ scope.row.date }}</template> + </el-table-column> + <el-table-column property="name" align="center" label="目标指标编号" sortable /> + <el-table-column property="address" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="责任部门" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="考核指标" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="改进期限" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="发起人" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="发起时间" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="200" sortable show-overflow-tooltip> + <template #default> + <el-button link type="primary" size="default" :icon="View" @click="openDai">查看</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="jump">整改上报</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[100, 200, 300, 400]" + :small="small" + :disabled="disabled" + :background="background" + layout="total, sizes, prev, pager, next, jumper" + :total="400" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-tab-pane> + <el-tab-pane label="验证" name="3"> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column label="安全目标指标" align="center" sortable> + <template #default="scope">{{ scope.row.date }}</template> + </el-table-column> + <el-table-column property="name" align="center" label="目标指标编号" sortable /> + <el-table-column property="address" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="责任部门" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="考核指标" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="整改值" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="整改时间" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="200" sortable show-overflow-tooltip> + <template #default> + <el-button link type="primary" size="default" :icon="View" @click="handleClick">查看</el-button> + <el-button link type="primary" size="default" :icon="Delete">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[100, 200, 300, 400]" + :small="small" + :disabled="disabled" + :background="background" + layout="total, sizes, prev, pager, next, jumper" + :total="400" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-tab-pane> + <el-tab-pane label="完成" name="4"> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column label="安全目标指标" align="center" sortable> + <template #default="scope">{{ scope.row.date }}</template> + </el-table-column> + <el-table-column property="name" align="center" label="目标指标编号" sortable /> + <el-table-column property="address" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="责任部门" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="考核指标" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="整改值" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="整改时间" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="验证结果" align="center" sortable show-overflow-tooltip /> + <el-table-column property="address" label="验证日期" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="200" sortable show-overflow-tooltip> + <template #default> + <el-button link type="primary" size="default" :icon="View" @click="handleClick">查看</el-button> + <el-button link type="primary" size="default" :icon="Delete">审批进度</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[100, 200, 300, 400]" + :small="small" + :disabled="disabled" + :background="background" + layout="total, sizes, prev, pager, next, jumper" + :total="400" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-tab-pane> + </el-tabs> + </div> + <Dailogprove ref="Show"></Dailogprove> + </div> +</template> +<script lang="ts"> +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View } from '@element-plus/icons-vue'; +interface User { + date: string; + name: string; + address: string; +} +import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'; +import Dailogprove from './component/Dailogprove.vue'; +import { useRouter } from 'vue-router'; +export default defineComponent({ + components: { ElButton, ElInput,Dailogprove}, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pass: '', + checkPass: '', + }); + const resetForm = (formEl: FormInstance | undefined) => { + console.log(!formEl); + if (!formEl) return; + formEl.resetFields(); + }; + // 下方导航与表格 + const activeName = ref('1'); + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + const formatter = (row: User, column: TableColumnCtx<User>) => { + return row.address; + }; + + const tableData: User[] = [ + { + date: '2016-05-03', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { + date: '2016-05-02', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { + date: '2016-05-04', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { + date: '2016-05-01', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { + date: '2016-05-08', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { + date: '2016-05-06', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + { + date: '2016-05-07', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const currentPage4 = ref(4); + const pageSize4 = ref(100); + const small = ref(false); + const disabled = ref(false); + const background = ref(false); + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`); + }; + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`); + }; + const Show=ref() + const openDai=()=>{ + Show.value.openDailog() + } + const router=useRouter() + const jump=()=>{ + router.push({ + path:"/processForms" + }) + } + return { + ruleForm, + resetForm, + activeName, + handleClick, + tableData, + formatter, + currentPage4, + pageSize4, + handleSizeChange, + handleCurrentChange, + small, + disabled, + background, + Show, + router, + jump, + openDai, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 10px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/targetSettings/component/dailogAdd.vue b/src/views/goalManagement/targetSettings/component/dailogAdd.vue index e69de29..8ab66ca 100644 --- a/src/views/goalManagement/targetSettings/component/dailogAdd.vue +++ b/src/views/goalManagement/targetSettings/component/dailogAdd.vue @@ -0,0 +1,284 @@ +<template> + <el-dialog v-model="Shows" @close="handleClose(ruleFormRef)" :fullscreen="full" :title="titles" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" ref="ruleFormRef" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标项" prop="qName" size="default"> + <el-input v-model="form.qName" placeholder="请填写安全目标项" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标编号" prop="indexNum" size="default"> + <el-input v-model="form.indexNum" placeholder="请填写目标编号" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度" prop="year" size="default"> + <el-input v-model.number="form.year" maxlength="8" placeholder="请填写年度" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值" prop="value" size="default"> + <el-input v-model.number="form.value" placeholder="请填写指标值"> + <template #prepend> + <el-select v-model="form.valueSign " placeholder="请选择" style="width: 115px"> + <el-option label="大于" :value="1" /> + <el-option label="等于" :value="2" /> + <el-option label="小于" :value="3" /> + </el-select> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="指标级别" size="default" prop="level"> + <el-select v-model="form.level" placeholder="请选择" style="width: 100%"> + <el-option label="公司级" :value="1">公司级</el-option> + <el-option label="部门分厂级" :value="2">部门分厂级</el-option> + <el-option label="工段班组级" :value="3">工段班组级</el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="完成期限" size="default" prop="completeDate"> + <el-date-picker + v-model="form.completeDate" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + type="datetime" + placeholder="请选择" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="目标制定部门" size="default" prop=""> + <el-tree-select + v-model="form.makerDepartmentId" + :data="data" + @current-change="makerName" + check-strictly="true" + class="w100" + :props="propse" + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> </el-col> + </el-row> + <el-form-item label="备注信息" prop="memo"> + <el-input v-model="form.memo" size="default" type="textarea" /> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button type="primary" v-if="titles == '查看目标设定' ? false : true" @click="submitForm(ruleFormRef)" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { ref, toRefs, reactive, onMounted, watch, defineComponent } from 'vue'; +// import { timeDate } from '/@/assets/index.ts'; +import screenfull from 'screenfull'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus'; +import type { FormInstance, FormRules } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View, Search, FullScreen } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + setup(props, { emit }) { + let Shows = ref(false); + const ruleFormRef = ref<FormInstance>(); + const form = ref({ + indexNum: '', //目标指标编号 + qName: '', //安全目标指标 + year: '', //年度 + level: '', ////指标级别 1:公司级 2:部门分厂级 3:工段班组级 + memo: '', ////备注信息 + targetType: '', ////指标类型 1:年指标 2:月指标 + completeDate: '', ////完成期限 + divideStatus: '2', ////分解状态 1:已分解 2:未分解 + value: '', ////指标值 + makerDepartmentId: '', + valueSign:"" + }); + const titles = ref(); + const disabled = ref(false); + const titleT = ref(); + // 打开弹窗 + const openDialog = (title: string, value: any, id: number) => { + department(); + Shows.value = true; + titleT.value = title; + titles.value = `${title}目标设定`; + form.value.targetType = value; + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') + goalManagementApi() + .getTargetMngDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + form.value.completeDate = timeC(form.value.completeDate); + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const timeC = (timestamp: any) => { + let a = new Date(timestamp).getTime(); + const date = new Date(a); + const Y = date.getFullYear() + '-'; + const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + const D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '; + const h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'; + const m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); + const s = date.getSeconds(); // 秒 + const dateString = Y + M + D + h + m + `:${s}`; + // console.log('dateString', dateString); // > dateString 2021-07-06 14:23 + return dateString; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + const rules = reactive<FormRules>({ + qName: [ + { + required: true, + message: '安全目标项不能为空', + trigger: 'change', + }, + ], + indexNum: [ + { + required: true, + message: '目标编号不能为空', + trigger: 'change', + }, + ], + year: [ + { + required: true, + message: '年度不能为空', + trigger: 'change', + }, + ], + value: [ + { + required: true, + message: '指标值不能为空', + trigger: 'change', + }, + { + type: 'number', + message: '指标值只能为数字类型', + trigger: 'change', + }, + ], + level: [], + completeDate: [], + memo: [], + }); + // 提交 + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + if (titleT.value == '新建') { + delete form.value.id; + } + Shows.value = false; + goalManagementApi() + .getTargetMngAddOrupdata(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('navAddorUpdata'); + } else { + ElMessage.error(res.data.msg); + formEl.resetFields(); + } + }); + formEl.resetFields(); + } else { + console.log('error submit!', fields); + } + }); + }; + // 取消 + const resetForm = (formEl: FormInstance | undefined) => { + if (!formEl) return; + formEl.resetFields(); + Shows.value = false; + }; + const handleClose = (formEl: FormInstance | undefined) => { + formEl.resetFields(); + }; + //部门 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + const data = ref(); + const makerName = (data: any) => { + form.value.makerDepartmentName = data.depName; + }; + return { + department, + propse, + data, + makerName, + timeC, + openDialog, + handleClose, + titles, + titleT, + // timeDate, + Shows, + form, + full, + disabled, + toggleFullscreen, + rules, + ruleFormRef, + submitForm, + resetForm, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/targetSettings/component/search.vue b/src/views/goalManagement/targetSettings/component/search.vue index e69de29..35b1a6a 100644 --- a/src/views/goalManagement/targetSettings/component/search.vue +++ b/src/views/goalManagement/targetSettings/component/search.vue @@ -0,0 +1,52 @@ +<template> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.pass" size="default" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.checkPass" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="submitForm(ruleFormRef)">查询</el-button> + <el-button size="default" @click="resetForm(ruleFormRef)">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> +</template> +<script lang="ts"> +import { ref, reactive, defineComponent } from 'vue'; +import { + FormInstance, +} from "element-plus"; +export default defineComponent({ + setup() { + // 搜索条件 + const ruleForm = reactive({ + pass: '', + checkPass: '', + }); + const resetForm = (formEl: FormInstance | undefined) => { + console.log(!formEl); + if (!formEl) return; + formEl.resetFields(); + }; + return { + ruleForm, + resetForm + }; + }, +}); +</script> +<style scoped> + .topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +</style> \ No newline at end of file diff --git a/src/views/goalManagement/targetSettings/index.vue b/src/views/goalManagement/targetSettings/index.vue index e69de29..0086c8e 100644 --- a/src/views/goalManagement/targetSettings/index.vue +++ b/src/views/goalManagement/targetSettings/index.vue @@ -0,0 +1,300 @@ +<template> + <div> + <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" /> + </el-form-item> + </el-col> + <el-col :span="16"> + <el-form-item> + <el-button type="primary" size="default" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="minCenter"> + <el-tabs v-model="ruleForm.searchParams.targetType" class="demo-tabs" @tab-click="handleClick"> + <div class="btns"> + <div> + <el-button type="primary" size="default" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button type="danger" :disabled="danger" size="default" @click="onDeleteAll" :icon="Delete" plain>删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="upButton"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <el-tab-pane label="目标定制(年)" name="1"> </el-tab-pane> + <el-tab-pane label="目标定制(月)" name="2"></el-tab-pane> + <el-tab-pane label="目标定制(半年)" name="3"></el-tab-pane> + <el-tab-pane label="目标定制(季度)" name="4"></el-tab-pane> + </el-tabs> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column label="序号" align="center" type="index" width="70" /> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column label="安全目标指标" align="center" property="qName" sortable /> + <el-table-column property="indexNum" align="center" label="目标指标编号" sortable /> + <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip /> + <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip /> + <el-table-column property="level" label="指标级别" align="center" sortable show-overflow-tooltip /> + <el-table-column property="completeDate" label="完成期限" align="center" :formatter="timeDate" sortable show-overflow-tooltip /> + <el-table-column label="状态" align="center" sortable show-overflow-tooltip> + <template #default="scope"> + <span v-if="scope.row.divideStatus == 1">已分解</span> + <span v-if="scope.row.divideStatus == 2">未分解</span> + </template> + </el-table-column> + <el-table-column property="memo" label="备注信息" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="300" sortable show-overflow-tooltip> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="View" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <dailogAdd ref="openAdd" @navAddorUpdata="onAddorUpdata"></dailogAdd> + <upData ref="upShow"></upData> + </div> + </div> +</template> +<script lang="ts"> +import dailogAdd from './component/dailogAdd.vue'; +import {timeDate} from '/@/assets/index.ts' +import upData from '../../../components/updata/updata.vue'; +import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus'; +import { Plus, Delete, Upload, Download, Refresh, View } from '@element-plus/icons-vue'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + components: { ElButton, ElInput, dailogAdd, upData }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////安全目标指标 + indexNum: '', ////目标指标编号 + targetType: '1', ////指标类型 1:年指标 2:月指标 + divideStatus: '', ////分解状态 1:已分解 2:未分解 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.indexNum = ''; + listApi() + }; + const listApi = () => { + goalManagementApi() + .getTargetMngList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + const handleClick = (val: any) => { + let targetType = JSON.parse(JSON.stringify(val)); + ruleForm.searchParams.targetType = targetType.paneName; + listApi(); + }; + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const small = ref(false); + const disabled = ref(false); + const background = ref(false); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDialog(title, ruleForm.searchParams.targetType, id); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + // const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + // warning.value = false; + danger.value = false; + } else if (val.length == 0) { + // warning.value = true; + danger.value = true; + } else { + // warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + goalManagementApi() + .getTargetMngDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + // 上传 + // const upShow = ref(); + // const upButton = () => { + // upShow.value.openDialog(); + // }; + return { + timeDate, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + handleClick, + openAdd, + openD, + // upShow, + // upButton, + small, + disabled, + background, + Plus, + Delete, + Upload, + Download, + Refresh, + View, + listApi, + ruleForm, + resetForm, + onAddorUpdata, + onDelete, + handleSelectionChange, + deletAll, + danger, + onDeleteAll, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; +} +.minCenter { + width: 100%; + background-color: #fff; + margin-top: 10px; + padding: 0 20px; +} +.btns { + padding: 0px 0px 10px 0px; + display: flex; + justify-content: space-between; +} +.pages { + padding: 20px 0; + display: flex; + justify-content: right; +} +</style> diff --git a/src/views/goalManagement/targetStatistics/index.vue b/src/views/goalManagement/targetStatistics/index.vue index e69de29..bffcc0e 100644 --- a/src/views/goalManagement/targetStatistics/index.vue +++ b/src/views/goalManagement/targetStatistics/index.vue @@ -0,0 +1,92 @@ +<template> + <div style="background-color: #fff"> + <h2 style="line-height:40px;text-align: center;padding: 20px 0;">目标完成情况统计</h2> + <el-row style="padding:20px 0"> + <el-col :span="4" :offset="17"> + <el-select v-model="form.targetType" placeholder="" @change="listApi" style="width:100%"> + <el-option label="年指标" :value="1" /> + <el-option label="月指标" :value="2" /> + <el-option label="半年" :value="3" /> + <el-option label="季度" :value="4" /> + </el-select> + </el-col> + </el-row> + <div ref="main" style="width: 100%; height: 450px;"></div> + </div> +</template> +<script lang="ts"> +import { defineComponent, onMounted, ref } from 'vue'; +import * as echarts from 'echarts'; +import { ElMessage } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + setup() { + const form = ref({ + qName: '', + indexNum: '', + targetType: 1, + divideStatus: '', + }); + onMounted(() => { + listApi(); + }); + const listApi = () => { + goalManagementApi() + .gettargetstatistics(form.value.targetType) + .then((res) => { + let arr = []; + arr.push({ + value: res.data.data.noComplete, + name: `未完成 ${res.data.data.noComplete}`, + }); + arr.push({ + value: res.data.data.complete, + name: `已完成 ${res.data.data.complete}`, + }); + init(arr); + }); + }; + const main = ref(); + const init = (data: any) => { + var myChart = echarts.init(main.value); + var option = { + // title: { + // text: 'Referer of a Website', + // subtext: 'Fake Data', + // left: 'center', + // }, + tooltip: { + trigger: 'item', + }, + legend: { + orient: 'vertical', + left: '30%', + }, + series: [ + { + // name: 'Access From', + type: 'pie', + radius: '90%', + data: data, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)', + }, + }, + }, + ], + }; + + myChart.setOption(option); + }; + return { + form, + main, + init, + listApi, + }; + }, +}); +</script> diff --git a/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue b/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue index f5c4e63..d897b89 100644 --- a/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue +++ b/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue @@ -23,7 +23,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openInspectTaskDialog('新增', {})">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="openInspectTaskDialog('新增', {})">新增</el-button> <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> </el-col> <el-button type="primary" :icon="Refresh" size="default" /> diff --git a/src/views/intellectInspect/intelligentLine/index.vue b/src/views/intellectInspect/intelligentLine/index.vue index f27787a..3040a58 100644 --- a/src/views/intellectInspect/intelligentLine/index.vue +++ b/src/views/intellectInspect/intelligentLine/index.vue @@ -17,6 +17,7 @@ <div class="blocks"> <div> <div class="star-pic"> + <dv-decoration-12 scanDur="5" haloDur="4" class="scan"/> <div class="star-bg"><img src="../../../assets/loginPage/star-bg.png" /></div> <div class="star"><img src="../../../assets/loginPage/device-pic.png" /></div> </div> @@ -1003,9 +1004,10 @@ display: flex; justify-content: center; align-items: flex-start; - overflow: hidden; - overflow-x: auto; - overflow-y: auto; + overflow: auto; + + &::-webkit-scrollbar { width: 0; height: 0; color: transparent; } + &::scrollbar { width: 0; height: 0; color: transparent; } } .line-map { @@ -1364,15 +1366,28 @@ position: absolute; width: calc((100vw - 120px) / 7); height: calc((100vw - 120px) / 7); - z-index: 999999999; + z-index: 9999; bottom: 40px; right: 40px; padding: 20px; + + .scan{ + position: inherit; + width: 65%; + height: 65%; + z-index: 99997; + left: 0; + top: 0; + right: 0; + bottom: 0; + margin: auto; + } .star-bg { position: inherit; width: 100%; height: 100%; + z-index: 99998; left: 0; top: 0; img { @@ -1381,11 +1396,11 @@ animation: circle 30s linear infinite; } } - .star { position: inherit; width: 100%; height: 100%; + z-index: 99999; left: 0; top: 0; img { diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue index ca2e034..70df9bf 100644 --- a/src/views/newHome/index.vue +++ b/src/views/newHome/index.vue @@ -415,6 +415,24 @@ </script> <style scoped lang="scss"> + @keyframes showDown { + 100% { + position: absolute; + top: 60px; + } + } + @keyframes moveDown { + 100% { + position: absolute; + top: 0; + } + } + @keyframes moveRight { + 100% { + position: absolute; + left: 0; + } + } @media screen and (min-width: 1400px) { .gridCont { width: 100%; @@ -537,7 +555,6 @@ line-height: 30px; height: 40%; color: #072270; - margin-bottom: 1px; margin-bottom: 2px; } .enTit { @@ -710,35 +727,29 @@ display: flex; justify-content: center; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - animation: showDown 0.6s 1 ease forwards; - - @keyframes showDown { - 100% { - position: absolute; - top: 0; - } - } } .topPanelBg { position: absolute; width: 100%; height: 60px; - top: 0; + top: -60px; left: 0; background: rgba(255, 255, 255, 0.8); z-index: 9; + animation: moveDown 0.6s 1 ease forwards; } .topPanelCont { position: absolute; width: 100%; height: 60px; padding: 0 50px; - top: 0; + top: -60px; left: 0; display: flex; align-items: center; justify-content: space-between; z-index: 999; + animation: moveDown 0.6s 1 ease forwards; .topLogo { display: flex; @@ -790,26 +801,29 @@ } .leftCont { position: absolute; - left: 0; + left: -100px; top: 0; width: 240px; height: 100%; z-index: 99; background: url('../../assets/newMenu/leftbg.png') no-repeat center; background-size: 100% 100%; + animation: moveRight .8s 1 ease forwards; } .topCont { position: absolute; width: 100%; height: 200px; left: 0; - top: 60px; + top: 30px; padding: 0 40px 0 120px; z-index: 99999; display: flex; flex-direction: column; justify-content: center; align-items: flex-start; + animation: showDown 0.6s 1 ease forwards; + .topInfo { width: 100%; display: flex; @@ -885,7 +899,7 @@ &:hover { background-image: radial-gradient(ellipse farthest-side at 50% 100%, #48a3ff 0%, #fff 120%); - box-shadow: 8px 8px 24px rgba(20, 97, 234, 0.2), -8px -8px 24px #fafafa; + box-shadow: -8px -8px 24px rgba(20, 97, 234, 0.2), 8px 8px 24px rgba(20, 97, 234, 0.2); } } .cont-bg-1 { diff --git a/src/views/riskWarningSys/accidentLevel/index.vue b/src/views/riskWarningSys/accidentLevel/index.vue index 749e011..473ab13 100644 --- a/src/views/riskWarningSys/accidentLevel/index.vue +++ b/src/views/riskWarningSys/accidentLevel/index.vue @@ -5,7 +5,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/riskWarningSys/educationAndTraining/index.vue b/src/views/riskWarningSys/educationAndTraining/index.vue index 8ddea74..c71c7b6 100644 --- a/src/views/riskWarningSys/educationAndTraining/index.vue +++ b/src/views/riskWarningSys/educationAndTraining/index.vue @@ -5,7 +5,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/riskWarningSys/emergencyDrills/index.vue b/src/views/riskWarningSys/emergencyDrills/index.vue index b7548a3..87d3c2b 100644 --- a/src/views/riskWarningSys/emergencyDrills/index.vue +++ b/src/views/riskWarningSys/emergencyDrills/index.vue @@ -5,7 +5,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/riskWarningSys/riskLevel/index.vue b/src/views/riskWarningSys/riskLevel/index.vue index a24b9f7..b763284 100644 --- a/src/views/riskWarningSys/riskLevel/index.vue +++ b/src/views/riskWarningSys/riskLevel/index.vue @@ -5,7 +5,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/riskWarningSys/warningBigScreen/components/message.vue b/src/views/riskWarningSys/warningBigScreen/components/message.vue index e2ab6ee..6f3b789 100644 --- a/src/views/riskWarningSys/warningBigScreen/components/message.vue +++ b/src/views/riskWarningSys/warningBigScreen/components/message.vue @@ -39,18 +39,18 @@ config:{ header: ['消息列表', '同比'], data: [ - ['一月预警消息SPI报告', '↑ 94%'], - ['二月预警消息SPI报告', '↑ 94%'], - ['三月预警消息SPI报告', '↑ 94%'], - ['四月预警消息SPI报告', '↑ 94%'], - ['五月预警消息SPI报告', '↑ 94%'], - ['六月预警消息SPI报告', '↑ 94%'], - ['七月预警消息SPI报告', '↑ 94%'], - ['八月预警消息SPI报告', '↑ 94%'], - ['九月预警消息SPI报告', '↑ 94%'], - ['十月预警消息SPI报告', '↑ 94%'], - ['十一月预警消息SPI报告', '↑ 94%'], - ['十二月预警消息SPI报告', '↑ 94%'] + ['一月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['二月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['三月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['四月预警消息SPI报告', '<span style="color:red;">↓ 43%</span>'], + ['五月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['六月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['七月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['八月预警消息SPI报告', '<span style="color:red;">↓ 65%</span>'], + ['九月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['十月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['十一月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'], + ['十二月预警消息SPI报告', '<span style="color:#4CF475;">↑ 94%</span>'] ], index: true, columnWidth: [60], diff --git a/src/views/riskWarningSys/warningBigScreen/index.vue b/src/views/riskWarningSys/warningBigScreen/index.vue index 164931e..b954ce2 100644 --- a/src/views/riskWarningSys/warningBigScreen/index.vue +++ b/src/views/riskWarningSys/warningBigScreen/index.vue @@ -339,8 +339,8 @@ }else{ document.getElementById('container').setAttribute( "class", 'light' ) state.boxBg = '#fff' - state.boxColor = ['#ccc','#333'] - state.boxBigColor = ['#666','#fff'] + state.boxColor = ['#fff','#ccc'] + state.boxBigColor = ['#999','#fff'] } } @@ -353,8 +353,8 @@ }else{ window.document.getElementById('container').setAttribute( "class", 'light' ); state.boxBg = '#fff' - state.boxColor = ['#ccc','#333'] - state.boxBigColor = ['#666','#fff'] + state.boxColor = ['#fff','#ccc'] + state.boxBigColor = ['#999','#fff'] } } diff --git a/src/views/riskWarningSys/warningBigScreen/indexs/index.vue b/src/views/riskWarningSys/warningBigScreen/indexs/index.vue index 87d78cc..570d38d 100644 --- a/src/views/riskWarningSys/warningBigScreen/indexs/index.vue +++ b/src/views/riskWarningSys/warningBigScreen/indexs/index.vue @@ -49,7 +49,16 @@ <div v-else>当前应急物资储备情况(总)</div> <dv-decoration8 :color="lineColor" :reverse="true" style="width:100%;" /> </div> - <div class="des-main"> + <div v-if="curChart===2" class="des-main"> + <div> + <h4>距上次【<span>{{trainDesc.title}}</span>】应急演练结束<span>{{trainDesc.total}}</span>天</h4> + <h4> + 应急演练分月情况汇总: + </h4> + <p v-for="(item,index) in trainDesc.list" :key="index">{{item.month}}应急演练次数:{{item.num}}次</p> + </div> + </div> + <div v-else class="des-main"> <div v-for="(item,index) in accidentDesc" :key="index"> <h4><span>{{item.title}}</span>共计:<span>{{item.total}}</span>起</h4> <h4> @@ -86,6 +95,7 @@ optionList: Array<any>; lineColor: Array<string>; accidentDesc: Array<any>; + trainDesc: Object; } export default defineComponent({ name: 'warningPage', @@ -182,7 +192,45 @@ total: 150, desc: '死亡人数:0人; 重伤人数:0人; 轻伤人数:0人; 直接经济损失:9万元' } - ] + ], + trainDesc:{ + title: '公司级', + total: 5, + list: [ + { + month: '一月份', + num: 23 + }, + { + month: '二月份', + num: 76 + }, + { + month: '三月份', + num: 152 + }, + { + month: '四月份', + num: 200 + }, + { + month: '五月份', + num: 49 + }, + { + month: '六月份', + num: 83 + }, + { + month: '七月份', + num: 102 + }, + { + month: '八月份', + num: 99 + } + ] + } }); // 页面载入时执行方法 @@ -347,6 +395,7 @@ color: #11FEEE; &::-webkit-scrollbar { width: 0; height: 0; color: transparent; } + &::scrollbar { width: 0; height: 0; color: transparent; } &>div{ margin-bottom: 2rem; diff --git a/src/views/specialWorkSystem/afterWorkManage/workTicketCheck/index.vue b/src/views/specialWorkSystem/afterWorkManage/workTicketCheck/index.vue index 3026179..1a5f98e 100644 --- a/src/views/specialWorkSystem/afterWorkManage/workTicketCheck/index.vue +++ b/src/views/specialWorkSystem/afterWorkManage/workTicketCheck/index.vue @@ -15,7 +15,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/afterWorkManage/workTicketRecord/index.vue b/src/views/specialWorkSystem/afterWorkManage/workTicketRecord/index.vue index 34de123..0345cbd 100644 --- a/src/views/specialWorkSystem/afterWorkManage/workTicketRecord/index.vue +++ b/src/views/specialWorkSystem/afterWorkManage/workTicketRecord/index.vue @@ -18,7 +18,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/approveTypeSetting/index.vue b/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/approveTypeSetting/index.vue index 9c81495..2dfc9d6 100644 --- a/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/approveTypeSetting/index.vue +++ b/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/approveTypeSetting/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/linkSetting/index.vue b/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/linkSetting/index.vue index 3dc4b96..46cbd7a 100644 --- a/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/linkSetting/index.vue +++ b/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/linkSetting/index.vue @@ -5,7 +5,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建审批环节</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增审批环节</el-button> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default"/> diff --git a/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/reportTypeSetting/index.vue b/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/reportTypeSetting/index.vue index 0c0edee..68b22ee 100644 --- a/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/reportTypeSetting/index.vue +++ b/src/views/specialWorkSystem/approveProcessManage/approveLinkSettings/reportTypeSetting/index.vue @@ -5,7 +5,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" size="default" @click="addReport">新建上报类型</el-button> + <el-button type="primary" size="default" @click="addReport">新增上报类型</el-button> </el-col> </el-row> <el-table ref="multipleTableRef" @@ -43,7 +43,7 @@ </div> </div> </div> - <el-dialog v-model="dialogAddForm" title="新建上报类型" @close="dialogColse"> + <el-dialog v-model="dialogAddForm" title="新增上报类型" @close="dialogColse"> <el-form :model="reportForm" label-width="120px" ref="ruleFormRef" :rules="addRules"> <el-form-item label="上报数据类型" prop="type"> <el-select v-model="reportForm.type" placeholder="选择上报数据类型"> diff --git a/src/views/specialWorkSystem/approveProcessManage/approveProcessList/index.vue b/src/views/specialWorkSystem/approveProcessManage/approveProcessList/index.vue index d548c7c..0f6a0eb 100644 --- a/src/views/specialWorkSystem/approveProcessManage/approveProcessList/index.vue +++ b/src/views/specialWorkSystem/approveProcessManage/approveProcessList/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true" v-throttle>新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true" v-throttle>新增</el-button> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> <el-button type="success" size="default" plain>设置分类</el-button> </el-col> diff --git a/src/views/specialWorkSystem/approveProcessManage/examineTemplate/index.vue b/src/views/specialWorkSystem/approveProcessManage/examineTemplate/index.vue index 2360714..8c2afdd 100644 --- a/src/views/specialWorkSystem/approveProcessManage/examineTemplate/index.vue +++ b/src/views/specialWorkSystem/approveProcessManage/examineTemplate/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true" v-throttle>新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true" v-throttle>新增</el-button> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> <el-button type="success" size="default" plain>设置分类</el-button> </el-col> diff --git a/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue b/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue index 2f51399..cc6d5a6 100644 --- a/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue +++ b/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue @@ -27,7 +27,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openSafetyActionDialog('新增', {})">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="openSafetyActionDialog('新增', {})">新增</el-button> <el-button type="danger" :icon="Delete" size="default" @click="deleteMoreSafetyAction" plain>批量删除</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default" /> diff --git a/src/views/specialWorkSystem/workAlert/alertRecord/index.vue b/src/views/specialWorkSystem/workAlert/alertRecord/index.vue index f30e7c6..7ce10ae 100644 --- a/src/views/specialWorkSystem/workAlert/alertRecord/index.vue +++ b/src/views/specialWorkSystem/workAlert/alertRecord/index.vue @@ -41,7 +41,7 @@ <div class="main-card"> <!-- <el-row class="cardTop">--> <!-- <el-col :span="12" class="mainCardBtn">--> -<!-- <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button>--> +<!-- <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button>--> <!-- </el-col>--> <!-- <el-button type="primary" :icon="Refresh" size="default"/>--> <!-- </el-row>--> diff --git a/src/views/specialWorkSystem/workBasicManage/certificateFilterSetting/index.vue b/src/views/specialWorkSystem/workBasicManage/certificateFilterSetting/index.vue index 5506079..5d47070 100644 --- a/src/views/specialWorkSystem/workBasicManage/certificateFilterSetting/index.vue +++ b/src/views/specialWorkSystem/workBasicManage/certificateFilterSetting/index.vue @@ -17,7 +17,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/workBasicManage/personalProtectDevices/index.vue b/src/views/specialWorkSystem/workBasicManage/personalProtectDevices/index.vue index f8bd4c3..29c6088 100644 --- a/src/views/specialWorkSystem/workBasicManage/personalProtectDevices/index.vue +++ b/src/views/specialWorkSystem/workBasicManage/personalProtectDevices/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/workBasicManage/safeMeasuresManage/index.vue b/src/views/specialWorkSystem/workBasicManage/safeMeasuresManage/index.vue index 4964f20..a5abd21 100644 --- a/src/views/specialWorkSystem/workBasicManage/safeMeasuresManage/index.vue +++ b/src/views/specialWorkSystem/workBasicManage/safeMeasuresManage/index.vue @@ -22,7 +22,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/workBasicManage/workTypeSetting/index.vue b/src/views/specialWorkSystem/workBasicManage/workTypeSetting/index.vue index 6d97c46..2acbc5e 100644 --- a/src/views/specialWorkSystem/workBasicManage/workTypeSetting/index.vue +++ b/src/views/specialWorkSystem/workBasicManage/workTypeSetting/index.vue @@ -19,7 +19,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue index 47badfd..9f2ec17 100644 --- a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue +++ b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue @@ -21,7 +21,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openApproveBasicDialog('新增', {})">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="openApproveBasicDialog('新增', {})">新增</el-button> <el-button type="danger" :icon="Delete" size="default" @click="deleteMoreApproveBasic" plain>批量删除</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default" /> diff --git a/src/views/specialWorkSystem/workFlow/approveRule/index.vue b/src/views/specialWorkSystem/workFlow/approveRule/index.vue index 3f7f8b8..f78529f 100644 --- a/src/views/specialWorkSystem/workFlow/approveRule/index.vue +++ b/src/views/specialWorkSystem/workFlow/approveRule/index.vue @@ -31,7 +31,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openApproveRuleDialog('新增', {})">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="openApproveRuleDialog('新增', {})">新增</el-button> <el-button type="danger" :icon="Delete" size="default" @click="deleteMoreApproveRule" plain>批量删除</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default" /> diff --git a/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue b/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue index d787438..b9f54fa 100644 --- a/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue +++ b/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue @@ -26,7 +26,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/workPlan/workReservation/index.vue b/src/views/specialWorkSystem/workPlan/workReservation/index.vue index 7a1cc8d..7c89a19 100644 --- a/src/views/specialWorkSystem/workPlan/workReservation/index.vue +++ b/src/views/specialWorkSystem/workPlan/workReservation/index.vue @@ -26,7 +26,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/specialWorkSystem/workProcess/gasCheck/index.vue b/src/views/specialWorkSystem/workProcess/gasCheck/index.vue index 7e4c300..f8a0c36 100644 --- a/src/views/specialWorkSystem/workProcess/gasCheck/index.vue +++ b/src/views/specialWorkSystem/workProcess/gasCheck/index.vue @@ -28,7 +28,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default"/> </el-row> @@ -42,7 +42,12 @@ <el-table-column type="index" label="序号" width="200"/> <el-table-column property="id" label="作业证编号" width="200"/> <el-table-column property="workType" label="作业类型" width="200"/> - <el-table-column property="combustible" label="可燃气%"/> +<!-- <el-table-column property="combustible" label="可燃气%"/>--> + <el-table-column property="combustible" label="可燃气%"> + <template #default="scope"> + <span :class="scope.row.combustible > 0 ? 'red': ''">{{ scope.row.combustible }}</span> + </template> + </el-table-column> <el-table-column property="oxygen" label="氧气%"/> <el-table-column property="co" label="一氧化碳ppm"/> <el-table-column property="hs" label="硫化氢ppm"/> @@ -105,10 +110,14 @@ </el-form-item> </el-form> </el-dialog> - <el-dialog v-model="dialogAddRecord" title="新建" @close="closeAdd" @open="openAdd"> + <el-dialog v-model="dialogAddRecord" title="新增" @close="closeAdd" @open="openAdd"> <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> <el-form-item label="作业证编号" prop="id"> - <el-input v-model="addRecord.id"> </el-input> + <el-input v-model="addRecord.id"> + <template #append> + <el-button :icon="Search" /> + </template> + </el-input> </el-form-item> <el-form-item label="作业类型" prop="groupMembers"> <el-select v-model="addRecord.groupMembers"> @@ -123,7 +132,7 @@ <el-form-item label="可燃气%" prop="combustible"> <el-input v-model="addRecord.combustible"/> </el-form-item> - <el-form-item label="氧气" prop="oxygen"> + <el-form-item label="氧气%" prop="oxygen"> <el-input v-model="addRecord.oxygen"/> </el-form-item> <el-form-item label="一氧化碳ppm" prop="combustible"> @@ -152,7 +161,7 @@ import { Session } from '/@/utils/storage'; import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; import { ElTable } from 'element-plus'; - import { FormInstance, FormRules, ElMessage } from 'element-plus'; + import type { FormInstance, FormRules } from 'element-plus' import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage'; // 定义接口来定义对象的类型 @@ -441,6 +450,7 @@ Delete, Refresh, Plus, + Search, handleChange, searchRecord, clearSearch, @@ -461,6 +471,9 @@ <style scoped lang="scss"> $homeNavLengh: 8; + .red{ + color: red; + } .home-container { height: calc(100vh - 144px); box-sizing: border-box; diff --git a/src/views/specialWorkSystem/workProcess/workCheck/index.vue b/src/views/specialWorkSystem/workProcess/workCheck/index.vue index fefb99f..282ed9d 100644 --- a/src/views/specialWorkSystem/workProcess/workCheck/index.vue +++ b/src/views/specialWorkSystem/workProcess/workCheck/index.vue @@ -28,7 +28,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default"/> </el-row> @@ -43,7 +43,11 @@ <el-table-column property="id" label="作业证编号" width="200"/> <el-table-column property="workType" label="作业类型" width="200"/> <el-table-column property="checkInfo" label="检查内容"/> - <el-table-column property="result" label="检查结果"/> + <el-table-column property="result" label="检查结果"> + <template #default="scope"> + <span :class="scope.row.result == '异常' ? 'red': ''">{{ scope.row.result }}</span> + </template> + </el-table-column> <el-table-column property="desc" label="描述" width="200"/> <el-table-column property="name" label="分析人"/> <el-table-column property="updateTime" label="分析时间"/> @@ -97,10 +101,14 @@ </el-form-item> </el-form> </el-dialog> - <el-dialog v-model="dialogAddRecord" title="新建" @close="closeAdd" @open="openAdd"> + <el-dialog v-model="dialogAddRecord" title="新增" @close="closeAdd" @open="openAdd"> <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> <el-form-item label="作业证编号" prop="id"> - <el-input v-model="addRecord.id"> </el-input> + <el-input v-model="addRecord.id"> + <template #append> + <el-button :icon="Search" /> + </template> + </el-input> </el-form-item> <el-form-item label="作业类型" prop="workType"> <el-select v-model="addRecord.workType"> @@ -121,6 +129,14 @@ <el-option label="异常" value="1"/> </el-select> </el-form-item> + <el-form-item label="现场照片" prop="photos"> + <el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl"> + <el-icon><Plus /></el-icon> + <template #tip> + <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div> + </template> + </el-upload> + </el-form-item> <el-form-item label="描述" prop="desc"> <el-input v-model="addRecord.desc" type="textarea"> </el-input> </el-form-item> @@ -129,6 +145,9 @@ <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> </el-form-item> </el-form> + </el-dialog> + <el-dialog v-model="dialogVisible"> + <img w-full :src="dialogImageUrl" alt="Preview Image" /> </el-dialog> </div> </template> @@ -140,17 +159,21 @@ import { useUserInfo } from '/@/stores/userInfo'; import { Session } from '/@/utils/storage'; import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; - import { ElTable } from 'element-plus'; - import { FormInstance, FormRules, ElMessage } from 'element-plus'; + import { ElTable, ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus' import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage'; + import {workApplyApi} from "/@/api/specialWorkSystem/workApply"; + import axios from "axios"; // 定义接口来定义对象的类型 interface stateType { tableData: Array<any>; - departmentList: Array<any>; - department:string; - workerList: Array<string>; - casProps: {}; + imgLimit: number; + fileList: Array<file>, + uploadUrl: string, + isOverSize: Boolean, + dialogVisible: Boolean, + dialogImageUrl: string | null, multipleSelection: Array<any>; deleteArr: Array<any>; dialogDetails: boolean; @@ -164,15 +187,13 @@ searchWord: string; searchType: number | null totalSize: number; - addRecord: { - - }; - details: { - - }; + addRecord: {}; + details: {}; workTypeList: Array<any> } - + interface file { + url: string; + } export default { name: 'workCheck', components: {}, @@ -187,6 +208,12 @@ chosenIndex: null, searchWord: '', searchType: null, + isOverSize: false, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null, tableData: [ { id: 'GTXH-0000001', @@ -216,15 +243,6 @@ updateTime: '2022-08-31 17:05:20' } ], - departmentList: [], - department: '', - workerList: [], - casProps: { - expandTrigger: 'hover', - emitPath: false, - value: 'depId', - label: 'depName' - }, multipleSelection: [], dialogDetails: false, dialogAddRecord: false, @@ -256,6 +274,7 @@ workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], checkInfo: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], result: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + photos: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], desc: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], updateTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] @@ -264,7 +283,6 @@ // 页面载入时执行方法 onMounted(() => { // getListByPage(); - // getAllDepartment(); }); // 分页获取班组管理列表 @@ -289,32 +307,110 @@ } }; - // 获取部门列表 - const getAllDepartment = async () => { - let res = await teamManageApi().getAllDepartment(); - if (res.data.code === '200') { - state.departmentList = res.data.data; - } else { + // 图片上传 + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async (rawFile: any) => { + const fileSize = rawFile.size / 1024 < 500 ? '1' : '0' + if(fileSize === '0'){ ElMessage({ type: 'warning', - message: res.data.msg + message: '文件大小不能超过500k。' }); + state.isOverSize = true + return false + }else{ + const res = await workApplyApi().getUploadUrl(rawFile.name); + state.addRecord.photos.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl; } }; - const handleChange = async (value) => { - state.addRecord.depId = value; - console.log(state.addRecord.department, 'de'); - let res = await teamManageApi().getAllMember(value); + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + // console.log(state.form.workDetail.photos,'photos') + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + const result = new Promise((resolve, reject) => { + if(!state.isOverSize){ + ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.photos,'path') + const list = JSON.parse(JSON.stringify(state.addRecord.photos)) + fileList.map((item,index)=>{ + if(item.uid === file.uid){ + fileList.splice(index,1) + state.addRecord.photos.splice(index,1) + // 请求删除接口 + deletePic(false,list[index]) + } + }) + }) + .catch(() => { + reject(false); + }); + }else{ + const list = JSON.parse(JSON.stringify(state.addRecord.photos)) + fileList.map((item,index)=>{ + if(item.uid === file.uid){ + fileList.splice(index,1) + state.addRecord.photos.splice(index,1) + deletePic(true,list[index]) + } + }) + state.isOverSize = false + } + }); + return result; + }; + + // 删除图片接口 + const deletePic = async(isOverSize:boolean,fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) if (res.data.code === '200') { - state.workerList = res.data.data; + ElMessage({ + type: isOverSize ? 'error' : 'success', + message: isOverSize ? '上传失败':'删除成功!' + }); } else { ElMessage({ type: 'warning', message: res.data.msg }); } - }; + } + // 关键词查询记录 const searchRecord = async () => { @@ -422,7 +518,13 @@ Delete, Refresh, Plus, - handleChange, + Search, + showTip, + handlePreview, + handlePictureCardPreview, + getUploadUrl, + upload, + beforeRemove, searchRecord, clearSearch, viewRecord, @@ -442,6 +544,9 @@ <style scoped lang="scss"> $homeNavLengh: 8; + .red{ + color: red; + } .home-container { height: calc(100vh - 144px); box-sizing: border-box; diff --git a/src/views/system/personShiftManage/arrangeManage/index.vue b/src/views/system/personShiftManage/arrangeManage/index.vue index e723428..29689bf 100644 --- a/src/views/system/personShiftManage/arrangeManage/index.vue +++ b/src/views/system/personShiftManage/arrangeManage/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/generalShiftManagement/index.vue b/src/views/system/personShiftManage/generalShiftManagement/index.vue index 30efc7d..94d1a9d 100644 --- a/src/views/system/personShiftManage/generalShiftManagement/index.vue +++ b/src/views/system/personShiftManage/generalShiftManagement/index.vue @@ -5,7 +5,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建排班方案</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增排班方案</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/personArrange/index.vue b/src/views/system/personShiftManage/personArrange/index.vue index 47d2c51..bdb185e 100644 --- a/src/views/system/personShiftManage/personArrange/index.vue +++ b/src/views/system/personShiftManage/personArrange/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue b/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue index 2be202a..40cb89e 100644 --- a/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue index 64387a5..d063204 100644 --- a/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue index 6f7c35b..e9e4e07 100644 --- a/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue b/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue index 809fdcb..2b54b8f 100644 --- a/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue b/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue index 56aa234..c911247 100644 --- a/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue index 71f7d52..bd31f9b 100644 --- a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue +++ b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> </el-col> diff --git a/src/views/system/personShiftManage/scheduleManage/strategy/index.vue b/src/views/system/personShiftManage/scheduleManage/strategy/index.vue index c7b209c..22c0ca4 100644 --- a/src/views/system/personShiftManage/scheduleManage/strategy/index.vue +++ b/src/views/system/personShiftManage/scheduleManage/strategy/index.vue @@ -14,7 +14,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> </el-col> -- Gitblit v1.9.2