index.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <template>
  2. <div class="app-container">
  3. <div class="form-wrap">
  4. <div class="searchBox">
  5. <el-form
  6. :inline="true"
  7. :model="form"
  8. ref="form"
  9. size="mini"
  10. label-width="70px">
  11. <el-form-item
  12. prop="name"
  13. label="名称">
  14. <el-input
  15. v-model="form.name"
  16. placeholder="名称(模糊)"
  17. clearable
  18. @keyup.enter.native="reload"></el-input>
  19. </el-form-item>
  20. <el-form-item
  21. prop="contactName"
  22. label="联系人">
  23. <el-input
  24. v-model="form.contactName"
  25. placeholder="联系人"
  26. clearable
  27. @keyup.enter.native="reload"></el-input>
  28. </el-form-item>
  29. <el-form-item
  30. prop="phone"
  31. label="电话">
  32. <el-input
  33. v-model="form.phone"
  34. placeholder="电话"
  35. clearable
  36. @keyup.enter.native="reload"></el-input>
  37. </el-form-item>
  38. <el-form-item
  39. prop="status"
  40. label="状态">
  41. <el-select
  42. v-model="form.status"
  43. placeholder="全部"
  44. clearable>
  45. <el-option
  46. label="正常"
  47. :value="1"></el-option>
  48. <el-option
  49. label="禁用"
  50. :value="0"></el-option>
  51. </el-select>
  52. </el-form-item>
  53. <el-form-item class="btn-wrap">
  54. <el-button
  55. type="primary"
  56. icon="el-icon-search"
  57. @click="reload">搜索</el-button>
  58. <el-button
  59. icon="el-icon-refresh"
  60. @click="reset">重置</el-button>
  61. <el-button
  62. type="primary"
  63. icon="el-icon-plus"
  64. @click="openForm">新增分销商</el-button>
  65. <el-button
  66. type="primary"
  67. icon="el-icon-connection"
  68. :disabled="!selected.length"
  69. @click="batchBind">批量授权票种</el-button>
  70. <el-button
  71. type="danger"
  72. icon="el-icon-delete"
  73. :disabled="!selected.length"
  74. @click="batchDelete">批量删除</el-button>
  75. </el-form-item>
  76. </el-form>
  77. </div>
  78. <div class="tableBox">
  79. <el-table
  80. v-loading="loading"
  81. :data="tableData"
  82. border
  83. stripe
  84. row-class-name="is-center"
  85. @selection-change="selected = $event"
  86. >
  87. <el-table-column
  88. type="selection"
  89. width="45"></el-table-column>
  90. <el-table-column
  91. prop="name"
  92. label="名称"
  93. min-width="140"
  94. show-overflow-tooltip></el-table-column>
  95. <el-table-column
  96. prop="loginName"
  97. label="登录名"
  98. width="130"></el-table-column>
  99. <el-table-column
  100. prop="contactName"
  101. label="联系人"
  102. width="90"></el-table-column>
  103. <el-table-column
  104. prop="phone"
  105. label="电话"
  106. width="130"></el-table-column>
  107. <el-table-column
  108. label="余额(元)"
  109. width="100"
  110. align="right">
  111. <template slot-scope="{ row }">{{ fmtMoney(row.balance) }}</template>
  112. </el-table-column>
  113. <el-table-column
  114. label="状态"
  115. width="80"
  116. align="center">
  117. <template slot-scope="{ row }">
  118. <el-tag
  119. :type="row.status === 0 ? 'danger' : 'success'"
  120. size="small">{{ row.status === 0 ? '禁用' : '正常' }}</el-tag>
  121. </template>
  122. </el-table-column>
  123. <el-table-column
  124. label="已授权票种"
  125. min-width="160"
  126. show-overflow-tooltip>
  127. <template slot-scope="{ row }">
  128. <span v-if="row.selfTicketTypeList && row.selfTicketTypeList.length">{{ row.selfTicketTypeList.map(i => i.name).join('、') }}</span>
  129. <span v-else>-</span>
  130. </template>
  131. </el-table-column>
  132. <el-table-column
  133. prop="lastLoginTime"
  134. label="最近登录"
  135. width="150">
  136. <template slot-scope="{ row }">{{ row.lastLoginTime ? parseTime(row.lastLoginTime) : '-' }}</template>
  137. </el-table-column>
  138. <el-table-column
  139. prop="remark"
  140. label="备注"
  141. min-width="120"
  142. show-overflow-tooltip></el-table-column>
  143. <el-table-column
  144. prop="createTime"
  145. label="创建时间"
  146. width="150">
  147. <template slot-scope="{ row }">{{ parseTime(row.createTime) }}</template>
  148. </el-table-column>
  149. <el-table-column
  150. label="操作"
  151. width="230"
  152. fixed="right">
  153. <template slot-scope="{ row }">
  154. <el-button
  155. type="text"
  156. @click="openForm(row)">编辑</el-button>
  157. <el-button
  158. type="text"
  159. @click="openMoney(row, 'recharge')">充值</el-button>
  160. <el-button
  161. type="text"
  162. @click="openMoney(row, 'decrease')">扣款</el-button>
  163. <el-button
  164. type="text"
  165. @click="openBind(row)">票种授权</el-button>
  166. <el-button
  167. type="text"
  168. @click="openLog(row)">流水</el-button>
  169. <el-button
  170. type="text"
  171. class="btn-danger"
  172. @click="remove(row)">删除</el-button>
  173. </template>
  174. </el-table-column>
  175. </el-table>
  176. <el-pagination
  177. background
  178. layout="total, prev, pager, next"
  179. :current-page.sync="form.pageNum"
  180. :page-size="form.pageSize"
  181. :total="total"
  182. @current-change="reload"
  183. ></el-pagination>
  184. </div>
  185. </div>
  186. <form-dialog
  187. ref="formDialog"
  188. @update="reload"></form-dialog>
  189. <money-dialog
  190. ref="moneyDialog"
  191. @update="reload"></money-dialog>
  192. <bind-dialog
  193. ref="bindDialog"
  194. @update="reload"></bind-dialog>
  195. <balance-log-dialog ref="logDialog"></balance-log-dialog>
  196. </div>
  197. </template>
  198. <script>
  199. import { getUserThirdPartyList, deleteUserThirdParty } from '@/api/selfManage'
  200. import { parseTime } from '@/utils'
  201. import FormDialog from './FormDialog'
  202. import MoneyDialog from './MoneyDialog'
  203. import BindDialog from './BindDialog'
  204. import BalanceLogDialog from './BalanceLogDialog'
  205. export default {
  206. name: 'SelfThirdParty',
  207. components: { FormDialog, MoneyDialog, BindDialog, BalanceLogDialog },
  208. data () {
  209. return {
  210. loading: false,
  211. form: {
  212. pageNum: 1,
  213. pageSize: 10,
  214. name: '',
  215. contactName: '',
  216. phone: '',
  217. status: ''
  218. },
  219. tableData: [],
  220. total: 0,
  221. selected: []
  222. }
  223. },
  224. methods: {
  225. parseTime,
  226. fmtMoney (v) {
  227. return v === 0 || v ? Number(v).toFixed(2) : '0.00'
  228. },
  229. reload () {
  230. this.loading = true
  231. getUserThirdPartyList({ ...this.form })
  232. .then(res => {
  233. const data = res.data || {}
  234. this.tableData = data.records || []
  235. this.total = data.total || 0
  236. })
  237. .finally(() => {
  238. this.loading = false
  239. })
  240. },
  241. reset () {
  242. this.form.pageNum = 1
  243. this.form.name = ''
  244. this.form.contactName = ''
  245. this.form.phone = ''
  246. this.form.status = ''
  247. this.reload()
  248. },
  249. openForm (row) {
  250. this.$refs.formDialog.show(row)
  251. },
  252. openMoney (row, mode) {
  253. this.$refs.moneyDialog.show(row, mode)
  254. },
  255. openBind (row) {
  256. this.$refs.bindDialog.show({ userThirdPartyIdList: [row.id] })
  257. },
  258. batchBind () {
  259. if (!this.selected.length) return
  260. this.$refs.bindDialog.show({ userThirdPartyIdList: this.selected.map(i => i.id) })
  261. },
  262. openLog (row) {
  263. this.$refs.logDialog.show(row)
  264. },
  265. remove (row) {
  266. if (Number(row.balance) > 0) {
  267. this.$message.warning('该分销商余额大于 0,请先扣款后再删除')
  268. return
  269. }
  270. this.$confirm('确定删除分销商「' + row.name + '」吗?', '提示', { type: 'warning' })
  271. .then(() => {
  272. deleteUserThirdParty({ idList: [row.id] }).then(() => {
  273. this.$message.success('删除成功')
  274. this.reload()
  275. })
  276. })
  277. .catch(() => {})
  278. },
  279. batchDelete () {
  280. if (!this.selected.length) return
  281. const blocked = this.selected.filter(i => Number(i.balance) > 0)
  282. if (blocked.length) {
  283. this.$message.warning('以下分销商余额大于 0,请先扣款:' + blocked.map(i => i.name).join('、'))
  284. return
  285. }
  286. this.$confirm('确定删除选中的 ' + this.selected.length + ' 个分销商吗?', '提示', { type: 'warning' })
  287. .then(() => {
  288. deleteUserThirdParty({ idList: this.selected.map(i => i.id) }).then(() => {
  289. this.$message.success('删除成功')
  290. this.selected = []
  291. this.reload()
  292. })
  293. })
  294. .catch(() => {})
  295. }
  296. },
  297. created () {
  298. this.reload()
  299. }
  300. }
  301. </script>