member-setting.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 { paymentPatternType } from "@/constant";
  113. import { objectToOptions } from "@/utils";
  114. import { getAllmemberRank, getMemberFee } from "../api";
  115. export default {
  116. props: [
  117. "form",
  118. "isUserType",
  119. "organId",
  120. "addStudent",
  121. "showTime",
  122. "viewDetail",
  123. ],
  124. data() {
  125. return {
  126. paymentPatternTypeOptions: objectToOptions(paymentPatternType),
  127. pickerOptions: {
  128. firstDayOfWeek: 1,
  129. disabledDate(time) {
  130. return time.getTime() + 86400000 <= new Date().getTime();
  131. },
  132. },
  133. dataTime: ["2021-05-14", "2021-05-19"],
  134. memberRankList: [],
  135. radio: true,
  136. };
  137. },
  138. async mounted() {
  139. // 获取所有得会员信息
  140. try {
  141. const res = await getAllmemberRank({ isDefault: 0 });
  142. this.memberRankList = res.data;
  143. } catch (e) {
  144. console.log(e);
  145. }
  146. this.$set(this.form, "memberValidDate", 6);
  147. },
  148. methods: {
  149. async memberRankSettingIdChange(val) {
  150. if (val) {
  151. try {
  152. const res = await getMemberFee({
  153. rankId: val,
  154. organId: this.organId,
  155. });
  156. if (res.data?.currentHalfYearFee && res.data?.originalHalfYearFee) {
  157. this.$set(
  158. this.form,
  159. "memberPaymentAmount",
  160. res.data?.currentHalfYearFee
  161. );
  162. this.$set(
  163. this.form,
  164. "originalMemberPaymentAmount",
  165. res.data?.originalHalfYearFee
  166. );
  167. } else {
  168. this.$message.error("请设置该会员的默认价格");
  169. }
  170. } catch (e) {
  171. console.log(e);
  172. }
  173. }
  174. },
  175. },
  176. watch: {
  177. radio(val) {
  178. if (!val) {
  179. this.$set(this.form, "memberRankSettingId", null);
  180. this.$set(this.form, "memberValidDate", null);
  181. this.$set(this.form, "memberPaymentAmount", null);
  182. this.$set(this.form, "originalMemberPaymentAmount", null);
  183. this.$set(this.form, "paymentDate", []);
  184. } else {
  185. this.$set(this.form, "memberValidDate", 6);
  186. }
  187. },
  188. viewDetail: {
  189. deep: true,
  190. handler(val) {
  191. if (val.musicGroupPaymentCalenders[0]?.memberRankSettingId) {
  192. this.radio = true;
  193. } else {
  194. this.radio = false;
  195. }
  196. },
  197. },
  198. },
  199. };
  200. </script>
  201. <style lang="less" scoped>
  202. .number-input {
  203. /deep/ .el-input__inner {
  204. text-align: left;
  205. }
  206. width: 100%;
  207. }
  208. </style>