Browse Source

Merge branch 'master' of ssh://gogs.zfire.top:2222/zfire-front/recycle-mobile

linwenxin 1 year ago
parent
commit
08bb338362

+ 3 - 3
src/components/Loading.vue

@@ -3,7 +3,7 @@
 		<view v-if="type === 1">
 			<u-empty
 				mode="list"
-				icon="/static/images/common/empty_data.png"
+				icon="/static/common/empty_data.png"
 				:text="loadStatus === 1 ? loadText : showText"
 				v-if="dataList.length < 1">
 			</u-empty>
@@ -15,7 +15,7 @@
 		<view v-if="type === 2">
 			<u-empty
 				mode="list"
-				icon="/static/images/common/empty_data.png"
+				icon="/static/common/empty_data.png"
 				:text="loadStatus === 1 ? loadText : showText"
 				v-if="dataList.length < 1">
 			</u-empty>
@@ -25,7 +25,7 @@
 			<u-loading-page :loading-text="loadText" :loading="loadStatus === 1"></u-loading-page>
 			<u-empty
 				mode="list"
-				icon="/static/images/common/empty_data.png"
+				icon="/static/common/empty_data.png"
 				:text="showText"
 				v-if="loadStatus === 2">
 			</u-empty>

+ 61 - 0
src/filters/index.js

@@ -0,0 +1,61 @@
+
+/**
+ * 数字保留两位小数点
+ * @param {number} num
+ * @return {string}
+ */
+export function priceFilter(num) {
+	if(!num) return '0.00';
+	num = Number(num);
+	return num.toFixed(2);
+}
+
+/**
+ * 日期转 年月日格式 YY-mm-dd
+ * @param {string} date
+ * @return {string}
+ */
+export function dateToYYmmdd(date) {
+	if(!date) return '';
+	return date.slice(0, 10);
+}
+
+/**
+ * 日期转 年月日格式 YY.mm.dd
+ * @param {string} date
+ * @return {string}
+ */
+export function dateToYYmmdd2(date) {
+	if(!date) return '';
+	let newDate = date.slice(0, 10);
+	newDate = newDate.replace(/-/g, '.');
+	return newDate;
+}
+
+/**
+ * 日期转 月日格式
+ * @param {string} date
+ * @return {string}
+ */
+export function dateTommdd(date) {
+	if(!date) return '';
+	return date.slice(5, 10);
+}
+
+/**
+ * 日期转 时分秒格式
+ * @param {string} date
+ * @return {string}
+ */
+export function dateToHHmmss(date) {
+	if(!date) return '';
+	return date.slice(11, 19);
+}
+
+export function priceFilter2(val) {
+	if(!val && val != 0) return '-';
+  if(val == 0) return '面议';
+	val = Number(val);
+	return val.toFixed(2);
+}
+

+ 6 - 0
src/main.js

@@ -50,6 +50,12 @@ App.mpType = 'app'
 import api from '@/common/http/'
 Vue.prototype.$api = api
 
+import * as filters from './filters/index.js' // global filters
+// register global utility filters
+Object.keys(filters).forEach(key => {
+  Vue.filter(key, filters[key])
+})
+
 import custom from '@/components/custom.vue';
 import Loading from '@/components/Loading.vue';
 import zjPageLayout from "@/components/zj-container/zj-page-layout.vue"

+ 34 - 21
src/pages/index/index.vue

@@ -19,9 +19,9 @@
         </view>
 
         <view class="category-container card mt30">
-          <view class="item" v-for="(item, index) in categoryList" :key="index" @tap="$navPage(`/pages/goods/list`)">
-            <image src="@/static/user/icon_2.png"></image>
-            <view class="name">家用空调</view>
+          <view class="item" v-for="(item, index) in categoryList" :key="index" @tap="$navPage(`/pages/goods/list?${item.categoryId}`)">
+            <image :src="imageUrl + item.imgUrl"></image>
+            <view class="name">{{item.categoryName}}</view>
           </view>
         </view>
 
@@ -31,24 +31,22 @@
         </view>
 
         <view class="common-goods-list">
