Compare commits

..

No commits in common. "e3133cef1fd1087976b16188c6c55e541cbfbda3" and "7b4cd85ba0f55f9ce872105d76f53574712a17c8" have entirely different histories.

7 changed files with 156 additions and 115 deletions

View File

@ -1,10 +1,10 @@
import axios from 'axios' import axios from 'axios'
import { Message, MessageBox, Notification, Loading } from 'element-ui' import {Message, MessageBox, Notification, Loading} from 'element-ui'
import store from '@/store' import store from '@/store'
import { getAccessToken, getRefreshToken, getTenantId, setToken } from '@/utils/auth' import {getAccessToken, getRefreshToken, getTenantId, setToken} from '@/utils/auth'
import errorCode from '@/utils/errorCode' import errorCode from '@/utils/errorCode'
import { getPath, getTenantEnable } from "@/utils/ruoyi"; import {getPath, getTenantEnable} from "@/utils/ruoyi";
import { refreshToken } from "@/api/login"; import {refreshToken} from "@/api/login";
// 需要忽略的提示。忽略后,自动 Promise.reject('error') // 需要忽略的提示。忽略后,自动 Promise.reject('error')
const ignoreMsgs = [ const ignoreMsgs = [
@ -42,7 +42,7 @@ const service = axios.create({
let loadingInstance = null let loadingInstance = null
function startLoading() { function startLoading() {
loadingInstance = Loading.service({ loadingInstance = Loading.service({
fullscreen: true, fullscreen: false,
text: '拼命加载中...', text: '拼命加载中...',
background: 'rgba(0, 0, 0, 0.1)' background: 'rgba(0, 0, 0, 0.1)'
}) })
@ -86,7 +86,7 @@ service.interceptors.request.use(config => {
for (const propName of Object.keys(config.params)) { for (const propName of Object.keys(config.params)) {
const value = config.params[propName]; const value = config.params[propName];
const part = encodeURIComponent(propName) + '=' const part = encodeURIComponent(propName) + '='
if (value !== null && typeof (value) !== "undefined") { if (value !== null && typeof(value) !== "undefined") {
if (typeof value === 'object') { if (typeof value === 'object') {
for (const key of Object.keys(value)) { for (const key of Object.keys(value)) {
let params = propName + '[' + key + ']'; let params = propName + '[' + key + ']';
@ -191,7 +191,7 @@ service.interceptors.response.use(async res => {
}, error => { }, error => {
tryHideFullScreenLoading() tryHideFullScreenLoading()
console.log('err' + error) console.log('err' + error)
let { message } = error; let {message} = error;
if (message === "Network Error") { if (message === "Network Error") {
message = "后端接口连接异常"; message = "后端接口连接异常";
} else if (message.includes("timeout")) { } else if (message.includes("timeout")) {
@ -205,7 +205,7 @@ service.interceptors.response.use(async res => {
duration: 5 * 1000 duration: 5 * 1000
}) })
return Promise.reject(error) return Promise.reject(error)
} }
) )
export function getBaseHeader() { export function getBaseHeader() {

View File

@ -2,7 +2,11 @@
<el-form ref="form" :rules="rules" label-width="100px" :model="form"> <el-form ref="form" :rules="rules" label-width="100px" :model="form">
<el-form-item label="员工" prop="workerId" v-if='!isEdit'> <el-form-item label="员工" prop="workerId" v-if='!isEdit'>
<el-select v-model="form.workerId" placeholder="请选择" filterable style="width: 100%;" @change="selectWorker()"> <el-select v-model="form.workerId" placeholder="请选择" filterable style="width: 100%;" @change="selectWorker()">
<el-option v-for="item in workerList" :key="item.id" :label="item.name" :value="item.id"> <el-option
v-for="item in workerList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -44,12 +48,12 @@ export default {
this.form.teamId = param.teamId this.form.teamId = param.teamId
this.form.majorName = param.majorName this.form.majorName = param.majorName
this.workName = param.workName this.workName = param.workName
otherWorkerList({ teamId: this.form.teamId }).then(res => { otherWorkerList({teamId:this.form.teamId}).then(res => {
this.workerList = res.data || [] this.workerList = res.data || []
if (param.id) { if (param.id) {
this.isEdit = true this.isEdit = true
this.form.id = param.id this.form.id = param.id
groupTeamDet({ id: this.form.id }).then((res) => { groupTeamDet({id: this.form.id}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
this.form.workerId = res.data.workerId this.form.workerId = res.data.workerId
this.form.remark = res.data.remark this.form.remark = res.data.remark
@ -68,7 +72,7 @@ export default {
this.form.majorName = item.majorName this.form.majorName = item.majorName
} }
}) })
} else { }else{
this.form.majorName = '' this.form.majorName = ''
} }
}, },

View File

@ -9,15 +9,18 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<p class="boldTitle">车间名称</p> <p class="boldTitle">车间名称</p>
<p class="lightText">{{ (queryParams.roomNameDict || queryParams.roomNameDict === 0) ? <p class="lightText">{{ (queryParams.roomNameDict || queryParams.roomNameDict === 0) ? getDictDataLabel('workshop',queryParams.roomNameDict) : '-' }}</p>
getDictDataLabel('workshop', queryParams.roomNameDict) : '-' }}</p>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<p class="boldTitle">班组名称</p> <p class="boldTitle">班组名称</p>
<p class="lightText">{{ queryParams.teamName ? queryParams.teamName : '-' }}</p> <p class="lightText">{{ queryParams.teamName ? queryParams.teamName : '-' }}</p>
</el-col> </el-col>
</el-row> </el-row>
<base-table :table-props="tableProps" :table-data="tableData" :max-height="tableH" :page="1" :limit="1000000" /> <base-table
:table-props="tableProps"
:table-data="tableData"
:max-height="tableH"
/>
</div> </div>
</el-drawer> </el-drawer>
</div> </div>
@ -44,7 +47,7 @@ const tableProps = [
}, },
{ {
prop: 'workTime', prop: 'workTime',
label: '工作时长(h)' label: '工作时长'
} }
] ]
export default { export default {
@ -80,24 +83,21 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.box { .box {
padding: 0 32px; padding: 0 32px;
.topBox { .topBox {
padding-bottom: 30px; padding-bottom: 30px;
margin-bottom: 30px; margin-bottom: 30px;
border-bottom: 1px solid #E9E9E9; border-bottom: 1px solid #E9E9E9;
.boldTitle { .boldTitle {
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: 600;
color: rgba(0, 0, 0, 0.85); color: rgba(0,0,0,0.85);
margin: 0; margin: 0;
margin-bottom: 10px; margin-bottom: 10px;
} }
.lightText { .lightText {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
color: rgba(102, 102, 102, 0.75); color: rgba(102,102,102,0.75);
margin: 0; margin: 0;
} }
} }

View File

@ -2,20 +2,28 @@
<el-form :inline="true" class="demo-form-inline"> <el-form :inline="true" class="demo-form-inline">
<span class="blue-block"></span> <span class="blue-block"></span>
<el-form-item label="班次信息"> <el-form-item label="班次信息">
<el-select v-model="queryParams.classesId" placeholder="班次信息" style="width: 200px;" size="small" clearable <el-select v-model="queryParams.classesId" placeholder="班次信息" style="width: 200px;" size="small" clearable>
filterable> <el-option
<el-option v-for="item in classesArr" :key="item.id" v-for="item in classesArr"
:label="(item.roomName ? item.roomName : '') + '-' + item.name" :value="item.id"> :key="item.id"
<span>{{ item.roomName }}-{{ item.name }}</span> :label="(item.roomName?item.roomName:'')+'-'+item.name"
:value="item.id">
<span>{{ item.roomName }}-{{item.name}}</span>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="班组信息"> <el-form-item label="班组信息">
<el-input v-model="queryParams.teamName" placeholder="班组信息" style="width: 200px;" clearable></el-input> <el-input v-model="queryParams.teamName" placeholder="班组信息" style="width: 200px;" clearable></el-input>
</el-form-item> </el-form-item>
<el-form-item label="上班日期"> <el-form-item label="上班时间">
<el-date-picker v-model="queryParams.tiemStr" type="daterange" format='yyyy-MM-dd' value-format='yyyy-MM-dd' <el-date-picker
range-separator='-' style="width: 250px;" size="small"> v-model="queryParams.tiemStr"
type="daterange"
format='yyyy-MM-dd'
value-format='yyyy-MM-dd'
range-separator='-'
style="width: 250px;"
size="small">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -61,7 +69,6 @@ export default {
font-size: 16px; font-size: 16px;
color: #0B58FF; color: #0B58FF;
} }
.el-input__prefix .el-icon-date { .el-input__prefix .el-icon-date {
font-size: 16px; font-size: 16px;
color: #0B58FF; color: #0B58FF;
@ -76,7 +83,6 @@ export default {
background: #E8E8E8; background: #E8E8E8;
vertical-align: middle; vertical-align: middle;
} }
.demo-form-inline { .demo-form-inline {
.blue-block { .blue-block {
display: inline-block; display: inline-block;

View File

@ -1,8 +1,12 @@
<template> <template>
<div> <div>
<el-drawer title="生产情况" :visible.sync="visible" size="70%" @closed="closeDrawer" :show-close='false'> <el-drawer title="查看详情" :visible.sync="visible" size="70%" :wrapperClosable='false' @closed="closeDrawer">
<div class="box"> <div class="box">
<base-table :table-props="tableProps" :table-data="tableData" :max-height="tableH" /> <base-table
:table-props="tableProps"
:table-data="tableData"
:max-height="tableH"
/>
</div> </div>
</el-drawer> </el-drawer>
</div> </div>
@ -49,7 +53,7 @@ export default {
init(params) { init(params) {
this.visible = true this.visible = true
// console.log(params) // console.log(params)
getByScheduling({ id: params.id }).then(res => { getByScheduling({id:params.id}).then(res => {
let dataList1 = [] let dataList1 = []
let dataList2 = [] let dataList2 = []
if (res.data.nameData && res.data.nameData.length > 0) { if (res.data.nameData && res.data.nameData.length > 0) {
@ -86,11 +90,11 @@ export default {
timeArr.push(this.parseTime(item.name)) timeArr.push(this.parseTime(item.name))
tablePropsObj.prop = item.name tablePropsObj.prop = item.name
tablePropsObj.label = this.parseTime(item.name) tablePropsObj.label = this.parseTime(item.name)
tablePropsObj.children[0].prop = item.name + 'sumInput' tablePropsObj.children[0].prop = item.name+'sumInput'
tablePropsObj.children[1].prop = item.name + 'sumOutput' tablePropsObj.children[1].prop = item.name+'sumOutput'
tablePropsObj.children[2].prop = item.name + 'goodArea' tablePropsObj.children[2].prop = item.name+'goodArea'
tablePropsObj.children[3].prop = item.name + 'dynamicValue' tablePropsObj.children[3].prop = item.name+'dynamicValue'
tablePropsObj.children[4].prop = item.name + 'dynamicRatio' tablePropsObj.children[4].prop = item.name+'dynamicRatio'
this.tableProps.push(tablePropsObj) this.tableProps.push(tablePropsObj)
}) })
getSchedulingMonitoringRecord({ getSchedulingMonitoringRecord({
@ -107,15 +111,15 @@ export default {
obj.workOrderList = dataList1.data[i].workOrderList obj.workOrderList = dataList1.data[i].workOrderList
let subData1 = dataList1.data[i].data let subData1 = dataList1.data[i].data
for (let ii = 0; ii < subData1.length; ii++) { for (let ii = 0; ii < subData1.length; ii++) {
obj[subData1[ii].dynamicName + 'sumInput'] = subData1[ii].dynamicValue.sumInput obj[subData1[ii].dynamicName+'sumInput'] = subData1[ii].dynamicValue.sumInput
obj[subData1[ii].dynamicName + 'sumOutput'] = subData1[ii].dynamicValue.sumOutput obj[subData1[ii].dynamicName+'sumOutput'] = subData1[ii].dynamicValue.sumOutput
obj[subData1[ii].dynamicName + 'goodArea'] = subData1[ii].dynamicValue.goodArea obj[subData1[ii].dynamicName+'goodArea'] = subData1[ii].dynamicValue.goodArea
} }
for (let j = 0; j < dataList2.data.length; j++) { for (let j = 0; j < dataList2.data.length; j++) {
let subData2 = dataList2.data[j].data let subData2 = dataList2.data[j].data
for (let jj = 0; jj < subData2.length; jj++) { for (let jj = 0; jj < subData2.length; jj++) {
obj[subData2[jj].dynamicName + 'dynamicValue'] = subData2[jj].dynamicValue obj[subData2[jj].dynamicName+'dynamicValue'] = subData2[jj].dynamicValue
obj[subData2[jj].dynamicName + 'dynamicRatio'] = obj[subData2[jj].dynamicName + 'dynamicValue'] / obj[subData2[jj].dynamicName + 'sumOutput'] obj[subData2[jj].dynamicName+'dynamicRatio'] = obj[subData2[jj].dynamicName+'dynamicValue'] / obj[subData2[jj].dynamicName+'sumOutput']
} }
} }
this.tableData.push(obj) this.tableData.push(obj)

View File

@ -1,22 +1,37 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<search-area @submit="buttonClick" /> <search-area @submit="buttonClick"/>
<!-- <search-bar <!-- <search-bar
:formConfigs="formConfig" :formConfigs="formConfig"
ref="searchBarForm" ref="searchBarForm"
@headBtnClick="buttonClick" @headBtnClick="buttonClick"
/> --> /> -->
<!-- 列表 --> <!-- 列表 -->
<base-table :page="queryParams.pageNo" :limit="queryParams.pageSize" :table-props="tableProps" :table-data="list" <base-table
:max-height="tableH"> :page="queryParams.pageNo"
<method-btn v-if="tableBtn.length" slot="handleBtn" :width="80" label="操作" :method-list="tableBtn" :limit="queryParams.pageSize"
@clickBtn="handleClick" /> :table-props="tableProps"
:table-data="list"
:max-height="tableH"
>
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
:width="80"
label="操作"
:method-list="tableBtn"
@clickBtn="handleClick"
/>
</base-table> </base-table>
<pagination :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" :total="total" <pagination
@pagination="getList" /> :page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
<!-- 查看生产情况 --> <!-- 查看生产情况 -->
<team-production-detail v-if='paramVisible' ref='schedulingMonitoringDetail' /> <team-production-detail v-if='paramVisible' ref='schedulingMonitoringDetail'/>
</div> </div>
</template> </template>
<script> <script>
@ -71,6 +86,38 @@ export default {
name: 'GroupTeamScheduling', name: 'GroupTeamScheduling',
data() { data() {
return { return {
formConfig: [
{
type: 'select',
label: '班次信息',
selectOptions: [],
param: 'classesId'
},
{
type: 'input',
label: '班组信息',
placeholder: '班组信息',
param: 'teamName'
},
{
type: 'datePicker',
label: '上班日期',
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd',
rangeSeparator: '-',
// valueFormat: "timestamp",
param: 'tiemStr',
defaultSelect: '',
width: 250
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary'
}
],
// //
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
@ -83,9 +130,8 @@ export default {
tableBtn: [ tableBtn: [
this.$auth.hasPermi('base:team-production:detail') this.$auth.hasPermi('base:team-production:detail')
? { ? {
type: 'productionDetail', type: 'detail',
btnName: '查看', btnName: '详情'
showTip: '生产情况'
} }
: undefined : undefined
].filter((v) => v), ].filter((v) => v),
@ -112,7 +158,7 @@ export default {
this.getList() this.getList()
}, },
getList() { getList() {
groupTeamSchedulingPage({ ...this.queryParams }).then(res => { groupTeamSchedulingPage({...this.queryParams}).then(res => {
console.log(res) console.log(res)
this.list = res.data.list || [] this.list = res.data.list || []
this.total = res.data.total || 0 this.total = res.data.total || 0

View File

@ -1,7 +1,7 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-12-12 13:45:25 * @Date: 2023-12-12 13:45:25
* @LastEditTime: 2024-03-14 13:46:39 * @LastEditTime: 2024-03-12 11:17:14
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
@ -9,7 +9,9 @@
<div class="app-container"> <div class="app-container">
<el-form :inline="true" :model="dataForm" class="demo-form-inline"> <el-form :inline="true" :model="dataForm" class="demo-form-inline">
<el-form-item> <el-form-item>
<el-date-picker clearable v-model="reportTime" @change="changeTime" type="date" placeholder="选择日期"> <el-date-picker clearable 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> </el-date-picker>
</el-form-item> </el-form-item>
<el-button type="primary" @click="getDataList()">查询</el-button> <el-button type="primary" @click="getDataList()">查询</el-button>
@ -430,7 +432,6 @@ export default {
// remark: undefined, // remark: undefined,
// }, // },
// //
reportTime:'',
dataForm: { dataForm: {
// pageSize: 100, // pageSize: 100,
// pageNo:1, // pageNo:1,
@ -448,41 +449,10 @@ export default {
// this.getProductLineList(); // this.getProductLineList();
}, },
mounted() { mounted() {
this.getTodayStartTimeAndEndTime()
this.getDataList() this.getDataList()
this.getDict() this.getDict()
}, },
methods: { methods: {
format(shijianchuo) {
//shijianchuoparseInt
var time = moment(new Date(shijianchuo)).format('YYYY-MM-DD HH:mm:ss')
// console.log(time)
// var y = time.getFullYear();
// var m = time.getMonth() + 1;
// var d = time.getDate();
// var h = time.getHours();
// var mm = time.getMinutes();
// var s = time.getSeconds();
return time
},
getTodayStartTimeAndEndTime() {
this.reportTime = new Date()
this.changeTime(this.reportTime)
},
changeTime(val) {
console.log(val)
if (val) {
// console.log(val)
// console.log(val.setHours(7, 0, 0))
// console.log(val.setHours(7, 0, 0) + 24 * 60 * 60 * 1000)
// let time = this.format(val.setHours(7, 0, 0))
this.dataForm.reportTime[0] = this.format(val.setHours(7, 0, 1)) //+ ' 00:00:00' //new Date(this.startTimeStamp + ' 00:00:00').getTime() / 1000
this.dataForm.reportTime[1] = this.format(val.setHours(7, 0, 0) + 24 * 60 * 60 * 1000) //+ ' 23:59:59' //new Date(this.endTimeStamp + ' 23:59:59').getTime() / 1000
console.log(this.dataForm.reportTime);
} else {
this.dataForm.reportTime = []
}
},
async getDict() { async getDict() {
// 线 // 线
const res = await getCorePLList() const res = await getCorePLList()
@ -560,7 +530,18 @@ export default {
} }
}, },
async getDataList() { async getDataList() {
this.timeTips = moment(new Date()).format('YYYY-MM-DD') + ' - ' + moment(new Date().setHours(7, 0, 0) + 24 * 60 * 60 * 1000).format('YYYY-MM-DD') if (this.monthValue.length > 0) {
console.log(this.monthValue)
this.dataForm.reportTime[0] = this.transformTime(this.monthValue[0])
// this.queryParams.startTime = this.monthValue[0]
this.dataForm.reportTime[1] = this.transformTime(this.monthValue[1])
this.timeTips = moment(this.monthValue[0]).format('YYYY-MM-DD') + ' - ' + moment(this.monthValue[1]).format('YYYY-MM-DD')
console.log(this.timeTips);
} else {
// this.$modal.msgError('')
// return false
}
console.log(this.dataForm); console.log(this.dataForm);
const res = await this.$axios({ const res = await this.$axios({
url: 'base/report-auto-delive/listPlus', url: 'base/report-auto-delive/listPlus',