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 @@ 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 @@ + + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + + 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