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/workPlan/workAppointSummary/index.vue | 680 +++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 428 insertions(+), 252 deletions(-) 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> -- Gitblit v1.9.2