Compare commits

..

No commits in common. "ee0affc78f6ba02e53bd43de66baccecbd4629d2" and "bc5d3d44d5ca65527d97d1539aa8702d36949d73" have entirely different histories.

29 changed files with 9138 additions and 10636 deletions

View File

@ -1,7 +1,7 @@
### ###
# @Author: Do not edit # @Author: Do not edit
# @Date: 2023-08-29 09:40:39 # @Date: 2023-08-29 09:40:39
# @LastEditTime: 2023-09-18 10:44:07 # @LastEditTime: 2023-09-16 09:41:07
# @LastEditors: DY # @LastEditors: DY
# @Description: # @Description:
### ###
@ -14,8 +14,8 @@ VUE_APP_TITLE = 芋道管理系统
# 芋道管理系统/开发环境 # 芋道管理系统/开发环境
# VUE_APP_BASE_API = 'http://192.168.1.49:48080' # VUE_APP_BASE_API = 'http://192.168.1.49:48080'
# VUE_APP_BASE_API = 'http://192.168.1.8:48080' # VUE_APP_BASE_API = 'http://192.168.1.8:48080'
VUE_APP_BASE_API = 'http://192.168.0.33:48080' # VUE_APP_BASE_API = 'http://192.168.0.33:48080'
# VUE_APP_BASE_API = 'http://192.168.1.188:48080' VUE_APP_BASE_API = 'http://192.168.1.188:48080'
# 路由懒加载 # 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true VUE_CLI_BABEL_TRANSPILE_MODULES = true

View File

@ -50,11 +50,3 @@ export function getCode() {
method: 'get' method: 'get'
}) })
} }
// 获得可用的排班列表
export function listEnabled() {
return request({
url: '/base/group-team/listEnabled',
method: 'get'
})
}

View File

