Browse Source

打包

master
chenkainan 4 weeks ago
parent
commit
c71d64ed54
  1. 1
      dist/css/253.12c9c435.css
  2. 1
      dist/css/28.71040a2a.css
  3. 1
      dist/css/315.147313e3.css
  4. 1
      dist/css/331.aa77b66c.css
  5. 1
      dist/css/414.5cfa9941.css
  6. 1
      dist/css/443.686f8647.css
  7. 1
      dist/css/467.95b3e97b.css
  8. 1
      dist/css/519.309764aa.css
  9. 1
      dist/css/522.f0656774.css
  10. 1
      dist/css/758.de28ca83.css
  11. 2
      dist/css/779.506cc62a.css
  12. 1
      dist/css/789.eab34fc2.css
  13. 1
      dist/css/828.3ffea4ab.css
  14. 1
      dist/css/828.9419445b.css
  15. 1
      dist/css/839.7922504b.css
  16. 1
      dist/css/856.669cb47e.css
  17. 1
      dist/css/906.de7ec92f.css
  18. 2
      dist/css/app.5fbd07a4.css
  19. 2
      dist/index.html
  20. 2
      dist/js/179.67a63611.js
  21. 2
      dist/js/253.6c575ac9.js
  22. 1
      dist/js/253.6c575ac9.js.map
  23. 2
      dist/js/28.7a51a71d.js
  24. 1
      dist/js/28.7a51a71d.js.map
  25. 2
      dist/js/315.010ae2e0.js
  26. 1
      dist/js/315.010ae2e0.js.map
  27. 4
      dist/js/331.633619dc.js
  28. 1
      dist/js/331.633619dc.js.map
  29. 2
      dist/js/414.99bac297.js
  30. 1
      dist/js/414.99bac297.js.map
  31. 2
      dist/js/443.953569b3.js
  32. 1
      dist/js/443.953569b3.js.map
  33. 2
      dist/js/467.005a7306.js
  34. 1
      dist/js/467.005a7306.js.map
  35. 2
      dist/js/519.db92619f.js
  36. 1
      dist/js/519.db92619f.js.map
  37. 2
      dist/js/522.154587d0.js
  38. 1
      dist/js/522.154587d0.js.map
  39. 2
      dist/js/612.0689f662.js
  40. 2
      dist/js/612.0689f662.js.map
  41. 1
      dist/js/758.9bf283c8.js.map
  42. 2
      dist/js/779.220d32b4.js
  43. 1
      dist/js/779.220d32b4.js.map
  44. 2
      dist/js/789.d1b1b886.js
  45. 1
      dist/js/789.d1b1b886.js.map
  46. 1
      dist/js/828.630aafc0.js.map
  47. 4
      dist/js/828.deb87761.js
  48. 1
      dist/js/828.deb87761.js.map
  49. 2
      dist/js/839.168e7d6e.js
  50. 1
      dist/js/839.168e7d6e.js.map
  51. 2
      dist/js/856.74bafc60.js
  52. 1
      dist/js/856.74bafc60.js.map
  53. 2
      dist/js/906.f111d15e.js
  54. 1
      dist/js/906.f111d15e.js.map
  55. 2
      dist/js/926.ffbed7b8.js
  56. 1
      dist/js/926.ffbed7b8.js.map
  57. 2
      dist/js/app.5f630284.js
  58. 1
      dist/js/app.5f630284.js.map
  59. 2
      dist/js/app.c1905b36.js
  60. 1
      dist/js/app.c1905b36.js.map
  61. 3
      src/App.vue
  62. 25
      src/components/layout/HomeLayout.vue
  63. 298
      src/components/product/Evaluate.vue
  64. 2
      src/components/product/ProductList.vue
  65. 18
      src/router/index.js
  66. 1
      src/store/index.js
  67. 63
      src/views/Order/Index.vue
  68. 124
      src/views/ProductPage/ProductReview.vue
  69. 10
      src/views/User/CommentManage.vue
  70. 67
      src/views/User/OrderList.vue
  71. 66
      src/views/User/ShoppingCart.vue
  72. 2
      src/views/User/UserInvoice.vue
  73. 76
      src/views/notice/noticeDetail.vue
  74. 243
      src/views/notice/noticeList.vue

1
dist/css/253.12c9c435.css

