From 1c141330187ca025f6861f1d931fa235992cf852 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期三, 27 七月 2022 15:16:36 +0800 Subject: [PATCH] 更新 --- src/views/specialWorkSystem/workApplyManagement/workApplyForm/index.vue | 4 src/theme/dark.scss | 2 src/views/specialWorkSystem/workProcessManagement/workCheckinRecord/index.vue | 2 src/views/riskWarningSys/accidentLevel/index.vue | 407 ++ src/views/IntelligentXjSys/basicDataManagement/facilityArea/index.vue | 375 + src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/approveLinkSetting/index.vue | 341 + src/views/basicRightsManagement/personnelShiftManagement/teamManagement/index.vue | 384 ++ src/views/IntelligentXjSys/inspectionRecordManagement/index.vue | 514 ++ src/views/basicRightsManagement/personnelShiftManagement/shiftManagement/index.vue | 576 +++ src/views/IntelligentXjSys/inspectionTaskManagement/index.vue | 966 +++++ src/views/specialWorkSystem/afterWorkManagement/workTicketCheck/index.vue | 259 src/views/specialWorkSystem/workApplyManagement/myApply/index.vue | 86 src/views/riskWarningSys/educationAndTraining/index.vue | 343 + src/views/specialWorkSystem/approveProcessManagement/approveProcessList/index.vue | 213 src/views/specialWorkSystem/workBasicManagementSetting/personalProtectDevices/index.vue | 285 + src/views/basicRightsManagement/personnelShiftManagement/holidayManagement/index.vue | 379 ++ src/views/generalShiftManagement/index.vue | 395 ++ src/views/IntelligentXjSys/basicDataManagement/rfId/index.vue | 367 + src/theme/element.scss | 4 src/router/backEnd.ts | 2 src/views/riskWarningSys/emergencyDrills/index.vue | 342 + src/views/IntelligentXjSys/basicDataManagement/indicator/index.vue | 382 ++ src/views/basicRightsManagement/personnelShiftManagement/personnelManagement/index.vue | 375 + src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue | 680 ++- src/main.ts | 4 src/views/specialWorkSystem/workPlan/workReservation/index.vue | 579 +- /dev/null | 214 - src/views/specialWorkSystem/approveProcessManagement/approveProcessSetting/index.vue | 8 src/views/specialWorkSystem/workBasicManagementSetting/certificateFilterSetting/index.vue | 333 + src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/reportTypeSetting/index.vue | 43 src/views/IntelligentXjSys/basicDataManagement/inspection/index.vue | 375 + src/views/specialWorkSystem/afterWorkManagement/workTicketRecord/index.vue | 273 src/views/basicRightsManagement/personnelShiftManagement/workingHours/index.vue | 349 + src/views/specialWorkSystem/workBasicManagementSetting/workTypeSetting/index.vue | 356 + src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/approveTypeSetting/index.vue | 335 + src/views/riskWarningSys/riskLevel/index.vue | 322 + src/views/specialWorkSystem/workBasicManagementSetting/securityMeasuresManagement/index.vue | 409 ++ 37 files changed, 10,310 insertions(+), 973 deletions(-) diff --git a/src/main.ts b/src/main.ts index d8ef740..5635729 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,7 +12,7 @@ import '/@/theme/index.scss'; import mitt from 'mitt'; import VueGridLayout from 'vue-grid-layout'; -import locale from 'element-plus/lib/locale/lang/zh-cn'; +import zhCn from 'element-plus/lib/locale/lang/zh-cn'; const app = createApp(App); for (const [key, component] of Object.entries(ElementPlusIconsVue)) { @@ -21,6 +21,6 @@ directive(app); other.elSvg(app); -app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t, locale }).use(i18n).use(VueGridLayout).mount('#app'); +app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t, locale: zhCn}).use(i18n).use(VueGridLayout).mount('#app'); app.config.globalProperties.mittBus = mitt(); diff --git a/src/router/backEnd.ts b/src/router/backEnd.ts index cf08c07..3dc2d4f 100644 --- a/src/router/backEnd.ts +++ b/src/router/backEnd.ts @@ -75,7 +75,7 @@ /** * 重新请求后端路由菜单接口 * @description 用于菜单管理界面刷新菜单(未进行测试) - * @description 路径:/src/views/system/menu/component/menuDialog.vue + * @description 路径:/src/views/system/homeMenu/component/menuDialog.vue */ export function setBackEndControlRefreshRoutes() { getBackEndControlRoutes(Session.get('projectId')); diff --git a/src/theme/dark.scss b/src/theme/dark.scss index c922da1..6a2f5e3 100644 --- a/src/theme/dark.scss +++ b/src/theme/dark.scss @@ -104,7 +104,7 @@ background-color: var(--next-color-disabled) !important; } - // menu + // homeMenu .layout-aside { border-right: 1px solid var(--next-border-color-light) !important; } diff --git a/src/theme/element.scss b/src/theme/element.scss index 5137cb4..6e71c98 100644 --- a/src/theme/element.scss +++ b/src/theme/element.scss @@ -9,7 +9,7 @@ .el-button--default i.iconfont, .el-button--default i.fa { font-size: 14px !important; - margin-right: 5px; + //margin-right: 5px; } .el-button--small i.iconfont, .el-button--small i.fa { @@ -100,7 +100,7 @@ background-color: unset !important; } // 子级菜单背景颜色 -// .el-menu--inline { +// .el-homeMenu--inline { // background: var(--next-bg-menuBar-light-1); // } // 水平菜单、横向菜单折叠 a 标签 diff --git a/src/views/IntelligentXjSys/basicDataManagement/facilityArea/index.vue b/src/views/IntelligentXjSys/basicDataManagement/facilityArea/index.vue new file mode 100644 index 0000000..5c490e7 --- /dev/null +++ b/src/views/IntelligentXjSys/basicDataManagement/facilityArea/index.vue @@ -0,0 +1,375 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="12"> + <div class="grid-content topInfo"> + <el-input v-model="searchName" placeholder="设施区域名称"></el-input> + <el-select v-model="searchPlace" placeholder="设施区域类型"> + <el-option label="设备" value="设备" /> + <el-option label="区域" value="区域" /> + </el-select> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" width="80" label="序号"/> + <el-table-column property="name" label="设施区域名称"/> + <el-table-column property="type" label="设施区域类型"/> + <el-table-column property="rfid" label="关联RFID"/> + <el-table-column property="creater" label="创建人"/> + <el-table-column property="createTime" label="创建时间" sortable/> + <el-table-column property="updater" label="更新人"/> + <el-table-column property="updateTime" label="更新时间" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="设施区域"> + <el-form :model="details" label-width="120px"> + <el-form-item label="设施区域名称"> + <el-input v-model="details.name" readonly/> + </el-form-item> + <el-form-item label="设施区域类型"> + <el-input v-model="details.type" readonly/> + </el-form-item> + <el-form-item label="关联RFID"> + <el-input v-model="details.rfid" type="textarea" readonly/> + </el-form-item> + <el-form-item label="创建人"> + <el-input v-model="details.creater" readonly/> + </el-form-item> + <el-form-item label="创建时间"> + <el-input v-model="details.createTime" readonly/> + </el-form-item> + <el-form-item label="更新人"> + <el-input v-model="details.updater" readonly/> + </el-form-item> + <el-form-item label="更新时间"> + <el-input v-model="details.updateTime" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default" v-throttle>确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="设施区域编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="设施区域名称" prop="name"> + <el-input + v-model="addRecord.name" + > + </el-input> + </el-form-item> + <el-form-item label="设施区域类型" prop="type"> + <el-select v-model="addRecord.type"> + <el-option label="设备" value="设备" /> + <el-option label="区域" value="区域" /> + </el-select> + </el-form-item> + <el-form-item label="关联RFID" prop="rfid"> + <el-select v-model="addRecord.rfid" multiple> + <el-option label="风机系统1标签" value="风机系统1标签" /> + <el-option label="风机系统2标签" value="风机系统2标签"/> + <el-option label="风机系统3标签" value="风机系统3标签"/> + <el-option label="A场所1标签" value="A场所1标签"/> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default" v-throttle>确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default" v-throttle>确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const searchName = ref('') + const searchPlace = ref('') + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const casProps = { + expandTrigger: 'hover', + multiple: true, + emitPath: false, + checkStrictly: false + } + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + name: '风机系统', + type: '设备', + rfid: ['风机系统1标签','风机系统2标签'], + creater: '张三', + createTime: '2022-07-14 12:23:03', + updater: '李四', + updateTime: '2022-07-16 14:23:03' + }, + { + name: 'A场所', + type: '区域', + rfid: ['A场所1标签'], + creater: '李四', + createTime: '2022-07-16 12:23:03', + updater: '张三', + updateTime: '2022-07-18 14:23:03' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + type:[{required: true, message: '该内容不能为空',trigger:'blur'}], + rfid:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/IntelligentXjSys/basicDataManagement/indicator/index.vue b/src/views/IntelligentXjSys/basicDataManagement/indicator/index.vue new file mode 100644 index 0000000..7af3854 --- /dev/null +++ b/src/views/IntelligentXjSys/basicDataManagement/indicator/index.vue @@ -0,0 +1,382 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchName" placeholder="巡检指标名称"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" width="80" label="序号"/> + <el-table-column property="name" label="指标名称"/> + <el-table-column property="type" label="指标类型"/> + <el-table-column property="unit" label="指标单位"/> + <el-table-column property="creater" label="创建人"/> + <el-table-column property="createTime" label="创建时间" sortable/> + <el-table-column property="updater" label="更新人"/> + <el-table-column property="updateTime" label="更新时间" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="巡检指标"> + <el-form :model="details" label-width="120px"> + <el-form-item label="指标名称"> + <el-input v-model="details.name" readonly/> + </el-form-item> + <el-form-item label="指标类型"> + <el-input v-model="details.type" readonly/> + </el-form-item> + <el-form-item label="指标单位"> + <el-input v-model="details.unit" readonly/> + </el-form-item> + <el-form-item label="创建人"> + <el-input v-model="details.creater" readonly/> + </el-form-item> + <el-form-item label="创建时间"> + <el-input v-model="details.createTime" readonly/> + </el-form-item> + <el-form-item label="更新人"> + <el-input v-model="details.updater" readonly/> + </el-form-item> + <el-form-item label="更新时间"> + <el-input v-model="details.updateTime" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="巡检指标编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="指标名称" prop="name"> + <el-input + v-model="addRecord.name" + > + </el-input> + </el-form-item> + <el-form-item label="指标类型" prop="type"> + <el-select v-model="addRecord.type"> + <el-option label="温度" value="温度" /> + <el-option label="压力" value="压力" /> + <el-option label="震动" value="震动" /> + <el-option label="声音" value="声音" /> + </el-select> + </el-form-item> + <el-form-item label="指标单位" prop="unit"> + <el-select v-model="addRecord.unit"> + <el-option label="℃" value="℃" /> + <el-option label="Pa" value="Pa"/> + <el-option label="mms" value="mms"/> + <el-option label="dB" value="dB"/> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const searchName = ref('') + const searchPlace = ref('') + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const casProps = { + expandTrigger: 'hover', + multiple: true, + emitPath: false, + checkStrictly: false + } + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + name: '设备温度', + type: '温度', + unit: '℃', + creater: '张三', + createTime: '2022-07-14 12:23:03', + updater: '李四', + updateTime: '2022-07-16 14:23:03' + }, + { + name: '车间温度', + type: '温度', + unit: '℃', + creater: '李四', + createTime: '2022-07-16 12:23:03', + updater: '张三', + updateTime: '2022-07-18 14:23:03' + }, + { + name: '车间压力', + type: '压力', + unit: 'Pa', + creater: '李四', + createTime: '2022-07-16 12:23:03', + updater: '张三', + updateTime: '2022-07-18 14:23:03' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + type:[{required: true, message: '该内容不能为空',trigger:'blur'}], + unit:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/IntelligentXjSys/basicDataManagement/inspection/index.vue b/src/views/IntelligentXjSys/basicDataManagement/inspection/index.vue new file mode 100644 index 0000000..ef85413 --- /dev/null +++ b/src/views/IntelligentXjSys/basicDataManagement/inspection/index.vue @@ -0,0 +1,375 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="12"> + <div class="grid-content topInfo"> + <el-input v-model="searchName" placeholder="巡检点名称"></el-input> + <el-select v-model="searchPlace" placeholder="所属区域设施"> + <el-option label="风机系统" value="风机系统" /> + <el-option label="A车间" value="A车间" /> + <el-option label="B车间" value="B车间" /> + <el-option label="C车间" value="C车间" /> + </el-select> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" width="80" label="序号"/> + <el-table-column property="name" label="巡检点名称"/> + <el-table-column property="area" label="所属设备区域"/> + <el-table-column property="rfid" label="关联RFID"/> + <el-table-column property="creater" label="创建人"/> + <el-table-column property="createTime" label="创建时间" sortable/> + <el-table-column property="updater" label="更新人"/> + <el-table-column property="updateTime" label="更新时间" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="巡检点信息"> + <el-form :model="details" label-width="120px"> + <el-form-item label="巡检点名称"> + <el-input v-model="details.name" readonly/> + </el-form-item> + <el-form-item label="所属设备区域"> + <el-input v-model="details.area" readonly/> + </el-form-item> + <el-form-item label="RFID"> + <el-input v-model="details.rfid" readonly/> + </el-form-item> + <el-form-item label="创建人"> + <el-input v-model="details.creater" readonly/> + </el-form-item> + <el-form-item label="创建时间"> + <el-input v-model="details.createTime" readonly/> + </el-form-item> + <el-form-item label="更新人"> + <el-input v-model="details.updater" readonly/> + </el-form-item> + <el-form-item label="更新时间"> + <el-input v-model="details.updateTime" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="巡检点编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="巡检点名称" prop="name"> + <el-input + v-model="addRecord.name" + > + </el-input> + </el-form-item> + <el-form-item label="所属设施区域" prop="area"> + <el-select v-model="addRecord.area"> + <el-option label="风机系统" value="风机系统" /> + <el-option label="A车间" value="A车间" /> + </el-select> + </el-form-item> + <el-form-item label="关联RFID" prop="rfid"> + <el-select v-model="addRecord.rfid"> + <el-option label="风机系统A标签" value="风机系统A标签" /> + <el-option label="A车间A标签" value="A车间A标签" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const searchName = ref('') + const searchPlace = ref('') + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const casProps = { + expandTrigger: 'hover', + multiple: true, + emitPath: false, + checkStrictly: false + } + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + name: '73011', + area: '风机系统', + rfid: '风机系统A标签', + creater: '张三', + createTime: '2022-07-14 12:23:03', + updater: '李四', + updateTime: '2022-07-16 14:23:03' + }, + { + name: '73012', + area: 'A车间', + rfid: 'A车间A标签', + creater: '李四', + createTime: '2022-07-16 12:23:03', + updater: '张三', + updateTime: '2022-07-18 14:23:03' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + area:[{required: true, message: '该内容不能为空',trigger:'blur'}], + rfid:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/IntelligentXjSys/basicDataManagement/rfId/index.vue b/src/views/IntelligentXjSys/basicDataManagement/rfId/index.vue new file mode 100644 index 0000000..8e2e365 --- /dev/null +++ b/src/views/IntelligentXjSys/basicDataManagement/rfId/index.vue @@ -0,0 +1,367 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="12"> + <div class="grid-content topInfo"> + <el-input v-model="searchName" placeholder="RFID名称"></el-input> + <el-input v-model="searchPlace" placeholder="RFID编码"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" width="80" label="序号"/> + <el-table-column property="name" label="RFID名称"/> + <el-table-column property="rfid" label="RFID编码" sortable/> + <el-table-column property="creater" label="创建人"/> + <el-table-column property="createTime" label="创建时间" sortable/> + <el-table-column property="updater" label="更新人"/> + <el-table-column property="updateTime" label="更新时间" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="RFID"> + <el-form :model="details" label-width="120px"> + <el-form-item label="RFID名称"> + <el-input v-model="details.name" readonly/> + </el-form-item> + <el-form-item label="RFID"> + <el-input v-model="details.rfid" readonly/> + </el-form-item> + <el-form-item label="创建人"> + <el-input v-model="details.creater" readonly/> + </el-form-item> + <el-form-item label="创建时间"> + <el-input v-model="details.createTime" readonly/> + </el-form-item> + <el-form-item label="更新人"> + <el-input v-model="details.updater" readonly/> + </el-form-item> + <el-form-item label="更新时间"> + <el-input v-model="details.updateTime" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="RFID编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="RFID名称" prop="name"> + <el-input v-model="addRecord.name"></el-input> + </el-form-item> + <el-form-item label="RFID编码" prop="rfid"> + <el-input v-model="addRecord.rfid"></el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const searchName = ref('') + const searchPlace = ref('') + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const casProps = { + expandTrigger: 'hover', + multiple: true, + emitPath: false, + checkStrictly: false + } + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + name: '风机系统1标签', + rfid: '123456789ABC01', + creater: '张三', + createTime: '2022-07-14 12:23:03', + updater: '李四', + updateTime: '2022-07-16 14:23:03' + }, + { + name: '风机系统2标签', + rfid: '123456789ABC02', + creater: '张三', + createTime: '2022-07-14 12:23:03', + updater: '李四', + updateTime: '2022-07-16 14:23:03' + }, + { + name: '风机系统3标签', + rfid: '123456789ABC03', + creater: '张三', + createTime: '2022-07-14 12:23:03', + updater: '李四', + updateTime: '2022-07-16 14:23:03' + }, + { + name: 'A车间1标签', + rfid: '123456789ABC04', + creater: '李四', + createTime: '2022-07-16 12:23:03', + updater: '张三', + updateTime: '2022-07-18 14:23:03' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + rfid:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.push(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/IntelligentXjSys/inspectionRecordManagement/index.vue b/src/views/IntelligentXjSys/inspectionRecordManagement/index.vue new file mode 100644 index 0000000..172c6a4 --- /dev/null +++ b/src/views/IntelligentXjSys/inspectionRecordManagement/index.vue @@ -0,0 +1,514 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="12"> + <div class="grid-content topInfo"> + <el-select v-model="searchType" @change="changeSearch" placeholder="任务名称"> + <el-option label="巡检任务类型" value="巡检任务类型" /> + <el-option label="创建人" value="创建人" /> + <el-option label="巡检人" value="巡检人" /> + <el-option label="检查频次" value="检查频次" /> + <el-option label="开始时间" value="开始时间" /> + </el-select> + <el-input v-model="searchContent" v-if="searchType == '任务名称'" placeholder="请输入任务名称"></el-input> + <el-input + v-else-if="searchType == '检查频次'" + v-model="searchContent" + placeholder="请输入检查频次" + > + <template #append> + <el-select v-model="searchUnit" placeholder="选择单位"> + <el-option label="分钟" value="分钟" /> + <el-option label="小时" value="小时" /> + <el-option label="天" value="天" /> + </el-select> + </template> + </el-input> + <el-select v-model="searchContent" v-else-if="searchType == '巡检任务类型'" placeholder="请选择任务类型"> + <el-option v-for="(item,index) in typeOptions" :label="item.name" :value="item.value" :key="index"/> + </el-select> + <el-select v-model="searchContent" v-else-if="searchType == '创建人'" placeholder="请选择创建人"> + <el-option v-for="(item,index) in createrOptions" :label="item.name" :value="item.value" :key="index"/> + </el-select> + <el-select v-model="searchContent" v-else-if="searchType == '巡检人'" placeholder="请选择巡检人"> + <el-option v-for="(item,index) in inspectorOptions" :label="item.name" :value="item.value" :key="index"/> + </el-select> + <el-date-picker + v-model="searchContent" + type="date" + v-else + :placeholder="'请选择' + searchType" + size="large" + style="margin-right: 20px" + /> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="name" label="任务名称" width="200"/> + <el-table-column property="type" label="任务类型"/> + <el-table-column property="creater" label="创建人"/> + <el-table-column property="inspector" label="巡检人"/> + <el-table-column property="frequency" label="检查频次"/> + <el-table-column property="unit" label="频次单位"/> + <el-table-column property="startTime" label="任务开始时间" width="180"/> + <el-table-column property="validTime" label="任务有效时间" width="180"/> + <el-table-column property="createTime" label="创建时间" width="180"/> + <el-table-column property="chainLength" label="巡检链长度" width="160"/> + <el-table-column property="status" label="状态" width="60"/> + <el-table-column fixed="right" label="操作" align="center" width="300"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="巡检任务"> + <el-form :model="details" label-width="120px"> + <el-form-item label="任务名称"> + <el-input + v-model="details.name" + readonly + /> + </el-form-item> + <el-form-item label="任务类型"> + <el-input + v-model="details.type" + readonly + /> + </el-form-item> + <el-form-item label="执行巡检人员"> + <el-input + v-model="details.inspector" + readonly + /> + </el-form-item> + <el-form-item label="检查频次"> + <el-input + v-model="details.inspector" + readonly + /> + </el-form-item> + <el-form-item label="检查频次" prop="frequency"> + <el-input + v-model="details.frequency" + readonly + > + <template #append> + <el-input + v-model="details.unit" + readonly + /> + </template> + </el-input> + </el-form-item> + <el-form-item label="周期开始时间"> + <el-input + v-model="details.startTime" + readonly + /> + </el-form-item> + <el-form-item label="周期有效时间"> + <el-input + v-model="details.validTime" + readonly + /> + </el-form-item> + <el-form-item label="巡检链"> + <div style="width: 100%;margin-left: -30px"> + <div v-for="(item,index) in details.shiftSteps" class="stepItem"> + <div class="stepNum">{{index+1}}</div> + <div class="stepCard"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <div>{{item.name}}</div> + </div> + </template> + <div> + <el-table :data="item.inspectorData" style="width: 100%" :default-sort="{ prop: 'sort', order: 'ascending'}" :header-cell-style="{background: '#fafafa',padding: '5px'}"> + <el-table-column property="sort" sortable label="排序"/> + <el-table-column property="name" label="巡检点名称"/> + <el-table-column property="section" label="所属设备区域"/> + <el-table-column property="rfid" label="关联RFID"/> + <el-table-column property="norm" label="巡检指标"/> + <el-table-column property="reference" label="数据参考值"/> + </el-table> + </div> + </el-card> + </div> + </div> + </div> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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, ElMessage } from 'element-plus' + import { FormInstance, FormRules } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + + // 顶部筛选搜索 + const searchType = ref('任务名称') + const typeOptions = ref([ + { + name: '日常检查', + value: '日常检查' + }, + { + name: '周期检查', + value: '周期检查' + } + ]) + const createrOptions = ref([ + { + name: '张三', + value: '张三' + }, + { + name: '李四', + value: '李四' + } + ]) + const inspectorOptions = ref([ + { + name: '李四', + value: '李四' + }, + { + name: '张三', + value: '张三' + } + ]) + const searchUnit = ref('小时') + const changeSearch =()=>{ + searchContent.value='' + } + const searchContent = ref() + + + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const chosenShiftIndex = ref(-1) + const chosenInspectionIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + name: '甲醛装置()列现场岗位巡检', + type: '周期检查', + creater: '管理员A', + inspector: '张三', + frequency: 2, + unit: '小时', + startTime: '2022-07-02 13:01:37', + validTime: '30分钟', + createTime: '2022-07-02 12:03:47', + chainLength: '20', + status: '开启', + shiftSteps:[ + { + name: '风机系统', + inspectorData:[ + { + sort: 1, + name: '73011', + section: '风机系统', + rfid: '风机系统1标签', + norm: '风机声音', + reference: '10<正常<50' + }, + { + sort: 2, + name: '73012', + section: '风机系统', + rfid: '风机系统2标签', + norm: '设备温度', + reference: '20<正常<50' + }, + { + sort: 3, + name: '73013', + section: '风机系统', + rfid: '风机系统3标签', + norm: '风机震动', + reference: '30<正常<50' + } + ] + + }, + { + name: 'A场所', + inspectorData:[ + { + sort: 1, + name: '73021', + section: '风机系统', + rfid: '风机系统1标签', + norm: '风机声音', + reference: '10<正常<50' + }, + { + sort: 2, + name: '73022', + section: '风机系统', + rfid: '风机系统2标签', + norm: '设备温度', + reference: '20<正常<50' + }, + { + sort: 3, + name: '73023', + section: '风机系统', + rfid: '风机系统3标签', + norm: '风机震动', + reference: '30<正常<50' + } + ] + } + ] + }, + { + name: 'A车间日常巡检', + type: '日常检查', + creater: '管理员B', + inspector: '李四', + frequency: 4, + unit: '小时', + startTime: '2022-07-02 12:45:37', + validTime: '30分钟', + createTime: '2022-07-02 08:15:41', + chainLength: '15', + status: '开启' + } + ] + ) + + const dialogDetails = ref(false) + + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .stepItem{ + width: 100%; + display: flex; + align-items: flex-start; + margin-bottom: 30px; + margin-left: 30px; + padding-bottom: 30px; + border-left: 2px solid #ccc; + &:first-of-type{ + margin-top: 30px; + } + &:last-of-type{ + margin-bottom: 0; + border-left: none; + } + .stepNum { + width: 30px; + height: 30px; + border-radius: 15px; + box-sizing: border-box; + color: #333; + border: 1px solid #999; + line-height: 28px; + text-align: center; + margin-right: 10px; + margin-left: -16px; + margin-top: -30px; + } + .stepCard { + width: 100%; + margin-top: -30px; + + .box-card { + width: 100%; + &:deep(.el-card__header){ + padding: 10px 15px + } + .card-header { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + &>div:first-of-type{ + margin-right: 80px; + font-size: 18px; + font-weight: bold; + } + } + } + } + &:hover .card-header{ + color: #0098F5; + } + &:hover .stepNum{ + border: 2px solid #0098F5; + color: #0098F5; + } + } + .el-input{ + width: 100% !important; + } + :deep(.el-date-editor){ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/IntelligentXjSys/inspectionTaskManagement/index.vue b/src/views/IntelligentXjSys/inspectionTaskManagement/index.vue new file mode 100644 index 0000000..5f1e4a9 --- /dev/null +++ b/src/views/IntelligentXjSys/inspectionTaskManagement/index.vue @@ -0,0 +1,966 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="12"> + <div class="grid-content topInfo"> + <el-select v-model="searchType" @change="changeSearch" placeholder="任务名称"> + <el-option label="巡检任务类型" value="巡检任务类型" /> + <el-option label="创建人" value="创建人" /> + <el-option label="巡检人" value="巡检人" /> + <el-option label="检查频次" value="检查频次" /> + <el-option label="开始时间" value="开始时间" /> + </el-select> + <el-input v-model="searchContent" v-if="searchType == '任务名称'" placeholder="请输入任务名称"></el-input> + <el-input + v-else-if="searchType == '检查频次'" + v-model="searchContent" + placeholder="请输入检查频次" + > + <template #append> + <el-select v-model="searchUnit" placeholder="选择单位"> + <el-option label="分钟" value="分钟" /> + <el-option label="小时" value="小时" /> + <el-option label="天" value="天" /> + </el-select> + </template> + </el-input> + <el-select v-model="searchContent" v-else-if="searchType == '巡检任务类型'" placeholder="请选择任务类型"> + <el-option v-for="(item,index) in typeOptions" :label="item.name" :value="item.value" :key="index"/> + </el-select> + <el-select v-model="searchContent" v-else-if="searchType == '创建人'" placeholder="请选择创建人"> + <el-option v-for="(item,index) in createrOptions" :label="item.name" :value="item.value" :key="index"/> + </el-select> + <el-select v-model="searchContent" v-else-if="searchType == '巡检人'" placeholder="请选择巡检人"> + <el-option v-for="(item,index) in inspectorOptions" :label="item.name" :value="item.value" :key="index"/> + </el-select> + <el-date-picker + v-model="searchContent" + type="date" + v-else + :placeholder="'请选择' + searchType" + size="large" + style="margin-right: 20px" + /> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="name" label="任务名称" width="200"/> + <el-table-column property="type" label="任务类型"/> + <el-table-column property="creater" label="创建人"/> + <el-table-column property="inspector" label="巡检人"/> + <el-table-column property="frequency" label="检查频次"/> + <el-table-column property="unit" label="频次单位"/> + <el-table-column property="startTime" label="任务开始时间" width="180"/> + <el-table-column property="validTime" label="任务有效时间" width="180"/> + <el-table-column property="createTime" label="创建时间" width="180"/> + <el-table-column property="chainLength" label="巡检链长度" width="160"/> + <el-table-column property="status" label="状态" width="60"/> + <el-table-column fixed="right" label="操作" align="center" width="300"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-switch + v-model="scope.row.status" + inline-prompt + active-text="开" + inactive-text="关" + active-value="开启" + inactive-value="关闭" + style="margin: 0 10px" + /> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="巡检任务"> + <el-form :model="details" label-width="120px"> + <el-row> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务名称"> + <el-input + v-model="details.name" + readonly + /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务类型"> + <el-input + v-model="details.type" + readonly + /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="执行巡检人员"> + <el-input + v-model="details.inspector" + readonly + /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="检查频次"> + <el-input + v-model="details.inspector" + readonly + /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="检查频次" prop="frequency"> + <el-input + v-model="details.frequency" + readonly + > + <template #append> + <el-input + v-model="details.unit" + readonly + /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="周期开始时间"> + <el-input + v-model="details.startTime" + readonly + /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="周期有效时间"> + <el-input + v-model="details.validTime" + readonly + /> + </el-form-item> + </el-col> + <el-col :span="24" style="margin-bottom: 20px"> + <el-form-item label="巡检链"> + <div style="width: 100%;margin-left: -30px"> + <div v-for="(item,index) in details.shiftSteps" class="stepItem"> + <div class="stepNum">{{index+1}}</div> + <div class="stepCard"> + <el-card class="box-card"> + <template #header> + <div class="card-header"> + <div>{{item.name}}</div> + </div> + </template> + <div class="inspect-chain"> + <el-table :data="item.inspectorData" style="width: 100%" + :default-sort="{ prop: 'sort', order: 'ascending'}" + :header-cell-style="{background: '#fafafa',padding: '5px'}" + > + <el-table-column property="sort" label="排序"/> + <el-table-column property="name" label="巡检点名称"/> + <el-table-column property="section" label="所属设备区域"/> + <el-table-column property="rfid" label="关联RFID"/> + <el-table-column property="norm" label="巡检指标"/> + <el-table-column property="reference" label="数据参考值"/> + </el-table> + </div> + </el-card> + </div> + </div> + </div> + </el-form-item> + </el-col> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-row> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="巡检任务编辑" @close="closeAdd" @open="openAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-row> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务名称" prop="name"> + <el-input + v-model="addRecord.name" + > + </el-input> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务类型" prop="type"> + <el-select v-model="addRecord.type"> + <el-option label="日常检查" value="日常检查" /> + <el-option label="周期检查" value="周期检查" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="执行巡检人员" prop="inspector"> + <el-select v-model="addRecord.inspector"> + <el-option label="张三" value="张三" /> + <el-option label="李四" value="李四" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="检查频次" prop="frequency"> + <el-input + v-model="addRecord.frequency" + placeholder="请输入检查频次" + > + <template #append> + <el-select v-model="addRecord.unit" placeholder="选择单位"> + <el-option label="分钟" value="分钟" /> + <el-option label="小时" value="小时" /> + <el-option label="天" value="天" /> + </el-select> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="周期开始时间" prop="startTime"> + <el-date-picker + v-model="addRecord.startTime" + type="datetime" + format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="周期有效时间" prop="validTime"> + <el-select v-model="addRecord.validTime" placeholder="选择时间"> + <el-option label="15分钟" value="15分钟" /> + <el-option label="30分钟" value="30分钟" /> + <el-option label="45分钟" value="45分钟" /> + <el-option label="60分钟" value="60分钟" /> + <el-option label="75分钟" value="75分钟" /> + <el-option label="90分钟" value="90分钟" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="创建巡检链"> + <div style="width: 100%;margin-bottom: 20px"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddShift = true">新增巡检设备区域</el-button> + </div> + <div style="width: 100%;margin-left: -30px"> + <div v-for="(item,index) in addRecord.shiftSteps" class="stepItem"> + <div class="stepNum">{{index+1}}</div> + <div class="stepCard"> + <el-card class="box-card"> + <template #header> + <div class="card-header"> + <div>{{item.name}}</div> + <div> + <el-button type="primary" size="default" @click="addFlow(index)">新增下一区域</el-button> + <el-button type="danger" size="default" @click="deleteFlow(index)">删除</el-button> + </div> + </div> + </template> + <div class="inspect-chain" style="display: flex;flex-direction: column;align-items: center"> + <el-button type="primary" size="default" :icon="Plus" plain @click="addSysInspection(index)" style="margin-bottom: 10px">添加巡检点</el-button> + <el-table + :data="item.inspectorData" + style="width: 100%" + :default-sort="{ prop: 'sort', order: 'ascending' }" + :header-cell-style="{background: '#fafafa',padding: '5px'}" + > + <el-table-column property="sort" label="排序"/> + <el-table-column property="name" label="巡检点名称"/> + <el-table-column property="section" label="所属设备区域"/> + <el-table-column property="rfid" label="关联RFID"/> + <el-table-column property="norm" label="巡检指标"/> + <el-table-column property="reference" label="数据参考值"/> + <el-table-column fixed="right" label="操作" align="center" width="100"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="Edit" @click="editInspection(index,scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteInspection(index,scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + </el-card> + </div> + </div> + </div> + </el-form-item> + </el-col> + </el-row> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteShiftDialog" title="提示" width="30%" center @close="indexShiftClear"> + <span>您确定要删除该班次吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteShiftDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmShiftDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteInspectionDialog" title="提示" width="30%" center @close="indexInspectionClear"> + <span>您确定要删除该巡检点吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteInspectionDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmInspectionDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="dialogAddShift" title="新增巡检设施区域" @close="closeAddShift"> + <el-form :model="addShift" label-width="120px" ref="addShiftRef" :rules="addShiftRules"> + <el-form-item label="选择巡检设施区域" prop="name"> + <el-select v-model="addShift.name"> + <el-option label="风机系统" value="风机系统" /> + <el-option label="A车间" value="A车间" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddShift = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddShift(addShiftRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddInspection" title="新增巡检点" @close="closeAddInspection"> + <el-form :model="addInspection" label-width="120px" ref="addInspectionRef" :rules="addInspectionRules"> + <el-form-item label="输入巡检点排序" prop="sort"> + <el-input-number v-model="addInspection.sort" :min="1" :max="999" placeholder="巡检点排序"/> + </el-form-item> + <el-form-item label="选择巡检点" prop="name"> + <el-select v-model="addInspection.name"> + <el-option label="73011" value="73011" /> + <el-option label="73012" value="73012" /> + <el-option label="73013" value="73013" /> + </el-select> + </el-form-item> + <el-form-item label="选择巡检指标" prop="norm"> + <el-select v-model="addInspection.norm"> + <el-option label="风机声音" value="风机声音" /> + <el-option label="设备温度" value="设备温度" /> + <el-option label="压力" value="压力" /> + <el-option label="震动" value="震动" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddInspection = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddInspection(addInspectionRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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, ElMessage } from 'element-plus' + import { FormInstance, FormRules } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + + // 顶部筛选搜索 + const searchType = ref('任务名称') + const typeOptions = ref([ + { + name: '日常检查', + value: '日常检查' + }, + { + name: '周期检查', + value: '周期检查' + } + ]) + const createrOptions = ref([ + { + name: '张三', + value: '张三' + }, + { + name: '李四', + value: '李四' + } + ]) + const inspectorOptions = ref([ + { + name: '李四', + value: '李四' + }, + { + name: '张三', + value: '张三' + } + ]) + const searchUnit = ref('小时') + const changeSearch =()=>{ + searchContent.value='' + } + const searchContent = ref() + + + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const chosenShiftIndex = ref(-1) + const chosenInspectionIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + name: '甲醛装置()列现场岗位巡检', + type: '周期检查', + creater: '管理员A', + inspector: '张三', + frequency: 2, + unit: '小时', + startTime: '2022-07-02 13:01:37', + validTime: '30分钟', + createTime: '2022-07-02 12:03:47', + chainLength: '20', + status: '开启', + shiftSteps:[ + { + name: '风机系统', + inspectorData:[ + { + sort: 1, + name: '73011', + section: '风机系统', + rfid: '风机系统1标签', + norm: '风机声音', + reference: '10<正常<50' + }, + { + sort: 2, + name: '73012', + section: '风机系统', + rfid: '风机系统2标签', + norm: '设备温度', + reference: '20<正常<50' + }, + { + sort: 3, + name: '73013', + section: '风机系统', + rfid: '风机系统3标签', + norm: '风机震动', + reference: '30<正常<50' + } + ] + + }, + { + name: 'A场所', + inspectorData:[ + { + sort: 1, + name: '73021', + section: '风机系统', + rfid: '风机系统1标签', + norm: '风机声音', + reference: '10<正常<50' + }, + { + sort: 2, + name: '73022', + section: '风机系统', + rfid: '风机系统2标签', + norm: '设备温度', + reference: '20<正常<50' + }, + { + sort: 3, + name: '73023', + section: '风机系统', + rfid: '风机系统3标签', + norm: '风机震动', + reference: '30<正常<50' + } + ] + } + ] + }, + { + name: 'A车间日常巡检', + type: '日常检查', + creater: '管理员B', + inspector: '李四', + frequency: 4, + unit: '小时', + startTime: '2022-07-02 12:45:37', + validTime: '30分钟', + createTime: '2022-07-02 08:15:41', + chainLength: '15', + status: '开启' + } + ] + ) + const handleChange = (value) => { + addRecord.value.content = [] + console.log(JSON.parse(JSON.stringify(value))) + } + const addRef = ref<FormInstance>() + const addShiftRef = ref<FormInstance>() + const addInspectionRef = ref<FormInstance>() + + // 表单校验 + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + type:[{required: true, message: '该内容不能为空',trigger:'blur'}], + inspector:[{required: true, message: '该内容不能为空',trigger:'blur'}], + frequency:[{required: true, message: '该内容不能为空',trigger:'blur'}], + unit:[{required: true, message: '该内容不能为空',trigger:'blur'}], + startTime:[{required: true, message: '该内容不能为空',trigger:'blur'}], + validTime:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const addShiftRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const addInspectionRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + norm:[{required: true, message: '该内容不能为空',trigger:'blur'}], + sort:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const deleteShiftDialog = ref(false) + const deleteInspectionDialog = ref(false) + const dialogAddShift = ref(false) + const dialogAddInspection = ref(false) + const addRecord = ref({}) + const addShift = ref({}) + const addInspection = ref({}) + const details = ref({}) + + // 查看记录 + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + + // 删除记录 + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + + // 修改添加记录 + const editRecord =(index, row)=>{ + chosenIndex.value = index + dialogAddRecord.value = true + addRecord.value = JSON.parse(JSON.stringify(row)) + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + if(!addRecord.value.shiftSteps || addRecord.value.shiftSteps.length == 0){ + ElMessage({ + message: '请先设置巡检链后再提交', + type: 'warning', + }) + return + // 判断每个区域是否都设置了至少一个巡检点,没有的话提示设置 + }else if(addRecord.value.shiftSteps.some(i => !i.inspectorData || i.inspectorData.length==0)){ + for(let i =0;i<addRecord.value.shiftSteps.length;i++){ + if(!addRecord.value.shiftSteps[i].inspectorData||addRecord.value.shiftSteps[i].inspectorData.length==0){ + ElMessage({ + message: '请为'+ addRecord.value.shiftSteps[i].name +'设置巡检点', + type: 'warning', + }) + } + } + return + }else{ + addRecord.value.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + addRecord.value.chainLength = addRecord.value.shiftSteps.length + addRecord.value.status = '开启' + tableData.unshift(addRecord.value) + } + }else{ + if(addRecord.value.shiftSteps.length == 0){ + ElMessage({ + message: '请先设置巡检链后再提交', + type: 'warning', + }) + return + // 判断每个区域是否都设置了至少一个巡检点,没有的话提示设置 + }else if(addRecord.value.shiftSteps.some(i => !i.inspectorData || i.inspectorData.length==0)){ + for(let i =0;i<addRecord.value.shiftSteps.length;i++){ + if(!addRecord.value.shiftSteps[i].inspectorData||addRecord.value.shiftSteps[i].inspectorData.length==0){ + ElMessage({ + message: '请为'+ addRecord.value.shiftSteps[i].name +'设置巡检点', + type: 'warning', + }) + } + } + return + }else{ + tableData[chosenIndex.value] = addRecord.value + } + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + + // 添加弹窗打开前预操作 + const openAdd =()=>{ + addRecord.value.unit = '小时' + } + + // 弹窗关闭后判断数据初始化 + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + addShift.value={} + chosenShiftIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const indexShiftClear = ()=>{ + chosenShiftIndex.value = -1 + } + const indexInspectionClear = ()=>{ + chosenInspectionIndex.value = -1 + chosenShiftIndex.value = -1 + } + + // 排序 + function compare(key){ + return function(value1,value2){ + var val1=value1[key]; + var val2=value2[key]; + return val1-val2; + } + } + + // 添加删除巡检设施区域 + const addFlow = (index) => { + dialogAddShift.value = true + chosenShiftIndex.value = index + } + + // 删除巡检区域 + const deleteFlow = (index) => { + deleteShiftDialog.value = true + chosenShiftIndex.value = index + } + const conFirmShiftDelete = () => { + addRecord.value.shiftSteps.splice( chosenShiftIndex.value,1) + deleteShiftDialog.value = false + } + + const confirmAddShift = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(addRecord.value.shiftSteps){ + addRecord.value.shiftSteps.splice(chosenShiftIndex.value+1,0,addShift.value) + }else{ + addRecord.value.shiftSteps = [] + addRecord.value.shiftSteps.unshift(addShift.value) + } + dialogAddShift.value = false + } else { + console.log('error submit!', fields) + } + }) + } + + + const addSysInspection =(index)=>{ + dialogAddInspection.value = true + chosenShiftIndex.value = index + } + const confirmAddInspection = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData){ + if(chosenInspectionIndex.value == -1){ + addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData.unshift(addInspection.value) + addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData.sort(compare('sort')) + }else{ + addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData[chosenInspectionIndex.value] = addInspection.value + addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData.sort(compare('sort')) + } + }else{ + addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData = [] + addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData.unshift(addInspection.value) + addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData.sort(compare('sort')) + } + dialogAddInspection.value = false + } else { + console.log('error submit!', fields) + } + }) + } + const deleteInspection = (i,index) =>{ + chosenShiftIndex.value = i + chosenInspectionIndex.value = index + deleteInspectionDialog.value = true + } + const editInspection =(i,index, row)=>{ + chosenShiftIndex.value = i + chosenInspectionIndex.value = index + dialogAddInspection.value = true + addInspection.value = JSON.parse(JSON.stringify(row)) + } + const conFirmInspectionDelete=()=>{ + addRecord.value.shiftSteps[chosenShiftIndex.value].inspectorData.splice( chosenInspectionIndex.value,1) + deleteInspectionDialog.value = false + } + + const closeAddShift =()=>{ + addShift.value={} + chosenShiftIndex.value = -1 + } + const closeAddInspection =()=>{ + addInspection.value={} + chosenShiftIndex.value = -1 + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .stepItem{ + width: 100%; + display: flex; + align-items: flex-start; + margin-bottom: 30px; + margin-left: 30px; + padding-bottom: 30px; + border-left: 2px solid #ccc; + &:first-of-type{ + margin-top: 30px; + } + &:last-of-type{ + margin-bottom: 0; + border-left: none; + } + .stepNum { + width: 30px; + height: 30px; + border-radius: 15px; + box-sizing: border-box; + color: #333; + border: 1px solid #999; + line-height: 28px; + text-align: center; + margin-right: 10px; + margin-left: -16px; + margin-top: -30px; + } + .stepCard { + width: 100%; + margin-top: -30px; + + .box-card { + width: 100%; + &:deep(.el-card__header){ + padding: 10px 15px + } + .card-header { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + &>div:first-of-type{ + margin-right: 80px; + font-size: 18px; + font-weight: bold; + } + } + } + } + &:hover .card-header{ + color: #0098F5; + } + &:hover .stepNum{ + border: 2px solid #0098F5; + color: #0098F5; + } + } + .el-input{ + width: 100% !important; + } + :deep(.el-date-editor){ + width: 100%; + } + .el-select{ + width: 100%; + } + + .inspect-chain :deep(.el-table__row){ + background: #fff; + + } + + .inspect-chain :deep(.el-table__cell){ + background: #fff; + } +</style> diff --git a/src/views/basicRightsManagement/personnelShiftManagement/holidayManagement/index.vue b/src/views/basicRightsManagement/personnelShiftManagement/holidayManagement/index.vue new file mode 100644 index 0000000..5ffe431 --- /dev/null +++ b/src/views/basicRightsManagement/personnelShiftManagement/holidayManagement/index.vue @@ -0,0 +1,379 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="休息日名称"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="name" label="休息日名称"/> + <el-table-column property="type" label="休息类型"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="休息日详情"> + <el-form :model="details" label-width="120px"> + <el-form-item label="名称"> + <el-input + v-model="details.name" + readonly + /> + </el-form-item> + <el-form-item label="休假类型"> + <el-input + v-model="details.type" + readonly + /> + </el-form-item> + <el-form-item label="休假时间" v-if="details.content.length>0"> + <el-input + v-model="details.content" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="休息日编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="名称" prop="name"> + <el-input + v-model="addRecord.name" + > + </el-input> + </el-form-item> + <el-form-item label="休假类型" prop="type"> + <el-cascader + v-model="addRecord.type" + :options="holidayList" + :props="casProps" + @change="handleChange" + /> + </el-form-item> + <el-form-item label="选择休假时间" prop="content" v-if="addRecord.type && JSON.parse(JSON.stringify(addRecord.type))[1] == '每周'"> + <el-checkbox-group v-model="addRecord.content"> + <el-checkbox v-for="(item,i) in weekDays" :label="item" :key="i"/> + </el-checkbox-group> + </el-form-item> + <el-form-item label="选择休假时间" prop="content" v-if="addRecord.type && JSON.parse(JSON.stringify(addRecord.type))[1] == '每月'"> + <el-checkbox-group v-model="addRecord.content"> + <el-checkbox v-for="index in 31" :label="index" :key="index"/> + </el-checkbox-group> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const casProps = { + expandTrigger: 'hover', + } + const tableData = reactive( + [ + { + name: '周末休息', + type: '每周公休假日', + content: '' + }, + { + name: '节假日休息', + type: '每年法定节假日', + content: '' + }, + { + name: '每周一、周四休息', + type: '自定义休息日,每周', + content: ['周一','周四'] + }, + { + name: '每月休息日休息', + type: '自定义休息日,每月', + content: ['5','15','25'] + } + ] + ) + const holidayList =reactive([ + { + value: '每周公休假日', + label: '每周公休假日' + }, + { + value: '每年法定节假日', + label: '每年法定节假日' + }, + { + value: '自定义休息日', + label: '自定义休息日', + children: [ + { + value: '每周', + label: '每周', + }, + { + value: '每月', + label: '每月', + } + ] + } + ]) + const handleChange = (value) => { + addRecord.value.content = [] + console.log(JSON.parse(JSON.stringify(value))) + } + const weekDays = reactive(['周一','周二','周三','周四','周五','周六','周日']) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + type:[{required: true, message: '该内容不能为空',trigger:'blur'}], + content:[{required: true, message: '该内容不能为空'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/basicRightsManagement/personnelShiftManagement/personnelManagement/index.vue b/src/views/basicRightsManagement/personnelShiftManagement/personnelManagement/index.vue new file mode 100644 index 0000000..6274717 --- /dev/null +++ b/src/views/basicRightsManagement/personnelShiftManagement/personnelManagement/index.vue @@ -0,0 +1,375 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="排班名称"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="schedName" label="排班名称"/> + <el-table-column property="schedPlan" label="排班方案"/> + <el-table-column property="restType" label="休息类型"/> + <el-table-column property="team" label="班组"/> + <el-table-column property="startTime" label="排班开始时间"/> + <el-table-column property="endTime" label="排班结束时间"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="人员排班"> + <el-form :model="details" label-width="120px"> + <el-form-item label="排班名称"> + <el-input + v-model="details.schedName" + readonly + /> + </el-form-item> + <el-form-item label="排班方案"> + <el-input v-model="details.schedPlan" readonly/> + </el-form-item> + <el-form-item label="休息类型"> + <el-input v-model="details.restType" type="textarea" readonly/> + </el-form-item> + <el-form-item label="班组选择"> + <el-input v-model="details.team" readonly/> + </el-form-item> + <el-form-item label="排班开始时间"> + <el-input v-model="details.startTime" readonly/> + </el-form-item> + <el-form-item label="排班结束时间"> + <el-input v-model="details.endTime" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="人员排班编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="排班名称" prop="schedName"> + <el-input + v-model="addRecord.schedName" + > + </el-input> + </el-form-item> + <el-form-item label="排班方案" prop="schedPlan"> + <el-select v-model="addRecord.schedPlan"> + <el-option label="三班三倒" value="三班三倒" /> + <el-option label="常白班" value="常白班" /> + </el-select> + </el-form-item> + <el-form-item label="休息类型" prop="restType"> + <el-select v-model="addRecord.restType" multiple> + <el-option label="每周公休假日" value="每周公休假日" /> + <el-option label="自定义/每月" value="自定义/每月" /> + </el-select> + </el-form-item> + <el-form-item label="班组选择" prop="team"> + <el-select v-model="addRecord.team"> + <el-option label="A车间班组" value="A车间班组" /> + <el-option label="B车间班组" value="B车间班组" /> + </el-select> + </el-form-item> + <el-form-item label="排班时间段" prop="timeRange"> + <el-date-picker + v-model="addRecord.timeRange" + format="YYYY-MM-DD" + value-format="YYYY-MM-DD" + type="daterange" + range-separator="至" + start-placeholder="开始时间" + end-placeholder="结束时间" + size="large" + /> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const casProps = { + expandTrigger: 'hover', + multiple: true, + emitPath: false, + checkStrictly: false + } + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + schedName: 'A车间三班三倒', + schedPlan: '三班三倒', + restType: ['每周公休假日'], + team: 'A车间班组', + startTime: '2022-07-14', + endTime: '2022-07-16' + }, + { + schedName: 'B车间常白班', + schedPlan: '常白班', + restType: ['自定义休息日/每周'], + team: 'B车间班组', + startTime: '2022-07-16', + endTime: '2022-07-20' + }, + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + schedName:[{required: true, message: '该内容不能为空',trigger:'blur'}], + schedPlan:[{required: true, message: '该内容不能为空',trigger:'blur'}], + restType:[{required: true, message: '该内容不能为空',trigger:'blur'}], + team:[{required: true, message: '该内容不能为空',trigger:'blur'}], + timeRange:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.startTime = JSON.parse(JSON.stringify(addRecord.value.timeRange))[0] + addRecord.value.endTime = JSON.parse(JSON.stringify(addRecord.value.timeRange))[1] + tableData.unshift(addRecord.value) + }else{ + addRecord.value.startTime = JSON.parse(JSON.stringify(addRecord.value.timeRange))[0] + addRecord.value.endTimeTime = JSON.parse(JSON.stringify(addRecord.value.timeRange))[1] + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + addRecord.value.timeRange= [addRecord.value.startTime,addRecord.value.endTime] + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/basicRightsManagement/personnelShiftManagement/shiftManagement/index.vue b/src/views/basicRightsManagement/personnelShiftManagement/shiftManagement/index.vue new file mode 100644 index 0000000..97994c2 --- /dev/null +++ b/src/views/basicRightsManagement/personnelShiftManagement/shiftManagement/index.vue @@ -0,0 +1,576 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="排班方案名称"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="name" label="排班方案名称"/> + <el-table-column property="type" label="排班类型"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="排班方案"> + <el-form :model="details" label-width="120px"> + <el-form-item label="名称"> + <el-input + v-model="details.name" + readonly + /> + </el-form-item> + <el-form-item label="排班类型"> + <el-input + v-model="details.type" + readonly + /> + </el-form-item> + <el-form-item label="自定义循环班" v-if="JSON.parse(JSON.stringify(details.type)) == '循环班'"> + <div> + <div v-for="(item,index) in details.shiftSteps" class="stepItem"> + <div class="stepNum">{{index+1}}</div> + <div class="stepCard"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <div>第<span>{{index+1}}</span>班</div> + </div> + </template> + <div class="text item">排班名称:<span>{{item.name}}</span></div> + <div class="text item">工作天数:<span>{{item.days}}</span></div> + <div class="text item">休息天数:<span>{{item.rest}}</span></div> + <div class="text item">工作时段:<span>{{item.timeRange}}</span></div> + </el-card> + </div> + </div> + </div> + </el-form-item> + <el-form-item label="工作时段" prop="timeRange" v-if="JSON.parse(JSON.stringify(details.type)) == '固定班'"> + <el-input + v-model="details.timeRange" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default" v-throttle>确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="排班方案编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="排班方案名称" prop="name"> + <el-input + v-model="addRecord.name" + > + </el-input> + </el-form-item> + <el-form-item label="排班类型" prop="type"> + <el-select v-model="addRecord.type"> + <el-option label="循环班" value="循环班" /> + <el-option label="固定班" value="固定班" /> + </el-select> + </el-form-item> + <el-form-item label="自定义循环班" v-if="addRecord.type && JSON.parse(JSON.stringify(addRecord.type)) == '循环班'"> + <div style="width: 100%;margin-bottom: 20px"> + <el-button type="primary" size="default" :icon="Plus" @click="dialogAddShift = true">新增排班</el-button> + </div> + <div> + <div v-for="(item,index) in addRecord.shiftSteps" class="stepItem"> + <div class="stepNum">{{index+1}}</div> + <div class="stepCard"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <div>第<span>{{index+1}}</span>班</div> + <div> + <el-button type="primary" size="default" @click="addFlow(index)">新增</el-button> + <el-button type="danger" size="default" @click="deleteFlow(index)">删除</el-button> + </div> + </div> + </template> + <div class="text item">排班名称:<span>{{item.name}}</span></div> + <div class="text item">工作天数:<span>{{item.days}}</span></div> + <div class="text item">休息天数:<span>{{item.rest}}</span></div> + <div class="text item">工作时段:<span>{{item.timeRange}}</span></div> + </el-card> + </div> + </div> + </div> + </el-form-item> + <el-form-item label="工作时段" prop="timeRange" v-if="addRecord.type && JSON.parse(JSON.stringify(addRecord.type)) == '固定班'"> + <el-select v-model="addRecord.timeRange"> + <el-option label="四班三倒早班" value="四班三倒早班" /> + <el-option label="四班三倒中班" value="四班三倒中班" /> + <el-option label="四班三倒夜班" value="四班三倒夜班" /> + <el-option label="常白班" value="常白班" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default" v-throttle>确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteShiftDialog" title="提示" width="30%" center @close="indexShiftClear"> + <span>您确定要删除该班次吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteShiftDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmShiftDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="dialogAddShift" title="新增排班" @close="closeAddShift"> + <el-form :model="addShift" label-width="120px" ref="addShiftRef" :rules="addShiftRules"> + <el-form-item label="排班方案名称" prop="name"> + <el-input + v-model="addShift.name" + > + </el-input> + </el-form-item> + <el-form-item label="工作天数" prop="days"> + <el-input + v-model="addShift.days" + > + </el-input> + </el-form-item> + <el-form-item label="休息天数" prop="rest"> + <el-input + v-model="addShift.rest" + > + </el-input> + </el-form-item> + <el-form-item label="工作时段" prop="timeRange"> + <el-select v-model="addShift.timeRange"> + <el-option label="三班三倒早班" value="三班三倒早班" /> + <el-option label="三班三倒中班" value="三班三倒中班" /> + <el-option label="三班三倒夜班" value="三班三倒夜班" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddShift = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddShift(addShiftRef)" size="default" v-throttle>确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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, ElMessage } from 'element-plus' + import { FormInstance, FormRules } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const chosenShiftIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const casProps = { + expandTrigger: 'hover', + } + const tableData = reactive( + [ + { + name: '三班三倒', + type: '循环班', + shiftSteps:[ + { + name: '第一班', + days: '5', + rest: '1', + timeRange: '三班三倒早班' + }, + { + name: '第二班', + days: '5', + rest: '2', + timeRange: '三班三倒中班' + }, + { + name: '第三班', + days: '5', + rest: '3', + timeRange: '三班三倒夜班' + } + ] + }, + { + name: '常白班', + type: '固定班' + } + ] + ) + const handleChange = (value) => { + addRecord.value.content = [] + console.log(JSON.parse(JSON.stringify(value))) + } + const addRef = ref<FormInstance>() + const addShiftRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + type:[{required: true, message: '该内容不能为空',trigger:'blur'}], + timeRange:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const addShiftRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + days:[{required: true, message: '该内容不能为空',trigger:'blur'}], + rest:[{required: true,message: '该内容不能为空',trigger: 'blur'}], + timeRange:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const deleteShiftDialog = ref(false) + const dialogAddShift = ref(false) + const addRecord = ref({}) + const addShift = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + if(addRecord.value.type == '循环班' && (!addRecord.value.shiftSteps || addRecord.value.shiftSteps.length == 0)){ + ElMessage({ + message: '请先设置自定义排班后再提交', + type: 'warning', + }) + return + }else{ + tableData.unshift(addRecord.value) + } + }else{ + if(addRecord.value.type == '循环班' && addRecord.value.shiftSteps.length == 0){ + ElMessage({ + message: '请先设置自定义排班后再提交', + type: 'warning', + }) + return + }else{ + if(addRecord.value.type == '固定班'){delete addRecord.value.shiftSteps} + console.log(addRecord.value,'addRecord') + tableData[chosenIndex.value] = addRecord.value + } + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + addShift.value={} + chosenShiftIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const indexShiftClear = ()=>{ + chosenShiftIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + + // 添加删除排班步骤 + const addFlow = (index) => { + dialogAddShift.value = true + chosenShiftIndex.value = index + } + const deleteFlow = (index) => { + deleteShiftDialog.value = true + chosenShiftIndex.value = index + } + const conFirmShiftDelete = () => { + addRecord.value.shiftSteps.splice( chosenShiftIndex.value,1) + deleteShiftDialog.value = false + } + const confirmAddShift = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(addRecord.value.shiftSteps){ + addRecord.value.shiftSteps.splice(chosenShiftIndex.value+1,0,addShift.value) + }else{ + addRecord.value.shiftSteps = [] + addRecord.value.shiftSteps.unshift(addShift.value) + } + dialogAddShift.value = false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAddShift =()=>{ + addShift.value={} + chosenShiftIndex.value = -1 + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .stepItem{ + width: 100%; + display: flex; + align-items: flex-start; + margin-bottom: 30px; + margin-left: 30px; + padding-bottom: 30px; + border-left: 2px solid #ccc; + &:first-of-type{ + margin-top: 30px; + } + &:last-of-type{ + margin-bottom: 0; + border-left: none; + } + .stepNum { + width: 30px; + height: 30px; + border-radius: 15px; + box-sizing: border-box; + color: #333; + border: 1px solid #999; + line-height: 28px; + text-align: center; + margin-right: 20px; + margin-left: -16px; + margin-top: -30px; + } + .stepCard { + width: 100%; + margin-top: -30px; + + .box-card { + width: 100%; + &:deep(.el-card__header){ + padding: 10px 15px + } + .card-header { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + &>div:first-of-type{ + margin-right: 80px; + } + span{ + font-weight: bold; + margin: 0 10px; + } + } + } + } + &:hover .card-header{ + color: #0098F5; + } + &:hover .stepNum{ + border: 2px solid #0098F5; + color: #0098F5; + } + } + .el-input{ + width: 100% !important; + } + :deep(.el-date-editor){ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/basicRightsManagement/personnelShiftManagement/teamManagement/index.vue b/src/views/basicRightsManagement/personnelShiftManagement/teamManagement/index.vue new file mode 100644 index 0000000..04f674a --- /dev/null +++ b/src/views/basicRightsManagement/personnelShiftManagement/teamManagement/index.vue @@ -0,0 +1,384 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="班组名称"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="teamName" label="班组名称"/> + <el-table-column property="teamMember" label="班组人员"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="班组信息"> + <el-form :model="details" label-width="120px"> + <el-form-item label="班组名称"> + <el-input + v-model="details.teamName" + readonly + /> + </el-form-item> + <el-form-item label="班组人员"> + <el-input v-model="details.teamMember" type="textarea" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="班组信息编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="班组名称" prop="teamName"> + <el-input + v-model="addRecord.teamName" + > + </el-input> + </el-form-item> + <el-form-item label="班组人员" prop="teamMember"> + <el-cascader + v-model="addRecord.teamMember" + :options="workerList" + :props="casProps" + :show-all-levels="false" + @change="handleChange" + /> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const casProps = { + expandTrigger: 'hover', + multiple: true, + emitPath: false, + checkStrictly: false + } + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const workerList =reactive([ + { + value: 'A部门车间', + label: 'A部门车间', + children: [ + { + value: '刘能', + label: '刘能', + }, + { + value: '赵四', + label: '赵四', + }, + { + value: '谢广坤', + label: '谢广坤', + }, + { + value: '王大拿', + label: '王大拿', + }, + { + value: '刘能', + label: '刘能', + }, + { + value: '赵四', + label: '赵四', + } + ] + }, + { + value: 'B部门车间', + label: 'B部门车间', + children: [ + { + value: '刘备', + label: '刘备', + }, + { + value: '关羽', + label: '关羽', + }, + { + value: '张飞', + label: '张飞', + }, + { + value: '赵云', + label: '赵云', + }, + { + value: '黄忠', + label: '黄忠', + }, + { + value: '马超', + label: '马超', + } + ] + } + ]) + const tableData = reactive( + [ + { + teamName: 'A车间班组', + teamMember: ['张三','李四','李羽飞'] + }, + { + teamName: 'B车间班组', + teamMember: ['刘能','赵四','谢广坤'] + }, + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + teamName:[{required: true, message: '该内容不能为空',trigger:'blur'}], + teamMember:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/basicRightsManagement/personnelShiftManagement/workingHours/index.vue b/src/views/basicRightsManagement/personnelShiftManagement/workingHours/index.vue new file mode 100644 index 0000000..bb15eed --- /dev/null +++ b/src/views/basicRightsManagement/personnelShiftManagement/workingHours/index.vue @@ -0,0 +1,349 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="工作时段名称"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="100" /> + <el-table-column property="name" label="工作时段名称"/> + <el-table-column property="range" label="排班时段"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="工作时段"> + <el-form :model="details" label-width="120px"> + <el-form-item label="工作时段名称"> + <el-input + v-model="details.name" + class="input-with-select" + readonly + /> + </el-form-item> + <el-form-item label="排班时段"> + <el-input + v-model="details.range" + class="input-with-select" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="工作时段编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="工作时段名称" prop="name"> + <el-input + v-model="addRecord.name" + > + </el-input> + </el-form-item> + <el-form-item label="上班开始时间" prop="startTime"> + <el-time-select + v-model="addRecord.startTime" + start="00:00" + step="00:15" + end="24:00" + placeholder="Select time" + /> + </el-form-item> + <el-form-item label="上班结束时间" prop="endTime"> + <el-time-select + v-model="addRecord.endTime" + start="00:00" + step="00:15" + end="24:00" + placeholder="Select time" + /> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + name: '四班三倒早班', + range: '04:00 - 12:00' + }, + { + name: '四班三倒中班', + range: '12:00 - 20:00' + }, + { + name: '四班三倒中班', + range: '20:00 - 次日04:00' + }, + { + name: '常白班', + range: '08:00 - 18:00' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + startTime:[{required: true, message: '该内容不能为空',trigger:'blur'}], + endTime:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + if(addRecord.value.startTime >= addRecord.value.endTime){ + addRecord.value.endTime = '次日' + addRecord.value.endTime + } + addRecord.value.range = addRecord.value.startTime + '\xa0-\xa0' + addRecord.value.endTime + tableData.unshift(addRecord.value) + }else{ + if(addRecord.value.startTime >= addRecord.value.endTime){ + addRecord.value.endTime = '次日' + addRecord.value.endTime + } + addRecord.value.range = addRecord.value.startTime + '\xa0-\xa0' + addRecord.value.endTime + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + addRecord.value.startTime = addRecord.value.range.substring(0,5) + addRecord.value.endTime = addRecord.value.range.substring(8) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/generalShiftManagement/index.vue b/src/views/generalShiftManagement/index.vue new file mode 100644 index 0000000..30efc7d --- /dev/null +++ b/src/views/generalShiftManagement/index.vue @@ -0,0 +1,395 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" label="序号" width="80" /> + <el-table-column property="name" label="名称" width="200" sortable/> + <el-table-column property="shiftType" label="排班类型" width="200" sortable/> + <el-table-column property="createTime" label="创建时间" width="180" /> +<!-- <el-table-column property="checkType" label="检查类型"/>--> +<!-- <el-table-column property="checkContent" label="检查内容" sortable/>--> +<!-- <el-table-column property="judgement" label="参考判断"/>--> +<!-- <el-table-column property="sort" label="排序" sortable/>--> +<!-- <el-table-column property="remark" label="备注"/>--> +<!-- <el-table-column property="updater" label="更新人"/>--> + <el-table-column property="updateTime" label="更新时间" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="排班方案"> + <el-form :model="details" label-width="120px"> + <el-form-item label="方案名称"> + <el-input + v-model="details.name" + readonly + /> + </el-form-item> + <el-form-item label="双休节假日"> + <el-input + v-model="details.holiday" + readonly + /> + </el-form-item> + <el-form-item label="排班类型"> + <el-input + v-model="details.shiftType" + readonly + /> + </el-form-item> + <el-form-item v-for="(item,index) in details.timeList" :key="index" :label="index == 0?'上班时间段':item.day + '天后倒'"> + <el-input + v-model="item.timeRange" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="排班方案编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="方案名称" prop="name"> + <el-input + v-model="addRecord.name" + > + </el-input> + </el-form-item> + <el-form-item label="双休节假日" prop="holiday"> + <el-select v-model="addRecord.holiday"> + <el-option label="休假" value="休假" /> + <el-option label="不休假" value="不休假" /> + </el-select> + </el-form-item> + <el-form-item label="排班类型" prop="checkType"> + <el-select v-model="addRecord.shiftType"> + <el-option label="循环班" value="循环班" /> + <el-option label="常白班" value="常白班" /> + </el-select> + </el-form-item> + <el-form-item label="检查内容" prop="checkContent"> + <el-input + v-model="addRecord.checkContent" + type="textarea" + > + </el-input> + </el-form-item> + <el-form-item label="参考判断" prop="judgement"> + <el-radio-group v-model="addRecord.judgement"> + <el-radio label="Y" size="large">Y</el-radio> + <el-radio label="N" size="large">N</el-radio> + </el-radio-group> + </el-form-item> + <el-form-item label="排序值" prop="sort"> + <el-input-number v-model="addRecord.sort" :min="1" :max="100" @change="handleChange" /> + </el-form-item> + <el-form-item label="备注"> + <el-input v-model="addRecord.remark" type="textarea"/> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default" v-throttle>确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default" v-throttle>确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Edit, View, Plus, Delete, Refresh, Search, Upload } from '@element-plus/icons-vue' + import { ElTable } from 'element-plus' + import { FormInstance, FormRules } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + name: '三班两倒', + holiday: '不休假', + shiftType: '循环班', + timeList:[ + { + timeRange: '15:20 - 18:00' + }, + { + day: 1, + timeRange: '15:20 - 18:00' + }, + { + day: 1, + timeRange: '20:20 - 06:00' + } + ] + }, + { + name: '四班三倒', + holiday: '不休假', + shiftType: '循环班', + timeList:[ + { + timeRange: '15:20 - 18:00' + }, + { + day: 2, + timeRange: '15:20 - 18:00' + }, + { + day: 1, + timeRange: '20:20 - 06:00' + }, + { + day: 1, + timeRange: '08:30 - 18:00' + } + ] + } + ] + ) + const addRef = ref<FormInstance>() + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const addRules = reactive<FormRules>({ + jobType:[{required: true, message: '该内容不能为空',trigger:'blur'}], + type:[{required: true, message: '该内容不能为空',trigger:'blur'}], + checkType:[{required: true, message: '该内容不能为空',trigger:'blur'}], + checkContent:[{required: true, message: '该内容不能为空',trigger:'blur'}], + judgement:[{required: true, message: '该内容不能为空',trigger:'blur'}], + sort:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.push(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/riskWarningSys/accidentLevel/index.vue b/src/views/riskWarningSys/accidentLevel/index.vue new file mode 100644 index 0000000..a876414 --- /dev/null +++ b/src/views/riskWarningSys/accidentLevel/index.vue @@ -0,0 +1,407 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" label="编号" width="80"/> + <el-table-column property="month" label="所属月份"/> + <el-table-column property="level" label="事故类型"/> + <el-table-column property="amount" label="事故起数(起)"/> + <el-table-column property="death" label="死亡人数(人)"/> + <el-table-column property="injury" label="重伤人数(人)"/> + <el-table-column property="wound" label="轻伤人数(人)"/> + <el-table-column property="cost" label="直接经济损失(万)"/> + <el-table-column property="updateTime" label="提交时间"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="查看详情"> + <el-form :model="details" label-width="120px"> + <el-form-item label="所属月份"> + <el-input + v-model="details.month" + readonly + /> + </el-form-item> + <el-form-item label="事故类型"> + <el-input + v-model="details.level" + readonly + /> + </el-form-item> + <el-form-item label="事故起数(起)"> + <el-input + v-model="details.amount" + readonly + /> + </el-form-item> + <el-form-item label="死亡人数(人)"> + <el-input + v-model="details.death" + readonly + /> + </el-form-item> + <el-form-item label="重伤人数(人)"> + <el-input + v-model="details.injury" + readonly + /> + </el-form-item> + <el-form-item label="轻伤人数(人)"> + <el-input + v-model="details.wound" + readonly + /> + </el-form-item> + <el-form-item label="直接经济损失(万)"> + <el-input + v-model="details.cost" + readonly + /> + </el-form-item> + <el-form-item label="提交时间"> + <el-input + v-model="details.updateTime" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="事故等级编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="所属时间" prop="month"> + <el-date-picker + v-model="addRecord.month" + type="month" + placeholder="请选择日期" + format="YYYY-MM" value-format="YYYY-MM" + /> + </el-form-item> + <el-form-item label="事故类型" prop="level"> + <el-select v-model="addRecord.level" placeholder="请选择"> + <el-option label="特别重大事故" value="特别重大事故" /> + <el-option label="重大事故" value="重大事故" /> + <el-option label="较大事故" value="较大事故" /> + <el-option label="一般事故" value="一般事故" /> + <el-option label="未遂事故" value="未遂事故" /> + </el-select> + </el-form-item> + <el-form-item label="事故起数" prop="amount"> + <el-input + v-model="addRecord.amount" + placeholder="请填写事故次数" + type="number" + > + </el-input> + </el-form-item> + <el-form-item label="死亡人数" prop="death"> + <el-input + v-model="addRecord.death" + placeholder="请填写死亡人数" + type="number" + > + </el-input> + </el-form-item> + <el-form-item label="重伤人数" prop="injury"> + <el-input + v-model="addRecord.injury" + placeholder="请填写重伤人数" + type="number" + > + </el-input> + </el-form-item> + <el-form-item label="轻伤人数" prop="wound"> + <el-input + v-model="addRecord.wound" + placeholder="请填写轻伤人数" + type="number" + > + </el-input> + </el-form-item> + <el-form-item label="直接经济损失" prop="cost"> + <el-input + v-model="addRecord.cost" + placeholder="请填写直接经济损失" + type="number" + > + </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + month: '2022-07', + level: '未遂事故', + amount: 1, + death: 0, + injury: 0, + wound: 0, + cost: 1, + updateTime: '2022-07-26 15:55:00' + }, + { + month: '2022-06', + level: '未遂事故', + amount: 2, + death: 0, + injury: 0, + wound: 0, + cost: 15, + updateTime: '2022-07-26 15:55:00' + }, + { + month: '2022-05', + level: '一般事故', + amount: 1, + death: 0, + injury: 0, + wound: 1, + cost: 100, + updateTime: '2022-07-26 15:55:00' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + month:[{required: true, message: '该内容不能为空'}], + level:[{required: true, message: '该内容不能为空',trigger:'blur'}], + amount:[{required: true, message: '该内容不能为空',trigger:'blur'}], + death:[{required: true, message: '该内容不能为空',trigger:'blur'}], + injury:[{required: true, message: '该内容不能为空',trigger:'blur'}], + wound:[{required: true, message: '该内容不能为空',trigger:'blur'}], + cost:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/riskWarningSys/educationAndTraining/index.vue b/src/views/riskWarningSys/educationAndTraining/index.vue new file mode 100644 index 0000000..39b1979 --- /dev/null +++ b/src/views/riskWarningSys/educationAndTraining/index.vue @@ -0,0 +1,343 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" label="编号" width="80"/> + <el-table-column property="month" label="所属月份"/> + <el-table-column property="level" label="级别"/> + <el-table-column property="amount" label="培训次数(次)"/> + <el-table-column property="eduTime" label="教育时间比" /> + <el-table-column property="updateTime" label="提交时间"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="查看详情"> + <el-form :model="details" label-width="120px"> + <el-form-item label="所属月份"> + <el-input + v-model="details.month" + readonly + /> + </el-form-item> + <el-form-item label="级别"> + <el-input + v-model="details.level" + readonly + /> + </el-form-item> + <el-form-item label="培训次数(次)"> + <el-input + v-model="details.amount" + readonly + /> + </el-form-item> + <el-form-item label="教育时间比"> + <el-input + v-model="details.eduTime" + readonly + /> + </el-form-item> + <el-form-item label="提交时间"> + <el-input + v-model="details.updateTime" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="教育培训记录编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="所属时间" prop="month"> + <el-date-picker + v-model="addRecord.month" + type="month" + placeholder="请选择日期" + format="YYYY-MM" value-format="YYYY-MM" + /> + </el-form-item> + <el-form-item label="选择级别" prop="level"> + <el-select v-model="addRecord.level" placeholder="请选择"> + <el-option label="公司级" value="公司级" /> + <el-option label="事业部级" value="事业部级" /> + <el-option label="车间级" value="车间级" /> + <el-option label="班组级" value="班组级" /> + </el-select> + </el-form-item> + <el-form-item label="培训次数" prop="amount"> + <el-input + v-model="addRecord.amount" + placeholder="请填写培训次数" + type="number" + > + </el-input> + </el-form-item> + <el-form-item label="教育时间比" prop="eduTime"> + <el-select v-model="addRecord.eduTime" placeholder="请选择"> + <el-option label="大于或等于100%" value="大于或等于100%" /> + <el-option label="大于或等于80%,小于100%" value="大于或等于80%,小于100%" /> + <el-option label="大于或等于50%,小于80%" value="大于或等于50%,小于80%" /> + <el-option label="大于或等于30%,小于50%" value="大于或等于30%,小于50%" /> + <el-option label="小于30%" value="小于30%" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + month: '2022-07', + level: '公司级', + amount: 10, + eduTime: '大于或等于100%', + updateTime: '2022-07-26 15:55:00' + }, + { + month: '2022-06', + level: '班组级', + amount: 10, + eduTime: '大于或等于100%', + updateTime: '2022-06-26 15:55:00' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + month:[{required: true, message: '该内容不能为空'}], + level:[{required: true, message: '该内容不能为空',trigger:'blur'}], + amount:[{required: true, message: '该内容不能为空',trigger:'blur'}], + eduTime:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/riskWarningSys/emergencyDrills/index.vue b/src/views/riskWarningSys/emergencyDrills/index.vue new file mode 100644 index 0000000..76722d5 --- /dev/null +++ b/src/views/riskWarningSys/emergencyDrills/index.vue @@ -0,0 +1,342 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" label="编号" width="80"/> + <el-table-column property="month" label="所属月份"/> + <el-table-column property="level" label="级别"/> + <el-table-column property="amount" label="演练次数(次)"/> + <el-table-column property="aftTime" label="应急演练后时间" /> + <el-table-column property="updateTime" label="提交时间"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="查看详情"> + <el-form :model="details" label-width="120px"> + <el-form-item label="所属月份"> + <el-input + v-model="details.month" + readonly + /> + </el-form-item> + <el-form-item label="级别"> + <el-input + v-model="details.level" + readonly + /> + </el-form-item> + <el-form-item label="演练次数(次)"> + <el-input + v-model="details.amount" + readonly + /> + </el-form-item> + <el-form-item label="应急演练后时间"> + <el-input + v-model="details.aftTime" + readonly + /> + </el-form-item> + <el-form-item label="提交时间"> + <el-input + v-model="details.updateTime" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="应急演练编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="所属时间" prop="month"> + <el-date-picker + v-model="addRecord.month" + type="month" + placeholder="请选择日期" + format="YYYY-MM" value-format="YYYY-MM" + /> + </el-form-item> + <el-form-item label="选择级别" prop="level"> + <el-select v-model="addRecord.level" placeholder="请选择"> + <el-option label="公司级" value="公司级" /> + <el-option label="事业部级" value="事业部级" /> + <el-option label="车间级" value="车间级" /> + <el-option label="班组级" value="班组级" /> + </el-select> + </el-form-item> + <el-form-item label="培训次数" prop="amount"> + <el-input + v-model="addRecord.amount" + placeholder="请填写培训次数" + type="number" + > + </el-input> + </el-form-item> + <el-form-item label="应急演练后时间" prop="aftTime"> + <el-select v-model="addRecord.aftTime" placeholder="请选择"> + <el-option label="小于或等于一周" value="小于或等于一周" /> + <el-option label="大于一周,小于或等于二周" value="大于一周,小于或等于二周" /> + <el-option label="大于二周,小于或等于三周" value="大于二周,小于或等于三周" /> + <el-option label="大于三周" value="大于三周" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + month: '2022-07', + level: '公司级', + amount: 10, + aftTime: '小于或等于一周', + updateTime: '2022-07-26 15:55:00' + }, + { + month: '2022-06', + level: '班组级', + amount: 10, + aftTime: '大于一周,小于或等于二周', + updateTime: '2022-06-26 15:55:00' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + month:[{required: true, message: '该内容不能为空'}], + level:[{required: true, message: '该内容不能为空',trigger:'blur'}], + amount:[{required: true, message: '该内容不能为空',trigger:'blur'}], + aftTime:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/riskWarningSys/riskLevel/index.vue b/src/views/riskWarningSys/riskLevel/index.vue new file mode 100644 index 0000000..c4cfb64 --- /dev/null +++ b/src/views/riskWarningSys/riskLevel/index.vue @@ -0,0 +1,322 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" label="编号" width="80"/> + <el-table-column property="month" label="所属月份"/> + <el-table-column property="level" label="风险类型"/> + <el-table-column property="amount" label="风险个数(个)"/> + <el-table-column property="updateTime" label="提交时间"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="查看详情"> + <el-form :model="details" label-width="120px"> + <el-form-item label="所属月份"> + <el-input + v-model="details.month" + readonly + /> + </el-form-item> + <el-form-item label="风险类型"> + <el-input + v-model="details.level" + readonly + /> + </el-form-item> + <el-form-item label="风险个数(个)"> + <el-input + v-model="details.amount" + readonly + /> + </el-form-item> + <el-form-item label="提交时间"> + <el-input + v-model="details.updateTime" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="风险等级编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="所属时间" prop="month"> + <el-date-picker + v-model="addRecord.month" + type="month" + placeholder="请选择日期" + format="YYYY-MM" value-format="YYYY-MM" + /> + </el-form-item> + <el-form-item label="风险类型" prop="level"> + <el-select v-model="addRecord.level" placeholder="请选择"> + <el-option label="高风险" value="高风险" /> + <el-option label="低风险" value="低风险" /> + </el-select> + </el-form-item> + <el-form-item label="风险个数" prop="amount"> + <el-input + v-model="addRecord.amount" + placeholder="请填写风险个数" + type="number" + > + </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const tableData = reactive( + [ + { + month: '2022-07', + level: '低风险', + amount: 1, + updateTime: '2022-07-26 15:55:00' + }, + { + month: '2022-06', + level: '高风险', + amount: 2, + updateTime: '2022-07-26 15:55:00' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + month:[{required: true, message: '该内容不能为空'}], + level:[{required: true, message: '该内容不能为空',trigger:'blur'}], + amount:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/specialWorkSystem/afterWorkManagement/workTicketCheck/index.vue b/src/views/specialWorkSystem/afterWorkManagement/workTicketCheck/index.vue index cba6e83..35df32c 100644 --- a/src/views/specialWorkSystem/afterWorkManagement/workTicketCheck/index.vue +++ b/src/views/specialWorkSystem/afterWorkManagement/workTicketCheck/index.vue @@ -31,14 +31,15 @@ <el-table-column type="selection" width="55" /> <el-table-column property="id" label="作业证编号" width="200" sortable/> <el-table-column property="cardName" label="作业证名称" width="180" /> - <el-table-column property="checkinTime" label="抽检日期" sortable/> - <el-table-column property="name" label="抽检人"/> + <el-table-column property="worker" label="抽检人"/> + <el-table-column property="checkTime" label="抽检时间" sortable/> <el-table-column property="result" label="抽检结果"/> <el-table-column property="remark" label="抽检意见"/> - <el-table-column fixed="right" label="操作" width="180"> + <el-table-column fixed="right" label="操作" align="center" width="250"> <template #default="scope"> - <el-button link type="primary" size="small" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="danger" size="small" @click="deleteRecord(scope.row)">删除</el-button> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> </template> </el-table-column> </el-table> @@ -58,7 +59,7 @@ </div> </div> </el-scrollbar> - <el-dialog v-model="dialogDetails" title="作业票抽检" @close="dialogColse"> + <el-dialog v-model="dialogDetails" title="作业票抽检"> <el-form :model="details" label-width="120px"> <el-form-item label="作业证编号"> <el-input @@ -69,7 +70,7 @@ </el-form-item> <el-form-item label="抽检人"> <el-input - v-model="details.name" + v-model="details.worker" class="input-with-select" readonly /> @@ -83,7 +84,7 @@ </el-form-item> <el-form-item label="抽检时间"> <el-input - v-model="details.checkinTime" + v-model="details.checkTime" class="input-with-select" readonly /> @@ -96,11 +97,11 @@ </el-form-item> </el-form> </el-dialog> - <el-dialog v-model="dialogAddRecord" title="新建作业票抽检" @close="dialogColse"> - <el-form :model="AddRecord" label-width="120px"> - <el-form-item label="作业证编号"> + <el-dialog v-model="dialogAddRecord" title="作业票抽检编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="作业证编号" prop="id"> <el-input - v-model="AddRecord.id" + v-model="addRecord.id" class="input-with-select" > <template #append> @@ -108,9 +109,9 @@ </template> </el-input> </el-form-item> - <el-form-item label="作业证名称"> + <el-form-item label="作业证名称" prop="cardName"> <el-input - v-model="AddRecord.cardName" + v-model="addRecord.cardName" class="input-with-select" > <template #append> @@ -118,9 +119,9 @@ </template> </el-input> </el-form-item> - <el-form-item label="抽检人"> + <el-form-item label="抽检人" prop="worker"> <el-input - v-model="AddRecord.name" + v-model="addRecord.worker" class="input-with-select" > <template #append> @@ -128,34 +129,30 @@ </template> </el-input> </el-form-item> - <el-form-item label="抽检结果"> - <el-select v-model="AddRecord.result"> + <el-form-item label="抽检时间" prop="checkTime"> + <el-date-picker v-model="addRecord.checkTime" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" placeholder="Select date and time"/> + </el-form-item> + <el-form-item label="抽检结果" prop="result"> + <el-select v-model="addRecord.result"> <el-option label="合格" value="合格" /> <el-option label="不合格" value="不合格" /> </el-select> </el-form-item> - <el-form-item label="抽检时间"> - <el-date-picker - v-model="AddRecord.checkinTime" - type="datetime" - placeholder="请选择" - /> - </el-form-item> <el-form-item label="抽检意见"> - <el-input v-model="AddRecord.remark" type="textarea"/> + <el-input v-model="addRecord.remark" type="textarea"/> </el-form-item> <el-form-item> - <el-button type="warning" @click="dialogDetails = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="addRecord" size="default">确认</el-button> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default" v-throttle>确认</el-button> </el-form-item> </el-form> </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> <span>您确定要删除该条记录吗?</span> <template #footer> <span class="dialog-footer"> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default" v-throttle>确认</el-button> </span> </template> </el-dialog> @@ -168,8 +165,9 @@ import { initBackEndControlRoutes } from '/@/router/backEnd'; import {useUserInfo} from "/@/stores/userInfo"; import { Session } from '/@/utils/storage'; - import { Edit, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' + import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' import { ElTable } from 'element-plus' + import { FormInstance, FormRules } from 'element-plus' let global: any = { homeChartOne: null, homeChartTwo: null, @@ -183,89 +181,113 @@ interface type { } - // export default defineComponent({ - // name: 'workCheckinRecord', - // setup() { - const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({}); - const currentPage = ref(1) - const pageSize = ref(10) - const handleSizeChange = (val: number) => { - console.log(`${val} items per page`) + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + + // 分页 + const currentPage = ref(1) + const pageSize = ref(10) + + // 判断编辑和新增 + const chosenIndex = ref(-1) + + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + id: '11011', + cardName: '动火作业证', + checkTime: '2021-04-22 15:21:31', + worker: '吴海涛', + result: '合格', + remark: '没意见' + }, + { + id: '11012', + cardName: '动火作业证', + checkTime: '2021-04-22 15:21:31', + worker: '吴沈峰', + result: '合格', + remark: '有点意见' + }, + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + id:[{required: true, message: '该内容不能为空',trigger:'blur'}], + cardName:[{required: true, message: '该内容不能为空',trigger:'blur'}], + worker:[{required: true, message: '该内容不能为空',trigger:'blur'}], + result:[{required: true, message: '该内容不能为空',trigger:'blur'}], + checkTime:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + + // 查看记录 + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + + // 删除记录 + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + + // 弹窗确认删除记录 + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + + // 弹窗确认新增记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) } - const handleCurrentChange = (val: number) => { - console.log(`current page: ${val}`) - } - const tableData = ref( - [ - { - id: '11011', - cardName: '动火作业证', - checkinTime: '2021-04-22 15:21:31', - name: '吴海涛', - result: '合格', - remark: '没意见' - }, - { - id: '11012', - cardName: '动火作业证', - checkinTime: '2021-04-22 15:21:31', - name: '吴沈峰', - result: '合格', - remark: '有点意见' - }, - ] - ) - const dialogDetails = ref(false) - const dialogAddRecord = ref(false) - const deleteDialog = ref(false) - const AddRecord = ref({}) - const details = ref({}) - const viewRecord = (row) =>{ - details.value = JSON.parse(JSON.stringify(row)) - dialogDetails.value = true - } - const deleteRecord = (row) =>{ - deleteDialog.value = true - } - const conFirmDelete = (row)=> { - console.log(row,'row') - details.value = JSON.parse(JSON.stringify(row)) - console.log(details,'details') - dialogDetails.value = true - } - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId',value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - // return { - // renderMenu, - // multipleTableRef, - // tableData, - // currentPage, - // pageSize, - // dialogDetails, - // details, - // deleteDialog, - // dialogAddRecord, - // viewRecord, - // deleteRecord, - // handleSizeChange, - // handleCurrentChange, - // Plus, - // Edit, - // Delete, - // Search, - // Download, - // handleSelectionChange, - // Refresh, - // ...toRefs(state), - // }; - // }, - // }); + }) + + } + // 新增弹窗关闭时的数据初始化处理 + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + + // 修改编辑记录 + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; </script> <style scoped lang="scss"> @@ -336,4 +358,13 @@ } } } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } </style> diff --git a/src/views/specialWorkSystem/afterWorkManagement/workTicketRecord/index.vue b/src/views/specialWorkSystem/afterWorkManagement/workTicketRecord/index.vue index 85657ec..13b184e 100644 --- a/src/views/specialWorkSystem/afterWorkManagement/workTicketRecord/index.vue +++ b/src/views/specialWorkSystem/afterWorkManagement/workTicketRecord/index.vue @@ -4,22 +4,26 @@ <el-row class="homeCard"> <el-col :span="12"> <div class="grid-content topInfo"> - <el-select v-model="searchType" placeholder="请选择" style="width: 100%"> + <el-select v-model="searchType"> <el-option label="动火作业" value="动火作业" /> <el-option label="动土作业" value="动土作业" /> </el-select> - <el-input v-model="searchWord" placeholder="作业证编号"></el-input> + <el-input v-model="searchWord" placeholder="申请单位"></el-input> <el-button type="primary">查询</el-button> <el-button plain>重置</el-button> - <el-button-group style="display: flex;margin-left: 12px"> - <el-button plain :icon="Download"></el-button> - <el-button plain :icon="Refresh"></el-button> - </el-button-group> </div> </el-col> </el-row> <div class="homeCard"> <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> <el-table ref="multipleTableRef" :data="tableData" @@ -28,11 +32,17 @@ @selection-change="handleSelectionChange" > <el-table-column type="selection" width="55" /> - <el-table-column property="id" label="作业证编号" width="300" sortable /> - <el-table-column property="cardName" label="作业证名称" width="300" /> - <el-table-column property="name" label="申请人" width="300" /> - <el-table-column property="department" label="申请部门" /> - <el-table-column property="date" label="归档日期" sortable /> + <el-table-column property="id" label="作业证编号" width="200" sortable/> + <el-table-column property="cardName" label="作业证名称" width="180" /> + <el-table-column property="name" label="申请人"/> + <el-table-column property="department" label="申请部门"/> + <el-table-column property="date" label="归档日期" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> </el-table> </div> <div class="pageBtn"> @@ -49,51 +59,67 @@ /> </div> </div> - <el-dialog v-model="dialogDetails" title="签到记录" @close="dialogColse"> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="作业票查看"> <el-form :model="details" label-width="120px"> <el-form-item label="作业证编号"> - <el-input v-model="details.id" readonly/> - </el-form-item> - <el-form-item label="签到人"> <el-input - v-model="details.worker" - class="input-with-select" - readonly - > - <template #append> - <el-button :icon="Search" /> - </template> - </el-input> + v-model="details.id" + readonly + /> </el-form-item> -<!-- <el-form-item label="签到状态">--> -<!-- <el-select v-model="details.status" readonly>--> -<!-- <el-option label="已签到" value="已签到" />--> -<!-- <el-option label="未签到" value="未签到" />--> -<!-- </el-select>--> -<!-- </el-form-item>--> - <el-form-item label="签到时间"> - <el-input v-model="details.checkinTime" readonly/> + <el-form-item label="作业证名称"> + <el-input + v-model="details.cardName" + readonly + /> </el-form-item> - <el-form-item label="备注"> - <el-input v-model="details.remark" type="textarea" readonly/> + <el-form-item label="申请人"> + <el-input + v-model="details.name" + readonly + /> + </el-form-item> + <el-form-item label="申请部门"> + <el-input + v-model="details.department" + class="input-with-select" + readonly + /> + </el-form-item> + <el-form-item label="归档日期"> + <el-input + v-model="details.date" + class="input-with-select" + readonly + /> </el-form-item> <el-form-item> <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> </el-form-item> </el-form> </el-dialog> - </el-scrollbar> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default" v-throttle>确认</el-button> + </span> + </template> + </el-dialog> </div> </template> -<script lang="ts"> - import { toRefs, reactive, defineComponent, ref } from 'vue'; +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; import { storeToRefs } from 'pinia'; import { initBackEndControlRoutes } from '/@/router/backEnd'; import {useUserInfo} from "/@/stores/userInfo"; import { Session } from '/@/utils/storage'; - import { Plus, Edit, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' + import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' import { ElTable } from 'element-plus' + import { FormInstance, FormRules } from 'element-plus' let global: any = { homeChartOne: null, homeChartTwo: null, @@ -107,75 +133,109 @@ interface type { } - interface User { - date: string - name: string - address: string + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + + // 分页 + const currentPage = ref(1) + const pageSize = ref(10) + + // 顶部查询 + const searchType = ref('') + const searchWord = ref('') + + // 判断编辑和新增 + const chosenIndex = ref(-1) + + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) } - export default defineComponent({ - name: 'gasCheckAnalyze', - setup() { - const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({}); - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const multipleSelection = ref<User[]>([]) - const handleSelectionChange = (val: User[]) => { - multipleSelection.value = val + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + id: '11011', + cardName: '动火作业证', + name: '吴海涛', + department: '动火部门', + date: '2021-04-22 15:21:31' + }, + { + id: '11011', + cardName: '动火作业证', + name: '吴海涛', + department: '动火部门', + date: '2021-04-22 15:21:31' } - const currentPage = ref(1) - const pageSize = ref(10) - const handleSizeChange = (val: number) => { - console.log(`${val} items per page`) - } - const handleCurrentChange = (val: number) => { - console.log(`current page: ${val}`) - } - const tableData: User[] = [ - { - id: '11011', - cardName: '动火作业证', - name: '吴沈峰', - department: '土木部', - date: '2021-04-22 15:21:31' + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + id:[{required: true, message: '该内容不能为空',trigger:'blur'}], + cardName:[{required: true, message: '该内容不能为空',trigger:'blur'}], + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + department:[{required: true, message: '该内容不能为空',trigger:'blur'}], + date:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + + // 查看记录 + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + + // 删除记录 + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + + // 弹窗确认删除记录 + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + + // 弹窗确认新增记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value } - ] - const dialogDetails = ref(false) - const details = ref({}) - const viewDetails = (row)=> { - console.log(row,'row') - details.value = JSON.parse(JSON.stringify(row)) - console.log(details,'details') - dialogDetails.value = true + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) } - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId',value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - renderMenu, - multipleTableRef, - tableData, - currentPage, - pageSize, - dialogDetails, - details, - viewDetails, - handleSizeChange, - handleCurrentChange, - Plus, - Edit, - Delete, - Search, - Download, - handleSelectionChange, - Refresh, - ...toRefs(state), - }; - }, - }); + }) + + } + // 新增弹窗关闭时的数据初始化处理 + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; </script> <style scoped lang="scss"> @@ -246,4 +306,13 @@ } } } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } </style> diff --git a/src/views/specialWorkSystem/approveProcessManagement/addApproveProcess/index.vue b/src/views/specialWorkSystem/approveProcessManagement/addApproveProcess/index.vue deleted file mode 100644 index e01d0e3..0000000 --- a/src/views/specialWorkSystem/approveProcessManagement/addApproveProcess/index.vue +++ /dev/null @@ -1,214 +0,0 @@ -<template> - <div class="home-container"> - <el-scrollbar height="100%"> - <div class="homeCard"> - <el-row> - <el-button type="primary" size="large" @click="addApprove">新建审批环节</el-button> - </el-row> - <el-row> - <el-table :data="tableData" border style="width: 100%"> - <el-table-column type="index" label="编号" width="100"/> - <el-table-column prop="step" label="环节名称"/> - <el-table-column prop="type" label="审核类型" width="180"/> - <el-table-column prop="createTime" label="创建时间" width="180" /> - <el-table-column prop="editor" label="最新编辑人" width="180" /> - <el-table-column prop="editeTime" label="最新编辑时间" width="180" /> - <el-table-column fixed="right" label="操作" width="180"> - <template #default="scope"> - <el-button link type="primary" size="small" @click="editeRow(scope.$index,scope.row)">编辑</el-button> - <el-button link type="danger" size="small" @click="deleteRow(scope.$index)">删除</el-button> - </template> - </el-table-column> - </el-table> - </el-row> - </div> - <el-dialog v-model="dialogAddForm" title="新建审批环节" @close="dialogColse"> - <el-form :model="reportForm" label-width="120px" ref="ruleFormRef" :rules="rules"> - <el-form-item label="环节名称" prop="step"> - <el-select v-model="reportForm.step" placeholder="选择环节名称"> - <el-option label="作业负责人审批" value="作业负责人审批" /> - <el-option label="作业负责人审批2" value="作业负责人审批2" /> - <el-option label="作业负责人审批3" value="作业负责人审批3" /> - </el-select> - </el-form-item> - <el-form-item label="审核类型" prop="type"> - <el-select v-model="reportForm.type" placeholder="选择审核类型"> - <el-option label="上报审批意见" value="上报审批意见" /> - <el-option label="上报气体检测数据" value="上报气体检测数据" /> - <el-option label="上报安全措施确认" value="上报安全措施确认" /> - </el-select> - </el-form-item> - <el-form-item label="最新编辑人"> - <el-input v-model="reportForm.editor" /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="onSubmitAddForm(ruleFormRef)" size="default">确认</el-button> - <el-button size="default" @click="dialogAddForm = false">取消</el-button> - </el-form-item> - </el-form> - </el-dialog> - </el-scrollbar> - </div> -</template> - -<script lang="ts"> - import { toRefs, reactive, defineComponent, ref } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import type { FormInstance, FormRules } from 'element-plus' - - let global: any = { - homeChartOne: null, - homeChartTwo: null, - homeCharThree: null, - dispose: [null, '', undefined], - }; - - interface stateType { - homeOne: Array <type> - } - interface type { - - } - interface User { - step: string, - type: string, - createTime: string - } - export default defineComponent({ - name: 'reportTypeSetting', - setup() { - const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({}); - const tableData = reactive([ - { - step: '作业负责人审批', - type: '', - createTime: '', - editor: '', - editeTime: '' - }, - { - step: '作业负责人审批', - type: '', - createTime: '', - editor: '', - editeTime: '' - }, - { - step: '作业负责人审批', - type: '', - createTime: '', - editor: '', - editeTime: '' - } - ]); - const dialogAddForm = ref(false); - const rowIndex = ref(-1) - const reportForm = ref({ - step: '', - type: '', - createTime: '', - editor: '', - editeTime: '' - }) - const addApprove = ()=>{ - dialogAddForm.value = true - }; - const ruleFormRef = ref<FormInstance>() - const rules = reactive<FormRules>({ - step:[{required: true, message: '该内容不能为空',trigger:'blur'}], - type:[{required: true, message: '该内容不能为空',trigger:'blur'}] - }) - const onSubmitAddForm = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate((valid, fields) => { - if (valid) { - if(rowIndex.value == -1){ - reportForm.value.createTime = new Date().toLocaleString() - reportForm.value.editeTime = new Date().toLocaleString() - tableData.push(reportForm.value) - }else{ - tableData[rowIndex.value] = reportForm.value - } - - // reportForm.value = { - // step: '', - // type: '', - // createTime: '', - // editor: '', - // editeTime: '' - // } - dialogAddForm.value = false - } else { - console.log('error submit!', fields) - } - }) - } - const editeRow = (index: number, row: User) =>{ - dialogAddForm.value = true - rowIndex.value = index - reportForm.value = JSON.parse(JSON.stringify(row)) - reportForm.value.editeTime = new Date().toLocaleString() - } - const deleteRow = (index)=>{ - tableData.splice( index,1) - } - const dialogColse = () =>{ - reportForm.value = { - step: '', - type: '', - createTime: '', - editor: '', - editeTime: '' - } - rowIndex.value = -1 - } - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId',value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - renderMenu, - tableData, - dialogAddForm, - reportForm, - ruleFormRef, - rules, - rowIndex, - dialogColse, - editeRow, - deleteRow, - addApprove, - onSubmitAddForm, - ...toRefs(state), - }; - }, - }); -</script> - -<style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - overflow: hidden; - padding: 20px; - height: 100%; - .homeCard{ - width: 100%; - padding: 20px; - background: #fff; - border-radius: 4px; - } - .el-row{ - margin-bottom: 20px; - } - .el-row:last-child { - margin-bottom: 0; - } - } -</style> diff --git a/src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/approveLinkSetting/index.vue b/src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/approveLinkSetting/index.vue new file mode 100644 index 0000000..5eb9a0b --- /dev/null +++ b/src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/approveLinkSetting/index.vue @@ -0,0 +1,341 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <div class="homeCard"> + <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="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" width="80" label="序号"/> + <el-table-column property="processName" label="环节名称" width="200" sortable/> + <el-table-column property="approveType" label="审核类型" width="200" sortable/> + <el-table-column property="creater" label="创建人" width="180" /> + <el-table-column property="createTime" label="创建时间" sortable/> + <el-table-column property="updater" label="最后更新人"/> + <el-table-column property="updateTime" label="最后更新时间" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="审批环节"> + <el-form :model="details" label-width="120px"> + <el-form-item label="环节名称"> + <el-input + v-model="details.processName" + readonly + /> + </el-form-item> + <el-form-item label="审批类型"> + <el-input + v-model="details.approveType" + readonly + /> + </el-form-item> + <el-form-item label="创建人"> + <el-input + v-model="details.creater" + readonly + /> + </el-form-item> + <el-form-item label="创建时间"> + <el-input + v-model="details.createTime" + readonly + /> + </el-form-item> + <el-form-item label="最后更新人"> + <el-input + v-model="details.updater" + readonly + /> + </el-form-item> + <el-form-item label="最后更新时间"> + <el-input v-model="details.updateTime" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="审批环节编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="环节名称"> + <el-input v-model="addRecord.processName"/> + </el-form-item> + <el-form-item label="审批类型" prop="approveType"> + <el-select v-model="addRecord.approveType"> + <el-option label="上报审批意见" value="上报审批意见" /> + <el-option label="上报气体监测数据" value="上报气体监测数据" /> + <el-option label="上报安全措施确认" value="上报安全措施确认" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + + // 分页 + const currentPage = ref(1) + const pageSize = ref(10) + + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + + // 判断新增和修改 + const chosenIndex = ref(-1) + + const tableData = reactive( + [ + { + processName: '作业负责人审批', + approveType: '上报审批意见', + creater: '李四', + createTime: '2021-04-22 15:21:31', + updater: '吴海涛', + updateTime: '2022-04-22 15:21:31', + }, + { + processName: '作业负责人审批', + approveType: '上报气体检测数据', + creater: '李四', + createTime: '2021-04-22 15:21:31', + updater: '吴海涛', + updateTime: '2022-04-22 15:21:31', + }, + ] + ) + + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + processName:[{required: true, message: '该内容不能为空',trigger:'blur'}], + approveType:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + + // 查看记录 + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + + // 删除记录 + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + + // 新增修改记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + + // 编辑弹窗关闭时数据初始化处理 + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + + // 修改记录 + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/approveTypeSetting/index.vue b/src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/approveTypeSetting/index.vue new file mode 100644 index 0000000..3e6b942 --- /dev/null +++ b/src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/approveTypeSetting/index.vue @@ -0,0 +1,335 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="审批类型名称"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" width="80" label="序号"/> + <el-table-column property="approveType" label="审批类型名称" width="200" sortable/> + <el-table-column property="creater" label="创建人" width="180" /> + <el-table-column property="createTime" label="创建时间" sortable/> + <el-table-column property="updater" label="最后更新人"/> + <el-table-column property="updateTime" label="最后更新时间" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="审批类型"> + <el-form :model="details" label-width="120px"> + <el-form-item label="审批类型名称"> + <el-input + v-model="details.approveType" + readonly + /> + </el-form-item> + <el-form-item label="创建人"> + <el-input + v-model="details.creater" + readonly + /> + </el-form-item> + <el-form-item label="创建时间"> + <el-input + v-model="details.createTime" + readonly + /> + </el-form-item> + <el-form-item label="最后更新人"> + <el-input + v-model="details.updater" + readonly + /> + </el-form-item> + <el-form-item label="最后更新时间"> + <el-input v-model="details.updateTime" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="审批类型编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="审批类型名称" prop="approveType"> + <el-select v-model="addRecord.approveType"> + <el-option label="单人审批" value="单人审批" /> + <el-option label="多人同时审批" value="多人同时审批" /> + <el-option label="多人单个审批" value="多人单个审批" /> + </el-select> + </el-form-item> +<!-- <el-form-item label="审批类型标识">--> +<!-- <el-input v-model="addRecord.remark"/>--> +<!-- </el-form-item>--> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + + // 分页 + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + approveType: '单人审批', + creater: '李四', + createTime: '2021-04-22 15:21:31', + updater: '吴海涛', + updateTime: '2022-04-22 15:21:31', + }, + { + approveType: '多人同时审批', + creater: '李四', + createTime: '2021-04-22 15:21:31', + updater: '吴海涛', + updateTime: '2022-04-22 15:21:31', + }, + ] + ) + + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + approveType:[{required: true, message: '该内容不能为空',trigger:'blur'}], + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + + // 查看记录 + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + + // 删除记录 + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + + // 修改记录 + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + + // 新增修改记录确认 + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/specialWorkSystem/approveProcessManagement/reportTypeSetting/index.vue b/src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/reportTypeSetting/index.vue similarity index 82% rename from src/views/specialWorkSystem/approveProcessManagement/reportTypeSetting/index.vue rename to src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/reportTypeSetting/index.vue index 49fbc6d..440ed57 100644 --- a/src/views/specialWorkSystem/approveProcessManagement/reportTypeSetting/index.vue +++ b/src/views/specialWorkSystem/approveProcessManagement/approveLinkSettings/reportTypeSetting/index.vue @@ -13,10 +13,10 @@ <el-table-column prop="createTime" label="创建时间" width="180" /> <el-table-column prop="editor" label="最新编辑人" width="180" /> <el-table-column prop="editeTime" label="最新编辑时间" /> - <el-table-column fixed="right" label="操作" width="180"> + <el-table-column fixed="right" label="操作" align="center" width="180"> <template #default="scope"> - <el-button link type="primary" size="small" @click="editeRow(scope.$index,scope.row)">编辑</el-button> - <el-button link type="danger" size="small" @click="deleteRow(scope.$index)">删除</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editeRow(scope.$index,scope.row)">编辑</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRow(scope.$index)">删除</el-button> </template> </el-table-column> </el-table> @@ -41,7 +41,7 @@ <el-input v-model="reportForm.editor" /> </el-form-item> <el-form-item> - <el-button type="primary" @click="onSubmitAddForm(ruleFormRef)" size="default">确认</el-button> + <el-button type="primary" @click="onSubmitAddForm(ruleFormRef)" size="default" v-throttle>确认</el-button> <el-button size="default" @click="dialogAddForm = false">取消</el-button> </el-form-item> </el-form> @@ -56,6 +56,7 @@ import { initBackEndControlRoutes } from '/@/router/backEnd'; import {useUserInfo} from "/@/stores/userInfo"; import { Session } from '/@/utils/storage'; + import { Edit, Delete } from '@element-plus/icons-vue' import { FormInstance, FormRules } from 'element-plus' let global: any = { homeChartOne: null, @@ -105,7 +106,10 @@ } ]) const dialogAddForm = ref(false); + + // 判断新增修改参数 const rowIndex = ref(-1) + const reportForm = ref({ type: '', founder: '', @@ -113,24 +117,41 @@ editor: '', editeTime: '' }) + + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + + // 新增记录 const addReport = ()=>{ dialogAddForm.value = true }; + const ruleFormRef = ref<FormInstance>() const addRules = reactive<FormRules>({ type:[{required: true, message: '该内容不能为空',trigger:'blur'}], founder:[{required: true, message: '该内容不能为空',trigger:'blur'}], editor:[{required: true, message: '该内容不能为空',trigger:'blur'}] }) + + // 新增修改记录确认 const onSubmitAddForm = async (formEl: FormInstance | undefined) => { if (!formEl) return await formEl.validate((valid, fields) => { if (valid) { if(rowIndex.value == -1){ - reportForm.value.createTime = new Date().toLocaleString() - reportForm.value.editeTime = new Date().toLocaleString() - tableData.push(reportForm.value) + reportForm.value.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + reportForm.value.editeTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(reportForm.value) }else{ + reportForm.value.editeTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') tableData[rowIndex.value] = reportForm.value } dialogAddForm.value = false @@ -139,15 +160,20 @@ } }) } + + // 修改记录 const editeRow = (index: number, row: User) =>{ dialogAddForm.value = true rowIndex.value = index reportForm.value = JSON.parse(JSON.stringify(row)) - reportForm.value.editeTime = new Date().toLocaleString() } + + // 删除记录 const deleteRow = (index)=>{ tableData.splice( index,1) } + + // 弹窗关闭数据初始化 const dialogColse = () =>{ reportForm.value = { type: '', @@ -171,6 +197,7 @@ reportForm, ruleFormRef, addRules, + timeForm, dialogColse, editeRow, deleteRow, diff --git a/src/views/specialWorkSystem/approveProcessManagement/approveProcessList/index.vue b/src/views/specialWorkSystem/approveProcessManagement/approveProcessList/index.vue index 69764ef..6b0615c 100644 --- a/src/views/specialWorkSystem/approveProcessManagement/approveProcessList/index.vue +++ b/src/views/specialWorkSystem/approveProcessManagement/approveProcessList/index.vue @@ -4,8 +4,7 @@ <el-row class="homeCard"> <el-col :span="8"> <div class="grid-content topInfo"> - <div>流程名称</div> - <el-input v-model="searchWord" placeholder="请输入关键词"></el-input> + <el-input v-model="searchWord" placeholder="流程名称"></el-input> <el-button type="primary">查询</el-button> <el-button plain>重置</el-button> </div> @@ -15,8 +14,8 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default">新建</el-button> - <el-button type="danger" :icon="Delete" size="default">删除</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">设置分类</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default"/> @@ -43,11 +42,11 @@ </template> </el-table-column> <el-table-column property="updateTime" label="更新时间"/> - <el-table-column fixed="right" label="操作" width="180"> - <template #default> - <el-button link type="primary" size="small">修改</el-button> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" :icon="Edit" size="small" @click="editRecord(scope.$index ,scope.row)" v-throttle>修改</el-button> <el-button link type="success" size="small">发布</el-button> - <el-button link type="danger" size="small">删除</el-button> + <el-button link type="danger" :icon="Delete" size="small" @click="deleteRecord(scope.$index)">删除</el-button> </template> </el-table-column> </el-table> @@ -67,17 +66,66 @@ </div> </div> </el-scrollbar> + <el-dialog v-model="dialogAddRecord" title="审批流程编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="流程名称" prop="name"> + <el-input + v-model="addRecord.name" + placeholder="流程名称" + /> + </el-form-item> + <el-form-item label="流程key" prop="flowKey"> + <el-input + v-model="addRecord.flowKey" + placeholder="流程key" + > + </el-input> + </el-form-item> + <el-form-item label="分类" prop="sort"> + <el-select v-model="addRecord.sort" placeholder="请选择"> + <el-option label="临时用电" value="临时用电" /> + <el-option label="设备检修" value="设备检修" /> + </el-select> + </el-form-item> + <el-form-item label="版本" prop="version"> + <el-input + v-model="addRecord.version" + placeholder="请选择工种" + > + </el-input> + </el-form-item> + <el-form-item label="状态" prop="status"> + <el-select v-model="addRecord.status" placeholder="请选择"> + <el-option label="已发布" value="已发布" /> + <el-option label="未发布" value="未发布" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default" v-throttle>确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default" v-throttle>确认</el-button> + </span> + </template> + </el-dialog> </div> </template> -<script lang="ts"> +<script lang="ts" setup> import { toRefs, reactive, defineComponent, ref } from 'vue'; import { storeToRefs } from 'pinia'; import { initBackEndControlRoutes } from '/@/router/backEnd'; import {useUserInfo} from "/@/stores/userInfo"; import { Session } from '/@/utils/storage'; - import { Plus, Delete, Refresh } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' + import { Plus, Delete, Refresh, Edit } from '@element-plus/icons-vue' + import { ElTable, FormInstance, FormRules } from 'element-plus' let global: any = { homeChartOne: null, homeChartTwo: null, @@ -96,26 +144,25 @@ name: string address: string } - export default defineComponent({ - name: 'reportTypeSetting', - setup() { - const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({}); - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const multipleSelection = ref<User[]>([]) - const handleSelectionChange = (val: User[]) => { - multipleSelection.value = val - } - const currentPage = ref(1) - const pageSize = ref(10) - const handleSizeChange = (val: number) => { - console.log(`${val} items per page`) - } - const handleCurrentChange = (val: number) => { - console.log(`current page: ${val}`) - } - const tableData: User[] = [ + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const multipleTableRef = ref<InstanceType<typeof ElTable>>() + const multipleSelection = ref<User[]>([]) + const handleSelectionChange = (val: User[]) => { + multipleSelection.value = val + } + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ { name: '风险点复评预警', flowKey: 'process111', @@ -197,28 +244,88 @@ updateTime: '2021-04-22 15:21:31' } ] - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId',value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - renderMenu, - multipleTableRef, - tableData, - currentPage, - pageSize, - handleSizeChange, - handleCurrentChange, - Plus, - Delete, - handleSelectionChange, - Refresh, - ...toRefs(state), - }; - }, - }); + ) + + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + name:[{required: true, message: '该内容不能为空',trigger:'blur'}], + flowKey:[{required: true, message: '该内容不能为空',trigger:'blur'}], + sort:[{required: true, message: '该内容不能为空',trigger:'blur'}], + version:[{required: true, message: '该内容不能为空',trigger:'blur'}], + status:[{required: true, message: '该内容不能为空',trigger:'blur'}], + updateTime:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + + // 查看记录 + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + + // 删除记录 + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + + // 修改记录 + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + + // 新增修改记录确认 + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; </script> <style scoped lang="scss"> diff --git a/src/views/specialWorkSystem/approveProcessManagement/approveProcessSetting/index.vue b/src/views/specialWorkSystem/approveProcessManagement/approveProcessSetting/index.vue index 33de449..d786f4f 100644 --- a/src/views/specialWorkSystem/approveProcessManagement/approveProcessSetting/index.vue +++ b/src/views/specialWorkSystem/approveProcessManagement/approveProcessSetting/index.vue @@ -62,8 +62,8 @@ <span>您确定要删除该审批流吗?</span> <template #footer> <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - <el-button @click="deleteDialog = false" size="default">取消</el-button> </span> </template> </el-dialog> @@ -127,6 +127,8 @@ department: [{required:true,message: '该选项不能为空',trigger: 'blur'}], manager: [{required:true,message: '该选项不能为空',trigger: 'blur'}] }) + + // 确认新增 const confirmClick = async (formEl: FormInstance | undefined) => { if (!formEl) return await formEl.validate((valid, fields) => { @@ -142,10 +144,14 @@ const cancelClick=()=>{ showAdd.value = false } + + // 新增 const addFlow = (index) => { showAdd.value = true chosenIndex.value = index } + + // 删除记录 const deleteFlow = (index) => { if(approveSteps.length>1){ deleteDialog.value = true diff --git a/src/views/specialWorkSystem/workApplyManagement/myApply/index.vue b/src/views/specialWorkSystem/workApplyManagement/myApply/index.vue index 3bf4b98..6e0a5b8 100644 --- a/src/views/specialWorkSystem/workApplyManagement/myApply/index.vue +++ b/src/views/specialWorkSystem/workApplyManagement/myApply/index.vue @@ -40,6 +40,12 @@ <el-tag type="success">{{ scope.row.status }}</el-tag> </template> </el-table-column> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> </el-table> </div> <div class="pageBtn"> @@ -56,13 +62,65 @@ /> </div> </div> + <el-dialog v-model="dialogDetails" title="作业票查看"> + <el-form :model="details" label-width="120px"> + <el-form-item label="作业证编号"> + <el-input + v-model="details.num" + readonly + /> + </el-form-item> + <el-form-item label="作业证等级"> + <el-input + v-model="details.level" + readonly + /> + </el-form-item> + <el-form-item label="申请日期"> + <el-input + v-model="details.applyDate" + readonly + /> + </el-form-item> + <el-form-item label="申请人"> + <el-input + v-model="details.name" + readonly + /> + </el-form-item> + <el-form-item label="申请部门"> + <el-input + v-model="details.department" + readonly + /> + </el-form-item> + <el-form-item label="状态"> + <el-input + v-model="details.status" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default" v-throttle>确认</el-button> + </span> + </template> + </el-dialog> </el-scrollbar> </el-tab-pane> <el-tab-pane label="已通过" name="passed"> <el-scrollbar height="100%"> <el-row> <div class="homeCard"> - <el-col :span="12"> + <el-col :span="8"> <div class="grid-content topInfo"> <el-input v-model="searchWord" placeholder="作业证名称"></el-input> <el-button type="primary">查询</el-button> @@ -174,8 +232,32 @@ const handleCurrentChange = (val: number) => { console.log(`current page: ${val}`) } - const applyData: User[] = [] + const applyData = reactive([ + + ]) + const chosenIndex = ref(-1) const passedData: User[] = [] + const dialogDetails = ref(false) + const details = ref({}) + const deleteDialog = ref(false) + + // 查看记录 + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + + // 删除记录 + const applyRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + + // 弹窗确认删除记录 + const conFirmDelete = ()=> { + applyData.splice(chosenIndex.value,1) + deleteDialog.value = false + } // 折线图 const renderMenu = async (value: string) => { Session.set('projectId',value) diff --git a/src/views/specialWorkSystem/workApplyManagement/workApplyForm/index.vue b/src/views/specialWorkSystem/workApplyManagement/workApplyForm/index.vue index 7b0a1e0..272e899 100644 --- a/src/views/specialWorkSystem/workApplyManagement/workApplyForm/index.vue +++ b/src/views/specialWorkSystem/workApplyManagement/workApplyForm/index.vue @@ -22,7 +22,7 @@ <el-table-column prop="unit" label="所属单位" width="180" /> <el-table-column prop="certificate" label="证书名称" width="180" /> <el-table-column prop="certificateId" label="证书号" /> - <el-table-column fixed="right" label="操作"> + <el-table-column fixed="right" label="操作" align="center" width="180"> <template #default="scope"> <el-button link type="danger" size="small" @click="deleteRow(scope.$index)">删除</el-button> </template> @@ -522,7 +522,7 @@ if (!formEl) return await formEl.validate((valid, fields) => { if (valid) { - form.workerList.push(addWorkerForm.value) + form.workerList.unshift(addWorkerForm.value) addWorkerForm.value = { worker: '', role: '', diff --git a/src/views/specialWorkSystem/workBasicManagementSetting/certificateFilterSetting/index.vue b/src/views/specialWorkSystem/workBasicManagementSetting/certificateFilterSetting/index.vue new file mode 100644 index 0000000..4d8d77a --- /dev/null +++ b/src/views/specialWorkSystem/workBasicManagementSetting/certificateFilterSetting/index.vue @@ -0,0 +1,333 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-select v-model="searchType" placeholder="请选择作业类型" style="width: 100%"> + <el-option label="临时用电" value="临时用电" /> + <el-option label="设备检修" value="设备检修" /> + </el-select> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="certificate" label="证书名称" /> + <el-table-column property="jobType" label="作业类型" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="证书过滤"> + <el-form :model="details" label-width="120px"> + <el-form-item label="证书名称"> + <el-input + v-model="details.certificate" + readonly + /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input + v-model="details.jobType" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="证书过滤编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="证书名称" prop="certificate"> + <el-input + v-model="addRecord.certificate" + placeholder="请选择工种" + > + <template #append> + <el-button :icon="Search"/> + </template> + </el-input> + </el-form-item> + <el-form-item label="作业类型" prop="jobType"> + <el-select v-model="addRecord.jobType" placeholder="请选择"> + <el-option label="临时用电" value="临时用电" /> + <el-option label="设备检修" value="设备检修" /> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const searchType=ref('') + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + certificate: '登高作业证', + jobType: '高处作业' + }, + { + certificate: '焊接与热切割作业', + jobType: '动火作业' + }, + { + certificate: '低压电工证', + jobType: '临时用电' + }, + { + certificate: '化工自动化控制仪表作业', + jobType: '设备检修' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + certificate:[{required: true, message: '该内容不能为空',trigger:'blur'}], + jobType:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/specialWorkSystem/workBasicManagementSetting/personalProtectDevices/index.vue b/src/views/specialWorkSystem/workBasicManagementSetting/personalProtectDevices/index.vue new file mode 100644 index 0000000..8a5eb25 --- /dev/null +++ b/src/views/specialWorkSystem/workBasicManagementSetting/personalProtectDevices/index.vue @@ -0,0 +1,285 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="deviceName" placeholder="防护用品名称"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="device" label="防护用品名称" /> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="防护用品"> + <el-form :model="details" label-width="120px"> + <el-form-item label="防护用品名称"> + <el-input + v-model="details.device" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="防护用品编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="防护用品名称" prop="device"> + <el-input + v-model="addRecord.device" + placeholder="请填写防护用品名称" + > + <template #append> + <el-button :icon="Search"/> + </template> + </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const searchType=ref('') + const chosenIndex = ref(-1) + const deviceName = ref('') + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + device: '送风式长管式呼吸器' + }, + { + device: '防静电工作鞋' + }, + { + device: '隔绝式呼吸器' + }, + { + device: '防爆工具' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + device:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/specialWorkSystem/workBasicManagementSetting/securityMeasuresManagement/index.vue b/src/views/specialWorkSystem/workBasicManagementSetting/securityMeasuresManagement/index.vue new file mode 100644 index 0000000..ae00ade --- /dev/null +++ b/src/views/specialWorkSystem/workBasicManagementSetting/securityMeasuresManagement/index.vue @@ -0,0 +1,409 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="16"> + <div class="grid-content topInfo"> + <el-select v-model="searchType" placeholder="请选择作业类型" style="width: 100%"> + <el-option label="临时用电" value="临时用电"/> + <el-option label="设备检修" value="设备检修"/> + </el-select> + <el-select v-model="checkType" placeholder="请选择检查类型" style="width: 100%"> + <el-option label="临时用电" value="临时用电"/> + <el-option label="设备检修" value="设备检修"/> + </el-select> + <el-input v-model="searchWord" placeholder="输入检查内容"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + <el-button plain :icon="Upload"></el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="jobType" label="作业类型" width="200" sortable/> + <el-table-column property="type" label="类型" width="180" /> + <el-table-column property="checkType" label="检查类型"/> + <el-table-column property="checkContent" label="检查内容" sortable/> + <el-table-column property="judgement" label="参考判断"/> + <el-table-column property="sort" label="排序" sortable/> + <el-table-column property="remark" label="备注"/> + <el-table-column property="updater" label="更新人"/> + <el-table-column property="updateTime" label="更新时间" sortable/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="安全措施"> + <el-form :model="details" label-width="120px"> + <el-form-item label="作业类型"> + <el-input + v-model="details.jobType" + readonly + /> + </el-form-item> + <el-form-item label="类型"> + <el-input + v-model="details.type" + readonly + /> + </el-form-item> + <el-form-item label="检查类型"> + <el-input + v-model="details.checkType" + readonly + /> + </el-form-item> + <el-form-item label="检查内容"> + <el-input + v-model="details.checkContent" + type="textarea" + readonly + /> + </el-form-item> + <el-form-item label="参考判断"> + <el-input v-model="details.judgement" readonly/> + </el-form-item> + <el-form-item label="排序"> + <el-input v-model="details.sort" readonly/> + </el-form-item> + <el-form-item label="备注"> + <el-input v-model="details.remark" type="textarea" readonly/> + </el-form-item> + <el-form-item label="更新人"> + <el-input v-model="details.updater" readonly/> + </el-form-item> + <el-form-item label="更新时间"> + <el-input v-model="details.updateTime" readonly/> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="安全措施编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="作业类型" prop="jobType"> + <el-select v-model="addRecord.jobType"> + <el-option label="动火作业" value="动火作业" /> + <el-option label="动土作业" value="动土作业" /> + </el-select> + </el-form-item> + <el-form-item label="类型" prop="type"> + <el-select v-model="addRecord.type"> + <el-option label="施工单位负责检查项" value="施工单位负责检查项" /> + <el-option label="施工单位不负责检查项" value="施工单位不负责检查项" /> + </el-select> + </el-form-item> + <el-form-item label="检查类型" prop="checkType"> + <el-select v-model="addRecord.checkType"> + <el-option label="判断" value="判断" /> + <el-option label="填空" value="填空" /> + </el-select> + </el-form-item> + <el-form-item label="检查内容" prop="checkContent"> + <el-input + v-model="addRecord.checkContent" + type="textarea" + > + </el-input> + </el-form-item> + <el-form-item label="参考判断" prop="judgement"> + <el-radio-group v-model="addRecord.judgement"> + <el-radio label="Y" size="large">Y</el-radio> + <el-radio label="N" size="large">N</el-radio> + </el-radio-group> + </el-form-item> + <el-form-item label="排序值" prop="sort"> + <el-input-number v-model="addRecord.sort" :min="1" :max="100" @change="handleChange" /> + </el-form-item> + <el-form-item label="备注"> + <el-input v-model="addRecord.remark" type="textarea"/> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Edit, View, Plus, Delete, Refresh, Search, Upload } from '@element-plus/icons-vue' + import { ElTable } from 'element-plus' + import { FormInstance, FormRules } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + jobType: '动火作业', + type: '施工单位负责检查项', + checkType: '判断', + checkContent: '断开与动火设备相连接的所有管线', + judgement: 'Y', + sort: '2', + remark: '666', + updater: 'admin', + updateTime: '2021-04-22 15:21:31' + }, + { + jobType: '动火作业', + type: '施工单位负责检查项', + checkType: '填空', + checkContent: '动火点周围易燃物已清除', + judgement: 'N', + sort: '4', + remark: '666', + updater: 'admin', + updateTime: '2021-04-22 15:21:31' + } + ] + ) + const addRef = ref<FormInstance>() + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + const addRules = reactive<FormRules>({ + jobType:[{required: true, message: '该内容不能为空',trigger:'blur'}], + type:[{required: true, message: '该内容不能为空',trigger:'blur'}], + checkType:[{required: true, message: '该内容不能为空',trigger:'blur'}], + checkContent:[{required: true, message: '该内容不能为空',trigger:'blur'}], + judgement:[{required: true, message: '该内容不能为空',trigger:'blur'}], + sort:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData.unshift(addRecord.value) + }else{ + addRecord.value.updateTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/specialWorkSystem/workBasicManagementSetting/workTypeSetting/index.vue b/src/views/specialWorkSystem/workBasicManagementSetting/workTypeSetting/index.vue new file mode 100644 index 0000000..7e9af1a --- /dev/null +++ b/src/views/specialWorkSystem/workBasicManagementSetting/workTypeSetting/index.vue @@ -0,0 +1,356 @@ +<template> + <div class="home-container"> + <el-scrollbar height="100%"> + <el-row class="homeCard"> + <el-col :span="16"> + <div class="grid-content topInfo"> + <el-select v-model="searchType" placeholder="请选择作业类型" style="width: 100%"> + <el-option label="临时用电" value="临时用电" /> + <el-option label="设备检修" value="设备检修" /> + </el-select> + <el-input v-model="workTypeId" placeholder="工种编号"></el-input> + <el-input v-model="workType" placeholder="工种"></el-input> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column property="jobType" label="作业类型" sortable/> + <el-table-column property="workId" label="工种编号" /> + <el-table-column property="workType" label="工种"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="作业工种"> + <el-form :model="details" label-width="120px"> + <el-form-item label="作业类型"> + <el-input + v-model="details.jobType" + class="input-with-select" + readonly + /> + </el-form-item> + <el-form-item label="工种编号"> + <el-input + v-model="details.workId" + class="input-with-select" + readonly + /> + </el-form-item> + <el-form-item label="工种"> + <el-input + v-model="details.workType" + class="input-with-select" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="作业工种编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="作业类型" prop="jobType"> + <el-select v-model="addRecord.jobType" placeholder="请选择"> + <el-option label="临时用电" value="临时用电" /> + <el-option label="设备检修" value="设备检修" /> + </el-select> + </el-form-item> + <el-form-item label="工种编号" prop="workId"> + <el-input + v-model="addRecord.workId" + placeholder="请填写工种编号" + > + </el-input> + </el-form-item> + <el-form-item label="工种" prop="workType"> + <el-input + v-model="addRecord.workType" + placeholder="请选择工种" + > + <template #append> + <el-button :icon="Search"/> + </template> + </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + 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 } from 'element-plus' + let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined], + }; + + interface stateType { + homeOne: Array <type> + } + interface type { + + } + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({}); + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + jobType: '临时用电', + workId: 'LD', + workType: '临时用电作业' + }, + { + jobType: '设备检修', + workId: 'WX', + workType: '检维修作业' + }, + { + jobType: '受限空间', + workId: 'SX', + workType: '受限空间作业' + }, + { + jobType: '动火作业', + workId: 'DH', + workType: '焊接与热切割作业' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + jobType:[{required: true, message: '该内容不能为空',trigger:'blur'}], + workId:[{required: true, message: '该内容不能为空',trigger:'blur'}], + workType:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + // return { + // renderMenu, + // multipleTableRef, + // tableData, + // currentPage, + // pageSize, + // dialogDetails, + // details, + // deleteDialog, + // dialogAddRecord, + // viewRecord, + // deleteRecord, + // handleSizeChange, + // handleCurrentChange, + // Plus, + // Edit, + // Delete, + // Search, + // Download, + // handleSelectionChange, + // Refresh, + // ...toRefs(state), + // }; + // }, + // }); +</script> + +<style scoped lang="scss"> + $homeNavLengh: 8; + .home-container { + height: 100%; + overflow: hidden; + padding: 20px; + .homeCard{ + width: 100%; + padding: 20px; + background: #fff; + border-radius: 4px; + } + .el-row{ + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } + } + } + .mainPages{ + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; + justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } +</style> diff --git a/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue b/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue index 94f0618..d787438 100644 --- a/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue +++ b/src/views/specialWorkSystem/workPlan/workAppointSummary/index.vue @@ -2,91 +2,105 @@ <div class="home-container"> <el-scrollbar height="100%"> <el-row class="homeCard"> -<!-- <div class="homeCard">--> - <el-col :span="6"> + <el-col :span="12"> <div class="grid-content topInfo"> - <div>预约时间:</div> - <div class="block"> - <el-date-picker - v-model="searchTime" - type="date" - placeholder="" - size="large" - /> - </div> + <el-date-picker + v-model="searchTime" + type="datetime" + placeholder="预约时间" + size="large" + style="width: 100%;white-space: nowrap;margin-right: 20px" + /> + <el-select v-model="typeValue" placeholder="请选择预约类型" style="width: 100%"> + <el-option label="类型1" value="类型1"/> + <el-option label="类型2" value="类型2"/> + <el-option label="类型3" value="类型3"/> + </el-select> + <el-button type="primary">查询历史</el-button> + <el-button plain>重置</el-button> + <el-button type="primary" @click="dialogChartsVisible = true">查看统计图表</el-button> </div> </el-col> - <el-col :span="6"> - <div class="grid-content topInfo"> - <div>预约类型:</div> - <div> - <el-select v-model="typeValue" class="m-2" placeholder="Select" size="large"> - <el-option - v-for="item in reserveOptions" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </div> - </div> - </el-col> - <el-col :span="12" class="topBtns"> - <div class="grid-content topInfo"> - <div style="margin-right: 20px"><el-button type="primary" plain>查询历史</el-button></div> - <div><el-button type="primary" @click="dialogChartsVisible = true">查看统计图表</el-button></div> - </div> - </el-col> -<!-- </div>--> </el-row> - <el-row> - <div class="homeCard"> - <el-table :data="tableData" border style="width: 100%"> - <el-table-column prop="id" label="编号" width="180" /> - <el-table-column prop="time" label="预约时间" width="180" /> - <el-table-column prop="department" label="预约部门" /> - <el-table-column prop="dirtyWork" label="动土作业" width="180" /> - <el-table-column prop="fireWork" label="动火作业" width="180" /> - <el-table-column prop="hangWork" label="吊装作业" /> - <el-table-column prop="spaceWork" label="受限空间作业" width="180" /> - <el-table-column prop="cut" label="断路" width="180" /> - <el-table-column prop="high" label="高处" /> - <el-table-column prop="block" label="盲板抽堵" width="180" /> - <el-table-column prop="tempUse" label="临时用电" width="180" /> - <el-table-column fixed="right" label="操作"> - <template #default> - <el-button link type="primary" size="small">操作</el-button> - </template> - </el-table-column> - </el-table> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" label="序号" width="120" /> + <el-table-column prop="time" label="预约时间" width="150" /> + <el-table-column prop="department" label="预约部门" width="180" /> + <el-table-column prop="dirtyWork" label="动土作业" width="100" /> + <el-table-column prop="fireWork" label="动火作业" width="100" /> + <el-table-column prop="hangWork" label="吊装作业" width="100" /> + <el-table-column prop="spaceWork" label="受限空间作业"/> + <el-table-column prop="cut" label="断路作业"/> + <el-table-column prop="high" label="高处作业" /> + <el-table-column prop="block" label="盲板抽堵作业"/> + <el-table-column prop="tempUse" label="临时用电作业"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> </div> - </el-row> - <el-dialog v-model="dialogChartsVisible" title="统计图表"> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogChartsVisible" title="统计图表" @opened="openChart"> <el-row> <div class="grid-content"> - <div>日期查询:</div> + <div style="margin-bottom: 10px">日期查询:</div> <div class="block"> <el-date-picker - v-model="dateRange" - type="daterange" - unlink-panels - range-separator="至" - start-placeholder="Start date" - end-placeholder="End date" - :shortcuts="shortcuts" - size="large" + v-model="dateRange" + type="daterange" + unlink-panels + range-separator="至" + start-placeholder="开始日期" + end-placeholder="截止日期" + :shortcuts="shortcuts" + size="large" /> </div> </div> </el-row> <el-row> <div class="grid-content"> - <div>部门查询:</div> + <div style="margin-bottom: 10px">部门查询:</div> <div> <el-cascader v-model="departmentName" :options="departmentOptions" - :props="props" + :props="{expandTrigger: 'hover'}" @change="handleChange" /> </div> @@ -94,16 +108,155 @@ </el-row> <div ref="myChart" style="width: 100%;height:400px;"></div> </el-dialog> - </el-scrollbar> + <el-dialog v-model="dialogDetails" title="作业预约"> + <el-form :model="details" label-width="120px"> + <el-form-item label="预约时间"> + <el-input + v-model="details.time" + readonly + /> + </el-form-item> + <el-form-item label="预约部门"> + <el-input + v-model="details.department" + readonly + /> + </el-form-item> + <el-form-item label="动土作业"> + <el-input + v-model="details.dirtyWork" + readonly + /> + </el-form-item> + <el-form-item label="动火作业"> + <el-input + v-model="details.fireWork" + readonly + /> + </el-form-item> + <el-form-item label="吊装作业"> + <el-input + v-model="details.hangWork" + readonly + /> + </el-form-item> + <el-form-item label="受限空间作业"> + <el-input + v-model="details.spaceWork" + readonly + /> + </el-form-item> + <el-form-item label="断路作业"> + <el-input + v-model="details.cut" + readonly + /> + </el-form-item> + <el-form-item label="高处作业"> + <el-input + v-model="details.high" + readonly + /> + </el-form-item> + <el-form-item label="盲板抽堵作业"> + <el-input + v-model="details.block" + readonly + /> + </el-form-item> + <el-form-item label="临时用电作业"> + <el-input + v-model="details.tempUse" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="作业预约编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="预约时间" prop="time"> + <el-date-picker + v-model="addRecord.time" + type="datetime" + format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + <el-form-item label="预约部门" prop="department"> + <el-select v-model="addRecord.department" placeholder="请选择"> + <el-option label="部门一" value="部门一" /> + <el-option label="部门二" value="部门二" /> + </el-select> + </el-form-item> + <el-form-item label="动土作业"> + <el-input + v-model="addRecord.dirtyWork" + /> + </el-form-item> + <el-form-item label="动火作业"> + <el-input + v-model="addRecord.fireWork" + /> + </el-form-item> + <el-form-item label="吊装作业"> + <el-input + v-model="addRecord.hangWork" + /> + </el-form-item> + <el-form-item label="受限空间作业"> + <el-input + v-model="addRecord.spaceWork" + /> + </el-form-item> + <el-form-item label="断路作业"> + <el-input + v-model="addRecord.cut" + /> + </el-form-item> + <el-form-item label="高处作业"> + <el-input + v-model="addRecord.high" + /> + </el-form-item> + <el-form-item label="盲板抽堵作业"> + <el-input + v-model="addRecord.block" + /> + </el-form-item> + <el-form-item label="临时用电作业"> + <el-input + v-model="addRecord.tempUse" + /> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> </div> </template> -<script lang="ts"> - import { toRefs, reactive, defineComponent, ref, onMounted } from 'vue'; +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; import { storeToRefs } from 'pinia'; import { initBackEndControlRoutes } from '/@/router/backEnd'; 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 } from 'element-plus' import * as echarts from 'echarts/core'; import { TooltipComponent, TooltipComponentOption, GridComponent, GridComponentOption, LegendComponent, LegendComponentOption } from 'echarts/components'; import { BarChart, BarSeriesOption } from 'echarts/charts'; @@ -126,114 +279,17 @@ homeOne: Array <type> } interface type { - id:number, - name: string + } - export default defineComponent({ - name: 'home', - setup() { + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { const userInfo = useUserInfo() const { userInfos } = storeToRefs(userInfo); - const searchTime = ref(''); - const typeValue = ref(''); - const departmentName = ref(''); - const reserveOptions = [ - { - value: 'Option1', - label: 'Option1', - }, - { - value: 'Option2', - label: 'Option2', - }, - { - value: 'Option3', - label: 'Option3', - }, - { - value: 'Option4', - label: 'Option4', - }, - { - value: 'Option5', - label: 'Option5', - }, - ]; - const tableData = [ - { - id: '10801920', - time: '2022-06-29', - department: '电工部', - dirtyWork: '', - fireWork: '', - hangWork: '', - spaceWork: '', - cut: '', - high: '', - block: '', - tempUse: '' - }, - { - id: '10801920', - time: '2022-06-29', - department: '电工部', - dirtyWork: '', - fireWork: '', - hangWork: '', - spaceWork: '', - cut: '', - high: '', - block: '', - tempUse: '' - }, - { - id: '10801920', - time: '2022-06-29', - department: '', - dirtyWork: '', - fireWork: '', - hangWork: '', - spaceWork: '', - cut: '', - high: '', - block: '', - tempUse: '' - } - ]; + const typeValue = ref('') const dialogChartsVisible = ref(false); const dateRange = ref('') - const shortcuts = [ - { - text: 'Last week', - value: () => { - const end = new Date() - const start = new Date() - start.setTime(start.getTime() - 3600 * 1000 * 24 * 7) - return [start, end] - }, - }, - { - text: 'Last month', - value: () => { - const end = new Date() - const start = new Date() - start.setTime(start.getTime() - 3600 * 1000 * 24 * 30) - return [start, end] - }, - }, - { - text: 'Last 3 months', - value: () => { - const end = new Date() - const start = new Date() - start.setTime(start.getTime() - 3600 * 1000 * 24 * 90) - return [start, end] - }, - }, - ]; - const props = { - expandTrigger: 'hover', - }; + const departmentName = ref('') const departmentOptions = [ { value: 'guide', @@ -291,16 +347,112 @@ }, ], }, - ]; + ] const handleChange = (value) => { console.log(value) - }; - const state = reactive<stateType>({ - homeOne:[{id:1,name:'基础数据权限管理系统'},{id:2,name:'双重预防系统'},{id:3,name:'系统2'},{id:4,name:'系统3'},{id:5,name:'系统4'}], - }); + } + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + time: '2022-06-29 12:32:52', + department: '电工部', + dirtyWork: '', + fireWork: '', + hangWork: '', + spaceWork: '', + cut: '', + high: '', + block: '', + tempUse: '' + }, + { + time: '2022-06-29 12:32:52', + department: '电工部', + dirtyWork: '', + fireWork: '', + hangWork: '', + spaceWork: '', + cut: '', + high: '', + block: '', + tempUse: '' + }, + { + time: '2022-06-29 12:32:52', + department: '土木', + dirtyWork: '', + fireWork: '', + hangWork: '', + spaceWork: '', + cut: '', + high: '', + block: '', + tempUse: '' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + time:[{required: true, message: '该内容不能为空',trigger:'blur'}], + department:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } const myChart = ref<HTMLElement>() const myCharts = ref<any>() - setTimeout(()=>{ + const openChart =()=>{ type EChartsOption = echarts.ComposeOption< | TooltipComponentOption | GridComponentOption @@ -328,11 +480,11 @@ }, yAxis: { type: 'category', - data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + data: ['部门A', '部门B', '部门C', '部门D', '部门E', '部门F', '部门G'] }, series: [ { - name: 'Direct', + name: '动火作业', type: 'bar', stack: 'total', label: { @@ -344,7 +496,7 @@ data: [320, 302, 301, 334, 390, 330, 320] }, { - name: 'Mail Ad', + name: '受限空间作业', type: 'bar', stack: 'total', label: { @@ -356,7 +508,7 @@ data: [120, 132, 101, 134, 90, 230, 210] }, { - name: 'Affiliate Ad', + name: '吊装作业', type: 'bar', stack: 'total', label: { @@ -368,7 +520,7 @@ data: [220, 182, 191, 234, 290, 330, 310] }, { - name: 'Video Ad', + name: '动土作业', type: 'bar', stack: 'total', label: { @@ -380,7 +532,43 @@ data: [150, 212, 201, 154, 190, 330, 410] }, { - name: 'Search Engine', + name: '断路作业', + type: 'bar', + stack: 'total', + label: { + show: true + }, + emphasis: { + focus: 'series' + }, + data: [820, 832, 901, 934, 1290, 1330, 1320] + }, + { + name: '高处作业', + type: 'bar', + stack: 'total', + label: { + show: true + }, + emphasis: { + focus: 'series' + }, + data: [820, 832, 901, 934, 1290, 1330, 1320] + }, + { + name: '临时用电作业', + type: 'bar', + stack: 'total', + label: { + show: true + }, + emphasis: { + focus: 'series' + }, + data: [820, 832, 901, 934, 1290, 1330, 1320] + }, + { + name: '盲板抽堵作业', type: 'bar', stack: 'total', label: { @@ -395,39 +583,13 @@ }; option && myCharts.value.setOption(option); - },2000) - // 分布图 - // onMounted(()=>{ - // setTimeout(() => { - // drawChart() - // },1000) - // }); - - + } // 折线图 const renderMenu = async (value: string) => { Session.set('projectId',value) userInfos.value.projectId = value await initBackEndControlRoutes(); }; - return { - renderMenu, - searchTime, - typeValue, - reserveOptions, - tableData, - dialogChartsVisible, - dateRange, - shortcuts, - departmentName, - departmentOptions, - props, - myChart, - handleChange, - ...toRefs(state), - }; - }, - }); </script> <style scoped lang="scss"> @@ -436,61 +598,75 @@ height: 100%; overflow: hidden; padding: 20px; - .el-row{ - margin-bottom: 20px; - } - .el-row:last-child { - margin-bottom: 0; - } .homeCard{ width: 100%; - display: flex; - align-items: center; padding: 20px; background: #fff; border-radius: 4px; } - - .grid-content{ + .el-row{ display: flex; align-items: center; - min-height: 36px; - } + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } - .topInfo{ - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; - - .demo-datetime-picker { + .topInfo { display: flex; - width: 100%; - padding: 0; - flex-wrap: wrap; - } - .demo-datetime-picker .block { - padding: 30px 0; - text-align: center; - border-right: solid 1px var(--el-border-color); - flex: 1; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } } } - .topBtns{ + .mainPages{ + height: 100%; display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } } - .el-button--text { - margin-right: 15px; - } - .el-select { - width: 300px; - } - .el-input { - width: 300px; - } - .dialog-footer button:first-child { - margin-right: 10px; - } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; } </style> diff --git a/src/views/specialWorkSystem/workPlan/workReservation/index.vue b/src/views/specialWorkSystem/workPlan/workReservation/index.vue index 0b25a62..7a1cc8d 100644 --- a/src/views/specialWorkSystem/workPlan/workReservation/index.vue +++ b/src/views/specialWorkSystem/workPlan/workReservation/index.vue @@ -2,111 +2,227 @@ <div class="home-container"> <el-scrollbar height="100%"> <el-row class="homeCard"> -<!-- <div class="homeCard">--> - <el-col :span="6"> + <el-col :span="14"> <div class="grid-content topInfo"> - <div>当前所属部门:</div> - <div>电工部</div> - </div> - </el-col> - <el-col :span="6"> - <div class="grid-content topInfo"> - <div>预约时间:</div> - <div class="block"> - <el-date-picker - v-model="searchTime" - type="date" - placeholder="" - size="large" - /> - </div> - </div> - </el-col> - <el-col :span="6"> - <div class="grid-content topInfo"> - <div>预约类型:</div> - <div> - <el-select v-model="typeValue" class="m-2" placeholder="Select" size="large"> - <el-option - v-for="item in reserveOptions" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </div> - </div> - </el-col> - <el-col :span="6" class="topBtns"> - <div class="grid-content topInfo"> - <div style="margin-right: 20px"><el-button type="primary" plain>查询历史</el-button></div> - <div><el-button type="success" @click="dialogFormVisible = true">新增预约</el-button></div> - </div> - </el-col> -<!-- </div>--> - </el-row> - <el-row> - <div class="homeCard"> - <el-table :data="tableData" border style="width: 100%"> - <el-table-column prop="id" label="编号" width="120" /> - <el-table-column prop="time" label="预约时间" width="150" /> - <el-table-column prop="department" label="预约部门" width="180" /> - <el-table-column prop="dirtyWork" label="动土作业" width="100" /> - <el-table-column prop="fireWork" label="动火作业" width="100" /> - <el-table-column prop="hangWork" label="吊装作业" width="100" /> - <el-table-column prop="spaceWork" label="受限空间作业"/> - <el-table-column prop="cut" label="断路"/> - <el-table-column prop="high" label="高处" /> - <el-table-column prop="block" label="盲板抽堵"/> - <el-table-column prop="tempUse" label="临时用电"/> - <el-table-column fixed="right" label="操作"> - <template #default> - <el-button link type="primary" size="small">操作</el-button> - </template> - </el-table-column> - </el-table> - </div> - </el-row> - <el-dialog v-model="dialogFormVisible" title="新增预约"> - <el-form :model="reservationForm"> - <el-form-item label="我的当前部门" :label-width="formLabelWidth"> - <el-input v-model="reservationForm.department" placeholder="" /> - </el-form-item> - <el-form-item label="预约作业时间" :label-width="formLabelWidth"> + <div>当前所属部门:<span>电工部</span></div> <el-date-picker - v-model="reservationForm.time" - type="date" - placeholder="" + v-model="searchTime" + type="datetime" + placeholder="预约时间" size="large" + style="width: 100%;white-space: nowrap;margin-right: 20px" + /> + <el-select v-model="typeValue" placeholder="请选择预约类型" style="width: 100%"> + <el-option label="类型1" value="类型1"/> + <el-option label="类型2" value="类型2"/> + <el-option label="类型3" value="类型3"/> + </el-select> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <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="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default"/> + </el-row> + <el-table + ref="multipleTableRef" + :data="tableData" + style="width: 100%" + :header-cell-style="{background: '#fafafa'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55" /> + <el-table-column type="index" label="序号" width="120" /> + <el-table-column prop="time" label="预约时间" width="150" /> + <el-table-column prop="department" label="预约部门" width="180" /> + <el-table-column prop="dirtyWork" label="动土作业" width="100" /> + <el-table-column prop="fireWork" label="动火作业" width="100" /> + <el-table-column prop="hangWork" label="吊装作业" width="100" /> + <el-table-column prop="spaceWork" label="受限空间作业"/> + <el-table-column prop="cut" label="断路作业"/> + <el-table-column prop="high" label="高处作业" /> + <el-table-column prop="block" label="盲板抽堵作业"/> + <el-table-column prop="tempUse" label="临时用电作业"/> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="pageBtn"> + <el-pagination + v-model:currentPage="currentPage" + v-model:page-size="pageSize" + :page-sizes="[10, 15]" + small=false + background + layout="total, sizes, prev, pager, next, jumper" + :total="100" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-scrollbar> + <el-dialog v-model="dialogDetails" title="作业预约"> + <el-form :model="details" label-width="120px"> + <el-form-item label="预约时间"> + <el-input + v-model="details.time" + readonly /> </el-form-item> - <el-form-item label="预约作业类型" :label-width="formLabelWidth"> - <el-select v-model="reservationForm.type"> - <el-option label="类型1" value="type1" /> - <el-option label="类型2" value="type2" /> - </el-select> + <el-form-item label="预约部门"> + <el-input + v-model="details.department" + readonly + /> </el-form-item> - <el-form-item label="对应作业数量" :label-width="formLabelWidth"> - <el-input v-model="reservationForm.amount" placeholder="" /> + <el-form-item label="动土作业"> + <el-input + v-model="details.dirtyWork" + readonly + /> + </el-form-item> + <el-form-item label="动火作业"> + <el-input + v-model="details.fireWork" + readonly + /> + </el-form-item> + <el-form-item label="吊装作业"> + <el-input + v-model="details.hangWork" + readonly + /> + </el-form-item> + <el-form-item label="受限空间作业"> + <el-input + v-model="details.spaceWork" + readonly + /> + </el-form-item> + <el-form-item label="断路作业"> + <el-input + v-model="details.cut" + readonly + /> + </el-form-item> + <el-form-item label="高处作业"> + <el-input + v-model="details.high" + readonly + /> + </el-form-item> + <el-form-item label="盲板抽堵作业"> + <el-input + v-model="details.block" + readonly + /> + </el-form-item> + <el-form-item label="临时用电作业"> + <el-input + v-model="details.tempUse" + readonly + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> </el-form-item> </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="作业预约编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="预约时间" prop="time"> + <el-date-picker + v-model="addRecord.time" + type="datetime" + format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + <el-form-item label="预约部门" prop="department"> + <el-select v-model="addRecord.department" placeholder="请选择"> + <el-option label="部门一" value="部门一" /> + <el-option label="部门二" value="部门二" /> + </el-select> + </el-form-item> + <el-form-item label="动土作业"> + <el-input + v-model="addRecord.dirtyWork" + /> + </el-form-item> + <el-form-item label="动火作业"> + <el-input + v-model="addRecord.fireWork" + /> + </el-form-item> + <el-form-item label="吊装作业"> + <el-input + v-model="addRecord.hangWork" + /> + </el-form-item> + <el-form-item label="受限空间作业"> + <el-input + v-model="addRecord.spaceWork" + /> + </el-form-item> + <el-form-item label="断路作业"> + <el-input + v-model="addRecord.cut" + /> + </el-form-item> + <el-form-item label="高处作业"> + <el-input + v-model="addRecord.high" + /> + </el-form-item> + <el-form-item label="盲板抽堵作业"> + <el-input + v-model="addRecord.block" + /> + </el-form-item> + <el-form-item label="临时用电作业"> + <el-input + v-model="addRecord.tempUse" + /> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> <template #footer> - <span class="dialog-footer"> - <el-button @click="dialogFormVisible = false" size="default">取消</el-button> - <el-button type="primary" @click="dialogFormVisible = false" size="default">确认</el-button> - </span> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> </template> </el-dialog> - </el-scrollbar> </div> </template> -<script lang="ts"> - import { toRefs, reactive, defineComponent, ref } from 'vue'; +<script lang="ts" setup> + import { toRefs, reactive, ref } from 'vue'; import { storeToRefs } from 'pinia'; import { initBackEndControlRoutes } from '/@/router/backEnd'; 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, FormInstance, FormRules } from 'element-plus' let global: any = { homeChartOne: null, homeChartTwo: null, @@ -120,106 +236,117 @@ interface type { } - export default defineComponent({ - name: 'home', - setup() { + // export default defineComponent({ + // name: 'workCheckinRecord', + // setup() { const userInfo = useUserInfo() - const searchTime = ref('') - const typeValue = ref('') - const reserveOptions = [ - { - value: 'Option1', - label: 'Option1', - }, - { - value: 'Option2', - label: 'Option2', - }, - { - value: 'Option3', - label: 'Option3', - }, - { - value: 'Option4', - label: 'Option4', - }, - { - value: 'Option5', - label: 'Option5', - }, - ]; - const tableData = [ - { - id: '10801920', - time: '2022-06-29', - department: '电工部', - dirtyWork: '', - fireWork: '', - hangWork: '', - spaceWork: '', - cut: '', - high: '', - block: '', - tempUse: '' - }, - { - id: '10801920', - time: '2022-06-29', - department: '电工部', - dirtyWork: '', - fireWork: '', - hangWork: '', - spaceWork: '', - cut: '', - high: '', - block: '', - tempUse: '' - }, - { - id: '10801920', - time: '2022-06-29', - department: '土木', - dirtyWork: '', - fireWork: '', - hangWork: '', - spaceWork: '', - cut: '', - high: '', - block: '', - tempUse: '' - } - ]; - const dialogFormVisible = ref(false); - const formLabelWidth = '140px'; - const reservationForm = reactive({ - department: '', - time: '', - type: '', - amount: '' - }); const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({ - homeOne:[{id:1,name:'基础数据权限管理系统'},{id:2,name:'双重预防系统'},{id:3,name:'系统2'},{id:4,name:'系统3'},{id:5,name:'系统4'}], - }); + const typeValue = ref('') + const currentPage = ref(1) + const pageSize = ref(10) + const chosenIndex = ref(-1) + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`) + } + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`) + } + const tableData = reactive( + [ + { + time: '2022-06-29 12:32:52', + department: '电工部', + dirtyWork: '', + fireWork: '', + hangWork: '', + spaceWork: '', + cut: '', + high: '', + block: '', + tempUse: '' + }, + { + time: '2022-06-29 12:32:52', + department: '电工部', + dirtyWork: '', + fireWork: '', + hangWork: '', + spaceWork: '', + cut: '', + high: '', + block: '', + tempUse: '' + }, + { + time: '2022-06-29 12:32:52', + department: '土木', + dirtyWork: '', + fireWork: '', + hangWork: '', + spaceWork: '', + cut: '', + high: '', + block: '', + tempUse: '' + } + ] + ) + const addRef = ref<FormInstance>() + const addRules = reactive<FormRules>({ + time:[{required: true, message: '该内容不能为空',trigger:'blur'}], + department:[{required: true, message: '该内容不能为空',trigger:'blur'}] + }) + const dialogDetails = ref(false) + const dialogAddRecord = ref(false) + const deleteDialog = ref(false) + const addRecord = ref({}) + const details = ref({}) + const viewRecord = (row) =>{ + details.value = JSON.parse(JSON.stringify(row)) + dialogDetails.value = true + } + const deleteRecord = (index) =>{ + chosenIndex.value = index + deleteDialog.value = true + } + const conFirmDelete = ()=> { + tableData.splice(chosenIndex.value,1) + deleteDialog.value = false + } + const confirmAddRecord = async (formEl: FormInstance | undefined) =>{ + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + if(chosenIndex.value == -1){ + tableData.unshift(addRecord.value) + }else{ + tableData[chosenIndex.value] = addRecord.value + } + dialogAddRecord.value =false + } else { + console.log('error submit!', fields) + } + }) + + } + const closeAdd =()=>{ + addRecord.value={} + chosenIndex.value = -1 + } + const indexClear = ()=>{ + chosenIndex.value = -1 + } + const editRecord =(index, row)=>{ + dialogAddRecord.value = true + chosenIndex.value = index + addRecord.value = JSON.parse(JSON.stringify(row)) + } // 折线图 const renderMenu = async (value: string) => { Session.set('projectId',value) userInfos.value.projectId = value await initBackEndControlRoutes(); }; - return { - renderMenu, - searchTime, - typeValue, - reserveOptions, - tableData, - dialogFormVisible, - formLabelWidth, - reservationForm, - ...toRefs(state), - }; - }, - }); </script> <style scoped lang="scss"> @@ -228,59 +355,75 @@ height: 100%; overflow: hidden; padding: 20px; - .el-row{ - margin-bottom: 20px; - } - .el-row:last-of-type { - margin-bottom: 0; - } .homeCard{ width: 100%; - display: flex; - align-items: center; padding: 20px; background: #fff; border-radius: 4px; } - .grid-content{ - align-items: center; - min-height: 36px; - } - - .topInfo{ + .el-row{ display: flex; align-items: center; - font-size: 16px; - font-weight: bold; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content{ + align-items: center; + min-height: 36px; + } - .demo-datetime-picker { + .topInfo { display: flex; - width: 100%; - padding: 0; - flex-wrap: wrap; - } - .demo-datetime-picker .block { - padding: 30px 0; - text-align: center; - border-right: solid 1px var(--el-border-color); - flex: 1; + align-items: center; + font-size: 16px; + font-weight: bold; + + &>div{ + white-space: nowrap; + margin-right: 20px; + } } } - .topBtns{ + .mainPages{ + height: 100%; display: flex; + flex-direction: column; + justify-content: space-between; + } + .main-card{ + width: 100%; + .cardTop{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn{ + margin: 0; + } + } + } + .pageBtn{ + display: flex; + align-items: center; justify-content: right; + margin-top: 20px; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } } - .el-button--text { - margin-right: 15px; - } - .el-select { - width: 300px; - } - .el-input { - width: 300px; - } - .dialog-footer button:first-child { - margin-right: 10px; - } + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; } </style> diff --git a/src/views/specialWorkSystem/workProcessManagement/workCheckinRecord/index.vue b/src/views/specialWorkSystem/workProcessManagement/workCheckinRecord/index.vue index 4173575..e3d3d50 100644 --- a/src/views/specialWorkSystem/workProcessManagement/workCheckinRecord/index.vue +++ b/src/views/specialWorkSystem/workProcessManagement/workCheckinRecord/index.vue @@ -31,7 +31,7 @@ <el-table-column property="worker" label="签到人" width="180" /> <el-table-column property="checkinTime" label="签到时间" sortable/> <el-table-column property="remark" label="备注"/> - <el-table-column fixed="right" label="操作" width="180"> + <el-table-column fixed="right" label="操作" align="center" width="180"> <template #default="scope"> <el-button link type="primary" size="small" @click="viewDetails(scope.row)">查看</el-button> </template> -- Gitblit v1.9.2