|  | @@ -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>
 |