代码更新:

1. 增加工作流导入功能
This commit is contained in:
梁州 2024-10-13 16:39:22 +08:00
parent fea5ae7036
commit f2ad908e2a
5 changed files with 274 additions and 24 deletions

View File

@ -63,6 +63,15 @@ const uploadExcelOrders = (data) => {
}) })
} }
const uploadWorkFlow = (data) => {
return request({
url: '/excel/uploadWorkFlow',
method: 'post',
data: data,
timeout: 600000
})
}
const uploadExcelInventoryList = (data) => { const uploadExcelInventoryList = (data) => {
return request({ return request({
url: '/excel/uploadInventoryList', url: '/excel/uploadInventoryList',
@ -77,7 +86,8 @@ const downloadStockExcel = (data) => {
url: '/excel/downloadStockExcel', url: '/excel/downloadStockExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -86,7 +96,8 @@ const downloadInRecordExcel = (data) => {
url: '/excel/downloadInRecordExcel', url: '/excel/downloadInRecordExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -95,7 +106,8 @@ const downloadOutRecordExcel = (data) => {
url: '/excel/downloadOutRecordExcel', url: '/excel/downloadOutRecordExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -104,7 +116,8 @@ const downloadInventoryRecordExcel = (data) => {
url: '/excel/downloadInventoryRecordExcel', url: '/excel/downloadInventoryRecordExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -113,7 +126,8 @@ const downloadGoodsExcel = (data) => {
url: '/excel/downloadGoodsExcel', url: '/excel/downloadGoodsExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -122,7 +136,8 @@ const downloadVehicleExcel = (data) => {
url: '/excel/downloadVehicleExcel', url: '/excel/downloadVehicleExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -131,7 +146,8 @@ const downloadLocationsExcel = (data) => {
url: '/excel/downloadLocationsExcel', url: '/excel/downloadLocationsExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -149,7 +165,8 @@ const downloadClcKanbanRequirementExcel = (data) => {
url: '/excel/downloadClcKanbanRequirementExcel', url: '/excel/downloadClcKanbanRequirementExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -158,7 +175,8 @@ const downloadWorkSummaryExcel = (data) => {
url: '/excel/downloadWorkSummaryExcel', url: '/excel/downloadWorkSummaryExcel',
method: 'post', method: 'post',
responseType: 'blob', responseType: 'blob',
data: data data: data,
timeout: 600000
}) })
} }
@ -180,5 +198,6 @@ export {
downloadClcKanbanRequirementExcel, downloadClcKanbanRequirementExcel,
downloadWorkSummaryExcel, downloadWorkSummaryExcel,
uploadExcelBaseGoods, uploadExcelBaseGoods,
uploadExcelKanban uploadExcelKanban,
uploadWorkFlow
} }

View File

@ -0,0 +1,94 @@
<template>
<el-upload ref="uploadRef" :on-preview="previewFile" :limit="1" :on-change="changeFile" :auto-upload="false"
:data="uploadForm.data">
<template #trigger>
<el-button type="primary">选取工作流文件</el-button>
</template>
<el-button style="margin-left: 10px;" type="success" @click="uploadFiles">上传工作流数据</el-button>
</el-upload>
</template>
<script setup>
import store from '@/store'
import { ref, reactive } from 'vue';
import { uploadWorkFlow } from '@/api/excel.js'
import { errorBox, successBox } from '@/utils/myMessageBox';
import { sizeFormatter } from '@/utils/formatter.js'
import loading from '@/utils/loading.js'
import { getHashString } from '@/utils/hashUtils.js'
var currentHash = ''
const file = ref()
const uploadForm = reactive({
data: {
fileId: '',
name: '',
type: '',
size: null,
hash: '',
userName: store.getters.getUserName
}
})
const changeFile = (uploadFile) => {
file.value = uploadFile
uploadForm.data = {
fileId: file.value.raw.uid,
name: file.value.raw.name,
type: file.value.raw.type,
size: sizeFormatter(file.value.raw.size),
hash: getHashString(uploadFile),
userName: store.getters.getUserName
}
}
const uploadRef = ref()
const uploadFiles = () => {
if (uploadForm == undefined || file.value == undefined) {
errorBox('请选择文件之后再上传')
return
}
if (currentHash != '' && currentHash == uploadForm.data.hash) {
errorBox('请勿重复上传')
return
}
currentHash = uploadForm.data.hash
const jsonStr = JSON.stringify(uploadForm.data);
const blob = new Blob([jsonStr], {
type: 'application/json'
});
let formData = new FormData();
// file.value.rawfilefile.valueProxy
formData.append("obj", blob);
formData.append("file", file.value.raw);
loading.open('导入中...')
uploadWorkFlow(formData).then(res => {
loading.close()
currentHash = ''
if (res.data.code == 0) {
successBox(res.data.message)
clearFileInfos()
} else {
errorBox(res.data.message)
}
}).catch(err => {
loading.close()
currentHash = ''
console.log(err)
errorBox('上传错误')
})
}
const clearFileInfos = () => {
//
uploadRef.value.clearFiles()
uploadForm.data = {
fileId: '',
name: '',
type: '',
size: null,
hash: '',
userName: store.getters.getUserName
}
file.value = undefined
}
const previewFile = () => {
}
</script>
<style scoped></style>

