diff --git a/src/api/process-boot/terminal.ts b/src/api/process-boot/terminal.ts index 5e17224f..4a8bb6c6 100644 --- a/src/api/process-boot/terminal.ts +++ b/src/api/process-boot/terminal.ts @@ -85,7 +85,8 @@ export function batchTerminal(file) { return createAxios({ url: '/process-boot/process/pmsTerminalDetection/batchTerminal', method: 'post', - data: form + data: form, + responseType: 'blob' }) } // 上传文件 diff --git a/src/components/echarts/MyEchart.vue b/src/components/echarts/MyEchart.vue index 7ad35f09..86903879 100644 --- a/src/components/echarts/MyEchart.vue +++ b/src/components/echarts/MyEchart.vue @@ -38,7 +38,7 @@ const initChart = () => { color: '#000', fontSize: 18 }, - ...(props.options.title || null) + ...(props.options?.title || null) }, tooltip: { trigger: 'axis', @@ -57,7 +57,7 @@ const initChart = () => { }, backgroundColor: 'rgba(0,0,0,0.35)', borderWidth: 0, - ...(props.options.tooltip || null) + ...(props.options?.tooltip || null) }, legend: { right: 20, @@ -70,19 +70,19 @@ const initChart = () => { }, itemWidth: 15, itemHeight: 10, - ...(props.options.legend || null) + ...(props.options?.legend || null) }, grid: { top: '50px', left: '10px', right: '60px', - bottom: props.options.options?.dataZoom === null ? '10px' : '40px', + bottom: props.options?.options?.dataZoom === null ? '10px' : '40px', containLabel: true, - ...(props.options.grid || null) + ...(props.options?.grid || null) }, - xAxis: props.options.xAxis ? handlerXAxis() : null, - yAxis: props.options.yAxis ? handlerYAxis() : null, - dataZoom: props.options.dataZoom || [ + xAxis: props.options?.xAxis ? handlerXAxis() : null, + yAxis: props.options?.yAxis ? handlerYAxis() : null, + dataZoom: props.options?.dataZoom || [ { type: 'inside', height: 13, @@ -97,9 +97,9 @@ const initChart = () => { end: 100 } ], - color: props.options.color || color, - series: props.options.series, - ...props.options.options + color: props.options?.color || color, + series: props.options?.series, + ...props.options?.options } handlerBar(options) // 处理柱状图 @@ -120,8 +120,8 @@ const handlerBar = (options: any) => { if (params.value == 0 || params.value == 3.14159) { return '#ccc' } else { - return props.options.color - ? props.options.color[params.seriesIndex] + return props.options?.color + ? props.options?.color[params.seriesIndex] : color[params.seriesIndex] } } @@ -135,6 +135,7 @@ const handlerBar = (options: any) => { const handlerYAxis = () => { let temp = { type: 'value', + nameGap: 15, nameTextStyle: { color: '#000' }, @@ -158,9 +159,9 @@ const handlerYAxis = () => { } } } - // props.options.xAxis 是数组还是对象 - if (Array.isArray(props.options.yAxis)) { - return props.options.yAxis.map((item: any) => { + // props.options?.xAxis 是数组还是对象 + if (Array.isArray(props.options?.yAxis)) { + return props.options?.yAxis.map((item: any) => { return { ...item, ...temp @@ -169,7 +170,7 @@ const handlerYAxis = () => { } else { return { ...temp, - ...props.options.yAxis + ...props.options?.yAxis } } } @@ -190,9 +191,9 @@ const handlerXAxis = () => { } } } - // props.options.xAxis 是数组还是对象 - if (Array.isArray(props.options.xAxis)) { - return props.options.xAxis.map((item: any) => { + // props.options?.xAxis 是数组还是对象 + if (Array.isArray(props.options?.xAxis)) { + return props.options?.xAxis.map((item: any) => { return { ...temp, ...item @@ -201,7 +202,7 @@ const handlerXAxis = () => { } else { return { ...temp, - ...props.options.xAxis + ...props.options?.xAxis } } } diff --git a/src/views/pqs/supervise/terminal/components/add.vue b/src/views/pqs/supervise/terminal/components/add.vue index 7af639a7..d62bb465 100644 --- a/src/views/pqs/supervise/terminal/components/add.vue +++ b/src/views/pqs/supervise/terminal/components/add.vue @@ -1,10 +1,10 @@ @@ -50,48 +103,75 @@ import TableStore from '@/utils/tableStore' import Table from '@/components/table/index.vue' import TableHeader from '@/components/table/header/index.vue' import { ElMessage, ElMessageBox } from 'element-plus' -import { mainHeight } from '@/utils/layout' +import { DownloadExport, reportDownload, batchTerminal, delTerminal ,importReport} from '@/api/process-boot/terminal' import { useDictData } from '@/stores/dictData' -import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity' const dictData = useDictData() -const uploadData = [ +const manufactorList = dictData.getBasicData('Dev_Manufacturers') +const testResultsList = [ { id: 0, - - label: '未上传' + name: '未展开' }, { id: 1, - - label: '已上传' + name: '已展开' } ] -const dialogVisible = ref(false) const TableHeaderRef = ref() -const title = ref('') - +const showBatchUpload = ref(false) const ruleFormRef = ref() +const fileList: any = ref([]) const tableStore = new TableStore({ - url: '/system-boot/area/areaSelect', + url: '/process-boot/process/pmsTerminalDetection/getTerminalPage', publicHeight: 85, method: 'POST', column: [ - { width: '60', type: 'checkbox' }, - { field: 'id', title: '终端编号' }, - { field: 'name', title: '上产厂家' }, - { field: 'orgName', title: '安装位置' }, + { + field: 'manufacture', + title: '生产厂家', + formatter(row: any) { + return manufactorList.filter(item => item.id == row.cellValue)[0]?.name + } + }, + { field: 'installPlace', title: '安装位置' }, { field: 'inspectionUnit', title: '送检单位' }, { field: 'testResults', title: '检测结果' }, - { field: 'nextInspectionTime', title: '下次监测时间' }, + { field: 'nextInspectionTime', title: '下次检测时间' }, { title: '操作', - width: '180', + width: '250', render: 'buttons', fixed: 'right', buttons: [ + { + name: 'edit', + title: '编辑', + type: 'primary', + icon: 'el-icon-EditPen', + render: 'basicButton', + click: row => {} + }, + { + title: '删除', + type: 'danger', + icon: 'el-icon-Delete', + render: 'confirmButton', + popconfirm: { + confirmButtonText: '确认', + cancelButtonText: '取消', + confirmButtonType: 'danger', + title: '确定删除吗?' + }, + click: row => { + delTerminal([row.id]).then(() => { + ElMessage.success('删除成功') + tableStore.index() + }) + } + }, { name: 'edit', title: '下载原始数据报告', @@ -101,7 +181,9 @@ const tableStore = new TableStore({ disabled: row => { return row.originalReport == null }, - click: row => {} + click: row => { + download(row, 0) + } }, { name: 'edit', @@ -112,26 +194,114 @@ const tableStore = new TableStore({ disabled: row => { return row.inspectionReport == null }, - click: row => {} + click: row => { + download(row, 1) + } } ] } - ], - - loadCallback: () => { - tableStore.table.data = [ - { - status: 2 - } - ] - } + ] }) -tableStore.table.params.searchState = '' -tableStore.table.params.searchValue = '' -tableStore.table.params.type = '' +tableStore.table.params.name = '' +tableStore.table.params.id = dictData.state.area[0].id +tableStore.table.params.testResults = '' +tableStore.table.params.manufacture = [] +tableStore.table.params.type = 1 provide('tableStore', tableStore) + +// 关闭弹窗查询 +const onsubmit = () => {} +// 下载模版 +const Export = () => { + DownloadExport().then(res => { + let blob = new Blob([res], { + type: 'application/vnd.ms-excel' + }) + + const url = window.URL.createObjectURL(blob) + const link = document.createElement('a') // 创建a标签 + link.href = url + link.download = '终端入网检测录入模板' // 设置下载的文件名 + document.body.appendChild(link) + link.click() //执行下载 + }) +} +// 下载报告 +const download = (row: any, type: number) => { + reportDownload({ + id: row.id, + type: type + }).then(res => { + let blob = new Blob([res], { + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8' + }) + + const url = window.URL.createObjectURL(blob) + const link = document.createElement('a') // 创建a标签 + link.href = url + link.download = type == 1 ? row.inspectionName : row.originalName // 设置下载的文件名 + document.body.appendChild(link) + link.click() //执行下载 + }) +} +// excel导入 +const choose = (e: any) => { + batchTerminal(e.raw).then((res: any) => { + if (res.type == 'application/json') { + ElMessage.success('上传成功,无错误数据!') + tableStore.index() + } else { + ElMessage.warning('上传成功,有错误数据 自动下载 请查看') + let blob = new Blob([res], { + type: 'application/vnd.ms-excel' + }) + const url = window.URL.createObjectURL(blob) + const link = document.createElement('a') // 创建a标签 + link.href = url + link.download = '模板错误信息' // 设置下载的文件名 + document.body.appendChild(link) + link.click() //执行下载 + } + }) +} +// 上传原始报告 +const UploadOriginal = () => { + showBatchUpload.value = true +} +// 上传 +const BatchUpload = () => { + let form = new FormData() + form.append('type', 1) + fileList.value.forEach(item => { + form.append('files', item.raw) + }) + importReport(form) + .then(res => { + if (res.type == 'application/json') { + ElMessage.success('上传成功!') + handleClose() + tableStore.index() + } else { + ElMessage.error('上传失败!') + } + }) + .catch(response => { + // console.log(response); + }) + // fileList.value +} +const chooseBatch = (e: any) => { + fileList.value.push(e) +} +const handleRemove = (e: any) => { + fileList.value = fileList.value.filter(item => item.uid !== e.uid) +} +const handleClose = () => { + fileList.value = [] + showBatchUpload.value = false +} onMounted(() => { tableStore.index() }) diff --git a/src/views/pqs/supervise/terminal/components/networkEch.vue b/src/views/pqs/supervise/terminal/components/networkEch.vue new file mode 100644 index 00000000..2ac1f8fa --- /dev/null +++ b/src/views/pqs/supervise/terminal/components/networkEch.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/views/pqs/supervise/terminal/components/networkTab.vue b/src/views/pqs/supervise/terminal/components/networkTab.vue index ef83a7ec..4434119d 100644 --- a/src/views/pqs/supervise/terminal/components/networkTab.vue +++ b/src/views/pqs/supervise/terminal/components/networkTab.vue @@ -46,16 +46,13 @@ - 上传原始报告 + 上传原始报告 + + + + 选择文件 +   (*传入的原始数据文件格式(终端编号-原始数据报告.docx)) + + + @@ -86,7 +109,14 @@ import Table from '@/components/table/index.vue' import TableHeader from '@/components/table/header/index.vue' import newlyIncreased from './add.vue' import { ElMessage, ElMessageBox } from 'element-plus' -import { DownloadExport, reportDownload, batchTerminal } from '@/api/process-boot/terminal' +import { + DownloadExport, + reportDownload, + batchTerminal, + delTerminal, + getTerminalPage, + importReport +} from '@/api/process-boot/terminal' import { useDictData } from '@/stores/dictData' const dictData = useDictData() @@ -102,9 +132,11 @@ const testResultsList = [ } ] -const dialogVisible = ref(false) +const fileList: any = ref([]) const TableHeaderRef = ref() const addRef = ref() +const showBatchUpload = ref(false) +const tableRef = ref() const ruleFormRef = ref() const tableStore = new TableStore({ @@ -112,7 +144,7 @@ const tableStore = new TableStore({ publicHeight: 85, method: 'POST', column: [ - { width: '60', type: 'checkbox' }, + // { width: '60', type: 'checkbox' }, { field: 'orgName', title: '所属单位' }, { field: 'id', title: '终端编号' }, @@ -126,15 +158,52 @@ const tableStore = new TableStore({ }, { field: 'installPlace', title: '安装位置' }, { field: 'inspectionUnit', title: '送检单位' }, - { field: 'testResults', title: '检测结果' }, + { + field: 'testResults', + title: '检测结果', + formatter(row: any) { + return row.cellValue == 0 ? '未展开' : '已展开' + } + }, { field: 'inspectionTime', title: '检测时间' }, { field: 'nextInspectionTime', title: '下次检测时间' }, { title: '操作', - width: '180', + width: '250', render: 'buttons', fixed: 'right', buttons: [ + { + name: 'edit', + title: '编辑', + type: 'primary', + icon: 'el-icon-EditPen', + render: 'basicButton', + click: row => { + addRef.value.open({ + title: '编辑', + row: row + }) + } + }, + { + title: '删除', + type: 'danger', + icon: 'el-icon-Delete', + render: 'confirmButton', + popconfirm: { + confirmButtonText: '确认', + cancelButtonText: '取消', + confirmButtonType: 'danger', + title: '确定删除吗?' + }, + click: row => { + delTerminal([row.id]).then(() => { + ElMessage.success('删除成功') + tableStore.index() + }) + } + }, { name: 'edit', title: '下载原始数据报告', @@ -179,8 +248,7 @@ const add = () => { title: '新增' }) } -// 关闭弹窗查询 -const onsubmit = () => {} + // 下载模版 const Export = () => { DownloadExport().then(res => { @@ -216,10 +284,78 @@ const download = (row: any, type: number) => { } // excel导入 const choose = (e: any) => { - batchTerminal(e.raw).then(res => { - console.log('🚀 ~ batchTerminal ~ res:', res) + batchTerminal(e.raw).then((res: any) => { + if (res.type == 'application/json') { + ElMessage.success('上传成功,无错误数据!') + tableStore.index() + } else { + ElMessage.warning('上传成功,有错误数据 自动下载 请查看') + let blob = new Blob([res], { + type: 'application/vnd.ms-excel' + }) + const url = window.URL.createObjectURL(blob) + const link = document.createElement('a') // 创建a标签 + link.href = url + link.download = '模板错误信息' // 设置下载的文件名 + document.body.appendChild(link) + link.click() //执行下载 + } }) } +// 导出 +const exportEvent = () => { + let form = JSON.parse(JSON.stringify(tableStore.table.params)) + form.pageNum = 1 + form.pageSize = tableStore.table.total + getTerminalPage(form).then(res => { + tableRef.value.getRef().exportData({ + filename: '终端入网检测', // 文件名字 + sheetName: 'Sheet1', + type: 'xlsx', //导出文件类型 xlsx 和 csv + useStyle: true, + data: res.data.records, // 数据源 // 过滤那个字段导出 + columnFilterMethod: function (column: any) { + return !(column.$columnIndex === 0) + } + }) + }) +} +// 上传原始报告 +const UploadOriginal = () => { + showBatchUpload.value = true +} +// 上传 +const BatchUpload = () => { + let form = new FormData() + form.append('type', 0) + fileList.value.forEach(item => { + form.append('files', item.raw) + }) + importReport(form) + .then(res => { + if (res.type == 'application/json') { + ElMessage.success('上传成功!') + handleClose() + tableStore.index() + } else { + ElMessage.error('上传失败!') + } + }) + .catch(response => { + // console.log(response); + }) + // fileList.value +} +const chooseBatch = (e: any) => { + fileList.value.push(e) +} +const handleRemove = (e: any) => { + fileList.value = fileList.value.filter(item => item.uid !== e.uid) +} +const handleClose = () => { + fileList.value = [] + showBatchUpload.value = false +} onMounted(() => { tableStore.index() }) diff --git a/src/views/pqs/supervise/terminal/index.vue b/src/views/pqs/supervise/terminal/index.vue index cb98d3fa..359a25ab 100644 --- a/src/views/pqs/supervise/terminal/index.vue +++ b/src/views/pqs/supervise/terminal/index.vue @@ -5,16 +5,21 @@ - + + + + - Config - - - Config + + + + + + @@ -24,7 +29,9 @@