index.tsx 13 KB

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