memberFeeSet.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170
  1. <template>
  2. <div class="m-container">
  3. <h2>
  4. <div class="squrt"></div>
  5. 学练宝收费标准
  6. </h2>
  7. <div
  8. class="m-core"
  9. v-if="(tableList.length > 0 || rules.page > 1) && contextFlag"
  10. >
  11. <save-form
  12. :inline="true"
  13. class="searchForm"
  14. save-key="memberFeeSet"
  15. ref="searchForm"
  16. @submit="search"
  17. @reset="onReSet"
  18. :model.sync="searchForm"
  19. >
  20. <!-- 状态 指导老师 活动方案-->
  21. <el-form-item prop="search">
  22. <el-input
  23. v-model.trim="searchForm.search"
  24. clearable
  25. placeholder="学练宝名称"
  26. ></el-input>
  27. </el-form-item>
  28. <el-form-item prop="organId">
  29. <el-select
  30. class="multiple"
  31. filterable
  32. style="width: 180px !important"
  33. v-model.trim="searchForm.organId"
  34. clearable
  35. placeholder="请选择分部"
  36. >
  37. <el-option
  38. v-for="(item, index) in selects.branchs"
  39. :key="index"
  40. :label="item.name"
  41. :value="item.id"
  42. ></el-option>
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item>
  46. <el-button native-type="submit" type="danger">搜索</el-button>
  47. <el-button native-type="reset" type="primary">重置</el-button>
  48. </el-form-item>
  49. </save-form>
  50. <el-button
  51. type="primary"
  52. style="margin-bottom: 20px"
  53. v-permission="'memberRankOrganizationFeeMapper/add'"
  54. @click="addFee"
  55. >新增收费标准</el-button
  56. >
  57. <el-table
  58. :data="tableList"
  59. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  60. >
  61. <el-table-column
  62. align="left"
  63. prop="organName"
  64. label="分部"
  65. ></el-table-column>
  66. <el-table-column
  67. align="left"
  68. prop="rankName"
  69. label="学练宝名称"
  70. width="120px"
  71. ></el-table-column>
  72. <el-table-column align="left" prop="type" label="月收费">
  73. <template slot-scope="scope">
  74. <div>
  75. <p>
  76. 团购:
  77. {{
  78. scope.row.memberFeeSetting.groupPurchaseMonthFee
  79. | hasMoneyFormat
  80. }}
  81. </p>
  82. <p>
  83. 原价:
  84. {{
  85. scope.row.memberFeeSetting.originalMonthFee | hasMoneyFormat
  86. }}
  87. </p>
  88. <div>经营报表</div>
  89. <div>
  90. 确认收入:
  91. {{ scope.row.memberFeeSetting.incomeMonthFee | hasMoneyFormat }}
  92. </div>
  93. </div>
  94. </template>
  95. </el-table-column>
  96. <el-table-column align="left" prop="type" label="季度收费">
  97. <template slot-scope="scope">
  98. <div>
  99. <p>
  100. 团购:
  101. {{
  102. scope.row.memberFeeSetting.groupPurchaseQuarterlyFee
  103. | hasMoneyFormat
  104. }}
  105. </p>
  106. <!-- <p>
  107. 零售:
  108. {{
  109. scope.row.memberFeeSetting.currentQuarterlyFee | hasMoneyFormat
  110. }}
  111. </p> -->
  112. <p>
  113. 原价:
  114. {{
  115. scope.row.memberFeeSetting.originalQuarterlyFee
  116. | hasMoneyFormat
  117. }}
  118. </p>
  119. <div>经营报表</div>
  120. <div>
  121. 确认收入:
  122. {{
  123. scope.row.memberFeeSetting.incomeQuarterlyFee | hasMoneyFormat
  124. }}
  125. </div>
  126. </div>
  127. </template>
  128. </el-table-column>
  129. <el-table-column align="left" prop="type" label="半年收费">
  130. <template slot-scope="scope">
  131. <div>
  132. <p>
  133. 团购:
  134. {{
  135. scope.row.memberFeeSetting.groupPurchaseHalfYearFee
  136. | hasMoneyFormat
  137. }}
  138. </p>
  139. <!-- <p>
  140. 零售:
  141. {{
  142. scope.row.memberFeeSetting.currentHalfYearFee | hasMoneyFormat
  143. }}
  144. </p> -->
  145. <p>
  146. 原价:
  147. {{
  148. scope.row.memberFeeSetting.originalHalfYearFee
  149. | hasMoneyFormat
  150. }}
  151. </p>
  152. <div>经营报表</div>
  153. <div>
  154. 确认收入:
  155. {{
  156. scope.row.memberFeeSetting.incomeHalfYearFee | hasMoneyFormat
  157. }}
  158. </div>
  159. </div>
  160. </template>
  161. </el-table-column>
  162. <el-table-column align="left" prop="type" label="年收费">
  163. <template slot-scope="scope">
  164. <div>
  165. <p>
  166. 团购:
  167. {{
  168. scope.row.memberFeeSetting.groupPurchaseYearFee
  169. | hasMoneyFormat
  170. }}
  171. </p>
  172. <!-- <p>
  173. 零售:
  174. {{ scope.row.memberFeeSetting.currentYearFee | hasMoneyFormat }}
  175. </p> -->
  176. <p>
  177. 原价:
  178. {{
  179. scope.row.memberFeeSetting.originalYearFee | hasMoneyFormat
  180. }}
  181. </p>
  182. <div>经营报表</div>
  183. <div>
  184. 确认收入:
  185. {{ scope.row.memberFeeSetting.incomeYearFee | hasMoneyFormat }}
  186. </div>
  187. </div>
  188. </template>
  189. </el-table-column>
  190. <el-table-column
  191. width="105px"
  192. prop="updateTime"
  193. label="修改时间"
  194. ></el-table-column>
  195. <el-table-column
  196. prop="operatorName"
  197. label="修改人"
  198. width="80px"
  199. ></el-table-column>
  200. <el-table-column align="center" label="操作" width="100px">
  201. <template slot-scope="scope">
  202. <div>
  203. <!-- memberRankSetting/add -->
  204. <auth auths="memberRankOrganizationFeeMapper/get">
  205. <el-button type="text" @click="resetFee(scope.row, 'look')"
  206. >详情</el-button
  207. >
  208. </auth>
  209. <auth :auths="'memberRankOrganizationFeeMapper/update'">
  210. <el-button type="text" @click="resetFee(scope.row, 'update')"
  211. >修改</el-button
  212. >
  213. </auth>
  214. </div>
  215. </template>
  216. </el-table-column>
  217. </el-table>
  218. <pagination
  219. save-key="memberFeeSet"
  220. :total.sync="rules.total"
  221. sync
  222. :page.sync="rules.page"
  223. :limit.sync="rules.limit"
  224. :page-sizes="rules.page_size"
  225. @pagination="getList"
  226. />
  227. </div>
  228. <emptyPage
  229. @submit="addFee"
  230. title="学练宝收费标准"
  231. btnTitle="新建学练宝收费标准"
  232. :context="context"
  233. v-if="!(tableList.length > 0 || rules.page > 1) && contextFlag"
  234. />
  235. <el-dialog
  236. class="dialog"
  237. :title="title"
  238. top="12vh"
  239. :close-on-click-modal="false"
  240. :visible.sync="branchStatus"
  241. v-if="branchStatus"
  242. default-expand-all
  243. @close="onFormClose('ruleForm')"
  244. width="820px"
  245. >
  246. <el-form class="elForm" :model="form" label-position="top" ref="ruleForm">
  247. <div class="wrap">
  248. <el-form-item
  249. label="所属分部"
  250. prop="organIds"
  251. :rules="[{ required: true, message: '请选择分部' }]"
  252. :label-width="formLabelWidth"
  253. >
  254. <el-select
  255. :disabled="addDisabled || pageType === 'update'"
  256. class="multiple"
  257. filterable
  258. v-model.trim="form.organIds"
  259. clearable
  260. multiple
  261. :collapse-tags="true"
  262. placeholder="请选择分部"
  263. @change="getAllMember"
  264. >
  265. <el-option
  266. v-for="(item, index) in selects.branchs"
  267. :key="index"
  268. :label="item.name"
  269. :value="item.id"
  270. ></el-option>
  271. </el-select>
  272. </el-form-item>
  273. <el-form-item
  274. label="学练宝版本"
  275. prop="memberRankSettingId"
  276. :rules="[{ required: true, message: '请选择学练宝版本' }]"
  277. :label-width="formLabelWidth"
  278. >
  279. <el-cascader
  280. filterable
  281. v-model.trim="form.memberRankSettingId"
  282. clearable
  283. placeholder="请选择学练宝版本"
  284. :disabled="addDisabled"
  285. :options="remberList"
  286. :props="{ value: 'id', label: 'name' }"
  287. :show-all-levels="false"
  288. ></el-cascader>
  289. <!-- <el-select
  290. :disabled="addDisabled"
  291. class="multiple"
  292. filterable
  293. v-model.trim="form.memberRankSettingId"
  294. clearable
  295. placeholder="请选择学练宝"
  296. >
  297. <el-option
  298. v-for="(item, index) in remberList"
  299. :key="index"
  300. :label="item.name"
  301. :value="item.id"
  302. ></el-option>
  303. </el-select> -->
  304. </el-form-item>
  305. </div>
  306. <div class="lineTitle">月度收费</div>
  307. <div class="wrap">
  308. <el-form-item
  309. prop="groupPurchaseMonthFee"
  310. label="团购价"
  311. :rules="[
  312. { required: true, message: '请输入月收费团购价' },
  313. {
  314. pattern: /^[1-9][0-9]*$/,
  315. message: '请输入大于0的正整数'
  316. },
  317. { validator: validateMonth, trigger: 'blur' }
  318. ]"
  319. :label-width="formLabelWidth"
  320. :placeholder="monthRule"
  321. >
  322. <el-input
  323. v-model="form.groupPurchaseMonthFee"
  324. :disabled="addDisabled"
  325. :placeholder="monthRule"
  326. >
  327. <template slot="append"
  328. >元/月</template
  329. >
  330. </el-input>
  331. </el-form-item>
  332. <el-form-item
  333. prop="currentMonthFee"
  334. label="零售价"
  335. :rules="[
  336. { required: true, message: '请输入月收费零售价' },
  337. {
  338. pattern: /^[1-9][0-9]*$/,
  339. message: '请输入大于0的正整数'
  340. },
  341. { validator: validateMonth, trigger: 'blur' }
  342. ]"
  343. :label-width="formLabelWidth"
  344. >
  345. <el-input
  346. v-model="form.currentMonthFee"
  347. :disabled="addDisabled"
  348. :placeholder="monthRule"
  349. >
  350. <template slot="append"
  351. >元/月</template
  352. >
  353. </el-input>
  354. </el-form-item>
  355. <el-form-item
  356. prop="originalMonthFee"
  357. label="原价"
  358. :rules="[
  359. { required: true, message: '请输入月收费原价' },
  360. {
  361. pattern: /^[1-9][0-9]*$/,
  362. message: '请输入大于0的正整数'
  363. },
  364. { validator: validateMonth, trigger: 'blur' }
  365. ]"
  366. :label-width="formLabelWidth"
  367. >
  368. <el-input
  369. v-model="form.originalMonthFee"
  370. :disabled="addDisabled"
  371. :placeholder="monthRule"
  372. >
  373. <template slot="append"
  374. >元/月</template
  375. >
  376. </el-input>
  377. </el-form-item>
  378. <el-form-item
  379. prop="incomeMonthFee"
  380. label="经营报表确认收入"
  381. :rules="[
  382. { required: true, message: '请输入月度经营报表确认收入' },
  383. {
  384. pattern: /^[1-9][0-9]*$/,
  385. message: '请输入大于0的正整数'
  386. },
  387. { validator: validateMonthIncome, trigger: 'blur' }
  388. ]"
  389. :label-width="formLabelWidth"
  390. >
  391. <el-input
  392. v-model="form.incomeMonthFee"
  393. :disabled="addDisabled"
  394. :placeholder="monthRuleIncome"
  395. >
  396. <template slot="append"
  397. >元</template
  398. >
  399. </el-input>
  400. </el-form-item>
  401. </div>
  402. <div class="lineTitle">季度收费</div>
  403. <div class="wrap">
  404. <el-form-item
  405. prop="groupPurchaseQuarterlyFee"
  406. label="团购价"
  407. :rules="[
  408. { required: true, message: '请输入季度收费团购价' },
  409. {
  410. pattern: /^[1-9][0-9]*$/,
  411. message: '请输入大于0的正整数'
  412. },
  413. { validator: validateQuarterly, trigger: 'blur' }
  414. ]"
  415. :label-width="formLabelWidth"
  416. >
  417. <el-input
  418. v-model="form.groupPurchaseQuarterlyFee"
  419. :disabled="addDisabled"
  420. :placeholder="quarterlyRule"
  421. >
  422. <template slot="append"
  423. >元/季度</template
  424. >
  425. </el-input>
  426. </el-form-item>
  427. <el-form-item
  428. prop="currentQuarterlyFee"
  429. label="零售价"
  430. :rules="[
  431. { required: true, message: '请输入季度收费零售价' },
  432. {
  433. pattern: /^[1-9][0-9]*$/,
  434. message: '请输入大于0的正整数'
  435. },
  436. { validator: validateQuarterly, trigger: 'blur' }
  437. ]"
  438. :label-width="formLabelWidth"
  439. >
  440. <el-input
  441. v-model="form.currentQuarterlyFee"
  442. :disabled="addDisabled"
  443. :placeholder="quarterlyRule"
  444. >
  445. <template slot="append"
  446. >元/季度</template
  447. >
  448. </el-input>
  449. </el-form-item>
  450. <el-form-item
  451. prop="originalQuarterlyFee"
  452. label="原价"
  453. :rules="[
  454. { required: true, message: '请输入季度收费原价' },
  455. {
  456. pattern: /^[1-9][0-9]*$/,
  457. message: '请输入大于0的正整数'
  458. },
  459. { validator: validateQuarterly, trigger: 'blur' }
  460. ]"
  461. :label-width="formLabelWidth"
  462. >
  463. <el-input
  464. v-model="form.originalQuarterlyFee"
  465. :disabled="addDisabled"
  466. :placeholder="quarterlyRule"
  467. >
  468. <template slot="append"
  469. >元/季度</template
  470. >
  471. </el-input>
  472. </el-form-item>
  473. <el-form-item
  474. prop="incomeQuarterlyFee"
  475. label="经营报表确认收入"
  476. :rules="[
  477. { required: true, message: '请输入季度经营报表确认收入' },
  478. {
  479. pattern: /^[1-9][0-9]*$/,
  480. message: '请输入大于0的正整数'
  481. },
  482. { validator: validateQuarterlyIncome, trigger: 'blur' }
  483. ]"
  484. :label-width="formLabelWidth"
  485. >
  486. <el-input
  487. v-model="form.incomeQuarterlyFee"
  488. :disabled="addDisabled"
  489. :placeholder="quarterlyRuleIncome"
  490. >
  491. <template slot="append"
  492. >元</template
  493. >
  494. </el-input>
  495. </el-form-item>
  496. </div>
  497. <div class="lineTitle">半年收费</div>
  498. <div class="wrap">
  499. <el-form-item
  500. prop="groupPurchaseHalfYearFee"
  501. label="半年收费团购价"
  502. :rules="[
  503. { required: true, message: '请输入半年收费团购价' },
  504. {
  505. pattern: /^[1-9][0-9]*$/,
  506. message: '请输入大于0的正整数'
  507. },
  508. { validator: validateHalfYear, trigger: 'blur' }
  509. ]"
  510. :label-width="formLabelWidth"
  511. >
  512. <el-input
  513. v-model="form.groupPurchaseHalfYearFee"
  514. :disabled="addDisabled"
  515. :placeholder="halfYearRule"
  516. >
  517. <template slot="append"
  518. >元/半年</template
  519. >
  520. </el-input>
  521. </el-form-item>
  522. <el-form-item
  523. prop="currentHalfYearFee"
  524. label="半年收费零售价"
  525. :rules="[
  526. { required: true, message: '请输入半年收费零售价' },
  527. {
  528. pattern: /^[1-9][0-9]*$/,
  529. message: '请输入大于0的正整数'
  530. },
  531. { validator: validateHalfYear, trigger: 'blur' }
  532. ]"
  533. :label-width="formLabelWidth"
  534. >
  535. <el-input
  536. v-model="form.currentHalfYearFee"
  537. :disabled="addDisabled"
  538. :placeholder="halfYearRule"
  539. >
  540. <template slot="append"
  541. >元/半年</template
  542. >
  543. </el-input>
  544. </el-form-item>
  545. <el-form-item
  546. prop="originalHalfYearFee"
  547. label="半年收费原价"
  548. :rules="[
  549. { required: true, message: '请输入半年收费原价' },
  550. {
  551. pattern: /^[1-9][0-9]*$/,
  552. message: '请输入大于0的正整数'
  553. },
  554. { validator: validateHalfYear, trigger: 'blur' }
  555. ]"
  556. :label-width="formLabelWidth"
  557. >
  558. <el-input
  559. v-model="form.originalHalfYearFee"
  560. :disabled="addDisabled"
  561. :placeholder="halfYearRule"
  562. >
  563. <template slot="append"
  564. >元/半年</template
  565. >
  566. </el-input>
  567. </el-form-item>
  568. <el-form-item
  569. prop="incomeHalfYearFee"
  570. label="经营报表确认收入"
  571. :rules="[
  572. { required: true, message: '请输入半年经营报表确认收入' },
  573. {
  574. pattern: /^[1-9][0-9]*$/,
  575. message: '请输入大于0的正整数'
  576. },
  577. { validator: validateHalfYearIncome, trigger: 'blur' }
  578. ]"
  579. :label-width="formLabelWidth"
  580. >
  581. <el-input
  582. v-model="form.incomeHalfYearFee"
  583. :disabled="addDisabled"
  584. :placeholder="halfYearRuleIncome"
  585. >
  586. <template slot="append"
  587. >元</template
  588. >
  589. </el-input>
  590. </el-form-item>
  591. </div>
  592. <div class="lineTitle">年度收费</div>
  593. <div class="wrap">
  594. <el-form-item
  595. prop="groupPurchaseYearFee"
  596. label="年收费团购价"
  597. :rules="[
  598. { required: true, message: '请输入年收费团购价' },
  599. {
  600. pattern: /^[1-9][0-9]*$/,
  601. message: '请输入大于0的正整数'
  602. },
  603. { validator: validateYear, trigger: 'blur' }
  604. ]"
  605. :label-width="formLabelWidth"
  606. >
  607. <el-input
  608. v-model="form.groupPurchaseYearFee"
  609. :disabled="addDisabled"
  610. :placeholder="yearRule"
  611. >
  612. <template slot="append"
  613. >元/年</template
  614. >
  615. </el-input>
  616. </el-form-item>
  617. <el-form-item
  618. prop="currentYearFee"
  619. label="年收费零售价"
  620. :rules="[
  621. { required: true, message: '请输入年收费零售价' },
  622. {
  623. pattern: /^[1-9][0-9]*$/,
  624. message: '请输入大于0的正整数'
  625. },
  626. { validator: validateYear, trigger: 'blur' }
  627. ]"
  628. :label-width="formLabelWidth"
  629. >
  630. <el-input
  631. v-model="form.currentYearFee"
  632. :disabled="addDisabled"
  633. :placeholder="yearRule"
  634. >
  635. <template slot="append"
  636. >元/年</template
  637. >
  638. </el-input>
  639. </el-form-item>
  640. <el-form-item
  641. prop="originalYearFee"
  642. label="年收费原价"
  643. :rules="[
  644. { required: true, message: '请输入年收费原价' },
  645. {
  646. pattern: /^[1-9][0-9]*$/,
  647. message: '请输入大于0的正整数'
  648. },
  649. { validator: validateYear, trigger: 'blur' }
  650. ]"
  651. :label-width="formLabelWidth"
  652. >
  653. <el-input
  654. v-model="form.originalYearFee"
  655. :disabled="addDisabled"
  656. :placeholder="yearRule"
  657. >
  658. <template slot="append"
  659. >元/年</template
  660. >
  661. </el-input>
  662. </el-form-item>
  663. <el-form-item
  664. prop="incomeYearFee"
  665. label="经营报表确认收入"
  666. :rules="[
  667. { required: true, message: '请输入年度经营报表确认收入' },
  668. {
  669. pattern: /^[1-9][0-9]*$/,
  670. message: '请输入大于0的正整数'
  671. },
  672. { validator: validateYearIncome, trigger: 'blur' }
  673. ]"
  674. :label-width="formLabelWidth"
  675. >
  676. <el-input
  677. v-model="form.incomeYearFee"
  678. :disabled="addDisabled"
  679. :placeholder="yearRuleIncome"
  680. >
  681. <template slot="append"
  682. >元</template
  683. >
  684. </el-input>
  685. </el-form-item>
  686. </div>
  687. </el-form>
  688. <span slot="footer" class="dialog-footer">
  689. <el-button v-if="!addDisabled" @click="branchStatus = false"
  690. >取 消</el-button
  691. >
  692. <el-button @click="onSubmit" type="primary">确 定</el-button>
  693. </span>
  694. </el-dialog>
  695. </div>
  696. </template>
  697. <script>
  698. import {
  699. api_getMemberRankSetting,
  700. addMemberOrganizationFeeMapperV2,
  701. getmemberRankOrganizationFeeMapper,
  702. getmemberOrganizationFeeMapperkDetail,
  703. resetMemberOrganizationFeeMapper
  704. } from "./api";
  705. import { sysConfigList } from "@/api/generalSettings";
  706. import pagination from "@/components/Pagination/index";
  707. import emptyPage from "@/components/emptyPage";
  708. // numeral(this.list.form[index].courseTotalMinuties * this.list.form[index].unitPrice).format('0,0.00')
  709. export default {
  710. components: { pagination, emptyPage },
  711. name: "memberFeeSet",
  712. data() {
  713. return {
  714. searchForm: {
  715. search: null,
  716. organId: null
  717. },
  718. rules: {
  719. // 分页规则
  720. limit: 10, // 限制显示条数
  721. page: 1, // 当前页
  722. total: 0, // 总条数
  723. page_size: [10, 20, 40, 50] // 选择限制显示条数
  724. },
  725. tableList: [],
  726. addDisabled: false,
  727. title: "新增收费标准",
  728. pageType: "create",
  729. formLabelWidth: "120px",
  730. form: {
  731. currentDayFee: "",
  732. currentHalfYearFee: "",
  733. currentMonthFee: "",
  734. currentYearFee: "",
  735. originalDayFee: "",
  736. originalHalfYearFee: "",
  737. originalMonthFee: "",
  738. originalYearFee: "",
  739. groupPurchaseDayFee: "",
  740. groupPurchaseHalfYearFee: "",
  741. groupPurchaseMonthFee: "",
  742. groupPurchaseQuarterlyFee: "",
  743. groupPurchaseYearFee: "",
  744. organIds: [],
  745. memberRankSettingId: "",
  746. incomeMonthFee: "", // 月经营报表
  747. incomeQuarterlyFee: "", // 季度经营报表
  748. incomeHalfYearFee: "", // 半年经营报表
  749. incomeYearFee: "" // 年经营报表
  750. },
  751. branchStatus: false,
  752. remberList: [],
  753. rulesForm: {
  754. minMonthFee: null,
  755. maxMonthFee: null,
  756. minQuarterlyFee: null,
  757. maxQuarterlyFee: null,
  758. minHalfYearFee: null,
  759. maxHalfYearFee: null,
  760. minYearFee: null,
  761. maxYearFee: null
  762. },
  763. context:
  764. "学练宝收费标准,可根据各分部的实际情况为分部制定不同的售价标准,设置完成后,各分部为学员创建学练宝缴费时默认以此处设置的价格向学员收费。",
  765. contextFlag: false
  766. };
  767. },
  768. async mounted() {
  769. await this.$store.dispatch("setBranchs");
  770. this.getList();
  771. this.getRules();
  772. },
  773. methods: {
  774. async getAllMember() {
  775. // 获取所有的会员
  776. try {
  777. const res = await api_getMemberRankSetting({
  778. organIds: this.form.organIds.join(','),
  779. id: this.form.outId
  780. });
  781. this.remberList = res.data;
  782. // 默认选中第一个
  783. // if (this.pageType == "create" && this.remberList.length > 0) {
  784. // this.form.memberRankSettingId = this.remberList[0].id;
  785. // }
  786. } catch {}
  787. },
  788. async getRules() {
  789. try {
  790. const res = await sysConfigList({ group: "DEFAULT" });
  791. const paramName = "cloud_price_range";
  792. res.data.forEach(item => {
  793. if (item.paramName == paramName) {
  794. const itemValue = item.paranValue
  795. ? JSON.parse(item.paranValue)
  796. : null;
  797. if (itemValue) {
  798. this.rulesForm = itemValue;
  799. }
  800. }
  801. });
  802. } catch (e) {
  803. console.log(e);
  804. }
  805. },
  806. search() {
  807. this.rules.page = 1;
  808. this.getList();
  809. },
  810. onReSet() {
  811. this.$refs.searchForm.resetFields();
  812. this.search();
  813. },
  814. async getList() {
  815. try {
  816. const res = await getmemberRankOrganizationFeeMapper({
  817. ...this.searchForm,
  818. rows: this.rules.limit,
  819. page: this.rules.page
  820. });
  821. this.contextFlag = true;
  822. this.tableList = res.data.rows;
  823. this.rules.total = res.data.total;
  824. } catch {}
  825. },
  826. onFormClose(ruleForm) {
  827. (this.form = {
  828. currentDayFee: "",
  829. currentHalfYearFee: "",
  830. currentMonthFee: "",
  831. currentYearFee: "",
  832. originalDayFee: "",
  833. originalHalfYearFee: "",
  834. originalMonthFee: "",
  835. originalYearFee: "",
  836. incomeMonthFee: "", // 月经营报表
  837. incomeQuarterlyFee: "", // 季度经营报表
  838. incomeHalfYearFee: "", // 半年经营报表
  839. incomeYearFee: "", // 年经营报表
  840. organIds: [],
  841. memberRankSettingId: ""
  842. }),
  843. this.$refs[ruleForm].resetFields();
  844. },
  845. addFee() {
  846. this.title = "新增收费标准";
  847. this.addDisabled = false;
  848. this.form.outId = null;
  849. this.pageType = "create";
  850. this.branchStatus = true;
  851. },
  852. async resetFee(row, type) {
  853. if (type == "update") {
  854. this.title = "修改收费标准";
  855. this.pageType = "update";
  856. this.addDisabled = false;
  857. } else {
  858. this.addDisabled = true;
  859. this.title = "查看收费标准";
  860. this.pageType = "look";
  861. }
  862. let obj = {};
  863. for (let key in row.memberFeeSetting) {
  864. if ((row.memberFeeSetting, key, row.memberFeeSetting[key])) {
  865. obj[key] = row.memberFeeSetting[key];
  866. }
  867. }
  868. this.form = {
  869. ...obj,
  870. organIds: row.organId ? [row.organId] : [],
  871. outId: row.id
  872. };
  873. await this.getAllMember()
  874. this.form.memberRankSettingId = row.memberRankSettingId ? this.formatParentId(row.memberRankSettingId, this.remberList) : [],
  875. this.branchStatus = true;
  876. },
  877. formatParentId(id, list, ids = []) {
  878. for (const item of list) {
  879. if (item.children) {
  880. const cIds = this.formatParentId(
  881. id,
  882. item.children,
  883. [...ids, item.id]
  884. );
  885. if (cIds.includes(id)) {
  886. return cIds;
  887. }
  888. }
  889. if (item.id === id) {
  890. return [...ids, id];
  891. }
  892. }
  893. return ids;
  894. },
  895. onSubmit() {
  896. if (this.pageType == "look") {
  897. this.branchStatus = false;
  898. return;
  899. }
  900. this.$refs.ruleForm.validate(async flag => {
  901. if (flag) {
  902. const memberRankSettingId = this.form.memberRankSettingId.length > 0 ? this.form.memberRankSettingId[this.form.memberRankSettingId.length -1] : null
  903. if (this.pageType == "update") {
  904. try {
  905. await resetMemberOrganizationFeeMapper({
  906. memberFeeSetting: { ...this.form },
  907. organId: this.form.organIds.join(','),
  908. memberRankSettingId,
  909. id: this.form.outId
  910. });
  911. this.$message.success("修改成功");
  912. this.branchStatus = false;
  913. this.getList();
  914. } catch (e) {
  915. console.log(e);
  916. }
  917. } else if (this.pageType == "create") {
  918. try {
  919. await addMemberOrganizationFeeMapperV2({
  920. memberFeeSetting: { ...this.form },
  921. organIds: this.form.organIds.join(','),
  922. memberRankSettingId
  923. });
  924. this.$message.success("新建成功");
  925. this.branchStatus = false;
  926. this.getList();
  927. } catch {}
  928. }
  929. }
  930. });
  931. },
  932. validateMonthIncome(rule, value, callback) {
  933. const one = Number(value);
  934. const min = Number(this.rulesForm.minMonthFee);
  935. const max = this.form.groupPurchaseMonthFee
  936. ? Number(this.form.groupPurchaseMonthFee)
  937. : Number(this.rulesForm.maxMonthFee);
  938. if (one >= min && one <= max) {
  939. return callback();
  940. }
  941. return callback(new Error(`月度经营报表应在${min}-${max}之间`));
  942. },
  943. validateMonth(rule, value, callback) {
  944. const one = Number(value);
  945. const min = Number(this.rulesForm.minMonthFee);
  946. const max = Number(this.rulesForm.maxMonthFee);
  947. if (one >= min && one <= max) {
  948. return callback();
  949. }
  950. return callback(new Error(`月度学练宝定价应在${min}-${max}之间`));
  951. },
  952. validateQuarterlyIncome(rule, value, callback) {
  953. const one = Number(value);
  954. const min = Number(this.rulesForm.minQuarterlyFee);
  955. const max = this.form.groupPurchaseQuarterlyFee
  956. ? Number(this.form.groupPurchaseQuarterlyFee)
  957. : Number(this.rulesForm.maxQuarterlyFee);
  958. if (one >= min && one <= max) {
  959. return callback();
  960. }
  961. return callback(new Error(`季度经营报表应在${min}-${max}之间`));
  962. },
  963. validateQuarterly(rule, value, callback) {
  964. const one = Number(value);
  965. const min = Number(this.rulesForm.minQuarterlyFee);
  966. const max = Number(this.rulesForm.maxQuarterlyFee);
  967. if (one >= min && one <= max) {
  968. return callback();
  969. }
  970. return callback(new Error(`季度学练宝定价应在${min}-${max}之间`));
  971. },
  972. validateHalfYearIncome(rule, value, callback) {
  973. const one = Number(value);
  974. const min = Number(this.rulesForm.minHalfYearFee);
  975. const max = this.form.groupPurchaseHalfYearFee
  976. ? Number(this.form.groupPurchaseHalfYearFee)
  977. : Number(this.rulesForm.maxHalfYearFee);
  978. if (one >= min && one <= max) {
  979. return callback();
  980. }
  981. return callback(new Error(`半年经营报表应在${min}-${max}之间`));
  982. },
  983. validateHalfYear(rule, value, callback) {
  984. const one = Number(value);
  985. const min = Number(this.rulesForm.minHalfYearFee);
  986. const max = Number(this.rulesForm.maxHalfYearFee);
  987. if (one >= min && one <= max) {
  988. return callback();
  989. }
  990. return callback(new Error(`半年学练宝定价应在${min}-${max}之间`));
  991. },
  992. validateYearIncome(rule, value, callback) {
  993. const one = Number(value);
  994. const min = Number(this.rulesForm.minYearFee);
  995. const max = this.form.groupPurchaseYearFee
  996. ? Number(this.form.groupPurchaseYearFee)
  997. : Number(this.rulesForm.maxYearFee);
  998. if (one >= min && one <= max) {
  999. return callback();
  1000. }
  1001. return callback(new Error(`年度经营报表应在${min}-${max}之间`));
  1002. },
  1003. validateYear(rule, value, callback) {
  1004. const one = Number(value);
  1005. const min = Number(this.rulesForm.minYearFee);
  1006. const max = Number(this.rulesForm.maxYearFee);
  1007. if (one >= min && one <= max) {
  1008. return callback();
  1009. }
  1010. return callback(new Error(`年度学练宝定价应在${min}-${max}之间`));
  1011. }
  1012. },
  1013. watch: {
  1014. branchStatus(val) {
  1015. if (!val) {
  1016. this.onFormClose("ruleForm");
  1017. }
  1018. }
  1019. },
  1020. computed: {
  1021. monthRuleIncome() {
  1022. return `${this.rulesForm.minMonthFee}-${
  1023. this.form.groupPurchaseMonthFee
  1024. ? this.form.groupPurchaseMonthFee
  1025. : this.rulesForm.maxMonthFee
  1026. }`;
  1027. },
  1028. monthRule() {
  1029. return `${this.rulesForm.minMonthFee}-${this.rulesForm.maxMonthFee}`;
  1030. },
  1031. quarterlyRuleIncome() {
  1032. return `${this.rulesForm.minQuarterlyFee}-${
  1033. this.form.groupPurchaseQuarterlyFee
  1034. ? this.form.groupPurchaseQuarterlyFee
  1035. : this.rulesForm.maxQuarterlyFee
  1036. }`;
  1037. },
  1038. quarterlyRule() {
  1039. return `${this.rulesForm.minQuarterlyFee}-${
  1040. this.rulesForm.maxQuarterlyFee
  1041. }`;
  1042. },
  1043. halfYearRuleIncome() {
  1044. return `${this.rulesForm.minHalfYearFee}-${
  1045. this.form.groupPurchaseHalfYearFee
  1046. ? this.form.groupPurchaseHalfYearFee
  1047. : this.rulesForm.maxHalfYearFee
  1048. }`;
  1049. },
  1050. halfYearRule() {
  1051. return `${this.rulesForm.minHalfYearFee}-${
  1052. this.rulesForm.maxHalfYearFee
  1053. }`;
  1054. },
  1055. yearRuleIncome() {
  1056. return `${this.rulesForm.minYearFee}-${
  1057. this.form.groupPurchaseYearFee
  1058. ? this.form.groupPurchaseYearFee
  1059. : this.rulesForm.maxYearFee
  1060. }`;
  1061. },
  1062. yearRule() {
  1063. return `${this.rulesForm.minYearFee}-${this.rulesForm.maxYearFee}`;
  1064. }
  1065. }
  1066. };
  1067. </script>
  1068. <style lang="scss" scoped>
  1069. .feeInput {
  1070. ::v-deep .el-input__inner {
  1071. width: 120px !important;
  1072. }
  1073. }
  1074. .dialog {
  1075. ::v-deep {
  1076. .el-dialog {
  1077. border-radius: 4px;
  1078. overflow: hidden;
  1079. }
  1080. .el-dialog__header {
  1081. display: flex;
  1082. flex-shrink: 0;
  1083. justify-content: space-between;
  1084. align-items: center;
  1085. box-sizing: border-box;
  1086. width: 100%;
  1087. height: 48px;
  1088. padding: 0 20px;
  1089. .el-dialog__title {
  1090. font-weight: 500;
  1091. font-size: 16px;
  1092. }
  1093. .el-dialog__headerbtn {
  1094. position: relative;
  1095. top: 0;
  1096. right: 0;
  1097. &::before {
  1098. position: absolute;
  1099. display: block;
  1100. box-sizing: border-box;
  1101. background-color: transparent;
  1102. border-radius: 50%;
  1103. transition: background-color 0.1s cubic-bezier(0, 0, 1, 1);
  1104. content: "";
  1105. top: 50%;
  1106. left: 50%;
  1107. width: 20px;
  1108. height: 20px;
  1109. transform: translate(-50%, -50%);
  1110. }
  1111. }
  1112. .el-dialog__headerbtn:hover {
  1113. &::before {
  1114. background-color: rgba(0, 0, 0, 0.5);
  1115. }
  1116. }
  1117. .el-dialog__close {
  1118. position: relative;
  1119. }
  1120. }
  1121. .el-dialog__body {
  1122. padding: 10px 20px;
  1123. }
  1124. .el-input-group__append {
  1125. padding: 0 10px;
  1126. }
  1127. }
  1128. }
  1129. .elForm {
  1130. ::v-deep {
  1131. .el-form-item__label {
  1132. max-width: 100%;
  1133. color: #4e5969;
  1134. font-size: 14px;
  1135. white-space: normal;
  1136. padding: 0;
  1137. font-weight: 400;
  1138. line-height: 32px;
  1139. }
  1140. }
  1141. }
  1142. .lineTitle {
  1143. background-color: rgba(247, 247, 247, 1);
  1144. padding: 10px;
  1145. border-radius: 4px;
  1146. color: #333;
  1147. }
  1148. .wrap {
  1149. display: flex;
  1150. align-items: center;
  1151. ::v-deep .el-form-item:not(:last-child) {
  1152. margin-right: 20px;
  1153. }
  1154. .el-form-item {
  1155. width: 180px;
  1156. }
  1157. }
  1158. </style>