This commit is contained in:
2025-02-27 13:54:28 +08:00
parent c83a7afadb
commit 8e9b2f6444
36 changed files with 881 additions and 624 deletions

View File

@@ -134,11 +134,10 @@ export default {
yAxis: [
{
type: 'value',
name: '节拍',
name: '节拍 pcs/min',
min: 0,
interval: 20,
axisLabel: {
formatter: '{value} pcs/min',
formatter: '{value}',
},
},
],

View File

@@ -59,24 +59,36 @@
<i class="el-icon-delete"></i>
</div> -->
<div
class="file-list__item"
v-for="(file, index) in files"
:key="file.fileName"
:style="{
background: isPicMode
? `url(${file.fileUrl}) no-repeat`
: `url(${defaultBg}) no-repeat`,
backgroundSize: isPicMode ? '100% 100%' : '64px',
backgroundPosition: isPicMode ? '0% 0%' : 'center',
}"
:data-name="file.fileName">
<el-button
v-if="!disabled"
type="text"
class="el-icon-delete"
style="padding: 0"
@click="(e) => handleDelete(file)" />
</div>
style="width: 100%">
<div
class="file-list__item"
v-if="!isPicMode"
:style="{
background: isPicMode
? `url(${file.fileUrl}) no-repeat`
: `url(${defaultBg}) no-repeat`,
backgroundSize: isPicMode ? '100% 100%' : '64px',
backgroundPosition: isPicMode ? '0% 0%' : 'center',
}"
@click="handleDownload(file)"
:data-name="file.fileName">
<el-button
v-if="!disabled"
type="text"
class="el-icon-delete"
style="padding: 0"
@click="(e) => handleDelete(file)" />
</div>
<el-image
v-else
class="file-list__item"
style="width: 100%"
:src="file.fileUrl"
:preview-src-list="files.map((item) => item.fileUrl)"></el-image>
</div>
</section>
</div>
</template>
@@ -277,6 +289,32 @@ export default {
// Array
this.$emit('update-filelist', this.appendFilelist);
},
async handleDownload(file) {
if (this.isPicMode) {
// this.$emit('preview', file);
const link = document.createElement('a');
link.href = file.fileUrl;
link.target = '_blank';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
} else {
// this.$emit('download', file);
const data = await this.$axios({
url: file.fileUrl,
method: 'get',
responseType: 'blob',
});
const link = document.createElement('a');
link.href = window.URL.createObjectURL(new Blob([data]));
link.download = file.fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(link.href);
}
},
},
};
</script>

View File

@@ -1,4 +1,4 @@
<!--
<!--
filename: dialogForm.vue
author: liubin
date: 2023-08-15 10:32:36
@@ -44,7 +44,7 @@
<el-date-picker
v-if="col.datetime"
v-model="form[col.prop]"
type="datetime"
type="date"
:placeholder="`请选择${col.label}`"
value-format="timestamp"
v-bind="col.bind"></el-date-picker>

View File

@@ -82,7 +82,7 @@
<el-date-picker
v-model="form.productionTime"
:disabled="disabled"
type="datetime"
type="date"
placeholder="请选择生产日期"
value-format="timestamp"></el-date-picker>
</el-form-item>
@@ -92,7 +92,7 @@
<el-date-picker
v-model="form.enterTime"
:disabled="disabled"
type="datetime"
type="date"
placeholder="请选择进场日期"
value-format="timestamp"></el-date-picker>
</el-form-item>
@@ -317,7 +317,7 @@ export default {
this.form
);
// 保存原始文件名
if ('fileNames' in this.form) this.form.fileNames.push(file.name);
if ('fileNames' in this.form) this.form.fileNames.push(file.name+Date.now());
// 保存完整地址
if ('fileUrls' in this.form) this.form.fileUrls.push(response.data);
this.$modal.msgSuccess('上传成功');

View File

