createMember.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <template>
  2. <div>
  3. <!-- <p class="title">已选择{{ multipleSelection.length }}名学员</p> -->
  4. <el-form :model="memberForm" label-width="100px" ref="memberForm">
  5. <el-form-item
  6. label="团练宝单位"
  7. prop="period"
  8. :rules="[
  9. { required: true, message: '请选择团练宝单位', trigger: 'blur' },
  10. ]"
  11. >
  12. <el-select
  13. placeholder="团练宝单位"
  14. clearable
  15. v-model.trim="memberForm.period"
  16. @change="getMemberList"
  17. style="width: 100% !important"
  18. >
  19. <el-option label="月度" value="MONTH"></el-option>
  20. <el-option label="季度" value="QUARTERLY"></el-option>
  21. <el-option label="半年" value="YEAR_HALF"></el-option>
  22. <el-option label="年度" value="YEAR"></el-option>
  23. <!-- <el-option label="固定天数" value="DAY"></el-option> -->
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item
  27. label="团练宝周期"
  28. prop="memberNum"
  29. :rules="[
  30. { required: true, message: '请输入团练宝周期', trigger: 'blur' },
  31. ]"
  32. >
  33. <el-input
  34. type="number"
  35. @input="getMemberList"
  36. onKeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))"
  37. v-model="memberForm.memberNum"
  38. placeholder="请输入团练宝周期"
  39. >
  40. </el-input>
  41. </el-form-item>
  42. <el-form-item
  43. label="缴费金额"
  44. prop="actualAmount"
  45. :rules="[
  46. { required: true, message: '请输入缴费金额', trigger: 'blur' },
  47. { validator: validateMember, trigger: 'blur' },
  48. ]"
  49. >
  50. <!-- onKeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))" -->
  51. <el-input
  52. type="number"
  53. @keyup.native='keyupEvent($event)'
  54. v-model="memberForm.actualAmount"
  55. placeholder="请输入缴费金额"
  56. >
  57. <div slot="append">元/人</div>
  58. </el-input>
  59. </el-form-item>
  60. <p style="color: red; padding: 0 0 20px 100px">若修改默认金额需审核通过后生效</p>
  61. <el-form-item label="备注" prop="remark"
  62. :rules="[
  63. { required: true, message: '请输入备注', trigger: 'blur' },
  64. ]">
  65. <el-input
  66. type="textarea"
  67. show-word-limit
  68. :max="200"
  69. v-model.trim="memberForm.remark"
  70. placeholder="请输入备注"
  71. ></el-input>
  72. </el-form-item>
  73. </el-form>
  74. </div>
  75. </template>
  76. <script>
  77. import { add, update } from "../api";
  78. import { getmemberRankOrganizationFeeMapper } from '@/views/categroyManager/productSystem/api'
  79. import { sysConfigList } from "@/api/generalSettings"; // 平台的修改和查
  80. export default {
  81. props: ["multipleSelection", 'type'],
  82. data() {
  83. return {
  84. memberForm: {
  85. memberNum: null,
  86. actualAmount: null,
  87. period: null,
  88. remark: null
  89. },
  90. userIds: [],
  91. organId: null,
  92. rulesForm: null,// 范围
  93. memberFeeSetting: null
  94. };
  95. },
  96. mounted() {
  97. console.log(this.multipleSelection)
  98. if(this.type == 'update') {
  99. const { memberNum, actualAmount, period, remark, organId, id } = this.multipleSelection
  100. this.memberForm = {
  101. memberNum,
  102. period,
  103. actualAmount,
  104. remark,
  105. id
  106. }
  107. this.organId = organId
  108. } else {
  109. this.userIds = this.multipleSelection
  110. .map((stu) => {
  111. return stu.userId;
  112. });
  113. this.organId = this.multipleSelection[0].organId //
  114. }
  115. this.__init()
  116. },
  117. methods: {
  118. async __init() {
  119. try {
  120. const res = await sysConfigList({ group: "DEFAULT" });
  121. const paramName = 'cloud_price_range'
  122. res.data.forEach((item) => {
  123. if(item.paramName == paramName) {
  124. const itemValue = item.paranValue ? JSON.parse(item.paranValue) : null
  125. if(itemValue) {
  126. this.rulesForm = itemValue
  127. }
  128. }
  129. });
  130. const rankInfo = await getmemberRankOrganizationFeeMapper({ page: 1, rows: 10, organId: this.organId })
  131. // console.log(rankInfo)
  132. const { rows } = rankInfo.data
  133. if(!rows[0]?.memberFeeSetting){
  134. this.$bus.$emit("showguide", ['memberList']);
  135. }
  136. this.memberFeeSetting = rows[0]?.memberFeeSetting
  137. } catch(e) {
  138. }
  139. },
  140. getMemberList() {
  141. let money = 0
  142. const memberForm = this.memberForm
  143. const memberFeeSetting = this.memberFeeSetting
  144. if(memberFeeSetting) {
  145. switch (memberForm?.period) {
  146. case "MONTH": {
  147. money = Number(memberFeeSetting.groupPurchaseMonthFee * memberForm.memberNum)
  148. break;
  149. }
  150. case "QUARTERLY": {
  151. money = Number(memberFeeSetting.groupPurchaseQuarterlyFee * memberForm.memberNum)
  152. break;
  153. }
  154. case "YEAR_HALF": {
  155. money = Number(memberFeeSetting.groupPurchaseHalfYearFee * memberForm.memberNum)
  156. break;
  157. }
  158. case "YEAR": {
  159. money = Number(memberFeeSetting.groupPurchaseYearFee * memberForm.memberNum)
  160. break;
  161. }
  162. }
  163. }
  164. if(memberForm.memberNum && memberForm.period) {
  165. this.memberForm.actualAmount = money
  166. }
  167. },
  168. submit() {
  169. this.$refs.memberForm.validate(async (res) => {
  170. console.log(res, this.type, 'res')
  171. if (res) {
  172. try {
  173. if(this.type == 'update') {
  174. await update({
  175. ...this.memberForm,
  176. organId: this.organId
  177. });
  178. this.$message.success('创建团练宝成功')
  179. } else {
  180. await add({
  181. ...this.memberForm,
  182. userIds: this.userIds,
  183. organId: this.organId
  184. });
  185. this.$message.success('创建团练宝成功')
  186. }
  187. this.$emit("close");
  188. this.$emit("submited");
  189. } catch (e) {
  190. console.log(e);
  191. }
  192. }
  193. });
  194. },
  195. validateMember(rule, value, callback) {
  196. const one = Number(value);
  197. let min = 0;
  198. let max = 0;
  199. switch (this.memberForm?.period) {
  200. case "MONTH": {
  201. min =
  202. Number(this.rulesForm.minMonthFee) * this.memberForm.memberNum;
  203. max =
  204. Number(this.rulesForm.maxMonthFee) * this.memberForm.memberNum;
  205. break;
  206. }
  207. case "QUARTERLY": {
  208. min =
  209. Number(this.rulesForm.minQuarterlyFee) *
  210. this.memberForm.memberNum;
  211. max =
  212. Number(this.rulesForm.maxQuarterlyFee) *
  213. this.memberForm.memberNum;
  214. break;
  215. }
  216. case "YEAR_HALF": {
  217. min =
  218. Number(this.rulesForm.minHalfYearFee) * this.memberForm.memberNum;
  219. max =
  220. Number(this.rulesForm.maxHalfYearFee) * this.memberForm.memberNum;
  221. break;
  222. }
  223. case "YEAR": {
  224. min = Number(this.rulesForm.minYearFee) * this.memberForm.memberNum;
  225. max = Number(this.rulesForm.maxYearFee) * this.memberForm.memberNum;
  226. break;
  227. }
  228. }
  229. if (one >= min && one <= max) {
  230. return callback();
  231. }
  232. return callback(new Error(`定价应在${min}-${max}之间`));
  233. },
  234. },
  235. };
  236. </script>
  237. <style lang="scss" scoped>
  238. .title {
  239. margin-bottom: 30px;
  240. font-size: 16px;
  241. color: #000;
  242. }
  243. </style>