| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- import { defineComponent, onMounted, reactive } from 'vue';
- import styles from './site-settings.module.less';
- import MSticky from '@/components/m-sticky';
- import MHeader from '@/components/m-header';
- import {
- Button,
- Cell,
- CellGroup,
- Field,
- Icon,
- Image,
- List,
- Picker,
- Popup,
- showToast
- } from 'vant';
- import iconMusic from '@/common/images/icon-music.png';
- import iconTeacher from '@/common/images/icon-teacher-default.png';
- import iconEdit from '@/common/images/icon-edit.png';
- import SkeletonSettingsModal from './skeleton-settings-modal';
- import MFullRefresh from '@/components/m-full-refresh';
- import request from '@/helpers/request';
- import MEmpty from '@/components/m-empty';
- export default defineComponent({
- name: 'site-setting',
- setup() {
- const forms = reactive({
- showPopup: false,
- showOrchestraPopup: false,
- siteName: '',
- orchestraName: '全部乐团',
- orchestraColumns: [{ text: '全部乐团', value: '' }], //
- listState: {
- dataShow: true, // 判断是否有数据
- loading: true,
- finished: false,
- refreshing: false
- },
- params: {
- musicGroupId: null,
- page: 1,
- rows: 20
- },
- isClick: false,
- list: [],
- selectSite: {} as any //
- });
- const onEdit = (item: any) => {
- forms.selectSite = item;
- forms.siteName = item.teachingPoint;
- forms.showPopup = true;
- };
- const onSubmitUpdateSite = async () => {
- try {
- if (!forms.siteName) {
- showToast('请输入场地名称');
- return;
- }
- await request.post('/api-web/classGroup/teachingPoint', {
- hideLoading: false,
- data: {
- classGroupId: forms.selectSite.classGroupId,
- teachingPoint: forms.siteName
- }
- });
- forms.showPopup = false;
- forms.list = [];
- onRefresh();
- } catch {
- //
- }
- };
- const getList = async () => {
- try {
- if (forms.isClick) return;
- forms.isClick = true;
- const { data } = await request.post(
- '/api-web/classGroup/teachingPointClass',
- {
- data: forms.params
- }
- );
- const result = data || {};
- // 判断是否有数据
- if (forms.listState.refreshing) {
- forms.list = result.rows || [];
- } else {
- forms.list = forms.list.concat(result.rows || []);
- }
- forms.listState.finished = result.pageNo >= result.totalPage;
- forms.params.page = result.pageNo + 1;
- } catch {
- forms.listState.finished = true;
- } finally {
- forms.listState.dataShow = forms.list.length > 0;
- forms.listState.refreshing = false;
- forms.listState.loading = false;
- forms.isClick = false;
- }
- };
- const onRefresh = () => {
- forms.params.page = 1;
- getList();
- };
- // 乐团列表
- const musicGroupPage = async () => {
- try {
- const { data } = await request.get(
- '/api-web/cooperationOrgan/musicGroupPage'
- );
- (data || []).forEach((item: any) => {
- forms.orchestraColumns.push({
- text: item.name,
- value: item.id
- });
- });
- } catch {
- //
- }
- };
- onMounted(() => {
- musicGroupPage();
- getList();
- });
- return () => (
- <div class={styles.siteSetting}>
- <MSticky position="top">
- <MHeader />
- <div class={styles.searchGroup}>
- <div
- class={styles.searchItem}
- onClick={() => (forms.showOrchestraPopup = true)}>
- <span>{forms.orchestraName}</span>
- </div>
- </div>
- </MSticky>
- <SkeletonSettingsModal v-model:show={forms.listState.loading}>
- <MFullRefresh
- v-model:modelValue={forms.listState.refreshing}
- onRefresh={() => onRefresh()}
- style={{
- minHeight: `calc(100vh - var(--header-height))`
- }}>
- <List
- finished={forms.listState.finished}
- finishedText=" "
- style={{ overflow: 'hidden' }}
- onLoad={getList}
- immediateCheck={false}>
- {forms.listState.dataShow ? (
- forms.list.map((item: any) => (
- <CellGroup class={styles.cellGroup} border={false}>
- <Cell border={false} center>
- {{
- title: () => (
- <div class={styles.orchestraName}>
- <img src={iconMusic} class={styles.iconMusic} />
- <p class={styles.overhide}>{item.musicGroupName}</p>
- </div>
- ),
- default: () => (
- <div
- class={styles.address}
- onClick={() => onEdit(item)}>
- <p
- class={[
- styles.overhide,
- item.teachingPoint ? '' : styles.red
- ]}>
- {item.teachingPoint || '未设置场地'}
- </p>
- <Icon name={iconEdit} class={styles.iconEdit} />
- </div>
- )
- }}
- </Cell>
- <Cell center class={styles.username}>
- {{
- icon: () => (
- <Image
- src={item.teacherAvatar || iconTeacher}
- class={styles.iconTeacher}
- fit="contain"
- />
- ),
- title: () => (
- <div>
- <div class={styles.classname}>
- {item.classGroupName}
- </div>
- <div class={styles.name}>{item.teacherName}</div>
- </div>
- )
- }}
- </Cell>
- </CellGroup>
- ))
- ) : (
- <MEmpty
- style={{
- minHeight: `calc(100vh - var(--header-height))`
- }}
- description="暂无数据"
- />
- )}
- </List>
- </MFullRefresh>
- </SkeletonSettingsModal>
- <Popup
- v-model:show={forms.showPopup}
- round
- onClose={() => {
- forms.siteName = '';
- forms.selectSite = {};
- }}>
- <div class={styles.popupContainer}>
- <h2>设置场地</h2>
- <Field
- placeholder="请输入场地名称"
- v-model={forms.siteName}
- border={false}
- class={styles.field}
- maxlength={15}
- />
- <div class={['btnGroupPopup']}>
- <Button
- round
- onClick={() => {
- forms.showPopup = false;
- }}>
- 取消
- </Button>
- <Button type="primary" round onClick={onSubmitUpdateSite}>
- 确定
- </Button>
- </div>
- </div>
- </Popup>
- <Popup v-model:show={forms.showOrchestraPopup} round position="bottom">
- <Picker
- columns={forms.orchestraColumns}
- onCancel={() => (forms.showOrchestraPopup = false)}
- onConfirm={({ selectedOptions }: any) => {
- forms.showOrchestraPopup = false;
- const option = selectedOptions[0];
- forms.orchestraName = option.text;
- forms.params.musicGroupId = option.value;
- forms.list = [];
- forms.listState.dataShow = true;
- onRefresh();
- }}
- />
- </Popup>
- </div>
- );
- }
- });
|