yuanliang пре 1 година
родитељ
комит
b45e215efe
89 измењених фајлова са 1302 додато и 555 уклоњено
  1. 1 1
      dist/assets/404.a496ff8b.js
  2. 1 1
      dist/assets/Cascader.5c495929.js
  3. 1 1
      dist/assets/DeleteFilled.06b4b352.js
  4. 1 1
      dist/assets/FormItemGridItem.0d417260.js
  5. 1 0
      dist/assets/HelpCircleOutline.6ee97e5e.js
  6. 1 1
      dist/assets/PageHeader.ad1cf0f4.js
  7. 1 1
      dist/assets/TreeSelect.40def3d6.js
  8. 1 1
      dist/assets/api.103da38a.js
  9. 1 1
      dist/assets/api.161fbc38.js
  10. 0 0
      dist/assets/api.178d4833.js
  11. 1 1
      dist/assets/api.19dfed07.js
  12. 1 1
      dist/assets/api.9ef41f1a.js
  13. 1 1
      dist/assets/api.a6afa8e6.js
  14. 1 1
      dist/assets/api.abe90f4c.js
  15. 0 0
      dist/assets/api.d91d78e2.js
  16. 0 0
      dist/assets/constant.ded25e36.js
  17. 1 1
      dist/assets/dateUtil.4379ec68.js
  18. 0 0
      dist/assets/dayjs.min.feb63b7e.js
  19. 0 0
      dist/assets/detail.ae4bf562.js
  20. 0 0
      dist/assets/editAndUpdate.7f3f9e51.js
  21. 0 0
      dist/assets/employee-tab.8d849dce.js
  22. 1 1
      dist/assets/filters.de6e9e5f.js
  23. 0 0
      dist/assets/index.0191b56f.js
  24. 0 0
      dist/assets/index.0aa1813a.js
  25. 0 0
      dist/assets/index.1cf48e2b.js
  26. 0 0
      dist/assets/index.23477f5e.js
  27. 1 1
      dist/assets/index.247486dd.js
  28. 0 0
      dist/assets/index.31c70696.js
  29. 0 0
      dist/assets/index.3a2594b9.css
  30. 0 0
      dist/assets/index.4084ffaa.js
  31. 0 0
      dist/assets/index.42789633.js
  32. 0 0
      dist/assets/index.5a0d4801.js
  33. 0 0
      dist/assets/index.60641bfd.js
  34. 0 0
      dist/assets/index.746842da.css
  35. 0 0
      dist/assets/index.750a271b.js
  36. 0 0
      dist/assets/index.7f015cb4.js
  37. 0 0
      dist/assets/index.85fc7e44.js
  38. 1 1
      dist/assets/index.881f47f5.js
  39. 0 0
      dist/assets/index.8c69e0a0.js
  40. 0 0
      dist/assets/index.9da713fa.js
  41. 0 0
      dist/assets/index.af327b36.js
  42. 1 1
      dist/assets/index.b44a395f.js
  43. 1 1
      dist/assets/index.b4765978.js
  44. 0 0
      dist/assets/index.b57905b5.js
  45. 0 0
      dist/assets/index.b7747bc6.js
  46. 0 0
      dist/assets/index.b800a824.js
  47. 0 0
      dist/assets/index.d36aebfe.js
  48. 1 1
      dist/assets/index.d617e35c.js
  49. 0 0
      dist/assets/index.deb29b53.js
  50. 0 0
      dist/assets/index.e1ae860a.js
  51. 0 0
      dist/assets/index.e5d7b798.js
  52. 0 0
      dist/assets/index.e8b32f3b.js
  53. 1 1
      dist/assets/index.eb4697eb.js
  54. 0 0
      dist/assets/index.ebe5fee8.js
  55. 1 1
      dist/assets/index.ec1c4bd8.js
  56. 0 0
      dist/assets/index.f0d34e0c.js
  57. 0 0
      dist/assets/index.f31486d5.js
  58. 0 0
      dist/assets/instrument-list.3a2aac7d.js
  59. 0 0
      dist/assets/instrument-list.6fb48a10.js
  60. 0 0
      dist/assets/interface-log.ca3c4f31.js
  61. BIN
      dist/assets/login-logo.911dc521.png
  62. BIN
      dist/assets/login-logo.e2f7f64c.png
  63. 0 0
      dist/assets/musicUtil.2270d080.js
  64. 1 1
      dist/assets/parentLayout.325bfdd0.js
  65. 0 0
      dist/assets/plan-detail.9b50d120.js
  66. 1 1
      dist/assets/searchArray.c8aafeb3.js
  67. 1 1
      dist/assets/tabsView.a6b0054d.js
  68. 1 1
      dist/assets/use-async.b28e842d.js
  69. 0 0
      dist/assets/vuedraggable.umd.28a9f02f.js
  70. BIN
      dist/favicon.ico
  71. 0 0
      dist/index.html
  72. BIN
      public/favicon.ico
  73. BIN
      src/assets/images/logo.png
  74. 2 2
      src/utils/constant.ts
  75. BIN
      src/views/login/images/login-logo.png
  76. 15 7
      src/views/login/index.vue
  77. 65 46
      src/views/music-library/music-sheet/component/music-list.tsx
  78. 8 5
      src/views/music-library/music-sheet/component/music-sheet-categories-list.tsx
  79. 1 1
      src/views/music-library/music-sheet/index.tsx
  80. 241 161
      src/views/music-library/music-sheet/modal/music-operation.tsx
  81. 127 17
      src/views/music-library/project-music-sheet/module/gym/addMusic.tsx
  82. 110 62
      src/views/music-library/project-music-sheet/module/gym/music-sheet-gym.tsx
  83. 128 19
      src/views/music-library/project-music-sheet/module/gyt/addMusic.tsx
  84. 97 52
      src/views/music-library/project-music-sheet/module/gyt/music-sheet-gyt.tsx
  85. 126 14
      src/views/music-library/project-music-sheet/module/klx/addMusic.tsx
  86. 108 59
      src/views/music-library/project-music-sheet/module/klx/music-sheet-klx.tsx
  87. 129 18
      src/views/music-library/project-music-sheet/module/kt/addMusic.tsx
  88. 108 65
      src/views/music-library/project-music-sheet/module/kt/music-sheet-kt.tsx
  89. 11 2
      src/views/system-manage/subject-manage/instrument/modal/instrument-save.tsx

+ 1 - 1
dist/assets/404.38d0cb00.js → dist/assets/404.a496ff8b.js

@@ -1 +1 @@
-import{d as u,c as r,e as p,f as d,g as e,i,w as l,p as f,y as m,z as h,o as b,k as x,t as B}from"./index.af6afcba.js";import{u as g}from"./tabsView.6200f5cb.js";import"./searchs.b637f0d6.js";const v=""+new URL("404.db5b619b.png",import.meta.url).href,s=t=>(m("data-v-5fc2dfea"),t=t(),h(),t),w={class:"page-container"},y={class:"center-box"},C={class:"text-center"},E=s(()=>e("img",{src:v,alt:""},null,-1)),S={class:"sub-wrap"},V=s(()=>e("h2",{class:"text-base text-gray-500"},"404",-1)),k=s(()=>e("p",null,"\u62B1\u6B49\uFF0C\u4F60\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728",-1)),F=u({__name:"404",setup(t){const o=g(),c=r(),a=p();function _(){o.closeCurrentTab(a),c.push("/")}return(I,N)=>{const n=f;return b(),d("div",w,[e("div",y,[e("div",C,[E,e("div",S,[V,k,i(n,{class:"subBtn",type:"info",onClick:_},{default:l(()=>[x("\u56DE\u5230\u9996\u9875")]),_:1})])])])])}}});const z=B(F,[["__scopeId","data-v-5fc2dfea"]]);export{z as default};
+import{d as u,c as r,e as p,f as d,g as e,i,w as l,p as f,y as m,z as h,o as b,k as x,t as B}from"./index.85fc7e44.js";import{u as g}from"./tabsView.a6b0054d.js";import"./searchs.b637f0d6.js";const v=""+new URL("404.db5b619b.png",import.meta.url).href,s=t=>(m("data-v-5fc2dfea"),t=t(),h(),t),w={class:"page-container"},y={class:"center-box"},C={class:"text-center"},E=s(()=>e("img",{src:v,alt:""},null,-1)),S={class:"sub-wrap"},V=s(()=>e("h2",{class:"text-base text-gray-500"},"404",-1)),k=s(()=>e("p",null,"\u62B1\u6B49\uFF0C\u4F60\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728",-1)),F=u({__name:"404",setup(t){const o=g(),c=r(),a=p();function _(){o.closeCurrentTab(a),c.push("/")}return(I,N)=>{const n=f;return b(),d("div",w,[e("div",y,[e("div",C,[E,e("div",S,[V,k,i(n,{class:"subBtn",type:"info",onClick:_},{default:l(()=>[x("\u56DE\u5230\u9996\u9875")]),_:1})])])])])}}});const z=B(F,[["__scopeId","data-v-5fc2dfea"]]);export{z as default};

+ 1 - 1
dist/assets/Cascader.ef6c3f8e.js → dist/assets/Cascader.5c495929.js

@@ -1,4 +1,4 @@
-import{cj as B,ck as pt,d as re,cl as bt,aQ as E,r as R,C as yt,bi as d,a2 as xe,cm as wt,D as Se,F as h,cn as ce,co as kt,cp as $e,cq as Rt,cr as Ct,m as xt,cs as Pe,ct as St,cu as Mt,cv as he,cw as Tt,H as qe,cx as We,cy as Qe,cz as Nt,cA as Ft,N as Pt,cB as Ot,cC as Ge,cD as Kt,cE as fe,cF as je,cG as ke,cH as Q,cI as _t,cJ as Je,cK as Lt,cL as De,cM as It,cN as Ce,aE as Bt,M as Ee,O as At,cO as Vt,cP as zt,cQ as $t,cR as jt,cS as Dt,cT as Ue,cU as Et,cV as Ut,cW as Ht,cX as qt,cY as Wt,cZ as ee,U as Qt}from"./index.af6afcba.js";const Gt=B("base-menu-mask",`
+import{cj as B,ck as pt,d as re,cl as bt,aQ as E,r as R,C as yt,bi as d,a2 as xe,cm as wt,D as Se,F as h,cn as ce,co as kt,cp as $e,cq as Rt,cr as Ct,m as xt,cs as Pe,ct as St,cu as Mt,cv as he,cw as Tt,H as qe,cx as We,cy as Qe,cz as Nt,cA as Ft,N as Pt,cB as Ot,cC as Ge,cD as Kt,cE as fe,cF as je,cG as ke,cH as Q,cI as _t,cJ as Je,cK as Lt,cL as De,cM as It,cN as Ce,aE as Bt,M as Ee,O as At,cO as Vt,cP as zt,cQ as $t,cR as jt,cS as Dt,cT as Ue,cU as Et,cV as Ut,cW as Ht,cX as qt,cY as Wt,cZ as ee,U as Qt}from"./index.85fc7e44.js";const Gt=B("base-menu-mask",`
  position: absolute;
  left: 0;
  right: 0;

+ 1 - 1
dist/assets/DeleteFilled.7ef3a1a3.js → dist/assets/DeleteFilled.06b4b352.js

@@ -1 +1 @@
-import{d as e,f as t,g as o,o as c}from"./index.af6afcba.js";const n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 1024 1024"},l=o("path",{d:"M864 256H736v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zm-200 0H360v-72h304v72z",fill:"currentColor"},null,-1),s=[l],h=e({name:"DeleteFilled",render:function(i,a){return c(),t("svg",n,s)}});export{h as D};
+import{d as e,f as t,g as o,o as c}from"./index.85fc7e44.js";const n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 1024 1024"},l=o("path",{d:"M864 256H736v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zm-200 0H360v-72h304v72z",fill:"currentColor"},null,-1),s=[l],h=e({name:"DeleteFilled",render:function(i,a){return c(),t("svg",n,s)}});export{h as D};

+ 1 - 1
dist/assets/FormItemGridItem.55c21b0d.js → dist/assets/FormItemGridItem.0d417260.js

@@ -1 +1 @@
-import{d as a,r as n,bi as r,dc as o,dd as i,l as m,de as d,ad as p,df as f,dg as l}from"./index.af6afcba.js";const I=Object.assign(Object.assign({},f),l),g=a({__GRID_ITEM__:!0,name:"FormItemGridItem",alias:["FormItemGi"],props:I,setup(){const e=n(null);return{formItemInstRef:e,validate:(...t)=>{const{value:s}=e;if(s)return s.validate(...t)},restoreValidation:()=>{const{value:t}=e;t&&t.restoreValidation()}}},render(){return r(p,o(this.$.vnode.props||{},d),{default:()=>{const e=o(this.$props,i);return r(m,Object.assign({ref:"formItemInstRef"},e),this.$slots)}})}});export{g as N};
+import{d as a,r as n,bi as r,dc as o,dd as i,l as m,de as d,ad as p,df as f,dg as l}from"./index.85fc7e44.js";const I=Object.assign(Object.assign({},f),l),g=a({__GRID_ITEM__:!0,name:"FormItemGridItem",alias:["FormItemGi"],props:I,setup(){const e=n(null);return{formItemInstRef:e,validate:(...t)=>{const{value:s}=e;if(s)return s.validate(...t)},restoreValidation:()=>{const{value:t}=e;t&&t.restoreValidation()}}},render(){return r(p,o(this.$.vnode.props||{},d),{default:()=>{const e=o(this.$props,i);return r(m,Object.assign({ref:"formItemInstRef"},e),this.$slots)}})}});export{g as N};

+ 1 - 0
dist/assets/HelpCircleOutline.6ee97e5e.js

@@ -0,0 +1 @@
+import{d as t,f as o,g as e,o as r}from"./index.85fc7e44.js";const n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 512 512"},l=e("path",{d:"M256 80a176 176 0 1 0 176 176A176 176 0 0 0 256 80z",fill:"none",stroke:"currentColor","stroke-miterlimit":"10","stroke-width":"32"},null,-1),s=e("path",{d:"M200 202.29s.84-17.5 19.57-32.57C230.68 160.77 244 158.18 256 158c10.93-.14 20.69 1.67 26.53 4.45c10 4.76 29.47 16.38 29.47 41.09c0 26-17 37.81-36.37 50.8S251 281.43 251 296",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-miterlimit":"10","stroke-width":"28"},null,-1),i=e("circle",{cx:"250",cy:"348",r:"20",fill:"currentColor"},null,-1),c=[l,s,i],k=t({name:"HelpCircleOutline",render:function(a,h){return r(),o("svg",n,c)}});export{k as H};

+ 1 - 1
dist/assets/PageHeader.63ab8850.js → dist/assets/PageHeader.ad1cf0f4.js

