3 Commits b5770eaee0 ... 667a30f192

Autor SHA1 Mensagem Data
  yanglingling 667a30f192 Merge remote-tracking branch 'origin/master' há 11 meses atrás
  yanglingling 5c20ce35b8 feature(遵义人民):预约申请资料上传 há 11 meses atrás
  yanglingling c4747192c6 feature(遵义人民):平台入室预约功能开发 há 11 meses atrás

+ 4 - 0
src/api/platform/index.js

@@ -11,3 +11,7 @@ export function getPlatFormList(data) {
 export function create(data) {
     return request.postRequest(platformPath,'PlatPlatformAppoint','Create', data)
 }
+
+export function createFile(data) {
+    return request.postRequest(platformPath,'PlatPlatformAppoint','CreateFile', data)
+}

+ 155 - 0
src/views/PersonalCenter/file-upload.vue

@@ -0,0 +1,155 @@
+<template>
+  <div>
+    <el-dialog
+        :title="title"
+        :visible.sync="state.isShowDialog"
+        :close-on-click-modal="false"
+        width="1200px"
+    >
+      <el-form
+          ref="editFormRef"
+          :model="form"
+          label-width="100px"
+          size="mini"
+          label-position="top"
+          :rules="rules"
+          closeable
+      >
+        <div class="form-group">
+          <el-row :gutter="20" class="form-row-wrap">
+            <el-col :span="12">
+              <el-form-item label="资料上传" prop="fileList">
+                <el-upload
+                    class="upload-demo"
+                    action="http://192.168.0.218:9933/weedfs/upload"
+                    multiple
+                    v-model:file-list="form.fileList"
+                    :before-upload="beforeAvatarFileUpload"
+                    :on-success="(res, uploadFile) => handleSuccess(res, uploadFile)"
+                    :on-remove="(res, uploadFile) => handleRemove(res, uploadFile)"
+                >
+                  <el-button size="small" type="primary">点击上传</el-button>
+                  <div slot="tip" class="el-upload__tip">文件大小不能超过20MB</div>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <!-- END -->
+          </el-row>
+        </div>
+        <!-- END -->
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="onCancel" size="small">取 消</el-button>
+          <el-button type="primary" @click="subAdd" size="small">
+            提 交
+          </el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { getToken } from "@/utils/auth";
+import { createFile } from "@/api/platform"
+import to from "await-to-js";
+import { mapGetters } from "vuex";
+export default {
+  name: "FrontendWebTest",
+  computed: {
+    ...mapGetters(["userInfo"]),
+  },
+  data() {
+    return {
+      title: "遵义医科大学附属医院临床医学公共实验中心-资料上传",
+      form: {
+        appointId: 0,
+        fileList: [],
+      },
+      state: {
+        isShowDialog: false,
+        loading: false,
+      },
+      rules: {
+        fileList: [{ required: true, message: "请上传资料", trigger: "change" }],
+      },
+    };
+  },
+  methods: {
+    async openDialog(id) {
+      // 校验token
+      const token = getToken();
+      if (!token) {
+        return this.$router.push("/login?redirect=/technical-plat/index");
+      }
+
+      this.form = {
+        appointId: id,
+        fileList: [],
+      }
+      this.state.isShowDialog = true;
+    },
+    beforeAvatarFileUpload(file) {
+      let isLt10m = file.size / 1024 / 1024 / 20 < 1
+      if (!isLt10m) {
+        this.$message.error('上传文件大小不能超过 20MB!')
+        return false
+      }
+      return true
+    },
+    handleSuccess(res, uploadFile) {
+      this.form.fileList.push(uploadFile)
+    },
+    handleRemove(res, uploadFile) {
+      this.form.fileList = uploadFile
+    },
+    onCancel() {
+      this.$refs.editFormRef.clearValidate();
+      this.$refs.editFormRef.resetFields();
+      this.state.isShowDialog = false;
+    },
+    subAdd() {
+      this.$refs.editFormRef.validate(async valid => {
+        if(valid) {
+          this.form.fileList = this.form.fileList.map(item => {
+            return {
+              fileName: item.name,
+              fileUrl: item.response.Data,
+            }
+          })
+          const [err] = await to(createFile(this.form));
+          if(err) {
+            this.$message.warning('操作失败')
+            return
+          }
+          this.$message.success("操作成功");
+          this.state.isShowDialog = false;
+        }
+      })
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+:deep(.el-dialog__body) {
+  padding-top: 10px;
+}
+.appoint-section {
+  min-height: 450px;
+}
+.exper-info-list {
+  h3 {
+    color: #2c405e;
+    font-weight: bold;
+  }
+  .label {
+    width: 100px;
+  }
+}
+.step-tit {
+  color: #2c405e;
+  font-weight: bold;
+}
+</style>

+ 9 - 2
src/views/PersonalCenter/work.vue

@@ -7,6 +7,7 @@
           <div slot="header"
                class="header">
             <h4>科研仪器</h4>
+            <el-button @click="openUploadDialog">上传</el-button>
           </div>
           <ul class="cage-list">
             <li v-for="v in instrList"
@@ -202,6 +203,7 @@
         </el-card>
       </el-col>
     </el-row>
+    <FileUploadDialog ref="fileUploadDialogRef"></FileUploadDialog>
   </div>
 </template>
 
@@ -224,6 +226,7 @@ import moment from "moment";
 import to from "await-to-js";
 import { getToken } from "@/utils/auth";
 import PersonalInfoDialog from "@/components/PersonalInfo";
+import FileUploadDialog from "@/views/PersonalCenter/file-upload.vue";
 export default {
   name: "PersonalCenter",
   components: {
@@ -232,6 +235,7 @@ export default {
     RightContent,
     FullCalendar,
     PersonalInfoDialog,
+    FileUploadDialog,
   },
   data() {
     return {
@@ -415,7 +419,6 @@ export default {
           .format("YYYY-MM-DD HH:mm:ss");
         startTimeEnd = this.getMonthDate()[1];
       }
-      console.log(startTimeStart);
       const [err, res] = await to(
         getInstrListByUser({
           startTimeStart,
@@ -615,6 +618,10 @@ export default {
       this.searchForm.pageNum = val;
       this.getAppointList();
     },
+    openUploadDialog() {
+      console.log('传递参数:id为申请单id')
+      this.$refs.fileUploadDialogRef.openDialog(1);
+    }
   },
 };
 </script>
@@ -917,4 +924,4 @@ export default {
   align-items: center;
   justify-content: flex-end;
 }
-</style>
+</style>

+ 0 - 2
src/views/technical-plat/components/disclaimer.vue

@@ -79,13 +79,11 @@
         this.state.isShowDialog = true;
       },
       handleScroll(e) {
-        console.log(e);
         // 判断是否滚动到底部
         if (
           e.target.scrollTop + e.target.clientHeight >=
           e.target.scrollHeight
         ) {
-          console.log("已经滚动到底部");
           this.disabledBtn = false;
         }
       },

+ 184 - 96
src/views/technical-plat/components/edit.vue

@@ -16,10 +16,57 @@
           closeable
       >
         <div class="form-group">
-          <h3>申请</h3>
+          <h3>申请入室平台</h3>
           <el-row :gutter="20" class="form-row-wrap">
             <el-col :span="12">
-              <el-form-item label="姓名" prop="memberName">
+              <el-form-item label="预约平台" prop="platformName">
+                <div class="flex">
+                  <el-input
+                      disabled
+                      placeholder="请输入"
+                      class="w100"
+                      maxlength="11"
+                      v-model="form.platformName"
+                  />
+                </div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="预约周期" prop="appointDate">
+                <div class="flex">
+                  <el-date-picker
+                      class="mr8"
+                      style="width: 80%"
+                      @change="calculateMonths"
+                      v-model="form.appointDate"
+                      type="daterange"
+                      range-separator="-"
+                      start-placeholder="预约开始时间"
+                      end-placeholder="预约结束时间"
+                  />
+                  <el-input style="width: 20%" disabled v-model.number="form.platformTime" >
+                    <template #append>个月</template>
+                  </el-input>
+                </div>
+              </el-form-item>
+            </el-col>
+            <!-- END -->
+          </el-row>
+          <h3>预约信息</h3>
+          <el-row :gutter="20" class="form-row-wrap">
+            <el-col :span="24">
+              <el-form-item label="身份" prop="memberType">
+                <el-radio-group v-model="form.memberType"
+                                style="width: 100%"
+                                clearable>
+                  <el-radio v-for="item in userTypeList"
+                            :key="item.id"
+                            :label="item.dictValue">{{ item.dictLabel }}</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="人员姓名" prop="memberName">
                 <div class="flex">
                   <el-select
                       v-model="form.memberName"
@@ -29,6 +76,7 @@
                       placeholder="请选择"
                       filterable
                       clearable
+                      disabled
                   >
                     <el-option :label="v.nickName" :value="v" :key="v.id" v-for="v in userList" />
                   </el-select>
@@ -51,55 +99,64 @@
               <el-form-item label="性别" prop="memberSex">
                 <div class="flex">
                   <el-radio-group v-model="form.memberSex">
-                    <el-radio label="10" value="10">男</el-radio>
-                    <el-radio label="20" value="20">女</el-radio>
+                    <el-radio v-for="item in userSexList"
+                              :key="item.dictValue"
+                              :label="item.dictValue">{{ item.dictLabel }}</el-radio>
                   </el-radio-group>
                 </div>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="实验开始时间" prop="startDate">
+              <el-form-item label="工号/学号" prop="memberNo">
                 <div class="flex">
-                  <el-date-picker
-                      v-model="form.startDate"
-                      type="date"
+                  <el-input
+                      placeholder="请输入"
                       class="w100"
-                      placeholder="选择实验开始时间">
-                  </el-date-picker>
+                      maxlength="11"
+                      v-model="form.memberNo"
+                  />
                 </div>
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item label="实验结束时间" prop="endDate">
+            <el-col :span="12" v-if="form.memberType === '30'">
+              <el-form-item label="身份证号(仅院外)" prop="memberIden">
                 <div class="flex">
-                  <el-date-picker
-                      v-model="form.endDate"
-                      type="date"
+                  <el-input
+                      placeholder="请输入"
                       class="w100"
-                      placeholder="选择实验结束时间">
-                  </el-date-picker>
+                      maxlength="11"
+                      v-model="form.memberIden"
+                  />
                 </div>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="工号/学号" prop="memberNo">
+              <el-form-item label="实验起止时间" prop="dateRange">
                 <div class="flex">
-                  <el-input
-                      placeholder="请输入"
-                      class="w100"
-                      maxlength="11"
-                      v-model="form.memberNo"
+                  <el-date-picker
+                      class="w100 mr8"
+                      v-model="form.dateRange"
+                      type="daterange"
+                      range-separator="-"
+                      start-placeholder="实验开始时间"
+                      end-placeholder="实验结束时间"
                   />
                 </div>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="人员类型" prop="memberType">
-                <el-radio-group v-model="form.memberType">
-                  <el-radio label="10" value="10">本院</el-radio>
-                  <el-radio label="20" value="20">外院</el-radio>
-                  <el-radio label="30" value="30">学生</el-radio>
-                </el-radio-group>
+              <el-form-item label="课题组" prop="applyPg">
+                <div class="flex">
+                  <el-select v-model="form.applyPg"
+                             placeholder="请选择课题组"
+                             value-key="id"
+                             class="w100">
+                    <el-option v-for="item in pjtList"
+                               :key="item.id"
+                               :label="item.pgName"
+                               :value="item"></el-option>
+                  </el-select>
+                </div>
               </el-form-item>
             </el-col>
             <el-col :span="12">
@@ -134,18 +191,6 @@
               </el-form-item>
             </el-col>
             <el-col :span="12" v-if="form.memberType === '20'">
-              <el-form-item label="身份证号码" prop="memberIden">
-                <div class="flex">
-                  <el-input
-                      placeholder="请输入"
-                      class="w100"
-                      maxlength="11"
-                      v-model="form.memberIden"
-                  />
-                </div>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12" v-if="form.memberType === '30'">
               <el-form-item label="导师姓名" prop="mentorName">
                 <div class="flex">
                   <el-select
@@ -162,7 +207,7 @@
                 </div>
               </el-form-item>
             </el-col>
-            <el-col :span="12" v-if="form.memberType === '30'">
+            <el-col :span="12" v-if="form.memberType === '20'">
               <el-form-item label="导师电话" prop="mentorPhone">
                 <div class="flex">
                   <el-input
@@ -174,7 +219,7 @@
                 </div>
               </el-form-item>
             </el-col>
-            <el-col :span="12" v-if="form.memberType === '30'">
+            <el-col :span="12" v-if="form.memberType === '20'">
               <el-form-item label="导师科室" prop="mentorDeptId">
                 <div class="flex">
                   <el-cascader ref="mentorDept"
@@ -193,50 +238,15 @@
                 </div>
               </el-form-item>
             </el-col>
-            <!-- END -->
-          </el-row>
-          <h3>申请入室平台</h3>
-          <el-row :gutter="20" class="form-row-wrap">
-            <el-col :span="12">
-              <el-form-item label="平台" prop="platformName">
-                <div class="flex">
-                  <el-input
-                      disabled
-                      placeholder="请输入"
-                      class="w100"
-                      maxlength="11"
-                      v-model="form.platformName"
-                  />
-                </div>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="时间(月)" prop="platformTime">
-                <div class="flex">
-                  <el-input-number class="w100" v-model.number="form.platformTime" controls-position="right" :min="0" :step="0.1" step-strictly></el-input-number>
-                </div>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="其它" prop="other">
-                <div class="flex">
-                  <el-input
-                      type="textarea"
-                      placeholder="请输入"
-                      class="w100"
-                      maxlength="255"
-                      v-model="form.other"
-                  />
-                </div>
-              </el-form-item>
-            </el-col>
           </el-row>
         </div>
         <div>
           <el-checkbox v-model="checked">
-            <el-button type="text">
-              我已完整阅读并同意 《预约须知》的内容
+            我已完整阅读并同意
+            <el-button type="text" @click="openDisclaimerDialog">
+              《预约须知》
             </el-button>
+            的内容,承诺如实遵守实验室及各平台的各项规章制度,遵守在室的积分管理制度。
           </el-checkbox>
         </div>
         <!-- END -->
@@ -260,7 +270,7 @@
 <script lang="ts">
 import disclaimer from "./disclaimer.vue";
 import { getToken } from "@/utils/auth";
-import { getDeptTree } from "@/api/dict";
+import { getDeptTree, getProjectGroupList, getDictDataByType } from "@/api/dict";
 import { getUserList } from "@/api/instr";
 import { create } from "@/api/platform"
 import to from "await-to-js";
@@ -275,7 +285,7 @@ export default {
   },
   data() {
     return {
-      title: "技术平台-入室申请",
+      title: "遵义医科大学附属医院临床医学公共实验中心-入室申请表",
       type: '',
       form: {
         id: 0,
@@ -301,6 +311,13 @@ export default {
         platformType: "",
         platformTime: 0,
         other: "",
+        pgId: 0,
+        pgName: "",
+        applyPg: {},
+        appointDate: [],
+        dateRange: [],
+        appointStartDate: "",
+        appointEndDate: "",
       },
       checked: false,
       state: {
@@ -308,17 +325,22 @@ export default {
         loading: false,
       },
       rules: {
-        memberName: [{ required: true, message: "不能为空", trigger: "blur" }],
-        memberType: [{ required: true, message: "不能为空", trigger: "change" }],
+        memberName: [{ required: true, message: "人员姓名不能为空", trigger: "blur" }],
+        memberType: [{ required: true, message: "身份不能为空", trigger: "change" }],
         deptId: [{ required: true, message: "不能为空", trigger: "change" }],
-        platformName: [{ required: true, message: "不能为空", trigger: "blur" }],
-        platformTime: [{ required: true, message: "不能为空", trigger: "blur" }],
-        startDate: [{ required: true, message: "不能为空", trigger: "change" }],
-        endDate: [{ required: true, message: "不能为空", trigger: "change" }],
-        mentorName: [{ required: true, message: "不能为空", trigger: "blur" }],
+        platformName: [{ required: true, message: "预约平台不能为空", trigger: "blur" }],
+        appointDate: [{ required: true, message: "预约周期不能为空", trigger: "blur" }],
+        memberPhone: [{ required: true, message: "手机号不能为空", trigger: "blur" }],
+        memberSex: [{ required: true, message: "性别不能为空", trigger: "change" }],
+        memberNo: [{ required: true, message: "工号/学号不能为空", trigger: "blur" }],
+        dateRange: [{ required: true, message: "实验起止时间不能为空", trigger: "change" }],
+        applyPg: [{ required: true, message: "请选择课题组", trigger: "change" }],
       },
       deptData: [], // 部门树
       userList: [], // 用户列表
+      pjtList: [], // 课题组列表
+      userTypeList: [], // 成员类型
+      userSexList: [], // 性别
     };
   },
   methods: {
@@ -326,9 +348,15 @@ export default {
       Promise.all([
         getDeptTree(),
         getUserList({ noPage: true }),
-      ]).then(([dept, user]) => {
+        getProjectGroupList(),
+        getDictDataByType("sys_user_type"),
+        getDictDataByType("sys_com_sex"),
+      ]).then(([dept, user, pjt, type, sex]) => {
         this.deptData = dept.data || [];
         this.userList = user.data.list || [];
+        this.pjtList = pjt.data.list || [];
+        this.userTypeList = type.data.values || [];
+        this.userSexList = sex.data.values || [];
       });
     },
     async openDialog(type, row) {
@@ -338,18 +366,48 @@ export default {
         return this.$router.push("/login?redirect=/technical-plat/index");
       }
 
-      this.form = {}
+      this.form = {
+        id: 0,
+        memberId: 0,
+        memberName: "",
+        memberPhone: "",
+        memberSex: "",
+        memberNo: "",
+        memberIden: "",
+        startDate: "",
+        endDate: "",
+        memberType: "",
+        deptId: 0,
+        deptName: "",
+        workPlace: "",
+        mentorId: 0,
+        mentorName: "",
+        mentorPhone: "",
+        mentorDeptId: 0,
+        mentorDeptName: "",
+        platformId: 0,
+        platformName: "",
+        platformType: "",
+        platformTime: 0,
+        other: "",
+        pgId: 0,
+        pgName: "",
+        applyPg: {},
+      }
       this.checked = false
-
       this.type = type;
       this.getDicts()
       if (type === 'add') {
+        this.memberChange(this.userInfo)
         this.form.platformId = row.id
         this.form.platformName = row.platformName
         this.form.platformType = row.platformType
       }
       this.state.isShowDialog = true;
     },
+    openDisclaimerDialog() {
+      this.$refs.disclaimerRef.openDialog();
+    },
     memberDeptChange() {
       const nodes = this.$refs.memberDept.getCheckedNodes();
       this.form.deptName = nodes[0].label;
@@ -363,10 +421,11 @@ export default {
       this.form.memberName = user.nickName || null;
       this.form.memberPhone = user.phone || '';
       this.form.memberSex = user.sex || '';
-      this.form.memberNo = user.userName || '';
-      this.form.memberIden = user.idCode || '';
+      this.form.memberNo = user.idCode || '';
+      this.form.memberIden = '';
       this.form.deptId = user.deptId || null;
       this.form.deptName = user.deptName || '';
+      this.form.memberType = user.userType || '';
     },
     mentorChange(user) {
       this.form.mentorId = user.id || null;
@@ -375,6 +434,23 @@ export default {
       this.form.mentorDeptId = user.deptId || null;
       this.form.mentorDeptName = user.deptName || '';
     },
+    // 获取月份数
+    calculateMonths() {
+      if (this.form.appointDate.length === 2) {
+        const startDate = this.form.appointDate[0];
+        const endDate = this.form.appointDate[1];
+        this.form.platformTime = this.getMonthDifference(startDate, endDate)
+      } else {
+        this.form.platformTime = 0
+      }
+    },
+    getMonthDifference(startDate, endDate) {
+      let months;
+      months = (endDate.getFullYear() - startDate.getFullYear()) * 12;
+      months -= startDate.getMonth();
+      months += endDate.getMonth();
+      return months < 0 ? 0 : months+1;
+    },
     onCancel() {
       this.$refs.editFormRef.clearValidate();
       this.$refs.editFormRef.resetFields();
@@ -389,6 +465,18 @@ export default {
             // 提交申请
             if (this.type === 'add') {
               this.form.isTemporary = '20'
+              if (this.form.applyPg != null) {
+                this.form.pgId = this.form.applyPg.id
+                this.form.pgName = this.form.applyPg.pgName
+              }
+              if(this.form.appointDate.length) {
+                this.form.appointStartDate = this.form.appointDate[0]
+                this.form.appointEndDate = this.form.appointDate[1]
+              }
+              if(this.form.dateRange.length) {
+                this.form.startDate = this.form.dateRange[0]
+                this.form.endDate = this.form.dateRange[1]
+              }
               const [err] = await to(create(this.form));
               if(err) {
                 this.$message.warning('操作失败')