From 214026e859274170d5e22fcb8e477ce55f7fa8d0 Mon Sep 17 00:00:00 2001
From: gyq <875626088@qq.com>
Date: Thu, 11 Dec 2025 19:27:22 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=A7=AF=E5=88=86=E9=94=81?=
=?UTF-8?q?=E5=AE=A2=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=9F=BA=E7=A1=80=E8=AE=BE?=
=?UTF-8?q?=E7=BD=AE=EF=BC=8C=E5=95=86=E5=93=81=E8=AE=BE=E7=BD=AE=EF=BC=8C?=
=?UTF-8?q?=E5=85=91=E6=8D=A2=E8=AE=B0=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
components/my-components/my-footer-btn.vue | 138 +++---
components/my-components/my-header-card.vue | 1 +
components/my-components/my-select-coupon.vue | 2 +-
components/my-components/my-upload-imgs.vue | 181 ++++++++
http/api/market/point.js | 121 +++++
http/http.js | 4 +-
pageMarket/points/addProduct.vue | 415 ++++++++++++++++++
pageMarket/points/components/coupon-icon.vue | 142 ++++++
pageMarket/points/components/productPage.vue | 326 ++++++++++++++
pageMarket/points/components/record.vue | 414 +++++++++++++++++
pageMarket/points/components/setting.vue | 290 ++++++++++++
pageMarket/points/index.vue | 155 +++++++
pages.json | 18 +-
pages/appliccation/marketing.vue | 14 +-
utils/index.js | 45 +-
15 files changed, 2188 insertions(+), 78 deletions(-)
create mode 100644 components/my-components/my-upload-imgs.vue
create mode 100644 http/api/market/point.js
create mode 100644 pageMarket/points/addProduct.vue
create mode 100644 pageMarket/points/components/coupon-icon.vue
create mode 100644 pageMarket/points/components/productPage.vue
create mode 100644 pageMarket/points/components/record.vue
create mode 100644 pageMarket/points/components/setting.vue
create mode 100644 pageMarket/points/index.vue
diff --git a/components/my-components/my-footer-btn.vue b/components/my-components/my-footer-btn.vue
index 453ddef..02360e2 100644
--- a/components/my-components/my-footer-btn.vue
+++ b/components/my-components/my-footer-btn.vue
@@ -1,78 +1,90 @@
-
-
-
- {{ confirmText }}
-
-
- 取消
-
-
-
+
+
+
+ {{ confirmText }}
+
+
+ 取消
+
+
+
diff --git a/components/my-components/my-header-card.vue b/components/my-components/my-header-card.vue
index 38a96d1..a332a56 100644
--- a/components/my-components/my-header-card.vue
+++ b/components/my-components/my-header-card.vue
@@ -83,6 +83,7 @@ onMounted(() => {
padding-left: 20upx;
flex-direction: column;
.title {
+ margin-top: -4upx;
.t {
font-size: 28upx;
font-weight: bold;
diff --git a/components/my-components/my-select-coupon.vue b/components/my-components/my-select-coupon.vue
index 9ba179f..b7e19d5 100644
--- a/components/my-components/my-select-coupon.vue
+++ b/components/my-components/my-select-coupon.vue
@@ -3,7 +3,7 @@
- 请选择商品
+ 请选择优惠券
{{ goodsName }}
diff --git a/components/my-components/my-upload-imgs.vue b/components/my-components/my-upload-imgs.vue
new file mode 100644
index 0000000..41a16e4
--- /dev/null
+++ b/components/my-components/my-upload-imgs.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
diff --git a/http/api/market/point.js b/http/api/market/point.js
new file mode 100644
index 0000000..b55bc86
--- /dev/null
+++ b/http/api/market/point.js
@@ -0,0 +1,121 @@
+import http from '@/http/http.js'
+const request = http.request
+const MARKET_URL = 'market'
+const ORDER_URL = 'order'
+
+/**
+ * 积分:配置:新增/更新
+ * @param {Object} data
+ */
+export function pointsConfigPost(data) {
+ return request({
+ url: `${MARKET_URL}/admin/points/config`,
+ method: "POST",
+ data
+ })
+}
+
+/**
+ * 积分:配置:详情
+ * @param {Object} data
+ */
+export function pointsConfigGet() {
+ return request({
+ url: `${MARKET_URL}/admin/points/config`,
+ method: "GET"
+ })
+}
+
+/**
+ * 积分:商品:列表
+ * @param {Object} data
+ */
+export function pointsGoodsPage(data) {
+ return request({
+ url: `${MARKET_URL}/admin/pointsGoods/page`,
+ method: "GET",
+ data
+ })
+}
+
+/**
+ * 积分:商品:新增/修改
+ * @param {Object} data
+ */
+export function pointsGoodsPost(data) {
+ return request({
+ url: `${MARKET_URL}/admin/pointsGoods`,
+ method: "POST",
+ data
+ })
+}
+
+/**
+ * 积分-商品-删除
+ * @param {Object} data
+ */
+export function pointsGoodsDel(id) {
+ return request({
+ url: `${MARKET_URL}/admin/pointsGoods/${id}`,
+ method: "DELETE"
+ })
+}
+
+/**
+ * 积分:商品:详情
+ * @param {Object} data
+ */
+export function pointsGoodsDetail(id) {
+ return request({
+ url: `${MARKET_URL}/admin/pointsGoods/${id}`,
+ method: "GET"
+ })
+}
+
+/**
+ * 积分:积分商品:兑换记录
+ * @param {Object} data
+ */
+export function goodsRecordPage(data) {
+ return request({
+ url: `${ORDER_URL}/admin/points/goodsRecord/page`,
+ method: "GET",
+ data
+ })
+}
+
+/**
+ * 积分:积分商品:商家核销
+ * @param {Object} data
+ */
+export function goodsRecordCkecout(data) {
+ return request({
+ url: `${ORDER_URL}/admin/points/goodsRecord/checkout`,
+ method: "post",
+ data
+ })
+}
+
+/**
+ * 积分:积分商品:同意退单
+ * @param {Object} data
+ */
+export function goodsRecordAgreeRefund(data) {
+ return request({
+ url: `${ORDER_URL}/admin/points/goodsRecord/agreeRefund`,
+ method: "post",
+ data
+ })
+}
+
+/**
+ * 积分:积分商品:驳回退单
+ * @param {Object} data
+ */
+export function goodsRecordRejectRefund(data) {
+ return request({
+ url: `${ORDER_URL}/admin/points/goodsRecord/rejectRefund`,
+ method: "post",
+ data
+ })
+}
\ No newline at end of file
diff --git a/http/http.js b/http/http.js
index 2922695..eb2d791 100644
--- a/http/http.js
+++ b/http/http.js
@@ -15,8 +15,8 @@ import infoBox from "@/commons/utils/infoBox.js";
import go from "@/commons/utils/go.js";
import { reject } from "lodash";
// 设置node环境
-envConfig.changeEnv(storageManage.env('production')) //正式
-// envConfig.changeEnv(storageManage.env("development")); //测试
+// envConfig.changeEnv(storageManage.env('production')) //正式
+envConfig.changeEnv(storageManage.env("development")); //测试
// 测试服
// #ifdef H5
diff --git a/pageMarket/points/addProduct.vue b/pageMarket/points/addProduct.vue
new file mode 100644
index 0000000..0993dcf
--- /dev/null
+++ b/pageMarket/points/addProduct.vue
@@ -0,0 +1,415 @@
+
+
+
+
+
+
+
+ 商品类型
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择优惠券
+
+
+
+
+
+
+
+
+
+
+
+ 商品名称
+
+
+
+
+
+
+
+
+
+
+
+ 商品图片
+
+
+
+
+
+
+
+
+
+ 所需积分
+
+
+
+
+
+ 积分
+
+
+
+
+
+
+
+
+
+ 额外价格
+
+
+
+
+
+ 元
+
+
+
+
+
+
+
+
+
+ 数量
+
+
+
+
+
+
+
+
+
+
+
+ 排序值
+
+
+
+
+
+
+
+
+
+
+
+ 每人限购
+
+
+
+
+
+
+
+
+
+
+
+
+ 发放方式
+
+ 系统发放
+ 需要用户到店内领取核销
+
+
+
+
+
+
+
+
+ 商品图片
+
+
+
+
+
+
+
+
+
+
+ 是否上架
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageMarket/points/components/coupon-icon.vue b/pageMarket/points/components/coupon-icon.vue
new file mode 100644
index 0000000..097f661
--- /dev/null
+++ b/pageMarket/points/components/coupon-icon.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+ ¥
+ {{ props.item.discountAmount }}
+
+
+ 满{{ props.item.fullAmount }}可用
+
+
+
+
+ {{ props.item.discountNum }}件
+ 商品兑换
+
+
+ 满{{ props.item.fullAmount }}可用
+
+
+
+
+ {{ props.item.discountRate / 10 }}折
+
+
+ 满{{ props.item.fullAmount }}可用
+
+
+
+
+ 第二件
+ 半价券
+
+
+
+
+ 买一送
+ 一券
+
+
+
+
+
+
+
+
diff --git a/pageMarket/points/components/productPage.vue b/pageMarket/points/components/productPage.vue
new file mode 100644
index 0000000..ff7cf50
--- /dev/null
+++ b/pageMarket/points/components/productPage.vue
@@ -0,0 +1,326 @@
+
+
+
+
+
+ 排序值:{{ item.sort }}
+
+ 库存:{{ item.quantity }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.goodsName }}
+ {{ item.requiredPoints }}积分 + {{ item.extraPrice || 0 }}元
+
+
+
+
+
+ 上架
+ 下架
+
+
+
+
+
+
+
+
+
+
+ 修改库存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageMarket/points/components/record.vue b/pageMarket/points/components/record.vue
new file mode 100644
index 0000000..bfefe00
--- /dev/null
+++ b/pageMarket/points/components/record.vue
@@ -0,0 +1,414 @@
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ item.orderNo }}
+ {{ item.status }}
+
+
+ 用户:{{ item.nickName }} {{ item.phone }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.pointsGoodsName }}
+ x{{ item.number }}
+
+
+
+ {{ item.spendPoints }}积分 + {{ item.extraPaymentAmount }}元
+
+
+
+ 下单时间:{{ item.createTime }}
+
+
+ 核销时间:{{ item.checkoutTime }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageMarket/points/components/setting.vue b/pageMarket/points/components/setting.vue
new file mode 100644
index 0000000..c7de99f
--- /dev/null
+++ b/pageMarket/points/components/setting.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+ 开启积分
+
+
+
+ 开启后,所有用户可通过消费获得积分及可用积分抵扣支付
+
+
+
+
+
+
+
+
+ 消费送积分
+
+
+ 每消费
+
+
+
+ 元
+
+
+
+ 获得1积分
+
+
+
+
+
+
+ 可抵扣门槛
+
+
+
+
+
+ 元
+
+
+
+
+
+
+
+
+
+ 最高抵扣比例
+
+
+
+
+
+ %
+
+
+
+
+
+
+
+
+
+ 抵扣积分比例
+
+
+ 1元等于
+
+
+
+ 积分
+
+
+
+
+
+
+
+
+
+
+
+ 开启积分商城
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pageMarket/points/index.vue b/pageMarket/points/index.vue
new file mode 100644
index 0000000..6974ff4
--- /dev/null
+++ b/pageMarket/points/index.vue
@@ -0,0 +1,155 @@
+
+
+ (headHeight = e.height)"
+ >
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages.json b/pages.json
index 20df20f..6d076e2 100644
--- a/pages.json
+++ b/pages.json
@@ -808,9 +808,21 @@
"style": {
// "navigationBarTitleText": "添加会员等级"
}
+ },
+ {
+ "pageId": "PAGES_MARKET_POINTS_INDEX",
+ "path": "points/index",
+ "style": {
+ "navigationBarTitleText": "积分锁客"
+ }
+ },
+ {
+ "pageId": "PAGES_MARKET_POINTS_ADD_PRODUCT",
+ "path": "points/addProduct",
+ "style": {
+ "navigationBarTitleText": "添加商品"
+ }
}
-
-
]
},
{
@@ -861,7 +873,7 @@
// "navigationBarTitleText": "查看优惠券"
// }
// }
-
+
// ]
// }
diff --git a/pages/appliccation/marketing.vue b/pages/appliccation/marketing.vue
index 6973e9a..edaa3f2 100644
--- a/pages/appliccation/marketing.vue
+++ b/pages/appliccation/marketing.vue
@@ -40,7 +40,7 @@ const menuList = ref([
{
title: '积分锁客',
icon: '',
- pageUrl: '',
+ pageUrl: 'PAGES_MARKET_POINTS_INDEX',
intro: '设置充值消费的N倍,当前订单立即免单'
},
{
@@ -219,21 +219,19 @@ const menuList = ref([
]
}
]);
-console.log(menusStore.adminPages);
+
+// console.log(
+// 'menusStore.adminPages===',
+// menusStore.adminPages.map((item) => item.title)
+// );
const computedMenus = computed(() => {
- // const arr = menusStore.adminPages.filter((v) => {
- // return navList.find((navItem) => navItem.title == v.title);
- // });
return menuList.value.map((v) => {
v.menus = v.menus.filter((menu) => {
const hasPermission = menusStore.adminPages.find((navItem) => navItem.title == menu.title);
- console.log('hasPermission', hasPermission);
if (hasPermission) {
menu.icon = hasPermission.miniIcon;
- console.log(menu);
}
-
return hasPermission;
});
return v;
diff --git a/utils/index.js b/utils/index.js
index 8216033..29a93c1 100644
--- a/utils/index.js
+++ b/utils/index.js
@@ -71,4 +71,47 @@ export const convertTimeFormat = (timeStr) => {
// 非法格式兜底
return '00:00';
-};
\ No newline at end of file
+};
+
+
+/**
+ * 判断目标值是否包含指定字符串
+ * @param {string|number|array} target - 目标值(字符串/数字/数组)
+ * @param {string} searchStr - 要查找的子字符串
+ * @param {object} [options] - 可选配置
+ * @param {boolean} [options.ignoreCase=false] - 是否忽略大小写
+ * @param {boolean} [options.allowEmpty=false] - 当 searchStr 为空时,是否返回 true(默认 false)
+ * @returns {boolean} 是否包含指定字符串
+ */
+export function includesString(target, searchStr, options = {}) {
+ // 解构配置,设置默认值
+ const {
+ ignoreCase = false, allowEmpty = false
+ } = options;
+
+ // 1. 处理 searchStr 为空的情况
+ if (searchStr === '' || searchStr === null || searchStr === undefined) {
+ return allowEmpty;
+ }
+
+ // 2. 统一将目标值转为字符串(兼容数字/数组等)
+ let targetStr = '';
+ if (typeof target === 'string') {
+ targetStr = target;
+ } else if (typeof target === 'number') {
+ targetStr = String(target);
+ } else if (Array.isArray(target)) {
+ // 数组:拼接为字符串(也可改为 "数组中某一项包含",根据需求调整)
+ targetStr = target.join(',');
+ } else {
+ // 其他类型(对象/布尔等):转为字符串或返回 false
+ targetStr = String(target);
+ }
+
+ // 3. 处理大小写忽略
+ const processedTarget = ignoreCase ? targetStr.toLowerCase() : targetStr;
+ const processedSearch = ignoreCase ? searchStr.toLowerCase() : searchStr;
+
+ // 4. 执行包含判断
+ return processedTarget.includes(processedSearch);
+}
\ No newline at end of file