index.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-user-info');
  4. ComponentHelper::loadComponentView('com-order-detail');
  5. ?>
  6. <div id="app" v-cloak>
  7. <el-card shadow="never" style="border:0;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  8. <div slot="header">
  9. <el-breadcrumb separator="/">
  10. <el-breadcrumb-item>
  11. 分佣明细
  12. </el-breadcrumb-item>
  13. </el-breadcrumb>
  14. </div>
  15. <div class="table-body">
  16. <el-form
  17. :inline="true"
  18. :model="searchData"
  19. size="mini"
  20. >
  21. <el-row>
  22. <el-form-item label="会员ID">
  23. <el-input v-model="searchData.user_id" placeholder="会员ID"></el-input>
  24. </el-form-item>
  25. <el-form-item label="会员昵称/手机号">
  26. <el-input v-model="searchData.user_keyword" placeholder="会员昵称/手机号"></el-input>
  27. </el-form-item>
  28. <el-form-item label="联系电话">
  29. <el-input v-model="searchData.mobile" placeholder="联系电话"></el-input>
  30. </el-form-item>
  31. <el-form-item label="状态">
  32. <el-select v-model="searchData.status" placeholder="请选择">
  33. <el-option
  34. v-for="item in statusOptions"
  35. :key="item.value"
  36. :label="item.label"
  37. :value="item.value">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item>
  42. <el-button type="primary" @click="onSubmit">查询</el-button>
  43. <el-button @click="resetForm">重置</el-button>
  44. </el-form-item>
  45. </el-row>
  46. </el-form>
  47. <!-- 审核列表 -->
  48. <template>
  49. <el-table ref="multipleTable" :data="list" @selection-change="handleSelectionChange" :loading="listLoading">
  50. <!-- 空数据 -->
  51. <template slot="empty">
  52. <el-empty description="暂无审核"></el-empty>
  53. </template>
  54. <!-- 数据 -->
  55. <el-table-column type="selection"></el-table-column>
  56. <el-table-column prop="order" align="center" label="订单号">
  57. <template slot-scope="scope">
  58. <com-order-detail :order="scope.row.order"></com-order-detail>
  59. </template>
  60. </el-table-column>
  61. <el-table-column prop="user_id" align="center" label="会员名称">
  62. <template slot-scope="scope">
  63. <com-user-info :user="scope.row.user"></com-user-info>
  64. </template>
  65. </el-table-column>
  66. <el-table-column prop="name" align="center" label="商品">
  67. <template slot-scope="scope">
  68. <div class="goods-box">
  69. <div class="goods">
  70. <div>
  71. {{ scope.row.goods_name }}
  72. </div>
  73. <div>
  74. ¥ {{ scope.row.goods_price }}
  75. </div>
  76. </div>
  77. </div>
  78. </template>
  79. </el-table-column>
  80. <el-table-column prop="levelInfo.name" align="center" label="会员等级"></el-table-column>
  81. <el-table-column prop="apply.center_name" align="center" label="微店名称"></el-table-column>
  82. <el-table-column prop="commission_amount" align="center" label="分佣金额"></el-table-column>
  83. <el-table-column prop="type" align="center" label="佣金类型">
  84. <template slot-scope="scope">
  85. <el-tag v-if="scope.row.commission_level == 1" size="mini">直推佣金</el-tag>
  86. <el-tag v-if="scope.row.commission_level == 2" size="mini">间推佣金</el-tag>
  87. </template>
  88. </el-table-column>
  89. <el-table-column prop="statsu" align="center" label="状态">
  90. <template slot-scope="scope">
  91. <el-tag v-if="scope.row.status == 0" size="mini">待结算</el-tag>
  92. <el-tag v-if="scope.row.status == 1" size="mini" type="success">已结算</el-tag>
  93. <el-tag v-if="scope.row.status == 2" size="mini" type="info">已失效</el-tag>
  94. </template>
  95. </el-table-column>
  96. <el-table-column prop="created_at" label="创建时间" align="center">
  97. <template slot-scope="scope">
  98. {{ scope.row.created_at|dateTimeFormat('Y-m-d H:i:s') }}
  99. </template>
  100. </el-table-column>
  101. <!-- <el-table-column prop="right_btn" label="操作" align="center">
  102. <template slot-scope="scope">
  103. <template v-if="scope.row.status == 1">
  104. <el-button type="text" :loading="btnLoading" @click.stop="showPass(scope.row.id)">通过</el-button>
  105. <el-button type="text" :loading="btnLoading" @click.stop="showReject(scope.row.id)">驳回</el-button>
  106. </template>
  107. <template v-else>
  108. <el-button type="text" disabled>已处理</el-button>
  109. </template>
  110. </template>
  111. </el-table-column> -->
  112. </el-table>
  113. </template>
  114. <!-- 分页 -->
  115. <el-row type="flex" class="page" justify="end" style="margin-top: 15px">
  116. <el-pagination
  117. @current-change="pagination"
  118. background
  119. layout="prev, pager, next"
  120. :page-count="pageCount"
  121. v-if="list"
  122. ></el-pagination>
  123. </el-row>
  124. </div>
  125. </el-card>
  126. <!-- 通过 -->
  127. <el-dialog title="等级选择" :visible.sync="passDialogVisible" width="30%">
  128. <el-form
  129. :inline="true"
  130. :model="passData"
  131. :rules="passRules"
  132. ref="passForm"
  133. >
  134. <el-row>
  135. <el-form-item label="选择等级" prop="level">
  136. <el-select v-model="passData.level" placeholder="请选择">
  137. <el-option
  138. v-for="item in level"
  139. :key="item.id"
  140. :label="item.name"
  141. :value="item.id">
  142. </el-option>
  143. </el-select>
  144. </el-form-item>
  145. </el-row>
  146. </el-form>
  147. <span slot="footer" class="dialog-footer">
  148. <el-button @click.stop="passDialogVisible = false">取 消</el-button>
  149. <el-button @click.stop="submitPass" :loading="btnLoading" type="success">确 定</el-button>
  150. </span>
  151. </el-dialog>
  152. <!-- 驳回 -->
  153. <el-dialog title="驳回理由" :visible.sync="rejectDialogVisible" width="30%">
  154. <el-form
  155. :inline="true"
  156. :model="rejectData"
  157. :rules="rejectRules"
  158. ref="rejectForm"
  159. >
  160. <el-row>
  161. <el-form-item label="驳回理由" prop="content">
  162. <el-input type="textarea" v-model="rejectData.content" placeholder="请输入驳回理由"></el-input>
  163. </el-form-item>
  164. </el-row>
  165. </el-form>
  166. <span slot="footer" class="dialog-footer">
  167. <el-button @click.stop="rejectDialogVisible = false">取 消</el-button>
  168. <el-button @click.stop="submitReject" :loading="btnLoading" type="success">确 定</el-button>
  169. </span>
  170. </el-dialog>
  171. </div>
  172. <script>
  173. const app = new Vue({
  174. el: '#app',
  175. data() {
  176. return {
  177. statusOptions: [
  178. {
  179. label: '待结算',
  180. value: 0,
  181. },
  182. {
  183. label: '已结算',
  184. value: 1,
  185. },
  186. {
  187. label: '已失效',
  188. value: 2,
  189. },
  190. ],
  191. limit: 20,
  192. searchData: {
  193. user_id: '',
  194. name: '',
  195. mobile: '',
  196. user_keyword: '',
  197. status: '',
  198. },
  199. passId: 0,
  200. rejectId: 0,
  201. passData: {
  202. level: '',
  203. },
  204. rejectData: {
  205. content: '',
  206. },
  207. rejectRules: {
  208. content: [
  209. {
  210. required: true, message: '请输入驳回内容'
  211. }
  212. ]
  213. },
  214. passRules: {
  215. level: [
  216. {
  217. required: true, message: '请选择等级'
  218. }
  219. ],
  220. },
  221. list: [],
  222. level: [],
  223. pageCount: 0,
  224. page: 1,
  225. currentPage: null,
  226. listLoading: false,
  227. btnLoading: false,
  228. passDialogVisible: false,
  229. rejectDialogVisible: false,
  230. };
  231. },
  232. methods: {
  233. handleSelectionChange(val) {
  234. this.select_order = val
  235. },
  236. // 全选
  237. allSelect() {
  238. if (this.checked) {
  239. this.goods_list.forEach(function(item, index) {
  240. if (!item.storage) {
  241. item.is_select = true
  242. }
  243. })
  244. } else {
  245. this.goods_list.forEach(function(item, index) {
  246. item.is_select = false
  247. })
  248. }
  249. },
  250. //搜索
  251. onSubmit() {
  252. this.page = 1
  253. this.getPageList()
  254. },
  255. pagination(currentPage) {
  256. this.page = currentPage
  257. this.getPageList()
  258. },
  259. getPageList() {
  260. this.listLoading = true;
  261. let params = {
  262. r: 'operation-center/commission/index',
  263. page: this.page,
  264. limit: this.limit
  265. }
  266. params = Object.assign(params, this.searchData)
  267. request({
  268. params: params,
  269. method: 'get',
  270. }).then(e => {
  271. if (e.data.code === 0) {
  272. this.list = e.data.data.list
  273. this.pageCount = e.data.data.page_count
  274. this.currentPage = e.data.data.current_page
  275. } else {
  276. this.$message.error(e.data.msg)
  277. }
  278. this.listLoading = false
  279. }).catch(e => {
  280. this.listLoading = false
  281. })
  282. },
  283. //重置
  284. resetForm() {
  285. this.searchData = {
  286. user_id: '',
  287. name: '',
  288. mobile: '',
  289. user_keyword: '',
  290. status: '',
  291. }
  292. },
  293. showPass(id) {
  294. this.passId = id
  295. this.passDialogVisible = true
  296. },
  297. showReject(id) {
  298. this.rejectId = id
  299. this.rejectDialogVisible = true
  300. },
  301. submitReject() {
  302. this.$refs['rejectForm'].validate((valid) => {
  303. if (valid) {
  304. this.btnLoading = true
  305. request({
  306. params: {
  307. r: 'operation-center/review/reject',
  308. id: this.rejectId,
  309. },
  310. method: 'post',
  311. data: this.rejectData
  312. }).then(e => {
  313. if (e.data.code == 0) {
  314. this.$message.success(e.data.msg)
  315. setTimeout(() => {
  316. this.getPageList()
  317. }, 1500)
  318. } else {
  319. this.$message.error(e.data.msg)
  320. }
  321. this.rejectDialogVisible = false
  322. this.btnLoading = false
  323. })
  324. } else {
  325. console.log('error submit!!');
  326. return false;
  327. }
  328. })
  329. },
  330. submitPass() {
  331. this.$refs['passForm'].validate((valid) => {
  332. if (valid) {
  333. this.btnLoading = true
  334. request({
  335. params: {
  336. r: 'operation-center/review/pass',
  337. id: this.passId,
  338. },
  339. method: 'post',
  340. data: this.passData
  341. }).then(e => {
  342. if (e.data.code == 0) {
  343. this.$message.success(e.data.msg)
  344. setTimeout(() => {
  345. this.getPageList()
  346. }, 1500)
  347. } else {
  348. this.$message.error(e.data.msg)
  349. }
  350. this.passDialogVisible = false
  351. this.btnLoading = false
  352. })
  353. } else {
  354. console.log('error submit!!');
  355. return false;
  356. }
  357. })
  358. },
  359. },
  360. mounted: function() {
  361. this.page = getQuery('page') ? getQuery('page') : 1
  362. this.limit = getQuery('limit') ? getQuery('limit') : 20
  363. getQuery('user_id') && (this.searchData.user_id = getQuery('user_id'))
  364. this.getPageList()
  365. }
  366. });
  367. </script>
  368. <style>
  369. </style>