From 1715e9ec75cfffea1e902e0f648e263cd18e3ceb Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期四, 09 五月 2024 10:42:03 +0800
Subject: [PATCH] 优化样品管理
---
src/components/view/b3-classes.vue | 511 +++++++++++++++++++++++++++-----------------------------
1 files changed, 246 insertions(+), 265 deletions(-)
diff --git a/src/components/view/b3-classes.vue b/src/components/view/b3-classes.vue
index f7db61e..3a2d9af 100644
--- a/src/components/view/b3-classes.vue
+++ b/src/components/view/b3-classes.vue
@@ -25,10 +25,10 @@
:value="item.value">
</el-option>
</el-select>
- <el-input v-model="query.name" placeholder="璇疯緭鍏ヤ汉鍛樺悕绉�" size="small" style="width: 140px;margin: 0 16px;" clearable ></el-input>
- <el-select v-model="query.addr" placeholder="璇烽�夋嫨瀹為獙瀹�" style="width: 140px;" size="small" clearable >
+ <el-input v-model="query.userName" placeholder="璇疯緭鍏ヤ汉鍛樺悕绉�" size="small" style="width: 140px;margin: 0 16px;" clearable ></el-input>
+ <el-select v-model="query.laboratory" placeholder="璇烽�夋嫨瀹為獙瀹�" style="width: 140px;" size="small" clearable >
<el-option
- v-for="item in labOptions"
+ v-for="item in laboratory"
:key="item.value"
:label="item.label"
:value="item.value">
@@ -42,53 +42,57 @@
</div>
<div class="search_thing btns" style="padding-left: 30px;">
<el-button size="small" type="primary">瀵� 鍑�</el-button>
- <el-button size="small" type="primary" @click="handleScheduling">鎺� 鐝�</el-button>
+ <el-button size="small" type="primary" @click="schedulingVisible = true">鎺� 鐝�</el-button>
</div>
</div>
- <div class="center">
- <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 userList" :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 }} ({{ item.part }})</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 }}</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.day5 }}澶�</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" v-if="item.day==1">{{ item.month }}</span>
- <span class="day">{{ item.day }}</span>
- <span class="week">{{ item.week }}</span>
+ <div class="center" v-loading="pageLoading">
+ <scroll-pagination @load="init" :finishLoding="finishLoding">
+ <div>
+ <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 }}</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.totalAttendance }}澶�</span></p>
+ </div>
</div>
</div>
- <div class="content-body" v-for="(item,index) in 5" :key="'c'+index"
- :class="{hoverType:currentUserIndex==index}"v-on:mouseenter="onMouseEnter(index)"
- v-on:mouseleave="currentUserIndex=null">
- <div class="content-body-item" v-for="(m,i) in workList" :key="'d'+i">
- <div class="work-box" :class="{type0:m.type=='鏃╃彮',type1:m.type=='涓彮',type2:m.type=='澶滅彮',}">
- <div class="work-box-left">
- <span>{{ m.type }}</span>
+ <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">{{ item.weekNum }}鍛�</span>
+ <span class="day">{{ item.day }}</span>
+ <span class="week">{{ item.week }}</span>
</div>
- <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)">
- <i class="el-icon-arrow-down el-icon--right" style="font-size: 20px;color: #fff;cursor: pointer;"></i>
- <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 class="content-body" v-for="(item,index) in list" :key="'c'+index"
+ :class="{hoverType:currentUserIndex==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">
+ <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',}">
+ <div class="work-box-left">
+ <span>{{ getShiftByDic(m.shift) }}</span>
+ </div>
+ <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)">
+ <i class="el-icon-arrow-down el-icon--right" style="font-size: 20px;color: #fff;cursor: pointer;"></i>
+ <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>
- </div>
+ </scroll-pagination>
</div>
<el-dialog title="鎺掔彮" :visible.sync="schedulingVisible" width="400px">
<div class="search_thing">
@@ -105,12 +109,12 @@
<div class="search_thing">
<div class="search_label" style="width:90px">浜哄憳鍚嶇О锛�</div>
<div class="search_input">
- <el-select v-model="schedulingQuery.person" placeholder="璇烽�夋嫨" style="width: 100%;" multiple clearable >
+ <el-select v-model="schedulingQuery.userId" placeholder="璇烽�夋嫨" style="width: 100%;" multiple clearable collapse-tags >
<el-option
v-for="item in personList"
- :key="item.value"
- :label="item.label"
- :value="item.value">
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
</el-option>
</el-select>
</div>
@@ -118,7 +122,7 @@
<div class="search_thing">
<div class="search_label" style="width:90px">鐝锛�</div>
<div class="search_input">
- <el-select v-model="schedulingQuery.person" placeholder="璇烽�夋嫨" style="width: 100%;">
+ <el-select v-model="schedulingQuery.shift" placeholder="璇烽�夋嫨" style="width: 100%;">
<el-option
v-for="item in classType"
:key="item.value"
@@ -137,14 +141,21 @@
</template>
<script>
+import {
+ getYearAndMonthAndDays
+ } from '../../util/date'
+ import ScrollPagination from '../tool/scroll-paging.vue'
export default {
+ components: {
+ ScrollPagination
+ },
data () {
return{
currentYear:new Date().getFullYear(),
currentMonth:new Date().getMonth()+1,
query:{
- name:'',
- addr:'',
+ userName:'',
+ laboratory:'',
year:'',
month:''
},
@@ -198,158 +209,8 @@
label:'12鏈�'
},
],
- labOptions:[],
- weeks:[
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:1,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ簩',
- day:2,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ笁',
- day:3,
- },
- {
- month:'14鍛�',
- week:'鍛ㄥ洓',
- day:4,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ簲',
- day:5,
- },
- {
- month:'14鍛�',
- week:'鍛ㄥ叚',
- day:6,
- },
- {
- month:'14鍛�',
- week:'鍛ㄦ棩',
- day:7,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:8,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ簩',
- day:9,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ笁',
- day:10,
- },
- {
- month:'14鍛�',
- week:'鍛ㄥ洓',
- day:11,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ簲',
- day:12,
- },
- {
- month:'14鍛�',
- week:'鍛ㄥ叚',
- day:13,
- },{
- month:'14鍛�',
- week:'鍛ㄦ棩',
- day:14,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:15,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:16,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:17,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:18,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:19,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:20,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:21,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:22,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:23,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:24,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:25,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:26,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:27,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:28,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:29,
- },
- {
- month:'14鍛�',
- week:'鍛ㄤ竴',
- day:30,
- },
- ],
+ laboratory:[],
+ weeks:[],
workList:[
{
type:'鏃╃彮',
@@ -473,81 +334,138 @@
},
],
classType:[],
- userList:[
- {
- name:'鏉庡獩濯�',
- part:'鏉愭枡',
- day0:12,//鏃�
- day1:12,//涓�
- day2:12,//澶�
- day3:12,//浼�
- day4:12,//璇峰亣
- day5:12,//鎬昏
- },
- {
- name:'鏉庡獩濯�',
- part:'鏉愭枡',
- day0:12,//鏃�
- day1:12,//涓�
- day2:12,//澶�
- day3:12,//浼�
- day4:12,//璇峰亣
- day5:12,//鎬昏
- },
- {
- name:'鏉庡獩濯�',
- part:'鏉愭枡',
- day0:12,//鏃�
- day1:12,//涓�
- day2:12,//澶�
- day3:12,//浼�
- day4:12,//璇峰亣
- day5:12,//鎬昏
- },
- {
- name:'鏉庡獩濯�',
- part:'鏉愭枡',
- day0:12,//鏃�
- day1:12,//涓�
- day2:12,//澶�
- day3:12,//浼�
- day4:12,//璇峰亣
- day5:12,//鎬昏
- },
- {
- name:'鏉庡獩濯�',
- part:'鏉愭枡',
- day0:12,//鏃�
- day1:12,//涓�
- day2:12,//澶�
- day3:12,//浼�
- day4:12,//璇峰亣
- day5:12,//鎬昏
- },
- ],
currentUserIndex:null,
schedulingVisible:false,
personList:[],
loading:false,
schedulingQuery:{
week:'',
- person:''
- }
+ userId:null,
+ shift:''
+ },
+ list:[],
+ currentPage: 1, // 褰撳墠椤�
+ pageSize: 10, // 涓�椤�10鏉�
+ total: '',
+ pageLoading: true, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue
+ finishLoding: false // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡
}
},
mounted(){
this.selectEnumByCategory()
+ this.obtainItemParameterList()
+ this.getUsers()
+ this.init()
},
methods: {
- refresh(){},
- refreshTable(){},
+ refresh(){
+ this.list = [];
+ this.currentPage = 1
+ this.query = {
+ userName:'',
+ laboratory:'',
+ year:'',
+ month:''
+ }
+ this.init()
+ },
+ refreshTable(){
+ this.list = [];
+ this.currentPage = 1
+ this.init()
+ },
+ init(){
+ if(this.currentPage==1){
+ this.pageLoading = true
+ }
+ this.$axios.post(this.$api.performanceShift.page, {
+ size:this.pageSize,
+ current:this.currentPage,
+ time:this.query.month?this.query.year+'-'+this.query.month:this.query.year,
+ userName:this.query.userName,
+ laboratory:this.query.laboratory,
+ }).then(res => {
+ this.pageLoading = false
+ if (res.code == 201) return
+ this.total = res.data.total
+ let list = res.data.records.map(item=>{
+ for (let key in item) {
+ let type = this.getDayByDic(key)
+ if(type!=undefined||type!=null){
+ item[`day${type}`] = item[key]
+ }
+ }
+ return item
+ });
+ // 鍙充晶鏃ユ湡鑾峰彇
+ if(this.currentPage==1){
+ if(list&&list.length>0){
+ this.weeks = [];
+ list[0].list&&list[0].list.forEach(item=>{
+ let obj = {
+ weekNum:item.weekly,
+ week:item.headerTime.split(' ')[1],
+ day:item.headerTime.split(' ')[0]
+ }
+ 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++;
+ }
+ })
+ },
onMouseEnter(index){
this.currentUserIndex = index
},
- handleScheduling(){
- this.schedulingVisible = true
+ confirmScheduling(){
+ if(!this.schedulingQuery.week){
+ this.$message.error('璇烽�夋嫨鍛ㄦ')
+ return
+ }
+ let time = this.schedulingQuery.week.getTime()
+ let startWeek =getYearAndMonthAndDays(new Date(time - 24 * 60 * 60 * 1000)) + ' 00:00:00'
+ let endWeek = getYearAndMonthAndDays(new Date(time + 24 * 60 * 60 * 1000 * 5))+ ' 00:00:00'
+ if(!this.schedulingQuery.userId||this.schedulingQuery.userId.length==0){
+ this.$message.error('璇烽�夋嫨浜哄憳')
+ return
+ }
+ if(!this.schedulingQuery.shift){
+ this.$message.error('璇烽�夋嫨鐝')
+ return
+ }
+ this.loading = true
+ this.$axios.post(this.$api.performanceShift.add, {
+ startWeek,
+ endWeek,
+ userId:this.schedulingQuery.userId.join(','),
+ shift:this.schedulingQuery.shift}, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ this.loading = false
+ if (res.code == 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.schedulingVisible = false
+ this.schedulingQuery = {
+ week:'',
+ userId:null,
+ shift:''
+ }
+ this.refresh()
+ })
},
- confirmScheduling(){},
selectEnumByCategory() {
this.$axios.post(this.$api.enums.selectEnumByCategory, {
category: "鐝绫诲瀷"
@@ -555,8 +473,63 @@
this.classType = res.data
})
},
+ obtainItemParameterList() {
+ this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.laboratoryName,
+ value: a.id
+ })
+ })
+ this.laboratory = data
+ })
+ },
handleCommand(e,m){
- console.log(e,m)
+ if(e!=m.shift){
+ this.$axios.put(this.$api.performanceShift.update+m.id, {
+ id:m.id,
+ shift:e
+ }).then(res => {
+ if (res.code == 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ m.shift = e
+ })
+ }
+ },
+ getUsers(){
+ this.$axios.post(this.$api.user.selectUserList, {
+ page: {
+ current: -1,
+ size: -1,
+ },
+ entity: {
+ name: null,
+ }
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code === 201) {
+ return
+ }
+ let arr = res.data.body.records
+ this.personList = arr
+ })
+ },
+ getDayByDic(e){
+ let obj = this.classType.find(m=>m.label==e)
+ if(obj){
+ return obj.value
+ }
+ },
+ getShiftByDic(e){
+ let obj = this.classType.find(m=>m.value==e)
+ if(obj){
+ return obj.label
+ }
+ return '鏈帓鐝�'
}
}
}
@@ -603,7 +576,7 @@
left: 0;
top: 0;
width: 220px; /* 宸﹁竟鍖哄煙瀹藉害 */
- min-height: calc(100% - 10px); /* 瑙嗗彛楂樺害 */
+ /* min-height: calc(100% - 10px); 瑙嗗彛楂樺害 */
background-color: #fff;
box-shadow: 2px -2px 5px rgba(51,51,51,0.12); /* 宸﹁竟闃村奖 */
}
@@ -617,7 +590,7 @@
.content {
min-height: calc(100% - 10px); /* 瑙嗗彛楂樺害 */
- min-width: 2000px;
+ /* min-width: 2000px; */
}
.content-title{
height: 52px;
@@ -625,7 +598,7 @@
border-bottom: 1px solid #EEEEEE;
}
.content-title-right{
- min-width: 2000px;
+ /* min-width: 2000px; */
display: flex;
align-items: center;
}
@@ -678,9 +651,9 @@
display: flex;
align-items: center;
justify-content: space-around;
- background: rgba(58,123,250,0.15);
+ background: #F5F7FB;
border-radius: 8px 8px 8px 8px;
- color: #3A7BFA;
+ color: #999;
font-size: 14px;
}
.work-box.type0{
@@ -695,6 +668,14 @@
background: #FAE2CA;
color: #BC8D5E;
}
+.work-box.type3{
+ background: #E1F3D8;
+ color: #67C23A;
+}
+.work-box.type4{
+ background: #FDE2E2;
+ color: #F56C6C;
+}
.work-box-left{
display: flex;
justify-content: center;
--
Gitblit v1.9.3