You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

333 lines
7.4 KiB
Vue

1 year ago
<template>
<div>
<my-card title="内控标准">
<template #right>
<n-button class="mr-5px ml-5px" type="info" size="small" @click="uploadShow = true">
<ArrowUpCircleOutline class="mr-2px text-25px w-20px" />
导入标准
</n-button>
<n-button :loading="exportLoading" size="small" type="warning" class="mr-5px ml-5px" @click="exportList">
<ArrowDownCircleOutline class="mr-2px text-25px w-20px" />
导出标准
</n-button>
</template>
<n-data-table :data="data" :columns="columns" :max-height="dataTableConfig.maxHeight"></n-data-table>
</my-card>
<my-dialog
:show="uploadShow"
:title="'导入内控标准'"
width="400px"
@cancel="uploadShow = false"
@submit="submitUpload"
>
<template #content>
<div>
<n-form ref="formModel" style="width: 600px" label-placement="left" label-align="left" :label-width="130">
<n-form-item class="mr-5px ml-190px">
<n-upload
:show-file-list="true"
:style="{ width: formItemWidth }"
:default-upload="true"
:accept="'.xls,.xlsx'"
:directory-dnd="true"
:max="5"
@change="changeUpload"
>
<n-button :style="{ width: formItemWidth }">选择文件</n-button>
<n-upload-dragger>
<div style="margin-bottom: 1px">
<n-icon size="48" :depth="3">
<ArchiveOutline />
</n-icon>
</div>
<n-text style="font-size: 16px">点击或者拖动文件到该区域来上传</n-text>
<n-p depth="3" style="margin: 8px 0 0 0">提示仅允许导入xlsxlsx格式文件</n-p>
</n-upload-dragger>
</n-upload>
</n-form-item>
<n-button class="ml-260px mt-10px" type="primary" dashed @click="importTemplate()"></n-button>
</n-form>
</div>
</template>
</my-dialog>
</div>
</template>
<script setup lang="ts">
import type { Ref } from 'vue';
import { ref, onMounted } from 'vue';
import type { DataTableColumns } from 'naive-ui';
import { useMessage } from 'naive-ui';
import { ArrowUpCircleOutline, ArrowDownCircleOutline, ArchiveOutline } from '@vicons/ionicons5';
import { download } from '@/service/request/helpers';
import { getInternalControlStandard, uploadInternalControlStandard } from '@/service/api/technology/technologyStandard';
import { dataTableConfig } from '@/config/dataTableConfig';
type DataType = {
id?: number;
plantName: string;
};
const message = useMessage();
const exportLoading = ref<boolean>(false);
const formItemWidth = ref<string>('220px');
const uploadShow = ref<boolean>(false);
const uploadFormData = ref<any | null>(null);
function exportList() {
exportLoading.value = true;
download('mes/mesProcessStandard/export', null, `内控标准.xlsx`, undefined)
.then(() => {
exportLoading.value = false;
})
.catch(() => {
exportLoading.value = false;
});
}
function importTemplate() {
exportLoading.value = true;
download('mes/mesProcessStandard/importTemplate', null, `标准模板.xlsx`, undefined)
.then(() => {
exportLoading.value = false;
})
.catch(() => {
exportLoading.value = false;
});
}
const data = ref<DataType[]>([]);
const columns: Ref<DataTableColumns<DataType>> = ref([
{
title: '序号',
key: 'index',
width: 50,
align: 'center',
render: (_row, index) => index + 1
},
{
title: '导体标称直径',
align: 'center',
width: 80,
key: 'standardDiameter'
},
{
title: '漆包线最大外径',
key: 'sfas',
width: 80,
align: 'center',
children: [
{
title: '薄漆膜',
width: 80,
key: 'wireFilmMax'
},
{
title: '厚漆膜',
width: 80,
key: 'wireThickMax'
}
]
},
{
title: '最小漆膜厚度',
width: 80,
align: 'center',
key: 'sfas',
children: [
{
title: '薄漆膜',
width: 80,
key: 'wireFilmMin'
},
{
title: '厚漆膜',
width: 80,
key: 'wireThickMin'
}
]
},
{
title: '最大外径',
align: 'center',
width: 80,
key: 'outsideDiameterMax'
},
{
title: '导体偏差',
align: 'center',
width: 80,
key: 'conductorDeviation'
},
{
title: '导体f值',
align: 'center',
width: 80,
key: 'conductorFNumber'
},
{
title: '最小直流电阻(℃)',
align: 'center',
width: 80,
key: 'dcResistanceMin'
},
{
title: '最大直流电阻(℃)',
align: 'center',
width: 80,
key: 'dcResistanceMax'
},
{
title: '伸长率',
align: 'center',
width: 80,
key: 'elongation'
},
{
title: '回弹性',
align: 'center',
width: 80,
key: 'resilience'
},
{
title: '圆棒卷绕',
align: 'center',
width: 80,
key: 'wind'
},
{
title: '拉伸',
width: 80,
align: 'center',
key: 'stretch'
},
{
title: '急拉断',
align: 'center',
width: 80,
key: 'snapBreak'
},
{
title: '剥离扭绞',
align: 'center',
width: 80,
key: 'strippingTwist'
},
{
title: '热冲击',
align: 'center',
width: 80,
key: 'thermalShock'
},
{
title: '软化冲击',
align: 'center',
width: 80,
key: 'softeningImpact'
},
{
title: '软化击穿',
align: 'center',
width: 80,
key: 'softeningBreakdown'
},
{
title: '刮漆1',
width: 80,
align: 'center',
key: 'scraperPaintingOne'
},
{
title: '刮漆2',
align: 'center',
width: 80,
key: 'scraperPaintingTwo'
},
{
title: '耐溶剂',
width: 80,
align: 'center',
key: 'solventResistance'
},
{
title: '室温击穿电压',
align: 'center',
width: 80,
key: 'roomtempBreakdown'
},
{
title: '高压针孔',
align: 'center',
width: 80,
key: 'highPressurePinhole'
},
{
title: '盐水针孔',
align: 'center',
width: 80,
key: 'brinePinhole'
},
{
title: '焊锡性',
width: 80,
align: 'center',
key: 'solderability'
},
{
title: '外观',
width: 80,
align: 'center',
key: 'appearance'
},
{
title: '包装',
width: 80,
align: 'center',
key: 'package'
},
{
title: '环保材料',
width: 80,
align: 'center',
key: 'envMaterial'
},
{
title: '其他要求',
width: 80,
align: 'center',
key: 'otherRequirements'
}
]);
function submitUpload() {
if (uploadFormData.value === null) {
message.warning('请选择文件进行上传');
return;
}
uploadInternalControlStandard(uploadFormData.value, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(res => {
if (res.code === 200) {
message.success('上传成功');
uploadShow.value = false;
init();
}
});
}
function changeUpload(files) {
if (files.fileList.length === 0) {
uploadFormData.value = null;
return;
}
uploadFormData.value = files.file;
}
function init() {
getInternalControlStandard().then(res => {
data.value = res.data;
});
}
onMounted(() => {
init();
});
</script>
<style scoped></style>