打印二维码实现
This commit is contained in:
parent
bdcf096d99
commit
24b561af81
|
|
@ -63,13 +63,26 @@ public class BusiProductOperateController extends BaseController {
|
|||
}
|
||||
|
||||
/**
|
||||
* 新增成品操作流水
|
||||
* 入库或退回
|
||||
*/
|
||||
@GetMapping("/add")
|
||||
public String add() {
|
||||
return prefix + "/add";
|
||||
@GetMapping("/addIn")
|
||||
public String addIn(@RequestParam(name = "operType", required = false) String operType, @RequestParam(name = "inTab", required = false) String inTab, ModelMap mmap) {
|
||||
mmap.put("operType",operType);
|
||||
mmap.put("inTab",inTab);
|
||||
return prefix + "/addIn";
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库
|
||||
*/
|
||||
@GetMapping("/addOut")
|
||||
public String addOut(@RequestParam(name = "operType", required = false) String operType, @RequestParam(name = "inTab", required = false) String inTab, ModelMap mmap) {
|
||||
mmap.put("operType",operType);
|
||||
mmap.put("inTab",inTab);
|
||||
return prefix + "/addOut";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增保存成品操作流水
|
||||
*/
|
||||
|
|
@ -132,4 +145,24 @@ public class BusiProductOperateController extends BaseController {
|
|||
List<Map<String, String>> list = busiProductOperateService.selProductColorByLineIdAndSize(queryMap);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过订单ID查询库存尺码列表
|
||||
*/
|
||||
@PostMapping("/selProductSizeByOrderId")
|
||||
@ResponseBody
|
||||
public AjaxResult selProductSizeByOrderId(@RequestParam(name = "orderId", required = false) String orderId) {
|
||||
List<Map<String, String>> list = busiProductOperateService.selProductSizeByOrderId(orderId);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过订单ID和产品尺码查询库存颜色列表
|
||||
*/
|
||||
@PostMapping("/selProductColorByOrderIdAndSize")
|
||||
@ResponseBody
|
||||
public AjaxResult selProductColorByOrderIdAndSize(@RequestParam Map<String, String> queryMap) {
|
||||
List<Map<String, String>> list = busiProductOperateService.selProductColorByOrderIdAndSize(queryMap);
|
||||
return success(list);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,5 +65,9 @@ public interface BusiProductOperateMapper
|
|||
|
||||
public List<Map<String, String>> selProductColorByLineIdAndSize(Map<String, String> map);
|
||||
|
||||
public List<Map<String, String>> selProductSizeByOrderId(String lineId);
|
||||
|
||||
public List<Map<String, String>> selProductColorByOrderIdAndSize(Map<String, String> map);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,4 +64,8 @@ public interface IBusiProductOperateService
|
|||
public List<Map<String, String>> selProductSizeByLineId(String lineId);
|
||||
|
||||
public List<Map<String, String>> selProductColorByLineIdAndSize(Map<String, String> map);
|
||||
|
||||
public List<Map<String, String>> selProductSizeByOrderId(String lineId);
|
||||
|
||||
public List<Map<String, String>> selProductColorByOrderIdAndSize(Map<String, String> map);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ public class BusiProductOperateServiceImpl implements IBusiProductOperateService
|
|||
if ("1".equals(busiProductOperate.getOprateType())) { //1为入库
|
||||
busiProductStock.setAmount(busiProductStock.getAmount() + busiProductOperate.getAmount());
|
||||
updateCompletedAmount(busiProductOperate.getSubTaskId(), busiProductOperate.getAmount()); // 更新子任务完成量
|
||||
|
||||
} else {// 出库或退回
|
||||
if (busiProductOperate.getAmount() > busiProductStock.getAmount()) {
|
||||
throw new ServiceException("操作值超过库存,当前库存值:" + busiProductStock.getAmount());
|
||||
|
|
@ -86,6 +87,9 @@ public class BusiProductOperateServiceImpl implements IBusiProductOperateService
|
|||
busiProductOperate.setProductValue(-busiProductOperate.getProductValue());
|
||||
updateCompletedAmount(busiProductOperate.getSubTaskId(), -busiProductOperate.getAmount()); // 更新子任务完成量
|
||||
}
|
||||
if ("2".equals(busiProductOperate.getOprateType())) {//出库时,还要考虑下订单状态
|
||||
|
||||
}
|
||||
}
|
||||
busiProductStock.setUpdateTime(new Date());
|
||||
busiProductStockMapper.updateBusiProductStock(busiProductStock);
|
||||
|
|
@ -108,6 +112,15 @@ public class BusiProductOperateServiceImpl implements IBusiProductOperateService
|
|||
private void updateCompletedAmount(String subTaskId, long operateAmount) {
|
||||
BusiSubTask busiSubTask = subTaskMapper.selectBusiSubTaskById(subTaskId);
|
||||
long completedAmount = busiSubTask.getCompletedAmount();
|
||||
if (operateAmount > 0) {// 若果操作为入库
|
||||
if(completedAmount > busiSubTask.getTargetAmount()){
|
||||
busiSubTask.setStatus("2"); //子任务完成
|
||||
//若子任务为完成,检查任务是否完成,任务若完成,则更新状态同时释放产线为空闲
|
||||
//若任务完成,则同时要检查订单状态,若订单所有任务完成,更新订单状态为生产完成。
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
busiSubTask.setCompletedAmount(completedAmount + operateAmount);
|
||||
subTaskMapper.updateBusiSubTask(busiSubTask); // 更新子任务完成量
|
||||
}
|
||||
|
|
@ -186,4 +199,14 @@ public class BusiProductOperateServiceImpl implements IBusiProductOperateService
|
|||
public List<Map<String, String>> selProductColorByLineIdAndSize(Map<String, String> map) {
|
||||
return busiProductOperateMapper.selProductColorByLineIdAndSize(map);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, String>> selProductSizeByOrderId(String orderId) {
|
||||
return busiProductOperateMapper.selProductSizeByOrderId(orderId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, String>> selProductColorByOrderIdAndSize(Map<String, String> map) {
|
||||
return busiProductOperateMapper.selProductColorByOrderIdAndSize(map);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="size != null and size != ''"> and bps.size = #{size}</if>
|
||||
<if test="oprateType != null and oprateType != ''"> and bpo.oprate_type = #{oprateType}</if>
|
||||
</where>
|
||||
order by create_time DESC
|
||||
</select>
|
||||
|
||||
<select id="selectBusiProductOperateById" parameterType="String" resultMap="BusiProductOperateResult">
|
||||
|
|
@ -107,11 +108,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</select>
|
||||
|
||||
<select id="selProductColorByLineIdAndSize" parameterType="java.util.Map" resultType="java.util.Map">
|
||||
SELECT bpr.color,bpr.amount,bst.completed_amount completedAmount,bst.target_amount targetAmount,bt.order_id orderId,bst.id subTaskId,bst.task_id taskId from busi_sub_task bst
|
||||
SELECT bpr.color,bpr.amount,bst.completed_amount completedAmount,bst.target_amount targetAmount,bt.order_id orderId,bo.identification_code orderName,bst.id subTaskId,bst.task_id taskId from busi_sub_task bst
|
||||
left JOIN busi_product_require bpr on bst.product_require_id = bpr.id
|
||||
left JOIN busi_task bt on bt.id = bst.task_id
|
||||
left JOIN busi_order bo on bo.id = bt.order_id
|
||||
WHERE bt.prison_line_id = #{lineId} and bt.`status`=1 and bpr.size = #{size}
|
||||
</select>
|
||||
|
||||
<select id="selProductSizeByOrderId" parameterType="String" resultType="java.util.Map">
|
||||
SELECT bps.size from busi_product_stock bps
|
||||
WHERE bps.order_id = #{orderId}
|
||||
</select>
|
||||
|
||||
<select id="selProductColorByOrderIdAndSize" parameterType="java.util.Map" resultType="java.util.Map">
|
||||
SELECT bps.color,bps.order_id orderId,bps.id productStockId from busi_product_stock bps
|
||||
WHERE bps.order_id = #{orderId} and bps.size = #{size}
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
(function( $ ){
|
||||
$.fn.qrcode = function(options) {
|
||||
// if options is string,
|
||||
if( typeof options === 'string' ){
|
||||
options = { text: options };
|
||||
}
|
||||
|
||||
// set default values
|
||||
// typeNumber < 1 for automatic calculation
|
||||
options = $.extend( {}, {
|
||||
render : "canvas",
|
||||
width : 256,
|
||||
height : 256,
|
||||
typeNumber : -1,
|
||||
correctLevel : QRErrorCorrectLevel.H,
|
||||
background : "#ffffff",
|
||||
foreground : "#000000"
|
||||
}, options);
|
||||
|
||||
var createCanvas = function(){
|
||||
// create the qrcode itself
|
||||
var qrcode = new QRCode(options.typeNumber, options.correctLevel);
|
||||
qrcode.addData(options.text);
|
||||
qrcode.make();
|
||||
|
||||
// create canvas element
|
||||
var canvas = document.createElement('canvas');
|
||||
canvas.width = options.width;
|
||||
canvas.height = options.height;
|
||||
var ctx = canvas.getContext('2d');
|
||||
|
||||
// compute tileW/tileH based on options.width/options.height
|
||||
var tileW = options.width / qrcode.getModuleCount();
|
||||
var tileH = options.height / qrcode.getModuleCount();
|
||||
|
||||
// draw in the canvas
|
||||
for( var row = 0; row < qrcode.getModuleCount(); row++ ){
|
||||
for( var col = 0; col < qrcode.getModuleCount(); col++ ){
|
||||
ctx.fillStyle = qrcode.isDark(row, col) ? options.foreground : options.background;
|
||||
var w = (Math.ceil((col+1)*tileW) - Math.floor(col*tileW));
|
||||
var h = (Math.ceil((row+1)*tileH) - Math.floor(row*tileH));
|
||||
ctx.fillRect(Math.round(col*tileW),Math.round(row*tileH), w, h);
|
||||
}
|
||||
}
|
||||
// return just built canvas
|
||||
return canvas;
|
||||
}
|
||||
|
||||
// from Jon-Carlos Rivera (https://github.com/imbcmdth)
|
||||
var createTable = function(){
|
||||
// create the qrcode itself
|
||||
var qrcode = new QRCode(options.typeNumber, options.correctLevel);
|
||||
qrcode.addData(options.text);
|
||||
qrcode.make();
|
||||
|
||||
// create table element
|
||||
var $table = $('<table></table>')
|
||||
.css("width", options.width+"px")
|
||||
.css("height", options.height+"px")
|
||||
.css("border", "0px")
|
||||
.css("border-collapse", "collapse")
|
||||
.css('background-color', options.background);
|
||||
|
||||
// compute tileS percentage
|
||||
var tileW = options.width / qrcode.getModuleCount();
|
||||
var tileH = options.height / qrcode.getModuleCount();
|
||||
|
||||
// draw in the table
|
||||
for(var row = 0; row < qrcode.getModuleCount(); row++ ){
|
||||
var $row = $('<tr></tr>').css('height', tileH+"px").appendTo($table);
|
||||
|
||||
for(var col = 0; col < qrcode.getModuleCount(); col++ ){
|
||||
$('<td></td>')
|
||||
.css('width', tileW+"px")
|
||||
.css('background-color', qrcode.isDark(row, col) ? options.foreground : options.background)
|
||||
.appendTo($row);
|
||||
}
|
||||
}
|
||||
// return just built canvas
|
||||
return $table;
|
||||
}
|
||||
|
||||
|
||||
return this.each(function(){
|
||||
var element = options.render == "canvas" ? createCanvas() : createTable();
|
||||
$(element).appendTo(this);
|
||||
});
|
||||
};
|
||||
})( jQuery );
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,101 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Demo page</title>
|
||||
</head>
|
||||
<body>
|
||||
<p></p>
|
||||
|
||||
<div class="demo">
|
||||
<div>
|
||||
<span id="code"></span>
|
||||
</div>
|
||||
<button id="btn" onclick="addText(150,12,2)">添加文字</button>
|
||||
<button id="print" onclick="print()">打印</button>
|
||||
</div>
|
||||
|
||||
<script src="jquery.min.js"></script>
|
||||
<script type="text/javascript" src="qrcode.js"></script>
|
||||
<script type="text/javascript" src="jquery.qrcode.js"></script>
|
||||
<script>
|
||||
var arr = [];//作为全局变量,可以通过遍历数组来实现批量生成二维码功能
|
||||
arr.push(['1区1线|HS0001|XXXXS|红色|30', '1区1线|HS001|XXS|红色|30'])
|
||||
// arr.push(['https://http://www.sina.com.cn/','新浪'])
|
||||
|
||||
$(function () {
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
var urlstr = arr[i][0];
|
||||
console.log(urlstr)
|
||||
$("#code").qrcode({
|
||||
render: "canvas",
|
||||
width: 180,
|
||||
height: 150,
|
||||
text: toUtf8(urlstr),
|
||||
foreground: "#FE007F" //前景颜色
|
||||
});
|
||||
}
|
||||
addText();
|
||||
})
|
||||
|
||||
function addText(text, canvassize = 150, fontsize = 12, padding = 1, divBackground = "#fff", fontColor = "#a50054") {
|
||||
var canvases = document.getElementsByTagName('canvas');
|
||||
var fontsizeH = fontsize + padding * 3; //文字高度
|
||||
var rectW = 0; //长方形背景宽度
|
||||
var width = 0;
|
||||
var centerx = canvassize / 2 - rectW / 2; //居中的x
|
||||
var centery = canvassize / 2 - fontsizeH / 2; //居中的y
|
||||
for (var i = 0; i < canvases.length; i++) {
|
||||
var ctx = canvases[i].getContext("2d");
|
||||
width = ctx.measureText(arr[i][1]).width; //文字长度,不知道为什么这里的width是中文字数的10倍,故需要乘上fontsize/10获取到真实的文字宽度
|
||||
rectW = width * fontsize / 10 + padding * 2; //长方形背景宽度,应左右留padding
|
||||
centerx = canvassize / 2 - rectW / 2; //长方形背景居中的x
|
||||
centery = canvassize / 2 - fontsizeH / 2 //长方形背景居中的y
|
||||
ctx.fillStyle = divBackground; //长方形背景颜色
|
||||
ctx.fillRect(centerx + 10, centery, rectW, fontsizeH);
|
||||
ctx.font = fontsize + "px Calibri"; //设置文字大小
|
||||
ctx.fillStyle = fontColor;
|
||||
ctx.fillText(arr[i][1], centerx + padding + 10, centery + fontsize + padding / 2)
|
||||
//经测试,若参数y只填centery,则文字显示在长方形背景的上边,所以需要加上fontsize长方形背景才能包裹文字
|
||||
}
|
||||
}
|
||||
|
||||
function toUtf8(str) {
|
||||
var out, i, len, c;
|
||||
out = "";
|
||||
len = str.length;
|
||||
for (i = 0; i < len; i++) {
|
||||
c = str.charCodeAt(i);
|
||||
if ((c >= 0x0001) && (c <= 0x007F)) {
|
||||
out += str.charAt(i);
|
||||
} else if (c > 0x07FF) {
|
||||
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
|
||||
out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
|
||||
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
|
||||
} else {
|
||||
out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
|
||||
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function printNewWindow() {
|
||||
var canvas = document.getElementsByTagName("canvas")[0]; /// get canvas element
|
||||
var imgSrc = canvas.toDataURL();
|
||||
let oWin = window.open('', 'pringwindow', 'menubar=no,location=no,resizable=yes,scrollbars=no,status=no,width=600,height=400')
|
||||
oWin.document.fn = function () {
|
||||
if (oWin) {
|
||||
oWin.print()
|
||||
oWin.close()
|
||||
}
|
||||
}
|
||||
let html = '<div style="height: 100%;width: 100%;">' + `<img src="${imgSrc}" onload="fn()" style="max-height:100%;max-width: 100%;" />` + '</div>'
|
||||
oWin.document.open()
|
||||
oWin.document.write(html)
|
||||
oWin.document.close()
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,14 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('成品入库')" />
|
||||
<th:block th:include="include :: header('成品操作')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-productOperate-add">
|
||||
<input type="hidden" name="oprateType" value="1" />
|
||||
<input type="hidden" name="oprateType" th:value="${operType}" />
|
||||
<input id="taskId" type="hidden" name="taskId" />
|
||||
<input id="orderId" type="hidden" name="orderId"/>
|
||||
<input id="orderName" type="hidden" />
|
||||
<input id="subTaskId" type="hidden" name="subTaskId"/>
|
||||
|
||||
<div class="form-group">
|
||||
|
|
@ -41,13 +42,14 @@
|
|||
<!-- <input name="productValue" class="form-control" type="text">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">每包数量:</label>
|
||||
<div class="form-group" th:if="${operType == '1'}">
|
||||
<label class="col-sm-3 control-label is-required">每包数量:</label>
|
||||
<div class="col-sm-6">
|
||||
<input name="amountPerPackage" class="form-control digits" type="text">
|
||||
<input name="amountPerPackage" id="amountPerPackage" class="form-control digits" type="text" required>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<a class="btn btn-info" >生成二维码</a>
|
||||
<a class="btn btn-info" id="printQrcode" >打印二维码</a>
|
||||
<span id="code" style="display: none" ></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
@ -59,6 +61,8 @@
|
|||
</form>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<th:block th:include="include :: jquery-qrcode-js" />
|
||||
|
||||
<script th:inline="javascript">
|
||||
var prefix = ctx + "busi/productOperate"
|
||||
var sizeDatas = [[${@dict.getType('busi_size')}]];
|
||||
|
|
@ -83,9 +87,11 @@
|
|||
var orderId = $("#color :selected").attr("orderId");
|
||||
var taskId = $("#color :selected").attr("taskId");
|
||||
var subTaskId = $("#color :selected").attr("subTaskId");
|
||||
var orderName = $("#color :selected").attr("orderName");
|
||||
$("#orderId").val(orderId);
|
||||
$("#taskId").val(taskId);
|
||||
$("#subTaskId").val(subTaskId);
|
||||
$("#orderName").val(orderName);
|
||||
})
|
||||
/*监区产线-新增-选择父监区产线树*/
|
||||
function selectPrisonLineTree() {
|
||||
|
|
@ -135,10 +141,95 @@
|
|||
var orderId = data[i].orderId;
|
||||
var taskId = data[i].taskId;
|
||||
var subTaskId = data[i].subTaskId;
|
||||
$("#color").append("<option orderId='" + orderId + "' taskId='" + taskId + + "' subTaskId='" + subTaskId + " 'value='" + val + "'>" + text + "</option>");
|
||||
var orderName = data[i].orderName;
|
||||
var ss = "<option orderId='%s' orderName='%s' taskId='%s' subTaskId='%s' value='%s'>%s</option>"
|
||||
var option = $.common.sprintf(ss,orderId,orderName,taskId,subTaskId,val,text)
|
||||
$("#color").append(option);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
$("#printQrcode").click(function(){
|
||||
if (!$.validate.form()) {
|
||||
return;
|
||||
}
|
||||
var lineName = $("#lineTreeName").val();
|
||||
var orerName = $("#orderName").val();
|
||||
var color = $("#color :selected").text();
|
||||
var size = $("#size :selected").text();
|
||||
var amount = $("#amountPerPackage").val();
|
||||
var text = $.common.sprintf('%s|%s|%s|%s|%s', lineName, orerName, color, size, amount);
|
||||
var width = 180;
|
||||
var height = 180 * 0.8;
|
||||
$("#code").qrcode({
|
||||
render: "canvas",
|
||||
width: width,
|
||||
height: height,
|
||||
text: toUtf8(text),
|
||||
foreground: "#FE007F" //前景颜色
|
||||
});
|
||||
addText(text, height);
|
||||
printInWindow();
|
||||
});
|
||||
|
||||
|
||||
function addText(text, canvassize = 150, fontsize = 12, padding = 1, divBackground = "#fff", fontColor = "#a50054") {
|
||||
var canvases = document.getElementsByTagName('canvas');
|
||||
var fontsizeH = fontsize + padding * 3; //文字高度
|
||||
var rectW = 0; //长方形背景宽度
|
||||
var width = 0;
|
||||
var centerx = canvassize / 2 - rectW / 2; //居中的x
|
||||
var centery = canvassize / 2 - fontsizeH / 2; //居中的y
|
||||
for (var i = 0; i < canvases.length; i++) {
|
||||
var ctx = canvases[i].getContext("2d");
|
||||
width = ctx.measureText(text).width; //文字长度,不知道为什么这里的width是中文字数的10倍,故需要乘上fontsize/10获取到真实的文字宽度
|
||||
rectW = width * fontsize / 10 + padding * 2; //长方形背景宽度,应左右留padding
|
||||
centerx = canvassize / 2 - rectW / 2; //长方形背景居中的x
|
||||
centery = canvassize / 2 - fontsizeH / 2 //长方形背景居中的y
|
||||
ctx.fillStyle = divBackground; //长方形背景颜色
|
||||
ctx.fillRect(centerx + 10, centery, rectW, fontsizeH);
|
||||
ctx.font = fontsize + "px Calibri"; //设置文字大小
|
||||
ctx.fillStyle = fontColor;
|
||||
ctx.fillText(text, centerx + padding + 10, centery + fontsize + padding / 2)
|
||||
//经测试,若参数y只填centery,则文字显示在长方形背景的上边,所以需要加上fontsize长方形背景才能包裹文字
|
||||
}
|
||||
}
|
||||
|
||||
function toUtf8(str) {
|
||||
var out, i, len, c;
|
||||
out = "";
|
||||
len = str.length;
|
||||
for (i = 0; i < len; i++) {
|
||||
c = str.charCodeAt(i);
|
||||
if ((c >= 0x0001) && (c <= 0x007F)) {
|
||||
out += str.charAt(i);
|
||||
} else if (c > 0x07FF) {
|
||||
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
|
||||
out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
|
||||
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
|
||||
} else {
|
||||
out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
|
||||
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function printInWindow() {
|
||||
var canvas = document.getElementsByTagName("canvas")[0]; /// get canvas element
|
||||
var imgSrc = canvas.toDataURL();
|
||||
let oWin = window.open('', 'pringwindow', 'menubar=no,location=no,resizable=yes,scrollbars=no,status=no,width=800,height=600')
|
||||
oWin.document.fn = function () {
|
||||
if (oWin) {
|
||||
oWin.print()
|
||||
oWin.close()
|
||||
}
|
||||
}
|
||||
let html = '<div style="height: 100%;width: 100%;">' + `<img src="${imgSrc}" onload="fn()" style="max-height:100%;max-width: 100%;" />` + '</div>'
|
||||
oWin.document.open()
|
||||
oWin.document.write(html)
|
||||
oWin.document.close()
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,25 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('成品入库')" />
|
||||
<th:block th:include="include :: header('成品出库')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-productOperate-add">
|
||||
<input type="hidden" name="oprateType" value="1" />
|
||||
<input id="taskId" type="hidden" name="taskId" />
|
||||
<input id="orderId" type="hidden" name="orderId"/>
|
||||
<input id="subTaskId" type="hidden" name="subTaskId"/>
|
||||
<input type="hidden" name="oprateType" th:value="${operType}" />
|
||||
<input id="productStockId" type="hidden" name="productStockId"/>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label is-required">产线:</label>
|
||||
<label class="col-sm-3 control-label is-required">订单:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="lineTreeId" name="prisonLineId" type="hidden" />
|
||||
<input class="form-control" type="text" onclick="selectPrisonLineTree()" id="lineTreeName" readonly="true" required>
|
||||
<input id="treeId" name="orderId" type="text" style="display: none;">
|
||||
<input class="form-control" id="treeName" name="orderName" type="text" onclick="selectOrder()" readonly="true" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label" title="产品选择源于任务,若无对应的选项,请在任务中添加">产品选择:<i class="fa fa-question-circle-o"></i></label>
|
||||
<label class="col-sm-3 control-label" title="出库产品选择源于库存,若无对应的选项,请先进行入库操作">产品选择:<i class="fa fa-question-circle-o"></i></label>
|
||||
<div class="col-sm-4">
|
||||
<select id="size" name="size" class="form-control required" >
|
||||
</select>
|
||||
|
|
@ -30,26 +28,11 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label is-required">操作数量:</label>
|
||||
<label class="col-sm-3 control-label is-required">出库数量:</label>
|
||||
<div class="col-sm-8">
|
||||
<input name="amount" class="form-control digits" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group"> -->
|
||||
<!-- <label class="col-sm-3 control-label">价值:</label>-->
|
||||
<!-- <div class="col-sm-8">-->
|
||||
<!-- <input name="productValue" class="form-control" type="text">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">每包数量:</label>
|
||||
<div class="col-sm-6">
|
||||
<input name="amountPerPackage" class="form-control digits" type="text">
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<a class="btn btn-info" >生成二维码</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">备注信息:</label>
|
||||
<div class="col-sm-8">
|
||||
|
|
@ -74,30 +57,27 @@
|
|||
}
|
||||
|
||||
$("#size").change(function(){
|
||||
var lineId = $("#lineTreeId").val();
|
||||
var orderId = $("#treeId").val();
|
||||
var size = $("#size").val();
|
||||
queryColorList(lineId, size);
|
||||
queryColorList(orderId, size);
|
||||
})
|
||||
|
||||
$("#color").change(function(){
|
||||
var orderId = $("#color :selected").attr("orderId");
|
||||
var taskId = $("#color :selected").attr("taskId");
|
||||
var subTaskId = $("#color :selected").attr("subTaskId");
|
||||
$("#orderId").val(orderId);
|
||||
$("#taskId").val(taskId);
|
||||
$("#subTaskId").val(subTaskId);
|
||||
var productStockId = $("#color :selected").attr("productStockId");
|
||||
$("#productStockId").val(productStockId);
|
||||
})
|
||||
/*监区产线-新增-选择父监区产线树*/
|
||||
function selectPrisonLineTree() {
|
||||
|
||||
/*订单选择*/
|
||||
function selectOrder() {
|
||||
var options = {
|
||||
title: '产线选择',
|
||||
title: '选择订单',
|
||||
width: "380",
|
||||
url: ctx + "busi/prisonLine/selectPrisonLineTree/" + $("#lineTreeId").val()+"?status=1",
|
||||
callBack: function(index, layer){
|
||||
height: "400",
|
||||
url: ctx + "busi/order/selectOrder/" ,
|
||||
callBack: function(index, layero){
|
||||
var body = $.modal.getChildFrame(index);
|
||||
console.log(body);
|
||||
$("#lineTreeId").val(body.find('#treeId').val());
|
||||
$("#lineTreeName").val(body.find('#treeName').val());
|
||||
$("#treeId").val(body.find('#treeId').val());
|
||||
$("#treeName").val(body.find('#treeName').val());
|
||||
$.modal.close(index);
|
||||
querySizeList(body.find('#treeId').val());
|
||||
}
|
||||
|
|
@ -105,9 +85,9 @@
|
|||
$.modal.openOptions(options);
|
||||
}
|
||||
|
||||
/*产品任务尺码查询*/
|
||||
function querySizeList(lineId) {
|
||||
var url = prefix + "/selProductSizeByLineId?lineId=" + lineId;
|
||||
/*库存尺码查询*/
|
||||
function querySizeList(orderId) {
|
||||
var url = prefix + "/selProductSizeByOrderId?orderId=" + orderId;
|
||||
$.operate.ajaxPost(url, {}, function (result) {
|
||||
var data = result.data;
|
||||
$("#color").empty();
|
||||
|
|
@ -120,11 +100,11 @@
|
|||
})
|
||||
}
|
||||
|
||||
/*产品任务颜色查询*/
|
||||
function queryColorList(lineId, size) {
|
||||
var url = prefix + "/selProductColorByLineIdAndSize";
|
||||
/*库存颜色查询*/
|
||||
function queryColorList(orderId, size) {
|
||||
var url = prefix + "/selProductColorByOrderIdAndSize";
|
||||
$.operate.ajaxPost(url, {
|
||||
lineId:lineId,
|
||||
orderId:orderId,
|
||||
size:size
|
||||
}, function (result) {
|
||||
var data = result.data;
|
||||
|
|
@ -132,10 +112,10 @@
|
|||
for (var i = 0; i < data.length; i++) {
|
||||
var val = data[i].color;
|
||||
var text = $.table.getDictText(colorDatas, val);
|
||||
var orderId = data[i].orderId;
|
||||
var taskId = data[i].taskId;
|
||||
var subTaskId = data[i].subTaskId;
|
||||
$("#color").append("<option orderId='" + orderId + "' taskId='" + taskId + + "' subTaskId='" + subTaskId + " 'value='" + val + "'>" + text + "</option>");
|
||||
var productStockId = data[i].productStockId;
|
||||
var ss = "<option productStockId='%s' value='%s'>%s</option>";
|
||||
var option = $.common.sprintf(ss, productStockId, val, text);
|
||||
$("#color").append(option);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -201,13 +201,13 @@
|
|||
}
|
||||
|
||||
function addIn(){
|
||||
$.modal.open("添加入库", prefix + "/add?operType=1");
|
||||
$.modal.open("添加入库", prefix + "/addIn?operType=1");
|
||||
}
|
||||
function addOut(){
|
||||
$.modal.open("添加出库", prefix + "/add?operType=2");
|
||||
$.modal.open("添加出库", prefix + "/addOut?operType=2");
|
||||
}
|
||||
function addBack(){
|
||||
$.modal.open("添加退回", prefix + "/add?operType=3");
|
||||
$.modal.open("添加退回", prefix + "/addIn?operType=3");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,222 +1,229 @@
|
|||
<!-- 通用CSS -->
|
||||
<head th:fragment=header(title)>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="keywords" content="">
|
||||
<meta name="description" content="">
|
||||
<title th:text="${title}"></title>
|
||||
<link th:href="@{/css/bootstrap.min.css?v=3.3.7}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/font-awesome.min.css?v=4.7.0}" rel="stylesheet"/>
|
||||
<!-- bootstrap-table 表格插件样式 -->
|
||||
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css?v=1.18.3}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/animate.min.css?v=20210831}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/style.min.css?v=20210831}" rel="stylesheet"/>
|
||||
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.7.0}" rel="stylesheet"/>
|
||||
</head>
|
||||
|
||||
<!-- 通用JS -->
|
||||
<div th:fragment="footer">
|
||||
<script th:inline="javascript"> var ctx = [[@{/}]]; var lockscreen = [[${session.lockscreen}]]; if(lockscreen){window.top.location=ctx+"lockscreen";} </script>
|
||||
<a id="scroll-up" href="#" class="btn btn-sm display"><i class="fa fa-angle-double-up"></i></a>
|
||||
<script th:src="@{/js/jquery.min.js?v=3.6.0}"></script>
|
||||
<script th:src="@{/js/bootstrap.min.js?v=3.3.7}"></script>
|
||||
<!-- bootstrap-table 表格插件 -->
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js?v=1.18.3}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js?v=1.18.3}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js?v=1.18.3}"></script>
|
||||
<!-- jquery-validate 表单验证插件 -->
|
||||
<script th:src="@{/ajax/libs/validate/jquery.validate.min.js?v=1.19.3}"></script>
|
||||
<script th:src="@{/ajax/libs/validate/jquery.validate.extend.js?v=1.19.3}"></script>
|
||||
<script th:src="@{/ajax/libs/validate/messages_zh.js?v=1.19.3}"></script>
|
||||
<!-- bootstrap-table 表格树插件 -->
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.min.js?v=1.18.3}"></script>
|
||||
<!-- 遮罩层 -->
|
||||
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js?v=2.70.0}"></script>
|
||||
<script th:src="@{/ajax/libs/iCheck/icheck.min.js?v=1.0.3}"></script>
|
||||
<script th:src="@{/ajax/libs/layer/layer.min.js?v=3.5.1}"></script>
|
||||
<script th:src="@{/ajax/libs/layui/layui.min.js?v=2.6.8}"></script>
|
||||
<script th:src="@{/ruoyi/js/common.js?v=4.7.0}"></script>
|
||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.7.0}"></script>
|
||||
</div>
|
||||
|
||||
<!-- ztree树插件 -->
|
||||
<div th:fragment="ztree-css">
|
||||
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="ztree-js">
|
||||
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
|
||||
</div>
|
||||
|
||||
<!-- select2下拉框插件 -->
|
||||
<div th:fragment="select2-css">
|
||||
<link th:href="@{/ajax/libs/select2/select2.min.css?v=4.0.13}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/select2/select2-bootstrap.min.css?v=4.0.13}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="select2-js">
|
||||
<script th:src="@{/ajax/libs/select2/select2.min.js?v=4.0.13}"></script>
|
||||
</div>
|
||||
|
||||
<!-- bootstrap-select下拉框插件 -->
|
||||
<div th:fragment="bootstrap-select-css">
|
||||
<link th:href="@{/ajax/libs/bootstrap-select/bootstrap-select.min.css?v=1.13.18}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="bootstrap-select-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-select/bootstrap-select.min.js?v=1.13.18}"></script>
|
||||
</div>
|
||||
|
||||
<!-- datetimepicker日期和时间插件 -->
|
||||
<div th:fragment="datetimepicker-css">
|
||||
<link th:href="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.css?v=2.4.4}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="datetimepicker-js">
|
||||
<script th:src="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.js?v=2.4.4}"></script>
|
||||
</div>
|
||||
|
||||
<!-- ui布局插件 -->
|
||||
<div th:fragment="layout-latest-css">
|
||||
<link th:href="@{/ajax/libs/jquery-layout/jquery.layout-latest.css?v=1.4.4}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="layout-latest-js">
|
||||
<script th:src="@{/ajax/libs/jquery-layout/jquery.layout-latest.js?v=1.4.4}"></script>
|
||||
</div>
|
||||
|
||||
<!-- summernote富文本编辑器插件 -->
|
||||
<div th:fragment="summernote-css">
|
||||
<link th:href="@{/ajax/libs/summernote/summernote.css?v=0.8.18}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="summernote-js">
|
||||
<script th:src="@{/ajax/libs/summernote/summernote.min.js?v=0.8.18}"></script>
|
||||
<script th:src="@{/ajax/libs/summernote/summernote-zh-CN.js?v=0.8.18}"></script>
|
||||
</div>
|
||||
|
||||
<!-- cropper图像裁剪插件 -->
|
||||
<div th:fragment="cropper-css">
|
||||
<link th:href="@{/ajax/libs/cropper/cropper.min.css?v=1.5.12}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="cropper-js">
|
||||
<script th:src="@{/ajax/libs/cropper/cropper.min.js?v=1.5.12}"></script>
|
||||
</div>
|
||||
|
||||
<!-- jasny功能扩展插件 -->
|
||||
<div th:fragment="jasny-bootstrap-css">
|
||||
<link th:href="@{/ajax/libs/jasny/jasny-bootstrap.min.css?v=3.1.3}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="jasny-bootstrap-js">
|
||||
<script th:src="@{/ajax/libs/jasny/jasny-bootstrap.min.js?v=3.1.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- fileinput文件上传插件 -->
|
||||
<div th:fragment="bootstrap-fileinput-css">
|
||||
<link th:href="@{/ajax/libs/bootstrap-fileinput/fileinput.min.css?v=5.2.4}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="bootstrap-fileinput-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-fileinput/fileinput.min.js?v=5.2.4}"></script>
|
||||
</div>
|
||||
|
||||
<!-- duallistbox双列表框插件 -->
|
||||
<div th:fragment="bootstrap-duallistbox-css">
|
||||
<link th:href="@{/ajax/libs/duallistbox/bootstrap-duallistbox.min.css?v=3.0.9}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="bootstrap-duallistbox-js">
|
||||
<script th:src="@{/ajax/libs/duallistbox/bootstrap-duallistbox.min.js?v=3.0.9}"></script>
|
||||
</div>
|
||||
|
||||
<!-- suggest搜索自动补全 -->
|
||||
<div th:fragment="bootstrap-suggest-js">
|
||||
<script th:src="@{/ajax/libs/suggest/bootstrap-suggest.min.js?v=0.1.29}"></script>
|
||||
</div>
|
||||
|
||||
<!-- typeahead搜索自动补全 -->
|
||||
<div th:fragment="bootstrap-typeahead-js">
|
||||
<script th:src="@{/ajax/libs/typeahead/bootstrap-typeahead.min.js?v=4.0.2}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 多级联动下拉 -->
|
||||
<div th:fragment="jquery-cxselect-js">
|
||||
<script th:src="@{/ajax/libs/cxselect/jquery.cxselect.min.js?v=1.4.2}"></script>
|
||||
</div>
|
||||
|
||||
<!-- jsonview格式化和语法高亮JSON格式数据查看插件 -->
|
||||
<div th:fragment="jsonview-css">
|
||||
<link th:href="@{/ajax/libs/jsonview/jquery.jsonview.css?v=1.2.0}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="jsonview-js">
|
||||
<script th:src="@{/ajax/libs/jsonview/jquery.jsonview.js?v=1.2.0}"></script>
|
||||
</div>
|
||||
|
||||
<!-- jquery.smartwizard表单向导插件 -->
|
||||
<div th:fragment="jquery-smartwizard-css">
|
||||
<link th:href="@{/ajax/libs/smartwizard/smart_wizard_all.min.css?v=5.1.1}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="jquery-smartwizard-js">
|
||||
<script th:src="@{/ajax/libs/smartwizard/jquery.smartWizard.min.js?v=5.1.1}"></script>
|
||||
</div>
|
||||
|
||||
<!-- ECharts百度统计图表插件 -->
|
||||
<div th:fragment="echarts-js">
|
||||
<script th:src="@{/ajax/libs/report/echarts/echarts-all.min.js?v=4.2.1}"></script>
|
||||
</div>
|
||||
|
||||
<!-- peity图表组合插件 -->
|
||||
<div th:fragment="peity-js">
|
||||
<script th:src="@{/ajax/libs/report/peity/jquery.peity.min.js?v=2.0.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- sparkline线状图插件 -->
|
||||
<div th:fragment="sparkline-js">
|
||||
<script th:src="@{/ajax/libs/report/sparkline/jquery.sparkline.min.js?v=2.1.2}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格行拖拽插件 -->
|
||||
<div th:fragment="bootstrap-table-reorder-rows-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js?v=1.18.3}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/reorder-rows/jquery.tablednd.js?v=1.0.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格列拖拽插件 -->
|
||||
<div th:fragment="bootstrap-table-reorder-columns-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/reorder-columns/jquery.dragtable.js?v=5.3.5}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格列宽拖动插件 -->
|
||||
<div th:fragment="bootstrap-table-resizable-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/resizable/jquery.resizableColumns.min.js?v=0.1.0}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格行内编辑插件 -->
|
||||
<div th:fragment="bootstrap-editable-css">
|
||||
<link th:href="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-editable.css?v=1.5.1}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="bootstrap-table-editable-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-editable.min.js?v=1.5.1}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格导出插件 -->
|
||||
<div th:fragment="bootstrap-table-export-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js?v=1.18.3}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.min.js?v=1.10.24}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格冻结列插件 -->
|
||||
<div th:fragment="bootstrap-table-fixed-columns-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格自动刷新插件 -->
|
||||
<div th:fragment="bootstrap-table-auto-refresh-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/auto-refresh/bootstrap-table-auto-refresh.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格打印插件 -->
|
||||
<div th:fragment="bootstrap-table-print-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/print/bootstrap-table-print.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格视图分页插件 -->
|
||||
<div th:fragment="bootstrap-table-custom-view-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/custom-view/bootstrap-table-custom-view.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
<!-- 通用CSS -->
|
||||
<head th:fragment=header(title)>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="keywords" content="">
|
||||
<meta name="description" content="">
|
||||
<title th:text="${title}"></title>
|
||||
<link th:href="@{/css/bootstrap.min.css?v=3.3.7}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/font-awesome.min.css?v=4.7.0}" rel="stylesheet"/>
|
||||
<!-- bootstrap-table 表格插件样式 -->
|
||||
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css?v=1.18.3}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/animate.min.css?v=20210831}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/style.min.css?v=20210831}" rel="stylesheet"/>
|
||||
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.7.0}" rel="stylesheet"/>
|
||||
</head>
|
||||
|
||||
<!-- 通用JS -->
|
||||
<div th:fragment="footer">
|
||||
<script th:inline="javascript"> var ctx = [[@{/}]]; var lockscreen = [[${session.lockscreen}]]; if(lockscreen){window.top.location=ctx+"lockscreen";} </script>
|
||||
<a id="scroll-up" href="#" class="btn btn-sm display"><i class="fa fa-angle-double-up"></i></a>
|
||||
<script th:src="@{/js/jquery.min.js?v=3.6.0}"></script>
|
||||
<script th:src="@{/js/bootstrap.min.js?v=3.3.7}"></script>
|
||||
<!-- bootstrap-table 表格插件 -->
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js?v=1.18.3}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js?v=1.18.3}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js?v=1.18.3}"></script>
|
||||
<!-- jquery-validate 表单验证插件 -->
|
||||
<script th:src="@{/ajax/libs/validate/jquery.validate.min.js?v=1.19.3}"></script>
|
||||
<script th:src="@{/ajax/libs/validate/jquery.validate.extend.js?v=1.19.3}"></script>
|
||||
<script th:src="@{/ajax/libs/validate/messages_zh.js?v=1.19.3}"></script>
|
||||
<!-- bootstrap-table 表格树插件 -->
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.min.js?v=1.18.3}"></script>
|
||||
<!-- 遮罩层 -->
|
||||
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js?v=2.70.0}"></script>
|
||||
<script th:src="@{/ajax/libs/iCheck/icheck.min.js?v=1.0.3}"></script>
|
||||
<script th:src="@{/ajax/libs/layer/layer.min.js?v=3.5.1}"></script>
|
||||
<script th:src="@{/ajax/libs/layui/layui.min.js?v=2.6.8}"></script>
|
||||
<script th:src="@{/ruoyi/js/common.js?v=4.7.0}"></script>
|
||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.7.0}"></script>
|
||||
</div>
|
||||
|
||||
<!-- ztree树插件 -->
|
||||
<div th:fragment="ztree-css">
|
||||
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="ztree-js">
|
||||
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
|
||||
</div>
|
||||
|
||||
<!-- select2下拉框插件 -->
|
||||
<div th:fragment="select2-css">
|
||||
<link th:href="@{/ajax/libs/select2/select2.min.css?v=4.0.13}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/select2/select2-bootstrap.min.css?v=4.0.13}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="select2-js">
|
||||
<script th:src="@{/ajax/libs/select2/select2.min.js?v=4.0.13}"></script>
|
||||
</div>
|
||||
|
||||
<!-- bootstrap-select下拉框插件 -->
|
||||
<div th:fragment="bootstrap-select-css">
|
||||
<link th:href="@{/ajax/libs/bootstrap-select/bootstrap-select.min.css?v=1.13.18}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="bootstrap-select-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-select/bootstrap-select.min.js?v=1.13.18}"></script>
|
||||
</div>
|
||||
|
||||
<!-- datetimepicker日期和时间插件 -->
|
||||
<div th:fragment="datetimepicker-css">
|
||||
<link th:href="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.css?v=2.4.4}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="datetimepicker-js">
|
||||
<script th:src="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.js?v=2.4.4}"></script>
|
||||
</div>
|
||||
|
||||
<!-- ui布局插件 -->
|
||||
<div th:fragment="layout-latest-css">
|
||||
<link th:href="@{/ajax/libs/jquery-layout/jquery.layout-latest.css?v=1.4.4}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="layout-latest-js">
|
||||
<script th:src="@{/ajax/libs/jquery-layout/jquery.layout-latest.js?v=1.4.4}"></script>
|
||||
</div>
|
||||
|
||||
<!-- summernote富文本编辑器插件 -->
|
||||
<div th:fragment="summernote-css">
|
||||
<link th:href="@{/ajax/libs/summernote/summernote.css?v=0.8.18}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="summernote-js">
|
||||
<script th:src="@{/ajax/libs/summernote/summernote.min.js?v=0.8.18}"></script>
|
||||
<script th:src="@{/ajax/libs/summernote/summernote-zh-CN.js?v=0.8.18}"></script>
|
||||
</div>
|
||||
|
||||
<!-- cropper图像裁剪插件 -->
|
||||
<div th:fragment="cropper-css">
|
||||
<link th:href="@{/ajax/libs/cropper/cropper.min.css?v=1.5.12}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="cropper-js">
|
||||
<script th:src="@{/ajax/libs/cropper/cropper.min.js?v=1.5.12}"></script>
|
||||
</div>
|
||||
|
||||
<!-- jasny功能扩展插件 -->
|
||||
<div th:fragment="jasny-bootstrap-css">
|
||||
<link th:href="@{/ajax/libs/jasny/jasny-bootstrap.min.css?v=3.1.3}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="jasny-bootstrap-js">
|
||||
<script th:src="@{/ajax/libs/jasny/jasny-bootstrap.min.js?v=3.1.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- fileinput文件上传插件 -->
|
||||
<div th:fragment="bootstrap-fileinput-css">
|
||||
<link th:href="@{/ajax/libs/bootstrap-fileinput/fileinput.min.css?v=5.2.4}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="bootstrap-fileinput-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-fileinput/fileinput.min.js?v=5.2.4}"></script>
|
||||
</div>
|
||||
|
||||
<!-- duallistbox双列表框插件 -->
|
||||
<div th:fragment="bootstrap-duallistbox-css">
|
||||
<link th:href="@{/ajax/libs/duallistbox/bootstrap-duallistbox.min.css?v=3.0.9}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="bootstrap-duallistbox-js">
|
||||
<script th:src="@{/ajax/libs/duallistbox/bootstrap-duallistbox.min.js?v=3.0.9}"></script>
|
||||
</div>
|
||||
|
||||
<!-- suggest搜索自动补全 -->
|
||||
<div th:fragment="bootstrap-suggest-js">
|
||||
<script th:src="@{/ajax/libs/suggest/bootstrap-suggest.min.js?v=0.1.29}"></script>
|
||||
</div>
|
||||
|
||||
<!-- typeahead搜索自动补全 -->
|
||||
<div th:fragment="bootstrap-typeahead-js">
|
||||
<script th:src="@{/ajax/libs/typeahead/bootstrap-typeahead.min.js?v=4.0.2}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 多级联动下拉 -->
|
||||
<div th:fragment="jquery-cxselect-js">
|
||||
<script th:src="@{/ajax/libs/cxselect/jquery.cxselect.min.js?v=1.4.2}"></script>
|
||||
</div>
|
||||
|
||||
<!-- jsonview格式化和语法高亮JSON格式数据查看插件 -->
|
||||
<div th:fragment="jsonview-css">
|
||||
<link th:href="@{/ajax/libs/jsonview/jquery.jsonview.css?v=1.2.0}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="jsonview-js">
|
||||
<script th:src="@{/ajax/libs/jsonview/jquery.jsonview.js?v=1.2.0}"></script>
|
||||
</div>
|
||||
|
||||
<!-- jquery.smartwizard表单向导插件 -->
|
||||
<div th:fragment="jquery-smartwizard-css">
|
||||
<link th:href="@{/ajax/libs/smartwizard/smart_wizard_all.min.css?v=5.1.1}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="jquery-smartwizard-js">
|
||||
<script th:src="@{/ajax/libs/smartwizard/jquery.smartWizard.min.js?v=5.1.1}"></script>
|
||||
</div>
|
||||
|
||||
<!-- ECharts百度统计图表插件 -->
|
||||
<div th:fragment="echarts-js">
|
||||
<script th:src="@{/ajax/libs/report/echarts/echarts-all.min.js?v=4.2.1}"></script>
|
||||
</div>
|
||||
|
||||
<!-- peity图表组合插件 -->
|
||||
<div th:fragment="peity-js">
|
||||
<script th:src="@{/ajax/libs/report/peity/jquery.peity.min.js?v=2.0.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- sparkline线状图插件 -->
|
||||
<div th:fragment="sparkline-js">
|
||||
<script th:src="@{/ajax/libs/report/sparkline/jquery.sparkline.min.js?v=2.1.2}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格行拖拽插件 -->
|
||||
<div th:fragment="bootstrap-table-reorder-rows-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js?v=1.18.3}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/reorder-rows/jquery.tablednd.js?v=1.0.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格列拖拽插件 -->
|
||||
<div th:fragment="bootstrap-table-reorder-columns-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/reorder-columns/jquery.dragtable.js?v=5.3.5}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格列宽拖动插件 -->
|
||||
<div th:fragment="bootstrap-table-resizable-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/resizable/jquery.resizableColumns.min.js?v=0.1.0}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格行内编辑插件 -->
|
||||
<div th:fragment="bootstrap-editable-css">
|
||||
<link th:href="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-editable.css?v=1.5.1}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="bootstrap-table-editable-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-editable.min.js?v=1.5.1}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格导出插件 -->
|
||||
<div th:fragment="bootstrap-table-export-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js?v=1.18.3}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.min.js?v=1.10.24}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格冻结列插件 -->
|
||||
<div th:fragment="bootstrap-table-fixed-columns-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格自动刷新插件 -->
|
||||
<div th:fragment="bootstrap-table-auto-refresh-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/auto-refresh/bootstrap-table-auto-refresh.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格打印插件 -->
|
||||
<div th:fragment="bootstrap-table-print-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/print/bootstrap-table-print.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 表格视图分页插件 -->
|
||||
<div th:fragment="bootstrap-table-custom-view-js">
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/custom-view/bootstrap-table-custom-view.js?v=1.18.3}"></script>
|
||||
</div>
|
||||
|
||||
<!-- 二维码插件 -->
|
||||
<div th:fragment="jquery-qrcode-js">
|
||||
<script th:src="@{/js/jquery.qrcode.js?v=3.6.0}"></script>
|
||||
<script th:src="@{/js/qrcode.js?v=3.6.0}"></script>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue