view.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <z-paging ref="pageRef" v-model="dataList" @query="getDataList">
  3. <template #top>
  4. <view class="hc-paging-top-bar mb-1">
  5. <hc-nav-back-bar title="声像文件">
  6. <text class="text-26 text-red-4" @click="deleteTap" v-if="dataList.length > 0">删除</text>
  7. </hc-nav-back-bar>
  8. <view class="cu-bar bg-white search py-2" un-border-t="1 solid gray-2" v-if="pageNode.type === 1">
  9. <view class="search-form radius">
  10. <text class="cuIcon-search"/>
  11. <input v-model="searchForm.queryStr" :adjust-position="false" type="text" placeholder="根据题名,名称或拍摄者搜索" confirm-type="search"/>
  12. </view>
  13. <view class="action">
  14. <button class="cu-btn bg-blue-5 text-white" hover-class="none" @click="searchClick">搜索</button>
  15. </view>
  16. </view>
  17. </view>
  18. </template>
  19. <!-- 树类型的列表 -->
  20. <template v-for="(item, index) in dataList" :key="index" v-if="pageNode.type === 1">
  21. <view class="bg-white hc-p hc-flex" un-border-b="1 solid gray-2" @click="itemClick(item)">
  22. <view class="hc-flex mr-2" v-if="isDelete" @click.stop="checkClick(item)">
  23. <uni-icons type="checkbox-filled" size="26" color="#ee5b20" v-if="item.check"/>
  24. <uni-icons type="checkbox" size="26" color="#9a9a9a" v-else/>
  25. </view>
  26. <view class="hc-flex">
  27. <hc-img class="b-rounded" :src="item.imageUrl?.toString()?.split(',')[0]" width="50" height="50"/>
  28. </view>
  29. <view class="relative flex-1 ml-3">
  30. <view class="text-30 text-black clip-2">{{item.title}}</view>
  31. <view class="text-24 mt-1 text-cut">{{item.textContent}}</view>
  32. </view>
  33. </view>
  34. </template>
  35. <template #bottom>
  36. <hc-tabbars class="hc-paging-bottom-bar">
  37. <view class="hc-flex" v-if="isDelete">
  38. <view class="hc-flex" @click="allCheckClick">
  39. <uni-icons type="checkbox-filled" size="24" color="#ee5b20" v-if="checkList.length === dataList.length"/>
  40. <uni-icons type="checkbox" size="24" color="#9a9a9a" v-else/>
  41. <text class="ml-1">全选</text>
  42. </view>
  43. <view class="flex-1 ml-4 text-gray-5 text-24">
  44. <text class="mr-1">已勾选</text>
  45. <text class="text-red-5">{{checkList.length}}</text>
  46. <text class="ml-1">条数据</text>
  47. </view>
  48. <button hover-class="none" class="cu-btn bg-red-5 text-white" @click="delCheckList">删除选中</button>
  49. </view>
  50. <button hover-class="none" class="cu-btn block bg-purple-8 text-white" v-else>新增声像文件</button>
  51. </hc-tabbars>
  52. </template>
  53. </z-paging>
  54. </template>
  55. <script setup>
  56. import {ref} from "vue";
  57. import {onLoad} from '@dcloudio/uni-app'
  58. import {useAppStore} from "@/store";
  59. import mainApi from '~api/image/index';
  60. import {arrIndex, deepClone, getArrValue} from "js-fast-way";
  61. import {errorToast, showModal, successToast} from "@/utils/tools";
  62. //初始变量
  63. const store = useAppStore()
  64. const contractInfo = ref(store.contractInfo);
  65. const projectId = ref(store.projectId);
  66. const contractId = ref(store.contractId);
  67. //基础变量
  68. const pageRef = ref(null)
  69. const pageNode = ref({});
  70. const dataList = ref([])
  71. //页面启动
  72. onLoad(({node}) => {
  73. pageNode.value = node ? JSON.parse(decodeURIComponent(node)) : {};
  74. console.log(pageNode.value)
  75. })
  76. //条件搜索
  77. const searchClick = () => {
  78. pageRef.value?.reload()
  79. }
  80. //获取数据
  81. const searchForm = ref({queryStr: ''})
  82. const getDataList = async (pageNo, pageSize) => {
  83. const {id, fileType, type, treeId} = pageNode.value
  84. if (!type || !id || !type || !fileType || !treeId) {
  85. errorToast('参数异常,请退出重试')
  86. pageRef.value?.complete([]);
  87. return false;
  88. }
  89. //树类型
  90. if (type === 1 && treeId) {
  91. searchForm.value.wbsIdsStr = treeId
  92. }
  93. //staDate endDate
  94. //获取数据
  95. uni.showLoading({title: '获取数据中...', mask: true});
  96. const { data } = await mainApi.getPageList({
  97. ...searchForm.value,
  98. projectId: projectId.value,
  99. contractId: contractId.value,
  100. classifyId: id,
  101. current: pageNo,
  102. size: pageSize,
  103. isApp: 1,
  104. })
  105. //处理数据
  106. const res = getArrValue(data?.records)
  107. pageRef.value?.complete(res);
  108. uni.hideLoading();
  109. }
  110. //批量删除
  111. const isDelete = ref(false)
  112. const deleteTap = () => {
  113. isDelete.value = !isDelete.value
  114. }
  115. //点击选中
  116. const checkList = ref([])
  117. const checkClick = (item) => {
  118. const list = checkList.value
  119. const index = arrIndex(list, 'id', item.id)
  120. if (item.check) {
  121. list.splice(index, 1)
  122. item.check = false
  123. } else {
  124. item.check = true
  125. list.push(item)
  126. }
  127. checkList.value = list
  128. }
  129. //全选
  130. const allCheckClick = () => {
  131. const check = checkList.value, list = dataList.value
  132. if (check.length === list.length) {
  133. list.forEach(item => {
  134. item.check = false
  135. })
  136. checkList.value = []
  137. } else {
  138. list.forEach(item => {
  139. item.check = true
  140. })
  141. checkList.value = deepClone(list)
  142. }
  143. }
  144. //列表项被点击
  145. const itemClick = (item) => {
  146. if(isDelete.value) {
  147. checkClick(item)
  148. } else {
  149. uni.navigateTo({
  150. url: `/pages/image/info?id=${item.id}`
  151. })
  152. }
  153. }
  154. //删除选中数据
  155. const delCheckList = async () => {
  156. if (checkList.value.length <= 0) {
  157. errorToast('请选择要删除的数据')
  158. return false
  159. }
  160. const res = await showModal({
  161. title: '批量删除提醒',
  162. content: '确定要删除选中的数据吗?',
  163. })
  164. if (!res) return false;
  165. uni.showLoading({title: '批量删除中...', mask: true});
  166. const ids = checkList.value.map(item => item.id)
  167. const { error, code, msg } = await mainApi.removeImageclassifyFile({
  168. ids: ids.join(',')
  169. })
  170. uni.hideLoading();
  171. if (!error && code === 200) {
  172. successToast('删除成功')
  173. searchClick()
  174. } else {
  175. errorToast('删除失败: ' + msg)
  176. }
  177. }
  178. </script>