Browse Source

[feat]生产管理管理:

生产订单
新增生产订单详情页面detail.html
新增生产订单详情前端按钮
新增生产订单详情后端接口
dev
liuxiaoxu 5 months ago
parent
commit
455b2bcaa3
  1. 33
      ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java
  2. 502
      ruoyi-admin/src/main/resources/templates/system/makeorder/detail.html
  3. 6
      ruoyi-admin/src/main/resources/templates/system/makeorder/makeorder.html

33
ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java

@ -422,4 +422,37 @@ public class SysMakeOrderController extends BaseController
List<SysMakeOrder> list = sysMakeOrderService.selectAllMakeNos(); List<SysMakeOrder> list = sysMakeOrderService.selectAllMakeNos();
return list; return list;
} }
/*
* 生产订单详情
* */
@GetMapping("/detail/{id}")
public String detail(@PathVariable("id") Long id , ModelMap mmap){
mmap.put("currentUser", ShiroUtils.getSysUser());
SysMakeOrder sysMakeOrder = sysMakeOrderService.selectSysMakeOrderById(id);
SysSalesOrder sysSalesOrder = salesOrderService.selectSysSalesOrderBySalesOrderCode(sysMakeOrder.getSaleNo());
if(StringUtils.isNotNull(sysSalesOrder)){
sysMakeOrder.setOrderType(sysSalesOrder.getSalesOrderType());
sysMakeOrder.setSalesman(sysSalesOrder.getBusinessMembers());
sysMakeOrder.setCustomerName(sysSalesOrder.getEnterpriseName());
sysMakeOrder.setCustomerId(sysSalesOrder.getEnterpriseCode());
sysMakeOrder.setCustomerOderCode(sysSalesOrder.getSalesOrderNumber());
}
mmap.put("sysMakeOrder", sysMakeOrder);
return prefix + "/detail";
}
/*
* 确定生产订单详情
* */
@ResponseBody
@PostMapping("/detail")
public AjaxResult detailSave(SysMakeOrder sysMakeOrder){
return AjaxResult.success("操作成功");
}
} }

502
ruoyi-admin/src/main/resources/templates/system/makeorder/detail.html

