Browse Source

[feat]售后管理:

出货设备列表
新增详情按钮
新增详情页面
dev
liuxiaoxu 5 months ago
parent
commit
a8f0578513
  1. 29
      ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AfterSalesShippingDeviceController.java
  2. 184
      ruoyi-admin/src/main/resources/templates/aftersales/shippingDevice/detail.html
  3. 11
      ruoyi-admin/src/main/resources/templates/aftersales/shippingDevice/shippingDevice.html

29
ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AfterSalesShippingDeviceController.java

@ -2,6 +2,7 @@ package com.ruoyi.aftersales.controller;
import java.util.List; import java.util.List;
import com.ruoyi.aftersales.domain.AftersalesOrder;
import com.ruoyi.aftersales.domain.dto.*; import com.ruoyi.aftersales.domain.dto.*;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysCustomer; import com.ruoyi.system.domain.SysCustomer;
@ -135,6 +136,34 @@ public class AfterSalesShippingDeviceController extends BaseController
return toAjax(afterSalesShippingDeviceService.updateAfterSalesShippingDevice(dto)); return toAjax(afterSalesShippingDeviceService.updateAfterSalesShippingDevice(dto));
} }
/**
* 查看出货设备详情
*/
@GetMapping("/detail/{shippingDeviceCode}")
public String detail(@PathVariable("shippingDeviceCode") Long shippingDeviceCode, ModelMap mmap)
{
AfterSalesShippingDeviceDto afterSalesShippingDeviceDto = afterSalesShippingDeviceService.selectAfterSalesShippingDeviceDtoById(shippingDeviceCode);
//查找客户信息
String customerId = afterSalesShippingDeviceDto.getCustomerId();
CustomerDto customerDto = customerService.selectCustomerDtoByEnterpriseCode(customerId);
if (StringUtils.isNotNull(customerDto)){
mmap.put("customerDto",customerDto);
}
//查找生产信息
AfterSalesMakeOrderDto makeOrderDto = afterSalesShippingDeviceService.selectAfterSalesMakeOrderDtoById(shippingDeviceCode);
if (StringUtils.isNotNull(makeOrderDto)){
mmap.put("makeOrderDto",makeOrderDto);
}
//查找仓库和售后信息 后续补充
WarehouseAndAfterSalesDto warehouseAndAfterSalesDto = afterSalesShippingDeviceService.selectWarehouseAndAfterSalesDtoById(shippingDeviceCode);
if (StringUtils.isNotNull(warehouseAndAfterSalesDto)){
mmap.put("warehouseAndAfterSalesDto",warehouseAndAfterSalesDto);
}
mmap.put("afterSalesShippingDeviceDto", afterSalesShippingDeviceDto);
return prefix + "/detail";
}
/** /**
* 删除出货设备 * 删除出货设备
*/ */

184
ruoyi-admin/src/main/resources/templates/aftersales/shippingDevice/detail.html

