level.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. <div id="app" v-cloak>
  2. <el-card shadow="never" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  3. <div slot="header">
  4. <div>
  5. <span>分红池等级</span>
  6. <div style="float: right; margin: -5px 0">
  7. <el-button type="primary" @click="$navigate({r: 'double-copy/pool/level-edit'})" size="small">添加等级</el-button>
  8. </div>
  9. </div>
  10. </div>
  11. <div class="table-body">
  12. <el-table v-loading="listLoading" :data="list" stripe style="width: 100%">
  13. <el-table-column prop="id" label="ID" width="80" align="center"></el-table-column>
  14. <el-table-column prop="level" label="等级" width="80" align="center">
  15. <template slot-scope="scope">
  16. 等级{{ scope.row.level }}
  17. </template>
  18. </el-table-column>
  19. <el-table-column label="等级名称" align="center">
  20. <template slot-scope="scope">
  21. <com-ellipsis :line="1">{{scope.row.name}}</com-ellipsis>
  22. </template>
  23. </el-table-column>
  24. <el-table-column label="所需一二市场业绩" prop="achievement" align="center"></el-table-column>
  25. <el-table-column label="单个市场业绩" prop="single_market" align="center"></el-table-column>
  26. <el-table-column label="当前池金额" prop="current_money" align="center"></el-table-column>
  27. <el-table-column label="累计池金额" prop="total_money" align="center"></el-table-column>
  28. <el-table-column label="奖励类型" prop="reward_currency" align="center"></el-table-column>
  29. <el-table-column label="当前人数" prop="bonus_num" align="center"></el-table-column>
  30. <el-table-column label="操作" width="180" align="center">
  31. <template slot-scope="scope">
  32. <el-button type="text" @click="handle('recharge', scope.row)">充值</el-button>
  33. <el-button type="text" @click="handle('send', scope.row)">发放记录</el-button>
  34. <el-button type="text" @click="handle('edit', scope.row)">编辑</el-button>
  35. <el-button type="text" @click="handle('destroy', scope.row)">删除</el-button>
  36. </template>
  37. </el-table-column>
  38. </el-table>
  39. <div style="text-align: right;margin: 20px 0;">
  40. <el-pagination @current-change="pagination" background layout="prev, pager, next" :page-count="pageCount"></el-pagination>
  41. </div>
  42. </div>
  43. </el-card>
  44. <!-- 弹窗开始 -->
  45. <el-dialog :title="level_name + '发放记录'" :visible.sync="dialogVisible" width="60%" @close="handle('close')">
  46. <el-table v-loading="logLoading" :data="logList" stripe style="width: 100%">
  47. <el-table-column label="发放总额" prop="total_bonus_money" align="center"></el-table-column>
  48. <el-table-column label="发放人数" prop="bonus_num" align="center"></el-table-column>
  49. <el-table-column label="每人可得金额" prop="bonus_money" align="center"></el-table-column>
  50. <el-table-column label="发放周期" prop="cycle_type" align="center">
  51. <template slot-scope="scope">
  52. {{ cycle_type_map[scope.row.cycle_type] }}
  53. </template>
  54. </el-table-column>
  55. <el-table-column label="发放时间" prop="upgrade_level_at" align="center">
  56. <template slot-scope="scope">
  57. {{scope.row.created_at|dateTimeFormat('Y-m-d H:i:s')}}
  58. </template>
  59. </el-table-column>
  60. <el-table-column label="奖励类型" prop="reward_currency" align="center">
  61. <template slot-scope="scope">
  62. {{ reward_currency_arr[scope.row.reward_currency] }}
  63. </template>
  64. </el-table-column>
  65. </el-table>
  66. <div style="text-align: right;margin: 20px 0;">
  67. <el-pagination @current-change="logPagination" background layout="prev, pager, next" :page-count="logPageCount"></el-pagination>
  68. </div>
  69. </el-dialog>
  70. <!-- 弹窗结束 -->
  71. <!-- 充值弹窗开始 -->
  72. <el-dialog :title="'充值金额'" :visible.sync="visible" width="30%">
  73. <el-form :model="form" :rules="rules" ref="form" label-width="100px" size="small">
  74. <el-form-item :label="'金额数量'" prop="num">
  75. <el-input v-model="form.num" style="width:350px" type="number" :placeholder="`请输入要加/减的分红金额(-1代表减1)`"></el-input>
  76. </el-form-item>
  77. <el-form-item label="备注" prop="desc">
  78. <el-input v-model="form.desc" placeholder="备注原因" style="width:350px"></el-input>
  79. </el-form-item>
  80. </el-form>
  81. <span slot="footer" class="dialog-footer">
  82. <el-button @click="visible = false" size="mini" :loading="submitLoading">取 消</el-button>
  83. <el-button type="primary" @click="recharge('form')" size="mini" :loading="submitLoading">确 定</el-button>
  84. </span>
  85. </el-dialog>
  86. <!-- 充值弹窗结束 -->
  87. </div>
  88. <script>
  89. const app = new Vue({
  90. el: '#app',
  91. data() {
  92. return {
  93. list: [],
  94. listLoading: false,
  95. page: 1,
  96. pageCount: 0,
  97. cycle_type_map: {
  98. 0: '每日',
  99. 1: '每周',
  100. 2: '每月',
  101. },
  102. reward_currency_arr: {
  103. 'score' : '积分',
  104. 'commission' : '佣金',
  105. },
  106. dialogVisible: false,
  107. logLoading: false,
  108. logList: [],
  109. logPage: 1,
  110. logPageCount: 0,
  111. level: 0,
  112. level_name: '',
  113. visible: false,
  114. submitLoading: false,
  115. form: {
  116. num: '',
  117. desc: '',
  118. level_id : ','
  119. },
  120. };
  121. },
  122. mounted: function () {
  123. this.getList();
  124. },
  125. methods: {
  126. search() {
  127. this.page = 1;
  128. this.getList();
  129. },
  130. pagination(currentPage) {
  131. let self = this;
  132. self.page = currentPage;
  133. self.getList();
  134. },
  135. getList() {
  136. let self = this;
  137. self.listLoading = true;
  138. request({
  139. params: {
  140. r: 'double-copy/pool/level',
  141. page: self.page,
  142. },
  143. method: 'get',
  144. }).then(e => {
  145. self.listLoading = false;
  146. self.list = e.data.data.list;
  147. self.pageCount = e.data.data.page_count;
  148. }).catch(e => {
  149. console.log(e);
  150. });
  151. },
  152. logPagination(currentPage) {
  153. let self = this;
  154. self.logPage = currentPage;
  155. self.getLogList();
  156. },
  157. getLogList() {
  158. let self = this;
  159. self.logLoading = true;
  160. let params = {
  161. r: 'double-copy/pool/send',
  162. page:self.logPage,
  163. level:self.level,
  164. };
  165. request({
  166. params: params,
  167. method: 'get',
  168. }).then(e => {
  169. self.logLoading = false;
  170. self.logList = e.data.data.list;
  171. self.logPageCount = e.data.data.page_count;
  172. }).catch(e => {
  173. console.log(e);
  174. });
  175. },
  176. // 操作处理
  177. handle(type, data = null) {
  178. let id = data ? parseInt(data.id) : '';
  179. switch (type) {
  180. case 'edit':// 编辑
  181. params = {
  182. r: 'double-copy/pool/level-edit'
  183. };
  184. if (id) params = Object.assign(params, {
  185. id: id
  186. });
  187. navigateTo(params);
  188. break;
  189. case 'destroy':
  190. params = {id: data.id, status: -1};
  191. this.$confirm('删除该条数据后不可以恢复, 是否继续?', '警告', {type: 'warning'}).then(() => {this.send(params,'double-copy/pool/handle')})
  192. break;
  193. case 'send':// 编辑
  194. this.level = data.level
  195. this.level_name = data.name
  196. this.dialogVisible = true
  197. this.getLogList()
  198. break;
  199. case 'close':// 关闭弹窗
  200. this.log_user_id = 0
  201. this.dialogVisible = false
  202. this.logPage = 1
  203. this.logList = []
  204. break;
  205. case 'recharge' :
  206. this.visible = true
  207. this.form.num = 0
  208. this.form.desc = ''
  209. this.form.level_id = data.id
  210. break;
  211. }
  212. },
  213. send(params,url) {
  214. let self = this;
  215. let basic_params = {
  216. r: url
  217. };
  218. params = Object.assign(basic_params, params);
  219. request({
  220. params: params,
  221. method: 'get'
  222. }).then(e => {
  223. if (e.data.code == 0) {
  224. self.$message.success(e.data.msg);
  225. self.getList();
  226. } else {
  227. self.$message.error(e.data.msg);
  228. }
  229. }).catch(e => {
  230. console.log(e);
  231. });
  232. },
  233. recharge(formName) {
  234. this.$refs[formName].validate((valid) => {
  235. if (valid) {
  236. this.submitLoading = true
  237. let params = {
  238. r: 'double-copy/pool/recharge'
  239. };
  240. request({
  241. params: params,
  242. method: 'post',
  243. data: this.form
  244. }).then(e => {
  245. this.submitLoading = false;
  246. if (e.data.code == 0) {
  247. this.$message.success(e.data.msg);
  248. this.visible = false
  249. this.getList();
  250. } else {
  251. this.$message.error(e.data.msg);
  252. }
  253. }).catch(e => {
  254. this.submitLoading = false;
  255. });
  256. } else {
  257. console.log('error submit!!');
  258. return false;
  259. }
  260. });
  261. },
  262. }
  263. });
  264. </script>
  265. <style>
  266. .table-body {
  267. padding: 20px;
  268. background-color: #fff;
  269. }
  270. .input-item {
  271. display: inline-block;
  272. width: 250px;
  273. margin: 0 0 20px;
  274. }
  275. .input-item .el-input__inner {
  276. border-right: 0;
  277. }
  278. .input-item .el-input__inner:hover {
  279. border: 1px solid #dcdfe6;
  280. border-right: 0;
  281. outline: 0;
  282. }
  283. .input-item .el-input__inner:focus {
  284. border: 1px solid #dcdfe6;
  285. border-right: 0;
  286. outline: 0;
  287. }
  288. .input-item .el-input-group__append {
  289. background-color: #fff;
  290. border-left: 0;
  291. width: 10%;
  292. padding: 0;
  293. }
  294. .input-item .el-input-group__append .el-button {
  295. padding: 0;
  296. }
  297. .input-item .el-input-group__append .el-button {
  298. margin: 0;
  299. }
  300. .table-body .el-button {
  301. padding: 0 !important;
  302. border: 0;
  303. margin: 0 5px;
  304. }
  305. .el-table th>.cell{
  306. color: #333;
  307. font-weight: bold;
  308. font-size: 14px;
  309. }
  310. .el-table__footer-wrapper, .el-table__header-wrapper{
  311. border-bottom: 1.4px solid #D6D6D6;
  312. }
  313. </style>