From 46d9a52288d5c36985435e775a8433df4e12000b Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 16 Jul 2025 14:27:59 +0800
Subject: [PATCH] feat(mall): 添加自定义打印功能并优化订单相关接口

---
 src/main/resources/templates/febs/views/modules/clothesType/socialMuseUpdate.html |  507 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 420 insertions(+), 87 deletions(-)

diff --git a/src/main/resources/templates/febs/views/modules/clothesType/socialMuseUpdate.html b/src/main/resources/templates/febs/views/modules/clothesType/socialMuseUpdate.html
index f155b26..bef1a1a 100644
--- a/src/main/resources/templates/febs/views/modules/clothesType/socialMuseUpdate.html
+++ b/src/main/resources/templates/febs/views/modules/clothesType/socialMuseUpdate.html
@@ -26,25 +26,6 @@
                                         </div>
                                     </div>
                                 </div>
-
-                                <div class="layui-row layui-col-space10 layui-form-item">
-                                    <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">图案:</label>
-                                        <div class="layui-input-block">
-                                            <div id="sc-pattern"></div>
-                                        </div>
-                                    </div>
-                                </div>
-
-                                <div class="layui-row layui-col-space10 layui-form-item">
-                                    <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">位置:</label>
-                                        <div class="layui-input-block">
-                                            <div id="sc-location"></div>
-                                        </div>
-                                    </div>
-                                </div>
-
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">尺码:</label>
@@ -59,6 +40,50 @@
                                         <label class="layui-form-label febs-form-item-require">工艺:</label>
                                         <div class="layui-input-block">
                                             <div id="sc-art"></div>
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="layui-form-item multi-rule-table">
+                                    <div class="layui-row layui-col-space10 layui-form-item">
+                                        <blockquote class="layui-elem-quote blue-border">正面图案</blockquote>
+
+                                        <div class="layui-col-lg6">
+                                            <label class="layui-form-label">图案:</label>
+                                            <div class="layui-input-block">
+                                                <div id="sc-pattern"></div>
+                                            </div>
+                                        </div>
+                                        <div class="layui-col-lg6">
+                                            <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testPattern" >添加</button>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <table id="multiPattern" lay-filter="multiPattern"></table>
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="layui-form-item multi-rule-table">
+                                    <div class="layui-row layui-col-space10 layui-form-item">
+                                        <blockquote class="layui-elem-quote blue-border">反面图案</blockquote>
+
+                                        <div class="layui-col-lg6">
+                                            <label class="layui-form-label">图案:</label>
+                                            <div class="layui-input-block">
+                                                <div id="sc-location"></div>
+                                            </div>
+                                        </div>
+                                        <div class="layui-col-lg6">
+                                            <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testLocation" >添加</button>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <table id="multiLocation" lay-filter="multiLocation"></table>
                                         </div>
                                     </div>
                                 </div>
@@ -80,10 +105,39 @@
         border-left-color: #2db7f5;
         font-size: 18px;
     }
+
+    .layui-table-cell {
+        height: auto;
+    }
+
 </style>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
         <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="delSku">删除</button>
+    </div>
+</script>
+
+<script type="text/html" id="tablePatternImgUpload">
+    <div class="layui-upload">
+        <button type="button" class="layui-btn layui-btn-normal layui-btn-xs sku-img" id="skuPatternImg{{d.index}}">上传
+        </button>
+        </br>
+        <img class="layui-upload-img" id="imagePatternUrls{{d.index}}" style="width: 100px; display:none;"
+             src="{{d.skuPatternImage}}">
+        <input type="text" id="skuPatternImage{{d.index}}" name="skuPatternImage{{d.index}}" autoComplete="off" value="{{d.skuPatternImage}}"
+               class="layui-input febs-hide">
+    </div>
+</script>
+
+<script type="text/html" id="tableLocationImgUpload">
+    <div class="layui-upload">
+        <button type="button" class="layui-btn layui-btn-normal layui-btn-xs sku-img" id="skuLocationImg{{d.index}}">上传
+        </button>
+        </br>
+        <img class="layui-upload-img" id="imageLocationUrls{{d.index}}" style="width: 100px; display:none;"
+             src="{{d.skuLocationImage}}">
+        <input type="text" id="skuLocationImage{{d.index}}" name="skuLocationImage{{d.index}}" autoComplete="off" value="{{d.skuLocationImage}}"
+               class="layui-input febs-hide">
     </div>
 </script>
 <!-- 表格操作栏 end -->
