From 9dfd9506d0743a22d404046ffe7cda6081404a8a Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 30 Jun 2026 17:09:36 +0800
Subject: [PATCH] feat(order): 添加XT支付功能和确认收款功能

---
 src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java         |    4 ++
 src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java          |    2 +
 src/main/java/cc/mrbird/febs/mall/dto/PayLinkDto.java                           |    2 +
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   16 +++++++
 src/main/resources/templates/febs/views/modules/system/payLink.html             |   52 +++++++++++++++++++++++++
 5 files changed, 74 insertions(+), 2 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
index 8bf59a7..00cd1b2 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
@@ -142,7 +142,11 @@
         if (StrUtil.isBlank(dto.getXtLink())) {
             return new FebsResponse().fail().message("付款链接不能为空");
         }
+        if (StrUtil.isBlank(dto.getXtLinkImg())) {
+            return new FebsResponse().fail().message("付款链接图片不能为空");
+        }
         commonService.addDataDic("PAY_LINK", "XT_LINK", dto.getXtLink(), "付款链接", false);
+        commonService.addDataDic("PAY_LINK", "XT_LINK_IMG", dto.getXtLinkImg(), "付款链接图片", false);
         return new FebsResponse().success().message("保存成功");
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
index d94035d..dabf489 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
@@ -194,7 +194,9 @@
     public String payLink(Model model) {
         PayLinkDto dto = new PayLinkDto();
         DataDictionaryCustom xtLink = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("PAY_LINK", "XT_LINK");
+        DataDictionaryCustom xtLinkImg = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("PAY_LINK", "XT_LINK_IMG");
         if (xtLink != null) dto.setXtLink(xtLink.getValue());
+        if (xtLinkImg != null) dto.setXtLinkImg(xtLinkImg.getValue());
         model.addAttribute("payLink", dto);
         return FebsUtil.view("modules/system/payLink");
     }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/PayLinkDto.java b/src/main/java/cc/mrbird/febs/mall/dto/PayLinkDto.java
index 6d6a71a..2b185de 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/PayLinkDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/PayLinkDto.java
@@ -12,4 +12,6 @@
 public class PayLinkDto {
     /** 付款链接 */
     private String xtLink;
+    /** 付款链接图片 */
+    private String xtLinkImg;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 07af1ff..e9aee27 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -1008,13 +1008,27 @@
         DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                 "PAY_LINK", "XT_LINK"
         );
+
+        DataDictionaryCustom dataDictionaryCustomImg = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                "PAY_LINK", "XT_LINK_IMG"
+        );
         if (ObjectUtil.isEmpty(dataDictionaryCustom)){
+            return new FebsResponse().fail().message("Payment channel exception");
+        }
+        if (ObjectUtil.isEmpty(dataDictionaryCustomImg)){
             return new FebsResponse().fail().message("Payment channel exception");
         }
         if (StrUtil.isEmpty(dataDictionaryCustom.getValue())){
             return new FebsResponse().fail().message("Payment channel exception");
         }
-        return new FebsResponse().success().data(dataDictionaryCustom.getValue());
+        if (StrUtil.isEmpty(dataDictionaryCustomImg.getValue())){
+            return new FebsResponse().fail().message("Payment channel exception");
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("link", dataDictionaryCustom.getValue());
+        result.put("linkImg", dataDictionaryCustomImg.getValue());
+        return new FebsResponse().success().data(result);
     }
 
 }
diff --git a/src/main/resources/templates/febs/views/modules/system/payLink.html b/src/main/resources/templates/febs/views/modules/system/payLink.html
index bd1623f..4528e66 100644
--- a/src/main/resources/templates/febs/views/modules/system/payLink.html
+++ b/src/main/resources/templates/febs/views/modules/system/payLink.html
@@ -12,6 +12,19 @@
                         </div>
                         <div class="layui-word-aux" style="margin-left: 150px;">用户点击付款时跳转的链接地址,必须以 http(s):// 开头</div>
                     </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label required">链接图片:</label>
+                        <div class="layui-input-block">
+                            <div class="layui-upload">
+                                <button type="button" class="layui-btn layui-btn-normal" id="pay-link-img-upload">上传图片</button>
+                                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                                    <div class="layui-upload-list" id="pay-link-img-preview"></div>
+                                </blockquote>
+                                <div class="layui-word-aux">双击图片删除</div>
+                            </div>
+                            <input type="hidden" name="xtLinkImg" id="xtLinkImg" data-th-id="${payLink.xtLinkImg}" lay-verify="required" autocomplete="off" class="layui-input">
+                        </div>
+                    </div>
                 </div>
 
                 <div class="layui-card-footer">
@@ -33,12 +46,21 @@
     .layui-table-form .layui-form-item {
         margin-bottom: 20px !important;
     }
+
+    .layui-upload-list {
+        margin: 0 !important;
+    }
+
+    .pay-link-upload-img {
+        width: 130px;
+    }
 </style>
 <script data-th-inline="javascript" type="text/javascript">
-    layui.use(['dropdown', 'jquery', 'validate', 'febs', 'form'], function () {
+    layui.use(['dropdown', 'jquery', 'validate', 'febs', 'form', 'upload'], function () {
         var $ = layui.jquery,
             febs = layui.febs,
             form = layui.form,
+            upload = layui.upload,
             payLink = [[${payLink}]],
             validate = layui.validate,
             $view = $('#pay-link');
@@ -49,10 +71,38 @@
             form.val("pay-link-form", {
                 "xtLink": payLink.xtLink
             });
+            if (payLink.xtLinkImg) {
+                $('#xtLinkImg').val(payLink.xtLinkImg);
+                $('#pay-link-img-preview').html('<img src="' + payLink.xtLinkImg + '" class="layui-upload-img pay-link-upload-img">');
+                imgBind();
+            }
         }
 
         form.render();
 
+        // 图片上传
+        upload.render({
+            elem: '#pay-link-img-upload'
+            ,url: ctx + 'admin/goods/uploadFileBase64'
+            ,multiple: false
+            ,before: function(obj){
+                obj.preview(function(index, file, result){
+                    $('#pay-link-img-preview').html('<img src="' + result + '" alt="' + file.name + '" class="layui-upload-img pay-link-upload-img">');
+                });
+            }
+            ,done: function(res){
+                $('#xtLinkImg').val(res.data.src);
+                imgBind();
+            }
+        });
+
+        function imgBind() {
+            $(".pay-link-upload-img").off("dblclick").on("dblclick", function() {
+                $(this).remove();
+                $('#xtLinkImg').val("");
+            });
+        }
+
         form.on('submit(pay-link-form-submit)', function (data) {
             febs.post(ctx + 'admin/system/payLink', data.field, function (res) {
                 febs.alert.success('保存成功');

--
Gitblit v1.9.1