operateList.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <template>
  2. <div class="app-container">
  3. <div class="app-title">当前会所: <span class="span"></span>商城测试演示会所</span> </div>
  4. <el-table
  5. v-loading="listLoading"
  6. :data="list"
  7. element-loading-text="Loading"
  8. border
  9. fit
  10. highlight-current-row
  11. :header-cell-style="{background:'#eef1f6',color:'#606266'}"
  12. >
  13. <el-table-column align="center" label="序号" width="50">
  14. <template slot-scope="scope">
  15. {{ scope.$index+1 }}
  16. </template>
  17. </el-table-column>
  18. <el-table-column label="账号" width="150" align="center" prop="classifyNum" />
  19. <el-table-column label="姓名" width="150" align="center" prop="classifyName" />
  20. <el-table-column label="手机号码" width="110" align="center" prop="telephone" />
  21. <el-table-column label="邀请码" width="130" align="center" prop="code">
  22. <template slot-scope="{row}">
  23. <span v-if="row.codeType" style="text-align: center;float:left">{{ row.code }}</span>
  24. <span v-if="row.codeType" :style="{color: rexpStautsColor(row.status)}">{{ rexpStautsText(row.status) }}</span>
  25. <el-tag v-else type="info">—— ——</el-tag>
  26. </template>
  27. </el-table-column>
  28. <el-table-column class-name="status-col" label="状态" width="100" align="center" prop="status">
  29. <template slot-scope="{row}">
  30. <i v-if="row.status === 2" class="el-icon-success" style="color:#67C23A;font-size: 20px;" />
  31. <!-- <i v-else class="el-icon-error" style="color: #E6A23C;font-size: 20px;" /> -->
  32. </template>
  33. </el-table-column>
  34. <el-table-column align="center" label="微信昵称" width="110" prop="watchName" />
  35. <el-table-column align="center" label="OpenID" width="250" prop="openID" />
  36. <el-table-column align="center" label="添加时间" width="160" prop="createTime" />
  37. <el-table-column align="center" label="绑定时间" width="160" prop="bindTime" />
  38. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  39. <template slot-scope="{row}">
  40. <el-button v-if="row.codeType" type="primary" size="mini" @click="handleEdit(row)">编辑</el-button>
  41. <el-button v-if="row.codeType" type="primary" size="mini" @click="handleUntying(row)">解绑</el-button>
  42. <el-button v-else type="primary" size="small" @click="handleGenerateCode(row)">生成邀请码</el-button>
  43. </template>
  44. </el-table-column>
  45. </el-table>
  46. <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="fetchData" />
  47. <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="40%">
  48. <el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:24%;">
  49. <el-form-item label="姓名" prop="classifyName">
  50. <el-input v-model="temp.classifyName" />
  51. </el-form-item>
  52. <el-form-item label="手机号" prop="telephone">
  53. <el-input v-model="temp.telephone" />
  54. </el-form-item>
  55. </el-form>
  56. <div slot="footer" class="dialog-footer">
  57. <el-button @click="dialogFormVisible = false">取消</el-button>
  58. <el-button type="primary" @click="updateData()">确定</el-button>
  59. </div>
  60. </el-dialog>
  61. <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogVisible" width="20%">
  62. <span>{{ dialogVisibleText }}</span>
  63. <span slot="footer" class="dialog-footer">
  64. <el-button @click="dialogVisible = false">取 消</el-button>
  65. <el-button type="primary" @click="handleConfirm()">确 定</el-button>
  66. </span>
  67. </el-dialog>
  68. </div>
  69. </template>
  70. <script>
  71. import {
  72. getOperatorList, //初始化
  73. createOperatorCode, //生成邀请码
  74. updateOperatorCode, //更新邀请码
  75. unbindOperator, //解绑运营
  76. preservOperator, //保存
  77. createOperator, //保存并生成
  78. queryOperatorList //条件查询
  79. } from '@/api/goods'
  80. import Pagination from '@/components/Pagination'
  81. export default {
  82. components: { Pagination },
  83. filters: {
  84. statusFilter(status) {
  85. const statusMap = {
  86. 1: 'success',
  87. 0: 'gray'
  88. }
  89. return statusMap[status]
  90. }
  91. },
  92. data() {
  93. return {
  94. list: null,
  95. listLoading: true,
  96. total: 100,
  97. dialogVisible: false,
  98. dialogVisibleText: '',
  99. handleConfirmType: '',
  100. listQuery: {
  101. page: 1,
  102. limit: 10,
  103. importance: undefined,
  104. title: undefined,
  105. type: undefined,
  106. sort: '+id'
  107. },
  108. temp: {
  109. id: 1,
  110. organizeID: 1,
  111. classifyName: '',
  112. telephone: ''
  113. },
  114. dialogFormVisible: false,
  115. dialogStatus: '',
  116. textMap: {
  117. edit: '编辑',
  118. update: '提示',
  119. untying: '解绑',
  120. generate: '生成邀请码',
  121. create: 'Create'
  122. },
  123. rules: {
  124. classifyName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
  125. telephone: [{ required: true, message: '手机号不能为空', trigger: 'blur' }]
  126. }
  127. }
  128. },
  129. created() {
  130. this.fetchData()
  131. },
  132. methods: {
  133. fetchData() {
  134. this.listLoading = true
  135. getOperatorList().then(response => {
  136. this.list = response.data.items
  137. this.listLoading = false
  138. }).catch(() => {
  139. // 封装静态数据
  140. this.list = [
  141. {
  142. id: 1,
  143. organizeID: 1,
  144. classifyName: '测试运营人员',
  145. classifyNum: '2020010120201110',
  146. watchName: '轻描淡写',
  147. openID: 'o0dXI5ajSPa6PkOmjjq1aar93JW4',
  148. code: '219845',
  149. telephone: 13888888888,
  150. createTime: '2020-01-01:20:30:56',
  151. bindTime: '2020-01-01:20:30:56',
  152. status: 0,
  153. codeType: false
  154. },
  155. {
  156. id: 2,
  157. organizeID: 1,
  158. classifyName: '吴小研',
  159. classifyNum: '2020010120201110',
  160. watchName: '轻描淡写',
  161. openID: 'o0dXI5ajSPa6PkOmjjq1aar93JW4',
  162. code: '315654',
  163. telephone: 13888888888,
  164. createTime: '2020-01-01:20:30:56',
  165. bindTime: '2020-01-01:20:30:56',
  166. status: 1,
  167. codeType: true
  168. },
  169. {
  170. id: 3,
  171. organizeID: 1,
  172. classifyName: '郑帅哥',
  173. classifyNum: '2020010120201110',
  174. watchName: '轻描淡写',
  175. openID: 'o0dXI5ajSPa6PkOmjjq1aar93JW4',
  176. code: '315654',
  177. telephone: 13666666666,
  178. createTime: '2020-01-01:20:30:56',
  179. bindTime: '2020-01-01:20:30:56',
  180. status: 2,
  181. codeType: true
  182. },
  183. {
  184. id: 3,
  185. organizeID: 1,
  186. classifyName: '李帅哥',
  187. classifyNum: '2020010120201110',
  188. watchName: '轻描淡写',
  189. openID: 'o0dXI5ajSPa6PkOmjjq1aar93JW4',
  190. code: '315654',
  191. telephone: 13979770618,
  192. createTime: '2020-01-01:20:30:56',
  193. bindTime: '2020-01-01:20:30:56',
  194. status: 3,
  195. codeType: true
  196. }
  197. ]
  198. })
  199. this.listLoading = false
  200. },
  201. handleEdit(row) {
  202. this.temp = Object.assign({}, row)
  203. console.log(this.temp)
  204. this.dialogStatus = 'edit'
  205. this.dialogFormVisible = true
  206. this.$nextTick(() => {
  207. this.$refs['dataForm'].clearValidate()
  208. })
  209. },
  210. handleUntying(row) {
  211. this.dialogVisible = true
  212. this.dialogStatus = 'untying'
  213. this.dialogVisibleText = '确定解绑该运营人员吗?'
  214. this.handleConfirmType = 'untying'
  215. },
  216. handleGenerateCode(row) {
  217. this.dialogVisible = true
  218. this.dialogStatus = 'generate'
  219. this.dialogVisibleText = '确定生成邀请码,并短信提醒该人员?'
  220. this.handleConfirmType = 'generate'
  221. },
  222. handleConfirm() {
  223. switch (this.handleConfirmType) {
  224. case 'untying':
  225. this.untyingRequst()
  226. break
  227. case 'generate':
  228. this.generateRequst()
  229. break
  230. }
  231. },
  232. untyingRequst() {
  233. this.dialogVisible = false
  234. this.$message({
  235. message: '解绑成功',
  236. type: 'success',
  237. center: true
  238. });
  239. },
  240. generateRequst() {
  241. this.dialogVisible = false
  242. this.$message({
  243. message: '邀请码生成成功',
  244. type: 'success',
  245. center: true
  246. });
  247. },
  248. rexpStautsText(status) {
  249. let text = ''
  250. switch (status) {
  251. case 1:
  252. text = '有效'
  253. break
  254. case 2:
  255. text = '已使用'
  256. break
  257. case 3:
  258. text = '已失效'
  259. break
  260. }
  261. return text
  262. },
  263. rexpStautsColor(status) {
  264. let textColor = ''
  265. switch (status) {
  266. case 1:
  267. textColor = '#E6A441'
  268. break
  269. case 2:
  270. textColor = '#417DE6'
  271. break
  272. case 3:
  273. textColor = '#C5C5C5'
  274. break
  275. }
  276. return textColor
  277. },
  278. updateData() {
  279. this.$refs['dataForm'].validate((valid) => {
  280. if (valid) {
  281. const tempData = Object.assign({}, this.temp)
  282. this.dialogFormVisible = false
  283. this.$message({
  284. message: '保存成功',
  285. type: 'success',
  286. center: true
  287. });
  288. updateCategory(tempData).then(() => {
  289. })
  290. }
  291. })
  292. }
  293. }
  294. }
  295. </script>
  296. <style lang="scss">
  297. .app-title{
  298. line-height: 40px;
  299. font-size: 18px;
  300. font-weight: bold;
  301. color: #999999;
  302. margin-bottom: 10px;
  303. }
  304. .app-title .span{
  305. color: #417DE6;
  306. }
  307. </style>