AdwebSiteBlackIpList.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <template>
  2. <a-card :bordered="false">
  3. <!-- 查询区域 -->
  4. <div class="table-page-search-wrapper">
  5. <a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam">
  6. <a-row :gutter="24">
  7. <a-col :xl="6" :sm="12">
  8. <select-site ref="selectSiteRef" @com-methods="changeSite" @set-site-info="getSiteList"/>
  9. </a-col>
  10. <a-col :md="6" :sm="12">
  11. <a-form-item label="IP">
  12. <a-input placeholder="请输入IP" v-model="queryParam.ip"></a-input>
  13. </a-form-item>
  14. </a-col>
  15. <a-col :md="6" :sm="10">
  16. <a-form-item label="黑白名单">
  17. <a-select v-model="queryParam.blackOrWhite" allowClear placeholder="请选择黑白名单">
  18. <a-select-option value="0">黑名单</a-select-option>
  19. <a-select-option value="1">白名单</a-select-option>
  20. </a-select>
  21. </a-form-item>
  22. </a-col>
  23. <a-col :md="6" :sm="8">
  24. <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
  25. <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
  26. <a-button ghost type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
  27. </span>
  28. </a-col>
  29. </a-row>
  30. </a-form>
  31. </div>
  32. <!-- 查询区域-END -->
  33. <!-- table区域-begin -->
  34. <div class="table">
  35. <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
  36. <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
  37. style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  38. <a style="margin-left: 24px" @click="clearSelectedRowKeys">清空</a>
  39. </div>
  40. <!--引用表格-->
  41. <BasicTable @register="registerTable" :rowSelection="rowSelection">
  42. <!--插槽:table标题-->
  43. <template #tableTitle>
  44. <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增
  45. </a-button>
  46. <a-dropdown v-if="selectedRowKeys.length > 0">
  47. <template #overlay>
  48. <a-menu>
  49. <a-menu-item key="1" @click="batchHandleDelete">
  50. <Icon icon="ant-design:delete-outlined"></Icon>
  51. 删除
  52. </a-menu-item>
  53. </a-menu>
  54. </template>
  55. <a-button>批量操作
  56. <Icon icon="mdi:chevron-down" />
  57. </a-button>
  58. </a-dropdown>
  59. </template>
  60. <!--操作栏-->
  61. <template #action="{ record }">
  62. <TableAction :actions="getTableAction(record)"
  63. :dropDownActions="getDropDownAction(record)" />
  64. </template>
  65. <template #bodyCell="{ column, record, index, text }">
  66. <template v-if="column.dataIndex === 'blackOrWhite'">
  67. <span>
  68. <a-tag v-if="record.blackOrWhite === 0" color="red">黑名单</a-tag>
  69. <a-tag v-else>白名单</a-tag>
  70. </span>
  71. </template>
  72. <template v-if="column.dataIndex === 'wasteEnquiryNum'">
  73. <span>
  74. <span v-if="text === '' || text === null || text === 0">0</span>
  75. <a v-else @click="wasteNumVisible(record.email)">{{ text }}</a>
  76. </span>
  77. </template>
  78. <template v-if="column.dataIndex === 'action'">
  79. <span>
  80. <a @click="handleEdit(record)">编辑</a>
  81. <a-divider type="vertical" />
  82. <a-dropdown>
  83. <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
  84. <a-menu slot="overlay">
  85. <a-menu-item>
  86. <a @click="handleDetail(record)">详情</a>
  87. </a-menu-item>
  88. <a-menu-item>
  89. <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
  90. <a>删除</a>
  91. </a-popconfirm>
  92. </a-menu-item>
  93. </a-menu>
  94. </a-dropdown>
  95. </span>
  96. </template>
  97. </template>
  98. </BasicTable>
  99. </div>
  100. <adweb-site-black-ip-modal ref="modalFormRef" @ok="modalFormOk"></adweb-site-black-ip-modal>
  101. <xp-recycle-bin-modal ref="XpRecycleBinModalRef" @ok="getTableAndNum"/>
  102. </a-card>
  103. </template>
  104. <script lang="ts" setup name="AdwebSiteBlackIpList">
  105. import '/@/assets/less/common.less';
  106. import '/@/assets/less/TableExpand.less'
  107. import AdwebSiteBlackIpModal from './modules/AdwebSiteBlackIpModal__Style.vue'
  108. import { getAction } from '/@/api/manage/manage'
  109. import XpRecycleBinModal from './modules/XpRecycleBinModal.vue'
  110. import {batchDelete, deleteOne, getExportUrl, getImportUrl, list} from "./siteBlackIP.api";
  111. import {columns} from "./siteBlackIP.data";
  112. import {BasicTable, TableAction} from "@/components/Table";
  113. import {useListPage} from "@/hooks/system/useListPage";
  114. import {onMounted, reactive, ref} from "vue";
  115. import {useCommonList} from "@/hooks/component/JeecgList";
  116. import SelectSite from "@/components/Adweb/selectSite.vue";
  117. const description = ref('adweb_site_black_ip管理页面');
  118. const dictOptions = reactive({});
  119. const superFieldList = reactive([]);
  120. let queryParam = reactive<any>({});
  121. const formRef = ref();
  122. const XpRecycleBinModalRef = ref();
  123. const modalFormRef = ref();
  124. const siteOptions = reactive({});
  125. //注册table数据
  126. const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
  127. tableProps: {
  128. title: "公共邮箱黑名单",
  129. api: list,
  130. columns: columns,
  131. canResize: false,
  132. useSearchForm: false,
  133. actionColumn: {
  134. width: 180,
  135. fixed: "right"
  136. },
  137. striped: true,
  138. bordered: false,
  139. beforeFetch: (params) => {
  140. return Object.assign(params, queryParam);
  141. }
  142. },
  143. exportConfig: {
  144. name: "询盘列表",
  145. url: getExportUrl,
  146. params: queryParam
  147. },
  148. importConfig: {
  149. url: getImportUrl,
  150. success: handleSuccess
  151. }
  152. });
  153. const [registerTable, {
  154. reload,
  155. clearSelectedRowKeys,
  156. updateTableDataRecord,
  157. findTableDataRecord,
  158. getDataSource
  159. }, { rowSelection, selectedRowKeys }] = tableContext;
  160. const {
  161. handleEdit,
  162. getTableAction,
  163. batchHandleDelete,
  164. handleDetail,
  165. getDropDownAction,
  166. handleDelete,
  167. handleAdd,
  168. searchQuery,
  169. searchReset
  170. } = useCommonList({tableContext, modalFormRef, formRef, batchDelete, deleteOne});
  171. onMounted(() => {
  172. getSiteList();
  173. });
  174. //获取站点列表
  175. function getSiteList() {
  176. let that = this
  177. getAction('/sys/api/getSiteListByUid').then(function (res) {
  178. if (res.code == 0) {
  179. that.siteOptions = res.data;
  180. } else {
  181. that.$message.error('获取站点失败!')
  182. }
  183. }).catch(function (err) {
  184. console.log(err)
  185. })
  186. }
  187. function filterOption(input, option) {
  188. return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
  189. }
  190. function wasteNumVisible(ip,siteId){
  191. this.$nextTick(() => {
  192. this.$refs.XpRecycleBinModal.init(ip,siteId);
  193. })
  194. }
  195. function getTableAndNum(){
  196. // 设置默认站点
  197. let siteId = this.queryParam.siteId;
  198. let siteList = this.siteList;
  199. for (let site of siteList) {
  200. if (site.id === siteId) {
  201. localStorage.setItem("siteCode", site.code);
  202. }
  203. }
  204. this.loadData(arg)
  205. }
  206. /**
  207. * 成功回调
  208. */
  209. function handleSuccess() {
  210. (selectedRowKeys.value = []) && reload();
  211. }
  212. </script>