-          <view class="item card" v-for="(item, index) in [1,2,3]" :key="index" @tap="$navPage(`/pages/goods/detail`)">
+          <view class="item card" v-for="(item, index) in dataList" :key="index" @tap="$navPage(`/pages/goods/detail`)">
             <view class="top">
               <image src="@/static/common/logo.png"></image>
               <view class="user">
-                <view class="name">张三</view>
-                <view class="time">23小时前发布</view>
+                <view class="name">{{item.userName}}</view>
+                <view class="time">{{item.createTime}}</view>
               </view>
-              <view class="price">¥1888.00</view>
+              <view class="price">{{item.amount | priceFilter2}}</view>
             </view>
-            <view class="title">商品名称</view>
-            <view class="des">商品描述</view>
+            <view class="title">{{item.title}}</view>
+            <view class="des">{{item.content}}</view>
             <view class="imgs">
-              <image src="@/static/user/other_speech.png"></image>
-              <image src="@/static/user/other_speech.png"></image>
-              <image src="@/static/user/other_speech.png"></image>
+              <image :src="imgUrl + it.imgUrl" v-for="(it, idx) in item.goodsFiles" :key="idx"></image>
             </view>
             <view class="bottom">
-              <view class="left-location">天河区棠下</view>
+              <view class="left-location"><text class="iconfont icon-dingwei"></text>{{item.address}}</view>
               <view class="right-stats">
                 <view class="it">
                   <text class="iconfont icon-dianzan"></text>
@@ -66,6 +64,8 @@
             </view>
           </view>
         </view>
+        
+        <Loading :loadStatus="loadStatus" :dataList="dataList" />
 
       </view>
 