@ -1,234 +1,248 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head> <head>
<th:block th:include="include :: header('新增出货设备')" /> <th:block th:include="include :: header('修改出货设备')" />
<th:block th:include="include :: datetimepicker-css" /> <th:block th:include="include :: datetimepicker-css" />
</head> </head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-shippingDevice-add"> <form class="form-horizontal m" id="form-shippingDevice-edit" th:object="${afterSalesShippingDeviceDto}">
<input name="shippingDeviceCode" th:field="*{shippingDeviceCode}" type="hidden">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label is-required">出货设备id:</label> <label class="col-sm-3 control-label is-required">出货设备id:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="shippingDeviceId" class="form-control" type="text" required> <input name="shippingDeviceId" th:field="*{shippingDeviceId}" class="form-control" type="text" required>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">关联单号:</label> <label class="col-sm-3 control-label">关联单号:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="makeNo" class="form-control" type="text"> <input name="makeNo" th:field="*{makeNo}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">料号:</label> <label class="col-sm-3 control-label">料号:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="materialNo" class="form-control" type="text"> <input name="materialNo" th:field="*{materialNo}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">物料图片:</label> <label class="col-sm-3 control-label">图片:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="materialPhotourl" class="form-control" type="text"> <input name="materialPhotourl" th:field="*{materialPhotourl}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">物料名称:</label> <label class="col-sm-3 control-label">物料名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="materialName" class="form-control" type="text"> <input name="materialName" th:field="*{materialName}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">物料类型:</label> <label class="col-sm-3 control-label">物料类型:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="materialType" class="form-control" type="text"> <input name="materialType" th:field="*{materialType}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">物料类别:</label> <label class="col-sm-3 control-label">物料类别:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="materialClass" class="form-control" type="text"> <input name="materialClass" th:field="*{materialClass}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">物料型号</label> <label class="col-sm-3 control-label">单位</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="materialModelCode" class="form-control" type="text"> <input name="materialUnit" th:field="*{materialUnit}" 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="materialUnit" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">物料品牌:</label> <label class="col-sm-3 control-label">物料品牌:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="materialBrand" class="form-control" type="text"> <input name="materialBrand" th:field="*{materialBrand}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">物料描述:</label> <label class="col-sm-3 control-label">物料描述:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<textarea name="materialDescribe" class="form-control"></textarea> <textarea name="materialDescribe" class="form-control">[[*{materialDescribe}]]</textarea>
</div> </div>
</div> </div>
</form>
<!-- 客户信息 -->
<div class="mb-4">
<h4 class="font-weight-bold">客户信息</h4>
<hr>
<form class="form-horizontal m" id="form-customer-edit" th:object="${customerDto}">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">设备型号:</label> <label class="col-sm-3 control-label">客户ID</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="deviceModelCode" class="form-control" type="text"> <input name="enterpriseCode" th:field="*{enterpriseCode}" class="form-control" type="text" required >
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">设备流水号</label> <label class="col-sm-3 control-label is-required">客户名称</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="deviceRunningNumber" class="form-control" type="text"> <input name="enterpriseName" th:field="*{enterpriseName}" class="form-control" type="text" required>
</div> </div>
</div> </div>
<div class="form-group" > <div class="form-group" >
<label class="col-sm-3 control-label">生产图片</label> <label class="col-sm-3 control-label is-required is-required" >客户联系人</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="makePhotourl" class="form-control" type="text"> <input name="customerContact" th:field="*{customerContact}" class="form-control" type="text" required>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">SN号</label> <label class="col-sm-3 control-label is-required">联系人电话</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="snCode" class="form-control" type="text"> <input name="contactNumber" th:field="*{contactNumber}" class="form-control" type="text" required>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">售后图片地址:</label> <label class="col-sm-3 control-label">公司地址:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="aftersalesPhotourl" class="form-control" type="text"> <input name="customerAddress" th:field="*{customerAddress}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">出厂日期</label> <label class="col-sm-3 control-label is-required">收货地址</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <input required name="deliveryAddress" th:field="*{deliveryAddress}" class="form-control" type="text">
<input name="factoryDate" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div> </div>
</div> </div>
</form>
</div> </div>
<!--生产信息-->
<div class="mb-4">
<h4 class="font-weight-bold">生产信息</h4>
<hr>
<form class="form-horizontal m" id="form-makeOrderDto-edit" th:object="${makeOrderDto}">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">保修期:</label> <label class="col-sm-3 control-label">设备型号</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="guaranteePeriod" class="form-control" type="text"> <input name="deviceModelCode" th:field="*{deviceModelCode}" class="form-control" type="number" required >
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">是否过保修期</label> <label class="col-sm-3 control-label is-required">流水号</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="guaranteePeriodFlag" class="form-control m-b" th:with="type=${@dict.getType('guarantee_period_flag')}"> <input name="deviceRunningNumber" th:field="*{deviceRunningNumber}" class="form-control" type="number" required>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div> </div>
</div> </div>
<div class="form-group" > <div class="form-group" >
<label class="col-sm-3 control-label">锁机时间</label> <label class="col-sm-3 control-label is-required is-required" >图片</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <input name="makePhotoUrl" th:field="*{makePhotoUrl}" class="form-control" type="text" required>
<input name="lockDate" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">是否有锁机时间</label> <label class="col-sm-3 control-label is-required">生产员</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="lockDateFlag" class="form-control m-b" th:with="type=${@dict.getType('lock_date_flag')}"> <input name="makeName" th:field="*{makeName}" class="form-control" type="text" required>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div> </div>
</div> </div>
</form>
</div>
<!--仓库和售后信息-->
<div class="mb-4">
<h4 class="font-weight-bold">仓库和售后信息</h4>
<hr>
<form class="form-horizontal m" id="form-warehouseAndAfterSalesDto-edit" th:object="${warehouseAndAfterSalesDto}">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">损耗品到期时间:</label> <label class="col-sm-3 control-label">SN号</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <input name="snCode" th:field="*{snCode}" class="form-control" type="text">
<input name="wastageExpireDate" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">是否过损耗品到期时间</label> <label class="col-sm-3 control-label">售后图片</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="wastageExpireFlag" class="form-control m-b" th:with="type=${@dict.getType('wastage_expire_flag')}"> <input name="aftersalesPhotourl" th:field="*{aftersalesPhotourl}" class="form-control" type="text">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">二次维修后部件质保时间</label> <label class="col-sm-3 control-label">出厂日期</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <div class="input-group date">
<input name="componentGuaranteeDate" class="form-control" placeholder="yyyy-MM-dd" type="text"> <input name="factoryDate" th:value="*{factoryDate}" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span> <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div> </div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">是否过二次维修后部件质保日期:</label> <label class="col-sm-3 control-label">保修期:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="componentGuaranteeFlag" class="form-control m-b" th:with="type=${@dict.getType('component_guarantee_flag')}"> <input name="guaranteePeriod" th:field="*{guaranteePeriod}" class="form-control" type="text">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">工程员姓名</label> <label class="col-sm-3 control-label">锁机时间</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="engineerName" class="form-control" type="text"> <div class="input-group date">
<input name="lockDate" th:value="*{lockDate}" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-sm-3 control-label">业务员姓名:</label>
<div class="col-sm-8">
<input name="salesmanName" class="form-control" type="text">
</div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">客户ID</label> <label class="col-sm-3 control-label">是否有锁机时间:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="customerId" class="form-control" type="text"> <select name="lockDateFlag" class="form-control m-b" th:with="type=${@dict.getType('lock_date_flag')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{lockDateFlag}"></option>
</select>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">客户名称</label> <label class="col-sm-3 control-label">损耗品到期时间</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="customerName" class="form-control" type="text"> <div class="input-group date">
</div> <input name="wastageExpireDate" th:value="*{wastageExpireDate}" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div> </div>
<div class="form-group">
<label class="col-sm-3 control-label">维修单号:</label>
<div class="col-sm-8">
<input name="maintainOrderCode" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">维修时间:</label> <label class="col-sm-3 control-label">二次维修后部件质保时间:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <div class="input-group date">
<input name="maintainTime" class="form-control" placeholder="yyyy-MM-dd" type="text"> <input name="componentGuaranteeDate" th:value="*{componentGuaranteeDate}" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span> <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div> </div>
</div> </div>
</div> </div>
</form> </form>
</div> </div>
</div>
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" /> <th:block th:include="include :: datetimepicker-js" />
<script th:inline="javascript"> <script th:inline="javascript">
var prefix = ctx + "aftersales/shippingDevice" var prefix = ctx + "aftersales/shippingDevice";
$("#form-shippingDevice-add").validate({ $("#form-shippingDevice-edit").validate({
focusCleanup: true focusCleanup: true
}); });
function submitHandler() { function submitHandler() {
if ($.validate.form()) { if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-shippingDevice-add').serialize());
// 获取表单数据
const shippingDeviceData = $("#form-shippingDevice-edit").serializeArray();
console.log(shippingDeviceData);
const customerData = $("#form-customer-edit").serializeArray();
const makeOrderData= $("#form-makeOrderDto-edit").serializeArray();
const warehouseAndAfterSalesData= $("#form-warehouseAndAfterSalesDto-edit").serializeArray();
// 合并表单数据为一个 JSON 对象
const combinedData = shippingDeviceData.concat(customerData, makeOrderData,warehouseAndAfterSalesData).reduce((acc, curr) => {
acc[curr.name] = curr.value;
return acc;
}, {});
// 使用 JSON.stringify() 序列化数据
const jsonData = JSON.stringify(combinedData);
// 发送 AJAX 请求到后端接口
$.operate.saveJson(prefix + "/edit", jsonData);
} }
} }

