瀏覽代碼

:bug:feat: 交易列表等页面

Ritchie 1 年之前
父節點
當前提交
acbe25de50

+ 2 - 2
src/components/NavBar.vue

@@ -5,7 +5,7 @@
     <van-tabbar-item replace to="/home" icon="wap-home">首页</van-tabbar-item>
     <van-tabbar-item replace to="/trading" :dot="hasAlarm" icon="gold-coin">交易</van-tabbar-item>
     <van-tabbar-item replace to="/position" icon="goods-collect">持仓</van-tabbar-item>
-    <van-tabbar-item replace to="/user" icon="contact" badge="5">我的</van-tabbar-item>
+    <van-tabbar-item replace to="/user" icon="contact">我的</van-tabbar-item>
   </van-tabbar>
 </template>
 
@@ -24,7 +24,7 @@ export default {
     // const router = useRouter()
     const store = useStore();
     onMounted(() => {
-      
+
     });
     const count = computed(() => {
       return store.state.cartCount;

+ 18 - 18
src/router/index.js

@@ -140,20 +140,6 @@ const router = createRouter({
       component: () => import("@/views/taskMessage/index"),
       meta: { index: 1 },
     },
-    // 挂单匹配通知,废弃x
-    {
-      path: "/orderMatchNotice",
-      name: "orderMatchNotice",
-      component: () => import("@/views/msgNotice/OrderMatchNotice.vue"),
-      meta: { index: 1 },
-    },
-    // 成交通知,废弃x
-    {
-      path: "/closingNotice",
-      name: "closingNotice",
-      component: () => import("@/views/msgNotice/ClosingNotice.vue"),
-      meta: { index: 1 },
-    },
     // 账号审核列表
     {
       path: "/taskAccountList",
@@ -173,27 +159,41 @@ const router = createRouter({
       path: "/userManageList",
       name: "userManageList",
       component: () => import("@/views/taskMessage/UserManageList.vue"),
-      meta: { index: 1 }
+      meta: { index: 1 },
     },
     {
       path: "/userManage",
       name: "userManage",
       component: () => import("@/views/taskMessage/UserManage.vue"),
-      meta: { index: 1 }
+      meta: { index: 1 },
     },
     // 挂单匹配列表页
     {
       path: "/pendingOrderList",
       name: "pendingOrderList",
       component: () => import("@/views/taskMessage/PendingOrderList.vue"),
-      meta: { index: 1 }
+      meta: { index: 1 },
     },
     // 挂单匹配页
     {
       path: "/pendingOrder",
       name: "pendingOrder",
       component: () => import("@/views/taskMessage/PendingOrder.vue"),
-      meta: { index: 1 }
+      meta: { index: 1 },
+    },
+    // 成交列表页
+    {
+      path: "/transactionList",
+      name: "transactionList",
+      component: () => import("@/views/taskMessage/TransactionList.vue"),
+      meta: { index: 1 },
+    },
+    // 成交页
+    {
+      path: "/transaction",
+      name: "transaction",
+      component: () => import("@/views/taskMessage/Transaction.vue"),
+      meta: { index: 1 },
     },
     // 账户操作
     {

+ 10 - 6
src/service/buyOrSell/index.js

@@ -1,12 +1,16 @@
-import axios from '@/utils/axios';
+import axios from "@/utils/axios";
 
-// 获取买入确列表
+// 获取买入确列表
 export function getBuyConfList() {
-    return axios.get(`/myCenter/unconfirmedTradeOrder/buy`);
+  return axios.get(`/myCenter/unconfirmedTradeOrder/buy`);
 }
 
-
 // 买家上传支付凭证
 export function uploadImg() {
-    return axios.post(`/myCenter/uploadCertificateImg`);
-}
+  return axios.post(`/myCenter/uploadCertificateImg`);
+}
+
+// 获取卖出确认列表
+export function getSellConfList() {
+  return axios.get(`/myCenter/unconfirmedTradeOrder/sell`);
+}

+ 8 - 4
src/service/login/register.js

@@ -1,11 +1,11 @@
 import axios from '../../utils/axios';
-import { stringToUrl } from '@/common/js/utils';
+// import { stringToUrl } from '@/common/js/utils';
 
 
 // 发送验证码
-export function sentRegisterCode(params) {
-  return axios.post(`/SZWL-SERVER/tMessageCode/sentRegisterCode?${stringToUrl(params)}`, params);
-}
+// export function sentRegisterCode(params) {
+//   return axios.post(`/SZWL-SERVER/tMessageCode/sentRegisterCode?${stringToUrl(params)}`, params);
+// }
 
 // 注册
 // export function tAdminSave(params) {
@@ -22,3 +22,7 @@ export function addUserApply(params) {
   return axios.post(`/userLogin/addUserApply`, params);
 }
 
+// 发送验证码
+export function sentRegisterCode(params) {
+  return axios.get(`/userLogin/sendVerificationCodeMessage?phone=${params.phone}`, params);
+}

+ 2 - 2
src/service/pendingOrder/index.js

@@ -1,7 +1,7 @@
 import axios from '@/utils/axios';
 
 // 获取所有挂单列表
-export function getPagePendList() {
-    return axios.get(`/sysInfo/pagePendOrder`);
+export function postPagePendList(params) {
+    return axios.post(`/sysInfo/pagePendOrder`,params);
 }
 

+ 9 - 0
src/service/transaction/index.js

@@ -0,0 +1,9 @@
+import axios from "../../utils/axios";
+
+// 分页查询 所有成交列表
+export function getTransactionList(params) {
+  return axios.post(
+    `/sysInfo/pageTradeOrder`,
+    params
+  );
+}

+ 176 - 0
src/styles/buyConfList/index.less

@@ -0,0 +1,176 @@
+.buyConfList {
+    width: 100%;
+  
+    .buyConfBox {
+      width: 100%;
+      height: calc(100% - 60px);
+      overflow: auto;
+  
+      // background: #fff url('../../assets/taskMessage/pageBg.png') top center no-repeat;
+      // background-size: 100%;
+      .taskListRow {
+        width: 100%;
+        height: 53px;
+        flex-wrap: wrap;
+  
+        .taskIcon {
+          width: 13%;
+          height: 100%;
+          position: relative;
+  
+          &.deviceIcon::after {
+            content: '';
+            position: absolute;
+            background: #fff url('../../assets/taskMessage/deviceIcon.png') top center no-repeat;
+            background-size: 100%;
+            width: 0.6rem;
+            height: 0.6rem;
+            right: 0.15rem;
+            top: 0.4rem;
+          }
+  
+          &.retailIcon::after {
+            content: '';
+            position: absolute;
+            background: #fff url('../../assets/taskMessage/retailIcon.png') top center no-repeat;
+            background-size: 100%;
+            width: 0.6rem;
+            height: 0.6rem;
+            right: 0.15rem;
+            top: 0.4rem;
+          }
+  
+          &.withIcon::after {
+            content: '';
+            position: absolute;
+            background: #fff url('../../assets/taskMessage/withIcon.png') top center no-repeat;
+            background-size: 100%;
+            width: 0.6rem;
+            height: 0.6rem;
+            right: 0.15rem;
+            top: 0.4rem;
+          }
+        }
+  
+        .taskRight {
+          width: 87%;
+          height: 100%;
+          position: relative;
+          border-bottom: 1px solid #e7eaf7;
+  
+          &::after {
+            content: '';
+            position: absolute;
+            width: 6px;
+            height: 12px;
+            background: url('../../assets/right.png') top center no-repeat;
+            background-size: 100%;
+            right: 0.55rem;
+            top: 0.5rem;
+          }
+  
+          .taskTitle {
+            line-height: 53px;
+          }
+        }
+      }
+  
+      .searchRow {
+        width: 95%;
+        height: 48px;
+        margin: 0 auto;
+        background: rgba(255, 255, 255, 1) url("../../assets/home/line.png") bottom center no-repeat;
+        background-size: 100%;
+        align-items: center;
+  
+        .bd3 {
+          width: 87px;
+          height: 16px;
+  
+          .outer4 {
+            width: 20px;
+            height: 26px;
+            background: url("../../assets/alarmHistory/icon.png") top center no-repeat;
+            background-size: 100%;
+  
+            &.equipmentIcon {
+              background: url("../../assets/taskMessage/deviceIcon.png") top center no-repeat;
+              background-size: 100%;
+            }
+  
+            &.joinPayMchCheckIcon {
+              background: url("../../assets/taskMessage/withIcon.png") top center no-repeat;
+              background-size: 100%;
+            }
+  
+            &.proportionIcon {
+              background: url("../../assets/taskMessage/retailIcon.png") top center no-repeat;
+              background-size: 100%;
+              background-position: center top -2px;  /* 向上移动 2 像素 */
+            }
+          }
+  
+          .txt2 {
+            width: 65px;
+            height: 14px;
+            overflow-wrap: break-word;
+            color: rgba(64, 77, 116, 1);
+            font-size: 15px;
+            font-family: PingFangSC-Semibold;
+            text-align: left;
+            white-space: nowrap;
+            line-height: 15px;
+            display: block;
+            font-weight: bold;
+  
+            .discountNumber {
+              font-size: 18px;
+              color: red;
+            }
+          }
+        }
+  
+        .label3 {
+          color: #4d6add;
+          margin-right: 10px;
+        }
+      }
+  
+      .van-tabs__line {
+        background-color: #4d6add !important;
+      }
+  
+      .van-tab--active .van-tab__text--ellipsis {
+        color: #4d6add;
+      }
+  
+      .listBox {
+        .listItem {
+          width: 100%;
+          background: url("../../assets/home/line.png") bottom center no-repeat;
+          background-size: 100%;
+          position: relative;
+          display: inline-block;
+  
+          .itemBox {
+            width: 92%;
+            margin: 20px auto;
+            font-size: 12px;
+            line-height: 1.64;
+  
+            .itemRow {
+              width: 100%;
+            }
+  
+            .itemTitle {
+              color: #8787a6;
+            }
+  
+            .discount {
+              padding-left: 2em;
+            }
+          }
+        }
+      }
+    }
+  }

+ 176 - 0
src/styles/sellConfList/index.less

@@ -0,0 +1,176 @@
+.sellConfList {
+    width: 100%;
+  
+    .sellConfBox {
+      width: 100%;
+      height: calc(100% - 60px);
+      overflow: auto;
+  
+      // background: #fff url('../../assets/taskMessage/pageBg.png') top center no-repeat;
+      // background-size: 100%;
+      .taskListRow {
+        width: 100%;
+        height: 53px;
+        flex-wrap: wrap;
+  
+        .taskIcon {
+          width: 13%;
+          height: 100%;
+          position: relative;
+  
+          &.deviceIcon::after {
+            content: '';
+            position: absolute;
+            background: #fff url('../../assets/taskMessage/deviceIcon.png') top center no-repeat;
+            background-size: 100%;
+            width: 0.6rem;
+            height: 0.6rem;
+            right: 0.15rem;
+            top: 0.4rem;
+          }
+  
+          &.retailIcon::after {
+            content: '';
+            position: absolute;
+            background: #fff url('../../assets/taskMessage/retailIcon.png') top center no-repeat;
+            background-size: 100%;
+            width: 0.6rem;
+            height: 0.6rem;
+            right: 0.15rem;
+            top: 0.4rem;
+          }
+  
+          &.withIcon::after {
+            content: '';
+            position: absolute;
+            background: #fff url('../../assets/taskMessage/withIcon.png') top center no-repeat;
+            background-size: 100%;
+            width: 0.6rem;
+            height: 0.6rem;
+            right: 0.15rem;
+            top: 0.4rem;
+          }
+        }
+  
+        .taskRight {
+          width: 87%;
+          height: 100%;
+          position: relative;
+          border-bottom: 1px solid #e7eaf7;
+  
+          &::after {
+            content: '';
+            position: absolute;
+            width: 6px;
+            height: 12px;
+            background: url('../../assets/right.png') top center no-repeat;
+            background-size: 100%;
+            right: 0.55rem;
+            top: 0.5rem;
+          }
+  
+          .taskTitle {
+            line-height: 53px;
+          }
+        }
+      }
+  
+      .searchRow {
+        width: 95%;
+        height: 48px;
+        margin: 0 auto;
+        background: rgba(255, 255, 255, 1) url("../../assets/home/line.png") bottom center no-repeat;
+        background-size: 100%;
+        align-items: center;
+  
+        .bd3 {
+          width: 87px;
+          height: 16px;
+  
+          .outer4 {
+            width: 20px;
+            height: 26px;
+            background: url("../../assets/alarmHistory/icon.png") top center no-repeat;
+            background-size: 100%;
+  
+            &.equipmentIcon {
+              background: url("../../assets/taskMessage/deviceIcon.png") top center no-repeat;
+              background-size: 100%;
+            }
+  
+            &.joinPayMchCheckIcon {
+              background: url("../../assets/taskMessage/withIcon.png") top center no-repeat;
+              background-size: 100%;
+            }
+  
+            &.proportionIcon {
+              background: url("../../assets/taskMessage/retailIcon.png") top center no-repeat;
+              background-size: 100%;
+              background-position: center top -2px;  /* 向上移动 2 像素 */
+            }
+          }
+  
+          .txt2 {
+            width: 65px;
+            height: 14px;
+            overflow-wrap: break-word;
+            color: rgba(64, 77, 116, 1);
+            font-size: 15px;
+            font-family: PingFangSC-Semibold;
+            text-align: left;
+            white-space: nowrap;
+            line-height: 15px;
+            display: block;
+            font-weight: bold;
+  
+            .discountNumber {
+              font-size: 18px;
+              color: red;
+            }
+          }
+        }
+  
+        .label3 {
+          color: #4d6add;
+          margin-right: 10px;
+        }
+      }
+  
+      .van-tabs__line {
+        background-color: #4d6add !important;
+      }
+  
+      .van-tab--active .van-tab__text--ellipsis {
+        color: #4d6add;
+      }
+  
+      .listBox {
+        .listItem {
+          width: 100%;
+          background: url("../../assets/home/line.png") bottom center no-repeat;
+          background-size: 100%;
+          position: relative;
+          display: inline-block;
+  
+          .itemBox {
+            width: 92%;
+            margin: 20px auto;
+            font-size: 12px;
+            line-height: 1.64;
+  
+            .itemRow {
+              width: 100%;
+            }
+  
+            .itemTitle {
+              color: #8787a6;
+            }
+  
+            .discount {
+              padding-left: 2em;
+            }
+          }
+        }
+      }
+    }
+  }

+ 184 - 0
src/styles/transactionList/index.less

@@ -0,0 +1,184 @@
+.transactionList {
+  width: 100%;
+
+  .transactionBox {
+    width: 100%;
+    height: calc(100% - 60px);
+    overflow: auto;
+
+    // background: #fff url('../../assets/taskMessage/pageBg.png') top center no-repeat;
+    // background-size: 100%;
+    .taskListRow {
+      width: 100%;
+      height: 53px;
+      flex-wrap: wrap;
+
+      .taskIcon {
+        width: 13%;
+        height: 100%;
+        position: relative;
+
+        &.deviceIcon::after {
+          content: "";
+          position: absolute;
+          background: #fff url("../../assets/taskMessage/deviceIcon.png") top
+            center no-repeat;
+          background-size: 100%;
+          width: 0.6rem;
+          height: 0.6rem;
+          right: 0.15rem;
+          top: 0.4rem;
+        }
+
+        &.retailIcon::after {
+          content: "";
+          position: absolute;
+          background: #fff url("../../assets/taskMessage/retailIcon.png") top
+            center no-repeat;
+          background-size: 100%;
+          width: 0.6rem;
+          height: 0.6rem;
+          right: 0.15rem;
+          top: 0.4rem;
+        }
+
+        &.withIcon::after {
+          content: "";
+          position: absolute;
+          background: #fff url("../../assets/taskMessage/withIcon.png") top
+            center no-repeat;
+          background-size: 100%;
+          width: 0.6rem;
+          height: 0.6rem;
+          right: 0.15rem;
+          top: 0.4rem;
+        }
+      }
+
+      .taskRight {
+        width: 87%;
+        height: 100%;
+        position: relative;
+        border-bottom: 1px solid #e7eaf7;
+
+        &::after {
+          content: "";
+          position: absolute;
+          width: 6px;
+          height: 12px;
+          background: url("../../assets/right.png") top center no-repeat;
+          background-size: 100%;
+          right: 0.55rem;
+          top: 0.5rem;
+        }
+
+        .taskTitle {
+          line-height: 53px;
+        }
+      }
+    }
+
+    .searchRow {
+      width: 95%;
+      height: 48px;
+      margin: 0 auto;
+      background: rgba(255, 255, 255, 1) url("../../assets/home/line.png")
+        bottom center no-repeat;
+      background-size: 100%;
+      align-items: center;
+
+      .bd3 {
+        width: 87px;
+        height: 16px;
+
+        .outer4 {
+          width: 20px;
+          height: 26px;
+          background: url("../../assets/alarmHistory/icon.png") top center
+            no-repeat;
+          background-size: 100%;
+
+          &.equipmentIcon {
+            background: url("../../assets/taskMessage/deviceIcon.png") top
+              center no-repeat;
+            background-size: 100%;
+          }
+
+          &.joinPayMchCheckIcon {
+            background: url("../../assets/taskMessage/withIcon.png") top center
+              no-repeat;
+            background-size: 100%;
+          }
+
+          &.proportionIcon {
+            background: url("../../assets/taskMessage/retailIcon.png") top
+              center no-repeat;
+            background-size: 100%;
+            background-position: center top -2px; /* 向上移动 2 像素 */
+          }
+        }
+
+        .txt2 {
+          width: 65px;
+          height: 14px;
+          overflow-wrap: break-word;
+          color: rgba(64, 77, 116, 1);
+          font-size: 15px;
+          font-family: PingFangSC-Semibold;
+          text-align: left;
+          white-space: nowrap;
+          line-height: 15px;
+          display: block;
+          font-weight: bold;
+
+          .discountNumber {
+            font-size: 18px;
+            color: red;
+          }
+        }
+      }
+
+      .label3 {
+        color: #4d6add;
+        margin-right: 10px;
+      }
+    }
+
+    .van-tabs__line {
+      background-color: #4d6add !important;
+    }
+
+    .van-tab--active .van-tab__text--ellipsis {
+      color: #4d6add;
+    }
+
+    .listBox {
+      .listItem {
+        width: 100%;
+        background: url("../../assets/home/line.png") bottom center no-repeat;
+        background-size: 100%;
+        position: relative;
+        display: inline-block;
+
+        .itemBox {
+          width: 92%;
+          margin: 20px auto;
+          font-size: 12px;
+          line-height: 1.64;
+
+          .itemRow {
+            width: 100%;
+          }
+
+          .itemTitle {
+            color: #8787a6;
+          }
+
+          .discount {
+            padding-left: 2em;
+          }
+        }
+      }
+    }
+  }
+}

+ 67 - 58
src/views/buyOrSell/BuyConfList.vue

@@ -1,5 +1,5 @@
 <script setup>
-import { onMounted, ref, reactive } from "vue";
+import { onMounted, reactive, ref } from "vue";
 import sHeader from "@/components/SimpleHeader";
 import { getBuyConfList } from "@/service/buyOrSell";
 import { showFailToast } from "vant";
@@ -8,6 +8,16 @@ import dateUtil from "@/utils/dateUtil";
 import { useRouter } from 'vue-router'
 import { useTradeStore } from '@/stores/trade';
 
+// 状态,0未确认,1已确认,2特殊取消
+const showStatusText = (statusVal) => {
+    const statusMap = {
+        0: '未确认',
+        1: '已确认',
+        2: '特殊取消',
+    }
+    return statusMap[statusVal] || '未知状态';
+}
+
 const router = useRouter()
 
 const user = getLoginUser();
@@ -15,18 +25,12 @@ const loading = ref(false); // 加载状态
 const error = ref(false); // 错误状态
 const finished = ref(false); // 结束翻页状态
 const buyConfList = ref([]); // 列表集合
-const buyConfTotal = ref(0); // 列表总数
+const buyConfListTotal = ref(0); // 列表总数
 let searchParams = reactive({
     current: 1, // 当前页,默认第一页
     size: 10, // 页大小,默认10条
 });
 
-// 滚动加载
-const onLoad = () => {
-    if (!finished.value) {
-        getList();
-    }
-};
 
 // 查询列表
 const searchGetList = () => {
@@ -34,28 +38,25 @@ const searchGetList = () => {
     searchParams.current = 1;
     getList();
 };
-
 // 获取新人账号注册审批列表数据
 const getList = async () => {
-
-    console.log("你好");
+    finished.value = false;
     const { data } = await getBuyConfList(
-        // Object.assign({}, searchParams)
+        Object.assign({}, searchParams)
     );
-
-    // const { data } = await getBuyConfList();
     if (data.code === "00000") {
-        console.log("data.data >>>", data.data);
+        if (searchParams.current === 0) {
+            buyConfList.value = [];
+        }
         // 列表值叠加
         buyConfList.value = buyConfList.value.concat(
             data.data.records
         );
-        buyConfTotal.value = data.data.total;
+        buyConfListTotal.value = data.data.total;
         if (buyConfList.value.length === data.data.total) {
             finished.value = true;
         }
         loading.value = false;
-        console.log("buyConfList >>>", buyConfList.value);
     } else {
         showFailToast(data.message);
     }
@@ -67,26 +68,23 @@ const showDateTime = (date) => {
         : "";
 };
 
-const showStatusText = (status) => {
-    if (status === '0') {
-        return "未确认";
-    }
-    if (status === '1') {
-        return "已确认";
-    }
-    if (status === '2') {
-        return "特殊取消";
-    }
-    return "未知";
-};
 
 // const userStore = useUserStore();
 const tradeStore = useTradeStore();
-// 去审核账号
+// 去付款
 const toBuy = (item) => {
     // userStore.setUserInfo(item);
     tradeStore.setTradeItem(item);
-    router.push({ name: 'taskAccount' });
+    router.push({ name: 'buyConf' });
+};
+
+
+// 滚动加载
+const onLoad = () => {
+    if (!finished.value) {
+        searchParams.current = searchParams.current + 1;
+        getList();
+    }
 };
 
 // 是否有操作的权限
@@ -94,7 +92,7 @@ const isOper = ref(true);
 // 初始化页面获取列表
 onMounted(async () => {
     // 加载样式
-    styleUrl('taskAccountList');
+    styleUrl('buyConfList');
     if (user) {
         searchGetList();
 
@@ -104,14 +102,15 @@ onMounted(async () => {
         }
     }
 });
+
 </script>
 
 <template>
-    <!-- 买家付款确认列表 -->
-    <div class="taskAccountList flex-col">
-        <s-header name="买家付款确认" :noback="false"></s-header>
+    <!-- 买确认列表 -->
+    <div class="buyConfList flex-col">
+        <s-header name="买确认" :noback="false"></s-header>
 
-        <div class="taskAccountBox flex-col">
+        <div class="buyConfBox flex-col">
             <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
                 :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false"
                 @load="onLoad">
@@ -121,52 +120,60 @@ onMounted(async () => {
                             <!-- 图标 -->
                             <!-- <div class="flex-col outer4 proportionIcon"></div> -->
                             <span class="flex-col txt2">{{ $t("taskMessage.total")
-                                }}<span class="discountNumber">{{ buyConfTotal }}</span>{{
+                                }}<span class="discountNumber">{{ buyConfListTotal }}</span>{{
                                     $t("taskMessage.recordsInTotal") }}</span>
                         </div>
                     </div>
-                    <!-- <div class="l-flex-RC"> -->
-                    <!-- <div @click="reviewedClk" class="label3 o-mr-30">
-                        {{ $t("taskMessage.toViewAppro") }}
-                    </div> -->
-                    <!-- </div> -->
                 </div>
-                <!-- 买入列表 -->
-                <!-- 卖家用户名sellerUserName,单据凭证certificate,创建时间createTime,买入价格price,状态status -->
+
                 <div class="listBox">
                     <div v-for="(item) in buyConfList" :key="item.id" class="listItem">
                         <div class="itemBox">
+
                             <div class="itemRow">
-                                <span class="itemTitle">卖家用户名:&nbsp;</span>{{
-                                    item.sellerUserName }}
+                                <span class="itemTitle">挂单价格:&nbsp;</span>{{
+                                    item.price }}
                             </div>
                             <div class="itemRow">
-                                <span class="itemTitle">单据凭证:&nbsp;</span>{{
-                                    item.certificate }}
+                                <span class="itemTitle">委托数量:&nbsp;</span>{{
+                                    item.entrustNumber }}
                             </div>
                             <div class="itemRow">
-                                <span class="itemTitle">创建时间:&nbsp;</span>{{
-                                    item.createTime }}
+                                <span class="itemTitle">挂单类型:&nbsp;</span>{{
+                                    showTypeText(item.type) }}
                             </div>
+                            <!-- 状态:0过期,1生效,2撤单,3全部成交,4部分成交 -->
                             <div class="itemRow">
-                                <span class="itemTitle">买入价格:&nbsp;</span>{{
-                                    item.price }}
+                                <span class="itemTitle">状态:&nbsp;</span>{{
+                                    showStatusText(item.status) }}
+                            </div>
+                            <!-- if 0,1 不显示其他 -->
+                            <!-- if 2 显示撤单时间 -->
+                            <div v-if="item.status === '2'" class="itemRow">
+                                <span class="itemTitle">撤单时间:&nbsp;</span>{{
+                                    item.cancelTime }}
+                            </div>
+                            <!-- if 3,4 显示成交数量 -->
+                            <div v-if="item.status === '3' || item.status === '4'" class="itemRow">
+                                <span class="itemTitle">成交数量:&nbsp;</span>{{
+                                    item.tradeNumber }}
                             </div>
 
-                            <!-- 状态,0未确认,1已确认,2特殊取消 -->
-                            <div class="itemRow" v-if="item.status === '0'">
-                                <span class="itemTitle">状态:&nbsp;</span><span style="color: red">{{
-                                    showItemType(item.status)
-                                }}</span>
+                            <!-- 创建时间 -->
+                            <div class="itemRow">
+                                <span class="itemTitle">创建时间:&nbsp;</span>{{
+                                    showDateTime(item.createTime) }}
                             </div>
+
                             <!-- 卖家确认时间 -->
                             <div class="itemRow" v-if="item.status === '1'">
                                 <span class="itemTitle">卖家确认时间:&nbsp;</span>{{
                                     showDateTime(item.sellerConfirmTime)
                                 }}
                             </div>
+
                             <!-- 去付款 -->
-                            <div v-if="item.status === '0' && isOper" class="itemRow"
+                            <div v-if="item.status === '3' || item.status === '4'" class="itemRow"
                                 style="display: flex; justify-content: flex-end">
                                 <van-button span="5" round type="primary" :style="{
                                     height: '2em',
@@ -180,6 +187,7 @@ onMounted(async () => {
                                     付款
                                 </van-button>
                             </div>
+
                             <div class="itemRow" style="display: flex; justify-content: flex-end">
                                 <!-- 已确认 -->
                                 <span v-if="item.status === '1'" style="color: #4fc08d">{{
@@ -190,6 +198,7 @@ onMounted(async () => {
                                     showStatusText(item.status)
                                     }}</span>
                             </div>
+
                         </div>
                     </div>
                 </div>

+ 206 - 163
src/views/buyOrSell/SellConfList.vue

@@ -1,174 +1,217 @@
+<script setup>
+import { onMounted, reactive, ref } from "vue";
+import sHeader from "@/components/SimpleHeader";
+import { getSellConfList } from "@/service/buyOrSell";
+import { showFailToast } from "vant";
+import { getLoginUser, styleUrl } from "@/common/js/utils";
+import dateUtil from "@/utils/dateUtil";
+import { useRouter } from 'vue-router'
+import { useTradeStore } from '@/stores/trade';
+
+// 状态,0未确认,1已确认,2特殊取消
+const showStatusText = (statusVal) => {
+    const statusMap = {
+        0: '未确认',
+        1: '已确认',
+        2: '特殊取消',
+    }
+    return statusMap[statusVal] || '未知状态';
+}
+
+const router = useRouter()
+
+const user = getLoginUser();
+const loading = ref(false); // 加载状态
+const error = ref(false); // 错误状态
+const finished = ref(false); // 结束翻页状态
+const sellConfList = ref([]); // 列表集合
+const sellConfListTotal = ref(0); // 列表总数
+let searchParams = reactive({
+    current: 1, // 当前页,默认第一页
+    size: 10, // 页大小,默认10条
+});
+
+
+// 查询列表
+const searchGetList = () => {
+    sellConfList.value = [];
+    searchParams.current = 1;
+    getList();
+};
+// 获取新人账号注册审批列表数据
+const getList = async () => {
+    finished.value = false;
+    const { data } = await getSellConfList(
+        Object.assign({}, searchParams)
+    );
+    if (data.code === "00000") {
+        console.log("data.data >>>", data.data);
+        console.log("object");
+        if (searchParams.current === 0) {
+            sellConfList.value = [];
+        }
+        // 列表值叠加
+        sellConfList.value = sellConfList.value.concat(
+            data.data.records
+        );
+        sellConfListTotal.value = data.data.total;
+        if (sellConfList.value.length === data.data.total) {
+            finished.value = true;
+        }
+        loading.value = false;
+    } else {
+        showFailToast(data.message);
+    }
+};
+
+const showDateTime = (date) => {
+    return date
+        ? dateUtil.formateDate(new Date(date), "yyyy-MM-dd hh:mm:ss")
+        : "";
+};
+
+
+// const userStore = useUserStore();
+const tradeStore = useTradeStore();
+// 去付款
+const toBuy = (item) => {
+    // userStore.setUserInfo(item);
+    tradeStore.setTradeItem(item);
+    router.push({ name: 'buyConf' });
+};
+
+
+// 滚动加载
+const onLoad = () => {
+    if (!finished.value) {
+        searchParams.current = searchParams.current + 1;
+        getList();
+    }
+};
+
+// 是否有操作的权限
+const isOper = ref(true);
+// 初始化页面获取列表
+onMounted(async () => {
+    // 加载样式
+    styleUrl('sellConfList');
+    if (user) {
+        searchGetList();
+
+        // 如果不是admin账号,不能有操作权限
+        if (user.userName != 'admin') {
+            isOper.value = false;
+        }
+    }
+});
+
+</script>
+
 <template>
-    <div class="sellConfList">
-        <s-header name="卖家确认列表" :noback="false"></s-header>
-
-        <div class="headCon l-flex-between o-plr-20 o-pt-26 o-pb-12 kBordBott">
-            <div class="l-flex-RC">
-                <div class="ruleIcon"></div>
-                <div class="c-text-color c-text-b c-text-15">
-                    共
-                    <span class="c-text-20" style="color: #df5e4c">{{ patchTotal }}</span>
-                    条记录
+    <!-- 卖家确认列表 -->
+    <div class="sellConfList flex-col">
+        <s-header name="卖出确认" :noback="false"></s-header>
+
+        <div class="sellConfBox flex-col">
+            <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
+                :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false"
+                @load="onLoad">
+                <div class="searchRow flex-row justify-between">
+                    <div class="flex-col">
+                        <div class="flex-row justify-between bd3">
+                            <!-- 图标 -->
+                            <!-- <div class="flex-col outer4 proportionIcon"></div> -->
+                            <span class="flex-col txt2">{{ $t("taskMessage.total")
+                                }}<span class="discountNumber">{{ sellConfListTotal }}</span>{{
+                                    $t("taskMessage.recordsInTotal") }}</span>
+                        </div>
+                    </div>
                 </div>
-            </div>
-        </div>
 
-        <div class="contentCon">
-            <van-pull-refresh disabled v-model="refreshing" @refresh="onRefresh">
-                <div v-for="(item, index) in tableData" :key="index">
-                    <br />
-                    <van-cell-group inset @click="toSetupAccount(item)">
-                        <van-cell>
-                            <template #title>
-                                <div class="l-flex-RC">
-                                    <span class="c-color c-text-12">姓名:</span>
-                                    <span class="c-text-color c-text-12">{{ item.actualName }}</span>
-                                </div>
-                            </template>
-                            <template #label>
-                                <div class="l-flex-RC">
-                                    <span class="c-color c-text-12">手机号:</span>
-                                    <span class="c-text-color c-text-12">{{ item.phone }}</span>
-                                </div>
-                                <div class="l-flex-RC">
-                                    <span class="c-color c-text-12">支付宝账号:</span>
-                                    <span class="c-text-color c-text-12">{{ item.payeeCode }}</span>
-                                </div>
-                                <div class="l-flex-RC">
-                                    <span class="c-color c-text-12">部门号:</span>
-                                    <span class="c-text-color c-text-12">{{ getDeptName(item.deptId) }}</span>
-                                </div>
-                                <div class="l-flex-RC">
-                                    <span class="c-color c-text-12">申请时间:</span>
-                                    <span class="c-text-color c-text-12">{{ Format_time(item.createTime) }}</span>
-                                </div>
-                                <!-- 确认状态 status:0 未确认...,1 已确认✓ -->
-                                <div class="itemRow" style="display: flex; justify-content: flex-end">
-                                    <span v-if="item.status === '0' && user.type > 1" style="color: #FFA500"> {{
-            $t('taskMessage.toBeApproved') }}</span>
-                                    <span v-if="item.status === '1'" style="color: #1989fa"> {{
-            $t('taskMessage.adopt') }}</span>
-                                    <span v-if="item.status === '2'" style="color: #ff0000"> {{
-                                        $t('taskMessage.fail') }}</span>
-                                </div>
-
-                            </template>
-                            <br />
-
-                        </van-cell>
-                    </van-cell-group>
+                <div class="listBox">
+                    <div v-for="(item) in sellConfList" :key="item.id" class="listItem">
+                        <div class="itemBox">
+
+                            <div class="itemRow">
+                                <span class="itemTitle">挂单价格:&nbsp;</span>{{
+                                    item.price }}
+                            </div>
+                            <div class="itemRow">
+                                <span class="itemTitle">委托数量:&nbsp;</span>{{
+                                    item.entrustNumber }}
+                            </div>
+                            <div class="itemRow">
+                                <span class="itemTitle">挂单类型:&nbsp;</span>{{
+                                    showTypeText(item.type) }}
+                            </div>
+                            <!-- 状态:0过期,1生效,2撤单,3全部成交,4部分成交 -->
+                            <div class="itemRow">
+                                <span class="itemTitle">状态:&nbsp;</span>{{
+                                    showStatusText(item.status) }}
+                            </div>
+                            <!-- if 0,1 不显示其他 -->
+                            <!-- if 2 显示撤单时间 -->
+                            <div v-if="item.status === '2'" class="itemRow">
+                                <span class="itemTitle">撤单时间:&nbsp;</span>{{
+                                    item.cancelTime }}
+                            </div>
+                            <!-- if 3,4 显示成交数量 -->
+                            <div v-if="item.status === '3' || item.status === '4'" class="itemRow">
+                                <span class="itemTitle">成交数量:&nbsp;</span>{{
+                                    item.tradeNumber }}
+                            </div>
+
+                            <!-- 创建时间 -->
+                            <div class="itemRow">
+                                <span class="itemTitle">创建时间:&nbsp;</span>{{
+                                    showDateTime(item.createTime) }}
+                            </div>
+
+                            <!-- 卖家确认时间 -->
+                            <div class="itemRow" v-if="item.status === '1'">
+                                <span class="itemTitle">卖家确认时间:&nbsp;</span>{{
+                                    showDateTime(item.sellerConfirmTime)
+                                }}
+                            </div>
+
+                            <!-- 去付款 -->
+                            <div v-if="item.status === '3' || item.status === '4'" class="itemRow"
+                                style="display: flex; justify-content: flex-end">
+                                <van-button span="5" round type="primary" :style="{
+                                    height: '2em',
+                                    padding: '0 1.2em',
+                                    margin: '0 1em',
+                                    backgroundColor: 'rgb(200, 55, 95 / 80%)', // 红色背景,不透明度为100%
+                                    color: '#fff', // 文字颜色为白色
+                                    boxShadow: '0 2px 8px rgba(255, 55, 95, 0.3)', // 添加阴影效果
+                                    transition: 'all 0.3s ease' // 添加过渡效果,使变化更平滑
+                                }" @click="toBuy(item)">
+                                    付款
+                                </van-button>
+                            </div>
+
+                            <div class="itemRow" style="display: flex; justify-content: flex-end">
+                                <!-- 已确认 -->
+                                <span v-if="item.status === '1'" style="color: #4fc08d">{{
+                                    showStatusText(item.status)
+                                    }}</span>
+                                <!-- 特殊取消 -->
+                                <span v-if="item.status === '2'" style="color: #ff0000">{{
+                                    showStatusText(item.status)
+                                    }}</span>
+                            </div>
+
+                        </div>
+                    </div>
                 </div>
-
-            </van-pull-refresh>
+            </van-list>
         </div>
 
-
     </div>
 </template>
 
-<script>
-import sHeader from "@/components/SimpleHeader";
-import { ref, onMounted, toRefs, reactive } from "vue";
-import { styleUrl } from "../../common/js/utils";
-import { useRouter } from "vue-router";
-import { getPageUserApply } from "@/service/taskAccount";
-import { Format_time } from "@/common/js/utils";
-
-export default {
-    components: { sHeader },
-    setup() {
-
-        onMounted(() => {
-            // 加载样式
-            styleUrl('taskAccount');
-            onRefresh();
-        });
-
-        // 多少条规则
-        const patchTotal = ref(0);
-        // 分页
-        const pageNo = ref(1);
-        const pageSize = ref(10);
-        let ruleData = reactive({
-            tableData: [],
-        });
-        // 上拉刷新
-        const loading = ref(true);
-        const finished = ref(false);
-        // 下拉刷新
-        const onRefresh = (idx) => {
-            ruleData.tableData = [];
-            // 解决请求两次问题
-            if (!idx) {
-                finished.value = false;
-            }
-            loading.value = true;
-            // 初始化分页
-            pageNo.value = 1;
-            pageSize.value = 10;
-            getList();
-        };
-
-        // 上拉加载
-        const onLoad = () => {
-            pageNo.value++;
-            getList();
-        };
-        // 下拉刷新
-        const refreshing = ref(false);
-        const getList = () => {
-            let param = {
-                current: pageNo.value,
-                size: pageSize.value,
-            };
-            getPageUserApply(param).then((res) => {
-                const { data } = res.data;
-                refreshing.value = false;
-                ruleData.tableData.push(...data.records);
-                // 加载状态结束
-                loading.value = false;
-                // 总共
-                patchTotal.value = data.total;
-                if (ruleData.tableData.length >= data.total) {
-                    finished.value = true;
-                }
-            });
-        };
-
-
-        // 获取部门名称
-        // const getDeptName = computed(() => {
-        //     const deptId = {
-        //         '0': '研发部',
-        //         '1': '行政部',
-        //     };
-        //     return (item) => deptId[item.deptId] || '';
-        // })
-
-        const router = useRouter();
-
-        const setupAccountObj = ref({});
-        // 点击卡片,跳转对应的审核
-        const toTaskAccount = (item) => {
-            setupAccountObj.value = item;
-            router.push("/taskAccount");
-        }
 
-        return {
-            patchTotal,
-            onRefresh,
-            onLoad,
-            getList,
-            loading,
-            finished,
-            ...toRefs(ruleData),
-            refreshing,
-            // getTargetAreasText,
-            Format_time,
-            toTaskAccount
-        };
-    }
-};
-</script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+@import "../../common/style/common.less";
+</style>

+ 5 - 9
src/views/login/Register.vue

@@ -12,16 +12,14 @@
           :rules="[{ required: true, message: '请输入真实姓名' }]" />
         <br> -->
         <div>
-          <!-- 国内手机 -->
+          <!-- 登录手机 -->
           <van-field v-model="phone" name="phone" type="tel" label="登录手机" :placeholder="$t('register.phonePlaceholder')"
             :rules="[{ required: true, pattern: /^1[3456789]\d{9}$/, message: $t('register.phoneRequired') }]" />
           <br />
           <!-- 短信验证码 -->
-          <!-- <van-field v-model="code" name="code" :label="$t('register.codeLabel')"
-            :placeholder="$t('register.codePlaceholder')"
-            :rules="[{ required: true, message: $t('register.codeRequired') }]"> -->
           <van-field v-model="code" name="code" :label="$t('register.codeLabel')"
-            :placeholder="$t('register.codePlaceholder')">
+            :placeholder="$t('register.codePlaceholder')"
+            :rules="[{ required: true, message: $t('register.codeRequired') }]">
             <template #button>
               <van-button size="small" type="primary" @click="seedVerCode()"
                 :disabled="time !== 0 || phone.length === 0" :loading=reqApi :loading-text="$t('register.sending')">{{
@@ -265,7 +263,6 @@ export default {
       }
       const { data } = await addUserApply({
         userName: userName.value,
-        // actualName: actualName.value,
         password: md5(password.value),
         identityCard: identityCard.value,
         payeeCode: payeeCode.value,
@@ -293,12 +290,11 @@ export default {
 
       try {
         const { data } = await sentRegisterCode({
-          phone: phone,
-          hostName: 'Sunzee',
+          phone: phone.value,
         });
         if (data.code === '00000') {
           reqApi.value = false;
-          showToast(data.data);
+          showToast("发送成功");
           verCodeTime.time = 1 * 60; // 1分钟定时器,60s后可以更换验证方式
           verCodeTimeInterval();
         } else {

+ 0 - 15
src/views/msgNotice/ClosingNotice.vue

@@ -1,15 +0,0 @@
-<script setup>
-// import { ref } from 'vue';
-import sHeader from "@/components/SimpleHeader";
-</script>
-
-<template>
-    <div class="closingNotice flex-col">
-        <div class="closingNoticeBox">
-            <s-header :name="'成交通知'" :noback="false" :isFixed="false"></s-header>
-            订单成交通知
-        </div>
-    </div>
-</template>
-
-<style scoped></style>

+ 0 - 94
src/views/msgNotice/OrderMatchNotice.vue

@@ -1,94 +0,0 @@
-<script setup>
-import { ref } from 'vue';
-import sHeader from "@/components/SimpleHeader";
-
-const getStatusText = (statusValue) => {
-    const statusMap = {
-        0: '过期',
-        1: '生效',
-        2: '撤单',
-        3: '全部成交',
-        4: '部分成交',
-    }
-    return statusMap[statusValue] || '未知状态';
-}
-
-
-const typeTexts = ['未知类型', '买', '卖'];
-const getTypeText = (typeValue) => {
-    return typeTexts[typeValue] || typeTexts[0];
-};
-
-const orderMatchList = ref([
-    {
-        createTime: "2024-04-16",
-        entrustNumber: "2000",
-        price: "80.03",
-        tradeNumber: "1500",
-        type: "1"
-    },
-    {
-        createTime: "2024-04-15",
-        entrustNumber: "3000",
-        price: "81.00",
-        tradeNumber: "2000",
-        type: "2"
-    }
-])
-
-</script>
-
-<template>
-    <!-- 挂单匹配通知列表 -->
-    <div class="orderMatchNotice flex-col">
-        <div class="orderMatchNoticeBox">
-            <s-header :name="'挂单匹配列表'" :noback="false" :isFixed="false"></s-header>
-            <h3>挂单匹配列表</h3>
-
-            <!-- 列表 -->
-            <div class="listItem" v-for="(item, index) in orderMatchList" :key="index">
-                <br>
-                <van-col span="16" style="font-size: medium;">创建时间: {{ item.createTime }}</van-col>
-                <van-cell-group>
-                    <van-row justify="space-around" class="row-col">
-                        <van-col span="8">委托数量: {{ item.entrustNumber }}</van-col>
-                        <van-col span="8">成交数量: {{ item.tradeNumber }}</van-col>
-                        <van-col span="8">挂单价格: {{ item.price }}</van-col>
-                        <!-- 状态:0过期,1生效,2撤单,3全部成交,4部分成交 -->
-                        <van-col span="8">状态: {{ getStatusText(item.status) }}</van-col>
-                        <!-- 挂单类型:1买,2卖 -->
-                        <van-col span="8">挂单类型: {{ getTypeText(item.type) }}</van-col>
-                    </van-row>
-                </van-cell-group>
-                <br>
-            </div>
-
-
-
-        </div>
-    </div>
-</template>
-
-<style scoped>
-.van-cell-group {
-    background-color: antiquewhite;
-    /* 设置圆角 */
-    border-radius: 8px;
-    /* 添加阴影效果 */
-    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
-    /* 确保阴影效果不会被内部元素覆盖 */
-    overflow: hidden;
-}
-
-.row-col .van-col {
-    justify-content: center;
-    text-align: center;
-    font-size: 14px;
-    /* background-color: thistle; */
-}
-
-.listItem {
-    margin: auto;
-    width: 95%;
-}
-</style>

+ 113 - 129
src/views/taskMessage/PendingOrderList.vue

@@ -1,115 +1,10 @@
-<template>
-  <!-- 挂单匹配列表 -->
-  <div class="pendingOrderList flex-col">
-    <s-header name="挂单匹配" :noback="false"></s-header>
-
-    <div class="pendingOrderBox flex-col">
-      <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
-        :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false"
-        @load="onLoad">
-        <div class="searchRow flex-row justify-between">
-          <div class="flex-col">
-            <div class="flex-row justify-between bd3">
-              <!-- 图标 -->
-              <!-- <div class="flex-col outer4 proportionIcon"></div> -->
-              <span class="flex-col txt2">{{ $t("taskMessage.total")
-                }}<span class="discountNumber">{{ pendingOrderTotal }}</span>{{
-                  $t("taskMessage.recordsInTotal") }}</span>
-            </div>
-          </div>
-        </div>
-
-        <div class="listBox">
-          <div v-for="(item) in pendingOrderList" :key="item.id" class="listItem">
-            <div class="itemBox">
-
-              <div class="itemRow">
-                <span class="itemTitle">挂单价格:&nbsp;</span>{{
-                  item.price }}
-              </div>
-              <div class="itemRow">
-                <span class="itemTitle">委托数量:&nbsp;</span>{{
-                  item.entrustNumber }}
-              </div>
-              <div class="itemRow">
-                <span class="itemTitle">挂单类型:&nbsp;</span>{{
-                  showTypeText(item.type) }}
-              </div>
-              <!-- 状态:0过期,1生效,2撤单,3全部成交,4部分成交 -->
-              <div class="itemRow">
-                <span class="itemTitle">状态:&nbsp;</span>{{
-                  showStatusText(item.status) }}
-              </div>
-              <!-- if 0,1 不显示其他 -->
-              <!-- if 2 显示撤单时间 -->
-              <div v-if="item.status === '2'" class="itemRow">
-                <span class="itemTitle">撤单时间:&nbsp;</span>{{
-                  item.cancelTime }}
-              </div>
-              <!-- if 3,4 显示成交数量 -->
-              <div v-if="item.status === '3' || item.status === '4'" class="itemRow">
-                <span class="itemTitle">成交数量:&nbsp;</span>{{
-                  item.tradeNumber }}
-              </div>
-
-              <!-- 创建时间 -->
-              <div class="itemRow">
-                <span class="itemTitle">创建时间:&nbsp;</span>{{
-                  showDateTime(item.createTime) }}
-              </div>
-
-              <!-- 卖家确认时间 -->
-              <div class="itemRow" v-if="item.status === '1'">
-                <span class="itemTitle">卖家确认时间:&nbsp;</span>{{
-                  showDateTime(item.sellerConfirmTime)
-                }}
-              </div>
-
-              <!-- 去付款 -->
-              <div v-if="item.status === '3' || item.status === '4'" class="itemRow"
-                style="display: flex; justify-content: flex-end">
-                <van-button span="5" round type="primary" :style="{
-                  height: '2em',
-                  padding: '0 1.2em',
-                  margin: '0 1em',
-                  backgroundColor: 'rgb(200, 55, 95 / 80%)', // 红色背景,不透明度为100%
-                  color: '#fff', // 文字颜色为白色
-                  boxShadow: '0 2px 8px rgba(255, 55, 95, 0.3)', // 添加阴影效果
-                  transition: 'all 0.3s ease' // 添加过渡效果,使变化更平滑
-                }" @click="toBuy(item)">
-                  付款
-                </van-button>
-              </div>
-
-              <div class="itemRow" style="display: flex; justify-content: flex-end">
-                <!-- 已确认 -->
-                <span v-if="item.status === '1'" style="color: #4fc08d">{{
-                  showStatusText(item.status)
-                }}</span>
-                <!-- 特殊取消 -->
-                <span v-if="item.status === '2'" style="color: #ff0000">{{
-                  showStatusText(item.status)
-                }}</span>
-              </div>
-
-            </div>
-          </div>
-        </div>
-      </van-list>
-    </div>
-
-  </div>
-</template>
-
 <script setup>
 import { onMounted, reactive, ref } from "vue";
 import sHeader from "@/components/SimpleHeader";
-import { getPagePendList } from "@/service/pendingOrder";
+import { postPagePendList } from "@/service/pendingOrder";
 import { showFailToast } from "vant";
 import { getLoginUser, styleUrl } from "@/common/js/utils";
 import dateUtil from "@/utils/dateUtil";
-import { useRouter } from 'vue-router'
-import { useTradeStore } from '@/stores/trade';
 
 
 const typeTexts = ['未知类型', '买', '卖'];
@@ -128,7 +23,6 @@ const showStatusText = (statusVal) => {
   return statusMap[statusVal] || '未知状态';
 }
 
-const router = useRouter()
 
 const user = getLoginUser();
 const loading = ref(false); // 加载状态
@@ -148,12 +42,20 @@ const searchGetList = () => {
   searchParams.current = 1;
   getList();
 };
-// 获取新人账号注册审批列表数据
+
+// 滚动加载
+const onLoad = () => {
+  if (!finished.value) {
+    searchParams.current++;
+    getList();
+  }
+};
+// 获取所有挂单列表
 const getList = async () => {
   finished.value = false;
-  const { data } = await getPagePendList(
-    Object.assign({}, searchParams)
-  );
+  const params = Object.assign({}, searchParams);
+  const { data } = await postPagePendList(params);
+
   if (data.code === "00000") {
     if (searchParams.current === 0) {
       pendingOrderList.value = [];
@@ -164,6 +66,7 @@ const getList = async () => {
     );
     pendingOrderTotal.value = data.data.total;
     if (pendingOrderList.value.length === data.data.total) {
+      console.log("object", pendingOrderTotal.value);
       finished.value = true;
     }
     loading.value = false;
@@ -179,24 +82,6 @@ const showDateTime = (date) => {
 };
 
 
-// const userStore = useUserStore();
-const tradeStore = useTradeStore();
-// 去付款
-const toBuy = (item) => {
-  // userStore.setUserInfo(item);
-  tradeStore.setTradeItem(item);
-  router.push({ name: 'buyConf' });
-};
-
-
-// 滚动加载
-const onLoad = () => {
-  if (!finished.value) {
-    searchParams.current = searchParams.current + 1;
-    getList();
-  }
-};
-
 // 是否有操作的权限
 const isOper = ref(true);
 // 初始化页面获取列表
@@ -216,6 +101,105 @@ onMounted(async () => {
 
 </script>
 
+<template>
+  <!-- 挂单匹配列表 -->
+  <div class="pendingOrderList flex-col">
+    <s-header name="挂单匹配" :noback="false"></s-header>
+
+    <div class="pendingOrderBox flex-col">
+      <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
+        :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false"
+        @load="onLoad">
+
+        <div class="searchRow flex-row justify-between">
+          <div class="flex-col">
+            <div class="flex-row justify-between bd3">
+              <!-- 图标 -->
+              <!-- <div class="flex-col outer4 proportionIcon"></div> -->
+              <span class="flex-col txt2">{{ $t("taskMessage.total")
+                }}<span class="discountNumber">{{ pendingOrderTotal }}</span>{{
+                  $t("taskMessage.recordsInTotal") }}</span>
+            </div>
+          </div>
+        </div>
+
+        <div class="listBox">
+          <div v-for="(item) in pendingOrderList" :key="item.id" class="listItem">
+            <div class="itemBox">
+
+              <div class="itemRow">
+                <span class="itemTitle">挂单价格:&nbsp;</span>{{
+                  item.price }}
+              </div>
+              <div class="itemRow">
+                <span class="itemTitle">委托数量:&nbsp;</span>{{
+                  item.entrustNumber }}
+              </div>
+              <div class="itemRow">
+                <span class="itemTitle">挂单类型:&nbsp;</span>{{
+                  showTypeText(item.type) }}
+              </div>
+
+              <!-- if 0,1 不显示其他 -->
+              <!-- if 2 显示撤单时间 -->
+              <div v-if="item.status === '2'" class="itemRow">
+                <span class="itemTitle">撤单时间:&nbsp;</span>{{
+                  item.cancelTime }}
+              </div>
+              <!-- if 3,4 显示成交数量 -->
+              <div v-if="item.status === '3' || item.status === '4'" class="itemRow">
+                <span class="itemTitle">成交数量:&nbsp;</span>{{
+                  item.tradeNumber }}
+              </div>
+
+              <!-- 创建时间 -->
+              <div class="itemRow">
+                <span class="itemTitle">创建时间:&nbsp;</span>{{
+                  showDateTime(item.createTime) }}
+              </div>
+
+              <!-- 卖家确认时间 -->
+              <div class="itemRow" v-if="item.status === '1'">
+                <span class="itemTitle">卖家确认时间:&nbsp;</span>{{
+                  showDateTime(item.sellerConfirmTime)
+                }}
+              </div>
+
+              <!-- 状态:0过期,1生效,2撤单,3全部成交,4部分成交 -->
+              <div class="itemRow" style="display: flex; justify-content: flex-end">
+                <!-- 0过期 -->
+                <span v-if="item.status === '0'" style="color: #B7B7B7">{{
+                  showStatusText(item.status)
+                }}</span>
+                <!-- 1生效 -->
+                <span v-if="item.status === '1'" style="color: #4BC38B">{{
+                  showStatusText(item.status)
+                }}</span>
+                <!-- 2撤单 -->
+                <span v-if="item.status === '2'" style="color: #D8553B">{{
+                  showStatusText(item.status)
+                }}</span>
+                <!-- 3全部成交 -->
+                <span v-if="item.status === '3'" style="color: #ff0000">{{
+                  showStatusText(item.status)
+                }}</span>
+                <!-- 4部分成交 -->
+                <span v-if="item.status === '4'" style="color: #9C3FC4">{{
+                  showStatusText(item.status)
+                }}</span>
+              </div>
+
+            </div>
+          </div>
+        </div>
+      </van-list>
+    </div>
+
+  </div>
+</template>
+
+
+
 <style lang="less" scoped>
 @import "../../common/style/common.less";
 </style>

+ 11 - 0
src/views/taskMessage/Transaction.vue

@@ -0,0 +1,11 @@
+<script setup>
+  import { ref } from 'vue'
+  let a = ref('')
+</script>
+
+<template>
+  {{ a }}
+</template>
+
+<style scoped>
+</style>

+ 177 - 0
src/views/taskMessage/TransactionList.vue

@@ -0,0 +1,177 @@
+<template>
+    <!-- 成交列表 -->
+    <div class="transactionList flex-col">
+        <s-header name="成交列表" :noback="false"></s-header>
+
+        <div class="transactionBox flex-col">
+            <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
+                :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false"
+                @load="onLoad">
+                <div class="searchRow flex-row justify-between">
+                    <div class="flex-col">
+                        <div class="flex-row justify-between bd3">
+                            <!-- 图标 -->
+                            <!-- <div class="flex-col outer4 proportionIcon"></div> -->
+                            <span class="flex-col txt2">{{ $t("taskMessage.total")
+                                }}<span class="discountNumber">{{ transactionListTotal }}</span>{{
+                                    $t("taskMessage.recordsInTotal") }}</span>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="listBox">
+                    <div v-for="(item) in transactionList" :key="item.id" class="listItem">
+                        <div class="itemBox">
+
+                            <div class="itemRow">
+                                <span class="itemTitle">买家:&nbsp;</span>{{
+                                    item.buyer }}
+                            </div>
+                            <div class="itemRow">
+                                <span class="itemTitle">卖家:&nbsp;</span>{{
+                                    item.seller }}
+                            </div>
+                            <div class="itemRow">
+                                <span class="itemTitle">价格:&nbsp;</span>{{
+                                    item.price }}
+                            </div>
+                            <div class="itemRow">
+                                <span class="itemTitle">股票数:&nbsp;</span>{{
+                                    item.tradeNumber }}
+                            </div>
+                            <!-- 创建时间 -->
+                            <div class="itemRow">
+                                <span class="itemTitle">创建时间:&nbsp;</span>{{
+                                    showDateTime(item.createTime) }}
+                            </div>
+
+                            <!-- 卖家确认时间 -->
+                            <div class="itemRow" v-if="item.status === '1'">
+                                <span class="itemTitle">卖家确认时间:&nbsp;</span>{{
+                                    showDateTime(item.sellerConfirmTime)
+                                }}
+                            </div>
+
+                            <div class="itemRow" style="display: flex; justify-content: flex-end">
+                                <!-- 未确认 -->
+                                <span v-if="item.status === '0'" style="color: #EA5223">{{
+                                    showStatusText(item.status)
+                                    }}</span>
+                                <!-- 已确认 -->
+                                <span v-if="item.status === '1'" style="color: #4fc08d">{{
+                                    showStatusText(item.status)
+                                    }}</span>
+                                <!-- 特殊取消 -->
+                                <span v-if="item.status === '2'" style="color: #ff0000">{{
+                                    showStatusText(item.status)
+                                    }}</span>
+                            </div>
+
+                        </div>
+                    </div>
+                </div>
+            </van-list>
+        </div>
+
+    </div>
+</template>
+
+<script setup>
+import { onMounted, reactive, ref } from "vue";
+import sHeader from "@/components/SimpleHeader";
+import { getTransactionList } from "@/service/transaction";
+import { showFailToast } from "vant";
+import { getLoginUser, styleUrl } from "@/common/js/utils";
+import dateUtil from "@/utils/dateUtil";
+
+const showStatusText = (statusVal) => {
+    const statusMap = {
+        0: '未确认',
+        1: '已确认',
+        2: '特殊取消',
+    }
+    return statusMap[statusVal] || '未知状态';
+}
+
+const user = getLoginUser();
+const loading = ref(false); // 加载状态
+const error = ref(false); // 错误状态
+const finished = ref(false); // 结束翻页状态
+const transactionList = ref([]); // 列表集合
+const transactionListTotal = ref(0); // 列表总数
+let searchParams = reactive({
+    current: 1, // 当前页,默认第一页
+    size: 10, // 页大小,默认10条
+});
+
+
+// 查询列表
+const searchGetList = () => {
+    transactionList.value = [];
+    searchParams.current = 1;
+    getList();
+};
+// 获取新人账号注册审批列表数据
+const getList = async () => {
+    finished.value = false;
+    const { data } = await getTransactionList(
+        Object.assign({}, searchParams)
+    );
+    if (data.code === "00000") {
+        if (searchParams.current === 0) {
+            transactionList.value = [];
+        }
+        // 列表值叠加
+        transactionList.value = transactionList.value.concat(
+            data.data.records
+        );
+        transactionListTotal.value = data.data.total;
+        if (transactionList.value.length === data.data.total) {
+            finished.value = true;
+        }
+        loading.value = false;
+    } else {
+        showFailToast(data.message);
+    }
+};
+
+const showDateTime = (date) => {
+    return date
+        ? dateUtil.formateDate(new Date(date), "yyyy-MM-dd hh:mm:ss")
+        : "";
+};
+
+
+// const userStore = useUserStore();
+
+
+// 滚动加载
+const onLoad = () => {
+    if (!finished.value) {
+        searchParams.current = searchParams.current + 1;
+        getList();
+    }
+};
+
+// 是否有操作的权限
+const isOper = ref(true);
+// 初始化页面获取列表
+onMounted(async () => {
+    // 加载样式
+    styleUrl('transactionList');
+    if (user) {
+        // searchParams.adminId = user.id;
+        searchGetList();
+
+        // 如果不是admin账号,不能有操作权限
+        if (user.userName != 'admin') {
+            isOper.value = false;
+        }
+    }
+});
+
+</script>
+
+<style lang="less" scoped>
+@import "../../common/style/common.less";
+</style>

+ 1 - 1
src/views/taskMessage/index.vue

@@ -55,7 +55,7 @@ const pushPageList = (url) => {
       </div>
 
       <!-- 成交列表 -->
-      <div class="taskListRow flex-col" @click="pushPageList('/closingNotice')">
+      <div class="taskListRow flex-col" @click="pushPageList('/transactionList')">
         <div class="taskIcon closingIcon"></div>
         <div class="taskRight">
           <div class="taskTitle">成交列表</div>