@@ -1,4 +1,4 @@
-import{d as S,bi as e,cE as l,cj as z,cG as i,cI as _,cJ as y,dt as $,du as H,F as P,cP as R,cp as B}from"./index.af6afcba.js";const E=S({name:"ArrowBack",render(){return e("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},e("path",{d:"M0 0h24v24H0V0z",fill:"none"}),e("path",{d:"M19 11H7.83l4.88-4.88c.39-.39.39-1.03 0-1.42-.39-.39-1.02-.39-1.41 0l-6.59 6.59c-.39.39-.39 1.02 0 1.41l6.59 6.59c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L7.83 13H19c.55 0 1-.45 1-1s-.45-1-1-1z"}))}}),T=l([z("page-header-header",`
+import{d as S,bi as e,cE as l,cj as z,cG as i,cI as _,cJ as y,dt as $,du as H,F as P,cP as R,cp as B}from"./index.85fc7e44.js";const E=S({name:"ArrowBack",render(){return e("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},e("path",{d:"M0 0h24v24H0V0z",fill:"none"}),e("path",{d:"M19 11H7.83l4.88-4.88c.39-.39.39-1.03 0-1.42-.39-.39-1.02-.39-1.41 0l-6.59 6.59c-.39.39-.39 1.02 0 1.41l6.59 6.59c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L7.83 13H19c.55 0 1-.45 1-1s-.45-1-1-1z"}))}}),T=l([z("page-header-header",`
  margin-bottom: 20px;
  `),z("page-header",`
  display: flex;

+ 1 - 1
dist/assets/TreeSelect.206b8d72.js → dist/assets/TreeSelect.40def3d6.js

@@ -1,4 +1,4 @@
-import{c_ as je,G as ze,c$ as De,d0 as $e,d1 as We,cE as He,cj as U,cG as ne,cF as Ge,d as Qe,r as v,cI as Je,cK as Xe,cM as Ze,aQ as _,cL as V,F as c,O as qe,d2 as Ye,cw as et,d3 as tt,cJ as oe,cP as nt,cN as j,cO as at,bi as u,cQ as lt,cR as ot,cS as rt,cT as it,a2 as dt,H as st,cx as ct,d4 as ut,cy as ht,cz as ft,cA as gt,d5 as mt,cC as vt,d6 as yt,cZ as p,cW as bt,cX as pt,cs as St,N as wt}from"./index.af6afcba.js";const xt=t=>{const{popoverColor:h,boxShadow2:i,borderRadius:s,heightMedium:d,dividerColor:y,textColor2:C}=t;return{menuPadding:"4px",menuColor:h,menuBoxShadow:i,menuBorderRadius:s,menuHeight:`calc(${d} * 7.6)`,actionDividerColor:y,actionTextColor:C,actionPadding:"8px 12px"}},kt=je({name:"TreeSelect",common:ze,peers:{Tree:De,Empty:$e,InternalSelection:We},self:xt}),Tt=kt;function ae(t,h){const{rawNode:i}=t;return Object.assign(Object.assign({},i),{label:i[h],value:t.key})}function le(t,h,i,s){const{rawNode:d}=t;return Object.assign(Object.assign({},d),{value:t.key,label:h.map(y=>y.rawNode[s]).join(i)})}const Kt=He([U("tree-select",`
+import{c_ as je,G as ze,c$ as De,d0 as $e,d1 as We,cE as He,cj as U,cG as ne,cF as Ge,d as Qe,r as v,cI as Je,cK as Xe,cM as Ze,aQ as _,cL as V,F as c,O as qe,d2 as Ye,cw as et,d3 as tt,cJ as oe,cP as nt,cN as j,cO as at,bi as u,cQ as lt,cR as ot,cS as rt,cT as it,a2 as dt,H as st,cx as ct,d4 as ut,cy as ht,cz as ft,cA as gt,d5 as mt,cC as vt,d6 as yt,cZ as p,cW as bt,cX as pt,cs as St,N as wt}from"./index.85fc7e44.js";const xt=t=>{const{popoverColor:h,boxShadow2:i,borderRadius:s,heightMedium:d,dividerColor:y,textColor2:C}=t;return{menuPadding:"4px",menuColor:h,menuBoxShadow:i,menuBorderRadius:s,menuHeight:`calc(${d} * 7.6)`,actionDividerColor:y,actionTextColor:C,actionPadding:"8px 12px"}},kt=je({name:"TreeSelect",common:ze,peers:{Tree:De,Empty:$e,InternalSelection:We},self:xt}),Tt=kt;function ae(t,h){const{rawNode:i}=t;return Object.assign(Object.assign({},i),{label:i[h],value:t.key})}function le(t,h,i,s){const{rawNode:d}=t;return Object.assign(Object.assign({},d),{value:t.key,label:h.map(y=>y.rawNode[s]).join(i)})}const Kt=He([U("tree-select",`
  z-index: auto;
  outline: none;
  width: 100%;

+ 1 - 1
dist/assets/api.afe7b5ae.js → dist/assets/api.103da38a.js

@@ -1 +1 @@
-import{ab as e}from"./index.af6afcba.js";const r=s=>e({url:"/cbs-app/sysUserLoginLog/page",method:"post",data:s}),t=s=>e({url:"/cbs-app/sysUserLogin/page",method:"post",data:s}),o=s=>e({url:"/cbs-app/sysUserDevice/page",method:"post",data:s}),p=s=>e({url:"/cbs-app/sysUserAuditLog/page",method:"post",data:s});export{t as a,o as b,p as c,r as s};
+import{ab as e}from"./index.85fc7e44.js";const r=s=>e({url:"/cbs-app/sysUserLoginLog/page",method:"post",data:s}),t=s=>e({url:"/cbs-app/sysUserLogin/page",method:"post",data:s}),o=s=>e({url:"/cbs-app/sysUserDevice/page",method:"post",data:s}),p=s=>e({url:"/cbs-app/sysUserAuditLog/page",method:"post",data:s});export{t as a,o as b,p as c,r as s};

+ 1 - 1
dist/assets/api.c322d78d.js → dist/assets/api.161fbc38.js

@@ -1 +1 @@
-import{ab as a}from"./index.af6afcba.js";const t=s=>a({url:"/cbs-app/sysApplication/page",method:"post",data:s});export{t as s};
+import{ab as a}from"./index.85fc7e44.js";const t=s=>a({url:"/cbs-app/sysApplication/page",method:"post",data:s});export{t as s};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/api.178d4833.js


+ 1 - 1
dist/assets/api.ff6dbb93.js → dist/assets/api.19dfed07.js

@@ -1 +1 @@
-import{ab as t}from"./index.af6afcba.js";const a=e=>t({url:"/cbs-app/knowledgePoint/page",method:"post",data:e}),n=e=>t({url:"/cbs-app/knowledgePoint/save",method:"post",data:e}),l=e=>t({url:"/cbs-app/knowledgePoint/remove?id="+e,method:"post"}),r=e=>t({url:"/cbs-app/knowledgePoint/update",method:"post",data:e}),s=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/page",method:"post",data:e}),i=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/update",method:"post",data:e}),p=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/remove",method:"post",data:e}),d=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/materialPage",method:"post",data:e}),g=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/save",method:"post",data:e}),c=e=>t({url:`/cbs-app/knowledgePoint/status?id=${e}`,method:"post"});export{n as a,c as b,l as c,g as d,d as e,a as f,s as g,p as h,i,r as k};
+import{ab as t}from"./index.85fc7e44.js";const a=e=>t({url:"/cbs-app/knowledgePoint/page",method:"post",data:e}),n=e=>t({url:"/cbs-app/knowledgePoint/save",method:"post",data:e}),l=e=>t({url:"/cbs-app/knowledgePoint/remove?id="+e,method:"post"}),r=e=>t({url:"/cbs-app/knowledgePoint/update",method:"post",data:e}),s=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/page",method:"post",data:e}),i=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/update",method:"post",data:e}),p=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/remove",method:"post",data:e}),d=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/materialPage",method:"post",data:e}),g=e=>t({url:"/cbs-app/knowledgePointMaterialRelation/save",method:"post",data:e}),c=e=>t({url:`/cbs-app/knowledgePoint/status?id=${e}`,method:"post"});export{n as a,c as b,l as c,g as d,d as e,a as f,s as g,p as h,i,r as k};

+ 1 - 1
dist/assets/api.27074d41.js → dist/assets/api.9ef41f1a.js

@@ -1 +1 @@
-var m=Object.defineProperty,i=Object.defineProperties;var c=Object.getOwnPropertyDescriptors;var o=Object.getOwnPropertySymbols;var u=Object.prototype.hasOwnProperty,d=Object.prototype.propertyIsEnumerable;var s=(a,e,t)=>e in a?m(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,p=(a,e)=>{for(var t in e||(e={}))u.call(e,t)&&s(a,t,e[t]);if(o)for(var t of o(e))d.call(e,t)&&s(a,t,e[t]);return a},l=(a,e)=>i(a,c(e));import{ab as r,dn as n}from"./index.af6afcba.js";const b=a=>r({url:"/cbs-app/material/page",method:"post",data:a}),y=a=>new Promise(e=>{r({url:"/cbs-app/materialCategory/page",method:"post",data:l(p({},a),{rows:1e3})}).then(t=>{t!=null&&t.data&&(t.data.rows=n(t.data.rows,"subMaterialCategoryList"),e(t))}).catch(()=>{e({})})}),C=a=>r({url:"/cbs-app/material/save",method:"post",data:a}),v=a=>r({url:"/cbs-app/material/remove?id="+a,method:"post"}),f=a=>r({url:`/cbs-app/material/detail/${a}`,method:"get"}),M=a=>r({url:"/cbs-app/material/update",method:"post",data:a}),w=a=>r({url:"/cbs-app/materialCategory/page",method:"post",data:a}),D=a=>r({url:"/cbs-app/materialCategory/save",method:"post",data:a}),L=a=>r({url:"/cbs-app/materialCategory/remove?id="+a,method:"post"}),P=a=>r({url:"/cbs-app/materialCategory/update",method:"post",data:a});export{D as a,w as b,L as c,C as d,y as e,f,b as g,v as h,P as m,M as u};
+var m=Object.defineProperty,i=Object.defineProperties;var c=Object.getOwnPropertyDescriptors;var o=Object.getOwnPropertySymbols;var u=Object.prototype.hasOwnProperty,d=Object.prototype.propertyIsEnumerable;var s=(a,e,t)=>e in a?m(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,p=(a,e)=>{for(var t in e||(e={}))u.call(e,t)&&s(a,t,e[t]);if(o)for(var t of o(e))d.call(e,t)&&s(a,t,e[t]);return a},l=(a,e)=>i(a,c(e));import{ab as r,dn as n}from"./index.85fc7e44.js";const b=a=>r({url:"/cbs-app/material/page",method:"post",data:a}),y=a=>new Promise(e=>{r({url:"/cbs-app/materialCategory/page",method:"post",data:l(p({},a),{rows:1e3})}).then(t=>{t!=null&&t.data&&(t.data.rows=n(t.data.rows,"subMaterialCategoryList"),e(t))}).catch(()=>{e({})})}),C=a=>r({url:"/cbs-app/material/save",method:"post",data:a}),v=a=>r({url:"/cbs-app/material/remove?id="+a,method:"post"}),f=a=>r({url:`/cbs-app/material/detail/${a}`,method:"get"}),M=a=>r({url:"/cbs-app/material/update",method:"post",data:a}),w=a=>r({url:"/cbs-app/materialCategory/page",method:"post",data:a}),D=a=>r({url:"/cbs-app/materialCategory/save",method:"post",data:a}),L=a=>r({url:"/cbs-app/materialCategory/remove?id="+a,method:"post"}),P=a=>r({url:"/cbs-app/materialCategory/update",method:"post",data:a});export{D as a,w as b,L as c,C as d,y as e,f,b as g,v as h,P as m,M as u};

+ 1 - 1
dist/assets/api.9cc7fb1d.js → dist/assets/api.a6afa8e6.js

@@ -1 +1 @@
-import{ab as e}from"./index.af6afcba.js";const a=t=>e({url:"/cbs-app/musicalInstrument/page",method:"post",data:t}),u=t=>e({url:"/cbs-app/musicalInstrument/queryNotRelated",method:"post",data:t}),r=t=>e({url:"/cbs-app/musicalInstrument/save",method:"post",data:t}),c=t=>e({url:"/cbs-app/musicalInstrument/update",method:"post",data:t}),p=t=>e({url:"/cbs-app/musicalInstrument/enable?id="+t.id,method:"post",data:t}),o=t=>e({url:"/cbs-app/subjectCategory/page",method:"post",data:t}),n=t=>e({url:"/cbs-app/subjectCategory/save",method:"post",data:t}),m=t=>e({url:"/cbs-app/subjectCategory/update",method:"post",data:t}),b=t=>e({url:"/cbs-app/subject/page",method:"post",data:t}),l=t=>e({url:"/cbs-app/subject/save",method:"post",data:t}),d=t=>e({url:"/cbs-app/subject/update",method:"post",data:t}),i=t=>e({url:"/cbs-app/subject/enable",method:"post",requestType:"form",data:t});export{d as a,o as b,a as c,b as d,i as e,n as f,m as g,r as h,c as i,p as j,u as m,l as s};
+import{ab as e}from"./index.85fc7e44.js";const a=t=>e({url:"/cbs-app/musicalInstrument/page",method:"post",data:t}),u=t=>e({url:"/cbs-app/musicalInstrument/queryNotRelated",method:"post",data:t}),r=t=>e({url:"/cbs-app/musicalInstrument/save",method:"post",data:t}),c=t=>e({url:"/cbs-app/musicalInstrument/update",method:"post",data:t}),p=t=>e({url:"/cbs-app/musicalInstrument/enable?id="+t.id,method:"post",data:t}),o=t=>e({url:"/cbs-app/subjectCategory/page",method:"post",data:t}),n=t=>e({url:"/cbs-app/subjectCategory/save",method:"post",data:t}),m=t=>e({url:"/cbs-app/subjectCategory/update",method:"post",data:t}),b=t=>e({url:"/cbs-app/subject/page",method:"post",data:t}),l=t=>e({url:"/cbs-app/subject/save",method:"post",data:t}),d=t=>e({url:"/cbs-app/subject/update",method:"post",data:t}),i=t=>e({url:"/cbs-app/subject/enable",method:"post",requestType:"form",data:t});export{d as a,o as b,a as c,b as d,i as e,n as f,m as g,r as h,c as i,p as j,u as m,l as s};

+ 1 - 1
dist/assets/api.dcd654cf.js → dist/assets/api.abe90f4c.js

@@ -1 +1 @@
-import{ab as s}from"./index.af6afcba.js";const a=t=>s({url:"/cbs-app/sysMenuButton/page",method:"post",data:t}),u=t=>s({url:"/cbs-app/sysMenuButton/save",method:"post",data:t}),o=t=>s({url:"/cbs-app/sysMenuButton/update",method:"post",data:t}),n=t=>s({url:"/cbs-app/sysMenuButton/remove",method:"post",data:t,requestType:"form"}),p=t=>s({url:"/cbs-app/musicTag/page",method:"post",data:t}),r=t=>s({url:"/cbs-app/musicSheet/page",method:"post",data:t});export{o as a,a as b,n as c,p as d,r as m,u as s};
+import{ab as s}from"./index.85fc7e44.js";const a=t=>s({url:"/cbs-app/sysMenuButton/page",method:"post",data:t}),u=t=>s({url:"/cbs-app/sysMenuButton/save",method:"post",data:t}),o=t=>s({url:"/cbs-app/sysMenuButton/update",method:"post",data:t}),n=t=>s({url:"/cbs-app/sysMenuButton/remove",method:"post",data:t,requestType:"form"}),p=t=>s({url:"/cbs-app/musicTag/page",method:"post",data:t}),r=t=>s({url:"/cbs-app/musicSheet/page",method:"post",data:t});export{o as a,a as b,n as c,p as d,r as m,u as s};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/api.d91d78e2.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/constant.ded25e36.js


+ 1 - 1
dist/assets/dateUtil.8c2e4104.js → dist/assets/dateUtil.4379ec68.js

@@ -1 +1 @@
-import{d as a}from"./dayjs.min.50840ad2.js";const l=(r,d=[],Y="YYYY-MM-DD")=>r&&r.length?Y=="YYYY-MM-DD"?{[d[0]||"start"]:a(r[0]).isValid()?a(r[0]).format(Y)+" 00:00:00":"",[d[1]||"end"]:a(r[1]).isValid()?a(r[1]).format(Y)+" 23:59:59":""}:{[d[0]||"start"]:a(r[0]).isValid()?a(r[0]).format(Y):"",[d[1]||"end"]:a(r[1]).isValid()?a(r[1]).format(Y):""}:{},f=(r,d=[],Y="YYYY-MM-DD")=>r&&r.length?{[d[0]||"start"]:a(r[0]).isValid()?a(r[0]).format(Y):"",[d[1]||"end"]:a(r[1]).isValid()?a(r[1]).format(Y):""}:{};export{f,l as g};
+import{d as a}from"./dayjs.min.feb63b7e.js";const l=(r,d=[],Y="YYYY-MM-DD")=>r&&r.length?Y=="YYYY-MM-DD"?{[d[0]||"start"]:a(r[0]).isValid()?a(r[0]).format(Y)+" 00:00:00":"",[d[1]||"end"]:a(r[1]).isValid()?a(r[1]).format(Y)+" 23:59:59":""}:{[d[0]||"start"]:a(r[0]).isValid()?a(r[0]).format(Y):"",[d[1]||"end"]:a(r[1]).isValid()?a(r[1]).format(Y):""}:{},f=(r,d=[],Y="YYYY-MM-DD")=>r&&r.length?{[d[0]||"start"]:a(r[0]).isValid()?a(r[0]).format(Y):"",[d[1]||"end"]:a(r[1]).isValid()?a(r[1]).format(Y):""}:{};export{f,l as g};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/dayjs.min.feb63b7e.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/detail.ae4bf562.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/editAndUpdate.7f3f9e51.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/employee-tab.8d849dce.js


+ 1 - 1
dist/assets/filters.6793d366.js → dist/assets/filters.de6e9e5f.js

@@ -1 +1 @@
-import{p as t,e,c as s,o as n,a as o}from"./constant.f92a1016.js";const l=(r,i)=>{if(r&&i){let u=i.get(r);if(u)return u}return r},f=r=>r&&t&&t[r]?t[r]:r,c=r=>r&&e&&e[r]?e[r]:r,p=r=>r&&s&&s[r]?s[r]:r,m=r=>{if(r&&n&&n[r])return n[r]},T=r=>r&&o&&o[r]?o[r]:r;export{c as a,f as b,m as c,T as d,p as f,l as g};
+import{p as t,e,c as s,o as n,a as o}from"./constant.ded25e36.js";const l=(r,i)=>{if(r&&i){let u=i.get(r);if(u)return u}return r},f=r=>r&&t&&t[r]?t[r]:r,c=r=>r&&e&&e[r]?e[r]:r,p=r=>r&&s&&s[r]?s[r]:r,m=r=>{if(r&&n&&n[r])return n[r]},T=r=>r&&o&&o[r]?o[r]:r;export{c as a,f as b,m as c,T as d,p as f,l as g};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.0191b56f.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.0aa1813a.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.1cf48e2b.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.23477f5e.js


+ 1 - 1
dist/assets/index.e2e35963.js → dist/assets/index.247486dd.js

@@ -1 +1 @@
-import{d as n,i as e,ao as o,aj as a}from"./index.af6afcba.js";const i="_showContentWidth_1uy1t_1",r={showContentWidth:i},d=n({name:"the-tooltip",props:{maxWidth:{type:Number,default:300},showContentWidth:{type:Number,default:120},tipsContent:{type:String,default:""},content:{type:String,default:""},placement:{type:String,default:"top"},showArrow:{type:Boolean,default:!0},trigger:{type:String,default:"hover"}},setup(t){return()=>e(a,null,[e(o,{style:{maxWidth:t.maxWidth+"px"},trigger:t.trigger,placement:t.placement,showArrow:t.showArrow},{trigger:()=>e("p",{style:{maxWidth:t.showContentWidth+"px"},class:r.showContentWidth},[t.content]),default:()=>t.tipsContent||t.content})])}});export{d as T};
+import{d as n,i as e,ao as o,aj as a}from"./index.85fc7e44.js";const i="_showContentWidth_1uy1t_1",r={showContentWidth:i},d=n({name:"the-tooltip",props:{maxWidth:{type:Number,default:300},showContentWidth:{type:Number,default:120},tipsContent:{type:String,default:""},content:{type:String,default:""},placement:{type:String,default:"top"},showArrow:{type:Boolean,default:!0},trigger:{type:String,default:"hover"}},setup(t){return()=>e(a,null,[e(o,{style:{maxWidth:t.maxWidth+"px"},trigger:t.trigger,placement:t.placement,showArrow:t.showArrow},{trigger:()=>e("p",{style:{maxWidth:t.showContentWidth+"px"},class:r.showContentWidth},[t.content]),default:()=>t.tipsContent||t.content})])}});export{d as T};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.31c70696.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.3a2594b9.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.4084ffaa.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.42789633.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.5a0d4801.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.60641bfd.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.746842da.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.750a271b.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.7f015cb4.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.85fc7e44.js


+ 1 - 1
dist/assets/index.6380f1af.js → dist/assets/index.881f47f5.js

@@ -1 +1 @@
-import{S as l}from"./searchs.b637f0d6.js";import{d as y,e as h,a as m,r as z,B as v,bx as w,M as s,F as K,i as P,ci as b}from"./index.af6afcba.js";const x=y({name:"table-container",props:{page:{type:Number,default:1,required:!0},pageSize:{type:Number,default:10},pageTotal:{type:Number,default:0},saveKey:{type:String,default:""},sync:{type:Boolean,default:!1},checkedRowKeysRef:{type:Object},pageSizes:{type:Array,default:()=>[10,20,30,40]},pageSlot:{type:Number,default:9}},emits:["update:page","update:pageSize","list"],setup(e,{slots:T,attrs:k,emit:t}){const o=h(),u=m({pageInformation:null}),g=z(0);g.value=Math.ceil(e.pageTotal/e.pageSize);const d=a=>{t("update:page",a),t("list"),i()},r=a=>{t("update:pageSize",a),t("list"),i()};v(()=>{if(e.sync){const a=new l(e.saveKey||o.path),n=a.get(e.saveKey||o.path);if(u.pageInformation=n,n&&n.page){for(const p in n.page)if(n.page.hasOwnProperty(p)&&["page","pageSize"].includes(p)){const f=n.page[p],S=`update:${p}`;t(S,f)}}e.saveKey&&a.update(o.path,void 0,"bind")}window.addEventListener("watchStorage",c)}),w(()=>{window.removeEventListener("watchStorage",c)}),s(()=>e.pageSize,()=>{g.value=Math.ceil(e.pageTotal/e.pageSize),i()}),s(()=>e.page,()=>{i()}),s(()=>e.pageTotal,()=>{g.value=Math.ceil(e.pageTotal/e.pageSize),i()}),K({get(){return e.page},set(a){t("update:page",a)}});const i=()=>{e.sync&&new l(e.saveKey||o.path).update({page:e.page,pageCount:g.value,pageSize:e.pageSize,saveKey:e.saveKey},void 0,"page")},c=()=>{let a=u.pageInformation&&u.pageInformation.page?u.pageInformation.page:null;a&&a.page&&a.page};return()=>P(b,{style:{marginTop:"12px",justifyContent:"flex-end"},page:e.page,"onUpdate:page":a=>e.page=a,displayOrder:["quick-jumper","pages","size-picker"],pageCount:g.value,showQuickJumper:!0,showSizePicker:!0,pageSize:e.pageSize,prefix:()=>`\u5171 ${e.pageTotal} \u6761`,pageSizes:e.pageSizes,onUpdatePage:d,onUpdatePageSize:r,pageSlot:e.pageSlot},null)}});export{x as P};
+import{S as l}from"./searchs.b637f0d6.js";import{d as y,e as h,a as m,r as z,B as v,bx as w,M as s,F as K,i as P,ci as b}from"./index.85fc7e44.js";const x=y({name:"table-container",props:{page:{type:Number,default:1,required:!0},pageSize:{type:Number,default:10},pageTotal:{type:Number,default:0},saveKey:{type:String,default:""},sync:{type:Boolean,default:!1},checkedRowKeysRef:{type:Object},pageSizes:{type:Array,default:()=>[10,20,30,40]},pageSlot:{type:Number,default:9}},emits:["update:page","update:pageSize","list"],setup(e,{slots:T,attrs:k,emit:t}){const o=h(),u=m({pageInformation:null}),g=z(0);g.value=Math.ceil(e.pageTotal/e.pageSize);const d=a=>{t("update:page",a),t("list"),i()},r=a=>{t("update:pageSize",a),t("list"),i()};v(()=>{if(e.sync){const a=new l(e.saveKey||o.path),n=a.get(e.saveKey||o.path);if(u.pageInformation=n,n&&n.page){for(const p in n.page)if(n.page.hasOwnProperty(p)&&["page","pageSize"].includes(p)){const f=n.page[p],S=`update:${p}`;t(S,f)}}e.saveKey&&a.update(o.path,void 0,"bind")}window.addEventListener("watchStorage",c)}),w(()=>{window.removeEventListener("watchStorage",c)}),s(()=>e.pageSize,()=>{g.value=Math.ceil(e.pageTotal/e.pageSize),i()}),s(()=>e.page,()=>{i()}),s(()=>e.pageTotal,()=>{g.value=Math.ceil(e.pageTotal/e.pageSize),i()}),K({get(){return e.page},set(a){t("update:page",a)}});const i=()=>{e.sync&&new l(e.saveKey||o.path).update({page:e.page,pageCount:g.value,pageSize:e.pageSize,saveKey:e.saveKey},void 0,"page")},c=()=>{let a=u.pageInformation&&u.pageInformation.page?u.pageInformation.page:null;a&&a.page&&a.page};return()=>P(b,{style:{marginTop:"12px",justifyContent:"flex-end"},page:e.page,"onUpdate:page":a=>e.page=a,displayOrder:["quick-jumper","pages","size-picker"],pageCount:g.value,showQuickJumper:!0,showSizePicker:!0,pageSize:e.pageSize,prefix:()=>`\u5171 ${e.pageTotal} \u6761`,pageSizes:e.pageSizes,onUpdatePage:d,onUpdatePageSize:r,pageSlot:e.pageSlot},null)}});export{x as P};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.8c69e0a0.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.9da713fa.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.af327b36.js


+ 1 - 1
dist/assets/index.966d4654.js → dist/assets/index.b44a395f.js

@@ -1 +1 @@
-import{d as g,r as K,e as w,a as F,M as m,B as _,i,q as M,bp as P}from"./index.af6afcba.js";import{S}from"./searchs.b637f0d6.js";const I="_saveForm_1s8vz_1",E={saveForm:I},D=g({name:"save-form",props:{model:{type:Object,default:{}},saveKey:{type:String,default:""}},emits:["setModel","submit","reset"],setup(o,{slots:d,attrs:c,emit:n,expose:l}){const u=K(),r=w(),t=F({searchs:null,saveKey:o.saveKey,model:{}}),f=()=>{const e=o.model,s={};for(const a in e)s[a]=null;return s};m(()=>o.saveKey,e=>{t.saveKey=e}),m(()=>o.model,e=>{t.model=e},{deep:!0});const p=()=>{const e=new S(t.saveKey||r.path);t.searchs=e;const s=e.get(t.saveKey||r.path);for(const a in s.form)if(s.form.hasOwnProperty(a)){const b=s.form[a];t.model[a]=b}n("setModel",t.model),t.saveKey&&t.searchs.update(r.path,void 0,"bind")};_(()=>{p()});const h=e=>{e&&(e.stopPropagation(),e.stopImmediatePropagation(),e.preventDefault()),t.saveKey&&t.searchs.update(r.path,void 0,"bind"),t.searchs.update(t.model,void 0,"form"),n("submit",e)},v=e=>{e&&(e.stopPropagation(),e.stopImmediatePropagation(),e.preventDefault());let s=new Event("watchStorage");window.dispatchEvent(s),y(),n("submit",e)},y=()=>{n("setModel",f()),t.searchs.update({},void 0,"form"),t.searchs.update({},void 0,"page")};return l({submit:h,reset:v}),()=>i("div",{class:["section-container section-save-form",E.saveForm]},[i(M,P({model:t.model,ref:u,inline:!0,"label-placement":"left","label-width":"auto"},c),{default:()=>[d.default&&d.default()]})])}});export{D as S};
+import{d as g,r as K,e as w,a as F,M as m,B as _,i,q as M,bp as P}from"./index.85fc7e44.js";import{S}from"./searchs.b637f0d6.js";const I="_saveForm_1s8vz_1",E={saveForm:I},D=g({name:"save-form",props:{model:{type:Object,default:{}},saveKey:{type:String,default:""}},emits:["setModel","submit","reset"],setup(o,{slots:d,attrs:c,emit:n,expose:l}){const u=K(),r=w(),t=F({searchs:null,saveKey:o.saveKey,model:{}}),f=()=>{const e=o.model,s={};for(const a in e)s[a]=null;return s};m(()=>o.saveKey,e=>{t.saveKey=e}),m(()=>o.model,e=>{t.model=e},{deep:!0});const p=()=>{const e=new S(t.saveKey||r.path);t.searchs=e;const s=e.get(t.saveKey||r.path);for(const a in s.form)if(s.form.hasOwnProperty(a)){const b=s.form[a];t.model[a]=b}n("setModel",t.model),t.saveKey&&t.searchs.update(r.path,void 0,"bind")};_(()=>{p()});const h=e=>{e&&(e.stopPropagation(),e.stopImmediatePropagation(),e.preventDefault()),t.saveKey&&t.searchs.update(r.path,void 0,"bind"),t.searchs.update(t.model,void 0,"form"),n("submit",e)},v=e=>{e&&(e.stopPropagation(),e.stopImmediatePropagation(),e.preventDefault());let s=new Event("watchStorage");window.dispatchEvent(s),y(),n("submit",e)},y=()=>{n("setModel",f()),t.searchs.update({},void 0,"form"),t.searchs.update({},void 0,"page")};return l({submit:h,reset:v}),()=>i("div",{class:["section-container section-save-form",E.saveForm]},[i(M,P({model:t.model,ref:u,inline:!0,"label-placement":"left","label-width":"auto"},c),{default:()=>[d.default&&d.default()]})])}});export{D as S};

+ 1 - 1
dist/assets/index.518535f1.js → dist/assets/index.b4765978.js

@@ -1 +1 @@
-import{d as m,e as p,r as t,h as s,B as v,Y as h,w as x,U as g,dk as k,o as b,g as u,t as w}from"./index.af6afcba.js";const B={class:"frame"},R=["src"],y=m({__name:"index",setup(S){var f,i;const o=p(),a=t(!1),c=t(null),r=t("");(f=s(o.meta))!=null&&f.frameSrc&&(r.value=(i=s(o.meta))==null?void 0:i.frameSrc);function _(){a.value=!1}function l(){g(()=>{const e=s(c);if(!e)return;const n=e;n.attachEvent?n.attachEvent("onload",()=>{_()}):e.onload=()=>{_()}})}return v(()=>{a.value=!0,l()}),(e,n)=>{const d=k;return b(),h(d,{show:a.value},{default:x(()=>[u("div",B,[u("iframe",{src:r.value,class:"frame-iframe",ref_key:"frameRef",ref:c},null,8,R)])]),_:1},8,["show"])}}});const E=w(y,[["__scopeId","data-v-86b4e8ba"]]);export{E as default};
+import{d as m,e as p,r as t,h as s,B as v,Y as h,w as x,U as g,dk as k,o as b,g as u,t as w}from"./index.85fc7e44.js";const B={class:"frame"},R=["src"],y=m({__name:"index",setup(S){var f,i;const o=p(),a=t(!1),c=t(null),r=t("");(f=s(o.meta))!=null&&f.frameSrc&&(r.value=(i=s(o.meta))==null?void 0:i.frameSrc);function _(){a.value=!1}function l(){g(()=>{const e=s(c);if(!e)return;const n=e;n.attachEvent?n.attachEvent("onload",()=>{_()}):e.onload=()=>{_()}})}return v(()=>{a.value=!0,l()}),(e,n)=>{const d=k;return b(),h(d,{show:a.value},{default:x(()=>[u("div",B,[u("iframe",{src:r.value,class:"frame-iframe",ref_key:"frameRef",ref:c},null,8,R)])]),_:1},8,["show"])}}});const E=w(y,[["__scopeId","data-v-86b4e8ba"]]);export{E as default};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.b57905b5.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.b7747bc6.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.b800a824.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.d36aebfe.js


+ 1 - 1
dist/assets/index.c817597e.js → dist/assets/index.d617e35c.js

@@ -1 +1 @@
-import{d as s,e as n,c as u,x as c,i as p,N as i}from"./index.af6afcba.js";const l=s({name:"Redirect",setup(){const t=n(),o=u();return c(()=>{const{params:r,query:a}=t,{path:e}=r;o.replace({path:"/"+(Array.isArray(e)?e.join("/"):e),query:a})}),()=>p(i,null,null)}});export{l as default};
+import{d as s,e as n,c as u,x as c,i as p,N as i}from"./index.85fc7e44.js";const l=s({name:"Redirect",setup(){const t=n(),o=u();return c(()=>{const{params:r,query:a}=t,{path:e}=r;o.replace({path:"/"+(Array.isArray(e)?e.join("/"):e),query:a})}),()=>p(i,null,null)}});export{l as default};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.deb29b53.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.e1ae860a.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.e5d7b798.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.e8b32f3b.js


+ 1 - 1
dist/assets/index.e961e181.js → dist/assets/index.eb4697eb.js

@@ -1 +1 @@
-import{d as o,L as s,F as i,i as d,ds as f}from"./index.af6afcba.js";import{u as l}from"./tabsView.6200f5cb.js";const g=o({name:"TheLink",props:{to:{type:Object,default:{}},target:{type:String,default:"_self"},authLink:{type:String,default:""}},setup(t,{slots:e}){const a=s();l().closeCurrentTab({path:t.to.path});const u=i(()=>{const n=a.getAuths.some(r=>r===t.authLink);return!!(t.authLink&&!n)});return()=>u.value?e.default&&e.default():d(f,{to:t.to,target:t.target},{default:()=>[e.default&&e.default()]})}});export{g as T};
+import{d as o,L as s,F as i,i as d,ds as f}from"./index.85fc7e44.js";import{u as l}from"./tabsView.a6b0054d.js";const g=o({name:"TheLink",props:{to:{type:Object,default:{}},target:{type:String,default:"_self"},authLink:{type:String,default:""}},setup(t,{slots:e}){const a=s();l().closeCurrentTab({path:t.to.path});const u=i(()=>{const n=a.getAuths.some(r=>r===t.authLink);return!!(t.authLink&&!n)});return()=>u.value?e.default&&e.default():d(f,{to:t.to,target:t.target},{default:()=>[e.default&&e.default()]})}});export{g as T};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.ebe5fee8.js


+ 1 - 1
dist/assets/index.c8f9577a.js → dist/assets/index.ec1c4bd8.js

@@ -1,4 +1,4 @@
-var Tt=Object.defineProperty,xt=Object.defineProperties;var bt=Object.getOwnPropertyDescriptors;var yt=Object.getOwnPropertySymbols;var At=Object.prototype.hasOwnProperty,Rt=Object.prototype.propertyIsEnumerable;var mt=(o,t,e)=>t in o?Tt(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ct=(o,t)=>{for(var e in t||(t={}))At.call(t,e)&&mt(o,e,t[e]);if(yt)for(var e of yt(t))Rt.call(t,e)&&mt(o,e,t[e]);return o},St=(o,t)=>xt(o,bt(t));var nt=(o,t,e)=>new Promise((n,l)=>{var r=w=>{try{S(e.next(w))}catch(x){l(x)}},u=w=>{try{S(e.throw(w))}catch(x){l(x)}},S=w=>w.done?n(w.value):Promise.resolve(w.value).then(r,u);S((e=e.apply(o,t)).next())});import{d as defineComponent,a as reactive,r as ref,i as createVNode,ac as NGrid,ad as NGi,a9 as NSpace,p as __unplugin_components_3,k as createTextVNode,U as nextTick,cc as commonjsGlobal,cb as getDefaultExportFromCjs,ab as service,u as useMessage,M as watch,cd as NUpload,aa as NModal}from"./index.af6afcba.js";/*!
+var Tt=Object.defineProperty,xt=Object.defineProperties;var bt=Object.getOwnPropertyDescriptors;var yt=Object.getOwnPropertySymbols;var At=Object.prototype.hasOwnProperty,Rt=Object.prototype.propertyIsEnumerable;var mt=(o,t,e)=>t in o?Tt(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ct=(o,t)=>{for(var e in t||(t={}))At.call(t,e)&&mt(o,e,t[e]);if(yt)for(var e of yt(t))Rt.call(t,e)&&mt(o,e,t[e]);return o},St=(o,t)=>xt(o,bt(t));var nt=(o,t,e)=>new Promise((n,l)=>{var r=w=>{try{S(e.next(w))}catch(x){l(x)}},u=w=>{try{S(e.throw(w))}catch(x){l(x)}},S=w=>w.done?n(w.value):Promise.resolve(w.value).then(r,u);S((e=e.apply(o,t)).next())});import{d as defineComponent,a as reactive,r as ref,i as createVNode,ac as NGrid,ad as NGi,a9 as NSpace,p as __unplugin_components_3,k as createTextVNode,U as nextTick,cc as commonjsGlobal,cb as getDefaultExportFromCjs,ab as service,u as useMessage,M as watch,cd as NUpload,aa as NModal}from"./index.85fc7e44.js";/*!
  * Cropper.js v1.5.13
  * https://fengyuanchen.github.io/cropperjs
  *

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.f0d34e0c.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/index.f31486d5.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/instrument-list.3a2aac7d.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/instrument-list.6fb48a10.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/interface-log.ca3c4f31.js


BIN
dist/assets/login-logo.911dc521.png


BIN
dist/assets/login-logo.e2f7f64c.png


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/musicUtil.2270d080.js


+ 1 - 1
dist/assets/parentLayout.b2a17790.js → dist/assets/parentLayout.325bfdd0.js

@@ -1 +1 @@
-import{t as o,Y as t,W as r,o as n}from"./index.af6afcba.js";const c={};function s(a,_){const e=r("router-view");return n(),t(e)}const f=o(c,[["render",s]]);export{f as default};
+import{t as o,Y as t,W as r,o as n}from"./index.85fc7e44.js";const c={};function s(a,_){const e=r("router-view");return n(),t(e)}const f=o(c,[["render",s]]);export{f as default};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/plan-detail.9b50d120.js


+ 1 - 1
dist/assets/searchArray.5d6434a6.js → dist/assets/searchArray.c8aafeb3.js

@@ -1 +1 @@
-import{p as o,e as r,s as u,b as n,d as c,c as p,f as y,m as i,g as m,h as l,i as S,o as T,j as d,k as h,l as A,a as g,n as f,q as w,r as E,t as b,u as k,v,w as x,x as q,y as z,z as C,A as F}from"./constant.f92a1016.js";function a(s){let t=[];for(let e in s)t.push({label:s[e],value:e});return t}const K=a(o),N=a(r);a(u);a(n);a(c);a(p);a(y);a(i);a(m);a(l);a(S);const V=a(T);a(d);const j=a(h),B=a(A),D=a(g);a(f);a(w);a(E);a(b);a(k);a(v);a(x);a(q);a(z);a(C);a(F);export{j as a,B as b,D as c,N as e,V as o,K as p};
+import{p as o,e as r,s as u,b as n,d as c,c as p,f as y,m as i,g as m,h as l,i as S,o as T,j as d,k as h,l as A,a as g,n as f,q as w,r as E,t as b,u as k,v,w as x,x as q,y as z,z as C,A as F}from"./constant.ded25e36.js";function a(s){let t=[];for(let e in s)t.push({label:s[e],value:e});return t}const K=a(o),N=a(r);a(u);a(n);a(c);a(p);a(y);a(i);a(m);a(l);a(S);const V=a(T);a(d);const j=a(h),B=a(A),D=a(g);a(f);a(w);a(E);a(b);a(k);a(v);a(x);a(q);a(z);a(C);a(F);export{j as a,B as b,D as c,N as e,V as o,K as p};

+ 1 - 1
dist/assets/tabsView.6200f5cb.js → dist/assets/tabsView.a6b0054d.js

@@ -1 +1 @@
-import{v as n}from"./index.af6afcba.js";import{S as r}from"./searchs.b637f0d6.js";const b=["Redirect","login"],f=new r("");function o(t){return t.filter(a=>{var s,i;return(i=(s=a==null?void 0:a.meta)==null?void 0:s.affix)!=null?i:!1})}const p=n({id:"app-tabs-view",state:()=>({tabsList:[]}),getters:{},actions:{initTabs(t){this.tabsList=t},addTabs(t){return b.includes(t.name)?!1:(this.tabsList.some(s=>s.path==t.path)||this.tabsList.push(t),!0)},closeLeftTabs(t){const a=this.tabsList.findIndex(s=>s.path==t.path);this.tabsList=this.tabsList.filter((s,i)=>{var e,h;return i>=a||((h=(e=s==null?void 0:s.meta)==null?void 0:e.affix)!=null?h:!1)})},closeRightTabs(t){const a=this.tabsList.findIndex(s=>s.path==t.path);this.tabsList=this.tabsList.filter((s,i)=>{var e,h;return i<=a||((h=(e=s==null?void 0:s.meta)==null?void 0:e.affix)!=null?h:!1)})},closeOtherTabs(t){this.tabsList=this.tabsList.filter(a=>{var s,i;return a.path==t.path||((i=(s=a==null?void 0:a.meta)==null?void 0:s.affix)!=null?i:!1)}),f.removeByOtherRouter(t.path)},closeCurrentTab(t){if(t){f.removeByRouter(t.path);const a=this.tabsList.findIndex(s=>s.path==t.path);a!=-1&&this.tabsList.splice(a,1)}},closeAllTabs(){f.removeAll(),this.tabsList=o(this.tabsList)}}});export{p as u};
+import{v as n}from"./index.85fc7e44.js";import{S as r}from"./searchs.b637f0d6.js";const b=["Redirect","login"],f=new r("");function o(t){return t.filter(a=>{var s,i;return(i=(s=a==null?void 0:a.meta)==null?void 0:s.affix)!=null?i:!1})}const p=n({id:"app-tabs-view",state:()=>({tabsList:[]}),getters:{},actions:{initTabs(t){this.tabsList=t},addTabs(t){return b.includes(t.name)?!1:(this.tabsList.some(s=>s.path==t.path)||this.tabsList.push(t),!0)},closeLeftTabs(t){const a=this.tabsList.findIndex(s=>s.path==t.path);this.tabsList=this.tabsList.filter((s,i)=>{var e,h;return i>=a||((h=(e=s==null?void 0:s.meta)==null?void 0:e.affix)!=null?h:!1)})},closeRightTabs(t){const a=this.tabsList.findIndex(s=>s.path==t.path);this.tabsList=this.tabsList.filter((s,i)=>{var e,h;return i<=a||((h=(e=s==null?void 0:s.meta)==null?void 0:e.affix)!=null?h:!1)})},closeOtherTabs(t){this.tabsList=this.tabsList.filter(a=>{var s,i;return a.path==t.path||((i=(s=a==null?void 0:a.meta)==null?void 0:s.affix)!=null?i:!1)}),f.removeByOtherRouter(t.path)},closeCurrentTab(t){if(t){f.removeByRouter(t.path);const a=this.tabsList.findIndex(s=>s.path==t.path);a!=-1&&this.tabsList.splice(a,1)}},closeAllTabs(){f.removeAll(),this.tabsList=o(this.tabsList)}}});export{p as u};

+ 1 - 1
dist/assets/use-async.11c21ce9.js → dist/assets/use-async.b28e842d.js

@@ -1 +1 @@
-import{e as n,B as r}from"./index.af6afcba.js";import{S as o}from"./searchs.b637f0d6.js";const g=e=>{const s=n(),t=new o(s.path).get(s.path);r(()=>{e(t)})},i=(e,s="current",a)=>{const t=new o(a.path);t.update({[s]:e},void 0,"form");const c=t.get(a.path);console.log(c,"setTabsCaches")};export{g,i as s};
+import{e as n,B as r}from"./index.85fc7e44.js";import{S as o}from"./searchs.b637f0d6.js";const g=e=>{const s=n(),t=new o(s.path).get(s.path);r(()=>{e(t)})},i=(e,s="current",a)=>{const t=new o(a.path);t.update({[s]:e},void 0,"form");const c=t.get(a.path);console.log(c,"setTabsCaches")};export{g,i as s};

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/assets/vuedraggable.umd.28a9f02f.js



Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/index.html


BIN
public/favicon.ico


BIN
src/assets/images/logo.png


+ 2 - 2
src/utils/constant.ts

@@ -233,8 +233,8 @@ export const heardLevelType = {
 
 // 曲目类型
 export const musicSheetType = {
-  SINGLE: '独奏',
-  CONCERT: '合奏'
+  SINGLE: '',
+  CONCERT: ''
 } as any
 
 // 作者属性

BIN
src/views/login/images/login-logo.png


+ 15 - 7
src/views/login/index.vue

@@ -59,7 +59,7 @@
             <n-form-item class="default-color">
               <div class="flex justify-between">
                 <div class="flex-initial">
-                  <n-checkbox v-model:checked="autoLogin">记住密码</n-checkbox>
+                  <n-checkbox v-model:checked="formInline.isCaptcha">记住密码</n-checkbox>
                 </div>
                 <!-- <div class="flex-initial order-last">
                 <a href="javascript:">忘记密码</a>
@@ -125,7 +125,14 @@ let formInline = reactive({
 })
 const formInlineHistory = storage.get('userInfo')
 if (formInlineHistory) {
-  formInline = reactive({ ...JSON.parse(formInlineHistory) })
+  const tempForm = JSON.parse(formInlineHistory)
+  if (tempForm.isCaptcha) {
+    formInline.username = tempForm.username
+    formInline.password = tempForm.password
+  } else {
+    formInline.username = tempForm.username
+  }
+  // formInline = reactive({ ...JSON.parse(formInlineHistory) })
 }
 const rules = {
   username: { required: true, message: '请输入用户名', trigger: 'blur' },
@@ -160,11 +167,12 @@ const handleSubmit = (e: any) => {
         message.destroyAll()
         if (some.code == ResultEnum.SUCCESS) {
           //  判断是否勾选自动登录
-          if (autoLogin) {
-            storage.set('userInfo', JSON.stringify(formInline))
-          } else {
-            storage.remove('userInfo')
-          }
+          // if (autoLogin.value) {
+          //   storage.set('userInfo', JSON.stringify(formInline))
+          // } else {
+          //   storage.remove('userInfo')
+          // }
+          storage.set('userInfo', JSON.stringify(formInline))
 
           // route.query?.redirect ||
           tabsViewStore.closeAllTabs()

+ 65 - 46
src/views/music-library/music-sheet/component/music-list.tsx

@@ -37,6 +37,7 @@ import {getOwnerName} from '@views/music-library/musicUtil'
 import styles from './music-list.module.less'
 import MusicCreateImg from '../modal/music-create-img'
 import TheTooltip from "@components/TheTooltip";
+import { HelpCircleOutline } from '@vicons/ionicons5'
 
 export default defineComponent({
   name: 'music-list',
@@ -58,7 +59,8 @@ export default defineComponent({
         sourceType: null, //来源类型/作者属性(PLATFORM: 平台; ORG: 机构; PERSON: 个人
         composer: null, //作曲人/音乐人
         userId: null, //所属人
-        useAppId: null, //适用项目ID
+        applicationId: null, //所属人项目ID
+        useAppId: [] as any, //适用项目ID
         status: null, //曲目状态(0:停用,1:启用)
         appAuditFlag: null, //是否审核版本
         categoriesId: null, //是否审核版本
@@ -112,14 +114,15 @@ export default defineComponent({
         },
         {
           title: '曲目信息',
-          minWidth: '150px',
+          minWidth: '200px',
           key: 'composer',
           render(row: any) {
             return (
                 <NDescriptions labelPlacement="left" column={1}>
                   <NDescriptionsItem label="音乐人">{row.composer}</NDescriptionsItem>
-                  <NDescriptionsItem label="类型">{getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}</NDescriptionsItem>
+                  <NDescriptionsItem label="多声轨渲染">{getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}</NDescriptionsItem>
                   <NDescriptionsItem label="分类"><TheTooltip content={row.musicCategoryName}/></NDescriptionsItem>
+                  <NDescriptionsItem label="可用声部"><TheTooltip content={row.subjectNames}/></NDescriptionsItem>
                 </NDescriptions>
             )
           }
@@ -139,7 +142,6 @@ export default defineComponent({
         },
         {
           title: '适用项目',
-          width: '300px',
           key: 'projectName',
           render(row: any) {
             return (
@@ -148,6 +150,7 @@ export default defineComponent({
                   type="primary"
                   size="small"
                   text
+                  v-auth="musicSheetApplicationExtend/save1752901206883221506"
                   onClick={() => {
                     state.showUseProject = true
                     state.showUseProjectId = row.id
@@ -184,15 +187,6 @@ export default defineComponent({
           }
         },
         {
-          title: '可用声部',
-          minWidth: '100px',
-          maxWidth: '300px',
-          key: 'subjectNames',
-          render(row: any) {
-            return <TheTooltip content={row.subjectNames}/>
-          }
-        },
-        {
           title: '审核版本',
           minWidth: '100px',
           key: 'appAuditFlag',
@@ -346,7 +340,7 @@ export default defineComponent({
     }
 
     const updateUserIdData = async (sourceType: any) => {
-      if (!state.searchForm.useAppId) {
+      if (!state.searchForm.applicationId) {
         return
       }
       state.userIdData = []
@@ -356,7 +350,7 @@ export default defineComponent({
           page: 1,
           rows: 9999,
           sourceType: sourceType,
-          applicationId: state.searchForm.useAppId
+          applicationId: state.searchForm.applicationId
         })
         const temp = data.rows || []
         temp.forEach((next: any) => {
@@ -389,7 +383,10 @@ export default defineComponent({
         state.loading = true
         const sourceType = state.searchForm.sourceType;
         const userId = state.searchForm.userId
-        let search={...state.searchForm} as any
+        let search = {
+          ...state.searchForm,
+          useAppId: state.searchForm.useAppId ? state.searchForm.useAppId.join(',') : state.searchForm.useAppId
+        } as any
         if (sourceType) {
           if (sourceType == 'ORG') {
             search.organizationRoleId = userId
@@ -508,9 +505,9 @@ export default defineComponent({
               clearable
             />
           </NFormItem>
-          <NFormItem label="曲目类型" path="musicSheetType">
+          <NFormItem label="多声轨渲染" path="musicSheetType">
             <NSelect
-              placeholder="请选择曲目类型"
+              placeholder="请选择多声轨渲染"
               v-model:value={state.searchForm.musicSheetType}
               options={getSelectDataFromObj(musicSheetType)}
               clearable
@@ -552,7 +549,7 @@ export default defineComponent({
                 state.searchForm.userId = null
                 if (value && value !== 'PLATFORM') {
                   await updateUserIdData(value)
-                  state.userIdDisable = !state.searchForm.useAppId
+                  state.userIdDisable = !state.searchForm.applicationId
                 } else {
                   state.userIdDisable = true
                 }
@@ -560,36 +557,58 @@ export default defineComponent({
               clearable
             />
           </NFormItem>
-          <NFormItem label="适用项目" path="app">
+          <NFormItem label="项目" path="applicationId">
             <NSelect
-              placeholder="请选择适用项目"
-              v-model:value={state.searchForm.useAppId}
-              options={state.useProjectData}
-              clearable
-              onUpdateValue={async (value: any) => {
-                state.searchForm.useAppId = value
-                if (value) {
-                  await updateUserIdData(state.searchForm.sourceType)
-                  state.userIdDisable = !(
-                    state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
-                  )
-                } else {
-                  state.searchForm.userId = null
-                  state.userIdDisable = true
-                  state.userIdData = []
-                }
-              }}
+                placeholder="请选择项目"
+                v-model:value={state.searchForm.applicationId}
+                options={state.useProjectData}
+                clearable
+                onUpdateValue={async (value: any) => {
+                  state.searchForm.applicationId = value
+                  if (value) {
+                    await updateUserIdData(state.searchForm.sourceType)
+                    state.userIdDisable = !(
+                        state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                    )
+                  } else {
+                    state.searchForm.userId = null
+                    state.userIdDisable = true
+                    state.userIdData = []
+                  }
+                }}
             />
           </NFormItem>
-          <NFormItem label="所属人" path="author">
+          <NFormItem label="所属人" path="userId">
+            {{ label: () => <div>所属人<NTooltip style={"padding-left: 10px"}>
+                {{
+                  default: () => '请选择作者属性和项目再选择所属人',
+                  trigger: () => (
+                      <span style="overflow: hidden;display: inline-block;max-width: 200px;white-space: nowrap;text-overflow: ellipsis;">
+                  <NIcon size="20">
+                      <HelpCircleOutline/>
+                  </NIcon>
+                </span>
+                  )
+                }}
+              </NTooltip></div>, default: () =><NSelect
+                  filterable
+                  placeholder="请选择所属人"
+                  disabled={state.userIdDisable || (!state.searchForm.applicationId && !state.searchForm.sourceType)}
+                  v-model:value={state.searchForm.userId}
+                  options={state.userIdData}
+                  clearable
+              ></NSelect>}}
+
+
+          </NFormItem>
+          <NFormItem label="适用项目" path="useAppId">
             <NSelect
-              filterable
-              placeholder="请选择所属人"
-              disabled={state.userIdDisable}
-              v-model:value={state.searchForm.userId}
-              options={state.userIdData}
-              clearable
-            ></NSelect>
+                placeholder="请选择适用项目"
+                v-model:value={state.searchForm.useAppId}
+                options={state.useProjectData}
+                multiple
+                maxTagCount={1}
+            />
           </NFormItem>
           <NFormItem label="状态" path="status">
             <NSelect
@@ -680,7 +699,7 @@ export default defineComponent({
             data={state.dataList}
             rowKey={(row: any) => row.id}
             onUpdateCheckedRowKeys={handleCheck}
-            scrollX={'1800'}
+            scrollX={'1200'}
           ></NDataTable>
           <Pagination
             v-model:page={state.pagination.page}

+ 8 - 5
src/views/music-library/music-sheet/component/music-sheet-categories-list.tsx

@@ -62,13 +62,16 @@ export default defineComponent({
     }
     const columns = (): DataTableColumn[] => {
       return [
-        {
-          title: '编号',
-          key: 'id'
-        },
+        // {
+        //   title: '编号',
+        //   key: 'id'
+        // },
         {
           title: '分类名称',
-          key: 'name'
+          key: 'id',
+          render(row: any) {
+            return row.name + '(' + row.id + ')'
+          }
         },
         {
           title: '曲目数量',

+ 1 - 1
src/views/music-library/music-sheet/index.tsx

@@ -37,7 +37,7 @@ export default defineComponent({
               v-model:value={state.tabName}
               onUpdate:value={(val: any) => setTabs(val)}
             >
-              <NTabPane name="MusicList" tab="曲列表" v-auth="musicSheet/page1751238894313013249">
+              <NTabPane name="MusicList" tab="曲列表" v-auth="musicSheet/page1751238894313013249">
                 <MusicList searchId={state.searchId} musicCategoryId={state.musicCategoryId} />
               </NTabPane>
               <NTabPane

+ 241 - 161
src/views/music-library/music-sheet/modal/music-operation.tsx

@@ -1,15 +1,18 @@
-import type { SelectOption } from 'naive-ui'
+import type {SelectOption} from 'naive-ui'
 import {
   NAlert,
   NButton,
   NCascader,
   NCheckbox,
   NCheckboxGroup,
-  NForm, NFormItem,
+  NForm,
+  NFormItem,
   NFormItemGi,
   NGi,
   NGrid,
-  NInput, NInputGroup, NInputGroupLabel,
+  NInput,
+  NInputGroup,
+  NInputGroupLabel,
   NInputNumber,
   NModal,
   NRadio,
@@ -20,20 +23,21 @@ import {
   useDialog,
   useMessage
 } from 'naive-ui'
-import { defineComponent, onMounted, PropType, reactive, ref } from 'vue'
-import { musicSheetCategoriesQueryTree, musicSheetDetail, musicSheetSave } from '../../api'
+import {defineComponent, nextTick, onMounted, PropType, reactive, ref} from 'vue'
+import {musicSheetCategoriesQueryTree, musicSheetDetail, musicSheetSave} from '../../api'
 import UploadFile from '@/components/upload-file'
 import styles from './index.module.less'
 import deepClone from '@/utils/deep.clone'
 import axios from 'axios'
-import { appKey, clientType, musicSheetSourceType, musicSheetType } from '@/utils/constant'
-import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
-import { musicalInstrumentPage } from '@views/system-manage/subject-manage/api'
-import { subjectPage } from '@views/system-manage/api'
+import {appKey, clientType, musicSheetSourceType, musicSheetType} from '@/utils/constant'
+import {getMapValueByKey, getSelectDataFromObj} from '@/utils/objectUtil'
+import {musicalInstrumentPage} from '@views/system-manage/subject-manage/api'
+import {subjectPage} from '@views/system-manage/api'
 import MusicSheetOwnerDialog from '@views/music-library/music-sheet/modal/musicSheetOwnerDialog'
-import { sysApplicationPage } from '@views/menu-manage/api'
-import { filterPointCategory } from '@views/teaching-manage/unit-test'
+import {sysApplicationPage} from '@views/menu-manage/api'
+import {filterPointCategory} from '@views/teaching-manage/unit-test'
 import MusicCreateImg from './music-create-img'
+import {onUpdated} from "vue-demi";
 
 /**
  * 获取指定元素下一个Note元素
@@ -437,6 +441,15 @@ export default defineComponent({
       xmlRead.readAsText(file)
     }
 
+    const containOther = (track:any)=>{
+      for (let i = 0; i < state.partListNames.length; i++) {
+        if(state.partListNames[i].value == track){
+          return true
+        }
+      }
+      return false;
+    }
+
     const parseInstrumentAndSubject = (xml: any) => {
       if (!xml) return
       const xmlParse = new DOMParser().parseFromString(xml, 'text/xml')
@@ -505,15 +518,23 @@ export default defineComponent({
       //   (n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON'
       // )
       const partListNames = deepClone(state.partListNames) || []
+      const multiTracksSelection = forms.multiTracksSelection;
       partListNames.forEach((item: any) => {
-        const index = forms.musicSheetSoundList.findIndex(
-          (ground: any) => item.value == ground.track
-        )
-        if (index > -1 && track == item.value) {
-          item.disabled = false
-        } else {
+        if (multiTracksSelection.includes(item.value)) {
           item.disabled = true
+        } else {
+          item.disabled = false
         }
+
+        // const index = forms.musicSheetSoundList.findIndex(
+        //   (ground: any) => item.value == ground.track
+        // )
+
+        // if (index > -1 && track == item.value) {
+        //   item.disabled = false
+        // } else {
+        //   item.disabled = true
+        // }
       })
       return partListNames || []
     }
@@ -549,6 +570,13 @@ export default defineComponent({
         positiveText: '确定',
         negativeText: '取消',
         onPositiveClick: async () => {
+          const sound = forms.musicSheetSoundList[index];
+          const track = sound.track
+          const selectIndex = forms.multiTracksSelection.indexOf(track)
+          if (selectIndex > -1) {
+            forms.multiTracksSelection.splice(selectIndex, 1)
+          }
+
           forms.musicSheetSoundList.splice(index, 1)
         }
       })
@@ -690,7 +718,7 @@ export default defineComponent({
               }
             })
           }
-          forms.musicalInstrumentIdList = data.musicalInstrumentIds.split(',') || []
+          forms.musicalInstrumentIdList = data.musicalInstrumentIds ? data.musicalInstrumentIds.split(',') : []
           forms.musicCategoryId = data.musicCategoryId
           data.musicSheetAccompanimentList?.forEach((next: any) => {
             state.musicSheetAccompanimentUrlList.push(next.audioFileUrl)
@@ -717,11 +745,12 @@ export default defineComponent({
               state.partListNames = getPartListNames(res?.data as any) as any
 
               // 初始化音轨和原音
-              forms.multiTracksSelection = data.multiTracksSelection?.split(',') || []
+              forms.multiTracksSelection = data.multiTracksSelection ? data.multiTracksSelection.split(',') : []
 
-              const existSoundList = data.musicSheetSoundList || []
+              const existSoundList = data.musicSheetSoundList ? data.musicSheetSoundList : []
+              const tracks = [] as any
               state.partListNames.forEach((item: any) => {
-                let audioFileUrl
+                let audioFileUrl = null
                 existSoundList.forEach((next: any) => {
                   if (next.track == item.value) {
                     audioFileUrl = next.audioFileUrl
@@ -731,6 +760,17 @@ export default defineComponent({
                   audioFileUrl: audioFileUrl, // 原音
                   track: item.value // 轨道
                 })
+                tracks.push(item.value)
+              })
+
+              // 处理没有声轨,但有原音
+              existSoundList.filter((next: any) => {
+                return !tracks.includes(next.track)
+              }).forEach((next: any) => {
+                forms.musicSheetSoundList.push({
+                  audioFileUrl: next.audioFileUrl, // 原音
+                  track: next.track ? next.track : null // 轨道
+                })
               })
             }
           })
@@ -755,7 +795,7 @@ export default defineComponent({
             model={forms}
             ref={formsRef}
             label-placement="left"
-            label-width="130"
+            label-width="150"
             disabled={state.previewMode}
           >
             <NAlert showIcon={false} style={{ marginBottom: '12px' }}>
@@ -844,24 +884,6 @@ export default defineComponent({
             </NGrid>
             <NGrid cols={2}>
               <NFormItemGi
-                label="曲目类型"
-                path="musicSheetType"
-                rule={[
-                  {
-                    required: true,
-                    message: '请选择曲目类型',
-                    trigger: 'change'
-                  }
-                ]}
-              >
-                <NSelect
-                  placeholder="请选择曲目类型"
-                  v-model:value={forms.musicSheetType}
-                  options={getSelectDataFromObj(musicSheetType)}
-                />
-              </NFormItemGi>
-
-              <NFormItemGi
                 label="作者属性"
                 path="sourceType"
                 rule={[
@@ -887,76 +909,58 @@ export default defineComponent({
                   }}
                 />
               </NFormItemGi>
-            </NGrid>
-            <NGrid cols={2}>
               {forms.sourceType === 'PERSON' && (
-                <NFormItemGi
-                  label="所属人"
-                  path="musicSheetExtend.userId"
-                  rule={[
-                    {
-                      required: true,
-                      message: '请选择曲目所属人',
-                      trigger: ['input', 'change']
-                    }
-                  ]}
-                >
-                  <NButton
-                    disabled={state.previewMode || !forms.sourceType}
-                    type="primary"
-                    size="small"
-                    text
-                    //v-auth="orchestraSubsidyStandard/update1597887579789053953"
-                    onClick={() => {
-                      state.showMusicSheetOwnerDialog = true
-                    }}
+                  <NFormItemGi
+                      label="所属人"
+                      path="musicSheetExtend.userId"
+                      rule={[
+                        {
+                          required: true,
+                          message: '请选择曲目所属人',
+                          trigger: ['input', 'change']
+                        }
+                      ]}
                   >
-                    {state.ownerName ? state.ownerName : '请选择所属人'}
-                  </NButton>
-                </NFormItemGi>
+                    <NButton
+                        disabled={state.previewMode || !forms.sourceType}
+                        type="primary"
+                        size="small"
+                        text
+                        //v-auth="orchestraSubsidyStandard/update1597887579789053953"
+                        onClick={() => {
+                          state.showMusicSheetOwnerDialog = true
+                        }}
+                    >
+                      {state.ownerName ? state.ownerName : '请选择所属人'}
+                    </NButton>
+                  </NFormItemGi>
               )}
               {forms.sourceType === 'ORG' && (
-                <NFormItemGi
-                  label="所属人"
-                  path="musicSheetExtend.organizationRoleId"
-                  rule={[
-                    {
-                      required: true,
-                      message: '请选择曲目所属机构',
-                      trigger: ['input', 'change']
-                    }
-                  ]}
-                >
-                  <NButton
-                    disabled={state.previewMode || !forms.sourceType}
-                    type="primary"
-                    size="small"
-                    text
-                    //v-auth="orchestraSubsidyStandard/update1597887579789053953"
-                    onClick={() => {
-                      state.showMusicSheetOwnerDialog = true
-                    }}
+                  <NFormItemGi
+                      label="所属人"
+                      path="musicSheetExtend.organizationRoleId"
+                      rule={[
+                        {
+                          required: true,
+                          message: '请选择曲目所属机构',
+                          trigger: ['input', 'change']
+                        }
+                      ]}
                   >
-                    {state.ownerName ? state.ownerName : '请选择所属机构'}
-                  </NButton>
-                </NFormItemGi>
+                    <NButton
+                        disabled={state.previewMode || !forms.sourceType}
+                        type="primary"
+                        size="small"
+                        text
+                        //v-auth="orchestraSubsidyStandard/update1597887579789053953"
+                        onClick={() => {
+                          state.showMusicSheetOwnerDialog = true
+                        }}
+                    >
+                      {state.ownerName ? state.ownerName : '请选择所属机构'}
+                    </NButton>
+                  </NFormItemGi>
               )}
-              <NFormItemGi
-                label="速度"
-                path="playSpeed"
-                rule={[
-                  {
-                    required: false,
-                    message: '请输入速度'
-                  }
-                ]}
-              >
-                <NInputNumber
-                  placeholder="请输入速度"
-                  v-model:value={forms.playSpeed}
-                  style="width:100%"
-                />
-              </NFormItemGi>
             </NGrid>
             <NGrid cols={2}>
               <NFormItemGi
@@ -1041,6 +1045,24 @@ export default defineComponent({
                 </NRadioGroup>
               </NFormItemGi>
             </NGrid>
+            <NGrid cols={2}>
+              <NFormItemGi
+                  label="速度"
+                  path="playSpeed"
+                  rule={[
+                    {
+                      required: false,
+                      message: '请输入速度'
+                    }
+                  ]}
+              >
+                <NInputNumber
+                    placeholder="请输入速度"
+                    v-model:value={forms.playSpeed}
+                    style="width:100%"
+                />
+              </NFormItemGi>
+            </NGrid>
             <NAlert showIcon={false} style={{ marginBottom: '12px' }}>
               曲目上传
             </NAlert>
@@ -1241,6 +1263,29 @@ export default defineComponent({
                 />
               </NFormItemGi>
             </NGrid>
+            <NGrid cols={2}>
+              <NFormItemGi
+                  label="多声轨渲染"
+                  path="musicSheetType"
+                  rule={[
+                    {
+                      required: true,
+                      message: '请选择多声轨渲染',
+                      trigger: 'change'
+                    }
+                  ]}
+              >
+                {/*<NSelect*/}
+                {/*    placeholder="请选择曲目类型"*/}
+                {/*    v-model:value={forms.musicSheetType}*/}
+                {/*    options={getSelectDataFromObj(musicSheetType)}*/}
+                {/*/>*/}
+                <NRadioGroup v-model:value={forms.musicSheetType}>
+                  <NRadio value={'SINGLE'}>是</NRadio>
+                  <NRadio value={'CONCERT'}>否</NRadio>
+                </NRadioGroup>
+              </NFormItemGi>
+            </NGrid>
 
             {forms.musicSheetType && (
               <NGrid cols={1}>
@@ -1281,7 +1326,12 @@ export default defineComponent({
                           }
                         ]}
                       >
-                        <NCheckboxGroup v-model:value={forms.multiTracksSelection}>
+                        <NCheckboxGroup v-model:value={forms.multiTracksSelection}
+                        onUpdateValue={()=>{
+                          console.log("multiTracksSelection",forms.multiTracksSelection)
+                          console.log("musicSheetSoundList",forms.musicSheetSoundList)
+                        }}
+                        >
                           <NGrid yGap={2} cols={4}>
                             {state.partListNames.map((item: any) => (
                               <NGi>
@@ -1388,62 +1438,92 @@ export default defineComponent({
             {/* 只有播放类型为mp3时才会有原音 */}
             {forms.playMode === 'MP3' && forms.musicSheetSoundList.length > 0 && (
               <>
-                {forms.musicSheetSoundList.map((item: any, index: number) => (
-                  <>
-                    {item.track?.toLocaleUpperCase?.() != 'COMMON' &&
-                      forms.multiTracksSelection.indexOf(item.track) > -1 && (
-                        <NGrid
-                          class={styles.audioSection}
-                          // v-show={forms.multiTracksSelection.indexOf(item.track) > -1}
-                        >
-                          <NFormItemGi
-                            span={12}
-                            label="原音"
-                            path={`musicSheetSoundList[${index}].audioFileUrl`}
-                            rule={[
-                              {
-                                // required: forms.multiTracksSelection.indexOf(forms.musicSheetSoundList[index].audioFileUrl) > -1,
-                                required: true,
-                                message: `请上传${
-                                  item.track ? item.track + '的' : '第' + (index + 1) + '个'
-                                }原音`
-                              }
-                            ]}
-                          >
-                            <UploadFile
-                              desc={'原音文件'}
-                              disabled={state.previewMode}
-                              size={100}
-                              v-model:fileList={item.audioFileUrl}
-                              tips="仅支持上传.mp3格式文件"
-                              listType="image"
-                              accept=".mp3"
-                              bucketName="cloud-coach"
-                            />
-                          </NFormItemGi>
-                          {state.partListNames.length > 1 && (
-                            <NFormItemGi
-                              span={12}
-                              label="所属轨道"
-                              path={`musicSheetSoundList[${index}].track`}
-                              rule={[
-                                {
-                                  required: true,
-                                  message: '请选择所属轨道'
-                                }
-                              ]}
-                            >
-                              <NSelect
-                                placeholder="请选择所属轨道"
-                                v-model:value={item.track}
-                                options={initPartsListStatus(item.track)}
-                              />
-                            </NFormItemGi>
-                          )}
-                        </NGrid>
-                      )}
-                  </>
-                ))}
+                {forms.musicSheetSoundList.map((item: any, index: number) => {
+                  return (
+                      <>
+                        {(!containOther(item.track) || (item.track?.toLocaleUpperCase?.() != 'COMMON' && forms.multiTracksSelection.includes(item.track)))
+                            && (
+                                <NGrid
+                                    class={styles.audioSection}
+                                    // v-show={forms.multiTracksSelection.indexOf(item.track) > -1}
+                                >
+                                  <NFormItemGi
+                                      span={12}
+                                      label="原音"
+                                      path={`musicSheetSoundList[${index}].audioFileUrl`}
+                                      rule={[
+                                        {
+                                          // required: forms.multiTracksSelection.indexOf(forms.musicSheetSoundList[index].audioFileUrl) > -1,
+                                          required: true,
+                                          message: `请上传${
+                                              item.track ? item.track + '的' : '第' + (index + 1) + '个'
+                                          }原音`
+                                        }
+                                      ]}
+                                  >
+                                    <UploadFile
+                                        desc={'原音文件'}
+                                        disabled={state.previewMode}
+                                        size={100}
+                                        v-model:fileList={item.audioFileUrl}
+                                        tips="仅支持上传.mp3格式文件"
+                                        listType="image"
+                                        accept=".mp3"
+                                        bucketName="cloud-coach"
+                                    />
+                                  </NFormItemGi>
+                                  {state.partListNames.length > 0 && (
+                                      <NFormItemGi
+                                          span={12}
+                                          label="所属轨道"
+                                          path={`musicSheetSoundList[${index}].track`}
+                                          rule={[
+                                            {
+                                              required: true,
+                                              message: '请选择所属轨道'
+                                            }
+                                          ]}
+                                      >
+                                        <NSelect
+                                            placeholder="请选择所属轨道"
+                                            value={item.track}
+                                            options={initPartsListStatus(item.track)}
+                                            onUpdateValue={(value: any) => {
+                                              const track = item.track
+                                              // 声轨交换
+                                              forms.musicSheetSoundList.forEach((next:any)=>{
+                                                if (next.track == value) {
+                                                  next.track = track
+                                                }
+                                              })
+
+                                              if (track) {
+                                                const index = forms.multiTracksSelection.indexOf(item.track)
+                                                forms.multiTracksSelection.splice(index, 1)
+                                              }
+                                              if (value && !forms.multiTracksSelection.includes(value)) {
+                                                forms.multiTracksSelection.push(value)
+                                              }
+                                              item.track = value
+                                            }}
+                                        />
+                                      </NFormItemGi>
+                                  )}
+                                  <NGi class={styles.btnRemove}>
+                                    <NButton
+                                        type="primary"
+                                        text
+                                        disabled={forms.musicSheetSoundList.length === 1}
+                                        onClick={() => removeSys(index)}
+                                    >
+                                      删除
+                                    </NButton>
+                                  </NGi>
+                                </NGrid>
+                            )}
+                      </>
+                  );
+                })}
               </>
             )}
           </NForm>

+ 127 - 17
src/views/music-library/project-music-sheet/module/gym/addMusic.tsx

@@ -20,11 +20,12 @@ import {
 } from 'naive-ui'
 import Pagination from '@components/pagination'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
-import { musicSheetPaymentType, musicSheetSourceType, musicSheetType } from '@/utils/constant'
-import {musicSheetApplicationExtendCategoryList, musicSheetApplicationExtendSaveBatch, musicSheetPage} from '@views/music-library/api'
+import {appKey, musicSheetPaymentType, musicSheetSourceType, musicSheetType} from '@/utils/constant'
+import {musicSheetApplicationExtendCategoryList, musicSheetApplicationExtendSaveBatch, musicSheetApplicationOwnerList, musicSheetPage} from '@views/music-library/api'
 import deepClone from '@/utils/deep.clone'
 import { getOwnerName } from '@views/music-library/musicUtil'
 import TheTooltip from '@/components/TheTooltip'
+import {sysApplicationPage} from "@views/menu-manage/api";
 
 export default defineComponent({
   name: 'gym-addMusic',
@@ -62,7 +63,10 @@ export default defineComponent({
         keyword: null,
         musicSheetType: null,
         subjectId: null,
-        sourceType: null
+        sourceType: null,
+        composer : null,
+        userId : null,
+        applicationId : null,
       },
       subjectList: [] as any,
       showAdd: false,
@@ -72,10 +76,23 @@ export default defineComponent({
       musicSheetCategories: [] as any,
       startSortNum: null as any, // 排序起始值
       projectMusicCategoryId: null as any, // 曲目分类ID
-      globalPaymentType: null as any //收费方式
+      globalPaymentType: null as any, //收费方式
+
+      userIdDisable: true,
+      userIdData: [] as any,
+      useProjectData: [] as any, // 适用项目行数据
     })
 
     onMounted(async () => {
+      state.searchForm.keyword = null
+      state.searchForm.musicSheetType = null
+      state.searchForm.subjectId = null
+      state.searchForm.sourceType = null
+      state.searchForm.composer = null
+      state.searchForm.userId = null
+      state.searchForm.applicationId = null
+
+
       state.loading = true
       state.subjectList = props.subjectList
       // state.musicSheetCategories = props.musicSheetCategories
@@ -90,16 +107,62 @@ export default defineComponent({
         }
       } catch {
       }
-
+      await initUseAppList()
       await getList()
     })
 
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
+    const updateUserIdData = async (sourceType: any) => {
+      if (!state.searchForm.applicationId) {
+        return
+      }
+      state.userIdData = []
+      state.searchForm.userId = null
+      if (sourceType && sourceType !== 'PLATFORM') {
+        const { data } = await musicSheetApplicationOwnerList({
+          page: 1,
+          rows: 9999,
+          sourceType: sourceType,
+          applicationId: state.searchForm.applicationId
+        })
+        const temp = data.rows || []
+        temp.forEach((next: any) => {
+          state.userIdData.push({
+            ...next,
+            label: sourceType === 'PERSON' ? next.userName : next.organizationRole,
+            value: sourceType === 'PERSON' ? next.userId : next.organizationRoleId
+          })
+        })
+      }
+    }
+
     const getList = async () => {
       try {
         state.loading = true
+        const sourceType = state.searchForm.sourceType
         const { data } = await musicSheetPage({
           ...state.pagination,
           ...state.searchForm,
+          userId: (sourceType && sourceType === 'PERSON') ? state.searchForm.userId : null,
+          organizationRoleId: (sourceType && sourceType === 'ORG') ? state.searchForm.userId : null,
           addAppId: props.appId
         })
         state.pagination.pageTotal = Number(data.total)
@@ -134,7 +197,7 @@ export default defineComponent({
           message.error('曲目分类不能为空')
           return
         }
-        if (!item.sortNo || !item.projectMusicCategoryId) {
+        if (item.sortNo === null || item.sortNo === undefined || item.sortNo === '') {
           message.error('排序号不能为空')
           return
         }
@@ -185,7 +248,7 @@ export default defineComponent({
         key: 'composer'
       },
       {
-        title: '曲目类型',
+        title: '多声轨渲染',
         key: 'musicSheetType',
         render: (row: any) => {
           return (
@@ -557,32 +620,79 @@ export default defineComponent({
                     clearable
                   />
                 </NFormItem>
-                <NFormItem label="曲目类型" path="musicSheetType">
+                <NFormItem label="多声轨渲染" path="musicSheetType">
                   <NSelect
-                    placeholder="请选择曲目类型"
+                    placeholder="请选择多声轨渲染"
                     v-model:value={state.searchForm.musicSheetType}
                     options={getSelectDataFromObj(musicSheetType)}
                     clearable
                   />
                 </NFormItem>
-                <NFormItem label="声部" path="musicSubject">
+                <NFormItem label="可用声部" path="musicSubject">
                   <NSelect
-                    placeholder="请选择声部"
+                    placeholder="请选择可用声部"
                     v-model:value={state.searchForm.subjectId}
                     options={state.subjectList}
                     clearable
                   />
                 </NFormItem>
+                <NFormItem label="音乐人" path="composer">
+                  <NInput
+                      placeholder="请选择音乐人"
+                      v-model:value={state.searchForm.composer}
+                      clearable
+                  />
+                </NFormItem>
                 <NFormItem label="曲目来源" path="sourceType">
                   <NSelect
-                    placeholder="请选择曲目来源"
-                    v-model:value={state.searchForm.sourceType}
-                    options={getSelectDataFromObj(musicSheetSourceType)}
-                    // onUpdateValue={async (value: any) => {
-                    // }}
-                    clearable
+                      placeholder="请选择曲目来源"
+                      v-model:value={state.searchForm.sourceType}
+                      options={getSelectDataFromObj(musicSheetSourceType)}
+                      onUpdateValue={async (value: any) => {
+                        state.userIdData = []
+                        state.searchForm.userId = null
+                        if (value && value !== 'PLATFORM') {
+                          await updateUserIdData(value)
+                          state.userIdDisable = false
+                        } else {
+                          state.userIdDisable = true
+                        }
+                      }}
+                      clearable
                   />
                 </NFormItem>
+                <NFormItem label="项目" path="applicationId">
+                  <NSelect
+                      placeholder="请选择项目"
+                      v-model:value={state.searchForm.applicationId}
+                      options={state.useProjectData}
+                      clearable
+                      onUpdateValue={async (value: any) => {
+                        state.searchForm.applicationId = value
+                        if (value) {
+                          await updateUserIdData(state.searchForm.sourceType)
+                          state.userIdDisable = !(
+                              state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                          )
+                        } else {
+                          state.searchForm.userId = null
+                          state.userIdDisable = true
+                          state.userIdData = []
+                        }
+                      }}
+                  />
+                </NFormItem>
+
+                <NFormItem label="所属人" path="author">
+                  <NSelect
+                      filterable
+                      placeholder="请选择所属人"
+                      disabled={state.userIdDisable || (!state.searchForm.applicationId && !state.searchForm.sourceType)}
+                      v-model:value={state.searchForm.userId}
+                      options={state.userIdData}
+                      clearable
+                  ></NSelect>
+                </NFormItem>
                 <NFormItem>
                   <NSpace>
                     <NButton type="primary" onClick={onSearch}>

+ 110 - 62
src/views/music-library/project-music-sheet/module/gym/music-sheet-gym.tsx

@@ -8,13 +8,13 @@ import {
   NDatePicker,
   NDescriptions,
   NDescriptionsItem,
-  NFormItem,
+  NFormItem, NIcon,
   NImage,
   NInput,
   NModal,
   NSelect,
   NSpace,
-  NTag,
+  NTag, NTooltip,
   useDialog,
   useMessage
 } from 'naive-ui'
@@ -23,6 +23,7 @@ import TheTooltip from '@components/TheTooltip'
 import AddMusic from '@views/music-library/project-music-sheet/module/gym/addMusic'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
 import {
+  appKey,
   musicSheetAudioType,
   musicSheetPaymentType,
   musicSheetSourceType,
@@ -41,6 +42,7 @@ import { filterTimes } from '@/utils/dateUtil'
 import deepClone from '@/utils/deep.clone'
 import { getOwnerName } from '@views/music-library/musicUtil'
 import MusicPreView from "@views/music-library/music-sheet/modal/musicPreView";
+import {HelpCircleOutline} from "@vicons/ionicons5";
 
 export default defineComponent({
   name: 'project-music-sheet-mec',
@@ -79,7 +81,8 @@ export default defineComponent({
         topFlag: null, //是否置顶(0:否;1:是)
         availableType: null, //可用途径 ORG 机构 PLATFORM 平台
         appAuditFlag: null, //是否审核版本
-        detailFlag: null //是否查询详情
+        detailFlag: null, //是否查询详情
+        applicationId: null, //所属人项目ID
       },
       subjectList: [],
       dataList: [] as any[],
@@ -92,6 +95,7 @@ export default defineComponent({
       applicationId: null, //应用ID
       musicPreview: false,
       musicScore: null as any,
+      useProjectData: [] as any, // 适用项目行数据
     })
 
     onMounted(async () => {
@@ -134,10 +138,29 @@ export default defineComponent({
       } catch {}
 
       // 加载表格数据
-
+      initUseAppList()
       getList()
     })
 
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
     const saveForm = ref()
 
     const onSearch = () => {
@@ -161,17 +184,11 @@ export default defineComponent({
       try {
         state.loading = true
         const sourceType = state.searchForm.sourceType
-        let userId = state.searchForm.userId
-        let organizationRoleId = null
-        if (sourceType && sourceType === 'ORG') {
-          organizationRoleId = deepClone(userId)
-          userId = null
-        }
         const { data } = await musicSheetPageByApplication({
           ...state.pagination,
           ...state.searchForm,
-          userId: userId,
-          organizationRoleId: organizationRoleId,
+          userId: (sourceType && sourceType === 'PERSON') ? state.searchForm.userId : null,
+          organizationRoleId: (sourceType && sourceType === 'ORG') ? state.searchForm.userId : null,
           ...filterTimes(state.searchForm.times, ['startTime', 'endTime']),
           applicationId: state.applicationId
         })
@@ -225,6 +242,30 @@ export default defineComponent({
       })
     }
 
+    const updateUserIdData = async (sourceType: any) => {
+      if (!state.searchForm.applicationId) {
+        return
+      }
+      state.userIdData = []
+      state.searchForm.userId = null
+      if (sourceType && sourceType !== 'PLATFORM') {
+        const { data } = await musicSheetApplicationOwnerList({
+          page: 1,
+          rows: 9999,
+          sourceType: sourceType,
+          applicationId: state.searchForm.applicationId
+        })
+        const temp = data.rows || []
+        temp.forEach((next: any) => {
+          state.userIdData.push({
+            ...next,
+            label: sourceType === 'PERSON' ? next.userName : next.organizationRole,
+            value: sourceType === 'PERSON' ? next.userId : next.organizationRoleId
+          })
+        })
+      }
+    }
+
     const columns = (): any => {
       return [
         {
@@ -245,7 +286,21 @@ export default defineComponent({
           )
         },
         {
-          title: '曲目来源',
+          title: '封面图',
+          key: 'musicCover',
+          render(row: any): JSX.Element {
+            return <NImage width={60} height={60} src={row.musicCover} />
+          }
+        },
+        // {
+        //   title: '可用声部',
+        //   key: 'subjectNames',
+        //   render: (row: any) => {
+        //     return <TheTooltip content={row.subjectNames}/>
+        //   }
+        // },
+        {
+          title: '曲目信息',
           key: 'musicSheetCategoriesName',
           render: (row: any) => (
             <>
@@ -253,32 +308,18 @@ export default defineComponent({
                 <NDescriptionsItem label="曲目来源">
                   {getMapValueByKey(row.sourceType, new Map(Object.entries(musicSheetSourceType)))}
                 </NDescriptionsItem>
+                <NDescriptionsItem label="多声轨渲染">{getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}</NDescriptionsItem>
                 <NDescriptionsItem label="所属人">
                   <TheTooltip content={getOwnerName(row.musicSheetExtend, row.sourceType)}/>
                 </NDescriptionsItem>
+                <NDescriptionsItem label="可用声部">
+                  <TheTooltip content={row.subjectNames}/>
+                </NDescriptionsItem>
               </NDescriptions>
             </>
           )
         },
         {
-          title: '封面图',
-          key: 'musicCover',
-          render(row: any): JSX.Element {
-            return <NImage width={60} height={60} src={row.musicCover} />
-          }
-        },
-        {
-          title: '曲目类型',
-          key: 'musicSheetType',
-          render: (row: any) => {
-            return (
-              <div>
-                {getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}
-              </div>
-            )
-          }
-        },
-        {
           title: '伴奏类型',
           key: 'audioType',
           render: (row: any) => {
@@ -290,23 +331,9 @@ export default defineComponent({
           }
         },
         {
-          title: '可用声部',
-          key: 'subjectNames',
-          render: (row: any) => {
-            return <TheTooltip content={row.subjectNames}/>
-          }
-        },
-        {
           title: '曲目分类',
           key: 'musicSheetCategoryName'
         },
-        // {
-        //   title: '可用途径',
-        //   key: 'availableType',
-        //   render: (row: any) => {
-        //     return <div>{getMapValueByKey(row.availableType, new Map(Object.entries(musicSheetAvailableType)))}</div>
-        //   }
-        // },
         {
           title: '收费方式',
           key: 'paymentType',
@@ -412,21 +439,8 @@ export default defineComponent({
                   state.userIdData = []
                   state.searchForm.userId = null
                   if (value && value !== 'PLATFORM') {
-                    const { data } = await musicSheetApplicationOwnerList({
-                      page: 1,
-                      rows: 9999,
-                      sourceType: value,
-                      applicationId: state.appId
-                    })
-                    const temp = data.rows || []
-                    temp.forEach((next: any) => {
-                      state.userIdData.push({
-                        ...next,
-                        label: value === 'PERSON' ? next.userName : next.organizationRole,
-                        value: value === 'PERSON' ? next.userId : next.organizationRoleId
-                      })
-                    })
-                    state.userIdDisable = false
+                    await updateUserIdData(value)
+                    state.userIdDisable = !state.searchForm.applicationId
                   } else {
                     state.userIdDisable = true
                   }
@@ -434,14 +448,48 @@ export default defineComponent({
                 clearable
               />
             </NFormItem>
+            <NFormItem label="项目" path="applicationId">
+              <NSelect
+                  placeholder="请选择项目"
+                  v-model:value={state.searchForm.applicationId}
+                  options={state.useProjectData}
+                  clearable
+                  onUpdateValue={async (value: any) => {
+                    state.searchForm.applicationId = value
+                    if (value) {
+                      await updateUserIdData(state.searchForm.sourceType)
+                      state.userIdDisable = !(
+                          state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                      )
+                    } else {
+                      state.searchForm.userId = null
+                      state.userIdDisable = true
+                      state.userIdData = []
+                    }
+                  }}
+              />
+            </NFormItem>
             <NFormItem label="所属人" path="userId">
               <NSelect
+                filterable
                 placeholder="请选择所属人"
                 disabled={state.userIdDisable}
                 v-model:value={state.searchForm.userId}
                 options={state.userIdData}
                 clearable
               ></NSelect>
+              <NTooltip style={"padding-left: 10px"}>
+                {{
+                  default: () => '请选择作者属性和项目再选择所属人',
+                  trigger: () => (
+                      <span style="overflow: hidden;display: inline-block;max-width: 200px;white-space: nowrap;text-overflow: ellipsis;">
+                  <NIcon size="20">
+                      <HelpCircleOutline/>
+                  </NIcon>
+                </span>
+                  )
+                }}
+              </NTooltip>
             </NFormItem>
             <NFormItem label="曲目类型" path="subjectType">
               <NSelect
@@ -576,7 +624,7 @@ export default defineComponent({
               data={state.dataList}
               rowKey={(row: any) => row.applicationExtendId}
               onUpdateCheckedRowKeys={handleCheck}
-              scrollX={'2100'}
+              scrollX={'1400'}
             ></NDataTable>
 
             <Pagination
@@ -594,7 +642,7 @@ export default defineComponent({
             preset="dialog"
             showIcon={false}
             title={'添加曲目'}
-            style={{ width: '1200px' }}
+            style={{ width: '1300px' }}
           >
             <AddMusic
               onClose={() => (state.showAddDialog = false)}

+ 128 - 19
src/views/music-library/project-music-sheet/module/gyt/addMusic.tsx

@@ -20,11 +20,12 @@ import {
 } from 'naive-ui'
 import Pagination from '@components/pagination'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
-import { musicSheetSourceType, musicSheetType } from '@/utils/constant'
-import {musicSheetApplicationExtendCategoryList, musicSheetApplicationExtendSaveBatch, musicSheetPage} from '@views/music-library/api'
+import {appKey, musicSheetSourceType, musicSheetType} from '@/utils/constant'
+import {musicSheetApplicationExtendCategoryList, musicSheetApplicationExtendSaveBatch, musicSheetApplicationOwnerList, musicSheetPage} from '@views/music-library/api'
 import deepClone from '@/utils/deep.clone'
 import { getOwnerName } from '@views/music-library/musicUtil'
 import TheTooltip from "@components/TheTooltip";
+import {sysApplicationPage} from "@views/menu-manage/api";
 
 export default defineComponent({
   name: 'gyt-addMusic',
@@ -62,7 +63,10 @@ export default defineComponent({
         keyword: null,
         musicSheetType: null,
         subjectId: null,
-        sourceType: null
+        sourceType: null,
+        composer : null,
+        userId : null,
+        applicationId : null,
       },
       subjectList: [] as any,
       showAdd: false,
@@ -71,10 +75,20 @@ export default defineComponent({
       selectRowData: [] as any, // 选择的数据列表
       musicSheetCategories: [] as any,
       startSortNum: null as any, // 排序起始值
-      projectMusicCategoryId: null as any // 曲目分类ID
+      projectMusicCategoryId: null as any, // 曲目分类ID
+      useProjectData: [] as any, // 适用项目行数据
+      userIdDisable: true,
+      userIdData: [] as any,
     })
 
     onMounted(async () => {
+      state.searchForm.keyword = null
+      state.searchForm.musicSheetType = null
+      state.searchForm.subjectId = null
+      state.searchForm.sourceType = null
+      state.searchForm.composer = null
+      state.searchForm.userId = null
+      state.searchForm.applicationId = null
       state.loading = true
       state.subjectList = props.subjectList
       // state.musicSheetCategories = props.musicSheetCategories
@@ -88,15 +102,40 @@ export default defineComponent({
         }
       } catch {
       }
+      await initUseAppList()
       await getList()
     })
 
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
     const getList = async () => {
       try {
         state.loading = true
+        const search = {
+          ...state.searchForm,
+          userId: (state.searchForm.sourceType && state.searchForm.sourceType == 'PERSON') ? state.searchForm.userId : null,
+          organizationRoleId: (state.searchForm.sourceType && state.searchForm.sourceType == 'ORG') ? state.searchForm.userId : null,
+        }
         const { data } = await musicSheetPage({
           ...state.pagination,
-          ...state.searchForm,
+          ...search,
           addAppId: props.appId
         })
         state.pagination.pageTotal = Number(data.total)
@@ -119,6 +158,30 @@ export default defineComponent({
       getList()
     }
 
+    const updateUserIdData = async (sourceType: any) => {
+      if (!state.searchForm.applicationId) {
+        return
+      }
+      state.userIdData = []
+      state.searchForm.userId = null
+      if (sourceType && sourceType !== 'PLATFORM') {
+        const { data } = await musicSheetApplicationOwnerList({
+          page: 1,
+          rows: 9999,
+          sourceType: sourceType,
+          applicationId: state.searchForm.applicationId
+        })
+        const temp = data.rows || []
+        temp.forEach((next: any) => {
+          state.userIdData.push({
+            ...next,
+            label: sourceType === 'PERSON' ? next.userName : next.organizationRole,
+            value: sourceType === 'PERSON' ? next.userId : next.organizationRoleId
+          })
+        })
+      }
+    }
+
     const onSave = async () => {
       if (state.selectRowData.length == 0) {
         message.error('未选择曲目')
@@ -131,7 +194,7 @@ export default defineComponent({
           message.error('曲目分类不能为空')
           return
         }
-        if (!item.sortNo || !item.projectMusicCategoryId) {
+        if (item.sortNo === null || item.sortNo === undefined || item.sortNo === '') {
           message.error('排序号不能为空')
           return
         }
@@ -167,7 +230,7 @@ export default defineComponent({
         }
       },
       {
-        title: '声部',
+        title: '可用声部',
         key: 'subjectNames',
         render: (row: any) => {
           return <TheTooltip content={row.subjectNames}/>
@@ -182,7 +245,7 @@ export default defineComponent({
         key: 'composer'
       },
       {
-        title: '曲目类型',
+        title: '多声轨渲染',
         key: 'musicSheetType',
         render: (row: any) => {
           return (
@@ -193,7 +256,7 @@ export default defineComponent({
         }
       },
       {
-        title: '作者属性',
+        title: '曲目来源',
         key: 'sourceType',
         render(row: any) {
           return getMapValueByKey(row.sourceType, new Map(Object.entries(musicSheetSourceType)))
@@ -467,32 +530,78 @@ export default defineComponent({
                     clearable
                   />
                 </NFormItem>
-                <NFormItem label="曲目类型" path="musicSheetType">
+                <NFormItem label="多声轨渲染" path="musicSheetType">
                   <NSelect
-                    placeholder="请选择曲目类型"
+                    placeholder="请选择多声轨渲染"
                     v-model:value={state.searchForm.musicSheetType}
                     options={getSelectDataFromObj(musicSheetType)}
                     clearable
                   />
                 </NFormItem>
-                <NFormItem label="声部" path="musicSubject">
+                <NFormItem label="可用声部" path="musicSubject">
                   <NSelect
-                    placeholder="请选择声部"
+                    placeholder="请选择可用声部"
                     v-model:value={state.searchForm.subjectId}
                     options={state.subjectList}
                     clearable
                   />
                 </NFormItem>
+                <NFormItem label="音乐人" path="composer">
+                  <NInput
+                      placeholder="请选择音乐人"
+                      v-model:value={state.searchForm.composer}
+                      clearable
+                  />
+                </NFormItem>
                 <NFormItem label="曲目来源" path="sourceType">
                   <NSelect
-                    placeholder="请选择曲目来源"
-                    v-model:value={state.searchForm.sourceType}
-                    options={getSelectDataFromObj(musicSheetSourceType)}
-                    // onUpdateValue={async (value: any) => {
-                    // }}
-                    clearable
+                      placeholder="请选择曲目来源"
+                      v-model:value={state.searchForm.sourceType}
+                      options={getSelectDataFromObj(musicSheetSourceType)}
+                      onUpdateValue={async (value: any) => {
+                        state.userIdData = []
+                        state.searchForm.userId = null
+                        if (value && value !== 'PLATFORM') {
+                          await updateUserIdData(value)
+                          state.userIdDisable = false
+                        } else {
+                          state.userIdDisable = true
+                        }
+                      }}
+                      clearable
                   />
                 </NFormItem>
+                <NFormItem label="项目" path="applicationId">
+                  <NSelect
+                      placeholder="请选择项目"
+                      v-model:value={state.searchForm.applicationId}
+                      options={state.useProjectData}
+                      clearable
+                      onUpdateValue={async (value: any) => {
+                        state.searchForm.applicationId = value
+                        if (value) {
+                          await updateUserIdData(state.searchForm.sourceType)
+                          state.userIdDisable = !(
+                              state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                          )
+                        } else {
+                          state.searchForm.userId = null
+                          state.userIdDisable = true
+                          state.userIdData = []
+                        }
+                      }}
+                  />
+                </NFormItem>
+                <NFormItem label="所属人" path="author">
+                  <NSelect
+                      filterable
+                      placeholder="请选择所属人"
+                      disabled={state.userIdDisable || (!state.searchForm.applicationId && !state.searchForm.sourceType)}
+                      v-model:value={state.searchForm.userId}
+                      options={state.userIdData}
+                      clearable
+                  ></NSelect>
+                </NFormItem>
                 <NFormItem>
                   <NSpace>
                     <NButton type="primary" onClick={onSearch}>

+ 97 - 52
src/views/music-library/project-music-sheet/module/gyt/music-sheet-gyt.tsx

@@ -23,6 +23,7 @@ import TheTooltip from '@components/TheTooltip'
 import AddMusic from '@views/music-library/project-music-sheet/module/gyt/addMusic'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
 import {
+  appKey,
   musicSheetAudioType,
   musicSheetPaymentType,
   musicSheetSourceType,
@@ -78,7 +79,8 @@ export default defineComponent({
         topFlag: null, //是否置顶(0:否;1:是)
         availableType: null, //可用途径 ORG 机构 PLATFORM 平台
         appAuditFlag: null, //是否审核版本
-        detailFlag: null //是否查询详情
+        detailFlag: null, //是否查询详情
+        applicationId: null, //所属人项目ID
       },
       subjectList: [],
       dataList: [] as any[],
@@ -91,6 +93,7 @@ export default defineComponent({
       applicationId: null, //应用ID
       musicPreview: false,
       musicScore: null as any,
+      useProjectData: [] as any, // 适用项目行数据
     })
 
     onMounted(async () => {
@@ -132,6 +135,7 @@ export default defineComponent({
 
       // 加载表格数据
 
+      initUseAppList()
       getList()
     })
 
@@ -149,6 +153,51 @@ export default defineComponent({
       getList()
     }
 
+
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
+    const updateUserIdData = async (sourceType: any) => {
+      if (!state.searchForm.applicationId) {
+        return
+      }
+      state.userIdData = []
+      state.searchForm.userId = null
+      if (sourceType && sourceType !== 'PLATFORM') {
+        const { data } = await musicSheetApplicationOwnerList({
+          page: 1,
+          rows: 9999,
+          sourceType: sourceType,
+          applicationId: state.searchForm.applicationId
+        })
+        const temp = data.rows || []
+        temp.forEach((next: any) => {
+          state.userIdData.push({
+            ...next,
+            label: sourceType === 'PERSON' ? next.userName : next.organizationRole,
+            value: sourceType === 'PERSON' ? next.userId : next.organizationRoleId
+          })
+        })
+      }
+    }
+
+
     const checkedRowKeysRef = ref<DataTableRowKey[]>([])
     const handleCheck = (rowKeys: DataTableRowKey[]) => {
       checkedRowKeysRef.value = rowKeys
@@ -158,17 +207,11 @@ export default defineComponent({
       try {
         state.loading = true
         const sourceType = state.searchForm.sourceType
-        let userId = state.searchForm.userId
-        let organizationRoleId = null
-        if (sourceType && sourceType === 'ORG') {
-          organizationRoleId = deepClone(userId)
-          userId = null
-        }
         const { data } = await musicSheetPageByApplication({
           ...state.pagination,
           ...state.searchForm,
-          userId: userId,
-          organizationRoleId: organizationRoleId,
+          userId: (sourceType && sourceType === 'PERSON') ? state.searchForm.userId : null,
+          organizationRoleId: (sourceType && sourceType === 'ORG') ? state.searchForm.userId : null,
           ...filterTimes(state.searchForm.times, ['startTime', 'endTime']),
           applicationId: state.applicationId
         })
@@ -242,7 +285,21 @@ export default defineComponent({
           )
         },
         {
-          title: '曲目来源',
+          title: '封面图',
+          key: 'musicCover',
+          render(row: any): JSX.Element {
+            return <NImage width={60} height={60} src={row.musicCover} />
+          }
+        },
+        // {
+        //   title: '可用声部',
+        //   key: 'subjectNames',
+        //   render: (row: any) => {
+        //     return <TheTooltip content={row.subjectNames}/>
+        //   }
+        // },
+        {
+          title: '曲目信息',
           key: 'musicSheetCategoriesName',
           render: (row: any) => (
             <>
@@ -250,32 +307,18 @@ export default defineComponent({
                 <NDescriptionsItem label="曲目来源">
                   {getMapValueByKey(row.sourceType, new Map(Object.entries(musicSheetSourceType)))}
                 </NDescriptionsItem>
+                <NDescriptionsItem label="多声轨渲染">{getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}</NDescriptionsItem>
                 <NDescriptionsItem label="所属人">
                   <TheTooltip content={getOwnerName(row.musicSheetExtend, row.sourceType)}/>
                 </NDescriptionsItem>
+                <NDescriptionsItem label="可用声部">
+                  <TheTooltip content={row.subjectNames}/>
+                </NDescriptionsItem>
               </NDescriptions>
             </>
           )
         },
         {
-          title: '封面图',
-          key: 'musicCover',
-          render(row: any): JSX.Element {
-            return <NImage width={60} height={60} src={row.musicCover} />
-          }
-        },
-        {
-          title: '曲目类型',
-          key: 'musicSheetType',
-          render: (row: any) => {
-            return (
-              <div>
-                {getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}
-              </div>
-            )
-          }
-        },
-        {
           title: '伴奏类型',
           key: 'audioType',
           render: (row: any) => {
@@ -287,13 +330,6 @@ export default defineComponent({
           }
         },
         {
-          title: '可用声部',
-          key: 'subjectNames',
-          render: (row: any) => {
-            return <TheTooltip content={row.subjectNames}/>
-          }
-        },
-        {
           title: '曲目分类',
           key: 'musicSheetCategoryName'
         },
@@ -409,21 +445,8 @@ export default defineComponent({
                   state.userIdData = []
                   state.searchForm.userId = null
                   if (value && value !== 'PLATFORM') {
-                    const { data } = await musicSheetApplicationOwnerList({
-                      page: 1,
-                      rows: 9999,
-                      sourceType: value,
-                      applicationId: state.appId
-                    })
-                    const temp = data.rows || []
-                    temp.forEach((next: any) => {
-                      state.userIdData.push({
-                        ...next,
-                        label: value === 'PERSON' ? next.userName : next.organizationRole,
-                        value: value === 'PERSON' ? next.userId : next.organizationRoleId
-                      })
-                    })
-                    state.userIdDisable = false
+                    await updateUserIdData(value)
+                    state.userIdDisable = !state.searchForm.applicationId
                   } else {
                     state.userIdDisable = true
                   }
@@ -431,8 +454,30 @@ export default defineComponent({
                 clearable
               />
             </NFormItem>
+            <NFormItem label="项目" path="applicationId">
+              <NSelect
+                  placeholder="请选择项目"
+                  v-model:value={state.searchForm.applicationId}
+                  options={state.useProjectData}
+                  clearable
+                  onUpdateValue={async (value: any) => {
+                    state.searchForm.applicationId = value
+                    if (value) {
+                      await updateUserIdData(state.searchForm.sourceType)
+                      state.userIdDisable = !(
+                          state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                      )
+                    } else {
+                      state.searchForm.userId = null
+                      state.userIdDisable = true
+                      state.userIdData = []
+                    }
+                  }}
+              />
+            </NFormItem>
             <NFormItem label="所属人" path="userId">
               <NSelect
+                filterable
                 placeholder="请选择所属人"
                 disabled={state.userIdDisable}
                 v-model:value={state.searchForm.userId}
@@ -573,7 +618,7 @@ export default defineComponent({
               data={state.dataList}
               rowKey={(row: any) => row.applicationExtendId}
               onUpdateCheckedRowKeys={handleCheck}
-              scrollX={'2100'}
+              scrollX={'1200'}
             ></NDataTable>
 
             <Pagination
@@ -591,7 +636,7 @@ export default defineComponent({
             preset="dialog"
             showIcon={false}
             title={'添加曲目'}
-            style={{ width: '1200px' }}
+            style={{ width: '1300px' }}
           >
             <AddMusic
               onClose={() => (state.showAddDialog = false)}

+ 126 - 14
src/views/music-library/project-music-sheet/module/klx/addMusic.tsx

@@ -20,15 +20,17 @@ import {
 import Pagination from '@components/pagination'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
 import {
+  appKey,
   musicSheetAvailableType,
   musicSheetPaymentType,
   musicSheetSourceType,
   musicSheetType
 } from '@/utils/constant'
-import {musicSheetApplicationExtendSaveBatch, musicSheetApplicationExtendTagList, musicSheetPage} from '@views/music-library/api'
+import {musicSheetApplicationExtendSaveBatch, musicSheetApplicationExtendTagList, musicSheetApplicationOwnerList, musicSheetPage} from '@views/music-library/api'
 import deepClone from '@/utils/deep.clone'
 import { getOwnerName } from '@views/music-library/musicUtil'
 import TheTooltip from "@components/TheTooltip";
+import {sysApplicationPage} from "@views/menu-manage/api";
 
 export default defineComponent({
   name: 'klx-addMusic',
@@ -66,7 +68,10 @@ export default defineComponent({
         keyword: null,
         musicSheetType: null,
         subjectId: null,
-        sourceType: null
+        sourceType: null,
+        composer : null,
+        userId : null,
+        applicationId : null,
       },
       subjectList: [] as any,
       showAdd: false,
@@ -75,6 +80,10 @@ export default defineComponent({
       selectRowData: [] as any, // 选择的数据列表
       musicSheetCategories: [] as any,
       musicSheetTagList: [] as any,
+      useProjectData: [] as any, // 适用项目行数据
+
+      userIdDisable: true,
+      userIdData: [] as any,
 
       globalMusicTagIds: [] as any, //曲目标签
       globalPaymentType: null as any, //收费方式
@@ -86,6 +95,14 @@ export default defineComponent({
     })
 
     onMounted(async () => {
+      state.searchForm.keyword = null
+      state.searchForm.musicSheetType = null
+      state.searchForm.subjectId = null
+      state.searchForm.sourceType = null
+      state.searchForm.composer = null
+      state.searchForm.userId = null
+      state.searchForm.applicationId = null
+
       state.loading = true
       state.subjectList = props.subjectList
       // state.musicSheetTagList = props.musicSheetTagList
@@ -104,15 +121,40 @@ export default defineComponent({
         }
       } catch (err) {
       }
+      await initUseAppList()
       await getList()
     })
 
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
     const getList = async () => {
       try {
         state.loading = true
+        const search = {
+          ...state.searchForm,
+          userId: (state.searchForm.sourceType && state.searchForm.sourceType == 'PERSON') ? state.searchForm.userId : null,
+          organizationRoleId: (state.searchForm.sourceType && state.searchForm.sourceType == 'ORG') ? state.searchForm.userId : null,
+        }
         const { data } = await musicSheetPage({
           ...state.pagination,
-          ...state.searchForm,
+          ...search,
           addAppId: props.appId
         })
         state.pagination.pageTotal = Number(data.total)
@@ -135,6 +177,30 @@ export default defineComponent({
       getList()
     }
 
+    const updateUserIdData = async (sourceType: any) => {
+      if (!state.searchForm.applicationId) {
+        return
+      }
+      state.userIdData = []
+      state.searchForm.userId = null
+      if (sourceType && sourceType !== 'PLATFORM') {
+        const { data } = await musicSheetApplicationOwnerList({
+          page: 1,
+          rows: 9999,
+          sourceType: sourceType,
+          applicationId: state.searchForm.applicationId
+        })
+        const temp = data.rows || []
+        temp.forEach((next: any) => {
+          state.userIdData.push({
+            ...next,
+            label: sourceType === 'PERSON' ? next.userName : next.organizationRole,
+            value: sourceType === 'PERSON' ? next.userId : next.organizationRoleId
+          })
+        })
+      }
+    }
+
     const onSave = async () => {
       if (state.selectRowData.length == 0) {
         message.error('未选择曲目')
@@ -209,7 +275,7 @@ export default defineComponent({
         }
       },
       {
-        title: '声部',
+        title: '可用声部',
         key: 'subjectNames',
         render: (row: any) => {
           return <TheTooltip content={row.subjectNames}/>
@@ -224,7 +290,7 @@ export default defineComponent({
         key: 'composer'
       },
       {
-        title: '曲目类型',
+        title: '多声轨渲染',
         key: 'musicSheetType',
         render: (row: any) => {
           return (
@@ -235,7 +301,7 @@ export default defineComponent({
         }
       },
       {
-        title: '作者属性',
+        title: '曲目来源',
         key: 'sourceType',
         render(row: any) {
           return getMapValueByKey(row.sourceType, new Map(Object.entries(musicSheetSourceType)))
@@ -914,7 +980,7 @@ export default defineComponent({
                 ref={saveForm}
                 model={state.searchForm}
                 onSubmit={onSubmit}
-                // saveKey="cooleshow-edu-addMusic"
+                saveKey="klx-addMusic"
                 onSetModel={(val: any) => (state.searchForm = val)}
               >
                 <NFormItem label="关键词" path="keyword">
@@ -924,32 +990,78 @@ export default defineComponent({
                     clearable
                   />
                 </NFormItem>
-                <NFormItem label="曲目类型" path="musicSheetType">
+                <NFormItem label="多声轨渲染" path="musicSheetType">
                   <NSelect
-                    placeholder="请选择曲目类型"
+                    placeholder="请选择多声轨渲染"
                     v-model:value={state.searchForm.musicSheetType}
                     options={getSelectDataFromObj(musicSheetType)}
                     clearable
                   />
                 </NFormItem>
-                <NFormItem label="声部" path="musicSubject">
+                <NFormItem label="可用声部" path="musicSubject">
                   <NSelect
-                    placeholder="请选择声部"
+                    placeholder="请选择可用声部"
                     v-model:value={state.searchForm.subjectId}
                     options={state.subjectList}
                     clearable
                   />
                 </NFormItem>
+                <NFormItem label="音乐人" path="composer">
+                  <NInput
+                      placeholder="请选择音乐人"
+                      v-model:value={state.searchForm.composer}
+                      clearable
+                  />
+                </NFormItem>
                 <NFormItem label="曲目来源" path="sourceType">
                   <NSelect
                     placeholder="请选择曲目来源"
                     v-model:value={state.searchForm.sourceType}
                     options={getSelectDataFromObj(musicSheetSourceType)}
-                    // onUpdateValue={async (value: any) => {
-                    // }}
+                    onUpdateValue={async (value: any) => {
+                      state.userIdData = []
+                      state.searchForm.userId = null
+                      if (value && value !== 'PLATFORM') {
+                        await updateUserIdData(value)
+                        state.userIdDisable = false
+                      } else {
+                        state.userIdDisable = true
+                      }
+                    }}
                     clearable
                   />
                 </NFormItem>
+                <NFormItem label="项目" path="applicationId">
+                  <NSelect
+                      placeholder="请选择项目"
+                      v-model:value={state.searchForm.applicationId}
+                      options={state.useProjectData}
+                      clearable
+                      onUpdateValue={async (value: any) => {
+                        state.searchForm.applicationId = value
+                        if (value) {
+                          await updateUserIdData(state.searchForm.sourceType)
+                          state.userIdDisable = !(
+                              state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                          )
+                        } else {
+                          state.searchForm.userId = null
+                          state.userIdDisable = true
+                          state.userIdData = []
+                        }
+                      }}
+                  />
+                </NFormItem>
+                <NFormItem label="所属人" path="author">
+                  <NSelect
+                      filterable
+                      placeholder="请选择所属人"
+                      disabled={state.userIdDisable || (!state.searchForm.applicationId && !state.searchForm.sourceType)}
+                      v-model:value={state.searchForm.userId}
+                      options={state.userIdData}
+                      clearable
+                  ></NSelect>
+                </NFormItem>
                 <NFormItem>
                   <NSpace>
                     <NButton type="primary" onClick={onSearch}>
@@ -978,7 +1090,7 @@ export default defineComponent({
                 v-model:pageTotal={state.pagination.pageTotal}
                 onList={getList}
                 sync
-                // saveKey="cooleshow-edu-addMusic"
+                saveKey="klx-addMusic"
               ></Pagination>
             </div>
           )}

+ 108 - 59
src/views/music-library/project-music-sheet/module/klx/music-sheet-klx.tsx

@@ -22,6 +22,7 @@ import TheTooltip from '@components/TheTooltip'
 import AddMusic from '@views/music-library/project-music-sheet/module/klx/addMusic'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
 import {
+  appKey,
   musicSheetAudioType,
   musicSheetAvailableType,
   musicSheetPaymentType,
@@ -78,7 +79,8 @@ export default defineComponent({
         availableType: null, //可用途径 ORG 机构 PLATFORM 平台
         appAuditFlag: null, //是否审核版本
         detailFlag: null, //是否查询详情
-        musicTagIds: [] as any //曲目标签
+        musicTagIds: [] as any,//曲目标签
+        applicationId: null, //所属人项目ID
       },
       subjectList: [],
       dataList: [] as any[],
@@ -91,6 +93,7 @@ export default defineComponent({
       applicationId: null, //应用ID
       musicPreview: false,
       musicScore: null as any,
+      useProjectData: [] as any, // 适用项目行数据
     })
 
     onMounted(async () => {
@@ -137,7 +140,7 @@ export default defineComponent({
       } catch (err) {}
 
       // 加载表格数据
-
+      initUseAppList()
       getList()
     })
 
@@ -155,6 +158,25 @@ export default defineComponent({
       getList()
     }
 
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
     const checkedRowKeysRef = ref<DataTableRowKey[]>([])
     const handleCheck = (rowKeys: DataTableRowKey[]) => {
       checkedRowKeysRef.value = rowKeys
@@ -173,8 +195,8 @@ export default defineComponent({
         const { data } = await musicSheetPageByApplication({
           ...state.pagination,
           ...state.searchForm,
-          userId: userId,
-          organizationRoleId: organizationRoleId,
+          userId: (sourceType && sourceType === 'PERSON') ? state.searchForm.userId : null,
+          organizationRoleId: (sourceType && sourceType === 'ORG') ? state.searchForm.userId : null,
           musicTagIds: state.searchForm.musicTagIds?.join(','),
           ...filterTimes(state.searchForm.times, ['startTime', 'endTime']),
           applicationId: state.applicationId
@@ -243,6 +265,31 @@ export default defineComponent({
       return paymentTypeName.join(',')
     }
 
+    const updateUserIdData = async (sourceType: any) => {
+      if (!state.searchForm.applicationId) {
+        return
+      }
+      state.userIdData = []
+      state.searchForm.userId = null
+      if (sourceType && sourceType !== 'PLATFORM') {
+        const { data } = await musicSheetApplicationOwnerList({
+          page: 1,
+          rows: 9999,
+          sourceType: sourceType,
+          applicationId: state.searchForm.applicationId
+        })
+        const temp = data.rows || []
+        temp.forEach((next: any) => {
+          state.userIdData.push({
+            ...next,
+            label: sourceType === 'PERSON' ? next.userName : next.organizationRole,
+            value: sourceType === 'PERSON' ? next.userId : next.organizationRoleId
+          })
+        })
+      }
+    }
+
+
     const columns = (): any => {
       return [
         {
@@ -263,7 +310,14 @@ export default defineComponent({
           )
         },
         {
-          title: '曲目来源',
+          title: '封面图',
+          key: 'musicCover',
+          render(row: any): JSX.Element {
+            return <NImage width={60} height={60} src={row.musicCover} />
+          }
+        },
+        {
+          title: '曲目信息',
           key: 'musicSheetCategoriesName',
           render: (row: any) => (
             <>
@@ -271,32 +325,18 @@ export default defineComponent({
                 <NDescriptionsItem label="曲目来源">
                   {getMapValueByKey(row.sourceType, new Map(Object.entries(musicSheetSourceType)))}
                 </NDescriptionsItem>
+                <NDescriptionsItem label="多声轨渲染">{getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}</NDescriptionsItem>
                 <NDescriptionsItem label="所属人">
                   <TheTooltip content={getOwnerName(row.musicSheetExtend, row.sourceType)}/>
                 </NDescriptionsItem>
+                <NDescriptionsItem label="可用声部">
+                  <TheTooltip content={row.subjectNames}/>
+                </NDescriptionsItem>
               </NDescriptions>
             </>
           )
         },
         {
-          title: '封面图',
-          key: 'musicCover',
-          render(row: any): JSX.Element {
-            return <NImage width={60} height={60} src={row.musicCover} />
-          }
-        },
-        {
-          title: '曲目类型',
-          key: 'musicSheetType',
-          render: (row: any) => {
-            return (
-              <div>
-                {getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}
-              </div>
-            )
-          }
-        },
-        {
           title: '伴奏类型',
           key: 'audioType',
           render: (row: any) => {
@@ -307,13 +347,13 @@ export default defineComponent({
             )
           }
         },
-        {
-          title: '可用声部',
-          key: 'subjectNames',
-          render: (row: any) => {
-            return <TheTooltip content={row.subjectNames}/>
-          }
-        },
+        // {
+        //   title: '可用声部',
+        //   key: 'subjectNames',
+        //   render: (row: any) => {
+        //     return <TheTooltip content={row.subjectNames}/>
+        //   }
+        // },
         {
           title: '曲目标签',
           key: 'musicTagNames'
@@ -444,37 +484,46 @@ export default defineComponent({
             </NFormItem>
             <NFormItem label="曲目来源" path="sourceType">
               <NSelect
-                placeholder="请选择曲目来源"
-                v-model:value={state.searchForm.sourceType}
-                options={getSelectDataFromObj(musicSheetSourceType)}
-                onUpdateValue={async (value: any) => {
-                  state.userIdData = []
-                  state.searchForm.userId = null
-                  if (value && value !== 'PLATFORM') {
-                    const { data } = await musicSheetApplicationOwnerList({
-                      page: 1,
-                      rows: 9999,
-                      sourceType: value,
-                      applicationId: state.appId
-                    })
-                    const temp = data.rows || []
-                    temp.forEach((next: any) => {
-                      state.userIdData.push({
-                        ...next,
-                        label: value === 'PERSON' ? next.userName : next.organizationRole,
-                        value: value === 'PERSON' ? next.userId : next.organizationRoleId
-                      })
-                    })
-                    state.userIdDisable = false
-                  } else {
-                    state.userIdDisable = true
-                  }
-                }}
-                clearable
+                  placeholder="请选择曲目来源"
+                  v-model:value={state.searchForm.sourceType}
+                  options={getSelectDataFromObj(musicSheetSourceType)}
+                  onUpdateValue={async (value: any) => {
+                    state.userIdData = []
+                    state.searchForm.userId = null
+                    if (value && value !== 'PLATFORM') {
+                      await updateUserIdData(value)
+                      state.userIdDisable = !state.searchForm.applicationId
+                    } else {
+                      state.userIdDisable = true
+                    }
+                  }}
+                  clearable
+              />
+            </NFormItem>
+            <NFormItem label="项目" path="applicationId">
+              <NSelect
+                  placeholder="请选择项目"
+                  v-model:value={state.searchForm.applicationId}
+                  options={state.useProjectData}
+                  clearable
+                  onUpdateValue={async (value: any) => {
+                    state.searchForm.applicationId = value
+                    if (value) {
+                      await updateUserIdData(state.searchForm.sourceType)
+                      state.userIdDisable = !(
+                          state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                      )
+                    } else {
+                      state.searchForm.userId = null
+                      state.userIdDisable = true
+                      state.userIdData = []
+                    }
+                  }}
               />
             </NFormItem>
             <NFormItem label="所属人" path="userId">
               <NSelect
+                filterable
                 placeholder="请选择所属人"
                 disabled={state.userIdDisable}
                 v-model:value={state.searchForm.userId}
@@ -614,7 +663,7 @@ export default defineComponent({
               data={state.dataList}
               rowKey={(row: any) => row.applicationExtendId}
               onUpdateCheckedRowKeys={handleCheck}
-              scrollX={'2100'}
+              scrollX={'2000'}
             ></NDataTable>
 
             <Pagination
@@ -632,7 +681,7 @@ export default defineComponent({
             preset="dialog"
             showIcon={false}
             title={'添加曲目'}
-            style={{ width: '1200px' }}
+            style={{ width: '1300px' }}
           >
             <AddMusic
               onClose={() => (state.showAddDialog = false)}

+ 129 - 18
src/views/music-library/project-music-sheet/module/kt/addMusic.tsx

@@ -20,11 +20,12 @@ import {
 } from 'naive-ui'
 import Pagination from '@components/pagination'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
-import { musicSheetSourceType, musicSheetType } from '@/utils/constant'
-import {musicSheetApplicationExtendCategoryList, musicSheetApplicationExtendSaveBatch, musicSheetPage} from '@views/music-library/api'
+import {appKey, musicSheetSourceType, musicSheetType} from '@/utils/constant'
+import {musicSheetApplicationExtendCategoryList, musicSheetApplicationExtendSaveBatch, musicSheetApplicationOwnerList, musicSheetPage} from '@views/music-library/api'
 import deepClone from '@/utils/deep.clone'
 import { getOwnerName } from '@views/music-library/musicUtil'
 import TheTooltip from '@/components/TheTooltip'
+import {sysApplicationPage} from "@views/menu-manage/api";
 
 export default defineComponent({
   name: 'kt-addMusic',
@@ -63,7 +64,10 @@ export default defineComponent({
         keyword: null,
         musicSheetType: null,
         subjectId: null,
-        sourceType: null
+        sourceType: null,
+        composer : null,
+        userId : null,
+        applicationId : null,
       },
       subjectList: [] as any,
       showAdd: false,
@@ -72,10 +76,21 @@ export default defineComponent({
       selectRowData: [] as any, // 选择的数据列表
       musicSheetCategories: [] as any,
       startSortNum: null as any, // 排序起始值
-      projectMusicCategoryId: null as any // 曲目分类ID
+      projectMusicCategoryId: null as any, // 曲目分类ID
+
+      useProjectData: [] as any, // 适用项目行数据
+      userIdDisable: true,
+      userIdData: [] as any,
     })
 
     onMounted(async () => {
+      state.searchForm.keyword = null
+      state.searchForm.musicSheetType = null
+      state.searchForm.subjectId = null
+      state.searchForm.sourceType = null
+      state.searchForm.composer = null
+      state.searchForm.userId = null
+      state.searchForm.applicationId = null
       state.loading = true
       state.subjectList = props.subjectList
       // state.musicSheetCategories = props.musicSheetCategories
@@ -89,15 +104,41 @@ export default defineComponent({
         }
       } catch {
       }
+      await initUseAppList()
       await getList()
     })
 
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
+
     const getList = async () => {
       try {
         state.loading = true
+        const search = {
+          ...state.searchForm,
+          userId: (state.searchForm.sourceType && state.searchForm.sourceType == 'PERSON') ? state.searchForm.userId : null,
+          organizationRoleId: (state.searchForm.sourceType && state.searchForm.sourceType == 'ORG') ? state.searchForm.userId : null,
+        }
         const { data } = await musicSheetPage({
           ...state.pagination,
-          ...state.searchForm,
+          ...search,
           addAppId: props.appId
         })
         state.pagination.pageTotal = Number(data.total)
@@ -171,7 +212,7 @@ export default defineComponent({
         }
       },
       {
-        title: '声部',
+        title: '可用声部',
         key: 'subjectNames',
         render: (row: any) => {
           return <TheTooltip content={row.subjectNames}/>
@@ -186,7 +227,7 @@ export default defineComponent({
         key: 'composer'
       },
       {
-        title: '曲目类型',
+        title: '多声轨渲染',
         key: 'musicSheetType',
         render: (row: any) => {
           return (
@@ -197,7 +238,7 @@ export default defineComponent({
         }
       },
       {
-        title: '作者属性',
+        title: '曲目来源',
         key: 'sourceType',
         render(row: any) {
           return getMapValueByKey(row.sourceType, new Map(Object.entries(musicSheetSourceType)))
@@ -441,6 +482,30 @@ export default defineComponent({
       })
     }
 
+    const updateUserIdData = async (sourceType: any) => {
+      if (!state.searchForm.applicationId) {
+        return
+      }
+      state.userIdData = []
+      state.searchForm.userId = null
+      if (sourceType && sourceType !== 'PLATFORM') {
+        const { data } = await musicSheetApplicationOwnerList({
+          page: 1,
+          rows: 9999,
+          sourceType: sourceType,
+          applicationId: state.searchForm.applicationId
+        })
+        const temp = data.rows || []
+        temp.forEach((next: any) => {
+          state.userIdData.push({
+            ...next,
+            label: sourceType === 'PERSON' ? next.userName : next.organizationRole,
+            value: sourceType === 'PERSON' ? next.userId : next.organizationRoleId
+          })
+        })
+      }
+    }
+
     return () => {
       return (
         <div class="system-menu-container">
@@ -472,32 +537,78 @@ export default defineComponent({
                     clearable
                   />
                 </NFormItem>
-                <NFormItem label="曲目类型" path="musicSheetType">
+                <NFormItem label="多声轨渲染" path="musicSheetType">
                   <NSelect
-                    placeholder="请选择曲目类型"
+                    placeholder="请选择多声轨渲染"
                     v-model:value={state.searchForm.musicSheetType}
                     options={getSelectDataFromObj(musicSheetType)}
                     clearable
                   />
                 </NFormItem>
-                <NFormItem label="声部" path="musicSubject">
+                <NFormItem label="可用声部" path="musicSubject">
                   <NSelect
-                    placeholder="请选择声部"
+                    placeholder="请选择可用声部"
                     v-model:value={state.searchForm.subjectId}
                     options={state.subjectList}
                     clearable
                   />
                 </NFormItem>
+                <NFormItem label="音乐人" path="composer">
+                  <NInput
+                      placeholder="请选择音乐人"
+                      v-model:value={state.searchForm.composer}
+                      clearable
+                  />
+                </NFormItem>
                 <NFormItem label="曲目来源" path="sourceType">
                   <NSelect
-                    placeholder="请选择曲目来源"
-                    v-model:value={state.searchForm.sourceType}
-                    options={getSelectDataFromObj(musicSheetSourceType)}
-                    // onUpdateValue={async (value: any) => {
-                    // }}
-                    clearable
+                      placeholder="请选择曲目来源"
+                      v-model:value={state.searchForm.sourceType}
+                      options={getSelectDataFromObj(musicSheetSourceType)}
+                      onUpdateValue={async (value: any) => {
+                        state.userIdData = []
+                        state.searchForm.userId = null
+                        if (value && value !== 'PLATFORM') {
+                          await updateUserIdData(value)
+                          state.userIdDisable = false
+                        } else {
+                          state.userIdDisable = true
+                        }
+                      }}
+                      clearable
                   />
                 </NFormItem>
+                <NFormItem label="项目" path="applicationId">
+                  <NSelect
+                      placeholder="请选择项目"
+                      v-model:value={state.searchForm.applicationId}
+                      options={state.useProjectData}
+                      clearable
+                      onUpdateValue={async (value: any) => {
+                        state.searchForm.applicationId = value
+                        if (value) {
+                          await updateUserIdData(state.searchForm.sourceType)
+                          state.userIdDisable = !(
+                              state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                          )
+                        } else {
+                          state.searchForm.userId = null
+                          state.userIdDisable = true
+                          state.userIdData = []
+                        }
+                      }}
+                  />
+                </NFormItem>
+                <NFormItem label="所属人" path="author">
+                  <NSelect
+                      filterable
+                      placeholder="请选择所属人"
+                      disabled={state.userIdDisable || (!state.searchForm.applicationId && !state.searchForm.sourceType)}
+                      v-model:value={state.searchForm.userId}
+                      options={state.userIdData}
+                      clearable
+                  ></NSelect>
+                </NFormItem>
                 <NFormItem>
                   <NSpace>
                     <NButton type="primary" onClick={onSearch}>

+ 108 - 65
src/views/music-library/project-music-sheet/module/kt/music-sheet-kt.tsx

@@ -29,7 +29,7 @@ import {
   musicSheetPageByApplication
 } from '@views/music-library/api'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
-import { musicSheetAudioType, musicSheetSourceType, musicSheetType } from '@/utils/constant'
+import {appKey, musicSheetAudioType, musicSheetSourceType, musicSheetType} from '@/utils/constant'
 import { sysApplicationPage } from '@views/menu-manage/api'
 import { musicSheetApplicationExtendSubjectList } from '@views/system-manage/api'
 import { filterTimes } from '@/utils/dateUtil'
@@ -76,7 +76,8 @@ export default defineComponent({
         topFlag: null, //是否置顶(0:否;1:是)
         availableType: null, //可用途径 ORG 机构 PLATFORM 平台
         appAuditFlag: null, //是否审核版本
-        detailFlag: null //是否查询详情
+        detailFlag: null, //是否查询详情
+        applicationId: null, //所属人项目ID
       },
       subjectList: [],
       dataList: [] as any[],
@@ -89,6 +90,7 @@ export default defineComponent({
       applicationId: null, //应用ID
       musicPreview: false,
       musicScore: null as any,
+      useProjectData: [] as any, // 适用项目行数据
     })
 
     onMounted(async () => {
@@ -127,9 +129,30 @@ export default defineComponent({
         }
       } catch {}
       // 加载表格数据
+      initUseAppList()
       getList()
     })
 
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
+
     const saveForm = ref()
 
     const onSearch = () => {
@@ -153,17 +176,11 @@ export default defineComponent({
       state.loading = true
       try {
         const sourceType = state.searchForm.sourceType
-        let userId = state.searchForm.userId
-        let organizationRoleId = null
-        if (sourceType && sourceType === 'ORG') {
-          organizationRoleId = deepClone(userId)
-          userId = null
-        }
         const { data } = await musicSheetPageByApplication({
           ...state.pagination,
           ...state.searchForm,
-          userId: userId,
-          organizationRoleId: organizationRoleId,
+          userId: (sourceType && sourceType === 'PERSON') ? state.searchForm.userId : null,
+          organizationRoleId: (sourceType && sourceType === 'ORG') ? state.searchForm.userId : null,
           ...filterTimes(state.searchForm.times, ['startTime', 'endTime']),
           applicationId: state.applicationId
         })
@@ -217,6 +234,31 @@ export default defineComponent({
       })
     }
 
+    const updateUserIdData = async (sourceType: any) => {
+      if (!state.searchForm.applicationId) {
+        return
+      }
+      state.userIdData = []
+      state.searchForm.userId = null
+      if (sourceType && sourceType !== 'PLATFORM') {
+        const { data } = await musicSheetApplicationOwnerList({
+          page: 1,
+          rows: 9999,
+          sourceType: sourceType,
+          applicationId: state.searchForm.applicationId
+        })
+        const temp = data.rows || []
+        temp.forEach((next: any) => {
+          state.userIdData.push({
+            ...next,
+            label: sourceType === 'PERSON' ? next.userName : next.organizationRole,
+            value: sourceType === 'PERSON' ? next.userId : next.organizationRoleId
+          })
+        })
+      }
+    }
+
+
     const columns = (): any => {
       return [
         {
@@ -237,7 +279,14 @@ export default defineComponent({
           )
         },
         {
-          title: '曲目来源',
+          title: '封面图',
+          key: 'musicCover',
+          render(row: any): JSX.Element {
+            return <NImage width={60} height={60} src={row.musicCover} />
+          }
+        },
+        {
+          title: '曲目信息',
           key: 'musicSheetCategoriesName',
           render: (row: any) => (
             <>
@@ -245,32 +294,18 @@ export default defineComponent({
                 <NDescriptionsItem label="曲目来源">
                   {getMapValueByKey(row.sourceType, new Map(Object.entries(musicSheetSourceType)))}
                 </NDescriptionsItem>
+                <NDescriptionsItem label="多声轨渲染">{getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}</NDescriptionsItem>
                 <NDescriptionsItem label="所属人">
                   <TheTooltip content={getOwnerName(row.musicSheetExtend, row.sourceType)} />
                 </NDescriptionsItem>
+                <NDescriptionsItem label="可用声部">
+                  <TheTooltip content={row.subjectNames}/>
+                </NDescriptionsItem>
               </NDescriptions>
             </>
           )
         },
         {
-          title: '封面图',
-          key: 'musicCover',
-          render(row: any): JSX.Element {
-            return <NImage width={60} height={60} src={row.musicCover} />
-          }
-        },
-        {
-          title: '曲目类型',
-          key: 'musicSheetType',
-          render: (row: any) => {
-            return (
-              <div>
-                {getMapValueByKey(row.musicSheetType, new Map(Object.entries(musicSheetType)))}
-              </div>
-            )
-          }
-        },
-        {
           title: '伴奏类型',
           key: 'audioType',
           render: (row: any) => {
@@ -281,13 +316,13 @@ export default defineComponent({
             )
           }
         },
-        {
-          title: '可用声部',
-          key: 'subjectNames',
-          render: (row: any) => {
-            return <TheTooltip content={row.subjectNames}/>
-          }
-        },
+        // {
+        //   title: '可用声部',
+        //   key: 'subjectNames',
+        //   render: (row: any) => {
+        //     return <TheTooltip content={row.subjectNames}/>
+        //   }
+        // },
         {
           title: '乐谱教材',
           key: 'musicSheetCategoryName'
@@ -393,33 +428,41 @@ export default defineComponent({
             </NFormItem>
             <NFormItem label="曲目来源" path="sourceType">
               <NSelect
-                placeholder="请选择曲目来源"
-                v-model:value={state.searchForm.sourceType}
-                options={getSelectDataFromObj(musicSheetSourceType)}
-                onUpdateValue={async (value: any) => {
-                  state.userIdData = []
-                  state.searchForm.userId = null
-                  if (value && value !== 'PLATFORM') {
-                    const { data } = await musicSheetApplicationOwnerList({
-                      page: 1,
-                      rows: 9999,
-                      sourceType: value,
-                      applicationId: state.appId
-                    })
-                    const temp = data.rows || []
-                    temp.forEach((next: any) => {
-                      state.userIdData.push({
-                        ...next,
-                        label: value === 'PERSON' ? next.userName : next.organizationRole,
-                        value: value === 'PERSON' ? next.userId : next.organizationRoleId
-                      })
-                    })
-                    state.userIdDisable = false
-                  } else {
-                    state.userIdDisable = true
-                  }
-                }}
-                clearable
+                  placeholder="请选择曲目来源"
+                  v-model:value={state.searchForm.sourceType}
+                  options={getSelectDataFromObj(musicSheetSourceType)}
+                  onUpdateValue={async (value: any) => {
+                    state.userIdData = []
+                    state.searchForm.userId = null
+                    if (value && value !== 'PLATFORM') {
+                      await updateUserIdData(value)
+                      state.userIdDisable = !state.searchForm.applicationId
+                    } else {
+                      state.userIdDisable = true
+                    }
+                  }}
+                  clearable
+              />
+            </NFormItem>
+            <NFormItem label="项目" path="applicationId">
+              <NSelect
+                  placeholder="请选择项目"
+                  v-model:value={state.searchForm.applicationId}
+                  options={state.useProjectData}
+                  clearable
+                  onUpdateValue={async (value: any) => {
+                    state.searchForm.applicationId = value
+                    if (value) {
+                      await updateUserIdData(state.searchForm.sourceType)
+                      state.userIdDisable = !(
+                          state.searchForm.sourceType && state.searchForm.sourceType !== 'PLATFORM'
+                      )
+                    } else {
+                      state.searchForm.userId = null
+                      state.userIdDisable = true
+                      state.userIdData = []
+                    }
+                  }}
               />
             </NFormItem>
             <NFormItem label="所属人" path="userId">
@@ -557,7 +600,7 @@ export default defineComponent({
               data={state.dataList}
               rowKey={(row: any) => row.applicationExtendId}
               onUpdateCheckedRowKeys={handleCheck}
-              scrollX={'2100'}
+              scrollX={'1400'}
             ></NDataTable>
 
             <Pagination
@@ -575,7 +618,7 @@ export default defineComponent({
             preset="dialog"
             showIcon={false}
             title={'添加曲目'}
-            style={{ width: '1200px' }}
+            style={{ width: '1300px' }}
           >
             <AddMusic
               onClose={() => (state.showAddDialog = false)}

+ 11 - 2
src/views/system-manage/subject-manage/instrument/modal/instrument-save.tsx

@@ -23,7 +23,7 @@ export default defineComponent({
   setup(props, { slots, attrs, emit }) {
     const forms = reactive({
       name: null,
-      defaultScore: null,
+      defaultScore: null as any,
       code: null,
       hz: null,
       transferFlag: true
@@ -39,11 +39,15 @@ export default defineComponent({
           btnLoading.value = true
 
           if (props.type === 'add') {
-            await musicalInstrumentSave({ ...forms })
+            await musicalInstrumentSave({
+              ...forms,
+              defaultScore: forms.transferFlag ? forms.defaultScore : 'STAVE'
+            })
             message.success('添加成功')
           } else if (props.type === 'edit') {
             await musicalInstrumentUpdate({
               ...forms,
+              defaultScore: forms.transferFlag ? forms.defaultScore : 'STAVE',
               id: props.data.id
             })
             message.success('修改成功')
@@ -114,6 +118,11 @@ export default defineComponent({
                 ] as any
               }
               placeholder="请选择是否支持转简谱"
+              onUpdateValue={async (value: any) => {
+                if(!value){ //如果不支持,修改默认谱面
+                  forms.defaultScore = 'STAVE'
+                }
+              }}
               clearable
             ></NSelect>
           </NFormItem>

Неке датотеке нису приказане због велике количине промена