import { appKey, musicSheetAvailableType, musicSheetPaymentType, musicSheetSourceType, musicSheetType, scoreType } from '@/utils/constant' import { getSelectDataFromObj } from '@/utils/objectUtil' import { NButton, NCheckbox, NForm, NFormItem, NGi, NGrid, NInputNumber, NSelect, NSpace, NSpin, useMessage } from 'naive-ui' import {computed, defineComponent, onMounted, reactive, ref} from 'vue' import { musicSheetApplicationExtendCategoryList, musicSheetApplicationExtendTagList, musicSheetApplicationExtendCategoryApplicationExtendInfo, musicSheetApplicationExtendSave } from '../../api' export default defineComponent({ name: 'music-platform', props: { type: { type: String, default: '' }, useProject: { type: Array, required: true, default: [] }, id: { type: String, required: true, default: null } }, emits: ['close', 'getList'], setup(props, { emit }) { // 'KT' | 'GYT' | 'KLX' | 'GYM' | 'KLXT' const message = useMessage() const forms = reactive({ gym: { applicationId: '', checked: true, paymentType: 'VIP', isConvertibleScore: false, scoreType: 'STAVE', status: true, sortNo: null }, gyt: { applicationId: '', checked: true, availableType: 'PLATFORM', isConvertibleScore: false, scoreType: 'STAVE', status: true, sortNo: null }, klxt: { applicationId: '', checked: true, isConvertibleScore: false, scoreType: 'STAVE', status: true, sortNo: null }, klx: { applicationId: '', checked: true, musicTagIds: [] as any, // 标签 paymentType: ['VIP'] as any, // 收费方式 musicPrice: null as any, // 曲目价格 availableType: 'PLATFORM', topFlag: false, exquisiteFlag: false, isConvertibleScore: true, scoreType: 'FIRST', status: true, sortNo: null }, kt: { applicationId: '', checked: true, musicSheetCategoryId: null, // 乐谱教材 paymentType: 'VIP', isConvertibleScore: true, scoreType: 'FIRST', status: true, sortNo: null, musicTagIds: [] as any, // 标签 recommendFlag: false, } }) // 类型是否支持 const useProjectStatus = computed(() => { return { GYM: checkHasProject('GYM'), KLX_JG: checkHasProject("KLX_JG"), KLX: checkHasProject("KLX"), KT: checkHasProject("KT"), GYT: checkHasProject("GYT") } }) const formsRef = ref() const dataLoading = ref(false) const musicSheetTagList = ref([]) const musicSheetTagListKt = ref([]) const musicSheetCategories = ref([]) const btnLoading = ref(false) // 检测是否存在 const checkHasProject = (name: string) => { const useProject = props.useProject || [] return useProject.findIndex((item: any) => item.appKey === name) !== -1 ? true : false } /** 检测数据 */ const checkSubmitForms = () => { let status = false const gym = forms.gym if(gym.checked) { if(!gym.paymentType) { message.error('请选择收费方式') return true } console.log(gym.isConvertibleScore, 'gym.isConvertibleScore') if(gym.isConvertibleScore == null) { message.error('请选择是否支持转谱') return true } if(!gym.scoreType) { message.error('请选择默认谱面') return true } if(gym.status == null) { message.error('请选择是否启用') return true } } const gyt = forms.gyt if(gyt.checked) { if(!gyt.availableType) { message.error('请选择可用途径') return true } if(gyt.isConvertibleScore == null) { message.error('请选择是否支持转谱') return true } if(!gyt.scoreType) { message.error('请选择默认谱面') return true } if(gyt.status == null) { message.error('请选择是否启用') return true } } const klxt = forms.klxt if(klxt.checked) { if(klxt.isConvertibleScore == null) { message.error('请选择是否支持转谱') return true } if(!klxt.scoreType) { message.error('请选择默认谱面') return true } if(klxt.status == null) { message.error('请选择是否启用') return true } } const klx = forms.klx if(klx.checked) { if(klx.musicTagIds.length <= 0) { message.error('请选择曲目标签') return true } if(!klx.paymentType || klx.paymentType.length <= 0) { message.error('请选择收费方式') return true } if (!klx.paymentType.includes('CHARGE')) { klx.musicPrice = 0 } else { if (klx.musicPrice === null || klx.musicPrice === undefined || klx.musicPrice === '') { message.error('曲目价格不能为空') return true } } // if(klx.availableType == null) { // message.error('请选择可用途径') // return true // } if (typeof klx.topFlag !== 'boolean') { message.error('请选择是否置顶') return true } if (typeof klx.exquisiteFlag !== 'boolean') { message.error('请选择是否精品') return true } if(klx.isConvertibleScore == null) { message.error('请选择是否支持转谱') return true } if(!klx.scoreType) { message.error('请选择默认谱面') return true } if(klx.status == null) { message.error('请选择是否启用') return true } } const kt = forms.kt if(kt.checked) { if(!kt.musicSheetCategoryId) { message.error('请选择乐谱教材') return true } if(!kt.paymentType) { message.error('请选择收费方式') return true } if(kt.isConvertibleScore == null) { message.error('请选择是否支持转谱') return true } if(!kt.scoreType) { message.error('请选择默认谱面') return true } if(kt.status == null) { message.error('请选择是否启用') return true } if(kt.musicTagIds.length <= 0) { message.error('请选择曲目标签') return true } if(kt.recommendFlag == null) { message.error('请选择是否推荐') return true } } return status } /** 获取参数 */ const getSubmitParams = () => { const params: any = [] const useApplicationIds: any = [] if(forms.gym.checked) { params.push({ ...forms.gym }) useApplicationIds.push(forms.gym.applicationId) } if(forms.gyt.checked) { params.push({ ...forms.gyt }) useApplicationIds.push(forms.gyt.applicationId) } if(forms.klxt.checked) { params.push({ ...forms.klxt }) useApplicationIds.push(forms.klxt.applicationId) } if(forms.klx.checked) { params.push({ ...forms.klx, musicTagIds: forms.klx.musicTagIds.join(','), paymentType: forms.klx.paymentType.join(',') }) useApplicationIds.push(forms.klx.applicationId) } if(forms.kt.checked) { params.push({ ...forms.kt, musicTagIds: forms.kt.musicTagIds.join(','), }) useApplicationIds.push(forms.kt.applicationId) } return { musicSheetId: props.id, applicationExtends: params || {}, useApplicationIds: useApplicationIds.join(',') || '' } } // 提交数据 const onSubmit = async () => { try { if(checkSubmitForms()) return btnLoading.value = true const params = getSubmitParams() await musicSheetApplicationExtendSave(params) message.success('保存成功') emit('close') emit('getList') } catch {} btnLoading.value = false } /** 酷乐秀 加载曲目标签 */ const getMusicTags = async () => { try { const useProject = props.useProject || [] const item: any = useProject.find((item: any) => item.appKey === 'KLX') if(!item) return const { data } = await musicSheetApplicationExtendTagList({ applicationId: item.id }) if (data && data.length > 0) { data.forEach((item: any) => { musicSheetTagList.value.push({ ...item, label: item.name, value: item.id }) }) } } catch (err) {} } /** 课堂乐器 加载曲目标签 */ const getMusicTagsKt = async () => { try { const useProject = props.useProject || [] const item: any = useProject.find((item: any) => item.appKey === 'KT') if(!item) return const { data } = await musicSheetApplicationExtendTagList({ applicationId: item.id }) if (data && data.length > 0) { data.forEach((item: any) => { musicSheetTagListKt.value.push({ ...item, label: item.name, value: item.id }) }) } } catch (err) {} } /** 课堂乐器 乐谱教材 */ const getMusicSheetCategories = async () => { //加载曲目分类列表 const useProject = props.useProject || [] const item: any = useProject.find((item: any) => item.appKey === 'KT') if(!item) return const categoryRes = await musicSheetApplicationExtendCategoryList({ applicationIds: item.id }) if (categoryRes.data && categoryRes.data.length > 0) { musicSheetCategories.value = categoryRes.data[0].musicSheetCategories } } const getDetail = async () => { try { // 加载已经配置的APP const { data } = await musicSheetApplicationExtendCategoryApplicationExtendInfo({ musicSheetId: props.id }) const result = data || [] result.forEach((item: any) => { if(item.appKey === 'GYM') { forms.gym.checked = true; forms.gym.paymentType = item.paymentType forms.gym.isConvertibleScore = item.isConvertibleScore forms.gym.scoreType = item.scoreType forms.gym.status = item.status forms.gym.sortNo = item.sortNo } else if(item.appKey === 'GYT') { forms.gyt.checked = true forms.gyt.availableType = item.availableType forms.gyt.isConvertibleScore = item.isConvertibleScore forms.gyt.scoreType = item.scoreType forms.gyt.status = item.status forms.gyt.sortNo = item.sortNo } else if(item.appKey === 'KLX_JG') { forms.klxt.checked = true forms.klxt.isConvertibleScore = item.isConvertibleScore forms.klxt.scoreType = item.scoreType forms.klxt.status = item.status forms.klxt.sortNo = item.sortNo } else if(item.appKey === 'KLX') { forms.klx.checked = true forms.klx.musicTagIds = item.musicTagIds ? item.musicTagIds.split(',') : [] // 标签 forms.klx.paymentType = item.paymentType ? item.paymentType.split(',') : [] // 收费方式 forms.klx.musicPrice = item.musicPrice // 曲目价格 forms.klx.availableType = item.availableType forms.klx.topFlag = item.topFlag forms.klx.exquisiteFlag = item.exquisiteFlag forms.klx.isConvertibleScore = item.isConvertibleScore forms.klx.scoreType = item.scoreType forms.klx.status = item.status forms.klx.sortNo = item.sortNo } else if(item.appKey === 'KT') { forms.kt.checked = true forms.kt.musicSheetCategoryId = item.musicSheetCategoryId // 乐谱教材 forms.kt.paymentType = item.paymentType forms.kt.isConvertibleScore = item.isConvertibleScore forms.kt.scoreType = item.scoreType forms.kt.status = item.status forms.kt.sortNo = item.sortNo forms.kt.musicTagIds = item.musicTagIds ? item.musicTagIds.split(',') : [] // 标签 forms.kt.recommendFlag = item.recommendFlag } }) } catch { } } onMounted(async () => { dataLoading.value = true if(props.type !== 'add') { // 默认重置为false forms.gym.checked = false forms.gyt.checked = false forms.klxt.checked = false forms.klx.checked = false forms.kt.checked = false } // 初始话应用编号 const useProject = props.useProject || [] useProject.forEach((item: any) => { if(item.appKey === 'GYM') { forms.gym.applicationId = item.id } else if(item.appKey === 'KLX_JG') { forms.klxt.applicationId = item.id } else if(item.appKey === 'KLX') { forms.klx.applicationId = item.id } else if(item.appKey === 'KT') { forms.kt.applicationId = item.id } else if(item.appKey === 'GYT') { forms.gyt.applicationId = item.id } }) await getMusicTags() await getMusicTagsKt() await getMusicSheetCategories() await getDetail() dataLoading.value = false }) return () => {useProjectStatus.value.GYM && 管乐迷 } {useProjectStatus.value.GYT && 管乐团 } {useProjectStatus.value.KLX_JG && 酷乐秀机构 } {useProjectStatus.value.KLX && 酷乐秀平台 { musicSheetTagList.value.forEach((item: any) => { if(forms.klx.musicTagIds?.length >= 3) { if(forms.klx.musicTagIds?.includes(item.id)) { item.disabled = false } else { item.disabled = true } } else { item.disabled = false } }) }} /> { forms.klx.paymentType = v const free = 'FREE' if (forms.klx.paymentType[forms.klx.paymentType.length - 1] == free) { forms.klx.paymentType = [free] } else if (forms.klx.paymentType.length > 1 && forms.klx.paymentType.includes(free)) { forms.klx.paymentType.splice(forms.klx.paymentType.indexOf(free), 1) } if (!forms.klx.paymentType.includes('CHARGE')) { forms.klx.musicPrice = 0 } }} /> {/* */} } {useProjectStatus.value.KT && 音乐数字课堂 { musicSheetTagListKt.value.forEach((item: any) => { if(forms.kt.musicTagIds.length >= 3) { if(forms.kt.musicTagIds?.includes(item.id)) { item.disabled = false } else { item.disabled = true } } else { item.disabled = false } }) }} onUpdate:value={() => { musicSheetTagListKt.value.forEach((item: any) => { if(forms.kt.musicTagIds.length >= 3) { if(forms.kt.musicTagIds?.includes(item.id)) { item.disabled = false } else { item.disabled = true } } else { item.disabled = false } }) }} /> } emit('close', true)}> 取消 onSubmit()} loading={btnLoading.value} disabled={btnLoading.value} > 确认 }, })