Browse Source

仅上传

master
han\hanst 3 days ago
parent
commit
f15dfae0fd
  1. 67
      src/views/modules/longtron/production-plan-cable-cop-task.vue
  2. 49
      src/views/modules/longtron/production-plan-home-order.vue
  3. 53
      src/views/modules/longtron/production-plan-machining-task.vue
  4. 66
      src/views/modules/longtron/production-plan-renovation-order.vue
  5. 135
      src/views/modules/longtron/production-work-report.vue
  6. 2
      src/views/modules/longtron/screen-renovation-progress.vue
  7. 2
      src/views/modules/longtron/screen-whole-lift-progress.vue

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

@ -2,7 +2,7 @@
<div class="mod-config">
<el-form :inline="true" label-position="top" class="query-form">
<el-form-item label="项目号">
<el-input v-model="searchData.projectNo" clearable placeholder="请输入项目号" style="width: 150px"></el-input>
<el-input v-model="searchData.projectNo" clearable placeholder="请输入项目号" style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="任务类型">
<el-select v-model="searchData.taskType" clearable placeholder="全部" style="width: 120px">
@ -17,29 +17,38 @@
</el-select>
</el-form-item>
<el-form-item label="物料名称">
<el-input v-model="searchData.materialName" clearable placeholder="请输入物料名称" style="width: 140px"></el-input>
<el-input v-model="searchData.materialName" clearable placeholder="请输入物料名称" style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="规格">
<el-input v-model="searchData.materialSpec" clearable placeholder="请输入规格" style="width: 140px"></el-input>
<el-input v-model="searchData.materialSpec" clearable placeholder="请输入规格" style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="searchData.status" clearable placeholder="全部" style="width: 120px">
<el-select v-model="searchData.status" clearable placeholder="全部" style="width: 110px">
<el-option label="已排产" value="已排产"></el-option>
<el-option label="进行中" value="进行中"></el-option>
<el-option label="已完成" value="已完成"></el-option>
</el-select>
</el-form-item>
<el-form-item label="计划完成日期">
<el-date-picker v-model="searchData.planStartDate" type="date" value-format="yyyy-MM-dd" placeholder="开始" style="width: 130px"></el-date-picker>
<el-date-picker v-model="searchData.planStartDate" type="date" value-format="yyyy-MM-dd" placeholder="开始" style="width: 120px"></el-date-picker>
</el-form-item>
<el-form-item label="至">
<el-date-picker v-model="searchData.planEndDate" type="date" value-format="yyyy-MM-dd" placeholder="结束" style="width: 130px"></el-date-picker>
<el-date-picker v-model="searchData.planEndDate" type="date" value-format="yyyy-MM-dd" placeholder="结束" style="width: 120px"></el-date-picker>
</el-form-item>
<el-form-item label=" " style="margin-top: -11px">
<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-form-item>
<el-form-item label=" " class="query-finish-item">
<el-button
@click="finishTask()"
plain
class="search-btn"
:disabled="!selectedOrder.orderNo || selectedOrder.status === '已完成'">
完工
</el-button>
</el-form-item>
</el-form>
<el-table
@ -56,7 +65,6 @@
<template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)" v-if="scope.row.status === '已排产'">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a>
<a type="text" @click="finishTask(scope.row)" v-if="scope.row.status !== '已完成'">完工</a>
<a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)" v-if="scope.row.status !== '已完成'">删除</a>
</template>
</el-table-column>
@ -567,20 +575,31 @@ export default {
row.finishDate = ''
},
finishTask(row) {
finishCableCopTask({ orderNo: row.orderNo }).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.searchTable()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
row.status = '已完成'
row.finishDate = this.dayjs().format('YYYY-MM-DD')
row.reportQty = row.taskQty == null ? Number(row.reportQty || 0) : row.taskQty
row.nodeList = row.nodeList.map(item => ({ ...item, status: '已完成' }))
row.currentNode = '全部完成'
row.nodeDoneCount = row.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
const targetRow = row || this.selectedOrder
if (!targetRow || !targetRow.orderNo) {
this.$message.warning('请先选择一条任务记录')
return
}
if (targetRow.status === '已完成') {
this.$message.warning('该任务单已完工')
return
}
this.$confirm('确定将该任务单标记为完工吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
finishCableCopTask({ orderNo: targetRow.orderNo }).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.searchTable()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
targetRow.status = '已完成'
targetRow.finishDate = this.dayjs().format('YYYY-MM-DD')
targetRow.reportQty = targetRow.taskQty == null ? Number(targetRow.reportQty || 0) : targetRow.taskQty
targetRow.nodeList = targetRow.nodeList.map(item => ({ ...item, status: '已完成' }))
targetRow.currentNode = '全部完成'
targetRow.nodeDoneCount = targetRow.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
}).catch(() => {})
},
deleteTask(row) {
this.$confirm('确定删除该任务单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
@ -685,6 +704,12 @@ export default {
margin-bottom: 12px;
}
.query-finish-item {
margin-top: -11px;
float: right;
margin-right: 0 !important;
}
.query-form >>> .el-form-item__label {
color: #333;
font-size: 13px;

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

@ -30,6 +30,8 @@
<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-form-item>
<el-form-item label=" " class="query-finish-item">
<el-button
@click="finishOrder()"
plain
@ -291,11 +293,14 @@
</el-tag>
</template>
</el-table-column>
<el-table-column label="步骤" width="120" align="center">
<template slot-scope="scope">{{ getMediaStepLabel(scope.row) }}</template>
</el-table-column>
<el-table-column label="上传时间" min-width="170" align="center">
<template slot-scope="scope">{{ scope.row.createDate || '-' }}</template>
</el-table-column>
</el-table>
<el-empty v-else description="当前日志暂无影像文件"></el-empty>
<el-empty v-else description="当前节点暂无影像文件"></el-empty>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="mediaDialogVisible = false">关闭</el-button>
@ -467,8 +472,7 @@ export default {
try {
const { data } = await queryOssFilePlus({
orderRef1: this.selectedOrder.orderNo || row.orderNo,
orderRef2: row.nodeCode,
orderRef3: row.logNo
orderRef2: row.nodeCode
})
this.mediaFileList = (data && data.code === 0 ? (data.rows || []) : []).map(item => ({
...item,
@ -539,6 +543,11 @@ export default {
}
return '其他'
},
getMediaStepLabel(fileRow) {
const step = String((fileRow && fileRow.orderRef6) || '').replace(/\s+/g, '')
const stepList = ['1平台箱', '2门箱', '3背景墙箱', '4框架箱', '5钣金箱', '6铝型材箱']
return stepList.includes(step) ? step : '-'
},
buildPreviewMimeType(fileRow, kind) {
const ext = this.getMediaExt(fileRow)
if (kind === 'image') {
@ -804,19 +813,21 @@ export default {
this.$message.warning('该订单已完工')
return
}
finishHomeLiftOrder({ orderNo: targetRow.orderNo }).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.getDataList()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
targetRow.status = '已完成'
targetRow.finishDate = this.dayjs().format('YYYY-MM-DD')
targetRow.nodeList = targetRow.nodeList.map(item => ({ ...item, status: '已完成' }))
targetRow.currentNode = '全部完成'
targetRow.nodeDoneCount = targetRow.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
this.$confirm('确定将该订单标记为完工吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
finishHomeLiftOrder({ orderNo: targetRow.orderNo }).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.getDataList()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
targetRow.status = '已完成'
targetRow.finishDate = this.dayjs().format('YYYY-MM-DD')
targetRow.nodeList = targetRow.nodeList.map(item => ({ ...item, status: '已完成' }))
targetRow.currentNode = '全部完成'
targetRow.nodeDoneCount = targetRow.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
}).catch(() => {})
},
deleteOrder(row) {
this.$confirm('确定删除该订单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
@ -921,6 +932,12 @@ export default {
margin-bottom: 12px;
}
.query-finish-item {
margin-top: -11px;
float: right;
margin-right: 0 !important;
}
.query-form >>> .el-form-item__label {
color: #333;
font-size: 13px;

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

@ -28,6 +28,15 @@
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button>
<el-button @click="openEditDialog()" plain class="add-btn">新增任务单</el-button>
</el-form-item>
<el-form-item label=" " class="query-finish-item">
<el-button
@click="finishTask()"
plain
class="search-btn"
:disabled="!selectedOrder.orderNo || selectedOrder.status === '已完成'">
完工
</el-button>
</el-form-item>
</el-form>
<el-table
@ -44,7 +53,6 @@
<template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)" v-if="scope.row.status === '已排产'">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a>
<a type="text" @click="finishTask(scope.row)" v-if="scope.row.status !== '已完成'">完工</a>
<a type="text" style="color:#F56C6C" @click="deleteTask(scope.row)" v-if="scope.row.status !== '已完成'">删除</a>
</template>
</el-table-column>
@ -485,19 +493,30 @@ export default {
row.finishDate = ''
},
finishTask(row) {
finishMachiningTask({ orderNo: row.orderNo }).then(({ data }) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.searchTable()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
row.status = '已完成'
row.finishDate = this.dayjs().format('YYYY-MM-DD')
row.nodeList = row.nodeList.map(item => ({ ...item, status: '已完成' }))
row.currentNode = '全部完成'
row.nodeDoneCount = row.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
const targetRow = row || this.selectedOrder
if (!targetRow || !targetRow.orderNo) {
this.$message.warning('请先选择一条任务记录')
return
}
if (targetRow.status === '已完成') {
this.$message.warning('该任务单已完工')
return
}
this.$confirm('确定将该任务单标记为完工吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
finishMachiningTask({ orderNo: targetRow.orderNo }).then(({ data }) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.searchTable()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
targetRow.status = '已完成'
targetRow.finishDate = this.dayjs().format('YYYY-MM-DD')
targetRow.nodeList = targetRow.nodeList.map(item => ({ ...item, status: '已完成' }))
targetRow.currentNode = '全部完成'
targetRow.nodeDoneCount = targetRow.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
}).catch(() => {})
},
deleteTask(row) {
this.$confirm('确定删除该任务单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
@ -602,6 +621,12 @@ export default {
margin-bottom: 12px;
}
.query-finish-item {
margin-top: -11px;
float: right;
margin-right: 0 !important;
}
.query-form >>> .el-form-item__label {
color: #333;
font-size: 13px;

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

@ -28,6 +28,15 @@
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button>
<el-button @click="openEditDialog()" plain class="add-btn">新增改造订单</el-button>
</el-form-item>
<el-form-item label=" " class="query-finish-item">
<el-button
@click="finishOrder()"
plain
class="search-btn"
:disabled="!selectedOrder.orderNo || selectedOrder.status === '已完成'">
完工
</el-button>
</el-form-item>
</el-form>
<el-table
@ -44,7 +53,6 @@
<template slot-scope="scope">
<a type="text" @click="openEditDialog(scope.row)" v-if="scope.row.status === '已排产'">修改</a>
<a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成' && scope.row.currentNode!=='全部完成'">分配人员</a>
<a type="text" @click="finishOrder(scope.row)" v-if="scope.row.status !== '已完成'">完工</a>
<a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)" v-if="scope.row.status !== '已完成'">删除</a>
</template>
</el-table-column>
@ -282,11 +290,14 @@
</el-tag>
</template>
</el-table-column>
<el-table-column label="步骤" width="120" align="center">
<template slot-scope="scope">{{ getMediaStepLabel(scope.row) }}</template>
</el-table-column>
<el-table-column label="上传时间" min-width="170" align="center">
<template slot-scope="scope">{{ scope.row.createDate || '-' }}</template>
</el-table-column>
</el-table>
<el-empty v-else description="当前日志暂无影像文件"></el-empty>
<el-empty v-else description="当前节点暂无影像文件"></el-empty>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="mediaDialogVisible = false">关闭</el-button>
@ -495,8 +506,7 @@ export default {
try {
const { data } = await queryOssFilePlus({
orderRef1: this.selectedOrder.orderNo || row.orderNo,
orderRef2: row.nodeCode,
orderRef3: row.logNo
orderRef2: row.nodeCode
})
this.mediaFileList = (data && data.code === 0 ? (data.rows || []) : []).map(item => ({
...item,
@ -567,6 +577,11 @@ export default {
}
return '其他'
},
getMediaStepLabel(fileRow) {
const step = String((fileRow && fileRow.orderRef6) || '').replace(/\s+/g, '')
const stepList = ['1平台箱', '2门箱', '3背景墙箱', '4框架箱', '5钣金箱', '6铝型材箱']
return stepList.includes(step) ? step : '-'
},
buildPreviewMimeType(fileRow, kind) {
const ext = this.getMediaExt(fileRow)
if (kind === 'image') {
@ -820,19 +835,30 @@ export default {
row.finishDate = ''
},
finishOrder(row) {
finishRenovationOrder({ orderNo: row.orderNo }).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.getDataList()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
row.status = '已完成'
row.finishDate = this.dayjs().format('YYYY-MM-DD')
row.nodeList = row.nodeList.map(item => ({ ...item, status: '已完成' }))
row.currentNode = '全部完成'
row.nodeDoneCount = row.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
const targetRow = row || this.selectedOrder
if (!targetRow || !targetRow.orderNo) {
this.$message.warning('请先选择一条订单记录')
return
}
if (targetRow.status === '已完成') {
this.$message.warning('该订单已完工')
return
}
this.$confirm('确定将该订单标记为完工吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
finishRenovationOrder({ orderNo: targetRow.orderNo }).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '完工成功')
this.getDataList()
} else this.$message.error(data.msg || '完工失败')
}).catch(() => {
targetRow.status = '已完成'
targetRow.finishDate = this.dayjs().format('YYYY-MM-DD')
targetRow.nodeList = targetRow.nodeList.map(item => ({ ...item, status: '已完成' }))
targetRow.currentNode = '全部完成'
targetRow.nodeDoneCount = targetRow.nodeTotalCount
this.$message.success('后端未完成,已在前端演示完工')
})
}).catch(() => {})
},
deleteOrder(row) {
this.$confirm('确定删除该改造订单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
@ -937,6 +963,12 @@ export default {
margin-bottom: 12px;
}
.query-finish-item {
margin-top: -11px;
float: right;
margin-right: 0 !important;
}
.query-form >>> .el-form-item__label {
color: #333;
font-size: 13px;

135
src/views/modules/longtron/production-work-report.vue

@ -197,9 +197,24 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="requiresPackStep(reportData.orderType, reportData.nodeCode, reportData.nodeName)">
<el-col :span="24">
<el-form-item label="打包步骤" required>
<el-select v-model="reportData.mediaStep" clearable placeholder="请选择当前上传步骤" style="width: 100%">
<el-option
v-for="item in packStepOptionList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<div class="media-capture-tip">请按步骤分别上传影像便于在查看文件中区分每一步</div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="requiresMediaUpload(reportData.orderType, reportData.nodeCode, reportData.nodeName)">
<el-col :span="24">
<el-form-item label="报工影像(支持拍照和录像,可多次采集)">
<el-form-item label="报工影像(支持拍照和录像,可多次采集,可仅上传不报工)">
<div class="media-layout">
<div class="media-layout-left">
<div class="camera-preview-wrap">
@ -285,8 +300,24 @@
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" class="reset-btn" plain @click="closeReportDialog">取消</el-button>
<el-button size="mini" type="primary" plain :loading="reportLoading" @click="submitNodeReport">
{{ reportLoading ? (requiresMediaUpload(reportData.orderType, reportData.nodeCode, reportData.nodeName) ? '上传中...' : '提交中...') : (requiresMediaUpload(reportData.orderType, reportData.nodeCode, reportData.nodeName) ? '上传并报工' : '确认报工') }}
<el-button
v-if="requiresMediaUpload(reportData.orderType, reportData.nodeCode, reportData.nodeName)"
size="mini"
type="warning"
plain
:loading="reportLoading && reportAction === 'UPLOAD_ONLY'"
:disabled="reportLoading"
@click="submitNodeMediaOnly">
{{ reportLoading && reportAction === 'UPLOAD_ONLY' ? '上传中...' : '仅上传影像' }}
</el-button>
<el-button
size="mini"
type="primary"
plain
:loading="reportLoading && reportAction !== 'UPLOAD_ONLY'"
:disabled="reportLoading && reportAction === 'UPLOAD_ONLY'"
@click="submitNodeReport">
{{ reportLoading ? (requiresMediaUpload(reportData.orderType, reportData.nodeCode, reportData.nodeName) ? (reportAction === 'REPORT_ONLY' ? '提交中...' : '上传并报工中...') : '提交中...') : (requiresMediaUpload(reportData.orderType, reportData.nodeCode, reportData.nodeName) ? (hasUploadedMediaOnly && capturedMediaList.length === 0 ? '确认报工' : '上传并报工') : '确认报工') }}
</el-button>
</div>
</el-dialog>
@ -355,6 +386,17 @@ export default {
historyDialogVisible: false,
historyOrder: {},
reportLoading: false,
reportAction: '',
hasUploadedMediaOnly: false,
uploadedMediaNodeFlagMap: {},
packStepOptionList: [
{ label: '1平台箱', value: '1平台箱' },
{ label: '2门箱', value: '2门箱' },
{ label: '3背景墙箱', value: '3背景墙箱' },
{ label: '4框架箱', value: '4框架箱' },
{ label: '5钣金箱', value: '5钣金箱' },
{ label: '6铝型材箱', value: '6铝型材箱' }
],
reportData: {
orderNo: '',
orderType: '',
@ -363,7 +405,8 @@ export default {
nodeName: '',
reportQty: 1,
reportBy: '',
remark: ''
remark: '',
mediaStep: ''
},
cameraActive: false,
cameraStream: null,
@ -573,6 +616,14 @@ export default {
const normalizedName = String(nodeName).replace(/\s+/g, '')
return config.nameList.some(name => name.replace(/\s+/g, '') === normalizedName)
},
requiresPackStep (orderType, nodeCode, nodeName) {
if (!this.requiresMediaUpload(orderType, nodeCode, nodeName)) {
return false
}
const normalizedCode = String(nodeCode || '').trim()
const normalizedName = String(nodeName || '').replace(/\s+/g, '')
return normalizedCode === 'pack' || normalizedName === '打包'
},
directReportNode (order, node) {
this.reportData = {
orderNo: order.orderNo,
@ -582,11 +633,13 @@ export default {
nodeName: node.nodeName,
reportQty: 1,
reportBy: this.$store.state.user.userDisplay || this.$store.state.user.name || '当前用户',
remark: ''
remark: '',
mediaStep: ''
}
this.submitNodeReport()
},
openReportDialog (order, node, forceManualQty = false) {
const mediaNodeKey = this.buildMediaNodeKey(order.orderNo, node.nodeCode)
this.reportData = {
orderNo: order.orderNo,
orderType: order.orderType,
@ -595,14 +648,19 @@ export default {
nodeName: node.nodeName,
reportQty: forceManualQty ? '' : 1,
reportBy: this.$store.state.user.userDisplay || this.$store.state.user.name || '当前用户',
remark: ''
remark: '',
mediaStep: ''
}
this.reportDialogVisible = true
this.reportAction = ''
this.hasUploadedMediaOnly = !!this.uploadedMediaNodeFlagMap[mediaNodeKey]
this.releaseMediaResources()
this.captureIndex = 1
},
closeReportDialog () {
this.reportDialogVisible = false
this.reportAction = ''
this.hasUploadedMediaOnly = false
this.releaseMediaResources()
},
handleReportDialogClose (done) {
@ -624,9 +682,21 @@ export default {
}
}
if (this.requiresMediaUpload(this.reportData.orderType, this.reportData.nodeCode, this.reportData.nodeName)) {
this.submitNodeReportWithMedia()
if (this.capturedMediaList.length > 0) {
this.submitNodeReportWithMedia(true)
return
}
if (this.hasUploadedMediaOnly) {
this.submitNodeReportOnly('REPORT_ONLY')
return
}
this.$message.warning('请先拍照或录像,或先点击“仅上传影像”')
return
}
this.submitNodeReportOnly('REPORT')
},
submitNodeReportOnly (action = 'REPORT') {
const mediaNodeKey = this.buildMediaNodeKey(this.reportData.orderNo, this.reportData.nodeCode)
const apiMap = {
HOME_LIFT: reportHomeLiftOrderNode,
CABLE_COP: reportCableCopTaskNode,
@ -639,9 +709,14 @@ export default {
return
}
this.reportLoading = true
this.reportAction = action
apiFn(this.buildNodeReportPayload()).then(({ data }) => {
this.reportLoading = false
this.reportAction = ''
if (data && data.code === 0) {
if (mediaNodeKey && this.uploadedMediaNodeFlagMap[mediaNodeKey]) {
this.$delete(this.uploadedMediaNodeFlagMap, mediaNodeKey)
}
this.$message.success(data.msg || '报工成功')
this.closeReportDialog()
this.getDataList()
@ -650,12 +725,20 @@ export default {
}
}).catch(() => {
this.reportLoading = false
this.reportAction = ''
this.$message.error('报工失败')
})
},
submitNodeReportWithMedia () {
submitNodeMediaOnly () {
this.submitNodeReportWithMedia(false)
},
submitNodeReportWithMedia (reportNode = true) {
if (!this.capturedMediaList.length) {
this.$message.warning('请先上传检验照片或视频')
this.$message.warning('请先拍照或录制视频')
return
}
if (this.requiresPackStep(this.reportData.orderType, this.reportData.nodeCode, this.reportData.nodeName) && !this.reportData.mediaStep) {
this.$message.warning('请选择打包步骤后再上传')
return
}
const formData = new FormData()
@ -665,22 +748,42 @@ export default {
formData.append('nodeCode', payload.nodeCode)
formData.append('reportQty', String(payload.reportQty || 1))
formData.append('remark', payload.remark || '')
formData.append('mediaStep', this.reportData.mediaStep || '')
formData.append('reportNode', String(reportNode))
this.capturedMediaList.forEach(item => {
formData.append('file', item.raw, item.name)
})
this.reportLoading = true
this.reportAction = reportNode ? 'REPORT' : 'UPLOAD_ONLY'
reportWorkNodeWithMedia(formData).then(({ data }) => {
this.reportLoading = false
this.reportAction = ''
if (data && data.code === 0) {
this.$message.success(data.msg || '上传并报工成功')
this.closeReportDialog()
this.$message.success(data.msg || (reportNode ? '上传并报工成功' : '影像上传成功'))
if (reportNode) {
const mediaNodeKey = this.buildMediaNodeKey(this.reportData.orderNo, this.reportData.nodeCode)
if (mediaNodeKey && this.uploadedMediaNodeFlagMap[mediaNodeKey]) {
this.$delete(this.uploadedMediaNodeFlagMap, mediaNodeKey)
}
this.closeReportDialog()
} else {
this.hasUploadedMediaOnly = true
const mediaNodeKey = this.buildMediaNodeKey(this.reportData.orderNo, this.reportData.nodeCode)
if (mediaNodeKey) {
this.$set(this.uploadedMediaNodeFlagMap, mediaNodeKey, true)
}
this.resetCapturedMedia()
this.captureIndex = 1
this.reportData.mediaStep = ''
}
this.getDataList()
} else {
this.$message.error((data && data.msg) || '上传失败')
this.$message.error((data && data.msg) || (reportNode ? '上传并报工失败' : '影像上传失败'))
}
}).catch(() => {
this.reportLoading = false
this.$message.error('上传失败')
this.reportAction = ''
this.$message.error(reportNode ? '上传并报工失败' : '影像上传失败')
})
},
buildNodeReportPayload () {
@ -692,6 +795,12 @@ export default {
remark: this.reportData.remark || ''
}
},
buildMediaNodeKey (orderNo, nodeCode) {
if (!orderNo || !nodeCode) {
return ''
}
return `${orderNo}#${nodeCode}`
},
async startCamera () {
if (!this.requiresMediaUpload(this.reportData.orderType, this.reportData.nodeCode, this.reportData.nodeName)) {
return

2
src/views/modules/longtron/screen-renovation-progress.vue

@ -390,7 +390,7 @@ export default {
.screen-wrap .board-table .el-table__body-wrapper::-webkit-scrollbar{width:0;height:0}
.screen-wrap .board-table .el-table__empty-text{color:#9ac2e7!important}
.node-chip{display:inline-block!important;width:46px;height:14px;margin:0 auto;border-radius:2px}
.node-chip.done{background:#6de3a0}
.node-chip.done{background:#05f66d}
.node-chip.todo{background:#dce4ee}
.board-tag{display:inline-flex!important;align-items:center!important;justify-content:center!important;min-width:88px!important;height:29px!important;padding:0 10px!important;border-radius:14px!important;border:1px solid transparent!important;font-size:14px!important;font-weight:600!important;line-height:27px!important;box-sizing:border-box!important}
.board-tag.type-cable{color:#73cfff!important;background:rgba(28,88,136,.32)!important;border-color:rgba(115,207,255,.45)!important}

2
src/views/modules/longtron/screen-whole-lift-progress.vue

@ -166,7 +166,7 @@ export default {
.screen-wrap .board-table .el-table .cell{color:#fff!important;line-height:29px!important;overflow:visible!important}
.screen-wrap .board-table .el-table__empty-text{color:#9ac2e7!important}
.node-chip{display:inline-block!important;width:46px;height:14px;margin:0 auto;border-radius:2px}
.node-chip.done{background:#6de3a0}.node-chip.todo{background:#dce4ee}
.node-chip.done{background:#05f66d}.node-chip.todo{background:#dce4ee}
.board-tag{display:inline-flex!important;align-items:center!important;justify-content:center!important;min-width:80px!important;height:29px!important;padding:0 10px!important;border-radius:14px!important;border:1px solid transparent!important;font-size:13px!important;font-weight:600!important;line-height:27px!important;box-sizing:border-box!important}
.board-tag.status-planned{color:#b9c7d8!important;background:rgba(96,118,141,.28)!important;border-color:rgba(185,199,216,.34)!important}
.board-tag.status-doing{color:#ffd774!important;background:rgba(120,92,27,.32)!important;border-color:rgba(255,215,116,.45)!important}

Loading…
Cancel
Save