11
ruoyi-admin/src/main/resources/templates/aftersales/shippingDevice/shippingDevice.html

@ -131,6 +131,7 @@
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<script th:inline="javascript"> <script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('aftersales:shippingDevice:edit')}]]; var editFlag = [[${@permission.hasPermi('aftersales:shippingDevice:edit')}]];
var detailFlag = [[${@permission.hasPermi('aftersales:shippingDevice:detail')}]];
var removeFlag = [[${@permission.hasPermi('aftersales:shippingDevice:remove')}]]; var removeFlag = [[${@permission.hasPermi('aftersales:shippingDevice:remove')}]];
var cancelFlag = [[${@permission.hasPermi('aftersales:shippingDevice:cancel')}]]; var cancelFlag = [[${@permission.hasPermi('aftersales:shippingDevice:cancel')}]];
var restoreFlag = [[${@permission.hasPermi('aftersales:shippingDevice:restore')}]]; var restoreFlag = [[${@permission.hasPermi('aftersales:shippingDevice:restore')}]];
@ -313,12 +314,22 @@
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.shippingDeviceCode + '\')"><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.shippingDeviceCode + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-success btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="detail(\'' + row.shippingDeviceCode + '\')"><i class="fa fa-edit"></i>详情</a> ');
return actions.join(''); return actions.join('');
} }
}] }]
}; };
$.table.init(options); $.table.init(options);
}); });
/*详情*/
function detail(shippingDeviceCode) {
// 在这里编写派单操作的逻辑,使用传入的aftersalesOrderId参数
// 示例逻辑:
var url = ctx + 'aftersales/shippingDevice/detail/'+shippingDeviceCode;
console.log(url);
$.modal.open("上传报告",url);
}
</script> </script>
</body> </body>
</html> </html>
Loading…
Cancel
Save