Reviewed-on: http://git.picaiba.com/mt-fe-group/yudao-dev/pulls/44pull/47/head
@@ -75,7 +75,7 @@ | |||
"vue-count-to": "1.0.13", | |||
"vue-cropper": "0.5.8", | |||
"vue-meta": "^2.4.0", | |||
"vue-plugin-hiprint": "^0.0.54-fix", | |||
"vue-plugin-hiprint": "0.0.54-fix", | |||
"vue-quill-editor": "^3.0.6", | |||
"vue-router": "3.4.9", | |||
"vue-video-player": "^5.0.2", | |||
@@ -1,3 +1,10 @@ | |||
/* | |||
* @Author: Do not edit | |||
* @Date: 2023-08-28 15:30:53 | |||
* @LastEditTime: 2023-10-13 17:08:33 | |||
* @LastEditors: DY | |||
* @Description: | |||
*/ | |||
import request from '@/utils/request' | |||
// 创建产线目前生产产品表 主要为更新 | |||
@@ -39,7 +46,7 @@ export function getLineBindProductLogPage(data) { | |||
return request({ | |||
url: '/base/line-bind-product-log/page', | |||
method: 'post', | |||
data | |||
data: data | |||
}) | |||
} | |||
@@ -0,0 +1,15 @@ | |||
<?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>状态切换备份 3</title> | |||
<g id="页面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | |||
<g id="icon和插图" transform="translate(-877.000000, -246.000000)"> | |||
<g id="状态切换备份-3" transform="translate(885.000000, 254.000000) rotate(-270.000000) translate(-885.000000, -254.000000) translate(877.000000, 246.000000)"> | |||
<rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="15" height="15"></rect> | |||
<g id="错误" transform="translate(0.000000, 0.000000)" fill-rule="nonzero"> | |||
<rect id="矩形" fill="#000000" opacity="0" x="0" y="6.4293957e-15" width="16" height="16"></rect> | |||
<path d="M8,1 C11.85,1 15,4.15 15,8 C15,11.85 11.85,15 8,15 C4.15,15 1,11.85 1,8 C1,4.15 4.15,1 8,1 Z M8,2.19926499 C4.80249503,2.19926499 2.18635461,4.80959575 2.18635461,8 C2.18635461,11.1904043 4.80249503,13.800735 8,13.800735 C11.197505,13.800735 13.8136454,11.1904043 13.8136454,8 C13.8136454,4.80959575 11.197505,2.19926499 8,2.19926499 Z M9.18342887,4.39602962 C9.42080763,4.39602962 9.61773566,4.56921978 9.65474747,4.7961346 L9.66099805,4.87359881 L9.66052938,9.97276858 L10.1621026,9.47231604 C10.3071657,9.32725295 10.5223305,9.29501672 10.6985498,9.37560733 L10.7713701,9.41705393 L10.837514,9.47231606 C11.0033004,9.63810246 11.0217211,9.89545015 10.8927761,10.0815835 L10.837514,10.1477274 L9.52115984,11.4640816 C9.38457467,11.600698 9.17913638,11.6415719 9.00066062,11.5676398 C8.84450229,11.5029526 8.73591407,11.3615296 8.71120699,11.1977853 L8.70585968,11.1264012 L8.70585968,4.87359881 C8.70585968,4.60984463 8.91967469,4.39602962 9.18342887,4.39602962 Z M6.99933939,4.43236016 C7.15549771,4.49704738 7.26408594,4.63847045 7.28879302,4.80221473 L7.29414032,4.87359881 L7.29414032,11.1264012 C7.29414032,11.2530604 7.24382515,11.374532 7.15426356,11.4640936 C7.06470196,11.5536552 6.94323037,11.6039704 6.81657114,11.6039704 C6.68991191,11.6039704 6.56844032,11.5536552 6.47887872,11.4640936 C6.40722945,11.3924443 6.36069788,11.3003726 6.34495123,11.2015604 L6.33900196,11.1264012 L6.33858601,6.02634681 L5.83789738,6.52768395 C5.69283427,6.67274705 5.47766955,6.70498329 5.30145018,6.62439268 L5.22862992,6.58294608 L5.162486,6.52768394 C4.9966996,6.36189754 4.97827889,6.10454984 5.10722387,5.91841648 L5.162486,5.85227257 L6.47884017,4.53591839 C6.61542534,4.39930202 6.82086362,4.35842813 6.99933939,4.43236016 Z" id="形状结合" fill="#0B58FF"></path> | |||
</g> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> |
@@ -51,7 +51,7 @@ const tableProps = [ | |||
{ | |||
prop: 'code', | |||
label: '工厂编码' | |||
}, | |||
}, | |||
{ | |||
prop: 'name', | |||
label: '工厂名称' | |||
@@ -2,15 +2,14 @@ | |||
* @Author: zwq | |||
* @Date: 2023-08-02 15:12:42 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2023-10-10 16:49:03 | |||
* @LastEditTime: 2023-10-13 16:35:03 | |||
* @Description: | |||
--> | |||
<template> | |||
<div class="app-container"> | |||
<search-bar | |||
:formConfigs="formConfig" | |||
ref="searchBarForm" | |||
@headBtnClick="buttonClick" /> | |||
:formConfigs="[{ label: '产线在制产品', type: 'title' }]" | |||
ref="searchBarForm" /> | |||
<base-table | |||
v-loading="dataListLoading" | |||
:table-props="tableProps" | |||
@@ -36,20 +35,17 @@ import { getProductPage } from '@/api/core/base/product'; | |||
const tableProps = [ | |||
{ | |||
prop: 'lineName', | |||
label: '产线', | |||
align: 'center', | |||
label: '产线' | |||
}, | |||
{ | |||
prop: 'productName', | |||
label: '在制产品', | |||
align: 'center', | |||
list: [], | |||
subcomponent: selectProduct, | |||
}, | |||
{ | |||
prop: 'recordTime', | |||
label: '开始时间', | |||
align: 'center', | |||
filter: parseTime, | |||
}, | |||
]; | |||
@@ -63,14 +59,14 @@ export default { | |||
}, | |||
tableProps, | |||
tableData: [], | |||
formConfig: [ | |||
{ | |||
type: 'button', | |||
btnName: '同步', | |||
name: 'search', | |||
color: 'primary', | |||
}, | |||
], | |||
// formConfig: [ | |||
// { | |||
// type: 'button', | |||
// btnName: '同步', | |||
// name: 'search', | |||
// color: 'primary', | |||
// }, | |||
// ], | |||
}; | |||
}, | |||
components: {}, | |||
@@ -2,12 +2,11 @@ | |||
* @Author: zwq | |||
* @Date: 2023-08-03 14:09:18 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2023-10-11 11:20:51 | |||
* @LastEditTime: 2023-10-13 16:47:25 | |||
* @Description: | |||
--> | |||
<template> | |||
<div class="tableInner"> | |||
<el-input readonly v-model="list.productName" style="width: 50%;" ></el-input> | |||
<el-popover | |||
placement="top" | |||
title="切换在制产品" | |||
@@ -28,8 +27,11 @@ | |||
确定 | |||
</el-button> | |||
</div> | |||
<el-button type="text" slot="reference">切换</el-button> | |||
<el-button type="text" slot="reference"> | |||
<svg-icon icon-class="changelogo"/> | |||
</el-button> | |||
</el-popover> | |||
<el-input readonly v-model="list.productName" style="width: 50%;margin-left: 5px" ></el-input> | |||
</div> | |||
</template> | |||
<script> | |||
@@ -1,8 +1,8 @@ | |||
<!-- | |||
* @Author: zwq | |||
* @Date: 2023-08-01 14:55:51 | |||
* @LastEditors: zwq | |||
* @LastEditTime: 2023-08-03 15:22:53 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2023-10-13 10:27:00 | |||
* @Description: | |||
--> | |||
<template> | |||
@@ -50,30 +50,25 @@ import { | |||
const tableProps = [ | |||
{ | |||
prop: 'code', | |||
label: '产品编码', | |||
align: 'center', | |||
label: '产品编码' | |||
}, | |||
{ | |||
prop: 'name', | |||
label: '产品名称', | |||
align: 'center', | |||
label: '产品名称' | |||
}, | |||
{ | |||
prop: 'specifications', | |||
label: '规格', | |||
align: 'center', | |||
label: '规格' | |||
}, | |||
{ | |||
prop: 'unitDictValue', | |||
label: '单位', | |||
align: 'center', | |||
subcomponent: unitDict, | |||
}, | |||
{ | |||
prop: 'createTime', | |||
label: '创建时间', | |||
align: 'center', | |||
filter: parseTime, | |||
filter: parseTime | |||
}, | |||
]; | |||
@@ -127,14 +122,14 @@ export default { | |||
name: 'search', | |||
color: 'primary', | |||
}, | |||
{ | |||
type: 'separate', | |||
}, | |||
{ | |||
type: 'button', | |||
btnName: '重置', | |||
name: 'reset', | |||
}, | |||
// { | |||
// type: 'separate', | |||
// }, | |||
// { | |||
// type: 'button', | |||
// btnName: '重置', | |||
// name: 'reset', | |||
// }, | |||
{ | |||
type: 'separate', | |||
}, | |||
@@ -52,45 +52,37 @@ import { | |||
const tableProps = [ | |||
{ | |||
prop: 'code', | |||
label: '产线编码', | |||
align: 'center', | |||
label: '产线编码' | |||
}, | |||
{ | |||
prop: 'name', | |||
label: '产线名称', | |||
align: 'center', | |||
label: '产线名称' | |||
}, | |||
{ | |||
prop: 'factoryName', | |||
label: '工厂', | |||
align: 'center', | |||
label: '工厂' | |||
}, | |||
{ | |||
prop: 'externalCode', | |||
label: '额外编码', | |||
align: 'center', | |||
label: '额外编码' | |||
}, | |||
{ | |||
prop: 'status', | |||
label: '当前状态', | |||
align: 'center', | |||
filter: codeFilter('lineStatus'), | |||
}, | |||
{ | |||
prop: 'description', | |||
label: '描述', | |||
align: 'center', | |||
label: '描述' | |||
}, | |||
{ | |||
prop: 'remark', | |||
label: '备注', | |||
align: 'center', | |||
label: '备注' | |||
}, | |||
{ | |||
prop: 'createTime', | |||
label: '创建时间', | |||
align: 'center', | |||
filter: parseTime, | |||
filter: parseTime | |||
}, | |||
]; | |||
@@ -132,14 +124,14 @@ export default { | |||
name: 'search', | |||
color: 'primary', | |||
}, | |||
{ | |||
type: 'separate', | |||
}, | |||
{ | |||
type: 'button', | |||
btnName: '重置', | |||
name: 'reset', | |||
}, | |||
// { | |||
// type: 'separate', | |||
// }, | |||
// { | |||
// type: 'button', | |||
// btnName: '重置', | |||
// name: 'reset', | |||
// }, | |||
{ | |||
type: 'separate', | |||
}, | |||
@@ -173,7 +165,7 @@ export default { | |||
getDataList() { | |||
this.dataListLoading = true; | |||
this.urlOptions.getDataListURL(this.listQuery).then((response) => { | |||
this.total = response.data.total; | |||
this.listQuery.total = response.data.total; | |||
this.getStatus(response.data.list); | |||
this.dataListLoading = false; | |||
}); | |||
@@ -195,7 +187,7 @@ export default { | |||
switch (val.btnName) { | |||
case 'search': | |||
this.listQuery.pageNo = 1; | |||
this.listQuery.pageSize = 10;.7 | |||
this.listQuery.pageSize = 10; | |||
this.listQuery.name = val.name; | |||
this.getDataList(); | |||
break; | |||
@@ -1,7 +1,7 @@ | |||
<!-- | |||
* @Author: Do not edit | |||
* @Date: 2023-08-29 14:59:29 | |||
* @LastEditTime: 2023-10-12 16:54:15 | |||
* @LastEditTime: 2023-10-13 11:03:11 | |||
* @LastEditors: DY | |||
* @Description: | |||
--> | |||
@@ -332,7 +332,7 @@ export default { | |||
item.reportType = item.reportType === 1 ? '日' : item.reportType === 2 ? '周' : '月' | |||
return item | |||
}); | |||
this.total = response.data.total; | |||
this.listQuery.total = response.data.total; | |||
this.dataListLoading = false; | |||
this.showData = this.tableData | |||
}); | |||
@@ -1,7 +1,7 @@ | |||
<!-- | |||
* @Author: Do not edit | |||
* @Date: 2023-08-29 14:59:29 | |||
* @LastEditTime: 2023-10-12 16:51:54 | |||
* @LastEditTime: 2023-10-13 11:00:59 | |||
* @LastEditors: DY | |||
* @Description: | |||
--> | |||
@@ -282,7 +282,7 @@ export default { | |||
this.dataListLoading = true; | |||
this.urlOptions.getDataListURL(this.listQuery).then(response => { | |||
this.tableData = response.data; | |||
this.total = response.data.total; | |||
this.listQuery.total = response.data.length; | |||
this.dataListLoading = false; | |||
this.showData = this.tableData | |||
}); | |||
@@ -1,7 +1,7 @@ | |||
<!-- | |||
* @Author: Do not edit | |||
* @Date: 2023-08-29 14:59:29 | |||
* @LastEditTime: 2023-10-12 16:35:49 | |||
* @LastEditTime: 2023-10-13 11:03:43 | |||
* @LastEditors: DY | |||
* @Description: | |||
--> | |||
@@ -330,7 +330,7 @@ export default { | |||
return item | |||
}); | |||
this.showData = this.tableData | |||
this.total = response.data.total; | |||
this.listQuery.total = response.data.total; | |||
this.dataListLoading = false; | |||
}); | |||
}, | |||
@@ -0,0 +1,191 @@ | |||
// filename: gantt.vue | |||
// author: liubin | |||
// date: 2023 -09 - 25 14: 28: 12 | |||
// description: 甘特图 | |||
import * as echarts from 'echarts'; | |||
/** | |||
* | |||
* @param {*} params | |||
* @param {*} api | |||
* | |||
* https://echarts.apache.org/zh/option.html#series-custom.renderItem.arguments.params | |||
*/ | |||
// function renderItem(params, api) { } | |||
export default class Gantt { | |||
constructor(el) { | |||
this.chart = echarts.init(el); | |||
let options = { | |||
series: [ | |||
{ | |||
type: 'custom', | |||
coordinateSystem: 'cartesian2d', | |||
renderItem: renderItem, | |||
} | |||
] | |||
} | |||
this.chart.setOption(options); | |||
} | |||
update(options) { | |||
this.chart.setOption(options); | |||
} | |||
resize() { | |||
// todo | |||
} | |||
destroy() { | |||
this.chart.dispose(); | |||
} | |||
} | |||
var data = []; | |||
var categories = ['设备1', '设备2', '设备3']; | |||
var types = [ | |||
{ name: '运行', color: '#7b9ce1' }, | |||
{ name: '故障', color: '#bd6d6c' }, | |||
{ name: '停机', color: '#75d874' }, | |||
]; | |||
// return new Date(new Date(timestamp).toLocaleDateString()).getTime() | |||
// })(1691568181000)) | |||
function getStartTime(timestamp) { | |||
return new Date(new Date(timestamp).toLocaleDateString()).getTime() | |||
} | |||
data.push({ | |||
name: 'running', | |||
value: [0, 1691568181000, 1691568181000 + 60 * 60 * 1000, 60], | |||
itemStyle: { | |||
normal: { | |||
color: types[0].color | |||
} | |||
} | |||
}) | |||
function renderItem(params, api) { | |||
var categoryIndex = api.value(0); | |||
var start = api.coord([api.value(1), categoryIndex]); | |||
var end = api.coord([api.value(2), categoryIndex]); | |||
var height = api.size([0, 1])[1] * 0.8; | |||
var rectShape = echarts.graphic.clipRectByRect( | |||
{ | |||
x: start[0], | |||
y: start[1] - height / 2, | |||
width: end[0] - start[0], | |||
height: height | |||
}, | |||
{ | |||
x: params.coordSys.x, | |||
y: params.coordSys.y, | |||
width: params.coordSys.width, | |||
height: params.coordSys.height | |||
} | |||
); | |||
return ( | |||
rectShape && { | |||
type: 'rect', | |||
transition: ['shape'], | |||
shape: rectShape, | |||
style: api.style() | |||
} | |||
); | |||
} | |||
option = { | |||
tooltip: { | |||
// show: false, | |||
formatter: function (params) { | |||
return params.marker + params.name + ': ' + new Date(params.value[1]).toLocaleTimeString() + ' - ' + new Date(params.value[2]).toLocaleTimeString(); | |||
} | |||
}, | |||
// title: { | |||
// text: 'Profile', | |||
// left: 'center' | |||
// }, | |||
// dataZoom: [ | |||
// { | |||
// type: 'slider', | |||
// filterMode: 'weakFilter', | |||
// showDataShadow: false, | |||
// top: 400, | |||
// labelFormatter: '' | |||
// }, | |||
// { | |||
// type: 'inside', | |||
// filterMode: 'weakFilter' | |||
// } | |||
// ], | |||
grid: { | |||
height: 300 | |||
}, | |||
xAxis: { | |||
type: 'time', | |||
min: getStartTime(1691568181000), | |||
max: getStartTime(1691568181000 + 3600 * 24 * 1000), | |||
splitNumber: 10, | |||
// interval: 60*3600*1000, | |||
// scale: true, | |||
axisLabel: { | |||
// rotate: -15, | |||
formatter: function (val) { | |||
return new Date(val).toLocaleTimeString() | |||
} | |||
}, | |||
axisTick: { | |||
show: true | |||
}, | |||
splitLine: { | |||
show: false, | |||
} | |||
}, | |||
yAxis: [{ | |||
axisLine: { | |||
// show: false, | |||
lineStyle: { | |||
color: '' | |||
} | |||
}, | |||
axisLabel: { | |||
fontSize: 14, | |||
}, | |||
axisTick: { | |||
show: false, | |||
}, | |||
splitLine: { | |||
show: true | |||
}, | |||
data: categories | |||
}, { | |||
axisLine: { | |||
// show: false, | |||
lineStyle: { | |||
color: '' | |||
} | |||
}, | |||
data: [] | |||
}], | |||
series: [ | |||
{ | |||
type: 'custom', | |||
renderItem: renderItem, | |||
itemStyle: { | |||
opacity: 0.8 | |||
}, | |||
encode: { | |||
x: [1, 2], | |||
y: 0 | |||
}, | |||
data: data | |||
} | |||
] | |||
}; |