|
@@ -0,0 +1,191 @@
|
|
|
+import OHeader from '@/components/o-header'
|
|
|
+import { Cell, CellGroup, Grid, GridItem, Image, Picker, Popup, Tag } from 'vant'
|
|
|
+import { defineComponent, onMounted, reactive } from 'vue'
|
|
|
+import styles from './index.module.less'
|
|
|
+import iconStudent from '@/common/images/icon_student.png'
|
|
|
+import request from '@/helpers/request'
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: 'practice-detail',
|
|
|
+ setup() {
|
|
|
+ const state = reactive({
|
|
|
+ subjectStatus: false,
|
|
|
+ subjectList: [],
|
|
|
+ isClick: false,
|
|
|
+ list: [] as any,
|
|
|
+ listState: {
|
|
|
+ dataShow: true, // 判断是否有数据
|
|
|
+ loading: false,
|
|
|
+ finished: false,
|
|
|
+ refreshing: false,
|
|
|
+ height: 0 // 页面头部高度,为了处理下拉刷新用的
|
|
|
+ },
|
|
|
+ params: {
|
|
|
+ type: null,
|
|
|
+ page: 1,
|
|
|
+ rows: 20
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ // 获取声部
|
|
|
+ const getSubjects = async () => {
|
|
|
+ try {
|
|
|
+ const { data } = await request.post('/api-school/subjectBasicConfig/page', {
|
|
|
+ data: {
|
|
|
+ page: 1,
|
|
|
+ rows: 50
|
|
|
+ }
|
|
|
+ })
|
|
|
+ state.subjectList = data.rows || []
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // api-school/schoolWeekSalaryRecord/detailInfo/trainingPage
|
|
|
+ const getList = async () => {
|
|
|
+ try {
|
|
|
+ if (state.isClick) return
|
|
|
+ state.isClick = true
|
|
|
+ const res = await request.post(
|
|
|
+ '/api-school/schoolWeekSalaryRecord/detailInfo/trainingPage',
|
|
|
+ {
|
|
|
+ data: {
|
|
|
+ ...state.params
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ state.listState.loading = false
|
|
|
+ state.listState.refreshing = false
|
|
|
+ const result = res.data || {}
|
|
|
+ // 处理重复请求数据
|
|
|
+ if (state.list.length > 0 && result.current === 1) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ state.list = state.list.concat(result.rows || [])
|
|
|
+ state.listState.finished = result.current >= result.pages
|
|
|
+ state.params.page = result.current + 1
|
|
|
+ state.listState.dataShow = state.list.length > 0
|
|
|
+ state.isClick = false
|
|
|
+ } catch {
|
|
|
+ state.listState.dataShow = false
|
|
|
+ state.listState.finished = true
|
|
|
+ state.listState.refreshing = false
|
|
|
+ state.isClick = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ getSubjects()
|
|
|
+ })
|
|
|
+ return () => (
|
|
|
+ <>
|
|
|
+ <OHeader />
|
|
|
+
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Cell center>
|
|
|
+ {{
|
|
|
+ title: () => (
|
|
|
+ <div class={styles.itemTitle}>
|
|
|
+ <div class={styles.titleLine}></div>
|
|
|
+ <span>练习奖励</span>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ <Grid class={styles.grid} columnNum={3} border={false}>
|
|
|
+ <GridItem class={styles.gridBorderRight}>
|
|
|
+ <div class={styles.gridItem}>
|
|
|
+ <div class={styles.gridItemTop}>
|
|
|
+ <span class={styles.topNum} style={{ color: '#333' }}>
|
|
|
+ 0
|
|
|
+ </span>
|
|
|
+ 元/人
|
|
|
+ </div>
|
|
|
+ <div>奖励标准</div>
|
|
|
+ </div>
|
|
|
+ </GridItem>
|
|
|
+ <GridItem class={styles.gridBorderRight}>
|
|
|
+ <div class={styles.gridItem}>
|
|
|
+ <div class={styles.gridItemTop}>
|
|
|
+ <span class={styles.topNum} style={{ color: '#333' }}>
|
|
|
+ 0
|
|
|
+ </span>
|
|
|
+ 人
|
|
|
+ </div>
|
|
|
+ <div>练习达标人数</div>
|
|
|
+ </div>
|
|
|
+ </GridItem>
|
|
|
+ <GridItem>
|
|
|
+ <div class={styles.gridItem}>
|
|
|
+ <div class={styles.gridItemTop}>
|
|
|
+ <span class={styles.topNum}>0</span>元
|
|
|
+ </div>
|
|
|
+ <div>奖励金额</div>
|
|
|
+ </div>
|
|
|
+ </GridItem>
|
|
|
+ </Grid>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class={styles.searchGroup}>
|
|
|
+ <span
|
|
|
+ class={[styles.searchItem, state.subjectStatus && styles['searchItem--active']]}
|
|
|
+ onClick={() => {
|
|
|
+ state.subjectStatus = !state.subjectStatus
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div>全部声部</div>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ {/* {form.listState.dataShow ? (
|
|
|
+ <OFullRefresh
|
|
|
+ v-model:modelValue={form.listState.refreshing}
|
|
|
+ onRefresh={onRefresh}
|
|
|
+ style={{
|
|
|
+ minHeight: `calc(100vh - ${form.listState.height}px)`
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <List
|
|
|
+ // v-model:loading={form.listState.loading}
|
|
|
+ finished={form.listState.finished}
|
|
|
+ finishedText=" "
|
|
|
+ class={[styles.liveList]}
|
|
|
+ onLoad={getList}
|
|
|
+ immediateCheck={false}
|
|
|
+ ></List> */}
|
|
|
+ <CellGroup inset class={styles.cellGroup}>
|
|
|
+ <Cell center>
|
|
|
+ {{
|
|
|
+ icon: () => <Image src={iconStudent} class={styles.img} />,
|
|
|
+ title: () => (
|
|
|
+ <div class={styles.userInfo}>
|
|
|
+ <div class={styles.userName}>测试</div>
|
|
|
+ <div class={styles.subjectNames}>
|
|
|
+ <Tag type="primary">长笛</Tag>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ),
|
|
|
+ value: () => (
|
|
|
+ <div class={styles.mins}>
|
|
|
+ <div class={styles.nums}>
|
|
|
+ <span>70</span> 分钟
|
|
|
+ </div>
|
|
|
+ <div class={styles.text}>练习时长</div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ </CellGroup>
|
|
|
+
|
|
|
+ <Popup v-model:show={state.subjectStatus} position="bottom" round>
|
|
|
+ <Picker
|
|
|
+ columns={state.subjectList}
|
|
|
+ onCancel={() => (state.subjectStatus = false)}
|
|
|
+ onConfirm={(val: any) => {}}
|
|
|
+ columnsFieldNames={{ text: 'subjectName', value: 'subjectId' }}
|
|
|
+ />
|
|
|
+ </Popup>
|
|
|
+ </>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|