Przeglądaj źródła

出入管理 WEB端调整

zhulu 2 dni temu
rodzic
commit
0e71a5adba

+ 5 - 5
src/api/core/letter.js

@@ -56,9 +56,9 @@ export function updateLetter(data) {
     data: data
   })
 }
-export function approveLetter(data) {
+export function approveOutInRequest(data) {
   return request({
-    url: '/core/letter/approve',
+    url: '/core/letter/outinrequest/approve',
     method: 'put',
     data: data
   })
@@ -85,9 +85,9 @@ export function delLetter(id) {
 
 
 // 出入情况详情
-export function outInRecordList(requestData) {
+export function outInRequestList(requestData) {
   return request({
-    url: '/core/outinrecord/list',
+    url: '/core/letter/outinrequest/web/list/',
     method: 'get',
     params: requestData
   })
@@ -96,7 +96,7 @@ export function outInRecordList(requestData) {
 // 出入情况详情
 export function outInRecordDetail(id) {
   return request({
-    url: '/core/outinrecord/'+id,
+    url: '/core/letter/outinrequest/' + id,
     method: 'get',
   })
 }

+ 0 - 0
src/assets/icons/home/出入审批.png → src/assets/icons/home/出入管理.png


+ 6 - 6
src/views/board/charts/comprehesive/report.vue

@@ -139,17 +139,17 @@ export default {
             },
             data: [
               {
-                name: "纸质",
-                value: this.visit.paperCount,
+                name: "普通出入",
+                value: this.visit.normalCount,
               },
               {
                 name: "紧急出入",
                 value: this.visit.urgencyCount,
               },
-              {
-                name: "电子",
-                value: this.visit.electronicCount,
-              },
+              // {
+              //   name: "电子",
+              //   value: this.visit.electronicCount,
+              // },
             ],
           },
           {

+ 6 - 0
src/views/core/materials/index.vue

@@ -294,8 +294,13 @@
             :isShowUploadBtn="title != '知识库详情'"
             :defaultValue="formFileListDefualtValue"
             v-model="form.fileList"
+            :fileType="fileLimitType"
             @input="fileListChanged"
           />
+          <!-- fileType: {
+      type: Array,
+      default: () => ["pdf", "jpg", "png", "bmp", "zip", "rar", "7z"],
+    }, -->
         </el-form-item>
 
         <el-form-item prop="remark" label="备注">
@@ -375,6 +380,7 @@ export default {
         children: "children",
         label: "name",
       },
+      fileLimitType:["docx","doc","pdf", "jpg", "png", "bmp", "zip", "rar", "7z"],
       formFileListDefualtValue: [],
       // 查询参数
       queryParams: {

+ 53 - 7
src/views/core/outIn/letter/dialog.addletter.vue

@@ -44,7 +44,7 @@
                 />
               </el-form-item>
             </el-col>
-            <el-col :span="12">
+            <el-col :span="24">
               <el-form-item prop="range" label="介绍信有效期">
                 <el-date-picker
                   v-model="formData.range"
@@ -63,11 +63,11 @@
                 </el-date-picker> -->
               </el-form-item>
             </el-col>
-            <el-col :span="12">
+            <!-- <el-col :span="12">
               <el-form-item prop="effectiveDays" label="有效天数">
                 <el-input-number style="width: 100%" :disabled='true' v-model="formData.effectiveDays" :min="1" ></el-input-number>
               </el-form-item>
-            </el-col>
+            </el-col> -->
             <el-col :span="12">
               <el-form-item label="上传介绍信附件" ref="letterFile" prop="letterFile">
 <!--                <K-file-upload
@@ -102,7 +102,20 @@
                   人员信息
                 </h3>
             </el-col>
-            <el-col :offset="8" :span="2">
+            <el-col :offset="5" :span="3">
+              <h3>
+                <el-button
+                plain 
+                type="success"
+                icon="el-icon-search"
+                size="mini"
+                @click="handleUseHistoryUser"
+                >历史人员</el-button
+              >
+                </h3>
+
+            </el-col>
+            <el-col :offset="0" :span="4">
               <h3>
                 <el-button
                 type="primary"
@@ -199,6 +212,9 @@
         </div>
       </DialogCom>
 
+      <DialogSelectHistoryUser ref="DialogSelectHistoryUser" :defaultSelect="defaultSelect" @select="historyUserSelected"
+                      :orgId="orgId"></DialogSelectHistoryUser>
+
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="onHide">取 消</el-button>
@@ -222,14 +238,16 @@ import imgUpload from "@/components/ImageUpload";
 import imgFileUpload from "@/components/ImageFileUpload";
 import DataRangePicker from "@/components/dateTime/daterange.picker.vue";
 import orgSelect from "@/components/orgSelect/zl.orgSelect.vue";
+import DialogSelectHistoryUser from "./dialog.select.historyuser.vue";
 export default {
-  components: {orgSelect, OrgTreeSelect, KFileUpload, imgUpload,DataRangePicker,imgFileUpload },
+  components: {orgSelect, OrgTreeSelect, KFileUpload, imgUpload,DataRangePicker,imgFileUpload,DialogSelectHistoryUser },
   data() {
     const params = this.$route.params;
     return {
       id: params ? params.id : null,
       isShow: false,
       title: "录入介绍信",
+      defaultSelect:[],
       formData: this.reset(),
       formDataRules: {
         reasons: [{ required: true, message: "请输入出入事由" }],
@@ -266,7 +284,7 @@ export default {
   watch: {},
   created() {},
   computed: {
-    ...mapState(["loginUser", "org"]),
+    ...mapState(["loginUser", "org","orgId"]),
   },
   methods: {
     ...mapMutations([]),
@@ -283,7 +301,7 @@ export default {
         letterFile: [],
         userInfos: [],
         userPageTitle:null,
-        type:1,
+        type:2,// 2 普通出入 ,3 紧急出入
         status:0,
         ...other,
       };
@@ -325,6 +343,10 @@ export default {
       this.userPageTitle = '添加出入人员';
       this.open = true;
     },
+    handleUseHistoryUser() {
+      this.$refs["DialogSelectHistoryUser"].show();
+    },
+    
     getUserPageTitle(){
       return this.userPageTitle;
     },
@@ -379,6 +401,30 @@ export default {
       this.imageList = [];
       this.userInfo = this.resetUserInfo();
     },
+    historyUserSelected(selectedHistroyPerson){      
+      this.$refs["DialogSelectHistoryUser"].onHide();     
+      selectedHistroyPerson.forEach(x=>{
+        var addPerson = {
+          companyName:x.companyName,
+          userName:x.userName,
+          idType:x.idType,
+          idCard:x.idCard,
+          imgFile:x.imgFile,
+        }
+        // 检查是否已存在(避免重复)
+        const exists = this.formData.userInfos.some(v => 
+          v.idCard === addPerson.idCard &&
+          v.name === addPerson.name &&
+          v.idType === addPerson.idType
+        );
+
+        // 不存在则添加
+        if (!exists) {
+          console.log("{...x}",addPerson);
+          this.formData.userInfos.push(addPerson);
+        }
+      }); 
+    },
     submitUser() {
       this.$refs["formUser"].validate((valid) => {
         if (valid) {

+ 1 - 1
src/views/core/outIn/letter/dialog.letter.detail.vue

@@ -40,7 +40,7 @@
           <el-descriptions-item label="出入事由">{{formData.reasons}}</el-descriptions-item>
           <el-descriptions-item label="开始日期">{{formData.startTimeStr}}</el-descriptions-item>
           <el-descriptions-item label="截止日期">{{formData.endTimeStr}}</el-descriptions-item>
-          <el-descriptions-item label="有效天数">{{formData.effectiveDays}}</el-descriptions-item>
+          <!-- <el-descriptions-item label="有效天数">{{formData.effectiveDays}}</el-descriptions-item> -->
           <el-descriptions-item label="介绍信附件" span="2">
             <image-file-list-preview v-model="formData.letterFile"></image-file-list-preview>
           </el-descriptions-item>

+ 135 - 0
src/views/core/outIn/letter/dialog.select.historyuser.vue

@@ -0,0 +1,135 @@
+<template>
+  <DialogCom
+    title="选择历史人员"
+    :visible.sync="isShow"
+    class="g-dialog-select-safe-check"
+    :close-on-click-modal="false"
+    width="55%"
+    top="10vh"
+    append-to-body
+  >
+    <div class="el-dialog-div" style="margin-bottom:20px">
+      <g-search-table
+        ref="st"
+        url="/core/outInHistoryUser/list"
+        method="get"
+        :search-data="search"
+        :pageable="true"
+        :select="true"
+        :select-default="selectList"
+        :drag="false"
+        @select="onSelect"
+      >
+        <!-- 搜索 -->
+        <template slot="searchs">
+          <el-form-item prop="keyWords" label="关键字">
+            <el-input v-model="search.keyWords" placeholder="请输入人员姓名或证件号关键字"/>
+          </el-form-item>
+        </template>
+
+        <!-- 表格 -->
+        <template slot="columns">
+            <el-table-column label="申请单位" width="100" align="center" prop="companyName" />
+            <el-table-column label="出入人员" width="100" align="center" prop="userName" />
+            <el-table-column label="证件类型" width="100" align="center" prop="idType">
+              <template slot-scope="scope">
+                <dict-tag :options="dict.type.letter_id_type" :value="scope.row.idType"/>
+              </template>
+            </el-table-column>
+            <el-table-column label="证件号码" width="200" align="center" prop="idCard">
+            </el-table-column>
+            <el-table-column label="证件图片" align="center" prop="imgFile">
+              <template slot-scope="scope">
+                <ImageListPreview v-model="scope.row.imgFile"></ImageListPreview>
+              </template>
+            </el-table-column>
+        </template>
+      </g-search-table>
+    </div>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="onSubmit">确 定</el-button>
+      <el-button @click="onHide">关 闭</el-button>
+    </div>
+  </DialogCom>
+</template>
+<script>
+import GSearchTable from "@/components/table/gx.search.table.vue";
+// import { ruleListForOrg } from "@/api/resumption/rule.js";
+export default {
+  components: { GSearchTable },
+  data() {
+    return {
+      isShow: false,
+      selectList: [],
+      // ruleList: [],
+      search: this.emptySearch(),
+    };
+  },
+  computed: {},
+  watch: {
+    orgId(newval) {
+      console.log("orgId",newval);
+      this.search.orgId=newval;
+    },
+  },
+  dicts: ["letter_id_type"],
+  props: {
+    defaultSelect:{
+      type:Array
+    },
+    orgId:{
+
+    },
+  },
+  methods: {
+    show() {
+      this.search= this.emptySearch();
+      console.log("this.search",this.search)
+      this.isShow = true;
+      this.selectList =this.defaultSelect;
+      // TODO: 处理第一次进入弹窗时,表格数据不加载
+    },
+    onHide() {
+      this.isShow = false;
+      this.search=this.emptySearch();
+    },
+    onSelect(item) {
+      this.selectList = item;
+    },
+    onSubmit() {
+      let s=this.selectList
+      this.$emit("select", this.selectList);
+      this.onHide();
+    },
+    emptySearch() {
+      return {
+        keyWords: null,
+        orgId:this.$store.getters.orgId,
+        pageSize:100000,
+        pageNum:1,
+      };
+    },
+    downLoadFile(url)
+    {
+        if(process.env.VUE_APP_BASE_API!=='/')
+        {
+          url=process.env.VUE_APP_BASE_API+url;
+        }
+        const a = document.createElement("a");
+        a.setAttribute("download", name);
+        a.setAttribute("target", "_blank");
+        a.setAttribute("href", url);
+        a.click();
+    }
+  },
+  mounted() {
+
+  },
+};
+</script>
+<style lang="scss" scoped>
+.el-dialog-div {
+  overflow: auto;
+}
+</style>

+ 2 - 2
src/views/core/outIn/letter/index.vue

@@ -61,7 +61,7 @@
       <el-table-column label="出入事由"  :show-overflow-tooltip="true" align="center" prop="reasons" />
       <el-table-column label="开始日期" align="center" prop="startTime"  width="150"/>
       <el-table-column label="截止日期" align="center" prop="endTime"  width="150"/>
-      <el-table-column label="有效天数" align="center"  prop="effectiveDays" width="100"/>
+      <!-- <el-table-column label="有效天数" align="center"  prop="effectiveDays" width="100"/> -->
       <!-- <el-table-column label="介绍信有效期" align="center" width="250">
         <template slot-scope="scope">
           <span>{{ scope.row.startTime}}~{{scope.row.endTime}}</span>
@@ -160,7 +160,7 @@ export default {
         reasons: null,
         status: null,
         requestFromWeb:true,
-        type:1,
+        type:2,
         orgId:this.$store.getters.orgId,
       },
       // 表单参数

+ 262 - 0
src/views/core/outIn/outInLog/dialog.approve.request.vue

@@ -0,0 +1,262 @@
+<template>
+  <div class="edu-training-edit">
+    <DialogCom
+      :title="title"
+      @close="onHide"
+      :visible.sync="isShow"
+      width="1000px"
+    >
+      <div class="page-body">
+        <el-form
+          ref="form"
+          :model="formData"
+          :rules="formDataRules"
+          label-width="120px"
+          label-suffix=":"
+        >
+          <el-row>
+            <el-col :span="24">
+              <el-form-item label="介绍信类型">
+              <dict-tag :options="dict.type.out_in_type" :value="formData.letterType"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="介绍信编号">
+              {{formData.letterNo}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="接待机构" prop="receptionOrgIds">
+                {{formData.orgName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="出入事由">
+              {{formData.letterReasons}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item  label="介绍信有效期">
+              {{formData.startTimeStr+'~'+formData.endTimeStr}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item  label="有效天数">
+                {{ formData.effectiveDays}}
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="24">
+              <el-form-item label="介绍信附件">
+                <image-file-list-preview v-model="formData.letterFile"></image-file-list-preview>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="24">
+              <el-form-item label="备注" prop="letterNo">
+                {{formData.letterDescription}}
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <el-row :gutter="10" >
+            <el-col :span="12">
+                <h3>
+                  <i class="el-icon-collection-tag"></i>
+                  人员信息
+                </h3>
+            </el-col>
+          </el-row>
+          <el-table border size="small" :data="formData.userInfos" height="300">
+                  <el-table-column label="序号"  align="center"  type="index" width="70" />
+                  <el-table-column label="申请单位" width="100" align="center" prop="companyName" />
+                  <el-table-column label="出入人员" width="100" align="center" prop="userName" />
+                  <el-table-column label="证件类型" width="100" align="center" prop="idType">
+                    <template slot-scope="scope">
+                    <dict-tag :options="dict.type.letter_id_type" :value="scope.row.idType"/>
+                  </template>
+                  </el-table-column>
+                  <el-table-column label="证件号码" width="200" align="center" prop="idCard">
+                  </el-table-column>
+                  <el-table-column label="证件图片" align="center" prop="imgFile">
+                    <template slot-scope="scope">
+                            <ImageListPreview v-model="scope.row.imgFile"></ImageListPreview>
+                          </template>
+                    </el-table-column>
+          </el-table>
+          <el-row :gutter="10">
+            <el-col :span="12">
+                <h3>
+                  <i class="el-icon-collection-tag"></i>
+                  审批信息
+                </h3>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="审批操作" prop="approveStatus">
+                <el-radio v-model="formData.approveStatus" label="1">同意</el-radio>
+                <el-radio v-model="formData.approveStatus" label="2">不同意</el-radio>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="审批说明" prop="approveRemark">
+                <el-input
+                  v-model="formData.approveRemark"
+                  placeholder="请输入审批说明"
+                  maxlength="100"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="onHide">取 消</el-button>
+      </div>
+    </DialogCom>
+  </div>
+</template>
+<script>
+import { mapState, mapMutations } from "vuex";
+import {
+  // getLetter,
+  getOutInRequest,
+  approveOutInRequest,
+} from "@/api/core/letter";
+import KFileUpload from "@/components/K-FileUpload/index.vue";
+import dayjs from "dayjs";
+import imgUpload from "@/components/ImageUpload";
+import DataRangePicker from "@/components/dateTime/daterange.picker.vue";
+import imageFileListPreview from "@/components/ImageFileListPreview/index.vue";
+export default {
+  components: {imageFileListPreview, KFileUpload, imgUpload,DataRangePicker },
+  data() {
+    const params = this.$route.params;
+    return {
+      id: params ? params.id : null,
+      isShow: false,
+      title: "出入事项审批",
+      formData: this.reset(),
+      formDataRules: {
+        approveStatus: [{ required: true, message: "请勾选审批结果" }],
+      },
+      formFileListDefualtValue: [],
+    };
+  },
+  dicts: ['out_in_type','letter_id_type'],
+  props: {},
+  watch: {},
+  created() {},
+  computed: {
+    ...mapState(["loginUser", "org"]),
+  },
+  methods: {
+    ...mapMutations([]),
+    reset(other = {}) {
+      return {
+        id: null,
+        reasons: null,
+        letterNo:null,
+        receptionOrgIds: [],
+        range:[],
+        description: null,
+        letterFile: [],
+        userInfos: [],
+        type:null,
+        approveRemark:null,
+        approveStatus:null,
+        approveSignImg:null,
+        ...other,
+      };
+    },
+    // checkApprove(rule,value,callback)
+    // {
+    //   console.log("checkApprove rule",rule);
+    //   console.log("checkApprove value",value);
+    //   console.log("checkApprove callback",callback);
+    // },
+    async show(id, signImg,other = {}) {
+      if (id) {
+        this.title = "出入事项审批";
+        this.isShow = true;
+        getOutInRequest(id).then((response) => {
+          // let tempRange=[];
+          // tempRange.push(dayjs(response.data.startTime));
+          // tempRange.push(new Date(response.data.endTime));
+          // response.data.range=tempRange;
+          this.formData = response.data;
+          this.formData.approveStatus = "1";
+          this.formData.approveSignImg = signImg;
+          this.formFileListDefualtValue=this.formData.letterFile;
+        });
+      }
+      else
+      {
+        this.isShow = true;
+        this.title = "录入介绍信";
+        this.formData = this.reset();
+      }
+    },
+    handleAddUser() {
+      this.open = true;
+    },
+    imageListChanged(list) {
+      this.userInfo.imgFile = list;
+    },
+    endDisabledDate(time) {
+      //小于开始日期禁止选择
+      let startDate = new Date();
+      startDate.setTime(startDate.getTime() - 3600 * 1000 * 24);
+      if (this.formData.trainingStartDateTime) {
+        startDate = new Date(
+          dayjs(this.formData.trainingStartDateTime).format("YYYY-MM-DD")
+        );
+        startDate.setTime(startDate.getTime() - 3600 * 1000 * 24);
+      }
+      return time.getTime() < new Date(startDate).getTime();
+    },
+    startDateChanged(time) {
+      if (
+        dayjs(this.formData.startTime).isAfter(dayjs(this.formData.endTime))
+      ) {
+        this.formData.endTime = this.formData.startTime;
+      }
+    },
+    endDateChanged(time) {
+      if (
+        dayjs(this.formData.startTime).isAfter(dayjs(this.formData.endTime))
+      ) {
+        this.formData.startTime = this.formData.endTime;
+      }
+    },
+    onHide() {
+      this.isShow = false;
+      this.formData = this.reset();
+      this.$refs["upload"].clearFiles();
+    },
+
+    submitForm() {
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          let  {approveRemark,approveStatus,id,approveSignImg} = this.formData;
+          let tempRquest={approveRemark,approveStatus,id:id,approveSignImg};
+
+          approveOutInRequest(tempRquest).then((response) => {
+              this.$modal.msgSuccess("提交成功");
+              this.isShow = false;
+              this.formData = this.reset();
+              this.$emit("success", this.formData);
+            });
+        }
+      });
+    },
+  },
+  mounted() {},
+};
+</script>
+
+
+
+

+ 49 - 12
src/views/core/outIn/outInLog/dialog.outIn.detail.vue

@@ -1,10 +1,10 @@
 <template>
-  <div class="edu-training-edit">
+  <div class="outInDetail">
     <DialogCom
       :title="title"
       @close="onHide"
       :visible.sync="isShow"
-      width="1000px"
+      width="1200px"
     >
       <div class="page-body">
         <el-descriptions
@@ -15,7 +15,7 @@
           :label-style="labelStyle"
           :contentStyle="content_style"
         >
-          <el-descriptions-item label="介绍信类型">
+          <el-descriptions-item label="出入类型">
             <dict-tag :options="dict.type.out_in_type" :value="formData.letterType" />
           </el-descriptions-item>
           <el-descriptions-item label="介绍信编号">{{
@@ -31,16 +31,26 @@
              formData.startTime
              +'~' + formData.endTime
           }}</el-descriptions-item>
-          <!-- <el-descriptions-item label="开始日期">{{
-            formData.startTime
-          }}</el-descriptions-item> -->
+         
           <el-descriptions-item label="有效天数">{{
             formData.effectiveDays
           }}</el-descriptions-item>
-          <el-descriptions-item label="申请单位">{{
-            formData.companyName
+           <el-descriptions-item label="申请时间">{{
+            formData.createTime
+          }}</el-descriptions-item>
+           <el-descriptions-item label="审批时间">{{
+            formData.approveTime
           }}</el-descriptions-item>
-          <el-descriptions-item label="出入人员">{{
+          <el-descriptions-item label="审批说明">{{
+            formData.approveRemark
+          }}</el-descriptions-item>
+           <el-descriptions-item label="状态">
+             <dict-tag :options="dict.type.out_in_request_status" :value="formData.status" />
+          </el-descriptions-item>
+          <!-- <el-descriptions-item label="申请单位">{{
+            formData.companyName
+          }}</el-descriptions-item> -->
+          <!-- <el-descriptions-item label="出入人员">{{
             formData.userName
           }}</el-descriptions-item>
           <el-descriptions-item label="证件类型">
@@ -57,7 +67,7 @@
           }}</el-descriptions-item>
           <el-descriptions-item label="离开时间">{{
             formData.departureTime
-          }}</el-descriptions-item>
+          }}</el-descriptions-item> -->
           <el-descriptions-item label="介绍信附件" span="2">
             <image-file-list-preview v-model="formData.letterFile"></image-file-list-preview>
           </el-descriptions-item>
@@ -66,12 +76,30 @@
           </el-descriptions-item> -->
           <el-descriptions-item label="备注">
             <div>{{formData.remark}}</div>
-            <ImageListPreview v-model="formData.checkImage"></ImageListPreview>            
+            <ImageListPreview v-model="formData.remarkImage"></ImageListPreview>            
           </el-descriptions-item>
 <!--          <el-descriptions-item label="登记签名" span="2" labelClassName="gx_info_label">
             <ImageListPreview v-model="formData.submitSign"></ImageListPreview>
           </el-descriptions-item>-->
         </el-descriptions>
+        <el-table v-if="formData.userInfos && formData.userInfos.length > 0" :data="formData.userInfos" style="width: 100%;margin-bottom:20px;" border>
+          <el-table-column align="center" prop="companyName" width="178" label="申请单位" />
+          <el-table-column align="center" prop="userName" width="140" label="出入人员" />
+          <el-table-column align="center" prop="idType" width="100" label="证件类型" >
+            <template slot-scope="scope">
+              <dict-tag :options="dict.type.letter_id_type" :value="scope.row.idType"/>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="idCard" width="180" label="证件号码" />
+          <el-table-column align="center" prop="imgFile" width="240" label="证件照片">
+            <template slot-scope="scope">
+              <ImageListPreview width="80px" height="80px" v-model="scope.row.imgFile"></ImageListPreview>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="arrivalTime" width="160" label="进入时间" />
+          <el-table-column align="center" prop="departureTime" width="160" label="离开时间" />
+          
+        </el-table>
       </div>
       <div slot="footer" class="dialog-footer">
         <el-button @click="onHide">关 闭</el-button>
@@ -114,7 +142,7 @@ export default {
       formFileListDefualtValue: [],
     };
   },
-  dicts: ["out_in_type", "letter_id_type",],
+  dicts: ["out_in_type", "letter_id_type","out_in_request_status"],
   props: {},
   watch: {},
   created() {},
@@ -210,3 +238,12 @@ export default {
   mounted() {},
 };
 </script>
+<style lang="scss">
+.outInDetail{
+  .el-table thead > tr > th
+  {
+    background-color: #d7d7d7 !important
+  }
+
+}
+</style>

+ 128 - 21
src/views/core/outIn/outInLog/index.vue

@@ -48,10 +48,10 @@
                   @keyup.enter.native="handleQuery"
                 />
               </el-form-item>
-              <el-form-item label="介绍信类型" prop="type">
+              <el-form-item label="出入类型" prop="type">
                 <el-select
                   v-model="queryParams.type"
-                  placeholder="请选择介绍信类型"
+                  placeholder="请选择出入类型"
                   clearable
                 >
                   <el-option
@@ -62,7 +62,21 @@
                   />
                 </el-select>
               </el-form-item>
-              <el-form-item class="searchTitle" prop="rangen" label="出入时间">
+              <el-form-item label="出入状态" prop="status">
+                <el-select
+                  v-model="queryParams.status"
+                  placeholder="请选择介绍信类型"
+                  clearable
+                >
+                  <el-option
+                    v-for="dict in dict.type.out_in_request_status"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item class="searchTitle" prop="rangen" label="申请时间">
                 <DataRangePicker
                   v-model="queryParams.range"
                   key="daterange"
@@ -92,6 +106,15 @@
                 </el-button
                 >
               </el-col>
+              <el-col :span="1.5">
+                <el-button
+                  type="primary"
+                  icon="el-icon-download"
+                  size="mini"
+                  @click="handleExport"
+                  >导出数据</el-button
+                >
+              </el-col>
               <right-toolbar
                 :showSearch.sync="showSearch"
                 @queryTable="getList"
@@ -100,21 +123,21 @@
           </div>
           <el-table
             v-loading="loading"
-            height="646"
+            height="546"
             border
             size="small"
             :data="outInRecrodList"
           >
-            <el-table-column
+            <!-- <el-table-column
               label="申请单位"
               prop="companyName"
               align="center"
               width="180"
               :show-overflow-tooltip="true"
-            />
+            /> -->
             <el-table-column
               label="出入人员"
-              prop="userName"
+              prop="userNames"
               align="center"
               width="180"
               :show-overflow-tooltip="true"
@@ -125,18 +148,23 @@
                     <dict-tag :options="dict.type.letter_id_type" :value="scope.row.idType"/>
                   </template>
           </el-table-column> -->
-            <el-table-column
+            <!-- <el-table-column
               label="证件号码"
               prop="idCard"
               align="center"
               width="180"
-            />
-
+            /> -->
             <el-table-column
-              label="介绍信类型"
+                label="介绍信编号"
+                prop="letterNo"
+                align="center"
+                width="140"
+              />
+            <el-table-column
+              label="出入类型"
               align="center"
               prop="letterType"
-              width="110"
+              width="100"
             >
               <template slot-scope="scope">
                 <dict-tag
@@ -153,10 +181,37 @@
               prop="letterReasons"
             />
             <el-table-column
+              label="出入状态"
+              align="center"
+              prop="status"
+              width="100"
+            >
+              <template slot-scope="scope">
+                <dict-tag
+                  :options="dict.type.out_in_request_status"
+                  :value="scope.row.status"
+                />
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="申请时间"
+              align="center"
+              prop="createTime"
+              width="180"
+            >
+            </el-table-column>
+            <!-- <el-table-column
+              label="审核时间"
+              align="center"
+              prop="approveTime"
+              width="180"
+            >
+            </el-table-column> -->
+            <el-table-column
               label="地区"
               align="center"
               prop="affiliatedArea"
-              width="180"
+              width="100"
             >
             </el-table-column>
             <el-table-column
@@ -173,7 +228,7 @@
               width="180"
             >
             </el-table-column>
-            <el-table-column
+            <!-- <el-table-column
               label="出入时间"
               align="center"
               width="420"
@@ -193,7 +248,7 @@
                     )
                   }}</span>
               </template>
-            </el-table-column>
+            </el-table-column> -->
             <!-- <el-table-column label="核验结果" width="250" align="center" prop="checkImage">
                     <template slot-scope="scope">
                       <ImageListPreview v-model="scope.row.imgFile"></ImageListPreview>
@@ -217,11 +272,21 @@
             >
               <template slot-scope="scope">
                 <el-button
+                  v-if="scope.row.status==0"
+                  size="mini"
+                  type="text"
+                  icon="el-icon-view"
+                  @click="handleApproveRequest(scope.row)"
+                  v-hasPermi="['core:outinrequest:approve']"
+                >审批
+                </el-button>
+                <el-button
+                  v-if="scope.row.status!=0"
                   size="mini"
                   type="text"
                   icon="el-icon-view"
                   @click="handleDetailInfo(scope.row)"
-                  v-hasPermi="['core:record:list']"
+                  v-hasPermi="['core:outinrequest:list']"
                 >详情
                 </el-button>
                 <el-button
@@ -249,6 +314,7 @@
             ref="dialogDetail"
             @success="handleQuery(true)"
           ></dialog-out-in-detail>
+          <dialog-approve-request ref="dialogApproveRequest" @success="handleQuery(true)"></dialog-approve-request>
         </div>
       </el-col>
     </el-row>
@@ -256,18 +322,19 @@
 </template>
 
 <script>
-import {outInRecordList} from "@/api/core/letter";
+import {outInRequestList} from "@/api/core/letter";
 import KFileUpload from "@/components/K-FileUpload/index.vue";
 import dayjs from "dayjs";
 import OrgTree from "@/components/orgTree/orgQuerySelector.vue";
 import DataRangePicker from "@/components/dateTime/daterange.picker.vue";
+import dialogApproveRequest from "./dialog.approve.request.vue";
 import dialogOutInDetail from "./dialog.outIn.detail.vue";
 import {mapGetters} from "vuex";
 import {imageUrl} from "@/utils/ruoyi";
-
+import {getInfo} from "@/api/login";
 export default {
-  components: {OrgTree, KFileUpload, DataRangePicker, dialogOutInDetail},
-  dicts: ["letter_status", "out_in_type"],
+  components: {OrgTree, KFileUpload, DataRangePicker, dialogOutInDetail,dialogApproveRequest},
+  dicts: ["letter_status", "out_in_type","out_in_request_status"],
   name: "outInLog",
   data() {
     return {
@@ -296,6 +363,7 @@ export default {
         checkSub: true,
         userName: null,
         type: null,
+        status: null,
         range: [],
         orgId: this.$store.getters.orgId,
       },
@@ -303,6 +371,7 @@ export default {
       form: {},
       // 表单校验
       rules: {},
+      selectedOrgName: null,
     };
   },
   created() {
@@ -316,7 +385,7 @@ export default {
     /** 查询介绍信列表 */
     getList() {
       this.loading = true;
-      outInRecordList(this.queryParams).then((response) => {
+      outInRequestList(this.queryParams).then((response) => {
         this.outInRecrodList = response.rows;
         this.total = response.total;
         this.loading = false;
@@ -341,8 +410,32 @@ export default {
       this.queryParams.range = ['',''];
       this.handleQuery();
     },
+     /** 导出按钮操作 */
+     handleExport() {
+      if (this.total==null || this.total===0){
+        this.$modal.alert("暂无可用数据导出");
+        return;
+      }
+      if (this.total>50000){
+        this.$modal.alert("导出数据超过5万条,请缩小查询范围后重试");
+        return;
+      }
+      this.download(
+        "core/letter/outinrequest/export",
+        {
+          ...this.queryParams,
+        },
+        `${
+          this.selectedOrgName
+        }-${this.$tab.getCurrentTabName()}-${dayjs().format("YYYYMMDD")}.xlsx`
+      );
+    },
     getDefaultKey(key) {
+      console.log("getDefaultKey",key);
+      // this.queryParams.orgId = org.id;
+      // this.selectedOrgName = org.shortName;
       this.queryParams.orgId = key;
+      // this.selectedOrgName = org.shortName;
       this.getList();
     },
     //单选框状态改变
@@ -353,12 +446,26 @@ export default {
     // 节点单击事件
     clickTreeNode(data) {
       // this.initPlanRoleList();
+      this.selectedOrgName = data.shortName;
       this.queryParams.orgId = data.id;
       this.handleQuery();
     },
     handleDetailInfo(row) {
       this.$refs["dialogDetail"].show(row.id);
     },
+    handleApproveRequest(row) {
+      getInfo().then((res) => {
+        const user = res.user;
+        if (user.signatureSeal ==='' || user.signatureSeal === null){
+          this.$modal.alert("用户尚未配置个人签名印章,请先至App端【我的】页面新增签名印章。");
+        }else {
+          this.$refs["dialogApproveRequest"].show(row.id, user.signatureSeal,{});
+        }
+      })
+        .catch((error) => {
+          //reject(error);
+        });
+    },
     async onDown(pdfUrl) {
       // const data = await this.$api.eduTraining.predown(id);
       window.open(imageUrl(pdfUrl));

+ 11 - 6
src/views/index.vue

@@ -210,7 +210,7 @@ export default {
           },
         },
         {
-          name: "出入审批",
+          name: "出入管理",
           path: "/Introduce/core/letter/approve",
           query: {
             approveStatus: 0,
@@ -254,6 +254,7 @@ export default {
     clickNum(item) {
       let page = this.pageList.find((v) => v.name === item.taskTypeText);
       let authStr = "";
+      let authArry = [];
       let menuName = "";
       switch (item.taskTypeText) {
         case "安全检查": //安全检查
@@ -268,9 +269,9 @@ export default {
           authStr = "core:eduTask:list";
           menuName = "培训登记跟踪";
           break;
-        case "出入审批": //
-          authStr = "core:letter:approveList";
-          menuName = "出入事项审批";
+        case "出入管理": //
+          authArry = ["core:outinrequest:approve","core:outinrequest:edit"];          
+          menuName = "出入事项登记或审批";
           break;
         case "隐患问题": //
           authStr = "question:list";
@@ -281,8 +282,12 @@ export default {
           menuName = "整改情况跟踪";
           break;
       }
-
-      if (!checkPermi([authStr])) {
+      var auths=[authStr];
+      if (authArry.length > 0) {
+        auths=authArry;
+      }
+      console.log(auths, "auths");
+      if (!checkPermi(auths)) {
         this.$alert(`您没有${menuName}的权限,请联系管理员!`, "提示");
         return;
       }