排产基础数据提交

dev-scheduling
zhangdi 4 months ago
parent a258a2835a
commit 711059fe6a
  1. 44
      src/api/productionSchedulingPlan/basic.js
  2. 96
      src/views/productionSchedulingPlan/basic/equipmentCapacity.vue
  3. 25
      src/views/productionSchedulingPlan/basic/inspectionHours.vue
  4. 112
      src/views/productionSchedulingPlan/basic/nonSameFurnace.vue
  5. 75
      src/views/productionSchedulingPlan/basic/personnelCapacity.vue
  6. 48
      src/views/productionSchedulingPlan/basic/principalProducer.vue
  7. 37
      src/views/productionSchedulingPlan/basic/qualityGrade.vue
  8. 80
      src/views/productionSchedulingPlan/schedulingDashboard/index.vue
  9. 1
      src/views/productionSchedulingPlan/schedulingDashboard/index111.vue

@ -79,7 +79,7 @@ export const updateInspectionItem = row => {
// 质量等级 增删改查
export const getListGualityGrade = (current, size, params) => {
return request({
url: '/blade-scheduling/gualityGrade/page',
url: '/blade-scheduling/qualityGrade/page',
method: 'get',
params: {
...params,
@ -90,7 +90,7 @@ export const getListGualityGrade = (current, size, params) => {
};
export const removeGualityGrade = ids => {
return request({
url: '/blade-scheduling/gualityGrade/remove',
url: '/blade-scheduling/qualityGrade/remove',
method: 'post',
params: {
ids,
@ -100,7 +100,7 @@ export const removeGualityGrade = ids => {
export const addGualityGrade = row => {
return request({
url: '/blade-scheduling/gualityGrade/submit',
url: '/blade-scheduling/qualityGrade/submit',
method: 'post',
data: row,
});
@ -108,7 +108,7 @@ export const addGualityGrade = row => {
export const updateGualityGrade = row => {
return request({
url: '/blade-scheduling/gualityGrade/submit',
url: '/blade-scheduling/qualityGrade/submit',
method: 'post',
data: row,
});
@ -227,3 +227,39 @@ export const updateDifferentFurnaceTank = row => {
data: row,
});
};
// 查询工艺能力
export const getCraftAbility = (params) => {
return request({
url: '/blade-scheduling/craftAbility/findList',
method: 'get',
params: params,
});
};
// 查询设备
export const getEquipment = (params) => {
return request({
url: '/blade-scheduling/equipment/findList',
method: 'get',
params: params,
});
};
// 工序
export const getProcessSet = (params) => {
return request({
url: '/blade-scheduling/processSet/findList',
method: 'get',
params: params,
});
};
// 作业中心
export const getWorkCenter = (params) => {
return request({
url: '/blade-scheduling/workCenter/findList',
method: 'get',
params: params,
});
};

@ -92,34 +92,58 @@ export default {
{
label: '作业中心',
prop: 'workCenterId',
search: false,
search: true,
sortable: true,
span: 12,
width: 120,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/workCenter/findList',
props: {
label: 'wcName',
value: 'id',
},
change: val => {
this.onChangeData(val.item, 'workCenterId');
},
},
{
label: '工序',
prop: '',
label: '作业中心',
prop: 'workCenterName',
search: false,
sortable: true,
span: 12,
hide: true,
display: false,
},
{
label: '设备编码',
prop: 'equipCode',
search: false,
label: '设备名称',
prop: 'equipName',
search: true,
sortable: true,
span: 12,
width: 120,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/equipment/findList',
props: {
label: 'deviceName',
value: 'deviceName',
},
change: val => {
this.onChangeData(val.item, 'equipName');
},
},
{
label: '设备名称',
prop: 'equipName',
search: false,
label: '设备编码',
prop: 'equipCode',
search: true,
sortable: true,
span: 12,
width: 120,
disabled:true,
},
{
label: '设备分类',
prop: 'equipType',
@ -146,15 +170,35 @@ export default {
sortable: true,
span: 12,
width: 120,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/craftAbility/findList',
props: {
label: 'caName',
value: 'id',
},
change: val => {
this.onChangeData(val.item, 'craftId');
},
},
{
label: '工艺能力',
prop: 'craftName',
search: false,
sortable: true,
span: 12,
hide:true,
display:false
},
{
label: '额定加工能力(烧结-个/热表-面积)',
prop: 'standardProcessAbility',
search: false,
sortable: true,
span: 12,
span: 24,
width: 270,
labelWidth:270,
type: 'number'
},
{
label: '额定工时(分钟)',
@ -163,6 +207,8 @@ export default {
sortable: true,
span: 12,
width: 180,
labelWidth:180,
type: 'number'
},
{
label: '准备工时(分钟)',
@ -171,6 +217,8 @@ export default {
sortable: true,
span: 12,
width: 180,
labelWidth:180,
type: 'number'
},
{
label: '轮次间隔(分钟)',
@ -179,18 +227,13 @@ export default {
sortable: true,
span: 12,
width: 180,
labelWidth:180,
type: 'number'
},
{
label: '轮次间隔(分钟)',
prop: '',
search: false,
sortable: true,
span: 12,
width: 180,
},
{
label: '指定使用',
prop: '',
prop: 'assignUse',
search: false,
sortable: true,
span: 12,
@ -198,7 +241,7 @@ export default {
},
{
label: '备注',
prop: '',
prop: 'remarks',
search: false,
sortable: true,
span: 12,
@ -211,6 +254,17 @@ export default {
};
},
methods: {
onChangeData(val, type) {
if (type == 'workCenterId') {
this.form.workCenterName = val.wcCode;
}
if (type == 'equipName') {
this.form.equipCode = val.deviceCode;
}
if(type=='craftId'){
this.form.craftName=val.caName
}
},
rowSave(row, done, loading) {
addEquipAbility(row).then(
() => {

@ -54,7 +54,7 @@ export default {
calcHeight: 32,
simplePage: false,
searchShow: true,
searchMenuSpan: 6,
searchMenuSpan: 18,
searchIcon: true,
searchIndex: 3,
tree: false,
@ -91,40 +91,37 @@ export default {
column: [
{
label: '检验项目',
prop: '',
search: false,
prop: 'inspectionItem',
search: true,
sortable: true,
span: 12,
},
{
label: '抽样数量(常规)',
prop: '',
search: false,
sortable: true,
span: 12,
},
{
label: '额定工时(分钟)',
prop: '',
prop: 'samplingQuantity',
search: false,
sortable: true,
span: 12,
labelWidth:160,
},
{
label: '额定工时(分钟/每人每个)',
prop: '',
prop: 'standardTime',
search: false,
sortable: true,
span: 12,
labelWidth:220,
width:240,
labelWidth:240,
type: 'number'
},
{
label: '准备工时(分钟)',
prop: '',
prop: 'prepareTime',
search: false,
sortable: true,
span: 12,
labelWidth:180,
type: 'number'
},
{
label: '单位',

@ -89,51 +89,124 @@ export default {
searchMenuPosition: 'right',
align: 'center',
column: [
{
label: '工艺能力',
{
label: '作业中心',
prop: 'workCenterId',
search: true,
sortable: true,
span: 12,
width:120,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/workCenter/findList',
props: {
label: 'wcName',
value: 'id',
},
change: (val,row) => {
this.onChangeData(val.item,'workCenterId')
},
},
{
label: '作业中心',
prop: 'workCenterName',
search: false,
sortable: true,
span: 12,
hide:true,
display:false
},
{
label: '影响因素',
label: '工序',
prop: 'processId',
search: true,
sortable: true,
span: 12,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/processSet/findList',
props: {
label: 'name',
value: 'id',
},
change: (val,row) => {
this.onChangeData(val.item,'processId')
},
},
{
label: '工序',
prop: 'processName',
search: false,
sortable: true,
span: 12,
hide:true,
display:false,
},
{
label: '工艺能力',
prop: 'craftId',
search: true,
sortable: true,
span: 12,
width:120,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/craftAbility/findList',
props: {
label: 'caName',
value: 'id',
},
change: (val,row) => {
this.onChangeData(val.item,'craftId')
},
},
{
label: '工艺能力',
prop: 'craftName',
search: false,
sortable: true,
span: 12,
hide:true,
display:false
},
{
label: '影响因素',
search: false,
span: 12,
children: [
{
label: '键位',
prop: 'workCenterId',
prop: 'keyBinding',
search: false,
sortable: true,
span: 12,
},
{
label: '生产厂家',
prop: 'workCenterId',
prop: 'factory',
search: false,
sortable: true,
span: 12,
width:140,
},
{
label: '检验编号',
prop: 'workCenterId',
prop: 'inspectionCode',
search: false,
sortable: true,
span: 12,
width:140,
},
{
label: '材料',
prop: 'workCenterId',
prop: 'material',
search: false,
sortable: true,
span: 12,
},
{
label: '厚度(镀层)',
prop: 'workCenterId',
prop: 'thickness',
search: false,
sortable: true,
span: 12,
@ -141,32 +214,34 @@ export default {
},
{
label: '钝化',
prop: 'workCenterId',
prop: 'passivation',
search: false,
sortable: true,
span: 12,
},
{
label: '硬度',
prop: 'workCenterId',
prop: 'hardness',
search: false,
sortable: true,
span: 12,
},
{
label: '生产标识',
prop: 'workCenterId',
prop: 'productionIdent',
search: false,
sortable: true,
span: 12,
width:140,
},
{
label: '结构/单件面积',
prop: 'workCenterId',
prop: 'singleArea',
search: false,
sortable: true,
span: 12,
width:150
width:150,
type: 'number'
},
],
},
@ -177,6 +252,17 @@ export default {
};
},
methods: {
onChangeData(val,type){
if(type=='workCenterId'){
this.form.workCenterName=val.wcCode
}
if(type=='processId'){
this.form.processName=val.name
}
if(type=='craftId'){
this.form.craftName=val.caName
}
},
rowSave(row, done, loading) {
addDifferentFurnaceTank(row).then(
() => {

@ -92,23 +92,80 @@ export default {
{
label: '作业中心',
prop: 'workCenterId',
search: true,
sortable: true,
span: 12,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/workCenter/findList',
props: {
label: 'wcName',
value: 'id',
},
change: (val,row) => {
this.onChangeData(val.item,'workCenterId')
},
},
{
label: '作业中心',
prop: 'workCenterName',
search: false,
sortable: true,
span: 12,
hide:true,
display:false
},
{
label: '工序',
prop: 'processId',
search: true,
sortable: true,
span: 12,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/processSet/findList',
props: {
label: 'name',
value: 'id',
},
change: (val,row) => {
this.onChangeData(val.item,'processId')
},
},
{
label: '工序',
prop: 'processName',
search: false,
sortable: true,
span: 12,
hide:true,
display:false
},
{
label: '工艺能力',
prop: 'craftId',
search: true,
sortable: true,
span: 12,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/craftAbility/findList',
props: {
label: 'caName',
value: 'id',
},
change: (val,row) => {
this.onChangeData(val.item,'craftId')
},
},
{
label: '工艺能力',
prop: 'craftName',
search: false,
sortable: true,
span: 12,
hide:true,
display:false
},
{
label: '额定工时(分钟/每人每个)',
@ -116,7 +173,8 @@ export default {
search: false,
sortable: true,
span: 12,
labelWidth:220,
labelWidth: 220,
type: 'number'
},
{
label: '准备工时(分钟)',
@ -124,7 +182,8 @@ export default {
search: false,
sortable: true,
span: 12,
labelWidth:180,
labelWidth: 180,
type: 'number'
},
],
},
@ -133,7 +192,19 @@ export default {
};
},
methods: {
onChangeData(val,type){
if(type=='workCenterId'){
this.form.workCenterName=val.wcCode
}
if(type=='processId'){
this.form.processName=val.name
}
if(type=='craftId'){
this.form.craftName=val.caName
}
},
rowSave(row, done, loading) {
addPersonAbility(row).then(
() => {
this.onLoad(this.page);

@ -89,47 +89,58 @@ export default {
searchMenuPosition: 'right',
align: 'center',
column: [
{
label: '工序',
prop: 'processId',
search: false,
search: true,
sortable: true,
span: 12,
type: 'select',
filterable: true,
dicUrl: '/blade-scheduling/processSet/findList',
props: {
label: 'name',
value: 'id',
},
change: (val, row) => {
this.onChangeData(val.item, 'processId');
},
},
{
label: '工艺能力',
prop: 'processId',
label: '工',
prop: 'processName',
search: false,
sortable: true,
span: 12,
hide: true,
display: false,
},
{
label: '主生产者(人/设备)',
prop: 'mainProducer',
search: false,
search: true,
sortable: true,
span: 12,
labelWidth:220,
type:'select',
dicData:[
searchLabelWidth: 150,
labelWidth: 160,
type: 'select',
dicData: [
{
label:'人',
value:'人'
label: '人',
value: '人',
},
{
label:'设备',
value:'设备'
}
]
label: '设备',
value: '设备',
},
],
},
{
label: '备注',
prop: '',
prop: 'remarks',
search: false,
sortable: true,
span: 12,
labelWidth:180,
},
],
},
@ -138,6 +149,11 @@ export default {
};
},
methods: {
onChangeData(val, type) {
if (val&&type == 'processId') {
this.form.processName = val.name;
}
},
rowSave(row, done, loading) {
addMainProducer(row).then(
() => {

@ -91,31 +91,32 @@ export default {
column: [
{
label: '质量等级',
prop: 'workCenterId',
prop: 'qualityGrade',
search: false,
sortable: true,
span: 12,
},
{
label: '军品',
prop: 'processId',
search: false,
sortable: true,
span: 12,
},
{
label: '商飞',
prop: 'craftId',
search: false,
sortable: true,
span: 12,
},
{
label: '宇航',
prop: 'standardTime',
search: false,
label: '类型',
prop: 'type',
search: true,
sortable: true,
span: 12,
type:'select',
dicData:[
{
label:'军品',
value:1
},
{
label:'商飞',
value:2
},
{
label:'宇航',
value:3
}
]
},
],

@ -29,7 +29,15 @@
</el-col>
<el-col :span="4">
<el-form-item label="工序:">
<el-input v-model="formLabelAlign.processName" placeholder="请输入"></el-input>
<!-- <el-input v-model="formLabelAlign.processName" placeholder="请输入"></el-input> -->
<el-select v-model="formLabelAlign.processName" filterable placeholder="请选择">
<el-option
v-for="(item, index) in selectProcessOptions"
:label="item.name"
:value="item.id"
:key="index"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
@ -75,10 +83,11 @@
<!-- 左侧信息列表 - 展示车间订单号等信息 -->
<div class="info-list">
<div class="info-item-title">
<div class="info-title-cell">车间订单号</div>
<div class="info-title-cell">零件号</div>
<div class="info-title-cell info-title-no">车间订单号</div>
<div class="info-title-cell info-title-no">零件号</div>
<div class="info-title-cell">批次号</div>
<div class="info-title-cell">数量</div>
<div class="info-title-cell info-title-num">数量</div>
<div class="info-title-cell">质量等级</div>
</div>
<div
v-for="(order, index) in currentPageOrders"
@ -86,14 +95,15 @@
:style="{
height: getRowHeight(order.woCode) + 'px',
borderBottom: '1px solid #ccc',
lineHeight:getRowHeight(order.woCode) + 'px',
lineHeight: getRowHeight(order.woCode) + 'px',
}"
>
<div class="info-item">
<div class="info-cell">{{ order.woCode }}</div>
<div class="info-cell">{{ order.partCode }}</div>
<div class="info-cell info-title-no">{{ order.woCode }}</div>
<div class="info-cell info-title-no">{{ order.partCode }}</div>
<div class="info-cell">{{ order.batchNo }}</div>
<div class="info-cell">{{ order.makeQty }}</div>
<div class="info-cell info-title-num">{{ order.makeQty }}</div>
<div class="info-cell">{{ order.productIdent }}</div>
</div>
</div>
</div>
@ -201,7 +211,6 @@
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="pageSize"
layout="total, prev, pager, next, jumper"
:total="totalOrders"
@ -256,7 +265,7 @@
<span class="label">计划完成时间</span>
<span class="value">{{ tooltipData.planEndTime || '-' }}</span>
</li>
<li class="detail-item">
<li class="detail-item">
<span class="label">实际完成时间</span>
<span class="value">{{ tooltipData.factEndTime || '-' }}</span>
</li>
@ -280,8 +289,12 @@
</template>
<script>
import { getData, selectEquip, selectTeam } from '@/api/productionSchedulingPlan/scheduling';
import {
getData,
selectEquip,
selectTeam,
} from '@/api/productionSchedulingPlan/scheduling';
import { getProcessSet } from '@/api/productionSchedulingPlan/basic';
export default {
name: 'GanttChart',
data() {
@ -318,6 +331,7 @@ export default {
rowHeights: {},
selectTeamOptions: [],
selectEquipOptions: [],
selectProcessOptions: [],
//
currentTimePosition: 0,
@ -343,6 +357,7 @@ export default {
this.formLabelAlign.startTime = new Date().toISOString().substr(0, 10);
this.getSelectTeam();
this.getSelectEquip();
this.getProcessSet();
this.getData();
this.calcCurrentTimePosition();
// 线
@ -405,6 +420,11 @@ export default {
this.selectTeamOptions = res.data.data;
});
},
getProcessSet() {
getProcessSet().then(res => {
this.selectProcessOptions = res.data.data;
});
},
//
processData(rawData) {
@ -579,12 +599,12 @@ export default {
const totalSpacing = totalLayers * 4;
const availableHeight = rowHeight - totalSpacing;
const layerHeight = availableHeight / totalLayers;
return layerIndex * (layerHeight + 4) + 2;
return layerIndex * (layerHeight + 18) + 2;
},
getLayerTaskHeight(totalLayers, device) {
const rowHeight = this.getRowHeight(device);
if (totalLayers <= 1) {
return rowHeight - 4;
return rowHeight - 18;
} else {
const totalSpacing = totalLayers * 4;
const availableHeight = rowHeight - totalSpacing;
@ -688,7 +708,7 @@ export default {
/* 左侧信息列表样式 */
.info-list {
width: 400px;
width: 450px;
background-color: #f8f9fa;
border-right: 1px solid #eee;
flex-shrink: 0;
@ -707,6 +727,15 @@ export default {
text-align: center;
line-height: 36px;
border-right: 1px solid #eee;
font-size:14px;
}
.info-title-num {
width: 50px;
flex: none !important;
}
.info-title-no {
width: 125px;
flex: none !important;
}
.info-item {
@ -723,7 +752,7 @@ export default {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size:13px;
font-size: 10px;
}
.timeline-container {
@ -832,8 +861,8 @@ export default {
/* background-color: #ff4d4f; */
transform: translateX(-50%);
z-index: 10;
height:100vh;
border-left:1px dashed #ccc
height: 100vh;
border-left: 1px dashed #ccc;
}
/* 图表内容区域 */
@ -841,6 +870,7 @@ export default {
flex: 1;
position: relative;
overflow-y: auto;
overflow-x: auto;
}
.grid-lines {
@ -864,6 +894,8 @@ export default {
position: relative;
width: 100%;
height: 100%;
/* overflow:hidden; */
overflow-x: hidden;
}
.device-task-row {
@ -893,7 +925,7 @@ export default {
}
.task-label {
font-size: 13px;
font-size: 10px;
color: white;
white-space: nowrap;
overflow: hidden;
@ -951,12 +983,12 @@ export default {
/* 分页样式 */
.pagination-container {
position: fixed; /* 固定定位 */
right: 20px; /* 距离右侧20px */
bottom: 20px; /* 距离底部20px */
position: fixed; /* 固定定位 */
right: 20px; /* 距离右侧20px */
bottom: 20px; /* 距离底部20px */
margin-top: 15px;
background-color: #fff; /* 增加背景色避免与内容重叠时看不清 */
padding: 10px; /* 增加内边距 */
background-color: #fff; /* 增加背景色避免与内容重叠时看不清 */
padding: 10px; /* 增加内边距 */
z-index: 10;
}

@ -282,6 +282,7 @@
<span class="label">实际开始时间</span>
<span class="value">{{ tooltipData.factStartTime || '-' }}</span>
</li>
<li class="detail-item">
<span class="label">计划完成时间</span>
<span class="value">{{ tooltipData.planEndTime || '-' }}</span>

Loading…
Cancel
Save