From 07a41ade45c962e93a9d449ce1be0eec52e66a6a Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期三, 19 三月 2025 10:44:32 +0800 Subject: [PATCH] 内部单不能修改报告 --- src/components/view/b3-classes.vue | 310 +++++++++++++++++++++++++++++++++----------------- 1 files changed, 203 insertions(+), 107 deletions(-) diff --git a/src/components/view/b3-classes.vue b/src/components/view/b3-classes.vue index 12b8b15..f20bb20 100644 --- a/src/components/view/b3-classes.vue +++ b/src/components/view/b3-classes.vue @@ -29,14 +29,14 @@ </el-option> </el-select> <el-input v-model="query.userName" placeholder="璇疯緭鍏ヤ汉鍛樺悕绉�" size="small" style="width: 140px;margin: 0 16px;" clearable @keyup.enter.native="refreshTable()"></el-input> - <el-select v-model="query.laboratory" placeholder="璇烽�夋嫨瀹為獙瀹�" style="width: 140px;" size="small" clearable @change="refreshTable()"> + <!-- <el-select v-model="query.laboratory" placeholder="璇烽�夋嫨瀹為獙瀹�" style="width: 140px;" size="small" clearable @change="refreshTable()"> <el-option v-for="item in laboratory" :key="item.value" :label="item.label" :value="item.value"> </el-option> - </el-select> + </el-select> --> </div> </div> <div class="search_thing" style="padding-left: 30px;"> @@ -44,13 +44,13 @@ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> </div> <div class="search_thing btns" style="padding-left: 30px;"> - <el-button size="small" type="primary" v-if="downPower" @click="configTime" :loading="downLoading">鏃堕棿閰嶇疆</el-button> + <el-button size="small" type="primary" v-if="listPower" @click="configTime" :loading="downLoading">鏃堕棿閰嶇疆</el-button> <el-button size="small" type="primary" v-if="downPower" @click="handleDown" :loading="downLoading">瀵� 鍑�</el-button> <el-button size="small" type="primary" @click="schedulingVisible = true" v-if="addPower">鎺� 鐝�</el-button> </div> </div> <div class="center" v-loading="pageLoading"> - <scroll-pagination @load="init" :finishLoding="finishLoding" v-show="query.month&&list.length>0" style="height: 100%;" :key="'123'" :list="list"> + <!-- <scroll-pagination @load="init" :finishLoding="finishLoding" v-show="query.month&&list.length>0" style="height: 100%;" :key="'123'" :list="list"> <div class="clearfix"> <div class="fixed-left"> <div class="content-title" style="padding-left: 16px;box-sizing: border-box;"> @@ -97,10 +97,101 @@ </div> </div> </div> - </scroll-pagination> - <scroll-pagination @load="initYear" :finishLoding="finishLoding" v-show="!query.month&&yearList.length>0" style="width: 100%;" :key="'111'" :list="yearList"> - <div class="clearfix year-table"> + </scroll-pagination> --> + <div class="clearfix" style="width: 100%;" v-show="query.month"> <div class="fixed-left"> + <div class="content-title" style="padding-left: 16px;box-sizing: border-box;"> + 浜哄憳鍚嶇О + </div> + <div class="content-user" :class="{hoverType:currentUserIndex==index}" v-for="(item,index) in list" :key="'e'+index" v-on:mouseenter="onMouseEnter(index)" + v-on:mouseleave="currentUserIndex=null"> + <div class="user-pic">{{ item.name.charAt(0) }}</div> + <div class="user-info"> + <p style="font-size: 14px;color: #3A7BFA;line-height: 24px;">{{ item.name }}</p> + <p style="color: #999999;font-size: 12px;transform: scale(0.8) translateX(-20px);white-space: nowrap;width: 150px;overflow-x: show;">鏃�:{{ item.day0 }},涓�:{{ item.day1 }},澶�:{{ item.day2 }},浼�:{{ item.day3 }},鍋�:{{ item.day4 }},宸�:{{ item.day6 }}</p> + <p style="margin-top: 4px;"><span style="color: #999999;font-size: 12px;display: inline-block;transform: scale(0.8) translateX(-10px);">鍚堣鍑哄嫟: </span><span style="font-size: 16px; + color: #FF4902;">{{ query.month?item.monthlyAttendance +.totalAttendance:item.sidebarAnnualAttendance +.totalAttendance }}澶�</span></p> + </div> + </div> + </div> + <div class="scroll-right"> + <div class="content"> + <div class="content-title content-title-right" style="border-bottom: 0;"> + <div class="content-title-item" v-for="(item,index) in weeks" :key="'b'+index"> + <span class="month" style="position: absolute;top: 4px;" v-if="item.week=='鍛ㄦ棩'">{{ item.weekNum }}鍛�</span> + <p style="height: 26px;position: absolute;bottom: 12px;"> + <span class="day">{{ item.day }}</span> + <span class="week">{{ item.week.charAt(1) }}</span> + </p> + </div> + </div> + <div class="content-body" v-for="(item,index) in list" :key="'c'+index" + v-on:mouseenter="onMouseEnter(index)" + v-on:mouseleave="currentUserIndex=null"> + <div class="content-body-item" v-for="(m,i) in item.list" :key="'d'+i" :class="{hoverType:currentUserIndex==index}"> + <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)" :disabled="!upPower" style="width: 100%;height: 100%;cursor: pointer;"> + <div class="work-box" :class="{type0:m.shift==='0',type1:m.shift==='1',type2:m.shift==='2',type3:m.shift==='3',type4:m.shift==='4',type5:m.shift==='5',type6:m.shift==='6'}"> + <span style="cursor: pointer;" :style="`opacity: ${getShiftByDic(m.shift)=='鏃�'?0:1};`">{{ getShiftByDic(m.shift) }}</span> + </div> + <el-dropdown-menu slot="dropdown"> + <el-dropdown-item v-for="(n,j) in classType" :key="'h'+j" :command="n.value">{{ n.label }}</el-dropdown-item> + </el-dropdown-menu> + </el-dropdown> + </div> + </div> + </div> + </div> + </div> + <div class="clearfix year-table" style="width: 100%;" v-show="!query.month"> + <div class="fixed-left"> + <div class="content-title" style="padding-left: 16px;box-sizing: border-box;"> + 浜哄憳鍚嶇О + </div> + <div class="content-user" :class="{hoverType:currentUserIndex==index}" v-for="(item,index) in yearList" :key="'e'+index" v-on:mouseenter="onMouseEnter(index)" + v-on:mouseleave="currentUserIndex=null"> + <div class="user-pic">{{ item.name.charAt(0) }}</div> + <div class="user-info"> + <p style="font-size: 14px;color: #3A7BFA;line-height: 24px;">{{ item.name }}</p> + <p style="color: #999999;font-size: 12px;transform: scale(0.8) translateX(-20px);white-space: nowrap;width: 150px;overflow-x: show;">鏃�:{{ item.day0 }},涓�:{{ item.day1 }},澶�:{{ item.day2 }},浼�:{{ item.day3 }},鍋�:{{ item.day4 }},宸�:{{ item.day6 }}</p> + <p style="margin-top: 4px;"><span style="color: #999999;font-size: 12px;display: inline-block;transform: scale(0.8) translateX(-10px);">鍚堣鍑哄嫟: </span><span style="font-size: 16px; + color: #FF4902;">{{ item.work_time }}澶�</span></p> + </div> + </div> + </div> + <div class="scroll-right"> + <div class="content"> + <div> + <div class="content-title content-title-right" style="border-bottom: 0;height: 52px;" :style="`display: grid; + grid-template-columns: repeat(${monthList.length}, 1fr);`"> + <div class="content-title-item" v-for="(item,index) in monthList" :key="'b'+index" style="height: 52px;"> + <span class="month">{{ item }}鏈�</span> + </div> + </div> + <div + class="content-body" + v-for="(item,index) in yearList" + :key="'c'+index" + v-on:mouseenter="onMouseEnter(index)" + v-on:mouseleave="currentUserIndex=null" + :style="`display: grid; + grid-template-columns: repeat(${monthList.length}, 1fr);`" + > + <div class="content-body-item" v-for="(m,i) in item.monthList" :key="'d'+i" :class="{hoverType:currentUserIndex==index}"> + <p style="color:rgb(153, 153, 153);font-size: 12px;">鍚堣鍑哄嫟锛�<span style="font-size: 14px;color:#000">{{ m.totalMonthAttendance }}</span></p> + <p style="color:rgb(153, 153, 153);font-size: 12px;"> + 鏃�:{{ m.day0 }},涓�:{{ m.day1 }},澶�:{{ m.day2 }},浼�:{{ m.day3 }},鍋�:{{ m.day4 }},宸�:{{ m.day6 }} + </p> + </div> + </div> + </div> + </div> + </div> + </div> + <!-- <scroll-pagination @load="initYear" :finishLoding="finishLoding" v-show="!query.month&&yearList.length>0" style="width: 100%;" :key="'111'" :list="yearList"> + <div class="clearfix year-table"> + <div class="fixed-left"> <div class="content-title" style="padding-left: 16px;box-sizing: border-box;"> 浜哄憳鍚嶇О </div> @@ -144,27 +235,26 @@ </div> </div> </div> - </scroll-pagination> - <span style="color:#909399;font-size:14px;position: absolute;left:50%;top: 50%;transform: translate(-59%,-50%);" v-if="(query.month&&list.length==0)||(!query.month&&yearList.length==0)">鏆傛棤鏁版嵁</span> + </scroll-pagination> --> + <!-- <span style="color:#909399;font-size:14px;position: absolute;left:50%;top: 50%;transform: translate(-59%,-50%);" v-if="(query.month&&list.length==0)||(!query.month&&yearList.length==0)">鏆傛棤鏁版嵁</span> --> </div> +<el-pagination + background + @current-change="currentChange" + :page-size="pageSize" :current-page="currentPage" + layout="total, prev, pager, next, jumper" + :total="total" style="margin-top: 10px;text-align: right;margin-right: 30px;"> +</el-pagination> + <el-dialog title="鏃堕棿閰嶇疆" :visible.sync="configTimeVisible" width="620px"> - <div v-loading="configTimeVisibleLoading" ></div> - <div v-if="!configTimeVisibleLoading"> + <div v-loading="configTimeVisibleLoading" style="min-height: 200px;"> <div v-for="(item, index) in timeQuery"> - <div class="form_title"> - <span>{{`鐝${transFromNumber(index + 1)}`}}</span> - <span style="margin-right: 10px"> - <i class="el-icon-circle-check" v-if="item.isEdit" style="margin-left: 10px; color: #4b79f2" @click="saveEdit(item, index)"></i> - <i class="el-icon-edit" v-if="!item.isEdit" style="margin-left: 10px; color: #4b79f2" @click="item.isEdit = true"></i> - <i class="el-icon-delete" v-if="!item.isEdit && timeQuery.length > 1" style="margin-left: 10px; color: #FF4902" @click="deleteTime(item, index)"></i> - </span> - </div> - <div class="form"> - <div style="margin-bottom: 12px"> + <div class="form" style="display: flex;justify-content: space-between"> + <div style="margin-bottom: 12px;width: 200px;"> <span class="form_label">鐝锛�</span> <span v-if="!item.isEdit"> {{item.type}} </span> <span class="form_input" v-if="item.isEdit"> - <el-select v-model="item.shift" placeholder="璇烽�夋嫨" style="width: 70%;" clearable size="small"> + <el-select v-model="item.shift" placeholder="璇烽�夋嫨" style="width: 70%;margin-right: 8px;" clearable size="small"> <el-option v-for="obj in timeTypeList" :key="obj.value" :label="obj.label" @@ -173,12 +263,12 @@ </el-select> </span> </div> - <div> + <div style="width: calc(100% - 260px);"> <span class="form_label">鏃堕棿锛�</span> - <span v-if="!item.isEdit"> {{item.time === null ? '' : item.time[0] + '~' + item.time[1]}} </span> + <span v-if="!item.isEdit"> {{item.startTime&&item.endTime ? item.startTime + '~' + item.endTime:''}} </span> <span class="form_input" v-if="item.isEdit"> - <el-time-picker - style="width: 70%;" + <!-- <el-time-picker + style="width: 200px;" is-range size="small" v-model="item.time" @@ -188,12 +278,38 @@ start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" placeholder="閫夋嫨鏃堕棿鑼冨洿"> - </el-time-picker> + </el-time-picker> --> + <el-time-select + placeholder="璧峰鏃堕棿" + v-model="item.startTime" + size="small" + :picker-options="{ + start: '00:00', + step: '00:15', + end: '24:00' + }" style="width: 120px;"> + </el-time-select> + <el-time-select + style="width: 120px;" + placeholder="缁撴潫鏃堕棿" + v-model="item.endTime" + size="small" + :picker-options="{ + start: '00:00', + step: '00:15', + end: '24:00' + }"> + </el-time-select> </span> </div> - <el-divider></el-divider> + <span> + <i class="el-icon-circle-check" v-if="item.isEdit" style="margin-left: 10px; color: #4b79f2;cursor: pointer;" @click="saveEdit(item, index)"></i> + <i class="el-icon-edit" v-if="!item.isEdit" style="margin-left: 10px; color: #4b79f2;cursor: pointer;" @click="item.isEdit = true"></i> + <i class="el-icon-delete" v-if=" timeQuery.length > 1" style="margin-left: 10px; color: #FF4902;cursor: pointer;" @click="deleteTime(item, index)"></i> + </span> </div> - <div @click="addTimeForm" style="color: #4b79f2" v-if="index === timeQuery.length - 1">娣诲姞鏃堕棿閰嶇疆</div> + <el-divider></el-divider> + <div @click="addTimeForm" style="color: #4b79f2;cursor: pointer;" v-if="index === timeQuery.length - 1">娣诲姞鏃堕棿閰嶇疆</div> </div> <div @click="addTimeForm" style="color: #4b79f2" v-if="timeQuery.length === 0">娣诲姞鏃堕棿閰嶇疆</div> </div> @@ -329,18 +445,18 @@ }, list:[], currentPage: 1, // 褰撳墠椤� - pageSize: 10, // 涓�椤�10鏉� - total: '', + pageSize: 6, // 涓�椤�10鏉� + total: 0, pageLoading: false, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 monthList:[], yearList:[], downLoading:false, - keyMap:{}, configTimeVisible: false, // 鏃堕棿閰嶇疆寮规 configTimeVisibleLoading: false, // 鏃堕棿閰嶇疆寮规loading timeTypeList: [], timeQuery: [], + listPower:false, } }, watch: { @@ -379,14 +495,12 @@ this.monthList.push(i) } this.monthList.reverse() - // this.getPower() + this.getPower() }, methods: { refresh(){ this.list = []; this.yearList = [] - this.keyMap = {}; - this.finishLoding = false; this.currentPage = 1 this.query = { userName:'', @@ -401,14 +515,20 @@ } }, refreshTable(){ - this.keyMap = {}; this.currentPage = 1 - this.finishLoding = false; if(this.query.month){ this.list = []; this.init() }else{ this.yearList = [] + this.initYear() + } + }, + currentChange(num){ + this.currentPage = num + if(this.query.month){ + this.init() + }else{ this.initYear() } }, @@ -430,17 +550,7 @@ return overWan ? getWan(overWan) + "涓�" + getWan(noWan) : getWan(num) }, init(){ - const key = `_${this.currentPage}` - const value = this.keyMap[key] - // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 - if(value) { - return - } - // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 - this.keyMap[key] = 'temp' - if(this.currentPage==1){ - this.pageLoading = true - } + this.pageLoading = true let year = this.query.year.getFullYear() let month0 = this.query.month?this.query.month:new Date().getMonth()+1 let month = month0>9?month0:'0'+month0 @@ -453,8 +563,8 @@ }).then(res => { this.pageLoading = false if (res.code == 201) return - this.total = res.data.total - let list = res.data.page.records.map(item=>{ + this.total = res.data.page.total + this.list = res.data.page.records.map(item=>{ for (let key in item.monthlyAttendance) { let type = this.getDayByDic(key) if(type!=undefined||type!=null){ @@ -473,33 +583,10 @@ } this.weeks.push(obj) }) - if(list.length==0){ - this.finishLoding = true; - }else{ - if(list.length<this.pageSize){ - this.finishLoding = true; - } - this.list = this.list.concat(list) - if(this.total==this.list.length){ - this.finishLoding = true; - } - this.currentPage++; - } }) }, initYear(){ - const key = `_${this.currentPage}` - const value = this.keyMap[key] - // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 - if(value) { - return - } - // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 - this.keyMap[key] = 'temp' - // pageYear - if(this.currentPage==1){ - this.pageLoading = true - } + this.pageLoading = true let year = this.query.year.getFullYear() this.$axios.post(this.$api.performanceShift.pageYear, { size:this.pageSize, @@ -511,7 +598,7 @@ this.pageLoading = false if (res.code == 201) return this.total = res.data.total - let list = res.data.records.map(item=>{ + this.yearList = res.data.records.map(item=>{ for (let key in item.year) { let type = this.getDayByDic(key) if(type!=undefined||type!=null){ @@ -532,18 +619,18 @@ } return item }); - if(list.length==0){ - this.finishLoding = true; - }else{ - if(list.length<this.pageSize){ - this.finishLoding = true; - } - this.yearList = this.yearList.concat(list) - if(this.total==this.yearList.length){ - this.finishLoding = true; - } - this.currentPage++; - } + // if(list.length==0){ + // this.finishLoding = true; + // }else{ + // if(list.length<this.pageSize){ + // this.finishLoding = true; + // } + // this.yearList = this.yearList.concat(list) + // if(this.total==this.yearList.length){ + // this.finishLoding = true; + // } + // this.currentPage++; + // } }) }, getPower() { @@ -551,20 +638,25 @@ let add = false let up = false let down = false + let listPower = false for (var i = 0; i < power.length; i++) { - if (power[i].menuMethod == 'update') { + if (power[i].menuMethod == 'performanceShiftUpdate') { up = true } if (power[i].menuMethod == 'delDeviceParameter') { down = true } - if (power[i].menuMethod == 'add') { + if (power[i].menuMethod == 'performanceShiftAdd') { add = true + } + if (power[i].menuMethod == 'shiftTimeList') { + listPower = true } } this.addPower = add this.upPower = up this.downPower = down + this.listPower = listPower }, onMouseEnter(index){ this.currentUserIndex = index @@ -620,11 +712,13 @@ getTimeList () { this.configTimeVisibleLoading = true this.$axios.post(this.$api.performanceShift.getList).then(res => { - if (res.code === 200) { + if (res.code == 201) return + if (res.data.length > 0) { res.data.forEach(item => { item.isEdit = false - item.time.push(item.startTime) - item.time.push(item.endTime) + // item.time = [] + // item.time.push(item.startTime) + // item.time.push(item.endTime) const index = this.timeTypeList.findIndex(val => val.value === item.shift) if (index > -1) { item.type = this.timeTypeList[index].label @@ -653,6 +747,8 @@ item.type = this.timeTypeList[index].label } } + delete item.orderBy + delete item.time const isEmpty = this.isObjectEmpty(item) if (isEmpty) { this.$message.error('璇峰~鍐欏畬鏁�') @@ -661,8 +757,8 @@ let newObj = {} let url = '' newObj.shift = item.shift - newObj.startTime = item.time[0] - newObj.endTime = item.time[1] + newObj.startTime = item.startTime + newObj.endTime = item.endTime url = this.$api.performanceShift.shiftAdd if (item.id) { // 鏈塱d涓轰慨鏀� @@ -676,21 +772,21 @@ }).then(res => { if (res.code == 201) return this.$message.success('鎿嶄綔鎴愬姛') + this.getTimeList() }) - this.getTimeList() }, deleteTime (item, index) { - this.$axios.post(this.$api.performanceShift.shiftRemove, { - id: item.id - },{ - headers: { - 'Content-Type': 'application/json' - } - }).then(res => { - if (res.code == 201) return - this.$message.success('鎿嶄綔鎴愬姛') - }) - this.getTimeList() + if(item.id){ + this.$axios.post(this.$api.performanceShift.shiftRemove, { + id: item.id + }).then(res => { + if (res.code == 201) return + this.$message.success('鎿嶄綔鎴愬姛') + this.getTimeList() + }) + }else{ + this.timeQuery.splice(index, 1) + } }, isObjectEmpty(obj) { return Object.keys(obj).some(key => !obj[key]); @@ -878,7 +974,7 @@ } .center { width: 100%; - height: calc(100% - 50px ); + height: calc(100% - 100px ); background-color: #fff; overflow-y: auto; display: flex; -- Gitblit v1.9.3