@ -1 +0,0 @@
.bg[data-v-0e9c5623]{display:flex;flex-direction:column}.bg[data-v-0e9c5623] .el-button--text,.bg[data-v-0e9c5623] .el-tabs__item.is-active{color:#6a8a27}.bg[data-v-0e9c5623] .el-tabs__active-bar{background-color:#6a8a27}.bg[data-v-0e9c5623] .el-tabs__item:hover{color:#6a8a27}.filter-bar[data-v-0e9c5623]{margin-bottom:20px}.order-card[data-v-0e9c5623]{border:1px solid #eee;border-radius:4px;margin-bottom:20px;overflow:hidden}.order-header[data-v-0e9c5623]{background-color:#f8f9fa;padding:12px 20px;display:flex;align-items:center;border-bottom:1px solid #eee;color:#666;font-size:14px}.order-products[data-v-0e9c5623]{padding:10px 20px}.product-item[data-v-0e9c5623]{display:flex;align-items:center;padding:15px 0;border-bottom:1px dashed #eee;font-size:14px}.product-item[data-v-0e9c5623]:last-child{border-bottom:none}.product-image[data-v-0e9c5623]{width:80px;height:80px;-o-object-fit:cover;object-fit:cover;margin-right:15px;border-radius:4px}.product-details[data-v-0e9c5623]{flex:1}.product-name[data-v-0e9c5623]{color:#333;margin-bottom:5px}.product-spec[data-v-0e9c5623]{color:#999;font-size:12px}.product-price[data-v-0e9c5623]{width:120px;text-align:center;color:#333}.product-quantity[data-v-0e9c5623]{width:100px;text-align:center;color:#666}.product-total[data-v-0e9c5623]{width:120px;text-align:center;color:#333;font-weight:500}.product-actions[data-v-0e9c5623],.product-status[data-v-0e9c5623]{width:150px;text-align:center}.order-footer[data-v-0e9c5623]{background-color:#f8f9fa;padding:15px 20px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #eee}.order-summary[data-v-0e9c5623]{text-align:right}.order-amount[data-v-0e9c5623]{color:#333;margin-bottom:5px}.order-amount strong[data-v-0e9c5623]{color:#ff4d4f;font-size:16px}.order-tips[data-v-0e9c5623]{font-size:12px;color:#999}.order-actions[data-v-0e9c5623]{display:flex;gap:10px}

1
dist/css/28.71040a2a.css

@ -1 +0,0 @@
.bg[data-v-7926bfa2]{display:flex;flex-direction:column}.bg[data-v-7926bfa2] .el-button--text,.bg[data-v-7926bfa2] .el-tabs__item.is-active{color:#6a8a27}.bg[data-v-7926bfa2] .el-tabs__active-bar{background-color:#6a8a27}.bg[data-v-7926bfa2] .el-tabs__item:hover{color:#6a8a27}.filter-bar[data-v-7926bfa2]{margin-bottom:20px}.order-card[data-v-7926bfa2]{border:1px solid #eee;border-radius:4px;margin-bottom:20px;overflow:hidden}.order-header[data-v-7926bfa2]{background-color:#f8f9fa;padding:12px 20px;display:flex;align-items:center;border-bottom:1px solid #eee;color:#666;font-size:14px}.order-products[data-v-7926bfa2]{padding:10px 20px}.product-item[data-v-7926bfa2]{display:flex;align-items:center;padding:15px 0;border-bottom:1px dashed #eee;font-size:14px}.product-item[data-v-7926bfa2]:last-child{border-bottom:none}.product-image[data-v-7926bfa2]{width:80px;height:80px;-o-object-fit:cover;object-fit:cover;margin-right:15px;border-radius:4px}.product-details[data-v-7926bfa2]{flex:1}.product-name[data-v-7926bfa2]{color:#333;margin-bottom:5px}.product-spec[data-v-7926bfa2]{color:#999;font-size:12px}.product-price[data-v-7926bfa2]{width:120px;text-align:center;color:#333}.product-quantity[data-v-7926bfa2]{width:100px;text-align:center;color:#666}.product-total[data-v-7926bfa2]{width:120px;text-align:center;color:#333;font-weight:500}.product-actions[data-v-7926bfa2],.product-status[data-v-7926bfa2]{width:150px;text-align:center}.order-footer[data-v-7926bfa2]{background-color:#f8f9fa;padding:15px 20px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #eee}.order-summary[data-v-7926bfa2]{text-align:right}.order-amount[data-v-7926bfa2]{color:#333;margin-bottom:5px}.order-amount strong[data-v-7926bfa2]{color:#ff4d4f;font-size:16px}.order-tips[data-v-7926bfa2]{font-size:12px;color:#999}.order-actions[data-v-7926bfa2]{display:flex;gap:10px}

1
dist/css/315.147313e3.css

@ -0,0 +1 @@
.announcement-container[data-v-34e6c3de]{max-width:1200px;margin:0 auto;padding:20px}.page-title[data-v-34e6c3de]{font-size:20px;font-weight:700;color:#333;margin-bottom:20px;padding-bottom:10px;border-bottom:1px solid #eee}.detail[data-v-34e6c3de]{background:#fff;padding:20px}@media (max-width:768px){.search-input[data-v-34e6c3de]{width:100%}.announcement-header[data-v-34e6c3de]{flex-direction:column;align-items:flex-start}.announcement-date[data-v-34e6c3de]{margin-top:5px}}

1
dist/css/331.aa77b66c.css

File diff suppressed because one or more lines are too long

1
dist/css/414.5cfa9941.css

@ -1 +0,0 @@
.bg[data-v-00950b26]{display:flex;flex-direction:column}.bg[data-v-00950b26] .el-button--text,.bg[data-v-00950b26] .el-tabs__item.is-active{color:#6a8a27}.bg[data-v-00950b26] .el-tabs__active-bar{background-color:#6a8a27}.bg[data-v-00950b26] .el-tabs__item:hover{color:#6a8a27}.order-card[data-v-00950b26]{border-radius:4px;overflow:hidden}.order-header[data-v-00950b26]{padding:12px 20px;display:flex;align-items:center;background:#f8f9fa;border-bottom:1px solid #999;color:#666;font-size:14px}.order-products[data-v-00950b26]{padding:10px 20px}.product-item[data-v-00950b26]{display:flex;align-items:center;padding:15px 0;border-bottom:1px dashed #eee;font-size:14px}.product-item[data-v-00950b26]:last-child{border-bottom:none}.product-image[data-v-00950b26]{width:80px;height:80px;-o-object-fit:cover;object-fit:cover;margin-right:15px;border-radius:4px}.product-details[data-v-00950b26]{flex:1}.product-name[data-v-00950b26]{color:#333}.product-spec[data-v-00950b26]{color:#999;font-size:12px}.product-box[data-v-00950b26]{width:100px;text-align:center;color:#333}.product-quantity[data-v-00950b26]{width:160px;text-align:center;color:#333}.product-select[data-v-00950b26]{width:80px;color:#333}.product-price[data-v-00950b26]{color:#ff5252}.cart-footer[data-v-00950b26]{display:flex;justify-content:space-between;align-items:center;margin-top:10px;padding:15px;background-color:#f5f7fa;border-radius:4px}.selected-info[data-v-00950b26]{color:#666;font-size:14px;padding-right:50px}.import-text[data-v-00950b26]{color:#c7020b;font-size:20px;font-weight:700}.total-price[data-v-00950b26]:before{content:"¥";margin-right:5px;font-size:12px}

1
dist/css/443.686f8647.css

@ -0,0 +1 @@
.announcement-container[data-v-2630b25e]{max-width:1200px;margin:0 auto;padding:20px}.page-title[data-v-2630b25e]{font-size:20px;font-weight:700;color:#333;margin-bottom:20px;padding-bottom:10px;border-bottom:1px solid #eee}.search-bar[data-v-2630b25e]{margin-bottom:20px}.search-input[data-v-2630b25e]{width:400px}.announcement-list-card[data-v-2630b25e]{border-radius:4px}.announcement-item[data-v-2630b25e]{padding:15px 0;border-bottom:1px dashed #eee;transition:background-color .2s;cursor:pointer}.announcement-item[data-v-2630b25e]:last-child{border-bottom:none}.announcement-item[data-v-2630b25e]:hover{background-color:#f9f9f9}.announcement-header[data-v-2630b25e]{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.announcement-title[data-v-2630b25e]{display:flex;align-items:center;font-weight:500;color:#333}.announcement-title .is-top[data-v-2630b25e]{color:#e6a23c}.announcement-title .el-tag[data-v-2630b25e]{margin-left:10px}.announcement-date[data-v-2630b25e]{color:#999;font-size:12px}.announcement-content[data-v-2630b25e]{color:#666;line-height:1.6;margin-bottom:10px}.announcement-action[data-v-2630b25e]{text-align:right}.empty-state[data-v-2630b25e]{padding:50px 0}.pagination-container[data-v-2630b25e]{margin-top:20px;text-align:right}.detail-meta[data-v-2630b25e]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding-bottom:10px;border-bottom:1px solid #eee;color:#999;font-size:12px}.detail-text[data-v-2630b25e]{line-height:1.8;color:#333}@media (max-width:768px){.search-input[data-v-2630b25e]{width:100%}.announcement-header[data-v-2630b25e]{flex-direction:column;align-items:flex-start}.announcement-date[data-v-2630b25e]{margin-top:5px}}

1
dist/css/467.95b3e97b.css

@ -0,0 +1 @@
.bg[data-v-43266500]{display:flex;flex-direction:column}.bg[data-v-43266500] .el-button--text,.bg[data-v-43266500] .el-tabs__item.is-active{color:#6a8a27}.bg[data-v-43266500] .el-tabs__active-bar{background-color:#6a8a27}.bg[data-v-43266500] .el-tabs__item:hover{color:#6a8a27}.order-card[data-v-43266500]{border-radius:4px;overflow:hidden}.order-header[data-v-43266500]{padding:12px 20px;display:flex;align-items:center;background:#f8f9fa;border-bottom:1px solid #999;color:#666;font-size:14px}.order-products[data-v-43266500]{padding:10px 20px;background:#fff}.product-item[data-v-43266500]{display:flex;align-items:center;padding:15px 0;border-bottom:1px dashed #eee;font-size:14px}.product-item[data-v-43266500]:last-child{border-bottom:none}.product-image[data-v-43266500]{width:80px;height:80px;-o-object-fit:cover;object-fit:cover;margin-right:15px;border-radius:4px}.product-details[data-v-43266500]{flex:1}.product-name[data-v-43266500]{color:#333}.product-spec[data-v-43266500]{color:#999;font-size:12px}.product-box[data-v-43266500]{width:100px;text-align:center;color:#333}.product-quantity[data-v-43266500]{width:160px;text-align:center;color:#333}.product-select[data-v-43266500]{width:80px;color:#333}.product-price[data-v-43266500]{color:#ff5252}.cart-footer[data-v-43266500]{display:flex;justify-content:space-between;align-items:center;margin-top:10px;padding:15px;background-color:#f5f7fa;border-radius:4px}.selected-info[data-v-43266500]{color:#666;font-size:14px;padding-right:50px}.import-text[data-v-43266500]{color:#c7020b;font-size:20px;font-weight:700}.total-price[data-v-43266500]:before{content:"¥";margin-right:5px;font-size:12px}

1
dist/css/519.309764aa.css

@ -1 +0,0 @@
.review-container[data-v-14044d92]{max-width:1000px;margin:0 auto;padding:20px}.page-header[data-v-14044d92],.product-card[data-v-14044d92]{margin-bottom:20px}.product-info[data-v-14044d92]{display:flex;align-items:center;padding:10px 0}.product-image[data-v-14044d92]{width:120px;height:120px;border-radius:4px;margin-right:20px}.product-details[data-v-14044d92]{flex:1}.product-title[data-v-14044d92]{font-size:16px;font-weight:500;margin-bottom:10px;color:#333;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.product-desc[data-v-14044d92]{color:#666;margin-bottom:10px;font-size:14px}.product-price[data-v-14044d92]{color:#ff4d4f;font-size:18px}.review-form-card[data-v-14044d92]{margin-bottom:20px}.rating-stars[data-v-14044d92]{font-size:24px;color:#ccc}.rating-stars .active[data-v-14044d92]{color:#f5a623}.rating-stars i[data-v-14044d92]{cursor:pointer;margin-right:5px;transition:color .2s}.rating-stars i[data-v-14044d92]:hover{color:#f5a623}.rating-text[data-v-14044d92]{margin-top:10px;color:#666;font-size:14px}.char-count[data-v-14044d92]{text-align:right;color:#999;font-size:12px;margin-top:5px}.image-upload[data-v-14044d92]{margin-bottom:10px}.upload-tip[data-v-14044d92]{color:#999;font-size:12px}.review-alert[data-v-14044d92]{margin-top:10px}.anonymous-tip[data-v-14044d92]{color:#999;font-size:12px;margin-top:5px}@media(max-width:768px){.product-info[data-v-14044d92]{flex-direction:column;align-items:flex-start}.product-image[data-v-14044d92]{margin-bottom:15px}}

1
dist/css/522.f0656774.css

@ -0,0 +1 @@
.home-layout-container[data-v-40153470]{display:flex;width:100%;height:auto}.left-nav[data-v-40153470]{width:200px;background-color:#f8f9fa;padding:20px 0;box-sizing:border-box;border-radius:10px 0 0 10px}.nav-list[data-v-40153470]{list-style:none;margin:0;padding:0}.nav-item[data-v-40153470]{padding:12px 20px;cursor:pointer;color:#333;transition:all .3s ease;display:flex}.nav-item img[data-v-40153470]{width:20px;margin-right:5px}.nav-item[data-v-40153470]:hover{background-color:#e9ecef;padding-left:25px;color:#fff;background:#6a8a27}.main-content[data-v-40153470]{flex:1;height:auto;overflow:hidden}.carousel-img[data-v-40153470]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.main-content[data-v-40153470] .el-carousel__container{height:100%!important}.right-info[data-v-40153470]{width:280px;background-color:#fff;padding:20px;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;border-left:1px solid #eee;border-radius:0 10px 10px 0}.avatar-container[data-v-40153470]{display:flex;flex-direction:column;align-items:center;margin-bottom:20px}.user-avatar[data-v-40153470]{width:60px;height:60px;border-radius:50%;margin-bottom:10px;border:2px solid #f0f0f0}.welcome-text[data-v-40153470]{font-size:14px;color:#333}.btn-group[data-v-40153470]{display:flex;gap:10px;margin-bottom:30px;width:100%}.func-icons[data-v-40153470]{display:flex;justify-content:space-around;flex-wrap:wrap;width:100%;margin-bottom:10px;padding:10px 0;border-top:1px dashed #eee;border-bottom:1px dashed #eee}.icon-item[data-v-40153470]{display:flex;flex-direction:column;align-items:center;cursor:pointer;color:#666;transition:color .3s ease;width:50%}.icon-item[data-v-40153470]:nth-child(n+3){margin-top:20px}.icon-item[data-v-40153470]:hover{color:#1890ff}.icon[data-v-40153470]{font-size:24px;margin-bottom:5px}.icon-item span[data-v-40153470]{font-size:12px}.announcement[data-v-40153470]{display:flex;align-items:center;font-size:12px;color:#666;width:100%;padding-top:10px}.announcement span[data-v-40153470]{margin-left:10px}.product-list .product-grid[data-v-71ee3626]{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px}.product-list .product-card[data-v-71ee3626]{border:1px solid #eaeaea;border-radius:8px;overflow:hidden;transition:all .3s ease;padding:10px;background:#fff;border-radius:10px}.product-list .product-card[data-v-71ee3626]:hover{transform:translateY(-5px);box-shadow:0 5px 15px rgba(0,0,0,.1)}.product-list .product-card .product-img[data-v-71ee3626]{height:250px;overflow:hidden}.product-list .product-card .product-img .product-pic[data-v-71ee3626]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .5s ease}.product-list .product-card .product-img .product-pic[data-v-71ee3626]:hover{transform:scale(1.05)}.product-list .product-card .product-info[data-v-71ee3626]{padding:10px}.product-list .product-card .product-info .product-name[data-v-71ee3626]{font-size:14px;line-height:20px;min-height:40px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:10px}.product-list .product-card .product-info .product-name a[data-v-71ee3626]{color:#333}.product-list .product-card .product-info .product-name a[data-v-71ee3626]:hover{color:#409eff}.product-list .product-card .product-info .product-price[data-v-71ee3626]{margin-bottom:15px}.product-list .product-card .product-info .product-price .current-price[data-v-71ee3626]{color:#f40;font-size:16px;font-weight:700}.product-list .product-card .product-info .product-price .original-price[data-v-71ee3626]{color:#999;font-size:12px;text-decoration:line-through;margin-left:8px}.product-list .product-card .product-info .product-actions[data-v-71ee3626]{margin-bottom:10px}.product-list .product-card .product-info .product-sales[data-v-71ee3626]{font-size:12px;color:#999;margin-bottom:15px}.product-list .no-products[data-v-71ee3626]{padding:50px 0;text-align:center}.product-box[data-v-c53f5724]{margin:30px 0}.product-box h2[data-v-c53f5724]{margin-bottom:20px}

1
dist/css/758.de28ca83.css

File diff suppressed because one or more lines are too long

2
dist/css/926.a9594400.css → dist/css/779.506cc62a.css

File diff suppressed because one or more lines are too long

1
dist/css/789.eab34fc2.css

@ -1 +0,0 @@
.home-layout-container[data-v-6226f870]{display:flex;width:100%;height:auto}.left-nav[data-v-6226f870]{width:200px;background-color:#f8f9fa;padding:20px 0;box-sizing:border-box}.nav-list[data-v-6226f870]{list-style:none;margin:0;padding:0}.nav-item[data-v-6226f870]{padding:12px 20px;cursor:pointer;color:#333;transition:all .3s ease;display:flex}.nav-item img[data-v-6226f870]{width:20px;margin-right:5px}.nav-item[data-v-6226f870]:hover{background-color:#e9ecef;padding-left:25px;color:#c7000b}.main-content[data-v-6226f870]{flex:1;height:auto;overflow:hidden}.carousel-img[data-v-6226f870]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.main-content[data-v-6226f870] .el-carousel__container{height:100%!important}.right-info[data-v-6226f870]{width:280px;background-color:#fff;padding:20px;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;border-left:1px solid #eee}.avatar-container[data-v-6226f870]{display:flex;flex-direction:column;align-items:center;margin-bottom:20px}.user-avatar[data-v-6226f870]{width:60px;height:60px;border-radius:50%;margin-bottom:10px;border:2px solid #f0f0f0}.welcome-text[data-v-6226f870]{font-size:14px;color:#333}.btn-group[data-v-6226f870]{display:flex;gap:10px;margin-bottom:30px;width:100%}.func-icons[data-v-6226f870]{display:flex;justify-content:space-around;width:100%;margin-bottom:30px;padding:10px 0;border-top:1px dashed #eee;border-bottom:1px dashed #eee}.icon-item[data-v-6226f870]{display:flex;flex-direction:column;align-items:center;cursor:pointer;color:#666;transition:color .3s ease;width:50px}.icon-item[data-v-6226f870]:hover{color:#1890ff}.icon[data-v-6226f870]{font-size:24px;margin-bottom:5px}.icon-item span[data-v-6226f870]{font-size:12px}.announcement[data-v-6226f870]{display:flex;align-items:center;font-size:12px;color:#666;width:100%;padding-top:10px}.announcement span[data-v-6226f870]{margin-left:10px}.product-list .product-grid[data-v-0968dad7]{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px}.product-list .product-card[data-v-0968dad7]{border:1px solid #eaeaea;border-radius:8px;overflow:hidden;transition:all .3s ease;padding:10px}.product-list .product-card[data-v-0968dad7]:hover{transform:translateY(-5px);box-shadow:0 5px 15px rgba(0,0,0,.1)}.product-list .product-card .product-img[data-v-0968dad7]{height:250px;overflow:hidden}.product-list .product-card .product-img .product-pic[data-v-0968dad7]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .5s ease}.product-list .product-card .product-img .product-pic[data-v-0968dad7]:hover{transform:scale(1.05)}.product-list .product-card .product-info[data-v-0968dad7]{padding:10px}.product-list .product-card .product-info .product-name[data-v-0968dad7]{font-size:14px;line-height:20px;min-height:40px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:10px}.product-list .product-card .product-info .product-name a[data-v-0968dad7]{color:#333}.product-list .product-card .product-info .product-name a[data-v-0968dad7]:hover{color:#409eff}.product-list .product-card .product-info .product-price[data-v-0968dad7]{margin-bottom:15px}.product-list .product-card .product-info .product-price .current-price[data-v-0968dad7]{color:#f40;font-size:16px;font-weight:700}.product-list .product-card .product-info .product-price .original-price[data-v-0968dad7]{color:#999;font-size:12px;text-decoration:line-through;margin-left:8px}.product-list .product-card .product-info .product-actions[data-v-0968dad7]{margin-bottom:10px}.product-list .product-card .product-info .product-sales[data-v-0968dad7]{font-size:12px;color:#999;margin-bottom:15px}.product-list .no-products[data-v-0968dad7]{padding:50px 0;text-align:center}.product-box[data-v-c53f5724]{margin:30px 0}.product-box h2[data-v-c53f5724]{margin-bottom:20px}

1
dist/css/828.3ffea4ab.css

@ -1 +0,0 @@
.product-list .product-grid[data-v-0968dad7]{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px}.product-list .product-card[data-v-0968dad7]{border:1px solid #eaeaea;border-radius:8px;overflow:hidden;transition:all .3s ease;padding:10px}.product-list .product-card[data-v-0968dad7]:hover{transform:translateY(-5px);box-shadow:0 5px 15px rgba(0,0,0,.1)}.product-list .product-card .product-img[data-v-0968dad7]{height:250px;overflow:hidden}.product-list .product-card .product-img .product-pic[data-v-0968dad7]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .5s ease}.product-list .product-card .product-img .product-pic[data-v-0968dad7]:hover{transform:scale(1.05)}.product-list .product-card .product-info[data-v-0968dad7]{padding:10px}.product-list .product-card .product-info .product-name[data-v-0968dad7]{font-size:14px;line-height:20px;min-height:40px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:10px}.product-list .product-card .product-info .product-name a[data-v-0968dad7]{color:#333}.product-list .product-card .product-info .product-name a[data-v-0968dad7]:hover{color:#409eff}.product-list .product-card .product-info .product-price[data-v-0968dad7]{margin-bottom:15px}.product-list .product-card .product-info .product-price .current-price[data-v-0968dad7]{color:#f40;font-size:16px;font-weight:700}.product-list .product-card .product-info .product-price .original-price[data-v-0968dad7]{color:#999;font-size:12px;text-decoration:line-through;margin-left:8px}.product-list .product-card .product-info .product-actions[data-v-0968dad7]{margin-bottom:10px}.product-list .product-card .product-info .product-sales[data-v-0968dad7]{font-size:12px;color:#999;margin-bottom:15px}.product-list .no-products[data-v-0968dad7]{padding:50px 0;text-align:center}.home-page .home-carousel[data-v-34d6a3aa]{margin-bottom:30px}.home-page .home-carousel .carousel-img[data-v-34d6a3aa]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.home-page .category-nav[data-v-34d6a3aa]{margin-bottom:40px}.home-page .category-nav .category-list[data-v-34d6a3aa]{display:flex;justify-content:space-between;flex-wrap:wrap;gap:20px;margin-top:20px}.home-page .category-nav .category-item[data-v-34d6a3aa]{flex:1;min-width:120px;height:150px;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid #eaeaea;border-radius:8px;cursor:pointer;transition:all .3s ease}.home-page .category-nav .category-item[data-v-34d6a3aa]:hover{transform:translateY(-5px);box-shadow:0 5px 15px rgba(0,0,0,.1);border-color:#409eff}.home-page .category-nav .category-item .category-icon[data-v-34d6a3aa]{font-size:36px;color:#409eff;margin-bottom:15px}.home-page .category-nav .category-item .category-name[data-v-34d6a3aa]{font-size:16px;font-weight:500}.home-page .section-title[data-v-34d6a3aa]{font-size:24px;color:#333;padding-bottom:10px;border-bottom:2px solid #409eff;display:inline-block;margin-bottom:20px}.home-page .section-header[data-v-34d6a3aa]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.home-page .section-header .more-link[data-v-34d6a3aa]{color:#409eff;font-size:14px;display:flex;align-items:center}.home-page .section-header .more-link[data-v-34d6a3aa]:hover{text-decoration:underline}.home-page .section-header .more-link i[data-v-34d6a3aa]{margin-left:5px;font-size:16px}.home-page .hot-products[data-v-34d6a3aa],.home-page .new-products[data-v-34d6a3aa]{margin-bottom:40px}.home-page .promotion-section[data-v-34d6a3aa]{margin:40px 0}.home-page .promotion-section .promotion-container[data-v-34d6a3aa]{display:flex;gap:20px;margin-top:20px}@media(max-width:768px){.home-page .promotion-section .promotion-container[data-v-34d6a3aa]{flex-direction:column}}.home-page .promotion-section .promotion-item[data-v-34d6a3aa]{flex:1;position:relative;height:300px;border-radius:8px;overflow:hidden}.home-page .promotion-section .promotion-item .promotion-img[data-v-34d6a3aa]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .5s ease}.home-page .promotion-section .promotion-item .promotion-img[data-v-34d6a3aa]:hover{transform:scale(1.05)}.home-page .promotion-section .promotion-item .promotion-info[data-v-34d6a3aa]{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.home-page .promotion-section .promotion-item .promotion-info h3[data-v-34d6a3aa]{font-size:24px;margin-bottom:10px}.home-page .promotion-section .promotion-item .promotion-info p[data-v-34d6a3aa]{font-size:16px;margin-bottom:20px}

1
dist/css/828.9419445b.css

@ -0,0 +1 @@
.product-list .product-grid[data-v-71ee3626]{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px}.product-list .product-card[data-v-71ee3626]{border:1px solid #eaeaea;border-radius:8px;overflow:hidden;transition:all .3s ease;padding:10px;background:#fff;border-radius:10px}.product-list .product-card[data-v-71ee3626]:hover{transform:translateY(-5px);box-shadow:0 5px 15px rgba(0,0,0,.1)}.product-list .product-card .product-img[data-v-71ee3626]{height:250px;overflow:hidden}.product-list .product-card .product-img .product-pic[data-v-71ee3626]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .5s ease}.product-list .product-card .product-img .product-pic[data-v-71ee3626]:hover{transform:scale(1.05)}.product-list .product-card .product-info[data-v-71ee3626]{padding:10px}.product-list .product-card .product-info .product-name[data-v-71ee3626]{font-size:14px;line-height:20px;min-height:40px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:10px}.product-list .product-card .product-info .product-name a[data-v-71ee3626]{color:#333}.product-list .product-card .product-info .product-name a[data-v-71ee3626]:hover{color:#409eff}.product-list .product-card .product-info .product-price[data-v-71ee3626]{margin-bottom:15px}.product-list .product-card .product-info .product-price .current-price[data-v-71ee3626]{color:#f40;font-size:16px;font-weight:700}.product-list .product-card .product-info .product-price .original-price[data-v-71ee3626]{color:#999;font-size:12px;text-decoration:line-through;margin-left:8px}.product-list .product-card .product-info .product-actions[data-v-71ee3626]{margin-bottom:10px}.product-list .product-card .product-info .product-sales[data-v-71ee3626]{font-size:12px;color:#999;margin-bottom:15px}.product-list .no-products[data-v-71ee3626]{padding:50px 0;text-align:center}.home-page .home-carousel[data-v-34d6a3aa]{margin-bottom:30px}.home-page .home-carousel .carousel-img[data-v-34d6a3aa]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.home-page .category-nav[data-v-34d6a3aa]{margin-bottom:40px}.home-page .category-nav .category-list[data-v-34d6a3aa]{display:flex;justify-content:space-between;flex-wrap:wrap;gap:20px;margin-top:20px}.home-page .category-nav .category-item[data-v-34d6a3aa]{flex:1;min-width:120px;height:150px;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid #eaeaea;border-radius:8px;cursor:pointer;transition:all .3s ease}.home-page .category-nav .category-item[data-v-34d6a3aa]:hover{transform:translateY(-5px);box-shadow:0 5px 15px rgba(0,0,0,.1);border-color:#409eff}.home-page .category-nav .category-item .category-icon[data-v-34d6a3aa]{font-size:36px;color:#409eff;margin-bottom:15px}.home-page .category-nav .category-item .category-name[data-v-34d6a3aa]{font-size:16px;font-weight:500}.home-page .section-title[data-v-34d6a3aa]{font-size:24px;color:#333;padding-bottom:10px;border-bottom:2px solid #409eff;display:inline-block;margin-bottom:20px}.home-page .section-header[data-v-34d6a3aa]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.home-page .section-header .more-link[data-v-34d6a3aa]{color:#409eff;font-size:14px;display:flex;align-items:center}.home-page .section-header .more-link[data-v-34d6a3aa]:hover{text-decoration:underline}.home-page .section-header .more-link i[data-v-34d6a3aa]{margin-left:5px;font-size:16px}.home-page .hot-products[data-v-34d6a3aa],.home-page .new-products[data-v-34d6a3aa]{margin-bottom:40px}.home-page .promotion-section[data-v-34d6a3aa]{margin:40px 0}.home-page .promotion-section .promotion-container[data-v-34d6a3aa]{display:flex;gap:20px;margin-top:20px}@media(max-width:768px){.home-page .promotion-section .promotion-container[data-v-34d6a3aa]{flex-direction:column}}.home-page .promotion-section .promotion-item[data-v-34d6a3aa]{flex:1;position:relative;height:300px;border-radius:8px;overflow:hidden}.home-page .promotion-section .promotion-item .promotion-img[data-v-34d6a3aa]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .5s ease}.home-page .promotion-section .promotion-item .promotion-img[data-v-34d6a3aa]:hover{transform:scale(1.05)}.home-page .promotion-section .promotion-item .promotion-info[data-v-34d6a3aa]{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.home-page .promotion-section .promotion-item .promotion-info h3[data-v-34d6a3aa]{font-size:24px;margin-bottom:10px}.home-page .promotion-section .promotion-item .promotion-info p[data-v-34d6a3aa]{font-size:16px;margin-bottom:20px}

1
dist/css/839.7922504b.css

@ -0,0 +1 @@
.bg[data-v-d39f5dce]{display:flex;flex-direction:column}.bg[data-v-d39f5dce] .el-button--text,.bg[data-v-d39f5dce] .el-tabs__item.is-active{color:#6a8a27}.bg[data-v-d39f5dce] .el-tabs__active-bar{background-color:#6a8a27}.bg[data-v-d39f5dce] .el-tabs__item:hover{color:#6a8a27}.filter-bar[data-v-d39f5dce]{margin-bottom:20px}.order-card[data-v-d39f5dce]{border:1px solid #eee;border-radius:4px;margin-bottom:20px;overflow:hidden}.order-header[data-v-d39f5dce]{background-color:#f8f9fa;padding:12px 20px;display:flex;align-items:center;border-bottom:1px solid #eee;color:#666;font-size:14px}.order-products[data-v-d39f5dce]{padding:10px 20px;background:#fff}.product-item[data-v-d39f5dce]{display:flex;align-items:center;padding:15px 0;border-bottom:1px dashed #eee;font-size:14px}.product-item[data-v-d39f5dce]:last-child{border-bottom:none}.product-image[data-v-d39f5dce]{width:80px;height:80px;-o-object-fit:cover;object-fit:cover;margin-right:15px;border-radius:4px}.product-details[data-v-d39f5dce]{flex:1}.product-name[data-v-d39f5dce]{color:#333;margin-bottom:5px}.product-spec[data-v-d39f5dce]{color:#999;font-size:12px}.product-price[data-v-d39f5dce]{width:120px;text-align:center;color:#333}.product-quantity[data-v-d39f5dce]{width:100px;text-align:center;color:#666}.product-total[data-v-d39f5dce]{width:120px;text-align:center;color:#333;font-weight:500}.product-actions[data-v-d39f5dce],.product-status[data-v-d39f5dce]{width:150px;text-align:center}.order-footer[data-v-d39f5dce]{background-color:#f8f9fa;padding:15px 20px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #eee}.order-summary[data-v-d39f5dce]{text-align:right}.order-amount[data-v-d39f5dce]{color:#333;margin-bottom:5px}.order-amount strong[data-v-d39f5dce]{color:#ff4d4f;font-size:16px}.order-tips[data-v-d39f5dce]{font-size:12px;color:#999}.order-actions[data-v-d39f5dce]{display:flex;gap:10px}

1
dist/css/856.669cb47e.css

@ -0,0 +1 @@
.review-container[data-v-64b727d4]{max-width:1000px;margin:0 auto;padding:20px}.page-header[data-v-64b727d4],.product-card[data-v-64b727d4]{margin-bottom:20px}.product-info[data-v-64b727d4]{display:flex;align-items:center;padding:10px 0}.product-image[data-v-64b727d4]{width:120px;height:120px;border-radius:4px;margin-right:20px}.product-details[data-v-64b727d4]{flex:1}.product-title[data-v-64b727d4]{font-size:16px;font-weight:500;margin-bottom:10px;color:#333;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.product-desc[data-v-64b727d4]{color:#666;margin-bottom:10px;font-size:14px}.product-price[data-v-64b727d4]{color:#ff4d4f;font-size:18px}.review-form-card[data-v-64b727d4]{margin-bottom:20px}.rating-stars[data-v-64b727d4]{font-size:24px;color:#ccc}.rating-stars .active[data-v-64b727d4]{color:#f5a623}.rating-stars i[data-v-64b727d4]{cursor:pointer;margin-right:5px;transition:color .2s}.rating-stars i[data-v-64b727d4]:hover{color:#f5a623}.rating-text[data-v-64b727d4]{margin-top:10px;color:#666;font-size:14px}.char-count[data-v-64b727d4]{text-align:right;color:#999;font-size:12px;margin-top:5px}.image-upload[data-v-64b727d4]{margin-bottom:10px}.upload-tip[data-v-64b727d4]{color:#999;font-size:12px}.review-alert[data-v-64b727d4]{margin-top:10px}.anonymous-tip[data-v-64b727d4]{color:#999;font-size:12px;margin-top:5px}@media(max-width:768px){.product-info[data-v-64b727d4]{flex-direction:column;align-items:flex-start}.product-image[data-v-64b727d4]{margin-bottom:15px}}

1
dist/css/906.de7ec92f.css

@ -0,0 +1 @@
.bg[data-v-b4aad32e]{display:flex;flex-direction:column}.bg[data-v-b4aad32e] .el-button--text,.bg[data-v-b4aad32e] .el-tabs__item.is-active{color:#6a8a27}.bg[data-v-b4aad32e] .el-tabs__active-bar{background-color:#6a8a27}.bg[data-v-b4aad32e] .el-tabs__item:hover{color:#6a8a27}.filter-bar[data-v-b4aad32e]{margin-bottom:20px}.order-card[data-v-b4aad32e]{border:1px solid #eee;border-radius:4px;margin-bottom:20px;overflow:hidden}.order-header[data-v-b4aad32e]{background-color:#f8f9fa;padding:12px 20px;display:flex;align-items:center;border-bottom:1px solid #eee;color:#666;font-size:14px}.order-products[data-v-b4aad32e]{padding:10px 20px;background:#fff}.product-item[data-v-b4aad32e]{display:flex;align-items:center;padding:15px 0;border-bottom:1px dashed #eee;font-size:14px}.product-item[data-v-b4aad32e]:last-child{border-bottom:none}.product-image[data-v-b4aad32e]{width:80px;height:80px;-o-object-fit:cover;object-fit:cover;margin-right:15px;border-radius:4px}.product-details[data-v-b4aad32e]{flex:1}.product-name[data-v-b4aad32e]{color:#333;margin-bottom:5px}.product-spec[data-v-b4aad32e]{color:#999;font-size:12px}.product-price[data-v-b4aad32e]{width:120px;text-align:center;color:#333}.product-quantity[data-v-b4aad32e]{width:100px;text-align:center;color:#666}.product-total[data-v-b4aad32e]{width:120px;text-align:center;color:#333;font-weight:500}.product-actions[data-v-b4aad32e],.product-status[data-v-b4aad32e]{width:150px;text-align:center}.order-footer[data-v-b4aad32e]{background-color:#f8f9fa;padding:15px 20px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #eee}.order-summary[data-v-b4aad32e]{text-align:right}.order-amount[data-v-b4aad32e]{color:#333;margin-bottom:5px}.order-amount strong[data-v-b4aad32e]{color:#ff4d4f;font-size:16px}.order-tips[data-v-b4aad32e]{font-size:12px;color:#999}.order-actions[data-v-b4aad32e]{display:flex;gap:10px}

2
dist/css/app.9e5b67dd.css → dist/css/app.5fbd07a4.css

File diff suppressed because one or more lines are too long

2
dist/index.html

@ -1 +1 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>shiweisuzhou</title><script defer="defer" src="/js/chunk-vendors.9c0851b6.js"></script><script defer="defer" src="/js/app.c1905b36.js"></script><link href="/css/chunk-vendors.10dd4e95.css" rel="stylesheet"><link href="/css/app.9e5b67dd.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but shiweisuzhou doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>shiweisuzhou</title><script defer="defer" src="/js/chunk-vendors.9c0851b6.js"></script><script defer="defer" src="/js/app.5f630284.js"></script><link href="/css/chunk-vendors.10dd4e95.css" rel="stylesheet"><link href="/css/app.5fbd07a4.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but shiweisuzhou doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

2
dist/js/179.67a63611.js

@ -1,2 +0,0 @@
"use strict";(self["webpackChunkshiweisuzhou"]=self["webpackChunkshiweisuzhou"]||[]).push([[179],{179:function(e,t,i){i.r(t),i.d(t,{default:function(){return c}});var a=function(){var e=this,t=e._self._c;return t("div",{staticClass:"bg"},[t("el-card",{staticStyle:{width:"100%"}},[t("div",{staticClass:"clearfix flex-between",attrs:{slot:"header"},slot:"header"},[t("span",[e._v("我的发票")]),t("div",{staticClass:"flex-between"},[t("span",{staticStyle:{color:"#666","font-size":"12px"}},[e._v("您已保存了"+e._s(e.invoiceList.length)+"个发票抬头信息,做多可创建5个。")]),t("el-button",{staticStyle:{float:"right"},attrs:{size:"small",type:"primary"},on:{click:function(t){return e.openDialog("add",{})}}},[e._v("新增")])],1)]),t("el-table",{staticStyle:{width:"100%"},attrs:{data:e.invoiceList,border:""}},[t("el-table-column",{attrs:{prop:"invoice_head",label:"发票抬头",width:"120"}}),t("el-table-column",{attrs:{prop:"tax_number",label:"纳税人识别号",width:"200"}}),t("el-table-column",{attrs:{prop:"opening_bank",label:"开户银行","min-width":"180"}}),t("el-table-column",{attrs:{prop:"bank_account",label:"银行账号","min-width":"180"}}),t("el-table-column",{attrs:{label:"操作",width:"200"},scopedSlots:e._u([{key:"default",fn:function(i){return[t("el-button",{attrs:{size:"mini"},on:{click:function(t){return e.openDialog("edit",i.row)}}},[e._v("编辑")]),t("el-button",{attrs:{size:"mini",type:"danger"},on:{click:function(t){return e.handleDelete(i.row)}}},[e._v("删除")])]}}])})],1)],1),t("el-dialog",{attrs:{title:"发票抬头",visible:e.dialogVisible,width:"700px"},on:{"update:visible":function(t){e.dialogVisible=t}}},[t("el-form",{ref:"form",attrs:{model:e.form,"label-width":"120px",size:"small",rules:e.titleRules}},[t("el-form-item",{attrs:{label:"发票抬头",prop:"invoice_head"}},[t("el-input",{attrs:{placeholder:"请填写发票抬头"},model:{value:e.form.invoice_head,callback:function(t){e.$set(e.form,"invoice_head",t)},expression:"form.invoice_head"}})],1),t("el-form-item",{attrs:{label:"纳税人识别号",prop:"tax_number"}},[t("el-input",{attrs:{placeholder:"请填写纳税人识别号"},model:{value:e.form.tax_number,callback:function(t){e.$set(e.form,"tax_number",t)},expression:"form.tax_number"}})],1),t("el-form-item",{attrs:{label:"开户银行",prop:"opening_bank"}},[t("el-input",{attrs:{placeholder:"请填写开户银行"},model:{value:e.form.opening_bank,callback:function(t){e.$set(e.form,"opening_bank",t)},expression:"form.opening_bank"}})],1),t("el-form-item",{attrs:{label:"银行账号",prop:"bank_account"}},[t("el-input",{attrs:{placeholder:"请填写银行账号"},model:{value:e.form.bank_account,callback:function(t){e.$set(e.form,"bank_account",t)},expression:"form.bank_account"}})],1)],1),t("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[t("el-button",{attrs:{size:"small"},on:{click:function(t){e.dialogVisible=!1}}},[e._v("取消")]),t("el-button",{attrs:{size:"small",type:"primary"},on:{click:e.saveInvoiceTitle}},[e._v("保存")])],1)],1)],1)},n=[],l={name:"UserInfo",data(){return{user:{},searchParam:{pageSize:5,currentPage:1,total:10},dialogVisible:!1,invoiceList:[],form:{type:"add",invoice_head:"",tax_number:"",opening_bank:"",bank_account:""},titleRules:{invoice_head:[{required:!0,message:"请输入发票抬头",trigger:"blur"}],tax_number:[{required:!0,message:"请输入纳税人识别号",trigger:"blur"},{pattern:/^[A-Z0-9]{15,20}$/,message:"纳税人识别号格式不正确",trigger:"blur"}],opening_bank:[{required:!0,message:"请输入开户银行",trigger:"blur"}],bank_account:[{required:!0,message:"请输入银行账号",trigger:"blur"}]}}},mounted(){this.getList()},methods:{getList(){this.post({offset:0,limit:5},"/api/enterprise_invoice/index").then(e=>{this.invoiceList=e.data})},handleSizeChange(e){this.searchParam.pageSize=e},handleCurrentChange(e){this.searchParam.currentPage=e},openDialog(e,t){this.form={type:e,id:t.id||"",bank_account:t.bank_account||"",invoice_head:t.invoice_head||"",opening_bank:t.opening_bank||"",tax_number:t.tax_number||""},this.dialogVisible=!0},saveInvoiceTitle(){this.$refs.form.validate(e=>{if(e){let e="add"==this.form.type?"/api/enterprise_invoice/create":"/api/enterprise_invoice/edit";this.post(this.form,e).then(e=>{1==e.code&&(this.getList(),this.$message.success("操作成功"),this.dialogVisible=!1)})}})},handleDelete(e){this.$confirm("此操作将永久删除该发票, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.post({id:e.id},"/api/enterprise_invoice/delete").then(e=>{1==e.code&&(this.getList(),this.$message({type:"success",message:"删除成功!"}))})})}}},r=l,o=i(1656),s=(0,o.A)(r,a,n,!1,null,"89376790",null),c=s.exports}}]);
//# sourceMappingURL=179.67a63611.js.map

2
dist/js/253.6c575ac9.js

File diff suppressed because one or more lines are too long

1
dist/js/253.6c575ac9.js.map

File diff suppressed because one or more lines are too long

2
dist/js/28.7a51a71d.js

File diff suppressed because one or more lines are too long

1
dist/js/28.7a51a71d.js.map

File diff suppressed because one or more lines are too long

2
dist/js/315.010ae2e0.js

@ -0,0 +1,2 @@
"use strict";(self["webpackChunkshiweisuzhou"]=self["webpackChunkshiweisuzhou"]||[]).push([[315],{7315:function(t,n,e){e.r(n),e.d(n,{default:function(){return r}});var i=function(){var t=this,n=t._self._c;return n("div",{staticClass:"announcement-container"},[n("div",{staticClass:"page-title"},[t._v("公告详情")]),n("div",{staticClass:"detail",domProps:{innerHTML:t._s(t.util.formateRichText(t.content))}})])},s=[],c={name:"Announcement",data(){return{content:{}}},created(){this.getAnnouncement()},methods:{getAnnouncement(){this.get({id:this.$route.query.id},"/api/anncmnt/getAnncmntById").then(t=>{1==t.code&&(this.content=t.data.content)})}}},a=c,u=e(1656),o=(0,u.A)(a,i,s,!1,null,"34e6c3de",null),r=o.exports}}]);
//# sourceMappingURL=315.010ae2e0.js.map

1
dist/js/315.010ae2e0.js.map

@ -0,0 +1 @@
{"version":3,"file":"js/315.010ae2e0.js","mappings":"oKAAA,IAAIA,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,cAAc,CAACJ,EAAIK,GAAG,UAAUH,EAAG,MAAM,CAACE,YAAY,SAASE,SAAS,CAAC,UAAYN,EAAIO,GAAGP,EAAIQ,KAAKC,gBAAgBT,EAAIU,cACnQ,EACIC,EAAkB,GCStB,GACAC,KAAA,eACAC,IAAAA,GACA,OACAH,QAAA,GAEA,EACAI,OAAAA,GAEA,KAAAC,iBACA,EACAC,QAAA,CAEAD,eAAAA,GACA,KAAAE,IACA,CACAC,GAAA,KAAAC,OAAAC,MAAAF,IAEA,+BACAG,KAAAC,IACA,GAAAA,EAAAC,OACA,KAAAb,QAAAY,EAAAT,KAAAH,UAGA,ICnCoQ,I,UCQhQc,GAAY,OACd,EACAzB,EACAY,GACA,EACA,KACA,WACA,MAIF,EAAea,E","sources":["webpack://shiweisuzhou/./src/views/notice/noticeDetail.vue","webpack://shiweisuzhou/src/views/notice/noticeDetail.vue","webpack://shiweisuzhou/./src/views/notice/noticeDetail.vue?b35e","webpack://shiweisuzhou/./src/views/notice/noticeDetail.vue?4a16"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"announcement-container\"},[_c('div',{staticClass:\"page-title\"},[_vm._v(\"公告详情\")]),_c('div',{staticClass:\"detail\",domProps:{\"innerHTML\":_vm._s(_vm.util.formateRichText(_vm.content))}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"announcement-container\">\r\n <!-- 页面标题 -->\r\n <div class=\"page-title\">公告详情</div>\r\n\r\n <!-- 公告详情 -->\r\n <div class=\"detail\" v-html=\"util.formateRichText(content)\"></div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"Announcement\",\r\n data() {\r\n return {\r\n content: {}\r\n };\r\n },\r\n created() {\r\n // 初始化加载数据\r\n this.getAnnouncement();\r\n },\r\n methods: {\r\n // 获取公告详情\r\n getAnnouncement() {\r\n this.get(\r\n {\r\n id: this.$route.query.id\r\n },\r\n \"/api/anncmnt/getAnncmntById\"\r\n ).then((res) => {\r\n if (res.code == 1) {\r\n this.content = res.data.content;\r\n }\r\n });\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.announcement-container {\r\n max-width: 1200px;\r\n margin: 0 auto;\r\n padding: 20px;\r\n}\r\n\r\n.page-title {\r\n font-size: 20px;\r\n font-weight: bold;\r\n color: #333;\r\n margin-bottom: 20px;\r\n padding-bottom: 10px;\r\n border-bottom: 1px solid #eee;\r\n}\r\n\r\n.detail {\r\n background: #fff;\r\n padding: 20px;\r\n}\r\n\r\n@media (max-width: 768px) {\r\n .search-input {\r\n width: 100%;\r\n }\r\n\r\n .announcement-header {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n }\r\n\r\n .announcement-date {\r\n margin-top: 5px;\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./noticeDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./noticeDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./noticeDetail.vue?vue&type=template&id=34e6c3de&scoped=true\"\nimport script from \"./noticeDetail.vue?vue&type=script&lang=js\"\nexport * from \"./noticeDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./noticeDetail.vue?vue&type=style&index=0&id=34e6c3de&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"34e6c3de\",\n null\n \n)\n\nexport default component.exports"],"names":["render","_vm","this","_c","_self","staticClass","_v","domProps","_s","util","formateRichText","content","staticRenderFns","name","data","created","getAnnouncement","methods","get","id","$route","query","then","res","code","component"],"sourceRoot":""}

4
dist/js/758.9bf283c8.js → dist/js/331.633619dc.js

File diff suppressed because one or more lines are too long

1
dist/js/331.633619dc.js.map

File diff suppressed because one or more lines are too long

2
dist/js/414.99bac297.js

File diff suppressed because one or more lines are too long

1
dist/js/414.99bac297.js.map

File diff suppressed because one or more lines are too long

2
dist/js/443.953569b3.js

@ -0,0 +1,2 @@
"use strict";(self["webpackChunkshiweisuzhou"]=self["webpackChunkshiweisuzhou"]||[]).push([[443],{5443:function(t,e,n){n.r(e),n.d(e,{default:function(){return l}});var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"announcement-container"},[e("div",{staticClass:"page-title"},[t._v("公告列表")]),e("el-card",{staticClass:"announcement-list-card"},[t._l(t.announcementList,function(n){return e("div",{key:n.id,staticClass:"announcement-item",on:{click:function(e){return t.gotoDetail(n)}}},[e("div",{staticClass:"announcement-header"},[e("div",{staticClass:"announcement-title"},[e("span",{class:{"is-top":n.isTop}},[t._v(t._s(n.title))])]),e("div",{staticClass:"announcement-date"},[t._v(t._s(n.createTime))])]),e("div",{staticClass:"announcement-content text-overflowRows",domProps:{innerHTML:t._s(t.util.formateRichText(n.content))}}),e("div",{staticClass:"announcement-action"},[e("el-button",{attrs:{type:"text"}},[t._v("查看详情")])],1)])}),0===t.announcementList.length?e("div",{staticClass:"empty-state"},[e("el-empty",{attrs:{description:"暂无公告信息"}})],1):t._e()],2),t.total>0?e("div",{staticClass:"pagination-container"},[e("el-pagination",{attrs:{"current-page":t.currentPage,"page-sizes":[5,10,20],"page-size":t.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.total},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange}})],1):t._e()],1)},i=[],s=(n(4114),{name:"AnnouncementList",data(){return{searchKeyword:"",currentPage:1,pageSize:5,total:0,announcementList:[]}},filters:{ellipsis(t,e){return t?t.length<=e?t:t.slice(0,e)+"...":""}},created(){this.getAnnouncementList()},methods:{getAnnouncementList(){this.post({offset:(this.currentPage-1)*this.pageSize,limit:this.pageSize},"/api/anncmnt/getAnncmntByType").then(t=>{1==t.code&&(this.announcementList=t.data.list,this.total=t.data.total)})},handleSearch(){this.currentPage=1,this.getAnnouncementList()},handleSizeChange(t){this.pageSize=t,this.currentPage=1,this.getAnnouncementList()},handleCurrentChange(t){this.currentPage=t,this.getAnnouncementList()},gotoDetail(t){this.$router.push("/NoticeDetail?id="+t.id)}}}),c=s,o=n(1656),r=(0,o.A)(c,a,i,!1,null,"2630b25e",null),l=r.exports}}]);
//# sourceMappingURL=443.953569b3.js.map

1
dist/js/443.953569b3.js.map

File diff suppressed because one or more lines are too long

2
dist/js/467.005a7306.js

File diff suppressed because one or more lines are too long

1
dist/js/467.005a7306.js.map

File diff suppressed because one or more lines are too long

2
dist/js/519.db92619f.js

File diff suppressed because one or more lines are too long

1
dist/js/519.db92619f.js.map

File diff suppressed because one or more lines are too long

2
dist/js/522.154587d0.js

File diff suppressed because one or more lines are too long

1
dist/js/522.154587d0.js.map

File diff suppressed because one or more lines are too long

2
dist/js/612.0689f662.js

@ -0,0 +1,2 @@
"use strict";(self["webpackChunkshiweisuzhou"]=self["webpackChunkshiweisuzhou"]||[]).push([[612],{9231:function(e,t,i){i.r(t),i.d(t,{default:function(){return c}});var a=function(){var e=this,t=e._self._c;return t("div",{staticClass:"bg"},[t("el-card",{staticStyle:{width:"100%"}},[t("div",{staticClass:"clearfix flex-between",attrs:{slot:"header"},slot:"header"},[t("span",[e._v("我的发票")]),t("div",{staticClass:"flex-between"},[t("span",{staticStyle:{color:"#666","font-size":"12px"}},[e._v("您已保存了"+e._s(e.invoiceList.length)+"个发票抬头信息,最多可创建5个。")]),t("el-button",{staticStyle:{float:"right"},attrs:{size:"small",type:"primary"},on:{click:function(t){return e.openDialog("add",{})}}},[e._v("新增")])],1)]),t("el-table",{staticStyle:{width:"100%"},attrs:{data:e.invoiceList,border:""}},[t("el-table-column",{attrs:{prop:"invoice_head",label:"发票抬头",width:"120"}}),t("el-table-column",{attrs:{prop:"tax_number",label:"纳税人识别号",width:"200"}}),t("el-table-column",{attrs:{prop:"opening_bank",label:"开户银行","min-width":"180"}}),t("el-table-column",{attrs:{prop:"bank_account",label:"银行账号","min-width":"180"}}),t("el-table-column",{attrs:{label:"操作",width:"200"},scopedSlots:e._u([{key:"default",fn:function(i){return[t("el-button",{attrs:{size:"mini"},on:{click:function(t){return e.openDialog("edit",i.row)}}},[e._v("编辑")]),t("el-button",{attrs:{size:"mini",type:"danger"},on:{click:function(t){return e.handleDelete(i.row)}}},[e._v("删除")])]}}])})],1)],1),t("el-dialog",{attrs:{title:"发票抬头",visible:e.dialogVisible,width:"700px"},on:{"update:visible":function(t){e.dialogVisible=t}}},[t("el-form",{ref:"form",attrs:{model:e.form,"label-width":"120px",size:"small",rules:e.titleRules}},[t("el-form-item",{attrs:{label:"发票抬头",prop:"invoice_head"}},[t("el-input",{attrs:{placeholder:"请填写发票抬头"},model:{value:e.form.invoice_head,callback:function(t){e.$set(e.form,"invoice_head",t)},expression:"form.invoice_head"}})],1),t("el-form-item",{attrs:{label:"纳税人识别号",prop:"tax_number"}},[t("el-input",{attrs:{placeholder:"请填写纳税人识别号"},model:{value:e.form.tax_number,callback:function(t){e.$set(e.form,"tax_number",t)},expression:"form.tax_number"}})],1),t("el-form-item",{attrs:{label:"开户银行",prop:"opening_bank"}},[t("el-input",{attrs:{placeholder:"请填写开户银行"},model:{value:e.form.opening_bank,callback:function(t){e.$set(e.form,"opening_bank",t)},expression:"form.opening_bank"}})],1),t("el-form-item",{attrs:{label:"银行账号",prop:"bank_account"}},[t("el-input",{attrs:{placeholder:"请填写银行账号"},model:{value:e.form.bank_account,callback:function(t){e.$set(e.form,"bank_account",t)},expression:"form.bank_account"}})],1)],1),t("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[t("el-button",{attrs:{size:"small"},on:{click:function(t){e.dialogVisible=!1}}},[e._v("取消")]),t("el-button",{attrs:{size:"small",type:"primary"},on:{click:e.saveInvoiceTitle}},[e._v("保存")])],1)],1)],1)},n=[],l={name:"UserInfo",data(){return{user:{},searchParam:{pageSize:5,currentPage:1,total:10},dialogVisible:!1,invoiceList:[],form:{type:"add",invoice_head:"",tax_number:"",opening_bank:"",bank_account:""},titleRules:{invoice_head:[{required:!0,message:"请输入发票抬头",trigger:"blur"}],tax_number:[{required:!0,message:"请输入纳税人识别号",trigger:"blur"},{pattern:/^[A-Z0-9]{15,20}$/,message:"纳税人识别号格式不正确",trigger:"blur"}],opening_bank:[{required:!0,message:"请输入开户银行",trigger:"blur"}],bank_account:[{required:!0,message:"请输入银行账号",trigger:"blur"}]}}},mounted(){this.getList()},methods:{getList(){this.post({offset:0,limit:5},"/api/enterprise_invoice/index").then(e=>{this.invoiceList=e.data})},handleSizeChange(e){this.searchParam.pageSize=e},handleCurrentChange(e){this.searchParam.currentPage=e},openDialog(e,t){this.form={type:e,id:t.id||"",bank_account:t.bank_account||"",invoice_head:t.invoice_head||"",opening_bank:t.opening_bank||"",tax_number:t.tax_number||""},this.dialogVisible=!0},saveInvoiceTitle(){this.$refs.form.validate(e=>{if(e){let e="add"==this.form.type?"/api/enterprise_invoice/create":"/api/enterprise_invoice/edit";this.post(this.form,e).then(e=>{1==e.code&&(this.getList(),this.$message.success("操作成功"),this.dialogVisible=!1)})}})},handleDelete(e){this.$confirm("此操作将永久删除该发票, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.post({id:e.id},"/api/enterprise_invoice/delete").then(e=>{1==e.code&&(this.getList(),this.$message({type:"success",message:"删除成功!"}))})})}}},r=l,o=i(1656),s=(0,o.A)(r,a,n,!1,null,"0c50ce5c",null),c=s.exports}}]);
//# sourceMappingURL=612.0689f662.js.map

2
dist/js/179.67a63611.js.map → dist/js/612.0689f662.js.map

File diff suppressed because one or more lines are too long

1
dist/js/758.9bf283c8.js.map

File diff suppressed because one or more lines are too long

2
dist/js/779.220d32b4.js

File diff suppressed because one or more lines are too long

1
dist/js/779.220d32b4.js.map

File diff suppressed because one or more lines are too long

2
dist/js/789.d1b1b886.js

File diff suppressed because one or more lines are too long

1
dist/js/789.d1b1b886.js.map

File diff suppressed because one or more lines are too long

1
dist/js/828.630aafc0.js.map

File diff suppressed because one or more lines are too long

4
dist/js/828.630aafc0.js → dist/js/828.deb87761.js

File diff suppressed because one or more lines are too long

1
dist/js/828.deb87761.js.map

File diff suppressed because one or more lines are too long

2
dist/js/839.168e7d6e.js

File diff suppressed because one or more lines are too long

1
dist/js/839.168e7d6e.js.map

File diff suppressed because one or more lines are too long

2
dist/js/856.74bafc60.js

File diff suppressed because one or more lines are too long

1
dist/js/856.74bafc60.js.map

File diff suppressed because one or more lines are too long

2
dist/js/906.f111d15e.js

File diff suppressed because one or more lines are too long

1
dist/js/906.f111d15e.js.map

File diff suppressed because one or more lines are too long

2
dist/js/926.ffbed7b8.js

File diff suppressed because one or more lines are too long

1
dist/js/926.ffbed7b8.js.map

File diff suppressed because one or more lines are too long

2
dist/js/app.5f630284.js

File diff suppressed because one or more lines are too long

1
dist/js/app.5f630284.js.map

File diff suppressed because one or more lines are too long

2
dist/js/app.c1905b36.js

File diff suppressed because one or more lines are too long

1
dist/js/app.c1905b36.js.map

File diff suppressed because one or more lines are too long

3
src/App.vue

@ -28,7 +28,7 @@
<Footer v-if="$route.name !== 'Register'" />
<!-- 回到顶部按钮 -->
<BackToTop />
<!-- <BackToTop /> -->
</div>
</template>
@ -67,6 +67,7 @@ export default {
min-height: 100vh;
display: flex;
flex-direction: column;
background: #ecf2df;
}
.main-container {

25
src/components/layout/HomeLayout.vue

@ -54,14 +54,14 @@
<i class="icon el-icon-goods"></i>
<span>我的订单</span>
</router-link>
<!-- <router-link to="/User/ViewHistory" class="icon-item">
<router-link to="/User/CommentManage" class="icon-item">
<i class="icon el-icon-star-off"></i>
<span>我的收藏</span>
</router-link> -->
<!-- <router-link to="/User/UserCenter" class="icon-item">
<span>评价管理</span>
</router-link>
<router-link to="/NoticeList" class="icon-item">
<i class="icon el-icon-pie-chart"></i>
<span>议价单</span>
</router-link> -->
<span>公告中心</span>
</router-link>
</div>
<div class="announcement">
@ -112,6 +112,7 @@ export default {
background-color: #f8f9fa;
padding: 20px 0;
box-sizing: border-box;
border-radius: 10px 0 0 10px;
}
.nav-list {
list-style: none;
@ -133,7 +134,8 @@ export default {
.nav-item:hover {
background-color: #e9ecef;
padding-left: 25px;
color: #c7000b;
color: #fff;
background: #6a8a27;
}
/* 中间主内容样式 */
@ -161,6 +163,7 @@ export default {
flex-direction: column;
align-items: center;
border-left: 1px solid #eee;
border-radius: 0 10px 10px 0;
}
.avatar-container {
display: flex;
@ -188,8 +191,9 @@ export default {
.func-icons {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
width: 100%;
margin-bottom: 30px;
margin-bottom: 10px;
padding: 10px 0;
border-top: 1px dashed #eee;
border-bottom: 1px dashed #eee;
@ -201,7 +205,10 @@ export default {
cursor: pointer;
color: #666;
transition: color 0.3s ease;
width: 50px;
width: 50%;
}
.icon-item:nth-child(n+3) {
margin-top: 20px;
}
.icon-item:hover {
color: #1890ff;

298
src/components/product/Evaluate.vue

@ -1,7 +1,7 @@
<template>
<div class="product-review-section">
<!-- 评分与筛选 -->
<div class="review-header">
<div class="review-header" v-if="false">
<div class="rating-box">
<div class="rating-score">{{ averageScore }} </div>
<div class="rating-text">综合评分 ( {{ totalReviews }} )</div>
@ -50,36 +50,37 @@
<div class="review-list">
<div
class="review-item"
v-for="(review, index) in currentPageReviews"
v-for="(review, index) in reviews"
:key="review.id"
>
<div class="user-info">
<img
class="avatar"
:src="review.avatar"
:alt="review.userName + '的头像'"
/>
<div class="user-name">{{ review.userName }}</div>
<img class="avatar" :src="review.user.user" />
<div class="user-name">{{ review.user.nickname }}</div>
<div class="rating-stars">
<!-- 动态渲染星级 -->
<span v-for="star in 5" :key="star">
{{ star <= review.rating ? "★" : "☆" }}
{{ star <= review.rate ? "★" : "☆" }}
</span>
</div>
</div>
<div class="review-content" :class="{ empty: !review.content }">
{{ review.content || "该用户没有填写评价内容" }}
</div>
<div
class="review-content"
:class="{ empty: !review.content }"
v-html="util.formateRichText(review.content)"
></div>
<!-- 评价图片 - 有图片才显示 -->
<div class="review-images" v-if="review.images && review.images.length">
<div
class="review-images"
v-if="review.img_list.split(',') && review.img_list.split(',').length"
>
<img
v-for="(img, imgIndex) in review.images"
v-for="(img, imgIndex) in review.img_list.split(',')"
:key="imgIndex"
:src="img"
:alt="`${review.userName}的评价图片${imgIndex + 1}`"
@click="openPreview(review.images, imgIndex)"
:alt="`${review.nickname}的评价图片${imgIndex + 1}`"
@click="openPreview(review.img_list.split(','), imgIndex)"
/>
</div>
@ -87,13 +88,13 @@
</div>
<!-- 空状态提示 -->
<div class="empty-state" v-if="filteredReviews.length === 0">
<div class="empty-state" v-if="reviews.length === 0">
<el-empty description="暂无符合条件的评价"></el-empty>
</div>
</div>
<!-- Element UI 分页组件 -->
<div class="pagination-container" v-if="filteredReviews.length > 0">
<div class="pagination-container" v-if="total > 0">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
@ -101,7 +102,7 @@
:page-sizes="[5, 10, 20]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="filteredReviews.length"
:total="total"
></el-pagination>
</div>
@ -165,249 +166,38 @@ export default {
currentPage: 1, //
pageSize: 10, // 10
// 15
reviews: [
{
id: 1,
userName: "张**",
avatar: "https://picsum.photos/id/64/40/40",
rating: 5,
content:
"商品质量很好,超出预期,非常满意的一次购物体验!包装很用心,完全没有损坏,会回购的。",
images: [
"https://picsum.photos/id/26/80/80",
"https://picsum.photos/id/292/80/80",
],
time: "2023-10-15 14:30:22",
},
{
id: 2,
userName: "李**",
avatar: "https://picsum.photos/id/65/40/40",
rating: 4,
content: "总体不错,就是物流有点慢,其他都还好,给个四星吧",
images: [],
time: "2023-10-14 09:15:47",
},
{
id: 3,
userName: "王**",
avatar: "https://picsum.photos/id/66/40/40",
rating: 5,
content: "", //
images: ["https://picsum.photos/id/431/80/80"],
time: "2023-10-13 20:45:11",
},
{
id: 4,
userName: "赵**",
avatar: "https://picsum.photos/id/67/40/40",
rating: 2,
content: "不太满意,和描述的有点差距,希望商家能改进",
images: [],
time: "2023-10-12 16:20:33",
},
{
id: 5,
userName: "陈**",
avatar: "https://picsum.photos/id/68/40/40",
rating: 5,
content: "第二次购买了,品质一如既往的好,推荐给大家!",
images: [
"https://picsum.photos/id/102/80/80",
"https://picsum.photos/id/103/80/80",
"https://picsum.photos/id/104/80/80",
],
time: "2023-10-11 11:05:59",
},
{
id: 6,
userName: "刘**",
avatar: "https://picsum.photos/id/69/40/40",
rating: 3,
content: "一般般吧,没有特别惊艳的地方,价格还算合理",
images: [],
time: "2023-10-10 18:30:15",
},
{
id: 7,
userName: "黄**",
avatar: "https://picsum.photos/id/70/40/40",
rating: 5,
content: "包装精美,送礼自用都合适,性价比很高",
images: ["https://picsum.photos/id/105/80/80"],
time: "2023-10-09 08:45:27",
},
{
id: 8,
userName: "周**",
avatar: "https://picsum.photos/id/71/40/40",
rating: 4,
content: "东西不错,物流很快,客服态度也好",
images: ["https://picsum.photos/id/106/80/80"],
time: "2023-10-08 15:22:10",
},
{
id: 9,
userName: "吴**",
avatar: "https://picsum.photos/id/72/40/40",
rating: 5,
content: "非常满意,推荐购买!",
images: [],
time: "2023-10-07 10:15:33",
},
{
id: 10,
userName: "郑**",
avatar: "https://picsum.photos/id/73/40/40",
rating: 1,
content: "很差的购物体验,不会再买了",
images: [],
time: "2023-10-06 19:40:25",
},
{
id: 11,
userName: "孙**",
avatar: "https://picsum.photos/id/74/40/40",
rating: 5,
content: "质量很好,和图片描述一致,值得购买",
images: [
"https://picsum.photos/id/107/80/80",
"https://picsum.photos/id/108/80/80",
],
time: "2023-10-05 09:20:18",
},
{
id: 12,
userName: "徐**",
avatar: "https://picsum.photos/id/75/40/40",
rating: 4,
content: "不错的商品,推荐给朋友了",
images: [],
time: "2023-10-04 16:50:47",
},
{
id: 13,
userName: "马**",
avatar: "https://picsum.photos/id/76/40/40",
rating: 5,
content: "很好用,已经回购多次",
images: ["https://picsum.photos/id/109/80/80"],
time: "2023-10-03 14:30:55",
},
{
id: 14,
userName: "朱**",
avatar: "https://picsum.photos/id/77/40/40",
rating: 3,
content: "还行吧,没有想象中好",
images: [],
time: "2023-10-02 11:15:32",
},
{
id: 15,
userName: "胡**",
avatar: "https://picsum.photos/id/78/40/40",
rating: 5,
content: "非常满意的一次购物,五星推荐!",
images: [
"https://picsum.photos/id/110/80/80",
"https://picsum.photos/id/111/80/80",
],
time: "2023-10-01 08:40:17",
},
],
reviews: [],
total: 0,
loading: false, //
//
previewVisible: false, //
previewImages: [], //
previewIndex: 0, //
};
},
computed: {
//
totalReviews() {
return this.reviews.length;
},
//
hasImageCount() {
return this.reviews.filter(
(review) => review.images && review.images.length
).length;
},
// (4-5)
goodReviewsCount() {
return this.reviews.filter((review) => review.rating >= 4).length;
},
// (3)
mediumReviewsCount() {
return this.reviews.filter((review) => review.rating === 3).length;
},
// (1-2)
badReviewsCount() {
return this.reviews.filter((review) => review.rating <= 2).length;
},
//
averageScore() {
const sum = this.reviews.reduce(
(total, review) => total + review.rating,
0
);
return (sum / this.totalReviews).toFixed(1);
},
//
filteredReviews() {
let result = [...this.reviews];
//
switch (this.activeFilter) {
case "image":
result = result.filter(
(review) => review.images && review.images.length
);
break;
case "good":
result = result.filter((review) => review.rating >= 4);
break;
case "medium":
result = result.filter((review) => review.rating === 3);
break;
case "bad":
result = result.filter((review) => review.rating <= 2);
break;
default:
//
break;
}
return result;
},
//
currentPageReviews() {
const startIndex = (this.currentPage - 1) * this.pageSize;
const endIndex = startIndex + this.pageSize;
return this.filteredReviews.slice(startIndex, endIndex);
},
},
mounted() {
this.getList()
this.getList();
},
methods: {
//
getList() {
this.get({
product_id: this.id,
offset: 0,
limit: 999
}, '/api/product/product_comment_list').then(res => {
})
this.loading = true;
this.get(
{
product_id: this.id,
offset: (this.currentPage - 1) * this.pageSize,
limit: this.pageSize,
},
"/api/product/product_comment_list"
)
.then((res) => {
this.reviews = res.data.list;
this.total = res.data.total;
this.loading = false;
})
.catch(() => {
this.loading = false;
});
},
//
handleFilterChange(filterType) {
@ -418,14 +208,16 @@ export default {
//
handleSizeChange(val) {
this.pageSize = val;
this.currentPage = 1; //
this.currentPage = 1;
this.getList();
},
//
handleCurrentChange(val) {
this.currentPage = val;
this.getList();
//
document.querySelector(".review-list").scrollIntoView({
document.querySelector(".review-list")?.scrollIntoView({
behavior: "smooth",
});
},

2
src/components/product/ProductList.vue

@ -80,6 +80,8 @@ export default {
overflow: hidden;
transition: all 0.3s ease;
padding: 10px;
background: #ffffff;
border-radius: 10px;
&:hover {
transform: translateY(-5px);

18
src/router/index.js

@ -82,6 +82,24 @@ const router = new Router({
},
component: () => import('@/views/ProductPage/ProductReview.vue')
},
{
path: '/NoticeList',
name: 'NoticeList',
meta: {
title: '公告列表',
keepAlive: false
},
component: () => import('@/views/notice/noticeList.vue')
},
{
path: '/NoticeDetail',
name: 'NoticeDetail',
meta: {
title: '公告详情',
keepAlive: false
},
component: () => import('@/views/notice/noticeDetail.vue')
},
// {
// path: '/category/:id?',
// name: 'Category',

1
src/store/index.js

@ -124,6 +124,7 @@ export default new Vuex.Store({
"/api/cart/add_sku"
).then((res) => {
if (res) {
Vue.prototype.$message.success("购物车添加成功!");
// 添加成功后重新获取购物车数量
return dispatch('fetchCartCount')
}

63
src/views/Order/Index.vue

@ -187,7 +187,7 @@
配送地{{ selectedAddress.address }}<br />
交货地{{ selectedAddress.address }} {{ selectedAddress.phone }}
</p>
<el-button type="primary" class="submit-btn" @click="submitOrder">
<el-button type="primary" class="submit-btn" @click="openDialogs">
提交订单
</el-button>
</div>
@ -250,6 +250,26 @@
<el-button type="primary" @click="saveInvoiceTitle">确定</el-button>
</div>
</el-dialog>
<!-- 确认弹窗 -->
<el-dialog
title="《电子企业采购契约》"
:visible.sync="showConfirmDialog"
:modal="true"
:close-on-click-modal="false"
:show-close="true"
width="700px"
class="confirm-dialog"
>
<div
class="contract-content"
v-html="util.formateRichText(content)"
></div>
<div slot="footer" class="dialog-footer">
<el-button @click="showConfirmDialog = false">取消</el-button>
<el-button type="primary" @click="submitOrder">同意并提交</el-button>
</div>
</el-dialog>
</div>
</template>
@ -318,6 +338,8 @@ export default {
{ required: true, message: "请输入银行账号", trigger: "blur" },
],
},
showConfirmDialog: false,
content: "",
};
},
computed: {
@ -598,9 +620,8 @@ export default {
//
this.getPost();
},
//
submitOrder() {
//
openDialogs() {
if (!this.selectedAddress.id) {
this.$message.warning("请先选择收货地址");
return;
@ -612,6 +633,24 @@ export default {
return;
}
this.post(
{
id: 19,
},
"/api/pbservice/Other/getDictionary"
).then((res) => {
this.content = res.data[0].content;
this.showConfirmDialog = true;
});
},
//
submitOrder() {
this.$loading({
lock: true,
text: "订单处理中...",
spinner: "el-icon-loading",
});
let goods = [];
this.orderGroups.forEach((group, groupIndex) => {
group.items.forEach((item, itemIndex) => {
@ -637,6 +676,7 @@ export default {
},
"/api/order/create"
).then((res) => {
this.$loading().close();
if (res.code == 1) {
this.post(
{
@ -646,8 +686,9 @@ export default {
},
"/api/order/pay"
).then((res) => {
this.clearOrderData();
this.showConfirmDialog = false;
if (res.code == 1) {
this.clearOrderData();
this.$message.success("订单提交成功!");
this.$router.push("/User/OrderList");
}
@ -1022,5 +1063,17 @@ export default {
}
}
}
.contract-content {
color: #666;
line-height: 1.8;
font-size: 14px;
overflow-y: auto;
max-height: 60vh;
}
.dialog-footer {
text-align: center;
}
</style>

124
src/views/ProductPage/ProductReview.vue

@ -11,15 +11,15 @@
<el-card class="product-card" shadow="hover">
<div class="product-info">
<el-image
:src="productImage"
:src="product.product_img"
alt="产品图片"
class="product-image"
fit="cover"
></el-image>
<div class="product-details">
<h3 class="product-title">{{ productTitle }}</h3>
<h3 class="product-title">{{ product.product_title }}</h3>
<p class="product-desc">{{ productDesc }}</p>
<div class="product-price">{{ productPrice }}</div>
<div class="product-price">{{ product.product_price / 100 }}</div>
</div>
</div>
</el-card>
@ -34,13 +34,13 @@
class="review-form"
>
<!-- 产品评分 -->
<el-form-item label="产品评分" prop="rating">
<el-form-item label="产品评分" prop="rate">
<div class="rating-stars">
<i
v-for="star in 5"
:key="star"
class="el-icon-star-off"
:class="{ active: star <= (hoverRating || reviewForm.rating) }"
:class="{ active: star <= (hoverRating || reviewForm.rate) }"
@click="setRating(star)"
@mouseover="hoverRating = star"
@mouseleave="hoverRating = 0"
@ -75,7 +75,7 @@
:on-exceed="handleExceed"
:auto-upload="false"
:on-change="handleAvatarChange"
v-model="reviewForm.images"
v-model="reviewForm.img_list"
class="image-upload"
>
<i class="el-icon-plus"></i>
@ -88,15 +88,15 @@
</div>
</el-form-item>
<el-form-item label="匿名设置">
<!-- <el-form-item label="匿名设置">
<el-switch
v-model="reviewForm.anonymous"
v-model="reviewForm.is_anonymous"
active-text="匿名评价"
inactive-text="公开评价"
:active-color="'#1890ff'"
></el-switch>
<div class="anonymous-tip">匿名评价将隐藏您的个人信息</div>
</el-form-item>
</el-form-item> -->
<!-- 提交按钮 -->
<el-form-item>
@ -124,17 +124,15 @@ export default {
data() {
return {
//
productImage: "https://picsum.photos/400/400?random=1",
productTitle: "产品标题产品标题产品标题",
product: {},
productDesc: "其他买家,需要你的建议哦!",
productPrice: 99.0,
//
reviewForm: {
rating: 0, //
rate: 0, //
content: "", //
images: [], //
anonymous: false,
img_list: [], //
is_anonymous: false,
},
//
@ -148,9 +146,7 @@ export default {
//
reviewRules: {
rating: [
{ required: true, message: "请给产品评分", trigger: "change" },
],
rate: [{ required: true, message: "请给产品评分", trigger: "change" }],
content: [
{ required: true, message: "请输入评价内容", trigger: "blur" },
{ min: 10, message: "评价内容至少10个字符", trigger: "blur" },
@ -159,6 +155,17 @@ export default {
},
};
},
mounted() {
console.log(this.$route.query);
let product = JSON.parse(this.$route.query.product) || {};
if (product) {
this.product = product;
} else {
this.$message.error("未获取到商品信息,请重新操作");
this.$router.go(-1);
}
console.log(this.product);
},
methods: {
handleAvatarChange(file, fileList) {
console.log(file, fileList);
@ -172,14 +179,14 @@ export default {
//
setRating(star) {
this.reviewForm.rating = star;
this.reviewForm.rate = star;
this.hoverRating = star;
},
//
getRatingText(rating) {
getRatingText(rate) {
const ratings = ["", "很差", "一般", "良好", "很好", "非常好"];
return ratings[rating];
return ratings[rate];
},
//
@ -220,27 +227,64 @@ export default {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
//
this.imgList.map((file) => {
console.log(file);
this.util.imgToBase64(file.raw).then((base64) => {
this.post(
{
img_base64: base64,
},
"/api/pbservice/Other/base64Upload"
).then((res) => {
console.log(res);
});
});
//
this.$loading({
lock: true,
text: "处理中...",
spinner: "el-icon-loading",
});
// API
// setTimeout(() => {
// this.$loading().close();
// this.$message.success("");
// this.handleBack();
// }, 1500);
//
const handleImageUploads = () => {
// Promise
if (this.imgList.length === 0) {
return Promise.resolve([]);
}
// URL
const uploadPromises = this.imgList.map((file) => {
return this.util
.imgToBase64(file.raw)
.then((base64) => {
return this.post(
{ img_base64: base64 },
"/api/pbservice/Other/base64Upload"
);
})
.then((res) => res.data.url);
});
return Promise.all(uploadPromises);
};
//
handleImageUploads()
.then((imgUrls) => {
//
const reviewData = {
product_id: this.product.product_id,
order_id: this.product.order_id,
content: this.reviewForm.content,
rate: this.reviewForm.rate,
img_list: imgUrls.join(","), //
is_anonymous: this.reviewForm.is_anonymous ? 1 : 0,
sku_id: this.product.sku_id,
};
//
return this.post(reviewData, "/api/product/product_comment");
})
.then((res) => {
if (res.code == 1) {
this.$loading().close();
this.$message.success("评价提交成功!");
this.handleBack();
}
})
.catch((error) => {
this.$loading().close();
this.$message.error("提交失败,请重试");
console.error("提交错误:", error);
});
} else {
this.$message.error("请完善评价信息");
return false;

10
src/views/User/CommentManage.vue

@ -145,7 +145,7 @@
<el-button
type="text"
size="mini"
@click="gotoDetail(product)"
@click="gotoReview(product)"
v-if="product.state == 'WAIT_COMMENT'"
>
去评价</el-button
@ -329,11 +329,8 @@ export default {
},
//
gotoReview(orderId) {
this.$message({
message: `去评价订单 ${orderId}`,
type: "info",
});
gotoReview(product) {
this.$router.push("/ProductReview?product=" + JSON.stringify(product));
},
//
@ -390,6 +387,7 @@ export default {
/* 订单商品列表 */
.order-products {
padding: 10px 20px;
background: #fff;
}
.product-item {

67
src/views/User/OrderList.vue

@ -145,7 +145,7 @@
<el-button
type="text"
size="mini"
@click="gotoDetail(product)"
@click="gotoReview(product)"
v-if="product.state == 'WAIT_COMMENT'"
>
去评价</el-button
@ -173,6 +173,20 @@
@click="viewOrderDetail(order.order_id)"
>订单详情</el-button
>
<el-button
type="text"
size="mini"
v-if="['WAIT_POST', 'WAIT_USE', 'PAID'].includes(order.state)"
@click="refund(order.order_id)"
>取消订单</el-button
>
<el-button
type="text"
size="mini"
v-if="['UNPAID'].includes(order.state)"
@click="closeOrder(order.order_id)"
>关闭订单</el-button
>
<el-button
v-if="order.state === 'WAIT_PAYMENT'"
type="primary"
@ -194,13 +208,6 @@
@click="checkLogistics(order.id)"
>查看物流</el-button
>
<!-- <el-button
v-if="order.state === 'WAIT_COMMENT'"
type="text"
size="mini"
@click="gotoReview(order.id)"
>去评价</el-button
> -->
</div>
</div>
</div>
@ -265,6 +272,42 @@ export default {
this.getList();
},
methods: {
//
closeOrder(id) {
this.$confirm("是否关闭订单?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.post({ order_id: id }, "/api/order/close").then((res) => {
if (res.code == 1) {
this.getList();
this.$message({
type: "success",
message: "订单关闭成功!",
});
}
});
});
},
//
refund(id) {
this.$confirm("是否取消订单?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.post({ order_id: id }, "/api/order/refund").then((res) => {
if (res.code == 1) {
this.getList();
this.$message({
type: "success",
message: "订单取消成功!",
});
}
});
});
},
gotoDetail(item) {
this.$router.push("/Detail/" + item.product_id);
},
@ -367,11 +410,8 @@ export default {
},
//
gotoReview(orderId) {
this.$message({
message: `去评价订单 ${orderId}`,
type: "info",
});
gotoReview(product) {
this.$router.push("/ProductReview?product=" + JSON.stringify(product));
},
//
@ -428,6 +468,7 @@ export default {
/* 订单商品列表 */
.order-products {
padding: 10px 20px;
background: #fff;
}
.product-item {

66
src/views/User/ShoppingCart.vue

@ -52,7 +52,11 @@
><span style="opacity: 0">全选</span></el-checkbox
>
</div>
<div class="product-details flex-between">
<div
class="product-details flex-between"
@click="gotoDetail(goods.product.id)"
style="cursor: pointer"
>
<img :src="goods.product.headimg" class="product-image" />
<div class="product-details">
<div class="product-name">{{ goods.product.title }}</div>
@ -166,6 +170,10 @@ export default {
},
methods: {
...mapActions(["submitOrderData"]),
//
gotoDetail(id) {
this.$router.push("/Detail/" + id);
},
//
handleCheckout() {
//
@ -194,20 +202,18 @@ export default {
this.$router.push("/Order");
},
getList() {
this.post({ }, "/api/cart/get_list", true).then(
(res) => {
let resData = res.data || [];
let currentSelectGoodsIds = this.selectedRows.map((v) => v.id);
resData.forEach((item) => {
item.selected = false;
item.goods.forEach((goods) => {
goods.selected = currentSelectGoodsIds.includes(goods.id);
});
this.post({}, "/api/cart/get_list", true).then((res) => {
let resData = res.data || [];
let currentSelectGoodsIds = this.selectedRows.map((v) => v.id);
resData.forEach((item) => {
item.selected = false;
item.goods.forEach((goods) => {
goods.selected = currentSelectGoodsIds.includes(goods.id);
});
this.list = resData;
this.judgeSelectAll();
}
);
});
this.list = resData;
this.judgeSelectAll();
});
},
handleSelectAll(val) {
if (val) {
@ -221,8 +227,11 @@ export default {
});
});
} else {
this.cartList.forEach((t) => {
this.list.forEach((t) => {
t.selected = false;
t.goods.forEach((v) => {
v.selected = false;
});
});
}
this.judgeSelectAll();
@ -230,11 +239,7 @@ export default {
handleSelectShop(shop) {
if (shop.selected) {
shop.goods.forEach((v) => {
if (v && v.product && v.sku && v.sku.flag == "off") {
v.selected = false;
} else {
v.selected = true;
}
v.selected = false;
});
} else {
shop.goods.forEach((v) => {
@ -269,27 +274,21 @@ export default {
//
handleNumChange(goods) {
this.post(
{ id: goods.id, num: goods.num },
"/api/cart/update_sku"
).then((res) => {});
this.post({ id: goods.id, num: goods.num }, "/api/cart/update_sku").then(
(res) => {}
);
},
delItem(item) {
this.post(
{ id: item.id },
"/api/cart/del_sku"
).then((res) => {
this.post({ id: item.id }, "/api/cart/del_sku").then((res) => {
this.getList();
});
},
deleteSelected() {
let ids = this.selectedRows.map((v) => v.id).join(",");
this.post({ ids: ids }, "/api/cart/del_skus").then(
(res) => {
this.getList();
}
);
this.post({ id: ids }, "/api/cart/del_sku").then((res) => {
this.getList();
});
},
//
@ -352,6 +351,7 @@ export default {
/* 订单商品列表 */
.order-products {
padding: 10px 20px;
background: #fff;
}
.product-item {

2
src/views/User/UserInvoice.vue

@ -7,7 +7,7 @@
<span style="color: #666; font-size: 12px"
>您已保存了{{
invoiceList.length
}}个发票抬头信息多可创建5个</span
}}个发票抬头信息多可创建5个</span
>
<el-button
size="small"

76
src/views/notice/noticeDetail.vue

@ -0,0 +1,76 @@
<template>
<div class="announcement-container">
<!-- 页面标题 -->
<div class="page-title">公告详情</div>
<!-- 公告详情 -->
<div class="detail" v-html="util.formateRichText(content)"></div>
</div>
</template>
<script>
export default {
name: "Announcement",
data() {
return {
content: {}
};
},
created() {
//
this.getAnnouncement();
},
methods: {
//
getAnnouncement() {
this.get(
{
id: this.$route.query.id
},
"/api/anncmnt/getAnncmntById"
).then((res) => {
if (res.code == 1) {
this.content = res.data.content;
}
});
},
},
};
</script>
<style scoped>
.announcement-container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.page-title {
font-size: 20px;
font-weight: bold;
color: #333;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
.detail {
background: #fff;
padding: 20px;
}
@media (max-width: 768px) {
.search-input {
width: 100%;
}
.announcement-header {
flex-direction: column;
align-items: flex-start;
}
.announcement-date {
margin-top: 5px;
}
}
</style>

243
src/views/notice/noticeList.vue

@ -0,0 +1,243 @@
<template>
<div class="announcement-container">
<!-- 页面标题 -->
<div class="page-title">公告列表</div>
<!-- 公告列表 -->
<el-card class="announcement-list-card">
<div
class="announcement-item"
v-for="item in announcementList"
:key="item.id"
@click="gotoDetail(item)"
>
<div class="announcement-header">
<div class="announcement-title">
<span :class="{ 'is-top': item.isTop }">{{ item.title }}</span>
</div>
<div class="announcement-date">{{ item.createTime }}</div>
</div>
<div
class="announcement-content text-overflowRows"
v-html="util.formateRichText(item.content)"
></div>
<div class="announcement-action">
<el-button type="text">查看详情</el-button>
</div>
</div>
<!-- 空状态 -->
<div class="empty-state" v-if="announcementList.length === 0">
<el-empty description="暂无公告信息"></el-empty>
</div>
</el-card>
<!-- 分页 -->
<div class="pagination-container" v-if="total > 0">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[5, 10, 20]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</div>
</template>
<script>
export default {
name: "AnnouncementList",
data() {
return {
//
searchKeyword: "",
//
currentPage: 1,
pageSize: 5,
total: 0,
//
announcementList: [],
};
},
filters: {
//
ellipsis(value, length) {
if (!value) return "";
if (value.length <= length) return value;
return value.slice(0, length) + "...";
},
},
created() {
//
this.getAnnouncementList();
},
methods: {
//
getAnnouncementList() {
this.post(
{
offset: (this.currentPage - 1) * this.pageSize,
limit: this.pageSize,
},
"/api/anncmnt/getAnncmntByType"
).then((res) => {
if (res.code == 1) {
this.announcementList = res.data.list;
this.total = res.data.total;
}
});
},
//
handleSearch() {
this.currentPage = 1; //
this.getAnnouncementList();
},
//
handleSizeChange(val) {
this.pageSize = val;
this.currentPage = 1;
this.getAnnouncementList();
},
//
handleCurrentChange(val) {
this.currentPage = val;
this.getAnnouncementList();
},
//
gotoDetail(item) {
this.$router.push("/NoticeDetail?id=" + item.id);
},
},
};
</script>
<style scoped>
.announcement-container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.page-title {
font-size: 20px;
font-weight: bold;
color: #333;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
.search-bar {
margin-bottom: 20px;
}
.search-input {
width: 400px;
}
.announcement-list-card {
border-radius: 4px;
}
.announcement-item {
padding: 15px 0;
border-bottom: 1px dashed #eee;
transition: background-color 0.2s;
cursor: pointer;
}
.announcement-item:last-child {
border-bottom: none;
}
.announcement-item:hover {
background-color: #f9f9f9;
}
.announcement-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.announcement-title {
display: flex;
align-items: center;
font-weight: 500;
color: #333;
}
.announcement-title .is-top {
color: #e6a23c;
}
.announcement-title .el-tag {
margin-left: 10px;
}
.announcement-date {
color: #999;
font-size: 12px;
}
.announcement-content {
color: #666;
line-height: 1.6;
margin-bottom: 10px;
}
.announcement-action {
text-align: right;
}
.empty-state {
padding: 50px 0;
}
.pagination-container {
margin-top: 20px;
text-align: right;
}
/* 详情弹窗样式 */
.detail-meta {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
color: #999;
font-size: 12px;
}
.detail-text {
line-height: 1.8;
color: #333;
}
@media (max-width: 768px) {
.search-input {
width: 100%;
}
.announcement-header {
flex-direction: column;
align-items: flex-start;
}
.announcement-date {
margin-top: 5px;
}
}
</style>
Loading…
Cancel
Save