distribution.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. define({
  2. name: "distribution",
  3. template: `
  4. <div>
  5. <el-form ref="form" label-width="15%">
  6. <div id="vue_head">
  7. <div class="base_set">
  8. <div class="vue-main-title">
  9. <div class="vue-main-title-left"></div>
  10. <div class="vue-main-title-content">分销设置</div>
  11. </div>
  12. <el-divider></el-divider>
  13. <div class="vue-main-form">
  14. <el-form-item label="开启分销">
  15. <el-radio v-model="is_open_commission" :label="0">关闭</el-radio>
  16. <el-radio v-model="is_open_commission" :label="1">开启</el-radio>
  17. <div class="help-block">如果不开启分销,则不产生分销佣金</div>
  18. </el-form-item>
  19. <el-form-item label="独立规则">
  20. <el-switch v-model="has_rule_commission" :active-value="1" :inactive-value="0"></el-switch>
  21. <span>启用独立佣金比例</span>
  22. <div class="help-block">启用独立佣金设置,此商品拥有独自的佣金比例,不受分销商等级比例及默认设置限制</div>
  23. </el-form-item>
  24. <el-form-item prop="defaultRatio" v-show="has_rule_commission">
  25. <el-row :gutter="15" class="gutter">
  26. <el-col :span="3">
  27. <div class="grid-content bg-purple">等级名称</div>
  28. </el-col>
  29. <el-col :span="7" v-for="(title, index) in headerList" :key="index">
  30. <div class="grid-content bg-purple">{{title}}</div>
  31. </el-col>
  32. </el-row>
  33. <el-row :gutter="20" class="gutter" v-for="(level, index) in levelList" :key="index">
  34. <el-col :span="3">
  35. <div class="grid-content bg-purple">{{level.levelName}}</div>
  36. </el-col>
  37. <el-col :span="7" class="flex-col" v-if="headerList.length >= 1">
  38. <el-input placeholder="请输入百分比" v-model="level.first_level_rate" maxlength="10" size="small " oninput="if(value<0)value=''" type="number">
  39. <template slot="append">% 固定</template>
  40. </el-input>
  41. <el-input placeholder="请输入金额" v-model="level.first_level_pay" maxlength="10" size="small " oninput="if(value<0)value=''" type="number">
  42. <template slot="append">元</template>
  43. </el-input>
  44. </el-col>
  45. <el-col :span="7" class="flex-col" v-if="headerList.length >= 2">
  46. <el-input placeholder="请输入百分比" v-model="level.second_level_rate" maxlength="10" size="small " oninput="if(value<0)value=''" type="number">
  47. <template slot="append">% 固定</template>
  48. </el-input>
  49. <el-input placeholder="请输入金额" v-model="level.second_level_pay" maxlength="10" size="small " oninput="if(value<0)value=''" type="number">
  50. <template slot="append">元</template>
  51. </el-input>
  52. </el-col>
  53. <el-col :span="7" class="flex-col" v-if="headerList.length >= 3">
  54. <el-input placeholder="请输入百分比" v-model="level.third_level_rate" maxlength="10" size="small " oninput="if(value<0)value=''" type="number">
  55. <template slot="append">% 固定</template>
  56. </el-input>
  57. <el-input placeholder="请输入金额" v-model="level.third_level_pay" maxlength="10" size="small " oninput="if(value<0)value=''" type="number">
  58. <template slot="append">元</template>
  59. </el-input>
  60. </el-col>
  61. </el-row>
  62. <div class="help-block">如果比例为空或等于0,则使用固定规则,如果都为空或等于0则无分销佣金</div>
  63. </el-form-item>
  64. <el-divider></el-divider>
  65. </div>
  66. </div>
  67. </div>
  68. </el-form>
  69. </div>
  70. `,
  71. style: `
  72. .help-block{
  73. font-size:12px;
  74. }
  75. .location{
  76. display:flex;
  77. justify-content:flex-end;
  78. }
  79. .gutter{
  80. text-align:center;
  81. }
  82. .flex-col{
  83. display:flex;
  84. margin-top:5px;
  85. }
  86. `,
  87. props: {
  88. form: {
  89. type: Object,
  90. default() {
  91. return {}
  92. }
  93. }
  94. },
  95. data(){
  96. return {
  97. is_open_commission: 0,
  98. has_rule_commission: 0,
  99. maxLevel: '',
  100. headerList: [],
  101. levelList: [],
  102. }
  103. },
  104. mounted() {
  105. this.maxLevel = this.form.setLevel ? this.form.setLevel : 0;
  106. // 数据为空时会返回空数组
  107. if (this.form.item && !Array.isArray(this.form.item)) {
  108. this.is_open_commission = this.form.item.is_commission ? this.form.item.is_commission : 0;
  109. this.has_rule_commission = this.form.item.has_commission ? this.form.item.has_commission : 0;
  110. }
  111. this.setLevelList(this.maxLevel, this.form.levels);
  112. },
  113. methods: {
  114. setLevelList (max_level=0, levelData) {
  115. let levels = [];
  116. let headerList = [];
  117. let maxLevel = parseInt(max_level);
  118. switch (maxLevel) {
  119. case 1:
  120. headerList.push("一级分销");
  121. break;
  122. case 2:
  123. headerList.push("一级分销", "二级分销");
  124. break;
  125. case 3:
  126. headerList.push("一级分销", "二级分销", "三级分销");
  127. break;
  128. default:
  129. break;
  130. }
  131. levelData.forEach((item, index) => {
  132. let level = {
  133. levelName: item.name,
  134. levelKey: item.fromName
  135. };
  136. if (headerList.length >= 1) {
  137. level.first_level_rate = item.first_level_rate;
  138. level.first_level_pay = item.first_level_pay;
  139. }
  140. if(headerList.length >= 2) {
  141. level.second_level_rate = item.second_level_rate;
  142. level.second_level_pay = item.second_level_pay;
  143. }
  144. if (headerList.length == 3) {
  145. level.third_level_rate = item.third_level_rate;
  146. level.third_level_pay = item.third_level_pay;
  147. }
  148. levels[index] = level;
  149. })
  150. this.headerList = headerList;
  151. this.levelList = levels;
  152. // 将数组从首位默认值, 移到末尾
  153. this.levelList.push(this.levelList.shift())
  154. },
  155. filterList (list = []) {
  156. let ruleArr = {};
  157. list.forEach((item) => {
  158. ruleArr[item.levelKey] = item;
  159. })
  160. return ruleArr;
  161. },
  162. validate () {
  163. return {
  164. is_commission: this.is_open_commission,
  165. has_commission: this.has_rule_commission,
  166. rule: this.filterList(this.levelList)
  167. }
  168. },
  169. },
  170. })