sipBind.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <script>
  2. import handle from "@/until/handle";
  3. import querystring from "querystring";
  4. export default {
  5. name: "sipBind",
  6. props: {
  7. sipDomain: {
  8. default: ""
  9. },
  10. sipId: {
  11. default: "",
  12. }
  13. },
  14. watch: {
  15. sipId: {
  16. handler(newName, oldName) {
  17. this.init()
  18. },
  19. immediate: true,
  20. }
  21. },
  22. data() {
  23. return {
  24. loading: false,
  25. sipAdminsLoaded: false,
  26. loadedAll: false,
  27. allAdmins: [],
  28. sipAdmins: [],
  29. adminId: ''
  30. }
  31. },
  32. methods: {
  33. closePopHandle() {
  34. this.$emit(`exitPop`)
  35. },
  36. init() {
  37. this.loadAllAdmin()
  38. this.loadSipBindAdmin()
  39. },
  40. async loadAllAdmin() {
  41. this.loading = true;
  42. let url = "/api/user/all"
  43. let [err, res] = await handle(this.$axios.get(url))
  44. this.loading = false;
  45. if (err || res.data.code != 0) {
  46. let errStr = err ? err.message : res.data.msg
  47. console.log(`[获取管理员信息] ${errStr}`)
  48. this.$message.error(`获取管理员信息失败 ${errStr}`);
  49. return;
  50. }
  51. this.computeAdmins(res.data.data)
  52. },
  53. async loadSipBindAdmin() {
  54. this.loading = true;
  55. this.sipAdminsLoaded = false;
  56. let url = "/api/sip/admins"
  57. url += `?sipId=${this.sipId}`
  58. let [err, res] = await handle(this.$axios.get(url))
  59. this.loading = false;
  60. if (err || res.data.code != 0) {
  61. let errStr = err ? err.message : res.data.msg
  62. console.log(`[获取管理员信息] ${errStr}`)
  63. this.$message.error(`获取管理员信息失败 ${errStr}`);
  64. return;
  65. }
  66. this.sipAdmins = res.data.data;
  67. this.sipAdminsLoaded = true;
  68. this.computeAdmins()
  69. },
  70. async executeBindSip() {
  71. if (!this.loadedAll) {
  72. console.log(`基础数据未加载`);
  73. return this.$message.error(`基础数据未加载`);
  74. }
  75. if (!this.checkAdminId(this.adminId)) {
  76. return this.$message.error(`管理员id异常,无法被添加`);
  77. }
  78. this.loading = true;
  79. let url = "/api/sip/bind"
  80. let param = {
  81. sipId: this.sipId,
  82. adminId: this.adminId,
  83. }
  84. let [err, res] = await handle(
  85. this.$axios.post(url, querystring.stringify(param)))
  86. this.loading = false;
  87. if (err || res.data.code != 0) {
  88. let errStr = err ? err.message : res.data.msg
  89. console.log(`[绑定管理员信息] ${errStr}`)
  90. this.$message.error(`绑定管理员信息失败 ${errStr}`);
  91. return;
  92. }
  93. console.log('绑定管理员信息成功')
  94. this.$message.success(`绑定管理员信息成功`);
  95. this.closePopHandle()
  96. },
  97. async executeUnbindSip(adminId) {
  98. if (!this.loadedAll) {
  99. console.log(`基础数据未加载`);
  100. return this.$message.error(`基础数据未加载`);
  101. }
  102. if (!this.checkSipAdminId(adminId)) {
  103. return this.$message.error(`管理员id异常, 被解绑`);
  104. }
  105. this.loading = true;
  106. let url = "/api/sip/unbind"
  107. let param = {
  108. sipId: this.sipId,
  109. adminId: this.adminId,
  110. }
  111. let [err, res] = await handle(
  112. this.$axios.get(url, querystring.stringify(param)))
  113. this.loading = false;
  114. if (err || res.data.code != 0) {
  115. let errStr = err ? err.message : res.data.msg
  116. console.log(`[解绑配置] ${errStr}`)
  117. this.$message.error(`解绑配置失败 ${errStr}`);
  118. return;
  119. }
  120. console.log('解绑配置成功')
  121. this.$message.success(`解绑配置成功`);
  122. this.closePopHandle()
  123. },
  124. computeAdmins(adminArr) {
  125. console.log(`computeAdmins`)
  126. console.log(this.sipAdminsLoaded)
  127. console.log(adminArr)
  128. if (!this.sipAdminsLoaded || !adminArr) {
  129. return console.log(`数据暂时未加载完成`)
  130. }
  131. let allAdmins = []
  132. adminArr.forEach(admin => {
  133. if (!this.sipAdmins.find(val => val.id == admin.id)) {
  134. allAdmins.push(admin)
  135. }
  136. })
  137. console.log(allAdmins);
  138. this.allAdmins = allAdmins;
  139. this.loadedAll = true;
  140. },
  141. checkAdminId(adminId) {
  142. if (this.allAdmins.find(val => val.id == adminId)) {
  143. return true
  144. }
  145. return false
  146. },
  147. checkSipAdminId(adminId) {
  148. if (this.sipAdmins.find(val => val.id == adminId)) {
  149. return true
  150. }
  151. return false
  152. },
  153. handleUnbind(item) {
  154. this.executeUnbindSip(item.id)
  155. },
  156. handleAdminChange() {
  157. },
  158. handleAddAdmin() {
  159. this.executeBindSip()
  160. }
  161. }
  162. }
  163. </script>
  164. <template>
  165. <div class="sips">
  166. <div class="page-header">
  167. <div class="page-title">sip分配</div>
  168. <div class="page-header-btn">
  169. <el-select v-model="adminId"
  170. placeholder="管理员"
  171. @change="handleAdminChange"
  172. size="mini"
  173. >
  174. <el-option
  175. v-for="item in allAdmins"
  176. :key="item.id"
  177. :label="item.username"
  178. :value="item.id">
  179. </el-option>
  180. </el-select>
  181. <el-button
  182. class="ml-2" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary"
  183. @click="handleAddAdmin">绑定用户
  184. </el-button>
  185. </div>
  186. </div>
  187. <el-table :data="sipAdmins" style="width: 100%;font-size: 12px;" header-row-class-name="table-header">
  188. <el-table-column prop="username" label="名称" min-width="160">
  189. </el-table-column>
  190. <el-table-column label="操作" min-width="450" fixed="right">
  191. <template slot-scope="scope">
  192. <el-button size="medium" icon="el-icon-edit" type="text" @click="handleUnbind(scope.row)">解绑</el-button>
  193. </template>
  194. </el-table-column>
  195. </el-table>
  196. </div>
  197. </template>
  198. <style scoped>
  199. </style>