@@ -105,8 +159,329 @@
             validate = layui.validate,
             element = layui.element;
 
-
+        form.render();
         formSelects.render();
+
+        var patternSet = xmSelect.render({
+
+            el: '#sc-pattern',
+            language: 'zn',
+            prop : {
+                value : 'id',
+                children : 'child'
+            },
+            iconfont: {
+                parent: 'hidden',
+            },
+            tips: '请选择',
+            filterable: true,
+            radio: true,
+            clickClose: true,
+            tree: {
+                show: true,
+                //非严格模式
+                strict: false,
+            },
+            data: []
+        })
+        febs.get(ctx + 'admin/clothesType/allPattern/' + socialMuse.typeId, null, function(res) {
+            patternSet.update({
+                data : res.data,
+                autoRow: true,
+            });
+        })
+
+        $('#testPattern').on('click', function (){
+            let patternChoice = patternSet.getValue();
+            console.log(patternChoice);
+            if(patternChoice == null || patternChoice == ""){
+                febs.alert.warn('请选择图案');
+                return false;
+            }
+            for (let i = 0; i < patternChoice.length; i++) {
+                let data = {};
+                data.patternId = patternChoice[i].id;
+                data.patternName = patternChoice[i].name;
+                addTablePatternDate(data);
+            }
+        });
+
+        var patternData=[];
+        var tableInitPattern = table.render({
+            elem: '#multiPattern'
+            ,limit:999
+            ,toolbar:"#toolbar"
+            ,defaultToolbar:[]
+            ,cols:[[//表头
+
+                    {type: 'checkbox'},
+                    {field: 'patternId', title: '正面ID', width:200,edit:'text'},
+                    {field: 'patternName', title: '正面图案', width:200,edit:'text'},
+                    {field: 'patternText', title: '文字', width:200,edit:'text'},
+                    {templet: '#tablePatternImgUpload', title: '图案', width:150},
+                    {field: 'skuPatternImage', title: '图案地址'},
+            ]]
+            ,data: []
+
+        });
+
+        table.on('toolbar(multiPattern)', function(obj){
+            var data = obj.data;
+            var hasData = table.cache['multiPattern'];
+            var checkData = table.checkStatus('multiPattern').data;
+
+            if (checkData.length <= 0) {
+                febs.alert.warn('请选择删除数据');
+                return;
+            }
+            if(obj.event === 'delSku'){
+                for (let i = 0; i < checkData.length; i++) {
+                    var delData = checkData[i];
+                    for (let j = 0; j < hasData.length; j++) {
+                        if (hasData[j].index == delData.index) {
+                            hasData.splice(j, 1);
+                            break;
+                        }
+                    }
+                }
+
+                for (let i = 0; i < hasData.length; i++) {
+                    hasData[i].index = i + 1;
+                }
+
+                patternData=hasData;
+                reloadPatternTable(hasData);
+            }
+        });
+
+        function addTablePatternDate(data) {
+            var hasData = table.cache['multiPattern'];
+
+            data.index = hasData.length + 1;
+            patternData.push(data);
+
+            reloadPatternTable(patternData);
+            return data.index;
+        }
+
+        function reloadPatternTable(data) {
+            table.reload('multiPattern', {
+                data : data
+            });
+
+            for (let i = 0; i < data.length; i++) {
+                if (data[i].skuPatternImage) {
+                    $('#imagePatternUrls' + (i + 1)).css('display', 'block');
+                }
+                // 重新绑定图片上传
+                bindPatternUpload(i + 1);
+            }
+        }
+
+        table.on('edit(multiPattern)', function(obj){
+            var value = obj.value //得到修改后的值
+                ,data = obj.data //得到所在行所有键值
+                ,field = obj.field; //得到字段
+
+            for (let i = 0; i < patternData.length; i++) {
+                if (patternData[i].index == data.index) {
+                    patternData[i] = data;
+                }
+            }
+        });
+
+        function bindPatternUpload(index) {
+            // 普通图片上传
+            upload.render({
+                elem: '#skuPatternImg' + index
+                , url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+                , done: function (res) {
+                    febs.alert.success(res.data.src);
+                    $('#imagePatternUrls' + index).attr('src', res.data.src);
+                    $('#imagePatternUrls' + index).css('display', 'block');
+                    $('#skuPatternImage' + index).val(res.data.src);
+
+
+                    for (let i = 0; i < patternData.length; i++) {
+                        if (patternData[i].index == index) {
+                            patternData[i].skuPatternImage = res.data.src;
+                        }
+                    }
+
+                    reloadPatternTable(patternData);
+                }
+            });
+        }
+
+        var locationSet = xmSelect.render({
+
+            el: '#sc-location',
+            language: 'zn',
+            prop : {
+                value : 'id',
+                children : 'child'
+            },
+            iconfont: {
+                parent: 'hidden',
+            },
+            tips: '请选择',
+            filterable: true,
+            radio: true,
+            clickClose: true,
+            tree: {
+                show: true,
+                //非严格模式
+                strict: false,
+            },
+            data: []
+        })
+
+        febs.get(ctx + 'admin/clothesType/allLocation/' + socialMuse.typeId, null, function(res) {
+            locationSet.update({
+                data : res.data,
+                autoRow: true,
+            });
+        })
+
+        $('#testLocation').on('click', function (){
+            let locationChoice = locationSet.getValue();
+            console.log(locationChoice);
+            if(locationChoice == null || locationChoice == ""){
+                febs.alert.warn('请选择图案');
+                return false;
+            }
+            for (let i = 0; i < locationChoice.length; i++) {
+                let data = {};
+                data.locationId = locationChoice[i].id;
+                data.locationName = locationChoice[i].name;
+                addTableLocationDate(data);
+            }
+        });
+
+        var locationData=[];
+        var tableInitLocation = table.render({
+            elem: '#multiLocation'
+            ,limit:999
+            ,toolbar:"#toolbar"
+            ,defaultToolbar:[]
+            ,cols:[[//表头
+
+                {type: 'checkbox'},
+                {field: 'locationId', title: '反面ID', width:200,edit:'text'},
+                {field: 'locationName', title: '反面图案', width:200,edit:'text'},
+                {field: 'locationText', title: '文字', width:200,edit:'text'},
+                {templet: '#tableLocationImgUpload', title: '图案', width:150},
+                {field: 'skuLocationImage', title: '图案地址'},
+            ]]
+            ,data: []
+
+        });
+
+        table.on('toolbar(multiLocation)', function(obj){
+            var data = obj.data;
+            var hasData = table.cache['multiLocation'];
+            var checkData = table.checkStatus('multiLocation').data;
+
+            if (checkData.length <= 0) {
+                febs.alert.warn('请选择删除数据');
+                return;
+            }
+            if(obj.event === 'delSku'){
+                for (let i = 0; i < checkData.length; i++) {
+                    var delData = checkData[i];
+                    for (let j = 0; j < hasData.length; j++) {
+                        if (hasData[j].index == delData.index) {
+                            hasData.splice(j, 1);
+                            break;
+                        }
+                    }
+                }
+
+                for (let i = 0; i < hasData.length; i++) {
+                    hasData[i].index = i + 1;
+                }
+
+                locationData=hasData;
+                reloadLocationTable(hasData);
+            }
+        });
+
+        function addTableLocationDate(data) {
+            var hasData = table.cache['multiLocation'];
+
+            data.index = hasData.length + 1;
+            locationData.push(data);
+
+            reloadLocationTable(locationData);
+            return data.index;
+        }
+
+        function reloadLocationTable(data) {
+            table.reload('multiLocation', {
+                data : data
+            });
+
+            for (let i = 0; i < data.length; i++) {
+                if (data[i].skuLocationImage) {
+                    $('#imageLocationUrls' + (i + 1)).css('display', 'block');
+                }
+                // 重新绑定图片上传
+                bindLocationUpload(i + 1);
+            }
+        }
+
+        table.on('edit(multiLocation)', function(obj){
+            var value = obj.value //得到修改后的值
+                ,data = obj.data //得到所在行所有键值
+                ,field = obj.field; //得到字段
+
+            for (let i = 0; i < locationData.length; i++) {
+                if (locationData[i].index == data.index) {
+                    locationData[i] = data;
+                }
+            }
+        });
+
+        function bindLocationUpload(index) {
+            // 普通图片上传
+            upload.render({
+                elem: '#skuLocationImg' + index
+                , url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+                , done: function (res) {
+                    febs.alert.success(res.data.src);
+                    $('#imageLocationUrls' + index).attr('src', res.data.src);
+                    $('#imageLocationUrls' + index).css('display', 'block');
+                    $('#skuLocationImage' + index).val(res.data.src);
+
+
+                    for (let i = 0; i < locationData.length; i++) {
+                        if (locationData[i].index == index) {
+                            locationData[i].skuLocationImage = res.data.src;
+                        }
+                    }
+
+                    reloadLocationTable(locationData);
+                }
+            });
+        }
+
+
+        //图片上传
+        upload.render({
+            elem: '#patternImageUploadButton'
+            ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+            ,accept: 'file' //普通文件
+            ,size: 10240 //限制文件大小,单位 KB
+            ,before: function(obj){
+                //预读本地文件示例,不支持ie8
+                obj.preview(function(index, file, result){
+                    $('#patternImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+                });
+            }
+            ,done: function(res){
+                $("#patternImage").val(res.data.src);
+            }
+        });
 
         let scArt = xmSelect.render({
             el: '#sc-art',
@@ -166,64 +541,6 @@
             });
         })
 
-        let scLocation = xmSelect.render({
-            el: '#sc-location',
-            language: 'zn',
-            prop : {
-                value : 'id',
-                children : 'child'
-            },
-            iconfont: {
-                parent: 'hidden',
-            },
-            tips: '请选择',
-            filterable: true,
-            radio: true,
-            clickClose: true,
-            tree: {
-                show: true,
-                //非严格模式
-                strict: false,
-            },
-            data: []
-        })
-
-        febs.get(ctx + 'admin/clothesType/allLocation/' + socialMuse.typeId, null, function(res) {
-            scLocation.update({
-                data : res.data,
-                autoRow: true,
-            });
-        })
-
-        let scPattern = xmSelect.render({
-            el: '#sc-pattern',
-            language: 'zn',
-            prop : {
-                value : 'id',
-                children : 'child'
-            },
-            iconfont: {
-                parent: 'hidden',
-            },
-            tips: '请选择',
-            filterable: true,
-            radio: true,
-            clickClose: true,
-            tree: {
-                show: true,
-                //非严格模式
-                strict: false,
-            },
-            data: []
-        })
-
-        febs.get(ctx + 'admin/clothesType/allPattern/' + socialMuse.typeId, null, function(res) {
-            scPattern.update({
-                data : res.data,
-                autoRow: true,
-            });
-        })
-
         let scCloth = xmSelect.render({
             el: '#sc-cloth',
             language: 'zn',
@@ -268,6 +585,7 @@
                 "id": socialMuse.id,
             });
 
+
             var artList = [];
             artList.push(socialMuse.artId);
             scArt.setValue(artList);
@@ -276,27 +594,42 @@
             sizeList.push(socialMuse.sizeId);
             scSize.setValue(sizeList);
 
-            var patternList = [];
-            patternList.push(socialMuse.patternId);
-            scPattern.setValue(patternList);
-
             var clothList = [];
             clothList.push(socialMuse.clothId);
             scCloth.setValue(clothList);
 
-            var locationList = [];
-            locationList.push(socialMuse.locationId);
-            scLocation.setValue(locationList);
+            var patternDataList = socialMuse.patternData;
+            if (patternDataList) {
+                for (let i = 0; i < patternDataList.length; i++) {
+                    patternDataList[i].index = i+1;
+                }
+                patternData = patternDataList;
+                reloadPatternTable(patternData);
+            }
+
+            var locationDataList = socialMuse.locationData;
+            if (locationDataList) {
+                for (let i = 0; i < locationDataList.length; i++) {
+                    locationDataList[i].index = i+1;
+                }
+                locationData = locationDataList;
+                reloadLocationTable(locationData);
+            }
 
         }
+
+
+
 
 
 
         form.on('submit(sc-muse-update-form-submit)', function (data) {
             data.field.artId = scArt.getValue('valueStr');
             data.field.sizeId = scSize.getValue('valueStr');
-            data.field.patternId = scPattern.getValue('valueStr');
-            data.field.locationId = scLocation.getValue('valueStr');
+
+            data.field.patternData = patternData;
+            data.field.locationData = locationData;
+
             data.field.clothId = scCloth.getValue('valueStr');
             $.ajax({
                 'url':ctx + 'admin/clothesType/socialMuseUpdate',

--
Gitblit v1.9.1