yuanliang 1 年間 前
コミット
78e3b211a7
75 ファイル変更985 行追加398 行削除
  1. 1 0
      dist/assets/404.41632ed2.js
  2. 5 0
      dist/assets/DeleteFilled.2a3b3066.js
  3. 5 0
      dist/assets/FormItemGridItem.930c3242.js
  4. 5 0
      dist/assets/api.39f82c79.js
  5. 1 0
      dist/assets/api.3d30ce7e.js
  6. 5 0
      dist/assets/api.4006f814.js
  7. 0 0
      dist/assets/api.6040327b.js
  8. 5 0
      dist/assets/api.62e040f2.js
  9. 5 0
      dist/assets/api.a1ab0d47.js
  10. 5 0
      dist/assets/api.b003d277.js
  11. 1 0
      dist/assets/api.d71d4abc.js
  12. 5 0
      dist/assets/api.e513d6d6.js
  13. 5 0
      dist/assets/dateUtil.163360e3.js
  14. 1 0
      dist/assets/dayjs.min.d91a859a.js
  15. 1 0
      dist/assets/detail.28813d04.js
  16. 1 0
      dist/assets/editAndUpdate.796e5b9d.js
  17. 1 0
      dist/assets/employee-tab.5c70792d.js
  18. 0 0
      dist/assets/index.0450a810.js
  19. 5 0
      dist/assets/index.07713f87.js
  20. 1 0
      dist/assets/index.182b913f.js
  21. 1 0
      dist/assets/index.223858a6.js
  22. 1 0
      dist/assets/index.291ec3fd.js
  23. 1 0
      dist/assets/index.2f0cd39f.js
  24. 1 0
      dist/assets/index.2ffb0350.js
  25. 1 0
      dist/assets/index.3ee668c4.js
  26. 1 0
      dist/assets/index.447dac53.js
  27. 5 0
      dist/assets/index.4bb1e398.js
  28. 1 0
      dist/assets/index.5136035f.js
  29. 1 0
      dist/assets/index.5e5a1871.js
  30. 5 0
      dist/assets/index.6797b13e.js
  31. 0 0
      dist/assets/index.6807fcf7.js
  32. 1 0
      dist/assets/index.686af97c.js
  33. 0 0
      dist/assets/index.68c8370b.js
  34. 0 0
      dist/assets/index.7b72b78d.js
  35. 1 0
      dist/assets/index.8bdcdb3c.js
  36. 1 0
      dist/assets/index.8c438324.js
  37. 1 0
      dist/assets/index.8d91b63e.js
  38. 5 0
      dist/assets/index.957f0ce3.js
  39. 0 0
      dist/assets/index.a7ddacb9.js
  40. 0 0
      dist/assets/index.b39f3ab2.js
  41. 5 0
      dist/assets/index.b9ebd51f.js
  42. 1 0
      dist/assets/index.c59e9042.js
  43. 1 0
      dist/assets/index.e8a7e66d.js
  44. 1 0
      dist/assets/index.f6064889.js
  45. 1 0
      dist/assets/index.f82a40aa.js
  46. 1 0
      dist/assets/instrument-list.06c3f8bd.js
  47. 1 0
      dist/assets/interface-log.49934b63.js
  48. 0 0
      dist/assets/musicPreView.e8c7302e.js
  49. 5 0
      dist/assets/parentLayout.221bde7c.js
  50. 1 0
      dist/assets/plan-detail.bc32f46e.js
  51. 0 0
      dist/assets/sms-config-app.dcaa639a.js
  52. 5 0
      dist/assets/tabsView.ffd592a9.js
  53. 5 0
      dist/assets/use-async.34739939.js
  54. 0 0
      dist/assets/wechat-config-template-edit.f0a72f76.js
  55. 0 0
      dist/assets/wechat-config-template-message.38869eab.js
  56. 0 0
      dist/assets/wechat-config-template.cfe7d82c.js
  57. 7 7
      src/components/TheLink/index.tsx
  58. 46 4
      src/views/educational-manage/component/material-list.tsx
  59. 66 62
      src/views/educational-manage/model/selectMusicSheet.tsx
  60. 15 3
      src/views/knowledge-manage/knowledge-detail/index.tsx
  61. 103 1
      src/views/music-library/project-music-sheet/module/gyt/addMusic.tsx
  62. 34 1
      src/views/music-library/project-music-sheet/module/gyt/updateMusic.tsx
  63. 1 0
      src/views/teaching-manage/after-class-training-detail/index.tsx
  64. 16 7
      src/views/teaching-manage/after-class-training-detail/model/addMaterialTrainingClass.tsx
  65. 3 1
      src/views/teaching-manage/after-class-training-detail/model/addTrainStandard.tsx
  66. 11 0
      src/views/teaching-manage/api.ts
  67. 354 187
      src/views/teaching-manage/courseware-manage/components/courseConfiguration.tsx
  68. 163 88
      src/views/teaching-manage/courseware-manage/index.tsx
  69. 4 1
      src/views/teaching-manage/teaching-plan/plan-detail.tsx
  70. 2 19
      src/views/teaching-manage/unit-test/index.module.less
  71. 1 1
      src/views/teaching-manage/unit-test/index.tsx
  72. 18 6
      src/views/teaching-manage/unit-test/model/addQuestionList.tsx
  73. 1 2
      src/views/teaching-manage/unit-test/unit-test-index/editAndUpdate.tsx
  74. 26 6
      src/views/teaching-manage/unit-test/unit-test-index/previewUnit.tsx
  75. 2 2
      vite.config.ts

+ 1 - 0
dist/assets/404.41632ed2.js

@@ -0,0 +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.1f2ecc91.js";import{u as g}from"./tabsView.ffd592a9.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};

+ 5 - 0
dist/assets/DeleteFilled.2a3b3066.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/DeleteFilled.a86982a9.js
+import{d as e,f as t,g as o,o as c}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/DeleteFilled.2a3b3066.js

+ 5 - 0
dist/assets/FormItemGridItem.930c3242.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/FormItemGridItem.1dde6af1.js
+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.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/FormItemGridItem.930c3242.js

+ 5 - 0
dist/assets/api.39f82c79.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/api.f3c1b54d.js
+import{ab as a}from"./index.37e59fce.js";const t=s=>a({url:"/cbs-app/sysApplication/page",method:"post",data:s});export{t as s};
+========
+import{ab as a}from"./index.1f2ecc91.js";const t=s=>a({url:"/cbs-app/sysApplication/page",method:"post",data:s});export{t as s};
+>>>>>>>> feature/0516-courseware:dist/assets/api.39f82c79.js

ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/api.3d30ce7e.js


+ 5 - 0
dist/assets/api.4006f814.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/api.0d0bdcb3.js
+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.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/api.4006f814.js

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/api.6040327b.js


+ 5 - 0
dist/assets/api.62e040f2.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/api.dd2159c6.js
+import{ab as s}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/api.62e040f2.js

+ 5 - 0
dist/assets/api.a1ab0d47.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/api.bd1331cd.js
+import{ab as e}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/api.a1ab0d47.js

+ 5 - 0
dist/assets/api.b003d277.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/api.37050a44.js
+import{ab as t}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/api.b003d277.js

ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/api.d71d4abc.js


+ 5 - 0
dist/assets/api.e513d6d6.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/api.e2a1bc8d.js
+import{ab as e}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/api.e513d6d6.js

+ 5 - 0
dist/assets/dateUtil.163360e3.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/dateUtil.e8931e60.js
+import{d as a}from"./dayjs.min.82dd3487.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.d91a859a.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};
+>>>>>>>> feature/0516-courseware:dist/assets/dateUtil.163360e3.js

ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/dayjs.min.d91a859a.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/detail.28813d04.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/editAndUpdate.796e5b9d.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/employee-tab.5c70792d.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.0450a810.js


+ 5 - 0
dist/assets/index.07713f87.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index.280529e3.js
+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.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/index.07713f87.js

ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.182b913f.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.223858a6.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.291ec3fd.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.2f0cd39f.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.2ffb0350.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.3ee668c4.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.447dac53.js


+ 5 - 0
dist/assets/index.4bb1e398.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index.ca086710.js
+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.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/index.4bb1e398.js

ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.5136035f.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.5e5a1871.js


+ 5 - 0
dist/assets/index.6797b13e.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index.692efffe.js
+import{d as s,e as n,c as u,x as c,i as p,N as i}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/index.6797b13e.js

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.6807fcf7.js


+ 1 - 0
dist/assets/index.686af97c.js

@@ -0,0 +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.1f2ecc91.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.68c8370b.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.7b72b78d.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.8bdcdb3c.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.8c438324.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.8d91b63e.js


