member-setting.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <el-form
  3. label-width="160px"
  4. :model="form"
  5. ref="form"
  6. label-suffix=": "
  7. :inline="true"
  8. >
  9. <el-form-item label="是否购买会员" v-if="isUserType && addStudent">
  10. <el-radio-group v-model="radio">
  11. <el-radio :label="true">购买会员</el-radio>
  12. <el-radio :label="false">不购买会员</el-radio>
  13. </el-radio-group>
  14. </el-form-item>
  15. <el-form-item
  16. label="会员等级"
  17. prop="memberRankSettingId"
  18. v-if="isUserType && radio"
  19. :rules="[{ required: true, message: '请选择会员等级', trigger: 'blur' }]"
  20. >
  21. <el-select
  22. placeholder="会员等级"
  23. style="width: 620px !important"
  24. clearable
  25. filterable
  26. @change="memberRankSettingIdChange"
  27. v-model.trim="form.memberRankSettingId"
  28. >
  29. <el-option
  30. :value="item.id"
  31. :label="item.name"
  32. v-for="item in memberRankList"
  33. :key="item.id"
  34. ></el-option>
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item
  38. label="会员有效期"
  39. prop="memberValidDate"
  40. v-if="isUserType && radio"
  41. :rules="[
  42. { required: true, message: '请选择会员有效期', trigger: 'blur' },
  43. ]"
  44. >
  45. <el-input
  46. :disabled="true"
  47. style="width: 596px"
  48. v-model="form.memberValidDate"
  49. >
  50. <template slot="append">个月</template>
  51. </el-input>
  52. <el-tooltip placement="top" popper-class="mTooltip">
  53. <div slot="content">自开课之日起6个月有效。</div>
  54. <i
  55. class="el-icon-question micon el-tooltip"
  56. style="font-size: 18px; color: #f56c6c"
  57. v-permission="'export/teacherSalary'"
  58. ></i>
  59. </el-tooltip>
  60. </el-form-item>
  61. <el-form-item
  62. label="团购价"
  63. prop="memberPaymentAmount"
  64. v-if="isUserType && radio"
  65. :rules="[
  66. {
  67. pattern:
  68. /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  69. message: '请输入正确的金额',
  70. },
  71. { required: true, message: '请输入现价', trigger: 'blur' },
  72. ]"
  73. >
  74. <el-input style="width: 223px" v-model="form.memberPaymentAmount">
  75. <template slot="append">元</template>
  76. </el-input>
  77. </el-form-item>
  78. <el-form-item
  79. label="原价"
  80. prop="originalMemberPaymentAmount"
  81. v-if="isUserType && radio"
  82. :rules="[{ required: true, message: '请输入原价', trigger: 'blur' }]"
  83. >
  84. <el-input
  85. style="width: 223px"
  86. v-model="form.originalMemberPaymentAmount"
  87. :disabled="true"
  88. >
  89. <template slot="append">元</template>
  90. </el-input>
  91. </el-form-item>
  92. <el-form-item
  93. label="缴费时间"
  94. prop="paymentDate"
  95. v-if="isUserType && !addStudent && showTime"
  96. :rules="[{ required: true, message: '请选择缴费时间', trigger: 'blur' }]"
  97. >
  98. <el-date-picker
  99. v-model="form.paymentDate"
  100. type="daterange"
  101. style="width: 620px"
  102. :picker-options="pickerOptions"
  103. range-separator="至"
  104. start-placeholder="开始日期"
  105. end-placeholder="结束日期"
  106. >
  107. </el-date-picker>
  108. </el-form-item>
  109. </el-form>
  110. </template>
  111. <script>
  112. import { objectToOptions } from "@/utils";
  113. import { getAllmemberRank, getMemberFee } from "../api";
  114. export default {
  115. props: [
  116. "form",
  117. "isUserType",
  118. "organId",
  119. "addStudent",
  120. "showTime",
  121. "viewDetail",
  122. ],
  123. data() {
  124. return {
  125. pickerOptions: {
  126. firstDayOfWeek: 1,
  127. disabledDate(time) {
  128. return time.getTime() + 86400000 <= new Date().getTime();
  129. },
  130. },
  131. dataTime: ["2021-05-14", "2021-05-19"],
  132. memberRankList: [],
  133. radio: true,
  134. };
  135. },
  136. async mounted() {
  137. // 获取所有得会员信息
  138. try {
  139. const res = await getAllmemberRank({ isDefault: 0 });
  140. this.memberRankList = res.data;
  141. } catch (e) {
  142. console.log(e);
  143. }
  144. this.$set(this.form, "memberValidDate", 6);
  145. },
  146. beforeDestroy() {
  147. this.$set(this.form, "memo", null);
  148. this.$set(this.form, "memberRankSettingId", null);
  149. this.$set(this.form, "memberValidDate", null);
  150. this.$set(this.form, "memberPaymentAmount", null);
  151. this.$set(this.form, "originalMemberPaymentAmount", null);
  152. this.$set(this.form, "paymentDate", []);
  153. },
  154. methods: {
  155. async memberRankSettingIdChange(val) {
  156. if (val) {
  157. try {
  158. const res = await getMemberFee({
  159. rankId: val,
  160. organId: this.organId,
  161. });
  162. if (
  163. res.data?.groupPurchaseHalfYearFee &&
  164. res.data?.originalHalfYearFee
  165. ) {
  166. this.$set(
  167. this.form,
  168. "memberPaymentAmount",
  169. res.data?.groupPurchaseHalfYearFee
  170. );
  171. this.$set(
  172. this.form,
  173. "originalMemberPaymentAmount",
  174. res.data?.originalHalfYearFee
  175. );
  176. } else {
  177. this.$message.error("请设置该会员的默认价格");
  178. }
  179. if (!res.data) {
  180. this.$bus.$emit("showguide", ["memberList"]);
  181. return;
  182. }
  183. } catch (e) {
  184. console.log(e);
  185. }
  186. }
  187. },
  188. },
  189. watch: {
  190. radio(val) {
  191. if (!val) {
  192. this.$set(this.form, "memberRankSettingId", null);
  193. this.$set(this.form, "memberValidDate", null);
  194. this.$set(this.form, "memberPaymentAmount", null);
  195. this.$set(this.form, "originalMemberPaymentAmount", null);
  196. this.$set(this.form, "paymentDate", []);
  197. } else {
  198. this.$set(this.form, "memberValidDate", 6);
  199. }
  200. },
  201. viewDetail: {
  202. deep: true,
  203. handler(val) {
  204. if (val.musicGroupPaymentCalenders[0]?.memberRankSettingId) {
  205. this.radio = true;
  206. } else {
  207. this.radio = false;
  208. }
  209. },
  210. },
  211. },
  212. };
  213. </script>
  214. <style lang="less" scoped>
  215. .number-input {
  216. /deep/ .el-input__inner {
  217. text-align: left;
  218. }
  219. width: 100%;
  220. }
  221. </style>