|
@@ -1,56 +1,164 @@
|
|
|
import {defineComponent, onMounted, reactive, ref} from 'vue'
|
|
|
-import {useUserStore} from '@/store/modules/user'
|
|
|
import styles from "@views/music-library/music-sheet/modal/index.module.less";
|
|
|
-import {NButton, NCheckbox, NCheckboxGroup, NForm, NFormItem, NInput, NSelect, NSpace, NTabPane, NTabs} from "naive-ui";
|
|
|
-import {setTabsCaches} from "@/hooks/use-async";
|
|
|
-import {useRoute} from "vue-router";
|
|
|
+import {NButton, NCascader, NCheckbox, NCheckboxGroup, NForm, NFormItem, NInput, NInputNumber, NSelect, NSpace, NTabPane, NTabs, useMessage} from "naive-ui";
|
|
|
import {appKey} from "@/utils/constant";
|
|
|
+import {
|
|
|
+ musicSheetApplicationExtendCategoryApplicationExtendInfo,
|
|
|
+ musicSheetApplicationExtendCategoryList,
|
|
|
+ musicSheetApplicationExtendSave,
|
|
|
+ musicSheetDetail,
|
|
|
+} from "@views/music-library/api";
|
|
|
|
|
|
export default defineComponent({
|
|
|
- name: 'musicPreView',
|
|
|
+ name: 'use-project',
|
|
|
props: {
|
|
|
- item: {
|
|
|
- type: Object,
|
|
|
- default: () => {
|
|
|
- }
|
|
|
+ useProject: {
|
|
|
+ type: Array,
|
|
|
+ required: true,
|
|
|
+ default: []
|
|
|
},
|
|
|
- rowData: {
|
|
|
- type: Object,
|
|
|
- default: () => {
|
|
|
- }
|
|
|
+ id: {
|
|
|
+ type: String,
|
|
|
+ required: true,
|
|
|
+ default: null
|
|
|
}
|
|
|
},
|
|
|
+ emits: ['close', 'getList'],
|
|
|
setup(props, {emit}) {
|
|
|
+ const forms = reactive({
|
|
|
+ musicSheetId: null,
|
|
|
+ useApplicationIds: [] as any,
|
|
|
+
|
|
|
+ useProjectParamConfig: { //各个项目配置的参数
|
|
|
+ 'KT': {
|
|
|
+ musicSheetCategoryId: null as any,
|
|
|
+ sortNo: null as any,
|
|
|
+ }
|
|
|
+
|
|
|
+ } as any,
|
|
|
+ })
|
|
|
const state = reactive({
|
|
|
+ loading: false,
|
|
|
tabName: null as any,
|
|
|
- selectApp: [] as any, //选择的APP
|
|
|
- showTabMec: true,
|
|
|
- showTabJmedu: true,
|
|
|
+ selectAppKey: [] as any, //选择的APP
|
|
|
+ userProjectList: [] as any, // 适用项目列表
|
|
|
+ musicSheetCategoryOptions: {} as any,//项目曲目分类选择
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
- onMounted(() => {
|
|
|
- // getTagList()
|
|
|
- console.log(props.rowData)
|
|
|
- })
|
|
|
+ const btnLoading = ref(false)
|
|
|
+ const message = useMessage()
|
|
|
|
|
|
- const userStore = useUserStore()
|
|
|
- const token = userStore.getToken
|
|
|
- const forms = reactive({})
|
|
|
- const formsRef = ref()
|
|
|
- const route = useRoute()
|
|
|
- const setTabs = (val: any) => {
|
|
|
- setTabsCaches(val, 'tabName', route)
|
|
|
- }
|
|
|
+ onMounted(async () => {
|
|
|
+ state.loading = true
|
|
|
|
|
|
- function onSubmit() {
|
|
|
+ // 加载已经配置的APP
|
|
|
+ const {data} = await musicSheetDetail({id: props.id})
|
|
|
+ if (data && data.musicSheetExtend) {
|
|
|
+ forms.useApplicationIds = data.musicSheetExtend.useApplicationIds?.split(',') || []
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
+ // 加载所有的APP
|
|
|
+ const keys = Object.keys(appKey);
|
|
|
+ state.userProjectList = props.useProject.filter((next: any) => {
|
|
|
+ const indexOf = keys.indexOf(next.appKey);
|
|
|
+ return indexOf > -1;
|
|
|
+ })
|
|
|
+ state.userProjectList.forEach((next: any) => {
|
|
|
+ if (forms.useApplicationIds.includes(next.id)) {
|
|
|
+ state.selectAppKey.push(next.appKey)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (state.selectAppKey.length > 0) {
|
|
|
+ state.tabName = state.selectAppKey[0]
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加载不同项目的曲目分类列表
|
|
|
+ const useProject = props.useProject;
|
|
|
+ for (let i = 0; i < useProject.length; i++) {
|
|
|
+ const item = useProject[i] as any;
|
|
|
+ const res = await musicSheetApplicationExtendCategoryList({page: 1, rows: 9999, applicationId: item.id})
|
|
|
+ const categoryList = res.data || []
|
|
|
+ if (categoryList) {
|
|
|
+ categoryList.label = categoryList.name
|
|
|
+ categoryList.value = categoryList.id
|
|
|
+ if (item.appKey === 'KT') {
|
|
|
+ state.musicSheetCategoryOptions.KT = categoryList
|
|
|
+ } else if (item.appKey === 'GYT') {
|
|
|
+ state.musicSheetCategoryOptions.GYT = categoryList
|
|
|
+ } else if (item.appKey === 'MEC') {
|
|
|
+ state.musicSheetCategoryOptions.MEC = categoryList
|
|
|
+ } else if (item.appKey === 'KLX') {
|
|
|
+ state.musicSheetCategoryOptions.KLX = categoryList
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (let i = 0; i < state.selectAppKey.length; i++) {
|
|
|
+ const appKey = state.selectAppKey[i];
|
|
|
+ // 初始化数据
|
|
|
+ const res = await musicSheetApplicationExtendCategoryApplicationExtendInfo({musicSheetId: props.id, appKey: appKey}) as any
|
|
|
+ if (res && res.code === 200 && res.data?.length > 0) {
|
|
|
+ if (appKey === 'KT') {
|
|
|
+ forms.useProjectParamConfig.KT = res.data[0]
|
|
|
+ } else if (appKey === 'GYT') {
|
|
|
+ forms.useProjectParamConfig.GYT = res.data[0]
|
|
|
+ } else if (appKey === 'MEC') {
|
|
|
+ forms.useProjectParamConfig.MEC = res.data[0]
|
|
|
+ } else if (appKey === 'KLX') {
|
|
|
+ forms.useProjectParamConfig.KLX = res.data[0]
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- function changeSelectapp(apps: string) {
|
|
|
- apps.split(',').forEach(app => {
|
|
|
+ }
|
|
|
|
|
|
+
|
|
|
+ state.loading = false
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ const formsRef = ref()
|
|
|
+
|
|
|
+ const onSubmit = async () => {
|
|
|
+ formsRef.value.validate(async (error: any) => {
|
|
|
+ console.log(error, 'error')
|
|
|
+ if (error) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ const appKeyIdMap = new Map<string, string>;
|
|
|
+ props.useProject.forEach((project: any) => {
|
|
|
+ appKeyIdMap.set(project.appKey, project.id)
|
|
|
+ })
|
|
|
+ // 获取选择的应用项目
|
|
|
+ const applicationExtends = [] as any
|
|
|
+ state.selectAppKey.forEach((appKey: any) => {
|
|
|
+ Object.keys(forms.useProjectParamConfig).forEach(key => {
|
|
|
+ if (appKey === key) {
|
|
|
+ const value = forms.useProjectParamConfig[key];
|
|
|
+ applicationExtends.push({
|
|
|
+ ...value,
|
|
|
+ musicSheetId: props.id,
|
|
|
+ applicationId: appKeyIdMap.get(key)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ const params = {
|
|
|
+ 'musicSheetId': props.id,
|
|
|
+ 'useApplicationIds': forms.useApplicationIds.join(','),
|
|
|
+ 'applicationExtends': applicationExtends
|
|
|
+ }
|
|
|
+ btnLoading.value = true
|
|
|
+ await musicSheetApplicationExtendSave(params)
|
|
|
+ message.success('修改成功')
|
|
|
+ emit('getList')
|
|
|
+ emit('close')
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e)
|
|
|
+ }
|
|
|
+ btnLoading.value = false
|
|
|
})
|
|
|
}
|
|
|
|
|
@@ -65,8 +173,8 @@ export default defineComponent({
|
|
|
label-width="85"
|
|
|
>
|
|
|
<NFormItem
|
|
|
- label="适用应用:"
|
|
|
- path="audioType"
|
|
|
+ label="适用应用"
|
|
|
+ path="useApplicationIds"
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
@@ -75,29 +183,36 @@ export default defineComponent({
|
|
|
]}
|
|
|
>
|
|
|
<NCheckboxGroup
|
|
|
+ v-model:value={forms.useApplicationIds}
|
|
|
onUpdateValue={(value) => {
|
|
|
- state.selectApp = value;
|
|
|
- if (!state.tabName) {
|
|
|
- // 没有值,将第一个作为选中对象
|
|
|
- state.tabName = value.toString()
|
|
|
- }
|
|
|
+ state.selectAppKey = []
|
|
|
+ state.userProjectList.filter((next: any) => {
|
|
|
+ if (value.includes(next.id)) {
|
|
|
+ state.selectAppKey.push(next.appKey)
|
|
|
+ }
|
|
|
+ if (!state.tabName) {
|
|
|
+ state.tabName = next.appKey
|
|
|
+ }
|
|
|
+ })
|
|
|
}}
|
|
|
>
|
|
|
- <NCheckbox value="MEC">管乐迷</NCheckbox>
|
|
|
- <NCheckbox value="JMEDU">管乐团</NCheckbox>
|
|
|
- <NCheckbox value="COOLESHOW">酷乐秀</NCheckbox>
|
|
|
- <NCheckbox value="COOLESHOW_EDU">音乐数字课堂</NCheckbox>
|
|
|
+ {state.userProjectList.map((item: any) => (
|
|
|
+ <NCheckbox value={item.value}>{item.label}</NCheckbox>
|
|
|
+ ))
|
|
|
+ }
|
|
|
</NCheckboxGroup>
|
|
|
</NFormItem>
|
|
|
<NTabs
|
|
|
type="line"
|
|
|
v-model:value={state.tabName}
|
|
|
- onUpdate:value={(val: any) => setTabs(val)}
|
|
|
+ onUpdate:value={(val: any) => {
|
|
|
+ state.tabName = val
|
|
|
+ }}
|
|
|
>
|
|
|
- {state.selectApp.includes(appKey.GYM) &&
|
|
|
+ {state.selectAppKey.includes('GYM') &&
|
|
|
<NTabPane
|
|
|
- tab="管乐迷"
|
|
|
- name={appKey.GYM}
|
|
|
+ tab={appKey.GYM}
|
|
|
+ name='GYM'
|
|
|
>
|
|
|
<NFormItem
|
|
|
label="曲目分类"
|
|
@@ -135,10 +250,10 @@ export default defineComponent({
|
|
|
</NFormItem>
|
|
|
</NTabPane>
|
|
|
}
|
|
|
- {state.selectApp.includes(appKey.GYT) &&
|
|
|
+ {state.selectAppKey.includes('GYT') &&
|
|
|
<NTabPane
|
|
|
- tab="管乐团"
|
|
|
- name={appKey.GYT}
|
|
|
+ tab={appKey.GYT}
|
|
|
+ name='GYT'
|
|
|
>
|
|
|
<NFormItem
|
|
|
label="分类"
|
|
@@ -155,10 +270,10 @@ export default defineComponent({
|
|
|
</NFormItem>
|
|
|
</NTabPane>
|
|
|
}
|
|
|
- {state.selectApp.includes(appKey.KLX) &&
|
|
|
+ {state.selectAppKey.includes('KLX') &&
|
|
|
<NTabPane
|
|
|
- tab="酷乐秀"
|
|
|
- name={appKey.KLX}
|
|
|
+ tab={appKey.KLX}
|
|
|
+ name='KLX'
|
|
|
>
|
|
|
<NFormItem
|
|
|
label="可用途径"
|
|
@@ -210,37 +325,50 @@ export default defineComponent({
|
|
|
</NFormItem>
|
|
|
</NTabPane>
|
|
|
}
|
|
|
- {state.selectApp.includes(appKey.KT) &&
|
|
|
+ {state.selectAppKey.includes('KT') &&
|
|
|
<NTabPane
|
|
|
- tab="音乐数字课堂"
|
|
|
- name={appKey.KT}
|
|
|
+ tab={appKey.KT}
|
|
|
+ name='KT'
|
|
|
>
|
|
|
<NFormItem
|
|
|
label="曲目分类"
|
|
|
- path="musicSheetType"
|
|
|
+ path="useProjectParamConfig.KT.musicSheetCategoryId"
|
|
|
>
|
|
|
- <NSelect>
|
|
|
- </NSelect>
|
|
|
+ <NCascader
|
|
|
+ valueField="id"
|
|
|
+ labelField="name"
|
|
|
+ children-field="children"
|
|
|
+ placeholder="请选择分类"
|
|
|
+ v-model:value={forms.useProjectParamConfig.KT.musicSheetCategoryId}
|
|
|
+ options={state.musicSheetCategoryOptions.KT}
|
|
|
+ clearable
|
|
|
+ />
|
|
|
</NFormItem>
|
|
|
<NFormItem
|
|
|
label="排序值"
|
|
|
- path="musicSheetType"
|
|
|
+ path="useProjectParamConfig.KT.sortNo"
|
|
|
>
|
|
|
- <NInput></NInput>
|
|
|
+ <NInputNumber
|
|
|
+ v-model:value={forms.useProjectParamConfig.KT.sortNo}
|
|
|
+ placeholder="请输入排序值"
|
|
|
+ clearable
|
|
|
+ min={0}
|
|
|
+ style={{width: '100%'}}
|
|
|
+ />
|
|
|
</NFormItem>
|
|
|
</NTabPane>
|
|
|
}
|
|
|
</NTabs>
|
|
|
</NForm>
|
|
|
- <NSpace justify="end">
|
|
|
+ <NSpace justify="end" style={'margin-top: 10px'}>
|
|
|
<NButton type="default" onClick={() => emit('close')}>
|
|
|
取消
|
|
|
</NButton>
|
|
|
<NButton
|
|
|
type="primary"
|
|
|
onClick={() => onSubmit()}
|
|
|
- // loading={btnLoading.value}
|
|
|
- // disabled={btnLoading.value}
|
|
|
+ loading={btnLoading.value}
|
|
|
+ disabled={btnLoading.value}
|
|
|
>
|
|
|
确认
|
|
|
</NButton>
|