footprint.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <template>
  2. <div class="sld_look_log clearfix">
  3. <!-- 路径导航 -->
  4. <div class="log_banner clearfix">
  5. <MemberTitle :memberTitle="L['我的足迹']"></MemberTitle>
  6. <button class="log_option" @click=" centerDialogVisible = true" v-show="looklog.log.length">
  7. {{L['清空']}}
  8. </button>
  9. </div>
  10. <!-- 足迹 -->
  11. <div class="sld_footprint">
  12. <div class="block">
  13. <el-timeline>
  14. <el-timeline-item
  15. :timestamp="time"
  16. placement="top"
  17. color="#00985e"
  18. v-for="({ productLookLogInfoList, time }, index) in looklog.log"
  19. :key="index"
  20. >
  21. <ul class="sld_foot_goods clearfix">
  22. <li
  23. v-for="(
  24. { goodsImage, productId, goodsName, state },
  25. index
  26. ) in productLookLogInfoList"
  27. :key="index"
  28. >
  29. <div class="img">
  30. <router-link
  31. target="_blank"
  32. :to="'/goods/detail/'+ calcProductName(goodsName) +'_'+ productId"
  33. >
  34. <img :src="goodsImage" alt=""/>
  35. <div class="mask" v-if="[5, 6].includes(state)">
  36. <div class="circle">{{ L['已下架'] }}</div>
  37. </div>
  38. </router-link>
  39. </div>
  40. <p class="sld_foot_price">
  41. <a style="cursor: pointer">
  42. <div class="fr-wrap">
  43. <div class="fr" @click="follow(productId, false)">{{
  44. goodsName
  45. }}</div>
  46. </div>
  47. </a>
  48. </p>
  49. </li>
  50. </ul>
  51. </el-timeline-item>
  52. </el-timeline>
  53. </div>
  54. <SldCommonEmpty
  55. v-show="!looklog.log.length"
  56. totalWidth="1000"
  57. :tip="L['暂无足迹']"
  58. totalHeight="680"
  59. paddingTop="250"
  60. />
  61. <!-- 分页 -->
  62. <div class="flex_row_center_center sld_pagination">
  63. <el-pagination
  64. @current-change="handleCurrentChange"
  65. v-model:currentPage="looklog.page.current"
  66. :page-size="looklog.page.pageSize"
  67. layout="prev, pager, next, jumper"
  68. :total="looklog.page.total"
  69. :hide-on-single-page="true"
  70. >
  71. </el-pagination>
  72. </div>
  73. <el-dialog v-model="centerDialogVisible" width="30%" center>
  74. <p style="text-align: center;"> {{ L["确定要清空吗?"]}}</p>
  75. <template #footer>
  76. <span class="dialog-footer">
  77. <el-button type="primary" @click="logClear">{{ L["确定"]}}</el-button>
  78. <el-button @click="centerDialogVisible = false">
  79. {{ L["取消"]}}
  80. </el-button>
  81. </span>
  82. </template>
  83. </el-dialog>
  84. </div>
  85. </div>
  86. </template>
  87. <script setup>
  88. import { ElTimeline, ElTimelineItem, ElMessage,ElMessageBox,ElPagination,ElDialog,ElButton } from "element-plus";
  89. import { getCurrentInstance, onMounted, reactive } from "vue";
  90. // import { lang_zn } from "@/assets/language/zh";
  91. import { getCurLanguage } from '@/composables/common.js';
  92. // const L = lang_zn;
  93. const L = getCurLanguage();
  94. definePageMeta({
  95. layout: "member",
  96. middleware: ["auth"],
  97. });
  98. const centerDialogVisible = ref(false)
  99. const { proxy } = getCurrentInstance();
  100. const looklog = reactive({ log: [], page: {} });
  101. const page = reactive({
  102. current: 1,
  103. pageSize: 5,
  104. });
  105. const getInitData = () => {
  106. get("v3/member/front/productLookLog/list", page).then((res) => {
  107. if (res.state == 200) {
  108. looklog.log = res.data.list;
  109. looklog.page = res.data.pagination;
  110. }
  111. });
  112. };
  113. const follow = (productId, logic) => {
  114. //关注商品
  115. let params = {
  116. isCollect: logic,
  117. productIds: productId,
  118. };
  119. post("v3/member/front/followProduct/edit", params)
  120. .then((res) => {
  121. if (res.state == 200) {
  122. getInitData();
  123. } else {
  124. ElMessage.error(res.msg);
  125. }
  126. })
  127. .catch((err) => {
  128. ElMessage.error(err);
  129. });
  130. };
  131. const handlePrevCilickChange = (e) => {
  132. //分页前一页操作
  133. page.current = e;
  134. getInitData();
  135. };
  136. const handleNextCilickChange = (e) => {
  137. //分页前一页操作
  138. page.current = e;
  139. getInitData();
  140. };
  141. const handleCurrentChange = (e) => {
  142. //分页点击操作
  143. page.current = e;
  144. getInitData();
  145. };
  146. const logClear = () => {
  147. get("v3/member/front/productLookLog/empty").then((res) => {
  148. if (res.state == 200) {
  149. getInitData();
  150. ElMessage(res.msg);
  151. }
  152. });
  153. };
  154. onMounted(() => {
  155. getInitData();
  156. });
  157. </script>
  158. <style lang="scss">
  159. .confirm-button-class {
  160. color: #fff;
  161. background-color: #e2231a !important;
  162. border-color: #e2231a !important;
  163. }
  164. @import "@/assets/style/member/footprint.scss";
  165. @import "@/assets/style/base.scss";
  166. </style>