serviceAgreement.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <template>
  2. <view class="container">
  3. <!-- 内容区域 -->
  4. <scroll-view class="content" scroll-y>
  5. <view class="agreement-list">
  6. <view class="agreement-item" v-for="(item, index) in agreementList" :key="index" @click="goToDetail(item)">
  7. <text class="agreement-name">{{ item.name }}</text>
  8. <text class="arrow-right">></text>
  9. </view>
  10. </view>
  11. </scroll-view>
  12. </view>
  13. </template>
  14. <script>
  15. import { getServiceAgreementList } from '@/api-js/serviceAgreement'
  16. export default {
  17. data() {
  18. return {
  19. agreementList: [
  20. { id: 1, name: '用户服务协议', type: 'userService' },
  21. { id: 2, name: '用户注册协议', type: 'userRegister' },
  22. { id: 3, name: '隐私政策保护', type: 'privacy' }
  23. ]
  24. }
  25. },
  26. onLoad() {
  27. this.loadAgreementList()
  28. },
  29. methods: {
  30. async loadAgreementList() {
  31. try {
  32. const res = await getServiceAgreementList()
  33. if (res.code === 200 && res.data) {
  34. this.agreementList = res.data
  35. }
  36. } catch (e) {
  37. console.error('加载服务协议列表失败', e)
  38. }
  39. },
  40. goBack() {
  41. uni.navigateBack()
  42. },
  43. goToDetail(item) {
  44. uni.navigateTo({
  45. url: `/pages_user/serviceAgreementDetail?type=${item.type}&id=${item.id}`
  46. })
  47. }
  48. }
  49. }
  50. </script>
  51. <style lang="scss" scoped>
  52. .container {
  53. min-height: 100vh;
  54. background: #f5f5f5;
  55. display: flex;
  56. flex-direction: column;
  57. }
  58. .navbar {
  59. display: flex;
  60. align-items: center;
  61. justify-content: space-between;
  62. padding: 20rpx 24rpx;
  63. background: #fff;
  64. border-bottom: 1rpx solid #f0f0f0;
  65. .nav-left {
  66. width: 60rpx;
  67. .back-icon {
  68. font-size: 36rpx;
  69. color: #333;
  70. font-weight: bold;
  71. }
  72. }
  73. .nav-title {
  74. flex: 1;
  75. text-align: center;
  76. font-size: 36rpx;
  77. font-weight: bold;
  78. color: #333;
  79. }
  80. .nav-right {
  81. display: flex;
  82. align-items: center;
  83. gap: 24rpx;
  84. width: 60rpx;
  85. justify-content: flex-end;
  86. .more-icon {
  87. font-size: 32rpx;
  88. color: #333;
  89. }
  90. .eye-icon {
  91. font-size: 32rpx;
  92. color: #333;
  93. }
  94. }
  95. }
  96. .content {
  97. flex: 1;
  98. }
  99. .agreement-list {
  100. background: #fff;
  101. margin: 24rpx;
  102. border-radius: 16rpx;
  103. overflow: hidden;
  104. .agreement-item {
  105. display: flex;
  106. align-items: center;
  107. justify-content: space-between;
  108. padding: 32rpx 24rpx;
  109. border-bottom: 1rpx solid #f0f0f0;
  110. &:last-child {
  111. border-bottom: none;
  112. }
  113. .agreement-name {
  114. font-size: 28rpx;
  115. color: #333;
  116. }
  117. .arrow-right {
  118. font-size: 32rpx;
  119. color: #999;
  120. }
  121. }
  122. }
  123. </style>