Forráskód Böngészése

添加所属人接口数据

yuanliang 1 éve
szülő
commit
0418579f39

+ 14 - 3
src/views/music-library/api.ts

@@ -116,11 +116,10 @@ export const musicSheetDetail = (params?: any) => {
 /**
  * @description: 乐谱-启用-停用
  */
-export const musicSheetStatus = (params?: any) => {
+export const musicSheetStatusList = (params?: any) => {
   return request({
-    url: '/cbs-app/musicSheet/status',
+    url: '/cbs-app/musicSheet/statusList',
     method: 'post',
-    requestType: 'form',
     data: params
   } as any)
 }
@@ -209,3 +208,15 @@ export const musicSheetCategoriesChangeStatus = (params?: any) => {
     requestType: 'form'
   } as any)
 }
+
+/**
+ *  @description: 所属人列表
+ * @param params
+ */
+export const musicSheetApplicationOwnerList = (params?: any) => {
+  return request({
+    url: '/cbs-app/musicSheetApplicationExtend/ownerList',
+    method: 'post',
+    data: params
+  } as any)
+}

+ 42 - 6
src/views/music-library/music-sheet/component/music-list.tsx

@@ -1,8 +1,8 @@
 import SaveForm from '@/components/save-form'
 import Pagination from '@/components/pagination'