@@ -81,9 +81,10 @@
   export default {
     data() {
       return {
-        imgUrl: this.$imageUrl,
+        imageUrl: this.$imageUrl,
         dataList: [],
         pageNum: 1,
+        loadStatus: 0,
         refresherTriggered: false,
         keyword: '',
         bannerList: [
@@ -91,7 +92,7 @@
           'https://cdn.uviewui.com/uview/swiper/swiper2.png',
           'https://cdn.uviewui.com/uview/swiper/swiper1.png',
         ],
-        categoryList: [1, 2, 3, 4],
+        categoryList: [],
         tabList: [{
             name: '默认顺序',
             value: 1
@@ -119,13 +120,25 @@
     },
 
     async onLoad() {
-      // await this.getList()
+      await this.getCategory();
+      await this.getList();
     },
 
     methods: {
+      async getCategory() {
+        return new Promise((resolve, reject) => {
+          this.$api.get('/goods/category/list')
+          .then(res => {
+            this.categoryList = res.data || [];
+          }).finally(res => {
+            resolve(1);
+          })
+        })
+      },
+
       //获取列表数据
       async getList() {
-        this.$api.post('/xxx/xxxlist', {
+        this.$api.get('/goods/list', {
           pageNum: this.pageNum,
           pageSize: 10,
         }).then(res => {
@@ -137,8 +150,6 @@
           this.dataList = this.dataList.concat(list);
         }).catch(() => {
           this.loadStatus = 2;
-        }).finally(res => {
-          this.refresherTriggered = false;
         })
       },
 
@@ -151,11 +162,13 @@
       },
 
       // 触发下拉刷新
-      refresherrefresh(e) {
+      async refresherrefresh(e) {
         this.refresherTriggered = true;
         this.dataList = [];
         this.pageNum = 1;
         this.getList();
+        await this.getCategory();
+        this.refresherTriggered = false;
       },
 
     }
@@ -217,4 +230,4 @@
       }
     }
   }
-</style>
+</style>

+ 37 - 2
src/pages/mine/index.vue

@@ -93,7 +93,7 @@ export default {
         { name: '我的收益', num: 0, url: '/pages/mine/myEarnings/list' },
       ],
       issueStats: [
-        { name: '我的发布', icon: 'icon-xiangji', num: 1 },
+        { name: '我的发布', icon: 'icon-xiangji', num: 0 },
         { name: '已卖出', icon: 'icon-xiangji', num: 0 },
         { name: '已下架', icon: 'icon-xiangji', num: 0 },
       ],
@@ -130,13 +130,48 @@ export default {
     this.$getUserInfo().then(data => {
       this.userInfo = data;
     })
+    this.getStats();
   },
 
   methods: {
     // 触发下拉刷新
-    refresherrefresh(e) {
+    async refresherrefresh(e) {
     	this.refresherTriggered = true;
+      await this.getStats();
+      await this.getIssueStats();
+      this.refresherTriggered = false;
+    },
 
+    // 获取统计
+    async getStats() {
+      return new Promise((resolve, reject) => {
+        this.$api.get('/likeOrCollect/countLikeCollect', {
+          userId: this.$store.state.user.userId,
+        }).then(res => {
+          if(!res.data) return false;
+          this.userStats[0].num = res.data.dz;
+          this.userStats[1].num = res.data.sc;
+          this.userStats[2].num = res.data.sy;
+        }).finally(res => {
+          resolve(1);
+        })
+      })
+    },
+
+    // 获取我发布的统计
+    async getIssueStats() {
+      return new Promise((resolve, reject) => {
+        this.$api.get('/goods/count', {
+          userId: this.$store.state.user.userId,
+        }).then(res => {
+          if(!res.data) return false;
+          this.issueStats[0].num = res.data.fb;
+          this.issueStats[1].num = res.data.mc;
+          this.issueStats[2].num = res.data.xj;
+        }).finally(res => {
+          resolve(1);
+        })
+      })
     },
 
     navToPage(url) {

+ 56 - 18
src/pages/mine/myCollection.vue

@@ -1,4 +1,5 @@
 <template>
+  <!-- #ifdef H5 -->
   <zj-page-layout
   	:hasFooter="false"
   	:isScroll="true"
@@ -6,52 +7,60 @@
   	@refresherrefresh="refresherrefresh"
   	@scrolltolower="scrolltolower">
     <view class="common-goods-list">
-      <view class="item">
+      <view class="item" v-for="(item, index) in dataList" :key="index" @tap="toDetail(item.id)">
         <view class="top">
           <image src="@/static/common/logo.png"></image>
           <view class="user">
-            <view class="name">张三</view>
-            <view class="time">23小时前发布</view>
+            <view class="name">{{item.userName}}</view>
+            <view class="time">{{item.createTime}}</view>
           </view>
-          <view class="price">¥1888.00</view>
+          <view class="price">{{item.amount | priceFilter}}</view>
         </view>
-        <view class="title">商品名称</view>
-        <view class="des">商品描述</view>
+        <view class="title">{{item.title}}</view>
+        <view class="des">{{item.content}}</view>
         <view class="imgs">
-          <image src="@/static/user/other_speech.png"></image>
-          <image src="@/static/user/other_speech.png"></image>
-          <image src="@/static/user/other_speech.png"></image>
+          <image :src="imgUrl + it.imgUrl" v-for="(it, idx) in item.goodsFiles" :key="idx"></image>
         </view>
         <view class="bottom">
-          <view class="left-location">天河区棠下</view>
-          <view class="right-btn">
-            <u-button text="取消收藏" shape="circle"></u-button>
+          <view class="left-location"><text class="iconfont icon-dingwei"></text>{{item.address}}</view>
+          <view class="right-btn" @tap.stop>
+            <u-button text="取消收藏" shape="circle" @click="handelCancel(item.id)"></u-button>
           </view>
         </view>
       </view>
     </view>
+
+    <Loading :loadStatus="loadStatus" :dataList="dataList" />
   </zj-page-layout>
+  <!-- #endif -->
+  <!-- #ifndef H5 -->
+  <web-view :src="webViewHref('/pages/mine/myCollection')"></web-view>
+  <!-- #endif -->
 </template>
 
 <script>
+  // #ifdef H5
   export default {
     data() {
       return {
         imgUrl: this.$imageUrl,
         dataList: [],
-        pageNum: 1,
+        pageNum: 1,
+				loadStatus: 0,
         refresherTriggered: false,
       }
     },
 
     async onLoad() {
-      // await this.getList()
+      await this.getList()
     },
 
     methods: {
       //获取列表数据
       async getList() {
-        this.$api.post('/xxx/xxxlist', {
+        this.$api.get('/likeOrCollect/list', {
+          userId: this.$store.state.user.userId,
+          type: 2,
           pageNum: this.pageNum,
           pageSize: 10,
         }).then(res => {
@@ -79,13 +88,42 @@
       // 触发下拉刷新
       refresherrefresh(e) {
       	this.refresherTriggered = true;
-      	this.dataList = [];
-      	this.pageNum = 1;
-      	this.getList();
+      	this.refreshList();
+      },
+
+      refreshList() {
+        this.dataList = [];
+        this.pageNum = 1;
+        this.getList();
+      },
+
+      toDetail(id) {
+        this.$navToPage({
+          url: `/pages/goods/detail?id=${id}`
+        })
+      },
+
+      handelCancel(id) {
+        this.$modal({
+          content: '确定要取消收藏吗?'
+        }).then(() => {
+          this.$api.post('/likeOrCollect/likeOrCollect', {
+            userId: this.$store.state.user.userId,
+            goodsId: id,
+            type: 2,
+            operate: 'NO'
+          }).then(res => {
+            this.refreshList();
+          })
+        }).catch(() => {})
       },
 
     }
   }
+  // #endif
+  // #ifndef H5
+
+  // #endif
 </script>
 
 <style lang="scss" scoped>

+ 52 - 16
src/pages/mine/myEarnings/list.vue

@@ -7,56 +7,86 @@
   	@scrolltolower="scrolltolower">
     <view class="total-container">
       <view class="top">
-        <view class="num">¥1008.00</view>
+        <view class="num">¥{{count.total || 0}}</view>
         <view class="text">总收益</view>
       </view>
       <view class="bottom">
         <view class="item">
-          <view class="num">¥1008.00</view>
+          <view class="num">¥{{count.yjs || 0}}</view>
           <view class="text">已结算</view>
         </view>
         <view class="item">
-          <view class="num">¥1008.00</view>
+          <view class="num">¥{{count.wjs || 0}}</view>
           <view class="text">待结算</view>
         </view>
       </view>
     </view>
     <view class="list-container">
       <view class="title">收益明细</view>
-      <view class="item" @tap="$navPage(`/pages/mine/myEarnings/detail`)">
+      <view class="item" v-for="(item, index) in dataList" :key="index" @tap="toDetail(item.orderId)">
         <view class="left">
-          <view class="row">订单编号:S123456789</view>
-          <view class="row">订单金额:¥1800.00</view>
-          <view class="row">支付时间:2023-09-11 21:22:33</view>
+          <view class="row">订单编号:{{item.orderId}}</view>
+          <view class="row">订单金额:¥{{item.payment | priceFilter}}</view>
+          <view class="row">支付时间:{{item.createTime}}</view>
         </view>
         <view class="right">
-          <view class="status">已结算</view>
-          <view class="price">+150.00</view>
+          <view class="status">{{item.status | statusFilter}}</view>
+          <view class="price">+{{item.amount | priceFilter}}</view>
         </view>
       </view>
     </view>
+
+    <Loading :loadStatus="loadStatus" :dataList="dataList" />
   </zj-page-layout>
 </template>
 
 <script>
   export default {
+    filters: {
+      statusFilter(val) {
+        const MAP = {
+          ING: '结算中',
+          OVER: '已结算',
+          CANCEL: '已取消',
+          EXCEPTION: '异常结算',
+          OFFLINE: '线下结算',
+        }
+        return MAP[val];
+      }
+    },
+
     data() {
       return {
-        imgUrl: this.$imageUrl,
+        count: {},
         dataList: [],
         pageNum: 1,
+        loadStatus: 0,
         refresherTriggered: false,
       }
     },
 
     async onLoad() {
-      // await this.getList()
+      await this.getStats();
+      await this.getList();
     },
 
     methods: {
+      getStats() {
+        return new Promise((resolve, reject) => {
+          this.$api.get('/likeOrCollect/countLikeCollect', {
+            userId: this.$store.state.user.userId,
+          }).then(res => {
+            if(!res.data) return false;
+            this.count = res.data;
+          }).finally(res => {
+            resolve(1);
+          })
+        })
+      },
+
       //获取列表数据
       async getList() {
-        this.$api.post('/xxx/xxxlist', {
+        this.$api.postJson('/order/share/list', {
           pageNum: this.pageNum,
           pageSize: 10,
         }).then(res => {
@@ -68,8 +98,6 @@
           this.dataList = this.dataList.concat(list);
         }).catch(() => {
 					this.loadStatus = 2;
-				}).finally(res => {
-					this.refresherTriggered = false;
 				})
       },
 
@@ -82,11 +110,19 @@
       },
 
       // 触发下拉刷新
-      refresherrefresh(e) {
+      async refresherrefresh(e) {
       	this.refresherTriggered = true;
       	this.dataList = [];
       	this.pageNum = 1;
-      	this.getList();
+      	await this.getList();
+        await this.getStats();
+      	this.refresherTriggered = false;
+      },
+
+      toDetail(id) {
+        this.$navToPage({
+          url: `/pages/mine/myEarnings/detail?id=${id}`
+        })
       },
 
     }

+ 40 - 17
src/pages/mine/myLike.vue

@@ -7,26 +7,24 @@
   	@refresherrefresh="refresherrefresh"
   	@scrolltolower="scrolltolower">
     <view class="common-goods-list">
-      <view class="item">
+      <view class="item" v-for="(item, index) in dataList" :key="index" @tap="toDetail(item.id)">
         <view class="top">
           <image src="@/static/common/logo.png"></image>
           <view class="user">
-            <view class="name">张三</view>
-            <view class="time">23小时前发布</view>
+            <view class="name">{{item.userName}}</view>
+            <view class="time">{{item.createTime}}</view>
           </view>
-          <view class="price">¥1888.00</view>
+          <view class="price">{{item.amount | priceFilter2}}</view>
         </view>
-        <view class="title">商品名称</view>
-        <view class="des">商品描述</view>
+        <view class="title">{{item.title}}</view>
+        <view class="des">{{item.content}}</view>
         <view class="imgs">
-          <image src="@/static/user/other_speech.png"></image>
-          <image src="@/static/user/other_speech.png"></image>
-          <image src="@/static/user/other_speech.png"></image>
+          <image :src="imgUrl + it.imgUrl" v-for="(it, idx) in item.goodsFiles" :key="idx"></image>
         </view>
         <view class="bottom">
-          <view class="left-location">天河区棠下</view>
-          <view class="right-btn">
-            <u-button text="取消点赞" shape="circle"></u-button>
+          <view class="left-location"><text class="iconfont icon-dingwei"></text>{{item.address}}</view>
+          <view class="right-btn" @tap.stop>
+            <u-button text="取消点赞" shape="circle" @click="handelCancel(item.id)"></u-button>
           </view>
         </view>
       </view>
@@ -60,8 +58,8 @@
     methods: {
       //获取列表数据
       async getList() {
-        this.$api.post('/likeOrCollect/list', {
-          userId: '',
+        this.$api.get('/likeOrCollect/list', {
+          userId: this.$store.state.user.userId,
           type: 1,
           pageNum: this.pageNum,
           pageSize: 10,
@@ -90,9 +88,34 @@
       // 触发下拉刷新
       refresherrefresh(e) {
       	this.refresherTriggered = true;
-      	this.dataList = [];
-      	this.pageNum = 1;
-      	this.getList();
+      	this.refreshList();
+      },
+
+      refreshList() {
+        this.dataList = [];
+        this.pageNum = 1;
+        this.getList();
+      },
+
+      toDetail(id) {
+        this.$navToPage({
+          url: `/pages/goods/detail?id=${id}`
+        })
+      },
+
+      handelCancel(id) {
+        this.$modal({
+          content: '确定要取消点赞吗?'
+        }).then(() => {
+          this.$api.post('/likeOrCollect/likeOrCollect', {
+            userId: this.$store.state.user.userId,
+            goodsId: id,
+            type: 1,
+            operate: 'NO'
+          }).then(res => {
+            this.refreshList();
+          })
+        }).catch(() => {})
       },
 
     }