Browse Source

导出

master
han\hanst 3 weeks ago
parent
commit
c2a934e86b
  1. 4
      src/api/longchuang/productionPlan.js
  2. 77
      src/views/modules/longtron/production-plan-cable-cop-task.vue
  3. 72
      src/views/modules/longtron/production-plan-home-order.vue
  4. 72
      src/views/modules/longtron/production-plan-machining-task.vue
  5. 72
      src/views/modules/longtron/production-plan-renovation-order.vue

4
src/api/longchuang/productionPlan.js

@ -2,6 +2,7 @@ import { createAPI } from "@/utils/httpRequest.js"
// ================= 序号1:家用梯销售订单 =================
export const getHomeLiftOrderList = data => createAPI(`/longchuang/productionPlan/homeLiftOrder/list`, 'post', data)
export const exportHomeLiftOrder = data => createAPI(`/longchuang/productionPlan/homeLiftOrder/export`, 'post', data, 'download')
export const saveHomeLiftOrder = data => createAPI(`/longchuang/productionPlan/homeLiftOrder/save`, 'post', data)
export const finishHomeLiftOrder = data => createAPI(`/longchuang/productionPlan/homeLiftOrder/finish`, 'post', data)
export const reportHomeLiftOrderNode = data => createAPI(`/longchuang/productionPlan/homeLiftOrder/reportNode`, 'post', data)
@ -9,6 +10,7 @@ export const deleteHomeLiftOrder = data => createAPI(`/longchuang/productionPlan
// ================= 序号2:线缆/COP自制任务单 =================
export const getCableCopTaskList = data => createAPI(`/longchuang/productionPlan/cableCopTask/list`, 'post', data)
export const exportCableCopTask = data => createAPI(`/longchuang/productionPlan/cableCopTask/export`, 'post', data, 'download')
export const saveCableCopTask = data => createAPI(`/longchuang/productionPlan/cableCopTask/save`, 'post', data)
export const finishCableCopTask = data => createAPI(`/longchuang/productionPlan/cableCopTask/finish`, 'post', data)
export const reportCableCopTaskNode = data => createAPI(`/longchuang/productionPlan/cableCopTask/reportNode`, 'post', data)
@ -16,6 +18,7 @@ export const deleteCableCopTask = data => createAPI(`/longchuang/productionPlan/
// ================= 序号3:改造项目订单 =================
export const getRenovationOrderList = data => createAPI(`/longchuang/productionPlan/renovationOrder/list`, 'post', data)
export const exportRenovationOrder = data => createAPI(`/longchuang/productionPlan/renovationOrder/export`, 'post', data, 'download')
export const saveRenovationOrder = data => createAPI(`/longchuang/productionPlan/renovationOrder/save`, 'post', data)
export const finishRenovationOrder = data => createAPI(`/longchuang/productionPlan/renovationOrder/finish`, 'post', data)
export const reportRenovationOrderNode = data => createAPI(`/longchuang/productionPlan/renovationOrder/reportNode`, 'post', data)
@ -23,6 +26,7 @@ export const deleteRenovationOrder = data => createAPI(`/longchuang/productionPl
// ================= 序号4:机加工生产任务单 =================
export const getMachiningTaskList = data => createAPI(`/longchuang/productionPlan/machiningTask/list`, 'post', data)
export const exportMachiningTask = data => createAPI(`/longchuang/productionPlan/machiningTask/export`, 'post', data, 'download')
export const saveMachiningTask = data => createAPI(`/longchuang/productionPlan/machiningTask/save`, 'post', data)
export const finishMachiningTask = data => createAPI(`/longchuang/productionPlan/machiningTask/finish`, 'post', data)
export const reportMachiningTaskNode = data => createAPI(`/longchuang/productionPlan/machiningTask/reportNode`, 'post', data)

77
src/views/modules/longtron/production-plan-cable-cop-task.vue

@ -39,6 +39,7 @@
<el-button @click="searchTable('Y')" plain class="search-btn">查询</el-button>
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button>
<el-button @click="openEditDialog()" plain class="add-btn">新增任务单</el-button>
<el-button @click="exportTaskData()" plain class="search-btn" :loading="exportLoading">{{ exportLoading ? '导出中...' : '导出' }}</el-button>
</el-form-item>
<el-form-item label=" " class="query-finish-item">
<el-button
@ -365,7 +366,7 @@
</template>
<script>
import { deleteCableCopTask, finishCableCopTask, getCableCopTaskList, getNodeAssigneeList, getNodeAssigneeUsers, getReportLogList, reportCableCopTaskNode, saveCableCopTask, saveNodeAssignee } from '@/api/longchuang/productionPlan'
import { deleteCableCopTask, exportCableCopTask, finishCableCopTask, getCableCopTaskList, getNodeAssigneeList, getNodeAssigneeUsers, getReportLogList, reportCableCopTaskNode, saveCableCopTask, saveNodeAssignee } from '@/api/longchuang/productionPlan'
import { getOssVideoStreamUrl, previewOssFileById2, queryOssFilePlus, removeOss } from '@/api/oss/oss'
export default {
@ -396,6 +397,7 @@ export default {
pageSize: 20,
totalPage: 0,
dataListLoading: false,
exportLoading: false,
tableHeight: (window.innerHeight - 320) / 2
}
},
@ -828,6 +830,79 @@ export default {
this.searchData = { projectNo: '', taskType: '', category: '', materialName: '', materialSpec: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 }
this.searchTable('Y')
},
async exportTaskData() {
if (this.exportLoading) {
return
}
this.exportLoading = true
try {
const queryData = {
...this.searchData,
sourceProjectNo: this.searchData.category
}
delete queryData.category
const response = await exportCableCopTask(queryData)
const contentType = String((response.headers && response.headers['content-type']) || '').toLowerCase()
if (contentType.indexOf('application/json') > -1 || contentType.indexOf('text/plain') > -1 || contentType.indexOf('text/html') > -1) {
const errorMsg = await this.resolveExportErrorMessage(response.data)
this.$message.error(errorMsg)
return
}
const fileName = this.resolveExportFileName(response, '线缆COP任务单')
this.downloadExportFile(response.data, fileName)
this.$message.success('导出成功')
} catch (e) {
this.$message.error('导出失败')
} finally {
this.exportLoading = false
}
},
async resolveExportErrorMessage(blobData) {
if (!(blobData instanceof Blob)) {
return '导出失败'
}
try {
const text = await blobData.text()
if (!text) {
return '导出失败'
}
try {
const json = JSON.parse(text)
return json.msg || json.message || '导出失败'
} catch (e) {
return text.length < 200 ? text : '导出失败'
}
} catch (e) {
return '导出失败'
}
},
resolveExportFileName(response, prefix) {
const disposition = String((response.headers && response.headers['content-disposition']) || '')
const defaultName = `${prefix}_${this.dayjs().format('YYYYMMDDHHmmss')}.xlsx`
if (!disposition) {
return defaultName
}
const utf8Match = disposition.match(/filename\*=utf-8''([^;]+)/i)
if (utf8Match && utf8Match[1]) {
return decodeURIComponent(utf8Match[1])
}
const normalMatch = disposition.match(/filename="?([^"]+)"?/i)
if (normalMatch && normalMatch[1]) {
return decodeURIComponent(normalMatch[1])
}
return defaultName
},
downloadExportFile(blobData, fileName) {
const blob = blobData instanceof Blob ? blobData : new Blob([blobData], { type: 'application/octet-stream' })
const downloadUrl = URL.createObjectURL(blob)
const linkNode = document.createElement('a')
linkNode.href = downloadUrl
linkNode.download = fileName
document.body.appendChild(linkNode)
linkNode.click()
document.body.removeChild(linkNode)
URL.revokeObjectURL(downloadUrl)
},
openEditDialog(row) {
this.saveHeaderData = row
? { ...row, projectNo: row.projectNo || row.taskNo || '', category: row.category || row.sourceProjectNo || '', autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL', nodeList: this.filterNodeListByTaskType(row.taskType, row.nodeList || []) }

72
src/views/modules/longtron/production-plan-home-order.vue

@ -30,6 +30,7 @@
<el-button @click="getDataList('Y')" plain class="search-btn">查询</el-button>
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button>
<el-button @click="openEditDialog()" plain class="add-btn">新增订单</el-button>
<el-button @click="exportOrderData()" plain class="search-btn" :loading="exportLoading">{{ exportLoading ? '导出中...' : '导出' }}</el-button>
</el-form-item>
<el-form-item label=" " class="query-finish-item">
<el-button
@ -344,7 +345,7 @@
</template>
<script>
import { deleteHomeLiftOrder, finishHomeLiftOrder, getHomeLiftOrderList, getNodeAssigneeList, getNodeAssigneeUsers, getReportLogList, reportHomeLiftOrderNode, saveHomeLiftOrder, saveNodeAssignee } from '@/api/longchuang/productionPlan'
import { deleteHomeLiftOrder, exportHomeLiftOrder, finishHomeLiftOrder, getHomeLiftOrderList, getNodeAssigneeList, getNodeAssigneeUsers, getReportLogList, reportHomeLiftOrderNode, saveHomeLiftOrder, saveNodeAssignee } from '@/api/longchuang/productionPlan'
import { getOssVideoStreamUrl, previewOssFileById2, queryOssFilePlus, removeOss } from '@/api/oss/oss'
export default {
@ -375,6 +376,7 @@ export default {
pageSize: 20,
totalPage: 0,
dataListLoading: false,
exportLoading: false,
tableHeight: (window.innerHeight - 320)/2,
}
},
@ -720,6 +722,74 @@ export default {
this.searchData = { projectNo: '', modelNo: '', color: '', status: '', deliveryStartDate: '', deliveryEndDate: '', page: 1, limit: 20 }
this.getDataList('Y')
},
async exportOrderData() {
if (this.exportLoading) {
return
}
this.exportLoading = true
try {
const response = await exportHomeLiftOrder({ ...this.searchData })
const contentType = String((response.headers && response.headers['content-type']) || '').toLowerCase()
if (contentType.indexOf('application/json') > -1 || contentType.indexOf('text/plain') > -1 || contentType.indexOf('text/html') > -1) {
const errorMsg = await this.resolveExportErrorMessage(response.data)
this.$message.error(errorMsg)
return
}
const fileName = this.resolveExportFileName(response, '家用梯销售订单')
this.downloadExportFile(response.data, fileName)
this.$message.success('导出成功')
} catch (e) {
this.$message.error('导出失败')
} finally {
this.exportLoading = false
}
},
async resolveExportErrorMessage(blobData) {
if (!(blobData instanceof Blob)) {
return '导出失败'
}
try {
const text = await blobData.text()
if (!text) {
return '导出失败'
}
try {
const json = JSON.parse(text)
return json.msg || json.message || '导出失败'
} catch (e) {
return text.length < 200 ? text : '导出失败'
}
} catch (e) {
return '导出失败'
}
},
resolveExportFileName(response, prefix) {
const disposition = String((response.headers && response.headers['content-disposition']) || '')
const defaultName = `${prefix}_${this.dayjs().format('YYYYMMDDHHmmss')}.xlsx`
if (!disposition) {
return defaultName
}
const utf8Match = disposition.match(/filename\*=utf-8''([^;]+)/i)
if (utf8Match && utf8Match[1]) {
return decodeURIComponent(utf8Match[1])
}
const normalMatch = disposition.match(/filename="?([^"]+)"?/i)
if (normalMatch && normalMatch[1]) {
return decodeURIComponent(normalMatch[1])
}
return defaultName
},
downloadExportFile(blobData, fileName) {
const blob = blobData instanceof Blob ? blobData : new Blob([blobData], { type: 'application/octet-stream' })
const downloadUrl = URL.createObjectURL(blob)
const linkNode = document.createElement('a')
linkNode.href = downloadUrl
linkNode.download = fileName
document.body.appendChild(linkNode)
linkNode.click()
document.body.removeChild(linkNode)
URL.revokeObjectURL(downloadUrl)
},
openEditDialog(row) {
this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL' } : { orderNo: '', projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: true, nodeReportMode: 'PARALLEL', nodeList: [] }
this.setUp.reviewFlag = true

72
src/views/modules/longtron/production-plan-machining-task.vue

@ -27,6 +27,7 @@
<el-button @click="searchTable('Y')" plain class="search-btn">查询</el-button>
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button>
<el-button @click="openEditDialog()" plain class="add-btn">新增任务单</el-button>
<el-button @click="exportTaskData()" plain class="search-btn" :loading="exportLoading">{{ exportLoading ? '导出中...' : '导出' }}</el-button>
</el-form-item>
<el-form-item label=" " class="query-finish-item">
<el-button
@ -365,7 +366,7 @@
</template>
<script>
import { deleteMachiningTask, finishMachiningTask, getMachiningTaskList, getNodeAssigneeList, getNodeAssigneeUsers, getReportLogList, reportMachiningTaskNode, reportWorkNodeWithMedia, saveMachiningTask, saveNodeAssignee } from '@/api/longchuang/productionPlan'
import { deleteMachiningTask, exportMachiningTask, finishMachiningTask, getMachiningTaskList, getNodeAssigneeList, getNodeAssigneeUsers, getReportLogList, reportMachiningTaskNode, reportWorkNodeWithMedia, saveMachiningTask, saveNodeAssignee } from '@/api/longchuang/productionPlan'
import { getOssVideoStreamUrl, previewOssFileById2, queryOssFilePlus, removeOss } from '@/api/oss/oss'
export default {
@ -397,6 +398,7 @@ export default {
pageSize: 20,
totalPage: 0,
dataListLoading: false,
exportLoading: false,
tableHeight: (window.innerHeight - 320) / 2
}
},
@ -786,6 +788,74 @@ export default {
this.searchData = { modelNo: '', materialName: '', materialSpec: '', status: '', planStartDate: '', planEndDate: '', page: 1, limit: 20 }
this.searchTable('Y')
},
async exportTaskData() {
if (this.exportLoading) {
return
}
this.exportLoading = true
try {
const response = await exportMachiningTask({ ...this.searchData })
const contentType = String((response.headers && response.headers['content-type']) || '').toLowerCase()
if (contentType.indexOf('application/json') > -1 || contentType.indexOf('text/plain') > -1 || contentType.indexOf('text/html') > -1) {
const errorMsg = await this.resolveExportErrorMessage(response.data)
this.$message.error(errorMsg)
return
}
const fileName = this.resolveExportFileName(response, '机加工任务单')
this.downloadExportFile(response.data, fileName)
this.$message.success('导出成功')
} catch (e) {
this.$message.error('导出失败')
} finally {
this.exportLoading = false
}
},
async resolveExportErrorMessage(blobData) {
if (!(blobData instanceof Blob)) {
return '导出失败'
}
try {
const text = await blobData.text()
if (!text) {
return '导出失败'
}
try {
const json = JSON.parse(text)
return json.msg || json.message || '导出失败'
} catch (e) {
return text.length < 200 ? text : '导出失败'
}
} catch (e) {
return '导出失败'
}
},
resolveExportFileName(response, prefix) {
const disposition = String((response.headers && response.headers['content-disposition']) || '')
const defaultName = `${prefix}_${this.dayjs().format('YYYYMMDDHHmmss')}.xlsx`
if (!disposition) {
return defaultName
}
const utf8Match = disposition.match(/filename\*=utf-8''([^;]+)/i)
if (utf8Match && utf8Match[1]) {
return decodeURIComponent(utf8Match[1])
}
const normalMatch = disposition.match(/filename="?([^"]+)"?/i)
if (normalMatch && normalMatch[1]) {
return decodeURIComponent(normalMatch[1])
}
return defaultName
},
downloadExportFile(blobData, fileName) {
const blob = blobData instanceof Blob ? blobData : new Blob([blobData], { type: 'application/octet-stream' })
const downloadUrl = URL.createObjectURL(blob)
const linkNode = document.createElement('a')
linkNode.href = downloadUrl
linkNode.download = fileName
document.body.appendChild(linkNode)
linkNode.click()
document.body.removeChild(linkNode)
URL.revokeObjectURL(downloadUrl)
},
openEditDialog(row) {
this.saveHeaderData = row
? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'SEQUENTIAL' }

72
src/views/modules/longtron/production-plan-renovation-order.vue

@ -27,6 +27,7 @@
<el-button @click="getDataList('Y')" plain class="search-btn">查询</el-button>
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button>
<el-button @click="openEditDialog()" plain class="add-btn">新增改造订单</el-button>
<el-button @click="exportOrderData()" plain class="search-btn" :loading="exportLoading">{{ exportLoading ? '导出中...' : '导出' }}</el-button>
</el-form-item>
<el-form-item label=" " class="query-finish-item">
<el-button
@ -341,7 +342,7 @@
</template>
<script>
import { deleteRenovationOrder, finishRenovationOrder, getNodeAssigneeList, getNodeAssigneeUsers, getRenovationOrderList, getReportLogList, reportRenovationOrderNode, saveNodeAssignee, saveRenovationOrder } from '@/api/longchuang/productionPlan'
import { deleteRenovationOrder, exportRenovationOrder, finishRenovationOrder, getNodeAssigneeList, getNodeAssigneeUsers, getRenovationOrderList, getReportLogList, reportRenovationOrderNode, saveNodeAssignee, saveRenovationOrder } from '@/api/longchuang/productionPlan'
import { getOssVideoStreamUrl, previewOssFileById2, queryOssFilePlus, removeOss } from '@/api/oss/oss'
export default {
@ -372,6 +373,7 @@ export default {
pageSize: 20,
totalPage: 0,
dataListLoading: false,
exportLoading: false,
tableHeight: (window.innerHeight - 320) / 2
}
},
@ -710,6 +712,74 @@ export default {
this.searchData = { projectNo: '', modelNo: '', color: '', status: '', deliveryStartDate: '', deliveryEndDate: '', page: 1, limit: 20 }
this.getDataList('Y')
},
async exportOrderData() {
if (this.exportLoading) {
return
}
this.exportLoading = true
try {
const response = await exportRenovationOrder({ ...this.searchData })
const contentType = String((response.headers && response.headers['content-type']) || '').toLowerCase()
if (contentType.indexOf('application/json') > -1 || contentType.indexOf('text/plain') > -1 || contentType.indexOf('text/html') > -1) {
const errorMsg = await this.resolveExportErrorMessage(response.data)
this.$message.error(errorMsg)
return
}
const fileName = this.resolveExportFileName(response, '改造项目订单')
this.downloadExportFile(response.data, fileName)
this.$message.success('导出成功')
} catch (e) {
this.$message.error('导出失败')
} finally {
this.exportLoading = false
}
},
async resolveExportErrorMessage(blobData) {
if (!(blobData instanceof Blob)) {
return '导出失败'
}
try {
const text = await blobData.text()
if (!text) {
return '导出失败'
}
try {
const json = JSON.parse(text)
return json.msg || json.message || '导出失败'
} catch (e) {
return text.length < 200 ? text : '导出失败'
}
} catch (e) {
return '导出失败'
}
},
resolveExportFileName(response, prefix) {
const disposition = String((response.headers && response.headers['content-disposition']) || '')
const defaultName = `${prefix}_${this.dayjs().format('YYYYMMDDHHmmss')}.xlsx`
if (!disposition) {
return defaultName
}
const utf8Match = disposition.match(/filename\*=utf-8''([^;]+)/i)
if (utf8Match && utf8Match[1]) {
return decodeURIComponent(utf8Match[1])
}
const normalMatch = disposition.match(/filename="?([^"]+)"?/i)
if (normalMatch && normalMatch[1]) {
return decodeURIComponent(normalMatch[1])
}
return defaultName
},
downloadExportFile(blobData, fileName) {
const blob = blobData instanceof Blob ? blobData : new Blob([blobData], { type: 'application/octet-stream' })
const downloadUrl = URL.createObjectURL(blob)
const linkNode = document.createElement('a')
linkNode.href = downloadUrl
linkNode.download = fileName
document.body.appendChild(linkNode)
linkNode.click()
document.body.removeChild(linkNode)
URL.revokeObjectURL(downloadUrl)
},
openEditDialog(row) {
this.saveHeaderData = row ? { ...row, autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'SEQUENTIAL' } : { orderNo: '', projectNo: '', modelNo: '', color: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: true, nodeReportMode: 'SEQUENTIAL', nodeList: [] }
this.setUp.reviewFlag = true

Loading…
Cancel
Save