+ 5 - 0
dist/assets/index.957f0ce3.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index.c83dd6a8.js
+import{d as o,L as s,F as i,i as d,ds as f}from"./index.37e59fce.js";import{u as l}from"./tabsView.03fbda24.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.1f2ecc91.js";import{u as l}from"./tabsView.ffd592a9.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};
+>>>>>>>> feature/0516-courseware:dist/assets/index.957f0ce3.js

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.a7ddacb9.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.b39f3ab2.js


+ 5 - 0
dist/assets/index.b9ebd51f.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/index.90620623.js
+import{d as n,i as e,ao as o,aj as a}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/index.b9ebd51f.js

ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.c59e9042.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.e8a7e66d.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.f6064889.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/index.f82a40aa.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/instrument-list.06c3f8bd.js


ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/interface-log.49934b63.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/musicPreView.e8c7302e.js


+ 5 - 0
dist/assets/parentLayout.221bde7c.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/parentLayout.b93f2181.js
+import{t as o,Y as t,W as r,o as n}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/parentLayout.221bde7c.js

ファイルの差分が大きいため隠しています
+ 1 - 0
dist/assets/plan-detail.bc32f46e.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/sms-config-app.dcaa639a.js


+ 5 - 0
dist/assets/tabsView.ffd592a9.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/tabsView.03fbda24.js
+import{v as n}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/tabsView.ffd592a9.js

+ 5 - 0
dist/assets/use-async.34739939.js

@@ -0,0 +1,5 @@
+<<<<<<<< HEAD:dist/assets/use-async.f7d92d5b.js
+import{e as n,B as r}from"./index.37e59fce.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.1f2ecc91.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};
+>>>>>>>> feature/0516-courseware:dist/assets/use-async.34739939.js

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/wechat-config-template-edit.f0a72f76.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/wechat-config-template-message.38869eab.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/wechat-config-template.cfe7d82c.js


+ 7 - 7
src/components/TheLink/index.tsx

@@ -36,12 +36,12 @@ export default defineComponent({
     })
 
     return () =>
-      disabled.value ? (
-        slots.default && slots.default()
-      ) : (
-        <RouterLink to={props.to} target={props.target}>
-          {slots.default && slots.default()}
-        </RouterLink>
-      )
+        disabled.value ? (
+            slots.default && slots.default()
+        ) : (
+            <RouterLink to={props.to} target={props.target}>
+              {slots.default && slots.default()}
+            </RouterLink>
+        )
   }
 })

+ 46 - 4
src/views/educational-manage/component/material-list.tsx

@@ -111,6 +111,15 @@ export default defineComponent({
             )
           }
         },
+        // {
+        //   title: '编号',
+        //   key: 'id'
+        // },
+
+        // {
+        //   title: '素材分类',
+        //   key: 'materialCategoryName'
+        // }, 分段编号
         {
           title: '素材信息',
           key: 'sn',
@@ -141,21 +150,48 @@ export default defineComponent({
             )
           }
         },
+        // {
+        //   title: '课程类型',
+        //   key: 'courseTypeName',
+        //   width: 200,
+        //   ellipsis: true,
+        //   render(row: InternalRowData) {
+        //     return (
+        //       <NTooltip placement="top-start">
+        //         {{
+        //           default: () => row.courseTypeName,
+        //           trigger: () => row.courseTypeName
+        //         }}
+        //       </NTooltip>
+        //     )
+        //   }
+        // },
+        // {
+        //   title: '建议学习时长',
+        //   key: 'adviseStudyTimeSecond',
+        //   render(row: InternalRowData) {
+        //     return row.adviseStudyTimeSecond ? row.adviseStudyTimeSecond + '秒' : ''
+        //   }
+        // },
         {
           title: '操作信息',
-          key: 'updateTime',
+          key: 'createTime',
           render(row: any) {
             return (
               <NDescriptions labelPlacement="left" column={1}>
                 <NDescriptionsItem label="上传人">{row.operatorName}</NDescriptionsItem>
 
                 <NDescriptionsItem label="上传时间">
-                  {row.updateTime ? row.updateTime : '--'}
+                  {row.createTime ? row.createTime : '--'}
                 </NDescriptionsItem>
               </NDescriptions>
             )
           }
         },
