parent
ec754c40d0
commit
b0a323b4b6
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,74 @@
|
||||
<template>
|
||||
<el-collapse v-model="activeName" accordion >
|
||||
<el-collapse-item :name="deptName">
|
||||
<template slot="title">
|
||||
<div style="width: 100%;height:100%;margin-left: 5%;text-align: center;line-height: 50px">
|
||||
<button class="deptName">{{deptName}}({{type==='ks'?'总人数:':'出勤:'}}{{users}})</button>
|
||||
</div>
|
||||
</template>
|
||||
<div class="box" v-for="(item,index) in data[deptName]" @click="itemClick(item)">
|
||||
<div style="font-size: 16px;text-align: center">
|
||||
{{item.name}}
|
||||
</div>
|
||||
<div style="text-align: center;">
|
||||
<img :src="item.headImage" :style="{width: myStyle.headImgWidth||'100%'}">
|
||||
</div>
|
||||
<div v-if="!!item.cq" style="width:100%;font-size: 12px;text-align: center;color:blue;margin-bottom: 15px;line-height: 19px">
|
||||
任务:{{test()}}
|
||||
<el-progress type="line" :text-inside="true" :stroke-width="18" :style="{width:'65%',float:'left',marginLeft:'2%'}"
|
||||
:percentage="Math.round(item.gzl/test()*100,2)>100?100:65"
|
||||
:color="'green'" text-color="white"/>
|
||||
</div>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import XEUtils from 'xe-utils'
|
||||
export default {
|
||||
name:"Template",
|
||||
props:{
|
||||
data:Object,
|
||||
deptName:String,
|
||||
type:String,
|
||||
myStyle:Object,
|
||||
users:Number
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
activeName:'1',
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
itemClick(item){
|
||||
this.$emit('initDetail',item);
|
||||
},
|
||||
test(){
|
||||
return XEUtils.random(1,60)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.box{
|
||||
width:49%;
|
||||
text-align: center;
|
||||
border: 3px solid yellow;
|
||||
border-radius: 25px;
|
||||
float: left;
|
||||
margin: 1px;
|
||||
}
|
||||
.deptName{
|
||||
color: white;
|
||||
border:1px solid blue;
|
||||
border-radius:15px;
|
||||
background-color: blue;
|
||||
width: 80%;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 16px;
|
||||
box-shadow: 2px 2px 2px 1px black;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,274 @@
|
||||
<template>
|
||||
<el-container>
|
||||
<el-header style="width: 100%; height: 35px;font-size: 12px">
|
||||
<el-form :inline="true" label-width="65px" label-position="left">
|
||||
<el-row>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="月份:">
|
||||
<el-date-picker v-model="queryParam.beginTime" value-format="yyyy/MM" type="month"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="20" style="text-align: right">
|
||||
<el-button type="success" @click="initList">查询</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-header>
|
||||
<el-container style="padding-top: 0px">
|
||||
<el-main>
|
||||
<div class="mytable">
|
||||
<vxe-grid
|
||||
id="id"
|
||||
ref="xGrid"
|
||||
border
|
||||
resizable
|
||||
keep-source
|
||||
:align="'center'"
|
||||
:height="height"
|
||||
:auto-resize="true"
|
||||
:columns="tableColumn"
|
||||
:data="list"
|
||||
:custom-config="{ storage: true }"
|
||||
highlight-current-row
|
||||
highlight-hover-row
|
||||
show-overflow
|
||||
:span-method="rowspanMethod"
|
||||
:scroll-y="{enabled: true}"
|
||||
>
|
||||
<template #default="{row,column}">
|
||||
<el-progress
|
||||
type="line"
|
||||
define-back-color="white"
|
||||
:show-text="false"
|
||||
:stroke-width="15"
|
||||
:percentage="row[column.property]"
|
||||
:color="row.gx==='计划'?'blue':'green'"
|
||||
></el-progress>
|
||||
</template>
|
||||
</vxe-grid>
|
||||
</div>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-container>
|
||||
</template>
|
||||
<script>
|
||||
import {mapGetters} from 'vuex'
|
||||
import XEUtils from 'xe-utils'
|
||||
|
||||
export default {
|
||||
name: 'Gjtj',
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
queryParam: {
|
||||
beginTime: '',
|
||||
},
|
||||
days: [],
|
||||
sunDays: [],
|
||||
height: '500px',
|
||||
tableColumn: [
|
||||
{field: 'dcCh', title: '船号', minWidth: "70",},
|
||||
{field: 'gx', title: '工序', minWidth: "70",},
|
||||
],
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['name', 'bmbm'])
|
||||
},
|
||||
created() {
|
||||
this.queryParam.beginTime = new Date();
|
||||
window.addEventListener('resize', this.getHeight)
|
||||
this.getHeight()
|
||||
// this.initTable()
|
||||
this.initList()
|
||||
},
|
||||
methods: {
|
||||
initList() {
|
||||
this.initTable()
|
||||
const list = []
|
||||
const gx = ['计划', '技术准备', '上料', '抛丸', '理料', '划线', '切割', '曲面', '坡口', '打磨', '预配盘', '配盘']
|
||||
for (const item of gx) {
|
||||
const column = {dcCh: 'TK110-4', gx: item}
|
||||
this.days.forEach(day => {
|
||||
if (!this.sunDays.includes(day)) {
|
||||
column[day] = XEUtils.random(0, 100)
|
||||
}
|
||||
})
|
||||
list.push(column)
|
||||
}
|
||||
this.list = list
|
||||
},
|
||||
initTable() {
|
||||
const date = this.queryParam.beginTime||new Date();
|
||||
const days = XEUtils.getDayOfMonth(date);
|
||||
const _columns=[
|
||||
{field: 'dcCh', title: '船号', minWidth: "70",},
|
||||
{field: 'gx', title: '工序', minWidth: "70",},
|
||||
]
|
||||
for (let i = 1; i <= days; i++) {
|
||||
const _day = XEUtils.getWhatMonth(date, 0, i);
|
||||
const day = XEUtils.toDateString(_day, 'yyyy/MM/dd')
|
||||
_columns.push({
|
||||
field: day, title: day, width: "150",
|
||||
slots: {
|
||||
// 使用插槽模板渲染
|
||||
default: 'default',
|
||||
}
|
||||
// cellRender: {
|
||||
// name: 'bar',
|
||||
// props: {
|
||||
// bar: {
|
||||
// max: 100
|
||||
// },
|
||||
// colors: ['blue', 'green'],
|
||||
// label: {
|
||||
// formatter: '{value}'
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
})
|
||||
this.days.push(day)
|
||||
const _sunday6 = XEUtils.getWhatWeek(day, 0, 6, 0)
|
||||
const sunday6 = XEUtils.toDateString(_sunday6, 'yyyy/MM/dd');
|
||||
if (!this.sunDays.includes(sunday6)) {
|
||||
this.sunDays.push(sunday6)
|
||||
}
|
||||
const _sunday7 = XEUtils.getWhatWeek(day, 0, 7, 0)
|
||||
const sunday7 = XEUtils.toDateString(_sunday7, 'yyyy/MM/dd');
|
||||
if (!this.sunDays.includes(sunday7)) {
|
||||
this.sunDays.push(sunday7)
|
||||
}
|
||||
}
|
||||
this.tableColumn=_columns
|
||||
},
|
||||
rowspanMethod({row, _rowIndex, column, visibleData}) {
|
||||
let fields = ["dcCh"];
|
||||
const cellValue = row[column.property];
|
||||
if (cellValue && fields.includes(column.property)) {
|
||||
const prevRow = visibleData[_rowIndex - 1];
|
||||
let nextRow = visibleData[_rowIndex + 1];
|
||||
if (prevRow && prevRow[column.property] === cellValue) {
|
||||
return {rowspan: 0, colspan: 0};
|
||||
} else {
|
||||
let countRowspan = 1;
|
||||
while (nextRow && nextRow[column.property] === cellValue) {
|
||||
nextRow = visibleData[++countRowspan + _rowIndex];
|
||||
}
|
||||
if (countRowspan > 1) {
|
||||
return {rowspan: countRowspan, colspan: 1};
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
getHeight() {
|
||||
this.height = window.innerHeight - 200
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
||||
::v-deep .el-progress__text{
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.el-header {
|
||||
margin: 0;
|
||||
padding: 5px;
|
||||
height: auto;
|
||||
|
||||
.el-input {
|
||||
width: 140px;
|
||||
}
|
||||
|
||||
.el-select {
|
||||
width: 140px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.el-container {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.el-main {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.el-col {
|
||||
padding: 0;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
.el-aside {
|
||||
background: #fff;
|
||||
padding: 0
|
||||
}
|
||||
|
||||
.el-container {
|
||||
padding: 0
|
||||
}
|
||||
|
||||
.el-row {
|
||||
}
|
||||
|
||||
.el-row:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.tableStyles {
|
||||
background: #0a76a4;
|
||||
}
|
||||
|
||||
.my-dropdown {
|
||||
width: 400px;
|
||||
height: 400px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #dcdfe6;
|
||||
box-shadow: 0 0 6px 2px rgba(0, 0, 0, 0.1);
|
||||
font-size: 12px;
|
||||
|
||||
}
|
||||
|
||||
.mytable1 {
|
||||
|
||||
}
|
||||
|
||||
.borderClass {
|
||||
|
||||
}
|
||||
|
||||
.vxe-input {
|
||||
display: inline-block !important;
|
||||
position: relative !important;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.el-input {
|
||||
display: inline-block !important;
|
||||
position: relative !important;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.keyword-lighten {
|
||||
color: #000;
|
||||
background-color: #FFFF00;
|
||||
}
|
||||
|
||||
.vxe-textarea--inner {
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.el-form-item__label-wrap {
|
||||
margin-left: 0px !important;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.fontClass {
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
@ -0,0 +1,205 @@
|
||||
<template>
|
||||
<el-container style="width:100%;height: 840px;">
|
||||
<div style="width:100%;background-color: #0d84ff;">
|
||||
<el-row>
|
||||
<el-col :span="6" class="rg-table">
|
||||
<div class="rg-table-box" style="width:100%;height: 900px;padding: 5px;overflow-y: auto;">
|
||||
<div v-for="(item,index) in ks" >
|
||||
<Template :data="data" :deptName="item" :type="'ks'" :users="totalUsers[item]" :myStyle="{headImgWidth:'100%'}" />
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<div class="rg-table-box" style="width:100%;height: 900px;padding: 5px;overflow-y: auto;">
|
||||
<div v-for="(item,index) in ks">
|
||||
<Template :data="cqData" :deptName="item" :type="'cq'" :users="cqUsers[item]||0" :myStyle="{headImgWidth:'100%'}" @initDetail="initDetail"/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-container style="padding-top: 0px">
|
||||
<el-main>
|
||||
<div class="mytable">
|
||||
<vxe-grid
|
||||
id="id"
|
||||
ref="xGrid"
|
||||
border
|
||||
resizable
|
||||
keep-source
|
||||
:align="'center'"
|
||||
:height="height"
|
||||
:auto-resize="true"
|
||||
:columns="tableColumn"
|
||||
:data="list"
|
||||
:custom-config="{ storage: true }"
|
||||
highlight-current-row
|
||||
highlight-hover-row
|
||||
show-overflow
|
||||
:scroll-y="{enabled: true}"
|
||||
>
|
||||
<template #default="{row,column}">
|
||||
<el-progress
|
||||
type="line"
|
||||
define-back-color="white"
|
||||
:show-text="false"
|
||||
:stroke-width="15"
|
||||
:percentage="row[column.property]"
|
||||
:color="row.gx==='计划'?'blue':'green'"
|
||||
></el-progress>
|
||||
</template>
|
||||
</vxe-grid>
|
||||
</div>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import XEUtils from 'xe-utils'
|
||||
import Template from "@/views/dashboard/components/Template.vue";
|
||||
export default {
|
||||
name: 'Kstj',
|
||||
components: {Template},
|
||||
data() {
|
||||
return {
|
||||
// 管理室-配送,准备室-资料接收编制计划,
|
||||
ks:['管理室','准备室','1作业区','2作业区','3作业区','4作业区','5作业区','6作业区'],
|
||||
data:{},
|
||||
cqData:{},
|
||||
totalUsers:{},
|
||||
cqUsers:{},
|
||||
height: '800px',
|
||||
list:[],
|
||||
tableColumn:[],
|
||||
'管理室': [
|
||||
{field: 'dcCh', title: '船号', minWidth: "70",},
|
||||
{field: 'dcPl', title: '批量', minWidth: "50",},
|
||||
{field: 'dcFd', title: '分段', minWidth: "50",},
|
||||
{field: 'tzbh', title: '套料图号', minWidth: "70",},
|
||||
{field: 'sl', title: '数量', minWidth: "50",},
|
||||
{field: 'start', title: '接收时间', minWidth: "90",},
|
||||
{field: 'end', title: '回报时间', minWidth: "90",},
|
||||
],
|
||||
'准备室': [
|
||||
{field: 'dcCh', title: '船号', minWidth: "70",},
|
||||
{field: 'dcPl', title: '批量', minWidth: "50",},
|
||||
{field: 'dcFd', title: '分段', minWidth: "50",},
|
||||
{field: 'tzbh', title: '套料图号', minWidth: "70",},
|
||||
{field: 'sl', title: '数量', minWidth: "50",},
|
||||
{field: 'start', title: '接收时间', minWidth: "90",},
|
||||
{field: 'end', title: '回报时间', minWidth: "90",},
|
||||
],
|
||||
'作业区': [
|
||||
{field: 'dcCh', title: '船号', minWidth: "70",},
|
||||
{field: 'dcPl', title: '批量', minWidth: "50",},
|
||||
{field: 'dcFd', title: '分段', minWidth: "50",},
|
||||
{field: 'sbbh', title: '加工设备', minWidth: "50",},
|
||||
{field: 'gx', title: '工序', minWidth: "50",},
|
||||
{field: 'sl', title: '数量', minWidth: "50",},
|
||||
{field: 'start', title: '接收时间', minWidth: "110",},
|
||||
{field: 'end', title: '回报时间', minWidth: "110",},
|
||||
],
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
},
|
||||
methods: {
|
||||
initDetail(item){
|
||||
this.tableColumn=this[item.ks]
|
||||
if (item.ks.indexOf('作业区')>-1){
|
||||
this.tableColumn=this['作业区']
|
||||
}
|
||||
this.loadData(item)
|
||||
},
|
||||
loadData(item){
|
||||
const list=[]
|
||||
const num=XEUtils.random(0,100)
|
||||
for (let i = 0; i < num; i++) {
|
||||
const data={
|
||||
dcCh:'TK110-4',
|
||||
dcPl:'096',
|
||||
dcFd:'9202',
|
||||
gx:'切割',
|
||||
sl:'3',
|
||||
sbbh:'龙门1',
|
||||
tzbh:'B001S2TX001',
|
||||
start:XEUtils.toDateString(new Date(),'yyyy/MM/dd HH:mm'),
|
||||
end:XEUtils.toDateString(new Date(),'yyyy/MM/dd HH:mm'),
|
||||
}
|
||||
list.push(data)
|
||||
}
|
||||
this.list=list
|
||||
},
|
||||
initData(){
|
||||
let i =0
|
||||
for (const item of this.ks) {
|
||||
if (!this.data[item]){
|
||||
this.data[item]=[]
|
||||
}
|
||||
if (!this.cqData[item]){
|
||||
this.cqData[item]=[]
|
||||
}
|
||||
if (!this.cqUsers[item]){
|
||||
this.cqUsers[item]=0
|
||||
}
|
||||
let totalUser=XEUtils.random(1,10)
|
||||
this.totalUsers[item]=totalUser
|
||||
if ('准备室'===item){
|
||||
totalUser=1
|
||||
this.totalUsers[item]=totalUser
|
||||
}
|
||||
for (let j = 0; j < totalUser; j++) {
|
||||
++i
|
||||
const cq=XEUtils.random(0, 1);
|
||||
const data={
|
||||
ks:item,
|
||||
yhdm:'李'+j,
|
||||
name:'李'+j,
|
||||
headImage:'static/img/btn_hr.e600324c.jpg',
|
||||
gzl:XEUtils.random(0, 100),
|
||||
cq:cq
|
||||
}
|
||||
if (cq){
|
||||
this.cqUsers[item]+=1
|
||||
this.cqData[item].push(data)
|
||||
}else {
|
||||
this.data[item].push(data)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.rg-table-box::-webkit-scrollbar {
|
||||
/*整体样式*/
|
||||
width: 0;
|
||||
}
|
||||
.rg-table-box::-webkit-scrollbar-track {
|
||||
/*轨道*/
|
||||
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
|
||||
background: #ededed;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.rg-table-box::-webkit-scrollbar-thumb {
|
||||
/*滚动条小方块*/
|
||||
border-radius: 10px;
|
||||
background-color: #2e75d3;
|
||||
background-image: -webkit-linear-gradient(
|
||||
45deg,
|
||||
rgba(255, 255, 255, 0.2) 25%,
|
||||
transparent 25%,
|
||||
transparent 50%,
|
||||
rgba(255, 255, 255, 0.2) 50%,
|
||||
rgba(255, 255, 255, 0.2) 75%,
|
||||
transparent 75%,
|
||||
transparent
|
||||
);
|
||||
}
|
||||
</style>
|
Loading…
Reference in new issue