payInfoDetail.vue 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449
  1. <template>
  2. <div class="m-container1">
  3. <el-page-header
  4. @back="goback"
  5. style="padding: 20px"
  6. :content="$route.query.payUserType == 'SCHOOL' ? '学校缴费' : '学员缴费'"
  7. >
  8. </el-page-header>
  9. <div class="payInfoWrap">
  10. <div class="left">
  11. <!-- <div class="Wall"></div> -->
  12. <div class="m-core1">
  13. <el-form :inline="true" :model="form" label-width="120px" ref="form">
  14. <div :class="isField ? 'baseWrapFixed' : 'baseWrap'">
  15. <div class="payTitle">
  16. <div class="squrt"></div>
  17. <p>基础项目配置</p>
  18. <div class="payContext">请选择您需要的课程配置</div>
  19. </div>
  20. <div class="checkWrap">
  21. <div
  22. class="checkBtn"
  23. :class="[
  24. teamCourse ? 'active' : '',
  25. teamCourseDisabled ? 'disabled' : '',
  26. ]"
  27. @click.prevent="
  28. () => {
  29. if (teamCourseDisabled) return;
  30. teamCourse = !teamCourse;
  31. if (teamCourse && form.eclass.length < 0) {
  32. form.eclass = [];
  33. form.eclass.push({});
  34. }
  35. if (!teamCourse) {
  36. form.calenderFeeType = 'STUDENT';
  37. }
  38. }
  39. "
  40. >
  41. <div class="checkLeft">
  42. <img src="../images/checkIcon1.png" alt="" />
  43. </div>
  44. <div class="checkRight">
  45. <p>乐团课</p>
  46. <p class="checkSubTitle">创建课程类型标准</p>
  47. </div>
  48. <div class="checTriangle" v-if="teamCourse">
  49. <img src="../images/checkGou.png" alt="" />
  50. </div>
  51. <!-- <el-checkbox
  52. v-model="teamCourse"
  53. :disabled="teamCourseDisabled"
  54. ></el-checkbox> -->
  55. </div>
  56. <div
  57. class="checkBtn"
  58. :class="[
  59. member ? 'active' : '',
  60. memberDisabled ? 'disabled' : '',
  61. ]"
  62. @click.prevent="
  63. () => {
  64. if (memberDisabled) return;
  65. member = !member;
  66. if (member && form.memberList.length < 0) {
  67. form.memberList = [];
  68. form.memberList.push({});
  69. }
  70. }
  71. "
  72. >
  73. <div class="checkLeft">
  74. <img src="../images/checkIcon2.png" alt="" />
  75. </div>
  76. <div class="checkRight">
  77. <p>云教练</p>
  78. <p class="checkSubTitle">乐团训练工具</p>
  79. </div>
  80. <div class="checTriangle" v-if="member">
  81. <img src="../images/checkGou.png" alt="" />
  82. </div>
  83. </div>
  84. <div
  85. v-if="
  86. isShowLeBao &&
  87. tenantId == 1 &&
  88. $route.query.team_status != 'PROGRESS'
  89. "
  90. class="checkBtn"
  91. :class="[
  92. leBao ? 'active' : '',
  93. leBaoDisabled ? 'disabled' : '',
  94. ]"
  95. @click.prevent="
  96. () => {
  97. if (leBaoDisabled) return;
  98. leBao = !leBao;
  99. if (leBao && form.leBaoList.length < 0) {
  100. form.leBaoList = [];
  101. form.leBaoList.push({});
  102. }
  103. }
  104. "
  105. >
  106. <div class="checkLeft">
  107. <img src="../images/checkIcon3.png" alt="" />
  108. </div>
  109. <div class="checkRight">
  110. <p>乐保</p>
  111. <p class="checkSubTitle">乐器维修保养</p>
  112. </div>
  113. <div class="checTriangle" v-if="leBao">
  114. <img src="../images/checkGou.png" alt="" />
  115. </div>
  116. </div>
  117. <div
  118. class="checkBtn"
  119. :class="[
  120. teamActive ? 'active' : '',
  121. teamActiveDisabled ? 'disabled' : '',
  122. ]"
  123. @click.prevent="
  124. () => {
  125. if (teamActiveDisabled) return;
  126. teamActive = !teamActive;
  127. if (teamActive && form.activeList.length < 0) {
  128. form.activeList = [];
  129. form.activeList.push({});
  130. }
  131. }
  132. "
  133. >
  134. <div class="checkLeft">
  135. <img src="../images/checkIcon4.png" alt="" />
  136. </div>
  137. <div class="checkRight">
  138. <p>小课</p>
  139. <p class="checkSubTitle">创建活动课程方案</p>
  140. </div>
  141. <div class="checTriangle" v-if="teamActive">
  142. <img src="../images/checkGou.png" alt="" />
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. <div class="wall" style="height: 184px" v-if="isField"></div>
  148. <div class="coreList">
  149. <payTeamCourse
  150. :form="form"
  151. :charges="charges"
  152. :courseUnitPriceSettingsByType="
  153. organizationCourseUnitPriceSettingsByType
  154. "
  155. v-if="teamCourse"
  156. @create="addExtraClass"
  157. @remove="removeExtraClass"
  158. @moneyChange="syncAllMoney"
  159. @priceChange="priceChange"
  160. />
  161. <payMember
  162. ref="payMember"
  163. :memberRankList="memberRankList"
  164. @moneyChange="syncAllMoney"
  165. @priceChange="priceChange"
  166. :rulesForm="rulesForm"
  167. :organId="organId"
  168. :showAutoActivationFlag="showAutoActivationFlag"
  169. :form="form"
  170. v-if="member"
  171. />
  172. <payLeBao :form="form" v-if="leBao" :leBaoInfo="leBaoInfo" />
  173. <payTeamActive
  174. :form="form"
  175. v-if="teamActive"
  176. :activeList="activeList"
  177. @create="addActive"
  178. @remove="removeActive"
  179. />
  180. <paySchoolInfo
  181. :form="form"
  182. :courseUnitPriceSettingsByType="
  183. organizationCourseUnitPriceSettingsByType
  184. "
  185. :teamCourse="teamCourse"
  186. :member="member"
  187. :teamActive="teamActive"
  188. :leBao="leBao"
  189. @setAllTotal="setAllTotal"
  190. v-if="$route.query.payUserType == 'SCHOOL'"
  191. />
  192. <backMoney
  193. v-if="
  194. $route.query.payUserType == 'SCHOOL' &&
  195. form.currentTotalAmount > 0
  196. "
  197. :form="form"
  198. />
  199. </div>
  200. <div
  201. class="teamCourseList coreList"
  202. v-if="$route.query.payUserType == 'STUDENT'"
  203. >
  204. <div class="coreTitle">
  205. <p>基础信息设置</p>
  206. </div>
  207. <el-row :gutter="20">
  208. <el-col style="width: 430px">
  209. <el-form-item
  210. prop="paymentDate"
  211. :rules="[
  212. {
  213. required: true,
  214. message: '请选择缴费时间',
  215. trigger: 'blur',
  216. },
  217. ]"
  218. ref="paymentDate"
  219. >
  220. <template slot="label">
  221. <p style="position: relative">
  222. <span style="color: #f56c6c; margin-right: 4px">*</span>
  223. 缴费时间
  224. <el-tooltip placement="top" popper-class="mTooltip">
  225. <div slot="content">在该时间段内学员才可缴费</div>
  226. <i
  227. class="el-icon-question"
  228. style="
  229. font-size: 18px;
  230. color: #f56c6c;
  231. position: relative;
  232. top: 2px;
  233. "
  234. ></i>
  235. </el-tooltip>
  236. </p>
  237. </template>
  238. <el-date-picker
  239. v-model="form.paymentDate"
  240. type="daterange"
  241. style="width: 280px"
  242. :picker-options="{ firstDayOfWeek: 1 }"
  243. value-format="yyyy-MM-dd"
  244. range-separator="-"
  245. start-placeholder="开始日期"
  246. end-placeholder="结束日期"
  247. >
  248. </el-date-picker>
  249. </el-form-item>
  250. </el-col>
  251. <el-col style="width: 430px">
  252. <!-- :rules="[
  253. {
  254. required: true,
  255. message: '请选择缴费时间',
  256. trigger: 'blur',
  257. },
  258. ]" -->
  259. <el-form-item prop="paymentDate" ref="paymentDate">
  260. <template slot="label">
  261. <p style="position: relative">
  262. <!-- <span style="color: #f56c6c; margin-right: 4px">*</span> -->
  263. 是否展示售价
  264. <!-- <el-tooltip placement="top" popper-class="mTooltip">
  265. <div slot="content">在该时间段内学员才可缴费</div>
  266. <i
  267. class="el-icon-question"
  268. style="
  269. font-size: 18px;
  270. color: #f56c6c;
  271. position: relative;
  272. top: 2px;
  273. "
  274. ></i>
  275. </el-tooltip> -->
  276. </p>
  277. </template>
  278. <el-select v-model="form.isShowSalePrice">
  279. <el-option label="是" :value="true"> </el-option>
  280. <el-option label="否" :value="false"> </el-option>
  281. </el-select>
  282. </el-form-item>
  283. </el-col>
  284. </el-row>
  285. <el-row>
  286. <el-col class="memoWrap">
  287. <el-form-item
  288. class="memoWrapItem"
  289. prop="memo"
  290. :rules="[
  291. {
  292. required: true,
  293. message: '请输入备注',
  294. trigger: 'blur',
  295. },
  296. ]"
  297. ref="memo"
  298. >
  299. <template slot="label">
  300. <p style="position: relative">
  301. <span style="color: #f56c6c; margin-right: 4px">*</span>
  302. 备注
  303. <el-tooltip placement="top" popper-class="mTooltip">
  304. <div slot="content">本次缴费的内容描述</div>
  305. <i
  306. class="el-icon-question"
  307. style="
  308. font-size: 18px;
  309. color: #f56c6c;
  310. position: relative;
  311. top: 2px;
  312. "
  313. ></i>
  314. </el-tooltip>
  315. </p>
  316. </template>
  317. <el-input
  318. style="width: 100%"
  319. :rows="3"
  320. v-model="form.memo"
  321. type="textarea"
  322. maxlength="50"
  323. show-word-limit
  324. ></el-input>
  325. </el-form-item>
  326. </el-col>
  327. </el-row>
  328. </div>
  329. </el-form>
  330. <div
  331. v-if="
  332. !teamCourse &&
  333. !member &&
  334. !leBao &&
  335. !teamActive &&
  336. $route.query.team_status == 'PROGRESS'
  337. "
  338. >
  339. <empty desc="暂无缴费项目配置" />
  340. </div>
  341. <div v-else style="text-align: center">
  342. <el-button class="submitBtn" @click="submitForm">确认</el-button>
  343. </div>
  344. <!-- <div style="text-align: center">
  345. <el-button class="submitBtn" @click="submitForm">确认</el-button>
  346. </div> -->
  347. </div>
  348. </div>
  349. </div>
  350. <el-dialog
  351. title="报名声部预览"
  352. :visible.sync="dialogSubjectVisible"
  353. width="400px"
  354. class="subjectPreview"
  355. v-if="dialogSubjectVisible"
  356. >
  357. <el-tabs v-model="activeName" type="card">
  358. <el-tab-pane
  359. :label="subject.subName"
  360. lazy
  361. v-for="(subject, index) in dialogSubjectList"
  362. :key="index"
  363. :name="subject.subjectId.toString()"
  364. style="max-height: 500px; overflow-y: auto"
  365. >
  366. <subject-preview
  367. :subjectId="subject.subjectId"
  368. :preViewData="preViewData"
  369. ></subject-preview>
  370. </el-tab-pane>
  371. </el-tabs>
  372. <div>
  373. <el-button
  374. style="width: 100%; border-radius: 0; line-height: 30px"
  375. size="medium"
  376. type="primary"
  377. @click="onSubmit"
  378. >确认提交</el-button
  379. >
  380. </div>
  381. </el-dialog>
  382. </div>
  383. </template>
  384. <script>
  385. import payTeamCourse from "../modals/payTeamCourse";
  386. import payMember from "../modals/payMember";
  387. import payLeBao from "../modals/payLeBao";
  388. import payTeamActive from "../modals/payTeamActive";
  389. import paySchoolInfo from "../modals/paySchoolInfo";
  390. import backMoney from "../modals/backMoney";
  391. import numeral from "numeral";
  392. import dayjs from "dayjs";
  393. import subjectPreview from "@/views/resetTeaming/modals/subject-preview";
  394. import {
  395. chargeTypeList,
  396. musicGroupOrganizationCourseSettingsQueryPage,
  397. } from "@/api/specialSetting";
  398. import { getSysTenantConfig } from "@/views/courseRulersManager/api";
  399. import { sysConfigList } from "@/api/generalSettings";
  400. import {
  401. queryByMusicGroupOrganizationCourseSettingsId,
  402. getAllmemberRank,
  403. musicGroupcreateCalender,
  404. musicGroupresetCalender,
  405. getAutoActivationFlag,
  406. } from "../api";
  407. import {
  408. getMusicGroupPaymentCalenderDetail,
  409. findMusicGroupSubjectInfo,
  410. getAgreement,
  411. } from "@/api/buildTeam";
  412. import { vipGroupActivity } from "@/api/vipSeting";
  413. export default {
  414. components: {
  415. payTeamCourse,
  416. payMember,
  417. payLeBao,
  418. payTeamActive,
  419. subjectPreview,
  420. paySchoolInfo,
  421. backMoney,
  422. },
  423. data() {
  424. return {
  425. form: {
  426. paymentType: "",
  427. memo: "",
  428. eclass: [{}],
  429. memberList: [
  430. {
  431. period: "",
  432. num: "",
  433. name: "",
  434. actualAmount: "",
  435. memberRankSettingId: "",
  436. optionalFlag: null,
  437. autoActivationFlag: false,
  438. },
  439. ],
  440. leBaoList: [{}],
  441. activeList: [{}],
  442. teacherFeeList: [],
  443. isShowMemberForPay: true,
  444. isShowMusicInsuranceForPay: true,
  445. isShowVipCourseForPay: true,
  446. isShowMusicCourseForPay: true,
  447. leixing: "1",
  448. isShowSalePrice: true,
  449. calenderFeeJson: {
  450. discountTotal: "",
  451. allTotal: "",
  452. sutdentNumber: "",
  453. },
  454. calenderFeeType: "STUDENT",
  455. musicGroupCalenderRefundPeriods: [{ refundDate: "", refundAmount: "" }],
  456. currentTotalAmount: 0,
  457. },
  458. teamCourse: false,
  459. member: false,
  460. teamActive: false,
  461. leBao: false,
  462. memberDisabled: false,
  463. teamCourseDisabled: false,
  464. teamActiveDisabled: false,
  465. leBaoDisabled: false,
  466. organizationCourseUnitPriceSettings: null,
  467. baseInfo: null,
  468. courseViewType: null,
  469. charges: null, // 乐团收费类型对应的收费方式
  470. memberRankList: [],
  471. organId: null,
  472. leBaoInfo: null,
  473. isShowLeBao: false,
  474. isSetCourseSettingsId: false,
  475. activeList: [{}],
  476. submitList: [],
  477. organizationCourseUnitPriceSettingsByType: null,
  478. rulesForm: {
  479. minMonthFee: null,
  480. maxMonthFee: null,
  481. minQuarterlyFee: null,
  482. maxQuarterlyFee: null,
  483. minHalfYearFee: null,
  484. maxHalfYearFee: null,
  485. minYearFee: null,
  486. maxYearFee: null,
  487. },
  488. dialogSubjectVisible: false, // 预览
  489. dialogSubjectList: [],
  490. activeName: null,
  491. preViewData: {},
  492. tenantId: null,
  493. isField: false,
  494. showAutoActivationFlag: false,
  495. initDetail: false,
  496. };
  497. },
  498. mounted() {
  499. let tenantConfig = sessionStorage.getItem("tenantConfig");
  500. tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {};
  501. if (tenantConfig.tenantId && tenantConfig.tenantId != "undefined") {
  502. this.tenantId = tenantConfig.tenantId;
  503. }
  504. this.organizationCourseUnitPriceSettings = JSON.parse(
  505. localStorage.getItem("organizationCourseUnitPriceSettings")
  506. );
  507. this.baseInfo = JSON.parse(localStorage.getItem("payMusicBase"));
  508. // 判断乐团状态 缴费类型
  509. window.addEventListener("scroll", this.getScroll);
  510. this.init();
  511. },
  512. beforeDestroy() {
  513. window.removeEventListener("scroll", this.getScroll);
  514. },
  515. methods: {
  516. async init() {
  517. this.organId = this.musicGroup?.organId;
  518. this.courseViewType = this.baseInfo?.musicGroup?.courseViewType;
  519. if (
  520. this.courseViewType != 2 &&
  521. this.$route.query.team_status == "DRAFT"
  522. ) {
  523. // 课程团的创建缴费
  524. this.teamCourse = true;
  525. // 现在课程团不在
  526. // this.teamCourseDisabled = true;
  527. this.form.paymentType = "MUSIC_APPLY";
  528. } else if (
  529. this.courseViewType == 2 &&
  530. this.$route.query.team_status == "DRAFT"
  531. ) {
  532. // 会员团的创建缴费
  533. this.member = true;
  534. this.memberDisabled = true;
  535. } else if (this.$route.query.team_status == "PROGRESS") {
  536. this.leBao = false;
  537. this.leBaoDisabled = true;
  538. }
  539. if (this.$route.query.payUserType == "SCHOOL") {
  540. // this.member = false;
  541. // this.memberDisabled = true;
  542. this.leBao = false;
  543. this.leBaoDisabled = true;
  544. // this.teamActive = false;
  545. // this.teamActiveDisabled = true;
  546. } else {
  547. }
  548. await this.getCharges(); // 续费的选择缴费类型
  549. await this.formatCourse(); // 临时加课的类型选择以及价格
  550. await this.getMemberList(); // 获取会员(团练保信息)
  551. await this.getLeBao(); // 获取乐保
  552. await this.getActive(); // 获取活动
  553. await this.getMemberRules();
  554. await this.getAgreement(); // 获取是否有正在启用得协议
  555. if (this.$route.query.calenderId) {
  556. // 说明是修改 查缴项目详情
  557. this.initDetail = true;
  558. await getMusicGroupPaymentCalenderDetail({
  559. id: this.$route.query.calenderId,
  560. }).then((res) => {
  561. if (res.code == 200) {
  562. if (res.data?.calender?.musicGroupOrganizationCourseSettingId) {
  563. this.form.leixing = "1";
  564. this.form.musicGroupOrganizationCourseSettingId =
  565. res.data?.calender?.musicGroupOrganizationCourseSettingId;
  566. } else {
  567. this.form.leixing = "1";
  568. }
  569. this.$set(this.form, "paymentDate", [
  570. res.data?.calender?.startPaymentDate,
  571. res.data?.calender?.deadlinePaymentDate,
  572. ]);
  573. this.$set(this.form, "memo", res.data?.calender?.memo);
  574. this.$set(
  575. this.form,
  576. "isShowMemberForPay",
  577. res.data?.calender?.paymentItemShowState?.isShowMemberForPay
  578. );
  579. this.$set(
  580. this.form,
  581. "isShowMusicInsuranceForPay",
  582. res.data?.calender?.paymentItemShowState
  583. ?.isShowMusicInsuranceForPay
  584. );
  585. this.$set(
  586. this.form,
  587. "isShowVipCourseForPay",
  588. res.data?.calender?.paymentItemShowState?.isShowVipCourseForPay
  589. );
  590. this.$set(
  591. this.form,
  592. "isShowMusicCourseForPay",
  593. res.data?.calender?.paymentItemShowState?.isShowMusicCourseForPay
  594. );
  595. if (res.data.member) {
  596. // 团练保
  597. this.member = true;
  598. this.$set(this.form, "memberList", [{ ...res.data.member }]);
  599. }
  600. if (res.data.repair) {
  601. this.leBao = true;
  602. this.$set(this.form, "leBaoList", [{ ...res.data.repair }]);
  603. }
  604. if (res.data?.course?.length > 0) {
  605. this.$nextTick(() => {
  606. this.teamCourse = true;
  607. this.isSetCourseSettingsId = true;
  608. this.$set(this.form, "eclass", res.data?.course);
  609. console.log('设置完成eclass')
  610. this.initDetail = true;
  611. this.$set(
  612. this.form,
  613. "payUserType",
  614. res.data?.calender?.payUserType
  615. );
  616. this.$set(
  617. this.form,
  618. "calenderFeeType",
  619. res.data?.calender?.calenderFeeType
  620. );
  621. this.$set(
  622. this.form,
  623. "musicGroupCalenderRefundPeriods",
  624. res.data?.calenderRefundPeriods
  625. );
  626. let calenderFeeJson = res.data?.calender?.calenderFeeJson;
  627. if (calenderFeeJson) {
  628. calenderFeeJson = JSON.parse(calenderFeeJson);
  629. this.$set(this.form, "calenderFeeJson", calenderFeeJson);
  630. if (this.form.calenderFeeType == "TEACHER") {
  631. this.$set(
  632. this.form,
  633. "teacherFeeList",
  634. calenderFeeJson.teacherFeeList
  635. );
  636. }
  637. }
  638. });
  639. }
  640. if (res.data?.activity?.length > 0) {
  641. this.teamActive = true;
  642. this.$set(this.form, "activeList", res.data.activity);
  643. this.form.activeList.forEach((active) => {
  644. active.vipGroupCategoryNames = active.categoryName;
  645. });
  646. }
  647. }
  648. });
  649. }
  650. if (this.submitList.length > 0) {
  651. this.$bus.$emit("showguide", this.submitList);
  652. }
  653. },
  654. getActive() {
  655. return vipGroupActivity({
  656. organId: this.organId,
  657. rows: 10,
  658. page: 1,
  659. status: "PROGRESS",
  660. activityChannel: 1,
  661. enable: true,
  662. }).then((res) => {
  663. if (res.code == 200) {
  664. this.activeList = res.data.rows;
  665. if (this.activeList.length <= 0) {
  666. this.submitList.push("teamActive");
  667. // this.$bus.$emit("showguide", ["teamCourseFee"]);
  668. }
  669. }
  670. });
  671. },
  672. async getAgreement() {
  673. try {
  674. const res = await getAgreement();
  675. if (!res.data) {
  676. this.submitList.push("agreement");
  677. }
  678. } catch (e) {}
  679. },
  680. async getMemberRules() {
  681. try {
  682. const res = await sysConfigList({ group: "DEFAULT" });
  683. const paramName = "cloud_price_range";
  684. res.data.forEach((item) => {
  685. if (item.paramName == paramName) {
  686. const itemValue = item.paranValue
  687. ? JSON.parse(item.paranValue)
  688. : null;
  689. if (itemValue) {
  690. this.rulesForm = itemValue;
  691. }
  692. }
  693. });
  694. } catch (e) {
  695. console.log(e);
  696. }
  697. },
  698. async getLeBao() {
  699. try {
  700. const res = await getSysTenantConfig({ group: "MUSIC_REPAIR" });
  701. this.leBaoInfo = res.data;
  702. res.data.forEach((element) => {
  703. if (element.id == 188) {
  704. this.isShowLeBao = !!element.paranValue;
  705. }
  706. });
  707. // this.$forceUpdate()
  708. } catch (e) {
  709. console.log(e);
  710. }
  711. },
  712. async getMemberList() {
  713. try {
  714. const res = await getAllmemberRank({ isDefault: 0 });
  715. this.memberRankList = res.data;
  716. // 获取是否展示会员是否自动生效
  717. const memberRes = await getAutoActivationFlag();
  718. this.showAutoActivationFlag = memberRes.data;
  719. } catch (e) {
  720. console.log(e);
  721. }
  722. },
  723. async getCharges() {
  724. const organId = this.musicGroup?.organId;
  725. const chargeTypeId = this.musicGroup?.chargeTypeId;
  726. this.chargeTypeName = this.musicGroup?.chargeTypeName;
  727. try {
  728. const res = await musicGroupOrganizationCourseSettingsQueryPage({
  729. row: 9999,
  730. chargeTypeId,
  731. organId,
  732. });
  733. const ids = res.data.rows.map((item) => item.id);
  734. if (!ids.includes(this.form.musicGroupOrganizationCourseSettingId)) {
  735. this.$set(this.form, "musicGroupOrganizationCourseSettingId", null);
  736. }
  737. this.charges = res.data.rows;
  738. // this.charges =[];
  739. if (this.charges.length <= 0) {
  740. this.submitList.push("teamCourseType");
  741. } else {
  742. if (this.form.leixing == 1 && this.teamCourse) {
  743. this.$set(
  744. this.form,
  745. "musicGroupOrganizationCourseSettingId",
  746. this.charges[0].id
  747. );
  748. }
  749. }
  750. } catch (error) {}
  751. },
  752. goback() {
  753. let query = { ...this.$route.query };
  754. query.calenderId = null;
  755. if (query.type == "resetTeam") {
  756. this.$store.dispatch("delVisitedViews", this.$route);
  757. this.$router.push({
  758. path: "/business/resetTeaming",
  759. query,
  760. });
  761. } else if (query.type == "look") {
  762. this.$store.dispatch("delVisitedViews", this.$route);
  763. this.$router.push({
  764. path: "/business/resetTeaming",
  765. query,
  766. });
  767. } else if (query.type == "teamDraft" || query.type == "feeAudit") {
  768. this.$store.dispatch("delVisitedViews", this.$route);
  769. this.$router.push({
  770. path: "/business/resetTeaming",
  771. query,
  772. });
  773. }
  774. },
  775. formatCourse() {
  776. // 格式化课程类型
  777. const organId = this.musicGroup?.organId;
  778. const chargeTypeId = this.musicGroup?.chargeTypeId;
  779. const _ = {};
  780. const list = (this.organizationCourseUnitPriceSettings || []).filter(
  781. (item) =>
  782. organId &&
  783. organId == item.organId &&
  784. chargeTypeId &&
  785. chargeTypeId == item.chargeTypeId
  786. );
  787. for (const item of list) {
  788. _[item.courseType] = item;
  789. }
  790. this.organizationCourseUnitPriceSettingsByType = _;
  791. return _;
  792. },
  793. priceChange(item, index) {
  794. const _ = [...this.form.eclass];
  795. const active =
  796. this.organizationCourseUnitPriceSettingsByType[item.courseType] || {};
  797. const price = Math.round(
  798. numeral(active.unitPrice || 1)
  799. .multiply(item.courseTotalMinuties || 1)
  800. .value()
  801. );
  802. item.courseCurrentPrice = price;
  803. item.courseOriginalPrice = price;
  804. _[index] = item;
  805. this.$set(this.form, "eclass", [..._]);
  806. this.syncAllMoney();
  807. },
  808. syncAllMoney() {
  809. let money = 0;
  810. let first = 0;
  811. let other = 0;
  812. let classs = this.form.eclass;
  813. for (const item of classs) {
  814. money += item.courseCurrentPrice;
  815. if (this.cycles && this.cycles.length) {
  816. if (item.isStudentOptional) {
  817. first += item.courseCurrentPrice;
  818. } else {
  819. const floorMoney = Math.floor(
  820. item.courseCurrentPrice / this.cycles.length
  821. );
  822. const remainder = item.courseCurrentPrice % this.cycles.length;
  823. first += floorMoney + remainder;
  824. other += floorMoney;
  825. }
  826. }
  827. }
  828. // if (!money) {
  829. // this.$set(this.cycle, "paymentAmount", undefined);
  830. // } else {
  831. // this.$set(this.cycle, "paymentAmount", money);
  832. // }
  833. // money += parseFloat(this.memberForm.memberPaymentAmount || 0);
  834. // this.money = money;
  835. return money;
  836. },
  837. addExtraClass() {
  838. this.form.eclass.push({});
  839. },
  840. addActive() {
  841. this.form.activeList.push({});
  842. },
  843. removeActive(index) {
  844. this.form.activeList[index] = null;
  845. this.$set(
  846. this.form,
  847. "activeList",
  848. this.form.activeList.filter((item) => !!item)
  849. );
  850. },
  851. removeExtraClass(index) {
  852. this.form.eclass[index] = null;
  853. this.$set(
  854. this.form,
  855. "eclass",
  856. this.form.eclass.filter((item) => !!item)
  857. );
  858. // this.form.eclass = this.form.eclass.filter((item) => !!item);
  859. },
  860. async onPreview() {
  861. // 开始预览
  862. const musicGroupId = this.$route.query.id;
  863. await findMusicGroupSubjectInfo({ musicGroupId: musicGroupId }).then(
  864. (res) => {
  865. if (res.code == 200) {
  866. this.dialogSubjectList = res.data.musicGroupSubjectPlans;
  867. // 默认预览第一个
  868. if (this.dialogSubjectList.length <= 0) {
  869. this.$message.error("请先设置声部信息");
  870. return;
  871. }
  872. this.activeName = this.dialogSubjectList[0].subjectId.toString();
  873. this.dialogSubjectVisible = true;
  874. } else {
  875. this.$message.warning("没有可预览的声部");
  876. }
  877. }
  878. );
  879. },
  880. submitForm() {
  881. this.$refs.form.validate(async (isok, obj) => {
  882. if (isok) {
  883. // 学校缴费没有预览
  884. if (this.$route.query.payUserType == "SCHOOL") {
  885. this.$confirm("是否创建缴费?", "提示", {
  886. confirmButtonText: "确定",
  887. cancelButtonText: "取消",
  888. type: "warning",
  889. })
  890. .then(() => {
  891. this.onSubmit();
  892. })
  893. .catch(() => {});
  894. } else {
  895. const preViewData = this.formatPreviewData();
  896. this.preViewData = preViewData;
  897. await this.onPreview();
  898. }
  899. } else {
  900. this.$nextTick(() => {
  901. this.scrollView(obj);
  902. });
  903. }
  904. });
  905. },
  906. onSubmit() {
  907. this.$refs.form.validate(async (isok) => {
  908. if (isok) {
  909. let obj = this.fommatDate();
  910. if(this.form.payUserType=='SCHOOL'){
  911. let total = 0;
  912. this.form.musicGroupCalenderRefundPeriods.forEach(item=>{
  913. total+=item.refundAmount*1
  914. })
  915. if(total !=this.form.currentTotalAmount){
  916. console.log(total,this.form.currentTotalAmount)
  917. this.$message.error('付款金额与回款金额不一致,请重新设置')
  918. return
  919. }
  920. }
  921. if (this.$route.query.calenderId) {
  922. obj.calenderId = this.$route.query.calenderId;
  923. try {
  924. const res = await musicGroupresetCalender(obj);
  925. if (res.code == 200) {
  926. this.$message.success("修改缴费成功");
  927. this.goback();
  928. }
  929. if (res.code == 207) {
  930. await this.$confirm(
  931. res.msg || `当前乐团存在未排课的缴费项目,请再次确认操作`,
  932. "提示",
  933. {
  934. type: "warning",
  935. }
  936. );
  937. obj.confirmCreate = true;
  938. await musicGroupresetCalender(obj);
  939. this.$message.success("修改缴费成功");
  940. this.goback();
  941. }
  942. } catch (e) {
  943. console.log(e);
  944. }
  945. } else {
  946. try {
  947. const res = await musicGroupcreateCalender(obj);
  948. if (res.code == 200) {
  949. this.$message.success("创建缴费成功");
  950. this.goback();
  951. }
  952. if (res.code == 207) {
  953. await this.$confirm(
  954. res.msg || `当前乐团存在未排课的缴费项目,请再次确认操作`,
  955. "提示",
  956. {
  957. type: "warning",
  958. }
  959. );
  960. obj.confirmCreate = true;
  961. await musicGroupcreateCalender(obj);
  962. this.$message.success("创建缴费成功");
  963. this.goback();
  964. }
  965. } catch (e) {
  966. console.log(e);
  967. }
  968. }
  969. }
  970. });
  971. },
  972. scrollView(object) {
  973. console.log(object);
  974. for (const i in object) {
  975. let dom = this.$refs[i];
  976. // 这里是针对遍历的情况(多个输入框),取值为数组
  977. if (Object.prototype.toString.call(dom) !== "[object Object]") {
  978. dom = dom[0];
  979. }
  980. // 第一种方法(包含动画效果)
  981. dom.$el.scrollIntoView({
  982. // 滚动到指定节点
  983. // 值有start,center,end,nearest,当前显示在视图区域中间
  984. block: "center",
  985. // 值有auto、instant,smooth,缓动动画(当前是慢速的)
  986. behavior: "smooth",
  987. });
  988. break; // 跳出循环了
  989. }
  990. },
  991. formatPreviewData() {
  992. // 格式化预览数据
  993. const form = this.form;
  994. // 重置小班课数据
  995. let tmpActiveList = form.activeList?.length > 0 ? form.activeList : [];
  996. let activeList = [];
  997. if (tmpActiveList.length > 0) {
  998. tmpActiveList.forEach((active) => {
  999. if (active.activityId) {
  1000. active.categoryName = active.vipGroupCategoryNames;
  1001. activeList.push(active);
  1002. }
  1003. });
  1004. }
  1005. let memberObj =
  1006. form.memberList?.length > 0 ? { ...form.memberList[0] } : null;
  1007. // 获取会员名称
  1008. if (memberObj) {
  1009. this.memberRankList.forEach((item) => {
  1010. if (item.id == memberObj.memberRankSettingId) {
  1011. memberObj.name = item.name;
  1012. }
  1013. });
  1014. }
  1015. // console.log(memberObj, 'memberObj', activeList)
  1016. let tempCourseList = form.eclass?.length > 0 ? form.eclass : [];
  1017. let courseList = [];
  1018. if (tempCourseList.length > 0) {
  1019. tempCourseList.forEach((course) => {
  1020. if (course.courseType) {
  1021. course.isStudentOptional = true;
  1022. courseList.push(course);
  1023. }
  1024. });
  1025. }
  1026. return {
  1027. payUserType: this.$route.query.payUserType,
  1028. musicGroup: this.musicGroup,
  1029. paymentCalender: {
  1030. activity: [...activeList], // 小班课
  1031. course: courseList, // 课程
  1032. member: memberObj, // 云教练
  1033. memberPrivilegesItemList: [], // 会员基本内容
  1034. repair:
  1035. form.leBaoList?.length > 0 &&
  1036. this.isShowLeBao &&
  1037. this.$route.query.team_status != "PROGRESS"
  1038. ? { ...form.leBaoList[0], optionalFlag: false }
  1039. : null, // 乐保
  1040. },
  1041. isShowMemberForPay: form.isShowMemberForPay,
  1042. isShowMusicInsuranceForPay: form.isShowMusicInsuranceForPay,
  1043. isShowVipCourseForPay: form.isShowVipCourseForPay,
  1044. isShowMusicCourseForPay: form.isShowMusicCourseForPay,
  1045. };
  1046. },
  1047. fommatDate() {
  1048. if (this.$route.query.payUserType == "STUDENT") {
  1049. return {
  1050. payUserType: this.$route.query.payUserType,
  1051. musicGroupOrganizationCourseSettingId:
  1052. this.form.musicGroupOrganizationCourseSettingId || null,
  1053. memo: this.form.memo,
  1054. startPaymentDate: this.form.paymentDate[0],
  1055. deadlinePaymentDate: this.form.paymentDate[1],
  1056. calenderActivityList:
  1057. this.form.activeList?.length > 0 ? this.form.activeList : null,
  1058. musicRepair:
  1059. this.form.leBaoList?.length > 0
  1060. ? { ...this.form.leBaoList[0] }
  1061. : null,
  1062. calenderMember:
  1063. this.form.memberList?.length > 0 &&
  1064. this.form.memberList[0]?.memberRankSettingId
  1065. ? { ...this.form.memberList[0] }
  1066. : null,
  1067. musicGroupPaymentCalenderCourseSettingsList:
  1068. this.form.eclass?.length > 0 ? this.form.eclass : null,
  1069. musicGroupId: this.$route.query.id,
  1070. paymentItemShowState: JSON.stringify({
  1071. isShowMemberForPay: this.form.isShowMemberForPay,
  1072. isShowMusicInsuranceForPay: this.form.isShowMusicInsuranceForPay,
  1073. isShowVipCourseForPay: this.form.isShowVipCourseForPay,
  1074. isShowMusicCourseForPay: this.form.isShowMusicCourseForPay,
  1075. }),
  1076. };
  1077. } else {
  1078. let calenderFeeJson = this.form.calenderFeeJson;
  1079. if (this.form.calenderFeeType == "TEACHER") {
  1080. calenderFeeJson.teacherFeeList = this.form.teacherFeeList;
  1081. }
  1082. return {
  1083. payUserType: this.$route.query.payUserType,
  1084. musicGroupOrganizationCourseSettingId:
  1085. this.form.musicGroupOrganizationCourseSettingId || null,
  1086. memo: this.form.memo,
  1087. calenderActivityList:
  1088. this.form.activeList?.length > 0 ? this.form.activeList : null,
  1089. musicRepair:
  1090. this.form.leBaoList?.length > 0
  1091. ? { ...this.form.leBaoList[0] }
  1092. : null,
  1093. calenderMember:
  1094. this.form.memberList?.length > 0 &&
  1095. this.form.memberList[0]?.memberRankSettingId
  1096. ? { ...this.form.memberList[0] }
  1097. : null,
  1098. musicGroupPaymentCalenderCourseSettingsList:
  1099. this.form.eclass?.length > 0 ? this.form.eclass : null,
  1100. musicGroupId: this.$route.query.id,
  1101. paymentItemShowState: JSON.stringify({
  1102. isShowMemberForPay: this.form.isShowMemberForPay,
  1103. isShowMusicInsuranceForPay: this.form.isShowMusicInsuranceForPay,
  1104. isShowVipCourseForPay: this.form.isShowVipCourseForPay,
  1105. isShowMusicCourseForPay: this.form.isShowMusicCourseForPay,
  1106. }),
  1107. calenderFeeType: this.form.calenderFeeType,
  1108. calenderFeeJson: JSON.stringify(calenderFeeJson),
  1109. musicGroupCalenderRefundPeriods:
  1110. this.form.musicGroupCalenderRefundPeriods,
  1111. currentTotalAmount: this.form.currentTotalAmount,
  1112. };
  1113. }
  1114. },
  1115. getScroll() {
  1116. this.scrollTop =
  1117. window.pageYOffset ||
  1118. document.documentElement.scrollTop ||
  1119. document.body.scrollTop;
  1120. if (!!this.scrollTop && this.scrollTop >= 70) {
  1121. this.isField = true;
  1122. } else {
  1123. this.isField = false;
  1124. }
  1125. },
  1126. setAllTotal(val) {
  1127. this.form.calenderFeeJson.allTotal = val;
  1128. this.form.currentTotalAmount =
  1129. this.form.calenderFeeJson.allTotal -
  1130. this.form.calenderFeeJson.discountTotal;
  1131. this.$set(this.form, "currentTotalAmount", this.form.currentTotalAmount);
  1132. },
  1133. currentTotalAmount(val) {
  1134. this.$set(this.form, "currentTotalAmount", val);
  1135. },
  1136. },
  1137. watch: {
  1138. teamCourse(val) {
  1139. if (!val) {
  1140. this.$set(this.form, "eclass", [{}]);
  1141. this.$set(this.form, "leixing", "1");
  1142. this.$set(this.form, "musicGroupOrganizationCourseSettingId", null);
  1143. }
  1144. },
  1145. member(val) {
  1146. if (!val) {
  1147. this.$set(this.form, "memberList", [{}]);
  1148. }
  1149. },
  1150. teamActive(val) {
  1151. if (!val) {
  1152. this.$set(this.form, "activeList", [{}]);
  1153. }
  1154. },
  1155. leBao(val) {
  1156. if (!val) {
  1157. this.$set(this.form, "leBaoList", [{}]);
  1158. }
  1159. },
  1160. "form.eclass": {
  1161. handler(newValue) {
  1162. if (this.initDetail) {
  1163. this.initDetail = false;
  1164. return;
  1165. }
  1166. let arr = [];
  1167. newValue.forEach((item) => {
  1168. arr.push({
  1169. courseType: item.courseType,
  1170. teacherNumber: 0,
  1171. courseNumber: 0,
  1172. courseCurrentPrice: 0,
  1173. });
  1174. });
  1175. this.$set(this.form, "teacherFeeList", arr);
  1176. },
  1177. deep: true,
  1178. },
  1179. "form.currentTotalAmount"(val) {
  1180. // console.log(val,'form.currentTotalAmount');
  1181. // this.$forceUpdate()
  1182. },
  1183. async "form.musicGroupOrganizationCourseSettingId"(val) {
  1184. // && !this.rowDetail !this.$route.query.calenderId
  1185. if (val && !this.isSetCourseSettingsId) {
  1186. try {
  1187. const res = await queryByMusicGroupOrganizationCourseSettingsId({
  1188. id: val,
  1189. });
  1190. let CourseSettingDetail = res.data.map((course) => {
  1191. return {
  1192. ...course,
  1193. };
  1194. });
  1195. this.$set(this.form, "eclass", res.data);
  1196. // this.syncAllMoney();
  1197. } catch (error) {}
  1198. }
  1199. this.isSetCourseSettingsId = false;
  1200. },
  1201. "form.leixing"(val) {
  1202. this.cycles = [{}];
  1203. this.collapse = [0];
  1204. this.cycle = {};
  1205. if (val != "1") {
  1206. this.$set(
  1207. this.form,
  1208. "musicGroupOrganizationCourseSettingId",
  1209. undefined
  1210. );
  1211. }
  1212. // this.$set(this.cycle, "paymentAmount", undefined);
  1213. // this.$set(this.other, "memo", null);
  1214. if (val === "1" && !this.isSetCourseSettingsId) {
  1215. this.$set(this.form, "eclass", []);
  1216. } else if (val === "2") {
  1217. this.$set(this.form, "eclass", [{}]);
  1218. }
  1219. this.isSetCourseSettingsId = false;
  1220. },
  1221. },
  1222. computed: {
  1223. musicGroup() {
  1224. return this.baseInfo?.musicGroup;
  1225. },
  1226. },
  1227. };
  1228. </script>
  1229. <style lang="scss" scoped>
  1230. @import "~@/views/resetTeaming/modals/pay.scss";
  1231. .memoWrap {
  1232. // width: calc(100% - 860px);
  1233. width: 860px;
  1234. .memoWrapItem {
  1235. display: block;
  1236. ::v-deep .el-form-item__content {
  1237. display: inline-block;
  1238. width: calc(100% - 140px);
  1239. }
  1240. }
  1241. }
  1242. .Wall {
  1243. height: 15px;
  1244. background-color: #f2f2f2;
  1245. }
  1246. ::v-deep .el-form-item__label:before {
  1247. content: "" !important;
  1248. position: absolute;
  1249. color: transparent;
  1250. margin-right: 4px;
  1251. }
  1252. .payInfoWrap {
  1253. .submitBtn {
  1254. // width: 121px;
  1255. // height: 41px;
  1256. background: var(--color-primary);
  1257. border-radius: 7px;
  1258. // margin: 20px auto;
  1259. // line-height: 40px;
  1260. color: #fff;
  1261. text-align: center;
  1262. cursor: pointer;
  1263. }
  1264. .baseWrap {
  1265. padding: 20px;
  1266. background-color: #fff;
  1267. }
  1268. .baseWrapFixed {
  1269. top: 105px;
  1270. left: 210px; // 205
  1271. position: fixed;
  1272. background-color: #fff;
  1273. width: calc(100% - 220px);
  1274. z-index: 100;
  1275. padding: 20px;
  1276. box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 3px 3px;
  1277. }
  1278. .left {
  1279. ::v-deep .el-checkbox {
  1280. padding: 8px 10px 7px 10px;
  1281. border-radius: 4px;
  1282. }
  1283. ::v-deep .el-checkbox .el-checkbox__inner {
  1284. border-radius: 50%;
  1285. border: 1px solid var(--color-primary);
  1286. width: 16px;
  1287. height: 16px;
  1288. &:after {
  1289. height: 8px;
  1290. left: 5px;
  1291. }
  1292. }
  1293. ::v-deep .el-checkbox__inner:hover {
  1294. background-color: var(--color-primary);
  1295. }
  1296. ::v-deep .el-checkbox.is-checked {
  1297. border-color: #fff;
  1298. color: #fff;
  1299. }
  1300. .payTitle {
  1301. display: flex;
  1302. flex-direction: row;
  1303. align-items: center;
  1304. font-size: 18px;
  1305. font-weight: 600;
  1306. color: #1a1a1a;
  1307. height: 25px;
  1308. margin-bottom: 15px;
  1309. p {
  1310. line-height: 25px;
  1311. }
  1312. .squrt {
  1313. width: 3px;
  1314. height: 16px;
  1315. background: var(--color-primary);
  1316. margin-right: 8px;
  1317. position: relative;
  1318. top: -1px;
  1319. border-radius: 2px;
  1320. }
  1321. .payContext {
  1322. color: var(--color-primary);
  1323. border: 1px solid var(--color-primary);
  1324. font-size: 14px;
  1325. line-height: 22px;
  1326. border-radius: 3px;
  1327. padding: 0 5px;
  1328. margin-left: 12px;
  1329. }
  1330. }
  1331. .checkWrap {
  1332. display: flex;
  1333. flex-direction: row;
  1334. justify-content: flex-start;
  1335. align-items: center;
  1336. .checkBtn.active {
  1337. border: 1px solid var(--color-primary);
  1338. }
  1339. .checkBtn {
  1340. position: relative;
  1341. background-color: #fefefe;
  1342. margin-right: 12px;
  1343. padding: 22px;
  1344. display: flex;
  1345. flex-direction: row;
  1346. align-items: center;
  1347. border-radius: 6px;
  1348. border: 1px solid #dfe8ec;
  1349. cursor: pointer;
  1350. height: 104px;
  1351. width: 251px;
  1352. overflow: hidden;
  1353. &:hover {
  1354. border: 1px solid var(--color-primary);
  1355. }
  1356. p {
  1357. height: 41px;
  1358. line-height: 41px;
  1359. }
  1360. .checkLeft {
  1361. width: 60px;
  1362. height: 60px;
  1363. margin-right: 16px;
  1364. img {
  1365. width: 100%;
  1366. }
  1367. }
  1368. .checkRight {
  1369. p {
  1370. height: 26px;
  1371. font-size: 19px;
  1372. font-weight: 600;
  1373. color: #1a1a1a;
  1374. line-height: 26px;
  1375. }
  1376. .checkSubTitle {
  1377. font-size: 14px;
  1378. font-weight: 400;
  1379. color: var(--color-primary);
  1380. line-height: 20px;
  1381. }
  1382. }
  1383. .checTriangle {
  1384. border-bottom: 44px solid var(--color-primary);
  1385. border-left: 44px solid transparent;
  1386. position: absolute;
  1387. right: 0;
  1388. bottom: 0;
  1389. width: 0;
  1390. height: 0;
  1391. img {
  1392. width: 19px;
  1393. height: 16px;
  1394. position: absolute;
  1395. top: 22px;
  1396. right: 5px;
  1397. }
  1398. }
  1399. }
  1400. // .checkBtn.disabled {
  1401. // cursor: not-allowed;
  1402. // color: #d9d9d9;
  1403. // background-color: #f2f2f2 !important;
  1404. // ::v-deep .el-checkbox__inner {
  1405. // background-color: #fff !important;
  1406. // border-color: #d9d9d9;
  1407. // color: #fff;
  1408. // &::after {
  1409. // border-color: #d9d9d9;
  1410. // }
  1411. // }
  1412. // &:hover {
  1413. // background-color: #f2f2f2 !important;
  1414. // color: #d9d9d9;
  1415. // ::v-deep .el-checkbox__inner {
  1416. // background-color: #fff !important;
  1417. // }
  1418. // }
  1419. // }
  1420. }
  1421. }
  1422. }
  1423. .coreList {
  1424. // margin: 14px;
  1425. }
  1426. </style>
  1427. <style lang="less" scoped>
  1428. ::v-deep .el-dialog__body {
  1429. padding: 15px 0 0;
  1430. }
  1431. .empty {
  1432. background-color: #fff;
  1433. padding-bottom: 20px;
  1434. }
  1435. </style>