View File

@ -2,8 +2,8 @@
<div style="margin-bottom: 15px"> <div style="margin-bottom: 15px">
<el-config-provider :locale="zhCn"> <el-config-provider :locale="zhCn">
<el-row> <el-row>
<el-input v-model="vehicleIdQuery" style="width: 256px; margin-right: 10px;" placeholder="载具号" /> <el-input v-model="vehicleIdQuery" style="width: 256px; margin-right: 10px;" placeholder="号" />
<el-input v-model="goodsIdQuery" style="width: 256px; margin-right: 10px;" placeholder="号" /> <el-input v-model="goodsIdQuery" style="width: 256px; margin-right: 10px;" placeholder="料号" />
<el-button type="primary" @click="search()">搜索</el-button> <el-button type="primary" @click="search()">搜索</el-button>
<el-button type="warning" @click="reset()">重置</el-button> <el-button type="warning" @click="reset()">重置</el-button>
<el-button type="success" @click="exportExcel()">导出记录</el-button> <el-button type="success" @click="exportExcel()">导出记录</el-button>
@ -12,20 +12,26 @@
<el-table :data="tasks" stripe border v-loading="loading" style="width: 100%" max-height="684px" <el-table :data="tasks" stripe border v-loading="loading" style="width: 100%" max-height="684px"
class="table-class" :header-cell-style="{ 'text-align': 'center' }" class="table-class" :header-cell-style="{ 'text-align': 'center' }"
:cell-style="{ 'text-align': 'center' }"> :cell-style="{ 'text-align': 'center' }">
<el-table-column prop="taskType" label="任务类型" fixed="left" :formatter="taskTypeFormat" <el-table-column width="65px" fixed="left">
min-width="120px" /> <template v-slot="scope">
<el-table-column prop="goodsType" label="型号" min-width="120px" /> <el-radio :label="scope.row.taskId" v-model="taskId">&nbsp;</el-radio>
<el-table-column prop="specification" label="规格" min-width="120px" /> </template>
<el-table-column prop="batchNo" label="批次号" min-width="120px" /> </el-table-column>
<el-table-column prop="taskGroup" label="任务单号" min-width="120px" /> <el-table-column prop="taskId" label="任务号" fixed="left" show-overflow-tooltip min-width="120px" />
<el-table-column prop="taskType" label="任务类型" fixed="left" :formatter="taskTypeFormat" min-width="120px" />
<el-table-column prop="vehicleId" label="箱号" min-width="120px" show-overflow-tooltip />
<el-table-column prop="goodsRelated.goodsId" label="料号" min-width="120px" show-overflow-tooltip />
<el-table-column prop="goodsRelated.goodsName" label="料名" min-width="120px" show-overflow-tooltip />
<el-table-column prop="taskGroup" label="任务组" min-width="120px" show-overflow-tooltip />
<el-table-column prop="origin" label="起点" min-width="120px" /> <el-table-column prop="origin" label="起点" min-width="120px" />
<el-table-column prop="destination" label="终点" min-width="120px" /> <el-table-column prop="destination" label="终点" min-width="120px" />
<el-table-column prop="operateNum" label="操作数量" min-width="120px" /> <el-table-column prop="goodsRelated.opNum" label="操作数量" min-width="120px" />
<el-table-column prop="totalNum" label="库存数量" min-width="120px" /> <el-table-column prop="goodsRelated.originNum" label="库存数量" min-width="120px" />
<el-table-column prop="taskPriority" label="任务优先级" min-width="120px" /> <el-table-column prop="taskPriority" label="任务优先级" min-width="120px" />
<el-table-column prop="preTask" label="前置任务" min-width="120px" show-overflow-tooltip /> <el-table-column prop="preTask" label="前置任务" min-width="120px" show-overflow-tooltip />
<el-table-column prop="createTime" label="创建时间" :formatter="timeFormat" min-width="120px" /> <el-table-column prop="createTime" label="创建时间" :formatter="timeFormat" min-width="120px" show-overflow-tooltip />
<!-- <el-table-column prop="userName" label="操作人员姓名" min-width="120px" /> --> <el-table-column prop="createTime" label="运行时长" :formatter="dueFormat" min-width="120px" show-overflow-tooltip />
<el-table-column prop="userName" label="操作人员姓名" min-width="120px" />
<el-table-column prop="taskStatus" label="任务状态" fixed="right" :formatter="taskStatusFormat" <el-table-column prop="taskStatus" label="任务状态" fixed="right" :formatter="taskStatusFormat"
min-width="120px" /> min-width="120px" />
</el-table> </el-table>

