index.tsx 8.5 KB

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