index.php 17 KB

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