View File

@ -13,7 +13,7 @@
<span class="station-text">工作站</span> <span class="station-text">工作站</span>
</div> </div>
<div class="station-no-div"> <div class="station-no-div">
<span class="station-no-text">{{ standId }}</span> <span class="station-no-text" @click="showStockDealDialog()">{{ standId }}</span>
</div> </div>
</fieldset> </fieldset>
<fieldset class="main-area"> <fieldset class="main-area">
@ -68,6 +68,25 @@
</el-form> </el-form>
</fieldset> </fieldset>
</div> </div>
<el-dialog v-model="showBoxListDialogFlag" title="大盒子列表" width="40%" draggable :show-close="true">
<el-table :data="bixBoxList" stripe border v-loading="loading" class="table-class"
highlight-current-row max-height="650px" @row-click="getCurrentRow"
:header-cell-style="{ 'text-align': 'center' }" :cell-style="{ 'text-align': 'center' }">
<el-table-column width="65px" fixed="left">
<template v-slot="scope">
<el-radio :label="scope.row.bigBoxNo" v-model="bigBoxNo">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column prop="bigBoxNo" label="大盒子号" fixed="left" min-width="120px" show-overflow-tooltip />
<el-table-column prop="standId" label="站台号" min-width="120px" show-overflow-tooltip />
<el-table-column prop="boxQuantity" label="需要数量" min-width="120px" show-overflow-tooltip />
</el-table>
<br />
<el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize" :page-sizes="[10, 25, 50]"
:small="false" :disabled="false" :background="false" :default-page-size="10"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="search"
@current-change="search" />
</el-dialog>
</el-container> </el-container>
</el-config-provider> </el-config-provider>
</template> </template>
@ -96,6 +115,13 @@ export default {
sumOfOrders: null sumOfOrders: null
}), }),
rules: reactive({}), rules: reactive({}),
showBoxListDialogFlag: false,
bixBoxList: [],
currentPage: 1,
pageSize: 10,
total: 0,
loading: true,
bigBoxNo: '',
} }
}, },
mounted() { mounted() {
@ -160,7 +186,41 @@ export default {
console.log(err) console.log(err)
errorBox('请求发生异常。') errorBox('请求发生异常。')
}) })
} },
getCurrentRow(row) {
this.bigBoxNo = row.bigBoxNo
},
showStockDealDialog() {
this.dialogVisible = true
// this.search()
},
search() {
this.loading = true
const request = {
pageNo: this.currentPage,
pageSize: this.pageSize,
standId: this.standIdQuery.trim(),
workOrder: this.workOrderQuery.trim(),
workCenter: this.workCenterQuery.trim(),
goodsId: this.goodsIdQuery.trim(),
lackStatus: this.lackStatusQuery == -99 ? null : this.lackStatusQuery,
workDate: timeFormatter(this.workDateQuery),
userName: store.getters.getUserName
}
getWorkSummary(request).then(res => {
const tableResponse = res.data
if (tableResponse.code == 0) {
this.workSummaryList = tableResponse.returnData.lists
this.total = tableResponse.returnData.total
} else {
errorBox(tableResponse.message)
}
}).catch(err => {
console.log(err)
errorBox('查询工作总结错误')
})
this.loading = false
},
} }
} }
</script> </script>

