sunlupeng 2 years ago
parent
commit
842fc29214
2 changed files with 384 additions and 12 deletions
  1. 18 0
      src/api/allApi.js
  2. 366 12
      src/views/HomeView/EarnPoints.vue

+ 18 - 0
src/api/allApi.js

@@ -82,6 +82,24 @@ export function allUserList(query) {
   })
   })
 }
 }
 
 
+// 培训列表
+export function trainList(query) {
+  return request({
+    url: '/mall-train/user/page',
+    method: 'get',
+    params:query
+  })
+}
+
+//培训上传
+export function uploadTrain(data) {
+  return request({
+    url: '/mall-train/user/upload',
+    method: 'post',
+    data
+  })
+}
+
 // 客户表彰列表
 // 客户表彰列表
 export function citeList(query) {
 export function citeList(query) {
   return request({
   return request({

+ 366 - 12
src/views/HomeView/EarnPoints.vue

@@ -107,6 +107,43 @@
             </el-pagination>
             </el-pagination>
           </div>
           </div>
         </el-tab-pane>
         </el-tab-pane>
+        <el-tab-pane label="培训列表" name="fourth">
+          <el-button size="small" type="primary" @click="dialogVisibleTrain = true">上传培训</el-button>
+          <el-table size="small" :data="dataListTrain" border style="margin-top: 20px;width: 960px">
+            <el-table-column align="center" type="index" width="50" label="序号"></el-table-column>
+            <el-table-column align="center" prop="title" min-width="100" label="培训主题">
+            </el-table-column>
+            <el-table-column align="center" prop="startTime" min-width="150" label="开始时间">
+            </el-table-column>
+            <el-table-column align="center" prop="endTime" min-width="150" label="结束时间">
+            </el-table-column>
+            <el-table-column align="center" prop="lecturerName" min-width="150" label="培训讲师">
+            </el-table-column>
+            <el-table-column min-width="100" align="center" label="培训描述">
+              <template slot-scope="props">
+                <el-popover width="400" trigger="hover" :content="props.row.content">
+                  <div slot="reference" class="text-overflow">{{ props.row.content }}</div>
+                </el-popover>
+              </template>
+            </el-table-column>
+            <el-table-column min-width="150" align="center" prop="createTime" label="上传时间"></el-table-column>
+            <el-table-column min-width="100" align="center" label="状态" prop="statusName">
+            </el-table-column>
+            <el-table-column align="center" label="操作" width="160px" class-name="small-padding fixed-width">
+              <template slot-scope="scope">
+                <el-button type="primary" size="small" @click="handleClickView(scope.row, 'view')">查看</el-button>
+                <el-button type="success" size="small" @click="handleClickView(scope.row, 'edit')">修改</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <!-- 分页 -->
+          <div class="myPage">
+            <el-pagination @size-change="handleSizeChangeTrain" @current-change="handleCurrentChangeTrain"
+              :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="10"
+              layout="total, sizes, prev, pager, next, jumper" :total="totalTrain">
+            </el-pagination>
+          </div>
+        </el-tab-pane>
         <el-tab-pane label="积分获取规则" name="second">
         <el-tab-pane label="积分获取规则" name="second">
           <el-empty v-if="!integralRules" :image-size="200"></el-empty>
           <el-empty v-if="!integralRules" :image-size="200"></el-empty>
           <div v-else v-html="integralRules"></div>
           <div v-else v-html="integralRules"></div>
@@ -173,10 +210,69 @@
         <el-button size="small" type="primary" @click="submitFormCite">确 定</el-button>
         <el-button size="small" type="primary" @click="submitFormCite">确 定</el-button>
       </span>
       </span>
     </el-dialog>
     </el-dialog>
+    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogVisibleTrain" width="40%">
+      <el-form :rules="rulesTrain" ref="dataFormTrain" :model="dataFormTrain" label-width="100px">
+        <el-form-item label="培训主题:" prop="title">
+          <el-input clearable style="width: 95%;" size="small" v-model="dataFormTrain.title"></el-input>
+        </el-form-item>
+        <el-form-item label="开始时间:" prop="startTime">
+          <el-date-picker format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
+            :picker-options="setDisabled" v-model="dataFormTrain.startTime" placeholder="请选择开始时间" style="width: 95%">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="结束时间:" prop="endTime">
+          <el-date-picker format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
+            :picker-options="setDisabled" v-model="dataFormTrain.endTime" placeholder="请选择结束时间" style="width: 95%">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="培训讲师:" prop="lecturer">
+          <el-select size="small" v-model="dataFormTrain.lecturer" filterable placeholder="请选择" style="width: 95%;">
+            <el-option :key="item.loginId" v-for="item in recipientsList"
+              :label="item.deptName + '_' + item.userName + '_' + item.employeNo" :value="item.loginId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="参加人员:" prop="traineeIds">
+          <el-select size="small" v-model="dataFormTrain.traineeIds" multiple filterable placeholder="请选择"
+            style="width: 95%;">
+            <el-option :key="item.loginId" v-for="item in recipientsList"
+              :label="item.deptName + '_' + item.userName + '_' + item.employeNo" :value="item.loginId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="培训内容:" prop="content">
+          <el-input type="textarea" :rows="5" maxlength="500" show-word-limit style="width: 95%;" size="small"
+            v-model="dataFormTrain.content"></el-input>
+        </el-form-item>
+        <el-form-item label="培训材料:" prop="materials">
+          <el-upload :action="fileUrl" :file-list="dataFormTrain.materialFiles" :on-success="handleAvatarSuccessTrain"
+            :before-upload="beforeUploadFileTrain" :on-remove="handleRemoveTrain">
+            <el-button size="small" type="primary">点击上传</el-button>
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="签到表照片:" prop="signPhotos">
+          <el-upload :action="fileUrl" :file-list="dataFormTrain.signPhotoFiles" :on-success="handleAvatarSuccessTrain1"
+            :before-upload="beforeUploadFileTrain" :on-remove="handleRemoveTrain1">
+            <el-button size="small" type="primary">点击上传</el-button>
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="现场照片:" prop="sitePhotos">
+          <el-upload :action="fileUrl" :file-list="dataFormTrain.sitePhotoFiles" :on-success="handleAvatarSuccessTrain2"
+            :before-upload="beforeUploadFileTrain" :on-remove="handleRemoveTrain2">
+            <el-button size="small" type="primary">点击上传</el-button>
+          </el-upload>
+        </el-form-item>
+
+      </el-form>
+      <span v-if="dialogStatus!='view'" slot="footer" class="dialog-footer">
+        <el-button size="small" type="primary" @click="submitFormTrain">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
   </div>
 </template>
 </template>
 <script scoped>
 <script scoped>
-import { certificatePage, certificateUpload, notice, certificatType, dictList, allUserList, citeList, uploadCite } from "@/api/allApi";
+import { certificatePage, certificateUpload, notice, certificatType, dictList, allUserList, citeList, uploadCite, trainList, uploadTrain } from "@/api/allApi";
 import { handleTree } from '@/utils/index'
 import { handleTree } from '@/utils/index'
 export default {
 export default {
   data() {
   data() {
@@ -206,6 +302,7 @@ export default {
       typeListCite: [],
       typeListCite: [],
       recipientsList: [],
       recipientsList: [],
       dataListCite: [],
       dataListCite: [],
+
       dialogVisibleCite: false,
       dialogVisibleCite: false,
       rulesCite: {
       rulesCite: {
         type: [{ required: true, message: "请选择表彰类型", trigger: "blur" }],
         type: [{ required: true, message: "请选择表彰类型", trigger: "blur" }],
@@ -228,18 +325,140 @@ export default {
         fileIds: '',
         fileIds: '',
         files: [],
         files: [],
         content: ''
         content: ''
-      }
+      },
+
+      dataListTrain: [],
+      dialogVisibleTrain: false,
+      rulesTrain: {
+        title: [{ required: true, message: "请填写培训主题", trigger: "blur" }],
+        startTime: [
+          { required: true, message: "请选开始时间", trigger: "change" },
+          { validator: this.checkStartTime, trigger: 'change' }
+        ],
+        endTime: [
+          { required: true, message: "请选择结束时间", trigger: "change" },
+          { validator: this.checkEndTime, trigger: 'change' }
+        ],
+        lecturer: [{ required: true, message: "请选择培训讲师", trigger: "blur" }],
+        traineeIds: [{ required: true, message: "请选择参加人员", trigger: "blur" }],
+        materials: [{ required: true, message: "请上传培训材料", trigger: "blur" }],
+        signPhotos: [{ required: true, message: "请上传签到表照片", trigger: "blur" }],
+        sitePhotos: [{ required: true, message: "请上传现场照片", trigger: "blur" }],
+        content: [{ required: true, message: '请填写培训内容', trigger: 'blur' }],
+      },
+      totalTrain: 0,
+      listQueryTrain: {
+        page: 1,
+        limit: 10,
+      },
+      dataFormTrain: {
+        title: '',
+        startTime: '',
+        endTime: '',
+        lecturer: '',
+        traineeIds: [],
+        materialFiles: [],
+        materials: [],
+        signPhotoFiles: [],
+        signPhotos: [],
+        sitePhotoFiles: [],
+        sitePhotos: [],
+        content: '',
+      },
+      dialogStatus:'',
+      textMap: {
+        edit: "修改",
+        view: "详情",
+      },
     };
     };
   },
   },
   created() {
   created() {
     this.getTypeListCite();
     this.getTypeListCite();
     this.getAllUserList();
     this.getAllUserList();
     this.getDataListCite();
     this.getDataListCite();
+    this.getDataListTrain();
     this.getTypeList();
     this.getTypeList();
     this.getDataList();
     this.getDataList();
     this.getIntegralNotice();
     this.getIntegralNotice();
   },
   },
   methods: {
   methods: {
+    handleClickView(row, val) {
+      this.dataFormTrain = Object.assign({}, row);
+      if (row.materialFiles) {
+        let files = row.materialFiles;
+        this.dataFormTrain.materialFiles = [];
+        for (let i in files) {
+          let url = files[i].url;
+          let name = files[i].oldName;
+
+          this.dataFormTrain.materialFiles.push({
+            name: name,
+            url: url,
+            response: { error: "0", data: { url: url } },
+          });
+        }
+      }
+      if (row.signPhotoFiles) {
+        let files = row.signPhotoFiles;
+        this.dataFormTrain.signPhotoFiles = [];
+        for (let i in files) {
+          let url = files[i].url;
+          let name = files[i].oldName;
+
+          this.dataFormTrain.signPhotoFiles.push({
+            name: name,
+            url: url,
+            response: { error: "0", data: { url: url } },
+          });
+        }
+      }
+      if (row.sitePhotoFiles) {
+        let files = row.sitePhotoFiles;
+        this.dataFormTrain.sitePhotoFiles = [];
+        for (let i in files) {
+          let url = files[i].url;
+          let name = files[i].oldName;
+
+          this.dataFormTrain.sitePhotoFiles.push({
+            name: name,
+            url: url,
+            response: { error: "0", data: { url: url } },
+          });
+        }
+      }
+      this.dialogVisibleTrain = true;
+      this.dialogStatus = val;
+    },
+
+    //校验开始时间
+    checkStartTime(rule, value, callback) {
+      if (!value) {
+        callback(new Error("请选择开始时间!"));
+      } else {
+        if (this.dataFormTrain.endTime && Date.parse(value) > Date.parse(this.dataFormTrain.endTime)) {
+          callback(new Error("开始时间必须小于等于结束时间!"))
+          this.dataFormTrain.startTime = '';
+        } else {
+          callback();
+        }
+      }
+    },
+    //校验结束时间
+    checkEndTime(rule, value, callback) {
+      if (!value) {
+        callback(new Error("请选择结束时间!"));
+      } else {
+        if (!this.dataFormTrain.startTime) {
+          callback(new Error("请选择开始时间!"))
+          this.dataFormTrain.endTime = '';
+        } else if (Date.parse(this.dataFormTrain.startTime) > Date.parse(value)) {
+          callback(new Error("结束时间必须大于等于开始时间!"))
+          this.dataFormTrain.endTime = '';
+        } else {
+          callback();
+        }
+      }
+    },
     getTypeList() {
     getTypeList() {
       certificatType().then(response => {
       certificatType().then(response => {
         this.typeList = handleTree(response.data.data);
         this.typeList = handleTree(response.data.data);
@@ -309,11 +528,11 @@ export default {
                 type: "success",
                 type: "success",
                 duration: 2000,
                 duration: 2000,
               });
               });
-                this.dataForm.type = [];
-                this.dataForm.fileIds = '';
-                this.dataForm.files = [];
-                this.listQuery.page = 1;
-                this.getDataList();
+              this.dataForm.type = [];
+              this.dataForm.fileIds = '';
+              this.dataForm.files = [];
+              this.listQuery.page = 1;
+              this.getDataList();
             })
             })
             .catch(() => { });
             .catch(() => { });
         } else {
         } else {
@@ -398,11 +617,11 @@ export default {
                 type: "success",
                 type: "success",
                 duration: 2000,
                 duration: 2000,
               });
               });
-                this.dataFormCite.type = [];
-                this.dataFormCite.fileIds = '';
-                this.dataFormCite.files = [];
-                this.listQueryCite.page = 1;
-                this.getDataListCite();
+              this.dataFormCite.type = [];
+              this.dataFormCite.fileIds = '';
+              this.dataFormCite.files = [];
+              this.listQueryCite.page = 1;
+              this.getDataListCite();
             })
             })
             .catch(() => { });
             .catch(() => { });
         } else {
         } else {
@@ -425,6 +644,141 @@ export default {
       this.getDataListCite()
       this.getDataListCite()
     },
     },
 
 
+
+    handleClickTrain(row, tag) {
+      console.log(row);
+
+    },
+    handleRemoveTrain(file, fileList) {
+      console.log(file, fileList);
+      let fileIds = [];
+      for (let i in fileList) {
+        let id = fileList[i].response.data.id;
+        fileIds.push(id);
+      }
+      this.dataFormTrain.materials = fileIds.join(",");
+    },
+    handleRemoveTrain1(file, fileList) {
+      console.log(file, fileList);
+      let fileIds = [];
+      for (let i in fileList) {
+        let id = fileList[i].response.data.id;
+        fileIds.push(id);
+      }
+      this.dataFormTrain.signPhotos = fileIds.join(",");
+    },
+    handleRemoveTrain2(file, fileList) {
+      console.log(file, fileList);
+      let fileIds = [];
+      for (let i in fileList) {
+        let id = fileList[i].response.data.id;
+        fileIds.push(id);
+      }
+      this.dataFormTrain.sitePhotos = fileIds.join(",");
+    },
+    beforeUploadFileTrain(file) {
+      console.log(file);
+      const size = file.size / 1024 / 1024;
+      console.log(size);
+      if (size > 10) {
+        this.$message.error("文件大小不能超过10MB!");
+        return false;
+      }
+    },
+    handleAvatarSuccessTrain(res, file, fileList) {
+      console.log(file, fileList);
+      console.log("------", "==========");
+      console.log("res = ", res);
+
+      let fileIds = [];
+      for (let i in fileList) {
+        let response = fileList[i].response;
+        if (response.errno && response.errno != "0") {
+          this.$message.error("该文件上传失败,已被移除,请重新上传!");
+          // 上传失败移除该 file 对象
+          fileList.splice(i, 1);
+        } else {
+          let id = fileList[i].response.data.id;
+          fileIds.push(id);
+        }
+      }
+      this.dataFormTrain.materials = fileIds.join(",");
+    },
+    handleAvatarSuccessTrain1(res, file, fileList) {
+      console.log(file, fileList);
+      console.log("------", "==========");
+      console.log("res = ", res);
+
+      let fileIds = [];
+      for (let i in fileList) {
+        let response = fileList[i].response;
+        if (response.errno && response.errno != "0") {
+          this.$message.error("该文件上传失败,已被移除,请重新上传!");
+          // 上传失败移除该 file 对象
+          fileList.splice(i, 1);
+        } else {
+          let id = fileList[i].response.data.id;
+          fileIds.push(id);
+        }
+      }
+      this.dataFormTrain.signPhotos = fileIds.join(",");
+    },
+    handleAvatarSuccessTrain2(res, file, fileList) {
+      console.log(file, fileList);
+      console.log("------", "==========");
+      console.log("res = ", res);
+
+      let fileIds = [];
+      for (let i in fileList) {
+        let response = fileList[i].response;
+        if (response.errno && response.errno != "0") {
+          this.$message.error("该文件上传失败,已被移除,请重新上传!");
+          // 上传失败移除该 file 对象
+          fileList.splice(i, 1);
+        } else {
+          let id = fileList[i].response.data.id;
+          fileIds.push(id);
+        }
+      }
+      this.dataFormTrain.sitePhotos = fileIds.join(",");
+    },
+    submitFormTrain() {
+      this.$refs['dataFormTrain'].validate((valid) => {
+        if (valid) {
+          uploadTrain(this.dataFormTrain)
+            .then((response) => {
+              this.dialogVisibleTrain = false;
+              this.$notify({
+                title: "成功",
+                message: "培训上传成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.dataFormTrain.materials = [];
+              this.listQueryTrain.page = 1;
+              this.getDataListTrain();
+            })
+            .catch(() => { });
+        } else {
+          return false;
+        }
+      });
+    },
+    getDataListTrain() {
+      trainList(this.listQueryCite).then(response => {
+        this.dataListTrain = response.data.data.items;
+        this.totalTrain = response.data.data.total;
+      })
+    },
+    handleSizeChangeTrain(val) {
+      this.listQueryTrain.limit = val
+      this.getDataListTrain()
+    },
+    handleCurrentChangeTrain(val) {
+      this.listQueryTrain.page = val
+      this.getDataListTrain()
+    },
+
   },
   },
 };
 };
 </script>
 </script>