index.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <div class="bf-loginpolicys">
  3. <!-- 登录策略 -->
  4. <div class="cont">
  5. <div class="paren_header">
  6. <p>登录策略</p>
  7. </div>
  8. <div class="paren_cont">
  9. <template v-if="dataList.length">
  10. <el-scrollbar style="height: 100%">
  11. <el-row v-infinite-scroll="load" :infinite-scroll-distance="20" infinite-scroll-disabled="disabled" :gutter="24">
  12. <el-col :span="8" v-for="(item, index) in dataList" :key="index">
  13. <div class="cide">
  14. <div class="cide_header">
  15. <el-tooltip effect="dark" :content="item.TacName" placement="bottom">
  16. <span v-if="item.TacName.length>11">{{ item.TacName }}</span>
  17. </el-tooltip>
  18. <span v-if="item.TacName.length<12">{{ item.TacName }}</span>
  19. </div>
  20. <div class="cide_foot">
  21. <span @click="upStart(item.TacId)">查看</span>
  22. <el-checkbox v-model="item.checked" @change="checkedChange(item)" :disabled="isEdit"></el-checkbox>
  23. </div>
  24. </div>
  25. </el-col>
  26. </el-row>
  27. </el-scrollbar>
  28. <template v-if="total > 1">
  29. <p class="center" v-if="loading">加载中...</p>
  30. <!-- <p class="center" v-if="noMore">没有更多数据了~</p> -->
  31. </template>
  32. </template>
  33. <template v-else>
  34. <el-empty :image-size="imageSize" description="暂无数据"></el-empty>
  35. </template>
  36. </div>
  37. </div>
  38. <Loginpolicypop :dialogVisiblestart="dialogVisiblestart" :itemData="itemData" @handleClose="handleClose" />
  39. </div>
  40. </template>
  41. <script>
  42. import { GetTacList, GetTacDetails } from "@/api/systemConfiguration";
  43. import Loginpolicypop from "@/components/loginpolicypop/index.vue";
  44. // props: checkedList 已选中列表数组 isEdit 是否可以编辑 true 为是 false 为否
  45. //emit: getCheckedList 获取已选中的列表
  46. export default {
  47. data () {
  48. return {
  49. dialogVisiblestart: false,
  50. dataList: [],
  51. listArray: [],
  52. itemData: [],
  53. pageNum: 1,
  54. pageSize: 20,
  55. total: null,
  56. arrList: [],
  57. loading: false
  58. };
  59. },
  60. props: {
  61. //选中列表
  62. checkedList: {
  63. type: Array,
  64. default: () => [],
  65. },
  66. isEdit: {
  67. type: Boolean,
  68. required: false,
  69. },
  70. imageSize: {
  71. type: Number,
  72. default: 160
  73. }
  74. },
  75. watch: {
  76. checkedList: {
  77. handler (nv, ov) {
  78. // 特别注意,不能用箭头函数,箭头函数,this指向全局
  79. nv.forEach((item1) => {
  80. this.dataList.forEach((item2) => {
  81. if (item1.TacId == item2.TacId && item1.IsSelected == 1) {
  82. item2.checked = true;
  83. }
  84. });
  85. });
  86. this.listArray = JSON.parse(JSON.stringify(nv));
  87. },
  88. deep: true, // 可以深度检测到 obj 对象的属性值的变化
  89. },
  90. },
  91. computed: {
  92. noMore () {
  93. return this.pageNum >= this.total
  94. },
  95. disabled () {
  96. return this.loading || this.noMore
  97. }
  98. },
  99. created: function () {
  100. this.getTacList();
  101. },
  102. components: {
  103. Loginpolicypop,
  104. },
  105. methods: {
  106. //打开弹窗
  107. upStart (id) {
  108. return new Promise((resolve, reject) => {
  109. GetTacDetails({ TacId: id })
  110. .then((response) => {
  111. if (response.code === 0) {
  112. const { returnData } = response;
  113. this.itemData = returnData;
  114. this.dialogVisiblestart = true;
  115. }
  116. resolve();
  117. })
  118. .catch((error) => {
  119. reject(error);
  120. });
  121. });
  122. },
  123. //关闭弹窗
  124. handleClose () {
  125. this.dialogVisiblestart = false;
  126. },
  127. getTacList () {
  128. return new Promise((resolve, reject) => {
  129. this.loading = true;
  130. GetTacList({
  131. QueryName: "",
  132. PageSize: this.pageSize,
  133. PageIndex: this.pageNum
  134. })
  135. .then((response) => {
  136. if (response.code === 0) {
  137. const { returnData } = response;
  138. const datas = returnData.records;
  139. datas.forEach((element) => {
  140. // element["checked"] = false;
  141. if (this.checkedList.findIndex(element1 => element.TacId === element1.TacId) !== -1) {
  142. element['checked'] = true
  143. } else {
  144. element['checked'] = false
  145. }
  146. });
  147. this.total = returnData.pages;
  148. this.arrList.push(datas);
  149. const arrs = this.arrList.flat();
  150. this.dataList = arrs;
  151. this.loading = false;
  152. }
  153. resolve();
  154. })
  155. .catch((error) => {
  156. reject(error);
  157. this.loading = false;
  158. });
  159. });
  160. },
  161. checkedChange (data) {
  162. if (data.checked == true) {
  163. this.listArray.push(data);
  164. this.$emit("getCheckedList", this.listArray);
  165. } else {
  166. this.listArray.splice(
  167. this.listArray.findIndex((item) => item.TacId === data.TacId),
  168. 1
  169. );
  170. this.$emit("getCheckedList", this.listArray);
  171. }
  172. },
  173. //滚动加载数据
  174. load () {
  175. this.pageNum += 1;
  176. this.getTacList({
  177. QueryName: '',
  178. PageSize: this.PageSize,
  179. PageIndex: this.pageNum
  180. });
  181. }
  182. },
  183. mounted: function () { },
  184. };
  185. </script>
  186. <style lang="scss">
  187. @import "./loginpolicy.scss";
  188. </style>