index.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <script setup>
  2. import {
  3. ref
  4. } from 'vue'
  5. import {
  6. onLoad,
  7. onPageScroll
  8. } from "@dcloudio/uni-app"
  9. import {
  10. getYearlyList,
  11. } from "@/api/work/weeklyAndMonthly.js"
  12. let scrollTop = ref(0)
  13. let loading = ref(true)
  14. // 获取列表
  15. let searhInfo = {};
  16. const getList = () => {
  17. let searchParams = Object.assign({}, {
  18. orderType: orderByStatus.value
  19. }, searhInfo)
  20. // loading.value = true
  21. getYearlyList(searchParams).then(res => {
  22. loading.value = false
  23. projectsList.value = res.data.list
  24. listTotal.value = res.data.list.length
  25. }).catch(() => {
  26. loading.value = false
  27. })
  28. }
  29. // 主要列表
  30. let projectsList = ref([])
  31. let listTotal = ref(0)
  32. // 按金额排序
  33. let orderByStatus = ref("")
  34. const changeOrderByStatus = () => {
  35. if (orderByStatus.value === "desc") {
  36. orderByStatus.value = "asc"
  37. } else if (orderByStatus.value === "asc") {
  38. orderByStatus.value = ""
  39. } else {
  40. orderByStatus.value = "desc"
  41. }
  42. getList();
  43. }
  44. // 折叠/展开
  45. const changeFoldItem = (status, id) => {
  46. let item = projectsList.value.find(item => item.sub_id === id);
  47. item.unfold = status;
  48. }
  49. // 去录入
  50. function gotoInput(title, is_lock, subId, year) {
  51. if (is_lock === '1') {
  52. uni.showToast({
  53. title: '该项目的年度计划被锁定,不能录入了!',
  54. icon: 'none',
  55. mask: false,
  56. duration: 2000,
  57. style: {
  58. fontSize: "23px"
  59. }
  60. })
  61. } else {
  62. uni.navigateTo({
  63. url: `/pages/yearly/input/index?title=${title}&subId=${subId}&year=${year}`
  64. })
  65. }
  66. }
  67. // 去详情
  68. function gotoDetail(id, subName) {
  69. uni.navigateTo({
  70. url: `/pages/projectInfo/detail/index?id=${id}&subName=${subName}`
  71. })
  72. }
  73. onLoad((options) => {
  74. searhInfo = options;
  75. getList()
  76. })
  77. onPageScroll((e) => {
  78. scrollTop.value = e.scrollTop
  79. })
  80. </script>
  81. <template>
  82. <view class="container">
  83. <page-title>项目信息</page-title>
  84. <view class="cards-list">
  85. <view class="order-by">
  86. <view class=" order-by-item">
  87. 计划金额
  88. <view class="order-by-icon" :class="orderByStatus" @click="changeOrderByStatus()"></view>
  89. </view>
  90. </view>
  91. <view v-for="(item,index) in projectsList" :key="index">
  92. <!-- 未折叠卡片 -->
  93. <view class="card" v-if="item.unfold">
  94. <!-- 项目名称 -->
  95. <view class="card-item">
  96. <view class="card-item-name">项目名称</view>
  97. <view class="card-item-content">{{item.title ?? "--"}}</view>
  98. </view>
  99. <view class="card-item">
  100. <view class="card-item-name">总投资</view>
  101. <view class="card-item-content">{{item.amt ?? "--"}}</view>
  102. </view>
  103. <view class="card-item">
  104. <view class="card-item-name">年度计划金额</view>
  105. <view class="card-item-content">{{item.amt_jh || "--"}}</view>
  106. </view>
  107. <view class="card-item">
  108. <view class="card-item-name">申报单位</view>
  109. <view class="card-item-content">{{item.unit_name || "--"}}</view>
  110. </view>
  111. <view class="card-item">
  112. <view class="card-item-name">锁定</view>
  113. <view class="card-item-content">{{item.isLockName || "--"}}</view>
  114. </view>
  115. <view class="card-item bottom-item">
  116. <view class="card-btn text-btn" @click="gotoInput(item.title,item.is_lock,item.sub_id,item.year)">
  117. <image src="@/static/icon-input.svg" mode=""></image>
  118. 录入
  119. </view>
  120. <view class="card-btn " @click="gotoDetail(item.sub_id,item.title)">项目查看</view>
  121. </view>
  122. <!-- 编号 -->
  123. <view class="card-fold-option">
  124. <view class="card-fold-count">{{index + 1}} / {{listTotal}}</view>
  125. <view class="card-fold-center" @click.stop="changeFoldItem(false,item.sub_id)">
  126. <view class="card-fold-btn card-unfold-btn"></view>
  127. </view>
  128. <view class="card-fold-chaos"></view>
  129. </view>
  130. <view class="card-icon" :class="item.status === 1 ? 'no-input' : ''"></view>
  131. </view>
  132. <!-- 折叠卡片 -->
  133. <view class="card-fold" v-else>
  134. {{item.title ?? "--"}}
  135. <view class="card-fold-option">
  136. <view class="card-fold-count">{{index + 1}} / {{listTotal}}</view>
  137. <view class="card-fold-center" @click.stop="changeFoldItem(true, item.sub_id)">
  138. <view class="card-fold-btn"></view>
  139. </view>
  140. <view class="card-fold-chaos"></view>
  141. </view>
  142. </view>
  143. </view>
  144. <empty-show v-if="projectsList.length===0"></empty-show>
  145. </view>
  146. <u-back-top :scroll-top="scrollTop"></u-back-top>
  147. <u-loading-page :loading="loading"></u-loading-page>
  148. </view>
  149. </template>
  150. <style lang="scss" scoped>
  151. .card-fold {
  152. position: relative;
  153. width: 100%;
  154. min-height: 152rpx;
  155. margin-bottom: 20rpx;
  156. padding: 24rpx 30rpx 52rpx;
  157. box-sizing: border-box;
  158. background: #FFFFFF;
  159. border-radius: 40rpx;
  160. overflow: hidden;
  161. }
  162. .card-fold-option {
  163. position: absolute;
  164. display: flex;
  165. justify-content: space-between;
  166. align-items: center;
  167. left: 0;
  168. bottom: 0;
  169. width: 100%;
  170. height: 38rpx;
  171. padding: 0 40rpx;
  172. box-sizing: border-box;
  173. background: linear-gradient(270deg, #CADDFF 4%, rgba(219, 232, 255, 0) 100%);
  174. z-index: 999;
  175. .card-fold-count {
  176. flex: 1;
  177. font-size: 28rpx;
  178. color: #1869F6;
  179. }
  180. .card-fold-center {
  181. flex: 1;
  182. .card-fold-btn {
  183. width: 32rpx;
  184. height: 20rpx;
  185. margin: 0 auto;
  186. background-image: url("@/static/icon-fold.png");
  187. background-size: 100% 100%;
  188. }
  189. .card-unfold-btn {
  190. transform: rotate(180deg);
  191. }
  192. }
  193. .card-fold-chaos {
  194. flex: 1;
  195. }
  196. }
  197. .bottom-item {
  198. margin-bottom: 20rpx;
  199. }
  200. </style>