staffCost.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <template>
  2. <van-row style="margin-top: 20px" @click="dateScreenShow = true">
  3. <van-col :span="24">
  4. <van-cell-group>
  5. <van-cell size="large" class="checkCell" title-class="projectTitle">
  6. <template #title>
  7. <van-text-ellipsis content="筛选条件"/>
  8. </template>
  9. <template #value>
  10. <van-row justify="end">
  11. <van-col class="resetDetailCell" @click.stop="resetStaffCost">
  12. <van-icon name="replay" />
  13. <van-text-ellipsis content="重置" />
  14. </van-col>
  15. </van-row>
  16. </template>
  17. </van-cell>
  18. </van-cell-group>
  19. </van-col>
  20. </van-row>
  21. <van-list
  22. v-model:loading="loading"
  23. :finished="finished"
  24. :offset="20"
  25. finished-text="没有更多了"
  26. @load="onLoad"
  27. >
  28. <van-collapse v-model="activeNames" class="collapseBox">
  29. <van-collapse-item title="标题1" name="1">
  30. 代码是写出来给人看的,附带能在机器上运行。
  31. </van-collapse-item>
  32. <van-collapse-item title="标题2" name="2">
  33. 技术无非就是那些开发它的人的共同灵魂。
  34. </van-collapse-item>
  35. <van-collapse-item title="标题3" name="3">
  36. 在代码阅读过程中人们说脏话的频率是衡量代码质量的唯一标准。
  37. </van-collapse-item>
  38. </van-collapse>
  39. </van-list>
  40. <van-popup
  41. v-model:show="dateScreenShow"
  42. position="bottom"
  43. class="popupBox"
  44. closeable
  45. close-icon-position="top-right"
  46. >
  47. <van-row class="popupRow">
  48. <van-col :span="22" :offset="1">
  49. <el-form label-width="90" label-position="left">
  50. <el-form-item label="时间类型:" size="large">
  51. <el-select
  52. placeholder="请选择日期选择器类型"
  53. v-model="timeType"
  54. @change="changeTimeType"
  55. >
  56. <el-option
  57. v-for="item in timeTypeList"
  58. :key="item.id"
  59. :label="item.text"
  60. :value="item.value"
  61. />
  62. </el-select>
  63. </el-form-item>
  64. <el-form-item
  65. v-if="timeType === 'day'"
  66. label="日期:"
  67. size="large">
  68. <el-date-picker
  69. v-model="condition.dayTime"
  70. type="date"
  71. placeholder="请选择日期"
  72. format="YYYY-MM-DD"
  73. value-format="YYYY-MM-DD"
  74. clearable
  75. @clear="condition.dayTime = ''"
  76. />
  77. </el-form-item>
  78. <el-form-item
  79. v-if="timeType === 'month'"
  80. label="月份:"
  81. size="large"
  82. >
  83. <el-date-picker
  84. v-model="condition.monthTime"
  85. type="month"
  86. placeholder="请选择月份"
  87. format="YYYY-MM"
  88. value-format="YYYY-MM"
  89. clearable
  90. @clear="condition.monthTime = ''"
  91. />
  92. </el-form-item>
  93. <el-form-item
  94. v-if="timeType === 'year'"
  95. label="年份:"
  96. size="large"
  97. >
  98. <el-date-picker
  99. v-model="condition.yearTime"
  100. type="year"
  101. placeholder="请选择年份"
  102. format="YYYY"
  103. value-format="YYYY"
  104. clearable
  105. @clear="condition.yearTime = ''"
  106. />
  107. </el-form-item>
  108. <el-form-item
  109. label="类型:"
  110. size="large"
  111. >
  112. <el-select
  113. v-model="condition.genre"
  114. placeholder="请选择费用类型"
  115. clearable
  116. @clear="condition.genre = 0"
  117. >
  118. <el-option
  119. v-for="item in useFinance.costTypeList"
  120. :key="item.ID"
  121. :label="item.name"
  122. :value="item.ID"
  123. />
  124. </el-select>
  125. </el-form-item>
  126. <el-form-item
  127. label="人员:"
  128. size="large"
  129. >
  130. <el-select
  131. v-model="condition.reimburser"
  132. placeholder="请选择费用类型"
  133. clearable
  134. @clear="condition.reimburser = 0"
  135. >
  136. <el-option
  137. v-for="item in useFinance.allUser"
  138. :key="item.ID"
  139. :label="item.nickName"
  140. :value="item.ID"
  141. />
  142. </el-select>
  143. </el-form-item>
  144. </el-form>
  145. <van-row class="popupCheck">
  146. <van-col :span="24">
  147. <van-button type="primary" @click="getStaffCostList" size="large">查询</van-button>
  148. </van-col>
  149. </van-row>
  150. </van-col>
  151. </van-row>
  152. </van-popup>
  153. </template>
  154. <script setup>
  155. import { useFinanceStore } from "@/pinia/finance/finance";
  156. import { peopleCost } from "@/api/firmCost"
  157. const useFinance = useFinanceStore()
  158. defineOptions({
  159. name: 'costDetail',
  160. })
  161. const dateScreenShow = ref(false)
  162. const resetStaffCost = () => {}
  163. // 时间类型
  164. const timeType = ref('day')
  165. const timeTypeList = [
  166. { id:0, text: '按日期选择', value: "day" },
  167. { id:1, text: '按月份选择', value: "month" },
  168. { id:2, text: '按年份选择', value: "year" }
  169. ]
  170. const changeTimeType = (val) => {
  171. if (val === 'day') {
  172. condition.monthTime = ''
  173. condition.yearTime = ''
  174. } else if (val === 'month') {
  175. condition.dayTime = ''
  176. condition.yearTime = ''
  177. } else {
  178. condition.dayTime = ''
  179. condition.monthTime = ''
  180. }
  181. }
  182. const condition = reactive({
  183. pageInfo: {
  184. page: 1,
  185. pageSize: 10
  186. },
  187. reimburser: 0,
  188. projectId: 0,
  189. genre: 0,
  190. dayTime: '',
  191. monthTime: '',
  192. yearTime: ''
  193. })
  194. onMounted(() => {
  195. getStaffCostList()
  196. })
  197. // 查询人员费用
  198. const staffCostPage = ref(0)
  199. const staffCostList = reactive([])
  200. const getStaffCostList = () => {
  201. peopleCost(condition).then(res => {
  202. if (res.code === 0) {
  203. const list = res.data.list
  204. const total = res.data.total
  205. console.log(total)
  206. const divisor = Math.floor(total / 10)
  207. const remainder = total % 10
  208. console.log("整数:", divisor)
  209. console.log("余数:",remainder)
  210. staffCostPage.value = remainder > 0 ? divisor + 1 : divisor
  211. console.log("staffCostPage", staffCostPage.value)
  212. console.log("page",condition.pageInfo.page)
  213. // finished.value = staffCostPage.value === condition.pageInfo.page
  214. // console.log("初次确认", finished.value)
  215. // staffCostList.length = 0
  216. // staffCostList.push(...list)
  217. // dateScreenShow.value = false
  218. }
  219. })
  220. }
  221. // 人员费用列表
  222. const activeNames = ref(['1'])
  223. // 上拉加载
  224. const loading = ref(false);
  225. const finished = ref(false);
  226. const onLoad = () => {
  227. setTimeout(() => {
  228. loading.value = true
  229. condition.pageInfo.page += 1
  230. peopleCost(condition).then(res => {
  231. console.log('res',res)
  232. if (res.code === 0) {
  233. const list = res.data.list
  234. if (list !== null) {
  235. staffCostList.push(...list)
  236. finished.value = staffCostPage.value === condition.pageInfo.page
  237. }
  238. loading.value = false
  239. }
  240. })
  241. },500)
  242. }
  243. </script>
  244. <style scoped lang="less">
  245. .checkCell{
  246. height: 45px;
  247. font-size: 16px;
  248. .projectTitle{
  249. width: 200px;
  250. }
  251. .resetDetailCell {
  252. display: flex;
  253. align-items: center;
  254. }
  255. }
  256. .popupBox{
  257. height: 500px;
  258. .popupRow{
  259. margin-top: 50px;
  260. }
  261. .popupCheck{
  262. margin-top: 30px;
  263. }
  264. }
  265. .collapseBox{
  266. margin-top: 20px;
  267. }
  268. </style>