index.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. <template>
  2. <div class="app-container">
  3. <!-- <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">-->
  4. <!-- <el-form-item label="开启短信" prop="flagSms">-->
  5. <!-- <el-select v-model="queryParams.flagSms" placeholder="请选择开启短信" clearable>-->
  6. <!-- <el-option-->
  7. <!-- v-for="dict in sys_yes_no"-->
  8. <!-- :key="dict.value"-->
  9. <!-- :label="dict.label"-->
  10. <!-- :value="dict.value"-->
  11. <!-- />-->
  12. <!-- </el-select>-->
  13. <!-- </el-form-item>-->
  14. <!-- <el-form-item label="开启邮件" prop="flagMail">-->
  15. <!-- <el-select v-model="queryParams.flagMail" placeholder="请选择开启邮件" clearable>-->
  16. <!-- <el-option-->
  17. <!-- v-for="dict in sys_yes_no"-->
  18. <!-- :key="dict.value"-->
  19. <!-- :label="dict.label"-->
  20. <!-- :value="dict.value"-->
  21. <!-- />-->
  22. <!-- </el-select>-->
  23. <!-- </el-form-item>-->
  24. <!-- <el-form-item label="低级别告警短信" prop="lowSms">-->
  25. <!-- <el-input-->
  26. <!-- v-model="queryParams.lowSms"-->
  27. <!-- placeholder="请输入低级别告警短信"-->
  28. <!-- clearable-->
  29. <!-- @keyup.enter="handleQuery"-->
  30. <!-- />-->
  31. <!-- </el-form-item>-->
  32. <!-- <el-form-item label="低级别告警邮件" prop="lowMail">-->
  33. <!-- <el-input-->
  34. <!-- v-model="queryParams.lowMail"-->
  35. <!-- placeholder="请输入低级别告警邮件"-->
  36. <!-- clearable-->
  37. <!-- @keyup.enter="handleQuery"-->
  38. <!-- />-->
  39. <!-- </el-form-item>-->
  40. <!-- <el-form-item label="中级别告警短信" prop="midSms">-->
  41. <!-- <el-input-->
  42. <!-- v-model="queryParams.midSms"-->
  43. <!-- placeholder="请输入中级别告警短信"-->
  44. <!-- clearable-->
  45. <!-- @keyup.enter="handleQuery"-->
  46. <!-- />-->
  47. <!-- </el-form-item>-->
  48. <!-- <el-form-item label="中级别告警邮件" prop="midMail">-->
  49. <!-- <el-input-->
  50. <!-- v-model="queryParams.midMail"-->
  51. <!-- placeholder="请输入中级别告警邮件"-->
  52. <!-- clearable-->
  53. <!-- @keyup.enter="handleQuery"-->
  54. <!-- />-->
  55. <!-- </el-form-item>-->
  56. <!-- <el-form-item label="高级别告警短信" prop="highSms">-->
  57. <!-- <el-input-->
  58. <!-- v-model="queryParams.highSms"-->
  59. <!-- placeholder="请输入高级别告警短信"-->
  60. <!-- clearable-->
  61. <!-- @keyup.enter="handleQuery"-->
  62. <!-- />-->
  63. <!-- </el-form-item>-->
  64. <!-- <el-form-item label="高级别告警邮件" prop="highMail">-->
  65. <!-- <el-input-->
  66. <!-- v-model="queryParams.highMail"-->
  67. <!-- placeholder="请输入高级别告警邮件"-->
  68. <!-- clearable-->
  69. <!-- @keyup.enter="handleQuery"-->
  70. <!-- />-->
  71. <!-- </el-form-item>-->
  72. <!-- <el-form-item>-->
  73. <!-- <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>-->
  74. <!-- <el-button icon="Refresh" @click="resetQuery">重置</el-button>-->
  75. <!-- </el-form-item>-->
  76. <!-- </el-form>-->
  77. <!-- <el-row :gutter="10" class="mb8">-->
  78. <!-- <el-col :span="1.5">-->
  79. <!-- <el-button-->
  80. <!-- type="primary"-->
  81. <!-- plain-->
  82. <!-- icon="Plus"-->
  83. <!-- @click="handleAdd"-->
  84. <!-- v-hasPermi="['push:pushConfig:add']"-->
  85. <!-- >新增-->
  86. <!-- </el-button>-->
  87. <!-- </el-col>-->
  88. <!-- <el-col :span="1.5">-->
  89. <!-- <el-button-->
  90. <!-- type="success"-->
  91. <!-- plain-->
  92. <!-- icon="Edit"-->
  93. <!-- :disabled="single"-->
  94. <!-- @click="handleUpdate"-->
  95. <!-- v-hasPermi="['push:pushConfig:edit']"-->
  96. <!-- >修改-->
  97. <!-- </el-button>-->
  98. <!-- </el-col>-->
  99. <!-- <el-col :span="1.5">-->
  100. <!-- <el-button-->
  101. <!-- type="danger"-->
  102. <!-- plain-->
  103. <!-- icon="Delete"-->
  104. <!-- :disabled="multiple"-->
  105. <!-- @click="handleDelete"-->
  106. <!-- v-hasPermi="['push:pushConfig:remove']"-->
  107. <!-- >删除-->
  108. <!-- </el-button>-->
  109. <!-- </el-col>-->
  110. <!-- <el-col :span="1.5">-->
  111. <!-- <el-button-->
  112. <!-- type="warning"-->
  113. <!-- plain-->
  114. <!-- icon="Download"-->
  115. <!-- @click="handleExport"-->
  116. <!-- v-hasPermi="['push:pushConfig:export']"-->
  117. <!-- >导出-->
  118. <!-- </el-button>-->
  119. <!-- </el-col>-->
  120. <!-- <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>-->
  121. <!-- </el-row>-->
  122. <!-- <el-table v-loading="loading" :data="pushConfigList" @selection-change="handleSelectionChange">-->
  123. <!-- <el-table-column type="selection" width="55" align="center"/>-->
  124. <!-- <el-table-column label="推送配置ID" align="center" prop="pcId"/>-->
  125. <!-- <el-table-column label="开启短信" align="center" prop="flagSms">-->
  126. <!-- <template #default="scope">-->
  127. <!-- <dict-tag :options="sys_yes_no" :value="scope.row.flagSms"/>-->
  128. <!-- </template>-->
  129. <!-- </el-table-column>-->
  130. <!-- <el-table-column label="开启邮件" align="center" prop="flagMail">-->
  131. <!-- <template #default="scope">-->
  132. <!-- <dict-tag :options="sys_yes_no" :value="scope.row.flagMail"/>-->
  133. <!-- </template>-->
  134. <!-- </el-table-column>-->
  135. <!-- <el-table-column label="短信配置" align="center" prop="configSms"/>-->
  136. <!-- <el-table-column label="邮件配置" align="center" prop="configMail"/>-->
  137. <!-- <el-table-column label="低级别告警短信" align="center" prop="lowSms"/>-->
  138. <!-- <el-table-column label="低级别告警邮件" align="center" prop="lowMail"/>-->
  139. <!-- <el-table-column label="中级别告警短信" align="center" prop="midSms"/>-->
  140. <!-- <el-table-column label="中级别告警邮件" align="center" prop="midMail"/>-->
  141. <!-- <el-table-column label="高级别告警短信" align="center" prop="highSms"/>-->
  142. <!-- <el-table-column label="高级别告警邮件" align="center" prop="highMail"/>-->
  143. <!-- <el-table-column label="备注" align="center" prop="remark"/>-->
  144. <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
  145. <!-- <template #default="scope">-->
  146. <!-- <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"-->
  147. <!-- v-hasPermi="['push:pushConfig:edit']">修改-->
  148. <!-- </el-button>-->
  149. <!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"-->
  150. <!-- v-hasPermi="['push:pushConfig:remove']">删除-->
  151. <!-- </el-button>-->
  152. <!-- </template>-->
  153. <!-- </el-table-column>-->
  154. <!-- </el-table>-->
  155. <!-- <pagination-->
  156. <!-- v-show="total>0"-->
  157. <!-- :total="total"-->
  158. <!-- v-model:page="queryParams.pageNum"-->
  159. <!-- v-model:limit="queryParams.pageSize"-->
  160. <!-- @pagination="getList"-->
  161. <!-- />-->
  162. <!-- &lt;!&ndash; 添加或修改推送配置对话框 &ndash;&gt;-->
  163. <!-- <el-dialog :title="title" v-model="open" width="500px" append-to-body>-->
  164. <el-form ref="pushConfigRef" :model="form" :rules="rules" label-width="120px">
  165. <el-tabs v-model="activeName" style="margin-top:-20px;">
  166. <el-tab-pane label="短信配置" name="sms">
  167. <el-form-item label="开启短信" prop="flagSms">
  168. <el-switch v-model="form.flagSms"/>
  169. <!-- <el-select v-model="form.flagSms" placeholder="请选择开启短信">-->
  170. <!-- <el-option-->
  171. <!-- v-for="dict in sys_yes_no"-->
  172. <!-- :key="dict.value"-->
  173. <!-- :label="dict.label"-->
  174. <!-- :value="dict.value"-->
  175. <!-- ></el-option>-->
  176. <!-- </el-select>-->
  177. </el-form-item>
  178. <el-form-item label="短信配置" prop="configSms">
  179. <el-input v-model="form.configSms" type="textarea" placeholder="请输入内容"
  180. :autosize="{minRows:4,maxRows:4}"/>
  181. <el-button type="primary" @click="handleTest('sms')" size="small" style="margin-top:4px">短信测试
  182. </el-button>
  183. </el-form-item>
  184. <el-form-item label="低级别告警短信" prop="lowSms">
  185. <el-input v-model="form.lowSms" placeholder="请输入低级别告警短信"/>
  186. </el-form-item>
  187. <el-form-item label="中级别告警短信" prop="midSms">
  188. <el-input v-model="form.midSms" placeholder="请输入中级别告警短信"/>
  189. </el-form-item>
  190. <el-form-item label="高级别告警短信" prop="highSms">
  191. <el-input v-model="form.highSms" placeholder="请输入高级别告警短信"/>
  192. </el-form-item>
  193. </el-tab-pane>
  194. <el-tab-pane label="邮箱配置" name="mail">
  195. <el-form-item label="开启邮件" prop="flagMail">
  196. <el-switch v-model="form.flagMail"/>
  197. <!-- <el-select v-model="form.flagMail" placeholder="请选择开启邮件">-->
  198. <!-- <el-option-->
  199. <!-- v-for="dict in sys_yes_no"-->
  200. <!-- :key="dict.value"-->
  201. <!-- :label="dict.label"-->
  202. <!-- :value="dict.value"-->
  203. <!-- ></el-option>-->
  204. <!-- </el-select>-->
  205. </el-form-item>
  206. <el-form-item label="邮件配置" prop="configMail">
  207. <el-input v-model="form.configMail" type="textarea" placeholder="请输入内容"
  208. :autosize="{minRows:4,maxRows:4}"/>
  209. <el-button type="primary" @click="handleTest('mail')" size="small" style="margin-top:4px">短信测试
  210. </el-button>
  211. </el-form-item>
  212. <el-form-item label="低级别告警邮件" prop="lowMail">
  213. <el-input v-model="form.lowMail" placeholder="请输入低级别告警邮件"/>
  214. </el-form-item>
  215. <el-form-item label="中级别告警邮件" prop="midMail">
  216. <el-input v-model="form.midMail" placeholder="请输入中级别告警邮件"/>
  217. </el-form-item>
  218. <el-form-item label="高级别告警邮件" prop="highMail">
  219. <el-input v-model="form.highMail" placeholder="请输入高级别告警邮件"/>
  220. </el-form-item>
  221. </el-tab-pane>
  222. </el-tabs>
  223. </el-form>
  224. <!-- <template #footer>-->
  225. <div class="dialog-footer">
  226. <el-button type="primary" @click="submitForm">确 定</el-button>
  227. <el-button @click="cancel">取 消</el-button>
  228. </div>
  229. <!-- </template>-->
  230. <!-- </el-dialog>-->
  231. <el-dialog :title="testType === 'sms' ? '短信测试' : '邮件测试'" v-model="testVisible" width="500" append-to-body>
  232. <el-form ref="tForm" :model="testForm" :rules="rules" label-width="100px">
  233. <el-row :gutter="10" v-if="testType === 'sms'">
  234. <el-col :span="24">
  235. <el-form-item label="手机号码" prop="phone">
  236. <el-input v-model="testForm.phone" placeholder="请输入手机号码"/>
  237. </el-form-item>
  238. <el-form-item label="内容" prop="content">
  239. <el-input type="textarea" v-model="testForm.content" placeholder="请输入内容"/>
  240. </el-form-item>
  241. <el-form-item>
  242. <el-button type="primary">发送短信</el-button>
  243. </el-form-item>
  244. </el-col>
  245. </el-row>
  246. <el-row :gutter="10" v-if="testType === 'mail'">
  247. <el-col :span="24">
  248. <el-form-item label="邮箱" prop="mail">
  249. <el-input v-model="testForm.mail" placeholder="请输入收件人"/>
  250. </el-form-item>
  251. <el-form-item label="邮箱标题" prop="title">
  252. <el-input v-model="testForm.title" placeholder="请输入标题"/>
  253. </el-form-item>
  254. <el-form-item label="内容" prop="content">
  255. <el-input type="textarea" v-model="testForm.content" placeholder="请输入内容"/>
  256. </el-form-item>
  257. <el-form-item>
  258. <el-button type="primary" @click="sendTest('mail')">发送短信</el-button>
  259. </el-form-item>
  260. </el-col>
  261. </el-row>
  262. </el-form>
  263. </el-dialog>
  264. </div>
  265. </template>
  266. <script setup name="PushConfig">
  267. import {addPushConfig, delPushConfig, getPushConfig, listPushConfig, updatePushConfig,sendTestConfig} from "@/api/push/pushConfig";
  268. const {proxy} = getCurrentInstance();
  269. const {sys_yes_no} = proxy.useDict('sys_yes_no');
  270. const pushConfigList = ref([]);
  271. const open = ref(false);
  272. const loading = ref(true);
  273. const showSearch = ref(true);
  274. const ids = ref([]);
  275. const single = ref(true);
  276. const multiple = ref(true);
  277. const total = ref(0);
  278. const title = ref("");
  279. const activeName = ref("sms")
  280. const testForm = ref({
  281. phone: "",
  282. content: "",
  283. mail: "",
  284. title: "",
  285. })
  286. const data = reactive({
  287. form: {
  288. pcId: 1,
  289. flagSms: null,
  290. flagMail: null,
  291. configSms: null,
  292. configMail: null,
  293. lowSms: null,
  294. lowMail: null,
  295. midSms: null,
  296. midMail: null,
  297. highSms: null,
  298. highMail: null,
  299. remark: null
  300. },
  301. queryParams: {
  302. pageNum: 1,
  303. pageSize: 10,
  304. flagSms: null,
  305. flagMail: null,
  306. configSms: null,
  307. configMail: null,
  308. lowSms: null,
  309. lowMail: null,
  310. midSms: null,
  311. midMail: null,
  312. highSms: null,
  313. highMail: null,
  314. remark: null
  315. },
  316. rules: {
  317. phone: [
  318. {required: true, message: "手机号码不能为空", trigger: "blur"}
  319. ],
  320. content: [
  321. {required: true, message: "内容不能为空", trigger: "blur"}
  322. ],
  323. mail: [
  324. {required: true, message: "邮箱不能为空", trigger: "blur"}
  325. ],
  326. title: [
  327. {required: true, message: "标题不能为空", trigger: "blur"}
  328. ]
  329. }
  330. });
  331. const {queryParams, form, rules} = toRefs(data);
  332. const testType = ref(null)
  333. const testVisible = ref(false)
  334. function sendTest(type){
  335. proxy.$refs["tForm"].validate(async valid => {
  336. if(valid){
  337. const {phone, content,mail, title} = testForm.value
  338. let data = {}
  339. if(type === 'sms'){
  340. data = {phone, content}
  341. }else{
  342. data = {content,mail, title}
  343. }
  344. await sendTestConfig(type,data)
  345. proxy.$message.success("测试成功")
  346. testVisible.value = false
  347. }
  348. })
  349. }
  350. function handleTest(type) {
  351. testType.value = type
  352. testVisible.value = true
  353. proxy.resetForm("tForm");
  354. }
  355. /** 查询推送配置列表 */
  356. function getList() {
  357. loading.value = true;
  358. listPushConfig(queryParams.value).then(response => {
  359. pushConfigList.value = response.rows;
  360. total.value = response.total;
  361. loading.value = false;
  362. });
  363. }
  364. // 取消按钮
  365. function cancel() {
  366. open.value = false;
  367. reset();
  368. }
  369. // 表单重置
  370. function reset() {
  371. form.value = {
  372. pcId: 1,
  373. flagSms: null,
  374. flagMail: null,
  375. configSms: null,
  376. configMail: null,
  377. lowSms: null,
  378. lowMail: null,
  379. midSms: null,
  380. midMail: null,
  381. highSms: null,
  382. highMail: null,
  383. remark: null
  384. };
  385. proxy.resetForm("pushConfigRef");
  386. }
  387. /** 搜索按钮操作 */
  388. function handleQuery() {
  389. queryParams.value.pageNum = 1;
  390. getList();
  391. }
  392. /** 重置按钮操作 */
  393. function resetQuery() {
  394. proxy.resetForm("queryRef");
  395. handleQuery();
  396. }
  397. // 多选框选中数据
  398. function handleSelectionChange(selection) {
  399. ids.value = selection.map(item => item.pcId);
  400. single.value = selection.length != 1;
  401. multiple.value = !selection.length;
  402. }
  403. /** 新增按钮操作 */
  404. function handleAdd() {
  405. reset();
  406. open.value = true;
  407. title.value = "添加推送配置";
  408. }
  409. /** 修改按钮操作 */
  410. function handleUpdate(row) {
  411. reset();
  412. const _pcId = row.pcId || ids.value
  413. getPushConfig(_pcId).then(response => {
  414. activeName.value = "sms"
  415. response.data.flagSms = response.data.flagSms === "Y"
  416. response.data.flagMail = response.data.flagMail === "Y"
  417. form.value = response.data;
  418. open.value = true;
  419. title.value = "修改推送配置";
  420. });
  421. }
  422. /** 提交按钮 */
  423. function submitForm() {
  424. proxy.$refs["pushConfigRef"].validate(valid => {
  425. if (valid) {
  426. const data = {...form.value}
  427. data.flagSms = data.flagSms ? "Y" : "N"
  428. data.flagMail = data.flagMail ? "Y" : "N"
  429. if (data.pcId != null) {
  430. updatePushConfig(data).then(response => {
  431. proxy.$modal.msgSuccess("修改成功");
  432. // open.value = false;
  433. // getList();
  434. });
  435. } else {
  436. addPushConfig(data).then(response => {
  437. proxy.$modal.msgSuccess("新增成功");
  438. // open.value = false;
  439. // getList();
  440. });
  441. }
  442. }
  443. });
  444. }
  445. /** 删除按钮操作 */
  446. function handleDelete(row) {
  447. const _pcIds = row.pcId || ids.value;
  448. proxy.$modal.confirm('是否确认删除推送配置编号为"' + _pcIds + '"的数据项?').then(function () {
  449. return delPushConfig(_pcIds);
  450. }).then(() => {
  451. getList();
  452. proxy.$modal.msgSuccess("删除成功");
  453. }).catch(() => {
  454. });
  455. }
  456. /** 导出按钮操作 */
  457. function handleExport() {
  458. proxy.download('push/pushConfig/export', {
  459. ...queryParams.value
  460. }, `pushConfig_${new Date().getTime()}.xlsx`)
  461. }
  462. // getList();
  463. </script>
  464. <style lang="scss" scoped>
  465. .dialog-footer{
  466. display: flex;
  467. justify-content: center;
  468. margin-top:20px;
  469. }
  470. </style>