index.vue 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885
  1. <template>
  2. <div class="m-container">
  3. <h2>
  4. <div class="squrt"></div>
  5. 报表中心
  6. </h2>
  7. <div class="m-core">
  8. <el-collapse v-model="activeName" class="formCollapse">
  9. <el-collapse-item
  10. name="1"
  11. v-if="
  12. $helpers.permission('export/musicGroupRegister') ||
  13. $helpers.permission('export/musicGroupNormalStudentNum') ||
  14. $helpers.permission('export/exportStudentAttendances') ||
  15. $helpers.permission('export/cloudStudyStudentTrainData')
  16. "
  17. >
  18. <template slot="title">
  19. <p class="wrapTitle">教务信息</p>
  20. </template>
  21. <div class="m-wrap" v-permission="'export/musicGroupRegister'">
  22. <div class="title">乐团招生汇总:</div>
  23. <select-all
  24. v-model.trim="organIdList"
  25. class="organSelect"
  26. style="width: 100%"
  27. filterable
  28. placeholder="请选择分部"
  29. multiple
  30. clearable
  31. >
  32. <el-option
  33. v-for="(item, index) in selects.branchs"
  34. :key="index"
  35. :label="item.name"
  36. :value="item.id"
  37. ></el-option>
  38. </select-all>
  39. <!-- <el-button
  40. style="margin-left: 10px"
  41. type="primary"
  42. @click="exportMusicGroup"
  43. >导出</el-button
  44. > -->
  45. <ExportChiose
  46. style="margin-left: 10px"
  47. ExportEnum="MUSIC_GROUP_REGISTER"
  48. :exportData="{ organIds: this.organIdList.join(',') }"
  49. fileName="招生情况汇总表"
  50. errorMsg="请至少选择一个分部"
  51. :flag="this.organIdList.length < 1"
  52. />
  53. <el-tooltip placement="top" popper-class="mTooltip">
  54. <div slot="content">
  55. 请选择分部后,导出招生情况汇总表,分部可多选
  56. </div>
  57. <i
  58. class="el-icon-question micon el-tooltip"
  59. v-permission="'export/musicGroupRegister'"
  60. style="font-size: 18px; color: #f56c6c"
  61. ></i>
  62. </el-tooltip>
  63. </div>
  64. <div
  65. class="m-wrap"
  66. v-permission="'export/musicGroupNormalStudentNum'"
  67. >
  68. <div class="title">乐团在读人数:</div>
  69. <select-all
  70. v-model.trim="musicTeamNum"
  71. class="organSelect"
  72. style="width: 100%"
  73. filterable
  74. multiple
  75. placeholder="请选择分部"
  76. clearable
  77. >
  78. <el-option
  79. v-for="(item, index) in selects.branchs"
  80. :key="index"
  81. :label="item.name"
  82. :value="item.id"
  83. ></el-option>
  84. </select-all>
  85. <ExportChiose
  86. style="margin-left: 10px"
  87. ExportEnum="MUSIC_GROUP_NORMAL_STUDENT_NUM"
  88. :exportData="{ organIds: this.musicTeamNum.join(',') }"
  89. fileName="乐团在读人数"
  90. errorMsg="请至少选择一个分部"
  91. />
  92. <el-tooltip placement="top" popper-class="mTooltip">
  93. <div slot="content">请选择分部后,导出乐团在读人数信息</div>
  94. <i
  95. class="el-icon-question micon el-tooltip"
  96. style="font-size: 18px; color: #f56c6c"
  97. ></i>
  98. </el-tooltip>
  99. </div>
  100. <div class="m-wrap" v-permission="'export/exportStudentAttendances'">
  101. <div class="title">学生考勤:</div>
  102. <select-all
  103. v-model.trim="attendanceOrganId"
  104. class="organSelect"
  105. style="width: 100%"
  106. filterable
  107. multiple
  108. placeholder="请选择分部"
  109. clearable
  110. >
  111. <el-option
  112. v-for="(item, index) in selects.branchs"
  113. :key="index"
  114. :label="item.name"
  115. :value="item.id"
  116. ></el-option>
  117. </select-all>
  118. <el-select
  119. v-model.trim="attendanceCourseType"
  120. class="organSelect"
  121. style="margin-left: 15px; width: 100%"
  122. filterable
  123. placeholder="请选择课程类型"
  124. >
  125. <el-option
  126. v-for="(item, index) in courseListType"
  127. :key="index"
  128. :label="item.label"
  129. :value="item.value"
  130. ></el-option>
  131. </el-select>
  132. <el-date-picker
  133. v-model.trim="timer"
  134. style="width: 360px; margin-left: 15px"
  135. type="daterange"
  136. value-format="yyyy-MM-dd"
  137. range-separator="至"
  138. start-placeholder="上课开始日期"
  139. end-placeholder="上课结束日期"
  140. :picker-options="{
  141. firstDayOfWeek: 1
  142. }"
  143. ></el-date-picker>
  144. <!-- <el-button
  145. style="margin-left: 10px"
  146. type="primary"
  147. @click="exportAttendance"
  148. >导出</el-button
  149. > -->
  150. <ExportChiose
  151. style="margin-left: 10px"
  152. ExportEnum="EXPORT_STUDENT_ATTENDANCES"
  153. :exportData="exportAttendance"
  154. fileName="学生考勤"
  155. errorMsg="请至少选择一个分部"
  156. />
  157. </div>
  158. <div
  159. class="m-wrap"
  160. v-permission="'export/cloudStudyStudentTrainData'"
  161. >
  162. <div class="title">云教练学员统计:</div>
  163. <el-select
  164. v-model.trim="trainOrganId"
  165. class="organSelect"
  166. style="width: 100%"
  167. filterable
  168. placeholder="请选择分部"
  169. clearable
  170. >
  171. <el-option
  172. v-for="(item, index) in selects.branchs"
  173. :key="index"
  174. :label="item.name"
  175. :value="item.id"
  176. ></el-option>
  177. </el-select>
  178. <el-date-picker
  179. v-model.trim="cloudTimer"
  180. style="width: 360px; margin-left: 15px"
  181. type="daterange"
  182. value-format="yyyy-MM-dd"
  183. range-separator="至"
  184. start-placeholder="开始日期"
  185. end-placeholder="结束日期"
  186. :picker-options="{
  187. firstDayOfWeek: 1
  188. }"
  189. ></el-date-picker>
  190. <!-- <el-button
  191. style="margin-left: 10px"
  192. type="primary"
  193. @click="exportTrain"
  194. >导出</el-button
  195. > -->
  196. <ExportChiose
  197. style="margin-left: 10px"
  198. ExportEnum="CLOUD_STUDY_STUDENT_TRAIN_DATA"
  199. :exportData="exportTrain"
  200. fileName="云教练学员统计"
  201. errorMsg="请选择分部"
  202. :flag="!this.trainOrganId"
  203. />
  204. </div>
  205. <!-- 老师使用云教练数据
  206. -->
  207. <div class="m-wrap" v-permission="'export/teacherCloudTrainingList'">
  208. <div class="title">老师使用云教练数据:</div>
  209. <select-all
  210. v-model.trim="trainTeacherOrganId"
  211. class="organSelect"
  212. style="width: 100%"
  213. filterable
  214. multiple
  215. placeholder="请选择分部"
  216. clearable
  217. >
  218. <el-option
  219. v-for="(item, index) in selects.branchs"
  220. :key="index"
  221. :label="item.name"
  222. :value="item.id"
  223. ></el-option>
  224. </select-all>
  225. <el-date-picker
  226. v-model.trim="trainTeacherTimer"
  227. style="width: 360px; margin-left: 15px"
  228. type="daterange"
  229. value-format="yyyy-MM-dd"
  230. range-separator="至"
  231. start-placeholder="开始日期"
  232. end-placeholder="结束日期"
  233. :picker-options="pickerOptions"
  234. ></el-date-picker>
  235. <!-- <el-button
  236. style="margin-left: 10px"
  237. type="primary"
  238. @click="exportTeacherTrain"
  239. >导出</el-button
  240. > -->
  241. <ExportChiose
  242. style="margin-left: 10px"
  243. ExportEnum="EXPORT_TEACHER_CLOUD_COURSE_REPORT"
  244. :exportData="exportTeacherTrain"
  245. fileName="老师使用云教练数据"
  246. errorMsg="请选择分部"
  247. :flag="!this.trainTeacherOrganId"
  248. :isDownList="true"
  249. />
  250. </div>
  251. <!-- -->
  252. </el-collapse-item>
  253. <el-collapse-item
  254. name="2"
  255. v-if="
  256. $helpers.permission('export/teacherDefaultSalary') ||
  257. $helpers.permission('export/studentOrder') ||
  258. $helpers.permission('studentInstrument/export') ||
  259. $helpers.permission('export/studentVipPractice') ||
  260. $helpers.permission('export/exercisesSituation') ||
  261. $helpers.permission('export/exportIndexErrData') ||
  262. $helpers.permission('export/exportMusicGroupCourseList') ||
  263. $helpers.permission('export/EXPORT_INDEX_HISTORY_ERR_DATA') ||
  264. $helpers.permission('export/EXPORT_STUDENT_SUBCOURSE') ||
  265. $helpers.permission('export/EXPORT_TRAINING_STATISTICS') ||
  266. $helpers.permission('export/EXPORT_OPERATING_VISIT_STATISTICS')
  267. "
  268. >
  269. <template slot="title">
  270. <p class="wrapTitle">运营数据</p>
  271. </template>
  272. <div class="m-wrap" v-permission="'export/teacherDefaultSalary'">
  273. <div class="title">老师默认课酬:</div>
  274. <select-all
  275. v-model.trim="teacherDefaultSalaryOrganId"
  276. class="organSelect"
  277. style="width: 100%"
  278. filterable
  279. placeholder="请选择分部"
  280. multiple
  281. clearable
  282. >
  283. <el-option
  284. v-for="(item, index) in selects.branchs"
  285. :key="index"
  286. :label="item.name"
  287. :value="item.id"
  288. ></el-option>
  289. </select-all>
  290. <!-- <el-button
  291. style="margin-left: 10px"
  292. type="primary"
  293. @click="exportDefaultSalary"
  294. >导出</el-button
  295. > -->
  296. <ExportChiose
  297. style="margin-left: 10px"
  298. ExportEnum="TEACHER_DEFAULT_SALARY"
  299. :exportData="exportDefaultSalary"
  300. fileName="老师默认课酬"
  301. errorMsg="请至少选择一个分部"
  302. />
  303. <el-tooltip placement="top" popper-class="mTooltip">
  304. <div slot="content">请选择分部后,导出老师列表及老师课酬信息</div>
  305. <i
  306. class="el-icon-question micon el-tooltip"
  307. style="font-size: 18px; color: #f56c6c"
  308. v-permission="'export/teacherDefaultSalary'"
  309. ></i>
  310. </el-tooltip>
  311. </div>
  312. <div class="m-wrap" v-permission="'export/studentOrder'">
  313. <div class="title">回款统计:</div>
  314. <select-all
  315. v-model.trim="studentOrganId"
  316. class="organSelect"
  317. style="width: 100%"
  318. filterable
  319. placeholder="请选择分部"
  320. multiple
  321. clearable
  322. >
  323. <el-option
  324. v-for="(item, index) in selects.branchs"
  325. :key="index"
  326. :label="item.name"
  327. :value="item.id"
  328. ></el-option>
  329. </select-all>
  330. <el-date-picker
  331. style="margin-left: 15px"
  332. v-model="studentMonth"
  333. type="month"
  334. placeholder="选择月"
  335. value-format="yyyy-MM-dd"
  336. ></el-date-picker>
  337. <!-- <el-button
  338. style="margin-left: 10px"
  339. type="primary"
  340. @click="exportStudent"
  341. >导出</el-button
  342. > -->
  343. <ExportChiose
  344. style="margin-left: 10px"
  345. ExportEnum="STUDENT_ORDER"
  346. :exportData="exportStudent"
  347. fileName="回款统计"
  348. errorMsg="请选择导出月份"
  349. :flag="!this.studentMonth"
  350. />
  351. <el-tooltip placement="top" popper-class="mTooltip">
  352. <div slot="content">请选择分部和月份,导出回款统计</div>
  353. <i
  354. class="el-icon-question micon el-tooltip"
  355. style="font-size: 18px; color: #f56c6c"
  356. v-permission="'export/studentOrder'"
  357. ></i>
  358. </el-tooltip>
  359. </div>
  360. <div class="m-wrap" v-permission="'studentInstrument/export'">
  361. <div class="title">乐保订单导出:</div>
  362. <el-date-picker
  363. v-model="leBaoTimer"
  364. style="width: 360px"
  365. type="monthrange"
  366. value-format="yyyy-MM-dd"
  367. range-separator="至"
  368. start-placeholder="开始月份"
  369. end-placeholder="结束月份"
  370. >
  371. </el-date-picker>
  372. <!-- <el-button
  373. style="margin-left: 10px"
  374. type="primary"
  375. @click="exportLeBao"
  376. >导出</el-button
  377. > -->
  378. <ExportChiose
  379. style="margin-left: 10px"
  380. ExportEnum="STUDENT_INSTRUMENT"
  381. :exportData="exportLeBao"
  382. fileName="乐保订单"
  383. errorMsg="请选择导出月份"
  384. :flag="!(leBaoTimer && leBaoTimer.length > 1)"
  385. />
  386. <!-- <el-tooltip placement="top"
  387. popper-class="mTooltip">
  388. <div slot="content">
  389. 请选择分部和月份,导出回款统计
  390. </div>
  391. <i class="el-icon-question micon el-tooltip"
  392. style="font-size: 18px; color: #F56C6C"
  393. v-permission="'export/studentOrder'"></i>
  394. </el-tooltip> -->
  395. </div>
  396. <div class="m-wrap" v-permission="'export/studentVipPractice'">
  397. <div class="title">VIP网管课耗导出:</div>
  398. <select-all
  399. v-model.trim="vipOrganId"
  400. class="organSelect"
  401. style="width: 100%"
  402. filterable
  403. placeholder="请选择分部"
  404. clearable
  405. >
  406. <el-option
  407. v-for="(item, index) in selects.branchs"
  408. :key="index"
  409. :label="item.name"
  410. :value="item.id"
  411. ></el-option>
  412. </select-all>
  413. <!-- <el-button
  414. style="margin-left: 10px"
  415. type="primary"
  416. @click="exportVip"
  417. >导出</el-button
  418. > -->
  419. <ExportChiose
  420. style="margin-left: 10px"
  421. ExportEnum="STUDENT_VIP_PRACTICE"
  422. :exportData="exportVip"
  423. fileName="VIP网管课耗"
  424. errorMsg="请选择分部"
  425. :flag="vipOrganId.length <= 0"
  426. :isDownList="true"
  427. />
  428. </div>
  429. <div class="m-wrap" v-permission="'export/VIP_STUDENT_COURSE_MANAGE'">
  430. <div class="title">VIP学员课程管理导出:</div>
  431. <select-all
  432. v-model.trim="VipStudentOrganId"
  433. class="organSelect"
  434. style="width: 100%"
  435. filterable
  436. placeholder="请选择分部"
  437. clearable
  438. >
  439. <el-option
  440. v-for="(item, index) in selects.branchs"
  441. :key="index"
  442. :label="item.name"
  443. :value="item.id"
  444. ></el-option>
  445. </select-all>
  446. <!-- <el-button
  447. style="margin-left: 10px"
  448. type="primary"
  449. @click="exportVipStudent"
  450. >导出</el-button
  451. > -->
  452. <ExportChiose
  453. style="margin-left: 10px"
  454. ExportEnum="VIP_STUDENT_COURSE_MANAGE"
  455. :exportData="exportVipStudent"
  456. fileName="VIP学员课程管理导出"
  457. errorMsg="请选择分部"
  458. :isDownList="true"
  459. />
  460. </div>
  461. <div class="m-wrap" v-permission="'export/exercisesSituation'">
  462. <div class="title">服务指标明细导出:</div>
  463. <select-all
  464. v-model.trim="serviceOrganId"
  465. class="organSelect"
  466. style="width: 100%"
  467. filterable
  468. multiple
  469. placeholder="请选择分部"
  470. clearable
  471. >
  472. <el-option
  473. v-for="(item, index) in selects.branchs"
  474. :key="index"
  475. :label="item.name"
  476. :value="item.id"
  477. ></el-option>
  478. </select-all>
  479. <el-date-picker
  480. v-model.trim="serviceTimer"
  481. style="width: 360px; margin-left: 15px"
  482. type="daterange"
  483. value-format="yyyy-MM-dd"
  484. range-separator="至"
  485. start-placeholder="开始日期"
  486. end-placeholder="结束日期"
  487. :picker-options="{
  488. firstDayOfWeek: 1
  489. }"
  490. ></el-date-picker>
  491. <!-- <el-button
  492. style="margin-left: 10px"
  493. type="primary"
  494. @click="exportDetailService"
  495. >导出</el-button
  496. > -->
  497. <ExportChiose
  498. style="margin-left: 10px"
  499. ExportEnum="EXERCISES_SITUATION"
  500. :exportData="exportDetailService"
  501. fileName="服务指标明细"
  502. errorMsg="请选择导出月份"
  503. />
  504. </div>
  505. <div class="m-wrap" v-permission="'export/exportIndexErrData'">
  506. <div class="title">异常处理数据导出:</div>
  507. <select-all
  508. clearable
  509. filterable
  510. class="organSelect"
  511. v-model="Abnormal.organIds"
  512. multiple
  513. placeholder="请选择分部"
  514. >
  515. <el-option
  516. v-for="(item, index) in selects.branchs"
  517. :key="index"
  518. :label="item.name"
  519. :value="item.id + ''"
  520. ></el-option>
  521. </select-all>
  522. <!-- <el-button
  523. type="primary"
  524. style="margin-left: 10px"
  525. @click="exportAbnormal"
  526. >导出</el-button
  527. > -->
  528. <ExportChiose
  529. style="margin-left: 10px"
  530. ExportEnum="EXPORT_INDEX_HISTORY_ERR_DATA"
  531. :exportData="exportAbnormal"
  532. fileName="异常处理数据导出"
  533. errorMsg="请选择分部"
  534. />
  535. </div>
  536. <!-- <div class="m-wrap" v-permission="'export/STUDENT_VIP_COURSE_INFO'">
  537. <div class="title">VIP课学员课程导出:</div>
  538. <select-all
  539. v-model.trim="vipStudentCourseOrganId"
  540. class="organSelect"
  541. style="width: 100%"
  542. filterable
  543. multiple
  544. placeholder="请选择分部"
  545. clearable
  546. >
  547. <el-option
  548. v-for="(item, index) in selects.branchs"
  549. :key="index"
  550. :label="item.name"
  551. :value="item.id"
  552. ></el-option>
  553. </select-all>
  554. <ExportChiose
  555. style="margin-left: 10px"
  556. ExportEnum="STUDENT_VIP_COURSE_INFO"
  557. :exportData="exportAbnormal"
  558. fileName="VIP课学员课程信息导出"
  559. errorMsg="请选择分部"
  560. :flag="this.vipStudentCourseOrganId.length < 1"
  561. :isDownList="true"
  562. />
  563. </div> -->
  564. <div
  565. class="m-wrap"
  566. v-permission="'export/STUDENT_MUSIC_THEORY_COURSE_INFO'"
  567. >
  568. <div class="title">乐理课学员课程导出:</div>
  569. <select-all
  570. v-model.trim="musicStudentCourseOrganId"
  571. class="organSelect"
  572. style="width: 100%"
  573. filterable
  574. multiple
  575. placeholder="请选择分部"
  576. clearable
  577. >
  578. <el-option
  579. v-for="(item, index) in selects.branchs"
  580. :key="index"
  581. :label="item.name"
  582. :value="item.id"
  583. ></el-option>
  584. </select-all>
  585. <ExportChiose
  586. style="margin-left: 10px"
  587. ExportEnum="STUDENT_MUSIC_THEORY_COURSE_INFO"
  588. :exportData="exportAbnormal"
  589. fileName="乐理课学员课程信息导出"
  590. errorMsg="请选择分部"
  591. :flag="this.musicStudentCourseOrganId.length < 1"
  592. :isDownList="true"
  593. />
  594. </div>
  595. <div
  596. class="m-wrap"
  597. v-permission="'export/exportMusicGroupCourseList'"
  598. >
  599. <div class="title">乐团数据导出:</div>
  600. <select-all
  601. v-model.trim="teamOrganId"
  602. class="organSelect"
  603. style="width: 100%"
  604. filterable
  605. multiple
  606. placeholder="请选择分部"
  607. clearable
  608. >
  609. <el-option
  610. v-for="(item, index) in selects.branchs"
  611. :key="index"
  612. :label="item.name"
  613. :value="item.id"
  614. ></el-option>
  615. </select-all>
  616. <el-date-picker
  617. v-model.trim="teamTimer"
  618. style="width: 360px; margin-left: 15px"
  619. type="daterange"
  620. value-format="yyyy-MM-dd"
  621. range-separator="至"
  622. start-placeholder="开始日期"
  623. end-placeholder="结束日期"
  624. @change="getWeekTime"
  625. :picker-options="{
  626. firstDayOfWeek: 1
  627. }"
  628. ></el-date-picker>
  629. <el-button
  630. style="margin-left: 10px"
  631. type="primary"
  632. @click="exportMusicGroup"
  633. >导出</el-button
  634. >
  635. <!-- <ExportChiose
  636. style="margin-left: 10px"
  637. ExportEnum="EXERCISES_SITUATION"
  638. :exportData="exportDetailService"
  639. fileName="服务指标明细"
  640. errorMsg="请选择导出月份"
  641. /> -->
  642. </div>
  643. <div class="m-wrap" v-permission="'export/EXPORT_STUDENT_SUBCOURSE'">
  644. <div class="title">活动资格导出:</div>
  645. <select-all
  646. v-model.trim="activeOrganId"
  647. class="organSelect"
  648. style="width: 100%"
  649. filterable
  650. multiple
  651. placeholder="请选择分部"
  652. clearable
  653. >
  654. <el-option
  655. v-for="(item, index) in selects.branchs"
  656. :key="index"
  657. :label="item.name"
  658. :value="item.id"
  659. ></el-option>
  660. </select-all>
  661. <ExportChiose
  662. style="margin-left: 10px"
  663. ExportEnum="EXPORT_STUDENT_SUBCOURSE"
  664. :exportData="exportActive"
  665. fileName="活动资格导出"
  666. errorMsg="请选择分部"
  667. :isDownList="true"
  668. />
  669. </div>
  670. <div class="m-wrap" v-permission="'export/EXPORT_STUDENT_SERVE_INFO'">
  671. <div class="title">乐团学生指标导出:</div>
  672. <select-all
  673. v-model.trim="studentServerOrganId"
  674. class="organSelect"
  675. style="width: 100%"
  676. filterable
  677. multiple
  678. placeholder="请选择分部"
  679. clearable
  680. >
  681. <el-option
  682. v-for="(item, index) in selects.branchs"
  683. :key="index"
  684. :label="item.name"
  685. :value="item.id"
  686. ></el-option>
  687. </select-all>
  688. <el-date-picker
  689. v-model.trim="studentServerTimer"
  690. style="width: 360px; margin-left: 15px"
  691. type="daterange"
  692. value-format="yyyy-MM-dd"
  693. range-separator="至"
  694. start-placeholder="开始日期"
  695. end-placeholder="结束日期"
  696. @change="getStudentWeekTime"
  697. :picker-options="{
  698. firstDayOfWeek: 1
  699. }"
  700. ></el-date-picker>
  701. <ExportChiose
  702. style="margin-left: 10px"
  703. ExportEnum="EXPORT_STUDENT_SERVE_INFO"
  704. :exportData="exportStudentServer"
  705. fileName="乐团学生指标导出"
  706. errorMsg="请选择分部"
  707. :isDownList="false"
  708. />
  709. </div>
  710. <!-- -->
  711. <div
  712. class="m-wrap"
  713. v-permission="'export/EXPORT_TRAINING_STATISTICS'"
  714. >
  715. <div class="title">训练统计导出:</div>
  716. <select-all
  717. v-model.trim="trainingOrganId"
  718. class="organSelect"
  719. style="width: 100%"
  720. filterable
  721. multiple
  722. placeholder="请选择分部"
  723. clearable
  724. >
  725. <el-option
  726. v-for="(item, index) in selects.branchs"
  727. :key="index"
  728. :label="item.name"
  729. :value="item.id"
  730. ></el-option>
  731. </select-all>
  732. <el-date-picker
  733. v-model.trim="trainingTimer"
  734. style="width: 360px; margin-left: 15px"
  735. type="daterange"
  736. value-format="yyyy-MM-dd"
  737. range-separator="至"
  738. start-placeholder="开始日期"
  739. end-placeholder="结束日期"
  740. :picker-options="{
  741. firstDayOfWeek: 1
  742. }"
  743. ></el-date-picker>
  744. <!-- @change="getStudentWeekTime" -->
  745. <ExportChiose
  746. style="margin-left: 10px"
  747. ExportEnum="EXPORT_TRAINING_STATISTICS"
  748. :exportData="exporTtraining"
  749. fileName="训练统计导出"
  750. errorMsg="请选择分部"
  751. :isDownList="true"
  752. />
  753. </div>
  754. <!-- 回访统计导出 -->
  755. <div
  756. class="m-wrap"
  757. v-permission="'export/EXPORT_OPERATING_VISIT_STATISTICS'"
  758. >
  759. <div class="title">回访统计导出:</div>
  760. <el-date-picker
  761. v-model="visitmouth"
  762. type="month"
  763. placeholder="选择月"
  764. value-format="yyyy-MM"
  765. class="organSelect"
  766. ></el-date-picker>
  767. <!-- <el-select v-model.trim="courseScheduleType"
  768. style="marginLeft:10px"
  769. filterable
  770. clearable
  771. multiple
  772. placeholder="课程类型">
  773. <el-option v-for="(item, index) in courseArray"
  774. :key="index"
  775. :label="item.label"
  776. :value="item.value"></el-option>
  777. </el-select> -->
  778. <!-- <el-button
  779. style="margin-left: 10px"
  780. type="primary"
  781. @click="exportSalar"
  782. >导出</el-button
  783. > -->
  784. <ExportChiose
  785. style="margin-left: 10px"
  786. ExportEnum="EXPORT_OPERATING_VISIT_STATISTICS"
  787. :exportData="exportVisit"
  788. fileName="回访统计导出"
  789. errorMsg="请选择月份"
  790. :flag="!this.visitmouth"
  791. />
  792. <!-- <el-tooltip placement="top" popper-class="mTooltip">
  793. <div slot="content">将只导出当前选择月份已结算的课程课酬。</div>
  794. <i
  795. class="el-icon-question micon el-tooltip"
  796. style="font-size: 18px; color: #f56c6c"
  797. v-permission="'export/teacherSalary'"
  798. ></i>
  799. </el-tooltip> -->
  800. </div>
  801. <div class="m-wrap" v-permission="'export/EXPORT_CLOUD_TEACHER_SUM'">
  802. <div class="title">云教练统计导出:</div>
  803. <select-all
  804. v-model.trim="yunOrganId"
  805. class="organSelect"
  806. style="width: 100%"
  807. filterable
  808. multiple
  809. placeholder="请选择分部"
  810. clearable
  811. >
  812. <el-option
  813. v-for="(item, index) in selects.branchs"
  814. :key="index"
  815. :label="item.name"
  816. :value="item.id"
  817. ></el-option>
  818. </select-all>
  819. <el-date-picker
  820. v-model.trim="yunTimer"
  821. style="width: 360px; margin-left: 15px"
  822. type="daterange"
  823. value-format="yyyy-MM-dd"
  824. range-separator="至"
  825. start-placeholder="开始日期"
  826. end-placeholder="结束日期"
  827. :clearable="false"
  828. :picker-options="{
  829. firstDayOfWeek: 1
  830. }"
  831. ></el-date-picker>
  832. <!-- @change="getStudentWeekTime" -->
  833. <ExportChiose
  834. style="margin-left: 10px"
  835. ExportEnum="EXPORT_CLOUD_TEACHER_SUM"
  836. :exportData="exporyun"
  837. fileName="云教练统计导出"
  838. errorMsg="请选择分部"
  839. :isDownList="true"
  840. />
  841. </div>
  842. </el-collapse-item>
  843. <el-collapse-item
  844. name="3"
  845. v-if="
  846. $helpers.permission('export/teacherSalary') ||
  847. $helpers.permission('export/userCoursesAccount/4388') ||
  848. $helpers.permission('export/userCashAccountDetail/4389')
  849. "
  850. >
  851. <template slot="title">
  852. <p class="wrapTitle">财务数据</p>
  853. </template>
  854. <div
  855. class="m-wrap"
  856. v-permission="'export/EXPORT_OPERATING_REPORT_NEW'"
  857. >
  858. <div class="title">经营报表导出:</div>
  859. <el-date-picker
  860. v-model="operatingMouth"
  861. type="month"
  862. placeholder="选择月"
  863. value-format="yyyy-MM"
  864. class="organSelect"
  865. ></el-date-picker>
  866. <!-- <el-select v-model.trim="courseScheduleType"
  867. style="marginLeft:10px"
  868. filterable
  869. clearable
  870. multiple
  871. placeholder="课程类型">
  872. <el-option v-for="(item, index) in courseArray"
  873. :key="index"
  874. :label="item.label"
  875. :value="item.value"></el-option>
  876. </el-select> -->
  877. <!-- <el-button
  878. style="margin-left: 10px"
  879. type="primary"
  880. @click="exportSalar"
  881. >导出</el-button
  882. > -->
  883. <ExportChiose
  884. style="margin-left: 10px"
  885. ExportEnum="EXPORT_OPERATING_REPORT_NEW"
  886. :exportData="exportOperating"
  887. fileName="经营报表"
  888. errorMsg="请选择月份"
  889. :flag="!this.operatingMouth"
  890. />
  891. <el-tooltip placement="top" popper-class="mTooltip">
  892. <div slot="content">将只导出当前选择月份的经营报表。</div>
  893. <i
  894. class="el-icon-question micon el-tooltip"
  895. style="font-size: 18px; color: #f56c6c"
  896. v-permission="'export/teacherSalary'"
  897. ></i>
  898. </el-tooltip>
  899. </div>
  900. <div
  901. class="m-wrap"
  902. v-permission="'export/EXPORT_OA_SUMMARY_EXPENSES'"
  903. >
  904. <div class="title">oa费用汇总:</div>
  905. <el-date-picker
  906. v-model="oaCountMouth"
  907. type="month"
  908. placeholder="选择月"
  909. value-format="yyyy-MM"
  910. class="organSelect"
  911. ></el-date-picker>
  912. <ExportChiose
  913. style="margin-left: 10px"
  914. ExportEnum="EXPORT_OA_SUMMARY_EXPENSES"
  915. :exportData="exportOaCount"
  916. :isDownList="true"
  917. fileName="oa费用汇总"
  918. errorMsg="请选择月份"
  919. :flag="!this.oaCountMouth"
  920. />
  921. </div>
  922. <div
  923. class="m-wrap"
  924. v-permission="'export/EXPORT_OA_SUMMARY_EXPENSES_DETAIL'"
  925. >
  926. <div class="title">oa费用明细:</div>
  927. <el-date-picker
  928. v-model="oaDetailMouth"
  929. type="month"
  930. placeholder="选择月"
  931. value-format="yyyy-MM"
  932. class="organSelect"
  933. ></el-date-picker>
  934. <ExportChiose
  935. style="margin-left: 10px"
  936. ExportEnum="EXPORT_OA_SUMMARY_EXPENSES_DETAIL"
  937. :exportData="exportOaDetail"
  938. :isDownList="true"
  939. fileName="oa费用明细"
  940. errorMsg="请选择月份"
  941. :flag="!this.oaDetailMouth"
  942. />
  943. </div>
  944. <div
  945. class="m-wrap"
  946. v-permission="'export/EXPORT_OPERATING_SUMMARY_INCOME'"
  947. >
  948. <div class="title">经营报表收入汇总:</div>
  949. <el-date-picker
  950. v-model="reportCountMouth"
  951. type="month"
  952. placeholder="选择月"
  953. value-format="yyyy-MM"
  954. class="organSelect"
  955. ></el-date-picker>
  956. <ExportChiose
  957. style="margin-left: 10px"
  958. ExportEnum="EXPORT_OPERATING_SUMMARY_INCOME"
  959. :exportData="exportCount"
  960. fileName="经营报表收入汇总"
  961. :isDownList="true"
  962. errorMsg="请选择月份"
  963. :flag="!this.reportCountMouth"
  964. />
  965. </div>
  966. <div class="m-wrap" v-permission="'import/importHumanCost'">
  967. <div class="title">经营报表外部数据录入:</div>
  968. <el-upload
  969. v-permission="'import/importHumanCost'"
  970. style="display: inline-block; "
  971. action="/api-web/import/importHumanCost"
  972. :show-file-list="false"
  973. :before-upload="reportBeforeUpload"
  974. accept=".xlsx,.xls"
  975. :headers="headers"
  976. :on-error="reportHandleError"
  977. :on-success="reportHandleSuccess"
  978. >
  979. <el-button type="primary">
  980. 导入
  981. </el-button>
  982. </el-upload>
  983. <el-button
  984. type="primary"
  985. @click="downloadTemplateReportOut"
  986. style="margin-left: 10px;"
  987. >下载模板</el-button
  988. >
  989. </div>
  990. <div class="m-wrap" v-permission="'export/now'">
  991. <div class="title">课程收入明细:</div>
  992. <el-date-picker
  993. v-model="mouthIncome"
  994. type="month"
  995. placeholder="选择月"
  996. value-format="yyyy-MM"
  997. class="organSelect"
  998. ></el-date-picker>
  999. <ExportChiose
  1000. style="margin-left: 10px"
  1001. ExportEnum="EXPORT_COURSE_INCOME"
  1002. :exportData="exportIncome"
  1003. fileName="课程收入明细导出"
  1004. errorMsg="请选择月份"
  1005. :flag="!this.mouthIncome"
  1006. />
  1007. </div>
  1008. <div class="m-wrap" v-permission="'export/teacherSalary'">
  1009. <div class="title">课酬导出:</div>
  1010. <el-date-picker
  1011. v-model="mouth"
  1012. type="month"
  1013. placeholder="选择月"
  1014. value-format="yyyy-MM-dd"
  1015. class="organSelect"
  1016. ></el-date-picker>
  1017. <!-- <el-select v-model.trim="courseScheduleType"
  1018. style="marginLeft:10px"
  1019. filterable
  1020. clearable
  1021. multiple
  1022. placeholder="课程类型">
  1023. <el-option v-for="(item, index) in courseArray"
  1024. :key="index"
  1025. :label="item.label"
  1026. :value="item.value"></el-option>
  1027. </el-select> -->
  1028. <!-- <el-button
  1029. style="margin-left: 10px"
  1030. type="primary"
  1031. @click="exportSalar"
  1032. >导出</el-button
  1033. > -->
  1034. <ExportChiose
  1035. style="margin-left: 10px"
  1036. ExportEnum="TEACHER_SALARY"
  1037. :exportData="exportSalar"
  1038. fileName="课酬导出"
  1039. errorMsg="请选择月份"
  1040. :flag="!this.mouth"
  1041. />
  1042. <el-tooltip placement="top" popper-class="mTooltip">
  1043. <div slot="content">将只导出当前选择月份已结算的课程课酬。</div>
  1044. <i
  1045. class="el-icon-question micon el-tooltip"
  1046. style="font-size: 18px; color: #f56c6c"
  1047. v-permission="'export/teacherSalary'"
  1048. ></i>
  1049. </el-tooltip>
  1050. </div>
  1051. <div class="m-wrap" v-permission="'export/userCoursesAccount/4388'">
  1052. <div class="title">课程余额明细:</div>
  1053. <select-all
  1054. v-model.trim="AccountOrganId"
  1055. class="organSelect"
  1056. style="width: 100%"
  1057. filterable
  1058. multiple
  1059. placeholder="请选择分部"
  1060. clearable
  1061. >
  1062. <el-option
  1063. v-for="(item, index) in selects.branchs"
  1064. :key="index"
  1065. :label="item.name"
  1066. :value="item.id"
  1067. ></el-option>
  1068. </select-all>
  1069. <el-date-picker
  1070. v-model.trim="AccountTimer"
  1071. style="width: 360px; margin-left: 15px"
  1072. type="daterange"
  1073. value-format="yyyy-MM-dd"
  1074. range-separator="至"
  1075. start-placeholder="开始日期"
  1076. end-placeholder="结束日期"
  1077. :picker-options="{
  1078. firstDayOfWeek: 1
  1079. }"
  1080. ></el-date-picker>
  1081. <!-- <el-button
  1082. style="margin-left: 10px"
  1083. type="primary"
  1084. @click="exportAccount"
  1085. >导出</el-button
  1086. > -->
  1087. <ExportChiose
  1088. style="margin-left: 10px"
  1089. ExportEnum="USER_COURSES_ACCOUNT"
  1090. :exportData="exportAccount"
  1091. fileName="课程余额明细"
  1092. errorMsg="请选择月份"
  1093. />
  1094. </div>
  1095. <div
  1096. class="m-wrap"
  1097. v-permission="'export/userCashAccountDetail/4389'"
  1098. >
  1099. <div class="title">账户余额明细:</div>
  1100. <select-all
  1101. v-model.trim="AccountDetailOrganId"
  1102. class="organSelect"
  1103. style="width: 100%"
  1104. filterable
  1105. multiple
  1106. placeholder="请选择分部"
  1107. clearable
  1108. >
  1109. <el-option
  1110. v-for="(item, index) in selects.branchs"
  1111. :key="index"
  1112. :label="item.name"
  1113. :value="item.id"
  1114. ></el-option>
  1115. </select-all>
  1116. <el-date-picker
  1117. v-model.trim="AccountDetailTimer"
  1118. style="width: 360px; margin-left: 15px"
  1119. type="daterange"
  1120. value-format="yyyy-MM-dd"
  1121. range-separator="至"
  1122. start-placeholder="开始日期"
  1123. end-placeholder="结束日期"
  1124. :picker-options="{
  1125. firstDayOfWeek: 1
  1126. }"
  1127. ></el-date-picker>
  1128. <!-- <el-button
  1129. style="margin-left: 10px"
  1130. type="primary"
  1131. @click="exportDetailAccount"
  1132. >导出</el-button
  1133. > -->
  1134. <ExportChiose
  1135. style="margin-left: 10px"
  1136. ExportEnum="USER_CASH_ACCOUNT_DETAIL"
  1137. :exportData="exportAccount"
  1138. fileName="课程余额明细"
  1139. errorMsg="请选择月份"
  1140. />
  1141. </div>
  1142. </el-collapse-item>
  1143. <!-- <el-collapse-item
  1144. name="4"
  1145. v-if="$helpers.permission('questionnaireUserResult/export/report')"
  1146. >
  1147. <template slot="title">
  1148. <p class="wrapTitle">其他数据</p>
  1149. </template>
  1150. <div
  1151. class="m-wrap"
  1152. v-if="$helpers.permission('questionnaireUserResult/export/report')"
  1153. >
  1154. <div class="title">问卷调查:</div>
  1155. <el-select
  1156. v-model.trim="questionActiveType"
  1157. class="organSelect"
  1158. style="width: 100%"
  1159. filterable
  1160. placeholder="请选择导出类型"
  1161. clearable
  1162. >
  1163. <el-option
  1164. label="云教练用户反馈"
  1165. value="CLOUD_TEACHER_FEEDBACK"
  1166. ></el-option>
  1167. </el-select>
  1168. <el-button
  1169. style="margin-left: 10px"
  1170. type="primary"
  1171. @click="exportQuestion"
  1172. >导出</el-button
  1173. >
  1174. <ExportChiose
  1175. style="margin-left: 10px"
  1176. ExportEnum="USER_CASH_ACCOUNT_DETAIL"
  1177. :exportData="{ activeType: this.questionActiveType }"
  1178. fileName="问卷调查"
  1179. errorMsg="请选择月份"
  1180. />
  1181. </div>
  1182. </el-collapse-item> -->
  1183. </el-collapse>
  1184. </div>
  1185. </div>
  1186. </template>
  1187. <script>
  1188. import { exportTeacherSalary } from "@/api/generalSettings";
  1189. import { courseType, courseListType } from "@/utils/searchArray";
  1190. import ExportChiose from "@/components/Export-chiose";
  1191. import { Export } from "@/utils/downLoadFile";
  1192. import cleanDeep from "clean-deep";
  1193. import qs from "qs";
  1194. import dayjs from "dayjs";
  1195. import axios from "axios";
  1196. import { getToken, getTenantId } from "@/utils/auth";
  1197. import { getTimes } from "@/utils";
  1198. import load from "@/utils/loading";
  1199. export default {
  1200. name: "reportForm",
  1201. components: {
  1202. ExportChiose
  1203. },
  1204. data() {
  1205. return {
  1206. mouthIncome: "",
  1207. mouth: "",
  1208. organIdList: [],
  1209. teacherDefaultSalaryOrganId: [],
  1210. courseArray: courseType,
  1211. courseListType,
  1212. courseScheduleType: [],
  1213. musicTeamNum: [],
  1214. studentOrganId: [],
  1215. studentMonth: "",
  1216. attendanceOrganId: [],
  1217. attendanceCourseType: "MUSIC",
  1218. timer: [],
  1219. leBaoTimer: [],
  1220. AccountOrganId: [],
  1221. AccountTimer: [],
  1222. AccountDetailOrganId: [],
  1223. AccountDetailTimer: [],
  1224. trainOrganId: null,
  1225. questionActiveType: "CLOUD_TEACHER_FEEDBACK",
  1226. vipOrganId: [],
  1227. serviceOrganId: [], // 服务报表
  1228. serviceTimer: [],
  1229. Abnormal: {
  1230. organIds: []
  1231. },
  1232. activeName: ["1", "2", "3", "4"],
  1233. vipStudentCourseOrganId: [],
  1234. musicStudentCourseOrganId: [],
  1235. VipStudentOrganId: [],
  1236. teamOrganId: [],
  1237. teamTimer: [],
  1238. activeOrganId: [],
  1239. studentServerOrganId: [],
  1240. studentServerTimer: [],
  1241. trainingOrganId: [],
  1242. trainingTimer: [],
  1243. visitmouth: "",
  1244. operatingMouth: "",
  1245. reportCountMouth: "",
  1246. oaDetailMouth: "",
  1247. oaCountMouth: "",
  1248. cloudTimer: [],
  1249. yunOrganId: [],
  1250. yunTimer: [
  1251. dayjs()
  1252. .set("date", 1)
  1253. .format("YYYY-MM-DD"),
  1254. dayjs().format("YYYY-MM-DD")
  1255. ],
  1256. trainTeacherOrganId: [],
  1257. trainTeacherTimer: [],
  1258. pickerOptions: {
  1259. firstDayOfWeek: 1,
  1260. disabledDate(time) {
  1261. return time.getTime() + 86400000 > new Date().getTime();
  1262. }
  1263. },
  1264. headers: {
  1265. Authorization: getToken(),
  1266. tenantId: getTenantId()
  1267. }
  1268. };
  1269. },
  1270. mounted() {
  1271. this.$store.dispatch("setBranchs");
  1272. },
  1273. methods: {
  1274. reportBeforeUpload(file) {
  1275. load.startLoading();
  1276. },
  1277. reportHandleSuccess(response, file, fileList) {
  1278. // 导入商品
  1279. // 报表导出
  1280. load.endLoading();
  1281. if (response.code == 200) {
  1282. this.$message.success(response.msg || "导入成功");
  1283. } else if (response.code == 0) {
  1284. let str = this.fomatStr(response.msg);
  1285. this.$alert(str, "导入结果", {
  1286. confirmButtonText: "确定",
  1287. dangerouslyUseHTMLString: true,
  1288. callback: action => {}
  1289. });
  1290. } else {
  1291. this.$message.error(response.msg);
  1292. }
  1293. },
  1294. reportHandleError(err, file, fileList) {
  1295. load.endLoading();
  1296. },
  1297. downloadTemplateReportOut() {
  1298. window.location.href =
  1299. "https://oss.dayaedu.com/daya-docs/%E7%BB%8F%E8%90%A5%E6%8A%A5%E8%A1%A8%E5%A4%96%E9%83%A8%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xls";
  1300. },
  1301. exportMusicGroup() {
  1302. if (this.organIdList.length < 1) {
  1303. this.$message.error("请至少选择一个分部");
  1304. return;
  1305. }
  1306. let url = "/api-web/export/musicGroupRegister";
  1307. let data = { organIds: this.organIdList.join(",") };
  1308. const options = {
  1309. method: "POST",
  1310. headers: {
  1311. Authorization: getToken(),
  1312. tenantId: getTenantId()
  1313. },
  1314. data: qs.stringify(cleanDeep(data)),
  1315. url,
  1316. responseType: "blob"
  1317. };
  1318. this.$confirm("您确定导出招生情况汇总表", "提示", {
  1319. confirmButtonText: "确定",
  1320. cancelButtonText: "取消",
  1321. type: "warning"
  1322. })
  1323. .then(() => {
  1324. load.startLoading();
  1325. axios(options)
  1326. .then(res => {
  1327. let blob = new Blob([res.data], {
  1328. // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
  1329. type: "application/vnd.ms-excel;charset=utf-8"
  1330. //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
  1331. });
  1332. let text = new Response(blob).text();
  1333. text.then(res => {
  1334. // 判断是否报错
  1335. if (res.indexOf("code") != -1) {
  1336. let json = JSON.parse(res);
  1337. if (json.code == 403) {
  1338. this.$message.error(`登录过期,请重新登录!`);
  1339. setTimeout(() => {
  1340. this.$store.dispatch("user/resetToken").then(() => {
  1341. location.reload();
  1342. });
  1343. }, 1000);
  1344. return;
  1345. }
  1346. this.$message.error(json.msg);
  1347. } else {
  1348. let objectUrl = URL.createObjectURL(blob);
  1349. let link = document.createElement("a");
  1350. let nowTime = new Date();
  1351. let ymd =
  1352. nowTime.getFullYear() +
  1353. "" +
  1354. (nowTime.getMonth() + 1) +
  1355. "" +
  1356. nowTime.getDate();
  1357. let fname = ymd + "招生情况汇总表.xls"; //下载文件的名字
  1358. link.href = objectUrl;
  1359. link.setAttribute("download", fname);
  1360. document.body.appendChild(link);
  1361. link.click();
  1362. }
  1363. });
  1364. load.endLoading();
  1365. })
  1366. .catch(error => {
  1367. this.$message.error("导出数据失败,请联系管理员");
  1368. load.endLoading();
  1369. });
  1370. })
  1371. .catch(() => {});
  1372. },
  1373. exportMusicTeamNum() {
  1374. let organIds = this.musicTeamNum.join(",");
  1375. let url = "/api-web/export/musicGroupNormalStudentNum";
  1376. let data = { organIds };
  1377. const options = {
  1378. method: "POST",
  1379. headers: {
  1380. Authorization: getToken(),
  1381. tenantId: getTenantId()
  1382. },
  1383. data: qs.stringify(cleanDeep(data)),
  1384. url,
  1385. responseType: "blob"
  1386. };
  1387. this.$confirm("您确定导出乐团在读人数", "提示", {
  1388. confirmButtonText: "确定",
  1389. cancelButtonText: "取消",
  1390. type: "warning"
  1391. })
  1392. .then(() => {
  1393. load.startLoading();
  1394. axios(options)
  1395. .then(res => {
  1396. let blob = new Blob([res.data], {
  1397. // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
  1398. type: "application/vnd.ms-excel;charset=utf-8"
  1399. //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
  1400. });
  1401. let text = new Response(blob).text();
  1402. text.then(res => {
  1403. // 判断是否报错
  1404. if (res.indexOf("code") != -1) {
  1405. let json = JSON.parse(res);
  1406. if (json.code == 403) {
  1407. this.$message.error(`登录过期,请重新登录!`);
  1408. setTimeout(() => {
  1409. this.$store.dispatch("user/resetToken").then(() => {
  1410. location.reload();
  1411. });
  1412. }, 1000);
  1413. return;
  1414. }
  1415. this.$message.error(json.msg);
  1416. } else {
  1417. let objectUrl = URL.createObjectURL(blob);
  1418. let link = document.createElement("a");
  1419. let nowTime = new Date();
  1420. let ymd =
  1421. nowTime.getFullYear() +
  1422. "" +
  1423. (nowTime.getMonth() + 1) +
  1424. "" +
  1425. nowTime.getDate();
  1426. let fname = ymd + "乐团在读人数.xls"; //下载文件的名字
  1427. link.href = objectUrl;
  1428. link.setAttribute("download", fname);
  1429. document.body.appendChild(link);
  1430. link.click();
  1431. }
  1432. });
  1433. load.endLoading();
  1434. })
  1435. .catch(error => {
  1436. this.$message.error("导出数据失败,请联系管理员");
  1437. load.endLoading();
  1438. });
  1439. })
  1440. .catch(() => {});
  1441. },
  1442. exportQuestion() {
  1443. Export(
  1444. this,
  1445. {
  1446. url: "/api-web/questionnaireUserResult/export",
  1447. fileName: "问卷调查.xls",
  1448. method: "get",
  1449. params: { activeType: this.questionActiveType }
  1450. },
  1451. "您确定导出问卷调查?"
  1452. );
  1453. },
  1454. getNowDateAndMonday(time) {
  1455. let timestamp = new Date(time.replace(/-/g, "/")).getTime();
  1456. let serverDate = new Date(time);
  1457. if (serverDate.getDay() == 0) {
  1458. timestamp -= 7 * 24 * 60 * 60 * 1000;
  1459. }
  1460. let mondayTime =
  1461. timestamp - (serverDate.getDay() - 1) * 24 * 60 * 60 * 1000;
  1462. let mondayData = new Date(mondayTime);
  1463. //年
  1464. let mondayY = mondayData.getFullYear();
  1465. //月
  1466. let mondayM =
  1467. mondayData.getMonth() + 1 < 10
  1468. ? "0" + (mondayData.getMonth() + 1)
  1469. : mondayData.getMonth() + 1;
  1470. //日
  1471. let mondayD =
  1472. mondayData.getDate() < 10
  1473. ? "0" + mondayData.getDate()
  1474. : mondayData.getDate();
  1475. let str = mondayY + "-" + mondayM + "-" + mondayD;
  1476. return str;
  1477. },
  1478. getNowDateAndSunday(time) {
  1479. let timestamp = new Date(time.replace(/-/g, "/")).getTime();
  1480. let serverDate = new Date(time);
  1481. let num = 7 - serverDate.getDay();
  1482. if (num == 7) {
  1483. num = 0;
  1484. }
  1485. let sundayTiem = timestamp + num * 24 * 60 * 60 * 1000;
  1486. let SundayData = new Date(sundayTiem);
  1487. //年
  1488. let tomorrowY = SundayData.getFullYear(); //月
  1489. let tomorrowM =
  1490. SundayData.getMonth() + 1 < 10
  1491. ? "0" + (SundayData.getMonth() + 1)
  1492. : SundayData.getMonth() + 1;
  1493. //日
  1494. let tomorrowD =
  1495. SundayData.getDate() < 10
  1496. ? "0" + SundayData.getDate()
  1497. : SundayData.getDate();
  1498. let str = tomorrowY + "-" + tomorrowM + "-" + tomorrowD;
  1499. return str;
  1500. },
  1501. getWeekTime(val) {
  1502. if (val && val.length > 0) {
  1503. let start = this.getNowDateAndMonday(val[0]);
  1504. let end = this.getNowDateAndSunday(val[1]);
  1505. this.teamTimer.splice(0, 1, start);
  1506. this.teamTimer.splice(1, 1, end);
  1507. }
  1508. },
  1509. getStudentWeekTime(val) {
  1510. let start = this.getNowDateAndMonday(val[0]);
  1511. let end = this.getNowDateAndSunday(val[1]);
  1512. this.studentServerTimer.splice(0, 1, start);
  1513. this.studentServerTimer.splice(1, 1, end);
  1514. },
  1515. exportMusicGroup() {
  1516. let params = {
  1517. ...getTimes(this.teamTimer, ["startTime", "endTime"]),
  1518. organId: this.teamOrganId.join(",")
  1519. };
  1520. Export(
  1521. this,
  1522. {
  1523. method: "post",
  1524. url: "/api-web/export/exportMusicGroupCourseList",
  1525. params: this.$helpers.qs.stringify({
  1526. ...params
  1527. })
  1528. },
  1529. "是否确认导出报表?"
  1530. );
  1531. }
  1532. },
  1533. computed: {
  1534. exportTeacherTrain() {
  1535. // if (this.trainTeacherTimer.length < 1) {
  1536. // this.$message.error("请选择时间段");
  1537. // return;
  1538. // }
  1539. // if (this.trainTeacherOrganId.length < 1) {
  1540. // this.$message.error("请选择分部");
  1541. // return;
  1542. // }
  1543. let startTime = this.trainTeacherTimer[0] || null;
  1544. let endTime = this.trainTeacherTimer[1] || null;
  1545. // Export(
  1546. // this,
  1547. // {
  1548. // url: "/api-web/export/teacherCloudTrainingList",
  1549. // fileName: "老师使用云教练数据.xls",
  1550. // method: "post",
  1551. // params: qs.stringify({
  1552. // organIdList: this.trainTeacherOrganId.join(","),
  1553. // startTime,
  1554. // endTime,
  1555. // }),
  1556. // },
  1557. // "您确定导出老师使用云教练数据?"
  1558. // );
  1559. let obj = {
  1560. organId: this.trainTeacherOrganId.join(","),
  1561. startTime,
  1562. endTime
  1563. };
  1564. return obj;
  1565. },
  1566. exportAttendance() {
  1567. let classStartDate, classEndDate;
  1568. if (this.timer && this.timer.length > 0) {
  1569. classStartDate = this.timer[0];
  1570. classEndDate = this.timer[1];
  1571. } else {
  1572. classStartDate = null;
  1573. classEndDate = null;
  1574. }
  1575. return {
  1576. organId: this.attendanceOrganId.join(","),
  1577. groupType: this.attendanceCourseType,
  1578. classStartDate,
  1579. classEndDate
  1580. };
  1581. },
  1582. exportTrain() {
  1583. let cloudTeacherTrainStartDate, cloudTeacherTrainEndDate;
  1584. if (this.cloudTimer && this.cloudTimer.length > 0) {
  1585. cloudTeacherTrainStartDate = this.cloudTimer[0];
  1586. cloudTeacherTrainEndDate = this.cloudTimer[1];
  1587. } else {
  1588. cloudTeacherTrainStartDate = null;
  1589. cloudTeacherTrainEndDate = null;
  1590. }
  1591. let obj = {
  1592. organId: this.trainOrganId,
  1593. cloudTeacherTrainStartDate,
  1594. cloudTeacherTrainEndDate
  1595. };
  1596. console.log(obj, "exportTrain");
  1597. return obj;
  1598. },
  1599. exportDefaultSalary() {
  1600. let organIdList = this.teacherDefaultSalaryOrganId.join(",");
  1601. let url = "/api-web/export/teacherDefaultSalary";
  1602. let data = { organIdList };
  1603. return data;
  1604. },
  1605. exportStudent() {
  1606. let studentOrganId = this.studentOrganId.join(",");
  1607. return { organIds: studentOrganId, date: this.studentMonth };
  1608. },
  1609. exportLeBao() {
  1610. let endTime, startTime;
  1611. if (this.leBaoTimer && this.leBaoTimer.length > 1) {
  1612. startTime = this.leBaoTimer[0];
  1613. let end = this.leBaoTimer[1];
  1614. end = new Date(end);
  1615. end = new Date(end.getFullYear(), end.getMonth() + 1, 0);
  1616. endTime = dayjs(end).format("YYYY-MM-DD");
  1617. }
  1618. return { startTime: startTime, endTime: endTime };
  1619. },
  1620. exportVip() {
  1621. // if (!this.vipOrganId.length < 0) {
  1622. // this.$message.error("请选择分部");
  1623. // return;
  1624. // }
  1625. let data = {
  1626. organId: this.vipOrganId.join(",")
  1627. };
  1628. return data;
  1629. },
  1630. exportVipStudent() {
  1631. let data = {
  1632. organId: this.VipStudentOrganId.join(",")
  1633. };
  1634. return data;
  1635. },
  1636. exportActive() {
  1637. let data = {
  1638. organId: this.activeOrganId.join(",")
  1639. };
  1640. return data;
  1641. },
  1642. exportStudentServer() {
  1643. let sunday, monday;
  1644. if (this.studentServerTimer && this.studentServerTimer.length > 1) {
  1645. monday = this.studentServerTimer[0];
  1646. sunday = this.studentServerTimer[1];
  1647. } else {
  1648. monday = null;
  1649. sunday = null;
  1650. }
  1651. return {
  1652. monday,
  1653. sunday,
  1654. organId: this.studentServerOrganId.join(",")
  1655. };
  1656. },
  1657. exportDetailService() {
  1658. let sunday, monday;
  1659. if (this.serviceTimer && this.serviceTimer.length > 1) {
  1660. monday = this.serviceTimer[0];
  1661. sunday = this.serviceTimer[1];
  1662. } else {
  1663. monday = null;
  1664. sunday = null;
  1665. }
  1666. return {
  1667. monday: monday,
  1668. sunday: sunday,
  1669. organId: this.serviceOrganId.join(",")
  1670. };
  1671. },
  1672. exportAbnormal() {
  1673. console.log(this.Abnormal);
  1674. return {
  1675. organIds: this.Abnormal.organIds.join(",")
  1676. };
  1677. },
  1678. exportSalar() {
  1679. // if (!this.mouth) {
  1680. // this.$message.error("请选择导出月份");
  1681. // return;
  1682. // }
  1683. // let courseTypeList = this.courseScheduleType.join(',')
  1684. // let url = "/api-web/export/teacherSalary";
  1685. let data = { date: this.mouth };
  1686. return data;
  1687. },
  1688. exportIncome() {
  1689. let data = { date: this.mouthIncome };
  1690. return data;
  1691. },
  1692. exportOperating() {
  1693. let data = { date: this.operatingMouth };
  1694. return data;
  1695. },
  1696. exportOaCount() {
  1697. let data = { month: this.oaCountMouth };
  1698. return data;
  1699. },
  1700. exportOaDetail() {
  1701. let data = { month: this.oaDetailMouth };
  1702. return data;
  1703. },
  1704. exportCount() {
  1705. let data = { month: this.reportCountMouth };
  1706. return data;
  1707. },
  1708. exportVisit() {
  1709. let data = { month: this.visitmouth };
  1710. return data;
  1711. },
  1712. exportAccount() {
  1713. let endTime, startTime;
  1714. if (this.AccountTimer && this.AccountTimer.length > 1) {
  1715. startTime = this.AccountTimer[0];
  1716. endTime = this.AccountTimer[1];
  1717. } else {
  1718. startTime = null;
  1719. endTime = null;
  1720. }
  1721. return {
  1722. startTime: startTime,
  1723. endTime: endTime,
  1724. organId: this.AccountOrganId.join(",")
  1725. };
  1726. },
  1727. exporTtraining() {
  1728. let endTime, startTime;
  1729. if (this.trainingTimer && this.trainingTimer.length > 1) {
  1730. startTime = this.trainingTimer[0];
  1731. endTime = this.trainingTimer[1];
  1732. } else {
  1733. startTime = null;
  1734. endTime = null;
  1735. }
  1736. return {
  1737. startDate: startTime,
  1738. endDate: endTime,
  1739. organId: this.trainingOrganId.join(",")
  1740. };
  1741. },
  1742. exporyun() {
  1743. let endTime, startTime;
  1744. if (this.yunTimer && this.yunTimer.length > 1) {
  1745. startTime = this.yunTimer[0];
  1746. endTime = this.yunTimer[1];
  1747. } else {
  1748. startTime = null;
  1749. endTime = null;
  1750. }
  1751. return {
  1752. startDate: startTime,
  1753. endDate: endTime,
  1754. organId: this.yunOrganId.join(",")
  1755. };
  1756. },
  1757. exportDetailAccount() {
  1758. let endTime, startTime;
  1759. if (this.AccountDetailTimer && this.AccountDetailTimer.length > 1) {
  1760. startTime = this.AccountDetailTimer[0];
  1761. endTime = this.AccountDetailTimer[1];
  1762. } else {
  1763. startTime = null;
  1764. endTime = null;
  1765. }
  1766. return {
  1767. startTime: startTime,
  1768. endTime: endTime,
  1769. organId: this.AccountDetailOrganId.join(",")
  1770. };
  1771. }
  1772. }
  1773. // AccountDetailTimer
  1774. };
  1775. </script>
  1776. <style lang="scss" scoped>
  1777. .m-container {
  1778. // margin-top: 20px;
  1779. .m-wrap {
  1780. display: flex;
  1781. flex-direction: row;
  1782. justify-content: flex-start;
  1783. width: 100%;
  1784. align-items: center;
  1785. margin-bottom: 16px;
  1786. .newBand {
  1787. margin: 0 5px 0 10px;
  1788. }
  1789. .title {
  1790. width: 150px;
  1791. // height: 40px;
  1792. // line-height: 40px;
  1793. text-align: right;
  1794. color: #212121;
  1795. font-weight: 600;
  1796. }
  1797. .organSelect {
  1798. width: 260px !important;
  1799. }
  1800. .el-tooltip.micon {
  1801. width: 20px;
  1802. height: 20px;
  1803. position: relative;
  1804. margin-left: 8px;
  1805. // top: 12px;
  1806. }
  1807. }
  1808. .formCollapse {
  1809. border: none;
  1810. ::v-deep .el-collapse-item__header {
  1811. padding: 0 15px;
  1812. border-bottom: none;
  1813. background-color: #f8f8f8;
  1814. }
  1815. ::v-deep .el-collapse-item__wrap {
  1816. padding: 15px;
  1817. border-bottom: none;
  1818. }
  1819. ::v-deep .el-collapse-item__arrow.is-active {
  1820. transform: rotate(-90deg);
  1821. }
  1822. // 默认方向
  1823. ::v-deep .el-collapse-item__arrow,
  1824. .el-tabs__nav {
  1825. transform: rotate(90deg);
  1826. }
  1827. ::v-deep .el-collapse-item__content {
  1828. padding-bottom: 0px !important;
  1829. }
  1830. .wrapTitle {
  1831. font-size: 18px;
  1832. position: relative;
  1833. font-weight: 600;
  1834. margin-left: 12px;
  1835. &::after {
  1836. position: absolute;
  1837. width: 4px;
  1838. height: 18px;
  1839. background: var(--color-primary);
  1840. border-radius: 2px;
  1841. left: -13px;
  1842. top: 14px;
  1843. content: "";
  1844. }
  1845. }
  1846. }
  1847. }
  1848. ::v-deep .el-input__icon.el-icon-date {
  1849. height: 40px !important;
  1850. }
  1851. </style>