@@ -38,7 +38,7 @@
@cancel="cancel"
width="60%"
@confirm="submitForm">
<DialogForm
<DialogForm1
v-if="open"
key="index-dialog-form"
ref="form"
@@ -78,7 +78,7 @@
queryParams: {
equipmentId: form.id,
pageNo: 1,
pageSize: 10,
pageSize: 20,
},
tableBtn: [
this.$auth.hasPermi('base:equipment-attr:update')
@@ -107,6 +107,7 @@
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import EquipmentDrawer from './components/EquipmentDrawer';
import DialogForm1 from './components/DialogForm';
import {
createEquipment,
@@ -124,6 +125,7 @@ export default {
components: {
Editor,
EquipmentDrawer,
DialogForm1,
},
mixins: [basicPageMixin],
data() {
@@ -157,7 +159,12 @@ export default {
width: 180,
filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
},
{ width: 200,showOverflowtooltip :true, prop: 'name', label: '设备名称' },
{
width: 200,
showOverflowtooltip: true,
prop: 'name',
label: '设备名称',
},
{ width: 256, prop: 'code', label: '设备编码' },
{ prop: 'equipmentType', label: '设备类型' },
{ prop: 'enName', label: '英文名称' },
@@ -436,7 +443,7 @@ export default {
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
pageSize: 20,
code: '',
name: '',
},
@@ -562,6 +569,7 @@ export default {
return;
}
// 添加的提交
this.form.files = [];
createEquipment(this.form).then((response) => {
this.$modal.msgSuccess('新增成功');
this.open = false;

View File

@@ -240,25 +240,6 @@ export default {
const id = row.id;
getEquipmentType(id).then((response) => {
this.form = response.data;
// this.form = {
// code: 'SBLX20230925184444000041',
// name: '测试131',
// remark: '测试可删除',
// id: '1706258479729336322',
// files: [
// { fileName: '1.png', fileUrl: '', fileType: 2 },
// { fileName: '1.asdfaslkjfkasdf.png', fileUrl: '', fileType: 2 },
// { fileName: '2.txt', fileUrl: '', fileType: 2 },
// { fileName: '1.rar', fileUrl: '', fileType: 2 },
// { fileName: '1.kkk', fileUrl: '', fileType: 2 },
// { fileName: 'test.file', fileUrl: '', fileType: 2 },
// { fileName: '222', fileUrl: '', fileType: 2 },
// { fileName: 'g', fileUrl: '', fileType: 2 },
// ],
// createTime: 1695638697000,
// parentId: '1701869972319584257',
// };
// debugger;
this.open = true;
this.title = '修改设备类型';
});

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-03 14:09:18
* @LastEditors: zwq
* @LastEditTime: 2024-11-29 13:29:28
* @LastEditTime: 2025-02-24 15:21:07
* @Description:
-->
<template>
@@ -17,7 +17,7 @@
v-for="opt in getDictDatas(DICT_TYPE.PROCESS_TYPE)"
:key="opt.value"
:label="opt.label"
:value="opt.value + '+' + opt.label"></el-option>
:value="opt.value"></el-option>
</el-select>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="visible = false">
@@ -53,18 +53,21 @@ export default {
visible: false,
};
},
mounted() {},
mounted() {
},
methods: {
changeInput() {
const processDictName = this.getDictDatas(this.DICT_TYPE.PROCESS_TYPE).find(item=>
item.value == this.list.processDict
)
const data = {
id: this.list.id,
processDict: this.list.processDict.split('+')[0],
processDictName: this.list.processDict.split('+')[1],
processDict: this.list.processDict,
processDictName: processDictName.label,
};
switchLineBindProcess(data).then((response) => {
this.$modal.msgSuccess('修改成功');
this.visible = false;
this.list.processDictName = this.list.processDict.split('+')[1];
this.$emit('emitData');
});
},

View File

@@ -72,19 +72,37 @@
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="规格" prop="specifications">
<el-form-item label="原片规格" prop="originalSpecifications">
<el-input
:disabled="isdetail"
v-model="dataForm.specifications"
placeholder="请输入规格" />
v-model="dataForm.originalSpecifications"
placeholder="请输入原片规格" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位平方数" prop="area">
<el-form-item label="原片单位平方数" prop="originalArea">
<el-input
:disabled="isdetail"
v-model="dataForm.originalArea"
placeholder="请输入原片单位平方数" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="深加工规格" prop="specifications">
<el-input
:disabled="isdetail"
v-model="dataForm.specifications"
placeholder="请输入深加工规格" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="深加工单位平方数" prop="area">
<el-input
:disabled="isdetail"
v-model="dataForm.area"
placeholder="请输入单位平方数" />
placeholder="请输入深加工单位平方数" />
</el-form-item>
</el-col>
</el-row>
@@ -222,11 +240,13 @@ export default {
id: null,
name: '', // 产品名称
code: '', // 产品编码
area: 0, // 单位平方数(float only)
area: 0, // 深加工单位平方数(float only)
typeDictValue: null, // 产品类型id
processTime: null, // 单位产品用时 (s)
specifications: '', // 规格
specifications: '', // 深加工规格
unitDictValue: '', // 单位id
originalSpecifications: '', // 原片规格
originalArea: 0, // 原片单位平方数
},
listQuery: {
pageSize: 10,

View File

@@ -1,8 +1,8 @@
<!--
* @Author: zwq
* @Date: 2023-08-01 14:55:51
* @LastEditors: DY
* @LastEditTime: 2023-10-13 10:27:00
* @LastEditors: zwq
* @LastEditTime: 2025-02-24 16:06:59
* @Description:
-->
<template>
@@ -49,27 +49,31 @@ import {
const tableProps = [
{
prop: 'code',
label: '产品编码'
prop: 'createTime',
label: '创建时间',
filter: parseTime
},
{
prop: 'name',
label: '产品名称'
},
{
prop: 'code',
label: '产品编码'
},
{
prop: 'originalSpecifications',
label: '原片规格'
},
{
prop: 'specifications',
label: '规格'
label: '深加工规格'
},
{
prop: 'unitDictValue',
label: '单位',
subcomponent: unitDict,
},
{
prop: 'createTime',
label: '创建时间',
filter: parseTime
},
];
export default {

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2024-11-22 14:02:59
* @LastEditTime: 2025-02-24 15:32:45
* @Description:
-->
<template>
@@ -81,6 +81,17 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="描述" prop="description">
<el-input
v-model="dataForm.description"
type="textarea"
placeholder="请输入内容" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input
@@ -90,17 +101,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item label="描述" prop="description">
<el-input
v-model="dataForm.description"
type="textarea"
placeholder="请输入内容" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
@@ -160,6 +160,7 @@ export default {
],
tvalue: [
{
required: true,
type: 'number',
message: '请输入正确的数字',
trigger: 'change',

View File

@@ -102,11 +102,10 @@ export default {
yAxis: [
{
type: 'value',
name: '投入/产出',
name: '投入/产出',
min: 0,
interval: 100,
axisLabel: {
formatter: '{value}',
formatter: '{value}',
},
},
{

View File

@@ -69,26 +69,32 @@ import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
import ButtonNav from '@/components/ButtonNav';
import baseTableS from './baseTable.vue';
import barChart from './BarChart.vue';
import * as XLSX from 'xlsx';
import FileSaver from 'file-saver';
const tableProps = [
{
prop: 'factoryName',
label: '工厂',
fixed: true
},
{
prop: 'lineName',
label: '产线',
fixed: true
},
{
prop: 'sizes',
label: '规格',
width: 105,
showOverflowtooltip: true,
fixed: true
},
{
prop: 'inputN',
label: '投入',
align: 'center',
children: [
{
prop: 'inputNum',
@@ -103,6 +109,7 @@ const tableProps = [
{
prop: 'outputN',
label: '产出',
align: 'center',
children: [
{
prop: 'outputNum',
@@ -118,6 +125,7 @@ const tableProps = [
{
prop: 'lossN',
label: '不良',
align: 'center',
children: [
{
prop: 'lossNum',
@@ -148,10 +156,12 @@ const tableProps = [
{
prop: 'lossD',
label: '不良详情',
align: 'center',
children: [
{
prop: 'original',
label: '原片',
align: 'center',
children: [
{
prop: 'originalLossNum',
@@ -167,6 +177,7 @@ const tableProps = [
{
prop: 'edge',
label: '磨边',
align: 'center',
children: [
{
prop: 'edgeLossNum',
@@ -182,6 +193,7 @@ const tableProps = [
{
prop: 'drill',
label: '打孔',
align: 'center',
children: [
{
prop: 'drillLossNum',
@@ -197,6 +209,7 @@ const tableProps = [
{
prop: 'coating',
label: '镀膜',
align: 'center',
children: [
{
prop: 'coatingLossNum',
@@ -212,6 +225,7 @@ const tableProps = [
{
prop: 'silk',
label: '丝印',
align: 'center',
children: [
{
prop: 'silkLossNum',
@@ -227,6 +241,7 @@ const tableProps = [
{
prop: 'tempering',
label: '钢化',
align: 'center',
children: [
{
prop: 'temperingLossNum',
@@ -242,6 +257,7 @@ const tableProps = [
{
prop: 'packing',
label: '包装',
align: 'center',
children: [
{
prop: 'packingLossNum',
@@ -480,6 +496,7 @@ export default {
tables.removeChild(tables.querySelector('.el-table__fixed-right'));
}
let exportTable = XLSX.utils.table_to_book(tables);
exportTable.Sheets.Sheet1.A1.v = '序号' //导出表格第一列表头为序号
var exportTableOut = XLSX.write(exportTable, {
bookType: 'xlsx',
@@ -492,7 +509,7 @@ export default {
new Blob([exportTableOut], {
type: 'application/octet-stream',
}),
this.fileName + '产线统计数据查询-当前.xlsx'
'产线统计数据.xlsx'
);
} catch (e) {
if (typeof console !== 'undefined') console.log(e, exportTableOut);

View File

@@ -1,7 +1,7 @@
<!--
* @Author: Do not edit
* @Date: 2023-08-29 14:59:29
* @LastEditTime: 2025-01-14 09:53:23
* @LastEditTime: 2025-02-24 14:51:47
* @LastEditors: zwq
* @Description:
-->
@@ -42,34 +42,41 @@ const tableProps = [
{
prop: 'reportType',
label: '报表类型',
fixed: true
},
{
prop: 'reportDate',
label: '日期',
width: 130,
fixed: true
},
{
prop: 'factoryName',
label: '工厂',
fixed: true
},
{
prop: 'lineName',
label: '产线',
fixed: true
},
{
prop: 'sizes',
label: '规格',
width: 105,
showOverflowtooltip: true,
fixed: true
},
{
prop: 'process',
label: '产品工艺',
fixed: true
},
{
prop: 'inputN',
label: '投入',
align: 'center',
children: [
{
prop: 'inputNum',
@@ -78,12 +85,14 @@ const tableProps = [
{
prop: 'inputArea',
label: '投入面积/m²',
filter: (val) => (val != null ? val.toFixed(2) : '-'),
},
],
},
{
prop: 'outputN',
label: '产出',
align: 'center',
children: [
{
prop: 'outputNum',
@@ -99,6 +108,7 @@ const tableProps = [
{
prop: 'lossN',
label: '不良',
align: 'center',
children: [
{
prop: 'lossNum',
@@ -129,10 +139,12 @@ const tableProps = [
{
prop: 'lossD',
label: '不良详情',
align: 'center',
children: [
{
prop: 'original',
label: '原片',
align: 'center',
children: [
{
prop: 'originalLossNum',
@@ -148,6 +160,7 @@ const tableProps = [
{
prop: 'edge',
label: '磨边',
align: 'center',
children: [
{
prop: 'edgeLossNum',
@@ -163,6 +176,7 @@ const tableProps = [
{
prop: 'drill',
label: '打孔',
align: 'center',
children: [
{
prop: 'drillLossNum',
@@ -178,6 +192,7 @@ const tableProps = [
{
prop: 'coating',
label: '镀膜',
align: 'center',
children: [
{
prop: 'coatingLossNum',
@@ -193,6 +208,7 @@ const tableProps = [
{
prop: 'silk',
label: '丝印',
align: 'center',
children: [
{
prop: 'silkLossNum',
@@ -208,6 +224,7 @@ const tableProps = [
{
prop: 'tempering',
label: '钢化',
align: 'center',
children: [
{
prop: 'temperingLossNum',
@@ -223,6 +240,7 @@ const tableProps = [
{
prop: 'packing',
label: '包装',
align: 'center',
children: [
{
prop: 'packingLossNum',

View File

@@ -1,7 +1,7 @@
<!--
* @Author: Do not edit
* @Date: 2023-08-29 14:59:29
* @LastEditTime: 2025-01-09 10:45:41
* @LastEditTime: 2025-02-26 16:42:12
* @LastEditors: zwq
* @Description:
-->
@@ -42,28 +42,34 @@ const tableProps1 = [
prop: 'processType',
label: '工艺类型',
filter: (val) => (val === 1 ? '面板' : '背板'),
fixed: true
},
{
prop: 'reportType',
label: '报表类型',
fixed: true
},
{
prop: 'reportDate',
label: '日期',
width: 130,
fixed: true
},
{
prop: 'factoryName',
label: '工厂',
fixed: true
},
{
prop: 'process',
label: '产品工艺',
fixed: true
},
{
prop: 'all',
label: '合计',
align: 'center',
children: [
{
prop: 'inputArea',
@@ -228,6 +234,7 @@ export default {
tables.removeChild(tables.querySelector('.el-table__fixed-right'));
}
let exportTable = XLSX.utils.table_to_book(tables);
exportTable.Sheets.Sheet1.A1.v = '序号' //导出表格第一列表头为序号
var exportTableOut = XLSX.write(exportTable, {
bookType: 'xlsx',
@@ -295,6 +302,7 @@ export default {
item['processingRatio' + index] = prop.processingRatio;
const subprop = {
label: prop.lineName,
align: 'center',
children: [
{
prop: 'inputArea' + index,