+        // {
+        //   title: '上传人',
+        //   key: 'operatorName'
+        // },
         {
           title: '状态',
           key: 'delFlag',
@@ -178,10 +214,17 @@ export default defineComponent({
           render(row: any) {
             return (
               <NSpace>
+                {/* <NButton
+                  type={row.enableFlag ? 'error' : 'success'}
+                  text
+                  v-auth="material/update1599948375910109186"
+                  onClick={() => handleChange(row)}
+                >
+                  {row.enableFlag ? '停用' : '启用'}
+                </NButton> */}
                 <NButton
                   type="primary"
                   text
-                  v-auth="material/detail1608362411857137665"
                   onClick={() => {
                     state.isLook = true
                     state.materail = row
@@ -285,7 +328,6 @@ export default defineComponent({
     }
 
     onMounted(() => {
-      state.pagination.page = 1
       getList()
     })
 

+ 66 - 62
src/views/educational-manage/model/selectMusicSheet.tsx

@@ -1,11 +1,12 @@
 import Pagination from '@/components/pagination'
 import SaveForm from '@/components/save-form'
 import { musicSheetPage, musicTagPage } from '@/views/content-manage/api'
-import { subjectBasicConfigPage } from '@/views/system-manage/api'
-import { NButton, NImage, NSpace, NTag, NDataTable, NFormItem, NInput, NSelect } from 'naive-ui'
+import {subjectPage} from '@/views/system-manage/api'
+import {NButton, NImage, NSpace, NTag, NDataTable, NFormItem, NInput, NSelect, NCascader} from 'naive-ui'
 import { defineComponent, onMounted, reactive, ref } from 'vue'
 import { accompanimentTypeArray, audioTypeArray } from '@/utils/searchArray'
 import styles from './index.module.less'
+import {musicSheetCategoriesQueryTree} from "@views/music-library/api";
 
 export default defineComponent({
   name: 'selectMusicSheet',
@@ -20,16 +21,16 @@ export default defineComponent({
       },
       searchForm: {
         keyword: null,
-        musicTag: null,
-        musicSubject: null,
-        audioType: null,
-        accompanimentType: null,
+        musicCategoryId: null,
+        subjectId: null,
+        // playMode: null,
+        // accompanimentType: null,
         status: null,
         topFlag: null
       },
       dataList: [] as any,
       subjectList: [] as any,
-      tagList: [] as any,
+      musicSheetCategories: [] as any,
       visiableMusic: false,
       musicOperation: 'add',
       musicData: {} as any
@@ -41,55 +42,55 @@ export default defineComponent({
           title: '曲目名称',
           key: 'id',
           render(row: any) {
-            return `${row.musicSheetName}(${row.id})`
+            return `${row.name}(${row.id})`
           }
         },
         {
           title: '曲目封面',
-          key: 'titleImg',
+          key: 'musicCover',
           render(row: any) {
-            return <NImage width={35} height={35} src={row.titleImg} />
+            return <NImage width={35} height={35} src={row.musicCover} />
           }
         },
         {
           title: '分类',
-          key: 'musicSheetCategoriesName',
+          key: 'musicCategoryName'
         },
         {
           title: '伴奏类型',
-          key: 'accompanimentType',
+          key: 'audioType',
           render(row: any) {
-            return row.accompanimentType === 'HOMEMODE' ? '自制伴奏' : '普通伴奏'
+            return row.audioType === 'HOMEMODE' ? '自制伴奏' : '普通伴奏'
           }
         },
         {
           title: '可用声部',
-          key: 'musicSubject',
+          key: 'subjectNames',
           render(row: any) {
-            return <NTag type="primary">{row.musicSubject}</NTag>
+            return <NTag type="primary">{row.subjectNames}</NTag>
           }
         },
         {
           title: '播放类型',
-          key: 'audioType',
+          key: 'playMode',
           render(row: any) {
             return (
               <>
-                {row.audioType === 'MP3' && <NTag type="primary">MP3</NTag>}
-                {row.audioType === 'MIDI' && <NTag type="default">MIDI</NTag>}
+                {row.playMode === 'MP3' && <NTag type="primary">MP3</NTag>}
+                {row.playMode === 'MIDI' && <NTag type="default">MIDI</NTag>}
               </>
             )
           }
         },
-        {
-          title: '能否转简谱',
-          key: 'notation',
-          render(row: any) {
-            return (
-              <NTag type={row.notation ? 'primary' : 'default'}>{row.notation ? '是' : '否'}</NTag>
-            )
-          }
-        },
+        // {
+        //   title: '能否转简谱',
+        //   key: 'notation',
+        //   render(row: any) {
+        //     return (
+        //       <NTag type={row.notation ? 'primary' : 'default'}>{row.notation ? '是' : '否'}</NTag>
+        //     )
+        //   }
+        // },
         // {
         //   title: '排序',
         //   key: 'sortNumber'
@@ -113,7 +114,12 @@ export default defineComponent({
     const getList = async () => {
       try {
         state.loading = true
-        const { data } = await musicSheetPage({ page: state.pagination.page, rows: state.pagination.rows, ...state.searchForm,status: 1 })
+        const { data } = await musicSheetPage({
+          page: state.pagination.page,
+          rows: state.pagination.rows,
+          ...state.searchForm,
+          status: 1
+        })
         state.loading = false
         state.pagination.pageTotal = Number(data.total)
         state.dataList = data.rows || []
@@ -125,24 +131,19 @@ export default defineComponent({
     // 获取标签
     const getTagList = async () => {
       try {
-        const { data } = await musicTagPage({ page: 1, rows: 999 })
-        const tempList = data.rows || []
-        tempList.forEach((item: any) => {
-          item.label = item.name
-          item.value = item.id
-        })
-        state.tagList = tempList
-      } catch {}
+        const { data } = await musicSheetCategoriesQueryTree({})
+        state.musicSheetCategories = data || []
+      } catch (e) {}
     }
 
     // 获取声部
     const getSubjectList = async () => {
       try {
-        const { data } = await subjectBasicConfigPage({ page: 1, rows: 999 })
+        const { data } = await subjectPage({ page: 1, rows: 999 })
         const tempList = data.rows || []
         tempList.forEach((item: any) => {
-          item.label = item.subjectName
-          item.value = item.subjectId
+          item.label = item.name
+          item.value = item.id + ''
         })
         state.subjectList = tempList
       } catch {}
@@ -182,38 +183,41 @@ export default defineComponent({
               clearable
             />
           </NFormItem>
-          <NFormItem label="标签" path="musicTag">
-            <NSelect
-              placeholder="请选择标签"
-              v-model:value={state.searchForm.musicTag}
-              options={state.tagList}
-              clearable
+          <NFormItem label="曲目分类" path="musicCategoryId">
+            <NCascader
+                valueField="id"
+                labelField="name"
+                children-field="musicSheetCategoriesList"
+                placeholder="请选择曲目分类"
+                v-model:value={state.searchForm.musicCategoryId}
+                options={state.musicSheetCategories}
+                clearable
             />
           </NFormItem>
           <NFormItem label="声部" path="musicSubject">
             <NSelect
               placeholder="请选择声部"
-              v-model:value={state.searchForm.musicSubject}
+              v-model:value={state.searchForm.subjectId}
               options={state.subjectList}
               clearable
             />
           </NFormItem>
-          <NFormItem label="播放类型" path="audioType">
-            <NSelect
-              placeholder="请选择播放类型"
-              v-model:value={state.searchForm.audioType}
-              options={audioTypeArray}
-              clearable
-            />
-          </NFormItem>
-          <NFormItem label="伴奏类型" path="accompanimentType">
-            <NSelect
-              placeholder="请选择伴奏类型"
-              v-model:value={state.searchForm.accompanimentType}
-              options={accompanimentTypeArray}
-              clearable
-            />
-          </NFormItem>
+          {/*<NFormItem label="播放类型" path="playMode">*/}
+          {/*  <NSelect*/}
+          {/*    placeholder="请选择播放类型"*/}
+          {/*    v-model:value={state.searchForm.playMode}*/}
+          {/*    options={audioTypeArray}*/}
+          {/*    clearable*/}
+          {/*  />*/}
+          {/*</NFormItem>*/}
+          {/*<NFormItem label="伴奏类型" path="accompanimentType">*/}
+          {/*  <NSelect*/}
+          {/*    placeholder="请选择伴奏类型"*/}
+          {/*    v-model:value={state.searchForm.accompanimentType}*/}
+          {/*    options={accompanimentTypeArray}*/}
+          {/*    clearable*/}
+          {/*  />*/}
+          {/*</NFormItem>*/}
           <NFormItem>
             <NSpace>
               <NButton type="primary" onClick={onSearch}>

+ 15 - 3
src/views/knowledge-manage/knowledge-detail/index.tsx

@@ -59,6 +59,7 @@ export default defineComponent({
           render(row: any) {
             return (
               <TheLink
+                authLink="material/page1750897012676493314"
                 to={{ path: '/educationalManage/educationalManage', query: { id: row.materialId } }}
               >
                 {row.materialName}
@@ -70,12 +71,23 @@ export default defineComponent({
           title: '素材分类',
           key: 'materialCategoryName'
         },
+        // {
+        //   title: '分段编号',
+        //   key: 'sn',
+        //   render(row: any) {
+        //     return (
+        //       <TheLink
+        //         authLink="material/page1599589713102299138"
+        //         to={{ path: '/educationalManage/educationalManage' }}
+        //       >
+        //         {row.sn}
+        //       </TheLink>
+        //     )
+        //   }
+        // },
         {
           title: '分段编号',
           key: 'sn',
-          render(row: any) {
-            return <TheLink to={{ path: '/educationalManage/educationalManage' }}>{row.sn}</TheLink>
-          }
         },
         {
           title: '课程类型',

+ 103 - 1
src/views/music-library/project-music-sheet/module/gyt/addMusic.tsx

@@ -20,7 +20,7 @@ import {
 } from 'naive-ui'
 import Pagination from '@components/pagination'
 import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
-import {appKey, musicSheetSourceType, musicSheetType} from '@/utils/constant'
+import {appKey, musicSheetAvailableType, 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'
@@ -79,6 +79,7 @@ export default defineComponent({
       useProjectData: [] as any, // 适用项目行数据
       userIdDisable: true,
       userIdData: [] as any,
+      globalAvailableType : null as any,
     })
 
     onMounted(async () => {
@@ -190,6 +191,10 @@ export default defineComponent({
       const params = [] as any[]
       for (let i = 0; i < state.selectRowData.length; i++) {
         const item = state.selectRowData[i]
+        if (!item.availableType) {
+          message.error('可用途径不能为空')
+          return
+        }
         if (!item.projectMusicCategoryId) {
           message.error('曲目分类不能为空')
           return
@@ -202,6 +207,7 @@ export default defineComponent({
           ...item,
           musicSheetId: item.id,
           musicSheetCategoryId: item.projectMusicCategoryId,
+          availableType: item.availableType,
           applicationId: props.appId,
           id: null
         })
@@ -281,6 +287,102 @@ export default defineComponent({
       field.push({
         title(column: any) {
           return (
+              <NSpace>
+                可用途径
+                <NButton
+                    type="primary"
+                    size="small"
+                    text
+                    onClick={() => {
+                      dialogs.create({
+                        title: '请选择可用途径',
+                        showIcon: false,
+                        content: () => {
+                          return h(
+                              'div',
+                              {
+                                class: 'flex flex-col justify-center items-center text-14px'
+                              },
+                              [
+                                // icon
+                                h(NSelect, {
+                                  onUpdateValue(v) {
+                                    state.globalAvailableType = v
+                                  },
+                                  clearable: true,
+                                  options: [
+                                    {
+                                      label: '学校',
+                                      value: 'ORG'
+                                    },
+                                    {
+                                      label: '平台',
+                                      value: 'PLATFORM'
+                                    },
+                                    {
+                                      label: '个人',
+                                      value: 'PERSON'
+                                    },
+                                  ]
+                                })
+                              ]
+                          )
+                        },
+                        positiveText: '确定',
+                        negativeText: '取消',
+                        onPositiveClick: () => {
+                          for (let i = 0; i < state.selectRowData.length; i++) {
+                            const item = state.selectRowData[i]
+                            item.availableType = state.globalAvailableType
+                          }
+                        }
+                      })
+                    }}
+                >
+                  <NIcon size={15} style="padding-left: 5px;margin-top:4px">
+                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
+                      <path d="M2 26h28v2H2z" fill="currentColor"></path>
+                      <path
+                          d="M25.4 9c.8-.8.8-2 0-2.8l-3.6-3.6c-.8-.8-2-.8-2.8 0l-15 15V24h6.4l15-15zm-5-5L24 7.6l-3 3L17.4 7l3-3zM6 22v-3.6l10-10l3.6 3.6l-10 10H6z"
+                          fill="currentColor"
+                      ></path>
+                    </svg>
+                  </NIcon>
+                </NButton>
+              </NSpace>
+          )
+        },
+        key: 'availableType',
+        render: (row: any) => {
+          return (
+              <NSelect
+                  placeholder="请选择可用途径"
+                  value={row.availableType}
+                  options={[
+                    {
+                      label: '学校',
+                      value: 'ORG'
+                    },
+                    {
+                      label: '平台',
+                      value: 'PLATFORM'
+                    },
+                    {
+                      label: '个人',
+                      value: 'PERSON'
+                    },
+                  ]}
+                  onUpdateValue={(value) => {
+                    row['availableType'] = value
+                  }}
+                  clearable
+              />
+          )
+        }
+      })
+      field.push({
+        title(column: any) {
+          return (
             <NSpace>
               曲目分类
               <NButton

+ 34 - 1
src/views/music-library/project-music-sheet/module/gyt/updateMusic.tsx

@@ -1,6 +1,8 @@
 import {defineComponent, onMounted, reactive, ref} from "vue";
-import {NButton, NCascader, NForm, NFormItem, NInputNumber, NSpace, useMessage} from "naive-ui";
+import {NButton, NCascader, NForm, NFormItem, NInputNumber, NSelect, NSpace, useMessage} from "naive-ui";
 import {musicSheetApplicationExtendCategoryApplicationExtendInfo, musicSheetApplicationExtendUpdate} from "@views/music-library/api";
+import {getSelectDataFromObj} from "@/utils/objectUtil";
+import {musicSheetAvailableType} from "@/utils/constant";
 
 export default defineComponent({
   name: 'project-music-cooleshow-edu-updateMusic',
@@ -25,6 +27,7 @@ export default defineComponent({
     const forms = reactive({
       musicSheetCategoryId: null as any,
       sortNo: null as any,
+      availableType : null as any,
     })
     const formsRef = ref()
 
@@ -102,6 +105,36 @@ export default defineComponent({
                 />
               </NFormItem>
               <NFormItem
+                  label="可用途径"
+                  path="availableType"
+                  rule={[
+                    {
+                      required: true,
+                      message: '请选择可用途径'
+                    }
+                  ]}
+              >
+                <NSelect
+                    placeholder="请选择可用途径"
+                    options={[
+                      {
+                        label: '学校',
+                        value: 'ORG'
+                      },
+                      {
+                        label: '平台',
+                        value: 'PLATFORM'
+                      },
+                      {
+                        label: '个人',
+                        value: 'PERSON'
+                      },
+                    ]}
+                    v-model:value={forms.availableType}
+                    clearable
+                />
+              </NFormItem>
+              <NFormItem
                   label="排序值"
                   path="sortNo"
                   rule={[

+ 1 - 0
src/views/teaching-manage/after-class-training-detail/index.tsx

@@ -66,6 +66,7 @@ export default defineComponent({
           render(row: any) {
             return (
               <TheLink
+                authLink="material/page1750897012676493314"
                 to={{ path: '/educationalManage/educationalManage', query: { id: row.materialId } }}
               >
                 {row.materialName}

+ 16 - 7
src/views/teaching-manage/after-class-training-detail/model/addMaterialTrainingClass.tsx

@@ -182,7 +182,16 @@ export default defineComponent({
         const { data } = await lessonTrainingDetailMaterialPage(tranbody)
         state.loading = false
         state.pagination.pageTotal = Number(data.total)
-        state.dataList = data.rows || []
+        // state.dataList = data.rows || []
+        const tempRows = data.rows || []
+        tempRows.forEach((row: any) => {
+          row.tempIndex = new Date().getTime() + '' + Math.random()
+          // state.dataList.push({
+          //   ...row
+          // })
+        })
+        console.log(tempRows, 'rows')
+        state.dataList = tempRows
       } catch {
         state.loading = false
       }
@@ -200,9 +209,9 @@ export default defineComponent({
     const handleSave = async () => {
       state.saveLoading = true
       const list = state.checkList.map((n: any) => {
-        const item = state.selectCheckList.find((item: any) => item.materialId === n)
+        const item = state.selectCheckList.find((item: any) => item.tempIndex === n)
         return {
-          materialId: n,
+          materialId: item.materialId,
           knowledgePointId: item.knowledgePointId,
           lessonTrainingId: props.parentData.id
         }
@@ -294,7 +303,7 @@ export default defineComponent({
         <NDataTable
           loading={state.loading}
           maxHeight="calc(100vh - 270px)"
-          rowKey={(row: any) => row.materialId}
+          rowKey={(row: any) => row.tempIndex}
           columns={columns()}
           data={state.dataList}
           v-model:checkedRowKeys={state.checkList}
@@ -303,15 +312,15 @@ export default defineComponent({
             // 处理删除的数据
             const tempList: any = []
             state.selectCheckList.forEach((item: any) => {
-              if (state.checkList.includes(item.materialId)) {
+              if (state.checkList.includes(item.tempIndex)) {
                 tempList.push(item)
               }
             })
 
             // 添加新增的数据
             state.checkList.forEach((key: string) => {
-              const item = state.dataList.find((item: any) => item.materialId === key)
-              const index = state.selectCheckList.findIndex((item: any) => item.materialId === key)
+              const item = state.dataList.find((item: any) => item.tempIndex === key)
+              const index = state.selectCheckList.findIndex((item: any) => item.tempIndex === key)
               if (index <= -1) {
                 tempList.push(item)
               }

+ 3 - 1
src/views/teaching-manage/after-class-training-detail/model/addTrainStandard.tsx

@@ -16,6 +16,7 @@ import {
 } from 'naive-ui'
 import { defineComponent, reactive } from 'vue'
 import { lessonTrainingDetailBatchInsert, lessonTrainingDetailTempBatchUpSet } from '../../api'
+import ColVideo from '@/components/col-video'
 
 export default defineComponent({
   name: 'addTrainStandard',
@@ -166,7 +167,8 @@ export default defineComponent({
         <div>{props.item?.materialName}</div>
         {props.item?.type == 'VIDEO' && (
           <div>
-            <video style={{ width: '100%' }} src={props.item.content} controls></video>
+            {/* <video style={{ width: '100%' }} src={props.item.content} controls></video> */}
+            <ColVideo styleValue={{ width: '100%', height: '375px' }} src={props.item.content} />
 
             {state.list.map((item: any) => {
               return (

+ 11 - 0
src/views/teaching-manage/api.ts

@@ -587,3 +587,14 @@ export const lessonCoursewareDetailLock = (data: any) => {
     method: 'post'
   } as any)
 }
+
+/**
+ * 课件导入,单元测验导入,课后训练导入
+ */
+export const api_openFileImportInfoSave = (data: any) => {
+  return request({
+    url: `/cbs-app/open/fileImportInfo/save`,
+    method: 'post',
+    data
+  } as any)
+}

+ 354 - 187
src/views/teaching-manage/courseware-manage/components/courseConfiguration.tsx

@@ -5,6 +5,7 @@ import {
   NDialog,
   NDrawer,
   NDrawerContent,
+  NDropdown,
   NEmpty,
   NForm,
   NFormItem,
@@ -15,7 +16,10 @@ import {
   NModal,
   NSelect,
   NSpace,
+  NSpin,
   NTooltip,
+  NUpload,
+  UploadCustomRequestOptions,
   useDialog,
   useMessage
 } from 'naive-ui'
@@ -28,7 +32,8 @@ import {
   lessonTrainingPage,
   lessonCoursewareDetailRemove,
   lessonCoursewareExaminationMapperQueryAll,
-  lessonCoursewareDetailLock
+  lessonCoursewareDetailLock,
+  api_openFileImportInfoSave
 } from '../../api'
 import styles from '../index.module.less'
 import { EditFilled, DeleteFilled, LockFilled, UnlockFilled } from '@vicons/antd'
@@ -36,6 +41,7 @@ import CourseKnowledgePoint from '../model/CourseKnowledgePoint'
 import SelectAfterClassTraining from '../model/selectAfterClassTraining'
 import AddUnitTest from '../model/AddUnitTest'
 import TheLink from '@/components/TheLink'
+import { api_uploadFile } from '@/plugins/uploadFile'
 
 export default defineComponent({
   name: 'courseConfiguration',
@@ -56,7 +62,8 @@ export default defineComponent({
       name: '', //课时名称
       lessonTargetDesc: '', //课时名称
       lessonTrainingId: '', //课后作业
-      lockEnable: 'true'
+      lockEnable: 'true',
+      accessScope: 0
     })
     // 课件添加课程
     const addCourseware = () => {
@@ -66,7 +73,8 @@ export default defineComponent({
             lessonCoursewareId: route.query.id,
             name: addForm.name,
             lessonTargetDesc: addForm.lessonTargetDesc,
-            lockEnable: addForm.lockEnable
+            lockEnable: addForm.lockEnable,
+            accessScope: addForm.accessScope
           }
           let res: any
           if (addForm.id) {
@@ -194,235 +202,364 @@ export default defineComponent({
         }
       })
     }
+
+    const customRequest_importData = reactive({
+      loading: false,
+      dataType: 'EXAMINATION',
+      importRef: null as any
+    })
+    const customRequest_importFile = async (data: UploadCustomRequestOptions) => {
+      console.log(data.file)
+      const msg = message.loading('正在上传文件', { duration: 0 })
+      customRequest_importData.loading = true
+      const fileUrl = await api_uploadFile(data.file.file, () => {})
+      const res = await api_openFileImportInfoSave({
+        dataType: customRequest_importData.dataType,
+        fileName: data.file.name,
+        importUrl: fileUrl,
+        lessonId: route.query.id
+      })
+      console.log('🚀 ~ res:', res)
+      customRequest_importData.loading = false
+      if (res.data) {
+        msg.destroy()
+        // 空表格
+        if (res.data.insertRow === 0 && res.data.invalidRow === 0) {
+          message.error('导入失败,表格为空')
+          return
+        }
+        if (res.data.respUrl) {
+          dialog.error({
+            title: '信息',
+            content: () => (
+              <NSpace>
+                <div>导入失败,点击下载错误信息</div>
+                <a href={res.data.respUrl} download>
+                  下载
+                </a>
+              </NSpace>
+            )
+          })
+          return
+        }
+        getDetail()
+        message.success('导入成功')
+      } else {
+        message.error('请下载模板后,填写数据再导入')
+      }
+    }
     return () => (
       <div class={styles.courseConfiguration}>
-        <NSpace>
-          <NButton
-            disabled={route.query.isLook ? true : false}
-            type="primary"
-            onClick={() => {
-              addForm.name = ''
-              addForm.lessonTargetDesc = ''
-              addForm.lessonTrainingId = ''
-              addForm.id = ''
-              addForm.lockEnable = ''
-              addForm.open = true
-            }}
-          >
-            添加课程
-          </NButton>
-          <NButton
-            type="primary"
-            disabled={route.query.isLook ? true : false}
-            onClick={() => {
-              unitData.open = true
-              unitData.model = {}
-            }}
-          >
-            添加阶段自测
-          </NButton>
-        </NSpace>
-        <NAlert class={styles.title} title="教学内容" />
-        <NGrid xGap={12} yGap={8} cols={3}>
-          {state.dataList.map((item: any) => {
-            const mapper = state.mapperList.find((n: any) => n.parentCoursewareDetailId == item.id)
-            return (
-              <>
-                <NGi>
-                  <NCard
-                    title={item.name}
-                    style={{
-                      '--n-padding-top': '5px',
-                      '--n-padding-bottom': '5px',
-                      height: '100%'
+        <NSpin show={customRequest_importData.loading}>
+          <NSpace justify="space-between">
+            <NSpace>
+              <NButton
+                disabled={route.query.isLook ? true : false}
+                type="primary"
+                onClick={() => {
+                  addForm.name = ''
+                  addForm.lessonTargetDesc = ''
+                  addForm.lessonTrainingId = ''
+                  addForm.id = ''
+                  addForm.lockEnable = ''
+                  addForm.accessScope = 0
+                  addForm.open = true
+                }}
+              >
+                添加课程
+              </NButton>
+              <NButton
+                type="primary"
+                disabled={route.query.isLook ? true : false}
+                onClick={() => {
+                  unitData.open = true
+                  unitData.model = {}
+                }}
+              >
+                添加阶段自测
+              </NButton>
+            </NSpace>
+            <NSpace style={{ marginLeft: 'auto' }}>
+              <NDropdown
+                size="huge"
+                trigger="hover"
+                options={[
+                  {
+                    key: '3',
+                    type: 'render',
+                    render: () => (
+                      <NButton
+                        size="large"
+                        quaternary
+                        tag="a"
+                        //@ts-ignore
+                        href="https://oss.dayaedu.com/daya-docs/%E5%8D%95%E5%85%83%E6%B5%8B%E9%AA%8C%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx"
+                        download
+                      >
+                        单元测验模板
+                      </NButton>
+                    )
+                  },
+                  {
+                    key: '1',
+                    type: 'render',
+                    render: () => (
+                      <NButton
+                        v-auth="downloadAfter-schoolTraining1702252098317451265"
+                        size="large"
+                        quaternary
+                        tag="a"
+                        //@ts-ignore
+                        href="https://oss.dayaedu.com/daya-docs/%E8%AF%BE%E5%90%8E%E8%AE%AD%E7%BB%83%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx"
+                        download
+                      >
+                        课后训练模板
+                      </NButton>
+                    )
+                  }
+                ]}
+              >
+                <NButton type="primary" v-auth="downloadUnitQuiz1702251742292344833">
+                  下载模板
+                </NButton>
+              </NDropdown>
+              <div v-auth="importCourseDate1702252535879827458">
+                <NUpload
+                  multiple={false}
+                  ref={(el: any) => (customRequest_importData.importRef = el)}
+                  showFileList={false}
+                  accept=".xlsx"
+                  customRequest={customRequest_importFile}
+                >
+                  <NDropdown
+                    size="huge"
+                    trigger="hover"
+                    options={[
+                      { label: '课件', key: 'COURSEWARE' },
+                      { label: '单元测验', key: 'EXAMINATION' },
+                      { label: '课后训练', key: 'HOMEWORK' }
+                    ]}
+                    onSelect={(key: string) => {
+                      customRequest_importData.dataType = key
+                      console.log(customRequest_importData.importRef)
+                      customRequest_importData.importRef?.clear()
+                      customRequest_importData.importRef?.openOpenFileDialog()
                     }}
                   >
-                    {{
-                      default: () => (
-                        <div>
-                          <div style={{ paddingBottom: '12px' }}>{item.lessonTargetDesc}</div>
-                          <table style={{ width: '100%' }}>
-                            <tr>
-                              <td>建议学习时长</td>
-                              <td style={{ 'text-align': 'right' }}>
-                                {item.lessonDurationSecond || '0'}s
-                              </td>
-                            </tr>
-                            <tr>
-                              <td>知识点</td>
-                              <td style={{ 'text-align': 'right' }}>
-                                {item.knowledgePointIds?.split(',').filter(Boolean).length || 0}个
-                              </td>
-                            </tr>
-                            <tr>
-                              <td>课后作业</td>
-                              <td style={{ 'text-align': 'right' }}>
-                                {item.lessonTrainingId ? (
-                                  <TheLink
-                                    // to={`/#/afterClassTrainingDetail?id=${item.lessonTrainingId}&name=${item.lessonTrainingName}&courseTypeCode=TRUMPET_SINGLE`}
-                                    to={{
-                                      path: '/afterClassTrainingManage',
-                                      query: { id: item.lessonTrainingId }
-                                    }}
-                                  >
-                                    {item.lessonTrainingName}
-                                  </TheLink>
-                                ) : (
-                                  '无'
-                                )}
-                              </td>
-                            </tr>
-                          </table>
-                        </div>
-                      ),
-                      'header-extra': () => (
-                        <>
-                          <NTooltip>
-                            {{
-                              default: () => (item.lockFlag ? '解锁' : '锁定'),
-                              trigger: () => (
-                                <NButton
-                                  disabled={route.query.isLook ? true : false}
-                                  quaternary
-                                  circle
-                                  onClick={() => toggleLock(item)}
-                                >
-                                  <NIcon
-                                    component={item.lockFlag ? <LockFilled /> : <UnlockFilled />}
-                                  />
-                                </NButton>
-                              )
-                            }}
-                          </NTooltip>
-
-                          <NTooltip>
-                            {{
-                              default: () => '编辑',
-                              trigger: () => (
-                                <NButton
-                                  disabled={route.query.isLook ? true : false}
-                                  quaternary
-                                  circle
-                                  onClick={() => {
-                                    addForm.name = item.name
-                                    addForm.lessonTargetDesc = item.lessonTargetDesc
-                                    addForm.id = item.id
-                                    addForm.lockEnable = item.lockEnable + ''
-                                    addForm.open = true
-                                  }}
-                                >
-                                  <NIcon component={<EditFilled />} />
-                                </NButton>
-                              )
-                            }}
-                          </NTooltip>
-                          <NTooltip>
-                            {{
-                              default: () => '删除',
-                              trigger: () => (
-                                <NButton
-                                  disabled={route.query.isLook ? true : false}
-                                  quaternary
-                                  circle
-                                  onClick={() => hanldeDelete(item)}
-                                >
-                                  <NIcon component={<DeleteFilled />} />
-                                </NButton>
-                              )
-                            }}
-                          </NTooltip>
-                        </>
-                      ),
-                      action: () => (
-                        <NSpace justify="space-around">
-                          <NButton
-                            text
-                            disabled={route.query.isLook ? true : false}
-                            onClick={() => {
-                              courseData.title = item.name
-                              courseData.open = true
-                              courseData.item = item
-                            }}
-                          >
-                            选择知识点
-                          </NButton>
-                          <NButton
-                            text
-                            disabled={route.query.isLook ? true : false}
-                            onClick={() => {
-                              addForm.id = item.id
-                              addForm.lessonTargetDesc = item.lessonTargetDesc
-                              addForm.name = item.name
-                              afterTrain.open = true
-                            }}
-                          >
-                            选择课后作业
-                          </NButton>
-                        </NSpace>
-                      )
-                    }}
-                  </NCard>
-                </NGi>
-                {mapper && (
+                    <NButton type="primary" onClick={(e: Event) => e.stopPropagation()}>
+                      导入数据
+                    </NButton>
+                  </NDropdown>
+                </NUpload>
+              </div>
+            </NSpace>
+          </NSpace>
+          <NAlert class={styles.title} title="教学内容" />
+          <NGrid xGap={12} yGap={8} cols={3}>
+            {state.dataList.map((item: any) => {
+              const mapper = state.mapperList.find(
+                (n: any) => n.parentCoursewareDetailId == item.id
+              )
+              return (
+                <>
                   <NGi>
                     <NCard
-                      title={mapper.name}
+                      title={item.name}
                       style={{
                         '--n-padding-top': '5px',
                         '--n-padding-bottom': '5px',
-                        '--n-color': 'rgba(238,243,254,1)',
-                        '--n-action-color': 'rgba(238,243,254,1)',
                         height: '100%'
                       }}
                     >
                       {{
                         default: () => (
                           <div>
-                            <div style={{ paddingBottom: '12px' }}>{mapper.desc}</div>
+                            <div style={{ paddingBottom: '12px' }}>{item.lessonTargetDesc}</div>
                             <table style={{ width: '100%' }}>
                               <tr>
-                                <td>单团学生</td>
+                                <td>建议学习时长</td>
                                 <td style={{ 'text-align': 'right' }}>
-                                  {mapper?.details?.[0]?.unitExaminationName || '无'}
+                                  {item.lessonDurationSecond || '0'}s
                                 </td>
                               </tr>
                               <tr>
-                                <td>双团学生</td>
+                                <td>知识点</td>
                                 <td style={{ 'text-align': 'right' }}>
-                                  {mapper?.details?.[1]?.unitExaminationName || '无'}
+                                  {item.knowledgePointIds?.split(',').filter(Boolean).length || 0}个
                                 </td>
                               </tr>
                               <tr>
-                                <td>多团学生</td>
+                                <td>课后作业</td>
                                 <td style={{ 'text-align': 'right' }}>
-                                  {mapper?.details?.[2]?.unitExaminationName || '无'}
+                                  {item.lessonTrainingId ? (
+                                    <TheLink
+                                      // to={`/#/afterClassTrainingDetail?id=${item.lessonTrainingId}&name=${item.lessonTrainingName}&courseTypeCode=TRUMPET_SINGLE`}
+                                      authLink="afterClassTrainingManage1599968711187746818"
+                                      to={{
+                                        path: '/afterClassTrainingManage',
+                                        query: { id: item.lessonTrainingId }
+                                      }}
+                                    >
+                                      {item.lessonTrainingName}
+                                    </TheLink>
+                                  ) : (
+                                    '无'
+                                  )}
                                 </td>
                               </tr>
                             </table>
                           </div>
                         ),
+                        'header-extra': () => (
+                          <>
+                            <NTooltip>
+                              {{
+                                default: () => (item.lockFlag ? '解锁' : '锁定'),
+                                trigger: () => (
+                                  <NButton
+                                    disabled={route.query.isLook ? true : false}
+                                    quaternary
+                                    circle
+                                    onClick={() => toggleLock(item)}
+                                  >
+                                    <NIcon
+                                      component={item.lockFlag ? <LockFilled /> : <UnlockFilled />}
+                                    />
+                                  </NButton>
+                                )
+                              }}
+                            </NTooltip>
+
+                            <NTooltip>
+                              {{
+                                default: () => '编辑',
+                                trigger: () => (
+                                  <NButton
+                                    disabled={route.query.isLook ? true : false}
+                                    quaternary
+                                    circle
+                                    onClick={() => {
+                                      addForm.name = item.name
+                                      addForm.lessonTargetDesc = item.lessonTargetDesc
+                                      addForm.id = item.id
+                                      addForm.lockEnable = item.lockEnable + ''
+                                      addForm.accessScope = item.accessScope ?? 0
+                                      addForm.open = true
+                                    }}
+                                  >
+                                    <NIcon component={<EditFilled />} />
+                                  </NButton>
+                                )
+                              }}
+                            </NTooltip>
+                            <NTooltip>
+                              {{
+                                default: () => '删除',
+                                trigger: () => (
+                                  <NButton
+                                    disabled={route.query.isLook ? true : false}
+                                    quaternary
+                                    circle
+                                    onClick={() => hanldeDelete(item)}
+                                  >
+                                    <NIcon component={<DeleteFilled />} />
+                                  </NButton>
+                                )
+                              }}
+                            </NTooltip>
+                          </>
+                        ),
                         action: () => (
                           <NSpace justify="space-around">
                             <NButton
                               text
                               disabled={route.query.isLook ? true : false}
                               onClick={() => {
-                                unitData.open = true
-                                unitData.model = mapper
+                                courseData.title = item.name
+                                courseData.open = true
+                                courseData.item = item
                               }}
                             >
-                              编辑阶段自测
+                              选择知识点
+                            </NButton>
+                            <NButton
+                              text
+                              disabled={route.query.isLook ? true : false}
+                              onClick={() => {
+                                addForm.id = item.id
+                                addForm.lessonTargetDesc = item.lessonTargetDesc
+                                addForm.name = item.name
+                                afterTrain.open = true
+                              }}
+                            >
+                              选择课后作业
                             </NButton>
                           </NSpace>
                         )
                       }}
                     </NCard>
                   </NGi>
-                )}
-              </>
-            )
-          })}
-        </NGrid>
+                  {mapper && (
+                    <NGi>
+                      <NCard
+                        title={mapper.name}
+                        style={{
+                          '--n-padding-top': '5px',
+                          '--n-padding-bottom': '5px',
+                          '--n-color': 'rgba(238,243,254,1)',
+                          '--n-action-color': 'rgba(238,243,254,1)',
+                          height: '100%'
+                        }}
+                      >
+                        {{
+                          default: () => (
+                            <div>
+                              <div style={{ paddingBottom: '12px' }}>{mapper.desc}</div>
+                              <table style={{ width: '100%' }}>
+                                <tr>
+                                  <td>单团学生</td>
+                                  <td style={{ 'text-align': 'right' }}>
+                                    {mapper?.details?.[0]?.unitExaminationName || '无'}
+                                  </td>
+                                </tr>
+                                <tr>
+                                  <td>双团学生</td>
+                                  <td style={{ 'text-align': 'right' }}>
+                                    {mapper?.details?.[1]?.unitExaminationName || '无'}
+                                  </td>
+                                </tr>
+                                <tr>
+                                  <td>多团学生</td>
+                                  <td style={{ 'text-align': 'right' }}>
+                                    {mapper?.details?.[2]?.unitExaminationName || '无'}
+                                  </td>
+                                </tr>
+                              </table>
+                            </div>
+                          ),
+                          action: () => (
+                            <NSpace justify="space-around">
+                              <NButton
+                                text
+                                disabled={route.query.isLook ? true : false}
+                                onClick={() => {
+                                  unitData.open = true
+                                  unitData.model = mapper
+                                }}
+                              >
+                                编辑阶段自测
+                              </NButton>
+                            </NSpace>
+                          )
+                        }}
+                      </NCard>
+                    </NGi>
+                  )}
+                </>
+              )
+            })}
+          </NGrid>
+        </NSpin>
         {state.dataList.length ? null : <NEmpty />}
 
         {/* 课程编辑 */}
@@ -465,6 +602,36 @@ export default defineComponent({
               ></NSelect>
             </NFormItem>
             <NFormItem
+              label="是否免费"
+              required
+              path="accessScope"
+              rule={[
+                {
+                  type: 'number',
+                  required: true,
+                  message: '设置是否免费',
+                  trigger: ['blur', 'change']
+                }
+              ]}
+            >
+              <NSelect
+                v-model:value={addForm.accessScope}
+                options={
+                  [
+                    {
+                      label: '是',
+                      value: 0
+                    },
+                    {
+                      label: '否',
+                      value: 1
+                    }
+                  ] as any
+                }
+                clearable
+              ></NSelect>
+            </NFormItem>
+            <NFormItem
               label="教学目标"
               required
               path="lessonTargetDesc"

+ 163 - 88
src/views/teaching-manage/courseware-manage/index.tsx

@@ -12,6 +12,9 @@ import {
   NInput,
   NSelect,
   NSpace,
+  NSpin,
+  NUpload,
+  UploadCustomRequestOptions,
   useDialog,
   useMessage
 } from 'naive-ui'
@@ -20,13 +23,15 @@ import dayjs from 'dayjs'
 import {
   lessonCoursewarePage,
   lessonCoursewareUpdateEnableFlag,
-  lessonCoursewareDelete
+  lessonCoursewareDelete,
+  api_openFileImportInfoSave
 } from '../api'
 import { InternalRowData } from 'naive-ui/es/data-table/src/interface'
 import { useRouter } from 'vue-router'
 import { knowledgeTypeData, lessonType } from '@/views/knowledge-manage/knowledgeTypeData'
 import { orchestraTypes } from '../teachingData'
 import { sysEmployeePage } from '@/views/system-manage/api'
+import { api_uploadFile } from '@/plugins/uploadFile'
 
 export default defineComponent({
   name: 'courseware-manage',
@@ -334,99 +339,169 @@ export default defineComponent({
       saveForm.value?.reset()
     }
 
+    const customRequest_importData = reactive({
+      loading: false,
+      importRef: null as any
+    })
+    const customRequest_importFile = async (data: UploadCustomRequestOptions) => {
+      console.log(data.file)
+      customRequest_importData.loading = true
+      const fileUrl = await api_uploadFile(data.file.file, () => {})
+      const res = await api_openFileImportInfoSave({
+        dataType: 'COURSEWARE',
+        fileName: data.file.name,
+        importUrl: fileUrl
+      })
+      console.log('🚀 ~ res:', res)
+      customRequest_importData.loading = false
+      if (res.data) {
+        // 空表格
+        if (res.data.insertRow === 0 && res.data.invalidRow === 0) {
+          message.error('导入失败,表格为空')
+          return
+        }
+        if (res.data.respUrl) {
+          dialog.error({
+            title: '信息',
+            content: () => (
+              <NSpace>
+                <div>导入失败,点击下载错误信息</div>
+                <a href={res.data.respUrl} download>
+                  下载
+                </a>
+              </NSpace>
+            )
+          })
+          return
+        }
+        message.success('导入成功')
+      }
+    }
+
     return () => (
       <div class="system-menu-container">
-        <div class={['section-container']}>
-          <SaveForm
-            ref={saveForm}
-            model={searchForm}
-            onSubmit={onSubmit}
-            onSetModel={(val: any) => Object.assign(searchForm, val)}
-            saveKey="courseware-manage-ad-key"
-          >
-            <NFormItem path="keyword" label="关键字">
-              <NInput
-                v-model:value={searchForm.keyword}
-                placeholder="请输入课件名称/编号"
-                clearable
-              />
-            </NFormItem>
-            <NFormItem path="courseTypeCode" label="课程类型">
-              <NSelect
-                placeholder="请选择课程类型"
-                clearable
-                v-model:value={searchForm.courseTypeCode}
-                options={lessonType}
-              />
-            </NFormItem>
-            <NFormItem path="enableFlag" label="是否启用">
-              <NSelect
-                placeholder="是否启用"
-                clearable
-                v-model:value={searchForm.enableFlag}
-                options={[
-                  { label: '是', value: 1 },
-                  { label: '否', value: 0 }
-                ]}
-              />
-            </NFormItem>
-            <NFormItem path="orchestraType" label="乐团类型">
-              <NSelect
-                placeholder="请输入乐团类型"
-                clearable
-                v-model:value={searchForm.orchestraType}
-                options={state.orchestraTypeList}
-              />
-            </NFormItem>
-            <NFormItem path="operatorId" label="更新人">
-              <NSelect
-                placeholder="请输入更新人"
-                clearable
-                v-model:value={searchForm.operatorId}
-                options={state.staffList}
-                filterable
-              />
-            </NFormItem>
-            <NFormItem>
+        <NSpin show={customRequest_importData.loading}>
+          <div class={['section-container']}>
+            <SaveForm
+              ref={saveForm}
+              model={searchForm}
+              onSubmit={onSubmit}
+              onSetModel={(val: any) => Object.assign(searchForm, val)}
+              saveKey="courseware-manage-ad-key"
+            >
+              <NFormItem path="keyword" label="关键字">
+                <NInput
+                  v-model:value={searchForm.keyword}
+                  placeholder="请输入课件名称/编号"
+                  clearable
+                />
+              </NFormItem>
+              <NFormItem path="courseTypeCode" label="课程类型">
+                <NSelect
+                  placeholder="请选择课程类型"
+                  clearable
+                  v-model:value={searchForm.courseTypeCode}
+                  options={lessonType}
+                />
+              </NFormItem>
+              <NFormItem path="enableFlag" label="是否启用">
+                <NSelect
+                  placeholder="是否启用"
+                  clearable
+                  v-model:value={searchForm.enableFlag}
+                  options={[
+                    { label: '是', value: 1 },
+                    { label: '否', value: 0 }
+                  ]}
+                />
+              </NFormItem>
+              <NFormItem path="orchestraType" label="乐团类型">
+                <NSelect
+                  placeholder="请输入乐团类型"
+                  clearable
+                  v-model:value={searchForm.orchestraType}
+                  options={state.orchestraTypeList}
+                />
+              </NFormItem>
+              <NFormItem path="operatorId" label="更新人">
+                <NSelect
+                  placeholder="请输入更新人"
+                  clearable
+                  v-model:value={searchForm.operatorId}
+                  options={state.staffList}
+                  filterable
+                />
+              </NFormItem>
+              <NFormItem>
+                <NSpace>
+                  <NButton type="primary" onClick={onSearch}>
+                    搜索
+                  </NButton>
+                  <NButton type="default" onClick={onBtnReset}>
+                    重置
+                  </NButton>
+                </NSpace>
+              </NFormItem>
+            </SaveForm>
+            <NSpace style={{ paddingBottom: '12px' }} justify="space-between">
+              <NButton
+                type="primary"
+              v-auth="coursewareDetail1607207526805606402"
+                onClick={() => {
+                  state.visiableKnowledge = true
+                  router.push({
+                    path: '/coursewareDetail'
+                  })
+                }}
+              >
+                新增课件
+              </NButton>
               <NSpace>
-                <NButton type="primary" onClick={onSearch}>
-                  搜索
-                </NButton>
-                <NButton type="default" onClick={onBtnReset}>
-                  重置
+                <NButton
+                  v-auth="downloadCoursewareTemplate1791012053736034306"
+                  type="primary"
+                  tag="a"
+                  //@ts-ignore
+                  href="https://oss.dayaedu.com/daya-docs/%E8%AF%BE%E4%BB%B6%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx"
+                  download
+                >
+                  下载课件模板
                 </NButton>
+                <div v-auth="Importcourseware1791012122841387009">
+                  <NUpload
+                    ref={(el: any) => (customRequest_importData.importRef = el)}
+                    showFileList={false}
+                    accept=".xlsx"
+                    customRequest={customRequest_importFile}
+                  >
+                    <NButton
+                      type="primary"
+                      onClick={() => {
+                        customRequest_importData.importRef?.clear()
+                      }}
+                    >
+                      导入课件
+                    </NButton>
+                  </NUpload>
+                </div>
               </NSpace>
-            </NFormItem>
-          </SaveForm>
-          <NSpace style={{ paddingBottom: '12px' }}>
-            <NButton
-              type="primary"
-              v-auth="coursewareDetail1607207526805606402"
-              onClick={() => {
-                state.visiableKnowledge = true
-                router.push({
-                  path: '/coursewareDetail'
-                })
-              }}
-            >
-              新增课件
-            </NButton>
-          </NSpace>
+            </NSpace>
 
-          <NDataTable
-            loading={state.loading}
-            columns={columns()}
-            data={state.dataList}
-          ></NDataTable>
-          <Pagination
-            saveKey="courseware-manage-ad-key"
-            v-model:page={state.pagination.page}
-            v-model:pageSize={state.pagination.rows}
-            v-model:pageTotal={state.pagination.pageTotal}
-            onList={getList}
-            sync
-          ></Pagination>
-        </div>
+            <NDataTable
+              loading={state.loading}
+              columns={columns()}
+              data={state.dataList}
+            ></NDataTable>
+            <Pagination
+              saveKey="courseware-manage-ad-key"
+              v-model:page={state.pagination.page}
+              v-model:pageSize={state.pagination.rows}
+              v-model:pageTotal={state.pagination.pageTotal}
+              onList={getList}
+              sync
+            ></Pagination>
+          </div>
+        </NSpin>
       </div>
     )
   }

+ 4 - 1
src/views/teaching-manage/teaching-plan/plan-detail.tsx

@@ -59,7 +59,10 @@ export default defineComponent({
           key: 'name',
           render: (row: any) => (
             <>
-              <TheLink to={{ path: '/coursewareDetail', query: { id: row.lessonCoursewareId } }}>
+              <TheLink
+                authLink="coursewareManage1606856890826199041"
+                to={{ path: '/coursewareDetail', query: { id: row.lessonCoursewareId } }}
+              >
                 {row.name}
               </TheLink>
             </>

+ 2 - 19
src/views/teaching-manage/unit-test/index.module.less

@@ -2,7 +2,6 @@
   .form {
     :global {
       .n-form-item-blank {
-
         .n-input,
         .n-select {
           width: 160px;
@@ -11,45 +10,37 @@
     }
   }
 }
-
 .kaodian {
   :global {
     .n-base-selection-input {
       color: #333 !important;
     }
-
     .n-base-loading.n-base-suffix {
       display: none;
     }
   }
 }
-
 .coustomBank {
   :global {
     .n-tabs-nav {
       display: none;
     }
-
     .n-tab-pane {
       padding-top: 0;
     }
   }
 }
-
 .answerItem {
   display: flex;
   align-items: center;
   justify-content: space-between;
   padding: 10px 0;
-
   &:hover {
     background-color: rgba(0, 0, 0, 0.1);
   }
-
   .handle {
     width: 50px;
   }
-
   .itemContent {
     flex: 1;
     padding: 0 50px 0 0;
@@ -57,43 +48,35 @@
     align-items: center;
   }
 }
-
 .juanWrap {
   margin-bottom: 20px;
 }
-
 .unit-test-index-editAndUpdate {
   .ramdomItem {
     position: relative;
     border-radius: 8px;
-    padding: 30px 10px 0px 10px;
-
+    padding: 10px 10px 0 10px;
     :global {
       .n-form-item-label {
         display: flex;
         flex-direction: row;
         align-items: center;
       }
-
       .n-form-item-label__asterisk {
         display: none;
       }
     }
-
     .kaoLabel {
       span {
         color: var(--n-asterisk-color);
       }
     }
-
     &:hover {
       background-color: rgba(0, 0, 0, 0.1);
-
       .delIcon {
         visibility: visible;
       }
     }
-
     .delIcon {
       position: absolute;
       right: 10px;
@@ -101,4 +84,4 @@
       visibility: hidden;
     }
   }
-}
+}

+ 1 - 1
src/views/teaching-manage/unit-test/index.tsx

@@ -49,7 +49,7 @@ export default defineComponent({
           <div class={styles.unitTest}>
             <NTabs
               v-model:value={data.active}
-              type="line"
+              type="card"
               onUpdate:value={(val: any) => setTabs(val)}
             >
               <NTabPane name="1" tab="阶段自测" v-auth="unitExamination/page1614564155343577090">

+ 18 - 6
src/views/teaching-manage/unit-test/model/addQuestionList.tsx

@@ -130,10 +130,22 @@ export default defineComponent({
           rows: 1000
         })
         if (Array.isArray(res?.data?.rows)) {
-          data.categorys = res.data.rows
+          data.categorys = formatList(res.data.rows)
         }
       } catch (error) {}
     }
+
+    const formatList = (item: any) => {
+      item.forEach((child: any) => {
+        if (child.children && child.children.length) {
+          formatList(child.children)
+        } else {
+          child.children = null
+        }
+      })
+      return item
+    }
+
     const onSubmit = () => {
       data.pagination.page = 1
       getList()
@@ -153,7 +165,7 @@ export default defineComponent({
           onSetModel={(val: any) => Object.assign(searchForm, val)}
           saveKey="add-question-list-key"
         >
-          <NFormItem path="keyword" label='关键字'>
+          <NFormItem path="keyword" label="关键字">
             <NInput
               placeholder="请输入题目名称/编号"
               v-model:value={searchForm.keyword}
@@ -165,7 +177,7 @@ export default defineComponent({
               clearable
             />
           </NFormItem>
-          <NFormItem path="score" label='分值'>
+          <NFormItem path="score" label="分值">
             <NInput
               placeholder="请输入分值"
               v-model:value={searchForm.score}
@@ -177,7 +189,7 @@ export default defineComponent({
               clearable
             />
           </NFormItem>
-          <NFormItem path="questionTypeCode" label='题目类型'>
+          <NFormItem path="questionTypeCode" label="题目类型">
             <NSelect
               placeholder="请选择题目类型"
               v-model:value={searchForm.questionTypeCode}
@@ -196,7 +208,7 @@ export default defineComponent({
               options={lessonType}
             />
           </NFormItem> */}
-          <NFormItem path="categoryId" label='考点'>
+          <NFormItem path="categoryId" label="考点">
             <NCascader
               placeholder="请选择考点"
               v-model:value={searchForm.categoryId}
@@ -209,7 +221,7 @@ export default defineComponent({
               clearable
             />
           </NFormItem>
-          <NFormItem path="difficultyCoefficient" label='难度'>
+          <NFormItem path="difficultyCoefficient" label="难度">
             <NSelect
               placeholder="请选择难度"
               clearable

+ 1 - 2
src/views/teaching-manage/unit-test/unit-test-index/editAndUpdate.tsx

@@ -577,7 +577,6 @@ export default defineComponent({
                                 default: () => (
                                   <NSelect
                                     multiple
-                                    clearable
                                     options={questions}
                                     v-model:value={item.questionTypeCodes}
                                   />
@@ -603,7 +602,7 @@ export default defineComponent({
                       )
                     })}
                   </NForm>
-                  <NSpace style={{ padding: '10px 10px 0 10px' }}>
+                  <NSpace style={{ padding: '0 10px 0 10px' }}>
                     <NButton
                       type="warning"
                       style={{ width: '170px' }}

+ 26 - 6
src/views/teaching-manage/unit-test/unit-test-index/previewUnit.tsx

@@ -4,6 +4,11 @@ import { computed, defineComponent, reactive } from 'vue'
 import { difficultyCoefficients, questionTypeCode } from '../question-bank'
 import styles from './previewUnit.module.less'
 const items = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'M']
+const difficultyEmun = [
+  { label: '普通级', value: '1' },
+  { label: '进阶级', value: '2' },
+  { label: '大师级', value: '3' }
+]
 export default defineComponent({
   name: 'previewUnit',
   props: {
@@ -30,9 +35,8 @@ export default defineComponent({
           }) || []
         let questionExtendsInfo = ''
         try {
-          questionExtendsInfo = n.questionTypeCode != "PLAY"
-            ? n.questionExtendsInfo
-            : JSON.parse(n.questionExtendsInfo)
+          questionExtendsInfo =
+            n.questionTypeCode != 'PLAY' ? n.questionExtendsInfo : JSON.parse(n.questionExtendsInfo)
         } catch (error) {}
         arr.push({
           ...n,
@@ -73,12 +77,11 @@ export default defineComponent({
                     <div>
                       <div innerHTML={n.questionDetail}></div>
 
-                      {n.questionTypeCode != "PLAY" ? (
+                      {n.questionTypeCode != 'PLAY' ? (
                         <div>
                           <NSpace>
                             {n.mediaUrls.map((media: any) => (
                               <>
-                                {/* <audio src='https://daya.ks3-cn-beijing.ksyun.com/202205/T6doLdd.mp3' controls></audio> */}
                                 {media.type === 'audio' ? (
                                   <audio src={media.src} controls></audio>
                                 ) : (
@@ -119,7 +122,24 @@ export default defineComponent({
                             modalData.music = { id: n.questionExtendsInfo?.musicSheetId }
                           }}
                         >
-                          演奏曲目: {n.questionExtendsInfo?.musicName} (合格分数: {n.questionExtendsInfo?.score})
+                          演奏曲目: {n.questionExtendsInfo?.musicName}
+                          <NSpace style={{ marginLeft: '8px' }}>
+                            <NTag size="small" type="primary">
+                              合格分数: {n.questionExtendsInfo?.score}
+                            </NTag>
+                            <NTag size="small" type="primary">
+                              练习小节:
+                              {n.questionExtendsInfo?.start}-{n.questionExtendsInfo?.end}
+                            </NTag>
+                            <NTag size="small" type="primary">
+                              测验难度:
+                              {
+                                difficultyEmun.find(
+                                  (d: any) => d.value == n.questionExtendsInfo?.difficulty
+                                )?.label
+                              }
+                            </NTag>
+                          </NSpace>
                         </NButton>
                       )}
 

+ 2 - 2
vite.config.ts

@@ -19,9 +19,9 @@ function pathResolve(dir: string) {
 }
 
 // const proxyUrl = 'https://dev.lexiaoya.cn'
-const proxyUrl = 'http://127.0.0.1:7293/'
+// const proxyUrl = 'http://127.0.0.1:7293/'
 // const proxyUrl = 'https://resource.colexiu.com/'
-// const proxyUrl = 'https://dev.resource.colexiu.com'
+const proxyUrl = 'https://dev.resource.colexiu.com'
 // https://test.resource.colexiu.com/
 
 export default ({ command, mode }: ConfigEnv): UserConfig => {

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません