Browse Source

[feat]:生产订单-预审功能

dev
youjianchi 5 months ago
parent
commit
47004ce6b8
  1. 14
      ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java
  2. 2
      ruoyi-admin/src/main/java/com/ruoyi/system/dto/SysMakeorderDeptDto.java
  3. 13
      ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js
  4. 490
      ruoyi-admin/src/main/resources/templates/system/makeorder/bmps.html

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

@ -47,6 +47,18 @@ public class SysMakeOrderController extends BaseController
return prefix + "/makeorder";
}
/**
* 跳转部门评审页面
*/
@GetMapping("/bmps/{id}")
public String bmps(@PathVariable("id") Long id, ModelMap mmap)
{
SysMakeOrder sysMakeOrder = sysMakeOrderService.selectSysMakeOrderById(id);
mmap.put("sysMakeOrder", sysMakeOrder);
return prefix + "/bmps";
}
/**
* 部门评审
* @param makeorderDeptDto
@ -55,7 +67,7 @@ public class SysMakeOrderController extends BaseController
@PostMapping("/deptReview")
@ResponseBody
public AjaxResult deptReview(SysMakeorderDeptDto makeorderDeptDto){
List<SysMakeorderDept> makeorderDeptList = makeorderDeptDto.getMakeorderDeptList();
List<SysMakeorderDept> makeorderDeptList = makeorderDeptDto.getOrderDepts();
if(CollectionUtil.isEmpty(makeorderDeptList)){
AjaxResult.error("部门评审数据不能为空!");
}

2
ruoyi-admin/src/main/java/com/ruoyi/system/dto/SysMakeorderDeptDto.java

@ -14,5 +14,5 @@ import java.util.List;
@Data
public class SysMakeorderDeptDto implements Serializable {
private static final long serialVersionUID = 9089739788908492404L;
List<SysMakeorderDept> makeorderDeptList;
List<SysMakeorderDept> orderDepts;
}

13
ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js

@ -127,6 +127,7 @@ var table = {
onDblClickCell: options.onDblClickCell, // 双击某格触发的事件
onEditableSave: options.onEditableSave, // 行内编辑保存的事件
onExpandRow: options.onExpandRow, // 点击详细视图的事件
onCollapseRow: options.onCollapseRow, // 点击收缩视图的事件
onPostBody: options.onPostBody, // 渲染完成后执行的事件
maintainSelected: options.maintainSelected, // 前端翻页时保留所选行
rememberSelected: options.rememberSelected, // 启用翻页记住前面的选择
@ -1691,6 +1692,18 @@ var table = {
});
return JSON.stringify(obj);
},
// formData数据转对象
formDataToObj: function(formData) {
// 处理serialize字符串
var dataArray = formData.split('&');
// 返回对象
var formDataObj = {};
dataArray.forEach(function(item) {
var keyValue = item.split('=');
formDataObj[keyValue[0]] = decodeURIComponent(keyValue[1] || '');
});
return formDataObj;
},
// 数据字典转下拉框
dictToSelect: function(datas, value, name) {
var actions = [];

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

@ -0,0 +1,490 @@
<!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 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 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 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 name="salesOrderType" class="form-control" type="text" th:with="dictList=${@dict.getType('sys_order_type')}" required>
<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 processMethodDatas = [[${@dict.getType('processMethod')}]];
var sysUnitClassDatas = [[${@dict.getType('sys_unit_class')}]];
var materialTypeDatas = [[${@category.getChildByCode('materialType')}]];
var levelDatas = [[${@dict.getTypeSelect('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: 'bomId',
title: 'bom主键Id',
visible: false
},
{
field: 'materialNo',
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('<table id="'+childTableId+'"></table><form id="'+childTableFormId+'"><table id="'+childFormTableId+'"></table></form>');
// BOM展示
$('#'+childTableId).bootstrapTable({
url: ctx + "erp/bom/allLevelList",
method: 'post',
sidePagination: "server",
contentType: "application/x-www-form-urlencoded",
queryParams : {
parentId: row.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){
if (value == null || value == ''){
return '/';
}else{
return parentRow.materialNum * value;
}
}
},
{
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: row.makeNo,
materialNo: row.materialNo
},
columns: [
{
field : 'id',
title : '生产订单部门ID'
},
{
field : 'makeNo',
title : '生产订单号',
visible: false
},
{
field : 'materialNo',
title : '料号',
visible: false
},
{
field : 'deptNumber',
title : '部门编号',
visible: false
},
{
field : 'planFinishDays',
title : '计划完成天数',
visible: false
},
{
field : 'actualFinishStartTime',
title : '实际完成开始时间',
visible: false
},
{
field : 'actualFinishEndTime',
title : '实际完成结束时间',
visible: false
},
{
field : 'deptName',
title : '部门',
formatter: function (value, row, index) {
if(subTableFormArray[parentRowIndex]){
value = subTableFormArray[parentRowIndex].deptName?subTableFormArray[parentRowIndex].deptName:value;
}
return '<input readonly class = "form-control" data-id = "deptName_'+parentRowIndex+'" name="orderDepts['+parentRowIndex+'].deptName" value="'+value+'"></input>';
}
},
{
field: 'planFinishDate',
title: '计划完成时间',
formatter: function(value, row, index) {
var startDateName = 'planFinishStartDate_'+index;
var endDateName = 'planFinishEndDate_'+index;
var html;
// 业务部门
if(row.deptNumber=='GMD'){
html = '<div class="input-daterange input-group"><input type="text" class="form-control" data-id="'+startDateName+'" name ="orderDepts['+parentRowIndex+'].planFinishStartDate" placeholder="开始时间"/>\n' +
'<span class="input-group-addon">-</span>\n' +
'<input type="text" class="form-control" data-id="'+endDateName+'" name="orderDepts['+parentRowIndex+'].planFinishEndDate" placeholder="结束时间"/></div>'
}else{
html = '<input class = "form-control" data-id = "planFinishDays_'+parentRowIndex+'" name="orderDepts['+parentRowIndex+'].planFinishDays" value="'+value+'"></input>';
}
return html;
}
},
{
field : 'deptLeaderConfirmStatus',
title : '部门主管确认',
formatter: function(value, row, index) {
if (value == null || value == ''){
return '';
}else{
if(value=='0'){
return '待确认';
}else if(value=='1'){
return '已确认';
}
}
}
},
{
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 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() {
var data = $('#bootstrap-sub-table-1').bootstrapTable('getData');
var count = data.length;
var allFormData;
for (let i = 0; i < count; i++) {
var childTableFormId = 'child_table_form_'+i;
if($("#"+childTableFormId).length>0){
if(i==0){
allFormData = $("#"+childTableFormId).serialize();
}else{
allFormData = allFormData +'&'+ $("#"+childTableFormId).serialize();
}
}
}
$.operate.save(prefix + "/deptReview", allFormData);
}
</script>
</body>
</html>
Loading…
Cancel
Save