rules.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <cacp-dialog
  3. v-model="state.show"
  4. title="告警规则配置"
  5. :resizable="false"
  6. width="80%"
  7. @closed="$emit('update:show', false)"
  8. >
  9. <div class="dialog" v-if="state.init">
  10. <cacp-search-layout>
  11. <template #search>
  12. <cacp-search-panel-layout
  13. :model="state.form"
  14. ref="ref_query"
  15. label-width="auto"
  16. label-position="right"
  17. :gutter="30"
  18. :colSpan="6"
  19. >
  20. <el-form-item label="规则编号" prop="name">
  21. <el-input v-model="state.form.name"></el-input>
  22. </el-form-item>
  23. <el-form-item label="规则名称" prop="name">
  24. <el-input v-model="state.form.name"></el-input>
  25. </el-form-item>
  26. <el-form-item label="告警等级" prop="name">
  27. <el-input v-model="state.form.name"></el-input>
  28. </el-form-item>
  29. <el-form-item label="监控对象" prop="xxx">
  30. <el-select v-model="state.form.xxx" placeholder="" clearable>
  31. <el-option
  32. v-for="item in state.options.xxx"
  33. :key="item.dictValue"
  34. :label="item.dictLabel"
  35. :value="item.dictValue"
  36. />
  37. </el-select>
  38. </el-form-item>
  39. <template #buttonGroup>
  40. <el-button type="primary" @click="onSearch">查询</el-button>
  41. <el-button type="info" @click="onReset">重置</el-button>
  42. </template>
  43. </cacp-search-panel-layout>
  44. </template>
  45. <cacp-complex-table
  46. :actions="actions"
  47. :data="tableData"
  48. :pagination="tablePagination"
  49. :loading="loading"
  50. @on-page-change="onPageChange"
  51. @on-size-change="onSizeChange"
  52. >
  53. <el-table-column type="index" label="序号" width="50" />
  54. <el-table-column property="areaCode" label="规则名称" min-width="100" />
  55. <el-table-column property="code" label="规则描述" min-width="100" />
  56. <el-table-column property="funcType" label="告警等级" min-width="100" />
  57. <el-table-column property="xxx" label="监控对象" min-width="100" />
  58. <el-table-column property="xxx" label="监控指标" min-width="100" />
  59. <el-table-column property="xxx" label="触发条件" min-width="100" />
  60. <el-table-column property="xxx" label="创建时间" min-width="100" />
  61. </cacp-complex-table>
  62. </cacp-search-layout>
  63. </div>
  64. </cacp-dialog>
  65. <rulesDetail v-model:show="state.detail.show" :transfer="state.detail.transfer" />
  66. </template>
  67. <script setup lang="ts">
  68. import { nextTick, reactive, ref, watch } from 'vue'
  69. import { SuccessResultCode, type TableAction, useComplexTable, useLoading } from '@cacp/ui'
  70. import config from '@/config'
  71. import rulesDetail from './rules-detail.vue'
  72. const props = defineProps({
  73. show: { default: false }
  74. })
  75. const { loading, setLoading } = useLoading()
  76. const { tableData, tablePagination, setPagination, setPageIndex, setPageSizes } = useComplexTable(config)
  77. const state: any = reactive({
  78. show: props.show,
  79. init: false,
  80. form: {},
  81. options: {
  82. xxx: [{ name: '男', code: 1 }],
  83. certType: [{ name: '身份证', code: 1 }],
  84. port: [{ name: '新海港', code: 1 }],
  85. bayonetType: [{ name: '卡口1', code: 1 }],
  86. nationality: [{ name: '中国', code: 1 }],
  87. control: [{ name: '是', code: 1 }]
  88. },
  89. detail: {
  90. show: false,
  91. transfer: {}
  92. }
  93. })
  94. watch(
  95. () => props.show,
  96. (n) => {
  97. state.show = n
  98. // 查询条件样式问题
  99. nextTick(() => {
  100. state.init = n
  101. if (n) {
  102. nextTick(() => {
  103. onSearch()
  104. })
  105. }
  106. })
  107. }
  108. )
  109. const ref_query = ref()
  110. const onSearch = async () => {
  111. await ref_query.value?.validate((valid: boolean, fields: any) => {
  112. if (valid) {
  113. onPageChange(1)
  114. } else {
  115. console.log('error submit!', fields)
  116. }
  117. })
  118. }
  119. const onReset = () => {
  120. ref_query.value?.resetFields()
  121. state.form = {}
  122. onPageChange(1)
  123. }
  124. const onSizeChange = (size: number) => {
  125. setPageSizes(size)
  126. onQuery()
  127. }
  128. function onPageChange(currentPage: number) {
  129. setPageIndex(currentPage)
  130. onQuery()
  131. }
  132. const onQuery = async () => {
  133. setLoading(true)
  134. // const res = await typicalOneQuery({
  135. // ...state.form,
  136. // pageIndex: tablePagination.currentPage,
  137. // pageSize: tablePagination.pageSize
  138. // })
  139. const res = {
  140. code: '0',
  141. data: {
  142. pageNum: 1,
  143. pageSize: 20,
  144. size: 20,
  145. pages: 3,
  146. total: 56,
  147. list: [
  148. {
  149. id: '460000200103174428',
  150. status: 1,
  151. areaCode: '上海 上海市 510000',
  152. code: 3643,
  153. funcType: '创建',
  154. xxx: '常磊',
  155. createTime: '1974-06-02 15:53:23',
  156. lastModified: '1988-07-20 05:47:55'
  157. },
  158. {
  159. id: '4600002001031744282',
  160. status: 1,
  161. areaCode: '上海 上海市 510000',
  162. code: 3643,
  163. funcType: '创建',
  164. xxx: '常磊',
  165. createTime: '1974-06-02 15:53:23',
  166. lastModified: '1988-07-20 05:47:55'
  167. }
  168. ]
  169. }
  170. }
  171. if (res.code === SuccessResultCode) {
  172. setPagination(res.data)
  173. }
  174. setLoading(false)
  175. }
  176. const onAdd = () => {
  177. state.detail.transfer = {
  178. mode: 'add'
  179. }
  180. state.detail.show = true
  181. }
  182. const onView = (row: any) => {
  183. state.detail.transfer = {
  184. mode: 'view',
  185. row
  186. }
  187. state.detail.show = true
  188. }
  189. const onEdit = (row: any) => {
  190. state.detail.transfer = {
  191. mode: 'edit',
  192. row
  193. }
  194. state.detail.show = true
  195. }
  196. const onDel = (row: any) => {}
  197. const actions: TableAction[] = [
  198. {
  199. key: 'add',
  200. text: '新增',
  201. type: 'primary',
  202. plain: false,
  203. onclick: onAdd,
  204. limit: 'none',
  205. position: 'left'
  206. },
  207. {
  208. key: 'view',
  209. text: '查看',
  210. type: 'primary',
  211. plain: true,
  212. onclick: onView,
  213. limit: 'one'
  214. },
  215. {
  216. key: 'view',
  217. text: '编辑',
  218. type: 'primary',
  219. plain: true,
  220. onclick: onEdit,
  221. limit: 'one'
  222. },
  223. {
  224. key: 'del',
  225. text: '删除',
  226. type: 'text',
  227. confirm: '确定要删除吗?',
  228. onclick: onDel,
  229. limit: 'one'
  230. }
  231. ]
  232. </script>
  233. <style lang="less" scoped>
  234. .dialog {
  235. height: 600px;
  236. :deep(.cacp-group__container) {
  237. padding-left: 0;
  238. padding-right: 0;
  239. }
  240. .el-divider--horizontal {
  241. border-top: 1px solid #e5e8ef;
  242. }
  243. :deep(.el-form-item__content) {
  244. padding-right: 26px;
  245. }
  246. }
  247. </style>