vipActiveList.vue 24 KB

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