index.tsx 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. import { Cell, Grid, GridItem } from 'vant'
  2. import { defineComponent, onMounted, reactive, ref, Transition, TransitionGroup } from 'vue'
  3. import styles from '../index.module.less'
  4. import iconSubsidy from '../images/icon-subsidy.png'
  5. import iconNews from '../images/icon-news.png'
  6. import iconPhoto from '../images/icon-photo.png'
  7. import request from '@/helpers/request'
  8. import { state } from '@/state'
  9. import OFullRefresh from '@/components/o-full-refresh'
  10. import OEmpty from '@/components/o-empty'
  11. import { useRouter } from 'vue-router'
  12. import { approvalManageStrips } from '..'
  13. import { moneyFormat } from '@/helpers/utils'
  14. interface ISalaryRecord {
  15. /**学校补助确认记录ID */
  16. id: string
  17. /**练习补助 */
  18. trainingSalary: number | string
  19. /**课程训练补助 */
  20. courseSalary: number
  21. /**一周开始日期 */
  22. startDate: string
  23. /**一周结束日期 */
  24. endDate: string
  25. /**已发练习补助 */
  26. issueTrainingSalary: number | string
  27. /**结算状态 */
  28. withdrawalStatus: 'WAIT' | 'SETTLED' | 'PART_SETTLED' | 'SETTLE_FAIL'
  29. /**管理补助 */
  30. manageSalary: number
  31. /**已发课程训练补助 */
  32. issueCourseSalary: number | string
  33. /**已发管理补助 */
  34. issueManageSalary: number | string
  35. }
  36. export default defineComponent({
  37. name: 'approval-manage-agency',
  38. setup() {
  39. const router = useRouter()
  40. const loading = ref(true)
  41. const data = reactive({
  42. salaryRecordList: [] as ISalaryRecord[],
  43. /**训练照片 */
  44. schoolWeekPhoto: {
  45. /**预计的训练照片数 */
  46. expectPhotoNum: 0,
  47. /**结束日期 */
  48. endDate: '',
  49. /**开始日期 */
  50. startDate: '',
  51. /**训练照片数 */
  52. photoNum: 0
  53. } as any,
  54. /**乐团资讯 */
  55. schoolWeekNews: {
  56. //
  57. /**乐团资讯数 */
  58. newsNum: 0,
  59. /**结束日期 */
  60. endDate: '',
  61. /**开始日期 */
  62. startDate: '',
  63. /**预计的乐团资讯数 */
  64. expectNewsNum: 0
  65. } as any
  66. })
  67. const refreshing = ref(false)
  68. const getData = async () => {
  69. loading.value = true
  70. /** 下拉刷新,重置数据 */
  71. if (refreshing.value) {
  72. data.salaryRecordList = []
  73. data.schoolWeekPhoto = {}
  74. data.schoolWeekNews = {}
  75. }
  76. try {
  77. const res: any = await request.post(`${state.platformApi}/schoolWeekSalaryRecord/manage`, {
  78. // hideLoading: refreshing.value
  79. })
  80. if (Array.isArray(res?.data?.salaryRecordList)) {
  81. data.salaryRecordList = res.data.salaryRecordList.map((n: any) => {
  82. return {
  83. ...n,
  84. startDate: n?.startDate?.split(' ')[0] || '',
  85. endDate: n?.endDate?.split(' ')[0] || ''
  86. }
  87. })
  88. approvalManageStrips.agencty = data.salaryRecordList.length
  89. }
  90. data.schoolWeekPhoto = res?.data?.schoolWeekPhoto || {}
  91. data.schoolWeekNews = res?.data?.schoolWeekNews || {}
  92. if (data.schoolWeekPhoto) {
  93. data.schoolWeekPhoto.startDate = data.schoolWeekPhoto?.startDate?.split(' ')[0] || ''
  94. data.schoolWeekPhoto.endDate = data.schoolWeekPhoto?.endDate?.split(' ')[0] || ''
  95. }
  96. if (data.schoolWeekNews) {
  97. data.schoolWeekNews.startDate = data.schoolWeekNews?.startDate?.split(' ')[0] || ''
  98. data.schoolWeekNews.endDate = data.schoolWeekNews?.endDate?.split(' ')[0] || ''
  99. }
  100. } catch (error) {}
  101. loading.value = false
  102. refreshing.value = false
  103. }
  104. onMounted(() => {
  105. getData()
  106. })
  107. return () => (
  108. <OFullRefresh
  109. modelValue={refreshing.value}
  110. onRefresh={() => {
  111. refreshing.value = true
  112. getData()
  113. }}
  114. >
  115. <div
  116. class={styles.wrap}
  117. style="min-height: calc(100vh - var(--van-nav-bar-height) - var(--header-height))"
  118. >
  119. <TransitionGroup name="van-fade">
  120. {!!data.salaryRecordList.length && (
  121. <div key="salaryRecordList">
  122. {data.salaryRecordList.map((item: ISalaryRecord) => {
  123. return (
  124. <div class={styles.item} style={{ marginTop: 0 }}>
  125. <Cell
  126. center
  127. label={`${item.startDate} 至 ${item.endDate}`}
  128. isLink
  129. to={'/approval-manage-subsidy?display=1&salaryId=' + (item.id || '')}
  130. >
  131. {{
  132. title: () => (
  133. <div class={styles.itemTitle}>
  134. <img class={styles.titleIcon} src={iconSubsidy} />
  135. <span>补助确认</span>
  136. </div>
  137. )
  138. }}
  139. </Cell>
  140. <Grid class={styles.grid} columnNum={2} border={false}>
  141. <GridItem>
  142. <div class={styles.gridItem}>
  143. <div class={styles.gridItemTop}>
  144. <span class={styles.topNum}>
  145. {moneyFormat(item.manageSalary || 0)}
  146. </span>
  147. </div>
  148. <div>管理补助</div>
  149. </div>
  150. </GridItem>
  151. <GridItem>
  152. <div class={styles.gridItem}>
  153. <div class={styles.gridItemTop}>
  154. <span class={styles.topNum}>
  155. {moneyFormat(item.courseSalary || 0)}
  156. </span>
  157. </div>
  158. <div>训练补助</div>
  159. </div>
  160. </GridItem>
  161. {/* <GridItem>
  162. <div class={styles.gridItem}>
  163. <div class={styles.gridItemTop}>
  164. <span class={styles.topNum}>{item.trainingSalary}</span>元
  165. </div>
  166. <div>练习奖励</div>
  167. </div>
  168. </GridItem> */}
  169. </Grid>
  170. </div>
  171. )
  172. })}
  173. </div>
  174. )}
  175. {!data.schoolWeekPhoto.expectPhotoNum ? null : (
  176. <div
  177. key="schoolWeekPhoto"
  178. class={styles.item}
  179. onClick={() => {
  180. router.push({
  181. path: '/school-photo'
  182. })
  183. }}
  184. >
  185. <Cell
  186. style={{ '--van-cell-value-color': '#333' }}
  187. center
  188. label={`${data.schoolWeekPhoto.startDate} 至 ${data.schoolWeekPhoto.endDate}`}
  189. valueClass={styles.agencyNumber}
  190. value={data.schoolWeekPhoto.photoNum + '/' + data.schoolWeekPhoto.expectPhotoNum}
  191. isLink
  192. >
  193. {{
  194. title: () => (
  195. <div class={styles.itemTitle}>
  196. <img class={styles.titleIcon} src={iconNews} />
  197. <span>训练照片</span>
  198. </div>
  199. )
  200. }}
  201. </Cell>
  202. </div>
  203. )}
  204. {!data.schoolWeekNews.expectNewsNum ? null : (
  205. <div
  206. key="schoolWeekNews"
  207. class={styles.item}
  208. onClick={() => {
  209. router.push({
  210. path: '/orchestra-information'
  211. })
  212. }}
  213. >
  214. <Cell
  215. style={{ '--van-cell-value-color': '#333' }}
  216. center
  217. label={`${data.schoolWeekNews.startDate} 至 ${data.schoolWeekNews.endDate}`}
  218. valueClass={[
  219. styles.agencyNumber,
  220. data.schoolWeekNews.newsNum >= data.schoolWeekNews.expectNewsNum &&
  221. styles.valueColor
  222. ]}
  223. value={data.schoolWeekNews.newsNum + '/' + data.schoolWeekNews.expectNewsNum}
  224. isLink
  225. >
  226. {{
  227. title: () => (
  228. <div class={styles.itemTitle}>
  229. <img class={styles.titleIcon} src={iconPhoto} />
  230. <span>乐团资讯</span>
  231. </div>
  232. )
  233. }}
  234. </Cell>
  235. </div>
  236. )}
  237. {!loading.value &&
  238. !data.salaryRecordList.length &&
  239. !data.schoolWeekPhoto.expectPhotoNum &&
  240. !data.schoolWeekNews.expectNewsNum ? (
  241. <OEmpty key="OEmpty" class="emptyFixedHeightContainer" tips="暂无处理事项" />
  242. ) : null}
  243. </TransitionGroup>
  244. </div>
  245. </OFullRefresh>
  246. )
  247. }
  248. })