PermissionDialog.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <el-dialog
  3. v-dialogDrag
  4. :visible.sync="isShow"
  5. :title="$t('ReportManage.CategoryList.configuration_btn')"
  6. :modal-append-to-body='false'
  7. center
  8. @close="cancelHandle"
  9. width="1080px"
  10. class="permission-dialog">
  11. <p style="line-height:40px;margin-bottom:20px">{{$t('ReportManage.CategoryList.check_permissions')}}:</p>
  12. <div v-for="itemGroup,index in configList" :key="index" class="group-list">
  13. <div style="flex-shrink: 0;margin-right:30px">
  14. <el-checkbox class="item-group" :value="isCheckedAll(itemGroup)" :indeterminate="isIndeterminate(itemGroup)" @change="groupChange(itemGroup,$event)">{{itemGroup.ClassifyName}}:</el-checkbox>
  15. </div>
  16. <div style="flex:1">
  17. <el-checkbox style="margin-bottom:15px" v-model="checkedItems" v-for="item in itemGroup.Items" :key="item.ChartPermissionId" :label="item.ChartPermissionId">{{item.PermissionName}}</el-checkbox>
  18. </div>
  19. </div>
  20. <!-- 底部按钮 -->
  21. <div slot="footer">
  22. <el-button type="primary" @click="save">{{$t('Dialog.confirm_save_btn')}}</el-button>
  23. <el-button type="primary" @click="reset" v-if="haveReset">{{$t('Dialog.reset_btn')}}</el-button>
  24. <el-button @click="cancelHandle">{{$t('Dialog.cancel_btn')}}</el-button>
  25. </div>
  26. </el-dialog>
  27. </template>
  28. <script>
  29. import { customInterence,classifyPermissionInterface} from 'api/api.js'
  30. // permissionType==chapterType 章节类型
  31. import { getchapterTPermissionList} from 'api/api.js'
  32. export default {
  33. props: {
  34. isShow: {
  35. type: Boolean,
  36. require: true
  37. },
  38. id:{
  39. type: Number,
  40. require: true
  41. },
  42. haveReset:{
  43. type: Boolean,
  44. default:true
  45. },
  46. permissionType:{
  47. type: String,
  48. default:'classify'
  49. }
  50. },
  51. data() {
  52. return {
  53. configList:[], // 权限配置列表
  54. checkedItems:[], // 当前选中项列表
  55. initCheckedItems:[], // 初始选中项列表(用于比较最后是否做了修改)
  56. }
  57. },
  58. methods: {
  59. // 获取权限设置基础信息列表
  60. async getPermissionList(){
  61. try{
  62. const res = await customInterence.authList({CompanyType:'ficc'})
  63. if(res.Ret===200){
  64. this.configList=res.Data.List
  65. }
  66. }catch(err){
  67. console.log(err);
  68. }
  69. },
  70. // 获取分类权限列表
  71. async getClassifyPermissionList(){
  72. try{
  73. if(this.permissionType=='classify'){
  74. // 分类
  75. const res = await classifyPermissionInterface.classifyPermissionList({ClassifyId:this.id})
  76. if(res.Ret===200){
  77. // 保存一个初始的选中项列表
  78. this.initCheckedItems=res.Data&&res.Data.length?res.Data.map(item=>item.ChartPermissionId):[]
  79. this.checkedItems=res.Data&&res.Data.length?res.Data.map(item=>item.ChartPermissionId):[]
  80. }
  81. }else{
  82. // 章节类型
  83. getchapterTPermissionList({ReportChapterTypeId:this.id}).then(res=>{
  84. if(res.Ret == 200){
  85. // 保存一个初始的选中项列表
  86. this.initCheckedItems=res.Data&&res.Data.length?res.Data.map(item=>item.ChartPermissionId):[]
  87. this.checkedItems=res.Data&&res.Data.length?res.Data.map(item=>item.ChartPermissionId):[]
  88. }
  89. })
  90. }
  91. }catch(err){
  92. console.log(err);
  93. }
  94. },
  95. // 保存
  96. async save(){
  97. // 比较用户是否做了改动
  98. if(JSON.stringify(this.initCheckedItems.sort())!==JSON.stringify(this.checkedItems.sort())){
  99. // 做了修改
  100. try{
  101. if(this.permissionType=='classify'){
  102. // 分类
  103. const res = await classifyPermissionInterface.editClassifyPermission({
  104. ClassifyId:this.id,
  105. ChartPermissionIdList:this.checkedItems
  106. })
  107. console.log(res);
  108. if(res.Ret===200){
  109. this.$message.success(this.$t('MsgPrompt.saved_msg'))
  110. this.$emit('saveConfig',this.id)
  111. }
  112. }else{
  113. this.$emit('saveConfig',{
  114. Id:this.id,
  115. ChartPermissionIdList:this.checkedItems
  116. })
  117. }
  118. }catch(err){
  119. console.log(err);
  120. }
  121. }else{
  122. this.cancelHandle()
  123. }
  124. },
  125. // 重置
  126. reset(){
  127. // 清空数据
  128. this.checkedItems=[]
  129. },
  130. // 取消
  131. cancelHandle() {
  132. this.$emit('update:isShow',false)
  133. },
  134. // 大项复选框改变
  135. groupChange(itemGroup,val){
  136. if(val){
  137. // 大项选中,将组中所有小项选中
  138. itemGroup.Items.forEach(item=>{
  139. if(!this.checkedItems.includes(item.ChartPermissionId)) this.checkedItems.push(item.ChartPermissionId)
  140. })
  141. }else{
  142. // 大项取消,将组中所有小项取消
  143. this.checkedItems=this.checkedItems.filter(item=>!itemGroup.Items.map(item=>item.ChartPermissionId).includes(item))
  144. }
  145. }
  146. },
  147. created () {
  148. this.getPermissionList();
  149. },
  150. computed: {
  151. // 计算是否全选
  152. isCheckedAll(){
  153. return itemGroup=>itemGroup.Items.every(item=>this.checkedItems.includes(item.ChartPermissionId))
  154. },
  155. // 计算是否模糊
  156. isIndeterminate(){
  157. return itemGroup=>!itemGroup.Items.every(item=>this.checkedItems.includes(item.ChartPermissionId)) && itemGroup.Items.some(item=>this.checkedItems.includes(item.ChartPermissionId))
  158. }
  159. },
  160. watch: {
  161. isShow(val){
  162. if(val){
  163. // 弹窗显示时
  164. this.getClassifyPermissionList()
  165. }else{
  166. // 关闭
  167. this.reset()
  168. }
  169. }
  170. },
  171. }
  172. </script>
  173. <style lang="scss">
  174. .permission-dialog{
  175. .el-dialog__body{
  176. .group-list{
  177. // line-height: 80px;
  178. margin-bottom: 40px;
  179. display: flex;
  180. .item-group{
  181. font-weight: 900;
  182. }
  183. }
  184. }
  185. }
  186. </style>