feat: 修复订单BOM树节点定位错误问题,添加BASE_DEVICE_PARAM_VAL旁路能力改造方案文档和功能
parent
d5c79f7a12
commit
3ea71df714
@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listOrderNote(query) {
|
||||
return request({
|
||||
url: '/production/orderNote/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getOrderNote(objId) {
|
||||
return request({
|
||||
url: '/production/orderNote/' + objId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addOrderNote(data) {
|
||||
return request({
|
||||
url: '/production/orderNote',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateOrderNote(data) {
|
||||
return request({
|
||||
url: '/production/orderNote',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delOrderNote(objId) {
|
||||
return request({
|
||||
url: '/production/orderNote/' + objId,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listProcessRoute(query) {
|
||||
return request({
|
||||
url: '/production/processRoute/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getProcessRoute(objId) {
|
||||
return request({
|
||||
url: '/production/processRoute/' + objId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addProcessRoute(data) {
|
||||
return request({
|
||||
url: '/production/processRoute',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateProcessRoute(data) {
|
||||
return request({
|
||||
url: '/production/processRoute',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delProcessRoute(objId) {
|
||||
return request({
|
||||
url: '/production/processRoute/' + objId,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listStationCapability(query) {
|
||||
return request({
|
||||
url: '/production/stationCapability/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getStationCapability(objId) {
|
||||
return request({
|
||||
url: '/production/stationCapability/' + objId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addStationCapability(data) {
|
||||
return request({
|
||||
url: '/production/stationCapability',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateStationCapability(data) {
|
||||
return request({
|
||||
url: '/production/stationCapability',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delStationCapability(objId) {
|
||||
return request({
|
||||
url: '/production/stationCapability/' + objId,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listTaskPool(query) {
|
||||
return request({
|
||||
url: '/production/taskPool/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getTaskPool(orderCode) {
|
||||
return request({
|
||||
url: '/production/taskPool/' + orderCode,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addTaskPool(data) {
|
||||
return request({
|
||||
url: '/production/taskPool',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateTaskPool(data) {
|
||||
return request({
|
||||
url: '/production/taskPool',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function changeTaskStatus(data) {
|
||||
return request({
|
||||
url: '/production/taskPool/changeStatus',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delTaskPool(orderCode) {
|
||||
return request({
|
||||
url: '/production/taskPool/' + orderCode,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listTeamShift(query) {
|
||||
return request({
|
||||
url: '/production/teamShift/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getTeamShift(objId) {
|
||||
return request({
|
||||
url: '/production/teamShift/' + objId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addTeamShift(data) {
|
||||
return request({
|
||||
url: '/production/teamShift',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateTeamShift(data) {
|
||||
return request({
|
||||
url: '/production/teamShift',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delTeamShift(objId) {
|
||||
return request({
|
||||
url: '/production/teamShift/' + objId,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
@ -0,0 +1,239 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form ref="queryForm" :model="queryParams" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||
<el-form-item label="工单编号" prop="orderCode">
|
||||
<el-input v-model="queryParams.orderCode" placeholder="请输入工单编号" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料名称" prop="materialName">
|
||||
<el-input v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="记录类型" prop="noteType">
|
||||
<el-select v-model="queryParams.noteType" placeholder="请选择记录类型" clearable>
|
||||
<el-option v-for="item in noteTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:orderNote:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:orderNote:edit']" type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:orderNote:remove']" type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:orderNote:export']" type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="orderNoteList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="工单编号" align="center" prop="orderCode" width="160" />
|
||||
<el-table-column label="物料编码" align="center" prop="materialCode" width="140" />
|
||||
<el-table-column label="物料名称" align="center" prop="materialName" show-overflow-tooltip />
|
||||
<el-table-column label="工单状态" align="center" prop="executionStatus">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="getExecutionTag(scope.row.executionStatus)">{{ getExecutionLabel(scope.row.executionStatus) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="记录类型" align="center" prop="noteType">
|
||||
<template slot-scope="scope">{{ getNoteTypeLabel(scope.row.noteType) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="记录内容" align="center" prop="noteContent" show-overflow-tooltip />
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="scope.row.status === '0' ? 'success' : 'info'">{{ scope.row.status === '0' ? '有效' : '关闭' }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建人" align="center" prop="createdBy" width="100" />
|
||||
<el-table-column label="创建时间" align="center" prop="createdTime" width="160" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-hasPermi="['production:orderNote:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
|
||||
<el-button v-hasPermi="['production:orderNote:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<el-dialog :title="title" :visible.sync="open" width="720px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
||||
<el-form-item label="工单编号" prop="orderCode">
|
||||
<el-input v-model="form.orderCode" placeholder="请输入工单编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="记录类型" prop="noteType">
|
||||
<el-select v-model="form.noteType" placeholder="请选择记录类型" style="width: 100%">
|
||||
<el-option v-for="item in noteTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="记录内容" prop="noteContent">
|
||||
<el-input v-model="form.noteContent" type="textarea" :rows="5" maxlength="1000" show-word-limit placeholder="请输入记录内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="item in statusOptions" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listOrderNote, getOrderNote, addOrderNote, updateOrderNote, delOrderNote } from '@/api/production/orderNote'
|
||||
|
||||
export default {
|
||||
name: 'OrderNote',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
orderNoteList: [],
|
||||
ids: [],
|
||||
single: true,
|
||||
multiple: true,
|
||||
open: false,
|
||||
title: '',
|
||||
noteTypeOptions: [
|
||||
{ label: '异常说明', value: 'ABNORMAL' },
|
||||
{ label: '改线记录', value: 'LINE_CHANGE' },
|
||||
{ label: '缺料说明', value: 'LACK_MATERIAL' },
|
||||
{ label: '延期原因', value: 'DELAY' },
|
||||
{ label: '关闭原因', value: 'CLOSE_REASON' }
|
||||
],
|
||||
statusOptions: [
|
||||
{ label: '有效', value: '0' },
|
||||
{ label: '关闭', value: '1' }
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderCode: undefined,
|
||||
materialName: undefined,
|
||||
noteType: undefined,
|
||||
status: undefined
|
||||
},
|
||||
form: {},
|
||||
rules: {
|
||||
orderCode: [{ required: true, message: '工单编号不能为空', trigger: 'blur' }],
|
||||
noteType: [{ required: true, message: '记录类型不能为空', trigger: 'change' }],
|
||||
noteContent: [{ required: true, message: '记录内容不能为空', trigger: 'blur' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true
|
||||
listOrderNote(this.queryParams).then(response => {
|
||||
this.orderNoteList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
getNoteTypeLabel(value) {
|
||||
const match = this.noteTypeOptions.find(item => item.value === value)
|
||||
return match ? match.label : value
|
||||
},
|
||||
getExecutionLabel(value) {
|
||||
const map = { PENDING: '待执行', RUNNING: '运行中', COMPLETED: '已完成', PAUSED: '已暂停' }
|
||||
return map[value] || value || '待执行'
|
||||
},
|
||||
getExecutionTag(value) {
|
||||
const map = { PENDING: 'info', RUNNING: 'warning', COMPLETED: 'success', PAUSED: '' }
|
||||
return map[value] || 'info'
|
||||
},
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
reset() {
|
||||
this.form = {
|
||||
objId: undefined,
|
||||
orderCode: undefined,
|
||||
noteType: undefined,
|
||||
noteContent: undefined,
|
||||
status: '0',
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
resetQuery() {
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.objId)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = '新增工单备注与异常记录'
|
||||
},
|
||||
handleUpdate(row) {
|
||||
const objId = row.objId || this.ids[0]
|
||||
this.reset()
|
||||
getOrderNote(objId).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = '修改工单备注与异常记录'
|
||||
})
|
||||
},
|
||||
handleDelete(row) {
|
||||
const objIds = row.objId || this.ids
|
||||
this.$modal.confirm('是否确认删除选中的工单记录?').then(() => {
|
||||
return delOrderNote(objIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
})
|
||||
},
|
||||
handleExport() {
|
||||
this.download('/production/orderNote/export', { ...this.queryParams }, `order_note_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
submitForm() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
const request = this.form.objId ? updateOrderNote(this.form) : addOrderNote(this.form)
|
||||
request.then(() => {
|
||||
this.$modal.msgSuccess(this.form.objId ? '修改成功' : '新增成功')
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,348 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form ref="queryForm" :model="queryParams" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||
<el-form-item label="路线编码" prop="routeCode">
|
||||
<el-input v-model="queryParams.routeCode" placeholder="请输入路线编码" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="路线名称" prop="routeName">
|
||||
<el-input v-model="queryParams.routeName" placeholder="请输入路线名称" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料编码" prop="materialCode">
|
||||
<el-input v-model="queryParams.materialCode" placeholder="请输入物料编码" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:processRoute:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:processRoute:edit']" type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:processRoute:remove']" type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:processRoute:export']" type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="routeList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="路线编码" align="center" prop="routeCode" width="130" />
|
||||
<el-table-column label="路线名称" align="center" prop="routeName" />
|
||||
<el-table-column label="物料编码" align="center" prop="materialCode" width="130" />
|
||||
<el-table-column label="物料名称" align="center" prop="materialName" show-overflow-tooltip />
|
||||
<el-table-column label="版本号" align="center" prop="versionNo" width="90" />
|
||||
<el-table-column label="状态" align="center" prop="status" width="90">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="scope.row.status === '0' ? 'success' : 'info'">{{ scope.row.status === '0' ? '启用' : '停用' }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-hasPermi="['production:processRoute:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
|
||||
<el-button v-hasPermi="['production:processRoute:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<el-dialog :title="title" :visible.sync="open" width="980px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="路线编码" prop="routeCode">
|
||||
<el-input v-model="form.routeCode" placeholder="请输入路线编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="路线名称" prop="routeName">
|
||||
<el-input v-model="form.routeName" placeholder="请输入路线名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物料" prop="materialCode">
|
||||
<el-select v-model="form.materialCode" placeholder="请选择物料" filterable style="width: 100%" @change="handleMaterialChange">
|
||||
<el-option v-for="item in materialOptions" :key="item.materialCode" :label="item.materialCode + ' / ' + item.materialName" :value="item.materialCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="版本号" prop="versionNo">
|
||||
<el-input v-model="form.versionNo" placeholder="请输入版本号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="item in statusOptions" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :rows="2" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
|
||||
<div class="route-detail-header">
|
||||
<span>工艺路线明细</span>
|
||||
<el-button type="primary" plain size="mini" icon="el-icon-plus" @click="handleAddDetail">新增工序</el-button>
|
||||
</div>
|
||||
<el-table :data="form.detailList" border>
|
||||
<el-table-column label="顺序号" width="90" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input-number v-model="scope.row.sortNo" :min="1" :precision="0" style="width: 80px" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工序" min-width="240">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.processCode" placeholder="请选择工序" filterable style="width: 100%" @change="value => handleProcessChange(scope.row, value)">
|
||||
<el-option v-for="item in processOptions" :key="item.processCode" :label="item.processCode + ' / ' + item.processName" :value="item.processCode" />
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工序名称" prop="processName" min-width="180" />
|
||||
<el-table-column label="是否必经" width="150" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-radio-group v-model="scope.row.requiredFlag">
|
||||
<el-radio label="1">是</el-radio>
|
||||
<el-radio label="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="标准工时" width="140" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input-number v-model="scope.row.standardWorkTime" :min="0" :precision="2" style="width: 120px" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" min-width="160" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.remark" placeholder="请输入备注" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="90" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="mini" icon="el-icon-delete" @click="handleRemoveDetail(scope.$index)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listProcessRoute, getProcessRoute, addProcessRoute, updateProcessRoute, delProcessRoute } from '@/api/production/processRoute'
|
||||
import { listAllMaterialInfo } from '@/api/base/materialInfo'
|
||||
import { listProcessStation } from '@/api/base/processStation'
|
||||
|
||||
export default {
|
||||
name: 'ProcessRoute',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
routeList: [],
|
||||
materialOptions: [],
|
||||
processOptions: [],
|
||||
ids: [],
|
||||
single: true,
|
||||
multiple: true,
|
||||
open: false,
|
||||
title: '',
|
||||
statusOptions: [
|
||||
{ label: '启用', value: '0' },
|
||||
{ label: '停用', value: '1' }
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
routeCode: undefined,
|
||||
routeName: undefined,
|
||||
materialCode: undefined,
|
||||
status: undefined
|
||||
},
|
||||
form: {},
|
||||
rules: {
|
||||
routeCode: [{ required: true, message: '路线编码不能为空', trigger: 'blur' }],
|
||||
routeName: [{ required: true, message: '路线名称不能为空', trigger: 'blur' }],
|
||||
materialCode: [{ required: true, message: '物料不能为空', trigger: 'change' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.loadOptions()
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true
|
||||
listProcessRoute(this.queryParams).then(response => {
|
||||
this.routeList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
loadOptions() {
|
||||
listAllMaterialInfo({ isFlag: 0 }).then(response => {
|
||||
this.materialOptions = response.rows || response.data || []
|
||||
})
|
||||
listProcessStation({ pageNum: 1, pageSize: 999, processType: 1 }).then(response => {
|
||||
this.processOptions = response.rows || response.data || []
|
||||
})
|
||||
},
|
||||
reset() {
|
||||
this.form = {
|
||||
objId: undefined,
|
||||
routeCode: undefined,
|
||||
routeName: undefined,
|
||||
materialCode: undefined,
|
||||
materialName: undefined,
|
||||
versionNo: 'V1',
|
||||
status: '0',
|
||||
remark: undefined,
|
||||
detailList: []
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
resetQuery() {
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.objId)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.handleAddDetail()
|
||||
this.open = true
|
||||
this.title = '新增生产工艺路线'
|
||||
},
|
||||
handleUpdate(row) {
|
||||
const objId = row.objId || this.ids[0]
|
||||
this.reset()
|
||||
getProcessRoute(objId).then(response => {
|
||||
this.form = response.data
|
||||
if (!this.form.detailList || !this.form.detailList.length) {
|
||||
this.form.detailList = []
|
||||
this.handleAddDetail()
|
||||
}
|
||||
this.open = true
|
||||
this.title = '修改生产工艺路线'
|
||||
})
|
||||
},
|
||||
handleDelete(row) {
|
||||
const objIds = row.objId || this.ids
|
||||
this.$modal.confirm('是否确认删除选中的工艺路线?').then(() => {
|
||||
return delProcessRoute(objIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
})
|
||||
},
|
||||
handleExport() {
|
||||
this.download('/production/processRoute/export', { ...this.queryParams }, `process_route_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
handleMaterialChange(value) {
|
||||
const material = this.materialOptions.find(item => item.materialCode === value)
|
||||
if (material) {
|
||||
this.form.materialName = material.materialName
|
||||
}
|
||||
},
|
||||
handleAddDetail() {
|
||||
if (!this.form.detailList) {
|
||||
this.form.detailList = []
|
||||
}
|
||||
this.form.detailList.push({
|
||||
sortNo: this.form.detailList.length + 1,
|
||||
processCode: undefined,
|
||||
processName: undefined,
|
||||
requiredFlag: '1',
|
||||
standardWorkTime: 0,
|
||||
remark: undefined
|
||||
})
|
||||
},
|
||||
handleRemoveDetail(index) {
|
||||
this.form.detailList.splice(index, 1)
|
||||
},
|
||||
handleProcessChange(row, value) {
|
||||
const process = this.processOptions.find(item => item.processCode === value)
|
||||
if (process) {
|
||||
row.processName = process.processName
|
||||
}
|
||||
},
|
||||
validateDetails() {
|
||||
if (!this.form.detailList || this.form.detailList.length === 0) {
|
||||
this.$modal.msgError('请至少维护一条工序明细')
|
||||
return false
|
||||
}
|
||||
const duplicate = new Set()
|
||||
for (const item of this.form.detailList) {
|
||||
if (!item.processCode) {
|
||||
this.$modal.msgError('工序明细不能为空')
|
||||
return false
|
||||
}
|
||||
if (duplicate.has(item.processCode)) {
|
||||
this.$modal.msgError('工序明细存在重复工序')
|
||||
return false
|
||||
}
|
||||
duplicate.add(item.processCode)
|
||||
}
|
||||
return true
|
||||
},
|
||||
submitForm() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (!valid || !this.validateDetails()) {
|
||||
return
|
||||
}
|
||||
const request = this.form.objId ? updateProcessRoute(this.form) : addProcessRoute(this.form)
|
||||
request.then(() => {
|
||||
this.$modal.msgSuccess(this.form.objId ? '修改成功' : '新增成功')
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.route-detail-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin: 8px 0 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,283 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form ref="queryForm" :model="queryParams" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||
<el-form-item label="工位" prop="stationCode">
|
||||
<el-select v-model="queryParams.stationCode" placeholder="请选择工位" clearable filterable>
|
||||
<el-option v-for="item in stationOptions" :key="item.productLineCode" :label="item.productLineName" :value="item.productLineCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料编码" prop="materialCode">
|
||||
<el-input v-model="queryParams.materialCode" placeholder="请输入物料编码" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料名称" prop="materialName">
|
||||
<el-input v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:stationCapability:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:stationCapability:edit']" type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:stationCapability:remove']" type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:stationCapability:export']" type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="stationCapabilityList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="工位编码" align="center" prop="stationCode" />
|
||||
<el-table-column label="工位名称" align="center" prop="stationName" />
|
||||
<el-table-column label="物料编码" align="center" prop="materialCode" />
|
||||
<el-table-column label="物料名称" align="center" prop="materialName" show-overflow-tooltip />
|
||||
<el-table-column label="标准节拍" align="center" prop="standardCt" />
|
||||
<el-table-column label="班产能" align="center" prop="shiftCap" />
|
||||
<el-table-column label="日产能" align="center" prop="dayCap" />
|
||||
<el-table-column label="切换时长(分钟)" align="center" prop="changeoverMin" width="120" />
|
||||
<el-table-column label="责任班组" align="center" prop="teamName" />
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="scope.row.status === '0' ? 'success' : 'info'">{{ scope.row.status === '0' ? '启用' : '停用' }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-hasPermi="['production:stationCapability:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
|
||||
<el-button v-hasPermi="['production:stationCapability:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<el-dialog :title="title" :visible.sync="open" width="640px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工位" prop="stationCode">
|
||||
<el-select v-model="form.stationCode" placeholder="请选择工位" filterable style="width: 100%">
|
||||
<el-option v-for="item in stationOptions" :key="item.productLineCode" :label="item.productLineName" :value="item.productLineCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物料" prop="materialCode">
|
||||
<el-select v-model="form.materialCode" placeholder="请选择物料" filterable style="width: 100%" @change="handleMaterialChange">
|
||||
<el-option v-for="item in materialOptions" :key="item.materialCode" :label="item.materialCode + ' / ' + item.materialName" :value="item.materialCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="标准节拍" prop="standardCt">
|
||||
<el-input-number v-model="form.standardCt" :min="0" :precision="2" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="切换时长(分钟)" prop="changeoverMin">
|
||||
<el-input-number v-model="form.changeoverMin" :min="0" :precision="0" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="班产能" prop="shiftCap">
|
||||
<el-input-number v-model="form.shiftCap" :min="0" :precision="2" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="日产能" prop="dayCap">
|
||||
<el-input-number v-model="form.dayCap" :min="0" :precision="2" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="责任班组" prop="teamCode">
|
||||
<el-select v-model="form.teamCode" placeholder="请选择班组" clearable filterable style="width: 100%">
|
||||
<el-option v-for="item in teamOptions" :key="item.teamCode" :label="item.teamName" :value="item.teamCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="item in statusOptions" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listStationCapability, getStationCapability, addStationCapability, updateStationCapability, delStationCapability } from '@/api/production/stationCapability'
|
||||
import { findProductLineList } from '@/api/base/productLine'
|
||||
import { listAllMaterialInfo } from '@/api/base/materialInfo'
|
||||
import { getTeamMemberList } from '@/api/base/teamMembers'
|
||||
|
||||
export default {
|
||||
name: 'StationCapability',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
stationCapabilityList: [],
|
||||
stationOptions: [],
|
||||
materialOptions: [],
|
||||
teamOptions: [],
|
||||
ids: [],
|
||||
single: true,
|
||||
multiple: true,
|
||||
open: false,
|
||||
title: '',
|
||||
statusOptions: [
|
||||
{ label: '启用', value: '0' },
|
||||
{ label: '停用', value: '1' }
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
stationCode: undefined,
|
||||
materialCode: undefined,
|
||||
materialName: undefined,
|
||||
status: undefined
|
||||
},
|
||||
form: {},
|
||||
rules: {
|
||||
stationCode: [{ required: true, message: '工位不能为空', trigger: 'change' }],
|
||||
materialCode: [{ required: true, message: '物料不能为空', trigger: 'change' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.loadOptions()
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true
|
||||
listStationCapability(this.queryParams).then(response => {
|
||||
this.stationCapabilityList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
loadOptions() {
|
||||
findProductLineList({ productLineType: 2 }).then(response => {
|
||||
this.stationOptions = response.data || response.rows || []
|
||||
})
|
||||
listAllMaterialInfo({ isFlag: 0 }).then(response => {
|
||||
this.materialOptions = response.rows || response.data || []
|
||||
})
|
||||
getTeamMemberList({}).then(response => {
|
||||
this.teamOptions = response.data || response.rows || []
|
||||
})
|
||||
},
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
reset() {
|
||||
this.form = {
|
||||
objId: undefined,
|
||||
stationCode: undefined,
|
||||
materialCode: undefined,
|
||||
standardCt: 0,
|
||||
shiftCap: 0,
|
||||
dayCap: 0,
|
||||
changeoverMin: 0,
|
||||
teamCode: undefined,
|
||||
status: '0',
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
resetQuery() {
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.objId)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = '新增工位能力维护'
|
||||
},
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
const objId = row.objId || this.ids[0]
|
||||
getStationCapability(objId).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = '修改工位能力维护'
|
||||
})
|
||||
},
|
||||
handleDelete(row) {
|
||||
const objIds = row.objId || this.ids
|
||||
this.$modal.confirm('是否确认删除选中的工位能力数据?').then(() => {
|
||||
return delStationCapability(objIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
})
|
||||
},
|
||||
handleExport() {
|
||||
this.download('/production/stationCapability/export', { ...this.queryParams }, `station_capability_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
handleMaterialChange(value) {
|
||||
const material = this.materialOptions.find(item => item.materialCode === value)
|
||||
if (material) {
|
||||
this.form.materialName = material.materialName
|
||||
}
|
||||
},
|
||||
submitForm() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
const request = this.form.objId ? updateStationCapability(this.form) : addStationCapability(this.form)
|
||||
request.then(() => {
|
||||
this.$modal.msgSuccess(this.form.objId ? '修改成功' : '新增成功')
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,323 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form ref="queryForm" :model="queryParams" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||
<el-form-item label="工单编号" prop="orderCode">
|
||||
<el-input v-model="queryParams.orderCode" placeholder="请输入工单编号" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料名称" prop="materialName">
|
||||
<el-input v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="任务分组" prop="taskBucket">
|
||||
<el-select v-model="queryParams.taskBucket" placeholder="请选择任务分组" clearable>
|
||||
<el-option v-for="item in bucketOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="执行状态" prop="executionStatus">
|
||||
<el-select v-model="queryParams.executionStatus" placeholder="请选择执行状态" clearable>
|
||||
<el-option v-for="item in executionOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="优先级" prop="priorityLevel">
|
||||
<el-select v-model="queryParams.priorityLevel" placeholder="请选择优先级" clearable>
|
||||
<el-option v-for="item in priorityOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:taskPool:add']" type="primary" plain icon="el-icon-plus" size="mini" :disabled="single" @click="handleConfig">维护负责人/优先级</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:taskPool:edit']" type="success" plain icon="el-icon-refresh-right" size="mini" :disabled="single" @click="handleStatus">切换状态</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:taskPool:remove']" type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">清除扩展配置</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:taskPool:export']" type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="taskPoolList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="工单编号" align="center" prop="orderCode" width="150" />
|
||||
<el-table-column label="任务分组" align="center" prop="taskBucket">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="getBucketType(scope.row.taskBucket)">{{ getBucketLabel(scope.row.taskBucket) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="执行状态" align="center" prop="executionStatus">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="getExecutionType(scope.row.executionStatus)">{{ getExecutionLabel(scope.row.executionStatus) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物料名称" align="center" prop="materialName" show-overflow-tooltip />
|
||||
<el-table-column label="计划数量" align="center" prop="orderAmount" />
|
||||
<el-table-column label="已完工数量" align="center" prop="completeAmount" />
|
||||
<el-table-column label="负责人" align="center" prop="ownerUserName" />
|
||||
<el-table-column label="优先级" align="center" prop="priorityLevel">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="getPriorityType(scope.row.priorityLevel)">{{ getPriorityLabel(scope.row.priorityLevel) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="设备编码" align="center" prop="deviceCode" />
|
||||
<el-table-column label="计划结束日期" align="center" prop="endDate" width="110" />
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="220">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-hasPermi="['production:taskPool:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleConfig(scope.row)">维护配置</el-button>
|
||||
<el-button v-hasPermi="['production:taskPool:edit']" size="mini" type="text" icon="el-icon-refresh-right" @click="handleStatus(scope.row)">切换状态</el-button>
|
||||
<el-button v-hasPermi="['production:taskPool:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">清除配置</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<el-dialog :title="configTitle" :visible.sync="configOpen" width="620px" append-to-body>
|
||||
<el-form ref="configForm" :model="form" :rules="rules" label-width="110px">
|
||||
<el-form-item label="工单编号" prop="orderCode">
|
||||
<el-input v-model="form.orderCode" :disabled="!!form.objId || !!form.orderCode" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人" prop="ownerUserId">
|
||||
<el-select v-model="form.ownerUserId" placeholder="请选择负责人" clearable filterable style="width: 100%">
|
||||
<el-option v-for="item in userOptions" :key="item.userId" :label="item.nickName || item.userName" :value="item.userId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="优先级" prop="priorityLevel">
|
||||
<el-select v-model="form.priorityLevel" placeholder="请选择优先级" style="width: 100%">
|
||||
<el-option v-for="item in priorityOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :rows="4" placeholder="请输入任务备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitConfigForm">确 定</el-button>
|
||||
<el-button @click="configOpen = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="切换任务状态" :visible.sync="statusOpen" width="520px" append-to-body>
|
||||
<el-form ref="statusForm" :model="statusForm" :rules="statusRules" label-width="110px">
|
||||
<el-form-item label="工单编号" prop="orderCode">
|
||||
<el-input v-model="statusForm.orderCode" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="执行状态" prop="executionStatus">
|
||||
<el-select v-model="statusForm.executionStatus" placeholder="请选择执行状态" style="width: 100%">
|
||||
<el-option v-for="item in executionOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitStatusForm">确 定</el-button>
|
||||
<el-button @click="statusOpen = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listTaskPool, getTaskPool, addTaskPool, updateTaskPool, changeTaskStatus, delTaskPool } from '@/api/production/taskPool'
|
||||
import { selectUserList } from '@/api/system/user'
|
||||
|
||||
export default {
|
||||
name: 'TaskPool',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
taskPoolList: [],
|
||||
userOptions: [],
|
||||
ids: [],
|
||||
selectionRows: [],
|
||||
single: true,
|
||||
multiple: true,
|
||||
configOpen: false,
|
||||
statusOpen: false,
|
||||
configTitle: '维护负责人/优先级',
|
||||
bucketOptions: [
|
||||
{ label: '待开工', value: 'PENDING' },
|
||||
{ label: '生产中', value: 'RUNNING' },
|
||||
{ label: '已完成', value: 'COMPLETED' },
|
||||
{ label: '异常任务', value: 'ABNORMAL' },
|
||||
{ label: '超时任务', value: 'OVERTIME' }
|
||||
],
|
||||
executionOptions: [
|
||||
{ label: '待执行', value: 'PENDING' },
|
||||
{ label: '运行中', value: 'RUNNING' },
|
||||
{ label: '已完成', value: 'COMPLETED' },
|
||||
{ label: '已暂停', value: 'PAUSED' }
|
||||
],
|
||||
priorityOptions: [
|
||||
{ label: '紧急', value: 'URGENT' },
|
||||
{ label: '高', value: 'HIGH' },
|
||||
{ label: '普通', value: 'NORMAL' },
|
||||
{ label: '低', value: 'LOW' }
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderCode: undefined,
|
||||
materialName: undefined,
|
||||
taskBucket: undefined,
|
||||
executionStatus: undefined,
|
||||
priorityLevel: undefined
|
||||
},
|
||||
form: {},
|
||||
statusForm: {},
|
||||
rules: {
|
||||
orderCode: [{ required: true, message: '工单编号不能为空', trigger: 'blur' }],
|
||||
priorityLevel: [{ required: true, message: '优先级不能为空', trigger: 'change' }]
|
||||
},
|
||||
statusRules: {
|
||||
executionStatus: [{ required: true, message: '执行状态不能为空', trigger: 'change' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
selectUserList({}).then(response => {
|
||||
this.userOptions = response.rows || response.data || []
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true
|
||||
listTaskPool(this.queryParams).then(response => {
|
||||
this.taskPoolList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
getBucketLabel(value) {
|
||||
const match = this.bucketOptions.find(item => item.value === value)
|
||||
return match ? match.label : value
|
||||
},
|
||||
getBucketType(value) {
|
||||
const map = { PENDING: 'info', RUNNING: 'warning', COMPLETED: 'success', ABNORMAL: 'danger', OVERTIME: '' }
|
||||
return map[value] || 'info'
|
||||
},
|
||||
getExecutionLabel(value) {
|
||||
const match = this.executionOptions.find(item => item.value === value)
|
||||
return match ? match.label : value
|
||||
},
|
||||
getExecutionType(value) {
|
||||
const map = { PENDING: 'info', RUNNING: 'warning', COMPLETED: 'success', PAUSED: '' }
|
||||
return map[value] || 'info'
|
||||
},
|
||||
getPriorityLabel(value) {
|
||||
const match = this.priorityOptions.find(item => item.value === value)
|
||||
return match ? match.label : value
|
||||
},
|
||||
getPriorityType(value) {
|
||||
const map = { URGENT: 'danger', HIGH: 'warning', NORMAL: 'success', LOW: 'info' }
|
||||
return map[value] || 'info'
|
||||
},
|
||||
resetConfigForm() {
|
||||
this.form = {
|
||||
objId: undefined,
|
||||
orderCode: undefined,
|
||||
ownerUserId: undefined,
|
||||
priorityLevel: 'NORMAL',
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('configForm')
|
||||
},
|
||||
resetStatusForm() {
|
||||
this.statusForm = {
|
||||
orderCode: undefined,
|
||||
executionStatus: undefined
|
||||
}
|
||||
this.resetForm('statusForm')
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
resetQuery() {
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
handleSelectionChange(selection) {
|
||||
this.selectionRows = selection
|
||||
this.ids = selection.map(item => item.orderCode)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
handleConfig(row) {
|
||||
const current = row || this.selectionRows[0]
|
||||
if (!current) {
|
||||
return
|
||||
}
|
||||
this.resetConfigForm()
|
||||
getTaskPool(current.orderCode).then(response => {
|
||||
const data = response.data || {}
|
||||
this.form = {
|
||||
objId: data.objId,
|
||||
orderCode: data.orderCode || current.orderCode,
|
||||
ownerUserId: data.ownerUserId,
|
||||
priorityLevel: data.priorityLevel || 'NORMAL',
|
||||
remark: data.remark
|
||||
}
|
||||
this.configOpen = true
|
||||
})
|
||||
},
|
||||
handleStatus(row) {
|
||||
const current = row || this.selectionRows[0]
|
||||
if (!current) {
|
||||
return
|
||||
}
|
||||
this.resetStatusForm()
|
||||
this.statusForm.orderCode = current.orderCode
|
||||
this.statusForm.executionStatus = current.executionStatus || 'PENDING'
|
||||
this.statusOpen = true
|
||||
},
|
||||
handleDelete(row) {
|
||||
const orderCodes = row ? row.orderCode : this.ids.join(',')
|
||||
this.$modal.confirm('是否确认清除所选工单的任务池扩展配置?').then(() => {
|
||||
return delTaskPool(orderCodes)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('清除成功')
|
||||
})
|
||||
},
|
||||
handleExport() {
|
||||
this.download('/production/taskPool/export', { ...this.queryParams }, `task_pool_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
submitConfigForm() {
|
||||
this.$refs.configForm.validate(valid => {
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
const request = this.form.objId ? updateTaskPool(this.form) : addTaskPool(this.form)
|
||||
request.then(() => {
|
||||
this.$modal.msgSuccess('保存成功')
|
||||
this.configOpen = false
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
},
|
||||
submitStatusForm() {
|
||||
this.$refs.statusForm.validate(valid => {
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
changeTaskStatus(this.statusForm).then(() => {
|
||||
this.$modal.msgSuccess('状态切换成功')
|
||||
this.statusOpen = false
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,293 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form ref="queryForm" :model="queryParams" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||
<el-form-item label="班组" prop="teamCode">
|
||||
<el-select v-model="queryParams.teamCode" placeholder="请选择班组" clearable filterable>
|
||||
<el-option v-for="item in teamOptions" :key="item.teamCode" :label="item.teamName" :value="item.teamCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="责任产线" prop="lineCode">
|
||||
<el-select v-model="queryParams.lineCode" placeholder="请选择产线" clearable filterable>
|
||||
<el-option v-for="item in lineOptions" :key="item.productLineCode" :label="item.productLineName" :value="item.productLineCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="班次" prop="shiftCode">
|
||||
<el-select v-model="queryParams.shiftCode" placeholder="请选择班次" clearable>
|
||||
<el-option v-for="item in shiftOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="排班日期">
|
||||
<el-date-picker v-model="daterangeShiftDate" type="daterange" value-format="yyyy-MM-dd" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" style="width: 240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:teamShift:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:teamShift:edit']" type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:teamShift:remove']" type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button v-hasPermi="['production:teamShift:export']" type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="teamShiftList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="班组" align="center" prop="teamName" />
|
||||
<el-table-column label="排班日期" align="center" prop="shiftDate" width="120" />
|
||||
<el-table-column label="班次" align="center" prop="shiftCode">
|
||||
<template slot-scope="scope">{{ getShiftLabel(scope.row.shiftCode) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="负责人" align="center" prop="leaderUserName" />
|
||||
<el-table-column label="责任产线" align="center" prop="lineName" />
|
||||
<el-table-column label="责任区域" align="center" prop="areaDesc" show-overflow-tooltip />
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="scope.row.status === '0' ? 'success' : 'info'">{{ scope.row.status === '0' ? '启用' : '停用' }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-hasPermi="['production:teamShift:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
|
||||
<el-button v-hasPermi="['production:teamShift:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<el-dialog :title="title" :visible.sync="open" width="680px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="班组" prop="teamCode">
|
||||
<el-select v-model="form.teamCode" placeholder="请选择班组" filterable style="width: 100%">
|
||||
<el-option v-for="item in teamOptions" :key="item.teamCode" :label="item.teamName" :value="item.teamCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="班次" prop="shiftCode">
|
||||
<el-select v-model="form.shiftCode" placeholder="请选择班次" style="width: 100%">
|
||||
<el-option v-for="item in shiftOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="排班日期" prop="shiftDate">
|
||||
<el-date-picker v-model="form.shiftDate" value-format="yyyy-MM-dd" type="date" placeholder="请选择日期" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="负责人" prop="leaderUserId">
|
||||
<el-select v-model="form.leaderUserId" placeholder="请选择负责人" clearable filterable style="width: 100%">
|
||||
<el-option v-for="item in userOptions" :key="item.userId" :label="item.nickName || item.userName" :value="item.userId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="责任产线" prop="lineCode">
|
||||
<el-select v-model="form.lineCode" placeholder="请选择产线" clearable filterable style="width: 100%">
|
||||
<el-option v-for="item in lineOptions" :key="item.productLineCode" :label="item.productLineName" :value="item.productLineCode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="item in statusOptions" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="责任区域" prop="areaDesc">
|
||||
<el-input v-model="form.areaDesc" placeholder="请输入责任区域" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listTeamShift, getTeamShift, addTeamShift, updateTeamShift, delTeamShift } from '@/api/production/teamShift'
|
||||
import { getTeamMemberList } from '@/api/base/teamMembers'
|
||||
import { findProductLineList } from '@/api/base/productLine'
|
||||
import { selectUserList } from '@/api/system/user'
|
||||
|
||||
export default {
|
||||
name: 'TeamShift',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
teamShiftList: [],
|
||||
teamOptions: [],
|
||||
lineOptions: [],
|
||||
userOptions: [],
|
||||
daterangeShiftDate: [],
|
||||
ids: [],
|
||||
single: true,
|
||||
multiple: true,
|
||||
open: false,
|
||||
title: '',
|
||||
shiftOptions: [
|
||||
{ label: '白班', value: 'DAY' },
|
||||
{ label: '夜班', value: 'NIGHT' },
|
||||
{ label: '中班', value: 'MIDDLE' }
|
||||
],
|
||||
statusOptions: [
|
||||
{ label: '启用', value: '0' },
|
||||
{ label: '停用', value: '1' }
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
teamCode: undefined,
|
||||
lineCode: undefined,
|
||||
shiftCode: undefined,
|
||||
status: undefined,
|
||||
params: {}
|
||||
},
|
||||
form: {},
|
||||
rules: {
|
||||
teamCode: [{ required: true, message: '班组不能为空', trigger: 'change' }],
|
||||
shiftDate: [{ required: true, message: '排班日期不能为空', trigger: 'change' }],
|
||||
shiftCode: [{ required: true, message: '班次不能为空', trigger: 'change' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.loadOptions()
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true
|
||||
this.queryParams.params = {}
|
||||
if (this.daterangeShiftDate && this.daterangeShiftDate.length === 2) {
|
||||
this.queryParams.params.beginShiftDate = this.daterangeShiftDate[0]
|
||||
this.queryParams.params.endShiftDate = this.daterangeShiftDate[1]
|
||||
}
|
||||
listTeamShift(this.queryParams).then(response => {
|
||||
this.teamShiftList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
loadOptions() {
|
||||
getTeamMemberList({}).then(response => {
|
||||
this.teamOptions = response.data || response.rows || []
|
||||
})
|
||||
findProductLineList({ productLineType: 1 }).then(response => {
|
||||
this.lineOptions = response.data || response.rows || []
|
||||
})
|
||||
selectUserList({}).then(response => {
|
||||
this.userOptions = response.rows || response.data || []
|
||||
})
|
||||
},
|
||||
getShiftLabel(value) {
|
||||
const match = this.shiftOptions.find(item => item.value === value)
|
||||
return match ? match.label : value
|
||||
},
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
},
|
||||
reset() {
|
||||
this.form = {
|
||||
objId: undefined,
|
||||
teamCode: undefined,
|
||||
shiftDate: undefined,
|
||||
shiftCode: 'DAY',
|
||||
leaderUserId: undefined,
|
||||
lineCode: undefined,
|
||||
areaDesc: undefined,
|
||||
status: '0',
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
resetQuery() {
|
||||
this.daterangeShiftDate = []
|
||||
this.resetForm('queryForm')
|
||||
this.handleQuery()
|
||||
},
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.objId)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
handleAdd() {
|
||||
this.reset()
|
||||
this.open = true
|
||||
this.title = '新增班组排班维护'
|
||||
},
|
||||
handleUpdate(row) {
|
||||
const objId = row.objId || this.ids[0]
|
||||
this.reset()
|
||||
getTeamShift(objId).then(response => {
|
||||
this.form = response.data
|
||||
this.open = true
|
||||
this.title = '修改班组排班维护'
|
||||
})
|
||||
},
|
||||
handleDelete(row) {
|
||||
const objIds = row.objId || this.ids
|
||||
this.$modal.confirm('是否确认删除选中的班组排班数据?').then(() => {
|
||||
return delTeamShift(objIds)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
})
|
||||
},
|
||||
handleExport() {
|
||||
this.download('/production/teamShift/export', { ...this.queryParams }, `team_shift_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
submitForm() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
const request = this.form.objId ? updateTeamShift(this.form) : addTeamShift(this.form)
|
||||
request.then(() => {
|
||||
this.$modal.msgSuccess(this.form.objId ? '修改成功' : '新增成功')
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Loading…
Reference in New Issue