index.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <div id="index">
  3. <el-row>
  4. <el-col :span="24">
  5. <el-col :span="24" class="leftTop"> <span>|</span> <span>VIP用户</span> </el-col>
  6. <el-col :span="24" class="info">
  7. <el-col :span="24" class="add">
  8. <el-button type="primary" size="mini" @click="add()">添加用户</el-button>
  9. </el-col>
  10. <el-col :span="24">
  11. <el-table :data="list" border style="width: 100%">
  12. <el-table-column prop="vipname" label="姓名" align="center"> </el-table-column>
  13. <el-table-column prop="vipphone" label="联系电话" align="center"> </el-table-column>
  14. <el-table-column prop="company" label="单位名称" align="center"> </el-table-column>
  15. <el-table-column prop="email" label="email" align="center"> </el-table-column>
  16. <el-table-column label="操作" align="center">
  17. <template slot-scope="scope">
  18. <el-button size="mini" type="primary" @click="editViP(scope.row)">
  19. 修改
  20. </el-button>
  21. </template>
  22. </el-table-column>
  23. </el-table>
  24. <el-col :span="24" class="page">
  25. <el-pagination
  26. @current-change="handleCurrentChange"
  27. :current-page="currentPage"
  28. layout="total, prev, pager, next, jumper"
  29. :total="total"
  30. :page-size="pageSize"
  31. >
  32. </el-pagination>
  33. </el-col>
  34. </el-col>
  35. </el-col>
  36. </el-col>
  37. </el-row>
  38. <el-dialog title="添加用户" :visible.sync="dialogVisible" width="50%" :before-close="handleClose">
  39. <el-col :span="24">
  40. <el-form :model="form">
  41. <el-form-item label="用户名" :label-width="formLabelWidth">
  42. <el-input v-model="form.name" autocomplete="off" placeholder="请输入用户名"></el-input>
  43. </el-form-item>
  44. <el-form-item label="手机号" :label-width="formLabelWidth">
  45. <el-input v-model="form.phone" autocomplete="off" maxlength="11" placeholder="请输入手机号" :disabled="disabled"></el-input>
  46. </el-form-item>
  47. <!-- <el-form-item label="密码" :label-width="formLabelWidth">
  48. <el-input v-model="form.passwd" autocomplete="off" placeholder="请输入密码" show-password :disabled="disabled"></el-input>
  49. </el-form-item> -->
  50. <el-form-item label="单位名称" :label-width="formLabelWidth">
  51. <el-input v-model="form.company" autocomplete="off" placeholder="请输入单位名称"></el-input>
  52. </el-form-item>
  53. <el-form-item label="email" :label-width="formLabelWidth">
  54. <el-input v-model="form.email" autocomplete="off" placeholder="请输入email"></el-input>
  55. </el-form-item>
  56. <el-form-item label="简介" :label-width="formLabelWidth">
  57. <el-input v-model="form.content" type="textarea" autocomplete="off" placeholder="请输入简介"></el-input>
  58. </el-form-item>
  59. <el-col :span="24" style="text-align:center">
  60. <el-button @click="closeBtn">取 消</el-button>
  61. <el-button type="primary" @click="onSubmit">确 定</el-button>
  62. </el-col>
  63. </el-form>
  64. </el-col>
  65. </el-dialog>
  66. </div>
  67. </template>
  68. <script>
  69. import { mapState, createNamespacedHelpers } from 'vuex';
  70. const { mapActions: dock } = createNamespacedHelpers('dock');
  71. const { mapActions: apply } = createNamespacedHelpers('apply');
  72. const { mapActions: authUser } = createNamespacedHelpers('authUser');
  73. export default {
  74. name: 'index',
  75. props: {},
  76. components: {},
  77. data: function() {
  78. return {
  79. vipuserList: [], //查询数据
  80. currentPage: 1, //默认数据1
  81. pageSize: 10, //每页显示数据数量
  82. origin: [], //分割数据
  83. list: [], //显示数据列表
  84. total: 0,
  85. dock_id: '', //对接会id
  86. room_id: '', //房间id
  87. dialogVisible: false,
  88. form: {},
  89. disabled: false,
  90. formLabelWidth: '120px',
  91. };
  92. },
  93. created() {
  94. this.search();
  95. },
  96. methods: {
  97. ...dock({ dockquery: 'query', dockFetch: 'fetch', dockUpdate: 'update', dockupdateVip: 'updateVip', createvipuser: 'createvipuser' }),
  98. ...apply({ applyUpdate: 'update' }),
  99. ...authUser({ authUserQuery: 'query', authUserCreate: 'create', authUserUpdate: 'update' }),
  100. async search() {
  101. let res = await this.dockFetch(this.user.uid);
  102. if (this.$checkRes(res)) {
  103. this.$set(this, `vipuserList`, res.data.vipuser);
  104. this.$set(this, `dock_id`, res.data.id);
  105. this.$set(this, `room_id`, res.data.room_id);
  106. this.$set(this, `total`, res.data.vipuser.length);
  107. }
  108. },
  109. searchvip(page = 1) {
  110. this.$set(this, `list`, this.origin[page - 1]);
  111. },
  112. handleCurrentChange(currentPage) {
  113. this.searchPage(currentPage);
  114. },
  115. // 添加用户
  116. add() {
  117. this.dialogVisible = true;
  118. this.disabled = false;
  119. },
  120. // 取消
  121. closeBtn() {
  122. this.form = {};
  123. this.dialogVisible = false;
  124. },
  125. // 确定
  126. async onSubmit() {
  127. if (this.form.id) {
  128. const res = await this.authUserUpdate(this.form);
  129. if (this.$checkRes(res)) {
  130. let data = {
  131. vipname: this.form.name,
  132. vipphone: this.form.phone,
  133. company: this.form.company,
  134. email: this.form.email,
  135. content: this.form.content,
  136. role: '8',
  137. status: '1',
  138. id: this.dock_id,
  139. vipid: this.form.vipid,
  140. };
  141. const arr = await this.dockupdateVip(data);
  142. if (this.$checkRes(arr)) {
  143. this.$message({
  144. message: '信息修改成功',
  145. type: 'success',
  146. });
  147. this.dialogVisible = false;
  148. this.back();
  149. }
  150. }
  151. } else {
  152. const authUserList = await this.authUserQuery();
  153. let r = authUserList.data.some(f => f.phone == this.form.phone);
  154. if (r) {
  155. this.$message({
  156. message: '手机号已经被注册,请重新输入',
  157. type: 'warning',
  158. });
  159. } else {
  160. this.form.role = '8';
  161. this.form.passwd = this.room_id;
  162. const res = await this.authUserCreate(this.form);
  163. if (this.$checkRes(res)) {
  164. let data = {
  165. vipname: this.form.name,
  166. vipphone: this.form.phone,
  167. passwd: this.room_id,
  168. company: this.form.company,
  169. email: this.form.email,
  170. content: this.form.content,
  171. role: this.form.role,
  172. uid: res.data.id,
  173. id: this.dock_id,
  174. };
  175. const arr = await this.createvipuser(data);
  176. if (this.$checkRes(arr)) {
  177. this.dialogVisible = false;
  178. this.search();
  179. }
  180. }
  181. }
  182. }
  183. },
  184. // 修改
  185. editViP(data) {
  186. this.dialogVisible = true;
  187. let newDate = {};
  188. newDate.name = data.vipname;
  189. newDate.phone = data.vipphone;
  190. newDate.company = data.company;
  191. newDate.email = data.email;
  192. newDate.content = data.content;
  193. newDate.id = data.uid;
  194. newDate.vipid = data._id;
  195. this.disabled = true;
  196. this.$set(this, `form`, newDate);
  197. },
  198. // 取消
  199. handleClose(done) {
  200. done();
  201. },
  202. },
  203. computed: {
  204. ...mapState(['user']),
  205. pageTitle() {
  206. return `${this.$route.meta.title}`;
  207. },
  208. },
  209. metaInfo() {
  210. return { title: this.$route.meta.title };
  211. },
  212. watch: {
  213. vipuserList: {
  214. immediate: true,
  215. deep: true,
  216. handler(val) {
  217. if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
  218. this.searchvip();
  219. },
  220. },
  221. },
  222. };
  223. </script>
  224. <style lang="less" scoped>
  225. .leftTop {
  226. font-size: 18px;
  227. width: 96%;
  228. height: 41px;
  229. line-height: 35px;
  230. border-bottom: 1px solid #e5e5e5;
  231. position: relative;
  232. bottom: 1px;
  233. margin: 10px;
  234. font-weight: 600;
  235. color: #22529a;
  236. }
  237. .info {
  238. padding: 0 40px 0 10px;
  239. .add {
  240. text-align: right;
  241. padding: 10px 0;
  242. }
  243. }
  244. .page {
  245. text-align: right;
  246. padding: 10px 0;
  247. }
  248. /deep/.el-dialog__body {
  249. min-height: 400px;
  250. }
  251. </style>