@ -0,0 +1,502 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('生产订单详情')" />
<th:block th:include="include :: datetimepicker-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-makeorder-edit" th:object="${sysMakeOrder}">
<input name="id" th:field="*{id}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label">生产订单号:</label>
<div class="col-sm-8">
<input readonly id="makeNo" name="makeNo" th:field="*{makeNo}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">关联销售订单号:</label>
<div class="col-sm-8">
<input readonly id="saleNo" name="saleNo" th:field="*{saleNo}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">业务员:</label>
<div class="col-sm-8">
<input readonly name="Salesman" th:field="*{Salesman}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">订单类型:</label>
<div class="col-sm-8">
<select disabled name="orderType" class="form-control" type="text" th:with="dictList=${@dict.getType('sys_order_type')}" required th:field="*{orderType}">
<option value="">请选择</option>
<option th:each="dict : ${dictList}" th:value="${dict.dictValue}" th:text="${dict.dictLabel}"></option>
</select>
</div>
</div>
<div class="row">
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-sub-table-1"></table>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<script th:inline="javascript">
var prefix = ctx + "system/makeorder";
var curUser = [[${currentUser}]];
var curUsrDeptNumber = curUser.dept.deptNumber;
// 字典
var processMethodDatas = [[${@dict.getType('processMethod')}]];
var sysUnitClassDatas = [[${@dict.getType('sys_unit_class')}]];
var materialTypeDatas = [[${@category.getChildByCode('materialType')}]];
var levelDatas = [[${@dict.getType('bomLevel')}]];
var processMethodDatas = [[${@dict.getType('processMethod')}]];
// var subTableFormArray = [];
$(function(){
var options = {
url: ctx + "system/orderChild/list",
id: 'bootstrap-sub-table-1',
showSearch: false,
showRefresh: false,
showToggle: false,
showColumns: false,
uniqueId: "id",
pagination: false, // 设置不分页
sidePagination: "client",
queryParams: queryParams,
detailView: true,
onExpandRow : function(index, row, $detail) {
initChildTable(index, row, $detail);
},
/*onCollapseRow: function(index, row){
var childTableFormId = 'child_table_form_'+index;
var formData = $('#'+childTableFormId).serialize();
var formObj = $.common.formDataToObj(formData);
subTableFormArray.push(formObj);
},*/
columns: [
{
field: 'id',
title: '主键id',
visible: false
},
{
field: 'quoteId',
title: '关联销售订单编号',
visible: false
},
{
field: 'bomId',
title: 'bom主键Id',
visible: false
},
{
field: 'materialCode',
align: 'center',
title: '料号'
},
{
field: 'materialName',
align: 'center',
title: '物料名称',
},
{
field: 'materialType',
align: 'center',
title: '物料类型',
formatter: function(value, row, index) {
return $.table.selectCategoryLabel(materialTypeDatas, value);
}
},
{
field: 'unit',
align: 'center',
title: '单位',
formatter: function(value, row, index) {
return $.table.selectDictLabel(sysUnitClassDatas, value);
}
},
{
field: 'brand',
align: 'center',
title: '品牌'
},
{
field: 'describe',
align: 'center',
title: '描述'
},
{
field: 'processMethod',
align: 'center',
title: '半成品类型',
formatter: function(value, row, index) {
return $.table.selectDictLabel(processMethodDatas, value);
}
},
{
field: 'deliveryTime',
align: 'center',
title: '客户期望交付时间'
},
{
field: 'materialNum',
align: 'center',
title: '订单数量'
}
]
};
$.table.init(options);
})
initChildTable = function(index, row, $detail) {
var parentRow = row;
var parentRowIndex = index;
var childTableId = 'child_table_'+index;
var childFormTableId = 'child_form_table_'+index;
var childTableFormId = 'child_table_form_'+index;
// $detail.html('<form id="'+childTableFormId+'"><table id="'+childTableId+'"></table><table id="'+childFormTableId+'"></table></form>');
$detail.html('<table id="'+childTableId+'"></table><table id="'+childFormTableId+'"></table>');
// BOM展示
$('#'+childTableId).bootstrapTable({
url: ctx + "erp/bom/allLevelList",
method: 'post',
sidePagination: "server",
contentType: "application/x-www-form-urlencoded",
queryParams : {
parentId: parentRow.bomId
},
columns: [{
field: 'id',
title: '主键id',
visible: false
},
{
field: 'level',
title: '阶层',
formatter: function(value, row, index) {
return $.table.selectDictLabel(levelDatas, value);
}
},
{
field: 'bomNo',
title: 'BOM号',
formatter:function (value,row,index){
if (value == null || value == ''){
return '/';
}else{
return value
}
}
},
{
field: 'materialNo',
title: '料号',
formatter: function (value,row,index){
if (value == null || value == ''){
return '/';
}else{
return value
}
}
},
{
field: 'photoUrl',
title: '图片',
formatter: function(value, row, index) {
return $.table.imageView(value);
}
},
{
field: 'materialName',
title: '物料名称',
formatter: function (value,row,index){
if (value == null || value == ''){
return '/';
}else{
return value
}
}
},
{
field: 'materialType',
title: '物料类型',
formatter: function(value, row, index) {
return $.table.selectCategoryLabel(materialTypeDatas, value);
}
},
{
field: 'describe',
title: '描述',
formatter: function (value,row,index){
if (value == null || value == ''){
return '/';
}else{
return value
}
}
},
{
field: 'brand',
title: '品牌',
formatter: function (value,row,index){
if (value == null || value == ''){
return '/';
}else{
return value
}
}
},
{
field: 'unit',
title: '单位',
formatter: function (value,row,index){
if (value == null || value == ''){
return '/';
}else{
return value
}
}
},
{
field: 'processMethod',
title: '半成品类型',
formatter: function(value, row, index) {
return $.table.selectDictLabel(processMethodDatas, value);
}
},
{
field: 'useNum',
title: '用量',
formatter: function (value,row,index){
if (value == null || value == ''){
return '/';
}else{
return value
}
}
},
{
field: 'lossRate',
title: '损耗率',
formatter: function (value,row,index){
if (value == null || value == ''){
return '/';
}else{
return value + "%";
}
}
},
{
field: 'materialNum',
title: '订单用量',
formatter: function (value,row,index){
return parentRow.materialNum * row.useNum;
}
},
{
field: 'parentId',
title: '父级id',
visible: false,
},
{
field: 'sortNo',
title: '排序',
visible: false
}],
// 当所有数据被加载时触发
onLoadSuccess: function(data) {
},
});
// 预审部门展示
$('#'+childFormTableId).bootstrapTable({
url: ctx + "system/makeorderdept/list",
method: 'post',
sidePagination: "server",
contentType: "application/x-www-form-urlencoded",
queryParams : {
makeNo: $("#makeNo").val(),
materialNo: parentRow.materialCode
},
columns: [
{
field : 'id',
title : '生产订单部门ID',
formatter: function (value, row, index) {
var curIndex = parentRowIndex*6+index;
return '<input disabled class = "form-control" data-id = "id_'+curIndex+'" name="orderDepts['+curIndex+'].id" value="'+value+'"></input>';
}
},
{
field : 'makeNo',
title : '生产订单号',
visible: false,
formatter: function (value, row, index) {
var curIndex = parentRowIndex*6+index;
return '<input disabled class = "form-control" data-id = "id_'+curIndex+'" name="orderDepts['+curIndex+'].makeNo" value="'+value+'">';
}
},
{
field : 'materialNo',
title : '料号',
visible: false,
formatter: function (value, row, index) {
var curIndex = parentRowIndex*6+index;
return '<input disabled class = "form-control" data-id = "id_'+curIndex+'" name="orderDepts['+curIndex+'].materialNo" value="'+value+'">';
}
},
{
field : 'deptName',
title : '部门名称',
visible: false
},
{
field : 'planFinishDays',
title : '计划完成天数',
visible: false
},
{
field : 'actualFinishStartTime',
title : '实际完成开始时间',
visible: false
},
{
field : 'actualFinishEndTime',
title : '实际完成结束时间',
visible: false
},
{
field : 'deptNumber',
title : '部门',
formatter: function (value, row, index) {
/*if(subTableFormArray[parentRowIndex]){
value = subTableFormArray[parentRowIndex].deptName?subTableFormArray[parentRowIndex].deptName:value;
}*/
var curIndex = parentRowIndex*6+index;
return '<input disabled class = "form-control" data-id = "deptName_'+curIndex+'" name="orderDepts['+curIndex+'].deptName" value="'+row.deptName+'"><input disabled class = "form-control hidden" data-id = "deptNumber_'+curIndex+'" name="orderDepts['+curIndex+'].deptNumber" value="'+value+'">';
}
},
{
field: 'planFinishDate',
title: '计划完成时间',
formatter: function(value, row, index) {
var curIndex = parentRowIndex*6+index;
var endDateName = 'planFinishEndDate_'+parentRowIndex;
var startDateName = 'planFinishStartDate_'+parentRowIndex;
var html;
// 业务部门
if(row.deptNumber=='GMD'){
html = '<div class="input-daterange input-group">' +
'<input disabled type="text" class="form-control" data-id="'+startDateName+'" name ="orderDepts['+curIndex+'].planFinishStartDate" placeholder="开始时间" value="'+row.planFinishStartDate+'"/>\n' +
'<span class="input-group-addon">-</span>\n' +
'<input disabled type="text" class="form-control" data-id="'+endDateName+'" name="orderDepts['+curIndex+'].planFinishEndDate" placeholder="结束时间" value="'+row.planFinishEndDate+'"/></div>'
}else{
html = '<input disabled class = "form-control" data-id = "planFinishDays_'+curIndex+'" name="orderDepts['+curIndex+'].planFinishDays" value="'+row.planFinishDays+'">';
}
return html;
}
},
{
field : 'deptLeaderConfirmStatus',
title : '部门主管确认',
formatter: function(value, row, index) {
var curIndex = parentRowIndex*6+index;
var html = '<select disabled class="form-control" name="orderDepts['+curIndex+'].deptLeaderConfirmStatus">' +
'<option value="0" '+(value=='0'?'selected':"")+'>待确认</option>' +
'<option value="1" '+(value=='1'?'selected':"")+'>已确认</option>' +
'</select>';
return html;
}
},
{
field: 'actualFinishTime',
title: '实际完成时间',
formatter: function(value, row, index) {
if (row.actualFinishStartTime == null || row.actualFinishStartTime == ''){
return '';
}else if(row.actualFinishStartTime){
return row.actualFinishStartTime
}else if(row.actualFinishStartTime && row.actualFinishEndTime){
return row.actualFinishStartTime + '-' + row.actualFinishEndTime
}
}
}
],
// 当所有数据被加载时触发
onLoadSuccess: function(data) {
for (let i = 0; i < data.rows.length; i++) {
var curIndex = parentRowIndex*6+i;
var startDateIndex = 'planFinishStartDate_'+i;
var endDateIndex = 'planFinishEndDate_'+i;
$('[data-id="'+startDateIndex+'"]').datetimepicker({
format: 'yyyy-mm-dd',
minView: "month",
todayBtn: true,
autoclose: true,
}).on('changeDate', function(event) {
event.preventDefault();
event.stopPropagation();
var startTime = event.date;
$('[data-id="'+endDateIndex+'"]').datetimepicker('setStartDate', startTime);
});
$('[data-id="'+endDateIndex+'"]').datetimepicker({
format: 'yyyy-mm-dd',
minView: "month",
todayBtn: true,
autoclose: true,
}).on('changeDate', function(event) {
event.preventDefault();
event.stopPropagation();
var endTime = event.date;
$('[data-id="'+startDateIndex+'"]').datetimepicker('setEndDate', endTime);
});
}
},
});
};
function queryParams(params) {
var curParams = {
// 传递参数查询参数
// pageSize: params.limit,
// pageNum: params.offset / params.limit + 1,
// searchValue: params.search,
// orderByColumn: params.sort,
// isAsc: params.order
};
// 额外传参
curParams.quoteId = $("#saleNo").val();
return curParams;
}
$("#form-makeorder-edit").validate({
focusCleanup: true
});
function submitHandler() {
debugger
// var data = $("#form-makeorder-edit").serializeArray();
var data = {
makeNo:$("#makeNo").val(),
saleNo:$("#saleNo").val()
};
$.operate.save(prefix + "/detail", data);
}
</script>
</body>
</html>

