Bläddra i källkod

短信日志新增

zhangjie 3 år sedan
förälder
incheckning
e23cc7ef61
4 ändrade filer med 199 tillägg och 0 borttagningar
  1. 5 0
      src/constants/enumerate.js
  2. 11 0
      src/modules/base/api.js
  3. 6 0
      src/modules/base/router.js
  4. 177 0
      src/modules/base/views/SmsManage.vue

+ 5 - 0
src/constants/enumerate.js

@@ -61,6 +61,11 @@ export const ROLE_TYPE = {
   CUSTOM: "自定义"
 };
 
+export const SMS_TYPE = {
+  SCHOOL_ADMIN: "管理员",
+  EXAM_TEACHER: "考务老师"
+};
+
 // 通用题卡规则id
 export const COMMON_CARD_RULE_ID = "-1";
 

+ 11 - 0
src/modules/base/api.js

@@ -242,6 +242,17 @@ export const printPlanSyncExamList = () => {
   return $post("/api/admin/exam/print_sync/list_relate_ids", {});
 };
 
+// sms-manage
+export const smsListQuery = datas => {
+  return $postParam("/api/admin/basic/message/list", datas);
+};
+export const smsTypes = () => {
+  return $postParam("/api/admin/basic/message/list_message_types", {});
+};
+export const resendSms = id => {
+  return $postParam("/api/admin/basic/message/resend", { id });
+};
+
 // common
 export const uploadFile = datas => {
   return $post("/api/admin/common/file/upload", datas);

+ 6 - 0
src/modules/base/router.js

@@ -11,6 +11,7 @@ import CommonPrintTemplate from "./views/CommonPrintTemplate.vue";
 import PrintPlanPushManage from "./views/PrintPlanPushManage.vue";
 import FlowManage from "./views/FlowManage.vue";
 import ApproveRecordManage from "./views/ApproveRecordManage.vue";
+import SmsManage from "./views/SmsManage.vue";
 // dict
 import CampusManage from "./views/CampusManage.vue";
 import StudentManage from "./views/StudentManage.vue";
@@ -104,5 +105,10 @@ export default [
     path: "/base/major-manage",
     name: "MajorManage",
     component: MajorManage
+  },
+  {
+    path: "/base/sms-manage",
+    name: "SmsManage",
+    component: SmsManage
   }
 ];

+ 177 - 0
src/modules/base/views/SmsManage.vue

@@ -0,0 +1,177 @@
+<template>
+  <div class="sync-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" inline>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="同步类型:">
+            <el-select
+              v-model="filter.messageType"
+              placeholder="短信类型"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in SMS_TYPE"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="发送结果:">
+            <el-select
+              v-model="filter.sendStatus"
+              placeholder="发送结果"
+              clearable
+              style="width: 120px;"
+            >
+              <el-option
+                v-for="(val, key) in SEND_STATUS"
+                :key="key"
+                :value="key * 1"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
+        <el-form-item label-width="0px">
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            @click="toPage(1)"
+            >查询</el-button
+          >
+        </el-form-item>
+      </el-form>
+    </div>
+
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="businessOperate" label="短信类型">
+        </el-table-column>
+        <el-table-column prop="mobileNumber" label="手机号"> </el-table-column>
+        <el-table-column prop="userName" label="用户"> </el-table-column>
+        <el-table-column prop="templateCode" label="模板代号">
+        </el-table-column>
+        <el-table-column prop="paperNumber" label="试卷编号"> </el-table-column>
+        <el-table-column prop="courseCode" label="课程代码"> </el-table-column>
+        <el-table-column prop="sendStatus" label="结果" width="60">
+          <template slot-scope="scope">
+            <span v-if="scope.row.sendStatus === 'OK'">成功</span>
+            <el-popover
+              v-else
+              placement="top"
+              width="300"
+              trigger="hover"
+              :content="scope.row.sendResult"
+            >
+              <span class="color-danger" slot="reference">失败</span>
+            </el-popover>
+          </template>
+        </el-table-column>
+        <el-table-column prop="createTime" label="发送时间" width="160">
+          <span slot-scope="scope">
+            {{ scope.row.createTime | timestampFilter }}
+          </span>
+        </el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="100">
+          <template slot-scope="scope">
+            <el-button
+              v-if="
+                checkPrivilege('link', 'send') && scope.row.sendStatus !== 'OK'
+              "
+              type="text"
+              class="btn-primary"
+              :disabled="loading"
+              @click="toResend(scope.row)"
+              >重新发送</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { smsListQuery, smsTypes, resendSms } from "../api";
+
+export default {
+  name: "sync-manage",
+  data() {
+    return {
+      SEND_STATUS: {
+        0: "失败",
+        1: "成功"
+      },
+      filter: {
+        sendStatus: "",
+        messageType: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      SMS_TYPE: {},
+      loading: false
+    };
+  },
+  created() {
+    this.getSmsTypes();
+    this.getList();
+  },
+  methods: {
+    async getSmsTypes() {
+      const data = await smsTypes();
+      let types = {};
+      data.forEach(item => {
+        types[item.name] = item.desc;
+      });
+      this.SMS_TYPE = types;
+    },
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      // data.sendStatus
+      const data = await smsListQuery(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async toResend(row) {
+      if (this.loading) return;
+
+      this.loading = true;
+      const res = await resendSms(row.id).catch(() => {});
+      this.loading = false;
+      if (!res) return;
+      this.$message.success("发送成功!");
+      this.getList();
+    }
+  }
+};
+</script>