standby.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. <template>
  2. <div>
  3. <el-row
  4. class="bg-white"
  5. style="height: 80px"
  6. align="middle"
  7. justify="space-around"
  8. >
  9. <el-col
  10. :span="3"
  11. class="flex align-center justify-around"
  12. >
  13. <el-image
  14. :src="expense"
  15. style="width: 50px;height: 50px"
  16. />
  17. <el-text style="font-size: 20px;font-weight: 550;color: #409eff">备用金收支</el-text>
  18. </el-col>
  19. <el-col :span="21">
  20. <el-row align="middle">
  21. <el-col
  22. :span="4"
  23. :offset="1"
  24. >
  25. <el-row
  26. justify="center"
  27. align="middle"
  28. >
  29. <el-text
  30. style="font-size: 20px;color: #409eff;"
  31. tag="b"
  32. :line-clamp="1"
  33. >
  34. {{ reserve.reserveAmount }}元
  35. </el-text>
  36. </el-row>
  37. <el-row
  38. justify="center"
  39. align="middle"
  40. style="margin-top: 8px"
  41. >
  42. <el-text>备用金支入</el-text>
  43. </el-row>
  44. </el-col>
  45. <el-col :span="4">
  46. <el-row
  47. justify="center"
  48. align="middle"
  49. >
  50. <el-text
  51. style="font-size: 20px;color: #409eff;"
  52. tag="b"
  53. :line-clamp="1"
  54. >
  55. {{ reserve.expenditureAmount }}元
  56. </el-text>
  57. </el-row>
  58. <el-row
  59. justify="center"
  60. align="middle"
  61. style="margin-top: 8px"
  62. >
  63. <el-text>备用金支出</el-text>
  64. </el-row>
  65. </el-col>
  66. <el-col :span="4">
  67. <el-row
  68. justify="center"
  69. align="middle"
  70. >
  71. <el-text
  72. style="font-size: 20px;color: #409eff;"
  73. tag="b"
  74. :line-clamp="1"
  75. >
  76. {{ reserve.balance }}元
  77. </el-text>
  78. </el-row>
  79. <el-row
  80. justify="center"
  81. align="middle"
  82. style="margin-top: 8px"
  83. >
  84. <el-text>备用金余额</el-text>
  85. </el-row>
  86. </el-col>
  87. </el-row>
  88. </el-col>
  89. </el-row>
  90. <el-row
  91. class="bg-white"
  92. style="height: 700px;margin-top: 20px"
  93. >
  94. <el-col :span="24">
  95. <el-row style="margin-top: 15px;margin-left: 30px">
  96. <el-col
  97. :span="24"
  98. >
  99. <el-form
  100. :inline="true"
  101. style="margin: 5px 0 15px 0;height: 40px"
  102. >
  103. <el-form-item label="时间类型:">
  104. <el-select
  105. v-model="timeTypeValue"
  106. placeholder="请选择日期选择器"
  107. @change="changeTimeType"
  108. >
  109. <el-option
  110. v-for="item in timeTypeList"
  111. :key="item.value"
  112. :label="item.label"
  113. :value="item.value"
  114. />
  115. </el-select>
  116. </el-form-item>
  117. <el-form-item
  118. v-if="timeTypeValue === 'date'"
  119. label="日期:"
  120. >
  121. <el-date-picker
  122. v-model="condition.dayTime"
  123. type="date"
  124. placeholder="请选择日期"
  125. format="YYYY-MM-DD"
  126. value-format="YYYY-MM-DD"
  127. clearable
  128. @clear="condition.dayTime = ''"
  129. />
  130. </el-form-item>
  131. <el-form-item
  132. v-if="timeTypeValue === 'month'"
  133. label="月份:"
  134. >
  135. <el-date-picker
  136. v-model="condition.monthTime"
  137. type="month"
  138. placeholder="请选择月份"
  139. format="YYYY-MM"
  140. value-format="YYYY-MM"
  141. clearable
  142. @clear="condition.monthTime = ''"
  143. />
  144. </el-form-item>
  145. <el-form-item
  146. v-if="timeTypeValue === 'year'"
  147. label="年份:"
  148. >
  149. <el-date-picker
  150. v-model="condition.yearTime"
  151. type="year"
  152. placeholder="请选择年份"
  153. format="YYYY"
  154. value-format="YYYY"
  155. clearable
  156. @clear="condition.yearTime = ''"
  157. />
  158. </el-form-item>
  159. <el-form-item label="项目:">
  160. <el-select
  161. v-model="condition.projectCode"
  162. filterable
  163. placeholder="请选择项目"
  164. clearable
  165. >
  166. <el-option
  167. v-for="item in projectList"
  168. :key="item.ID"
  169. :label="item.name"
  170. :value="item.code"
  171. />
  172. </el-select>
  173. </el-form-item>
  174. <el-form-item label="人员:">
  175. <el-select
  176. v-model="peopleSelect"
  177. placeholder="请选择人员名称"
  178. clearable
  179. filterable
  180. @clear="clearPeopleSelect"
  181. >
  182. <el-option
  183. v-for="item in userList"
  184. :key="item.ID"
  185. :label="item.nickName"
  186. :value="item.ID"
  187. />
  188. </el-select>
  189. </el-form-item>
  190. <el-form-item>
  191. <el-button
  192. type="primary"
  193. icon="Search"
  194. @click="consultPayList"
  195. >查询</el-button>
  196. </el-form-item>
  197. <el-form-item>
  198. <el-button
  199. type="primary"
  200. icon="Refresh"
  201. @click="payListReset"
  202. >重置</el-button>
  203. </el-form-item>
  204. </el-form>
  205. </el-col>
  206. </el-row>
  207. <el-row style="margin-top: 10px;margin-left: 30px">
  208. <el-col :span="23">
  209. <el-table
  210. :data="pay.projectCostList"
  211. stripe
  212. border
  213. >
  214. <el-table-column
  215. label="人员名称"
  216. align="center"
  217. prop="user.nickName"
  218. width="180"
  219. />
  220. <el-table-column
  221. label="费用类型"
  222. align="center"
  223. prop="projectFeeGenre.name"
  224. width="180"
  225. />
  226. <el-table-column
  227. label="所属项目"
  228. align="center"
  229. prop="project.name"
  230. width="180"
  231. />
  232. <el-table-column
  233. label="时间"
  234. align="center"
  235. prop="feeTime"
  236. width="180"
  237. />
  238. <el-table-column
  239. label="部门"
  240. align="center"
  241. prop="department.name"
  242. />
  243. <el-table-column
  244. label="支入金额(元)"
  245. align="center"
  246. prop="depositAmount"
  247. />
  248. <el-table-column
  249. label="支出金额(元)"
  250. align="center"
  251. prop="expenditureAmount"
  252. />
  253. <el-table-column
  254. label="当前余额(元)"
  255. align="center"
  256. prop="thenBalance"
  257. />
  258. <el-table-column
  259. label="操作"
  260. align="center"
  261. >
  262. <template #default="scope">
  263. <el-popover
  264. placement="top"
  265. :width="300"
  266. trigger="click"
  267. :content="scope.row.expenseDetail"
  268. >
  269. <template #reference>
  270. <el-button
  271. text
  272. type="primary"
  273. icon="Notebook"
  274. >
  275. 明细
  276. </el-button>
  277. </template>
  278. </el-popover>
  279. </template>
  280. </el-table-column>
  281. </el-table>
  282. </el-col>
  283. </el-row>
  284. <el-row
  285. v-show="pay.costListTotal > 8"
  286. >
  287. <el-col
  288. :span="23"
  289. class="flex justify-end"
  290. >
  291. <el-pagination
  292. v-model:current-page="condition.pageInfo.page"
  293. v-model:page-size="condition.pageInfo.pageSize"
  294. background
  295. layout="prev, pager, next"
  296. :total="pay.costListTotal"
  297. @change="changeCostPage"
  298. />
  299. </el-col>
  300. </el-row>
  301. </el-col>
  302. </el-row>
  303. </div>
  304. </template>
  305. <script setup>
  306. import { getStandbyMoney, projectCostTypeList } from '@/api/cost'
  307. import { getAllProject } from '@/api/project'
  308. import { onMounted, reactive, ref } from 'vue'
  309. import expense from '@/assets/expenses.png'
  310. import { getAllUsers } from '@/api/user'
  311. import { payData } from '@/pinia/cost/cost'
  312. defineOptions({
  313. name: 'Standby'
  314. })
  315. const pay = payData()
  316. // 搜索条件
  317. const condition = reactive({
  318. pageInfo: {
  319. page: 1,
  320. pageSize: 8
  321. },
  322. reimburser: 0,
  323. projectCode: '',
  324. genre: 0,
  325. dayTime: '',
  326. monthTime: '',
  327. yearTime: ''
  328. })
  329. // 搜索与重置
  330. const consultPayList = () => {
  331. condition.reimburser = peopleSelect.value === '' ? 0 : peopleSelect.value
  332. pay.getCostList(condition)
  333. }
  334. const payListReset = () => {
  335. const initialCondition = {
  336. pageInfo: {
  337. page: 1,
  338. pageSize: 8
  339. },
  340. reimburser: 0,
  341. projectCode: '',
  342. genre: condition.genre,
  343. dayTime: '',
  344. monthTime: '',
  345. yearTime: ''
  346. }
  347. Object.assign(condition, initialCondition)
  348. peopleSelect.value = ''
  349. pay.getCostList(condition)
  350. }
  351. onMounted(() => {
  352. queryAllProject()
  353. queryStandbyMoney()
  354. getUserList()
  355. appointType()
  356. })
  357. // 指定费用类型
  358. const appointType = () => {
  359. projectCostTypeList().then(res => {
  360. if (res.code === 0) {
  361. console.log('费用类型列表', res.data)
  362. const list = res.data
  363. list.forEach(item => {
  364. if (item.name === '备用金支出') {
  365. condition.genre = item.ID
  366. pay.getCostList(condition)
  367. }
  368. })
  369. }
  370. })
  371. }
  372. // 备用金汇总
  373. const reserve = reactive({})
  374. const queryStandbyMoney = () => {
  375. getStandbyMoney().then(res => {
  376. if (res.code === 0) {
  377. Object.assign(reserve, res.data)
  378. }
  379. })
  380. }
  381. // 日期查询
  382. const timeTypeValue = ref('date')
  383. const timeTypeList = reactive([
  384. { label: '按日期查询', value: 'date' },
  385. { label: '按月份查询', value: 'month' },
  386. { label: '按年份查询', value: 'year' }
  387. ])
  388. const changeTimeType = (value) => {
  389. if (value === 'year') {
  390. condition.monthTime = ''
  391. condition.dayTime = ''
  392. } else if (value === 'month') {
  393. condition.yearTime = ''
  394. condition.dayTime = ''
  395. } else {
  396. condition.yearTime = ''
  397. condition.monthTime = ''
  398. }
  399. }
  400. // 项目搜索
  401. const projectList = reactive([])
  402. const queryAllProject = () => {
  403. getAllProject().then(res => {
  404. if (res.code === 0) {
  405. projectList.length = 0
  406. projectList.push(...res.data)
  407. }
  408. })
  409. }
  410. // 人员搜索
  411. const peopleSelect = ref('')
  412. const userList = reactive([])
  413. const clearPeopleSelect = () => {
  414. peopleSelect.value = ''
  415. condition.reimburser = 0
  416. }
  417. const getUserList = () => {
  418. getAllUsers().then(res => {
  419. if (res.code === 0) {
  420. userList.length = 0
  421. userList.push(...res.data)
  422. }
  423. })
  424. }
  425. // 改变页码
  426. const changeCostPage = (val) => {
  427. condition.pageInfo.page = val
  428. consultPayList()
  429. }
  430. </script>
  431. <style scoped>
  432. </style>