Przeglądaj źródła

添加通知管理页面

lideyin 6 lat temu
rodzic
commit
8dbe08d702
1 zmienionych plików z 969 dodań i 0 usunięć
  1. 969 0
      src/modules/examwork/view/notice.vue

+ 969 - 0
src/modules/examwork/view/notice.vue

@@ -0,0 +1,969 @@
+<template>
+  <section class="content">
+    <div class="box box-info">
+      <!-- 正文信息 -->
+      <div class="box-body">
+        <el-form
+          :inline="true"
+          :model="formSearch"
+          label-position="right"
+          label-width="70px"
+        >
+          <el-form-item label="标题" class="pull-left">
+            <el-input
+              v-model="formSearch.title"
+              auto-complete="off"
+              width="200px"
+            ></el-input>
+          </el-form-item>
+          <el-form-item class="d-block">
+            <el-button
+              size="small"
+              type="primary"
+              icon="el-icon-search"
+              @click="resetPageAndSearchForm"
+              >查询</el-button
+            >
+            <el-button
+              size="small"
+              type="primary"
+              icon="el-icon-plus"
+              @click="addNoticeDialog"
+              >新增</el-button
+            >
+          </el-form-item>
+        </el-form>
+
+        <span>操作:</span>
+        <el-button
+          size="small"
+          type="danger"
+          icon="el-icon-delete"
+          @click="deleteByIds"
+          >删除</el-button
+        >
+
+        <div style="width: 100%;margin-bottom: 10px;"></div>
+        <!-- 页面列表 -->
+        <el-table
+          v-loading="loading"
+          element-loading-text="拼命加载中"
+          :data="tableData"
+          border
+          style="width: 100%;text-align:center;"
+          @selection-change="selectChange"
+        >
+          <el-table-column type="selection" width="40"></el-table-column>
+          <el-table-column
+            prop="id"
+            width="60"
+            label="ID"
+            sortable
+          ></el-table-column>
+          <el-table-column prop="title" label="标题"></el-table-column>
+          <!-- <el-table-column prop="publishObject" label="发送对象"></el-table-column> -->
+          <el-table-column label="发送对象" width="180">
+            <template slot-scope="scope">
+              <el-popover
+                :title="getRuleTypeName(scope.row.ruleType)"
+                trigger="click"
+                placement="top-start"
+                width="200px"
+              >
+                <div style="max-width:450px;">
+                  <el-tag
+                    style="margin-right:5px;margin-top:5px;"
+                    v-for="item in scope.row.publishObject"
+                    :key="'po' + item.id"
+                    type="info"
+                    effect="plain"
+                    >{{ item.name }}</el-tag
+                  >
+                </div>
+
+                <!-- <p v-html="getPublishObject(scope.row.publishObject)"></p> -->
+                <div slot="reference" style="text-align:left">
+                  <el-tag size="medium">{{
+                    getRuleTypeName(scope.row.ruleType)
+                  }}</el-tag>
+                </div>
+              </el-popover>
+            </template>
+          </el-table-column>
+          <el-table-column
+            width
+            prop="publisher"
+            label="发布者"
+          ></el-table-column>
+          <el-table-column width="130" label="状态" sortable>
+            <template slot-scope="scope">
+              <div>
+                <span>{{ getPublishStatus(scope.row.publishStatus) }}</span>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="publishTime"
+            width="155"
+            label="发送时间"
+            sortable
+          ></el-table-column>
+          <el-table-column label="操作">
+            <div slot-scope="scope">
+              <el-button
+                v-show="scope.row.publishStatus == 'UNPUBLISHED'"
+                size="mini"
+                type="primary"
+                icon="el-icon-edit"
+                plain
+                @click="editNoticeDialog(scope.row)"
+                >编辑</el-button
+              >
+              <el-button
+                v-show="scope.row.publishStatus == 'UNPUBLISHED'"
+                size="mini"
+                type="danger"
+                @click="deleteById(scope.row)"
+                icon="el-icon-delete"
+                >删除</el-button
+              >
+              <el-button
+                v-show="scope.row.publishStatus != 'UNPUBLISHED'"
+                size="mini"
+                type="primary"
+                icon="el-icon-view"
+                plain
+                @click="viewNoticeDialog(scope.row)"
+                >详情</el-button
+              >
+            </div>
+          </el-table-column>
+        </el-table>
+        <div class="page pull-right">
+          <el-pagination
+            v-if="paginationShow"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-size="pageSize"
+            :page-sizes="[10, 20, 50, 100]"
+            @size-change="handleSizeChange"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          ></el-pagination>
+        </div>
+
+        <!-- 弹出窗口 -->
+        <el-dialog
+          width="700px"
+          title="编辑公告"
+          :visible.sync="editNoticeDialogVisible"
+          :before-close="handleClose"
+          :close-on-click-modal="false"
+          @close="cancel"
+        >
+          <el-form
+            :model="noticeForm"
+            inline-message
+            size="large"
+            :rules="rules"
+            :inline="true"
+            ref="noticeForm"
+            label-width="85px"
+            class="editForm"
+          >
+            <el-form-item label="标题" prop="title">
+              <el-input
+                class="input"
+                :readonly="this.operateType == 'view'"
+                v-model="noticeForm.title"
+                auto-complete="off"
+                maxlength="50"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="发布人" prop="publisher">
+              <el-input
+                class="input"
+                :readonly="this.operateType == 'view'"
+                v-model="noticeForm.publisher"
+                maxlength="50"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="发送对象" prop="ruleType">
+              <el-select
+                :disabled="this.operateType == 'view'"
+                class="input"
+                clearable
+                v-model="noticeForm.ruleType"
+                @change="showSelectReceiver"
+                placeholder="请选择"
+              >
+                <el-option
+                  v-for="item in receiverRuleTypes"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code"
+                ></el-option>
+              </el-select>
+              <el-button
+                style="margin-left:5px;"
+                v-show="
+                  (this.noticeForm.ruleType == 'TEACHER_OF_MARK_WORK' ||
+                    this.noticeForm.ruleType == 'STUDENTS_OF_EXAM') &&
+                    this.operateType != 'view'
+                "
+                @click="showSelectReceiver"
+                >选 择</el-button
+              >
+            </el-form-item>
+            <el-row :gutter="10" v-if="selectedExam.length != 0">
+              <el-col :xs="30" :sm="30" :md="30" :lg="30">
+                <el-form-item label="已选">
+                  <el-tag
+                    style="margin-left:5px;margin-top:5px;"
+                    v-for="tag in selectedExam"
+                    :closable="true"
+                    :close-transition="false"
+                    @close="examTagClose(tag)"
+                    type="info"
+                    :key="'res-exam' + tag.id"
+                    >{{ tag.name }}</el-tag
+                  >
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row :gutter="10" v-if="selectedMark.length != 0">
+              <el-col :xs="30" :sm="30" :md="30" :lg="30">
+                <el-form-item label="已选">
+                  <el-tag
+                    style="margin-left:5px;margin-top:5px;"
+                    v-for="tag in selectedMark"
+                    :closable="true"
+                    :close-transition="false"
+                    @close="markTagClose(tag)"
+                    type="info"
+                    :key="'res-mark' + tag.id"
+                    >{{ tag.name }}</el-tag
+                  >
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-form-item label="公告内容" prop="content">
+              <ckeditor width="650px" v-model="noticeForm.content"></ckeditor>
+            </el-form-item>
+          </el-form>
+          <div style="text-align: center;">
+            <el-button
+              v-show="this.operateType != 'view'"
+              type="primary"
+              @click="saveNotice(2)"
+              >确认发送</el-button
+            >
+            <el-button
+              v-show="this.operateType != 'view'"
+              type="primary"
+              @click="saveNotice(1)"
+              >保 存</el-button
+            >
+            <el-button @click="cancel">关 闭</el-button>
+          </div>
+          <!-- 考试批次弹框 start-->
+          <el-dialog
+            width="600px"
+            :before-close="handleClose"
+            title="发送对象"
+            :visible.sync="examReceiverVisible"
+            append-to-body
+            :close-on-click-modal="false"
+            @close="examCancel"
+          >
+            <el-form
+              inline-message
+              :inline="true"
+              :model="examFormSearch"
+              label-position="right"
+              label-width="70px"
+            >
+              <el-row :gutter="10" v-if="selectedExam.length != 0">
+                <el-col :xs="30" :sm="30" :md="30" :lg="30">
+                  <el-form-item label="已选">
+                    <el-tag
+                      v-for="tag in selectedExam"
+                      :closable="true"
+                      :close-transition="false"
+                      @close="examTagClose(tag)"
+                      type="info"
+                      :key="'exam' + tag.id"
+                      >{{ tag.name }}</el-tag
+                    >
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-form-item label="考试名称" class="pull-left">
+                <el-input
+                  v-model="examFormSearch.name"
+                  auto-complete="off"
+                  width="200px"
+                ></el-input>
+              </el-form-item>
+              <el-form-item class="d-block">
+                <el-button
+                  size="small"
+                  type="primary"
+                  icon="el-icon-search"
+                  @click="resetExamPageAndSearchForm"
+                  >查询</el-button
+                >
+              </el-form-item>
+            </el-form>
+            <div class="table-native" style="height:400px;">
+              <el-table
+                stripe
+                v-loading="loading"
+                element-loading-text="拼命加载中"
+                :data="examTableData"
+                border
+                @selection-change="examSelectChange"
+              >
+                <el-table-column type="selection" width="55"></el-table-column>
+                <el-table-column label="考试id" prop="id"></el-table-column>
+                <el-table-column label="考试名称" prop="name"></el-table-column>
+                <el-table-column width="130" label="考试类型" sortable>
+                  <template slot-scope="scope">
+                    <div>
+                      <span>{{ getExamType(scope.row.examType) }}</span>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <div class="page pull-right">
+                <el-pagination
+                  small
+                  v-if="examPaginationShow"
+                  @current-change="handleExamCurrentChange"
+                  @size-change="handleExamSizeChange"
+                  :current-page="examCurrentPage"
+                  :page-size="examPageSize"
+                  :page-sizes="[10]"
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :total="examTotal"
+                ></el-pagination>
+              </div>
+            </div>
+            <div style="margin-top: 10px;text-align: center;">
+              <el-button @click="examConfirm">确 定</el-button>
+              <el-button @click="examCancel">取消</el-button>
+            </div>
+          </el-dialog>
+          <!-- 考试批次弹框 end-->
+          <!-- 阅卷工作弹框 start-->
+          <el-dialog
+            :before-close="handleClose"
+            width="600px"
+            title="发送对象"
+            :visible.sync="markReceiverVisible"
+            append-to-body
+            :close-on-click-modal="false"
+            @close="markCancel"
+          >
+            <el-form
+              inline-message
+              :inline="true"
+              :model="markFormSearch"
+              label-position="right"
+              label-width="70px"
+            >
+              <el-row :gutter="10" v-if="selectedMark.length != 0">
+                <el-col :xs="30" :sm="30" :md="30" :lg="30">
+                  <el-form-item label="已选">
+                    <el-tag
+                      v-for="tag in selectedMark"
+                      :closable="true"
+                      :close-transition="false"
+                      @close="markTagClose(tag)"
+                      type="info"
+                      :key="'mark' + tag.id"
+                      >{{ tag.name }}</el-tag
+                    >
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-form-item label="评卷工作名称" class="pull-left">
+                <el-input
+                  v-model="markFormSearch.workName"
+                  auto-complete="off"
+                  width="200px"
+                ></el-input>
+              </el-form-item>
+              <el-form-item class="d-block">
+                <el-button
+                  size="small"
+                  type="primary"
+                  icon="el-icon-search"
+                  @click="resetMarkPageAndSearchForm"
+                  >查询</el-button
+                >
+              </el-form-item>
+            </el-form>
+            <div class="table-native" style="height:400px;">
+              <el-table
+                stripe
+                v-loading="loading"
+                element-loading-text="拼命加载中"
+                :data="markTableData"
+                border
+                @selection-change="markSelectChange"
+              >
+                <el-table-column type="selection" width="55"></el-table-column>
+                <!-- <el-table-column label="考试id" prop="id"></el-table-column> -->
+                <el-table-column
+                  label="考试名称"
+                  prop="examName"
+                ></el-table-column>
+                <el-table-column
+                  label="评卷工作名称"
+                  prop="name"
+                ></el-table-column>
+                <el-table-column width="130" label="考试类型" sortable>
+                  <template slot-scope="scope">
+                    <div>
+                      <span>{{ getExamType(scope.row.examType) }}</span>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <div class="page pull-right">
+                <el-pagination
+                  small
+                  v-if="markPaginationShow"
+                  @current-change="handleMarkCurrentChange"
+                  @size-change="handleMarkSizeChange"
+                  :current-page="markCurrentPage"
+                  :page-size="markPageSize"
+                  :page-sizes="[10]"
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :total="markTotal"
+                ></el-pagination>
+              </div>
+            </div>
+            <div style="margin-top: 10px;text-align: center;">
+              <el-button @click="markConfirm">确 定</el-button>
+              <el-button @click="markCancel">取消</el-button>
+            </div>
+          </el-dialog>
+          <!-- 阅卷工作弹框 end-->
+        </el-dialog>
+      </div>
+    </div>
+  </section>
+</template>
+<script>
+import {
+  EXAM_WORK_API,
+  EXAM_TYPE,
+  PUBLISH_STATUS,
+  NOTICE_RECEIVER_RULE_TYPE,
+  MARKING_API
+} from "@/constants/constants.js";
+import { mapState } from "vuex";
+import ckeditor from "@/components/ckeditor.vue";
+
+export default {
+  components: { ckeditor },
+  data() {
+    return {
+      formSearch: {
+        title: ""
+      },
+      examFormSearch: {
+        name: ""
+      },
+      markFormSearch: {
+        workName: ""
+      },
+      selectedExam: [],
+      selectedMark: [],
+      examTableData: [],
+      markTableData: [],
+      operateType: "add",
+      examTypeList: EXAM_TYPE,
+      noticeForm: {
+        id: null,
+        title: "",
+        content: "",
+        publisher: "",
+        ruleType: "", //规则类型
+        publishObjectId: "", //发送对象id
+        noticeStatus: ""
+      },
+      receiverForm: {
+        receiverObjectType: null,
+        receiverObject: "",
+        ruleType: "", //规则类型
+        publishObjectId: "" //发送对象id
+      },
+      receiverRuleTypes: NOTICE_RECEIVER_RULE_TYPE,
+      loading: false,
+      publishStatusList: PUBLISH_STATUS,
+      tableData: [],
+      paginationShow: false,
+      examPaginationShow: false,
+      markPaginationShow: false,
+      editNoticeDialogVisible: false,
+      examReceiverVisible: false,
+      markReceiverVisible: false,
+      currentPage: 1,
+      pageSize: 10,
+      total: 10,
+      examCurrentPage: 1,
+      examPageSize: 10,
+      examTotal: 10,
+      markCurrentPage: 1,
+      markPageSize: 10,
+      markTotal: 10,
+      selectedNoticeIds: [],
+      button: {},
+      rules: {
+        title: [{ required: true, message: "请输入标题", trigger: "blur" }],
+        content: [{ required: true, message: "请输入内容", trigger: "blur" }],
+        ruleType: [
+          { required: true, message: "请选择接收人", trigger: "change" }
+        ],
+        publisher: [
+          { required: true, message: "请输入发布人", trigger: "blur" }
+        ]
+      }
+    };
+  },
+  computed: {
+    ...mapState({ user: state => state.user }),
+    noticeIds() {
+      var strNoticeIds = "";
+      for (let nid of this.selectedNoticeIds) {
+        if (!strNoticeIds) {
+          strNoticeIds += nid;
+        } else {
+          strNoticeIds += "," + nid;
+        }
+      }
+      return strNoticeIds;
+    },
+    selectedExamIds() {
+      var selectedIds = "";
+      for (let exam of this.selectedExam) {
+        if (!selectedIds) {
+          selectedIds += exam.id;
+        } else {
+          selectedIds += "," + exam.id;
+        }
+      }
+      return selectedIds;
+    },
+    selectedMarkIds() {
+      var selectedIds = "";
+      for (let mark of this.selectedMark) {
+        if (!selectedIds) {
+          selectedIds += mark.id;
+        } else {
+          selectedIds += "," + mark.id;
+        }
+      }
+      return selectedIds;
+    }
+  },
+
+  methods: {
+    closeEditNoticeDialog() {
+      this.editNoticeDialogVisible = false;
+    },
+    selectChange(row) {
+      this.selectedNoticeIds = [];
+      row.forEach((element, index) => {
+        console.log(index);
+        this.selectedNoticeIds.push(element.id);
+      });
+      console.log(this.selectedNoticeIds);
+    },
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.searchForm();
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.searchForm();
+    },
+    resetPageAndSearchForm() {
+      this.currentPage = 1;
+      this.searchForm();
+    },
+    examSelectChange(row) {
+      var selectedExam = this.selectedExam;
+      if (selectedExam.length >= 10) {
+        this.warn("一次最多只能选择10个考试批次!");
+        return;
+      }
+      row.forEach(element => {
+        if (selectedExam.indexOf(element) == -1 && selectedExam.length < 10) {
+          selectedExam.push(element);
+        }
+      });
+      this.selectedExam = selectedExam;
+    },
+    markSelectChange(row) {
+      var selectedMark = this.selectedMark;
+      if (selectedMark.length >= 10) {
+        this.warn("一次最多只能选择10个阅卷工作!");
+        return;
+      }
+      row.forEach(element => {
+        if (selectedMark.indexOf(element) == -1 && selectedMark.length < 10) {
+          selectedMark.push(element);
+        }
+      });
+      this.selectedMark = selectedMark;
+    },
+    handleExamCurrentChange(val) {
+      this.examCurrentPage = val;
+      this.searchExamForm();
+    },
+    handleExamSizeChange(val) {
+      this.examPageSize = val;
+      this.searchExamForm();
+    },
+    handleMarkCurrentChange(val) {
+      this.markCurrentPage = val;
+      this.searchMarkForm();
+    },
+    handleMarkSizeChange(val) {
+      this.markPageSize = val;
+      this.searchMarkForm();
+    },
+    resetExamPageAndSearchForm() {
+      this.examCurrentPage = 1;
+      this.searchExamForm();
+    },
+    resetMarkPageAndSearchForm() {
+      this.markCurrentPage = 1;
+      this.searchMarkForm();
+    },
+    //查询方法
+    searchForm() {
+      var param = new URLSearchParams(this.formSearch);
+      var url =
+        EXAM_WORK_API +
+        "/notice/getPagedNoticeList/" +
+        (this.currentPage - 1) +
+        "/" +
+        this.pageSize +
+        "?" +
+        param;
+      this.loading = true;
+      this.$httpWithMsg.get(url).then(response => {
+        console.log(response);
+        this.tableData = response.data.list;
+        this.total = response.data.total;
+        this.loading = false;
+        this.paginationShow = true;
+      });
+    },
+    searchExamForm() {
+      var param = new URLSearchParams(this.examFormSearch);
+      var url =
+        EXAM_WORK_API +
+        "/exam/queryPage/" +
+        (this.examCurrentPage - 1) +
+        "/" +
+        this.examPageSize +
+        "?" +
+        param;
+      this.loading = true;
+      this.$httpWithMsg.get(url).then(response => {
+        console.log(response);
+        this.examTableData = response.data.list;
+        this.examTotal = response.data.total;
+        this.loading = false;
+        this.examPaginationShow = true;
+      });
+    },
+    searchMarkForm() {
+      var param = new URLSearchParams(this.markFormSearch);
+      var url =
+        MARKING_API +
+        "/markWorks/getMarkWorkPage/" +
+        this.markCurrentPage +
+        "/" +
+        this.markPageSize +
+        "?" +
+        param;
+      this.loading = true;
+      this.$httpWithMsg.get(url).then(response => {
+        console.log(response);
+        this.markTableData = response.data.list;
+        this.markTotal = response.data.total;
+        this.loading = false;
+        this.markPaginationShow = true;
+      });
+    },
+    getExamType(examType) {
+      for (let tempExamType of this.examTypeList) {
+        if (tempExamType.value == examType) {
+          return tempExamType.label;
+        }
+      }
+    },
+    addNoticeDialog() {
+      this.operateType = "add";
+
+      this.noticeForm.id = null;
+      this.noticeForm.title = "";
+      this.noticeForm.content = "";
+      this.noticeForm.publisher = "";
+      this.noticeForm.ruleType = "";
+      this.noticeForm.noticeStatus = "";
+
+      this.editNoticeDialogVisible = true;
+      this.selectedExam = [];
+      this.selectedMark = [];
+      this.noticeForm = {};
+    },
+    editNoticeDialog(row) {
+      this.operateType = "modify";
+      this.noticeForm = Object.assign({}, row);
+      if (row.publishObject && row.publishObject.length > 0) {
+        if (row.ruleType == "STUDENTS_OF_EXAM") {
+          this.selectedExam = row.publishObject;
+        } else if (row.ruleType == "TEACHER_OF_MARK_WORK") {
+          this.selectedMark = row.publishObject;
+        }
+      }
+
+      this.editNoticeDialogVisible = true;
+    },
+    viewNoticeDialog(row) {
+      this.operateType = "view";
+      this.noticeForm = Object.assign({}, row);
+      if (row.publishObject && row.publishObject.length > 0) {
+        if (row.ruleType == "STUDENTS_OF_EXAM") {
+          this.selectedExam = row.publishObject;
+        } else if (row.ruleType == "TEACHER_OF_MARK_WORK") {
+          this.selectedMark = row.publishObject;
+        }
+      }
+
+      this.editNoticeDialogVisible = true;
+    },
+    getPublishObject(publishObjectList) {
+      if (publishObjectList == null || publishObjectList.length == 0) {
+        return "";
+      }
+      let ruleType = publishObjectList[0].ruleType;
+      if (
+        ruleType == "ALL_STUDENTS_OF_ROOT_ORG" ||
+        ruleType == "COMMON_USERS_OF_ROLE"
+      ) {
+        return publishObjectList[0].name;
+      }
+      let strName = "";
+      for (let po of publishObjectList) {
+        strName += po.name + ";";
+      }
+      return strName;
+    },
+    getRuleTypeName(ruleType) {
+      for (let rt of this.receiverRuleTypes) {
+        if (ruleType == rt.code) {
+          return rt.name;
+        }
+      }
+    },
+    getPublishStatus(publishStatus) {
+      for (let status of this.publishStatusList) {
+        if (status.code == publishStatus) {
+          return status.name;
+        }
+      }
+    },
+
+    //删除单个数据
+    deleteById(row) {
+      this.$confirm("是否删除该通知?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        var url = EXAM_WORK_API + "/notice/" + row.id;
+        this.$httpWithMsg.delete(url).then(() => {
+          this.$notify({
+            type: "success",
+            message: "删除成功!"
+          });
+          this.searchForm();
+        });
+      });
+    },
+    //删除多条数据
+    deleteByIds() {
+      if (this.selectedNoticeIds.length === 0) {
+        this.warn("请选择要删除的通知");
+      } else {
+        this.$confirm("是否删除这些通知?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "error"
+        }).then(() => {
+          var url = EXAM_WORK_API + "/notice/" + this.noticeIds;
+          this.$httpWithMsg.delete(url).then(() => {
+            this.success("删除成功!");
+            this.searchForm();
+          });
+        });
+      }
+    },
+    saveNotice(option) {
+      if (option == 1) {
+        this.noticeForm.noticeStatus = "CREATION";
+      } else {
+        this.noticeForm.noticeStatus = "PUBLISH";
+      }
+
+      this.$refs["noticeForm"].validate(valid => {
+        if (valid) {
+          if (
+            this.noticeForm.ruleType == "STUDENTS_OF_EXAM" ||
+            this.noticeForm.ruleType == "TEACHER_OF_MARK_WORK"
+          ) {
+            if (this.noticeForm.ruleType == "STUDENTS_OF_EXAM") {
+              this.noticeForm.publishObjectId = this.selectedExamIds;
+            } else if (this.noticeForm.ruleType == "TEACHER_OF_MARK_WORK") {
+              this.noticeForm.publishObjectId = this.selectedMarkIds;
+            }
+            if (this.noticeForm.publishObjectId == "") {
+              this.warn("请选择发送对象!");
+              return;
+            }
+          }
+          //修改
+          if ("modify" == this.operateType) {
+            this.$httpWithMsg
+              .post(EXAM_WORK_API + "/notice/updateNotice", this.noticeForm)
+              .then(
+                () => {
+                  this.success("修改成功!");
+                  this.searchForm();
+                  this.editNoticeDialogVisible = false;
+                },
+                () => {
+                  this.searchForm();
+                  this.editNoticeDialogVisible = false;
+                }
+              );
+          }
+          //新增
+          else {
+            this.$httpWithMsg
+              .post(EXAM_WORK_API + "/notice/addNotice", this.noticeForm)
+              .then(
+                () => {
+                  this.success("新增成功!");
+                  this.editNoticeDialogVisible = false;
+                  this.searchForm();
+                },
+                () => {
+                  this.editNoticeDialogVisible = false;
+                  return this.searchForm();
+                }
+              );
+          }
+        } else {
+          console.log("error submit!");
+          return false;
+        }
+      });
+    },
+    showSelectReceiver() {
+      if (this.noticeForm.ruleType == "STUDENTS_OF_EXAM") {
+        this.selectedMark = [];
+        this.examReceiverVisible = true;
+      } else if (this.noticeForm.ruleType == "TEACHER_OF_MARK_WORK") {
+        this.selectedExam = [];
+        this.markReceiverVisible = true;
+      } else {
+        this.examReceiverVisible = false;
+        this.markReceiverVisible = false;
+      }
+    },
+    examTagClose(tag) {
+      let selectedId = "";
+      for (let [index, exam] of this.selectedExam.entries()) {
+        if (tag.id == exam.id) {
+          this.selectedExam.splice(index, 1);
+        } else {
+          selectedId = selectedId + exam.id;
+        }
+      }
+      this.receiverForm.publishObjectId = selectedId;
+    },
+    markTagClose(tag) {
+      let selectedId = "";
+      for (let [index, mark] of this.selectedMark.entries()) {
+        if (tag.id == mark.id) {
+          this.selectedMark.splice(index, 1);
+        } else {
+          selectedId = selectedId + mark.id;
+        }
+      }
+      this.receiverForm.publishObjectId = selectedId;
+    },
+    examConfirm() {
+      this.examReceiverVisible = false;
+    },
+    markConfirm() {
+      this.markReceiverVisible = false;
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+    cancel() {
+      this.markReceiverVisible = false;
+      this.examReceiverVisible = false;
+      this.selectedExam = [];
+      this.selectedMark = [];
+      this.editNoticeDialogVisible = false;
+    },
+    examCancel() {
+      this.examReceiverVisible = false;
+    },
+    markCancel() {
+      this.markReceiverVisible = false;
+    },
+    warn(msg) {
+      this.$notify({
+        type: "warning",
+        message: msg
+      });
+    },
+    success(msg) {
+      this.$notify({
+        type: "success",
+        message: msg
+      });
+    },
+    handleClose(done) {
+      done();
+      // this.$confirm("确认关闭?")
+      //   .then(() => {
+      //     done();
+      //   })
+      //   .catch(() => {});
+    }
+  },
+  //初始化查询
+  created() {
+    this.searchForm();
+  }
+};
+</script>
+<style scoped>
+.input {
+  width: 400px;
+}
+</style>