From 09f6157991e7ea7b96ed6861208e03ba6a7af4e1 Mon Sep 17 00:00:00 2001 From: woody Date: Thu, 31 Jul 2025 17:59:22 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(sale):=20=E6=B7=BB=E5=8A=A0=E7=A7=92?= =?UTF-8?q?=E6=9D=80=E4=B8=93=E5=8C=BA=EF=BC=8C=E5=89=A9=E4=BD=99=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/request.js | 2 +- pages/index/index.vue | 17 +- pages/specialArea/details.vue | 299 +++++++++++++++++++++++++++++++++- pages/specialArea/list.vue | 283 +++++++++++++++++++++++++++++++- 4 files changed, 591 insertions(+), 10 deletions(-) diff --git a/config/request.js b/config/request.js index b963395..a5cfc05 100644 --- a/config/request.js +++ b/config/request.js @@ -19,7 +19,7 @@ module.exports = vm => { //#ifdef DEV_SERVER console.log('DEV_SERVER') - config.baseURL = 'http://localhost:8080' + config.baseURL = 'http://192.168.0.86:8080' //#endif //#ifdef QA_SERVER diff --git a/pages/index/index.vue b/pages/index/index.vue index ba20c73..5cebd48 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -39,6 +39,7 @@ :list="item.waresList" :title="item.specialAreaName" size="small" + :showSales="item.specialArea" > + + + + 库存剩余 + + + {{ getInventoryPercentage(goodDetail.inventory) }}% + + + + + + + + + @@ -75,7 +108,9 @@ >BV:{{ goodDetail.goodsAssAchive | numberToCurrency }} - 销量:{{ goodDetail.sales | seles }} + 销量:{{ goodDetail.sales | seles }} @@ -85,6 +120,39 @@ {{ goodDetail.waresName }} + + + + + + 库存剩余 + + + {{ getInventoryPercentage(goodDetail.inventory) }}% + + + + + + + + + {{ '急速下单即享优先发货' }} @@ -573,6 +641,45 @@ export default { // 作为返回值返回 return d + '天' + h + ':' + m + ':' + s }, + // 处理库存百分比,移除百分号并转换为数字 + getInventoryPercentage(inventory) { + if (typeof inventory === 'string') { + // 移除百分号并转换为数字 + const numStr = inventory.replace('%', '').trim() + const num = parseFloat(numStr) + return isNaN(num) ? 0 : Math.min(100, Math.max(0, num)) + } else if (typeof inventory === 'number') { + // 如果是数字,确保在0-100范围内 + return Math.min(100, Math.max(0, inventory)) + } + return 0 + }, + // 根据库存百分比返回对应的进度条样式类 + getProgressClass(inventory) { + const percentage = this.getInventoryPercentage(inventory) + if (percentage >= 80) { + return 'progress-high' + } else if (percentage >= 60) { + return 'progress-medium-high' + } else if (percentage >= 40) { + return 'progress-medium' + } else if (percentage >= 20) { + return 'progress-low' + } else { + return 'progress-critical' + } + }, + // 根据库存百分比返回百分比数字的样式类 + getPercentageClass(inventory) { + const percentage = this.getInventoryPercentage(inventory) + if (percentage <= 20) { + return 'percentage-critical' + } else if (percentage <= 30) { + return 'percentage-urgent' + } else { + return 'percentage-normal' + } + }, }, } @@ -970,4 +1077,194 @@ export default { justify-content: flex-end; margin-bottom: 10rpx; } + +/* 库存进度条样式 */ +.inventory-progress-container { + margin-top: 20rpx; + + .inventory-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12rpx; + + .inventory-label { + display: flex; + align-items: center; + font-size: 24rpx; + + .inventory-status { + color: #333; + } + } + + .inventory-percentage { + font-size: 24rpx; + font-weight: 700; + font-family: + DIN Alternate, + Arial, + sans-serif; + + &.percentage-critical { + color: #ff3742; + animation: percentageBlink 1s ease-in-out infinite; + text-shadow: 0 0 10rpx rgba(255, 55, 66, 0.3); + } + + &.percentage-urgent { + color: #ff5252; + animation: percentageGlow 2s ease-in-out infinite; + } + + &.percentage-normal { + color: #005bac; + } + } + } + + .inventory-progress-bar { + width: 100%; + height: 16rpx; + background: rgba(0, 0, 0, 0.08); + border-radius: 8rpx; + overflow: hidden; + position: relative; + box-shadow: inset 0 2rpx 4rpx rgba(0, 0, 0, 0.1); + + .inventory-progress-fill { + height: 100%; + border-radius: 8rpx; + transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1); + position: relative; + overflow: hidden; + + /* 进度条渐变色彩 */ + &.progress-critical { + background: linear-gradient( + 90deg, + #ff1744 0%, + #d50000 50%, + #ff1744 100% + ); + box-shadow: 0 0 20rpx rgba(255, 23, 68, 0.4); + animation: criticalPulse 1.5s ease-in-out infinite; + } + + &.progress-low { + background: linear-gradient( + 90deg, + #ff5722 0%, + #e64a19 50%, + #ff5722 100% + ); + box-shadow: 0 0 15rpx rgba(255, 87, 34, 0.3); + } + + &.progress-medium { + background: linear-gradient( + 90deg, + #ff9800 0%, + #f57c00 50%, + #ff9800 100% + ); + box-shadow: 0 0 10rpx rgba(255, 152, 0, 0.2); + } + + &.progress-medium-high { + background: linear-gradient( + 90deg, + #2196f3 0%, + #1976d2 50%, + #2196f3 100% + ); + box-shadow: 0 0 8rpx rgba(33, 150, 243, 0.2); + } + + &.progress-high { + background: linear-gradient( + 90deg, + #4caf50 0%, + #388e3c 25%, + #005bac 75%, + #003d82 100% + ); + box-shadow: 0 0 8rpx rgba(0, 91, 172, 0.2); + } + + /* 流动光效 */ + .progress-shine { + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient( + 90deg, + transparent 0%, + rgba(255, 255, 255, 0.8) 50%, + transparent 100% + ); + animation: shineFlow 2s ease-in-out infinite; + } + + /* 高光效果 */ + &::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 60%; + background: linear-gradient( + to bottom, + rgba(255, 255, 255, 0.4) 0%, + rgba(255, 255, 255, 0.1) 50%, + transparent 100% + ); + border-radius: 8rpx 8rpx 0 0; + } + } + } +} + +/* 动画定义 */ +@keyframes percentageBlink { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0.7; + } +} + +@keyframes percentageGlow { + 0%, + 100% { + text-shadow: 0 0 5rpx rgba(255, 82, 82, 0.3); + } + 50% { + text-shadow: 0 0 15rpx rgba(255, 82, 82, 0.6); + } +} + +@keyframes criticalPulse { + 0%, + 100% { + box-shadow: 0 0 20rpx rgba(255, 23, 68, 0.4); + } + 50% { + box-shadow: 0 0 30rpx rgba(255, 23, 68, 0.7); + } +} + +@keyframes shineFlow { + 0% { + left: -100%; + } + 100% { + left: 100%; + } +} diff --git a/pages/specialArea/list.vue b/pages/specialArea/list.vue index 392fd8b..7f572f3 100644 --- a/pages/specialArea/list.vue +++ b/pages/specialArea/list.vue @@ -103,8 +103,42 @@ {{ item.prefixLabelTarget.label }} - {{ item.waresName }} + {{ item.waresName }} + + + + + + 库存剩余 + + + {{ getInventoryPercentage(item.inventory) }}% + + + + + + + + + + - - - - - - - {{ item.warnMessage }} - - - - - - {{ - item.prefixLabelTarget.label - }} - {{ item.waresName }} - - - + - - - 库存剩余 - + class="fly" + v-show="item.preSaleStatus == 3 || item.isSale == 1" + > + + + + - {{ getInventoryPercentage(item.inventory) }}% - - - - - - + {{ item.warnMessage }} - - 业绩:{{ item.waresAchieve | numberToCurrency }} - - - 积分可抵扣:{{ item.deductMoney | numberToCurrency }} - - - 业绩:{{ item.waresAchieve | numberToCurrency }} - - - BV:{{ item.assAchieve | numberToCurrency }} - - - - - {{ item.vipPrice | numberToCurrency }} + + + + {{ item.prefixLabelTarget.label }} + {{ item.waresName }} + - - {{ item.waresPrice | numberToCurrency }} + + + + + + + + + + 剩余{{ getInventoryPercentage(item.inventory) }}% + + + + + + + 业绩:{{ item.waresAchieve | numberToCurrency }} + + + 积分可抵扣:{{ item.deductMoney | numberToCurrency }} + + + 业绩:{{ item.waresAchieve | numberToCurrency }} + + + BV:{{ item.assAchieve | numberToCurrency }} + + + {{ item.vipPrice | numberToCurrency }} + + + {{ item.waresPrice | numberToCurrency }} + + + + + + - - - - @@ -730,22 +734,21 @@ export default { overflow-y: auto; .goodList_i { - display: flex; + // display: flex; border-bottom: 1px solid #eee; - padding: 30rpx 0; + padding: 20rpx 0 10rpx; position: relative; .goodList_ir { - margin-left: 24rpx; flex: 1; display: flex; flex-direction: column; justify-content: space-between; - font-size: 28rpx; + font-size: 30rpx; font-family: Microsoft YaHei; font-weight: 400; color: #333333; - + margin-left: 24rpx; .goodList_ib { display: flex; align-items: center; @@ -880,12 +883,16 @@ export default { /* 库存进度条样式 - 升级版 */ .inventory-progress-container { - margin-top: 10rpx; + // margin-bottom: 10rpx; + display: flex; + align-items: center; + width: 100%; .inventory-header { display: flex; justify-content: space-between; align-items: center; - margin-bottom: 12rpx; + margin-right: 10rpx; + // margin-bottom: 12rpx; .inventory-label { display: flex; @@ -903,37 +910,38 @@ export default { color: #333; } } + } + .inventory-percentage { + font-size: 24rpx; + font-weight: 700; + font-family: + DIN Alternate, + Arial, + sans-serif; - .inventory-percentage { - font-size: 24rpx; - font-weight: 700; - font-family: - DIN Alternate, - Arial, - sans-serif; + &.percentage-critical { + color: #ff3742; + animation: percentageBlink 1s ease-in-out infinite; + text-shadow: 0 0 10rpx rgba(255, 55, 66, 0.3); + } - &.percentage-critical { - color: #ff3742; - animation: percentageBlink 1s ease-in-out infinite; - text-shadow: 0 0 10rpx rgba(255, 55, 66, 0.3); - } + &.percentage-urgent { + color: #ff5252; + animation: percentageGlow 2s ease-in-out infinite; + } - &.percentage-urgent { - color: #ff5252; - animation: percentageGlow 2s ease-in-out infinite; - } - - &.percentage-normal { - color: #005bac; - } + &.percentage-normal { + color: #005bac; } } .inventory-progress-bar { - width: 100%; - height: 16rpx; + width: 0; + flex: 1; + height: 18rpx; + margin-right: 10rpx; background: rgba(0, 0, 0, 0.08); - border-radius: 8rpx; + border-radius: 12rpx; overflow: hidden; position: relative; box-shadow: inset 0 2rpx 4rpx rgba(0, 0, 0, 0.1); From 4bc1929b301e5da602700723e7446fb9337f6eb4 Mon Sep 17 00:00:00 2001 From: woody Date: Tue, 5 Aug 2025 17:57:06 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat(distribution):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/distribution/realPerformance.vue | 176 -------------------- config/distribute.js | 49 +++--- 2 files changed, 28 insertions(+), 197 deletions(-) delete mode 100644 components/distribution/realPerformance.vue diff --git a/components/distribution/realPerformance.vue b/components/distribution/realPerformance.vue deleted file mode 100644 index 8c50a94..0000000 --- a/components/distribution/realPerformance.vue +++ /dev/null @@ -1,176 +0,0 @@ - - - - - \ No newline at end of file diff --git a/config/distribute.js b/config/distribute.js index 4c757b3..982c0e8 100644 --- a/config/distribute.js +++ b/config/distribute.js @@ -1,50 +1,57 @@ - const http = uni.$u.http //安置图 -export const getPlaceMent = (params) => http.get('/member/api/achieve/query-place-tree', {params}) - +export const getPlaceMent = params => + http.get('/member/api/achieve/query-place-tree', { params }) //安置图详情 -export const getTreeDetail = (data) => http.post('/member/api/achieve/query-place-tree-detail', data) +export const getTreeDetail = data => + http.post('/member/api/achieve/query-place-tree-detail', data) //安置图上方等级 -export const getAvatarInfo = (params) => http.get('/member/api/member-structure/get-avatar-info', {params}) +export const getAvatarInfo = params => + http.get('/member/api/member-structure/get-avatar-info', { params }) //安置图 -export const getDayType = (params) => http.get('/system/pub/enums/get-day-type', {params}) +export const getDayType = params => + http.get('/system/pub/enums/get-day-type', { params }) //获取安置业绩分布 -export const azAchievement = (params) => http.get('/report/api/achieve/az-achievement', {params}) +export const azAchievement = params => + http.get('/report/api/achieve/az-achievement', { params }) //获取安置业绩分布 -export const getPerformance = (params) => http.get('/member/api/achieve/query-real-performance', {params}) - -//获取真实业绩分布 -export const realPerformancePic = (params) => http.get('/member/api/achieve/query-real-performance-pic', {params}) - +export const getPerformance = params => + http.get('/member/api/achieve/query-real-performance', { params }) //获取推荐列表 -export const parentList = (params) => http.get('/member/api/member/parent-list', {params}) +export const parentList = params => + http.get('/member/api/member/parent-list', { params }) //获取平均时长 -export const getMemberRecommend = (params) => http.get('/member/api/census/get-member-recommend-time', {params}) +export const getMemberRecommend = params => + http.get('/member/api/census/get-member-recommend-time', { params }) //获取直推业绩左侧 -export const parentAchieveLeft = (data) => http.post('/member/api/achieve/parent-achieve-left', data) +export const parentAchieveLeft = data => + http.post('/member/api/achieve/parent-achieve-left', data) //获取直推业绩右侧 -export const parentAchieveRight = (data) => http.post('/member/api/achieve/parent-achieve-right',data) +export const parentAchieveRight = data => + http.post('/member/api/achieve/parent-achieve-right', data) //获取等级 -export const systemGrandeRange = (params) => http.get('/system/manage/grade/gradeRanglist', {params}) +export const systemGrandeRange = params => + http.get('/system/manage/grade/gradeRanglist', { params }) //新增业绩统计 -export const getPlaceNewAddAchieve = (params) => http.get('/member/api/achieve/place-new-add-achieve-stat', {params}) +export const getPlaceNewAddAchieve = params => + http.get('/member/api/achieve/place-new-add-achieve-stat', { params }) //获取业绩类型 -export const getYjList = (params) => http.get('/system/pub/enums/achievement-type-member', {params}) +export const getYjList = params => + http.get('/system/pub/enums/achievement-type-member', { params }) //月度业绩左右区业绩详情 -export const getAchieveDetails = (params) => http.get('/member/api/achieve/place-new-add-achieve-details', {params}) - +export const getAchieveDetails = params => + http.get('/member/api/achieve/place-new-add-achieve-details', { params }) From b6fe04ea07bcc159b885b312b3447055b48c6620 Mon Sep 17 00:00:00 2001 From: woody Date: Tue, 5 Aug 2025 18:06:59 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat(performanceEchart):=20=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E6=97=A0=E7=94=A8=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/performanceEchart/index.vue | 733 +++++++++++++++--------------- 1 file changed, 367 insertions(+), 366 deletions(-) diff --git a/pages/performanceEchart/index.vue b/pages/performanceEchart/index.vue index 0962881..54058b2 100644 --- a/pages/performanceEchart/index.vue +++ b/pages/performanceEchart/index.vue @@ -1,415 +1,416 @@