@ -1,27 +1,54 @@
import request from '@/utils/request' import request from '@/utils/request'
// 获取某月预排班-已有排班 // 创建排班信息
export function getPreset(query) { export function createGroupTeamScheduling(data) {
return request({ return request({
url: '/base/group-team-scheduling/getPreset', url: '/base/group-team-scheduling/create',
method: 'get',
params: query
})
}
// 批量创建-更新排班信息
export function createOrUpdateList(data) {
return request({
url: '/base/group-team-scheduling/createOrUpdateList',
method: 'post', method: 'post',
data: data data: data
}) })
} }
// 自动排班,填充上月已有的排班 // 更新排班信息
export function autoSet() { export function updateGroupTeamScheduling(data) {
return request({ return request({
url: '/base/group-team-scheduling/autoSet', url: '/base/group-team-scheduling/update',
method: 'put',
data: data
})
}
// 删除排班信息
export function deleteGroupTeamScheduling(id) {
return request({
url: '/base/group-team-scheduling/delete?id=' + id,
method: 'delete'
})
}
// 获得排班信息
export function getGroupTeamScheduling(id) {
return request({
url: '/base/group-team-scheduling/get?id=' + id,
method: 'get' method: 'get'
}) })
} }
// 获得排班信息分页
export function getGroupTeamSchedulingPage(query) {
return request({
url: '/base/group-team-scheduling/page',
method: 'get',
params: query
})
}
// 导出排班信息 Excel
export function exportGroupTeamSchedulingExcel(query) {
return request({
url: '/base/group-team-scheduling/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>下拉展开</title>
<g id="页面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="编组-43" transform="translate(-1870.000000, -119.000000)" fill-rule="nonzero">
<g id="下拉展开" transform="translate(1870.000000, 119.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="18" height="18"></rect>
<path d="M9.79014922,13.2165873 L16.1721224,6.15356667 C16.6092925,5.77338351 16.6092925,5.16518371 16.1721224,4.78500055 C15.964758,4.60350795 15.6800768,4.50112918 15.3827707,4.50112918 C15.0854647,4.50112918 14.8007835,4.60350795 14.5934191,4.78500055 L9.00013482,11.162609 L3.40552499,4.78387137 C3.19816065,4.60237877 2.91347942,4.5 2.61617336,4.5 C2.3188673,4.5 2.03418606,4.60237877 1.82682172,4.78387137 C1.39105943,5.16454327 1.39105943,5.77176559 1.82682172,6.15243749 L8.20879489,13.214329 C8.31400161,13.3066969 8.440317,13.3797143 8.57994259,13.4288732 C8.99637706,13.5753327 9.475517,13.4912854 9.79014922,13.2165873 Z" id="路径" fill="#0B58FF"></path>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切换</title>
<g id="1班组管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="切换" fill="#FFFFFF" fill-rule="nonzero">
<rect id="矩形" opacity="0" x="0" y="0" width="16" height="16"></rect>
<path d="M14.5,9.15 C14.969442,9.15 15.35,9.53055796 15.35,10 C15.35,10.4333311 15.0257376,10.7909267 14.6066222,10.8433773 L14.5,10.85 L3.523,10.8493636 L5.10448737,12.4305126 C5.26177017,12.5877954 5.34716031,12.7990496 5.34764236,13.015701 L5.34074746,13.1242515 L5.31933966,13.2323523 C5.24258033,13.518822 5.01882201,13.7425803 4.73235229,13.8193397 C4.48169128,13.8865041 4.21633806,13.832194 4.01342676,13.6770775 L3.93051263,13.6044874 L1.04232939,10.7055042 C0.831903536,10.5688042 0.689345737,10.3541899 0.656994192,10.1075365 L0.65,10 L0.65778959,9.88152374 C0.670925502,9.77175364 0.705946489,9.66606949 0.76033092,9.57061601 L0.821076439,9.47880032 L0.894170559,9.39517056 C1.02591288,9.26342824 1.19742791,9.1808136 1.37731459,9.15882561 L1.5,9.15 L14.5,9.15 Z M11.9865732,2.32292254 L12.0694874,2.39551263 L14.9508862,5.29019827 C15.1653597,5.42263107 15.3074642,5.64305498 15.3419246,5.89182346 L15.35,6 L15.3417548,6.1198336 C15.3282251,6.22918814 15.2930578,6.33441548 15.2387207,6.42946868 L15.1780851,6.52090655 L15.1052179,6.60421789 C14.9738843,6.73555151 14.8030912,6.81820523 14.622959,6.840766 L14.5,6.85 L1.5,6.85 C1.03055796,6.85 0.65,6.46944204 0.65,6 C0.65,5.56666889 0.974262406,5.20907332 1.39337781,5.15662271 L1.5,5.15 L12.475,5.14936355 L10.8955126,3.56948738 C10.7382298,3.41220459 10.6528397,3.20095039 10.6523576,2.98429905 L10.6592525,2.8757485 L10.6806603,2.76764771 C10.7478247,2.5169867 10.9275353,2.31433911 11.1633258,2.21617103 L11.2676477,2.18066033 C11.5183087,2.11349592 11.7836619,2.167806 11.9865732,2.32292254 Z" id="形状结合"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>收起</title>
<g id="页面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="编组-43" transform="translate(-1870.000000, -485.000000)" fill-rule="nonzero">
<g id="编组-18备份" transform="translate(1.000000, 366.000000)">
<g id="收起" transform="translate(1878.000000, 128.000000) scale(1, -1) translate(-1878.000000, -128.000000) translate(1869.000000, 119.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="18" height="18"></rect>
<path d="M9.79014922,13.2165873 L16.1721224,6.15356667 C16.6092925,5.77338351 16.6092925,5.16518371 16.1721224,4.78500055 C15.964758,4.60350795 15.6800768,4.50112918 15.3827707,4.50112918 C15.0854647,4.50112918 14.8007835,4.60350795 14.5934191,4.78500055 L9.00013482,11.162609 L3.40552499,4.78387137 C3.19816065,4.60237877 2.91347942,4.5 2.61617336,4.5 C2.3188673,4.5 2.03418606,4.60237877 1.82682172,4.78387137 C1.39105943,5.16454327 1.39105943,5.77176559 1.82682172,6.15243749 L8.20879489,13.214329 C8.31400161,13.3066969 8.440317,13.3797143 8.57994259,13.4288732 C8.99637706,13.5753327 9.475517,13.4912854 9.79014922,13.2165873 Z" id="路径" fill="#0B58FF"></path>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -13,17 +13,8 @@ body {
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
} }
// label { label {
// font-weight: 700; font-weight: 700;
// }
.searchBarBox .el-form-item--medium .el-form-item__label {
line-height: 40px;
}
.searchBarBox .el-form-item--medium .el-form-item__content {
line-height: 40px;
}
.searchBarBox .el-range-editor--small.el-input__inner {
height: 34px;
} }
html { html {

View File

@ -52,13 +52,6 @@ Vue.prototype.divide = divide;
Vue.prototype.tableHeight = function(n) { Vue.prototype.tableHeight = function(n) {
return window.innerHeight - n return window.innerHeight - n
} }
Vue.prototype.searchBarWidth = function(name, num) {
if (document.getElementById(name) && document.getElementById(name).offsetWidth < num) {
return true
} else {
return false
}
}
// 全局组件挂载 // 全局组件挂载
Vue.component('DictTag', DictTag); Vue.component('DictTag', DictTag);

View File

@ -2,7 +2,7 @@
<div class="app-container"> <div class="app-container">
<search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" /> <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
<base-table v-loading="dataListLoading" :span-method="mergeColumnHandler" :table-props="tableProps" :table-data="tableData" /> <base-table v-loading="dataListLoading" :span-method="mergeColumnHandler" :table-props="tableProps" :table-data="tableData" />
<balance-chart ref="lineChart" /> <line-chart ref="lineChart" />
<!-- <pagination <!-- <pagination
:limit.sync="listQuery.pageSize" :limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo" :page.sync="listQuery.pageNo"
@ -16,7 +16,7 @@
import { parseTime } from '../../mixins/code-filter'; import { parseTime } from '../../mixins/code-filter';
import { getCT } from '@/api/core/analysis/index'; import { getCT } from '@/api/core/analysis/index';
import { getProductionLinePage } from '@/api/core/base/productionLine'; import { getProductionLinePage } from '@/api/core/base/productionLine';
import BalanceChart from '../balanceChart' import lineChart from '../LineChart'
import { time } from 'echarts'; import { time } from 'echarts';
// import { getWorkshopSectionPage } from '@/api/core/base/workshopSection'; // import { getWorkshopSectionPage } from '@/api/core/base/workshopSection';
@ -43,7 +43,7 @@ import { time } from 'echarts';
export default { export default {
components: { components: {
BalanceChart lineChart,
}, },
// mixins: [basicPage], // mixins: [basicPage],
data() { data() {
@ -103,8 +103,8 @@ export default {
getArr() { getArr() {
const params = { const params = {
page: 1, page: 1,
limit: 500 limit: 500,
} };
this.optionArrUrl.forEach((item, index) => { this.optionArrUrl.forEach((item, index) => {
item(params).then((response) => { item(params).then((response) => {
this.formConfig[index].selectOptions = response.data.list this.formConfig[index].selectOptions = response.data.list
@ -126,6 +126,7 @@ export default {
} }
} }
}) })
console.log('打印数组长度', this.spanArr)
}, },
/** 合并table列的规则 */ /** 合并table列的规则 */
mergeColumnHandler({ row, column, rowIndex, columnIndex }) { mergeColumnHandler({ row, column, rowIndex, columnIndex }) {
@ -144,11 +145,6 @@ export default {
// this.listQuery.lineId = '1672847052717821953' // this.listQuery.lineId = '1672847052717821953'
// this.listQuery.startTime = '1693497600000'; // this.listQuery.startTime = '1693497600000';
// this.listQuery.endTime = '1693843200000'; // this.listQuery.endTime = '1693843200000';
this.tableData.splice(0)
this.xData.splice(0)
this.yData.splice(0)
this.tableProps.splice(0)
this.spanArr.splice(0)
this.urlOptions.getDataListURL(this.listQuery).then(res => { this.urlOptions.getDataListURL(this.listQuery).then(res => {
console.log(res) console.log(res)
let arr = [ let arr = [
@ -166,33 +162,23 @@ export default {
let sectionArr= [] let sectionArr= []
res.data.data.forEach((ele, index) => { res.data.data.forEach((ele, index) => {
let tempData = [] let tempData = []
let eqData = [] ele.data.forEach(item => {
let plData = []
ele.data.forEach((item, index) => {
item.children.forEach(params => { item.children.forEach(params => {
if (params.dynamicName === '设备CT') { if (params.dynamicName === '设备CT') {
tempData[item.dynamicName + '_eq'] = params.dynamicValue tempData[item.dynamicName + '_eq'] = params.dynamicValue
eqData[index] = params.dynamicValue
} else { } else {
tempData[item.dynamicName + '_pl'] = params.dynamicValue tempData[item.dynamicName + '_pl'] = params.dynamicValue
plData[index] = params.dynamicValue
} }
}) })
}) })
const equipment = {
name: ele.equName,
eqData: eqData,
plData: plData
}
tempData['equName'] = ele.equName tempData['equName'] = ele.equName
tempData['sectionName'] = ele.sectionName tempData['sectionName'] = ele.sectionName
this.tableData.push(tempData) this.tableData.push(tempData)
const { sectionName } = tempData const { sectionName } = tempData
sectionArr.push(sectionName) sectionArr.push(sectionName)
this.yData.push(equipment)
console.log('看看equ', this.yData)
}) })
this.setRowSpan(sectionArr) this.setRowSpan(sectionArr)
console.log('工段名称列表', sectionArr)
res.data.nameData.forEach(item => { res.data.nameData.forEach(item => {
this.timeList.push(item.name) this.timeList.push(item.name)
}) })
@ -208,13 +194,24 @@ export default {
] ]
} }
arr.push(subprop) arr.push(subprop)
this.xData.push(times)
} }
} }
this.tableProps = arr this.tableProps = arr
console.log('表格横坐标', this.xData) let xData = []
this.$refs.lineChart.initChart(this.xData, this.yData) res.data.nameData.forEach(item => {
xData.push(item.name)
// arr[2].children.push(props)
})
let yData = []
res.data.data[0].data[0].children.forEach((item, index) => {
// console.log(item)
yData.push(item.dynamicValue)
// let data = 'data' + Number(index+1)
// obj['' + item.dynamicName + ''] = item.dynamicValue
})
console.log(this.yData)
this.$refs.lineChart.initChart(xData, yData)
// this.total = response.data.total; // this.total = response.data.total;
// this.dataListLoading = false; // this.dataListLoading = false;
}); });

View File

@ -1,102 +0,0 @@
<!--
* @Author: zhp
* @Date: 2023-09-13 09:02:25
* @LastEditTime: 2023-09-20 09:29:40
* @LastEditors: DY
* @Description:
-->
<template>
<div>
<div style="margin: 20px">
<el-button v-for="(item, index) in dataArray" :key="index" @click="changeChart(index)">{{ item.name }}</el-button>
</div>
<div ref="chartDiv" :class="className" :style="{height:height,width:width}" />
</div>
</template>
<script>
import * as echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
// import resize from './mixins/resize'
export default {
// mixins: [resize],
props: {
className: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '350px'
},
// autoResize: {
// type: Boolean,
// default: true
// }
},
data() {
return {
chart: null,
dataArray: [],
xDatas: []
}
},
mounted() {
},
methods: {
changeChart(index) {
this.setOptions(this.xDatas, this.dataArray[index])
},
initChart(xData, yData, lineName) {
this.dataArray = yData
this.xDatas = xData
console.log(xData,yData);
console.log('zale', yData[0].eqData)
this.chart = echarts.init(this.$refs.chartDiv, 'macarons')
this.setOptions(xData, yData[0], lineName)
},
setOptions(xData, dataList, lineName) {
// let seriesData = []
// lineName.forEach((item,index) => {
// seriesData.push({
// name: item,
// data: yData[index],
// type: 'line',
// })
// })
this.chart.setOption({
xAxis: {
type: 'category',
data: xData
},
tooltip: {
trigger: 'axis'
},
legend: {
data:lineName
},
yAxis: {
type: 'value'
},
series: [
{
name: '设备CT',
data: dataList.eqData,
type: 'line',
},
{
name: '产线CT',
data: dataList.plData,
type: 'line',
}
]
})
}
}
}
</script>

View File

@ -1,7 +1,7 @@
<!-- <!--
* @Author: Do not edit * @Author: Do not edit
* @Date: 2023-08-29 14:59:29 * @Date: 2023-08-29 14:59:29
* @LastEditTime: 2023-09-20 10:55:23 * @LastEditTime: 2023-09-16 17:42:37
* @LastEditors: DY * @LastEditors: DY
* @Description: * @Description:
--> -->
@ -157,11 +157,6 @@ export default {
}; };
}, },
created() { created() {
if (this.$route.params.startTime) {
this.formConfig[1].defaultSelect = [this.$route.params.startTime, this.$route.params.endTime]
}
// const time = new Date()
// this.formConfig[1].defaultSelect = [time, time]
this.getDataList() this.getDataList()
this.getPdLineList() this.getPdLineList()
}, },

View File

@ -1,160 +1,143 @@
<template> <template>
<div class="searchBarBox divHeight" ref="searchBarRef" :style="{ paddingRight: isFold ? '55px' : '0px' }"> <el-form :inline="true" class="demo-form-inline">
<el-form :inline="true" class="demo-form-inline"> <el-form-item label="能源类型">
<span class="blue-block"></span> <el-select v-model="queryParams.energyTypeId" placeholder="请选择" style="width: 100px;">
<el-form-item label="能源类型"> <el-option
<el-select v-model="queryParams.energyTypeId" placeholder="请选择" style="width: 100px;" size="small"> v-for="item in energyTypeList"
<el-option :key="item.id"
v-for="item in energyTypeList" :label="item.name"
:key="item.id" :value="item.id">
:label="item.name" </el-option>
:value="item.id"> </el-select>
</el-option> </el-form-item>
</el-select> <el-form-item label="时间维度">
</el-form-item> <el-select v-model="queryParams.timeDim" placeholder="请选择" style="width: 80px;">
<el-form-item label="时间维度"> <el-option
<el-select v-model="queryParams.timeDim" placeholder="请选择" style="width: 80px;" size="small"> v-for="item in getDictDatas(this.DICT_TYPE.TIME_DIM)"
<el-option :key="item.value"
v-for="item in getDictDatas(this.DICT_TYPE.TIME_DIM)" :label="item.label"
:key="item.value" :value="item.value">
:label="item.label" </el-option>
:value="item.value"> </el-select>
</el-option> </el-form-item>
</el-select> <el-form-item label="时间范围">
</el-form-item> <div v-show="queryParams.timeDim === '1'">
<el-form-item label="时间范围"> <el-date-picker
<div v-show="queryParams.timeDim === '1'"> v-model="timeValue"
<el-date-picker type="datetimerange"
v-model="timeValue" range-separator="至"
type="datetimerange" start-placeholder="开始日期"
range-separator="至" end-placeholder="结束日期"
start-placeholder="开始日期" format="yyyy-MM-dd HH:mm"
end-placeholder="结束日期" value-format="timestamp"
format="yyyy-MM-dd HH:mm" :picker-options="pickerOptions"
value-format="timestamp" popper-class="noneMinute"
:picker-options="pickerOptions" @change="timeSelect"
popper-class="noneMinute" :clearable="false"
@change="timeSelect"
size="small"
style='width:350px;'
:clearable="false"
>
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '2'">
<el-date-picker
v-model="dateValue"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="timestamp"
:picker-options="pickerOptions"
:clearable="false"
size="small"
style='width:350px;'
@change="timeSelect"
>
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '3'">
<el-date-picker
v-model="weekValue1"
type="week"
format="yyyy 第 WW 周"
style='width:170px;'
:picker-options="pickerOptionsWeek"
@change="startWeek"
:clearable="false"
size="small"
placeholder="选择周">
</el-date-picker>-
<el-date-picker
v-model="weekValue2"
type="week"
format="yyyy 第 WW 周"
:picker-options="pickerOptionsWeek"
style='width:170px;'
@change="endWeek"
:clearable="false"
size="small"
placeholder="选择周">
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '4'">
<el-date-picker
v-model="monthValue"
type="monthrange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="timestamp"
:clearable="false"
:picker-options="pickerOptions"
size="small"
style='width:350px;'
@change="timeSelect"
>
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '5'">
<el-date-picker
style='width:170px;'
v-model="yearValue1"
type="year"
:picker-options="pickerOptions"
value-format="timestamp"
placeholder="选择年"
@change="startYear"
size="small"
:clearable="false"
> >
</el-date-picker>- </el-date-picker>
<el-date-picker </div>
style='width:170px;' <div v-show="queryParams.timeDim === '2'">
v-model="yearValue2" <el-date-picker
type="year" v-model="dateValue"
:picker-options="pickerOptions" type="daterange"
value-format="timestamp" range-separator="至"
placeholder="选择年" start-placeholder="开始日期"
@change="endYear" end-placeholder="结束日期"
size="small" value-format="timestamp"
:clearable="false" :picker-options="pickerOptions"
:clearable="false"
@change="timeSelect"
> >
</el-date-picker> </el-date-picker>
</div> </div>
</el-form-item> <div v-show="queryParams.timeDim === '3'">
<el-form-item label="对象维度"> <el-date-picker
<el-select v-model="queryParams.objType" placeholder="请选择" style="width: 80px;" @change="selectObjs" size="small"> v-model="weekValue1"
<el-option type="week"
v-for="item in getDictDatas(this.DICT_TYPE.OBJECT_TYPE)" format="yyyy 第 WW 周"
:key="item.value" style='width:150px;'
:label="item.label" :picker-options="pickerOptionsWeek"
:value="item.value"> @change="startWeek"
</el-option> :clearable="false"
</el-select> placeholder="选择周">
</el-form-item> </el-date-picker>-
<el-form-item label="对象选择"> <el-date-picker
<el-select v-model="queryParams.objIds" placeholder="请选择" multiple collapse-tags style="width: 200px;" size="small"> v-model="weekValue2"
<el-option type="week"
v-for="item in objectList" format="yyyy 第 WW 周"
:key="item.id" :picker-options="pickerOptionsWeek"
:label="item.name" style='width:150px;'
:value="item.id"> @change="endWeek"
<span style="float: left">{{ item.name }}</span> :clearable="false"
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.code }}</span> placeholder="选择周">
</el-option> </el-date-picker>
</el-select> </div>
</el-form-item> <div v-show="queryParams.timeDim === '4'">
<el-form-item> <el-date-picker
<el-button type="primary" size="small" @click="search">查询</el-button> v-model="monthValue"
</el-form-item> type="monthrange"
</el-form> range-separator="至"
<span v-if="isFold" class="foldClass" @click='switchMode'> start-placeholder="开始日期"
{{ isExpand ? '收起' : '展开' }} end-placeholder="结束日期"
<svg-icon :icon-class="isExpand ? 'upward' : 'downward'" /> value-format="timestamp"
</span> :clearable="false"
</div> :picker-options="pickerOptions"
@change="timeSelect"
>
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '5'">
<el-date-picker
style='width:100px;'
v-model="yearValue1"
type="year"
:picker-options="pickerOptions"
value-format="timestamp"
placeholder="选择年"
@change="startYear"
:clearable="false"
>
</el-date-picker>-
<el-date-picker
style='width:100px;'
v-model="yearValue2"
type="year"
:picker-options="pickerOptions"
value-format="timestamp"
placeholder="选择年"
@change="endYear"
:clearable="false"
>
</el-date-picker>
</div>
</el-form-item>
<el-form-item label="对象维度">
<el-select v-model="queryParams.objType" placeholder="请选择" style="width: 80px;" @change="selectObjs">
<el-option
v-for="item in getDictDatas(this.DICT_TYPE.OBJECT_TYPE)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="对象选择">
<el-select v-model="queryParams.objIds" placeholder="请选择" multiple collapse-tags style="width: 200px;">
<el-option
v-for="item in objectList"
:key="item.id"
:label="item.name"
:value="item.id">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.code }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="search">查询</el-button>
</el-form-item>
</el-form>
</template> </template>
<script> <script>
import { getEnergyTypeListAll } from "@/api/base/energyType" import { getEnergyTypeListAll } from "@/api/base/energyType"
@ -164,15 +147,8 @@ import { getEquipmentAll } from "@/api/base/equipment"
import moment from 'moment' import moment from 'moment'
export default { export default {
name: 'searchArea', name: 'searchArea',
props: {
isFold: {//
type: Boolean,
default: false
}
},
data() { data() {
return { return {
isExpand: false, //
// //
queryParams: { queryParams: {
energyTypeId: null, energyTypeId: null,
@ -412,15 +388,6 @@ export default {
let newData = year+'-12-31 23:59:59' let newData = year+'-12-31 23:59:59'
let value = new Date(newData).getTime() let value = new Date(newData).getTime()
return value return value
},
switchMode() {//
this.isExpand = !this.isExpand
const element = this.$refs.searchBarRef
if (this.isExpand) {
element.classList.remove('divHeight')
} else {
element.classList.add('divHeight')
}
} }
} }
} }
@ -434,33 +401,3 @@ export default {
display: none; display: none;
} }
</style> </style>
<style lang="scss" scoped>
.demo-form-inline {
.blue-block {
display: inline-block;
width: 4px;
height: 16px;
background-color: #0B58FF;
border-radius: 1px;
margin-right: 8px;
margin-top: 10px;
}
}
</style>
<style scoped>
.searchBarBox .foldClass {
position: absolute;
top: 14px;
right: 0;
cursor: pointer;
font-size: 12px;
color:#0B58FF;
}
.searchBarBox .foldClass .iconfont {
font-size: 14px;
}
.divHeight {
height: 45px;
overflow: hidden;
}
</style>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container" id="contrastAnalysisBox"> <div class="app-container">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<search-area :isFold="isFold" @submit="getList"/> <search-area @submit="getList"/>
<el-tabs v-model="activeName" @tab-click="switchChart"> <el-tabs v-model="activeName" @tab-click="switchChart">
<el-tab-pane label="柱状图" name="bar"> <el-tab-pane label="柱状图" name="bar">
<bar-chart ref="analysisBarChart" :chartData="chartData" /> <bar-chart ref="analysisBarChart" :chartData="chartData" />
@ -23,19 +23,11 @@ export default {
components: { SearchArea, BarChart, LineChart }, components: { SearchArea, BarChart, LineChart },
data() { data() {
return { return {
isFold: false,
activeName: 'bar', activeName: 'bar',
chartData: [] chartData: []
} }
}, },
mounted() { mounted() {},
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(260)
this.isFold = this.searchBarWidth('contrastAnalysisBox', 1310)
// console.log(document.getElementById("contrastAnalysisBox").offsetWidth)
})
this.isFold = this.searchBarWidth('contrastAnalysisBox', 1310)
},
methods: { methods: {
getList(params) { getList(params) {
getCompare({ ...params }).then((res) => { getCompare({ ...params }).then((res) => {

View File

@ -1,17 +1,15 @@
<template> <template>
<el-form :inline="true" class="demo-form-inline"> <el-form :inline="true" class="demo-form-inline">
<span class="blue-block"></span>
<el-form-item label="对象选择"> <el-form-item label="对象选择">
<el-cascader <el-cascader
v-model="objArr" v-model="objArr"
:options="objList" :options="objList"
:props="{ checkStrictly: true, value: 'id', label: 'name' }" :props="{ checkStrictly: true, value: 'id', label: 'name' }"
popper-class="cascaderParent" popper-class="cascaderParent"
size="small"
clearable></el-cascader> clearable></el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="时间维度"> <el-form-item label="时间维度">
<el-select v-model="queryParams.type" placeholder="请选择" style="width: 80px;" size="small"> <el-select v-model="queryParams.type" placeholder="请选择" style="width: 80px;">
<el-option <el-option
v-for="item in timeType" v-for="item in timeType"
:key="item.id" :key="item.id"
@ -29,7 +27,6 @@
:picker-options="pickerOptions" :picker-options="pickerOptions"
@change="selectTime" @change="selectTime"
:clearable="false" :clearable="false"
size="small"
placeholder="选择月"> placeholder="选择月">
</el-date-picker> </el-date-picker>
</div> </div>
@ -41,7 +38,6 @@
:picker-options="pickerOptionsWeek" :picker-options="pickerOptionsWeek"
@change="selectTime" @change="selectTime"
:clearable="false" :clearable="false"
size="small"
placeholder="选择周"> placeholder="选择周">
</el-date-picker> </el-date-picker>
</div> </div>
@ -52,19 +48,18 @@
:picker-options="pickerOptions" :picker-options="pickerOptions"
@change="selectTime" @change="selectTime"
:clearable="false" :clearable="false"
size="small"
placeholder="选择日"> placeholder="选择日">
</el-date-picker> </el-date-picker>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" @click="search">查询</el-button> <el-button type="primary" @click="search">查询</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span class="separateStyle"></span> <span class="separateStyle"></span>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" @click="exportData" plain>导出</el-button> <el-button type="primary" @click="exportData" plain>导出</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
@ -184,16 +179,3 @@ export default {
vertical-align: middle; vertical-align: middle;
} }
</style> </style>
<style lang="scss" scoped>
.demo-form-inline {
.blue-block {
display: inline-block;
width: 4px;
height: 16px;
background-color: #0B58FF;
border-radius: 1px;
margin-right: 8px;
margin-top: 10px;
}
}
</style>

View File

@ -1,141 +1,122 @@
<template> <template>
<div class="searchBarBox divHeight" ref="searchBarRef" :style="{ paddingRight: isFold ? '55px' : '0px' }"> <el-form :inline="true" class="demo-form-inline">
<el-form :inline="true" class="demo-form-inline"> <el-form-item label="能源类型">
<span class="blue-block"></span> <el-select v-model="queryParams.energyTypeId" placeholder="请选择" style="width: 100px;">
<el-form-item label="能源类型"> <el-option
<el-select v-model="queryParams.energyTypeId" placeholder="请选择" style="width: 100px;" size="small"> v-for="item in energyTypeList"
<el-option :key="item.id"
v-for="item in energyTypeList" :label="item.name"
:key="item.id" :value="item.id">
:label="item.name" </el-option>
:value="item.id"> </el-select>
</el-option> </el-form-item>
</el-select> <el-form-item label="对象选择">
</el-form-item> <el-cascader
<el-form-item label="对象选择"> v-model="objArr"
<el-cascader :options="objList"
v-model="objArr" :props="{ checkStrictly: true, value: 'id', label: 'name' }"
:options="objList" popper-class="cascaderParent"
:props="{ checkStrictly: true, value: 'id', label: 'name' }" clearable></el-cascader>
popper-class="cascaderParent" </el-form-item>
size="small" <el-form-item label="时间维度">
clearable></el-cascader> <el-select v-model="queryParams.timeDim" placeholder="请选择" style="width: 80px;">
</el-form-item> <el-option
<el-form-item label="时间维度"> v-for="item in getDictDatas(this.DICT_TYPE.TIME_DIM)"
<el-select v-model="queryParams.timeDim" placeholder="请选择" style="width: 80px;" size="small"> :key="item.value"
<el-option :label="item.label"
v-for="item in getDictDatas(this.DICT_TYPE.TIME_DIM)" :value="item.value">
:key="item.value" </el-option>
:label="item.label" </el-select>
:value="item.value" </el-form-item>
size="small"> <el-form-item label="时间范围">
</el-option> <div v-show="queryParams.timeDim === '1'">
</el-select> <el-date-picker
</el-form-item> v-model="timeValue"
<el-form-item label="时间范围"> type="datetimerange"
<div v-show="queryParams.timeDim === '1'"> range-separator="至"
<el-date-picker start-placeholder="开始日期"
v-model="timeValue" end-placeholder="结束日期"
type="datetimerange" format="yyyy-MM-dd HH:mm"
range-separator="至" value-format="timestamp"
start-placeholder="开始日期" :picker-options="pickerOptions"
end-placeholder="结束日期" popper-class="noneMinute"
format="yyyy-MM-dd HH:mm" @change="timeSelect"
value-format="timestamp"
:picker-options="pickerOptions"
popper-class="noneMinute"
@change="timeSelect"
size="small"
style='width:350px;'
>
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '2'">
<el-date-picker
v-model="dateValue"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="timestamp"
:picker-options="pickerOptions"
@change="timeSelect"
size="small"
style='width:350px;'
>
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '3'">
<el-date-picker
v-model="weekValue1"
type="week"
format="yyyy 第 WW 周"
style='width:170px;'
:picker-options="pickerOptionsWeek"
@change="startWeek"
size="small"
placeholder="选择周">
</el-date-picker>-
<el-date-picker
v-model="weekValue2"
type="week"
format="yyyy 第 WW 周"
:picker-options="pickerOptionsWeek"
style='width:170px;'
@change="endWeek"
size="small"
placeholder="选择周">
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '4'">
<el-date-picker
v-model="monthValue"
type="monthrange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="timestamp"
:picker-options="pickerOptions"
size="small"
style='width:350px;'
@change="timeSelect"
>
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '5'">
<el-date-picker
style='width:170px;'
v-model="yearValue1"
type="year"
:picker-options="pickerOptions"
value-format="timestamp"
placeholder="选择年"
size="small"
@change="startYear"
> >
</el-date-picker>- </el-date-picker>
<el-date-picker </div>
style='width:170px;' <div v-show="queryParams.timeDim === '2'">
v-model="yearValue2" <el-date-picker
type="year" v-model="dateValue"
:picker-options="pickerOptions" type="daterange"
value-format="timestamp" range-separator="至"
placeholder="选择年" start-placeholder="开始日期"
size="small" end-placeholder="结束日期"
@change="endYear" value-format="timestamp"
:picker-options="pickerOptions"
@change="timeSelect"
> >
</el-date-picker> </el-date-picker>
</div> </div>
</el-form-item> <div v-show="queryParams.timeDim === '3'">
<el-form-item> <el-date-picker
<el-button type="primary" size="small" @click="search">查询</el-button> v-model="weekValue1"
</el-form-item> type="week"
</el-form> format="yyyy 第 WW 周"
<span v-if="isFold" class="foldClass" @click='switchMode'> style='width:150px;'
{{ isExpand ? '收起' : '展开' }} :picker-options="pickerOptionsWeek"
<svg-icon :icon-class="isExpand ? 'upward' : 'downward'" /> @change="startWeek"
</span> placeholder="选择周">
</div> </el-date-picker>-
<el-date-picker
v-model="weekValue2"
type="week"
format="yyyy 第 WW 周"
:picker-options="pickerOptionsWeek"
style='width:150px;'
@change="endWeek"
placeholder="选择周">
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '4'">
<el-date-picker
v-model="monthValue"
type="monthrange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="timestamp"
:picker-options="pickerOptions"
@change="timeSelect"
>
</el-date-picker>
</div>
<div v-show="queryParams.timeDim === '5'">
<el-date-picker
style='width:100px;'
v-model="yearValue1"
type="year"
:picker-options="pickerOptions"
value-format="timestamp"
placeholder="选择年"
@change="startYear"
>
</el-date-picker>-
<el-date-picker
style='width:100px;'
v-model="yearValue2"
type="year"
:picker-options="pickerOptions"
value-format="timestamp"
placeholder="选择年"
@change="endYear"
>
</el-date-picker>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="search">查询</el-button>
</el-form-item>
</el-form>
</template> </template>
<script> <script>
import { getEnergyTypeListAll } from "@/api/base/energyType" import { getEnergyTypeListAll } from "@/api/base/energyType"
@ -143,15 +124,8 @@ import { getTree } from '@/api/base/factory'
import moment from 'moment' import moment from 'moment'
export default { export default {
name: 'searchArea', name: 'searchArea',
props: {
isFold: {//
type: Boolean,
default: false
}
},
data() { data() {
return { return {
isExpand: false, //
// //
queryParams: { queryParams: {
energyTypeId: null, energyTypeId: null,
@ -188,7 +162,6 @@ export default {
this.getTypeList() this.getTypeList()
this.getObjTree() this.getObjTree()
this.queryParams.timeDim = this.getDictDatas(this.DICT_TYPE.TIME_DIM)[0].value // this.queryParams.timeDim = this.getDictDatas(this.DICT_TYPE.TIME_DIM)[0].value //
this.timeValue = [moment().startOf('day'), moment().endOf('day')-59*61*1000]
}, },
methods: { methods: {
getTypeList() { getTypeList() {
@ -293,7 +266,7 @@ export default {
this.$modal.msgError('请选择能源类型') this.$modal.msgError('请选择能源类型')
return false return false
} }
if (this.objArr.length === 0) { if (!this.objArr.length === 0) {
this.$modal.msgError('请选择对象') this.$modal.msgError('请选择对象')
return false return false
} else { } else {
@ -372,15 +345,6 @@ export default {
let newData = year+'-12-31 23:59:59' let newData = year+'-12-31 23:59:59'
let value = new Date(newData).getTime() let value = new Date(newData).getTime()
return value return value
},
switchMode() {//
this.isExpand = !this.isExpand
const element = this.$refs.searchBarRef
if (this.isExpand) {
element.classList.remove('divHeight')
} else {
element.classList.add('divHeight')
}
} }
} }
} }
@ -398,33 +362,3 @@ export default {
display: none; display: none;
} }
</style> </style>
<style lang="scss" scoped>
.demo-form-inline {
.blue-block {
display: inline-block;
width: 4px;
height: 16px;
background-color: #0B58FF;
border-radius: 1px;
margin-right: 8px;
margin-top: 10px;
}
}
</style>
<style scoped>
.searchBarBox .foldClass {
position: absolute;
top: 14px;
right: 0;
cursor: pointer;
font-size: 12px;
color:#0B58FF;
}
.searchBarBox .foldClass .iconfont {
font-size: 14px;
}
.divHeight {
height: 45px;
overflow: hidden;
}
</style>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container" id="trendAnalysisBox"> <div class="app-container">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<search-area :isFold="isFold" @submit="getList"/> <search-area @submit="getList"/>
<el-tabs v-model="activeName" @tab-click="switchChart"> <el-tabs v-model="activeName" @tab-click="switchChart">
<el-tab-pane label="柱状图" name="bar"> <el-tab-pane label="柱状图" name="bar">
<bar-chart ref="analysisBarChart" :chartData="chartData" /> <bar-chart ref="analysisBarChart" :chartData="chartData" />
@ -23,18 +23,11 @@ export default {
components: { SearchArea, BarChart, LineChart }, components: { SearchArea, BarChart, LineChart },
data() { data() {
return { return {
isFold: false,
activeName: 'bar', activeName: 'bar',
chartData: [] chartData: []
} }
}, },
mounted() { mounted() {},
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(260)
this.isFold = this.searchBarWidth('trendAnalysisBox', 1146)
})
this.isFold = this.searchBarWidth('trendAnalysisBox', 1146)
},
methods: { methods: {
getList(params) { getList(params) {
getEnergyTrend({ ...params }).then((res) => { getEnergyTrend({ ...params }).then((res) => {
@ -44,6 +37,16 @@ export default {
this.chartData = [] this.chartData = []
} }
}) })
// getEnergyTrend({
// energyTypeId: "1681183397517406210",
// objId: "1679031282510532610",
// timeDim: "2",
// startTime: "1690732800000",
// endTime: "1690992000000"
// }).then((res) => {
// console.log(res)
// this.chartData = res.data
// })
}, },
switchChart() { switchChart() {
if (this.activeName === 'bar') { if (this.activeName === 'bar') {

View File

@ -1,17 +1,15 @@
<template> <template>
<el-form :inline="true" class="demo-form-inline"> <el-form :inline="true" class="demo-form-inline">
<span class="blue-block"></span>
<el-form-item label="对象选择"> <el-form-item label="对象选择">
<el-cascader <el-cascader
v-model="objArr" v-model="objArr"
:options="objList" :options="objList"
:props="{ checkStrictly: true, value: 'id', label: 'name' }" :props="{ checkStrictly: true, value: 'id', label: 'name' }"
popper-class="cascaderParent" popper-class="cascaderParent"
size="small"
clearable></el-cascader> clearable></el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="时间维度"> <el-form-item label="时间维度">
<el-select v-model="queryParams.type" placeholder="请选择" style="width: 80px;" size="small"> <el-select v-model="queryParams.type" placeholder="请选择" style="width: 80px;">
<el-option <el-option
v-for="item in timeType" v-for="item in timeType"
:key="item.id" :key="item.id"
@ -29,7 +27,6 @@
:picker-options="pickerOptions" :picker-options="pickerOptions"
@change="selectTime" @change="selectTime"
:clearable="false" :clearable="false"
size="small"
placeholder="选择年"> placeholder="选择年">
</el-date-picker> </el-date-picker>
</div> </div>
@ -40,19 +37,18 @@
:picker-options="pickerOptions" :picker-options="pickerOptions"
@change="selectTime" @change="selectTime"
:clearable="false" :clearable="false"
size="small"
placeholder="选择月"> placeholder="选择月">
</el-date-picker> </el-date-picker>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" @click="search">查询</el-button> <el-button type="primary" @click="search">查询</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span class="separateStyle"></span> <span class="separateStyle"></span>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" @click="exportData" plain>导出</el-button> <el-button type="primary" @click="exportData" plain>导出</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
@ -158,16 +154,3 @@ export default {
vertical-align: middle; vertical-align: middle;
} }
</style> </style>
<style lang="scss" scoped>
.demo-form-inline {
.blue-block {
display: inline-block;
width: 4px;
height: 16px;
background-color: #0B58FF;
border-radius: 1px;
margin-right: 8px;
margin-top: 10px;
}
}
</style>

View File

@ -92,7 +92,7 @@ export default {
type: 'input', type: 'input',
label: '标识名', label: '标识名',
placeholder: '标识名', placeholder: '标识名',
param: 'cnName' param: 'name'
}, },
{ {
type: 'button', type: 'button',
@ -149,7 +149,7 @@ export default {
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
pageSize: 20, pageSize: 20,
cnName: null name: null
}, },
paramVisible: false, paramVisible: false,
energyTypeList: [], energyTypeList: [],
@ -173,7 +173,7 @@ export default {
switch (val.btnName) { switch (val.btnName) {
case 'search': case 'search':
this.queryParams.pageNo = 1; this.queryParams.pageNo = 1;
this.queryParams.cnName = val.cnName this.queryParams.name = val.name
this.getList() this.getList()
break break
default: default:

View File

@ -37,12 +37,12 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12" v-show="form.pricingMethod === 2"> <el-col :span="12" v-show="form.pricingMethod === 2">
<el-form-item label="单价(元)" prop="pricingMethod"> <el-form-item label="单价(元)" prop="singlePrice">
<el-input-number v-model="form.singlePrice" :precision="2" :min="0" :max="999999999" style="width: 100%;"></el-input-number> <el-input v-model="form.singlePrice"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-show="form.pricingMethod === 0"> <el-col :span="24" v-show="form.pricingMethod === 0">
<el-form-item label="时间段" prop="pricingMethod"> <el-form-item label="时间段">
<base-table <base-table
:key='timeKye' :key='timeKye'
:table-props="tableProps1" :table-props="tableProps1"
@ -63,7 +63,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-show="form.pricingMethod === 1"> <el-col :span="24" v-show="form.pricingMethod === 1">
<el-form-item label="使用量" prop="pricingMethod"> <el-form-item label="使用量">
<base-table <base-table
:key='usedKye' :key='usedKye'
:table-props="tableProps2" :table-props="tableProps2"
@ -140,13 +140,12 @@ export default {
name: '', name: '',
code: '', code: '',
nuit: '', nuit: '',
pricingMethod: 2, pricingMethod: 1,
leaderName: '' leaderName: ''
}, },
isEdit: false, // isEdit: false, //
rules: { rules: {
name: [{ required: true, message: '能源类型不能为空', trigger: 'blur' }], name: [{ required: true, message: '能源类型不能为空', trigger: 'blur' }]
pricingMethod: [{ required: true, message: '计价方式不能为空', trigger: 'change' }]
}, },
timeKye: 0, timeKye: 0,
usedKye: 0, usedKye: 0,
@ -276,7 +275,7 @@ export default {
break; break;
default:// default://
if (!this.form.singlePrice) { if (!this.form.singlePrice) {
this.$modal.msgError('单价有误请检查,请检查') this.$modal.msgError('单价有误请检查1,请检查')
return false return false
} }
} }
@ -322,7 +321,6 @@ export default {
}, },
formClear() { formClear() {
this.$refs.form.resetFields() this.$refs.form.resetFields()
this.form.singlePrice = 0
this.isEdit = false this.isEdit = false
this.timeKye = 0 this.timeKye = 0
this.usedKye = 0 this.usedKye = 0

View File

@ -47,7 +47,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="消耗量阈值" prop="limitValue"> <el-form-item label="消耗量阈值" prop="limitValue">
<el-input-number v-model="form.limitValue" :min="0" :max="10000000000000000" style="width: 100%;"></el-input-number> <el-input v-model="form.limitValue"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>

View File

@ -1,11 +1,10 @@
<template> <template>
<div class="app-container" id='energyReportBox'> <div class="app-container">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<search-bar <search-bar
:formConfigs="formConfig" :formConfigs="formConfig"
ref="searchBarForm" ref="searchBarForm"
:isFold="isFold"
@headBtnClick="buttonClick" @headBtnClick="buttonClick"
/> />
<!-- 列表 --> <!-- 列表 -->
@ -73,7 +72,6 @@ export default {
name: "EnergyLimit", name: "EnergyLimit",
data() { data() {
return { return {
isFold: false,
formConfig: [ formConfig: [
{ {
type: 'select', type: 'select',
@ -140,14 +138,10 @@ export default {
created() { created() {
window.addEventListener('resize', () => { window.addEventListener('resize', () => {
this.tableH = this.tableHeight(260) this.tableH = this.tableHeight(260)
this.isFold = this.searchBarWidth('energyReportBox', 1198)
}) })
this.getList() this.getList()
this.getTypeList() this.getTypeList()
}, },
mounted() {
this.isFold = this.searchBarWidth('energyReportBox', 1198)
},
methods: { methods: {
getTypeList() { getTypeList() {
getEnergyTypeListAll().then((res) => { getEnergyTypeListAll().then((res) => {

View File

@ -1,11 +1,10 @@
<template> <template>
<div class="app-container" id='energyReportSearchBox'> <div class="app-container">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<search-bar <search-bar
:formConfigs="formConfig" :formConfigs="formConfig"
ref="searchBarForm" ref="searchBarForm"
:isFold="isFold"
@headBtnClick="buttonClick" @headBtnClick="buttonClick"
/> />
<!-- 列表 --> <!-- 列表 -->
@ -54,7 +53,6 @@ export default {
name: "EnergyReportSearch", name: "EnergyReportSearch",
data() { data() {
return { return {
isFold: false,
formConfig: [ formConfig: [
{ {
type: 'input', type: 'input',
@ -119,21 +117,13 @@ export default {
created() { created() {
window.addEventListener('resize', () => { window.addEventListener('resize', () => {
this.tableH = this.tableHeight(260) this.tableH = this.tableHeight(260)
this.isFold = this.searchBarWidth('energyReportSearchBox', 1180)
}) })
if (this.$route.params.startTime && this.$route.params.endTime) { this.formConfig[2].defaultSelect = [Date.now() - 7*24*3600000, Date.now()]
this.formConfig[2].defaultSelect = [this.$route.params.startTime, this.$route.params.endTime]
} else {
this.formConfig[2].defaultSelect = [Date.now() - 7*24*3600000, Date.now()]
}
this.queryParams.startTime = this.formConfig[2].defaultSelect[0] this.queryParams.startTime = this.formConfig[2].defaultSelect[0]
this.queryParams.endTime = this.formConfig[2].defaultSelect[1] this.queryParams.endTime = this.formConfig[2].defaultSelect[1]
this.getList() this.getList()
this.getTypeList() this.getTypeList()
}, },
mounted() {
this.isFold = this.searchBarWidth('energyReportSearchBox', 1180)
},
methods: { methods: {
getTypeList() { getTypeList() {
getEnergyTypeListAll().then((res) => { getEnergyTypeListAll().then((res) => {

View File

@ -75,7 +75,7 @@ export default {
{ {
type: 'input', type: 'input',
label: '参数名称', label: '参数名称',
placeholder: '参数名称', placeholder: '方案名称',
param: 'paramName' param: 'paramName'
}, },
{ {

View File

@ -46,7 +46,7 @@
format='HH:mm' format='HH:mm'
value-format='HH:mm' value-format='HH:mm'
style="width: 100%;" style="width: 100%;"
@change="timeFun('start')" @change="timeFun"
> >
</el-time-picker> </el-time-picker>
</el-form-item> </el-form-item>
@ -58,7 +58,7 @@
format='HH:mm' format='HH:mm'
value-format='HH:mm' value-format='HH:mm'
style="width: 100%;" style="width: 100%;"
@change="timeFun('end')" @change="timeFun"
> >
</el-time-picker> </el-time-picker>
</el-form-item> </el-form-item>
@ -126,19 +126,12 @@ export default {
}) })
} }
}, },
timeFun(val) { timeFun() {
if (this.form.startTime && this.form.endTime) { if (this.form.startTime && this.form.endTime) {
if (this.form.startTime > this.form.endTime) { if (this.form.startTime > this.form.endTime) {
this.form.daySpan = 1 this.form.daySpan = 1
} else if (this.form.startTime < this.form.endTime) {
this.form.daySpan = 0
} else { } else {
if (val === 'start') { this.form.daySpan = 0
this.form.startTime = ''
} else {
this.form.endTime = ''
}
this.$modal.msgWarning('班次开始时间和结束时间不能相同')
} }
} }
}, },

View File

@ -116,17 +116,7 @@ export default {
: undefined, : undefined,
{ {
type: 'cancel', type: 'cancel',
btnName: '作废', btnName: '作废'
showParam: {
type: '&',
data: [
{
type: 'unequal',
name: 'status',
value: '不可用'
}
]
}
}, },
this.$auth.hasPermi('base:group-classes:delete') this.$auth.hasPermi('base:group-classes:delete')
? { ? {
@ -235,9 +225,8 @@ export default {
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
console.log(row) if (row.status) {
let _this = this let _this = this
if (row.status === '可用') {//
_this.$modal.confirm('删除的班次"' + row.name + '"可能会影响交接班计划,请点取消再次确认!').then(function() { _this.$modal.confirm('删除的班次"' + row.name + '"可能会影响交接班计划,请点取消再次确认!').then(function() {
return _this.$modal.confirm('是否确认删除班次名称为"' + row.name + '"的数据项?').then(function() { return _this.$modal.confirm('是否确认删除班次名称为"' + row.name + '"的数据项?').then(function() {
return deleteGroupClasses(row.id); return deleteGroupClasses(row.id);

View File

@ -7,7 +7,7 @@
<el-input v-model="form.code" disabled></el-input> <el-input v-model="form.code" disabled></el-input>
</el-form-item> </el-form-item>
<el-form-item label="班组人数" prop="num"> <el-form-item label="班组人数" prop="num">
<el-input-number v-model="form.num" :min="1" :max="99999999" style="width: 100%;"></el-input-number> <el-input v-model="form.num"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="班组组长" prop="leaderName"> <el-form-item label="班组组长" prop="leaderName">
<el-input v-model="form.leaderName"></el-input> <el-input v-model="form.leaderName"></el-input>

View File

@ -1,466 +1,67 @@
<template> <template>
<div class="groupTeamScheduling"> <div class="app-container">
<div class="operationArea"> <div>
<el-form :inline="true" class="demo-form-inline"> <el-form :inline="true" class="demo-form-inline">
<span class="blue-block"></span>
<el-form-item label="月份选择"> <el-form-item label="月份选择">
<el-date-picker <el-date-picker
v-model="startDay" v-model="queryParams.startDay"
type="month" type="month"
placeholder="选择月" placeholder="选择月">
size="small"
:disabled="showSetting"
@change="selectMonth"
:clearable="false"
style="width: 120px">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span class="separateStyle"></span> <el-button type="primary">自动排班</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" :disabled="showSetting || settingBtnDis" @click="settingMsg">设置</el-button> <el-button type="primary">编辑</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" v-show="showSetting && autoScheduling" @click="schedulingBtn">自动排班</el-button> <el-button type="primary" plain @click="toUpperLower">班组上下片查询</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span class="separateStyle" v-show="showSetting"></span> <el-button type="primary" plain>班组能源查询</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" v-show="showSetting" @click="confirmSetting">确认</el-button> <el-button type="primary" plain>班组检测查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" size="small" plain v-show="showSetting" @click="cancelSetting">取消</el-button>
</el-form-item>
<el-form-item label="请先选择查询的班组" class="rightItem">
<el-button type="primary" size="small" :disabled="jumpDisabled" @click="toOtherPage('1')">班组上下片查询</el-button>
<el-button type="primary" size="small" :disabled="jumpDisabled" @click="toOtherPage('2')">班组能源查询</el-button>
<el-button type="primary" size="small" :disabled="jumpDisabled" @click="toOtherPage('3')">班组检测查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<!-- 日历区域 --> <!-- 班组上下片查询 -->
<div class="calenderArea"> <group-upper-lower v-if="upperLowerVisible" ref="upperLowerParam"></group-upper-lower>
<div style="font-size: 24px;font-weight: 500">{{ this.month }} {{ this.year }}</div>
<el-calendar v-model="startDay">
<!-- 这里使用的是 2.5 slot 语法对于新项目请使用 2.6 slot 语法-->
<template
slot="dateCell"
slot-scope="{date, data}">
<div v-if="data.type === 'current-month'">
<!-- 日期 -->
<div class="dateStyle">
{{ Number(data.day.split('-')[2]) }}
</div>
<!-- 班次班组 -->
<!-- class有两个样式一个是类似class1还有个是选中红框显示 -->
<el-row :gutter="2" :class="'class' + (index+1) + (chooseTip === (item.startDay+item.classesId) ? ' team-active' : '')" v-for="(item, index) in list[Number(data.day.split('-')[2])]" :key='index'>
<el-col :span="12">
<div class="selectDiv">
<!-- 选择班组图标 -->
<div class="toggle-icon" v-show="showSetting && (new Date(data.day).valueOf() < new Date().valueOf() ? false: true)">
<svg-icon icon-class="toggle"/>
</div>
<!-- 不能选择班组 -->
<div class="toggle-icon-hide" v-show="!(showSetting && (new Date(data.day).valueOf() < new Date().valueOf() ? false: true))"></div>
<el-select v-model="item.teamId" size='small' :disabled="!showSetting || (new Date(data.day).valueOf() > new Date().valueOf() ? false: true)">
<el-option
v-for="i in teamList"
:key="i.id"
:label="i.name"
:value="i.id">
</el-option>
</el-select>
</div>
</el-col>
<el-col :span="12">
<el-button class="labelClass" @click="chooseTeam(item)">{{ item.classesName }}</el-button>
</el-col>
</el-row>
</div>
</template>
</el-calendar>
</div>
</div> </div>
</template> </template>
<script> <script>
import { getPreset, createOrUpdateList, autoSet } from "@/api/base/groupTeamScheduling"; import { createGroupTeamScheduling } from "@/api/base/groupTeamScheduling";
import { listEnabled } from "@/api/base/groupTeam"; import GroupUpperLower from "./components/groupUpperLower.vue"
import moment from 'moment';
export default { export default {
name: "GroupTeamScheduling", name: "GroupTeamScheduling",
components: { GroupUpperLower },
data() { data() {
return { return {
startDay: '',// monthList: [
year: '',// 2023 {id: ''}
month: '',// ],
monthList: ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"], //
list: {}, queryParams: {
teamList: [],// pageNo: 1,
showSetting: false,// pageSize: 10
settingBtnDis: false, },
jumpDisabled: true,// upperLowerVisible: false
chooseObj: {}, //
chooseTip: '',//
autoScheduling: false //
}; };
}, },
created() { created() {
this.startDay = new Date()
//
this.settingBtn()
this.getTeamList()
this.toggleMonth()
this.getList() this.getList()
}, },
methods: { methods: {
// getList() {},
selectMonth() { toUpperLower() {
if (this.startDay) { this.upperLowerVisible = true
this.settingBtn() // ,getlist this.$nextTick(() => {
this.toggleMonth() this.$refs.upperLowerParam.init()
this.getList()
this.clearChoose()
if ( moment(this.startDay).valueOf() > moment().endOf('month').valueOf()) {
this.autoScheduling = true
} else {
this.autoScheduling = false
}
}
},
//
getTeamList() {
listEnabled().then(res => {
this.teamList = res.data || []
}) })
},
//
getList() {
let year = moment(this.startDay).format('YYYY')
let month = moment(this.startDay).format('M')
getPreset({
year: year,
month: month
}).then(res => {
let obj = res.data || {}
if (obj) {
for (let item in obj) {
for (let i = 0; i < obj[item].length; i++) {
if (!obj[item][i].teamId) {
obj[item][i].teamId = ''
}
}
}
}
this.list = obj
}).catch(() => {
this.list = {}
this.settingBtnDis = true //
})
},
//
settingMsg() {
this.showSetting = !this.showSetting
this.clearChoose()
},
//
cancelSetting() {
this.showSetting = !this.showSetting
this.getList() //
},
//
confirmSetting() {
let num = 0
//
if (moment(this.startDay).format('YYYY-MM') === moment().format('YYYY-MM')) {
num = Number(moment().format('DD'))
} else {
num = 0
}
//
//
let tempArr = Object.values(this.list)
let arr = []
for (let i = num; i < tempArr.length; i++) {
for (let j = 0; j < tempArr[i].length; j++) {
arr.push(tempArr[i][j])
}
}
createOrUpdateList(arr).then(res => {
if (res.code === 0) {
this.showSetting = !this.showSetting
this.$modal.msgSuccess("操作成功")
this.getList() //
}
})
},
//
chooseTeam(value) {
if (this.showSetting) {
this.$modal.msgWarning("当前处于设置模式")
return false
}
this.chooseObj = value
this.chooseTip = value.startDay + value.classesId //
this.jumpDisabled = false //
},
//
schedulingBtn() {
let tempData = this.list
// 1
if (this.list[1][0].teamId) {
let tempArr = Object.values(this.list)
let arr = []
let n = 0
for (let i = 0; i < tempArr.length; i++) {
if (n > 0) {
break;
}
for (let j = 0; j < tempArr[i].length; j++) {
if (tempArr[i][j].teamId) {
arr.push(tempArr[i][j].teamId)
} else {
n++
}
}
}
let tempNum = 0
for (let k = 0; k < tempArr.length; k++) {
for (let v = 0; v < tempArr[k].length; v++) {
let t = tempNum % arr.length
if (arr.length === 1) {
tempData[k+1][v].teamId = arr[0]
} else {
tempData[k+1][v].teamId = arr[t]
}
tempNum++
}
}
this.list = []
this.list = tempData
} else {
// 1,
autoSet().then(res => {
this.list = res.data || {}
})
}
},
//
settingBtn() {
let nowMonth = moment().startOf('month').valueOf()
let startMonth = moment(this.startDay).valueOf()
let nowDate = moment(new Date()).date()
let sumDate = moment().daysInMonth()
if (nowMonth > startMonth) { //
this.settingBtnDis = true
} else {
if (nowDate < sumDate) {
this.settingBtnDis = false
} else {
this.settingBtnDis = true
}
}
},
//
clearChoose() {
this.chooseObj = {}
this.chooseTip = ""
this.jumpDisabled = true
},
//
toggleMonth() {
this.year = moment(this.startDay).format("YYYY")
let month = Number(moment(this.startDay).format("MM"))
this.month = this.monthList[month - 1]
},
// 3
toOtherPage(val) {
switch (val) {
case '1':
this.$router.push({
// path: '/core/monitoring/production-line-data',
name: 'ProductionLineData',
params: { startTime: this.chooseObj.startTime, endTime: this.chooseObj.endTime }
})
break;
case '2': //
this.$router.push({
name: 'EnergyReportSearch',
params: { startTime: this.chooseObj.startTime, endTime: this.chooseObj.endTime }
})
break;
default:
this.$router.push({
// path: '/quality/monitoring/quality-statistics',
name: 'QualityStatistics',
params: { startTime: this.chooseObj.startTime, endTime: this.chooseObj.endTime }
})
}
}
} }
} }
};
</script> </script>
<style lang='scss'>
.groupTeamScheduling {
background-color: #F2F4F9;
.operationArea {
padding: 14px 10px 0 16px;
margin-bottom: 8px;
background-color: #fff;
border-radius: 8px;
.blue-block {
display: inline-block;
width: 4px;
height: 16px;
background-color: #0B58FF;
border-radius: 1px;
margin-right: 8px;
margin-top: 10px;
}
.separateStyle {
display: inline-block;
width: 1px;
height: 24px;
background: #E8E8E8;
vertical-align: middle;
}
.el-form-item {
margin-bottom: 10px;
}
.rightItem {
float: right;
}
}
//
.calenderArea {
padding: 14px 10px 0 20px;
background-color: #fff;
border-radius: 8px;
.el-calendar__body {
padding: 10px 16px 16px 0;
}
.el-calendar__header {
display: none;
}
.el-calendar-table > thead {
height: 48px;
font-size: 20px;
font-weight: 500;
color: #000000;
background-color: rgba(242, 244, 249, 1);
}
.el-calendar-table__row {
height: 133px;
.prev, .next {
pointer-events: none;
}
.el-calendar-day {
padding: 0 10px;
height: 100%;
.dateStyle {
font-size: 20px;
font-weight: 500;
color: #000000;
text-align: right;
height: 32px;
line-height: 28px;
padding-right: 10px;
}
}
}
.team-active {//
border:2px solid red
}
.class1, .class2, .class3 {
padding: 0;
font-weight: 600;
margin-bottom: 2px;
.selectDiv {
position: relative;
.toggle-icon {
position: absolute;
width: 26px;
height: 26px;
line-height: 26px;
font-size: 14px;
z-index: 1;
text-align: center;
}
.toggle-icon-hide {
position: absolute;
width: 2px;
height: 28px;
z-index: 1;
}
.el-input__suffix {
display: none;
}
.el-input--suffix .el-input__inner {
padding: 0 4px 0 28px;
}
.el-input--small .el-input__inner {
height: 28px;
border: none;
font-weight: 600;
}
}
.labelClass {
width: 100%;
height: 28px;
border: none;
padding: 0;
font-weight: 600;
text-align: center;
}
}
.class1 {
.selectDiv {
.toggle-icon, .toggle-icon-hide {
background-color: #FACE00;
}
.el-input--small .el-input__inner {
color: #E7A200;
background-color: #FFEFC0;
}
}
.labelClass {
color: #E7A200;
background-color: #FFEFC0;
}
}
.class2 {
.selectDiv {
.toggle-icon, .toggle-icon-hide {
background-color: #3984FF;
}
.el-input--small .el-input__inner {
color: #2D7BFF;
background-color: #BEEAFF;
}
}
.labelClass {
color: #2D7BFF;
background-color: #BEEAFF;
}
}
.class3 {
.selectDiv {
.toggle-icon, .toggle-icon-hide {
background-color: #37D97F;
}
.el-input--small .el-input__inner {
color: #129F51;
background-color: #E0FFEE;
}
}
.labelClass {
color: #129F51;
background-color: #E0FFEE;
}
}
}
}
</style>

View File

@ -67,7 +67,6 @@ export default {
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始日期', startPlaceholder: '开始日期',
endPlaceholder: '结束日期', endPlaceholder: '结束日期',
defaultSelect: [],
defaultTime: ['00:00:00', '23:59:59'], defaultTime: ['00:00:00', '23:59:59'],
param: 'timerange', param: 'timerange',
}, },
@ -213,14 +212,6 @@ export default {
}, },
}, },
mounted() { mounted() {
if (this.$route.params.startTime && this.$route.params.endTime) {
this.searchBarFormConfig[0].defaultSelect = [this.$route.params.startTime, this.$route.params.endTime]
this.queryParams.param = {};
this.$set(this.queryParams.param, 'startTime', this.$route.params.startTime);
this.$set(this.queryParams.param, 'endTime', this.$route.params.endTime);
} else {
this.searchBarFormConfig[0].defaultSelect = []
}
this.getList(); this.getList();
}, },
methods: { methods: {

18220
yarn.lock

File diff suppressed because it is too large Load Diff