vipActiveList.vue 23 KB

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