index.tsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. import { Button, Cell, Dialog, Grid, GridItem, Sticky } from 'vant'
  2. import { defineComponent, onMounted, reactive, ref } from 'vue'
  3. import styles from '../index.module.less'
  4. import iconA from '../images/icon-photo.png'
  5. import request from '@/helpers/request'
  6. import { state } from '@/state'
  7. import { useRoute } from 'vue-router'
  8. import OFullRefresh from '@/components/o-full-refresh'
  9. import OHeader from '@/components/o-header'
  10. import OSticky from '@/components/o-sticky'
  11. export default defineComponent({
  12. name: 'approval-manage-subsidy',
  13. setup() {
  14. const route = useRoute()
  15. const dialog = ref(false)
  16. const refreshing = ref(false)
  17. const data = reactive({
  18. startDate: '',
  19. endDate: '',
  20. manageSalary: '',
  21. courseSalary: '',
  22. practiceSalary: '',
  23. /**管理补助 */
  24. manageSalaryInfo: {} as any,
  25. /**训练补助 */
  26. courseSalaryInfo: {} as any,
  27. /**练习奖励 */
  28. practiceSalaryInfo: {} as any
  29. })
  30. const getData = async () => {
  31. try {
  32. const res: any = await request.post(
  33. `${state.platformApi}/schoolWeekSalaryRecord/manageConfirm/${route.query.salaryId}`
  34. )
  35. } catch (error) {}
  36. refreshing.value = false
  37. }
  38. onMounted(() => {
  39. getData()
  40. })
  41. return () => (
  42. <div>
  43. <OSticky
  44. onGetHeight={(height: number) => {
  45. document.documentElement.style.setProperty('--header-height', height + 'px')
  46. }}
  47. >
  48. <OHeader
  49. class={styles.rightTip}
  50. rightText="?"
  51. onClickRight={() => (dialog.value = true)}
  52. ></OHeader>
  53. </OSticky>
  54. <OFullRefresh
  55. v-model:modelValue={refreshing.value}
  56. onRefresh={getData}
  57. style="min-height: calc(100vh - var(--header-height))"
  58. >
  59. <div class={styles.wrap}>
  60. <div class={styles.item}>
  61. <Cell center>
  62. {{
  63. title: () => (
  64. <div class={styles.itemTitle}>
  65. <span>
  66. {data.startDate} 至 {data.endDate}
  67. </span>
  68. <span class={styles.itemTag}>补助周期</span>
  69. </div>
  70. )
  71. }}
  72. </Cell>
  73. <Grid class={styles.grid} columnNum={3} border={false}>
  74. <GridItem>
  75. <div class={styles.gridItem}>
  76. <div class={styles.gridItemTop}>
  77. <span class={styles.topNum}>{data.manageSalary || 0}</span>元
  78. </div>
  79. <div>管理补助</div>
  80. </div>
  81. </GridItem>
  82. <GridItem>
  83. <div class={styles.gridItem}>
  84. <div class={styles.gridItemTop}>
  85. <span class={styles.topNum}>{data.courseSalary || 0}</span>元
  86. </div>
  87. <div>训练补助</div>
  88. </div>
  89. </GridItem>
  90. <GridItem>
  91. <div class={styles.gridItem}>
  92. <div class={styles.gridItemTop}>
  93. <span class={styles.topNum}>{data.practiceSalary || 0}</span>元
  94. </div>
  95. <div>练习奖励</div>
  96. </div>
  97. </GridItem>
  98. </Grid>
  99. </div>
  100. <div class={styles.item}>
  101. <Cell
  102. style={{ '--van-cell-value-color': '#F44541' }}
  103. center
  104. value={`${data.manageSalaryInfo.expectPhotoNum}/${data.manageSalaryInfo.photoNum}`}
  105. isLink
  106. to={'/subsidy-grant-detail?id=' + (data.manageSalaryInfo.id || '')}
  107. >
  108. {{
  109. title: () => (
  110. <div class={styles.itemTitle}>
  111. <div class={styles.titleLine}></div>
  112. <span>管理补助</span>
  113. </div>
  114. )
  115. }}
  116. </Cell>
  117. <Grid class={styles.grid} columnNum={3} border={false}>
  118. <GridItem>
  119. <div class={styles.gridItem}>
  120. <div class={styles.gridItemTop}>
  121. <span class={styles.topNum} style={{ color: '#333' }}>
  122. {data.manageSalaryInfo.standardSalary || 0}
  123. </span>
  124. 元/周
  125. </div>
  126. <div>补助标准</div>
  127. </div>
  128. </GridItem>
  129. <GridItem>
  130. <div class={styles.gridItem}>
  131. <div class={styles.gridItemTop}>
  132. <span class={styles.topNum} style={{ color: '#333' }}>
  133. {data.manageSalaryInfo.standardSalary || 0}
  134. </span>
  135. 课时
  136. </div>
  137. <div>本周课时数</div>
  138. </div>
  139. </GridItem>
  140. <GridItem>
  141. <div class={styles.gridItem}>
  142. <div class={styles.gridItemTop}>
  143. <span class={styles.topNum}>{data.manageSalaryInfo.actualSalary || 0}</span>元
  144. </div>
  145. <div>实际补助</div>
  146. </div>
  147. </GridItem>
  148. </Grid>
  149. </div>
  150. <div class={styles.item}>
  151. <Cell center isLink to={'/subsidy-reward-detail'}>
  152. {{
  153. title: () => (
  154. <div class={styles.itemTitle}>
  155. <div class={styles.titleLine}></div>
  156. <span>练习奖励</span>
  157. </div>
  158. )
  159. }}
  160. </Cell>
  161. <Grid class={styles.grid} columnNum={3} border={false}>
  162. <GridItem>
  163. <div class={styles.gridItem}>
  164. <div class={styles.gridItemTop}>
  165. <span class={styles.topNum}>
  166. {data.practiceSalaryInfo.standardSalary || 0}
  167. </span>
  168. 元/人
  169. </div>
  170. <div>补助标准</div>
  171. </div>
  172. </GridItem>
  173. <GridItem>
  174. <div class={styles.gridItem}>
  175. <div class={styles.gridItemTop}>
  176. <span class={styles.topNum}>{data.practiceSalaryInfo.targetNum || 0}</span>人
  177. </div>
  178. <div>练习达标人数</div>
  179. </div>
  180. </GridItem>
  181. <GridItem>
  182. <div class={styles.gridItem}>
  183. <div class={styles.gridItemTop}>
  184. <span class={styles.topNum}>{data.practiceSalaryInfo.actualSalary || 0}</span>
  185. </div>
  186. <div>实际奖励</div>
  187. </div>
  188. </GridItem>
  189. </Grid>
  190. </div>
  191. <div class={styles.item}>
  192. <Cell center>
  193. {{
  194. title: () => (
  195. <div class={styles.itemTitle}>
  196. <div class={styles.titleLine}></div>
  197. <span>训练补助</span>
  198. </div>
  199. )
  200. }}
  201. </Cell>
  202. <Grid class={styles.grid} columnNum={3} border={false}>
  203. <GridItem>
  204. <div class={styles.gridItem}>
  205. <div class={styles.gridItemTop}>
  206. <span class={styles.topNum}>
  207. {data.courseSalaryInfo.singleSubsidyStandard || 0}
  208. </span>
  209. 元/人
  210. </div>
  211. <div>单技补助标准</div>
  212. </div>
  213. </GridItem>
  214. <GridItem>
  215. <div class={styles.gridItem}>
  216. <div class={styles.gridItemTop}>
  217. <span class={styles.topNum}>
  218. {data.courseSalaryInfo.musicSubsidyStandard || 0}
  219. </span>
  220. 元/天
  221. </div>
  222. <div>乐理补助标准</div>
  223. </div>
  224. </GridItem>
  225. <GridItem>
  226. <div class={styles.gridItem}>
  227. <div class={styles.gridItemTop}>
  228. <span class={styles.topNum}>
  229. {data.courseSalaryInfo.ensembleSubsidyStandard || 0}
  230. </span>
  231. </div>
  232. <div>合奏补助标准</div>
  233. </div>
  234. </GridItem>
  235. </Grid>
  236. {Array.isArray(data.courseSalaryInfo.salaryRecordDetailItemList) &&
  237. data.courseSalaryInfo.salaryRecordDetailItemList.map((teacher: any) => {
  238. return (
  239. <Cell
  240. center
  241. title={teacher.userName}
  242. isLink
  243. to={'/subsidy-exercise-detail?id=' + teacher.id}
  244. >
  245. {{
  246. icon: () => <img class={styles.itemPicture} src={teacher.avatar} />,
  247. value: () => (
  248. <div class={styles.gridItem}>
  249. <div class={styles.gridItemTop}>
  250. <span class={styles.topNum}>{teacher.salary || 0}</span>元
  251. </div>
  252. <div class={styles.valeLabel}>实际奖励</div>
  253. </div>
  254. )
  255. }}
  256. </Cell>
  257. )
  258. })}
  259. </div>
  260. <div class="van-safe-area-bottom">
  261. <div style={{ height: 'calc(var(--van-button-default-height) + 0.8rem)' }}></div>
  262. </div>
  263. </div>
  264. </OFullRefresh>
  265. <div class={styles.confirmBtn}>
  266. <div class="van-safe-area-bottom">
  267. <Button block type="primary" round>
  268. 确认无误
  269. </Button>
  270. </div>
  271. </div>
  272. <Dialog v-model:show={dialog.value} confirmButtonText="我知道了">
  273. <div class={[styles.item, styles.tipItem]}>
  274. <Cell center border={false}>
  275. {{
  276. title: () => (
  277. <div class={styles.itemTitle}>
  278. <div class={styles.titleLine}></div>
  279. <span>补助发放规则</span>
  280. </div>
  281. )
  282. }}
  283. </Cell>
  284. <div class={styles.tipContent}>
  285. 1、每周一上午10点生成上一周实际补助数据
  286. <br />
  287. 2、每周一24点前完成补助确认,则该补助将会在当周周五发放
  288. <br />
  289. 3、超过周一24点确认,则延后到下周周五发放 4、如遇法定节假日,则统一延后到下一周五发放
  290. <br />
  291. 5、未绑定银行卡造成无法发放时,在绑定银行卡后的下一周五一次性将已确认且未发放的金额一次性发放
  292. </div>
  293. </div>
  294. </Dialog>
  295. </div>
  296. )
  297. }
  298. })