View File

@ -18,6 +18,10 @@
<el-button type="primary" @click="search()">搜索</el-button> <el-button type="primary" @click="search()">搜索</el-button>
<el-button type="warning" @click="reset()">重置</el-button> <el-button type="warning" @click="reset()">重置</el-button>
</el-row> </el-row>
<el-row>
<el-button style="background-color: #00CED1; color: #000;"
@click="openUploadDialog()">导入</el-button>
</el-row>
</div> </div>
<br /> <br />
<el-table :data="workFlowList" stripe border v-loading="loading" class="table-class" highlight-current-row <el-table :data="workFlowList" stripe border v-loading="loading" class="table-class" highlight-current-row
@ -154,6 +158,33 @@
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
<el-dialog v-model="uploadDialogVisible" title="工作流" width="40%" draggable :show-close="true">
<fieldset class="title-area">
<legend>上次更新</legend>
<div style="padding: 5px;">
<div style="display: flex; margin-bottom: 10px;">
<div style="display: flex; width: 100%;">
<div style="width: 30%; align-content: center;">时间</div>
<el-input v-model="uploadRecord.uploadTime" readonly />
</div>
<div style="display: flex; width: 100%; margin-left: 5px;">
<div style="width: 30%; align-content: center;">人员</div>
<el-input v-model="uploadRecord.uploadUser" readonly />
</div>
</div>
<div style="display: flex; width: 100%;">
<div style="width: 13%; align-content: center;">文件名</div>
<el-input type="textarea" :rows="1" v-model="uploadRecord.fileName" :maxlength="-1"
:show-word-limit="false" :autosize="{ minRows: 1, maxRows: 4 }" readonly>
</el-input>
</div>
</div>
</fieldset>
<fieldset class="title-area">
<legend>再次更新</legend>
<UploadExcelWorkFlow></UploadExcelWorkFlow>
</fieldset>
</el-dialog>
</el-config-provider> </el-config-provider>
</div> </div>
</template> </template>
@ -166,6 +197,8 @@ import { ElMessage } from 'element-plus'
import { ref, reactive } from 'vue' import { ref, reactive } from 'vue'
import { dateFormatter, timeFormatter } from '@/utils/formatter.js' import { dateFormatter, timeFormatter } from '@/utils/formatter.js'
import { Search } from '@element-plus/icons-vue' import { Search } from '@element-plus/icons-vue'
import UploadExcelWorkFlow from '@/excel/UploadExcelWorkFlow.vue'
import { queryUploadRecord } from '@/api/excel.js'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
</script> </script>
<script> <script>
@ -226,6 +259,12 @@ export default {
label: '已完成' label: '已完成'
} }
], ],
uploadDialogVisible: false,
uploadRecord: reactive({
fileName: '',
uploadTime: '',
uploadUser: ''
}),
} }
}, },
mounted() { mounted() {
@ -339,6 +378,38 @@ export default {
getCurrentRow(row) { getCurrentRow(row) {
this.workFlowId = row.workFlowId this.workFlowId = row.workFlowId
}, },
openUploadDialog() {
//
const param = {
userName: store.getters.getUserName,
fileDescription: 'WORKFLOW',
isAsc: false,
sortBy: 'upload_time'
}
queryUploadRecord(param).then(res => {
if (res.data.code == 0) {
if (res.data.returnData.total > 0) {
this.uploadRecord = res.data.returnData.lists[0]
} else {
this.uploadRecord = reactive({
fileName: '',
uploadTime: '',
uploadUser: ''
})
}
} else {
this.uploadRecord = reactive({
fileName: '',
uploadTime: '',
uploadUser: ''
})
}
}).catch(err => {
console.log(err)
errorBox('发生异常')
})
this.uploadDialogVisible = true
},
}, },
} }
</script> </script>