From 12f81d879463dbfa0f7eccf8e455a0fdbcaea2e8 Mon Sep 17 00:00:00 2001
From: gaoshp <291585735@qq.com>
Date: 星期一, 29 四月 2024 23:02:02 +0800
Subject: [PATCH] 班制图
---
src/views/console/base/Shiftsystem.vue | 271 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 251 insertions(+), 20 deletions(-)
diff --git a/src/views/console/base/Shiftsystem.vue b/src/views/console/base/Shiftsystem.vue
index 554122f..798763d 100644
--- a/src/views/console/base/Shiftsystem.vue
+++ b/src/views/console/base/Shiftsystem.vue
@@ -1,45 +1,276 @@
<!--
* @Date: 2024-04-09 20:19:46
* @LastEditors: Sneed
- * @LastEditTime: 2024-04-09 20:38:18
+ * @LastEditTime: 2024-04-29 23:01:13
* @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/console/base/Shiftsystem.vue
-->
<template>
<el-container>
<el-aside width="320px">
- <el-table :data="tableData" stripe style="width: 100%" @row-click="rowClick">
- <el-table-column prop="code" label="鐝埗缂栧彿" />
+ <scTable style="width: 100%;" ref="table" row-key="id" border :params="params" :apiObj="apiObj" stripe
+ :hideDo="true" paginationLayout="total, prev, pager, next" @dataChange="dataChange"
+ @row-click="rowClick" highlight-current-row>
+ <el-table-column prop="code" label="鐝埗缂栧彿" width="100px" />
<el-table-column prop="name" label="鐝埗鍚嶇О" />
- </el-table>
+ </scTable>
</el-aside>
<el-container>
- 456
+ <el-header>
+ <el-button style="margin-left: auto;" size="small" @click="table_add" type="primary"
+ icon="el-icon-plus"></el-button>
+ <el-button @click="table_edit" type="primary" size="small">缂栬緫</el-button>
+ <el-button type="danger" plain icon="el-icon-delete" size="small" @click="del"></el-button>
+ </el-header>
+ <el-main>
+ <el-row>
+ <el-col :span="2">
+ 鐝埗缂栧彿
+ </el-col>
+ <el-col :span="6">
+ {{ info.code }}
+ </el-col>
+ <el-col :span="2">
+ 鐝埗棰滆壊
+ </el-col>
+ <el-col :span="6">
+ <el-color-picker size="small" v-model="info.colour" />
+ </el-col>
+ <el-col :span="2">
+ 寮�濮�-缁撴潫鏃堕棿
+ </el-col>
+ <el-col :span="6">
+ {{ dateFormat(info.startTime) }} - {{ dateFormat(info.endTime | dateFormat) }}
+ </el-col>
+ </el-row>
+ <el-row style="margin-top: 20px;">
+ <el-timeline style="max-width: 600px">
+ <el-timeline-item v-for="(activity, index) in activities" :key="index"
+ :timestamp="activity.time">
+ {{ activity.title }}
+ </el-timeline-item>
+ </el-timeline>
+ </el-row>
+ <el-row style="margin-top: 20px;">
+ <scEcharts style="width:100%" height="300px" :option="dayCharts">
+ </scEcharts>
+ </el-row>
+ </el-main>
</el-container>
+ <Dialog ref="dialog" :option="{ types, status, group }"></Dialog>
</el-container>
</template>
<script>
+import Dialog from './Dialog.vue'
+import moment from 'moment';
+import scEcharts from '@/components/scEcharts';
+import * as echarts from 'echarts'
export default {
- data () {
- return {
- tableData: []
+ components: {
+ Dialog,
+ scEcharts
+ },
+ computed: {
+ dateFormat: () => {
+ return value => {
+ if (isNaN(value)) return ''
+ let pre = '褰撴棩'
+ let add = value / (24 * 60)
+ if (add < 0) {
+ pre = '涓婃棩'
+ } else if (add >= 1) {
+ pre = '娆℃棩'
+ }
+ let base = moment().format('YYYY-MM-DD') + ' 00:00'
+ let current = moment(base).add(value, 'm')
+ return pre + moment(current).format('HH:mm');
+ }
+ },
+ activities() {
+ if (!this.info?.shiftDetailVOList?.length) return []
+ return this.info.shiftDetailVOList.map(item => {
+ return {
+ title: `鐝鍚嶇О锛�${item.indexName}`,
+ time: `${this.dateFormat(item.shiftStartTime)}-${this.dateFormat(item.shiftEndTime)}`
+ }
+ })
+ },
+
+ dayCharts() {
+ // if (!this?.info?.shiftDetailVOList?.length) return
+ // let yData = this.info.shiftDetailVOList.map(item => {
+ // return item.indexName
+ // })
+ // let series = this.info.shiftDetailVOList.map(item => {
+ // let base = moment().format('YYYY-MM-DD') + ' 00:00:00'
+ // return [item.indexName, moment(base).add(item.shiftStartTime, 'm').unix(), moment(base).add(item.shiftEndTime, 'm').unix()]
+ // // return {
+ // // name: item.indexName,
+ // // type: 'bar',
+ // // data: [moment(base).add(item.shiftStartTime, 'm').format('YYYY-MM-DD HH:mm:ss').unix(), moment(base).add(item.shiftEndTime, 'm').format('YYYY-MM-DD HH:mm:ss').unix()],
+ // // label: {
+ // // show: true
+ // // }
+ // // }
+ // })
+ // console.log(series)
+
+ let { data = [], categories = [], startTime, end } = this.getData1()
+ console.log('>>>>>>', data)
+ return {
+ title: {
+ text: '鐝埗姒傝'
+ },
+ tooltip: {
+ formatter: function (params) {
+ return params.name + ': ' + params.value[3];
+ }
+ },
+ legend: {},
+ xAxis: {
+ min: startTime,
+ max: end,
+ scale: true,
+ interval: 2 * 60 * 60,
+ axisLabel: {
+ formatter: function (val, index) {
+
+ let str = ''
+ let now = moment()
+ let current = now.format('YYYY-MM-DD')
+ let pre = now.subtract(1, 'd').format('YYYY-MM-DD')
+ let next = now.add(2, 'd').format('YYYY-MM-DD')
+ let nowDate = moment.unix(val).format('YYYY-MM-DD')
+ if (nowDate === current) {
+ str = '褰撴棩'
+ } else if (nowDate === pre) {
+ str = '涓婃棩'
+ } else if (nowDate === next) {
+ str = '娆℃棩'
+ }
+ return `${str}${moment.unix(val).format('HH:mm')}`
+ }
+ }
+ },
+ yAxis: {
+ type: 'category',
+ data: categories
+ },
+ series: [
+ {
+ type: 'custom',
+ renderItem: (params, api) => {
+ var categoryIndex = api.value(0);
+ var start = api.coord([api.value(1), categoryIndex]);
+ var end = api.coord([api.value(2), categoryIndex]);
+ var height = api.size([0, 1])[1] * 0.6;
+ var rectShape = echarts.graphic.clipRectByRect(
+ {
+ x: start[0],
+ y: start[1] - height / 2,
+ width: end[0] - start[0],
+ height: height
+ },
+ {
+ x: params.coordSys.x,
+ y: params.coordSys.y,
+ width: params.coordSys.width,
+ height: params.coordSys.height
+ }
+ );
+ return (
+ rectShape && {
+ type: 'rect',
+ transition: ['shape'],
+ shape: rectShape,
+ style: api.style()
+ }
+ );
+ },
+ itemStyle: {
+ opacity: 0.8
+ },
+ encode: {
+ x: [1, 2],
+ y: 0
+ },
+ data
+ }
+ ]
+ }
}
},
- created () {
- this.$API.calender.getShiftsystemList.post({params: {current:1,size: 15},data: {
- code: "",name: "",statusList: [1]
- }}).then(res => {
- this.tableData = res?.data?.records || []
- let current = this.tableData?.[0] || ''
- current.id && this.rowClick(current)
- })
+ data() {
+ return {
+ apiObj: this.$API.calender.getShiftsystemList,
+ params: {
+ statusList: [1],
+ code: '',
+ name: ''
+ },
+ info: {
+ code: ''
+ },
+ }
+ },
+ created() {
},
methods: {
- rowClick(row) {
- console.log(row)
- this.$API.calender.getShiftsystemInfo.get({id: row.id}).then(res => {
- console.log(res.data)
+ getData1() {
+ if (!this?.info?.shiftDetailVOList?.length) return { data: [], categories: [], startTime: 0 }
+ let categories = this.info.shiftDetailVOList.map(item => {
+ return item.indexName
})
+ let base
+ this.info.shiftDetailVOList.forEach(item => {
+ !base && (base = item.shiftStartTime)
+ if (base > item.shiftStartTime) {
+ base = item.shiftStartTime
+ }
+ })
+ let startTime = moment(moment().format('YYYY-MM-DD') + ' 00:00:00').add(base, 'm').unix()
+ let end = moment.unix(startTime).add(24, 'h').unix()
+ console.log(moment.unix(startTime).format('YYYY-MM-DD HH:mm:ss'), 'startTIme', moment.unix(end).format('YYYY-MM-DD HH:mm:ss'))
+ let data = [];
+ var types = [
+ { name: 1, color: '#7b9ce1' },
+ { name: 2, color: '#bd6d6c' },
+ { name: 3, color: '#75d874' },
+ { name: 4, color: '#e0bc78' },
+ { name: 5, color: '#dc77dc' },
+ { name: 6, color: '#72b362' }
+ ];
+ this.info.shiftDetailVOList.forEach((item, index) => {
+ let desc = `${moment.unix(startTime + item.shiftStartTime * 60).format('HH:mm')} - ${moment.unix(startTime + item.shiftEndTime * 60).format('HH:mm')}`
+ data.push({
+ name: item.indexName,
+ value: [index, startTime + item.shiftStartTime * 60, startTime + item.shiftEndTime * 60, desc],
+ itemStyle: {
+ normal: {
+ color: this.info.colour
+ }
+ }
+ })
+ })
+ return { data, categories, startTime, end }
+ },
+ dataChange(res, tableData) {
+ let current = tableData?.[0] || {}
+ current.id && this.rowClick(current)
+ },
+ rowClick(row) {
+ this.$API.calender.getShiftsystemInfo.get({ id: row.id }).then(res => {
+ this.info = res.data
+ })
+ },
+ table_add() {
+ this.$refs.dialog.open()
+ },
+ table_edit() {
+ this.$refs.dialog.open()
+ },
+ del() {
+
}
},
}
--
Gitblit v1.9.3