level-edit.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-dialog-select');
  4. ?>
  5. <div id="app" v-cloak>
  6. <el-card class="box-card" v-loading="cardLoading" shadow="never" style="border:0;min-width: 1250px;"
  7. body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  8. <div slot="header">
  9. <el-breadcrumb separator="/">
  10. <el-breadcrumb-item>
  11. <span style="color: #409EFF;cursor: pointer" @click="$navigate({r:'double-copy/pool/level'})">等级</span>
  12. </el-breadcrumb-item>
  13. <el-breadcrumb-item>编辑等级</el-breadcrumb-item>
  14. </el-breadcrumb>
  15. </div>
  16. <div class="form-body" style="padding: 20px 45% 0 10px">
  17. <el-form :model="ruleForm" :rules="rules" size="small" ref="ruleForm" label-width="160px">
  18. <el-row>
  19. <el-col :span="24">
  20. <el-form-item label="等级权重" prop="level">
  21. <el-select v-model="ruleForm.level" placeholder="请选择" style=" width: 260px;" @change="loadLevelList">
  22. <el-option v-for="item in weights" :key="item.level" :label="item.name"
  23. :value="item.level" :disabled="item.disabled && item.level!=origin_level">
  24. </el-option>
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item label="等级名称" prop="name">
  28. <el-input v-model="ruleForm.name" placeholder="请输入等级名称" type="text" maxlength="20" show-word-limit style=" width: 260px;"></el-input>
  29. </el-form-item>
  30. <el-form-item label="所需一二市场总业绩">
  31. <el-input v-model.number="ruleForm.achievement" type="text" style=" width: 260px;">
  32. <template slot="append">元</template>
  33. </el-input>
  34. </el-form-item>
  35. <el-form-item label="单个市场业绩">
  36. <el-input v-model.number="ruleForm.single_market" type="text" style=" width: 260px;">
  37. <template slot="append">元</template>
  38. </el-input>
  39. </el-form-item>
  40. <el-form-item label="计入分红池商品">
  41. <com-dialog-select :multiple="true" @selected="goodsSelect" title="计入分红池商品">
  42. <el-button type="primary" size="small" plain>选择商品</el-button>
  43. </com-dialog-select>
  44. </el-form-item>
  45. <el-form-item prop="goods_setting">
  46. <template>
  47. <div style="color: #ff4544;">最多可添加99个商品</div>
  48. <div>
  49. <div class="outer_box" v-for="(item,key) in ruleForm.goods_setting" >
  50. <div class="goods_box">
  51. <div>
  52. <com-image mode="aspectFill" :src="item.goods.cover_pic"></com-image>
  53. </div>
  54. <div class="goods_desc">
  55. <span class="ellipsis">{{ item.goods.name }}</span>
  56. <span style="display: flex;justify-content: space-between;">
  57. <span>¥{{ item.goods.price }}</span>
  58. </span>
  59. </div>
  60. <div>
  61. <el-button style="margin-top: 10px;" plain size="small" @click="deleteGoods(key)"><i class="el-icon-delete"></i> 删除</el-button>
  62. </div>
  63. </div>
  64. <div style="border-radius: 0 10px 10px 0; border: 1px solid #dcdfe6; padding: 0 20px; border-left: 0px;">
  65. <div style="margin-left: 10px;">
  66. 是否百分比:
  67. <el-radio-group v-model="item.is_percent">
  68. <el-radio :label="0">否</el-radio>
  69. <el-radio :label="1">是</el-radio>
  70. </el-radio-group>
  71. </div>
  72. <div style="display: flex;align-items:center;">
  73. <div style="width: 80px;text-align: right"><span style="color: red;">*</span>分红金额:</div>
  74. <el-input v-model="item.money" type="text" style=" width: 150px;" onkeyup="value=toNumber(value,2)">
  75. <template v-if="item.is_percent == 0" slot="append">元</template>
  76. <template v-if="item.is_percent == 1" slot="append">%</template>
  77. </el-input>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </template>
  83. </el-form-item>
  84. <el-form-item label="状态">
  85. <el-switch v-model="ruleForm.status" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭"></el-switch>
  86. </el-form-item>
  87. <el-form-item label="额外分红池">
  88. <label slot="label">额外分红池
  89. <el-tooltip class="item" effect="dark" content="开启当前开关并选择其中等级可获得被选择等级的分红池奖励" placement="top-start">
  90. <i class="el-icon-info"></i>
  91. </el-tooltip>
  92. </label>
  93. <el-switch v-model="ruleForm.is_enable_extra_pool" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭"></el-switch>
  94. <el-checkbox-group v-if="ruleForm.is_enable_extra_pool == 1"
  95. v-model="ruleForm.extra_pool_level">
  96. <el-checkbox v-for="(item, index) in levelList" :label="item.level" :key="item.level">{{item.name}}</el-checkbox>
  97. </el-checkbox-group>
  98. </el-form-item>
  99. </el-col>
  100. </el-row>
  101. </el-form>
  102. </div>
  103. <el-button class="button-item" :loading="btnLoading" type="primary" @click="submitForm('ruleForm')"
  104. size="small">保存
  105. </el-button>
  106. </el-card>
  107. </div>
  108. <script>
  109. const app = new Vue({
  110. el: '#app',
  111. data() {
  112. return {
  113. origin_level: 0,
  114. showConditionMsg: false,
  115. conditionMsg: '',
  116. //权重列表
  117. weights: [],
  118. ruleForm: {
  119. level: '', //当前选中等级
  120. name: '',
  121. achievement: 0,
  122. single_market: 0,
  123. status: 1,
  124. goods_setting: [],
  125. is_enable_extra_pool: '',
  126. extra_pool_level: []
  127. },
  128. rules: {
  129. level: [
  130. {required: true, message: '请选择等级', trigger: 'change'},
  131. ],
  132. name: [
  133. {required: true, message: '请输入等级名称', trigger: 'change'},
  134. ],
  135. },
  136. btnLoading: false,
  137. cardLoading: false,
  138. levelList: []
  139. };
  140. },
  141. mounted() {
  142. this.loadData();
  143. },
  144. methods: {
  145. // 获取显示的值
  146. loadData() {
  147. this.cardLoading = true;
  148. request({
  149. params: {
  150. r: 'double-copy/pool/level-edit',
  151. id: getQuery('id')
  152. },
  153. }).then(e => {
  154. this.cardLoading = false;
  155. if (e.data.code == 0) {
  156. if (e.data.data.detail) {
  157. Object.assign(this.ruleForm, e.data.data.detail)
  158. this.origin_level = this.ruleForm.level;
  159. this.loadLevelList(this.ruleForm.level)
  160. }
  161. this.weights = e.data.data.weights;
  162. } else {
  163. this.$message.error(e.data.msg);
  164. }
  165. }).catch(e => {
  166. console.log(e);
  167. });
  168. },
  169. loadLevelList(level) {
  170. request({
  171. params: {
  172. r: 'double-copy/pool/level-list',
  173. level: level
  174. },
  175. }).then(e => {
  176. if (e.data.code == 0) {
  177. this.levelList = e.data.data
  178. } else {
  179. this.$message.error(e.data.msg);
  180. }
  181. }).catch(e => {
  182. console.log(e);
  183. });
  184. },
  185. //提交表单
  186. submitForm(formName) {
  187. let self = this;
  188. if (isEmpty(self.ruleForm.goods_setting)) {
  189. self.$message.error('请添加计入分红池商品');
  190. return;
  191. }
  192. self.showConditionMsg = false;
  193. self.ruleForm.goods_setting.forEach(function (item, index) {
  194. if (item.money <= 0) {
  195. self.showConditionMsg = true;
  196. self.conditionMsg = '商品:“'+item.goods.name+'” 请输入计入分红池金额';
  197. return;
  198. }
  199. })
  200. if (self.showConditionMsg) {
  201. this.$message.error(self.conditionMsg);
  202. return
  203. }
  204. this.$refs[formName].validate((valid) => {
  205. if (valid) {
  206. self.btnLoading = true;
  207. request({
  208. params: {
  209. r: 'double-copy/pool/level-edit'
  210. },
  211. method: 'post',
  212. data: {
  213. form: self.ruleForm,
  214. }
  215. }).then(e => {
  216. self.btnLoading = false;
  217. if (e.data.code == 0) {
  218. navigateTo({
  219. r: 'double-copy/pool/level'
  220. })
  221. } else {
  222. self.$message.error(e.data.msg);
  223. }
  224. }).catch(e => {
  225. self.$message.error(e.data.msg);
  226. self.btnLoading = false;
  227. });
  228. } else {
  229. console.log('error submit!!');
  230. return false;
  231. }
  232. });
  233. },
  234. //选择商品
  235. goodsSelect(param) {
  236. for (let j in param) {
  237. let item = param[j];
  238. if (this.ruleForm.goods_setting.length >= 99) {
  239. this.$message.error('指定商品不能大于99个');
  240. return;
  241. }
  242. let flag = true;
  243. for (let i in this.ruleForm.goods_setting) {
  244. if (this.ruleForm.goods_setting[i].goods_id == param[j].id) {
  245. flag = false;
  246. break;
  247. }
  248. }
  249. if (flag) {
  250. this.ruleForm.goods_setting.push({
  251. goods_id: param[j].id,
  252. goods: {
  253. id: param[j].id,
  254. name: param[j].goods_name,
  255. cover_pic: param[j].cover_pic,
  256. price: param[j].price,
  257. },
  258. is_percent: 0,
  259. money: 0,
  260. });
  261. }
  262. }
  263. },
  264. //删除商品
  265. deleteGoods(index) {
  266. this.ruleForm.goods_setting.splice(index, 1);
  267. },
  268. }
  269. });
  270. </script>
  271. <style>
  272. .outer_box {
  273. margin: 13px 0px;
  274. display: flex;
  275. }
  276. .goods_box {
  277. width: 50%;
  278. border: 1px solid #dcdfe6;
  279. border-radius: 10px 0 0 10px;
  280. padding: 10px;
  281. display: flex;
  282. }
  283. .ellipsis {
  284. width: 100%;
  285. text-overflow: ellipsis;
  286. overflow: hidden;
  287. white-space: nowrap;
  288. }
  289. .goods_desc {
  290. line-height: 22px;
  291. width: 50%;
  292. margin-left: 10px;
  293. }
  294. .goods_desc span {
  295. display: inline-block;
  296. }
  297. </style>