-import {NButton, NDataTable, NFormItem, NIcon, NImage, NInput, NModal, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
+import {DataTableRowKey, NButton, NDataTable, NFormItem, NIcon, NImage, NInput, NModal, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
 import {defineComponent, onMounted, reactive, ref, watch} from 'vue'
-import {musicSheetCategoriesQueryTree, musicSheetPage, musicSheetRemove, musicSheetStatus, musicTagPage} from '../../api'
+import {musicSheetCategoriesQueryTree, musicSheetPage, musicSheetRemove, musicSheetStatusList, musicTagPage} from '../../api'
 import MusicOperation from '../modal/music-operation'
 import {subjectPage} from '@/views/system-manage/api'
 import MusicPreView from '../modal/musicPreView'
@@ -33,7 +33,7 @@ export default defineComponent({
         sourceType: null, //来源类型/作者属性(PLATFORM: 平台; ORG: 机构; PERSON: 个人
         composer: null, //作曲人/音乐人
         userId: null, //所属人
-        useAppId: null, //适用项目ID
+        applicationId: null, //适用项目ID
         status: null, //曲目状态(0:停用,1:启用)
         appAuditFlag: null, //是否审核版本
         categoriesId: null, //是否审核版本
@@ -236,6 +236,11 @@ export default defineComponent({
       ]
     }
 
+    const checkedRowKeysRef = ref<DataTableRowKey[]>([])
+    const handleCheck = (rowKeys: DataTableRowKey[]) => {
+      checkedRowKeysRef.value = rowKeys
+    }
+
     const onChangeStatus = (row: any) => {
       const statusStr = row.status ? '停用' : '启用'
       dialog.warning({
@@ -245,8 +250,34 @@ export default defineComponent({
         negativeText: '取消',
         onPositiveClick: async () => {
           try {
-            await musicSheetStatus({
-              id: row.id
+            await musicSheetStatusList({
+              ids: new Array(row.id),
+              status: !row.status
+            })
+            getList()
+            message.success(`${statusStr}成功`)
+          } catch {
+          }
+        }
+      })
+    }
+
+    const onBatchChangeStatus = (status: boolean) => {
+      const length = checkedRowKeysRef.value.length;
+      if (length == 0) {
+        message.warning("未选择数据")
+      }
+      const statusStr = !status ? '停用' : '启用'
+      dialog.warning({
+        title: '警告',
+        content: `是否${statusStr}` + length + `条数据?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await musicSheetStatusList({
+              ids: checkedRowKeysRef.value,
+              status: status
             })
             getList()
             message.success(`${statusStr}成功`)
@@ -422,7 +453,7 @@ export default defineComponent({
             <NFormItem label="适用项目" path="app">
               <NSelect
                   placeholder="请选择适用项目"
-                  v-model:value={state.searchForm.useAppId}
+                  v-model:value={state.searchForm.applicationId}
                   options={state.showUseProjectData}
                   clearable
               />
@@ -491,17 +522,21 @@ export default defineComponent({
                 新增曲目
               </NButton>
               <NButton
+                  disabled={checkedRowKeysRef.value.length == 0}
                   //v-auth="musicSheet/save1602302550719426561"
                   onClick={() => {
                     // state.musicOperation = 'unable'
                     // state.musicData = {}
+                    onBatchChangeStatus(false)
                   }}
               >
                 批量禁用
               </NButton>
               <NButton
+                  disabled={checkedRowKeysRef.value.length == 0}
                   //v-auth="musicSheet/save1602302550719426561"
                   onClick={() => {
+                    onBatchChangeStatus(true)
                     // state.musicOperation = 'enable'
                     // state.musicData = {}
                   }}
@@ -515,6 +550,7 @@ export default defineComponent({
                 columns={columns()}
                 data={state.dataList}
                 rowKey={(row: any) => row.id}
+                onUpdateCheckedRowKeys={handleCheck}
             ></NDataTable>
             <Pagination
                 v-model:page={state.pagination.page}

+ 55 - 60
src/views/music-library/music-sheet/modal/music-operation.tsx

@@ -303,19 +303,13 @@ export default defineComponent({
       isPlayBeat: true, // 是否播放节拍器
       isUseSystemBeat: true, // 是否使用系统节拍器(0:否;1:是)
       repeatedBeats: false, // 是否重复节拍时长
-      evaluationStandard: 'AMPLITUDE', // 评分标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS
+      evaluationStandard: 'FREQUENCY', // 评分标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS
       multiTracksSelection: [] as any, // 声轨
-      musicSheetExtend: { // 所属人信息
-        userId: 1,
-        userName: '小王',
-        musicSheetId: 1,
-        applicationId: 1,
-        organizationRoleId: 1,
-        useApplicationIds: 1,
-      },
+      musicSheetExtend: {} as any,//所属人信息
     })
     const state = reactive({
       loading: false,
+      previewMode: false,//是否是预览模式
       tagList: [...props.tagList] as any, // 标签列表
       xmlFirstSpeed: null as any, // 第一个音轨速度
       partListNames: [] as any, // 所有音轨声部列表
@@ -326,7 +320,7 @@ export default defineComponent({
       instrumentList: [],
       subjectList: [],
       showMusicSheetOwnerDialog: false, //所属人弹框
-      musicSheetOwnerData: {}, //所属人信息
+      // musicSheetOwnerData: {}, //所属人信息
       multiTracks: null,
     })
     const gradualData = reactive({
@@ -568,6 +562,10 @@ export default defineComponent({
       if (props.type === 'edit' || props.type === 'preview') {
         const detail = props.data
         try {
+          state.loading = true
+          if (props.type === 'preview') {
+            state.previewMode = true
+          }
           const {data} = await musicSheetDetail({id: detail.id})
           forms.audioType = data.audioType
           forms.playMode = data.playMode
@@ -586,10 +584,6 @@ export default defineComponent({
           forms.remark = data.remark
           forms.status = data.status
           forms.musicCategoryId = data.musicCategoryId
-          forms.musicSheetSoundList = data.musicSheetSoundList || []
-          forms.musicSheetSoundList.forEach((next: any) => {
-            forms.multiTracksSelection.push(next.track)
-          })
 
           forms.musicSheetType = data.musicSheetType || "SINGLE"
           forms.musicSheetAccompanimentList = data.musicSheetAccompanimentList
@@ -615,11 +609,24 @@ export default defineComponent({
                   (item: any) => item.length === 2
               )
               state.partListNames = getPartListNames(res?.data as any) as any
+
+              // 初始化音轨和原音
+              forms.musicSheetSoundList = data.musicSheetSoundList || []
+              forms.musicSheetSoundList.forEach((next: any) => {
+                forms.multiTracksSelection.push(next.track)
+              })
+              state.partListNames.forEach((item: any) => {
+                const tracks = forms.musicSheetSoundList.map((item: any) => item.track);
+                if (tracks.indexOf(item.label) <= -1) {
+                  forms.musicSheetSoundList.push({audioFileUrl: '', track: item.label})
+                }
+              })
             }
           })
         } catch (error) {
           console.log(error)
         }
+        state.loading = false
       }
     })
 
@@ -631,6 +638,7 @@ export default defineComponent({
               ref={formsRef}
               label-placement="left"
               label-width="130"
+              disabled={state.previewMode}
           >
             <NAlert showIcon={false} style={{marginBottom: "12px"}}>曲目信息</NAlert>
             <NGrid cols={2}>
@@ -686,6 +694,7 @@ export default defineComponent({
                              }
                            ]}>
                 <UploadFile
+                    disabled={state.previewMode}
                     accept=".jpg,.jpeg,.png"
                     tips="请上传大小1M以内的JPG、PNG图片"
                     size={1}
@@ -719,7 +728,6 @@ export default defineComponent({
                     placeholder="请选择曲目类型"
                     v-model:value={forms.musicSheetType}
                     options={getSelectDataFromObj(musicSheetType)}
-                    clearable
                 />
               </NFormItemGi>
 
@@ -736,8 +744,15 @@ export default defineComponent({
                 <NSelect
                     v-model:value={forms.sourceType}
                     options={getSelectDataFromObj(musicSheetSourceType)}
-                    clearable
                     placeholder="请选择作者属性"
+                    onUpdateValue={() => {
+                      // 发送变化,清理选择的所属人信息
+                      forms.musicSheetExtend = {}
+                      // forms.musicSheetExtend.userId = null
+                      // forms.musicSheetExtend.userName = null
+                      // forms.musicSheetExtend.applicationId = null
+                      // forms.musicSheetExtend.organizationRoleId = null
+                    }}
                 />
               </NFormItemGi>
 
@@ -753,21 +768,8 @@ export default defineComponent({
                     }
                   ]}
               >
-                {/*<NButton*/}
-                {/*    v-model:value={forms.musicSheetExtend.userId}*/}
-                {/*    options={*/}
-                {/*      [*/}
-                {/*        {*/}
-                {/*          label: '小A',*/}
-                {/*          value: '1'*/}
-                {/*        }*/}
-                {/*      ] as any*/}
-                {/*    }*/}
-                {/*    filterable*/}
-                {/*    clearable*/}
-                {/*    placeholder="请选择曲目所属人"*/}
-                {/*/>*/}
                 <NButton
+                    disabled={state.previewMode || !forms.sourceType}
                     type="primary"
                     size="small"
                     text
@@ -842,13 +844,6 @@ export default defineComponent({
               >
                 <NRadioGroup
                     v-model:value={forms.repeatedBeats}
-                    // onUpdateValue={(value: string | number | boolean) => {
-                    //   if (value === 'MP3') {
-                    //     forms.repeatedBeats = 'MP3'
-                    //   } else {
-                    //     forms.repeatedBeats = 'MIDI'
-                    //   }
-                    // }}
                 >
                   <NRadio value={true}>是</NRadio>
                   <NRadio value={false}>否</NRadio>
@@ -866,9 +861,9 @@ export default defineComponent({
                 <NRadioGroup
                     v-model:value={forms.evaluationStandard}
                 >
-                  <NRadio value={'AMPLITUDE'}>节奏评分</NRadio>
-                  <NRadio value={'FREQUENCY'}>音准评分</NRadio>
-                  <NRadio value={'DECIBELS'}>分贝评分</NRadio>
+                  <NRadio value={'FREQUENCY'}>标准评测</NRadio>
+                  <NRadio value={'AMPLITUDE'}>打击乐(振幅)</NRadio>
+                  <NRadio value={'DECIBELS'}>节奏(分贝)</NRadio>
                 </NRadioGroup>
               </NFormItemGi>
             </NGrid>
@@ -928,6 +923,7 @@ export default defineComponent({
                       ]}
                   >
                     <UploadFile
+                        disabled={state.previewMode}
                         size={10}
                         v-model:imageList={state.musicSheetAccompanimentUrlList}
                         tips="仅支持上传.mp3格式文件"
@@ -969,6 +965,7 @@ export default defineComponent({
                       ]}
                   >
                     <UploadFile
+                        disabled={state.previewMode}
                         size={10}
                         v-model:fileList={forms.midiFileUrl}
                         tips="仅支持上传.MIDI格式文件"
@@ -991,6 +988,7 @@ export default defineComponent({
                   ]}
               >
                 <UploadFile
+                    disabled={state.previewMode}
                     size={10}
                     v-model:fileList={forms.xmlFileUrl}
                     tips="仅支持上传.xml格式文件"
@@ -1041,7 +1039,7 @@ export default defineComponent({
                     v-model:value={forms.musicalInstrumentIdList}
                     clearable
                     multiple
-                    maxTagCount={3}
+                    maxTagCount={2}
                 />
               </NFormItemGi>
             </NGrid>
@@ -1087,7 +1085,7 @@ export default defineComponent({
                           >
                             {state.partListNames.map((item: any, index: number) => (
                                 <NGi>
-                                  <NCheckbox value={item.value} label={item.label} onChange={() => {
+                                  <NCheckbox value={item.value} label={item.label} onUpdateChecked={() => {
                                     console.log("forms.multiTracksSelection", forms.multiTracksSelection)
                                     console.log("forms.musicSheetSoundList", forms.musicSheetSoundList)
                                   }}/>
@@ -1140,9 +1138,9 @@ export default defineComponent({
                 <>
                   {forms.musicSheetSoundList.map((item: any, index: number) => (
                       <>
-                        {item.track?.toLocaleUpperCase?.() != 'COMMON' &&
+                        {item.track?.toLocaleUpperCase?.() != 'COMMON' && forms.multiTracksSelection.indexOf(item.track) > -1 &&
                             <NGrid class={styles.audioSection}
-                                   v-show={forms.multiTracksSelection.indexOf(item.track) > -1}
+                                // v-show={forms.multiTracksSelection.indexOf(item.track) > -1}
                             >
                                 <NFormItemGi
                                     span={12}
@@ -1151,7 +1149,7 @@ export default defineComponent({
                                     rule={[
                                       {
                                         // required: forms.multiTracksSelection.indexOf(forms.musicSheetSoundList[index].audioFileUrl) > -1,
-                                        required: false,
+                                        required: true,
                                         message: `请上传${
                                             item.track ? item.track + '的' : '第' + (index + 1) + '个'
                                         }原音`
@@ -1159,6 +1157,7 @@ export default defineComponent({
                                     ]}
                                 >
                                     <UploadFile
+                                        disabled={state.previewMode}
                                         size={10}
                                         v-model:fileList={item.audioFileUrl}
                                         tips="仅支持上传.mp3/.aac格式文件"
@@ -1186,16 +1185,6 @@ export default defineComponent({
                                     />
                                   </NFormItemGi>
                               )}
-                              {/*<NGi class={styles.btnRemove}>*/}
-                              {/*    <NButton*/}
-                              {/*        type="primary"*/}
-                              {/*        text*/}
-                              {/*        disabled={forms.musicSheetSoundList.length === 1}*/}
-                              {/*        onClick={() => removeSys(index)}*/}
-                              {/*    >*/}
-                              {/*        删除*/}
-                              {/*    </NButton>*/}
-                              {/*</NGi>*/}
                             </NGrid>}
                       </>
                   ))}
@@ -1241,11 +1230,17 @@ export default defineComponent({
               title="所属人"
               style={{width: '800px'}}
           >
-            <MusicSheetOwnerDialog onClose={() => {
-              state.showMusicSheetOwnerDialog = false
-            }} onChoseMusicSheetOwnerData={(musicSheetOwnerData) => {
-              state.musicSheetOwnerData = musicSheetOwnerData
-            }}
+            <MusicSheetOwnerDialog
+                sourceType={forms.sourceType}
+                onClose={() => {
+                  state.showMusicSheetOwnerDialog = false
+                }}
+                onChoseMusicSheetOwnerData={(musicSheetOwnerData) => {
+                  forms.musicSheetExtend = {
+                    ...musicSheetOwnerData
+                  }
+                  console.log(forms.musicSheetExtend)
+                }}
             />
           </NModal>
         </div>

+ 38 - 14
src/views/music-library/music-sheet/modal/musicSheetOwnerDialog.tsx

@@ -1,18 +1,24 @@
 import {NButton, NDataTable, NFormItem, NInput, NSelect, NSpace, useDialog, useMessage} from 'naive-ui'
 import {defineComponent, onMounted, PropType, reactive, ref} from 'vue'
-import {musicSheetPage} from '../../api'
+import {musicSheetApplicationOwnerList} from '../../api'
 import SaveForm from "@components/save-form";
 import Pagination from "@components/pagination";
 import {sysApplicationPage} from "@views/menu-manage/api";
+import {clientType} from "@/utils/constant";
+import {getMapValueByKey} from "@/utils/objectUtil";
 
 export default defineComponent({
-  name: 'music-operation',
+  name: 'musicSheetOwnerDialog',
   props: {
     data: {
       type: Object as PropType<any>,
       default: () => {
       }
     },
+    sourceType: {
+      type: String,
+      default: null
+    }
 
   },
   emits: ['close', 'getList', "choseMusicSheetOwnerData"],
@@ -27,7 +33,8 @@ export default defineComponent({
       },
       searchForm: {
         applicationId: null,
-        userName: null,
+        name: null,
+        sourceType: null as any,
       },
       dataList: [],
       appData: [], // 适用项目行数据
@@ -48,6 +55,12 @@ export default defineComponent({
           item.label = item.appName
           item.value = item.id
         })
+
+        if (tempList.length > 0) {
+          state.searchForm.applicationId = tempList[0].value
+        } else {
+          message.warning("获取应用列表失败")
+        }
         state.appData = tempList
       } catch {
       }
@@ -65,8 +78,13 @@ export default defineComponent({
     }
     const getList = async () => {
       try {
+        const applicationId = state.searchForm.applicationId;
+        if (!applicationId) {
+          message.warning("获取应用列表失败");
+        }
         state.loading = true
-        const {data} = await musicSheetPage({...state.pagination, ...state.searchForm})
+        state.searchForm.sourceType = props.sourceType
+        const {data} = await musicSheetApplicationOwnerList({...state.pagination, ...state.searchForm})
         state.pagination.pageTotal = Number(data.total)
         state.dataList = data.rows || []
       } catch {
@@ -75,8 +93,8 @@ export default defineComponent({
     }
 
     onMounted(async () => {
-      getList()
       initUseAppList()
+      getList()
     })
     const columns = (): any => {
       return [
@@ -90,7 +108,10 @@ export default defineComponent({
         },
         {
           title: '客户端',
-          key: 'clientType'
+          key: 'clientType',
+          render(row: any) {
+            return getMapValueByKey(row.clientType, new Map(Object.entries(clientType)));
+          }
         },
         {
           title: '操作',
@@ -104,7 +125,11 @@ export default defineComponent({
                       size="small"
                       text
                       onClick={() => {
-                        emit("choseMusicSheetOwnerData", row)
+                        const choseMusicSheetOwnerData = {
+                          ...row,
+                          applicationId: state.searchForm.applicationId
+                        }
+                        emit("choseMusicSheetOwnerData", choseMusicSheetOwnerData)
                         emit('close')
                       }}
                   >
@@ -123,25 +148,24 @@ export default defineComponent({
               ref={saveForm}
               model={state.searchForm}
               onSubmit={onSubmit}
-              saveKey="music-list"
+              saveKey="musicSheetOwnerDialog"
               onSetModel={(val: any) => (state.searchForm = val)}
           >
-            <NFormItem label="应用" path="applicationId" size = "small">
+            <NFormItem label="应用" path="applicationId" size="small">
               <NSelect
                   placeholder="请选择适用项目"
                   v-model:value={state.searchForm.applicationId}
                   options={state.appData}
-                  clearable
               />
             </NFormItem>
-            <NFormItem label="所属人" path="userName" size = "small">
+            <NFormItem label="所属人" path="userName" size="small">
               <NInput
                   placeholder="请选择所属人"
-                  v-model:value={state.searchForm.userName}
+                  v-model:value={state.searchForm.name}
                   clearable
               />
             </NFormItem>
-            <NFormItem size = "small">
+            <NFormItem size="small">
               <NSpace>
                 <NButton type="primary" onClick={onSearch}>
                   搜索
@@ -161,7 +185,7 @@ export default defineComponent({
                 v-model:pageTotal={state.pagination.pageTotal}
                 onList={getList}
                 sync
-                saveKey="music-list"
+                saveKey="musicSheetOwnerDialog"
                 pageSlot={5}
             ></Pagination>
           </div>