index.tsx 14 KB

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