6
ruoyi-admin/src/main/resources/templates/system/makeorder/makeorder.html

@ -101,6 +101,7 @@
var editFlag = [[${@permission.hasPermi('system:makeorder:edit')}]]; var editFlag = [[${@permission.hasPermi('system:makeorder:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:makeorder:remove')}]]; var removeFlag = [[${@permission.hasPermi('system:makeorder:remove')}]];
var cancelFlag = [[${@permission.hasPermi('system:makeorder:cancel')}]]; var cancelFlag = [[${@permission.hasPermi('system:makeorder:cancel')}]];
var detailFlag = [[${@permission.hasPermi('system:makeorder:detail')}]];
var restoreFlag = [[${@permission.hasPermi('system:makeorder:restore')}]]; var restoreFlag = [[${@permission.hasPermi('system:makeorder:restore')}]];
var makeStatusDatas = [[${@dict.getType('sys_erp_makeStatus')}]]; var makeStatusDatas = [[${@dict.getType('sys_erp_makeStatus')}]];
var eceiptStatusDatas = [[${@dict.getType('eceiptStatus')}]]; var eceiptStatusDatas = [[${@dict.getType('eceiptStatus')}]];
@ -115,6 +116,7 @@
updateUrl: prefix + "/edit/{id}", updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove", removeUrl: prefix + "/remove",
cancelUrl: prefix + "/cancel/{id}", cancelUrl: prefix + "/cancel/{id}",
detailUrl: prefix + "/detail{id}",
restoreUrl: prefix + "/restore/{id}", restoreUrl: prefix + "/restore/{id}",
exportUrl: prefix + "/export", exportUrl: prefix + "/export",
modalName: "生产订单", modalName: "生产订单",
@ -227,7 +229,9 @@
var actions = []; var actions = [];
// actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> '); // actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
// actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a> '); // actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a> ');
//详情页面 工程审核为详情页面
// actions.push('<a class="btn btn-success btn-xs " href="javascript:void(0)" onclick="$.operate.detail(\'' + row.id + '\')"><i class="fa fa-edit"></i>详情</a> ');
actions.push('<a class="btn btn-success btn-xs " href="javascript:void(0)" onclick="$.modal.open(\'详情\',\'' + prefix+"/detail/"+row.id + '\')">详情</a> ');
// 评审 // 评审
if(row.makeStatus == '0'){ if(row.makeStatus == '0'){
actions.push('<a class="btn btn-success btn-xs " href="javascript:void(0)" onclick="$.modal.open(\'部门评审\',\'' + prefix+"/bmps/"+row.id + '\')">评审</a> '); actions.push('<a class="btn btn-success btn-xs " href="javascript:void(0)" onclick="$.modal.open(\'部门评审\',\'' + prefix+"/bmps/"+row.id + '\')">评审</a> ');

Loading…
Cancel
Save