index.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <!--
  2. * @Author: wanglj 471442253@qq.com
  3. * @Date: 2023-02-13 11:50:01
  4. * @LastEditors: wanglj
  5. * @LastEditTime: 2023-02-14 09:32:28
  6. * @Description: file content
  7. * @FilePath: \opms_frontend\src\views\base\productAuth\index.vue
  8. -->
  9. <template>
  10. <div class="product-auth-container">
  11. <vab-query-form>
  12. <vab-query-form-left-panel>
  13. <el-form ref="queryForm" :inline="true" :model="queryForm" @submit.native.prevent>
  14. <el-form-item>
  15. <el-input v-model="queryForm.keyWords" placeholder="姓名" />
  16. </el-form-item>
  17. <el-form-item>
  18. <el-button icon="el-icon-search" type="primary" @click="handleSearch">查询</el-button>
  19. <el-button icon="el-icon-refresh-right" @click="reset">重置</el-button>
  20. </el-form-item>
  21. </el-form>
  22. </vab-query-form-left-panel>
  23. <vab-query-form-right-panel :span="12">
  24. <table-tool :check-list.sync="checkList" :columns="columns" />
  25. </vab-query-form-right-panel>
  26. </vab-query-form>
  27. <el-table v-loading="listLoading" border :data="list" :height="$baseTableHeight(1)">
  28. <el-table-column
  29. v-for="(item, index) in finallyColumns"
  30. :key="index"
  31. align="center"
  32. :label="item.label"
  33. :prop="item.prop"
  34. show-overflow-tooltip
  35. :sortable="item.sortable"
  36. :width="item.width">
  37. <template #default="{ row }">
  38. <span>{{ row[item.prop] }}</span>
  39. </template>
  40. </el-table-column>
  41. <el-table-column align="center" label="操作" width="120px">
  42. <template #default="{ row }">
  43. <el-button v-permissions="['base:productLine:grant']" type="text" @click="handleAuth(row)">授权</el-button>
  44. </template>
  45. </el-table-column>
  46. </el-table>
  47. <el-pagination
  48. background
  49. :current-page="queryForm.pageNum"
  50. :layout="layout"
  51. :page-size="queryForm.pageSize"
  52. :total="total"
  53. @current-change="handleCurrentChange"
  54. @size-change="handleSizeChange" />
  55. <!-- 授权弹窗 -->
  56. <el-dialog title="产品线授权" :visible.sync="visible" width="500px" @close="handleClose">
  57. <el-form ref="form" :model="form">
  58. <el-form-item prop="productLine">
  59. <el-checkbox-group v-model="form.productLine" @change="$forceUpdate()">
  60. <el-checkbox v-for="item in productList" :key="item.productCode" :label="item.productCode">
  61. {{ item.productName }}
  62. </el-checkbox>
  63. </el-checkbox-group>
  64. </el-form-item>
  65. </el-form>
  66. <template #footer>
  67. <el-button @click="visible = false">取 消</el-button>
  68. <el-button type="primary" @click="save">确 定</el-button>
  69. </template>
  70. </el-dialog>
  71. </div>
  72. </template>
  73. <script>
  74. import proAuthApi from '@/api/base/productAuth'
  75. import TableTool from '@/components/table/TableTool'
  76. import to from 'await-to-js'
  77. export default {
  78. name: 'ProductAuthorize',
  79. components: {
  80. TableTool,
  81. },
  82. data() {
  83. return {
  84. total: 0,
  85. queryForm: {
  86. pageNum: 1,
  87. pageSize: 10,
  88. keyWords: '',
  89. deptId: 1001,
  90. },
  91. layout: 'total, sizes, prev, pager, next, jumper',
  92. listLoading: false,
  93. list: [],
  94. checkList: [],
  95. columns: [
  96. {
  97. label: '姓名',
  98. width: '120px',
  99. prop: 'userName',
  100. sortable: false,
  101. disableCheck: true,
  102. },
  103. {
  104. label: '岗位',
  105. width: '120px',
  106. prop: 'userPost',
  107. sortable: false,
  108. disableCheck: false,
  109. },
  110. {
  111. label: '电话',
  112. width: '120px',
  113. prop: 'userPhone',
  114. sortable: false,
  115. disableCheck: false,
  116. },
  117. {
  118. label: '授权产品线',
  119. width: 'auto',
  120. prop: 'productName',
  121. sortable: false,
  122. disableCheck: true,
  123. },
  124. ],
  125. visible: false,
  126. productList: [],
  127. form: {
  128. userId: 0,
  129. userName: '',
  130. userPost: '',
  131. userPhone: '',
  132. productLine: [],
  133. },
  134. }
  135. },
  136. computed: {
  137. finallyColumns() {
  138. return this.columns.filter((item) => this.checkList.includes(item.label))
  139. },
  140. },
  141. mounted() {
  142. this.getProducts()
  143. this.fetchData()
  144. },
  145. methods: {
  146. async fetchData() {
  147. const [err, res] = await to(proAuthApi.getList(this.queryForm))
  148. if (err) return
  149. this.list = res.data.list || []
  150. this.total = res.data.total
  151. },
  152. handleSearch() {
  153. this.queryForm.pageNum = 1
  154. this.fetchData()
  155. },
  156. getProducts() {
  157. this.getDicts('sys_product_line').then((response) => {
  158. let arr = response.data.values || []
  159. for (const item of arr) {
  160. this.productList.push({
  161. productCode: item.key,
  162. productName: item.value,
  163. remark: item.remark,
  164. })
  165. }
  166. })
  167. },
  168. reset() {
  169. this.resetForm('queryForm')
  170. this.fetchData()
  171. },
  172. handleSizeChange(val) {
  173. this.queryForm.pageSize = val
  174. this.fetchData()
  175. },
  176. handleCurrentChange(val) {
  177. this.queryForm.pageNum = val
  178. this.fetchData()
  179. },
  180. // 授权
  181. async handleAuth(row) {
  182. this.form = { ...row }
  183. this.form.productLine = row.productCode ? row.productCode.split(',') : []
  184. this.visible = true
  185. },
  186. handleClose() {
  187. this.form = {
  188. userId: 0,
  189. userName: '',
  190. userPost: '',
  191. userPhone: '',
  192. productLine: [],
  193. }
  194. this.$refs.form.clearValidate()
  195. },
  196. // 确认授权
  197. async save() {
  198. let arr = []
  199. for (const key of this.form.productLine) {
  200. const obj = this.productList.find((item) => item.productCode == key)
  201. if (obj) arr.push(obj)
  202. }
  203. const params = { ...this.form }
  204. params.lines = arr
  205. const [err, res] = await to(proAuthApi.authorize(params))
  206. if (err) return
  207. this.$message.success(res.msg)
  208. this.visible = false
  209. this.fetchData()
  210. },
  211. },
  212. }
  213. </script>
  214. <style lang="scss" scoped>
  215. .el-checkbox {
  216. width: 100%;
  217. }
  218. </style>