deason 6 years ago
parent
commit
f649613993
2 changed files with 398 additions and 95 deletions
  1. 49 33
      src/modules/print/constants/constants.js
  2. 349 62
      src/modules/print/view/Project.vue

+ 49 - 33
src/modules/print/constants/constants.js

@@ -5,6 +5,26 @@ export const core_api = "/api/ecs_core";
 /* 印刷平台-API */
 export const print_api = "/api/ecs_prt";
 
+/* 试题类型-客观题 */
+export const questionTypeList = [
+  { value: "SINGLE_ANSWER_QUESTION", label: "单选" },
+  { value: "MULTIPLE_ANSWER_QUESTION", label: "多选" },
+  { value: "BOOL_ANSWER_QUESTION", label: "判断" }
+];
+
+/* 单独备份袋设置-归集类型 */
+export const groupTypeList = [
+  { value: "LEARN_CENTER", label: "学习中心" },
+  { value: "EXAM_SITE", label: "考点" }
+];
+
+/* 考试课程的试卷状态 */
+export const coursePaperStatusList = [
+  { value: 0, label: "无" },
+  { value: 1, label: "未指定" },
+  { value: 2, label: "已有" }
+];
+
 /* 是否为空字符串 */
 Vue.prototype.isEmptyStr = function(str) {
   if (str == undefined || String(str).length < 1) {
@@ -22,14 +42,30 @@ Vue.prototype.isEmptyNumber = function(number) {
   return false;
 };
 
-/* 角色-印刷供应商 */
-export const role_print_supplier = "PRINT_SUPPLIER";
-/* 角色-印刷学校管理员 */
-export const role_print_school_leader = "PRINT_SCHOOL_LEADER";
-/* 角色-印刷总负责人 */
-export const role_print_super_leader = "PRINT_SUPER_LEADER";
-/* 角色-项目经理 */
-export const role_print_project_leader = "PRINT_PROJECT_LEADER";
+/* 日期格式处理 yyyy-MM-dd HH:mm:ss */
+Vue.prototype.formatDateStr = function(dateStr) {
+  if (!dateStr) {
+    return "";
+  }
+  let date = new Date(dateStr);
+  let year = date.getFullYear();
+  let month = this.fillZero(date.getMonth() + 1);
+  let day = this.fillZero(date.getDate());
+  let hour = this.fillZero(date.getHours());
+  let minute = this.fillZero(date.getMinutes());
+  let second = this.fillZero(date.getSeconds());
+  return (
+    year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second
+  );
+};
+
+/* 个位数填充零 */
+Vue.prototype.fillZero = function(num) {
+  if (num < 10) {
+    return "0" + num;
+  }
+  return num;
+};
 
 /* 用户角色信息 */
 export const userRole = {
@@ -49,41 +85,21 @@ Vue.prototype.loadUserRole = function(loginUser) {
   let roles = loginUser.roleList;
   for (let role of roles) {
     let roleCode = role.roleCode;
-    if (roleCode == role_print_supplier) {
+    if (roleCode == "PRINT_SUPPLIER") {
       this.curUserRole.isSupplier = true;
-    } else if (roleCode == role_print_school_leader) {
+    } else if (roleCode == "PRINT_SCHOOL_LEADER") {
       this.curUserRole.isSchoolLeader = true;
-    } else if (roleCode == role_print_super_leader) {
+    } else if (roleCode == "PRINT_SUPER_LEADER") {
       this.curUserRole.isSuperLeader = true;
-    } else if (roleCode == role_print_project_leader) {
+    } else if (roleCode == "PRINT_PROJECT_LEADER") {
       this.curUserRole.isPM = true;
     } else {
       this.curUserRole.isOther = true;
     }
   }
-  console.log("curUserRole:", this.curUserRole);
+  //console.log("curUserRole:", this.curUserRole);
 };
 
-/* 单独备份袋设置-归集类型 */
-export const groupTypeList = [
-  { value: "LEARN_CENTER", label: "学习中心" },
-  { value: "EXAM_SITE", label: "考点" }
-];
-
-/* 考试课程的试卷状态 */
-export const coursePaperStatusList = [
-  { value: 0, label: "无" },
-  { value: 1, label: "未指定" },
-  { value: 2, label: "已有" }
-];
-
-/* 试题类型-客观题 */
-export const questionTypeList = [
-  { value: "SINGLE_ANSWER_QUESTION", label: "单选" },
-  { value: "MULTIPLE_ANSWER_QUESTION", label: "多选" },
-  { value: "BOOL_ANSWER_QUESTION", label: "判断" }
-];
-
 Vue.prototype.loadPmInfo = function(loginUser) {
   this.pmList = [];
   this.pmList.push({ id: loginUser.userId, name: loginUser.displayName });

+ 349 - 62
src/modules/print/view/Project.vue

@@ -151,7 +151,7 @@
       <!-- 项目设置弹窗 -->
       <el-dialog
         title="项目设置"
-        width="800px"
+        width="750px"
         :visible.sync="projectSettingDialog"
         @close="closeProjectSettingDialog"
       >
@@ -160,16 +160,15 @@
           ref="projectSettingForm"
           :rules="rules"
           label-position="right"
-          label-width="100px"
+          label-width="110px"
         >
-          <el-row :gutter="10">
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item label="学校" class="form-item" prop="orgId">
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="学校" prop="orgId">
                 <el-select
-                  :disabled="true"
-                  @change="searchExamList(projectSettingForm.orgId);"
                   v-model.number="projectSettingForm.orgId"
                   placeholder="请选择"
+                  :disabled="true"
                 >
                   <el-option
                     v-for="item in orgList"
@@ -181,12 +180,12 @@
               </el-form-item>
             </el-col>
 
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item label="考试" class="form-item" prop="examId">
+            <el-col :span="12">
+              <el-form-item label="考试" prop="examId">
                 <el-select
-                  :disabled="true"
                   v-model.number="projectSettingForm.examId"
                   placeholder="请选择"
+                  :disabled="true"
                 >
                   <el-option
                     v-for="item in examList"
@@ -199,121 +198,114 @@
             </el-col>
           </el-row>
 
-          <el-row :gutter="10">
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item label="项目经理" class="form-item" prop="pmId">
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="项目经理" prop="pmId">
                 <el-select
                   v-model.number="projectSettingForm.pmId"
                   placeholder="请选择"
+                  @change="selectPmName"
+                  clearable
                 >
                   <el-option
                     v-for="item in pmList"
-                    :key="item.id"
                     :label="item.name"
                     :value="item.id"
+                    :key="item.id"
                   ></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item label="供应商" class="form-item" prop="supplierId">
+
+            <el-col :span="12">
+              <el-form-item label="供应商" prop="supplierId">
                 <el-select
                   v-model.number="projectSettingForm.supplierId"
                   placeholder="请选择"
+                  @change="selectSupplierName"
+                  clearable
                 >
                   <el-option
                     v-for="item in supplierList"
-                    :key="item.id"
                     :label="item.name"
                     :value="item.id"
+                    :key="item.id"
                   ></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
           </el-row>
 
-          <el-row :gutter="10">
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item
-                label="准备开始时间"
-                class="form-item"
-                prop="prepareStartTime"
-              >
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="准备开始时间" prop="prepareStartTime">
                 <el-date-picker
                   v-model.number="projectSettingForm.prepareStartTime"
                   type="datetime"
+                  format="yyyy-MM-dd HH:mm:ss"
                   placeholder="选择开始时间"
                 ></el-date-picker>
               </el-form-item>
             </el-col>
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item
-                label="准备结束时间"
-                class="form-item"
-                prop="prepareEndTime"
-              >
+
+            <el-col :span="12">
+              <el-form-item label="准备结束时间" prop="prepareEndTime">
                 <el-date-picker
                   v-model.number="projectSettingForm.prepareEndTime"
                   type="datetime"
+                  format="yyyy-MM-dd HH:mm:ss"
                   placeholder="选择结束时间"
+                  :picker-options="prepareEndTimePicker"
                 ></el-date-picker>
               </el-form-item>
             </el-col>
           </el-row>
 
-          <el-row :gutter="10">
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item
-                label="印刷开始时间"
-                class="form-item"
-                prop="printStartTime"
-              >
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="印刷开始时间" prop="printStartTime">
                 <el-date-picker
                   v-model.number="projectSettingForm.printStartTime"
                   type="datetime"
+                  format="yyyy-MM-dd HH:mm:ss"
                   placeholder="选择开始时间"
                 ></el-date-picker>
               </el-form-item>
             </el-col>
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item
-                label="印刷结束时间"
-                class="form-item"
-                prop="printEndTime"
-              >
+
+            <el-col :span="12">
+              <el-form-item label="印刷结束时间" prop="printEndTime">
                 <el-date-picker
                   v-model.number="projectSettingForm.printEndTime"
                   type="datetime"
+                  format="yyyy-MM-dd HH:mm:ss"
                   placeholder="选择结束时间"
+                  :picker-options="printEndTimePicker"
                 ></el-date-picker>
               </el-form-item>
             </el-col>
           </el-row>
 
-          <el-row :gutter="10">
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item
-                label="邮寄开始时间"
-                class="form-item"
-                prop="mailStartTime"
-              >
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="邮寄开始时间" prop="mailStartTime">
                 <el-date-picker
                   v-model.number="projectSettingForm.mailStartTime"
                   type="datetime"
+                  format="yyyy-MM-dd HH:mm:ss"
                   placeholder="选择开始时间"
                 ></el-date-picker>
               </el-form-item>
             </el-col>
-            <el-col :xs="10" :sm="10" :md="10" :lg="10">
-              <el-form-item
-                label="邮寄结束时间"
-                class="form-item"
-                prop="mailEndTime"
-              >
+
+            <el-col :span="12">
+              <el-form-item label="邮寄结束时间" prop="mailEndTime">
                 <el-date-picker
                   v-model.number="projectSettingForm.mailEndTime"
                   type="datetime"
+                  format="yyyy-MM-dd HH:mm:ss"
                   placeholder="选择结束时间"
+                  :picker-options="mailEndTimePicker"
                 ></el-date-picker>
               </el-form-item>
             </el-col>
@@ -337,6 +329,72 @@ import { mapState } from "vuex";
 
 export default {
   data() {
+    let validatePrepareStartTime = (rule, value, callback) => {
+      if (!this.projectSettingForm.prepareStartTime) {
+        callback(new Error("请选择开始日期!"));
+      } else {
+        this.$refs.projectSettingForm.validateField("prepareEndTime");
+        callback();
+      }
+    };
+
+    let validatePrepareEndTime = (rule, value, callback) => {
+      if (!this.projectSettingForm.prepareEndTime) {
+        callback(new Error("请选择结束日期!"));
+      } else if (
+        this.projectSettingForm.prepareStartTime >
+        this.projectSettingForm.prepareEndTime
+      ) {
+        callback(new Error("开始日期大于结束日期!"));
+      } else {
+        callback();
+      }
+    };
+
+    let validatePrintStartTime = (rule, value, callback) => {
+      if (!this.projectSettingForm.printStartTime) {
+        callback(new Error("请选择开始日期!"));
+      } else {
+        this.$refs.projectSettingForm.validateField("printEndTime");
+        callback();
+      }
+    };
+
+    let validatePrintEndTime = (rule, value, callback) => {
+      if (!this.projectSettingForm.printEndTime) {
+        callback(new Error("请选择结束日期!"));
+      } else if (
+        this.projectSettingForm.printStartTime >
+        this.projectSettingForm.printEndTime
+      ) {
+        callback(new Error("开始日期大于结束日期!"));
+      } else {
+        callback();
+      }
+    };
+
+    let validateMailStartTime = (rule, value, callback) => {
+      if (!this.projectSettingForm.mailStartTime) {
+        callback(new Error("请选择开始日期!"));
+      } else {
+        this.$refs.projectSettingForm.validateField("mailEndTime");
+        callback();
+      }
+    };
+
+    let validateMailEndTime = (rule, value, callback) => {
+      if (!this.projectSettingForm.mailEndTime) {
+        callback(new Error("请选择结束日期!"));
+      } else if (
+        this.projectSettingForm.mailStartTime >
+        this.projectSettingForm.mailEndTime
+      ) {
+        callback(new Error("开始日期大于结束日期!"));
+      } else {
+        callback();
+      }
+    };
+
     return {
       formSearch: {
         orgId: "",
@@ -357,6 +415,7 @@ export default {
       supplierList: [],
       projectSettingDialog: false,
       projectSettingForm: {
+        id: "",
         orgId: "",
         examId: "",
         pmId: "",
@@ -370,10 +429,133 @@ export default {
         mailStartTime: "",
         mailEndTime: ""
       },
-      rules: {}
+      rules: {
+        orgId: [
+          {
+            type: "number",
+            required: true,
+            message: "请选择学校!",
+            trigger: "change"
+          }
+        ],
+        examId: [
+          {
+            type: "number",
+            required: true,
+            message: "请选择考试!",
+            trigger: "change"
+          }
+        ],
+        supplierId: [
+          {
+            type: "number",
+            required: true,
+            message: "请选择供应商!",
+            trigger: "change"
+          }
+        ],
+        pmId: [
+          {
+            type: "number",
+            required: true,
+            message: "请选择项目经理!",
+            trigger: "change"
+          }
+        ],
+        prepareStartTime: [
+          {
+            type: "date",
+            required: true,
+            validator: validatePrepareStartTime,
+            trigger: "change"
+          }
+        ],
+        prepareEndTime: [
+          {
+            type: "date",
+            required: true,
+            validator: validatePrepareEndTime(),
+            trigger: "change"
+          }
+        ],
+        printStartTime: [
+          {
+            type: "date",
+            required: true,
+            validator: validatePrintStartTime,
+            trigger: "change"
+          }
+        ],
+        printEndTime: [
+          {
+            type: "date",
+            required: true,
+            validator: validatePrintEndTime,
+            trigger: "change"
+          }
+        ],
+        mailStartTime: [
+          {
+            type: "date",
+            required: true,
+            validator: validateMailStartTime,
+            trigger: "change"
+          }
+        ],
+        mailEndTime: [
+          {
+            type: "date",
+            required: true,
+            validator: validateMailEndTime,
+            trigger: "change"
+          }
+        ]
+      },
+      prepareEndTimePicker: this.prepareEndTimePickerLimit(),
+      printEndTimePicker: this.printEndTimePickerLimit(),
+      mailEndTimePicker: this.mailEndTimePickerLimit()
     };
   },
   methods: {
+    prepareEndTimePickerLimit() {
+      let self = this;
+      return {
+        disabledDate(time) {
+          if (self.projectSettingForm.prepareStartTime) {
+            return (
+              new Date(self.projectSettingForm.prepareStartTime).getTime() >
+              time.getTime()
+            );
+          }
+        }
+      };
+    },
+    printEndTimePickerLimit() {
+      let self = this;
+      return {
+        disabledDate(time) {
+          if (self.projectSettingForm.printStartTime) {
+            return (
+              new Date(self.projectSettingForm.printStartTime).getTime() >
+              time.getTime()
+            );
+          }
+        }
+      };
+    },
+    mailEndTimePickerLimit() {
+      let self = this;
+      return {
+        disabledDate(time) {
+          if (self.projectSettingForm.mailStartTime) {
+            return (
+              new Date(self.projectSettingForm.mailStartTime).getTime() >
+              time.getTime()
+            );
+          }
+        }
+      };
+    },
     handlePager(current) {
       /* 处理分页 */
       this.formSearch.pageNo = current;
@@ -459,18 +641,123 @@ export default {
       this.$router.push({ path: url });
     },
     editProjectSetting() {
-      /* 项目设置 */
-      this.$notify({
-        message: "Todo...",
-        type: "warning"
+      /* 保存项目设置 */
+      this.$refs.projectSettingForm.validate(valid => {
+        if (!valid) {
+          return false;
+        }
+        this.selectPmName(this.projectSettingForm.pmId);
+
+        this.selectSupplierName(this.projectSettingForm.supplierId);
+
+        this.projectSettingForm.prepareStartTime = this.formatDateStr(
+          this.projectSettingForm.prepareStartTime
+        );
+        this.projectSettingForm.prepareEndTime = this.formatDateStr(
+          this.projectSettingForm.prepareEndTime
+        );
+        this.projectSettingForm.printStartTime = this.formatDateStr(
+          this.projectSettingForm.printStartTime
+        );
+        this.projectSettingForm.printEndTime = this.formatDateStr(
+          this.projectSettingForm.printEndTime
+        );
+        this.projectSettingForm.mailStartTime = this.formatDateStr(
+          this.projectSettingForm.mailStartTime
+        );
+        this.projectSettingForm.mailEndTime = this.formatDateStr(
+          this.projectSettingForm.mailEndTime
+        );
+
+        let url = print_api + "/printing/project/update";
+        this.$http.post(url, this.projectSettingForm).then(
+          () => {
+            this.$notify({
+              type: "success",
+              message: "项目设置成功!"
+            });
+            this.projectSettingDialog = false;
+            this.searchRecords();
+          },
+          error => {
+            console.log(error);
+            this.$notify({
+              message: "项目设置失败!",
+              type: "error"
+            });
+          }
+        );
       });
     },
     openProjectSettingDialog(row) {
-      console.log(row);
+      /* 打开项目设置弹窗 */
       this.projectSettingDialog = true;
+      this.projectSettingForm.id = row.id;
+      this.projectSettingForm.orgId = row.orgId;
+      this.projectSettingForm.examId = row.examId;
+      this.projectSettingForm.pmId = row.pmId;
+      this.projectSettingForm.pmName = row.pmName;
+      this.projectSettingForm.supplierId = row.supplierId;
+      this.projectSettingForm.supplierName = row.supplierName;
+
+      if (row.prepareStartTime) {
+        this.projectSettingForm.prepareStartTime = new Date(
+          row.prepareStartTime
+        );
+      } else {
+        this.projectSettingForm.prepareStartTime = "";
+      }
+      if (row.prepareEndTime) {
+        this.projectSettingForm.prepareEndTime = new Date(row.prepareEndTime);
+      } else {
+        this.projectSettingForm.prepareEndTime = "";
+      }
+      if (row.printStartTime) {
+        this.projectSettingForm.printStartTime = new Date(row.printStartTime);
+      } else {
+        this.projectSettingForm.printStartTime = "";
+      }
+      if (row.printEndTime) {
+        this.projectSettingForm.printEndTime = new Date(row.printEndTime);
+      } else {
+        this.projectSettingForm.printEndTime = "";
+      }
+      if (row.mailStartTime) {
+        this.projectSettingForm.mailStartTime = new Date(row.mailStartTime);
+      } else {
+        this.projectSettingForm.mailStartTime = "";
+      }
+      if (row.mailEndTime) {
+        this.projectSettingForm.mailEndTime = new Date(row.mailEndTime);
+      } else {
+        this.projectSettingForm.mailEndTime = "";
+      }
     },
     closeProjectSettingDialog() {
+      /* 关闭项目设置弹窗 */
       this.projectSettingDialog = false;
+    },
+    selectPmName(key) {
+      /* 处理项目经理名称 */
+      if (this.isEmptyNumber(key)) {
+        return;
+      }
+      let obj = {};
+      obj = this.pmList.find(function(item) {
+        return item.id === key;
+      });
+      this.projectSettingForm.pmName = obj.name;
+    },
+    selectSupplierName(key) {
+      /* 处理供应商名称 */
+      if (this.isEmptyNumber(key)) {
+        return;
+      }
+      let obj = {};
+      obj = this.supplierList.find(function(item) {
+        return item.id === key;
+      });
+      this.projectSettingForm.supplierName = obj.name;
     }
   },
   computed: {