vipActiveList.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. <template>
  2. <div class="m-container">
  3. <h2>
  4. <div class="squrt"></div>
  5. 活动管理
  6. </h2>
  7. <div class="m-core">
  8. <div class="btnList" style="margin-bottom: 20px">
  9. <el-button
  10. type="primary"
  11. v-permission="'/vipNewActive'"
  12. @click="gotoNewActive"
  13. >新建</el-button
  14. >
  15. <!-- <el-button
  16. type="primary"
  17. style="margin-bottom: 20px"
  18. v-permission="'export/vipGroupActivity'"
  19. @click="onExport"
  20. >活动导出</el-button
  21. > -->
  22. <!-- <el-button
  23. type="primary"
  24. style="margin-bottom: 20px"
  25. v-permission="'export/vipGroupActivity'"
  26. @click="onActiveExport"
  27. >活动资格导出</el-button
  28. > -->
  29. </div>
  30. <save-form
  31. :inline="true"
  32. class="searchForm"
  33. ref="searchForm"
  34. @submit="search"
  35. @reset="onReset"
  36. :model="searchForm"
  37. >
  38. <el-form-item prop="search">
  39. <el-input
  40. v-model.trim="searchForm.search"
  41. clearable
  42. placeholder="活动编号/名称"
  43. ></el-input>
  44. </el-form-item>
  45. <el-form-item prop="organId">
  46. <el-select
  47. class="multiple"
  48. filterable
  49. style="width: 180px !important"
  50. v-model.trim="searchForm.organId"
  51. clearable
  52. placeholder="请选择分部"
  53. >
  54. <el-option
  55. v-for="(item, index) in selects.branchs"
  56. :key="index"
  57. :label="item.name"
  58. :value="item.id"
  59. ></el-option>
  60. </el-select>
  61. </el-form-item>
  62. <el-form-item prop="activityChannel">
  63. <el-select
  64. filterable
  65. style="width: 180px !important"
  66. v-model="searchForm.activityChannel"
  67. clearable
  68. placeholder="活动渠道"
  69. >
  70. <el-option label="乐团小课" :value="'1'"></el-option>
  71. <el-option label="常规小课" :value="'2'"></el-option>
  72. <el-option label="学生购买" :value="'3'"></el-option>
  73. </el-select>
  74. </el-form-item>
  75. <el-form-item prop="status">
  76. <el-select
  77. filterable
  78. style="width: 180px !important"
  79. v-model="searchForm.status"
  80. clearable
  81. placeholder="活动状态"
  82. >
  83. <el-option label="草稿" :value="'DRAFT'"></el-option>
  84. <el-option label="正式" :value="'PROGRESS'"></el-option>
  85. </el-select>
  86. </el-form-item>
  87. <el-form-item prop="enable">
  88. <el-select
  89. filterable
  90. style="width: 180px !important"
  91. v-model="searchForm.enable"
  92. clearable
  93. @clear="resetEnable"
  94. placeholder="是否启用"
  95. >
  96. <el-option label="是" :value="true"></el-option>
  97. <el-option label="否" :value="false"></el-option>
  98. </el-select>
  99. </el-form-item>
  100. <el-form-item prop="allowOnlineToOffline">
  101. <el-select
  102. v-model.trim="searchForm.allowOnlineToOffline"
  103. placeholder="请选择课程调整方式"
  104. clearable
  105. >
  106. <el-option
  107. :label="item.label"
  108. :value="item.value"
  109. v-for="item in vipResetTypeList"
  110. :key="item.value"
  111. ></el-option>
  112. </el-select>
  113. </el-form-item>
  114. <el-form-item prop="applyToStudentType">
  115. <el-select
  116. filterable
  117. style="width: 180px !important"
  118. v-model="searchForm.applyToStudentType"
  119. clearable
  120. placeholder="适用学员"
  121. >
  122. <el-option label="新学员" value="1"></el-option>
  123. <el-option label="老学员" value="0"></el-option>
  124. <el-option label="会员" value="2"></el-option>
  125. <el-option label="非会员" value="3"></el-option>
  126. </el-select>
  127. </el-form-item>
  128. <el-form-item>
  129. <el-button native-type="submit" type="danger">搜索</el-button>
  130. </el-form-item>
  131. <el-form-item>
  132. <el-button type="primary" native-type="reset">重置</el-button>
  133. </el-form-item>
  134. </save-form>
  135. <div class="tableWrap">
  136. <el-table
  137. :data="tableList"
  138. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  139. >
  140. <el-table-column align="center" prop="id" label="活动编号">
  141. <template slot-scope="scope">
  142. <copy-text>{{ scope.row.id }}</copy-text>
  143. </template>
  144. </el-table-column>
  145. <el-table-column align="center" prop="name" label="活动名称">
  146. <template slot-scope="scope">
  147. <copy-text>{{ scope.row.name }}</copy-text>
  148. </template>
  149. </el-table-column>
  150. <el-table-column align="center" prop="activityType" label="活动渠道">
  151. <template slot-scope="scope">
  152. <div>
  153. <!-- {{ scope.row.activityChannel == 1 ? "乐团小课" : "常规小课" }} -->
  154. {{ scope.row.activityChannel == 1 ? "乐团小课" : "" }}
  155. {{ scope.row.activityChannel == 2 ? "乐团小课" : "" }}
  156. {{ scope.row.activityChannel == 3 ? "学生购买" : "" }}
  157. </div>
  158. </template>
  159. </el-table-column>
  160. <el-table-column align="center" prop="activityType" label="活动类型">
  161. <template slot-scope="scope">
  162. <div>
  163. {{ scope.row.activityType ? "会员活动" : "课程活动" }}
  164. </div>
  165. </template>
  166. </el-table-column>
  167. <el-table-column align="center" prop="type" label="活动购买">
  168. <template slot-scope="scope">
  169. <div>
  170. <p v-if="scope.row.activityType">会员</p>
  171. <p v-else>{{ scope.row.courseType | courseTypeFormat }}</p>
  172. </div>
  173. </template>
  174. </el-table-column>
  175. <!-- <el-table-column
  176. align="center"
  177. prop="type"
  178. :formatter="fommatterType"
  179. label="是否赠送"
  180. ></el-table-column> -->
  181. <el-table-column align="center" prop="type" label="赠送类型">
  182. <template slot-scope="scope">
  183. <div>
  184. <p v-if="scope.row.giveCourseType">
  185. {{ scope.row.giveCourseType | courseTypeFormat }}
  186. </p>
  187. <p v-else>--</p>
  188. </div>
  189. </template>
  190. </el-table-column>
  191. <el-table-column align="center" width="150px" label="活动持续时间">
  192. <template slot-scope="scope">
  193. <div>
  194. <p>{{ scope.row.startTime }}</p>
  195. <p>{{ scope.row.endTime }}</p>
  196. </div>
  197. </template>
  198. </el-table-column>
  199. <el-table-column
  200. align="center"
  201. label="活动状态"
  202. prop="status"
  203. :formatter="fommatterStatus"
  204. ></el-table-column>
  205. <!-- <el-table-column
  206. align="center"
  207. prop="vipGroupCategoryNames"
  208. label="适用课程形式"
  209. ></el-table-column> -->
  210. <!-- <el-table-column
  211. align="center"
  212. label="适用课时类型"
  213. :formatter="fommatterCourseType"
  214. ></el-table-column>
  215. <el-table-column
  216. width="135"
  217. align="center"
  218. label="课程调整方式"
  219. :formatter="fommatterResetType"
  220. ></el-table-column>
  221. <el-table-column
  222. align="center"
  223. label="使用学员"
  224. :formatter="formatStudentType"
  225. ></el-table-column> -->
  226. <!-- <el-table-column label="结算标准">
  227. <template slot-scope="scope">
  228. <div>
  229. <p>{{ scope.row.salarySettlementJson | onlineDesc }}</p>
  230. <p>{{ scope.row.salarySettlementJson | unonlineDesc }}</p>
  231. </div>
  232. </template>
  233. </el-table-column> -->
  234. <!-- <el-table-column align="center" label="结算说明">
  235. <template slot-scope="scope">
  236. <div>
  237. <p>{{ scope.row.salarySettlementJson | onlineDesc }}</p>
  238. <p>{{ scope.row.salarySettlementJson | unonlineDesc }}</p>
  239. </div>
  240. </template>
  241. </el-table-column> -->
  242. <el-table-column
  243. align="center"
  244. label="是否启用"
  245. prop="enable"
  246. :formatter="fommatterEnable"
  247. ></el-table-column>
  248. <!-- <el-table-column align="center" width="150px" label="课程安排时间">
  249. <template slot-scope="scope">
  250. <div>
  251. <p>{{ scope.row.coursesStartTime }}</p>
  252. <p>{{ scope.row.coursesEndTime }}</p>
  253. </div>
  254. </template>
  255. </el-table-column> -->
  256. <el-table-column align="center" label="操作">
  257. <template slot-scope="scope">
  258. <div>
  259. <!-- v-if="scope.row.enable > 0" -->
  260. <el-button
  261. type="text"
  262. v-permission="'vipGroupActivity/update'"
  263. @click="look(scope.row)"
  264. >查看</el-button
  265. >
  266. <el-button
  267. v-if="
  268. scope.row.status == 'PROGRESS' &&
  269. scope.row.maxCourseNum &&
  270. scope.row.minCourseNum &&
  271. scope.row.maxCourseNum > 0 &&
  272. scope.row.minCourseNum > 0 &&
  273. scope.row.minCourseNum == scope.row.maxCourseNum
  274. "
  275. type="text"
  276. v-permission="'/activeSenior'"
  277. @click="activeManager(scope.row)"
  278. >资格管理</el-button
  279. >
  280. <el-button
  281. style="margin-left: 0px"
  282. type="text"
  283. v-permission="'vipGroupActivity/update'"
  284. @click="reset(scope.row)"
  285. >修改</el-button
  286. >
  287. <!-- <el-button
  288. style="margin-left: 0px"
  289. v-if="!scope.row.enable && scope.row.status == 'PROGRESS'"
  290. type="text"
  291. v-permission="'vipGroupActivity/enable'"
  292. @click="resetStatus(scope.row)"
  293. >启用</el-button
  294. >
  295. <el-button
  296. v-if="scope.row.enable && scope.row.status == 'PROGRESS'"
  297. style="margin-left: 0px"
  298. type="text"
  299. v-permission="'vipGroupActivity/enable'"
  300. @click="resetStatus(scope.row)"
  301. >停用</el-button
  302. > -->
  303. <!-- <el-button type='text'
  304. @click="remove(scope.row)">删除</el-button>-->
  305. <el-popover
  306. placement="top"
  307. width="160"
  308. v-permission="'vipGroupActivity/delete'"
  309. :ref="scope.$index"
  310. v-if="scope.row.status != 'PROGRESS'"
  311. >
  312. <p>确定删除?</p>
  313. <div style="text-align: right; margin: 0">
  314. <el-button
  315. type="text"
  316. @click="scope._self.$refs[scope.$index].doClose()"
  317. >取消</el-button
  318. >
  319. <el-button type="primary" @click="remove(scope)"
  320. >确定</el-button
  321. >
  322. </div>
  323. <el-button type="text" slot="reference">删除</el-button>
  324. </el-popover>
  325. </div>
  326. </template>
  327. </el-table-column>
  328. </el-table>
  329. <!-- 分页器 -->
  330. <pagination
  331. :total.sync="rules.total"
  332. sync
  333. :page.sync="rules.page"
  334. :limit.sync="rules.limit"
  335. :page-sizes="rules.page_size"
  336. @pagination="getList"
  337. />
  338. </div>
  339. </div>
  340. </div>
  341. </template>
  342. <script>
  343. const MIN_NUMBER = 1;
  344. const MAX_NUMBER = 999;
  345. import pagination from "@/components/Pagination/index";
  346. import {
  347. vipGroupActivity,
  348. removeVipActive,
  349. enableVipGroupActivity
  350. } from "@/api/vipSeting";
  351. import ExportChiose from "@/components/Export-chiose";
  352. import qs from "qs";
  353. import { Export } from "@/utils/downLoadFile";
  354. import cleanDeep from "clean-deep";
  355. import { vipResetTypeList } from "@/utils/searchArray";
  356. export default {
  357. name: "vipActiveList",
  358. components: { pagination, ExportChiose },
  359. data() {
  360. return {
  361. vipResetTypeList,
  362. labelPosition: "right",
  363. tableList: [],
  364. rules: {
  365. // 分页规则
  366. limit: 10, // 限制显示条数
  367. page: 1, // 当前页
  368. total: 0, // 总条数
  369. page_size: [10, 20, 40, 50] // 选择限制显示条数
  370. },
  371. searchForm: {
  372. organId: null,
  373. enable: null,
  374. search: "",
  375. applyToStudentType: null,
  376. allowOnlineToOffline: null,
  377. status: null,
  378. activityChannel: null
  379. },
  380. dialogVisible: false
  381. };
  382. },
  383. // created() {
  384. // this.init();
  385. // },
  386. // activated() {
  387. // this.init();
  388. // },
  389. mounted() {
  390. this.init();
  391. },
  392. filters: {
  393. onlinePip(val) {
  394. let obj = JSON.parse(val);
  395. // debugger;
  396. if (
  397. obj &&
  398. obj.onlineSalarySettlement &&
  399. obj.onlineSalarySettlement.salarySettlementType
  400. ) {
  401. switch (obj.onlineSalarySettlement.salarySettlementType) {
  402. case "RATIO_DISCOUNT": {
  403. return "线上:比例结算";
  404. break;
  405. }
  406. case "TEACHER_DEFAULT": {
  407. return "线上:老师默认";
  408. break;
  409. }
  410. case "FIXED_SALARY": {
  411. return "线上:固定课酬";
  412. break;
  413. }
  414. }
  415. }
  416. },
  417. unonlinePip(val) {
  418. let obj = JSON.parse(val);
  419. if (
  420. obj &&
  421. obj.offlineSalarySettlement &&
  422. obj.offlineSalarySettlement.salarySettlementType
  423. ) {
  424. switch (obj.offlineSalarySettlement.salarySettlementType) {
  425. case "RATIO_DISCOUNT": {
  426. return "线下:比例结算";
  427. break;
  428. }
  429. case "TEACHER_DEFAULT": {
  430. return "线下:老师默认";
  431. break;
  432. }
  433. case "FIXED_SALARY": {
  434. return "线下:固定课酬";
  435. break;
  436. }
  437. }
  438. }
  439. },
  440. onlineDesc(val) {
  441. let obj = JSON.parse(val);
  442. // debugger;
  443. if (
  444. obj &&
  445. obj.onlineSalarySettlement &&
  446. obj.onlineSalarySettlement.salarySettlementType
  447. ) {
  448. switch (obj.onlineSalarySettlement.salarySettlementType) {
  449. case "RATIO_DISCOUNT": {
  450. if (obj.onlineSalarySettlement.settlementValue) {
  451. return `线上:比例结算${
  452. obj.onlineSalarySettlement.settlementValue
  453. }%`;
  454. } else {
  455. return "线上:比例结算";
  456. }
  457. break;
  458. }
  459. case "TEACHER_DEFAULT": {
  460. return "线上:默认课酬";
  461. break;
  462. }
  463. case "FIXED_SALARY": {
  464. if (obj.onlineSalarySettlement.settlementValue) {
  465. return `线上:固定课酬${
  466. obj.onlineSalarySettlement.settlementValue
  467. }/次`;
  468. } else {
  469. return "线上:固定课酬";
  470. }
  471. break;
  472. }
  473. }
  474. }
  475. },
  476. unonlineDesc(val) {
  477. let obj = JSON.parse(val);
  478. if (
  479. obj &&
  480. obj.offlineSalarySettlement &&
  481. obj.offlineSalarySettlement.salarySettlementType
  482. ) {
  483. switch (obj.offlineSalarySettlement.salarySettlementType) {
  484. case "RATIO_DISCOUNT": {
  485. if (obj.offlineSalarySettlement.settlementValue) {
  486. return `线下:比例结算${
  487. obj.offlineSalarySettlement.settlementValue
  488. }%`;
  489. } else {
  490. return "线下:比例结算";
  491. }
  492. break;
  493. }
  494. case "TEACHER_DEFAULT": {
  495. return "线下:默认课酬";
  496. break;
  497. }
  498. case "FIXED_SALARY": {
  499. if (obj.offlineSalarySettlement.settlementValue) {
  500. return `线下:固定课酬${
  501. obj.offlineSalarySettlement.settlementValue
  502. }/次`;
  503. } else {
  504. return "线下:固定课酬";
  505. }
  506. break;
  507. }
  508. }
  509. }
  510. }
  511. },
  512. methods: {
  513. async init() {
  514. // 获取类型
  515. await this.$store.dispatch("setVipGroupCategory");
  516. // 获取分部
  517. await this.$store.dispatch("setBranchs");
  518. this.getList();
  519. },
  520. // 导出
  521. async onExport() {
  522. const { ...rest } = this.searchForm;
  523. let obj = {
  524. ...rest,
  525. page: this.rules.page,
  526. rows: this.rules.limit
  527. };
  528. await Export(
  529. this,
  530. {
  531. url: "/api-web/export/vipGroupActivity",
  532. fileName: "活动列表.xls",
  533. method: "post",
  534. params: qs.stringify(cleanDeep(obj))
  535. },
  536. "您确定活动列表?"
  537. );
  538. },
  539. loadNumber(event) {
  540. var el = event.currentTarget;
  541. var elValue = el.value;
  542. var reg = /^((?!0)\d{1,2}|100)$/;
  543. if (!elValue.match(reg)) {
  544. elValue = "";
  545. return false;
  546. } else {
  547. return true;
  548. }
  549. },
  550. onCheckAllBranch() {
  551. // 适用所有分部
  552. this.resetForm.organ = [];
  553. this.organList.forEach(item => {
  554. this.resetForm.organ.push(item.id);
  555. });
  556. },
  557. search() {
  558. this.rules.page = 1;
  559. this.getList();
  560. },
  561. onReset() {
  562. // this.searchForm = {
  563. // enable: null,
  564. // search: null,
  565. // organId: null,
  566. // }
  567. this.$refs["searchForm"].resetFields();
  568. this.search();
  569. },
  570. getList() {
  571. let enable = this.searchForm.enable;
  572. let search = this.searchForm.search;
  573. vipGroupActivity({
  574. organId: this.searchForm.organId,
  575. applyToStudentType: this.searchForm.applyToStudentType,
  576. allowOnlineToOffline: this.searchForm.allowOnlineToOffline,
  577. rows: this.rules.limit,
  578. page: this.rules.page,
  579. status: this.searchForm.status,
  580. activityChannel: this.searchForm.activityChannel,
  581. enable,
  582. search
  583. }).then(res => {
  584. if (res.code == 200) {
  585. this.tableList = res.data.rows;
  586. this.rules.total = res.data.total;
  587. }
  588. });
  589. },
  590. resetEnable(val) {
  591. val = null;
  592. },
  593. // 格式化活动类型
  594. fommatterType(row, column) {
  595. switch (row.type) {
  596. case "BASE_ACTIVITY": {
  597. return "基础";
  598. break;
  599. }
  600. case "DISCOUNT": {
  601. return "折扣";
  602. break;
  603. }
  604. case "GIVE_CLASS": {
  605. if (row.giveClassPaySalaryFlag) {
  606. return "买赠(赠课结算)";
  607. } else {
  608. return "买赠(不结算)";
  609. }
  610. break;
  611. }
  612. }
  613. },
  614. // 格式化课时类型
  615. fommatterCourseType(row) {
  616. let date = JSON.parse(row.salarySettlementJson);
  617. let str = "";
  618. if (date && date.onlineSalarySettlement) {
  619. str += "线上 ";
  620. }
  621. if (date && date.offlineSalarySettlement) {
  622. str += "线下";
  623. }
  624. return str;
  625. },
  626. fommatterResetType(row) {
  627. let str = null;
  628. if (row.allowOnlineToOffline == 1) {
  629. str = "无限制";
  630. }
  631. if (row.allowOnlineToOffline == 0) {
  632. str = "线上不可转线下";
  633. }
  634. if (row.allowOnlineToOffline == 2) {
  635. str = "线下不可调为线上";
  636. }
  637. if (row.allowOnlineToOffline == 3) {
  638. str = "线上线下不可互调";
  639. }
  640. return str;
  641. },
  642. formatStudentType(row) {
  643. let str = null;
  644. if (row.applyToStudentType == -1) {
  645. str = "所有学员";
  646. }
  647. if (row.applyToStudentType == 0) {
  648. str = "老学员";
  649. }
  650. if (row.applyToStudentType == 1) {
  651. str = "新学员";
  652. }
  653. return str;
  654. },
  655. // 格式化启用状态
  656. fommatterEnable(row) {
  657. switch (row.enable) {
  658. case false: {
  659. return "否";
  660. break;
  661. }
  662. case true: {
  663. return "是";
  664. break;
  665. }
  666. }
  667. },
  668. // 格式化Status
  669. fommatterStatus(row) {
  670. switch (row.status) {
  671. case "PROGRESS": {
  672. return "正式";
  673. break;
  674. }
  675. case "DRAFT": {
  676. return "草稿";
  677. break;
  678. }
  679. }
  680. },
  681. // 点击列表修改同步状态
  682. reset(row) {
  683. this.$router.push(
  684. {
  685. path: "/operateManager/vipNewActive?type=reset",
  686. query: { id: row.id }
  687. },
  688. router => {
  689. router.meta.title = "修改活动方案";
  690. }
  691. );
  692. },
  693. look(row) {
  694. this.$router.push({
  695. path: "/operateManager/vipNewActive?type=look",
  696. query: { id: row.id }
  697. });
  698. },
  699. // 活动资格管理
  700. activeManager(row) {
  701. this.$router.push({
  702. path: "/operateManager/activeSenior",
  703. query: { id: row.id }
  704. });
  705. },
  706. // 点击确认按钮发送修改请求
  707. remove(scope) {
  708. let id = scope.row.id;
  709. removeVipActive({ id }).then(res => {
  710. if (res.code == 200) {
  711. this.$message.success("恭喜您删除成功");
  712. this.getList();
  713. }
  714. scope._self.$refs[scope.$index].doClose();
  715. });
  716. },
  717. gotoNewActive() {
  718. // 带参数 searchForm: { organId: null } 搜索条件
  719. // let rules = JSON.stringify(this.rules);
  720. // let searchForm = JSON.stringify(this.searchForm);
  721. this.$router.push(
  722. {
  723. path: "/operateManager/vipNewActive?type=create"
  724. // query: { rules, searchForm },
  725. },
  726. router => {
  727. router.meta.title = "新建活动方案";
  728. }
  729. );
  730. },
  731. closeVipform() {
  732. this.$refs["vipform"].resetFields();
  733. this.dialogVisible = false;
  734. },
  735. resetForms() {
  736. this.$refs.form.resetFields();
  737. },
  738. handleMinChange() {
  739. this.$refs.form.validateField("maxCourseNum");
  740. },
  741. handleMaxChange() {
  742. this.$refs.form.validateField("minCourseNum");
  743. },
  744. validateCom(rule, value, callback) {
  745. const one = Number(value);
  746. if (Number.isInteger(one)) {
  747. if (one < MIN_NUMBER) {
  748. return callback(new Error("输入值必须大于0"));
  749. } else if (one > MAX_NUMBER) {
  750. return callback(new Error("输入值必须小于999"));
  751. }
  752. return callback();
  753. }
  754. return callback(new Error("输入值必须为正整数"));
  755. },
  756. validateMin(rule, value, callback) {
  757. const one = Number(value);
  758. const max = Number(this.courseNumForm.maxCourseNum);
  759. if (!max || one <= max) {
  760. return callback();
  761. }
  762. return callback(new Error("输入值不得大于最大课时数"));
  763. },
  764. validateMax(rule, value, callback) {
  765. const one = Number(value);
  766. const min = Number(this.courseNumForm.minCourseNum);
  767. if (!min || one >= min) {
  768. return callback();
  769. }
  770. return callback(new Error("输入值不得小于最小课时数"));
  771. },
  772. resetStatus(row) {
  773. let tempString = row.enable ? "停用" : "启用";
  774. this.$confirm(`是否${tempString}该活动?`, "提示", {
  775. confirmButtonText: "确定",
  776. cancelButtonText: "取消",
  777. type: "warning"
  778. })
  779. .then(() => {
  780. enableVipGroupActivity({ id: row.id }).then(res => {
  781. if (res.code == 200) {
  782. this.$message.success("操作成功");
  783. this.getList();
  784. }
  785. });
  786. })
  787. .catch(() => {});
  788. }
  789. }
  790. };
  791. </script>
  792. <style lang="scss" scoped>
  793. .btnList {
  794. display: flex;
  795. flex-direction: row;
  796. align-items: center;
  797. }
  798. .activeType {
  799. .right {
  800. .el-input {
  801. width: 150px !important;
  802. }
  803. }
  804. }
  805. .activeRange {
  806. display: flex;
  807. flex-direction: row;
  808. justify-content: flex-start;
  809. .left {
  810. height: 72px;
  811. line-height: 72px;
  812. }
  813. .right {
  814. .chioseWrap {
  815. display: flex;
  816. flex-direction: row;
  817. justify-content: flex-start;
  818. height: 72px;
  819. line-height: 72px;
  820. align-items: center;
  821. .el-checkbox {
  822. margin-right: 20px;
  823. }
  824. .el-select {
  825. margin-right: 20px;
  826. }
  827. }
  828. }
  829. }
  830. .activeType {
  831. display: flex;
  832. flex-direction: row;
  833. justify-content: flex-start;
  834. .left {
  835. margin-right: 20px;
  836. p {
  837. height: 40px;
  838. line-height: 40px;
  839. }
  840. }
  841. .right {
  842. > div {
  843. display: flex;
  844. flex-direction: row;
  845. justify-content: flex-start;
  846. height: 40px;
  847. line-height: 40px;
  848. margin-bottom: 20px;
  849. .head {
  850. width: 120px;
  851. height: 40px;
  852. line-height: 40px;
  853. border: 1px solid #ccc;
  854. text-align: center;
  855. border-radius: 5px;
  856. cursor: pointer;
  857. margin-right: 10px;
  858. }
  859. > .head.active {
  860. background-color: var(--color-primary);
  861. color: #fff;
  862. border: none;
  863. }
  864. .title {
  865. line-height: 40px;
  866. height: 40px;
  867. }
  868. }
  869. }
  870. }
  871. .vipform {
  872. .el-select {
  873. width: 400px !important;
  874. .el-input__inner {
  875. width: 400px;
  876. }
  877. }
  878. }
  879. .ishidden {
  880. visibility: hidden;
  881. }
  882. </style>